@uxnan/shared 0.0.8-alpha.20260720 → 0.0.10-alpha.20260724

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/README.md CHANGED
@@ -52,7 +52,7 @@ flowchart TB
52
52
  | JSON-RPC | envelope types + constructors (`makeRequest`, `makeNotification`, `makeResponse`, `makeErrorResponse`), error codes (`JsonRpcErrorCode` + Uxnan-specific `-32000..-32008`), `RpcError`, typed method registry (`JsonRpcMethodRegistry` + `METHOD_NAMES`), `isKnownMethod` |
53
53
  | Streaming | `StreamNotification` enum + param types (`TurnStartedParams`, `MessageDeltaParams`, `ThinkingDeltaParams`, `ContentBlockParams`, `TurnCompletedParams`, `TurnUsage`, `TurnErrorParams`, `TurnAbortedParams`, `ModelResolvedParams`) |
54
54
  | E2EE | handshake messages (`clientHello` / `serverHello` / `clientAuth` / `ready`), `buildHandshakeTranscript`, `SecureEnvelope`, `PairingPayload` v2 (`relay` optional + `hosts: string[]`) with `Base64(utf8(JSON))` QR encoding |
55
- | Models | thread / turn / message (with `MessageContent` polymorphic blocks), git, workspace (incl. `browseDirs` + `exists`), project, auth, session/trust (`BridgeStatus` incl. `latestVersion?`/`updateAvailable?`), approval, question (interactive multiple-choice) |
55
+ | Models | thread / turn / message (with `MessageContent` polymorphic blocks), git, workspace (incl. `browseDirs` + `exists`), project, auth, session/trust (`BridgeStatus` incl. `latestVersion?`/`updateAvailable?`), bridge-owned profile metrics (complete-ledger export/import), approval, question (interactive multiple-choice) |
56
56
  | Agents | `IAgentAdapter` (with `respondApproval`, `listModels`, `nativeSessionId`, `SendTurnOptions { threadId, turnId, text, service?, effort?, options?, attachments?, cwd?, accessMode? }`), `AgentModel` (incl. `version?`, `isDefault?`, `options?`, `contextWindow?`, `isLatestAlias?`), `AgentCapabilities` (incl. `images`, `approvals`, `reportsContextUsage`), `AgentConfig` (cwd, agentId, model, plus optional `binaryPath`/`extraArgs`) |
