@uxnan/shared 0.0.3-alpha.20260702 → 0.0.5-alpha.20260711
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 +3 -2
- package/dist/src/agents/agent-capabilities.d.ts +13 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/jsonrpc/method-registry.d.ts +1 -1
- package/dist/src/jsonrpc/method-registry.js +1 -0
- package/dist/src/jsonrpc/method-registry.js.map +1 -1
- package/dist/src/jsonrpc/methods.d.ts +12 -0
- package/dist/src/models/question.d.ts +54 -0
- package/dist/src/models/question.js +14 -0
- package/dist/src/models/question.js.map +1 -0
- package/dist/src/models/session.d.ts +12 -0
- package/dist/src/models/usage.d.ts +92 -0
- package/dist/src/models/usage.js +18 -0
- package/dist/src/models/usage.js.map +1 -0
- package/dist/src/version/compare.d.ts +24 -0
- package/dist/src/version/compare.js +116 -0
- package/dist/src/version/compare.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ equivalents (see
|
|
|
13
13
|
[`architecture/02b-contracts-and-requirements.md`](../architecture/02b-contracts-and-requirements.md)
|
|
14
14
|
§1 for the canonical contract list).
|
|
15
15
|
|
|
16
|
-
> **Status:** implemented and stable — **
|
|
16
|
+
> **Status:** implemented and stable — **62 JSON-RPC methods** + **8 streaming
|
|
17
17
|
> notifications**, kept lock-step at build time with the `METHOD_NAMES` array and
|
|
18
18
|
> the `StreamNotification` enum (a compile-time assertion in
|
|
19
19
|
> `src/jsonrpc/method-registry.ts` fails the build on any drift). Changes are
|
|
@@ -52,8 +52,9 @@ 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, approval |
|
|
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) |
|
|
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
|
+
| Version | `compareVersions` / `isNewerVersion` — dependency-free SemVer precedence (used by the bridge's npm update check) |
|
|
57
58
|
| Validation | Ajv validators for requests, responses, envelopes, pairing payload, push payloads |
|
|
58
59
|
|
|
59
60
|
## Usage
|
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Source: architecture/02a-system-architecture.md §5.8.2 (adapters).
|
|
5
5
|
*/
|
|
6
|
-
export type AgentId = 'codex' | 'opencode' | 'claude-code' | 'gemini-cli' | 'pi-agent'
|
|
6
|
+
export type AgentId = 'codex' | 'opencode' | 'claude-code' | 'gemini-cli' | 'pi-agent'
|
|
7
|
+
/** Zero — open-source Go coding agent, driven over the Agent Client Protocol. */
|
|
8
|
+
| 'zero'
|
|
9
|
+
/** Grok — xAI's coding CLI, driven over the Agent Client Protocol (`grok agent stdio`). */
|
|
10
|
+
| 'grok'
|
|
7
11
|
/** Built-in reference/dev agent that echoes the prompt (no external CLI). */
|
|
8
12
|
| 'echo';
|
|
9
13
|
export interface AgentCapabilities {
|
|
@@ -24,6 +28,14 @@ export interface AgentCapabilities {
|
|
|
24
28
|
* OpenCode) and the meter stays hidden.
|
|
25
29
|
*/
|
|
26
30
|
reportsContextUsage?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Agent runs in autonomous ("YOLO") mode by default — it acts and edits
|
|
33
|
+
* without per-action approval prompts because its headless CLI exposes no
|
|
34
|
+
* pre-tool approval channel. The phone surfaces this so the user knows Pi
|
|
35
|
+
* (and any such agent) will not ask before running tools. Optional; absent/
|
|
36
|
+
* false means the agent either gates tools or is pending approval wiring.
|
|
37
|
+
*/
|
|
38
|
+
autonomous?: boolean;
|
|
27
39
|
}
|
|
28
40
|
/**
|
|
29
41
|
* A registered agent the phone can pick for a thread, returned by `agent/list`.
|
package/dist/src/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export * from './e2ee/pairing-payload.js';
|
|
|
14
14
|
export * from './agents/agent-capabilities.js';
|
|
15
15
|
export * from './agents/agent-config.js';
|
|
16
16
|
export * from './agents/agent-adapter.js';
|
|
17
|
+
export * from './version/compare.js';
|
|
17
18
|
export * from './notifications/push-payload.js';
|
|
18
19
|
export * from './models/thread.js';
|
|
19
20
|
export * from './models/git.js';
|
|
@@ -21,5 +22,7 @@ export * from './models/workspace.js';
|
|
|
21
22
|
export * from './models/project.js';
|
|
22
23
|
export * from './models/session.js';
|
|
23
24
|
export * from './models/approval.js';
|
|
25
|
+
export * from './models/question.js';
|
|
26
|
+
export * from './models/usage.js';
|
|
24
27
|
export * from './validators/validate.js';
|
|
25
28
|
export * from './validators/json-schema/schemas.js';
|
package/dist/src/index.js
CHANGED
|
@@ -17,6 +17,8 @@ export * from './e2ee/pairing-payload.js';
|
|
|
17
17
|
export * from './agents/agent-capabilities.js';
|
|
18
18
|
export * from './agents/agent-config.js';
|
|
19
19
|
export * from './agents/agent-adapter.js';
|
|
20
|
+
// Version
|
|
21
|
+
export * from './version/compare.js';
|
|
20
22
|
// Notifications
|
|
21
23
|
export * from './notifications/push-payload.js';
|
|
22
24
|
// Models
|
|
@@ -26,6 +28,8 @@ export * from './models/workspace.js';
|
|
|
26
28
|
export * from './models/project.js';
|
|
27
29
|
export * from './models/session.js';
|
|
28
30
|
export * from './models/approval.js';
|
|
31
|
+
export * from './models/question.js';
|
|
32
|
+
export * from './models/usage.js';
|
|
29
33
|
// Validators
|
|
30
34
|
export * from './validators/validate.js';
|
|
31
35
|
export * from './validators/json-schema/schemas.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAE/B,WAAW;AACX,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,OAAO;AACP,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAE1C,SAAS;AACT,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAE1C,gBAAgB;AAChB,cAAc,iCAAiC,CAAC;AAEhD,SAAS;AACT,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,gBAAgB,CAAC;AAE/B,WAAW;AACX,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,OAAO;AACP,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAE1C,SAAS;AACT,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAE1C,UAAU;AACV,cAAc,sBAAsB,CAAC;AAErC,gBAAgB;AAChB,cAAc,iCAAiC,CAAC;AAEhD,SAAS;AACT,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,aAAa;AACb,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* compile-time {@link JsonRpcMethodRegistry} via the assertion below.
|
|
4
4
|
*/
|
|
5
5
|
import type { JsonRpcMethodName } from './methods.js';
|
|
6
|
-
export declare const METHOD_NAMES: readonly ["thread/list", "thread/read", "thread/start", "thread/resume", "thread/fork", "thread/setModel", "thread/rename", "thread/setAccessMode", "thread/archive", "thread/unarchive", "thread/delete", "turn/list", "turn/read", "turn/send", "turn/cancel", "git/status", "git/diff", "git/commit", "git/push", "git/pull", "git/checkout", "git/createBranch", "git/createWorktree", "git/stage", "git/unstage", "git/discard", "git/createPr", "git/undoCommit", "git/branches", "git/switchBranch", "git/revert", "git/deleteBranch", "git/removeWorktree", "git/log", "git/commitShow", "workspace/readFile", "workspace/readImage", "workspace/list", "workspace/searchFiles", "workspace/browseDirs", "workspace/checkpoint", "workspace/diffCheckpoint", "workspace/applyCheckpoint", "workspace/applyPatch", "workspace/exists", "project/list", "project/resolve", "agent/list", "agent/models", "auth/status", "auth/login", "auth/logout", "notifications/register", "notifications/update", "notifications/unregister", "bridge/status", "bridge/generatePairingQr", "bridge/connectedPhones", "bridge/disconnectPhone", "bridge/trustedDevices", "bridge/removeTrustedDevice"];
|
|
6
|
+
export declare const METHOD_NAMES: readonly ["thread/list", "thread/read", "thread/start", "thread/resume", "thread/fork", "thread/setModel", "thread/rename", "thread/setAccessMode", "thread/archive", "thread/unarchive", "thread/delete", "turn/list", "turn/read", "turn/send", "turn/cancel", "git/status", "git/diff", "git/commit", "git/push", "git/pull", "git/checkout", "git/createBranch", "git/createWorktree", "git/stage", "git/unstage", "git/discard", "git/createPr", "git/undoCommit", "git/branches", "git/switchBranch", "git/revert", "git/deleteBranch", "git/removeWorktree", "git/log", "git/commitShow", "workspace/readFile", "workspace/readImage", "workspace/list", "workspace/searchFiles", "workspace/browseDirs", "workspace/checkpoint", "workspace/diffCheckpoint", "workspace/applyCheckpoint", "workspace/applyPatch", "workspace/exists", "project/list", "project/resolve", "agent/list", "agent/models", "agent/usageStats", "auth/status", "auth/login", "auth/logout", "notifications/register", "notifications/update", "notifications/unregister", "bridge/status", "bridge/generatePairingQr", "bridge/connectedPhones", "bridge/disconnectPhone", "bridge/trustedDevices", "bridge/removeTrustedDevice"];
|
|
7
7
|
export declare function isKnownMethod(method: string): method is JsonRpcMethodName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"method-registry.js","sourceRoot":"","sources":["../../../src/jsonrpc/method-registry.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,cAAc;IACd,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,eAAe;IACf,sBAAsB;IACtB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,WAAW;IACX,WAAW;IACX,WAAW;IACX,aAAa;IACb,MAAM;IACN,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,UAAU;IACV,UAAU;IACV,cAAc;IACd,kBAAkB;IAClB,oBAAoB;IACpB,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,kBAAkB;IAClB,oBAAoB;IACpB,SAAS;IACT,gBAAgB;IAChB,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,0BAA0B;IAC1B,2BAA2B;IAC3B,sBAAsB;IACtB,kBAAkB;IAClB,WAAW;IACX,cAAc;IACd,iBAAiB;IACjB,SAAS;IACT,YAAY;IACZ,cAAc;IACd,OAAO;IACP,aAAa;IACb,YAAY;IACZ,aAAa;IACb,uBAAuB;IACvB,wBAAwB;IACxB,sBAAsB;IACtB,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,0BAA0B;IAC1B,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,4BAA4B;CACpB,CAAC;AAQX,MAAM,sBAAsB,GAAqB,IAAI,CAAC;AACtD,MAAM,sBAAsB,GAAqB,IAAI,CAAC;AACtD,KAAK,sBAAsB,CAAC;AAC5B,KAAK,sBAAsB,CAAC;AAE5B,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAEnE,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
|
|
1
|
+
{"version":3,"file":"method-registry.js","sourceRoot":"","sources":["../../../src/jsonrpc/method-registry.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,cAAc;IACd,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,eAAe;IACf,sBAAsB;IACtB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,WAAW;IACX,WAAW;IACX,WAAW;IACX,aAAa;IACb,MAAM;IACN,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,UAAU;IACV,UAAU;IACV,cAAc;IACd,kBAAkB;IAClB,oBAAoB;IACpB,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,kBAAkB;IAClB,oBAAoB;IACpB,SAAS;IACT,gBAAgB;IAChB,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,0BAA0B;IAC1B,2BAA2B;IAC3B,sBAAsB;IACtB,kBAAkB;IAClB,WAAW;IACX,cAAc;IACd,iBAAiB;IACjB,SAAS;IACT,YAAY;IACZ,cAAc;IACd,kBAAkB;IAClB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,aAAa;IACb,uBAAuB;IACvB,wBAAwB;IACxB,sBAAsB;IACtB,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,0BAA0B;IAC1B,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,4BAA4B;CACpB,CAAC;AAQX,MAAM,sBAAsB,GAAqB,IAAI,CAAC;AACtD,MAAM,sBAAsB,GAAqB,IAAI,CAAC;AACtD,KAAK,sBAAsB,CAAC;AAC5B,KAAK,sBAAsB,CAAC;AAE5B,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAEnE,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -10,9 +10,11 @@ import type { GitBranchList, GitBranchResult, GitCommitDetails, GitCommitResult,
|
|
|
10
10
|
import type { ApplyResult, BrowseResult, Checkpoint, CheckpointDiff, FileContent, ImageContent, PatchChange, TurnAttachment, WorkspaceExistsResult, WorkspaceListing, SearchFilesParams, WorkspaceSearchResult } from '../models/workspace.js';
|
|
11
11
|
import type { AuthStatus, Project } from '../models/project.js';
|
|
12
12
|
import type { ApprovalResponse } from '../models/approval.js';
|
|
13
|
+
import type { QuestionResponse } from '../models/question.js';
|
|
13
14
|
import type { BridgeStatus, ConnectedPhone, TrustedDevice } from '../models/session.js';
|
|
14
15
|
import type { PairingPayload } from '../e2ee/pairing-payload.js';
|
|
15
16
|
import type { AgentDescriptor, AgentId, AgentModel } from '../agents/agent-capabilities.js';
|
|
17
|
+
import type { UsageStatsParams, UsageStatsResult } from '../models/usage.js';
|
|
16
18
|
import type { PushPlatform } from '../notifications/push-payload.js';
|
|
17
19
|
export interface ListThreadsParams {
|
|
18
20
|
projectId?: string;
|
|
@@ -74,6 +76,12 @@ export interface TurnSendParams {
|
|
|
74
76
|
* is not required.
|
|
75
77
|
*/
|
|
76
78
|
approvalResponse?: ApprovalResponse;
|
|
79
|
+
/**
|
|
80
|
+
* Reply to a pending question the agent asked (no new turn is created). The
|
|
81
|
+
* bridge routes the chosen answers to the agent adapter. When present, `text`
|
|
82
|
+
* is not required.
|
|
83
|
+
*/
|
|
84
|
+
questionResponse?: QuestionResponse;
|
|
77
85
|
}
|
|
78
86
|
export interface ThreadSetModelParams {
|
|
79
87
|
threadId: string;
|
|
@@ -468,6 +476,10 @@ export interface JsonRpcMethodRegistry {
|
|
|
468
476
|
params: AgentModelsParams;
|
|
469
477
|
result: AgentModelsResult;
|
|
470
478
|
};
|
|
479
|
+
'agent/usageStats': {
|
|
480
|
+
params: UsageStatsParams;
|
|
481
|
+
result: UsageStatsResult;
|
|
482
|
+
};
|
|
471
483
|
'auth/status': {
|
|
472
484
|
params: {
|
|
473
485
|
agentId: AgentId;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive question contracts.
|
|
3
|
+
*
|
|
4
|
+
* An agent that needs the user to CHOOSE among options (not just approve/reject
|
|
5
|
+
* an action) emits a `question` content block (on `stream/content/block`); the
|
|
6
|
+
* phone renders an interactive picker and replies via `turn/send { questionResponse }`.
|
|
7
|
+
* The bridge routes the chosen answers back to the agent adapter. This mirrors
|
|
8
|
+
* the {@link ApprovalResponse} flow but carries multiple-choice answers instead
|
|
9
|
+
* of a binary decision.
|
|
10
|
+
*
|
|
11
|
+
* Source: architecture/02a-system-architecture.md §6.2.
|
|
12
|
+
*/
|
|
13
|
+
/** One selectable option of a {@link QuestionItem}. */
|
|
14
|
+
export interface QuestionOption {
|
|
15
|
+
/** Display text the user picks (also the value echoed back as the answer). */
|
|
16
|
+
label: string;
|
|
17
|
+
/** Optional one-line explanation of what choosing this option means. */
|
|
18
|
+
description?: string;
|
|
19
|
+
}
|
|
20
|
+
/** A single question with its options. */
|
|
21
|
+
export interface QuestionItem {
|
|
22
|
+
/** The full question text. */
|
|
23
|
+
question: string;
|
|
24
|
+
/** Optional short label/category for the question. */
|
|
25
|
+
header?: string;
|
|
26
|
+
/** The choices the user may pick from. */
|
|
27
|
+
options: QuestionOption[];
|
|
28
|
+
/** Whether more than one option may be selected (defaults to single-select). */
|
|
29
|
+
multiple?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Payload of a `question` content block. The phone decodes this into its
|
|
33
|
+
* interactive question card. `questionId` is the bridge handle the user echoes
|
|
34
|
+
* back in {@link QuestionResponse.questionId}.
|
|
35
|
+
*/
|
|
36
|
+
export interface QuestionRequestBlock {
|
|
37
|
+
type: 'question';
|
|
38
|
+
/** Bridge id the phone echoes back in `questionResponse.questionId`. */
|
|
39
|
+
questionId: string;
|
|
40
|
+
/** The questions to ask (usually one; an agent may batch a few). */
|
|
41
|
+
questions: QuestionItem[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The user's reply to a pending question, carried on `turn/send`. `answers` is
|
|
45
|
+
* one entry per question (in order), each an array of the chosen option
|
|
46
|
+
* `label`s (one for single-select, several for a `multiple` question, empty when
|
|
47
|
+
* the user skipped that question).
|
|
48
|
+
*/
|
|
49
|
+
export interface QuestionResponse {
|
|
50
|
+
/** The id from the question request the user is answering. */
|
|
51
|
+
questionId: string;
|
|
52
|
+
/** Chosen option labels, per question, in question order. */
|
|
53
|
+
answers: string[][];
|
|
54
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive question contracts.
|
|
3
|
+
*
|
|
4
|
+
* An agent that needs the user to CHOOSE among options (not just approve/reject
|
|
5
|
+
* an action) emits a `question` content block (on `stream/content/block`); the
|
|
6
|
+
* phone renders an interactive picker and replies via `turn/send { questionResponse }`.
|
|
7
|
+
* The bridge routes the chosen answers back to the agent adapter. This mirrors
|
|
8
|
+
* the {@link ApprovalResponse} flow but carries multiple-choice answers instead
|
|
9
|
+
* of a binary decision.
|
|
10
|
+
*
|
|
11
|
+
* Source: architecture/02a-system-architecture.md §6.2.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=question.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question.js","sourceRoot":"","sources":["../../../src/models/question.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -25,4 +25,16 @@ export interface BridgeStatus {
|
|
|
25
25
|
activeSessions: number;
|
|
26
26
|
platform: NodeJS.Platform | string;
|
|
27
27
|
uptimeMs: number;
|
|
28
|
+
/**
|
|
29
|
+
* Latest bridge version published to npm (dist-tag `alpha`), as discovered by
|
|
30
|
+
* the bridge's own background update check. Absent when the check hasn't run
|
|
31
|
+
* yet or couldn't reach the registry (offline) — never blocks status.
|
|
32
|
+
*/
|
|
33
|
+
latestVersion?: string;
|
|
34
|
+
/**
|
|
35
|
+
* True when {@link latestVersion} is strictly newer than {@link version}
|
|
36
|
+
* (SemVer precedence). Lets the phone show a "bridge update available" hint
|
|
37
|
+
* without querying npm itself. Absent/false when unknown or up to date.
|
|
38
|
+
*/
|
|
39
|
+
updateAvailable?: boolean;
|
|
28
40
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-provider usage statistics: quota/rate windows, plan/account, credit
|
|
3
|
+
* balance and local token tallies read from a coding CLI's on-disk state — its
|
|
4
|
+
* stored OAuth token (→ the provider's official usage API) and/or its local
|
|
5
|
+
* session logs.
|
|
6
|
+
*
|
|
7
|
+
* Surfaced in the desktop's Settings → Providers section and, over the bridge,
|
|
8
|
+
* on the phone. The access path is per-runtime by design (02a §5.8.10): the
|
|
9
|
+
* desktop reads these files natively in Rust; the bridge reads them in TS so a
|
|
10
|
+
* paired phone — which cannot see the PC's disk directly — gets the same data
|
|
11
|
+
* over `agent/usageStats`. The Dart equivalents live in uxnanmobile and are kept
|
|
12
|
+
* in sync manually (see 02e-bridge-integration.md §4.2).
|
|
13
|
+
*
|
|
14
|
+
* Posture: only the CLI's own stored token is read — never browser cookies or
|
|
15
|
+
* user-pasted API keys.
|
|
16
|
+
*/
|
|
17
|
+
/** A coding CLI whose usage we read from its own stored token. */
|
|
18
|
+
export type UsageProvider = 'codex' | 'claude' | 'copilot' | 'gemini';
|
|
19
|
+
/** Outcome of reading one provider's usage. */
|
|
20
|
+
export type UsageStatus =
|
|
21
|
+
/** Fresh quota/credit data was read. */
|
|
22
|
+
'ok'
|
|
23
|
+
/** CLI is present but not signed in (no usable token). */
|
|
24
|
+
| 'authRequired'
|
|
25
|
+
/** CLI / its config directory is not present on this machine. */
|
|
26
|
+
| 'notInstalled'
|
|
27
|
+
/** Read/network/parse failure — see {@link ProviderUsage.message}. */
|
|
28
|
+
| 'error';
|
|
29
|
+
/** How the data was obtained, for the UI's provenance label. Every wired
|
|
30
|
+
* provider reads its quota from the CLI's own signed-in token. */
|
|
31
|
+
export type UsageSource = 'token';
|
|
32
|
+
/**
|
|
33
|
+
* A single quota/rate window, expressed as a used-percentage with an optional
|
|
34
|
+
* reset time — the atomic unit a provider reports (e.g. a 5-hour session, a
|
|
35
|
+
* weekly cap, or a model-specific window).
|
|
36
|
+
*/
|
|
37
|
+
export interface UsageWindow {
|
|
38
|
+
/** Stable id (e.g. `session5h`, `weekly`, `opusWeekly`) — used by the
|
|
39
|
+
* status-bar picker to remember which windows to surface. */
|
|
40
|
+
id: string;
|
|
41
|
+
/** Human label (English; the UI localizes known ids, else shows this). */
|
|
42
|
+
label: string;
|
|
43
|
+
/** Consumed fraction of this window, clamped to 0–100. */
|
|
44
|
+
usedPercent: number;
|
|
45
|
+
/** Window length in minutes (300 = 5h, 10080 = 7d, 1440 = 24h), when known. */
|
|
46
|
+
windowMinutes?: number;
|
|
47
|
+
/** When the window resets (epoch ms), when the provider reports it. */
|
|
48
|
+
resetsAt?: number;
|
|
49
|
+
}
|
|
50
|
+
/** A monetary / credit balance, kept separate from the percentage windows. */
|
|
51
|
+
export interface CreditBalance {
|
|
52
|
+
/** Amount consumed this period, in `currency`. */
|
|
53
|
+
used: number;
|
|
54
|
+
/** Spend/credit cap, when the provider exposes one. */
|
|
55
|
+
limit?: number;
|
|
56
|
+
/** ISO-4217 code (`USD`, `EUR`, …) or `credits` for non-currency units. */
|
|
57
|
+
currency: string;
|
|
58
|
+
/** Period label (English; e.g. `Monthly`, `Credits`). */
|
|
59
|
+
period: string;
|
|
60
|
+
/** When the balance resets (epoch ms), when known. */
|
|
61
|
+
resetsAt?: number;
|
|
62
|
+
}
|
|
63
|
+
/** One provider's usage snapshot. */
|
|
64
|
+
export interface ProviderUsage {
|
|
65
|
+
provider: UsageProvider;
|
|
66
|
+
status: UsageStatus;
|
|
67
|
+
/** How `windows`/`credit` were obtained (absent for states with no data). */
|
|
68
|
+
source?: UsageSource;
|
|
69
|
+
account?: {
|
|
70
|
+
email?: string;
|
|
71
|
+
organization?: string;
|
|
72
|
+
plan?: string;
|
|
73
|
+
};
|
|
74
|
+
/** Quota/rate windows (percentage-based). Empty when none apply. */
|
|
75
|
+
windows: UsageWindow[];
|
|
76
|
+
credit?: CreditBalance;
|
|
77
|
+
/** When this snapshot was produced (epoch ms). */
|
|
78
|
+
updatedAt: number;
|
|
79
|
+
/** Error/hint message for `error` / `authRequired` / `notInstalled` states. */
|
|
80
|
+
message?: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* `agent/usageStats` request: read usage for exactly these providers — only the
|
|
84
|
+
* ones the user activated. The reader never polls providers not listed here, so
|
|
85
|
+
* inactive providers cost nothing.
|
|
86
|
+
*/
|
|
87
|
+
export interface UsageStatsParams {
|
|
88
|
+
providers: UsageProvider[];
|
|
89
|
+
}
|
|
90
|
+
export interface UsageStatsResult {
|
|
91
|
+
usage: ProviderUsage[];
|
|
92
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-provider usage statistics: quota/rate windows, plan/account, credit
|
|
3
|
+
* balance and local token tallies read from a coding CLI's on-disk state — its
|
|
4
|
+
* stored OAuth token (→ the provider's official usage API) and/or its local
|
|
5
|
+
* session logs.
|
|
6
|
+
*
|
|
7
|
+
* Surfaced in the desktop's Settings → Providers section and, over the bridge,
|
|
8
|
+
* on the phone. The access path is per-runtime by design (02a §5.8.10): the
|
|
9
|
+
* desktop reads these files natively in Rust; the bridge reads them in TS so a
|
|
10
|
+
* paired phone — which cannot see the PC's disk directly — gets the same data
|
|
11
|
+
* over `agent/usageStats`. The Dart equivalents live in uxnanmobile and are kept
|
|
12
|
+
* in sync manually (see 02e-bridge-integration.md §4.2).
|
|
13
|
+
*
|
|
14
|
+
* Posture: only the CLI's own stored token is read — never browser cookies or
|
|
15
|
+
* user-pasted API keys.
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/models/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic-version comparison shared across the ecosystem.
|
|
3
|
+
*
|
|
4
|
+
* Uxnan versions follow SemVer with a date-stamped prerelease, e.g.
|
|
5
|
+
* `0.0.3-alpha.20260702` (and, on mobile, an optional `+<build>` metadata
|
|
6
|
+
* suffix). This implements SemVer 2.0.0 precedence (§11) closely enough for
|
|
7
|
+
* those formats — enough for the bridge to decide "is the published version
|
|
8
|
+
* newer than mine?" without pulling in a `semver` dependency.
|
|
9
|
+
*
|
|
10
|
+
* Build metadata (`+...`) is ignored for precedence, per the spec.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Compare two SemVer strings. Returns `-1` if `a < b`, `1` if `a > b`, `0` if
|
|
14
|
+
* they are precedence-equal. Unparseable inputs sort as *lower* than any
|
|
15
|
+
* parseable version (and equal to each other), so a garbage/absent version
|
|
16
|
+
* never masquerades as "newer".
|
|
17
|
+
*/
|
|
18
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
19
|
+
/**
|
|
20
|
+
* True when `candidate` is a strictly newer version than `current`. Used to
|
|
21
|
+
* decide whether to announce an available update. A candidate that is absent or
|
|
22
|
+
* unparseable is never treated as newer.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isNewerVersion(candidate: string | undefined | null, current: string): boolean;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic-version comparison shared across the ecosystem.
|
|
3
|
+
*
|
|
4
|
+
* Uxnan versions follow SemVer with a date-stamped prerelease, e.g.
|
|
5
|
+
* `0.0.3-alpha.20260702` (and, on mobile, an optional `+<build>` metadata
|
|
6
|
+
* suffix). This implements SemVer 2.0.0 precedence (§11) closely enough for
|
|
7
|
+
* those formats — enough for the bridge to decide "is the published version
|
|
8
|
+
* newer than mine?" without pulling in a `semver` dependency.
|
|
9
|
+
*
|
|
10
|
+
* Build metadata (`+...`) is ignored for precedence, per the spec.
|
|
11
|
+
*/
|
|
12
|
+
/** Parse `MAJOR.MINOR.PATCH[-prerelease][+build]`, or `null` if unparseable. */
|
|
13
|
+
function parseVersion(version) {
|
|
14
|
+
const trimmed = version.trim();
|
|
15
|
+
if (!trimmed)
|
|
16
|
+
return null;
|
|
17
|
+
// Strip build metadata (everything from the first `+`), which never affects
|
|
18
|
+
// precedence.
|
|
19
|
+
const noBuild = trimmed.split('+', 1)[0];
|
|
20
|
+
const dashIndex = noBuild.indexOf('-');
|
|
21
|
+
const core = dashIndex === -1 ? noBuild : noBuild.slice(0, dashIndex);
|
|
22
|
+
const prereleaseRaw = dashIndex === -1 ? '' : noBuild.slice(dashIndex + 1);
|
|
23
|
+
const coreParts = core.split('.');
|
|
24
|
+
if (coreParts.length !== 3)
|
|
25
|
+
return null;
|
|
26
|
+
const major = Number(coreParts[0]);
|
|
27
|
+
const minor = Number(coreParts[1]);
|
|
28
|
+
const patch = Number(coreParts[2]);
|
|
29
|
+
if (!Number.isInteger(major) ||
|
|
30
|
+
!Number.isInteger(minor) ||
|
|
31
|
+
!Number.isInteger(patch) ||
|
|
32
|
+
major < 0 ||
|
|
33
|
+
minor < 0 ||
|
|
34
|
+
patch < 0) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const prerelease = prereleaseRaw.length > 0 ? prereleaseRaw.split('.') : [];
|
|
38
|
+
return { major, minor, patch, prerelease };
|
|
39
|
+
}
|
|
40
|
+
/** Numeric identifiers are all-digits (SemVer §9). */
|
|
41
|
+
function isNumericIdentifier(id) {
|
|
42
|
+
return id.length > 0 && /^[0-9]+$/.test(id);
|
|
43
|
+
}
|
|
44
|
+
/** Compare two prerelease identifier lists per SemVer §11. */
|
|
45
|
+
function comparePrerelease(a, b) {
|
|
46
|
+
// A release with no prerelease outranks one that has a prerelease.
|
|
47
|
+
if (a.length === 0 && b.length === 0)
|
|
48
|
+
return 0;
|
|
49
|
+
if (a.length === 0)
|
|
50
|
+
return 1; // `a` is stable, `b` is prerelease → a > b
|
|
51
|
+
if (b.length === 0)
|
|
52
|
+
return -1;
|
|
53
|
+
const len = Math.min(a.length, b.length);
|
|
54
|
+
for (let i = 0; i < len; i++) {
|
|
55
|
+
const idA = a[i];
|
|
56
|
+
const idB = b[i];
|
|
57
|
+
if (idA === idB)
|
|
58
|
+
continue;
|
|
59
|
+
const numA = isNumericIdentifier(idA);
|
|
60
|
+
const numB = isNumericIdentifier(idB);
|
|
61
|
+
if (numA && numB) {
|
|
62
|
+
const diff = Number(idA) - Number(idB);
|
|
63
|
+
if (diff !== 0)
|
|
64
|
+
return diff < 0 ? -1 : 1;
|
|
65
|
+
}
|
|
66
|
+
else if (numA) {
|
|
67
|
+
return -1; // numeric identifiers have lower precedence than alphanumeric
|
|
68
|
+
}
|
|
69
|
+
else if (numB) {
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return idA < idB ? -1 : 1; // lexical ASCII order
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// All shared identifiers equal → the longer set has higher precedence.
|
|
77
|
+
if (a.length === b.length)
|
|
78
|
+
return 0;
|
|
79
|
+
return a.length < b.length ? -1 : 1;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Compare two SemVer strings. Returns `-1` if `a < b`, `1` if `a > b`, `0` if
|
|
83
|
+
* they are precedence-equal. Unparseable inputs sort as *lower* than any
|
|
84
|
+
* parseable version (and equal to each other), so a garbage/absent version
|
|
85
|
+
* never masquerades as "newer".
|
|
86
|
+
*/
|
|
87
|
+
export function compareVersions(a, b) {
|
|
88
|
+
const pa = parseVersion(a);
|
|
89
|
+
const pb = parseVersion(b);
|
|
90
|
+
if (!pa && !pb)
|
|
91
|
+
return 0;
|
|
92
|
+
if (!pa)
|
|
93
|
+
return -1;
|
|
94
|
+
if (!pb)
|
|
95
|
+
return 1;
|
|
96
|
+
if (pa.major !== pb.major)
|
|
97
|
+
return pa.major < pb.major ? -1 : 1;
|
|
98
|
+
if (pa.minor !== pb.minor)
|
|
99
|
+
return pa.minor < pb.minor ? -1 : 1;
|
|
100
|
+
if (pa.patch !== pb.patch)
|
|
101
|
+
return pa.patch < pb.patch ? -1 : 1;
|
|
102
|
+
return comparePrerelease(pa.prerelease, pb.prerelease);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* True when `candidate` is a strictly newer version than `current`. Used to
|
|
106
|
+
* decide whether to announce an available update. A candidate that is absent or
|
|
107
|
+
* unparseable is never treated as newer.
|
|
108
|
+
*/
|
|
109
|
+
export function isNewerVersion(candidate, current) {
|
|
110
|
+
if (!candidate)
|
|
111
|
+
return false;
|
|
112
|
+
if (parseVersion(candidate) === null)
|
|
113
|
+
return false;
|
|
114
|
+
return compareVersions(candidate, current) > 0;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/version/compare.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxnan/shared",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5-alpha.20260711",
|
|
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",
|