@pouchy_ai/companion-sdk 0.33.0 → 0.34.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/CHANGELOG.md +38 -0
- package/README.md +18 -1
- package/dist/adapter-core.d.ts +4 -0
- package/dist/adapter-core.d.ts.map +1 -1
- package/dist/adapter-core.js +18 -6
- package/dist/adapter-core.js.map +1 -1
- package/dist/client.d.ts +90 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +196 -0
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter-core.ts +22 -6
- package/src/client.ts +260 -3
- package/src/errors.ts +2 -1
- package/src/index.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,44 @@ a protocol bump is always called out explicitly here.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.34.0] - 2026-07-14
|
|
16
|
+
|
|
17
|
+
No breaking changes — additive, opt-in surface. No protocol change
|
|
18
|
+
(`PROTOCOL_VERSION` stays `1`).
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **Offline send queue** — opt in with `createCompanion({ queueOffline: true })`.
|
|
23
|
+
A `sendText` that fails at the NETWORK level (fetch rejected before any HTTP
|
|
24
|
+
response, or `navigator.onLine === false`) is queued instead of lost and
|
|
25
|
+
resolves `{ seq: null, queued: true, turnId }`; with `awaitReply: true` it
|
|
26
|
+
rejects with the new SDK-synthesized `code: 'queued_offline'` (the item is
|
|
27
|
+
still queued — there is just no reply to await this session). HTTP error
|
|
28
|
+
responses (4xx/5xx incl. 429) are NEVER queued — the server saw those; they
|
|
29
|
+
keep the existing throw semantics.
|
|
30
|
+
- **Flush** is FIFO + sequential and runs automatically after a successful
|
|
31
|
+
`connect()` and whenever the event stream reconnects (`streamState` →
|
|
32
|
+
`'connected'`), or manually via `flushOutbox()` → `{ sent, remaining }`
|
|
33
|
+
(one flush at a time — concurrent calls share the in-flight run). Each
|
|
34
|
+
replay is a buffered input POST reusing the item's ORIGINAL `turnId`: the
|
|
35
|
+
server dedupes completed turnIds (10 min TTL, last 8 per session, answered
|
|
36
|
+
`duplicate: true`), so a retry after an ambiguous failure can never
|
|
37
|
+
double-run a turn. Per item: success or server-side duplicate → removed;
|
|
38
|
+
network failure / 5xx / 429 → stop, keep this item and the rest for the
|
|
39
|
+
next flush; any other 4xx → the item itself is invalid — dropped
|
|
40
|
+
(`console.warn` + outbox-change notification), flush continues.
|
|
41
|
+
- **Surface:** `pendingOutbox()` (defensive copy; new exported `QueuedSend`
|
|
42
|
+
type — `{ turnId, text, images?, at }`) and `onOutboxChange(fn)` for a
|
|
43
|
+
"N pending" badge. Persistence defaults to localStorage (key
|
|
44
|
+
`pouchy-outbox:<surface>`, in-memory page-lifetime fallback) or bring your
|
|
45
|
+
own via the `outboxStore` option (new exported `OutboxStore` type); a
|
|
46
|
+
reloaded tab resumes its persisted queue.
|
|
47
|
+
- **Adapters:** the view snapshot gains `outbox: number` (feature-detected,
|
|
48
|
+
0 for clients from older bundles), and the optimistic user line is KEPT
|
|
49
|
+
for a queued send — both the resolved `queued: true` shape and the
|
|
50
|
+
`queued_offline` rejection — while the 0.32.1 rollback still applies to
|
|
51
|
+
real rejections.
|
|
52
|
+
|
|
15
53
|
## [0.33.0] - 2026-07-14
|
|
16
54
|
|
|
17
55
|
**Breaking** (adapter view controller only; pre-1.0 minor per this package's
|
package/README.md
CHANGED
|
@@ -113,7 +113,9 @@ one and **falls back to SSE automatically**, observable as
|
|
|
113
113
|
instrumentation events via `console.debug`; a function receives every
|
|
114
114
|
`CompanionDebugEvent`: HTTP request/response with method/path/status/ms, each
|
|
115
115
|
delivered envelope post-dedup, stream-state transitions, synthesized errors —
|
|
116
|
-
never the token, headers, or bodies),
|
|
116
|
+
never the token, headers, or bodies), `queueOffline` (0.34.0 — opt-in offline
|
|
117
|
+
send queue, below) with `outboxStore` (custom persistence for it; default
|
|
118
|
+
localStorage), and two injection points for Node/tests:
|
|
117
119
|
`fetch` (custom fetch implementation) and `webSocketImpl` (WebSocket
|
|
118
120
|
constructor when `globalThis.WebSocket` is absent).
|
|
119
121
|
|
|
@@ -172,6 +174,7 @@ local/device skills).
|
|
|
172
174
|
| `streamState` / `onStreamStateChange(fn)` | Receive-stream lifecycle (0.30.0): `'idle' \| 'connecting' \| 'connected' \| 'reconnecting' \| 'degraded_sse' \| 'stopped'` (`CompanionStreamState`). `fn(state, prev)` fires on change only — drive a connection indicator; `degraded_sse` = the WS transport errored and delivery continues on the SSE fallback; `stopped` = `stop()`/`close()` or a permanent `stream_unauthorized` failure. |
|
|
173
175
|
| `getAvatar()` / `brandIconUrl(size?)` | The user's avatar (VRM/portrait) and the Pouchy brand icon for your UI. Standalone (no client/token): `pouchyBrandIconUrl(baseUrl, size?)` derives the same URL before/without connecting. |
|
|
174
176
|
| `getWallet()` | Read the instance's own wallet — `{ balances: [{ currency, amount }], totalUsd, currency }`. Read-only + receive-only; needs the `wallet.read` scope. |
|
|
177
|
+
| `flushOutbox()` / `pendingOutbox()` / `onOutboxChange(fn)` | **Offline send queue** (0.34.0, opt-in `queueOffline: true`). A `sendText` whose fetch fails at the NETWORK level (or `navigator.onLine === false`) resolves `{ seq: null, queued: true, turnId }` instead of rejecting; with `awaitReply: true` it rejects with `code: 'queued_offline'` (the item is still queued). HTTP errors (4xx/5xx incl. 429) are never queued — the server saw those. The queue replays FIFO — automatically after `connect()` and whenever the stream reconnects, or manually via `flushOutbox()` → `{ sent, remaining }` — each item a buffered POST reusing its ORIGINAL `turnId`, which the server dedupes (completed turnIds, 10 min / last 8 per session), so a retried ambiguous failure can never double-run a turn. `pendingOutbox()` lists the queued sends (`QueuedSend[]`); `onOutboxChange(fn)` fires on every enqueue/flush/drop (drive a "N pending" badge). Persistence: localStorage by default (in-memory page-lifetime fallback), or bring your own via the `outboxStore` option. |
|
|
175
178
|
|
|
176
179
|
Tool calling beyond your own declared tools: `HOST_CONTROL_TOOLS` (universal
|
|
177
180
|
verbs — `invoke_action`, `set_feature`, `set_value`, `navigate`, `highlight`)
|
|
@@ -196,6 +199,20 @@ const p = companion.sendText('summarize this', { awaitReply: true, signal: ac.si
|
|
|
196
199
|
ac.abort(); // p rejects with code: 'aborted'
|
|
197
200
|
```
|
|
198
201
|
|
|
202
|
+
**Offline send queue (0.34.0, opt-in):** `queueOffline: true` turns a
|
|
203
|
+
network-level send failure (fetch rejected / `navigator.onLine === false`)
|
|
204
|
+
into a queued send instead of a lost one — replayed FIFO on reconnect with
|
|
205
|
+
its original `turnId` (server-deduped, so a retry can never double-run a
|
|
206
|
+
turn; see the methods table above for the full per-item semantics):
|
|
207
|
+
|
|
208
|
+
```ts
|
|
209
|
+
const companion = createCompanion({ baseUrl, token, queueOffline: true });
|
|
210
|
+
await companion.connect();
|
|
211
|
+
companion.onOutboxChange((items) => render(items.length)); // "N pending" badge
|
|
212
|
+
const r = await companion.sendText('hey');
|
|
213
|
+
if (r.queued) render('queued — sends on reconnect', r.turnId);
|
|
214
|
+
```
|
|
215
|
+
|
|
199
216
|
## Scopes (typed)
|
|
200
217
|
|
|
201
218
|
The full capability-scope vocabulary ships as typed constants — no more
|
package/dist/adapter-core.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ export interface CompanionViewSnapshot {
|
|
|
23
23
|
* through this view yet. Rebuild after a reload via client.pendingConfirms()
|
|
24
24
|
* — confirm_request events are not replayed. */
|
|
25
25
|
pendingConfirms: readonly ConfirmRequestPayload[];
|
|
26
|
+
/** Sends queued while offline (0.34.0 — the client's `queueOffline`
|
|
27
|
+
* option): `client.pendingOutbox().length`, live-updated. Always 0 on a
|
|
28
|
+
* client from an older SDK bundle without the offline queue. */
|
|
29
|
+
outbox: number;
|
|
26
30
|
}
|
|
27
31
|
export interface CompanionViewOptions {
|
|
28
32
|
/** Max transcript entries kept (oldest dropped). Default 200. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-core.d.ts","sourceRoot":"","sources":["../src/adapter-core.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAiB,MAAM,YAAY,CAAC;AAGvE;;gFAEgF;AAChF,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;CACX;AAED;2EAC2E;AAC3E,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,oBAAoB,CAAC;IAClC,mEAAmE;IACnE,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB;;qDAEiD;IACjD,eAAe,EAAE,SAAS,qBAAqB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-core.d.ts","sourceRoot":"","sources":["../src/adapter-core.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAiB,MAAM,YAAY,CAAC;AAGvE;;gFAEgF;AAChF,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;CACX;AAED;2EAC2E;AAC3E,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,oBAAoB,CAAC;IAClC,mEAAmE;IACnE,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB;;qDAEiD;IACjD,eAAe,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAClD;;qEAEiE;IACjE,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACpC,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;2BAKuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,iEAAiE;IACjE,WAAW,IAAI,qBAAqB,CAAC;IACrC,0DAA0D;IAC1D,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,kEAAkE;IAClE,QAAQ,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/C,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C;qEACiE;IACjE,aAAa,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC7B,UAAU,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;IAChD;;4BAEwB;IACxB,OAAO,IAAI,IAAI,CAAC;IAChB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CACjC;AAID;2EAC2E;AAC3E,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,oBAAoB,GACzB,aAAa,CAsJf"}
|
package/dist/adapter-core.js
CHANGED
|
@@ -26,7 +26,10 @@ export function createCompanionView(client, opts) {
|
|
|
26
26
|
transcript: Object.freeze([]),
|
|
27
27
|
draft: '',
|
|
28
28
|
typing: false,
|
|
29
|
-
pendingConfirms: Object.freeze([])
|
|
29
|
+
pendingConfirms: Object.freeze([]),
|
|
30
|
+
// Feature-detect (0.34.0): a host may hand this view a client built from
|
|
31
|
+
// an older SDK bundle without the offline queue — permanently-empty then.
|
|
32
|
+
outbox: typeof client.pendingOutbox === 'function' ? client.pendingOutbox().length : 0
|
|
30
33
|
});
|
|
31
34
|
function commit(patch) {
|
|
32
35
|
if (disposed)
|
|
@@ -91,7 +94,11 @@ export function createCompanionView(client, opts) {
|
|
|
91
94
|
if (snapshot.pendingConfirms.some((c) => c.confirmId === payload.confirmId))
|
|
92
95
|
return;
|
|
93
96
|
commit({ pendingConfirms: Object.freeze([...snapshot.pendingConfirms, payload]) });
|
|
94
|
-
})
|
|
97
|
+
}),
|
|
98
|
+
// Same feature-detect as the initial snapshot (0.34.0).
|
|
99
|
+
...(typeof client.onOutboxChange === 'function'
|
|
100
|
+
? [client.onOutboxChange((items) => commit({ outbox: items.length }))]
|
|
101
|
+
: [])
|
|
95
102
|
];
|
|
96
103
|
return {
|
|
97
104
|
client,
|
|
@@ -109,10 +116,15 @@ export function createCompanionView(client, opts) {
|
|
|
109
116
|
catch (err) {
|
|
110
117
|
// The optimistic line must not survive a send the server never saw
|
|
111
118
|
// (network drop / 429 turn-claim) — roll it back by identity so the
|
|
112
|
-
// host's retry re-appends cleanly (0.32.1).
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
119
|
+
// host's retry re-appends cleanly (0.32.1). The one exception is
|
|
120
|
+
// `queued_offline` (0.34.0): the text IS on its way — queued, and
|
|
121
|
+
// replayed on reconnect — so the line stays, mirroring the resolved
|
|
122
|
+
// `{ queued: true }` shape of a non-awaitReply queued send.
|
|
123
|
+
if (!(err instanceof CompanionError && err.code === 'queued_offline')) {
|
|
124
|
+
commit({
|
|
125
|
+
transcript: Object.freeze(snapshot.transcript.filter((e) => e !== entry))
|
|
126
|
+
});
|
|
127
|
+
}
|
|
116
128
|
throw err;
|
|
117
129
|
}
|
|
118
130
|
},
|
package/dist/adapter-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-core.js","sourceRoot":"","sources":["../src/adapter-core.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,8EAA8E;AAC9E,+EAA+E;AAC/E,kEAAkE;AAClE,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,6EAA6E;AAC7E,SAAS;AAKT,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-core.js","sourceRoot":"","sources":["../src/adapter-core.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -65,6 +65,21 @@ export interface CompanionClientOptions {
|
|
|
65
65
|
* configuration errors and never trigger it. Alternative: call `setToken()`
|
|
66
66
|
* proactively on your own refresh schedule. */
|
|
67
67
|
onAuthError?: () => string | null | Promise<string | null>;
|
|
68
|
+
/** Opt-in offline send queue (0.34.0). A sendText that fails at the NETWORK
|
|
69
|
+
* level (fetch rejected before any HTTP response, or `navigator.onLine` is
|
|
70
|
+
* false) is queued instead of lost, and replayed FIFO once the server is
|
|
71
|
+
* reachable again — after a successful connect(), on every stream
|
|
72
|
+
* reconnect, or via `flushOutbox()`. Replays reuse the ORIGINAL turnId:
|
|
73
|
+
* the server dedupes completed turnIds (10 min TTL, last 8 per session),
|
|
74
|
+
* so a retry after an ambiguous failure can never double-run a turn. HTTP
|
|
75
|
+
* error responses (4xx/5xx incl. 429) are NEVER queued — the server saw
|
|
76
|
+
* those; they keep the normal throw semantics. Default false. */
|
|
77
|
+
queueOffline?: boolean;
|
|
78
|
+
/** Persistence for the offline queue (see `queueOffline`). Defaults to
|
|
79
|
+
* localStorage when available (privacy-mode / quota failures fall back
|
|
80
|
+
* silently), else an in-memory page-lifetime store. The key is
|
|
81
|
+
* `pouchy-outbox:${surface}`, so each surface keeps its own queue. */
|
|
82
|
+
outboxStore?: OutboxStore;
|
|
68
83
|
}
|
|
69
84
|
export interface HelloAck {
|
|
70
85
|
session: string;
|
|
@@ -198,6 +213,23 @@ export interface SendTextReply {
|
|
|
198
213
|
text: string;
|
|
199
214
|
envelope: CompanionEnvelope;
|
|
200
215
|
}
|
|
216
|
+
/** One send queued while offline (see the `queueOffline` option) — replayed
|
|
217
|
+
* FIFO by flushOutbox with its ORIGINAL `turnId` (the server's turn-dedup is
|
|
218
|
+
* what makes the retry safe). `at` is Date.now() at enqueue. */
|
|
219
|
+
export interface QueuedSend {
|
|
220
|
+
turnId: string;
|
|
221
|
+
text: string;
|
|
222
|
+
images?: string[];
|
|
223
|
+
at: number;
|
|
224
|
+
}
|
|
225
|
+
/** Pluggable persistence for the offline send queue (the `outboxStore`
|
|
226
|
+
* option). Both methods receive the storage key
|
|
227
|
+
* (`pouchy-outbox:${surface}`); `load` returns the previously-saved value or
|
|
228
|
+
* null. */
|
|
229
|
+
export interface OutboxStore {
|
|
230
|
+
load(key: string): string | null;
|
|
231
|
+
save(key: string, value: string): void;
|
|
232
|
+
}
|
|
201
233
|
type Handler = (envelope: CompanionEnvelope) => void;
|
|
202
234
|
/** Token-streaming subscriber (P1-2). `chunk` is a raw text delta of the reply
|
|
203
235
|
* being generated; `meta.reset` (with an empty chunk) tells the renderer to
|
|
@@ -268,6 +300,9 @@ export declare class CompanionClient {
|
|
|
268
300
|
private _streamState;
|
|
269
301
|
private readonly streamStateHandlers;
|
|
270
302
|
private readonly debugSink;
|
|
303
|
+
private outbox;
|
|
304
|
+
private readonly outboxHandlers;
|
|
305
|
+
private outboxFlush;
|
|
271
306
|
constructor(opts: CompanionClientOptions);
|
|
272
307
|
/** Fire an instrumentation event. A throwing sink must never break the
|
|
273
308
|
* request/stream path it observes. */
|
|
@@ -354,7 +389,15 @@ export declare class CompanionClient {
|
|
|
354
389
|
* can't ride the request (`stream: false`, or an old server) does it fall
|
|
355
390
|
* back to the event stream — which then DOES need start() — resolving with
|
|
356
391
|
* the next `companion.message`, or rejecting with code `reply_timeout`
|
|
357
|
-
* after `replyTimeoutMs` (default 60s).
|
|
392
|
+
* after `replyTimeoutMs` (default 60s).
|
|
393
|
+
*
|
|
394
|
+
* OFFLINE QUEUE (0.34.0, opt-in `queueOffline: true`): a send that never
|
|
395
|
+
* REACHED the server — fetch rejected at the network level, or
|
|
396
|
+
* `navigator.onLine` is already false — is queued for replay instead of
|
|
397
|
+
* lost, and resolves `{ seq: null, queued: true, turnId }`. With
|
|
398
|
+
* `awaitReply: true` there is no reply to await this session, so it
|
|
399
|
+
* rejects with code `queued_offline` (the item IS queued first). HTTP
|
|
400
|
+
* error responses keep the throw semantics above — they are never queued. */
|
|
358
401
|
sendText(text: string, opts: {
|
|
359
402
|
awaitReply: true;
|
|
360
403
|
images?: string[];
|
|
@@ -370,7 +413,23 @@ export declare class CompanionClient {
|
|
|
370
413
|
signal?: AbortSignal;
|
|
371
414
|
}): Promise<{
|
|
372
415
|
seq: number | null;
|
|
416
|
+
queued?: boolean;
|
|
417
|
+
turnId?: string;
|
|
373
418
|
}>;
|
|
419
|
+
/** The pre-queue dispatch of sendText: awaitReply / streaming / buffered. */
|
|
420
|
+
private dispatchText;
|
|
421
|
+
/** True only for a send that never reached the server: fetch rejected at
|
|
422
|
+
* the network level, which asCompanionError wraps as status 0 with NO
|
|
423
|
+
* code. Every code-carrying status-0 error is deliberate — `aborted` is
|
|
424
|
+
* the caller cancelling, `reply_timeout`/`needs_event_stream` mean the
|
|
425
|
+
* POST was accepted — and any nonzero status is a response the server
|
|
426
|
+
* produced. None of those may queue. */
|
|
427
|
+
private isNetworkSendFailure;
|
|
428
|
+
/** Enqueue an offline send. Plain sends resolve `{ seq: null, queued: true,
|
|
429
|
+
* turnId }`; awaitReply can't await a reply that won't arrive this
|
|
430
|
+
* session, so it rejects with `queued_offline` — the item is queued
|
|
431
|
+
* either way. */
|
|
432
|
+
private queueSend;
|
|
374
433
|
/** The awaitReply leg of sendText. Prefers the in-request answer (the
|
|
375
434
|
* streaming `done` frame's envelope); falls back to the next
|
|
376
435
|
* `companion.message` off the event stream, bounded by a timeout. The
|
|
@@ -383,6 +442,36 @@ export declare class CompanionClient {
|
|
|
383
442
|
* dedups by id). Falls back to buffered semantics if the server ever
|
|
384
443
|
* responds with plain JSON (e.g. an old deployment). */
|
|
385
444
|
private sendTextStreaming;
|
|
445
|
+
/** The live offline queue, loaded from the store on first use so a reloaded
|
|
446
|
+
* tab resumes what its predecessor persisted. Unreadable or foreign store
|
|
447
|
+
* content is discarded — a corrupt store must never break sending. */
|
|
448
|
+
private loadOutbox;
|
|
449
|
+
private outboxKey;
|
|
450
|
+
/** Persist + notify after EVERY queue mutation (enqueue / flushed / drop),
|
|
451
|
+
* so the stored copy never lags what a reload would need. Handler
|
|
452
|
+
* isolation matches emit(): a throwing consumer must not skip the rest. */
|
|
453
|
+
private commitOutbox;
|
|
454
|
+
/** The sends queued while offline (oldest first), as a defensive copy —
|
|
455
|
+
* see the `queueOffline` option. */
|
|
456
|
+
pendingOutbox(): readonly QueuedSend[];
|
|
457
|
+
/** Subscribe to offline-queue changes (enqueue / flushed / dropped) — drive
|
|
458
|
+
* a "N pending" badge from `items.length`. Returns an unsubscribe fn. */
|
|
459
|
+
onOutboxChange(handler: (items: readonly QueuedSend[]) => void): () => void;
|
|
460
|
+
/** Replay the offline queue: FIFO, sequential, each item a normal buffered
|
|
461
|
+
* input POST reusing its ORIGINAL `turnId` (the server dedupes completed
|
|
462
|
+
* turnIds — see `queueOffline` — so a retry can never double-run a turn).
|
|
463
|
+
* Runs automatically after connect() and on every stream reconnect; call
|
|
464
|
+
* it yourself for a manual retry affordance. One flush at a time —
|
|
465
|
+
* concurrent calls share the in-flight run. Per item: success (or a
|
|
466
|
+
* server-side duplicate) → removed; network failure / 5xx / 429 → stop,
|
|
467
|
+
* keep this item and the rest for the next flush; any other 4xx → the
|
|
468
|
+
* item itself is invalid (the server deliberately rejected it) — drop it,
|
|
469
|
+
* console.warn, and keep flushing. */
|
|
470
|
+
flushOutbox(): Promise<{
|
|
471
|
+
sent: number;
|
|
472
|
+
remaining: number;
|
|
473
|
+
}>;
|
|
474
|
+
private runOutboxFlush;
|
|
386
475
|
/** Subscribe to token-streaming deltas of the reply (P1-2). Registering a
|
|
387
476
|
* subscriber makes sendText stream automatically. Returns an unsubscribe
|
|
388
477
|
* function. Render chunks as they arrive; on `meta.reset` clear the partial;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -42,6 +42,35 @@ export function pouchyBrandIconUrl(baseUrl, size = 512) {
|
|
|
42
42
|
* (so call.ts shares it cycle-free); re-exported here so the public import
|
|
43
43
|
* path is unchanged. */
|
|
44
44
|
export { CompanionError } from './errors.js';
|
|
45
|
+
// Default outbox persistence: localStorage when the environment has one (and
|
|
46
|
+
// allows it — privacy mode / quota errors fall through), else a module-level
|
|
47
|
+
// Map so the queue at least survives for the page's lifetime.
|
|
48
|
+
const memoryOutbox = new Map();
|
|
49
|
+
const defaultOutboxStore = {
|
|
50
|
+
load(key) {
|
|
51
|
+
try {
|
|
52
|
+
if (typeof window !== 'undefined' && window.localStorage) {
|
|
53
|
+
return window.localStorage.getItem(key);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* storage denied — fall through to the in-memory copy */
|
|
58
|
+
}
|
|
59
|
+
return memoryOutbox.get(key) ?? null;
|
|
60
|
+
},
|
|
61
|
+
save(key, value) {
|
|
62
|
+
try {
|
|
63
|
+
if (typeof window !== 'undefined' && window.localStorage) {
|
|
64
|
+
window.localStorage.setItem(key, value);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
/* quota / privacy mode — keep the in-memory copy below */
|
|
70
|
+
}
|
|
71
|
+
memoryOutbox.set(key, value);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
45
74
|
const SEEN_CAP = 512;
|
|
46
75
|
export class CompanionClient {
|
|
47
76
|
opts;
|
|
@@ -68,6 +97,13 @@ export class CompanionClient {
|
|
|
68
97
|
// Instrumentation sink (0.32.0) — null when `debug` is unset, so the hot
|
|
69
98
|
// paths pay one falsy check.
|
|
70
99
|
debugSink;
|
|
100
|
+
// Offline send queue (0.34.0) — null until first use, then loaded lazily
|
|
101
|
+
// from the store so a reloaded tab resumes the queue its predecessor
|
|
102
|
+
// persisted.
|
|
103
|
+
outbox = null;
|
|
104
|
+
outboxHandlers = new Set();
|
|
105
|
+
// In-flight flush, shared so concurrent triggers run ONE flush at a time.
|
|
106
|
+
outboxFlush = null;
|
|
71
107
|
constructor(opts) {
|
|
72
108
|
if (!opts.baseUrl)
|
|
73
109
|
throw new CompanionError('CompanionClient: baseUrl is required', 0, 'missing_option');
|
|
@@ -129,6 +165,10 @@ export class CompanionClient {
|
|
|
129
165
|
console.error('[companion-sdk] stream-state handler threw', e);
|
|
130
166
|
}
|
|
131
167
|
}
|
|
168
|
+
// The stream coming back up is the strongest "server reachable again"
|
|
169
|
+
// signal there is — drain any sends queued while offline (0.34.0).
|
|
170
|
+
if (next === 'connected' && this.opts.queueOffline)
|
|
171
|
+
void this.flushOutbox().catch(() => { });
|
|
132
172
|
}
|
|
133
173
|
/** Swap the bearer token used by every subsequent request and stream
|
|
134
174
|
* reconnect. Session tokens expire (default 1h) — call this when your
|
|
@@ -322,6 +362,10 @@ export class CompanionClient {
|
|
|
322
362
|
}, opts?.signal);
|
|
323
363
|
this._session = json.session;
|
|
324
364
|
this.cursor = json.resumeCursor ?? 0;
|
|
365
|
+
// A successful handshake proves reachability — replay any sends queued
|
|
366
|
+
// while offline (0.34.0; no-op when the queue is empty).
|
|
367
|
+
if (this.opts.queueOffline)
|
|
368
|
+
void this.flushOutbox().catch(() => { });
|
|
325
369
|
return {
|
|
326
370
|
...json,
|
|
327
371
|
representative: json.representative ?? false,
|
|
@@ -356,6 +400,26 @@ export class CompanionClient {
|
|
|
356
400
|
// message that happens by (world-state reactions, confirm outcomes).
|
|
357
401
|
const turnId = `turn_${this.randomId()}`;
|
|
358
402
|
const body = { text, turnId, ...(opts?.images?.length ? { images: opts.images } : {}) };
|
|
403
|
+
if (!this.opts.queueOffline)
|
|
404
|
+
return this.dispatchText(id, body, opts, turnId);
|
|
405
|
+
// Offline queue: two triggers only — the browser already knows it's
|
|
406
|
+
// offline, or fetch itself rejected without an HTTP response. An HTTP
|
|
407
|
+
// error (4xx/5xx incl. 429) means the server SAW the turn: those keep
|
|
408
|
+
// the normal throw semantics and are never queued.
|
|
409
|
+
if (typeof navigator !== 'undefined' && navigator.onLine === false) {
|
|
410
|
+
return this.queueSend(turnId, text, opts);
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
return await this.dispatchText(id, body, opts, turnId);
|
|
414
|
+
}
|
|
415
|
+
catch (e) {
|
|
416
|
+
if (this.isNetworkSendFailure(e))
|
|
417
|
+
return this.queueSend(turnId, text, opts);
|
|
418
|
+
throw e;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/** The pre-queue dispatch of sendText: awaitReply / streaming / buffered. */
|
|
422
|
+
async dispatchText(id, body, opts, turnId) {
|
|
359
423
|
if (opts?.awaitReply)
|
|
360
424
|
return this.sendTextAwaitingReply(id, body, opts, turnId);
|
|
361
425
|
const wantStream = opts?.stream ?? this.deltaHandlers.size > 0;
|
|
@@ -365,6 +429,32 @@ export class CompanionClient {
|
|
|
365
429
|
}
|
|
366
430
|
return this.sendTextStreaming(id, body, opts?.signal);
|
|
367
431
|
}
|
|
432
|
+
/** True only for a send that never reached the server: fetch rejected at
|
|
433
|
+
* the network level, which asCompanionError wraps as status 0 with NO
|
|
434
|
+
* code. Every code-carrying status-0 error is deliberate — `aborted` is
|
|
435
|
+
* the caller cancelling, `reply_timeout`/`needs_event_stream` mean the
|
|
436
|
+
* POST was accepted — and any nonzero status is a response the server
|
|
437
|
+
* produced. None of those may queue. */
|
|
438
|
+
isNetworkSendFailure(e) {
|
|
439
|
+
return e instanceof CompanionError && e.status === 0 && e.code === undefined;
|
|
440
|
+
}
|
|
441
|
+
/** Enqueue an offline send. Plain sends resolve `{ seq: null, queued: true,
|
|
442
|
+
* turnId }`; awaitReply can't await a reply that won't arrive this
|
|
443
|
+
* session, so it rejects with `queued_offline` — the item is queued
|
|
444
|
+
* either way. */
|
|
445
|
+
queueSend(turnId, text, opts) {
|
|
446
|
+
this.loadOutbox().push({
|
|
447
|
+
turnId,
|
|
448
|
+
text,
|
|
449
|
+
...(opts?.images?.length ? { images: opts.images } : {}),
|
|
450
|
+
at: Date.now()
|
|
451
|
+
});
|
|
452
|
+
this.commitOutbox();
|
|
453
|
+
if (opts?.awaitReply) {
|
|
454
|
+
throw new CompanionError('offline — the text was queued and will send when the connection returns; no reply to await', 0, 'queued_offline');
|
|
455
|
+
}
|
|
456
|
+
return { seq: null, queued: true, turnId };
|
|
457
|
+
}
|
|
368
458
|
/** The awaitReply leg of sendText. Prefers the in-request answer (the
|
|
369
459
|
* streaming `done` frame's envelope); falls back to the next
|
|
370
460
|
* `companion.message` off the event stream, bounded by a timeout. The
|
|
@@ -570,6 +660,112 @@ export class CompanionClient {
|
|
|
570
660
|
throw e;
|
|
571
661
|
}
|
|
572
662
|
}
|
|
663
|
+
/** The live offline queue, loaded from the store on first use so a reloaded
|
|
664
|
+
* tab resumes what its predecessor persisted. Unreadable or foreign store
|
|
665
|
+
* content is discarded — a corrupt store must never break sending. */
|
|
666
|
+
loadOutbox() {
|
|
667
|
+
if (this.outbox)
|
|
668
|
+
return this.outbox;
|
|
669
|
+
let items = [];
|
|
670
|
+
try {
|
|
671
|
+
const raw = (this.opts.outboxStore ?? defaultOutboxStore).load(this.outboxKey());
|
|
672
|
+
const parsed = raw ? JSON.parse(raw) : null;
|
|
673
|
+
if (Array.isArray(parsed)) {
|
|
674
|
+
items = parsed.filter((q) => !!q &&
|
|
675
|
+
typeof q.turnId === 'string' &&
|
|
676
|
+
typeof q.text === 'string');
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
catch {
|
|
680
|
+
/* unreadable store — start empty */
|
|
681
|
+
}
|
|
682
|
+
this.outbox = items;
|
|
683
|
+
return items;
|
|
684
|
+
}
|
|
685
|
+
outboxKey() {
|
|
686
|
+
return `pouchy-outbox:${this.opts.surface ?? 'default'}`;
|
|
687
|
+
}
|
|
688
|
+
/** Persist + notify after EVERY queue mutation (enqueue / flushed / drop),
|
|
689
|
+
* so the stored copy never lags what a reload would need. Handler
|
|
690
|
+
* isolation matches emit(): a throwing consumer must not skip the rest. */
|
|
691
|
+
commitOutbox() {
|
|
692
|
+
const items = this.loadOutbox();
|
|
693
|
+
try {
|
|
694
|
+
(this.opts.outboxStore ?? defaultOutboxStore).save(this.outboxKey(), JSON.stringify(items));
|
|
695
|
+
}
|
|
696
|
+
catch {
|
|
697
|
+
/* store save failed — the in-memory queue still flushes this page */
|
|
698
|
+
}
|
|
699
|
+
const copy = Object.freeze([...items]);
|
|
700
|
+
for (const h of this.outboxHandlers) {
|
|
701
|
+
try {
|
|
702
|
+
h(copy);
|
|
703
|
+
}
|
|
704
|
+
catch (e) {
|
|
705
|
+
console.error('[companion-sdk] outbox handler threw', e);
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
/** The sends queued while offline (oldest first), as a defensive copy —
|
|
710
|
+
* see the `queueOffline` option. */
|
|
711
|
+
pendingOutbox() {
|
|
712
|
+
return [...this.loadOutbox()];
|
|
713
|
+
}
|
|
714
|
+
/** Subscribe to offline-queue changes (enqueue / flushed / dropped) — drive
|
|
715
|
+
* a "N pending" badge from `items.length`. Returns an unsubscribe fn. */
|
|
716
|
+
onOutboxChange(handler) {
|
|
717
|
+
this.outboxHandlers.add(handler);
|
|
718
|
+
return () => this.outboxHandlers.delete(handler);
|
|
719
|
+
}
|
|
720
|
+
/** Replay the offline queue: FIFO, sequential, each item a normal buffered
|
|
721
|
+
* input POST reusing its ORIGINAL `turnId` (the server dedupes completed
|
|
722
|
+
* turnIds — see `queueOffline` — so a retry can never double-run a turn).
|
|
723
|
+
* Runs automatically after connect() and on every stream reconnect; call
|
|
724
|
+
* it yourself for a manual retry affordance. One flush at a time —
|
|
725
|
+
* concurrent calls share the in-flight run. Per item: success (or a
|
|
726
|
+
* server-side duplicate) → removed; network failure / 5xx / 429 → stop,
|
|
727
|
+
* keep this item and the rest for the next flush; any other 4xx → the
|
|
728
|
+
* item itself is invalid (the server deliberately rejected it) — drop it,
|
|
729
|
+
* console.warn, and keep flushing. */
|
|
730
|
+
async flushOutbox() {
|
|
731
|
+
this.requireSession();
|
|
732
|
+
this.outboxFlush ??= this.runOutboxFlush().finally(() => {
|
|
733
|
+
this.outboxFlush = null;
|
|
734
|
+
});
|
|
735
|
+
return this.outboxFlush;
|
|
736
|
+
}
|
|
737
|
+
async runOutboxFlush() {
|
|
738
|
+
const id = this.requireSession();
|
|
739
|
+
const items = this.loadOutbox();
|
|
740
|
+
let sent = 0;
|
|
741
|
+
while (items.length) {
|
|
742
|
+
const item = items[0];
|
|
743
|
+
try {
|
|
744
|
+
await this.postJson(`/api/companion/session/${id}/input`, {
|
|
745
|
+
text: item.text,
|
|
746
|
+
turnId: item.turnId,
|
|
747
|
+
...(item.images?.length ? { images: item.images } : {})
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
catch (e) {
|
|
751
|
+
const status = e instanceof CompanionError ? e.status : 0;
|
|
752
|
+
if (status >= 400 && status < 500 && status !== 429) {
|
|
753
|
+
// The server saw it and said no — retrying can't fix the item.
|
|
754
|
+
console.warn('[companion-sdk] dropping queued send the server rejected', status, e);
|
|
755
|
+
items.shift();
|
|
756
|
+
this.commitOutbox();
|
|
757
|
+
continue;
|
|
758
|
+
}
|
|
759
|
+
// Unreachable again (or throttled / a server-side failure): keep
|
|
760
|
+
// this item and everything behind it for the next flush.
|
|
761
|
+
break;
|
|
762
|
+
}
|
|
763
|
+
items.shift();
|
|
764
|
+
sent += 1;
|
|
765
|
+
this.commitOutbox();
|
|
766
|
+
}
|
|
767
|
+
return { sent, remaining: items.length };
|
|
768
|
+
}
|
|
573
769
|
/** Subscribe to token-streaming deltas of the reply (P1-2). Registering a
|
|
574
770
|
* subscriber makes sendText stream automatically. Returns an unsubscribe
|
|
575
771
|
* function. Render chunks as they arrive; on `meta.reset` clear the partial;
|