57
57
  | Version | `compareVersions` / `isNewerVersion` — dependency-free SemVer precedence (used by the bridge's npm update check) |
58
58
  | Validation | Ajv validators for requests, responses, envelopes, pairing payload, push payloads |
@@ -91,8 +91,8 @@ export interface AgentModelOption {
91
91
  * A selectable model an agent reports, returned by `agent/models`.
92
92
  *
93
93
  * `id` is the wire value passed back to the agent for routing — a stable alias
94
- * for Claude Code (`opus`/`sonnet`/`haiku`), a `provider/model` id for OpenCode,
95
- * or a concrete model id for Codex. `displayName`, `description`, `version` and
94
+ * for Claude Code (`fable`/`opus`/`sonnet`/`haiku`), a `provider/model` id for
95
+ * OpenCode, or a concrete model id for Codex. `displayName`, `description`, `version` and
96
96
  * `isDefault` are presentation hints; consumers must tolerate any of them being
97
97
  * absent (older bridges report bare id strings).
98
98
  */
@@ -105,7 +105,7 @@ export interface AgentModel {
105
105
  description?: string;
106
106
  /**
107
107
  * Concrete underlying version when `id` is an alias that resolves to a
108
- * moving target — e.g. Claude Code's `opus` → `claude-opus-4-8`. Surfaced so
108
+ * moving target — e.g. Claude Code's `opus` → `claude-opus-5`. Surfaced so
109
109
  * the user can see which exact model an alias currently maps to.
110
110
  */
111
111
  version?: string;
@@ -125,11 +125,12 @@ export interface AgentModel {
125
125
  */
126
126
  contextWindow?: number;
127
127
  /**
128
- * Marks a moving-target "latest" alias (Claude Code's `opus`/`sonnet`/`haiku`,
129
- * each of which always routes to the newest version of that tier the account
130
- * can use — see {@link version} for the resolved concrete id). Concrete/pinned
131
- * models leave this absent. Presentation-only: lets a client offer to
132
- * hide the aliases and show exact versions only, without hardcoding ids.
128
+ * Marks a moving-target "latest" alias (Claude Code's
129
+ * `fable`/`opus`/`sonnet`/`haiku`, each of which always routes to the newest
130
+ * version of that tier the account can use — see {@link version} for the
131
+ * resolved concrete id). Concrete/pinned models leave this absent.
132
+ * Presentation-only: lets a client offer to hide the aliases and show exact
133
+ * versions only, without hardcoding ids.
133
134
  */
134
135
  isLatestAlias?: boolean;
135
136
  }
@@ -6,10 +6,10 @@
6
6
  * agents/models used, connection time, git actions, an activity heatmap). Those
7
7
  * were derived on the phone from local storage and so were lost on an app
8
8
  * uninstall (the app has no cloud login). To make them durable, the **bridge**
9
- * becomes the source of truth: it computes them from its own authoritative data
10
- * (the conversation store) plus persisted session + git-action event logs it
11
- * observes itself, and serves them over `metrics/get`. The phone renders one
12
- * snapshot per PC and sums across PCs.
9
+ * becomes the source of truth: it persists a complete activity ledger
10
+ * (conversations, turns/messages, reported tokens, sessions and Git actions)
11
+ * and serves it over `metrics/get`. Deleting mutable conversation history does
12
+ * not subtract activity. The phone renders one snapshot per PC and sums PCs.
13
13
  *
14
14
  * A `metrics/export` produces an opaque, tamper-proof file only the SAME bridge
15
15
  * can later verify + decrypt (AES-256-GCM under a secret held in the PC's OS
@@ -76,10 +76,9 @@ export interface MetricsActivityDay {
76
76
  }
77
77
  /**
78
78
  * Aggregated metrics for ONE PC (the bridge that returns it), built from the
79
- * bridge's own authoritative data: the conversation store (threads/turns) plus
80
- * its persisted session + git-action event logs. The phone renders this per PC
81
- * and sums across PCs for the all-PCs profile. Every field is a count the phone
82
- * cannot inflate — the bridge observes it. Source of `metrics/get`.
79
+ * bridge's durable activity ledger. The phone renders this per PC and sums
80
+ * across PCs for the all-PCs profile. Every field is a count the phone cannot
81
+ * inflate — the bridge observes and retains it. Source of `metrics/get`.
83
82
  */
84
83
  export interface MetricsSnapshot {
85
84
  /** Schema version, for forward-compatible parsing. */
@@ -123,7 +122,7 @@ export interface MetricsSnapshot {
123
122
  updatedAt: number;
124
123
  }
125
124
  /**
126
- * `metrics/export` request. The bridge seals its metrics event log into an
125
+ * `metrics/export` request. The bridge seals its complete metrics ledger into an
127
126
  * opaque, tamper-proof blob that only THIS same bridge can later verify +
128
127
  * decrypt (AES-256-GCM under a secret held in the OS keychain). An optional user
129
128
  * [passphrase] adds a second confidentiality layer (scrypt-derived), so a leaked
@@ -145,8 +144,8 @@ export interface MetricsExportResult {
145
144
  * `metrics/import` request. The phone sends back a previously exported [blob].
146
145
  * The bridge verifies it was sealed by THIS PC — a foreign or edited file is
147
146
  * rejected — decrypts it (using [passphrase] when the file was passphrase-locked)
148
- * and merges its events by id (idempotent: re-importing the same file changes
149
- * nothing). Returns the refreshed snapshot.
147
+ * and merges its ledger rows by id (idempotent: re-importing the same file
148
+ * changes nothing). Returns the refreshed snapshot.
150
149
  */
151
150
  export interface MetricsImportParams {
152
151
  /** The sealed blob produced by a prior `metrics/export` on this PC. */
@@ -155,7 +154,7 @@ export interface MetricsImportParams {
155
154
  passphrase?: string;
156
155
  }
157
156
  export interface MetricsImportResult {
158
- /** How many new session + git-action events were merged in. */
157
+ /** How many ledger rows were inserted or advanced. */
159
158
  imported: number;
160
159
  /** The refreshed snapshot after the merge. */
161
160
  snapshot: MetricsSnapshot;
@@ -6,10 +6,10 @@
6
6
  * agents/models used, connection time, git actions, an activity heatmap). Those
7
7
  * were derived on the phone from local storage and so were lost on an app
8
8
  * uninstall (the app has no cloud login). To make them durable, the **bridge**
9
- * becomes the source of truth: it computes them from its own authoritative data
10
- * (the conversation store) plus persisted session + git-action event logs it
11
- * observes itself, and serves them over `metrics/get`. The phone renders one
12
- * snapshot per PC and sums across PCs.
9
+ * becomes the source of truth: it persists a complete activity ledger
10
+ * (conversations, turns/messages, reported tokens, sessions and Git actions)
11
+ * and serves it over `metrics/get`. Deleting mutable conversation history does
12
+ * not subtract activity. The phone renders one snapshot per PC and sums PCs.
13
13
  *
14
14
  * A `metrics/export` produces an opaque, tamper-proof file only the SAME bridge
15
15
  * can later verify + decrypt (AES-256-GCM under a secret held in the PC's OS
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxnan/shared",
3
- "version": "0.0.8-alpha.20260720",
3
+ "version": "0.0.10-alpha.20260724",
4
4
  "description": "Shared JSON-RPC and E2EE contracts for the Uxnan ecosystem (bridge, relay, mobile).",
5
5
  "license": "MPL-2.0",
6
6
  "author": "Luis Donaldo Gamas Vazquez",