@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
|
|
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-
|
|
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
|
|
129
|
-
* each of which always routes to the newest
|
|
130
|
-
* can use — see {@link version} for the
|
|
131
|
-
* models leave this absent.
|
|
132
|
-
* hide the aliases and show exact
|
|
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
|
|
10
|
-
* (
|
|
11
|
-
*
|
|
12
|
-
* snapshot per PC and sums
|
|
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
|
|
80
|
-
*
|
|
81
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
10
|
-
* (
|
|
11
|
-
*
|
|
12
|
-
* snapshot per PC and sums
|
|
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.
|
|
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",
|