@glyphteck/veyl 0.68.0 → 0.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/cli.md CHANGED
@@ -10,7 +10,7 @@ Run `veyl help` for the live inventory. The command families are summarized belo
10
10
  veyl namespace init
11
11
  ```
12
12
 
13
- This one-time owner command creates `~/.veyl/namespace.seed` with mode `0600` and prints only its public key and fingerprint. It never prints the private seed. `veyl account create @name --reserved` signs a short-lived reserved-name claim for the exact new machine credential. The explicit flag prevents ordinary account creation from disclosing an unnecessary namespace-owner signature. The fleet owner detects the same file under its `homeDir` because a Glyphteck-operated fleet is already public operator context. Ordinary installations without the trusted seed cannot claim a reserved username.
13
+ This one-time owner command creates `~/.veyl/namespace.seed` with mode `0600` and prints only its public key and fingerprint. It never prints the private seed. `veyl account create @name --reserved` signs a short-lived reserved-name claim for the exact new machine credential. The explicit flag prevents ordinary account creation from disclosing an unnecessary namespace-owner signature. The fleet owner detects the same file under its `homeDir` because a Veyl-managed fleet is already public operator context. Ordinary installations without the trusted seed cannot claim a reserved username.
14
14
 
15
15
  The namespace seed is not accepted through a command argument, environment variable, profile, or fleet manifest. Back up the file offline; losing it removes the ability to authorize another reserved account.
16
16
 
@@ -63,7 +63,7 @@ veyl peers block @alice
63
63
  veyl peers unblock @alice
64
64
  ```
65
65
 
66
- Blocking yourself is rejected. Blocking deletes the canonical direct chat and leaves every decrypted group containing that UID. A future successor containing the block is dropped locally; no readable server membership graph exists.
66
+ Blocking yourself is rejected. Blocking independently submits a narrow user report, deletes the canonical direct chat, and leaves every decrypted group containing that UID. Report failure does not prevent the block and is exposed separately in the command result. A future successor containing the block is dropped locally; no readable server membership graph exists.
67
67
 
68
68
  ## Chat
69
69
 
