@opengeni/worker-bundle 1.0.0-canary.0 → 1.0.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/dist/activities/agent-run-admission.d.ts +3 -1
- package/dist/activities/agent-turn/admission.d.ts +24 -3
- package/dist/activities/agent-turn/agent-build.d.ts +4 -0
- package/dist/activities/agent-turn/claude-usage-observer.d.ts +58 -0
- package/dist/activities/agent-turn/code-search.d.ts +60 -0
- package/dist/activities/agent-turn/codex-capacity.d.ts +13 -0
- package/dist/activities/agent-turn/codex-plan-entitlement.d.ts +105 -0
- package/dist/activities/agent-turn/codex.d.ts +3 -2
- package/dist/activities/agent-turn/compaction-prep.d.ts +21 -5
- package/dist/activities/agent-turn/credential-leases.d.ts +19 -33
- package/dist/activities/agent-turn/credential-restriction.d.ts +3 -0
- package/dist/activities/agent-turn/errors.d.ts +82 -11
- package/dist/activities/agent-turn/failure-settlement.d.ts +6 -3
- package/dist/activities/agent-turn/final-reply.d.ts +18 -0
- package/dist/activities/agent-turn/finalization-monitor.d.ts +17 -0
- package/dist/activities/agent-turn/finalization.d.ts +4 -2
- package/dist/activities/agent-turn/github-repository-bindings.d.ts +2 -0
- package/dist/activities/agent-turn/governance-model.d.ts +9 -2
- package/dist/activities/agent-turn/history-sink.d.ts +2 -0
- package/dist/activities/agent-turn/history.d.ts +2 -0
- package/dist/activities/agent-turn/input-wait-reply.d.ts +41 -0
- package/dist/activities/agent-turn/media-artifacts.d.ts +5 -3
- package/dist/activities/agent-turn/model-call-admission.d.ts +15 -0
- package/dist/activities/agent-turn/model-usage.d.ts +6 -0
- package/dist/activities/agent-turn/model-wire-dispatch.d.ts +15 -0
- package/dist/activities/agent-turn/optional-repositories.d.ts +59 -0
- package/dist/activities/agent-turn/provider-dispatch-barrier.d.ts +12 -1
- package/dist/activities/agent-turn/quiescence.d.ts +7 -7
- package/dist/activities/agent-turn/recovery-warning.d.ts +9 -0
- package/dist/activities/agent-turn/refresh-credentials.d.ts +6 -0
- package/dist/activities/agent-turn/run-credentials.d.ts +8 -3
- package/dist/activities/agent-turn/sandbox-establish.d.ts +2 -1
- package/dist/activities/agent-turn/sandbox-provision.d.ts +3 -1
- package/dist/activities/agent-turn/sandbox-route.d.ts +3 -20
- package/dist/activities/agent-turn/sandbox-runtime.d.ts +2 -2
- package/dist/activities/agent-turn/session-title.d.ts +34 -2
- package/dist/activities/agent-turn/skill-checkout.d.ts +25 -6
- package/dist/activities/agent-turn/skill-read.d.ts +70 -2
- package/dist/activities/agent-turn/skill-remove.d.ts +14 -0
- package/dist/activities/agent-turn/skill-search.d.ts +3 -1
- package/dist/activities/agent-turn/skill-tools.d.ts +15 -2
- package/dist/activities/agent-turn/skill-transfer.d.ts +18 -6
- package/dist/activities/agent-turn/stream-attempt.d.ts +7 -3
- package/dist/activities/agent-turn/subscription-lease.d.ts +38 -0
- package/dist/activities/agent-turn/tool-environment.d.ts +56 -6
- package/dist/activities/agent-turn/tool-policy.d.ts +43 -0
- package/dist/activities/agent-turn/turn-context.d.ts +29 -0
- package/dist/activities/agent-turn/turn-sandbox-access.d.ts +3 -0
- package/dist/activities/agent-turn/xai-capacity.d.ts +2 -1
- package/dist/activities/automations.d.ts +3 -1
- package/dist/activities/browser-deadline-checkpoint.d.ts +29 -0
- package/dist/activities/codemode-dispatcher.d.ts +9 -2
- package/dist/activities/codex-capacity.d.ts +18 -2
- package/dist/activities/codex-rotation.d.ts +7 -1
- package/dist/activities/context-compaction.d.ts +16 -2
- package/dist/activities/gmail-files.d.ts +32 -0
- package/dist/activities/goals.d.ts +8 -0
- package/dist/activities/knowledge-indexing.d.ts +19 -0
- package/dist/activities/mcp-account-routes.d.ts +3 -0
- package/dist/activities/mcp-credentials.d.ts +12 -13
- package/dist/activities/mcp-operation-authority.d.ts +0 -5
- package/dist/activities/model-call-fact-reconciler.d.ts +34 -0
- package/dist/activities/open-suffix-resume.d.ts +13 -0
- package/dist/activities/parent-wake.d.ts +6 -12
- package/dist/activities/retained-screenshots.d.ts +7 -2
- package/dist/activities/rig-verification.d.ts +2 -3
- package/dist/activities/run-credential-renewal.d.ts +1 -0
- package/dist/activities/run-credentials.d.ts +15 -3
- package/dist/activities/sandbox-images.d.ts +1 -1
- package/dist/activities/sandbox-lease.d.ts +47 -9
- package/dist/activities/scheduled-tasks.d.ts +4 -35
- package/dist/activities/session-state.d.ts +70 -3
- package/dist/activities/types.d.ts +55 -6
- package/dist/activities/workspace-capture.d.ts +2 -0
- package/dist/activities/workspace-credential-provider.d.ts +46 -0
- package/dist/{activities-control-HMFGSKC5.js → activities-control-BNPTRTOE.js} +1896 -418
- package/dist/activities-control-BNPTRTOE.js.map +1 -0
- package/dist/activities-control.d.ts +182 -4
- package/dist/{activities-turn-AP67JADS.js → activities-turn-5LGZOSVU.js} +4476 -1327
- package/dist/activities-turn-5LGZOSVU.js.map +1 -0
- package/dist/activities.d.ts +182 -4
- package/dist/artifact-materializer-entry.js +5 -2
- package/dist/artifact-materializer-entry.js.map +1 -1
- package/dist/artifact-outbox-entry.js +5 -2
- package/dist/artifact-outbox-entry.js.map +1 -1
- package/dist/browser-deadline-checkpoint-contract.d.ts +2 -0
- package/dist/{chunk-A4XQWVZK.js → chunk-3ZTRWDMN.js} +307 -4
- package/dist/chunk-3ZTRWDMN.js.map +1 -0
- package/dist/{chunk-RAMNYSAW.js → chunk-4ER3YXOT.js} +22 -4
- package/dist/chunk-4ER3YXOT.js.map +1 -0
- package/dist/{chunk-CYITU5UH.js → chunk-LJX7Z2KP.js} +1445 -343
- package/dist/chunk-LJX7Z2KP.js.map +1 -0
- package/dist/editable-artifact-materializer-service.d.ts +2 -2
- package/dist/editable-artifact-outbox-service.d.ts +2 -2
- package/dist/host-export-pump.d.ts +3 -1
- package/dist/host-export.d.ts +1 -1
- package/dist/host-export.js +1 -1
- package/dist/http.d.ts +1 -1
- package/dist/index.d.ts +95 -3
- package/dist/index.js +137 -43
- package/dist/index.js.map +1 -1
- package/dist/observability-metrics.d.ts +118 -8
- package/dist/retained-process-diagnostics.d.ts +4 -0
- package/dist/retained-process-retry.d.ts +7 -0
- package/dist/sandbox-resume.d.ts +55 -13
- package/dist/sandbox-routing.d.ts +5 -3
- package/dist/sandbox-snapshot-diagnostics.d.ts +20 -0
- package/dist/session-event-fanout.d.ts +6 -0
- package/dist/warm-capture-holder.d.ts +3 -0
- package/dist/worker-service-lifecycle.d.ts +12 -0
- package/dist/workflow-bundle.js +273 -41
- package/dist/workflows/activities.d.ts +1 -1
- package/dist/workflows/browser-deadline-checkpoint.d.ts +9 -0
- package/dist/workflows/scheduled-tasks.d.ts +4 -0
- package/dist/workflows/session.d.ts +36 -0
- package/dist/workflows.d.ts +1 -0
- package/package.json +21 -19
- package/src/activities/agent-run-admission.ts +17 -1
- package/src/activities/agent-turn/admission.ts +66 -3
- package/src/activities/agent-turn/agent-build.ts +84 -10
- package/src/activities/agent-turn/claim.ts +186 -43
- package/src/activities/agent-turn/claude-usage-observer.ts +221 -0
- package/src/activities/agent-turn/code-search.ts +275 -0
- package/src/activities/agent-turn/codex-capacity.ts +172 -8
- package/src/activities/agent-turn/codex-plan-entitlement.ts +254 -0
- package/src/activities/agent-turn/codex.ts +13 -5
- package/src/activities/agent-turn/compaction-prep.ts +170 -102
- package/src/activities/agent-turn/credential-leases.ts +122 -216
- package/src/activities/agent-turn/credential-restriction.ts +14 -0
- package/src/activities/agent-turn/errors.ts +647 -48
- package/src/activities/agent-turn/failure-settlement.ts +682 -130
- package/src/activities/agent-turn/final-reply.ts +46 -0
- package/src/activities/agent-turn/finalization-monitor.ts +120 -0
- package/src/activities/agent-turn/finalization.ts +146 -43
- package/src/activities/agent-turn/github-repository-bindings.ts +3 -1
- package/src/activities/agent-turn/governance-model.ts +69 -28
- package/src/activities/agent-turn/history-sink.ts +16 -2
- package/src/activities/agent-turn/history.ts +38 -11
- package/src/activities/agent-turn/input-wait-reply.ts +103 -0
- package/src/activities/agent-turn/knowledge-source-tools.ts +2 -0
- package/src/activities/agent-turn/media-artifacts.ts +2 -1
- package/src/activities/agent-turn/model-call-admission.ts +94 -0
- package/src/activities/agent-turn/model-usage.ts +64 -3
- package/src/activities/agent-turn/model-wire-dispatch.ts +27 -0
- package/src/activities/agent-turn/optional-repositories.ts +224 -0
- package/src/activities/agent-turn/provider-dispatch-barrier.ts +22 -0
- package/src/activities/agent-turn/quiescence.ts +10 -7
- package/src/activities/agent-turn/recovery-warning.ts +16 -0
- package/src/activities/agent-turn/refresh-credentials.ts +44 -0
- package/src/activities/agent-turn/run-credentials.ts +116 -55
- package/src/activities/agent-turn/run.ts +320 -93
- package/src/activities/agent-turn/sandbox-establish.ts +84 -8
- package/src/activities/agent-turn/sandbox-provision.ts +3 -1
- package/src/activities/agent-turn/sandbox-route.ts +4 -21
- package/src/activities/agent-turn/sandbox-runtime.ts +343 -18
- package/src/activities/agent-turn/session-title.ts +81 -5
- package/src/activities/agent-turn/skill-checkout.ts +111 -24
- package/src/activities/agent-turn/skill-install.ts +1 -1
- package/src/activities/agent-turn/skill-read.ts +374 -28
- package/src/activities/agent-turn/skill-remove.ts +46 -0
- package/src/activities/agent-turn/skill-save.ts +1 -1
- package/src/activities/agent-turn/skill-search.ts +10 -1
- package/src/activities/agent-turn/skill-selection.ts +4 -0
- package/src/activities/agent-turn/skill-tools.ts +112 -18
- package/src/activities/agent-turn/skill-transfer.ts +68 -23
- package/src/activities/agent-turn/stream-attempt.ts +313 -77
- package/src/activities/agent-turn/subscription-lease.ts +115 -0
- package/src/activities/agent-turn/tool-environment.ts +316 -167
- package/src/activities/agent-turn/tool-policy.ts +80 -1
- package/src/activities/agent-turn/turn-context.ts +35 -0
- package/src/activities/agent-turn/turn-sandbox-access.ts +7 -1
- package/src/activities/agent-turn/xai-capacity.ts +94 -51
- package/src/activities/automations.ts +76 -4
- package/src/activities/browser-deadline-checkpoint.ts +279 -0
- package/src/activities/capabilities.ts +108 -11
- package/src/activities/codemode-dispatcher.ts +36 -8
- package/src/activities/codex-capacity.ts +60 -25
- package/src/activities/codex-rotation.ts +39 -17
- package/src/activities/context-compaction.ts +75 -18
- package/src/activities/gmail-files.ts +88 -0
- package/src/activities/goals.ts +116 -121
- package/src/activities/google-drive-publication.ts +1 -3
- package/src/activities/image-generation-operation.ts +1 -1
- package/src/activities/knowledge-indexing.ts +269 -15
- package/src/activities/knowledge-source-sync.ts +10 -0
- package/src/activities/mcp-account-routes.ts +17 -0
- package/src/activities/mcp-credentials.ts +83 -194
- package/src/activities/mcp-operation-authority.ts +16 -41
- package/src/activities/model-call-fact-reconciler.ts +112 -0
- package/src/activities/open-suffix-resume.ts +15 -2
- package/src/activities/parent-wake.ts +46 -21
- package/src/activities/retained-screenshots.ts +82 -11
- package/src/activities/rig-verification.ts +38 -37
- package/src/activities/run-credential-renewal.ts +13 -1
- package/src/activities/run-credentials.ts +59 -17
- package/src/activities/run-input.ts +25 -16
- package/src/activities/sandbox-images.ts +0 -1
- package/src/activities/sandbox-lease.ts +798 -82
- package/src/activities/scheduled-tasks.ts +550 -178
- package/src/activities/session-state.ts +245 -6
- package/src/activities/site-auth-maintenance.ts +3 -0
- package/src/activities/types.ts +72 -5
- package/src/activities/workflow-wake.ts +2 -17
- package/src/activities/workspace-capture.ts +13 -2
- package/src/activities/workspace-credential-provider.ts +283 -0
- package/src/activities-control.ts +4 -0
- package/src/activities-turn.ts +5 -0
- package/src/activities.ts +13 -0
- package/src/activity-services.ts +16 -4
- package/src/browser-deadline-checkpoint-contract.ts +5 -0
- package/src/editable-artifact-hint-broker.ts +3 -0
- package/src/editable-artifact-materializer-service.ts +7 -3
- package/src/editable-artifact-outbox-service.ts +4 -4
- package/src/github-rest-mcp.ts +1 -2
- package/src/host-export-pump.ts +26 -4
- package/src/host-export.ts +3 -0
- package/src/http.ts +4 -2
- package/src/index.ts +99 -37
- package/src/observability-metrics.ts +510 -5
- package/src/personal-github-git-credentials.ts +2 -1
- package/src/pr-review-credentials.ts +1 -3
- package/src/retained-process-diagnostics.ts +50 -0
- package/src/retained-process-retry.ts +36 -0
- package/src/sandbox-resume.ts +388 -101
- package/src/sandbox-routing.ts +150 -25
- package/src/sandbox-snapshot-diagnostics.ts +112 -0
- package/src/session-event-fanout.ts +23 -0
- package/src/warm-capture-holder.ts +15 -0
- package/src/worker-service-lifecycle.ts +53 -0
- package/src/workflows/activities.ts +16 -1
- package/src/workflows/browser-deadline-checkpoint.ts +50 -0
- package/src/workflows/file-upload-reaper.ts +2 -0
- package/src/workflows/scheduled-tasks.ts +26 -13
- package/src/workflows/session.ts +242 -22
- package/src/workflows.ts +4 -0
- package/dist/activities/agent-turn/knowledge-sources.d.ts +0 -20
- package/dist/activities/packs.d.ts +0 -55
- package/dist/activities-control-HMFGSKC5.js.map +0 -1
- package/dist/activities-turn-AP67JADS.js.map +0 -1
- package/dist/chunk-A4XQWVZK.js.map +0 -1
- package/dist/chunk-CYITU5UH.js.map +0 -1
- package/dist/chunk-RAMNYSAW.js.map +0 -1
- package/src/activities/agent-turn/knowledge-sources.ts +0 -86
- package/src/activities/packs.ts +0 -166
|
@@ -5,12 +5,16 @@ import type {
|
|
|
5
5
|
RunCredentialsRequest,
|
|
6
6
|
Session,
|
|
7
7
|
SessionTurn,
|
|
8
|
+
ToolRef,
|
|
8
9
|
} from "@opengeni/contracts";
|
|
10
|
+
import type { Settings } from "@opengeni/config";
|
|
9
11
|
import { getSessionRootId, type Database } from "@opengeni/db";
|
|
10
12
|
import {
|
|
11
13
|
normalizeRunCredentialsResolution,
|
|
14
|
+
selectedSessionRemoteMcpTargets,
|
|
12
15
|
type NormalizedRunCredentialMaterial,
|
|
13
16
|
} from "@opengeni/runtime";
|
|
17
|
+
import { workspaceCredentialProviderResolver } from "./workspace-credential-provider";
|
|
14
18
|
|
|
15
19
|
export type RunCredentialResolutionContext = {
|
|
16
20
|
db: Database;
|
|
@@ -18,10 +22,17 @@ export type RunCredentialResolutionContext = {
|
|
|
18
22
|
accountId: string;
|
|
19
23
|
workspaceId: string;
|
|
20
24
|
session: Session;
|
|
21
|
-
turn: SessionTurn;
|
|
25
|
+
turn: SessionTurn & { initiatingHumanSubjectId?: string | null };
|
|
22
26
|
attemptId: string;
|
|
23
27
|
effectiveSandboxBackend: SandboxBackend;
|
|
24
28
|
variableSet: { id: string; name: string } | null;
|
|
29
|
+
/** Enables the workspace's configured HTTP credential provider. */
|
|
30
|
+
settings?: Settings;
|
|
31
|
+
initiatingHumanSubjectId?: string | null;
|
|
32
|
+
/** Installed in-process API routes must never enter a product callback. */
|
|
33
|
+
localMcpServerIds?: readonly string[];
|
|
34
|
+
/** Exact execution selection, resolved once at the turn policy boundary. */
|
|
35
|
+
effectiveTools: readonly ToolRef[];
|
|
25
36
|
};
|
|
26
37
|
|
|
27
38
|
export type BoundRunCredentialResolver = {
|
|
@@ -32,7 +43,10 @@ export type BoundRunCredentialResolver = {
|
|
|
32
43
|
};
|
|
33
44
|
|
|
34
45
|
export function buildRunCredentialsRequest(
|
|
35
|
-
input: Omit<
|
|
46
|
+
input: Omit<
|
|
47
|
+
RunCredentialResolutionContext,
|
|
48
|
+
"db" | "connectionCredentials" | "settings" | "initiatingHumanSubjectId" | "effectiveTools"
|
|
49
|
+
> & {
|
|
36
50
|
rootSessionId: string;
|
|
37
51
|
purpose: "provision" | "renewal";
|
|
38
52
|
forceRefresh: boolean;
|
|
@@ -95,11 +109,36 @@ export function runCredentialModelNote(
|
|
|
95
109
|
* Freeze the provider-neutral host credential request to this exact admitted
|
|
96
110
|
* turn. The host selects connections and material; the worker never infers a
|
|
97
111
|
* provider from repositories, environment names, or an OpenGeni variable set.
|
|
112
|
+
* A workspace that configured its own HTTP credential provider uses it in
|
|
113
|
+
* place of the deployment's injected port.
|
|
98
114
|
*/
|
|
99
115
|
export async function bindRunCredentialResolver(
|
|
100
116
|
input: RunCredentialResolutionContext,
|
|
101
117
|
): Promise<BoundRunCredentialResolver | null> {
|
|
102
|
-
|
|
118
|
+
// Connected Machines own their credentials. Even provider lookup/callback
|
|
119
|
+
// must not be performed for a turn executing on the user's machine.
|
|
120
|
+
if (input.effectiveSandboxBackend === "selfhosted") return null;
|
|
121
|
+
const workspaceResolver = input.settings
|
|
122
|
+
? await workspaceCredentialProviderResolver(
|
|
123
|
+
input.db,
|
|
124
|
+
input.settings,
|
|
125
|
+
{ accountId: input.accountId, workspaceId: input.workspaceId },
|
|
126
|
+
input.turn.initiatingHumanSubjectId ?? null,
|
|
127
|
+
{
|
|
128
|
+
mcpServers: selectedSessionRemoteMcpTargets(
|
|
129
|
+
input.settings,
|
|
130
|
+
input.session.mcpServers ?? [],
|
|
131
|
+
input.effectiveTools,
|
|
132
|
+
(input.localMcpServerIds ?? []).map((id) => ({ id })),
|
|
133
|
+
),
|
|
134
|
+
},
|
|
135
|
+
)
|
|
136
|
+
: null;
|
|
137
|
+
const resolver =
|
|
138
|
+
workspaceResolver ??
|
|
139
|
+
(input.effectiveSandboxBackend === "none"
|
|
140
|
+
? undefined
|
|
141
|
+
: input.connectionCredentials?.runCredentials);
|
|
103
142
|
if (!resolver) return null;
|
|
104
143
|
const rootSessionId = await getSessionRootId(input.db, input.workspaceId, input.session.id);
|
|
105
144
|
if (!rootSessionId) {
|
|
@@ -110,22 +149,25 @@ export async function bindRunCredentialResolver(
|
|
|
110
149
|
workspaceId: input.workspaceId,
|
|
111
150
|
sessionId: input.session.id,
|
|
112
151
|
};
|
|
152
|
+
// A renewable resolver belongs to one admitted turn, even if its caller
|
|
153
|
+
// subsequently replaces or mutates an in-memory session/turn projection.
|
|
154
|
+
const frozenRequest = structuredClone(
|
|
155
|
+
buildRunCredentialsRequest({
|
|
156
|
+
accountId: input.accountId,
|
|
157
|
+
workspaceId: input.workspaceId,
|
|
158
|
+
session: input.session,
|
|
159
|
+
turn: input.turn,
|
|
160
|
+
attemptId: input.attemptId,
|
|
161
|
+
effectiveSandboxBackend: input.effectiveSandboxBackend,
|
|
162
|
+
variableSet: input.variableSet,
|
|
163
|
+
rootSessionId,
|
|
164
|
+
purpose: "provision",
|
|
165
|
+
forceRefresh: false,
|
|
166
|
+
}),
|
|
167
|
+
);
|
|
113
168
|
return {
|
|
114
169
|
resolve: async ({ purpose, forceRefresh }) => {
|
|
115
|
-
const resolution = await resolver(
|
|
116
|
-
buildRunCredentialsRequest({
|
|
117
|
-
accountId: input.accountId,
|
|
118
|
-
workspaceId: input.workspaceId,
|
|
119
|
-
session: input.session,
|
|
120
|
-
turn: input.turn,
|
|
121
|
-
attemptId: input.attemptId,
|
|
122
|
-
effectiveSandboxBackend: input.effectiveSandboxBackend,
|
|
123
|
-
variableSet: input.variableSet,
|
|
124
|
-
rootSessionId,
|
|
125
|
-
purpose,
|
|
126
|
-
forceRefresh,
|
|
127
|
-
}),
|
|
128
|
-
);
|
|
170
|
+
const resolution = await resolver({ ...frozenRequest, purpose, forceRefresh });
|
|
129
171
|
return normalizeRunCredentialsResolution(resolution, scope);
|
|
130
172
|
},
|
|
131
173
|
};
|
|
@@ -304,19 +304,13 @@ function attachmentRefsFromItem(item: Record<string, unknown>): FileResourceRef[
|
|
|
304
304
|
return refs;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
function attachmentReceiptText(ref: FileResourceRef
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
`[Earlier attachment: fileId=${ref.fileId}; mountDirectory=${resourceMountPath(ref)}. ` +
|
|
311
|
-
`Use the existing file there, or call files__files_get_download_url with this fileId and ` +
|
|
312
|
-
`download it with the shell.]`
|
|
313
|
-
);
|
|
314
|
-
}
|
|
315
|
-
const path = sandboxFilePath(ref, file);
|
|
307
|
+
function attachmentReceiptText(ref: FileResourceRef): string {
|
|
308
|
+
// The durable reference is immutable; live metadata/authority must not rewrite
|
|
309
|
+
// old receipt text. Pixel delivery remains subject to current file authority.
|
|
316
310
|
return (
|
|
317
|
-
`[Attachment:
|
|
318
|
-
`
|
|
319
|
-
`
|
|
311
|
+
`[Attachment: fileId=${ref.fileId}; mountDirectory=${resourceMountPath(ref)}. ` +
|
|
312
|
+
`Use the existing file there, or call files__files_get_download_url with this fileId and ` +
|
|
313
|
+
`download it with the shell.]`
|
|
320
314
|
);
|
|
321
315
|
}
|
|
322
316
|
|
|
@@ -434,7 +428,7 @@ export function createModelHistoryAttachmentProjector(
|
|
|
434
428
|
const attachment = currentFile ? contentById.get(ref.fileId) : undefined;
|
|
435
429
|
const receipt = {
|
|
436
430
|
type: "input_text",
|
|
437
|
-
text: attachmentReceiptText(ref
|
|
431
|
+
text: attachmentReceiptText(ref),
|
|
438
432
|
};
|
|
439
433
|
if (!attachment || attachment.kind !== "image") {
|
|
440
434
|
return [receipt];
|
|
@@ -458,12 +452,21 @@ export function withCurrentUserAttachmentRefs(
|
|
|
458
452
|
refs: FileResourceRef[],
|
|
459
453
|
): Array<Record<string, unknown>> {
|
|
460
454
|
if (refs.length === 0) return historyItems;
|
|
455
|
+
// Compaction can put a catalog after the triggering user message. A ref
|
|
456
|
+
// already retained anywhere in canonical history must not be copied onto
|
|
457
|
+
// that older catalog (and then disappear when the next turn replays it).
|
|
458
|
+
const retainedIds = new Set(
|
|
459
|
+
historyItems.flatMap((item) => attachmentRefsFromItem(item).map((ref) => ref.fileId)),
|
|
460
|
+
);
|
|
461
|
+
const missing = refs.filter((ref) => !retainedIds.has(ref.fileId));
|
|
462
|
+
if (missing.length === 0) return historyItems;
|
|
461
463
|
for (let index = historyItems.length - 1; index >= 0; index -= 1) {
|
|
462
464
|
const item = historyItems[index]!;
|
|
465
|
+
if (item[MODEL_ATTACHMENT_CATALOG_MARKER] === true) continue;
|
|
463
466
|
if (item.type !== "message" || item.role !== "user") continue;
|
|
464
467
|
const existing = attachmentRefsFromItem(item);
|
|
465
468
|
const existingIds = new Set(existing.map((ref) => ref.fileId));
|
|
466
|
-
const additions =
|
|
469
|
+
const additions = missing.filter((ref) => !existingIds.has(ref.fileId));
|
|
467
470
|
if (additions.length === 0) return historyItems;
|
|
468
471
|
const projected = [...historyItems];
|
|
469
472
|
projected[index] = { ...item, [MODEL_ATTACHMENT_REFS_FIELD]: [...existing, ...additions] };
|
|
@@ -552,8 +555,14 @@ export async function turnInput(
|
|
|
552
555
|
options,
|
|
553
556
|
);
|
|
554
557
|
}
|
|
555
|
-
|
|
556
|
-
|
|
558
|
+
// Maintenance has no user message or delivered-update batch. It still needs
|
|
559
|
+
// the ordinary history/projection path so SDK preparation can capture the
|
|
560
|
+
// same model request prefix before the queued compaction stops inference.
|
|
561
|
+
if (
|
|
562
|
+
trigger.type === "system.update.delivered" ||
|
|
563
|
+
trigger.type === "session.context.compaction.requested"
|
|
564
|
+
) {
|
|
565
|
+
if (trigger.type === "system.update.delivered" && updates.length === 0) {
|
|
557
566
|
throw new Error("Internal update inference has no delivered updates");
|
|
558
567
|
}
|
|
559
568
|
return await messageInput(
|