@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
|
@@ -19,8 +19,9 @@
|
|
|
19
19
|
* `./types`) because exhaustiveness checking only works against the real
|
|
20
20
|
* closed union.
|
|
21
21
|
*/
|
|
22
|
-
import type { Part } from '../runtime/client.js';
|
|
23
22
|
import type { MessageWithParts } from '../../transcript.js';
|
|
23
|
+
import type { Part } from '../runtime/client.js';
|
|
24
|
+
import { type GatewayAttemptFailure } from './errors.js';
|
|
24
25
|
import type { TokenUsageLike } from './types.js';
|
|
25
26
|
export type ToolStatus = 'pending' | 'running' | 'done' | 'error';
|
|
26
27
|
/** Normalized view of a tool part's state, independent of the wire's
|
|
@@ -148,7 +149,8 @@ export declare function classifyPart(part: Part): ClassifiedPart;
|
|
|
148
149
|
/** Normalized turn-level error — the "failed turn renders as silence" bug
|
|
149
150
|
* class, solved once here instead of in every host's renderer.
|
|
150
151
|
*
|
|
151
|
-
* `provider`/`code`/`suggestion`/`upstreamStatus`/`requestId`
|
|
152
|
+
* `provider`/`code`/`suggestion`/`upstreamStatus`/`requestId`/`attemptFailures`
|
|
153
|
+
* are populated
|
|
152
154
|
* when the failure carries the LLM gateway's structured error envelope (see
|
|
153
155
|
* `extractGatewayErrorDetails`) — e.g. a BYOK auth failure, a rate limit, or
|
|
154
156
|
* an unroutable model — so a renderer can show WHICH provider failed and
|
|
@@ -161,6 +163,7 @@ export interface TurnError {
|
|
|
161
163
|
suggestion?: string;
|
|
162
164
|
upstreamStatus?: number;
|
|
163
165
|
requestId?: string;
|
|
166
|
+
attemptFailures?: GatewayAttemptFailure[];
|
|
164
167
|
}
|
|
165
168
|
export interface ClassifiedTurn {
|
|
166
169
|
parts: ClassifiedPart[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/core/turns/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAIV,IAAI,EAWL,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/core/turns/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -238,6 +238,7 @@ function normalizeTurnError(error) {
|
|
|
238
238
|
suggestion: gateway?.suggestion,
|
|
239
239
|
upstreamStatus: gateway?.upstreamStatus,
|
|
240
240
|
requestId: gateway?.requestId,
|
|
241
|
+
attemptFailures: gateway?.attemptFailures,
|
|
241
242
|
};
|
|
242
243
|
}
|
|
243
244
|
/** Whether a classified part renders any visible content on its own — used
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/core/turns/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmBH,OAAO,
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/core/turns/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,17 @@ export interface GatewayErrorDetails {
|
|
|
19
19
|
suggestion?: string;
|
|
20
20
|
upstreamStatus?: number;
|
|
21
21
|
requestId?: string;
|
|
22
|
+
attemptFailures?: GatewayAttemptFailure[];
|
|
23
|
+
}
|
|
24
|
+
export interface GatewayAttemptFailure {
|
|
25
|
+
attempt: number;
|
|
26
|
+
provider: string;
|
|
27
|
+
routeModel: string;
|
|
28
|
+
resolvedModel: string;
|
|
29
|
+
stage: string;
|
|
30
|
+
status?: number;
|
|
31
|
+
code: string | number;
|
|
32
|
+
message: string;
|
|
22
33
|
}
|
|
23
34
|
/**
|
|
24
35
|
* Best-effort extraction of the gateway's rich structured error fields from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/turns/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAqChD;AA4DD;;;yEAGyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/turns/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAqChD;AA4DD;;;yEAGyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAkFD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAwCxF"}
|
|
@@ -92,6 +92,47 @@ function extractErrorFromObject(obj) {
|
|
|
92
92
|
return error.message;
|
|
93
93
|
return undefined;
|
|
94
94
|
}
|
|
95
|
+
function attemptFailuresFrom(value) {
|
|
96
|
+
if (!Array.isArray(value))
|
|
97
|
+
return undefined;
|
|
98
|
+
const failures = [];
|
|
99
|
+
for (const item of value) {
|
|
100
|
+
if (!item || typeof item !== 'object' || Array.isArray(item))
|
|
101
|
+
continue;
|
|
102
|
+
const failure = item;
|
|
103
|
+
if (!Number.isInteger(failure.attempt) ||
|
|
104
|
+
failure.attempt < 1 ||
|
|
105
|
+
typeof failure.provider !== 'string' ||
|
|
106
|
+
!failure.provider ||
|
|
107
|
+
typeof failure.route_model !== 'string' ||
|
|
108
|
+
!failure.route_model ||
|
|
109
|
+
typeof failure.resolved_model !== 'string' ||
|
|
110
|
+
!failure.resolved_model ||
|
|
111
|
+
typeof failure.stage !== 'string' ||
|
|
112
|
+
!failure.stage ||
|
|
113
|
+
(typeof failure.code !== 'string' &&
|
|
114
|
+
!(typeof failure.code === 'number' && Number.isFinite(failure.code))) ||
|
|
115
|
+
typeof failure.message !== 'string' ||
|
|
116
|
+
!failure.message ||
|
|
117
|
+
(failure.status !== undefined &&
|
|
118
|
+
(!Number.isInteger(failure.status) ||
|
|
119
|
+
failure.status < 100 ||
|
|
120
|
+
failure.status > 599))) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
failures.push({
|
|
124
|
+
attempt: failure.attempt,
|
|
125
|
+
provider: failure.provider,
|
|
126
|
+
routeModel: failure.route_model,
|
|
127
|
+
resolvedModel: failure.resolved_model,
|
|
128
|
+
stage: failure.stage,
|
|
129
|
+
...(typeof failure.status === 'number' ? { status: failure.status } : {}),
|
|
130
|
+
code: failure.code,
|
|
131
|
+
message: failure.message,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return failures.length > 0 ? failures : undefined;
|
|
135
|
+
}
|
|
95
136
|
function tryParseJson(value) {
|
|
96
137
|
if (typeof value !== 'string' || !value)
|
|
97
138
|
return undefined;
|
|
@@ -114,10 +155,16 @@ function gatewayFieldsFrom(obj) {
|
|
|
114
155
|
const suggestion = typeof obj.suggestion === 'string' && obj.suggestion ? obj.suggestion : undefined;
|
|
115
156
|
const upstreamStatus = typeof obj.upstream_status === 'number' ? obj.upstream_status : undefined;
|
|
116
157
|
const requestId = typeof obj.request_id === 'string' && obj.request_id ? obj.request_id : undefined;
|
|
117
|
-
|
|
158
|
+
const attemptFailures = attemptFailuresFrom(obj.attempt_failures);
|
|
159
|
+
if (!provider &&
|
|
160
|
+
!code &&
|
|
161
|
+
!suggestion &&
|
|
162
|
+
upstreamStatus === undefined &&
|
|
163
|
+
!requestId &&
|
|
164
|
+
!attemptFailures)
|
|
118
165
|
return undefined;
|
|
119
166
|
const message = (typeof obj.message === 'string' && obj.message) || extractErrorFromObject(obj) || '';
|
|
120
|
-
return { message, provider, code, suggestion, upstreamStatus, requestId };
|
|
167
|
+
return { message, provider, code, suggestion, upstreamStatus, requestId, attemptFailures };
|
|
121
168
|
}
|
|
122
169
|
/**
|
|
123
170
|
* Best-effort extraction of the gateway's rich structured error fields from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/turns/errors.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/turns/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,15 +8,45 @@
|
|
|
8
8
|
* single-file version. No React / DOM / framework imports allowed.
|
|
9
9
|
*/
|
|
10
10
|
import type { MessageWithPartsLike, PartLike, PartWithMessage, TurnLike } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Display order: `time.created` first, wire id as the tiebreak.
|
|
13
|
+
*
|
|
14
|
+
* The sync store keeps messages sorted by ID (its binary-search invariant),
|
|
15
|
+
* and the id is CLIENT-minted for user messages — a wrong one used to teleport
|
|
16
|
+
* a bubble to the top of the thread. OpenCode stamps `time.created` at
|
|
17
|
+
* persistence, from the box's clock, so a message ordered by it lands where it
|
|
18
|
+
* happened whatever id it travelled under; a foreign or backdated id degrades
|
|
19
|
+
* to slightly-odd placement at worst. A message with no timestamp (an
|
|
20
|
+
* optimistic stub) sorts as newest — it is the latest thing the user did — and
|
|
21
|
+
* two untimed messages keep their INPUT order, so a host that feeds unstamped
|
|
22
|
+
* messages sees exactly the sequential behaviour it always had. Equal stamps
|
|
23
|
+
* keep id order. A weak order (stable sort), never a partial one.
|
|
24
|
+
*/
|
|
25
|
+
export declare function compareMessagesForDisplay(a: {
|
|
26
|
+
info: {
|
|
27
|
+
id: string;
|
|
28
|
+
time?: {
|
|
29
|
+
created?: number;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
}, b: {
|
|
33
|
+
info: {
|
|
34
|
+
id: string;
|
|
35
|
+
time?: {
|
|
36
|
+
created?: number;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
}): number;
|
|
11
40
|
/**
|
|
12
41
|
* Group messages into turns: each turn starts with a user message followed
|
|
13
42
|
* by 0+ assistant messages.
|
|
14
43
|
*
|
|
15
44
|
* Uses parentID-based linking (matching SolidJS session-turn.tsx:272-292):
|
|
16
45
|
* assistant messages are associated with their parent user message via
|
|
17
|
-
* `parentID`. Falls back to sequential ordering when parentID is absent
|
|
46
|
+
* `parentID`. Falls back to sequential ordering when parentID is absent —
|
|
47
|
+
* sequential in DISPLAY order (`compareMessagesForDisplay`), not input order.
|
|
18
48
|
*/
|
|
19
|
-
export declare function groupMessagesIntoTurns<M extends MessageWithPartsLike>(
|
|
49
|
+
export declare function groupMessagesIntoTurns<M extends MessageWithPartsLike>(input: readonly M[]): TurnLike<M>[];
|
|
20
50
|
/** Collect all parts from a turn's assistant messages. */
|
|
21
51
|
export declare function collectTurnParts<M extends MessageWithPartsLike>(turn: TurnLike<M>): PartWithMessage<M>[];
|
|
22
52
|
/** Find the last non-empty text part in a turn (the "response"). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/core/turns/grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAgB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiBvG
|
|
1
|
+
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/core/turns/grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAgB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiBvG;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,CAAC,EAAE;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,EACxD,CAAC,EAAE;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GACvD,MAAM,CAQR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,oBAAoB,EACnE,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAgEf;AAMD,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,oBAAoB,EAC7D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,eAAe,CAAC,CAAC,CAAC,EAAE,CAQtB;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,QAAQ,EACjD,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,GAChC,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAQpC;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,OAAO,CAQ9E;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,oBAAoB,EACrE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,cAAc,EAAE,OAAO,EACvB,iBAAiB,EAAE,OAAO,GACzB,eAAe,CAAC,CAAC,CAAC,EAAE,CAgBtB;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYvB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,IAGpC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9D,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,YAWjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAS7F"}
|
|
@@ -11,15 +11,44 @@ import { isTextPart, isToolPart } from './parts.js';
|
|
|
11
11
|
// ============================================================================
|
|
12
12
|
// Turn grouping
|
|
13
13
|
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Display order: `time.created` first, wire id as the tiebreak.
|
|
16
|
+
*
|
|
17
|
+
* The sync store keeps messages sorted by ID (its binary-search invariant),
|
|
18
|
+
* and the id is CLIENT-minted for user messages — a wrong one used to teleport
|
|
19
|
+
* a bubble to the top of the thread. OpenCode stamps `time.created` at
|
|
20
|
+
* persistence, from the box's clock, so a message ordered by it lands where it
|
|
21
|
+
* happened whatever id it travelled under; a foreign or backdated id degrades
|
|
22
|
+
* to slightly-odd placement at worst. A message with no timestamp (an
|
|
23
|
+
* optimistic stub) sorts as newest — it is the latest thing the user did — and
|
|
24
|
+
* two untimed messages keep their INPUT order, so a host that feeds unstamped
|
|
25
|
+
* messages sees exactly the sequential behaviour it always had. Equal stamps
|
|
26
|
+
* keep id order. A weak order (stable sort), never a partial one.
|
|
27
|
+
*/
|
|
28
|
+
export function compareMessagesForDisplay(a, b) {
|
|
29
|
+
const at = typeof a.info.time?.created === 'number' ? a.info.time.created : null;
|
|
30
|
+
const bt = typeof b.info.time?.created === 'number' ? b.info.time.created : null;
|
|
31
|
+
if (at === null && bt === null)
|
|
32
|
+
return 0;
|
|
33
|
+
if (at === null)
|
|
34
|
+
return 1;
|
|
35
|
+
if (bt === null)
|
|
36
|
+
return -1;
|
|
37
|
+
if (at !== bt)
|
|
38
|
+
return at < bt ? -1 : 1;
|
|
39
|
+
return a.info.id < b.info.id ? -1 : a.info.id > b.info.id ? 1 : 0;
|
|
40
|
+
}
|
|
14
41
|
/**
|
|
15
42
|
* Group messages into turns: each turn starts with a user message followed
|
|
16
43
|
* by 0+ assistant messages.
|
|
17
44
|
*
|
|
18
45
|
* Uses parentID-based linking (matching SolidJS session-turn.tsx:272-292):
|
|
19
46
|
* assistant messages are associated with their parent user message via
|
|
20
|
-
* `parentID`. Falls back to sequential ordering when parentID is absent
|
|
47
|
+
* `parentID`. Falls back to sequential ordering when parentID is absent —
|
|
48
|
+
* sequential in DISPLAY order (`compareMessagesForDisplay`), not input order.
|
|
21
49
|
*/
|
|
22
|
-
export function groupMessagesIntoTurns(
|
|
50
|
+
export function groupMessagesIntoTurns(input) {
|
|
51
|
+
const messages = [...input].sort(compareMessagesForDisplay);
|
|
23
52
|
const turns = [];
|
|
24
53
|
const turnsByUserMsgId = new Map();
|
|
25
54
|
// First pass: create turns from user messages.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../../src/core/turns/grouping.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAYjD,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../../src/core/turns/grouping.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/turns/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,mBAAmB,SAAS,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/turns/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,mBAAmB,SAAS,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
package/dist/core/turns/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/turns/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/turns/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is the last assistant turn still open? — the one shared predicate.
|
|
3
|
+
*
|
|
4
|
+
* This existed twice, and the two copies disagreed:
|
|
5
|
+
*
|
|
6
|
+
* - The sandbox daemon
|
|
7
|
+
* (`apps/kortix-sandbox-agent-server/src/opencode-turn-state.ts:89-93`) keeps a
|
|
8
|
+
* turn open through a RETRYABLE error:
|
|
9
|
+
* `role === 'assistant' && !time.completed && (!error || error.data?.isRetryable === true)`.
|
|
10
|
+
* - `apps/web`'s copy ended the turn on ANY `info.error`. That was the wrong one.
|
|
11
|
+
* During a provider 429 backoff OpenCode stamps `info.error` and keeps writing
|
|
12
|
+
* the SAME assistant message, so the web opened the queue's drain gate and sent
|
|
13
|
+
* the next queued message into a turn that was still running.
|
|
14
|
+
*
|
|
15
|
+
* The daemon is the reference implementation. This file exists so there is one
|
|
16
|
+
* predicate to drift from instead of two to keep in sync — per the repo rule that
|
|
17
|
+
* logic lives in the SDK and hosts are thin.
|
|
18
|
+
*
|
|
19
|
+
* The other half of the rule must survive the move: an ABORTED turn — an error
|
|
20
|
+
* with no `time.completed` — reads as CLOSED. `applyOptimisticAbort` in `apps/web`
|
|
21
|
+
* marks the message with an `AbortError` and never sets `time.completed`, and an
|
|
22
|
+
* aborted turn may never receive a `message.updated` that does. Reading only
|
|
23
|
+
* `time.completed` therefore stayed true for the lifetime of the tab after the
|
|
24
|
+
* stop button, and every message typed afterwards queued behind one that could
|
|
25
|
+
* never be released. A turn ends two ways: it completes, or it is terminally
|
|
26
|
+
* interrupted. A retryable error is neither.
|
|
27
|
+
*
|
|
28
|
+
* No imports, no globals — `core/turns` is `isomorphic-core`.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* The shape this predicate needs. Wider message types satisfy it structurally.
|
|
32
|
+
*
|
|
33
|
+
* `time` carries an index signature deliberately: a user message's `time` is
|
|
34
|
+
* `{ created: number }`, which shares no property with `{ completed?: number }`,
|
|
35
|
+
* and TypeScript rejects an assignment between object types with no overlap.
|
|
36
|
+
* The index signature says "other keys are allowed and I do not care".
|
|
37
|
+
*/
|
|
38
|
+
export interface OpenTurnMessageLike {
|
|
39
|
+
info: {
|
|
40
|
+
role: string;
|
|
41
|
+
id?: string;
|
|
42
|
+
time?: {
|
|
43
|
+
completed?: number | null;
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
} | null;
|
|
46
|
+
error?: unknown;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Is this turn error a RETRY in progress rather than an ending?
|
|
51
|
+
*
|
|
52
|
+
* OpenCode stamps `info.error` on the live assistant message while it backs off
|
|
53
|
+
* a 429 or a transient upstream 5xx, then keeps writing the SAME message. Only
|
|
54
|
+
* `data.isRetryable === true` means that — the `ApiError` variant is the only
|
|
55
|
+
* one carrying the flag; `AbortError`, `MessageAbortedError`, `ProviderAuthError`,
|
|
56
|
+
* `ContentFilterError`, and `UnknownError` have no `isRetryable` and are terminal.
|
|
57
|
+
* Strict `=== true`: a missing field, a truthy string, or an error with no `data`
|
|
58
|
+
* is terminal.
|
|
59
|
+
*/
|
|
60
|
+
export declare function isRetryableTurnError(error: unknown): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Is the last assistant turn open BECAUSE the provider is being retried?
|
|
63
|
+
*
|
|
64
|
+
* The narrow half of the old open-turn predicate, and the only half that
|
|
65
|
+
* carries proof. "Is the last assistant message merely unfinished?" is true
|
|
66
|
+
* for two very different things:
|
|
67
|
+
*
|
|
68
|
+
* * a turn mid-retry — OpenCode stamped `data.isRetryable === true` and is
|
|
69
|
+
* still writing the same message. Evidence of a LIVE turn, whatever the
|
|
70
|
+
* session's status frame says, and refusing to send into it is the rule the
|
|
71
|
+
* shared predicate was extracted for;
|
|
72
|
+
* * a HUSK — a message left open by a sandbox that died mid-turn, with no
|
|
73
|
+
* error and no `time.completed`, which no later event ever closes. It lives
|
|
74
|
+
* in the server's transcript, so it survives a reload, and gating a send on
|
|
75
|
+
* it wedges the composer for the lifetime of the session. That is exactly
|
|
76
|
+
* what needed a 10s clock and a confirmation round-trip to work around.
|
|
77
|
+
*
|
|
78
|
+
* A husk has no error at all, so this is false for it by construction.
|
|
79
|
+
*/
|
|
80
|
+
export declare function hasRetryingAssistantTurn(messages: readonly OpenTurnMessageLike[] | undefined): boolean;
|
|
81
|
+
//# sourceMappingURL=open-turn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-turn.d.ts","sourceRoot":"","sources":["../../../src/core/turns/open-turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,GAAG,IAAI,CAAC;QACpE,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI5D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,GACnD,OAAO,CAQT"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is the last assistant turn still open? — the one shared predicate.
|
|
3
|
+
*
|
|
4
|
+
* This existed twice, and the two copies disagreed:
|
|
5
|
+
*
|
|
6
|
+
* - The sandbox daemon
|
|
7
|
+
* (`apps/kortix-sandbox-agent-server/src/opencode-turn-state.ts:89-93`) keeps a
|
|
8
|
+
* turn open through a RETRYABLE error:
|
|
9
|
+
* `role === 'assistant' && !time.completed && (!error || error.data?.isRetryable === true)`.
|
|
10
|
+
* - `apps/web`'s copy ended the turn on ANY `info.error`. That was the wrong one.
|
|
11
|
+
* During a provider 429 backoff OpenCode stamps `info.error` and keeps writing
|
|
12
|
+
* the SAME assistant message, so the web opened the queue's drain gate and sent
|
|
13
|
+
* the next queued message into a turn that was still running.
|
|
14
|
+
*
|
|
15
|
+
* The daemon is the reference implementation. This file exists so there is one
|
|
16
|
+
* predicate to drift from instead of two to keep in sync — per the repo rule that
|
|
17
|
+
* logic lives in the SDK and hosts are thin.
|
|
18
|
+
*
|
|
19
|
+
* The other half of the rule must survive the move: an ABORTED turn — an error
|
|
20
|
+
* with no `time.completed` — reads as CLOSED. `applyOptimisticAbort` in `apps/web`
|
|
21
|
+
* marks the message with an `AbortError` and never sets `time.completed`, and an
|
|
22
|
+
* aborted turn may never receive a `message.updated` that does. Reading only
|
|
23
|
+
* `time.completed` therefore stayed true for the lifetime of the tab after the
|
|
24
|
+
* stop button, and every message typed afterwards queued behind one that could
|
|
25
|
+
* never be released. A turn ends two ways: it completes, or it is terminally
|
|
26
|
+
* interrupted. A retryable error is neither.
|
|
27
|
+
*
|
|
28
|
+
* No imports, no globals — `core/turns` is `isomorphic-core`.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Is this turn error a RETRY in progress rather than an ending?
|
|
32
|
+
*
|
|
33
|
+
* OpenCode stamps `info.error` on the live assistant message while it backs off
|
|
34
|
+
* a 429 or a transient upstream 5xx, then keeps writing the SAME message. Only
|
|
35
|
+
* `data.isRetryable === true` means that — the `ApiError` variant is the only
|
|
36
|
+
* one carrying the flag; `AbortError`, `MessageAbortedError`, `ProviderAuthError`,
|
|
37
|
+
* `ContentFilterError`, and `UnknownError` have no `isRetryable` and are terminal.
|
|
38
|
+
* Strict `=== true`: a missing field, a truthy string, or an error with no `data`
|
|
39
|
+
* is terminal.
|
|
40
|
+
*/
|
|
41
|
+
export function isRetryableTurnError(error) {
|
|
42
|
+
if (!error || typeof error !== 'object')
|
|
43
|
+
return false;
|
|
44
|
+
const data = error.data;
|
|
45
|
+
return !!data && typeof data === 'object' && data.isRetryable === true;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Is the last assistant turn open BECAUSE the provider is being retried?
|
|
49
|
+
*
|
|
50
|
+
* The narrow half of the old open-turn predicate, and the only half that
|
|
51
|
+
* carries proof. "Is the last assistant message merely unfinished?" is true
|
|
52
|
+
* for two very different things:
|
|
53
|
+
*
|
|
54
|
+
* * a turn mid-retry — OpenCode stamped `data.isRetryable === true` and is
|
|
55
|
+
* still writing the same message. Evidence of a LIVE turn, whatever the
|
|
56
|
+
* session's status frame says, and refusing to send into it is the rule the
|
|
57
|
+
* shared predicate was extracted for;
|
|
58
|
+
* * a HUSK — a message left open by a sandbox that died mid-turn, with no
|
|
59
|
+
* error and no `time.completed`, which no later event ever closes. It lives
|
|
60
|
+
* in the server's transcript, so it survives a reload, and gating a send on
|
|
61
|
+
* it wedges the composer for the lifetime of the session. That is exactly
|
|
62
|
+
* what needed a 10s clock and a confirmation round-trip to work around.
|
|
63
|
+
*
|
|
64
|
+
* A husk has no error at all, so this is false for it by construction.
|
|
65
|
+
*/
|
|
66
|
+
export function hasRetryingAssistantTurn(messages) {
|
|
67
|
+
if (!messages?.length)
|
|
68
|
+
return false;
|
|
69
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
70
|
+
const info = messages[i].info;
|
|
71
|
+
if (info.role !== 'assistant')
|
|
72
|
+
continue;
|
|
73
|
+
return !info.time?.completed && isRetryableTurnError(info.error);
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=open-turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-turn.js","sourceRoot":"","sources":["../../../src/core/turns/open-turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAmBH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,IAAI,GAAI,KAA8C,CAAC,IAAI,CAAC;IAClE,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;AACzE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAoD;IAEpD,IAAI,CAAC,QAAQ,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* Split out of `turns/index.ts` — see that file's history for the original
|
|
9
9
|
* single-file version. No React / DOM / framework imports allowed.
|
|
10
10
|
*/
|
|
11
|
-
import type { MessageInfoLike, MessageWithPartsLike, ModelPricingLookup, PartLike, PartWithMessage, RetryInfo, SessionStatusLike, TurnCostInfo, TurnLike } from './types.js';
|
|
12
11
|
import { extractGatewayErrorDetails } from './errors.js';
|
|
12
|
+
import type { MessageInfoLike, MessageWithPartsLike, ModelPricingLookup, PartLike, PartWithMessage, RetryInfo, SessionStatusLike, TurnCostInfo, TurnLike } from './types.js';
|
|
13
13
|
/** Check if this is the last user message in the session. */
|
|
14
14
|
export declare function isLastUserMessage(messageId: string, allMessages: readonly MessageWithPartsLike[]): boolean;
|
|
15
15
|
/** Derive the "working" state for a turn. Only the last turn shows as working. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/turns/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EAEpB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,SAAS,EACT,iBAAiB,EAGjB,YAAY,EACZ,QAAQ,EACT,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/turns/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,0BAA0B,EAAe,MAAM,UAAU,CAAC;AAEnE,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EAEpB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,SAAS,EACT,iBAAiB,EAGjB,YAAY,EACZ,QAAQ,EACT,MAAM,SAAS,CAAC;AAiCjB,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,SAAS,oBAAoB,EAAE,GAC3C,OAAO,CAOT;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAC7B,aAAa,EAAE,iBAAiB,GAAG,SAAS,EAC5C,MAAM,EAAE,OAAO,GACd,OAAO,CAIT;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAET;AAMD,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAQ/D;AAED;;;;;4BAK4B;AAC5B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAMjG;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAkGpF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,EACxC,aAAa,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAC9C,MAAM,CAqCR;AAMD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUjD;AAMD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAmD/B;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,EACrC,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,GAAG,SAAS,CA+C1B;AAiBD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,CAAC;IAAE,IAAI,CAAC,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,EACtE,MAAM,CAAC,EAAE,kBAAkB,GAC1B,MAAM,CAsBR;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAUzF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGzF;AAMD,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAGnE"}
|