@@ -150,7 +150,7 @@ veyl wallet search @alice
150
150
  ```bash
151
151
  veyl lightning invoice 10 --memo "coffee" --expiry 3600
152
152
  veyl lightning quote INVOICE [--amount SATS]
153
- veyl lightning pay INVOICE [--amount SATS] [--max-fee SATS] [--idempotency-key KEY] [--operation-id AGENT_JOB_ID]
153
+ veyl lightning pay INVOICE [--amount SATS] [--max-fee SATS] [--transfer-id UUID]
154
154
  veyl lightning receive ID
155
155
  veyl lightning send ID
156
156
 
@@ -161,7 +161,7 @@ veyl withdrawal confirm ADDRESS SATS [--speed MEDIUM] [--fee-quote-id ID --fee-a
161
161
 
162
162
  `withdrawal quote` and `withdrawal prepare` do not spend or broadcast, but the Spark SDK may restructure wallet leaves while producing an exact quote. Pass both reviewed `feeQuoteId` and `feeAmountSats` back to `withdrawal confirm`; omitting both requests a fresh quote, while providing only one is rejected. `withdrawal confirm` performs the spend.
163
163
 
164
- Money commands print stable `code`, `operation`, `operationId`, `outcome`, and `retryable` fields when the SDK cannot determine whether a mutation committed. Do not replay a result with `code: "operation_outcome_unknown"` unless `retryable` is true. Today that is true only for Lightning when the exact same `--idempotency-key` can be reused; otherwise reconcile wallet history first.
164
+ Money commands print stable `code`, `operation`, `operationId`, `outcome`, and `retryable` fields when the SDK cannot determine whether a mutation committed. Do not replay a result with `code: "operation_outcome_unknown"` unless `retryable` is true. Today that is true only for Lightning: reuse the returned `operationId` as the exact same `--transfer-id`; otherwise reconcile wallet history first.
165
165
 
166
166
  ## Invites
167
167
 
@@ -28,7 +28,7 @@ CLI paths and persistent-session dispatch come from `src/commands.js`. Both one-
28
28
 
29
29
  The canonical registry defines 78 CLI commands, 70 persistent-session product commands, and 16 command groups. Wallet mnemonic export and passkey-link creation stay one-shot CLI/JavaScript API only; the namespace key, session owner, and documentation resource process controls also remain CLI-only. Registry coverage checks map every enabled session command and real CLI path to its declared public client method, with `chat.reactTo` retained only as a JavaScript convenience alias over the same reaction operation.
30
30
 
31
- Focused contract coverage mounts the real framework-free chat route through the public SDK runtime, verifies live projection, explicit leave, and manual/disabled read policy, and exercises persistent-session streaming plus abort-driven embedding shutdown. Agent-listener coverage proves a changed conversation uses a transient message window and releases it instead of retaining one listener per loaded chat, including a 500-chat requested window. Replay coverage expands older pages until a per-chat checkpoint is found, then emits only the newer messages. New-chat admission coverage uses real MLS Welcomes to prove a frozen public callback boundary, block precedence, fail-closed decisions, prekey cleanup, and established-chat bypass. The packaged single-agent example proves pinned owner filtering, default Node live transport, stable typing-to-message composition, deterministic final delivery, app-server JSONL/backpressure/errors, steering, owner-only state, and completed-turn recovery. Fleet coverage opens fake public clients under bounded concurrency, tags their events, runs policies, and proves all account and policy lifecycles close. Root coverage proves stable isolated account derivation, monotonically indexed recovery, and owner-only seed storage; manifest and profile coverage rejects or omits per-account secrets. Namespace coverage proves the local private seed is mode `0600`, never returned by initialization, and produces a claim that verifies only for its exact username, machine credential, and expiry; it also keeps the generated Functions trust anchor aligned with the shared public key. Local-owner coverage proves a second healthy process is never replaced and a dead same-host PID lock can be reclaimed without signaling it. The bounded event checkpoint persists processed IDs and baseline policy coverage proves historical messages are recorded without bot behavior. Action-journal coverage proves completed effects survive restart, replay-safe chat actions can reuse their deterministic CID, interrupted money actions stop for reconciliation, and a replayed faucet request is paid and mirrored once. The canonical Glyphteck runtime now consumes the packaged fleet example through ordinary SDK clients; remaining live fleet observations belong only in the root manual queue.
31
+ Focused contract coverage mounts the real framework-free chat route through the public SDK runtime, verifies live projection, explicit leave, and manual/disabled read policy, and exercises persistent-session streaming plus abort-driven embedding shutdown. Agent-listener coverage proves a changed conversation uses a transient message window and releases it instead of retaining one listener per loaded chat, including a 500-chat requested window. Replay coverage expands older pages until a per-chat checkpoint is found, then emits only the newer messages. Chat-admission coverage uses real MLS Welcomes to prove a frozen public callback boundary, block precedence, fail-closed decisions, prekey cleanup, and ongoing enforcement for established chats without automatic delete or leave events. The packaged single-agent example proves pinned owner filtering, default Node live transport, stable typing-to-message composition, deterministic final delivery, app-server JSONL/backpressure/errors, steering, owner-only state, and completed-turn recovery. Fleet coverage opens fake public clients under bounded concurrency, tags their events, runs policies, and proves all account and policy lifecycles close. Root coverage proves stable isolated account derivation, monotonically indexed recovery, and owner-only seed storage; manifest and profile coverage rejects or omits per-account secrets. Namespace coverage proves the local private seed is mode `0600`, never returned by initialization, and produces a claim that verifies only for its exact username, machine credential, and expiry; it also keeps the generated Functions trust anchor aligned with the shared public key. Local-owner coverage proves a second healthy process is never replaced and a dead same-host PID lock can be reclaimed without signaling it. The bounded event checkpoint persists processed IDs and baseline policy coverage proves historical messages are recorded without bot behavior. Action-journal coverage proves completed effects survive restart, replay-safe chat actions can reuse their deterministic CID, interrupted money actions stop for reconciliation, and a replayed faucet request is paid and mirrored once. The canonical Veyl-managed runtime now consumes the packaged fleet example through ordinary SDK clients; remaining live fleet observations belong only in the root manual queue.
32
32
 
33
33
  Run `bun check:sdk` from the repository root to validate the exact public package artifact without mutating the intentionally versionless source manifest. The check builds the SDK, stamps the root product version into a temporary copy, dry-run packs it, verifies the required public runtime entries, documentation, fleet example, and single-account connector, and rejects private source or tests.
34
34
 
@@ -1,6 +1,6 @@
1
1
  # SDK bot fleet example
2
2
 
3
- This is a reference implementation of a long-lived multi-account agent fleet built entirely on `@glyphteck/veyl`. It uses no Firebase Admin connection, privileged chat path, server action queue, or cloud secret store. The Glyphteck-owned runtime under `bots` consumes this policy with its own local lineup and operator controls.
3
+ This is a reference implementation of a long-lived multi-account agent fleet built entirely on `@glyphteck/veyl`. It uses no Firebase Admin connection, privileged chat path, server action queue, or cloud secret store. The Veyl-managed runtime under `bots` consumes this policy with its own local lineup and operator controls.
4
4
 
5
5
  The secret-free version-2 manifest stores account indices, usernames, networks, roles, and enabled state. One owner-only root at `$VEYL_HOME/fleets/<name>.seed` derives isolated account keys, vault keys, and Veyl master seeds for monotonic account indices. Per-account private material is never stored in the manifest.
6
6
 
@@ -77,7 +77,7 @@ Use a process supervisor appropriate to the host. The process handles `SIGINT` a
77
77
 
78
78
  The configured owner is allowed by username only during first resolution. The connector then pins the owner's stable Veyl uid and chat public key and publishes `direct: closed`, `groups: closed`, plus one opaque direct grant for that owner. Closed accounts disappear from other clients' new-chat and group-invite choices, while the private pair capability still lets the owner start the direct chat. The fixed-size public grant set does not reveal which account is allowed.
79
79
 
80
- Veyl's existing blocklist remains authoritative and is checked first. Blocking the owner therefore rejects the chat even though the owner has a grant. The local identity check then admits only a signed/decrypted two-member direct Welcome from the pinned owner; groups and every other sender fail closed before owner-row persistence. Existing established chats and chats this account starts outbound are not invalidated by the admission policy, but this example's event loop responds only to the pinned owner.
80
+ Veyl's existing blocked-user state remains authoritative and is checked first. Blocking the owner therefore rejects the chat even though the owner has a grant. The local identity check admits only the pinned owner's signed/decrypted two-member direct traffic. The published closed policy is ongoing rather than creation-only: Veyl hides disallowed existing chats and rejects ungranted open, materialize, send, and receive paths without deleting a direct or leaving a group. This account can converse only with the granted owner.
81
81
 
82
82
  For each accepted owner message, the process enters the ordinary encrypted live room and stays present for the process lifetime. It publishes a stable composition id while Codex streams, renews the writing lease, stops typing at completion, and sends the durable final with the same composition id so the temporary writing row becomes the final response in place.
83
83
 
package/package.json CHANGED
@@ -53,5 +53,5 @@
53
53
  "start": "node src/cli.js",
54
54
  "lint": "eslint src --quiet"
55
55
  },
56
- "version": "0.68.0"
56
+ "version": "0.70.0"
57
57
  }