@seawork/sv
v0.1.1
Published
sv — SeaDB CLI & SDK (TypeScript)
Maintainers
Readme
@seaverse/sv
SeaDB CLI & TypeScript SDK — semantic document store with full-text search, version history, and Ed25519 device auth.
Install
npm install -g @seawork/sv # global CLI
npm install @seawork/sv # SDK in your projectCLI Quick Start
# Register this device (uses ~/.ssh/id_ed25519)
sv auth register --auto
# Documents
sv write kb/hello "My first note."
sv read kb/hello
sv edit kb/hello --section "Introduction" < new-intro.md
sv sed kb/hello 's/old/new/g'
sv append kb/hello "## Updates\nNew content."
sv delete -y kb/hello
# Search & list
sv search "rust async"
sv ls kb/
# Version history
sv log kb/hello
sv rollback kb/hello --version 42 # ID from 'sv log'
# Primitives
sv incr conv:123 seq
sv kv set config/theme dark
sv kv get config/theme
sv stream append events/feed '{"type":"click"}'
# Org
sv org create myteam
sv org invite myteam
sv auth join-org <invite_key>
sv whoamiEnvironment Variables
| Variable | Default | Description |
|-------------|--------------------------------------|--------------------------|
| SEADB_URL | https://api.seadb.seaverse.cloud | Server URL |
| SEADB_ORG | — | Default org for commands |
SDK Usage
import { request, cmdWrite, cmdRead, cmdSearch } from '@seawork/sv';
const client = { baseUrl: 'https://api.seadb.seaverse.cloud' };
// Write a document
await cmdWrite(client, 'kb/hello', { content: '---\ntitle: Hello\n---\nContent.' });
// Read it back
await cmdRead(client, 'kb/hello', {});
// Search
await cmdSearch(client, 'rust async', { limit: 10 });
// Raw HTTP request (authenticated)
const resp = await request(client, { method: 'GET', path: '/kb/hello' });
console.log(resp.text);Auth in SDK context
The SDK uses the same device identity as the CLI (~/.config/sv/). On first use it auto-registers via ~/.ssh/id_ed25519. For CI/headless environments:
import { cmdAuthRegister } from '@seawork/sv';
await cmdAuthRegister('https://api.seadb.seaverse.cloud', { auto: true, label: 'ci' });Or use sv auth delegate to create a scoped delegation token for CI.
Document Format
Documents are path-addressed Markdown with YAML frontmatter:
---
title: My Document
tags: [rust, async]
---
Content goes here.The title field is required. Plain-text writes get frontmatter injected automatically.
Path Namespaces
| Prefix | Scope |
|--------------|------------------------------|
| kb/ | Personal knowledge base |
| @myteam/ | Org namespace (with --org) |
| global/ | Read-only global namespace |
