@kortix/sdk 0.12.7 → 0.13.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/README.md +13 -6
- package/dist/browser/session-sync/session-sync-registry.d.ts +7 -2
- package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
- package/dist/browser/session-sync/session-sync-registry.js +33 -44
- package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
- package/dist/browser/stores/opencode-compaction-store.d.ts +9 -3
- package/dist/browser/stores/opencode-compaction-store.d.ts.map +1 -1
- package/dist/browser/stores/opencode-compaction-store.js +5 -12
- package/dist/browser/stores/opencode-compaction-store.js.map +1 -1
- package/dist/browser/stores/sandbox-connection-store.d.ts +28 -17
- package/dist/browser/stores/sandbox-connection-store.d.ts.map +1 -1
- package/dist/browser/stores/sandbox-connection-store.js +32 -84
- package/dist/browser/stores/sandbox-connection-store.js.map +1 -1
- package/dist/browser/stores/session-working-store.d.ts +73 -0
- package/dist/browser/stores/session-working-store.d.ts.map +1 -0
- package/dist/browser/stores/session-working-store.js +86 -0
- package/dist/browser/stores/session-working-store.js.map +1 -0
- package/dist/browser/stores/sync-store/types.d.ts +14 -4
- package/dist/browser/stores/sync-store/types.d.ts.map +1 -1
- package/dist/browser/stores/sync-store.d.ts +140 -3
- package/dist/browser/stores/sync-store.d.ts.map +1 -1
- package/dist/browser/stores/sync-store.js +425 -36
- package/dist/browser/stores/sync-store.js.map +1 -1
- package/dist/core/client/kortix.d.ts +102 -1
- package/dist/core/client/kortix.d.ts.map +1 -1
- package/dist/core/client/kortix.js +78 -0
- package/dist/core/client/kortix.js.map +1 -1
- package/dist/core/files/client.d.ts +50 -2
- package/dist/core/files/client.d.ts.map +1 -1
- package/dist/core/files/client.js +253 -44
- package/dist/core/files/client.js.map +1 -1
- package/dist/core/files/types.d.ts +11 -0
- package/dist/core/files/types.d.ts.map +1 -1
- package/dist/core/http/abort-error.d.ts +89 -0
- package/dist/core/http/abort-error.d.ts.map +1 -0
- package/dist/core/http/abort-error.js +190 -0
- package/dist/core/http/abort-error.js.map +1 -0
- package/dist/core/http/api-client.d.ts.map +1 -1
- package/dist/core/http/api-client.js +28 -4
- package/dist/core/http/api-client.js.map +1 -1
- package/dist/core/http/impersonation.d.ts +58 -0
- package/dist/core/http/impersonation.d.ts.map +1 -0
- package/dist/core/http/impersonation.js +174 -0
- package/dist/core/http/impersonation.js.map +1 -0
- package/dist/core/rest/platform-client/github-app.d.ts +13 -0
- package/dist/core/rest/platform-client/github-app.d.ts.map +1 -1
- package/dist/core/rest/platform-client/github-app.js +2 -0
- package/dist/core/rest/platform-client/github-app.js.map +1 -1
- package/dist/core/rest/platform-client/members.d.ts +10 -64
- package/dist/core/rest/platform-client/members.d.ts.map +1 -1
- package/dist/core/rest/platform-client/members.js +10 -28
- package/dist/core/rest/platform-client/members.js.map +1 -1
- package/dist/core/rest/projects-client/accounts.d.ts +30 -1
- package/dist/core/rest/projects-client/accounts.d.ts.map +1 -1
- package/dist/core/rest/projects-client/accounts.js +1 -1
- package/dist/core/rest/projects-client/accounts.js.map +1 -1
- package/dist/core/rest/projects-client/agent-config.d.ts +21 -0
- package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
- package/dist/core/rest/projects-client/agent-config.js +14 -0
- package/dist/core/rest/projects-client/agent-config.js.map +1 -1
- package/dist/core/rest/projects-client/apps.d.ts +13 -0
- package/dist/core/rest/projects-client/apps.d.ts.map +1 -1
- package/dist/core/rest/projects-client/apps.js.map +1 -1
- package/dist/core/rest/projects-client/assignments.d.ts +114 -0
- package/dist/core/rest/projects-client/assignments.d.ts.map +1 -0
- package/dist/core/rest/projects-client/assignments.js +91 -0
- package/dist/core/rest/projects-client/assignments.js.map +1 -0
- package/dist/core/rest/projects-client/billing.d.ts +80 -1
- package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
- package/dist/core/rest/projects-client/billing.js +61 -2
- package/dist/core/rest/projects-client/billing.js.map +1 -1
- package/dist/core/rest/projects-client/connectors.d.ts +2 -0
- package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
- package/dist/core/rest/projects-client/connectors.js.map +1 -1
- package/dist/core/rest/projects-client/files.js +2 -2
- package/dist/core/rest/projects-client/files.js.map +1 -1
- package/dist/core/rest/projects-client/gateway.d.ts +51 -0
- package/dist/core/rest/projects-client/gateway.d.ts.map +1 -1
- package/dist/core/rest/projects-client/gateway.js.map +1 -1
- package/dist/core/rest/projects-client/iam.d.ts +51 -3
- package/dist/core/rest/projects-client/iam.d.ts.map +1 -1
- package/dist/core/rest/projects-client/iam.js +18 -1
- package/dist/core/rest/projects-client/iam.js.map +1 -1
- package/dist/core/rest/projects-client/index.d.ts +1 -0
- package/dist/core/rest/projects-client/index.d.ts.map +1 -1
- package/dist/core/rest/projects-client/index.js +1 -0
- package/dist/core/rest/projects-client/index.js.map +1 -1
- package/dist/core/rest/projects-client/projects.d.ts +1 -1
- package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
- package/dist/core/rest/projects-client/projects.js +3 -0
- package/dist/core/rest/projects-client/projects.js.map +1 -1
- package/dist/core/rest/projects-client/secrets.d.ts +11 -0
- package/dist/core/rest/projects-client/secrets.d.ts.map +1 -1
- package/dist/core/rest/projects-client/secrets.js +1 -1
- package/dist/core/rest/projects-client/secrets.js.map +1 -1
- package/dist/core/rest/projects-client/session-costs.d.ts +33 -0
- package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -1
- package/dist/core/rest/projects-client/session-costs.js.map +1 -1
- package/dist/core/rest/projects-client/sessions.d.ts +253 -4
- package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
- package/dist/core/rest/projects-client/sessions.js +101 -4
- package/dist/core/rest/projects-client/sessions.js.map +1 -1
- package/dist/core/rest/projects-client/shared.d.ts +10 -1
- package/dist/core/rest/projects-client/shared.d.ts.map +1 -1
- package/dist/core/rest/projects-client/shared.js.map +1 -1
- package/dist/core/rest/projects-client/tokens.d.ts +13 -1
- package/dist/core/rest/projects-client/tokens.d.ts.map +1 -1
- package/dist/core/rest/projects-client/tokens.js +7 -2
- package/dist/core/rest/projects-client/tokens.js.map +1 -1
- package/dist/core/rest/projects-client/triggers.d.ts +69 -2
- package/dist/core/rest/projects-client/triggers.d.ts.map +1 -1
- package/dist/core/rest/projects-client/triggers.js +1 -1
- package/dist/core/rest/projects-client/triggers.js.map +1 -1
- package/dist/core/session/compaction.d.ts +98 -0
- package/dist/core/session/compaction.d.ts.map +1 -0
- package/dist/core/session/compaction.js +108 -0
- package/dist/core/session/compaction.js.map +1 -0
- package/dist/core/session/health.d.ts +22 -0
- package/dist/core/session/health.d.ts.map +1 -1
- package/dist/core/session/health.js +31 -5
- package/dist/core/session/health.js.map +1 -1
- package/dist/core/session/index.d.ts +2 -0
- package/dist/core/session/index.d.ts.map +1 -1
- package/dist/core/session/index.js +2 -0
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/message-queue.d.ts +79 -15
- package/dist/core/session/message-queue.d.ts.map +1 -1
- package/dist/core/session/message-queue.js +73 -27
- package/dist/core/session/message-queue.js.map +1 -1
- package/dist/core/session/rewind.d.ts +76 -10
- package/dist/core/session/rewind.d.ts.map +1 -1
- package/dist/core/session/rewind.js +68 -11
- package/dist/core/session/rewind.js.map +1 -1
- package/dist/core/session/working.d.ts +241 -0
- package/dist/core/session/working.d.ts.map +1 -0
- package/dist/core/session/working.js +261 -0
- package/dist/core/session/working.js.map +1 -0
- package/dist/core/session-sync/session-sync-controller.d.ts +35 -20
- package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
- package/dist/core/session-sync/session-sync-controller.js +48 -115
- package/dist/core/session-sync/session-sync-controller.js.map +1 -1
- package/dist/core/stream/event-stream.d.ts +22 -0
- package/dist/core/stream/event-stream.d.ts.map +1 -1
- package/dist/core/stream/event-stream.js +132 -36
- package/dist/core/stream/event-stream.js.map +1 -1
- package/dist/core/turns/classify.d.ts +5 -2
- package/dist/core/turns/classify.d.ts.map +1 -1
- package/dist/core/turns/classify.js +1 -0
- package/dist/core/turns/classify.js.map +1 -1
- package/dist/core/turns/errors.d.ts +11 -0
- package/dist/core/turns/errors.d.ts.map +1 -1
- package/dist/core/turns/errors.js +49 -2
- package/dist/core/turns/errors.js.map +1 -1
- package/dist/core/turns/grouping.d.ts +32 -2
- package/dist/core/turns/grouping.d.ts.map +1 -1
- package/dist/core/turns/grouping.js +31 -2
- package/dist/core/turns/grouping.js.map +1 -1
- package/dist/core/turns/index.d.ts +1 -0
- package/dist/core/turns/index.d.ts.map +1 -1
- package/dist/core/turns/index.js +1 -0
- package/dist/core/turns/index.js.map +1 -1
- package/dist/core/turns/open-turn.d.ts +81 -0
- package/dist/core/turns/open-turn.d.ts.map +1 -0
- package/dist/core/turns/open-turn.js +77 -0
- package/dist/core/turns/open-turn.js.map +1 -0
- package/dist/core/turns/state.d.ts +1 -1
- package/dist/core/turns/state.d.ts.map +1 -1
- package/dist/core/turns/state.js +29 -27
- package/dist/core/turns/state.js.map +1 -1
- package/dist/core/turns/types.d.ts +8 -0
- package/dist/core/turns/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/kortix.esm.min.js +25 -25
- package/dist/kortix.global.js +25 -25
- package/dist/node/server.d.ts.map +1 -1
- package/dist/node/server.js +14 -2
- package/dist/node/server.js.map +1 -1
- package/dist/react/index.d.ts +3 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +8 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/initial-session-pin.d.ts +17 -0
- package/dist/react/initial-session-pin.d.ts.map +1 -1
- package/dist/react/initial-session-pin.js +58 -0
- package/dist/react/initial-session-pin.js.map +1 -1
- package/dist/react/opencode.d.ts +6 -2
- package/dist/react/opencode.d.ts.map +1 -1
- package/dist/react/opencode.js +5 -1
- package/dist/react/opencode.js.map +1 -1
- package/dist/react/prefetch-session-start.d.ts +10 -4
- package/dist/react/prefetch-session-start.d.ts.map +1 -1
- package/dist/react/prefetch-session-start.js +10 -4
- package/dist/react/prefetch-session-start.js.map +1 -1
- package/dist/react/query-keys.d.ts +8 -2
- package/dist/react/query-keys.d.ts.map +1 -1
- package/dist/react/query-keys.js +8 -2
- package/dist/react/query-keys.js.map +1 -1
- package/dist/react/session-start-stash.d.ts +25 -0
- package/dist/react/session-start-stash.d.ts.map +1 -1
- package/dist/react/session-start-stash.js +34 -3
- package/dist/react/session-start-stash.js.map +1 -1
- package/dist/react/session-title-sync.d.ts +5 -1
- package/dist/react/session-title-sync.d.ts.map +1 -1
- package/dist/react/session-title-sync.js +16 -4
- package/dist/react/session-title-sync.js.map +1 -1
- package/dist/react/use-admin-accounts.d.ts +121 -0
- package/dist/react/use-admin-accounts.d.ts.map +1 -1
- package/dist/react/use-admin-accounts.js +92 -0
- package/dist/react/use-admin-accounts.js.map +1 -1
- package/dist/react/use-can.d.ts +105 -0
- package/dist/react/use-can.d.ts.map +1 -0
- package/dist/react/use-can.js +190 -0
- package/dist/react/use-can.js.map +1 -0
- package/dist/react/use-canonical-opencode-session.d.ts +6 -1
- package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
- package/dist/react/use-canonical-opencode-session.js +46 -3
- package/dist/react/use-canonical-opencode-session.js.map +1 -1
- package/dist/react/use-impersonation.d.ts +54 -0
- package/dist/react/use-impersonation.d.ts.map +1 -0
- package/dist/react/use-impersonation.js +91 -0
- package/dist/react/use-impersonation.js.map +1 -0
- package/dist/react/use-opencode-events/handle-event.d.ts +10 -0
- package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
- package/dist/react/use-opencode-events/handle-event.js +76 -7
- package/dist/react/use-opencode-events/handle-event.js.map +1 -1
- package/dist/react/use-opencode-events/helpers.d.ts +21 -8
- package/dist/react/use-opencode-events/helpers.d.ts.map +1 -1
- package/dist/react/use-opencode-events/helpers.js +25 -26
- package/dist/react/use-opencode-events/helpers.js.map +1 -1
- package/dist/react/use-opencode-events/index.d.ts.map +1 -1
- package/dist/react/use-opencode-events/index.js +43 -26
- package/dist/react/use-opencode-events/index.js.map +1 -1
- package/dist/react/use-opencode-events/use-event-stream-refs.d.ts.map +1 -1
- package/dist/react/use-opencode-events/use-event-stream-refs.js +66 -3
- package/dist/react/use-opencode-events/use-event-stream-refs.js.map +1 -1
- package/dist/react/use-opencode-local.d.ts +17 -0
- package/dist/react/use-opencode-local.d.ts.map +1 -1
- package/dist/react/use-opencode-local.js +41 -7
- package/dist/react/use-opencode-local.js.map +1 -1
- package/dist/react/use-opencode-sessions/messages.d.ts +101 -1
- package/dist/react/use-opencode-sessions/messages.d.ts.map +1 -1
- package/dist/react/use-opencode-sessions/messages.js +481 -63
- package/dist/react/use-opencode-sessions/messages.js.map +1 -1
- package/dist/react/use-project-apps.d.ts +24 -1
- package/dist/react/use-project-apps.d.ts.map +1 -1
- package/dist/react/use-project-apps.js +5 -3
- package/dist/react/use-project-apps.js.map +1 -1
- package/dist/react/use-runtime-boot-stalled.d.ts +32 -0
- package/dist/react/use-runtime-boot-stalled.d.ts.map +1 -0
- package/dist/react/use-runtime-boot-stalled.js +48 -0
- package/dist/react/use-runtime-boot-stalled.js.map +1 -0
- package/dist/react/use-runtime-reconnect.d.ts +67 -1
- package/dist/react/use-runtime-reconnect.d.ts.map +1 -1
- package/dist/react/use-runtime-reconnect.js +116 -18
- package/dist/react/use-runtime-reconnect.js.map +1 -1
- package/dist/react/use-session-prompts.d.ts +113 -0
- package/dist/react/use-session-prompts.d.ts.map +1 -0
- package/dist/react/use-session-prompts.js +242 -0
- package/dist/react/use-session-prompts.js.map +1 -0
- package/dist/react/use-session-send.d.ts +169 -20
- package/dist/react/use-session-send.d.ts.map +1 -1
- package/dist/react/use-session-send.js +178 -29
- package/dist/react/use-session-send.js.map +1 -1
- package/dist/react/use-session-sync.d.ts +35 -2
- package/dist/react/use-session-sync.d.ts.map +1 -1
- package/dist/react/use-session-sync.js +46 -9
- package/dist/react/use-session-sync.js.map +1 -1
- package/dist/react/use-session-working.d.ts +57 -0
- package/dist/react/use-session-working.d.ts.map +1 -0
- package/dist/react/use-session-working.js +178 -0
- package/dist/react/use-session-working.js.map +1 -0
- package/dist/react/use-session.d.ts +122 -5
- package/dist/react/use-session.d.ts.map +1 -1
- package/dist/react/use-session.js +343 -69
- package/dist/react/use-session.js.map +1 -1
- package/package.json +2 -2
- package/dist/browser/stores/tab-store.d.ts +0 -91
- package/dist/browser/stores/tab-store.d.ts.map +0 -1
- package/dist/browser/stores/tab-store.js +0 -369
- package/dist/browser/stores/tab-store.js.map +0 -1
- package/dist/core/session/send-queue.d.ts +0 -70
- package/dist/core/session/send-queue.d.ts.map +0 -1
- package/dist/core/session/send-queue.js +0 -116
- package/dist/core/session/send-queue.js.map +0 -1
|
@@ -3,6 +3,7 @@ import { useMutation } from '@tanstack/react-query';
|
|
|
3
3
|
import { useEffect } from 'react';
|
|
4
4
|
import { getClient } from '../../core/runtime/client.js';
|
|
5
5
|
import { logger } from '../../core/http/logger.js';
|
|
6
|
+
import { isAbortError } from '../../core/http/abort-error.js';
|
|
6
7
|
import { useSyncStore } from '../../browser/stores/sync-store.js';
|
|
7
8
|
import { canQueryOpenCodeSession, unwrap } from './shared.js';
|
|
8
9
|
// ============================================================================
|
|
@@ -159,6 +160,17 @@ export function useOpenCodeMessages(sessionId) {
|
|
|
159
160
|
* Generate a monotonic ascending ID compatible with the server's Identifier.ascending().
|
|
160
161
|
* Server format: prefix + "_" + 12-char hex timestamp + 14-char random base62 = prefix_<26 chars>
|
|
161
162
|
* Server validates: z.string().startsWith("msg") for messages, "prt" for parts.
|
|
163
|
+
*
|
|
164
|
+
* ⚠️ **The time field is NOT comparable with a server-minted id, despite the
|
|
165
|
+
* name.** opencode encodes the LOW 6 bytes of `Date.now() * 0x1000 + counter`;
|
|
166
|
+
* this keeps the HIGH 12 hex digits of the same number (`.slice(0, 12)` of a
|
|
167
|
+
* 14-digit string, i.e. a divide by 256). Today that yields `msg_19ff…` where
|
|
168
|
+
* opencode mints `msg_fa4a…`, so EVERY id from here sorts before EVERY id from
|
|
169
|
+
* the server. Local-only ids (an optimistic message a host renders while its
|
|
170
|
+
* prompt is in flight) do not care. **Anything that goes on the wire does** —
|
|
171
|
+
* use `mintPromptMessageId` below, which encodes the field the way opencode
|
|
172
|
+
* does. Left as-is on purpose: this is a published export, and hosts key
|
|
173
|
+
* optimistic state on the exact strings it returns.
|
|
162
174
|
*/
|
|
163
175
|
let lastIdTimestamp = 0;
|
|
164
176
|
let idCounter = 0;
|
|
@@ -177,6 +189,308 @@ export function ascendingId(prefix = 'msg') {
|
|
|
177
189
|
rand += chars[Math.floor(Math.random() * 62)];
|
|
178
190
|
return `${prefix}_${hex}${rand}`;
|
|
179
191
|
}
|
|
192
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
193
|
+
// One prompt submission = one client-minted `messageID`.
|
|
194
|
+
//
|
|
195
|
+
// The Kortix sandbox proxy refuses to deliver a prompt body it may already have
|
|
196
|
+
// delivered. It identifies a delivery, in precedence order, by the caller's
|
|
197
|
+
// `Idempotency-Key` header (never set by a browser — not on the API's CORS
|
|
198
|
+
// allow-list); THEN by the wire `messageID` this module mints below, when the
|
|
199
|
+
// body carries one; and only when neither is present, by a sha256 of the
|
|
200
|
+
// request body. The dedupe cache holds a claim for 10 minutes — long enough to
|
|
201
|
+
// outlive a sandbox wake from auto-stop, which routinely exceeds the 60s this
|
|
202
|
+
// TTL used to be
|
|
203
|
+
// (`apps/api/src/sandbox-proxy/prompt-dedupe.ts`, `promptDeliveryKey`,
|
|
204
|
+
// `claimPromptDelivery`). A repeat is answered
|
|
205
|
+
// `200 {"status":"duplicate","deduplicated":true}` and never reaches opencode.
|
|
206
|
+
//
|
|
207
|
+
// Because the dedupe key is now the id, not the bytes, a RETRY of one
|
|
208
|
+
// submission (same messageID, body possibly re-serialized) is still recognized
|
|
209
|
+
// as the same delivery, AND a genuinely new submission with byte-identical text
|
|
210
|
+
// (a user sending "continue" twice on purpose) is never mistaken for a repeat
|
|
211
|
+
// just because the words match — it mints its own fresh id and goes through.
|
|
212
|
+
// Before this module existed, the payload below was built from the session id,
|
|
213
|
+
// the mapped parts (whose client ids are dropped), and the model/agent picks —
|
|
214
|
+
// nothing else — so sending the same text twice produced a BYTE-IDENTICAL body,
|
|
215
|
+
// and the second submission was silently lost: no error, no turn, nothing on
|
|
216
|
+
// screen. Minting a per-submission id fixes that at the source; keying the
|
|
217
|
+
// proxy's dedupe on that id (rather than the bytes) is the second half — it
|
|
218
|
+
// means the fix holds even if two submissions' bodies ever happen to collide
|
|
219
|
+
// for a reason that has nothing to do with the user's intent.
|
|
220
|
+
//
|
|
221
|
+
// "One submission" is bigger than one call. The internal retry loop is only the
|
|
222
|
+
// retry the SDK owns; a host retries too — apps/web's message queue re-dispatches
|
|
223
|
+
// a failed entry through `retry` → `sendQueuedMessage` → `handleSend` →
|
|
224
|
+
// `sendParts`, which lands here as a FRESH call. Minting per call there would
|
|
225
|
+
// deliver a prompt that reached opencode but reported failure a SECOND time, and
|
|
226
|
+
// the second prompt aborts the turn the first one started. So the caller may
|
|
227
|
+
// name its submission with `clientMessageId` — the queue entry's own stable key
|
|
228
|
+
// (`QueuedMessageInput.clientMessageId`) — and every dispatch of that submission
|
|
229
|
+
// resolves to the one wire id.
|
|
230
|
+
//
|
|
231
|
+
// The caller names the submission; this module still owns the wire FORMAT.
|
|
232
|
+
// A host id (`cm_12`, or `ascendingId`'s `msg_19ff…`, which encodes the wrong
|
|
233
|
+
// bits — see the warning on it) cannot be used on the wire: opencode orders by
|
|
234
|
+
// the id's clock prefix, so a badly-shaped id reads as already-answered and the
|
|
235
|
+
// turn never runs.
|
|
236
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
237
|
+
// `BigInt(0x…)` rather than the `0x…n` literal, throughout. This package is
|
|
238
|
+
// typechecked by its consumers as well as by itself, and apps/web's tsconfig
|
|
239
|
+
// targets below ES2020, where the literal syntax is `TS2737: BigInt literals
|
|
240
|
+
// are not available`. The call form compiles under every target and is exact —
|
|
241
|
+
// each value below is far inside `Number.MAX_SAFE_INTEGER`.
|
|
242
|
+
/** opencode keeps the low 6 bytes of its id clock, so the field wraps ~every 2.2y. */
|
|
243
|
+
const WIRE_ID_TIME_MASK = BigInt(0xffffffffffff);
|
|
244
|
+
/** Sub-millisecond slots per millisecond in that clock (`Date.now() * 0x1000`). */
|
|
245
|
+
const WIRE_ID_TIME_SCALE = BigInt(0x1000);
|
|
246
|
+
/**
|
|
247
|
+
* Ceiling on the correction taken from the session's own transcript: 1h of
|
|
248
|
+
* clock. Large enough to absorb any realistic browser-vs-sandbox skew, small
|
|
249
|
+
* enough that one wrapped or malformed id cannot drag every later id weeks into
|
|
250
|
+
* the future.
|
|
251
|
+
*/
|
|
252
|
+
const MAX_WIRE_ID_CLOCK_CORRECTION = BigInt(60 * 60 * 1000) * WIRE_ID_TIME_SCALE;
|
|
253
|
+
/**
|
|
254
|
+
* How far back to date a mint before the correction below lifts it into place.
|
|
255
|
+
*
|
|
256
|
+
* The two clocks are not the same clock. opencode mints the ASSISTANT reply
|
|
257
|
+
* from the sandbox's clock; this mints the USER message from the browser's. The
|
|
258
|
+
* sync store sorts the transcript by raw id, so a browser running fast puts the
|
|
259
|
+
* prompt ABOVE the reply that answers it — and it is self-sustaining, because
|
|
260
|
+
* the next mint corrects off the user's own future-dated message. Every reply
|
|
261
|
+
* then lands above its prompt, for as long as the clock is wrong.
|
|
262
|
+
*
|
|
263
|
+
* The fix is an asymmetry rather than a skew estimate, because the two error
|
|
264
|
+
* directions do NOT cost the same:
|
|
265
|
+
*
|
|
266
|
+
* - too EARLY is self-correcting. `newestKnownMessageTime` lifts the mint
|
|
267
|
+
* above everything already on record, which is exactly where it belongs.
|
|
268
|
+
* - too LATE is the bug, and nothing downstream can detect it.
|
|
269
|
+
*
|
|
270
|
+
* So never trust the browser clock forward. Backdate it past any ordinary
|
|
271
|
+
* drift, then let the transcript place the id. In a session with history the
|
|
272
|
+
* value barely matters — the lift decides the answer. It only decides anything
|
|
273
|
+
* for the FIRST message of a session, where there is no history to lift above
|
|
274
|
+
* and the reply is the only thing to sort against.
|
|
275
|
+
*
|
|
276
|
+
* 2 minutes: comfortably past unsynced-clock drift (Windows re-syncs weekly and
|
|
277
|
+
* can be tens of seconds out), and far under `MAX_WIRE_ID_CLOCK_CORRECTION` so
|
|
278
|
+
* the lift still engages.
|
|
279
|
+
*/
|
|
280
|
+
const CLOCK_SKEW_BACKDATE_MS = 2 * 60 * 1000;
|
|
281
|
+
const WIRE_MESSAGE_ID_TIME = /^msg_([0-9a-f]{12})/;
|
|
282
|
+
const BASE62 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
283
|
+
// Monotonic tie-break for two submissions inside the same millisecond. Scoped
|
|
284
|
+
// to the LAST session deliberately: a skew correction learned from one
|
|
285
|
+
// session's transcript must not follow the user into another session, where it
|
|
286
|
+
// would push a fresh user message past assistant replies that come after it.
|
|
287
|
+
let lastMintedSessionId = '';
|
|
288
|
+
let lastMintedWireId = BigInt(0);
|
|
289
|
+
/**
|
|
290
|
+
* The highest id-clock value this session's transcript already shows that a
|
|
291
|
+
* mint may place itself above, or null.
|
|
292
|
+
*
|
|
293
|
+
* `ceiling` is what makes this a bounded scan rather than a plain max, and it
|
|
294
|
+
* is load-bearing. The same store also holds ids that are NOT opencode wire
|
|
295
|
+
* ids: every send inserts an OPTIMISTIC user message keyed by `ascendingId`,
|
|
296
|
+
* which keeps the HIGH hex digits of the id clock (`msg_1a01…`) where opencode
|
|
297
|
+
* keeps the LOW ones (`msg_0141…`) — about 2.8e13 above every real id, and it
|
|
298
|
+
* still matches the 12-hex shape. Taking the max over everything therefore
|
|
299
|
+
* returned that optimistic id, the correction bound then refused it, and the
|
|
300
|
+
* lift never engaged AT ALL in the real app. A prompt sent inside
|
|
301
|
+
* {@link CLOCK_SKEW_BACKDATE_MS} of the previous reply then went out with a
|
|
302
|
+
* wire id BELOW that reply, opencode read it as already answered, and the turn
|
|
303
|
+
* never ran — no error, nothing on screen. (Reproduced in the browser on the
|
|
304
|
+
* worktree stack: reply at T, prompt at T+70s, id 50s below it, no assistant
|
|
305
|
+
* message ever created.)
|
|
306
|
+
*
|
|
307
|
+
* So an id this mint could not possibly have to sort against is skipped, not
|
|
308
|
+
* allowed to veto the correction for the whole session. A wrapped or garbage
|
|
309
|
+
* id is handled by the same rule, which is what the bound was for originally.
|
|
310
|
+
*/
|
|
311
|
+
function newestKnownMessageTime(sessionId, ceiling) {
|
|
312
|
+
const messages = useSyncStore.getState().messages[sessionId];
|
|
313
|
+
if (!messages?.length)
|
|
314
|
+
return null;
|
|
315
|
+
let newest = null;
|
|
316
|
+
for (const message of messages) {
|
|
317
|
+
const match = WIRE_MESSAGE_ID_TIME.exec(message?.id ?? '');
|
|
318
|
+
if (!match)
|
|
319
|
+
continue;
|
|
320
|
+
const encoded = BigInt(`0x${match[1]}`);
|
|
321
|
+
if (encoded > ceiling)
|
|
322
|
+
continue;
|
|
323
|
+
if (newest === null || encoded > newest)
|
|
324
|
+
newest = encoded;
|
|
325
|
+
}
|
|
326
|
+
return newest;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Mint the `messageID` for ONE prompt submission, in opencode's own
|
|
330
|
+
* `Identifier.ascending("message")` wire format: `msg_` + the low 48 bits of
|
|
331
|
+
* `Date.now() * 0x1000` as 12 hex chars + 14 random base62 chars.
|
|
332
|
+
*
|
|
333
|
+
* Ordering is load-bearing, which is why this does not reuse `ascendingId`
|
|
334
|
+
* (see the warning on it): opencode resolves "has this prompt already been
|
|
335
|
+
* answered?" by id order, so a user message that sorts before the assistant
|
|
336
|
+
* replies already on record is read as answered and the turn never runs — the
|
|
337
|
+
* same silent loss this whole change exists to remove. Two guards keep the
|
|
338
|
+
* minted id above everything already known:
|
|
339
|
+
*
|
|
340
|
+
* 1. If this session's transcript already holds a HIGHER id — the browser
|
|
341
|
+
* clock lags the sandbox's — start just above it, bounded by
|
|
342
|
+
* {@link MAX_WIRE_ID_CLOCK_CORRECTION}.
|
|
343
|
+
* 2. Never repeat or go below the previous id minted for this same session,
|
|
344
|
+
* so two submissions inside one millisecond still order.
|
|
345
|
+
*/
|
|
346
|
+
function mintPromptMessageId(sessionId) {
|
|
347
|
+
let encoded = (BigInt(Date.now() - CLOCK_SKEW_BACKDATE_MS) * WIRE_ID_TIME_SCALE) & WIRE_ID_TIME_MASK;
|
|
348
|
+
// The bound lives in the scan, so one unplaceable id skips itself instead of
|
|
349
|
+
// cancelling the correction for every id in the transcript.
|
|
350
|
+
const newest = newestKnownMessageTime(sessionId, encoded + MAX_WIRE_ID_CLOCK_CORRECTION);
|
|
351
|
+
if (newest !== null && newest >= encoded) {
|
|
352
|
+
encoded = newest + BigInt(1);
|
|
353
|
+
}
|
|
354
|
+
if (sessionId === lastMintedSessionId && encoded <= lastMintedWireId) {
|
|
355
|
+
encoded = lastMintedWireId + BigInt(1);
|
|
356
|
+
}
|
|
357
|
+
encoded &= WIRE_ID_TIME_MASK;
|
|
358
|
+
lastMintedSessionId = sessionId;
|
|
359
|
+
lastMintedWireId = encoded;
|
|
360
|
+
let random = '';
|
|
361
|
+
for (let i = 0; i < 14; i++)
|
|
362
|
+
random += BASE62[Math.floor(Math.random() * 62)];
|
|
363
|
+
return `msg_${encoded.toString(16).padStart(12, '0')}${random}`;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* How many submissions' wire ids to remember. One `Map` entry per queued
|
|
367
|
+
* message, so a long-lived tab must not keep them all. Past the window the
|
|
368
|
+
* oldest submission re-mints on its next dispatch — i.e. it degrades to exactly
|
|
369
|
+
* the per-call behaviour, never to a wrong id — and 256 entries is far more than
|
|
370
|
+
* the 60s the proxy's dedupe actually spans.
|
|
371
|
+
*/
|
|
372
|
+
const MAX_REMEMBERED_SUBMISSIONS = 256;
|
|
373
|
+
const submissionWireIds = new Map();
|
|
374
|
+
/**
|
|
375
|
+
* The wire `messageID` for ONE submission: minted on first dispatch, then reused
|
|
376
|
+
* for every later dispatch of the same `clientMessageId` in the same session.
|
|
377
|
+
*
|
|
378
|
+
* Keyed by session as well as by the caller's id because a host mints queue keys
|
|
379
|
+
* per session store, not globally, and an id has to sort against ITS session's
|
|
380
|
+
* transcript — `mintPromptMessageId` reads that transcript to place it.
|
|
381
|
+
*/
|
|
382
|
+
function submissionWireId(sessionId, clientMessageId) {
|
|
383
|
+
if (!clientMessageId)
|
|
384
|
+
return mintPromptMessageId(sessionId);
|
|
385
|
+
const key = `${sessionId}${clientMessageId}`;
|
|
386
|
+
const known = submissionWireIds.get(key);
|
|
387
|
+
if (known)
|
|
388
|
+
return known;
|
|
389
|
+
const minted = mintPromptMessageId(sessionId);
|
|
390
|
+
submissionWireIds.set(key, minted);
|
|
391
|
+
// `Map` iterates in insertion order, so the first key is the oldest.
|
|
392
|
+
while (submissionWireIds.size > MAX_REMEMBERED_SUBMISSIONS) {
|
|
393
|
+
const oldest = submissionWireIds.keys().next().value;
|
|
394
|
+
if (oldest === undefined)
|
|
395
|
+
break;
|
|
396
|
+
submissionWireIds.delete(oldest);
|
|
397
|
+
}
|
|
398
|
+
return minted;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* The wire `messageID` for one submission, for a host that does NOT send
|
|
402
|
+
* through `promptOpenCodeMessage`.
|
|
403
|
+
*
|
|
404
|
+
* The server-side prompt inbox (`createSessionPrompt`) needs the id up front:
|
|
405
|
+
* the control plane cannot mint one, because placing an id correctly means
|
|
406
|
+
* reading THIS session's transcript, and only this process holds it. Do not
|
|
407
|
+
* substitute `ascendingId('msg')` — it encodes the HIGH bits of the id clock,
|
|
408
|
+
* so it sorts below every server-minted id and OpenCode reads the prompt as
|
|
409
|
+
* already answered. See the warning on `ascendingId`.
|
|
410
|
+
*
|
|
411
|
+
* Same memo as an in-band send: one `clientMessageId` always resolves to one
|
|
412
|
+
* wire id, so a retry of a submission keeps the id the proxy's delivery claim
|
|
413
|
+
* is keyed on.
|
|
414
|
+
*/
|
|
415
|
+
export function mintSessionWireMessageId(sessionId, clientMessageId) {
|
|
416
|
+
return submissionWireId(sessionId, clientMessageId);
|
|
417
|
+
}
|
|
418
|
+
// ============================================================================
|
|
419
|
+
// T9 — cancel() cancels in-flight delivery.
|
|
420
|
+
//
|
|
421
|
+
// Before this, `promptOpenCodeMessage`'s boot/wake retry loop (below) had no
|
|
422
|
+
// `AbortSignal` at all: a prompt still retrying its ~30s backoff when the
|
|
423
|
+
// user hit Stop kept going, and — if the sandbox woke up mid-retry — landed
|
|
424
|
+
// AFTER the abort and ran the stale text. This registry lets `cancel()`
|
|
425
|
+
// reach every in-flight delivery for a session and stop it before its next
|
|
426
|
+
// attempt, whether that attempt is mid-network-call (aborts the underlying
|
|
427
|
+
// `fetch` via `signal`) or mid-backoff-sleep (rejects the sleep immediately
|
|
428
|
+
// instead of waiting it out).
|
|
429
|
+
//
|
|
430
|
+
// Scoped by session, not global: aborting one session's Stop must never touch
|
|
431
|
+
// another session's in-flight send (two tabs, or two sessions polling
|
|
432
|
+
// concurrently).
|
|
433
|
+
// ============================================================================
|
|
434
|
+
const inFlightDeliveries = new Map();
|
|
435
|
+
/** Register one delivery's controller under its session; returns the
|
|
436
|
+
* unregister function to call once the delivery settles (success, failure,
|
|
437
|
+
* or abort) so a finished delivery is never reachable by a later abort. */
|
|
438
|
+
function registerDelivery(sessionId, controller) {
|
|
439
|
+
let set = inFlightDeliveries.get(sessionId);
|
|
440
|
+
if (!set) {
|
|
441
|
+
set = new Set();
|
|
442
|
+
inFlightDeliveries.set(sessionId, set);
|
|
443
|
+
}
|
|
444
|
+
set.add(controller);
|
|
445
|
+
return () => {
|
|
446
|
+
set?.delete(controller);
|
|
447
|
+
if (set && set.size === 0)
|
|
448
|
+
inFlightDeliveries.delete(sessionId);
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Abort every in-flight `promptOpenCodeMessage` delivery for a session — the
|
|
453
|
+
* primary effect `cancel()`/`stop()` need before the abort even reaches the
|
|
454
|
+
* server: a delivery that has not yet started its next attempt when this
|
|
455
|
+
* runs never starts one, and a delivery mid-network-call gets its underlying
|
|
456
|
+
* `fetch` aborted via `signal`.
|
|
457
|
+
*
|
|
458
|
+
* Returns the number of deliveries this call aborted (0 when none were in
|
|
459
|
+
* flight for the session — not an error, just nothing to do).
|
|
460
|
+
*/
|
|
461
|
+
export function abortInFlightDeliveries(sessionId) {
|
|
462
|
+
const set = inFlightDeliveries.get(sessionId);
|
|
463
|
+
if (!set || set.size === 0)
|
|
464
|
+
return 0;
|
|
465
|
+
const controllers = [...set];
|
|
466
|
+
for (const controller of controllers)
|
|
467
|
+
controller.abort();
|
|
468
|
+
return controllers.length;
|
|
469
|
+
}
|
|
470
|
+
/** The shape `isAbortError` (`@kortix/sdk` core) recognizes on identity alone
|
|
471
|
+
* — matches a real `AbortController`/`fetch` abort's `.name`. */
|
|
472
|
+
function deliveryAbortError() {
|
|
473
|
+
const err = new Error('The operation was aborted.');
|
|
474
|
+
err.name = 'AbortError';
|
|
475
|
+
return err;
|
|
476
|
+
}
|
|
477
|
+
/** A `setTimeout` that rejects immediately (with the abort error, not a
|
|
478
|
+
* timeout) when `signal` aborts, instead of waiting out the full delay. */
|
|
479
|
+
function abortableDelay(ms, signal) {
|
|
480
|
+
if (signal.aborted)
|
|
481
|
+
return Promise.reject(deliveryAbortError());
|
|
482
|
+
return new Promise((resolve, reject) => {
|
|
483
|
+
const timer = setTimeout(() => {
|
|
484
|
+
signal.removeEventListener('abort', onAbort);
|
|
485
|
+
resolve();
|
|
486
|
+
}, ms);
|
|
487
|
+
const onAbort = () => {
|
|
488
|
+
clearTimeout(timer);
|
|
489
|
+
reject(deliveryAbortError());
|
|
490
|
+
};
|
|
491
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
492
|
+
});
|
|
493
|
+
}
|
|
180
494
|
/**
|
|
181
495
|
* Send a prompt to a session via `session.promptAsync()` — the server accepts
|
|
182
496
|
* the prompt and returns immediately (204); the actual turn streams back over
|
|
@@ -198,7 +512,7 @@ export function ascendingId(prefix = 'msg') {
|
|
|
198
512
|
* Extracted from `useSendOpenCodeMessage`'s mutationFn so it's a plain async
|
|
199
513
|
* function callable — and unit-testable — without a mutation/hook context.
|
|
200
514
|
*/
|
|
201
|
-
export async function promptOpenCodeMessage({ sessionId, parts, options, messageID, }) {
|
|
515
|
+
export async function promptOpenCodeMessage({ sessionId, parts, options, messageID, clientMessageId, }) {
|
|
202
516
|
const mappedParts = parts.map((p) => {
|
|
203
517
|
if (p.type === 'file')
|
|
204
518
|
return { type: 'file', mime: p.mime, url: p.url, filename: p.filename, source: p.source };
|
|
@@ -206,87 +520,191 @@ export async function promptOpenCodeMessage({ sessionId, parts, options, message
|
|
|
206
520
|
return { type: 'agent', name: p.name, source: p.source };
|
|
207
521
|
return { type: 'text', text: p.text };
|
|
208
522
|
});
|
|
523
|
+
// Resolved ONCE, here, outside the retry loop below — every attempt of this
|
|
524
|
+
// submission re-sends the same id, so the proxy's dedupe still short-circuits
|
|
525
|
+
// a genuine retry, while the NEXT submission gets a fresh id and can never be
|
|
526
|
+
// mistaken for this one. `clientMessageId` extends "this submission" past the
|
|
527
|
+
// loop to the host's own retry of the same queue entry; without it a fresh
|
|
528
|
+
// call always means a fresh id.
|
|
529
|
+
const promptMessageId = messageID ?? submissionWireId(sessionId, clientMessageId);
|
|
209
530
|
const payload = {
|
|
210
531
|
sessionID: sessionId,
|
|
211
532
|
parts: mappedParts,
|
|
212
|
-
|
|
533
|
+
messageID: promptMessageId,
|
|
213
534
|
...(options?.directory && { directory: options.directory }),
|
|
214
535
|
...(options?.model && { model: options.model }),
|
|
215
536
|
...(options?.agent && { agent: options.agent }),
|
|
216
537
|
...(options?.variant && { variant: options.variant }),
|
|
217
538
|
};
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
539
|
+
// One controller per delivery, registered under the session so
|
|
540
|
+
// `abortInFlightDeliveries` (called by `cancel()`/`stop()`) can reach it —
|
|
541
|
+
// and unregistered as soon as this delivery settles, so a finished delivery
|
|
542
|
+
// is never reachable by a LATER abort call for the same session.
|
|
543
|
+
const controller = new AbortController();
|
|
544
|
+
const unregister = registerDelivery(sessionId, controller);
|
|
545
|
+
try {
|
|
546
|
+
for (let attempt = 1;; attempt++) {
|
|
547
|
+
if (controller.signal.aborted)
|
|
548
|
+
throw deliveryAbortError();
|
|
549
|
+
let status;
|
|
550
|
+
let error;
|
|
551
|
+
try {
|
|
552
|
+
// Resolve the client INSIDE the retry loop, not once before it. During
|
|
553
|
+
// the sandbox-loading window `getClient()` throws "Server URL not
|
|
554
|
+
// ready" (see opencode/client.ts) — that's a boot-phase condition
|
|
555
|
+
// exactly like the proxy's 503 "opencode not ready" below, so it must
|
|
556
|
+
// participate in the SAME boot/wake retry window rather than propagate
|
|
557
|
+
// instantly with zero retries. A brand-new session's very first prompt
|
|
558
|
+
// can race the runtime url being pinned; without this the send throws
|
|
559
|
+
// before a single retry and the prompt is dropped.
|
|
560
|
+
const client = getClient();
|
|
561
|
+
// The SDK resolves (not rejects) on HTTP errors, returning
|
|
562
|
+
// { error, response } instead of throwing. The `signal` here reaches
|
|
563
|
+
// the underlying `fetch` (the generated client's `Config` extends
|
|
564
|
+
// `RequestInit`) — an abort mid-network-call actually cancels the
|
|
565
|
+
// in-flight request, not just the SDK-side bookkeeping.
|
|
566
|
+
const result = await client.session.promptAsync(payload, { signal: controller.signal });
|
|
567
|
+
if (!result?.error)
|
|
568
|
+
return; // 204 — server accepted the prompt.
|
|
569
|
+
error = result.error;
|
|
570
|
+
status = result.response?.status;
|
|
571
|
+
}
|
|
572
|
+
catch (err) {
|
|
573
|
+
if (controller.signal.aborted || isAbortError(err))
|
|
574
|
+
throw deliveryAbortError();
|
|
575
|
+
error = err; // thrown = transport failure (no status) OR getClient() not-ready.
|
|
251
576
|
}
|
|
252
|
-
|
|
253
|
-
|
|
577
|
+
const delay = getSendRetryDelayMs(attempt, status, error);
|
|
578
|
+
if (delay === null) {
|
|
579
|
+
const err = error && typeof error === 'object' ? error : undefined;
|
|
580
|
+
const errData = err?.data && typeof err.data === 'object' ? err.data : undefined;
|
|
581
|
+
const message = errData?.message || err?.message || 'Failed to send message';
|
|
582
|
+
const wrapped = new Error(typeof message === 'string' ? message : 'Failed to send message');
|
|
583
|
+
if (status) {
|
|
584
|
+
wrapped.status = status;
|
|
585
|
+
wrapped.response = { status };
|
|
586
|
+
}
|
|
587
|
+
wrapped.data = err?.data ?? err;
|
|
588
|
+
throw wrapped;
|
|
589
|
+
}
|
|
590
|
+
logger.warn('promptOpenCodeMessage retrying send', { sessionId, attempt, status });
|
|
591
|
+
// Abortable — a cancel arriving while this delivery is waiting out its
|
|
592
|
+
// backoff must reject IMMEDIATELY, not wait out the remaining delay.
|
|
593
|
+
await abortableDelay(delay, controller.signal);
|
|
254
594
|
}
|
|
255
|
-
|
|
256
|
-
|
|
595
|
+
}
|
|
596
|
+
finally {
|
|
597
|
+
unregister();
|
|
257
598
|
}
|
|
258
599
|
}
|
|
259
600
|
export function useSendOpenCodeMessage() {
|
|
260
|
-
return useMutation({
|
|
601
|
+
return useMutation({
|
|
602
|
+
mutationFn: promptOpenCodeMessage,
|
|
603
|
+
// Same rationale as `useExecuteOpenCodeCommand`: this POSTs `prompt_async`,
|
|
604
|
+
// which CREATES a user message. Retrying it sends the prompt twice.
|
|
605
|
+
//
|
|
606
|
+
// It is stated here rather than left to the host because a host default
|
|
607
|
+
// cannot know that. apps/web's is
|
|
608
|
+
// `error?.status >= 400 && error?.status < 500 ? false : failureCount < 1`,
|
|
609
|
+
// which reads like "don't retry client errors" but lets every 5xx through —
|
|
610
|
+
// and a 502 from the sandbox proxy is exactly the case where opencode may
|
|
611
|
+
// already hold the message. The proxy's content-hash dedupe has been
|
|
612
|
+
// absorbing that, which is the same "one layer relying on another's guard"
|
|
613
|
+
// shape that let a `/command` execute four times.
|
|
614
|
+
//
|
|
615
|
+
// `promptOpenCodeMessage` already runs its own bounded boot-window retry
|
|
616
|
+
// for the states that ARE safe to repeat (`opencode not ready`, sandbox
|
|
617
|
+
// still waking), so nothing is lost by switching the outer one off.
|
|
618
|
+
retry: false,
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* POST the abort to the runtime for a session, then re-read server status and
|
|
623
|
+
* force-update the store if it still reports busy (the SSE `session.idle`
|
|
624
|
+
* event should arrive on its own; this is the fallback for a missed one).
|
|
625
|
+
*
|
|
626
|
+
* Extracted from `useAbortOpenCodeSession`'s mutationFn — same reasoning as
|
|
627
|
+
* `promptOpenCodeMessage`: a plain async function is directly testable
|
|
628
|
+
* without a mutation/hook context, and `awaitAbortSettlement` below calls it
|
|
629
|
+
* (via the mutation's `mutateAsync`, so retry/pending state stay react-query-
|
|
630
|
+
* driven) without needing to render a hook to prove the failure path.
|
|
631
|
+
*
|
|
632
|
+
* Throws on a genuine abort failure — the caller (the mutation's `retry: 2`,
|
|
633
|
+
* then `awaitAbortSettlement`) decides what to do with that; this function
|
|
634
|
+
* itself never swallows it.
|
|
635
|
+
*/
|
|
636
|
+
export async function abortOpenCodeSession(sessionId) {
|
|
637
|
+
const client = getClient();
|
|
638
|
+
const result = await client.session.abort({ sessionID: sessionId });
|
|
639
|
+
unwrap(result);
|
|
640
|
+
// After abort succeeds, the SSE stream should deliver session.idle event.
|
|
641
|
+
// If the UI stays stuck, it means the SSE event wasn't received/processed.
|
|
642
|
+
// The optimistic idle status we set in handleStop should handle this, but
|
|
643
|
+
// if for some reason the abort HTTP call returned but SSE didn't update,
|
|
644
|
+
// we force-refresh the session status from the server.
|
|
645
|
+
try {
|
|
646
|
+
const statusResult = await client.session.status();
|
|
647
|
+
const statuses = statusResult.data;
|
|
648
|
+
const serverStatus = statuses?.[sessionId];
|
|
649
|
+
if (serverStatus && serverStatus.type !== 'idle') {
|
|
650
|
+
// Server still thinks we're busy - update the store with server's view
|
|
651
|
+
// This can happen if SSE events were missed
|
|
652
|
+
useSyncStore.getState().setStatus(sessionId, serverStatus);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
catch {
|
|
656
|
+
// Non-critical — SSE will eventually deliver the correct status
|
|
657
|
+
}
|
|
261
658
|
}
|
|
262
659
|
export function useAbortOpenCodeSession() {
|
|
263
660
|
return useMutation({
|
|
264
|
-
mutationFn:
|
|
265
|
-
const client = getClient();
|
|
266
|
-
const result = await client.session.abort({ sessionID: sessionId });
|
|
267
|
-
unwrap(result);
|
|
268
|
-
// After abort succeeds, the SSE stream should deliver session.idle event.
|
|
269
|
-
// If the UI stays stuck, it means the SSE event wasn't received/processed.
|
|
270
|
-
// The optimistic idle status we set in handleStop should handle this, but
|
|
271
|
-
// if for some reason the abort HTTP call returned but SSE didn't update,
|
|
272
|
-
// we force-refresh the session status from the server.
|
|
273
|
-
try {
|
|
274
|
-
const statusResult = await client.session.status();
|
|
275
|
-
const statuses = statusResult.data;
|
|
276
|
-
const serverStatus = statuses?.[sessionId];
|
|
277
|
-
if (serverStatus && serverStatus.type !== 'idle') {
|
|
278
|
-
// Server still thinks we're busy - update the store with server's view
|
|
279
|
-
// This can happen if SSE events were missed
|
|
280
|
-
useSyncStore.getState().setStatus(sessionId, serverStatus);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
// Non-critical — SSE will eventually deliver the correct status
|
|
285
|
-
}
|
|
286
|
-
},
|
|
661
|
+
mutationFn: abortOpenCodeSession,
|
|
287
662
|
retry: 2,
|
|
288
663
|
retryDelay: 300,
|
|
664
|
+
// Kept — apps/web's `session-chat.tsx` calls `.mutate(sessionId)`
|
|
665
|
+
// fire-and-forget at two call sites and does not want a global
|
|
666
|
+
// mutation-cache error handler to fire for an abort that the UI already
|
|
667
|
+
// shows as idle optimistically. This does NOT re-introduce the silent
|
|
668
|
+
// swallow `awaitAbortSettlement` exists to fix: `cancel()`/`stop()` below
|
|
669
|
+
// call `mutateAsync` and read the real settlement (success, the thrown
|
|
670
|
+
// error, or a bounded timeout) — `onError` is a side-effect callback only,
|
|
671
|
+
// it never prevents `mutateAsync`'s returned promise from rejecting.
|
|
289
672
|
onError: () => { },
|
|
290
673
|
});
|
|
291
674
|
}
|
|
675
|
+
const DEFAULT_ABORT_SETTLEMENT_TIMEOUT_MS = 5000;
|
|
676
|
+
/**
|
|
677
|
+
* Await an abort call's settlement — success, a real failure, or a bounded
|
|
678
|
+
* timeout — instead of the fire-and-forget `.mutate()` `cancel()`/`stop()`
|
|
679
|
+
* used to do. `runAbort` is normally `() => abortMutation.mutateAsync(sessionId)`
|
|
680
|
+
* (keeps react-query's own retry/`isPending` state); this takes it as a plain
|
|
681
|
+
* callback so it's directly testable without rendering a hook.
|
|
682
|
+
*
|
|
683
|
+
* Never rejects: every branch resolves to a distinguishable `AbortSettlement`
|
|
684
|
+
* the caller can read, which is the point — a swallowed `onError` used to
|
|
685
|
+
* mean a failed abort left the UI's optimistic idle state as the only signal,
|
|
686
|
+
* with nothing to tell a caller whether the server actually agreed.
|
|
687
|
+
*/
|
|
688
|
+
export async function awaitAbortSettlement(runAbort, timeoutMs = DEFAULT_ABORT_SETTLEMENT_TIMEOUT_MS) {
|
|
689
|
+
let timer;
|
|
690
|
+
const timedOut = new Promise((resolve) => {
|
|
691
|
+
timer = setTimeout(() => resolve({ status: 'timed-out' }), timeoutMs);
|
|
692
|
+
});
|
|
693
|
+
const settled = (async () => {
|
|
694
|
+
try {
|
|
695
|
+
await runAbort();
|
|
696
|
+
return { status: 'aborted' };
|
|
697
|
+
}
|
|
698
|
+
catch (error) {
|
|
699
|
+
return { status: 'failed', error };
|
|
700
|
+
}
|
|
701
|
+
})();
|
|
702
|
+
try {
|
|
703
|
+
return await Promise.race([settled, timedOut]);
|
|
704
|
+
}
|
|
705
|
+
finally {
|
|
706
|
+
if (timer !== undefined)
|
|
707
|
+
clearTimeout(timer);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
292
710
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/messages.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/messages.ts"],"names":[],"mappings":"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"}
|