@tangle-network/agent-runtime 0.195.0 → 0.196.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/{activation-DtIbcFOX.js → activation-BxMZybuo.js} +2 -2
- package/dist/{activation-DtIbcFOX.js.map → activation-BxMZybuo.js.map} +1 -1
- package/dist/agent.d.ts +2 -2
- package/dist/agent.js +3 -3
- package/dist/{analyst-loop-CSH7P-Bf.js → analyst-loop-BknOQUW5.js} +3 -3
- package/dist/{analyst-loop-CSH7P-Bf.js.map → analyst-loop-BknOQUW5.js.map} +1 -1
- package/dist/analyst-loop.d.ts +1 -1
- package/dist/analyst-loop.js +1 -1
- package/dist/{authored-code-DzYtiflw.js → authored-code-URmkdgjv.js} +2 -2
- package/dist/{authored-code-DzYtiflw.js.map → authored-code-URmkdgjv.js.map} +1 -1
- package/dist/{conversation-BXPWMOSd.js → conversation-BxJ0SIBM.js} +5 -5
- package/dist/{conversation-BXPWMOSd.js.map → conversation-BxJ0SIBM.js.map} +1 -1
- package/dist/conversation.d.ts +1 -1
- package/dist/conversation.js +1 -1
- package/dist/{coordination-driver-iSN-m3VX.js → coordination-driver-zkCrfEbS.js} +6 -6
- package/dist/{coordination-driver-iSN-m3VX.js.map → coordination-driver-zkCrfEbS.js.map} +1 -1
- package/dist/{delegate-DCC2muUd.js → delegate-D7sonS78.js} +3 -3
- package/dist/{delegate-DCC2muUd.js.map → delegate-D7sonS78.js.map} +1 -1
- package/dist/{delegation-status-BlsbSeOB.js → delegation-status-CF4D0NZ_.js} +2 -2
- package/dist/{delegation-status-BlsbSeOB.js.map → delegation-status-CF4D0NZ_.js.map} +1 -1
- package/dist/durable.d.ts +2 -2
- package/dist/durable.js +3 -3
- package/dist/{environment-provider-Dr-wfnHg.js → environment-provider-1fKZh2zl.js} +111 -13
- package/dist/environment-provider-1fKZh2zl.js.map +1 -0
- package/dist/{environment-provider-adVa6X7a.d.ts → environment-provider-B-I2jlQy.d.ts} +3 -3
- package/dist/environment-provider.d.ts +1 -1
- package/dist/environment-provider.js +1 -1
- package/dist/{errors-CDZ8XsVj.js → errors-DodWX-cb.js} +9 -1
- package/dist/errors-DodWX-cb.js.map +1 -0
- package/dist/{graph-DghidDx5.js → graph-BuS-NxXD.js} +30 -19
- package/dist/{graph-DghidDx5.js.map → graph-BuS-NxXD.js.map} +1 -1
- package/dist/graph.d.ts +3 -3
- package/dist/graph.js +6 -6
- package/dist/{improve-7VTwse1c.d.ts → improve-DZs0KXhK.d.ts} +3 -3
- package/dist/{improvement-cycle-bTBySunH.js → improvement-cycle-Tw5nYT5R.js} +8 -8
- package/dist/{improvement-cycle-bTBySunH.js.map → improvement-cycle-Tw5nYT5R.js.map} +1 -1
- package/dist/{index-DNx0nWZH.d.ts → index-CYOJsxSg.d.ts} +17 -8
- package/dist/{index-DO6DHgRP.d.ts → index-D9mb6fn2.d.ts} +3 -3
- package/dist/{index-CVD30soi.d.ts → index-ZnxSe6iK.d.ts} +4 -4
- package/dist/index.d.ts +10 -10
- package/dist/index.js +10 -10
- package/dist/intelligence.d.ts +6 -6
- package/dist/intelligence.js +4 -4
- package/dist/{jsonl-file-Bh1Q9nt0.js → jsonl-file-BEpaEYjT.js} +3 -3
- package/dist/{jsonl-file-Bh1Q9nt0.js.map → jsonl-file-BEpaEYjT.js.map} +1 -1
- package/dist/kernel.d.ts +6 -6
- package/dist/kernel.js +12 -12
- package/dist/{knowledge-U8WJ5xCI.js → knowledge-CPzT_Ve7.js} +4 -4
- package/dist/{knowledge-U8WJ5xCI.js.map → knowledge-CPzT_Ve7.js.map} +1 -1
- package/dist/knowledge.d.ts +1 -1
- package/dist/knowledge.js +1 -1
- package/dist/{loop-runner-bin-b4585v9Z.d.ts → loop-runner-bin-DwrSB04m.d.ts} +3 -3
- package/dist/{loop-runner-bin-BU2NACsF.js → loop-runner-bin-XKMc3Ld-.js} +5 -5
- package/dist/{loop-runner-bin-BU2NACsF.js.map → loop-runner-bin-XKMc3Ld-.js.map} +1 -1
- package/dist/loop-runner-bin.d.ts +1 -1
- package/dist/loop-runner-bin.js +1 -1
- package/dist/{materialization-vZssF9Nx.js → materialization-Cy0oM8tb.js} +2 -2
- package/dist/{materialization-vZssF9Nx.js.map → materialization-Cy0oM8tb.js.map} +1 -1
- package/dist/mcp/bin.js +4 -4
- package/dist/mcp/index.d.ts +6 -6
- package/dist/mcp/index.js +11 -11
- package/dist/mcp/memory-bin.js +1 -1
- package/dist/{memory-server-Crkevawz.js → memory-server-BR310Weg.js} +3 -3
- package/dist/{memory-server-Crkevawz.js.map → memory-server-BR310Weg.js.map} +1 -1
- package/dist/{model-policy-Wf2MxXJ9.js → model-policy-DKDyr-fc.js} +2 -2
- package/dist/{model-policy-Wf2MxXJ9.js.map → model-policy-DKDyr-fc.js.map} +1 -1
- package/dist/{openai-tools-BDwAdxk5.d.ts → openai-tools-CRQhVT_V.d.ts} +2 -2
- package/dist/{openai-tools-DmvmaG0a.js → openai-tools-DoQ32vpe.js} +2 -2
- package/dist/{openai-tools-DmvmaG0a.js.map → openai-tools-DoQ32vpe.js.map} +1 -1
- package/dist/primeintellect/index.d.ts +1 -1
- package/dist/profiles.d.ts +2 -2
- package/dist/profiles.js +2 -2
- package/dist/{provision-supervisor-CRPbnJiB.js → provision-supervisor-CpMMShE_.js} +7 -7
- package/dist/{provision-supervisor-CRPbnJiB.js.map → provision-supervisor-CpMMShE_.js.map} +1 -1
- package/dist/{redact-BOU77QfQ.js → redact-Cbl2O-4N.js} +19 -24
- package/dist/redact-Cbl2O-4N.js.map +1 -0
- package/dist/{runtime-B8x43nGP.d.ts → runtime-0xNaV6TJ.d.ts} +9 -6
- package/dist/{runtime-CuNJ0opC.js → runtime-DqRieJ6e.js} +16 -16
- package/dist/{runtime-CuNJ0opC.js.map → runtime-DqRieJ6e.js.map} +1 -1
- package/dist/{sandbox-events-DWeQRWxg.js → sandbox-events-DbC2WKKS.js} +19 -16
- package/dist/sandbox-events-DbC2WKKS.js.map +1 -0
- package/dist/{server-D6XmE1Du.js → server-BjB6ay4N.js} +6 -6
- package/dist/{server-D6XmE1Du.js.map → server-BjB6ay4N.js.map} +1 -1
- package/dist/{stream-agent-turn-DOtEsvCV.js → stream-agent-turn-Dt5mZpc3.js} +6 -6
- package/dist/{stream-agent-turn-DOtEsvCV.js.map → stream-agent-turn-Dt5mZpc3.js.map} +1 -1
- package/dist/{stream-agent-turn-B-gtBlOy.d.ts → stream-agent-turn-urHpmO_Z.d.ts} +3 -3
- package/dist/{structural-rollout-DxEQ77H7.js → structural-rollout-DPbZWgEm.js} +5 -5
- package/dist/{structural-rollout-DxEQ77H7.js.map → structural-rollout-DPbZWgEm.js.map} +1 -1
- package/dist/{substrate-qLePHqvH.d.ts → substrate-B4iT90Zv.d.ts} +2 -2
- package/dist/{supervise-C0V3pZXK.js → supervise-D9aNi8_f.js} +23 -9
- package/dist/supervise-D9aNi8_f.js.map +1 -0
- package/dist/testing.d.ts +2 -2
- package/dist/testing.js +12 -12
- package/dist/{tool-server-DEmLr9YY.js → tool-server-BJbCPhoW.js} +2 -2
- package/dist/{tool-server-DEmLr9YY.js.map → tool-server-BJbCPhoW.js.map} +1 -1
- package/dist/tui/index.d.ts +1 -1
- package/dist/tui/index.js +1 -1
- package/dist/{types-B_pNTBjK.d.ts → types-DFLZMaeh.d.ts} +2 -2
- package/dist/{types-BdolQ6Zi.d.ts → types-Q0PMagdm.d.ts} +3 -1
- package/package.json +1 -1
- package/dist/environment-provider-Dr-wfnHg.js.map +0 -1
- package/dist/errors-CDZ8XsVj.js.map +0 -1
- package/dist/redact-BOU77QfQ.js.map +0 -1
- package/dist/sandbox-events-DWeQRWxg.js.map +0 -1
- package/dist/supervise-C0V3pZXK.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialization-vZssF9Nx.js","names":[],"sources":["../src/runtime/turn-input.ts","../src/runtime/retained-run-binding.ts","../src/runtime/supervise/snapshot.ts","../src/runtime/supervise/materialization.ts"],"sourcesContent":["import {\n AgentExactRunControlRefSchema,\n type ContextTransferRequest,\n type InputPart,\n} from '@tangle-network/agent-interface'\nimport type { AgentTurnInput } from '@tangle-network/agent-interface/environment-provider'\nimport type { PromptInputPart, PromptOptions } from '@tangle-network/sandbox'\n\n/**\n * Copy only fields that describe a new provider turn.\n *\n * Session, replay, continuation, and transfer coordinates are runtime-owned\n * and are injected by the caller that owns that lifecycle. Keeping this copy\n * explicit also makes JavaScript callers subject to the same boundary.\n */\nexport function freshTurnInput(\n input: AgentTurnInput,\n runtime: {\n readonly turnId: string\n readonly detach: true\n readonly sessionId?: string\n readonly executionId?: string\n readonly contextTransfer?: ContextTransferRequest\n },\n): AgentTurnInput {\n const fresh: AgentTurnInput = {\n ...(input.prompt === undefined ? {} : { prompt: input.prompt }),\n ...(input.parts === undefined ? {} : { parts: input.parts }),\n ...(input.model === undefined ? {} : { model: input.model }),\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(input.interactions === undefined ? {} : { interactions: input.interactions }),\n ...(input.providerOptions === undefined ? {} : { providerOptions: input.providerOptions }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n turnId: runtime.turnId,\n detach: runtime.detach,\n ...(runtime.sessionId === undefined ? {} : { sessionId: runtime.sessionId }),\n ...(runtime.executionId === undefined ? {} : { executionId: runtime.executionId }),\n ...(runtime.contextTransfer === undefined ? {} : { contextTransfer: runtime.contextTransfer }),\n }\n return fresh\n}\n\n/** Project canonical turn parts onto the Sandbox prompt vocabulary once. */\nexport function promptFromAgentTurnInput(input: AgentTurnInput): string | PromptInputPart[] {\n if (input.parts !== undefined) return input.parts.map(promptPartFromInputPart)\n return input.prompt ?? providerMessageText(input.providerOptions) ?? ''\n}\n\n/** Project canonical turn controls onto the Sandbox prompt options once. */\nexport function promptOptionsFromAgentTurnInput(input: AgentTurnInput): PromptOptions {\n const providerBackend =\n input.providerOptions?.backend &&\n typeof input.providerOptions.backend === 'object' &&\n !Array.isArray(input.providerOptions.backend)\n ? (input.providerOptions.backend as NonNullable<PromptOptions['backend']>)\n : undefined\n const backend = {\n ...(providerBackend ?? {}),\n ...(input.interactions === undefined ? {} : { interactions: input.interactions }),\n }\n const runControlRef =\n input.controlRef === undefined\n ? undefined\n : AgentExactRunControlRefSchema.parse(input.controlRef)\n return {\n ...(input.sessionId === undefined ? {} : { sessionId: input.sessionId }),\n ...(input.model === undefined ? {} : { model: input.model }),\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n ...(input.executionId === undefined ? {} : { executionId: input.executionId }),\n ...(input.lastEventId === undefined ? {} : { lastEventId: input.lastEventId }),\n ...(input.turnId === undefined ? {} : { turnId: input.turnId }),\n ...(input.detach === undefined ? {} : { detach: input.detach }),\n ...(runControlRef === undefined ? {} : { runControlRef }),\n ...(Object.keys(backend).length === 0 ? {} : { backend }),\n }\n}\n\n/** Read a text fallback from provider-specific conversation options. */\nexport function providerMessageText(\n providerOptions: Record<string, unknown> | undefined,\n): string | undefined {\n const messages = providerOptions?.messages\n if (!Array.isArray(messages)) return undefined\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index]\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue\n if (!('role' in message) || message.role !== 'user') continue\n if (!('content' in message)) continue\n if (typeof message.content === 'string') return message.content\n }\n return undefined\n}\n\nfunction promptPartFromInputPart(part: InputPart): PromptInputPart {\n if (part.type === 'text' || part.type === 'image') return part\n if (part.content !== undefined || part.path !== undefined) {\n throw new Error(\n 'Sandbox file prompt parts require a URL; inline content and local paths are not representable',\n )\n }\n if (!part.filename || !part.url) {\n throw new Error('Sandbox file prompt parts require both filename and URL')\n }\n return {\n type: 'file',\n filename: part.filename,\n ...(part.mediaType === undefined ? {} : { mediaType: part.mediaType }),\n url: part.url,\n }\n}\n","import {\n type AgentExactRunControlRef,\n AgentExactRunControlRefSchema,\n type AgentRunCancellationAcknowledgement,\n AgentRunCancellationAcknowledgementSchema,\n type AgentRunCancellationRequest,\n AgentRunCancellationRequestSchema,\n agentRunCancellationAcknowledgementMatchesRequest,\n agentRunCancellationRequestDigest,\n canonicalCandidateDigest,\n type InteractionResponseCommand,\n type NativeContextBoundaryProof,\n type StreamEvent,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironment,\n AgentEnvironmentEvent,\n AgentSession,\n AgentSessionStatus,\n AgentTurnResult,\n} from '@tangle-network/agent-interface/environment-provider'\n\nexport function exactSession(\n environment: AgentEnvironment,\n controlRef: AgentExactRunControlRef,\n): { session: AgentSession; controlRef: AgentExactRunControlRef } {\n if (environment.id !== controlRef.environmentId || environment.provider !== controlRef.provider) {\n throw new Error('provider reconstructed a different retained environment')\n }\n if (!environment.session || !controlRef.sessionId) {\n throw new Error('retained run control requires a provider session id')\n }\n const session = environment.session(controlRef.sessionId, { controlRef })\n if (session.id !== controlRef.sessionId) {\n throw new Error('provider reconstructed a different session')\n }\n if (session.controlRef === undefined) {\n throw new Error('provider session did not return its provider-owned run control reference')\n }\n const currentControlRef = AgentExactRunControlRefSchema.parse(session.controlRef)\n if (!sameControlCoordinates(currentControlRef, controlRef)) {\n throw new Error('provider session reconstructed a different retained session')\n }\n if (canonicalCandidateDigest(currentControlRef) !== canonicalCandidateDigest(controlRef)) {\n throw new Error('provider session did not retain the exact run control reference')\n }\n return { session, controlRef: currentControlRef }\n}\n\nexport function sameControlCoordinates(\n left: AgentExactRunControlRef,\n right: AgentExactRunControlRef,\n): boolean {\n return canonicalCandidateDigest(left) === canonicalCandidateDigest(right)\n}\n\nexport function freezeControlRef(controlRef: AgentExactRunControlRef): AgentExactRunControlRef {\n return Object.freeze({ ...AgentExactRunControlRefSchema.parse(controlRef) })\n}\n\nexport function copyControlRef(controlRef: AgentExactRunControlRef): AgentExactRunControlRef {\n return { ...controlRef }\n}\n\nexport function exactControlRef(\n candidate: unknown,\n expected: { provider: string; environmentId: string; sessionId: string },\n): AgentExactRunControlRef {\n if (!candidate) throw new Error('provider dispatch returned no durable run control reference')\n const controlRef = AgentExactRunControlRefSchema.parse(candidate)\n if (\n controlRef.provider !== expected.provider ||\n controlRef.environmentId !== expected.environmentId ||\n controlRef.sessionId !== expected.sessionId\n ) {\n throw new Error('provider dispatch returned control coordinates for another run')\n }\n return controlRef\n}\n\nexport function exactContinuedControlRef(\n candidate: AgentExactRunControlRef,\n initial: AgentExactRunControlRef,\n): AgentExactRunControlRef {\n const controlRef = AgentExactRunControlRefSchema.parse(candidate)\n if (\n controlRef.provider !== initial.provider ||\n controlRef.environmentId !== initial.environmentId ||\n controlRef.sessionId !== initial.sessionId\n ) {\n throw new Error('provider continuation advanced to another retained session')\n }\n if (controlRef.runId === initial.runId && controlRef.executionId === initial.executionId) {\n throw new Error('provider continuation did not return a new exact run execution')\n }\n return controlRef\n}\n\nexport function assertInteractionBinding(\n controlRef: AgentExactRunControlRef,\n command: InteractionResponseCommand,\n): void {\n // This digest identifies the interaction request, not the retained turn.\n // The provider validates it against its durable interaction record.\n if (\n command.binding.runId !== controlRef.runId ||\n command.binding.provider !== controlRef.provider ||\n command.binding.environmentId !== controlRef.environmentId ||\n command.binding.sessionId !== controlRef.sessionId ||\n command.binding.executionId !== controlRef.executionId\n ) {\n throw new Error('interaction response command does not target this retained run')\n }\n}\n\nexport function assertBoundaryBinding(\n controlRef: AgentExactRunControlRef,\n proof: NativeContextBoundaryProof,\n): void {\n if (\n proof.runId !== controlRef.runId ||\n proof.provider !== controlRef.provider ||\n proof.environmentId !== controlRef.environmentId ||\n proof.sessionId !== controlRef.sessionId ||\n proof.executionId !== controlRef.executionId ||\n proof.requestDigest !== controlRef.requestDigest\n ) {\n throw new Error('native context proof does not identify this retained run')\n }\n}\n\nexport function assertSequence(value: unknown, label: string): asserts value is number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative safe integer`)\n }\n}\n\nexport function assertResultBinding(\n controlRef: AgentExactRunControlRef,\n result: AgentTurnResult,\n): void {\n if (result.sessionId !== controlRef.sessionId) {\n throw new Error('provider returned a result for another retained session')\n }\n const metadata = result.metadata\n if (controlRef.executionId !== undefined && metadata?.executionId !== controlRef.executionId) {\n throw new Error('provider returned a result for another retained execution')\n }\n if (metadata?.runId !== controlRef.runId) {\n throw new Error('provider returned a result for another retained run')\n }\n if (metadata?.requestDigest !== controlRef.requestDigest) {\n throw new Error('provider returned a result for another retained request')\n }\n}\n\ninterface ExactCancelOptions {\n readonly signal?: AbortSignal\n}\n\nexport class RetainedRunProviderContractError extends Error {\n readonly code: string\n\n constructor(message: string, options: { readonly code?: string; readonly cause?: unknown } = {}) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause })\n this.name = 'RetainedRunProviderContractError'\n this.code = options.code ?? 'RETAINED_RUN_PROVIDER_CONTRACT_ERROR'\n }\n}\n\nexport function cancellationRequest(\n controlRef: AgentExactRunControlRef,\n operationId: string,\n reason?: string,\n): AgentRunCancellationRequest {\n const material = {\n operationId,\n run: AgentExactRunControlRefSchema.parse(controlRef),\n ...(reason === undefined ? {} : { reason }),\n }\n return AgentRunCancellationRequestSchema.parse({\n ...material,\n requestDigest: agentRunCancellationRequestDigest(material),\n })\n}\n\nexport async function exactSessionCancel(\n session: AgentSession,\n request: AgentRunCancellationRequest,\n options: ExactCancelOptions,\n): Promise<AgentRunCancellationAcknowledgement> {\n if (!session.cancelRun) {\n throw new Error('provider session does not expose durable cancellation operations')\n }\n let acknowledgement: unknown\n try {\n acknowledgement = await awaitAbortable(\n Promise.resolve().then(() => session.cancelRun!(request, options)),\n options.signal,\n )\n } catch (error) {\n if (error instanceof RetainedRunProviderContractError) throw error\n throw error\n }\n let exactAcknowledgement: AgentRunCancellationAcknowledgement\n try {\n exactAcknowledgement = AgentRunCancellationAcknowledgementSchema.parse(acknowledgement)\n } catch {\n throw new RetainedRunProviderContractError(\n 'provider returned an invalid retained cancellation acknowledgement',\n )\n }\n if (!agentRunCancellationAcknowledgementMatchesRequest(request, exactAcknowledgement)) {\n throw new RetainedRunProviderContractError(\n 'provider returned a retained cancellation acknowledgement for another request',\n )\n }\n return exactAcknowledgement\n}\n\nexport function hasDurableCancel(session: AgentSession): boolean {\n return typeof session.cancelRun === 'function'\n}\n\nexport async function awaitAbortable<T>(\n work: PromiseLike<T>,\n signal: AbortSignal | undefined,\n): Promise<T> {\n if (signal === undefined) return await work\n if (signal.aborted) {\n void Promise.resolve(work).catch(() => undefined)\n throw abortError(signal.reason)\n }\n return await new Promise<T>((resolve, reject) => {\n let settled = false\n const cleanup = () => signal.removeEventListener('abort', onAbort)\n const onAbort = () => {\n queueMicrotask(() => {\n if (settled) return\n settled = true\n cleanup()\n reject(abortError(signal.reason))\n })\n }\n signal.addEventListener('abort', onAbort, { once: true })\n Promise.resolve(work).then(\n (value) => {\n if (settled) return\n settled = true\n cleanup()\n resolve(value)\n },\n (error) => {\n if (settled) return\n settled = true\n cleanup()\n reject(error)\n },\n )\n })\n}\n\nexport async function exactSessionResult(session: AgentSession): Promise<AgentTurnResult> {\n return session.result()\n}\n\nexport function assertEventBinding(\n source: AgentEnvironmentEvent,\n controlRef: AgentExactRunControlRef,\n): void {\n const transport = isRecord(source) ? source : undefined\n const payload = isRecord(source.data) ? source.data : undefined\n const providerEvent = isRecord(source.providerEvent) ? source.providerEvent : undefined\n const bindings = [\n { value: transport, checkSessionId: true },\n {\n value: payload,\n // The canonical session.updated payload identifies the harness-native chat.\n // It is event content, not the retained provider session coordinate.\n checkSessionId: source.type !== 'session.updated',\n },\n { value: providerEvent, checkSessionId: true },\n ]\n for (const { value, checkSessionId } of bindings) {\n if (value === undefined) continue\n if (value.runId !== undefined && value.runId !== controlRef.runId) {\n throw new Error('provider returned an event for another retained run')\n }\n if (value.executionId !== undefined && value.executionId !== controlRef.executionId) {\n throw new Error('provider returned an event for another retained execution')\n }\n if (\n checkSessionId &&\n value.sessionId !== undefined &&\n value.sessionId !== controlRef.sessionId\n ) {\n throw new Error('provider returned an event for another retained session')\n }\n }\n}\n\n/** Validate the nested coordinates carried by a canonical interaction request. */\nexport function assertCanonicalEventBinding(\n controlRef: AgentExactRunControlRef,\n event: StreamEvent,\n): void {\n if (event.type !== 'interaction') return\n const binding = event.request.binding\n if (\n binding.runId !== controlRef.runId ||\n binding.provider !== controlRef.provider ||\n binding.environmentId !== controlRef.environmentId ||\n binding.sessionId !== controlRef.sessionId ||\n binding.executionId !== controlRef.executionId ||\n binding.interactionId !== event.request.id\n ) {\n throw new Error('provider returned an interaction for another retained execution')\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function assertStableText(value: string, label: string): void {\n if (value.length === 0 || value.trim() !== value) {\n throw new Error(`${label} must be non-empty and have no outer whitespace`)\n }\n}\n\nexport function abortError(reason: unknown): Error {\n const error = new Error(\n reason instanceof Error ? reason.message : reason === undefined ? 'aborted' : String(reason),\n )\n error.name = 'AbortError'\n return error\n}\n\nexport function assertWaitDuration(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative safe integer`)\n }\n}\n\n/**\n * Whether a session can still change state.\n *\n * Exhaustive over `AgentSessionStatus` by construction: the map below is `satisfies\n * Record<AgentSessionStatus, boolean>`, so a member added upstream fails to compile here instead of\n * being silently classified as non-terminal. Written as a boolean chain, `stopped` was missing —\n * and a `status({ waitMs })` call on an already-stopped session then polled every 25 ms for the\n * whole wait before returning the answer it already had at the first snapshot.\n *\n * `unknown` is deliberately NOT terminal: it says the provider could not tell us, which is the one\n * state where continuing to poll is the point. That differs from\n * `sandboxSessionStatusFromAgentSessionStatus`, which projects `unknown` to `failed` because a run\n * RESULT must never claim success without proof — a different question about the same word.\n */\nconst sessionStatusIsTerminal = {\n pending: false,\n provisioning: false,\n running: false,\n unknown: false,\n stopped: true,\n completed: true,\n cancelled: true,\n failed: true,\n expired: true,\n} satisfies Record<AgentSessionStatus, boolean>\n\nexport function isTerminalSessionStatus(status: AgentSessionStatus | null): boolean {\n return status !== null && sessionStatusIsTerminal[status]\n}\n\nexport function delay(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) return Promise.reject(abortError(signal.reason))\n return new Promise((resolveDelay, rejectDelay) => {\n const timer = setTimeout(finish, ms)\n function finish() {\n signal?.removeEventListener('abort', onAbort)\n resolveDelay()\n }\n function onAbort() {\n clearTimeout(timer)\n signal?.removeEventListener('abort', onAbort)\n rejectDelay(abortError(signal?.reason))\n }\n signal?.addEventListener('abort', onAbort, { once: true })\n })\n}\n","import { ValidationError } from '../../errors'\n\n/** Deeply detach and freeze untrusted data at a runtime decision boundary. The clone prevents the\n * caller from mutating it later; the freeze prevents downstream code from mutating the snapshot. */\nexport function detachedSnapshot<T>(value: T, context: string): T {\n try {\n return deepFreeze(structuredClone(value))\n } catch (error) {\n throw new ValidationError(`${context}: input must be structured-cloneable`, { cause: error })\n }\n}\n\n/** Detach a value from its caller and freeze it, without the `ValidationError` framing\n * {@link detachedSnapshot} adds. For a boundary that has already validated its input. */\nexport function detachedFrozen<T>(value: T): T {\n return deepFreeze(structuredClone(value))\n}\n\nfunction deepFreeze<T>(value: T, seen = new Set<object>()): T {\n // `Object.freeze` throws `TypeError: Cannot freeze array buffer views with elements` on any\n // non-empty TypedArray or Buffer, so binary inside a payload must be handed back untouched\n // rather than frozen. Its bytes are already detached by the `structuredClone` above.\n if (value === null || typeof value !== 'object' || ArrayBuffer.isView(value) || seen.has(value)) {\n return value\n }\n seen.add(value)\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child, seen)\n return Object.freeze(value)\n}\n","import { randomUUID } from 'node:crypto'\nimport {\n agentProfileSchema,\n canonicalAgentProfileDigest,\n canonicalCandidateDigest,\n type Sha256Digest,\n} from '@tangle-network/agent-interface'\nimport { ValidationError } from '../../errors'\nimport { detachedSnapshot } from './snapshot'\nimport type {\n ExecutionBindingReceipt,\n Executor,\n ExecutorExecutionBinding,\n ExecutorMaterialization,\n ProfileMaterializationReceipt,\n ProviderModelAttemptEvidence,\n ProviderModelExecutionEvidence,\n Runtime,\n UnknownMaterializationReason,\n} from './types'\n\ntype RuntimeOwnedExecutorMaterialization =\n | {\n readonly kind: 'known'\n readonly declaration: ExecutorMaterialization\n readonly binding?: ExecutorExecutionBinding\n }\n | {\n /** A Runtime-owned external executor whose exact launch is known, but whose remote\n * materializer has not yet returned its terminal acknowledgement. This private state lets\n * Runtime validate the planned authority before execution without presenting it as proof\n * that the remote process actually used that plan. */\n readonly kind: 'pending'\n readonly runtime: Runtime\n readonly declaration: ExecutorMaterialization\n readonly binding: ExecutorExecutionBinding\n }\n | { readonly kind: 'deferred'; readonly runtime: Runtime }\n\ninterface RuntimeOwnedExecutorMaterializationRef {\n current: RuntimeOwnedExecutorMaterialization\n}\n\nconst runtimeOwnedExecutorMaterializations = new WeakMap<\n object,\n RuntimeOwnedExecutorMaterializationRef\n>()\nconst runtimeOwnedScopeOwners = new WeakMap<object, Runtime>()\nconst runtimeOwnedExecutorProviderEvidenceState = new WeakMap<\n object,\n {\n readonly attempts: Array<{\n readonly observations: string[]\n identityConflict?: boolean\n providerDispatch?: 'not_started'\n }>\n }\n>()\nconst runtimeOwnedDriveHarnessProviderEvidenceState = new WeakMap<\n object,\n ProviderModelExecutionEvidence\n>()\n\ninterface KnownReceiptInput {\n readonly authoredProfileDigest: Sha256Digest\n readonly runtime: Runtime\n readonly declaration: ExecutorMaterialization\n}\n\ninterface UnknownReceiptInput {\n readonly authoredProfileDigest?: Sha256Digest\n readonly runtime: Runtime\n readonly reason: UnknownMaterializationReason\n}\n\nconst declarationKeys = new Set([\n 'effectiveProfile',\n 'authoredProfile',\n 'backend',\n 'model',\n 'execution',\n 'materializer',\n 'plan',\n 'platformAttachments',\n])\n\n/**\n * Bind a declaration to a runtime-owned executor without putting an attestable method on the\n * public Executor interface. This module is not a package export: arbitrary caller executors stay\n * unknown even if they add a lookalike `materialization()` property.\n */\nexport function attestRuntimeOwnedExecutor<Out>(\n executor: Executor<Out>,\n declaration: ExecutorMaterialization,\n binding?: ExecutorExecutionBinding,\n): Executor<Out> {\n runtimeOwnedExecutorMaterializations.set(executor as object, {\n current: Object.freeze({\n kind: 'known',\n declaration: detachedSnapshot(declaration, 'runtime-owned executor materialization'),\n ...(binding === undefined\n ? {}\n : {\n binding: detachedSnapshot(binding, 'runtime-owned executor execution binding'),\n }),\n }),\n })\n ensureProviderEvidenceState(executor)\n return executor\n}\n\n/** Brand an external Runtime executor whose exact remote materialization is provable only after\n * its terminal protocol acknowledgement. The declaration is a planned authority check, never a\n * known receipt; callers must finalize this same object after validating the acknowledgement. */\nexport function attestRuntimeOwnedPendingExecutor<Out>(\n executor: Executor<Out>,\n runtime: Runtime,\n declaration: ExecutorMaterialization,\n binding: ExecutorExecutionBinding,\n): Executor<Out> {\n runtimeOwnedExecutorMaterializations.set(executor as object, {\n current: Object.freeze({\n kind: 'pending',\n runtime,\n declaration: detachedSnapshot(declaration, 'pending executor materialization'),\n binding: detachedSnapshot(binding, 'pending executor execution binding'),\n }),\n })\n return executor\n}\n\n/** Replace a private pending brand with terminally acknowledged evidence. A caller-owned executor\n * cannot enter this path because only this module can create the pending WeakMap entry. */\nexport function finalizeRuntimeOwnedPendingExecutor<Out>(\n executor: Executor<Out>,\n declaration: ExecutorMaterialization,\n binding: ExecutorExecutionBinding,\n): Executor<Out> {\n const ref = runtimeOwnedExecutorMaterializations.get(executor as object)\n if (ref?.current.kind !== 'pending' || ref.current.runtime !== executor.runtime) {\n throw new ValidationError(\n 'executor materialization: terminal acknowledgement has no matching Runtime-owned pending executor',\n )\n }\n ref.current = Object.freeze({\n kind: 'known',\n declaration: detachedSnapshot(declaration, 'runtime-owned executor materialization'),\n binding: detachedSnapshot(binding, 'runtime-owned executor execution binding'),\n })\n return executor\n}\n\n/** Mark a runtime-owned orchestration executor whose exact leaf declaration is published through\n * its private nested Scope before the first backend inference. Arbitrary executors cannot opt in. */\nexport function attestRuntimeOwnedDeferredExecutor<Out>(\n executor: Executor<Out>,\n runtime: Runtime,\n): Executor<Out> {\n runtimeOwnedExecutorMaterializations.set(executor as object, {\n current: Object.freeze({ kind: 'deferred', runtime }),\n })\n return executor\n}\n\n/** Preserve the runtime-owned attestation when a trusted wrapper changes result semantics only. */\nexport function inheritRuntimeOwnedExecutorAttestation<In, Out>(\n source: Executor<In>,\n wrapper: Executor<Out>,\n): Executor<Out> {\n const ref = runtimeOwnedExecutorMaterializations.get(source as object)\n if (ref !== undefined) {\n runtimeOwnedExecutorMaterializations.set(wrapper as object, ref)\n }\n const providerState = ensureProviderEvidenceState(source)\n runtimeOwnedExecutorProviderEvidenceState.set(wrapper as object, providerState)\n return wrapper\n}\n\nfunction ensureProviderEvidenceState<Out>(executor: Executor<Out>): {\n readonly attempts: Array<{\n readonly observations: string[]\n identityConflict?: boolean\n providerDispatch?: 'not_started'\n }>\n} {\n const existing = runtimeOwnedExecutorProviderEvidenceState.get(executor as object)\n if (existing !== undefined) return existing\n const state = { attempts: [] }\n runtimeOwnedExecutorProviderEvidenceState.set(executor as object, state)\n return state\n}\n\n/** Read a declaration only when Runtime itself branded this exact executor object. */\nexport function runtimeOwnedExecutorMaterialization<Out>(\n executor: Executor<Out>,\n): ExecutorMaterialization | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'known' ? attestation.declaration : undefined\n}\n\n/** Read one attempt binding only from the private brand on this exact executor object. */\nexport function runtimeOwnedExecutorExecutionBinding<Out>(\n executor: Executor<Out>,\n): ExecutorExecutionBinding | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'known' ? attestation.binding : undefined\n}\n\n/** Read a planned external declaration only for Runtime's private pending brand. This is useful for\n * pre-execution authority checks, but must never be turned into a known durable receipt. */\nexport function runtimeOwnedPendingExecutorMaterialization<Out>(executor: Executor<Out>):\n | {\n readonly runtime: Runtime\n readonly declaration: ExecutorMaterialization\n readonly binding: ExecutorExecutionBinding\n }\n | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'pending'\n ? {\n runtime: attestation.runtime,\n declaration: attestation.declaration,\n binding: attestation.binding,\n }\n : undefined\n}\n\n/** Read the expected leaf runtime only for a privately branded deferred orchestration executor. */\nexport function runtimeOwnedDeferredExecutorRuntime<Out>(\n executor: Executor<Out>,\n): Runtime | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'deferred' ? attestation.runtime : undefined\n}\n\n/** Propagate trust from a built-in driver adapter to the Agent and recursive executor it owns. */\nexport function attestRuntimeOwnedScopeOwner<T extends object>(owner: T, runtime: Runtime): T {\n runtimeOwnedScopeOwners.set(owner, runtime)\n return owner\n}\n\n/** Return a built-in scope owner's expected concrete leaf runtime; caller-owned functions/Agents\n * deliberately have no entry even if they add lookalike fields. */\nexport function runtimeOwnedScopeOwnerRuntime(owner: object): Runtime | undefined {\n return runtimeOwnedScopeOwners.get(owner)\n}\n\n/** Mark one provider inference attempt on a Runtime-owned executor. */\nexport function recordRuntimeOwnedProviderAttemptStart<Out>(executor: Executor<Out>): void {\n const state = ensureProviderEvidenceState(executor)\n state.attempts.push({ observations: [] })\n}\n\n/** Mark the current attempt as rejected before provider dispatch.\n *\n * The caller may use this only after consuming the Router-owned\n * `provider_dispatch: \"not_started\"` fact. Any other error stays an empty,\n * unknown attempt and must not be upgraded here.\n */\nexport function recordRuntimeOwnedProviderDispatchNotStarted<Out>(executor: Executor<Out>): void {\n const state = ensureProviderEvidenceState(executor)\n const attempt = state.attempts.at(-1)\n if (attempt === undefined) {\n throw new ValidationError('provider dispatch rejection arrived before an attempt started')\n }\n if (attempt.observations.length > 0 || attempt.identityConflict === true) {\n throw new ValidationError(\n 'provider dispatch rejection arrived after provider identity evidence was observed',\n )\n }\n attempt.providerDispatch = 'not_started'\n}\n\n/** Record a trusted served model on the current provider attempt. */\nexport function recordRuntimeOwnedProviderModel<Out>(executor: Executor<Out>, model: string): void {\n const state = runtimeOwnedExecutorProviderEvidenceState.get(executor as object)\n const attempt = state?.attempts.at(-1)\n if (attempt === undefined) {\n throw new ValidationError('provider model observation arrived before an attempt started')\n }\n if (attempt.observations.at(-1) !== model) attempt.observations.push(model)\n}\n\n/** Convert process-local provider observations into a frozen, replayable evidence value. */\nexport function runtimeOwnedExecutorProviderEvidence<Out>(\n executor: Executor<Out>,\n): ProviderModelExecutionEvidence | undefined {\n const state = runtimeOwnedExecutorProviderEvidenceState.get(executor as object)\n if (state === undefined || state.attempts.length === 0) return undefined\n const attempts: ReadonlyArray<ProviderModelAttemptEvidence> = Object.freeze(\n state.attempts.map((attempt) =>\n Object.freeze({\n observations: Object.freeze([...attempt.observations]),\n ...(attempt.identityConflict ? { identityConflict: true } : {}),\n ...(attempt.providerDispatch === 'not_started'\n ? { providerDispatch: 'not_started' as const }\n : {}),\n }),\n ),\n )\n const models = Object.freeze([...new Set(attempts.flatMap((attempt) => attempt.observations))])\n const missing = attempts.some(\n (attempt) => attempt.observations.length === 0 && attempt.providerDispatch !== 'not_started',\n )\n const conflict = attempts.some((attempt) => attempt.identityConflict === true)\n const served = attempts.some((attempt) => attempt.observations.length > 0)\n return Object.freeze(\n missing || conflict || !served\n ? {\n status: 'unknown' as const,\n attempts,\n models,\n reason: conflict\n ? ('provider-model-conflict' as const)\n : ('provider-model-missing' as const),\n }\n : { status: 'known' as const, attempts, models },\n )\n}\n\n/** Mark the current provider attempt unusable after conflicting served identity metadata. */\nexport function recordRuntimeOwnedProviderIdentityConflict<Out>(executor: Executor<Out>): void {\n const state = ensureProviderEvidenceState(executor)\n const attempt = state.attempts.at(-1)\n if (attempt === undefined) {\n throw new ValidationError('provider identity conflict arrived before an attempt started')\n }\n attempt.identityConflict = true\n}\n\n/** Attach one executor's provider evidence to a Runtime-owned root drive for final projection. */\nexport function recordRuntimeOwnedDriveHarnessProviderEvidence(\n owner: object,\n evidence: ProviderModelExecutionEvidence | undefined,\n): void {\n if (evidence === undefined) return\n const prior = runtimeOwnedDriveHarnessProviderEvidenceState.get(owner)\n if (prior === undefined) {\n runtimeOwnedDriveHarnessProviderEvidenceState.set(owner, evidence)\n return\n }\n const attempts = Object.freeze([...prior.attempts, ...evidence.attempts])\n const models = Object.freeze([...new Set([...prior.models, ...evidence.models])])\n const missing = attempts.some(\n (attempt) => attempt.observations.length === 0 && attempt.providerDispatch !== 'not_started',\n )\n const conflict = attempts.some((attempt) => attempt.identityConflict === true)\n const served = attempts.some((attempt) => attempt.observations.length > 0)\n runtimeOwnedDriveHarnessProviderEvidenceState.set(\n owner,\n Object.freeze(\n missing || conflict || !served\n ? {\n status: 'unknown' as const,\n attempts,\n models,\n reason: conflict\n ? ('provider-model-conflict' as const)\n : ('provider-model-missing' as const),\n }\n : { status: 'known' as const, attempts, models },\n ),\n )\n}\n\n/** Read provider evidence recorded by a Runtime-owned root drive. */\nexport function runtimeOwnedDriveHarnessProviderEvidence(\n owner: object,\n): ProviderModelExecutionEvidence | undefined {\n return runtimeOwnedDriveHarnessProviderEvidenceState.get(owner)\n}\n\n/** Build one kernel-owned known receipt from a data-only executor declaration. */\nexport function knownMaterializationReceipt(\n input: KnownReceiptInput,\n): ProfileMaterializationReceipt {\n const declaration = detachedSnapshot(input.declaration, 'executor materialization')\n assertExactDeclaration(declaration)\n const effectiveProfile = agentProfileSchema.safeParse(declaration.effectiveProfile)\n if (!effectiveProfile.success) {\n throw new ValidationError('executor materialization: effectiveProfile must be an AgentProfile')\n }\n const authoredProfile =\n declaration.authoredProfile === undefined\n ? effectiveProfile\n : agentProfileSchema.safeParse(declaration.authoredProfile)\n if (!authoredProfile.success) {\n throw new ValidationError('executor materialization: authoredProfile must be an AgentProfile')\n }\n assertNonEmpty(declaration.backend, 'backend')\n assertNonEmpty(declaration.materializer, 'materializer')\n assertNonEmpty(declaration.execution?.kind, 'execution.kind')\n assertNonEmpty(declaration.execution?.id, 'execution.id')\n assertModel(declaration.model)\n\n let effectiveProfileDigest: Sha256Digest\n let materializationPlanDigest: Sha256Digest\n let platformAttachmentsDigest: Sha256Digest | undefined\n try {\n effectiveProfileDigest = canonicalAgentProfileDigest(effectiveProfile.data)\n if (canonicalAgentProfileDigest(authoredProfile.data) !== input.authoredProfileDigest) {\n throw new ValidationError(\n 'executor materialization: authoredProfile conflicts with the admitted AgentProfile',\n )\n }\n materializationPlanDigest = canonicalCandidateDigest(jsonWireSnapshot(declaration.plan))\n platformAttachmentsDigest =\n declaration.platformAttachments === undefined\n ? undefined\n : canonicalCandidateDigest(jsonWireSnapshot(declaration.platformAttachments))\n } catch (error) {\n throw new ValidationError(\n 'executor materialization: profile, plan, and attachments must be finite RFC 8785 JSON',\n { cause: error },\n )\n }\n\n return Object.freeze({\n status: 'known' as const,\n authoredProfileDigest: input.authoredProfileDigest,\n effectiveProfileDigest,\n materializationPlanDigest,\n ...(platformAttachmentsDigest === undefined ? {} : { platformAttachmentsDigest }),\n runtime: input.runtime,\n backend: declaration.backend,\n model: declaration.model,\n execution: declaration.execution,\n materializer: declaration.materializer,\n })\n}\n\n/** Build an explicit unknown receipt without fabricating any executor-owned identity. */\nexport function unknownMaterializationReceipt(\n input: UnknownReceiptInput,\n): ProfileMaterializationReceipt {\n return Object.freeze({\n status: 'unknown' as const,\n ...(input.authoredProfileDigest === undefined\n ? {}\n : { authoredProfileDigest: input.authoredProfileDigest }),\n runtime: input.runtime,\n reason: input.reason,\n })\n}\n\n/** Mint a process-unique attempt id before executor construction. */\nexport function newExecutionAttemptId(nodeId: string): string {\n return `${nodeId}:attempt:${randomUUID()}`\n}\n\n/** Build the immutable safe receipt for a full, transient execution binding. */\nexport function knownExecutionBindingReceipt(\n materialization: ProfileMaterializationReceipt,\n bindingInput: ExecutorExecutionBinding,\n): ExecutionBindingReceipt {\n const binding = detachedSnapshot(bindingInput, 'executor execution binding')\n assertNonEmpty(binding.attemptId, 'binding.attemptId')\n assertSafeDescriptor(binding.descriptor)\n let materializationReceiptDigest: Sha256Digest\n let bindingDigest: Sha256Digest\n try {\n materializationReceiptDigest = canonicalCandidateDigest(materialization)\n // Bind the exact JSON document a backend receives. Optional AgentProfile fields are represented\n // as `undefined` in memory but omitted by JSON transport; normalize that one distinction while\n // rejecting every non-finite/non-data value instead of silently coercing it.\n bindingDigest = canonicalCandidateDigest(jsonWireSnapshot(binding.binding))\n } catch (error) {\n throw new ValidationError('executor binding must be finite RFC 8785 JSON', { cause: error })\n }\n return Object.freeze({\n status: 'known' as const,\n attemptId: binding.attemptId,\n materializationReceiptDigest,\n bindingDigest,\n descriptor: binding.descriptor,\n })\n}\n\n/** Preserve an attempt boundary even when its caller-owned transport cannot be attested. */\nexport function unknownExecutionBindingReceipt(\n materialization: ProfileMaterializationReceipt,\n attemptId: string,\n reason: UnknownMaterializationReason,\n): ExecutionBindingReceipt {\n assertNonEmpty(attemptId, 'binding.attemptId')\n return Object.freeze({\n status: 'unknown' as const,\n attemptId,\n materializationReceiptDigest: canonicalCandidateDigest(materialization),\n reason,\n })\n}\n\n/** Derive an authored-profile digest without turning non-canonical input into a fake identity. */\nexport function authoredProfileDigest(profile: unknown): Sha256Digest | undefined {\n try {\n return canonicalAgentProfileDigest(agentProfileSchema.parse(profile))\n } catch {\n return undefined\n }\n}\n\nfunction assertExactDeclaration(value: ExecutorMaterialization): void {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new ValidationError('executor materialization: declaration must be an object')\n }\n const unknown = Object.keys(value).filter((key) => !declarationKeys.has(key))\n if (unknown.length > 0) {\n throw new ValidationError(\n `executor materialization: unknown declaration fields: ${unknown.sort().join(', ')}`,\n )\n }\n if (!Object.hasOwn(value, 'plan')) {\n throw new ValidationError('executor materialization: plan is required')\n }\n}\n\nfunction assertModel(model: ExecutorMaterialization['model']): void {\n if (typeof model !== 'object' || model === null || Array.isArray(model)) {\n throw new ValidationError('executor materialization: model must be a known/unknown identity')\n }\n const keys = Object.keys(model).sort()\n if (model.status === 'known') {\n if (keys.join(',') !== 'id,status') {\n throw new ValidationError('executor materialization: known model accepts only status and id')\n }\n assertNonEmpty(model.id, 'model.id')\n return\n }\n if (model.status === 'unknown') {\n if (keys.join(',') !== 'reason,status') {\n throw new ValidationError(\n 'executor materialization: unknown model accepts only status and reason',\n )\n }\n assertNonEmpty(model.reason, 'model.reason')\n return\n }\n throw new ValidationError('executor materialization: model.status must be known or unknown')\n}\n\nfunction assertNonEmpty(value: unknown, field: string): asserts value is string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`executor materialization: ${field} must be a non-empty string`)\n }\n}\n\nfunction assertSafeDescriptor(descriptor: ExecutorExecutionBinding['descriptor']): void {\n if (typeof descriptor !== 'object' || descriptor === null || Array.isArray(descriptor)) {\n throw new ValidationError('executor binding: descriptor must be an object')\n }\n for (const [key, value] of Object.entries(descriptor)) {\n if (/(url|uri|token|key|secret|bearer|credential|authorization)/i.test(key)) {\n throw new ValidationError(`executor binding: unsafe descriptor key ${JSON.stringify(key)}`)\n }\n if (\n value !== null &&\n typeof value !== 'string' &&\n typeof value !== 'number' &&\n typeof value !== 'boolean'\n ) {\n throw new ValidationError(\n `executor binding: descriptor ${JSON.stringify(key)} must be scalar`,\n )\n }\n if (typeof value === 'string' && (value.includes('://') || value.includes('@'))) {\n throw new ValidationError(\n `executor binding: descriptor ${JSON.stringify(key)} contains transport or credential text`,\n )\n }\n }\n}\n\nfunction jsonWireSnapshot(value: unknown, path = '$'): unknown {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return value\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new ValidationError(`executor binding: ${path} must be finite`)\n }\n return value\n }\n if (Array.isArray(value)) {\n return value.map((item, index) => {\n if (item === undefined) {\n throw new ValidationError(`executor binding: ${path}[${index}] cannot be undefined`)\n }\n return jsonWireSnapshot(item, `${path}[${index}]`)\n })\n }\n if (typeof value !== 'object' || value === null) {\n throw new ValidationError(`executor binding: ${path} must be JSON data`)\n }\n const prototype = Object.getPrototypeOf(value)\n if (prototype !== Object.prototype && prototype !== null) {\n throw new ValidationError(`executor binding: ${path} must be a plain object`)\n }\n const out: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (item === undefined) continue\n out[key] = jsonWireSnapshot(item, `${path}.${key}`)\n }\n return out\n}\n\n/**\n * The provider-identity evidence for ONE attempt, from the served model alone. `unknown` with a\n * `provider-model-missing` reason when the attempt produced no model, because an attempt that\n * cannot name what served it is not evidence that nothing did.\n */\nexport function providerAttemptEvidence(model: string | undefined): ProviderModelExecutionEvidence {\n const attempts = Object.freeze([\n Object.freeze({ observations: Object.freeze(model === undefined ? [] : [model]) }),\n ])\n const models = Object.freeze(model === undefined ? [] : [model])\n return Object.freeze(\n model === undefined\n ? { status: 'unknown' as const, attempts, models, reason: 'provider-model-missing' as const }\n : { status: 'known' as const, attempts, models },\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"materialization-Cy0oM8tb.js","names":[],"sources":["../src/runtime/turn-input.ts","../src/runtime/retained-run-binding.ts","../src/runtime/supervise/snapshot.ts","../src/runtime/supervise/materialization.ts"],"sourcesContent":["import {\n AgentExactRunControlRefSchema,\n type ContextTransferRequest,\n type InputPart,\n} from '@tangle-network/agent-interface'\nimport type { AgentTurnInput } from '@tangle-network/agent-interface/environment-provider'\nimport type { PromptInputPart, PromptOptions } from '@tangle-network/sandbox'\n\n/**\n * Copy only fields that describe a new provider turn.\n *\n * Session, replay, continuation, and transfer coordinates are runtime-owned\n * and are injected by the caller that owns that lifecycle. Keeping this copy\n * explicit also makes JavaScript callers subject to the same boundary.\n */\nexport function freshTurnInput(\n input: AgentTurnInput,\n runtime: {\n readonly turnId: string\n readonly detach: true\n readonly sessionId?: string\n readonly executionId?: string\n readonly contextTransfer?: ContextTransferRequest\n },\n): AgentTurnInput {\n const fresh: AgentTurnInput = {\n ...(input.prompt === undefined ? {} : { prompt: input.prompt }),\n ...(input.parts === undefined ? {} : { parts: input.parts }),\n ...(input.model === undefined ? {} : { model: input.model }),\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(input.interactions === undefined ? {} : { interactions: input.interactions }),\n ...(input.providerOptions === undefined ? {} : { providerOptions: input.providerOptions }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n turnId: runtime.turnId,\n detach: runtime.detach,\n ...(runtime.sessionId === undefined ? {} : { sessionId: runtime.sessionId }),\n ...(runtime.executionId === undefined ? {} : { executionId: runtime.executionId }),\n ...(runtime.contextTransfer === undefined ? {} : { contextTransfer: runtime.contextTransfer }),\n }\n return fresh\n}\n\n/** Project canonical turn parts onto the Sandbox prompt vocabulary once. */\nexport function promptFromAgentTurnInput(input: AgentTurnInput): string | PromptInputPart[] {\n if (input.parts !== undefined) return input.parts.map(promptPartFromInputPart)\n return input.prompt ?? providerMessageText(input.providerOptions) ?? ''\n}\n\n/** Project canonical turn controls onto the Sandbox prompt options once. */\nexport function promptOptionsFromAgentTurnInput(input: AgentTurnInput): PromptOptions {\n const providerBackend =\n input.providerOptions?.backend &&\n typeof input.providerOptions.backend === 'object' &&\n !Array.isArray(input.providerOptions.backend)\n ? (input.providerOptions.backend as NonNullable<PromptOptions['backend']>)\n : undefined\n const backend = {\n ...(providerBackend ?? {}),\n ...(input.interactions === undefined ? {} : { interactions: input.interactions }),\n }\n const runControlRef =\n input.controlRef === undefined\n ? undefined\n : AgentExactRunControlRefSchema.parse(input.controlRef)\n return {\n ...(input.sessionId === undefined ? {} : { sessionId: input.sessionId }),\n ...(input.model === undefined ? {} : { model: input.model }),\n ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n ...(input.executionId === undefined ? {} : { executionId: input.executionId }),\n ...(input.lastEventId === undefined ? {} : { lastEventId: input.lastEventId }),\n ...(input.turnId === undefined ? {} : { turnId: input.turnId }),\n ...(input.detach === undefined ? {} : { detach: input.detach }),\n ...(runControlRef === undefined ? {} : { runControlRef }),\n ...(Object.keys(backend).length === 0 ? {} : { backend }),\n }\n}\n\n/** Read a text fallback from provider-specific conversation options. */\nexport function providerMessageText(\n providerOptions: Record<string, unknown> | undefined,\n): string | undefined {\n const messages = providerOptions?.messages\n if (!Array.isArray(messages)) return undefined\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index]\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue\n if (!('role' in message) || message.role !== 'user') continue\n if (!('content' in message)) continue\n if (typeof message.content === 'string') return message.content\n }\n return undefined\n}\n\nfunction promptPartFromInputPart(part: InputPart): PromptInputPart {\n if (part.type === 'text' || part.type === 'image') return part\n if (part.content !== undefined || part.path !== undefined) {\n throw new Error(\n 'Sandbox file prompt parts require a URL; inline content and local paths are not representable',\n )\n }\n if (!part.filename || !part.url) {\n throw new Error('Sandbox file prompt parts require both filename and URL')\n }\n return {\n type: 'file',\n filename: part.filename,\n ...(part.mediaType === undefined ? {} : { mediaType: part.mediaType }),\n url: part.url,\n }\n}\n","import {\n type AgentExactRunControlRef,\n AgentExactRunControlRefSchema,\n type AgentRunCancellationAcknowledgement,\n AgentRunCancellationAcknowledgementSchema,\n type AgentRunCancellationRequest,\n AgentRunCancellationRequestSchema,\n agentRunCancellationAcknowledgementMatchesRequest,\n agentRunCancellationRequestDigest,\n canonicalCandidateDigest,\n type InteractionResponseCommand,\n type NativeContextBoundaryProof,\n type StreamEvent,\n} from '@tangle-network/agent-interface'\nimport type {\n AgentEnvironment,\n AgentEnvironmentEvent,\n AgentSession,\n AgentSessionStatus,\n AgentTurnResult,\n} from '@tangle-network/agent-interface/environment-provider'\n\nexport function exactSession(\n environment: AgentEnvironment,\n controlRef: AgentExactRunControlRef,\n): { session: AgentSession; controlRef: AgentExactRunControlRef } {\n if (environment.id !== controlRef.environmentId || environment.provider !== controlRef.provider) {\n throw new Error('provider reconstructed a different retained environment')\n }\n if (!environment.session || !controlRef.sessionId) {\n throw new Error('retained run control requires a provider session id')\n }\n const session = environment.session(controlRef.sessionId, { controlRef })\n if (session.id !== controlRef.sessionId) {\n throw new Error('provider reconstructed a different session')\n }\n if (session.controlRef === undefined) {\n throw new Error('provider session did not return its provider-owned run control reference')\n }\n const currentControlRef = AgentExactRunControlRefSchema.parse(session.controlRef)\n if (!sameControlCoordinates(currentControlRef, controlRef)) {\n throw new Error('provider session reconstructed a different retained session')\n }\n if (canonicalCandidateDigest(currentControlRef) !== canonicalCandidateDigest(controlRef)) {\n throw new Error('provider session did not retain the exact run control reference')\n }\n return { session, controlRef: currentControlRef }\n}\n\nexport function sameControlCoordinates(\n left: AgentExactRunControlRef,\n right: AgentExactRunControlRef,\n): boolean {\n return canonicalCandidateDigest(left) === canonicalCandidateDigest(right)\n}\n\nexport function freezeControlRef(controlRef: AgentExactRunControlRef): AgentExactRunControlRef {\n return Object.freeze({ ...AgentExactRunControlRefSchema.parse(controlRef) })\n}\n\nexport function copyControlRef(controlRef: AgentExactRunControlRef): AgentExactRunControlRef {\n return { ...controlRef }\n}\n\nexport function exactControlRef(\n candidate: unknown,\n expected: { provider: string; environmentId: string; sessionId: string },\n): AgentExactRunControlRef {\n if (!candidate) throw new Error('provider dispatch returned no durable run control reference')\n const controlRef = AgentExactRunControlRefSchema.parse(candidate)\n if (\n controlRef.provider !== expected.provider ||\n controlRef.environmentId !== expected.environmentId ||\n controlRef.sessionId !== expected.sessionId\n ) {\n throw new Error('provider dispatch returned control coordinates for another run')\n }\n return controlRef\n}\n\nexport function exactContinuedControlRef(\n candidate: AgentExactRunControlRef,\n initial: AgentExactRunControlRef,\n): AgentExactRunControlRef {\n const controlRef = AgentExactRunControlRefSchema.parse(candidate)\n if (\n controlRef.provider !== initial.provider ||\n controlRef.environmentId !== initial.environmentId ||\n controlRef.sessionId !== initial.sessionId\n ) {\n throw new Error('provider continuation advanced to another retained session')\n }\n if (controlRef.runId === initial.runId && controlRef.executionId === initial.executionId) {\n throw new Error('provider continuation did not return a new exact run execution')\n }\n return controlRef\n}\n\nexport function assertInteractionBinding(\n controlRef: AgentExactRunControlRef,\n command: InteractionResponseCommand,\n): void {\n // This digest identifies the interaction request, not the retained turn.\n // The provider validates it against its durable interaction record.\n if (\n command.binding.runId !== controlRef.runId ||\n command.binding.provider !== controlRef.provider ||\n command.binding.environmentId !== controlRef.environmentId ||\n command.binding.sessionId !== controlRef.sessionId ||\n command.binding.executionId !== controlRef.executionId\n ) {\n throw new Error('interaction response command does not target this retained run')\n }\n}\n\nexport function assertBoundaryBinding(\n controlRef: AgentExactRunControlRef,\n proof: NativeContextBoundaryProof,\n): void {\n if (\n proof.runId !== controlRef.runId ||\n proof.provider !== controlRef.provider ||\n proof.environmentId !== controlRef.environmentId ||\n proof.sessionId !== controlRef.sessionId ||\n proof.executionId !== controlRef.executionId ||\n proof.requestDigest !== controlRef.requestDigest\n ) {\n throw new Error('native context proof does not identify this retained run')\n }\n}\n\nexport function assertSequence(value: unknown, label: string): asserts value is number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative safe integer`)\n }\n}\n\nexport function assertResultBinding(\n controlRef: AgentExactRunControlRef,\n result: AgentTurnResult,\n): void {\n if (result.sessionId !== controlRef.sessionId) {\n throw new Error('provider returned a result for another retained session')\n }\n const metadata = result.metadata\n if (controlRef.executionId !== undefined && metadata?.executionId !== controlRef.executionId) {\n throw new Error('provider returned a result for another retained execution')\n }\n if (metadata?.runId !== controlRef.runId) {\n throw new Error('provider returned a result for another retained run')\n }\n if (metadata?.requestDigest !== controlRef.requestDigest) {\n throw new Error('provider returned a result for another retained request')\n }\n}\n\ninterface ExactCancelOptions {\n readonly signal?: AbortSignal\n}\n\nexport class RetainedRunProviderContractError extends Error {\n readonly code: string\n\n constructor(message: string, options: { readonly code?: string; readonly cause?: unknown } = {}) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause })\n this.name = 'RetainedRunProviderContractError'\n this.code = options.code ?? 'RETAINED_RUN_PROVIDER_CONTRACT_ERROR'\n }\n}\n\nexport function cancellationRequest(\n controlRef: AgentExactRunControlRef,\n operationId: string,\n reason?: string,\n): AgentRunCancellationRequest {\n const material = {\n operationId,\n run: AgentExactRunControlRefSchema.parse(controlRef),\n ...(reason === undefined ? {} : { reason }),\n }\n return AgentRunCancellationRequestSchema.parse({\n ...material,\n requestDigest: agentRunCancellationRequestDigest(material),\n })\n}\n\nexport async function exactSessionCancel(\n session: AgentSession,\n request: AgentRunCancellationRequest,\n options: ExactCancelOptions,\n): Promise<AgentRunCancellationAcknowledgement> {\n if (!session.cancelRun) {\n throw new Error('provider session does not expose durable cancellation operations')\n }\n let acknowledgement: unknown\n try {\n acknowledgement = await awaitAbortable(\n Promise.resolve().then(() => session.cancelRun!(request, options)),\n options.signal,\n )\n } catch (error) {\n if (error instanceof RetainedRunProviderContractError) throw error\n throw error\n }\n let exactAcknowledgement: AgentRunCancellationAcknowledgement\n try {\n exactAcknowledgement = AgentRunCancellationAcknowledgementSchema.parse(acknowledgement)\n } catch {\n throw new RetainedRunProviderContractError(\n 'provider returned an invalid retained cancellation acknowledgement',\n )\n }\n if (!agentRunCancellationAcknowledgementMatchesRequest(request, exactAcknowledgement)) {\n throw new RetainedRunProviderContractError(\n 'provider returned a retained cancellation acknowledgement for another request',\n )\n }\n return exactAcknowledgement\n}\n\nexport function hasDurableCancel(session: AgentSession): boolean {\n return typeof session.cancelRun === 'function'\n}\n\nexport async function awaitAbortable<T>(\n work: PromiseLike<T>,\n signal: AbortSignal | undefined,\n): Promise<T> {\n if (signal === undefined) return await work\n if (signal.aborted) {\n void Promise.resolve(work).catch(() => undefined)\n throw abortError(signal.reason)\n }\n return await new Promise<T>((resolve, reject) => {\n let settled = false\n const cleanup = () => signal.removeEventListener('abort', onAbort)\n const onAbort = () => {\n queueMicrotask(() => {\n if (settled) return\n settled = true\n cleanup()\n reject(abortError(signal.reason))\n })\n }\n signal.addEventListener('abort', onAbort, { once: true })\n Promise.resolve(work).then(\n (value) => {\n if (settled) return\n settled = true\n cleanup()\n resolve(value)\n },\n (error) => {\n if (settled) return\n settled = true\n cleanup()\n reject(error)\n },\n )\n })\n}\n\nexport async function exactSessionResult(session: AgentSession): Promise<AgentTurnResult> {\n return session.result()\n}\n\nexport function assertEventBinding(\n source: AgentEnvironmentEvent,\n controlRef: AgentExactRunControlRef,\n): void {\n const transport = isRecord(source) ? source : undefined\n const payload = isRecord(source.data) ? source.data : undefined\n const providerEvent = isRecord(source.providerEvent) ? source.providerEvent : undefined\n const bindings = [\n { value: transport, checkSessionId: true },\n {\n value: payload,\n // The canonical session.updated payload identifies the harness-native chat.\n // It is event content, not the retained provider session coordinate.\n checkSessionId: source.type !== 'session.updated',\n },\n { value: providerEvent, checkSessionId: true },\n ]\n for (const { value, checkSessionId } of bindings) {\n if (value === undefined) continue\n if (value.runId !== undefined && value.runId !== controlRef.runId) {\n throw new Error('provider returned an event for another retained run')\n }\n if (value.executionId !== undefined && value.executionId !== controlRef.executionId) {\n throw new Error('provider returned an event for another retained execution')\n }\n if (\n checkSessionId &&\n value.sessionId !== undefined &&\n value.sessionId !== controlRef.sessionId\n ) {\n throw new Error('provider returned an event for another retained session')\n }\n }\n}\n\n/** Validate the nested coordinates carried by a canonical interaction request. */\nexport function assertCanonicalEventBinding(\n controlRef: AgentExactRunControlRef,\n event: StreamEvent,\n): void {\n if (event.type !== 'interaction') return\n const binding = event.request.binding\n if (\n binding.runId !== controlRef.runId ||\n binding.provider !== controlRef.provider ||\n binding.environmentId !== controlRef.environmentId ||\n binding.sessionId !== controlRef.sessionId ||\n binding.executionId !== controlRef.executionId ||\n binding.interactionId !== event.request.id\n ) {\n throw new Error('provider returned an interaction for another retained execution')\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function assertStableText(value: string, label: string): void {\n if (value.length === 0 || value.trim() !== value) {\n throw new Error(`${label} must be non-empty and have no outer whitespace`)\n }\n}\n\nexport function abortError(reason: unknown): Error {\n const error = new Error(\n reason instanceof Error ? reason.message : reason === undefined ? 'aborted' : String(reason),\n )\n error.name = 'AbortError'\n return error\n}\n\nexport function assertWaitDuration(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative safe integer`)\n }\n}\n\n/**\n * Whether a session can still change state.\n *\n * Exhaustive over `AgentSessionStatus` by construction: the map below is `satisfies\n * Record<AgentSessionStatus, boolean>`, so a member added upstream fails to compile here instead of\n * being silently classified as non-terminal. Written as a boolean chain, `stopped` was missing —\n * and a `status({ waitMs })` call on an already-stopped session then polled every 25 ms for the\n * whole wait before returning the answer it already had at the first snapshot.\n *\n * `unknown` is deliberately NOT terminal: it says the provider could not tell us, which is the one\n * state where continuing to poll is the point. That differs from\n * `sandboxSessionStatusFromAgentSessionStatus`, which projects `unknown` to `failed` because a run\n * RESULT must never claim success without proof — a different question about the same word.\n */\nconst sessionStatusIsTerminal = {\n pending: false,\n provisioning: false,\n running: false,\n unknown: false,\n stopped: true,\n completed: true,\n cancelled: true,\n failed: true,\n expired: true,\n} satisfies Record<AgentSessionStatus, boolean>\n\nexport function isTerminalSessionStatus(status: AgentSessionStatus | null): boolean {\n return status !== null && sessionStatusIsTerminal[status]\n}\n\nexport function delay(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) return Promise.reject(abortError(signal.reason))\n return new Promise((resolveDelay, rejectDelay) => {\n const timer = setTimeout(finish, ms)\n function finish() {\n signal?.removeEventListener('abort', onAbort)\n resolveDelay()\n }\n function onAbort() {\n clearTimeout(timer)\n signal?.removeEventListener('abort', onAbort)\n rejectDelay(abortError(signal?.reason))\n }\n signal?.addEventListener('abort', onAbort, { once: true })\n })\n}\n","import { ValidationError } from '../../errors'\n\n/** Deeply detach and freeze untrusted data at a runtime decision boundary. The clone prevents the\n * caller from mutating it later; the freeze prevents downstream code from mutating the snapshot. */\nexport function detachedSnapshot<T>(value: T, context: string): T {\n try {\n return deepFreeze(structuredClone(value))\n } catch (error) {\n throw new ValidationError(`${context}: input must be structured-cloneable`, { cause: error })\n }\n}\n\n/** Detach a value from its caller and freeze it, without the `ValidationError` framing\n * {@link detachedSnapshot} adds. For a boundary that has already validated its input. */\nexport function detachedFrozen<T>(value: T): T {\n return deepFreeze(structuredClone(value))\n}\n\nfunction deepFreeze<T>(value: T, seen = new Set<object>()): T {\n // `Object.freeze` throws `TypeError: Cannot freeze array buffer views with elements` on any\n // non-empty TypedArray or Buffer, so binary inside a payload must be handed back untouched\n // rather than frozen. Its bytes are already detached by the `structuredClone` above.\n if (value === null || typeof value !== 'object' || ArrayBuffer.isView(value) || seen.has(value)) {\n return value\n }\n seen.add(value)\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child, seen)\n return Object.freeze(value)\n}\n","import { randomUUID } from 'node:crypto'\nimport {\n agentProfileSchema,\n canonicalAgentProfileDigest,\n canonicalCandidateDigest,\n type Sha256Digest,\n} from '@tangle-network/agent-interface'\nimport { ValidationError } from '../../errors'\nimport { detachedSnapshot } from './snapshot'\nimport type {\n ExecutionBindingReceipt,\n Executor,\n ExecutorExecutionBinding,\n ExecutorMaterialization,\n ProfileMaterializationReceipt,\n ProviderModelAttemptEvidence,\n ProviderModelExecutionEvidence,\n Runtime,\n UnknownMaterializationReason,\n} from './types'\n\ntype RuntimeOwnedExecutorMaterialization =\n | {\n readonly kind: 'known'\n readonly declaration: ExecutorMaterialization\n readonly binding?: ExecutorExecutionBinding\n }\n | {\n /** A Runtime-owned external executor whose exact launch is known, but whose remote\n * materializer has not yet returned its terminal acknowledgement. This private state lets\n * Runtime validate the planned authority before execution without presenting it as proof\n * that the remote process actually used that plan. */\n readonly kind: 'pending'\n readonly runtime: Runtime\n readonly declaration: ExecutorMaterialization\n readonly binding: ExecutorExecutionBinding\n }\n | { readonly kind: 'deferred'; readonly runtime: Runtime }\n\ninterface RuntimeOwnedExecutorMaterializationRef {\n current: RuntimeOwnedExecutorMaterialization\n}\n\nconst runtimeOwnedExecutorMaterializations = new WeakMap<\n object,\n RuntimeOwnedExecutorMaterializationRef\n>()\nconst runtimeOwnedScopeOwners = new WeakMap<object, Runtime>()\nconst runtimeOwnedExecutorProviderEvidenceState = new WeakMap<\n object,\n {\n readonly attempts: Array<{\n readonly observations: string[]\n identityConflict?: boolean\n providerDispatch?: 'not_started'\n }>\n }\n>()\nconst runtimeOwnedDriveHarnessProviderEvidenceState = new WeakMap<\n object,\n ProviderModelExecutionEvidence\n>()\n\ninterface KnownReceiptInput {\n readonly authoredProfileDigest: Sha256Digest\n readonly runtime: Runtime\n readonly declaration: ExecutorMaterialization\n}\n\ninterface UnknownReceiptInput {\n readonly authoredProfileDigest?: Sha256Digest\n readonly runtime: Runtime\n readonly reason: UnknownMaterializationReason\n}\n\nconst declarationKeys = new Set([\n 'effectiveProfile',\n 'authoredProfile',\n 'backend',\n 'model',\n 'execution',\n 'materializer',\n 'plan',\n 'platformAttachments',\n])\n\n/**\n * Bind a declaration to a runtime-owned executor without putting an attestable method on the\n * public Executor interface. This module is not a package export: arbitrary caller executors stay\n * unknown even if they add a lookalike `materialization()` property.\n */\nexport function attestRuntimeOwnedExecutor<Out>(\n executor: Executor<Out>,\n declaration: ExecutorMaterialization,\n binding?: ExecutorExecutionBinding,\n): Executor<Out> {\n runtimeOwnedExecutorMaterializations.set(executor as object, {\n current: Object.freeze({\n kind: 'known',\n declaration: detachedSnapshot(declaration, 'runtime-owned executor materialization'),\n ...(binding === undefined\n ? {}\n : {\n binding: detachedSnapshot(binding, 'runtime-owned executor execution binding'),\n }),\n }),\n })\n ensureProviderEvidenceState(executor)\n return executor\n}\n\n/** Brand an external Runtime executor whose exact remote materialization is provable only after\n * its terminal protocol acknowledgement. The declaration is a planned authority check, never a\n * known receipt; callers must finalize this same object after validating the acknowledgement. */\nexport function attestRuntimeOwnedPendingExecutor<Out>(\n executor: Executor<Out>,\n runtime: Runtime,\n declaration: ExecutorMaterialization,\n binding: ExecutorExecutionBinding,\n): Executor<Out> {\n runtimeOwnedExecutorMaterializations.set(executor as object, {\n current: Object.freeze({\n kind: 'pending',\n runtime,\n declaration: detachedSnapshot(declaration, 'pending executor materialization'),\n binding: detachedSnapshot(binding, 'pending executor execution binding'),\n }),\n })\n return executor\n}\n\n/** Replace a private pending brand with terminally acknowledged evidence. A caller-owned executor\n * cannot enter this path because only this module can create the pending WeakMap entry. */\nexport function finalizeRuntimeOwnedPendingExecutor<Out>(\n executor: Executor<Out>,\n declaration: ExecutorMaterialization,\n binding: ExecutorExecutionBinding,\n): Executor<Out> {\n const ref = runtimeOwnedExecutorMaterializations.get(executor as object)\n if (ref?.current.kind !== 'pending' || ref.current.runtime !== executor.runtime) {\n throw new ValidationError(\n 'executor materialization: terminal acknowledgement has no matching Runtime-owned pending executor',\n )\n }\n ref.current = Object.freeze({\n kind: 'known',\n declaration: detachedSnapshot(declaration, 'runtime-owned executor materialization'),\n binding: detachedSnapshot(binding, 'runtime-owned executor execution binding'),\n })\n return executor\n}\n\n/** Mark a runtime-owned orchestration executor whose exact leaf declaration is published through\n * its private nested Scope before the first backend inference. Arbitrary executors cannot opt in. */\nexport function attestRuntimeOwnedDeferredExecutor<Out>(\n executor: Executor<Out>,\n runtime: Runtime,\n): Executor<Out> {\n runtimeOwnedExecutorMaterializations.set(executor as object, {\n current: Object.freeze({ kind: 'deferred', runtime }),\n })\n return executor\n}\n\n/** Preserve the runtime-owned attestation when a trusted wrapper changes result semantics only. */\nexport function inheritRuntimeOwnedExecutorAttestation<In, Out>(\n source: Executor<In>,\n wrapper: Executor<Out>,\n): Executor<Out> {\n const ref = runtimeOwnedExecutorMaterializations.get(source as object)\n if (ref !== undefined) {\n runtimeOwnedExecutorMaterializations.set(wrapper as object, ref)\n }\n const providerState = ensureProviderEvidenceState(source)\n runtimeOwnedExecutorProviderEvidenceState.set(wrapper as object, providerState)\n return wrapper\n}\n\nfunction ensureProviderEvidenceState<Out>(executor: Executor<Out>): {\n readonly attempts: Array<{\n readonly observations: string[]\n identityConflict?: boolean\n providerDispatch?: 'not_started'\n }>\n} {\n const existing = runtimeOwnedExecutorProviderEvidenceState.get(executor as object)\n if (existing !== undefined) return existing\n const state = { attempts: [] }\n runtimeOwnedExecutorProviderEvidenceState.set(executor as object, state)\n return state\n}\n\n/** Read a declaration only when Runtime itself branded this exact executor object. */\nexport function runtimeOwnedExecutorMaterialization<Out>(\n executor: Executor<Out>,\n): ExecutorMaterialization | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'known' ? attestation.declaration : undefined\n}\n\n/** Read one attempt binding only from the private brand on this exact executor object. */\nexport function runtimeOwnedExecutorExecutionBinding<Out>(\n executor: Executor<Out>,\n): ExecutorExecutionBinding | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'known' ? attestation.binding : undefined\n}\n\n/** Read a planned external declaration only for Runtime's private pending brand. This is useful for\n * pre-execution authority checks, but must never be turned into a known durable receipt. */\nexport function runtimeOwnedPendingExecutorMaterialization<Out>(executor: Executor<Out>):\n | {\n readonly runtime: Runtime\n readonly declaration: ExecutorMaterialization\n readonly binding: ExecutorExecutionBinding\n }\n | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'pending'\n ? {\n runtime: attestation.runtime,\n declaration: attestation.declaration,\n binding: attestation.binding,\n }\n : undefined\n}\n\n/** Read the expected leaf runtime only for a privately branded deferred orchestration executor. */\nexport function runtimeOwnedDeferredExecutorRuntime<Out>(\n executor: Executor<Out>,\n): Runtime | undefined {\n const attestation = runtimeOwnedExecutorMaterializations.get(executor as object)?.current\n return attestation?.kind === 'deferred' ? attestation.runtime : undefined\n}\n\n/** Propagate trust from a built-in driver adapter to the Agent and recursive executor it owns. */\nexport function attestRuntimeOwnedScopeOwner<T extends object>(owner: T, runtime: Runtime): T {\n runtimeOwnedScopeOwners.set(owner, runtime)\n return owner\n}\n\n/** Return a built-in scope owner's expected concrete leaf runtime; caller-owned functions/Agents\n * deliberately have no entry even if they add lookalike fields. */\nexport function runtimeOwnedScopeOwnerRuntime(owner: object): Runtime | undefined {\n return runtimeOwnedScopeOwners.get(owner)\n}\n\n/** Mark one provider inference attempt on a Runtime-owned executor. */\nexport function recordRuntimeOwnedProviderAttemptStart<Out>(executor: Executor<Out>): void {\n const state = ensureProviderEvidenceState(executor)\n state.attempts.push({ observations: [] })\n}\n\n/** Mark the current attempt as rejected before provider dispatch.\n *\n * The caller may use this only after consuming the Router-owned\n * `provider_dispatch: \"not_started\"` fact. Any other error stays an empty,\n * unknown attempt and must not be upgraded here.\n */\nexport function recordRuntimeOwnedProviderDispatchNotStarted<Out>(executor: Executor<Out>): void {\n const state = ensureProviderEvidenceState(executor)\n const attempt = state.attempts.at(-1)\n if (attempt === undefined) {\n throw new ValidationError('provider dispatch rejection arrived before an attempt started')\n }\n if (attempt.observations.length > 0 || attempt.identityConflict === true) {\n throw new ValidationError(\n 'provider dispatch rejection arrived after provider identity evidence was observed',\n )\n }\n attempt.providerDispatch = 'not_started'\n}\n\n/** Record a trusted served model on the current provider attempt. */\nexport function recordRuntimeOwnedProviderModel<Out>(executor: Executor<Out>, model: string): void {\n const state = runtimeOwnedExecutorProviderEvidenceState.get(executor as object)\n const attempt = state?.attempts.at(-1)\n if (attempt === undefined) {\n throw new ValidationError('provider model observation arrived before an attempt started')\n }\n if (attempt.observations.at(-1) !== model) attempt.observations.push(model)\n}\n\n/** Convert process-local provider observations into a frozen, replayable evidence value. */\nexport function runtimeOwnedExecutorProviderEvidence<Out>(\n executor: Executor<Out>,\n): ProviderModelExecutionEvidence | undefined {\n const state = runtimeOwnedExecutorProviderEvidenceState.get(executor as object)\n if (state === undefined || state.attempts.length === 0) return undefined\n const attempts: ReadonlyArray<ProviderModelAttemptEvidence> = Object.freeze(\n state.attempts.map((attempt) =>\n Object.freeze({\n observations: Object.freeze([...attempt.observations]),\n ...(attempt.identityConflict ? { identityConflict: true } : {}),\n ...(attempt.providerDispatch === 'not_started'\n ? { providerDispatch: 'not_started' as const }\n : {}),\n }),\n ),\n )\n const models = Object.freeze([...new Set(attempts.flatMap((attempt) => attempt.observations))])\n const missing = attempts.some(\n (attempt) => attempt.observations.length === 0 && attempt.providerDispatch !== 'not_started',\n )\n const conflict = attempts.some((attempt) => attempt.identityConflict === true)\n const served = attempts.some((attempt) => attempt.observations.length > 0)\n return Object.freeze(\n missing || conflict || !served\n ? {\n status: 'unknown' as const,\n attempts,\n models,\n reason: conflict\n ? ('provider-model-conflict' as const)\n : ('provider-model-missing' as const),\n }\n : { status: 'known' as const, attempts, models },\n )\n}\n\n/** Mark the current provider attempt unusable after conflicting served identity metadata. */\nexport function recordRuntimeOwnedProviderIdentityConflict<Out>(executor: Executor<Out>): void {\n const state = ensureProviderEvidenceState(executor)\n const attempt = state.attempts.at(-1)\n if (attempt === undefined) {\n throw new ValidationError('provider identity conflict arrived before an attempt started')\n }\n attempt.identityConflict = true\n}\n\n/** Attach one executor's provider evidence to a Runtime-owned root drive for final projection. */\nexport function recordRuntimeOwnedDriveHarnessProviderEvidence(\n owner: object,\n evidence: ProviderModelExecutionEvidence | undefined,\n): void {\n if (evidence === undefined) return\n const prior = runtimeOwnedDriveHarnessProviderEvidenceState.get(owner)\n if (prior === undefined) {\n runtimeOwnedDriveHarnessProviderEvidenceState.set(owner, evidence)\n return\n }\n const attempts = Object.freeze([...prior.attempts, ...evidence.attempts])\n const models = Object.freeze([...new Set([...prior.models, ...evidence.models])])\n const missing = attempts.some(\n (attempt) => attempt.observations.length === 0 && attempt.providerDispatch !== 'not_started',\n )\n const conflict = attempts.some((attempt) => attempt.identityConflict === true)\n const served = attempts.some((attempt) => attempt.observations.length > 0)\n runtimeOwnedDriveHarnessProviderEvidenceState.set(\n owner,\n Object.freeze(\n missing || conflict || !served\n ? {\n status: 'unknown' as const,\n attempts,\n models,\n reason: conflict\n ? ('provider-model-conflict' as const)\n : ('provider-model-missing' as const),\n }\n : { status: 'known' as const, attempts, models },\n ),\n )\n}\n\n/** Read provider evidence recorded by a Runtime-owned root drive. */\nexport function runtimeOwnedDriveHarnessProviderEvidence(\n owner: object,\n): ProviderModelExecutionEvidence | undefined {\n return runtimeOwnedDriveHarnessProviderEvidenceState.get(owner)\n}\n\n/** Build one kernel-owned known receipt from a data-only executor declaration. */\nexport function knownMaterializationReceipt(\n input: KnownReceiptInput,\n): ProfileMaterializationReceipt {\n const declaration = detachedSnapshot(input.declaration, 'executor materialization')\n assertExactDeclaration(declaration)\n const effectiveProfile = agentProfileSchema.safeParse(declaration.effectiveProfile)\n if (!effectiveProfile.success) {\n throw new ValidationError('executor materialization: effectiveProfile must be an AgentProfile')\n }\n const authoredProfile =\n declaration.authoredProfile === undefined\n ? effectiveProfile\n : agentProfileSchema.safeParse(declaration.authoredProfile)\n if (!authoredProfile.success) {\n throw new ValidationError('executor materialization: authoredProfile must be an AgentProfile')\n }\n assertNonEmpty(declaration.backend, 'backend')\n assertNonEmpty(declaration.materializer, 'materializer')\n assertNonEmpty(declaration.execution?.kind, 'execution.kind')\n assertNonEmpty(declaration.execution?.id, 'execution.id')\n assertModel(declaration.model)\n\n let effectiveProfileDigest: Sha256Digest\n let materializationPlanDigest: Sha256Digest\n let platformAttachmentsDigest: Sha256Digest | undefined\n try {\n effectiveProfileDigest = canonicalAgentProfileDigest(effectiveProfile.data)\n if (canonicalAgentProfileDigest(authoredProfile.data) !== input.authoredProfileDigest) {\n throw new ValidationError(\n 'executor materialization: authoredProfile conflicts with the admitted AgentProfile',\n )\n }\n materializationPlanDigest = canonicalCandidateDigest(jsonWireSnapshot(declaration.plan))\n platformAttachmentsDigest =\n declaration.platformAttachments === undefined\n ? undefined\n : canonicalCandidateDigest(jsonWireSnapshot(declaration.platformAttachments))\n } catch (error) {\n throw new ValidationError(\n 'executor materialization: profile, plan, and attachments must be finite RFC 8785 JSON',\n { cause: error },\n )\n }\n\n return Object.freeze({\n status: 'known' as const,\n authoredProfileDigest: input.authoredProfileDigest,\n effectiveProfileDigest,\n materializationPlanDigest,\n ...(platformAttachmentsDigest === undefined ? {} : { platformAttachmentsDigest }),\n runtime: input.runtime,\n backend: declaration.backend,\n model: declaration.model,\n execution: declaration.execution,\n materializer: declaration.materializer,\n })\n}\n\n/** Build an explicit unknown receipt without fabricating any executor-owned identity. */\nexport function unknownMaterializationReceipt(\n input: UnknownReceiptInput,\n): ProfileMaterializationReceipt {\n return Object.freeze({\n status: 'unknown' as const,\n ...(input.authoredProfileDigest === undefined\n ? {}\n : { authoredProfileDigest: input.authoredProfileDigest }),\n runtime: input.runtime,\n reason: input.reason,\n })\n}\n\n/** Mint a process-unique attempt id before executor construction. */\nexport function newExecutionAttemptId(nodeId: string): string {\n return `${nodeId}:attempt:${randomUUID()}`\n}\n\n/** Build the immutable safe receipt for a full, transient execution binding. */\nexport function knownExecutionBindingReceipt(\n materialization: ProfileMaterializationReceipt,\n bindingInput: ExecutorExecutionBinding,\n): ExecutionBindingReceipt {\n const binding = detachedSnapshot(bindingInput, 'executor execution binding')\n assertNonEmpty(binding.attemptId, 'binding.attemptId')\n assertSafeDescriptor(binding.descriptor)\n let materializationReceiptDigest: Sha256Digest\n let bindingDigest: Sha256Digest\n try {\n materializationReceiptDigest = canonicalCandidateDigest(materialization)\n // Bind the exact JSON document a backend receives. Optional AgentProfile fields are represented\n // as `undefined` in memory but omitted by JSON transport; normalize that one distinction while\n // rejecting every non-finite/non-data value instead of silently coercing it.\n bindingDigest = canonicalCandidateDigest(jsonWireSnapshot(binding.binding))\n } catch (error) {\n throw new ValidationError('executor binding must be finite RFC 8785 JSON', { cause: error })\n }\n return Object.freeze({\n status: 'known' as const,\n attemptId: binding.attemptId,\n materializationReceiptDigest,\n bindingDigest,\n descriptor: binding.descriptor,\n })\n}\n\n/** Preserve an attempt boundary even when its caller-owned transport cannot be attested. */\nexport function unknownExecutionBindingReceipt(\n materialization: ProfileMaterializationReceipt,\n attemptId: string,\n reason: UnknownMaterializationReason,\n): ExecutionBindingReceipt {\n assertNonEmpty(attemptId, 'binding.attemptId')\n return Object.freeze({\n status: 'unknown' as const,\n attemptId,\n materializationReceiptDigest: canonicalCandidateDigest(materialization),\n reason,\n })\n}\n\n/** Derive an authored-profile digest without turning non-canonical input into a fake identity. */\nexport function authoredProfileDigest(profile: unknown): Sha256Digest | undefined {\n try {\n return canonicalAgentProfileDigest(agentProfileSchema.parse(profile))\n } catch {\n return undefined\n }\n}\n\nfunction assertExactDeclaration(value: ExecutorMaterialization): void {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new ValidationError('executor materialization: declaration must be an object')\n }\n const unknown = Object.keys(value).filter((key) => !declarationKeys.has(key))\n if (unknown.length > 0) {\n throw new ValidationError(\n `executor materialization: unknown declaration fields: ${unknown.sort().join(', ')}`,\n )\n }\n if (!Object.hasOwn(value, 'plan')) {\n throw new ValidationError('executor materialization: plan is required')\n }\n}\n\nfunction assertModel(model: ExecutorMaterialization['model']): void {\n if (typeof model !== 'object' || model === null || Array.isArray(model)) {\n throw new ValidationError('executor materialization: model must be a known/unknown identity')\n }\n const keys = Object.keys(model).sort()\n if (model.status === 'known') {\n if (keys.join(',') !== 'id,status') {\n throw new ValidationError('executor materialization: known model accepts only status and id')\n }\n assertNonEmpty(model.id, 'model.id')\n return\n }\n if (model.status === 'unknown') {\n if (keys.join(',') !== 'reason,status') {\n throw new ValidationError(\n 'executor materialization: unknown model accepts only status and reason',\n )\n }\n assertNonEmpty(model.reason, 'model.reason')\n return\n }\n throw new ValidationError('executor materialization: model.status must be known or unknown')\n}\n\nfunction assertNonEmpty(value: unknown, field: string): asserts value is string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`executor materialization: ${field} must be a non-empty string`)\n }\n}\n\nfunction assertSafeDescriptor(descriptor: ExecutorExecutionBinding['descriptor']): void {\n if (typeof descriptor !== 'object' || descriptor === null || Array.isArray(descriptor)) {\n throw new ValidationError('executor binding: descriptor must be an object')\n }\n for (const [key, value] of Object.entries(descriptor)) {\n if (/(url|uri|token|key|secret|bearer|credential|authorization)/i.test(key)) {\n throw new ValidationError(`executor binding: unsafe descriptor key ${JSON.stringify(key)}`)\n }\n if (\n value !== null &&\n typeof value !== 'string' &&\n typeof value !== 'number' &&\n typeof value !== 'boolean'\n ) {\n throw new ValidationError(\n `executor binding: descriptor ${JSON.stringify(key)} must be scalar`,\n )\n }\n if (typeof value === 'string' && (value.includes('://') || value.includes('@'))) {\n throw new ValidationError(\n `executor binding: descriptor ${JSON.stringify(key)} contains transport or credential text`,\n )\n }\n }\n}\n\nfunction jsonWireSnapshot(value: unknown, path = '$'): unknown {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return value\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new ValidationError(`executor binding: ${path} must be finite`)\n }\n return value\n }\n if (Array.isArray(value)) {\n return value.map((item, index) => {\n if (item === undefined) {\n throw new ValidationError(`executor binding: ${path}[${index}] cannot be undefined`)\n }\n return jsonWireSnapshot(item, `${path}[${index}]`)\n })\n }\n if (typeof value !== 'object' || value === null) {\n throw new ValidationError(`executor binding: ${path} must be JSON data`)\n }\n const prototype = Object.getPrototypeOf(value)\n if (prototype !== Object.prototype && prototype !== null) {\n throw new ValidationError(`executor binding: ${path} must be a plain object`)\n }\n const out: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (item === undefined) continue\n out[key] = jsonWireSnapshot(item, `${path}.${key}`)\n }\n return out\n}\n\n/**\n * The provider-identity evidence for ONE attempt, from the served model alone. `unknown` with a\n * `provider-model-missing` reason when the attempt produced no model, because an attempt that\n * cannot name what served it is not evidence that nothing did.\n */\nexport function providerAttemptEvidence(model: string | undefined): ProviderModelExecutionEvidence {\n const attempts = Object.freeze([\n Object.freeze({ observations: Object.freeze(model === undefined ? [] : [model]) }),\n ])\n const models = Object.freeze(model === undefined ? [] : [model])\n return Object.freeze(\n model === undefined\n ? { status: 'unknown' as const, attempts, models, reason: 'provider-model-missing' as const }\n : { status: 'known' as const, attempts, models },\n )\n}\n"],"mappings":"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"}
|
package/dist/mcp/bin.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { i as ConfigError } from "../errors-
|
|
3
|
-
import { xn as readTraceContextFromEnv } from "../redact-
|
|
4
|
-
import { s as supervisorInstructions } from "../delegate-
|
|
5
|
-
import { _ as FileDelegationStore, n as createMcpServer, p as DelegationTaskQueue } from "../server-
|
|
2
|
+
import { i as ConfigError } from "../errors-DodWX-cb.js";
|
|
3
|
+
import { xn as readTraceContextFromEnv } from "../redact-Cbl2O-4N.js";
|
|
4
|
+
import { s as supervisorInstructions } from "../delegate-D7sonS78.js";
|
|
5
|
+
import { _ as FileDelegationStore, n as createMcpServer, p as DelegationTaskQueue } from "../server-BjB6ay4N.js";
|
|
6
6
|
//#region src/mcp/delegate-supervisor-provisioning.ts
|
|
7
7
|
function trimmed(value) {
|
|
8
8
|
const v = value?.trim();
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { E as SandboxClient, h as LoopSandboxPlacement } from "../types-
|
|
2
|
-
import { $d as DetachedWinnerSelection, $f as DelegationStatus, $u as DefinedAnalystRecord, Ad as questionEscalationTargets, Af as SubmitInput, Bd as DelegateHandlerOptions, Bf as DelegateResearchResult, Bu as AnalystToolGroupName, Cd as WorkerWatchOptions, Cf as DelegationRecord, Cp as InMemoryDelegationStore, Dd as downMessageRefusalReasons, Df as DelegationRunContext, Ed as createCoordinationTools, Ef as DelegationResumeTick, Fd as DELEGATE_DESCRIPTION, Ff as DelegateCodeResult, Fu as AnalystDefinitionIssue, Gd as FeedbackStore, Gf as DelegationError, Gu as AuthorizedDownMessage, Hd as createDelegateHandler, Hf as DelegateUiAuditConfig, Hu as AuthoredAnalystDefinition, Id as DELEGATE_INPUT_SCHEMA, If as DelegateFeedbackArgs, Iu as AnalystFindingEvent, Jd as CoderDelegate, Jf as DelegationHistoryEntry, Ju as CoordinationEvent, Kd as InMemoryFeedbackStore, Kf as DelegationFeedbackSnapshot, Ku as ContinuationInstruction, Ld as DELEGATE_TOOL_NAME, Lf as DelegateFeedbackResult, Lp as CoderOutput, Lu as AnalystKind, Md as McpServerOptions, Mf as hashIdempotencyInput, Nd as createInProcessTransport, Nf as DelegateCodeArgs, Of as DelegationTaskQueue, Pd as createMcpServer, Pf as DelegateCodeConfig, Pu as ANALYST_DEFINITION_BOUNDS, Qd as DetachedSessionDelegateOptions, Qf as DelegationResultPayload, Qu as DEFAULT_AWAIT_EVENT_TIMEOUT_MS, Rd as DelegateArgs, Rf as DelegateResearchArgs, Sd as WorkerSpawnContext, Sf as DelegationArgs, Sp as FileDelegationStoreOptions, Tf as DelegationResumeDriver, Ud as validateDelegateArgs, Uf as DelegateUiAuditResult, Uu as AuthoredAnalystLimits, Vd as DelegateResult, Vf as DelegateUiAuditArgs, Wd as FeedbackEvent, Wf as DelegateUiAuditRoute, Wu as AuthorizeDownMessage, Xd as CoderReviewer, Xf as DelegationProfile, Xu as CoordinationTools, Yd as CoderReview, Yf as DelegationHistoryResult, Zd as DelegateRunCtx, Zf as DelegationProgress, Zu as CoordinationToolsOptions, _f as createDetachedTurnResumeDriver, _p as createDelegationTraceCollector, ad as MakeWorkerAgent, af as DelegationExecutor, ap as UiAuditLensFilter, bf as parseDetachedSessionRef, bp as DelegationStore, cd as QuestionEscalationOutcome, cf as SiblingSandboxExecutorOptions, cp as CappedDelegationTrace, dd as QuestionLevel, df as DetachedSessionRefParts, dp as DelegationTraceCaps, ed as DownMessageAuthorizationInput, ef as SettleDetachedCoderTurnOptions, ep as DelegationStatusArgs, fd as QuestionOption, ff as DetachedTurn, fp as DelegationTraceCollector, gd as SettledWorker, gf as RunDetachedTurnOptions, gp as composeLoopTraceEmitters, hd as QuestionUrgency, hf as DriveTurnTick, hp as capDelegationTrace, id as EscalateQuestion, if as settleDetachedCoderTurn, ip as ResearchOutputShape, jd as McpServer, jf as SubmitOutput, kd as parseAuthoredAnalystDefinition, kf as DelegationTaskQueueOptions, ld as QuestionEscalationRecord, lf as createFleetWorkspaceExecutor, lp as DELEGATION_TRACE_MAX_BYTES, md as QuestionRecord, mf as DriveTurnCapableBox, mp as buildDelegationTraceSpans, nd as DownMessageDeliveryOutcome, nf as coderTaskFromArgs, np as FeedbackRating, od as Question, of as FleetHandle, op as UiAuditorDelegationOutput, pd as QuestionPolicy, pf as DetachedTurnResumeDriverOptions, pp as DelegationTraceSpan, qd as eventToSnapshot, qf as DelegationHistoryArgs, rd as DownMessageEvent, rf as detachedSessionDelegate, rp as FeedbackRefersTo, sd as QuestionDecision, sf as FleetWorkspaceExecutorOptions, sp as delegationProfiles, td as DownMessageDeliveryAttempt, tf as UiAuditorDelegate, tp as DelegationStatusResult, ud as QuestionEscalationTarget, uf as createSiblingSandboxExecutor, up as DELEGATION_TRACE_MAX_SPANS, vf as detachedTurnEvents, vp as DelegationPersistenceError, wd as analystToolGroupNames, wf as DelegationResumeContext, xf as runDetachedTurn, xp as FileDelegationStore, yf as formatDetachedSessionRef, yp as DelegationStateCorruptError, zd as DelegateError, zf as DelegateResearchConfig, zu as AnalystRegistry } from "../index-
|
|
3
|
-
import { _t as TraceContext, bt as readTraceContextFromEnv, vt as createPropagatingTraceEmitter, xt as traceContextToEnv, yt as mergeTraceEnv } from "../types-
|
|
4
|
-
import { At as localHarnessExecutable, Ct as CodexTokenUsage, Dt as LocalHarnessResult, Et as LocalHarness, Mt as runLocalHarness, Ot as RunLocalHarnessOptions, St as CodexExecutionPolicy, Tt as LOCAL_HARNESSES, _t as WorktreeHandle, an as JsonRpcMessage, bt as removeWorktree, cn as McpTransport, ft as CreateWorktreeOptions, gt as RemoveWorktreeOptions, ht as GitRunner, jt as parseCodexTokenUsage, kt as harnessSupportsReasoningEffort, mt as DiffResult, on as JsonRpcResponse, pt as DiffOptions, sn as McpToolDescriptor, vt as captureWorktreeDiff, wt as DEFAULT_LOCAL_HARNESS, xt as CodexExecutionEvidence, yt as createWorktree } from "../runtime-
|
|
5
|
-
import { d as ResearchSource, o as UiLens } from "../substrate-
|
|
1
|
+
import { E as SandboxClient, h as LoopSandboxPlacement } from "../types-Q0PMagdm.js";
|
|
2
|
+
import { $d as DetachedWinnerSelection, $f as DelegationStatus, $u as DefinedAnalystRecord, Ad as questionEscalationTargets, Af as SubmitInput, Bd as DelegateHandlerOptions, Bf as DelegateResearchResult, Bu as AnalystToolGroupName, Cd as WorkerWatchOptions, Cf as DelegationRecord, Cp as InMemoryDelegationStore, Dd as downMessageRefusalReasons, Df as DelegationRunContext, Ed as createCoordinationTools, Ef as DelegationResumeTick, Fd as DELEGATE_DESCRIPTION, Ff as DelegateCodeResult, Fu as AnalystDefinitionIssue, Gd as FeedbackStore, Gf as DelegationError, Gu as AuthorizedDownMessage, Hd as createDelegateHandler, Hf as DelegateUiAuditConfig, Hu as AuthoredAnalystDefinition, Id as DELEGATE_INPUT_SCHEMA, If as DelegateFeedbackArgs, Iu as AnalystFindingEvent, Jd as CoderDelegate, Jf as DelegationHistoryEntry, Ju as CoordinationEvent, Kd as InMemoryFeedbackStore, Kf as DelegationFeedbackSnapshot, Ku as ContinuationInstruction, Ld as DELEGATE_TOOL_NAME, Lf as DelegateFeedbackResult, Lp as CoderOutput, Lu as AnalystKind, Md as McpServerOptions, Mf as hashIdempotencyInput, Nd as createInProcessTransport, Nf as DelegateCodeArgs, Of as DelegationTaskQueue, Pd as createMcpServer, Pf as DelegateCodeConfig, Pu as ANALYST_DEFINITION_BOUNDS, Qd as DetachedSessionDelegateOptions, Qf as DelegationResultPayload, Qu as DEFAULT_AWAIT_EVENT_TIMEOUT_MS, Rd as DelegateArgs, Rf as DelegateResearchArgs, Sd as WorkerSpawnContext, Sf as DelegationArgs, Sp as FileDelegationStoreOptions, Tf as DelegationResumeDriver, Ud as validateDelegateArgs, Uf as DelegateUiAuditResult, Uu as AuthoredAnalystLimits, Vd as DelegateResult, Vf as DelegateUiAuditArgs, Wd as FeedbackEvent, Wf as DelegateUiAuditRoute, Wu as AuthorizeDownMessage, Xd as CoderReviewer, Xf as DelegationProfile, Xu as CoordinationTools, Yd as CoderReview, Yf as DelegationHistoryResult, Zd as DelegateRunCtx, Zf as DelegationProgress, Zu as CoordinationToolsOptions, _f as createDetachedTurnResumeDriver, _p as createDelegationTraceCollector, ad as MakeWorkerAgent, af as DelegationExecutor, ap as UiAuditLensFilter, bf as parseDetachedSessionRef, bp as DelegationStore, cd as QuestionEscalationOutcome, cf as SiblingSandboxExecutorOptions, cp as CappedDelegationTrace, dd as QuestionLevel, df as DetachedSessionRefParts, dp as DelegationTraceCaps, ed as DownMessageAuthorizationInput, ef as SettleDetachedCoderTurnOptions, ep as DelegationStatusArgs, fd as QuestionOption, ff as DetachedTurn, fp as DelegationTraceCollector, gd as SettledWorker, gf as RunDetachedTurnOptions, gp as composeLoopTraceEmitters, hd as QuestionUrgency, hf as DriveTurnTick, hp as capDelegationTrace, id as EscalateQuestion, if as settleDetachedCoderTurn, ip as ResearchOutputShape, jd as McpServer, jf as SubmitOutput, kd as parseAuthoredAnalystDefinition, kf as DelegationTaskQueueOptions, ld as QuestionEscalationRecord, lf as createFleetWorkspaceExecutor, lp as DELEGATION_TRACE_MAX_BYTES, md as QuestionRecord, mf as DriveTurnCapableBox, mp as buildDelegationTraceSpans, nd as DownMessageDeliveryOutcome, nf as coderTaskFromArgs, np as FeedbackRating, od as Question, of as FleetHandle, op as UiAuditorDelegationOutput, pd as QuestionPolicy, pf as DetachedTurnResumeDriverOptions, pp as DelegationTraceSpan, qd as eventToSnapshot, qf as DelegationHistoryArgs, rd as DownMessageEvent, rf as detachedSessionDelegate, rp as FeedbackRefersTo, sd as QuestionDecision, sf as FleetWorkspaceExecutorOptions, sp as delegationProfiles, td as DownMessageDeliveryAttempt, tf as UiAuditorDelegate, tp as DelegationStatusResult, ud as QuestionEscalationTarget, uf as createSiblingSandboxExecutor, up as DELEGATION_TRACE_MAX_SPANS, vf as detachedTurnEvents, vp as DelegationPersistenceError, wd as analystToolGroupNames, wf as DelegationResumeContext, xf as runDetachedTurn, xp as FileDelegationStore, yf as formatDetachedSessionRef, yp as DelegationStateCorruptError, zd as DelegateError, zf as DelegateResearchConfig, zu as AnalystRegistry } from "../index-CYOJsxSg.js";
|
|
3
|
+
import { _t as TraceContext, bt as readTraceContextFromEnv, vt as createPropagatingTraceEmitter, xt as traceContextToEnv, yt as mergeTraceEnv } from "../types-DFLZMaeh.js";
|
|
4
|
+
import { At as localHarnessExecutable, Ct as CodexTokenUsage, Dt as LocalHarnessResult, Et as LocalHarness, Mt as runLocalHarness, Ot as RunLocalHarnessOptions, St as CodexExecutionPolicy, Tt as LOCAL_HARNESSES, _t as WorktreeHandle, an as JsonRpcMessage, bt as removeWorktree, cn as McpTransport, ft as CreateWorktreeOptions, gt as RemoveWorktreeOptions, ht as GitRunner, jt as parseCodexTokenUsage, kt as harnessSupportsReasoningEffort, mt as DiffResult, on as JsonRpcResponse, pt as DiffOptions, sn as McpToolDescriptor, vt as captureWorktreeDiff, wt as DEFAULT_LOCAL_HARNESS, xt as CodexExecutionEvidence, yt as createWorktree } from "../runtime-0xNaV6TJ.js";
|
|
5
|
+
import { d as ResearchSource, o as UiLens } from "../substrate-B4iT90Zv.js";
|
|
6
6
|
import { a as KbGateResult, i as FactJudgeVerdict, n as FactCandidate, o as createKbGate, r as FactJudge, t as CreateKbGateOptions } from "../kb-gate-C8z2juK8.js";
|
|
7
|
-
import { n as mcpToolsForRuntimeMcpSubset, t as mcpToolsForRuntimeMcp } from "../openai-tools-
|
|
7
|
+
import { n as mcpToolsForRuntimeMcpSubset, t as mcpToolsForRuntimeMcp } from "../openai-tools-CRQhVT_V.js";
|
|
8
8
|
import { AgentProfileMcpServer, HarnessType } from "@tangle-network/agent-interface";
|
|
9
9
|
//#region src/mcp/codex-diagnostics.d.ts
|
|
10
10
|
/** Bounded, credential-redacted process context attached when reproducible Codex output fails
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { i as ConfigError, m as ValidationError } from "../errors-
|
|
2
|
-
import { t as assertExecutableAgentProfile } from "../model-policy-
|
|
3
|
-
import { Gn as removeWorktree, Hn as runWorktreeHarness, Jn as harnessSupportsReasoningEffort, Kn as DEFAULT_LOCAL_HARNESS, Sn as traceContextToEnv, Un as captureWorktreeDiff, Wn as createWorktree, Xn as parseCodexTokenUsage, Yn as localHarnessExecutable, Zn as CodexExecutionDiagnosticError, an as runAgentRounds, bn as mergeTraceEnv, ln as assertBoxlessPromptOptions, nn as createSandboxForSpec, qn as LOCAL_HARNESSES, xn as readTraceContextFromEnv, yn as createPropagatingTraceEmitter } from "../redact-
|
|
4
|
-
import { C as throwIfAborted, S as throwAbort, b as sleep, f as deleteBoxSafe } from "../environment-provider-
|
|
5
|
-
import { E as runCoderChecks, ot as selectValidWinner } from "../runtime-
|
|
6
|
-
import { C as createCoordinationTools, D as questionEscalationTargets, E as parseAuthoredAnalystDefinition, b as analystToolGroupNames, v as ANALYST_DEFINITION_BOUNDS, w as downMessageRefusalReasons, y as DEFAULT_AWAIT_EVENT_TIMEOUT_MS } from "../coordination-driver-
|
|
7
|
-
import { t as createStdioToolServer } from "../tool-server-
|
|
1
|
+
import { i as ConfigError, m as ValidationError } from "../errors-DodWX-cb.js";
|
|
2
|
+
import { t as assertExecutableAgentProfile } from "../model-policy-DKDyr-fc.js";
|
|
3
|
+
import { Gn as removeWorktree, Hn as runWorktreeHarness, Jn as harnessSupportsReasoningEffort, Kn as DEFAULT_LOCAL_HARNESS, Sn as traceContextToEnv, Un as captureWorktreeDiff, Wn as createWorktree, Xn as parseCodexTokenUsage, Yn as localHarnessExecutable, Zn as CodexExecutionDiagnosticError, an as runAgentRounds, bn as mergeTraceEnv, ln as assertBoxlessPromptOptions, nn as createSandboxForSpec, qn as LOCAL_HARNESSES, xn as readTraceContextFromEnv, yn as createPropagatingTraceEmitter } from "../redact-Cbl2O-4N.js";
|
|
4
|
+
import { C as throwIfAborted, S as throwAbort, b as sleep, f as deleteBoxSafe } from "../environment-provider-1fKZh2zl.js";
|
|
5
|
+
import { E as runCoderChecks, ot as selectValidWinner } from "../runtime-DqRieJ6e.js";
|
|
6
|
+
import { C as createCoordinationTools, D as questionEscalationTargets, E as parseAuthoredAnalystDefinition, b as analystToolGroupNames, v as ANALYST_DEFINITION_BOUNDS, w as downMessageRefusalReasons, y as DEFAULT_AWAIT_EVENT_TIMEOUT_MS } from "../coordination-driver-zkCrfEbS.js";
|
|
7
|
+
import { t as createStdioToolServer } from "../tool-server-BJbCPhoW.js";
|
|
8
8
|
import { t as createKbGate } from "../kb-gate-DpaSwXVx.js";
|
|
9
|
-
import { _ as InMemoryFeedbackStore, a as validateDelegationStatusArgs, c as DELEGATION_HISTORY_TOOL_NAME, d as delegationProfiles, f as DELEGATE_FEEDBACK_DESCRIPTION, g as validateDelegateFeedbackArgs, h as createDelegateFeedbackHandler, i as createDelegationStatusHandler, l as createDelegationHistoryHandler, m as DELEGATE_FEEDBACK_TOOL_NAME, n as DELEGATION_STATUS_INPUT_SCHEMA, o as DELEGATION_HISTORY_DESCRIPTION, p as DELEGATE_FEEDBACK_INPUT_SCHEMA, r as DELEGATION_STATUS_TOOL_NAME, s as DELEGATION_HISTORY_INPUT_SCHEMA, t as DELEGATION_STATUS_DESCRIPTION, u as validateDelegationHistoryArgs, v as eventToSnapshot } from "../delegation-status-
|
|
10
|
-
import { n as mcpToolsForRuntimeMcpSubset, t as mcpToolsForRuntimeMcp } from "../openai-tools-
|
|
9
|
+
import { _ as InMemoryFeedbackStore, a as validateDelegationStatusArgs, c as DELEGATION_HISTORY_TOOL_NAME, d as delegationProfiles, f as DELEGATE_FEEDBACK_DESCRIPTION, g as validateDelegateFeedbackArgs, h as createDelegateFeedbackHandler, i as createDelegationStatusHandler, l as createDelegationHistoryHandler, m as DELEGATE_FEEDBACK_TOOL_NAME, n as DELEGATION_STATUS_INPUT_SCHEMA, o as DELEGATION_HISTORY_DESCRIPTION, p as DELEGATE_FEEDBACK_INPUT_SCHEMA, r as DELEGATION_STATUS_TOOL_NAME, s as DELEGATION_HISTORY_INPUT_SCHEMA, t as DELEGATION_STATUS_DESCRIPTION, u as validateDelegationHistoryArgs, v as eventToSnapshot } from "../delegation-status-CF4D0NZ_.js";
|
|
10
|
+
import { n as mcpToolsForRuntimeMcpSubset, t as mcpToolsForRuntimeMcp } from "../openai-tools-DoQ32vpe.js";
|
|
11
11
|
import { t as coderTaskToPrompt } from "../coder-yhVWbdWc.js";
|
|
12
|
-
import { C as composeLoopTraceEmitters, S as capDelegationTrace, _ as FileDelegationStore, a as DELEGATE_UI_AUDIT_TOOL_NAME, b as DELEGATION_TRACE_MAX_SPANS, c as DELEGATE_DESCRIPTION, d as createDelegateHandler, f as validateDelegateArgs, g as DelegationStateCorruptError, h as DelegationPersistenceError, i as DELEGATE_UI_AUDIT_INPUT_SCHEMA, l as DELEGATE_INPUT_SCHEMA, m as hashIdempotencyInput, n as createMcpServer, o as createDelegateUiAuditHandler, p as DelegationTaskQueue, r as DELEGATE_UI_AUDIT_DESCRIPTION, s as validateDelegateUiAuditArgs, t as createInProcessTransport, u as DELEGATE_TOOL_NAME, v as InMemoryDelegationStore, w as createDelegationTraceCollector, x as buildDelegationTraceSpans, y as DELEGATION_TRACE_MAX_BYTES } from "../server-
|
|
13
|
-
import { a as createMemoryToolServer, c as resolveMemoryFromEnv, i as MEMORY_NAME_ENV, n as MEMORY_ITEMS_ENV, o as parseMemoryItems, r as MEMORY_LOG_ENV, s as readMemoryItemsFile, t as MEMORY_FILE_ENV } from "../memory-server-
|
|
12
|
+
import { C as composeLoopTraceEmitters, S as capDelegationTrace, _ as FileDelegationStore, a as DELEGATE_UI_AUDIT_TOOL_NAME, b as DELEGATION_TRACE_MAX_SPANS, c as DELEGATE_DESCRIPTION, d as createDelegateHandler, f as validateDelegateArgs, g as DelegationStateCorruptError, h as DelegationPersistenceError, i as DELEGATE_UI_AUDIT_INPUT_SCHEMA, l as DELEGATE_INPUT_SCHEMA, m as hashIdempotencyInput, n as createMcpServer, o as createDelegateUiAuditHandler, p as DelegationTaskQueue, r as DELEGATE_UI_AUDIT_DESCRIPTION, s as validateDelegateUiAuditArgs, t as createInProcessTransport, u as DELEGATE_TOOL_NAME, v as InMemoryDelegationStore, w as createDelegationTraceCollector, x as buildDelegationTraceSpans, y as DELEGATION_TRACE_MAX_BYTES } from "../server-BjB6ay4N.js";
|
|
13
|
+
import { a as createMemoryToolServer, c as resolveMemoryFromEnv, i as MEMORY_NAME_ENV, n as MEMORY_ITEMS_ENV, o as parseMemoryItems, r as MEMORY_LOG_ENV, s as readMemoryItemsFile, t as MEMORY_FILE_ENV } from "../memory-server-BR310Weg.js";
|
|
14
14
|
import { agentProfileSchema } from "@tangle-network/agent-interface";
|
|
15
15
|
import { randomUUID } from "node:crypto";
|
|
16
16
|
//#region src/mcp/executor.ts
|
package/dist/mcp/memory-bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as createMemoryToolServer, c as resolveMemoryFromEnv } from "../memory-server-
|
|
2
|
+
import { a as createMemoryToolServer, c as resolveMemoryFromEnv } from "../memory-server-BR310Weg.js";
|
|
3
3
|
//#region src/mcp/memory-bin.ts
|
|
4
4
|
/**
|
|
5
5
|
* `agent-runtime-memory-mcp` — stdio memory MCP server entry point.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as ValidationError } from "./errors-
|
|
2
|
-
import { t as createStdioToolServer } from "./tool-server-
|
|
1
|
+
import { m as ValidationError } from "./errors-DodWX-cb.js";
|
|
2
|
+
import { t as createStdioToolServer } from "./tool-server-BJbCPhoW.js";
|
|
3
3
|
import { appendFileSync, mkdirSync, readFileSync } from "node:fs";
|
|
4
4
|
import { dirname } from "node:path";
|
|
5
5
|
//#region src/mcp/memory-server.ts
|
|
@@ -231,4 +231,4 @@ function scoreItem(queryTokens, item) {
|
|
|
231
231
|
//#endregion
|
|
232
232
|
export { createMemoryToolServer as a, resolveMemoryFromEnv as c, MEMORY_NAME_ENV as i, MEMORY_ITEMS_ENV as n, parseMemoryItems as o, MEMORY_LOG_ENV as r, readMemoryItemsFile as s, MEMORY_FILE_ENV as t };
|
|
233
233
|
|
|
234
|
-
//# sourceMappingURL=memory-server-
|
|
234
|
+
//# sourceMappingURL=memory-server-BR310Weg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-server-Crkevawz.js","names":[],"sources":["../src/mcp/memory-server.ts"],"sourcesContent":["/**\n * Memory MCP server — the LIVE serving half of the `memory` profile surface\n * (Phase 5). A curated memory (lessons distilled from prior runs) is only\n * real if the DRIVEN agent can query it mid-task; this module serves a flat\n * store of `MemoryItem` rows as `memory_search` / `memory_get` tools over the\n * ONE in-repo stdio JSON-RPC core (`createStdioToolServer`), so the exact\n * wire protocol the same-host client (`connectStdioMcp` /\n * `materializeLocalMcp`, runtime/stdio-mcp-client.ts) speaks is guaranteed by\n * construction — serve and consume cannot drift.\n *\n * Retrieval is DETERMINISTIC lexical overlap (no vectors, no LLM): a lift\n * measured with this memory mounted is attributable to the lessons\n * themselves, never to retrieval-model noise. Every\n * `memory_search` can append one JSONL row to a retrieval log (`logPath`) —\n * the per-query record an off-policy retrieval estimator (agent-knowledge's\n * `RetrievalHoldout`) consumes. agent-knowledge is NOT a dependency of this\n * repo, so the log file is the flagged cross-package seam, not an import.\n *\n * Fail-loud discipline (mirrors `materializeLocalMcp`): an EMPTY memory is\n * never served — a profile without memory simply omits the artifact, and\n * silently serving zero rows would fake the with/without ablation.\n *\n * @experimental\n */\n\nimport { appendFileSync, mkdirSync, readFileSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport type { AgentProfileMcpServer } from '@tangle-network/agent-interface'\nimport { ValidationError } from '../errors'\nimport { createStdioToolServer, type McpToolDescriptor, type StdioToolServer } from './tool-server'\n\n/** One row of agent memory: a crisp lesson/fact with provenance. */\nexport interface MemoryItem {\n /** Stable id (content-hash by convention; see `memoryArtifactFromLessons`). */\n id: string\n /** The lesson itself — one imperative or observation the agent should recall. */\n text: string\n /** Optional retrieval tags, matched by `memory_search` alongside the text. */\n tags?: string[]\n /** Provenance: the finding / trace / curation pass this row came from. */\n source?: string\n}\n\n/**\n * The `memory` artifact payload — HOW a profile's memory is stored and served:\n *\n * - `store: 'file'` — served by the in-repo memory bin\n * (`agent-runtime-memory-mcp`, src/mcp/memory-bin.ts): rows load from\n * `path` (a JSON array or JSONL file of `MemoryItem`) and/or the inline\n * `items` seed (inline wins on id collision). At least one of\n * `path`/`items` is required.\n * - `store: 'mcp'` — an EXTERNAL, already-runnable MCP server that exposes\n * the memory tools itself; `server` is required and mounts verbatim.\n *\n * `logPath` makes the served memory append one JSONL row per `memory_search`\n * — the retrieval log a holdout estimator reads (see module doc).\n */\nexport interface AgentMemorySpec {\n store: 'file' | 'mcp'\n /** `store:'file'` — host path to the durable row store (JSON array or JSONL). */\n path?: string\n /** Inline seed rows, served alongside (and winning over) `path` rows. */\n items?: MemoryItem[]\n /** `store:'mcp'` — the external server that already serves memory tools. */\n server?: AgentProfileMcpServer\n /** JSONL retrieval log: one row per `memory_search` (ts, query, k, returned). */\n logPath?: string\n}\n\n/** Env var naming the durable row store file the memory bin loads (the\n * `memoryMcpServer` ↔ memory-bin contract). */\nexport const MEMORY_FILE_ENV = 'AGENT_MEMORY_FILE'\n/** Env var carrying inline JSON `MemoryItem` rows (win over file rows on id). */\nexport const MEMORY_ITEMS_ENV = 'AGENT_MEMORY_ITEMS'\n/** Env var naming the JSONL retrieval log (one row per `memory_search`). */\nexport const MEMORY_LOG_ENV = 'AGENT_MEMORY_LOG'\n/** Env var overriding the served display name (default 'agent-memory'). */\nexport const MEMORY_NAME_ENV = 'AGENT_MEMORY_NAME'\n\nexport interface CreateMemoryToolServerOptions {\n /** The rows to serve. MUST be non-empty (an empty memory is never served). */\n items: readonly MemoryItem[]\n /** Server display name surfaced via `initialize`. Default 'agent-memory'. */\n serverName?: string\n /** Server version surfaced via `initialize`. Default '0'. */\n serverVersion?: string\n /** Default result count for `memory_search`. Default 5. */\n defaultK?: number\n /** Append one JSONL row per `memory_search` (the retrieval-holdout seam). */\n logPath?: string\n}\n\n/**\n * Build the memory MCP server: `memory_search` (lexical top-k over the rows)\n * and `memory_get` (one row by id) on the generic stdio JSON-RPC core.\n */\nexport function createMemoryToolServer(opts: CreateMemoryToolServerOptions): StdioToolServer {\n if (opts.items.length === 0) {\n throw new ValidationError(\n 'createMemoryToolServer: refusing to serve an EMPTY memory — a profile without memory omits the artifact; serving zero rows would fake the with/without ablation',\n )\n }\n const byId = new Map<string, MemoryItem>()\n for (const item of opts.items) {\n if (byId.has(item.id)) {\n throw new ValidationError(`createMemoryToolServer: duplicate memory item id '${item.id}'`)\n }\n byId.set(item.id, item)\n }\n const items = [...byId.values()]\n const defaultK = opts.defaultK ?? 5\n const logPath = opts.logPath\n if (logPath) mkdirSync(dirname(logPath), { recursive: true })\n\n const search: McpToolDescriptor = {\n name: 'memory_search',\n description:\n 'Search the agent memory of lessons learned from prior runs. Give what you are about to do or the problem you face; returns the top-k lessons ranked by relevance. Consult it BEFORE repeating work a prior run already learned from.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'The task/problem at hand — matched against lesson text and tags.',\n },\n k: { type: 'number', description: `Max results (default ${defaultK}).` },\n tags: {\n type: 'array',\n items: { type: 'string' },\n description: 'Only return items carrying at least one of these tags.',\n },\n },\n required: ['query'],\n },\n handler: async (raw) => {\n const args = (raw ?? {}) as { query?: unknown; k?: unknown; tags?: unknown }\n if (typeof args.query !== 'string' || args.query.trim().length === 0) {\n throw new TypeError('memory_search: query must be a non-empty string')\n }\n const k = args.k === undefined ? defaultK : Math.floor(Number(args.k))\n if (!Number.isFinite(k) || k < 1) {\n throw new TypeError('memory_search: k must be a positive integer')\n }\n let tagFilter: string[] | undefined\n if (args.tags !== undefined) {\n if (!Array.isArray(args.tags) || args.tags.some((t) => typeof t !== 'string')) {\n throw new TypeError('memory_search: tags must be an array of strings')\n }\n tagFilter = args.tags as string[]\n }\n const queryTokens = tokenize(args.query)\n const pool = tagFilter\n ? items.filter((i) => (i.tags ?? []).some((t) => tagFilter.includes(t)))\n : items\n const results = pool\n .map((item) => ({ item, score: scoreItem(queryTokens, item) }))\n .filter((r) => r.score > 0)\n // Highest score first; stable on ties (curation order is the tiebreak).\n .sort((a, b) => b.score - a.score)\n .slice(0, k)\n .map(({ item, score }) => ({\n id: item.id,\n text: item.text,\n score: Number(score.toFixed(4)),\n ...(item.tags ? { tags: item.tags } : {}),\n ...(item.source ? { source: item.source } : {}),\n }))\n if (logPath) {\n // The retrieval log: what was asked, what came back, at what rank —\n // exactly the per-query record an off-policy estimator needs.\n appendFileSync(\n logPath,\n `${JSON.stringify({\n ts: new Date().toISOString(),\n query: args.query,\n k,\n returned: results.map((r) => ({ id: r.id, score: r.score })),\n })}\\n`,\n )\n }\n return { query: args.query, results }\n },\n }\n\n const get: McpToolDescriptor = {\n name: 'memory_get',\n description: 'Fetch one memory item verbatim by its id (ids come from memory_search results).',\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string', description: 'The memory item id.' } },\n required: ['id'],\n },\n handler: async (raw) => {\n const args = (raw ?? {}) as { id?: unknown }\n if (typeof args.id !== 'string' || args.id.trim().length === 0) {\n throw new TypeError('memory_get: id must be a non-empty string')\n }\n const item = byId.get(args.id)\n if (!item) throw new Error(`memory_get: no memory item with id '${args.id}'`)\n return item\n },\n }\n\n return createStdioToolServer({\n serverName: opts.serverName ?? 'agent-memory',\n serverVersion: opts.serverVersion ?? '0',\n tools: [search, get],\n })\n}\n\n/** Coerce an untrusted JSON array into validated `MemoryItem` rows. */\nexport function parseMemoryItems(value: unknown, source: string): MemoryItem[] {\n if (!Array.isArray(value)) {\n throw new ValidationError(`${source}: expected a JSON array of memory items`)\n }\n return value.map((row, i) => coerceMemoryItem(row, `${source}[${i}]`))\n}\n\n/** Read a memory store file: a JSON array, or JSONL (one `MemoryItem` per line). */\nexport function readMemoryItemsFile(path: string): MemoryItem[] {\n let raw: string\n try {\n raw = readFileSync(path, 'utf8')\n } catch (err) {\n throw new ValidationError(\n `readMemoryItemsFile: cannot read '${path}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n const trimmed = raw.trim()\n if (trimmed.length === 0) return []\n if (trimmed.startsWith('[')) {\n let parsed: unknown\n try {\n parsed = JSON.parse(trimmed)\n } catch (err) {\n throw new ValidationError(\n `readMemoryItemsFile: '${path}' is not valid JSON: ${(err as Error).message}`,\n )\n }\n return parseMemoryItems(parsed, path)\n }\n return trimmed\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line, i) => {\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (err) {\n throw new ValidationError(\n `readMemoryItemsFile: '${path}' line ${i + 1} is not valid JSON: ${(err as Error).message}`,\n )\n }\n return coerceMemoryItem(parsed, `${path}:${i + 1}`)\n })\n}\n\n/** What the memory bin resolved from its environment. */\nexport interface ResolvedMemoryEnv {\n items: MemoryItem[]\n serverName?: string\n logPath?: string\n}\n\n/**\n * Resolve the bin's memory from `AGENT_MEMORY_FILE` (durable store) and/or\n * `AGENT_MEMORY_ITEMS` (inline JSON rows; wins on id collision). Zero rows is\n * a boot FAILURE, matching the fail-closed materialization discipline.\n */\nexport function resolveMemoryFromEnv(env: Record<string, string | undefined>): ResolvedMemoryEnv {\n const filePath = env[MEMORY_FILE_ENV]\n const inlineRaw = env[MEMORY_ITEMS_ENV]\n const fromFile = filePath ? readMemoryItemsFile(filePath) : []\n let inline: MemoryItem[] = []\n if (inlineRaw) {\n let parsed: unknown\n try {\n parsed = JSON.parse(inlineRaw)\n } catch (err) {\n throw new ValidationError(\n `${MEMORY_ITEMS_ENV} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n inline = parseMemoryItems(parsed, MEMORY_ITEMS_ENV)\n }\n const byId = new Map<string, MemoryItem>()\n for (const item of fromFile) byId.set(item.id, item)\n for (const item of inline) byId.set(item.id, item)\n if (byId.size === 0) {\n throw new ValidationError(\n `memory bin: no memory items — set ${MEMORY_FILE_ENV} and/or ${MEMORY_ITEMS_ENV}; an EMPTY memory must never be served (a profile without memory omits the artifact)`,\n )\n }\n const serverName = env[MEMORY_NAME_ENV]\n const logPath = env[MEMORY_LOG_ENV]\n return {\n items: [...byId.values()],\n ...(serverName ? { serverName } : {}),\n ...(logPath ? { logPath } : {}),\n }\n}\n\nfunction coerceMemoryItem(row: unknown, at: string): MemoryItem {\n if (!row || typeof row !== 'object' || Array.isArray(row)) {\n throw new ValidationError(`${at}: memory item must be an object`)\n }\n const r = row as Record<string, unknown>\n if (typeof r.id !== 'string' || r.id.trim().length === 0) {\n throw new ValidationError(`${at}: 'id' must be a non-empty string`)\n }\n if (typeof r.text !== 'string' || r.text.trim().length === 0) {\n throw new ValidationError(`${at}: 'text' must be a non-empty string`)\n }\n let tags: string[] | undefined\n if (r.tags !== undefined) {\n if (!Array.isArray(r.tags) || r.tags.some((t) => typeof t !== 'string')) {\n throw new ValidationError(`${at}: 'tags' must be an array of strings`)\n }\n tags = r.tags as string[]\n }\n if (r.source !== undefined && typeof r.source !== 'string') {\n throw new ValidationError(`${at}: 'source' must be a string`)\n }\n return {\n id: r.id,\n text: r.text,\n ...(tags ? { tags } : {}),\n ...(typeof r.source === 'string' ? { source: r.source } : {}),\n }\n}\n\n/** Unique lowercase alphanumeric tokens of length >= 2. */\nfunction tokenize(text: string): string[] {\n return [\n ...new Set(\n text\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((t) => t.length >= 2),\n ),\n ]\n}\n\n/** Fraction of query tokens present in the item's text + tags (0..1). */\nfunction scoreItem(queryTokens: readonly string[], item: MemoryItem): number {\n if (queryTokens.length === 0) return 0\n const hay = new Set(tokenize(`${item.text} ${(item.tags ?? []).join(' ')}`))\n let hit = 0\n for (const t of queryTokens) if (hay.has(t)) hit += 1\n return hit / queryTokens.length\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-server-BR310Weg.js","names":[],"sources":["../src/mcp/memory-server.ts"],"sourcesContent":["/**\n * Memory MCP server — the LIVE serving half of the `memory` profile surface\n * (Phase 5). A curated memory (lessons distilled from prior runs) is only\n * real if the DRIVEN agent can query it mid-task; this module serves a flat\n * store of `MemoryItem` rows as `memory_search` / `memory_get` tools over the\n * ONE in-repo stdio JSON-RPC core (`createStdioToolServer`), so the exact\n * wire protocol the same-host client (`connectStdioMcp` /\n * `materializeLocalMcp`, runtime/stdio-mcp-client.ts) speaks is guaranteed by\n * construction — serve and consume cannot drift.\n *\n * Retrieval is DETERMINISTIC lexical overlap (no vectors, no LLM): a lift\n * measured with this memory mounted is attributable to the lessons\n * themselves, never to retrieval-model noise. Every\n * `memory_search` can append one JSONL row to a retrieval log (`logPath`) —\n * the per-query record an off-policy retrieval estimator (agent-knowledge's\n * `RetrievalHoldout`) consumes. agent-knowledge is NOT a dependency of this\n * repo, so the log file is the flagged cross-package seam, not an import.\n *\n * Fail-loud discipline (mirrors `materializeLocalMcp`): an EMPTY memory is\n * never served — a profile without memory simply omits the artifact, and\n * silently serving zero rows would fake the with/without ablation.\n *\n * @experimental\n */\n\nimport { appendFileSync, mkdirSync, readFileSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport type { AgentProfileMcpServer } from '@tangle-network/agent-interface'\nimport { ValidationError } from '../errors'\nimport { createStdioToolServer, type McpToolDescriptor, type StdioToolServer } from './tool-server'\n\n/** One row of agent memory: a crisp lesson/fact with provenance. */\nexport interface MemoryItem {\n /** Stable id (content-hash by convention; see `memoryArtifactFromLessons`). */\n id: string\n /** The lesson itself — one imperative or observation the agent should recall. */\n text: string\n /** Optional retrieval tags, matched by `memory_search` alongside the text. */\n tags?: string[]\n /** Provenance: the finding / trace / curation pass this row came from. */\n source?: string\n}\n\n/**\n * The `memory` artifact payload — HOW a profile's memory is stored and served:\n *\n * - `store: 'file'` — served by the in-repo memory bin\n * (`agent-runtime-memory-mcp`, src/mcp/memory-bin.ts): rows load from\n * `path` (a JSON array or JSONL file of `MemoryItem`) and/or the inline\n * `items` seed (inline wins on id collision). At least one of\n * `path`/`items` is required.\n * - `store: 'mcp'` — an EXTERNAL, already-runnable MCP server that exposes\n * the memory tools itself; `server` is required and mounts verbatim.\n *\n * `logPath` makes the served memory append one JSONL row per `memory_search`\n * — the retrieval log a holdout estimator reads (see module doc).\n */\nexport interface AgentMemorySpec {\n store: 'file' | 'mcp'\n /** `store:'file'` — host path to the durable row store (JSON array or JSONL). */\n path?: string\n /** Inline seed rows, served alongside (and winning over) `path` rows. */\n items?: MemoryItem[]\n /** `store:'mcp'` — the external server that already serves memory tools. */\n server?: AgentProfileMcpServer\n /** JSONL retrieval log: one row per `memory_search` (ts, query, k, returned). */\n logPath?: string\n}\n\n/** Env var naming the durable row store file the memory bin loads (the\n * `memoryMcpServer` ↔ memory-bin contract). */\nexport const MEMORY_FILE_ENV = 'AGENT_MEMORY_FILE'\n/** Env var carrying inline JSON `MemoryItem` rows (win over file rows on id). */\nexport const MEMORY_ITEMS_ENV = 'AGENT_MEMORY_ITEMS'\n/** Env var naming the JSONL retrieval log (one row per `memory_search`). */\nexport const MEMORY_LOG_ENV = 'AGENT_MEMORY_LOG'\n/** Env var overriding the served display name (default 'agent-memory'). */\nexport const MEMORY_NAME_ENV = 'AGENT_MEMORY_NAME'\n\nexport interface CreateMemoryToolServerOptions {\n /** The rows to serve. MUST be non-empty (an empty memory is never served). */\n items: readonly MemoryItem[]\n /** Server display name surfaced via `initialize`. Default 'agent-memory'. */\n serverName?: string\n /** Server version surfaced via `initialize`. Default '0'. */\n serverVersion?: string\n /** Default result count for `memory_search`. Default 5. */\n defaultK?: number\n /** Append one JSONL row per `memory_search` (the retrieval-holdout seam). */\n logPath?: string\n}\n\n/**\n * Build the memory MCP server: `memory_search` (lexical top-k over the rows)\n * and `memory_get` (one row by id) on the generic stdio JSON-RPC core.\n */\nexport function createMemoryToolServer(opts: CreateMemoryToolServerOptions): StdioToolServer {\n if (opts.items.length === 0) {\n throw new ValidationError(\n 'createMemoryToolServer: refusing to serve an EMPTY memory — a profile without memory omits the artifact; serving zero rows would fake the with/without ablation',\n )\n }\n const byId = new Map<string, MemoryItem>()\n for (const item of opts.items) {\n if (byId.has(item.id)) {\n throw new ValidationError(`createMemoryToolServer: duplicate memory item id '${item.id}'`)\n }\n byId.set(item.id, item)\n }\n const items = [...byId.values()]\n const defaultK = opts.defaultK ?? 5\n const logPath = opts.logPath\n if (logPath) mkdirSync(dirname(logPath), { recursive: true })\n\n const search: McpToolDescriptor = {\n name: 'memory_search',\n description:\n 'Search the agent memory of lessons learned from prior runs. Give what you are about to do or the problem you face; returns the top-k lessons ranked by relevance. Consult it BEFORE repeating work a prior run already learned from.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'The task/problem at hand — matched against lesson text and tags.',\n },\n k: { type: 'number', description: `Max results (default ${defaultK}).` },\n tags: {\n type: 'array',\n items: { type: 'string' },\n description: 'Only return items carrying at least one of these tags.',\n },\n },\n required: ['query'],\n },\n handler: async (raw) => {\n const args = (raw ?? {}) as { query?: unknown; k?: unknown; tags?: unknown }\n if (typeof args.query !== 'string' || args.query.trim().length === 0) {\n throw new TypeError('memory_search: query must be a non-empty string')\n }\n const k = args.k === undefined ? defaultK : Math.floor(Number(args.k))\n if (!Number.isFinite(k) || k < 1) {\n throw new TypeError('memory_search: k must be a positive integer')\n }\n let tagFilter: string[] | undefined\n if (args.tags !== undefined) {\n if (!Array.isArray(args.tags) || args.tags.some((t) => typeof t !== 'string')) {\n throw new TypeError('memory_search: tags must be an array of strings')\n }\n tagFilter = args.tags as string[]\n }\n const queryTokens = tokenize(args.query)\n const pool = tagFilter\n ? items.filter((i) => (i.tags ?? []).some((t) => tagFilter.includes(t)))\n : items\n const results = pool\n .map((item) => ({ item, score: scoreItem(queryTokens, item) }))\n .filter((r) => r.score > 0)\n // Highest score first; stable on ties (curation order is the tiebreak).\n .sort((a, b) => b.score - a.score)\n .slice(0, k)\n .map(({ item, score }) => ({\n id: item.id,\n text: item.text,\n score: Number(score.toFixed(4)),\n ...(item.tags ? { tags: item.tags } : {}),\n ...(item.source ? { source: item.source } : {}),\n }))\n if (logPath) {\n // The retrieval log: what was asked, what came back, at what rank —\n // exactly the per-query record an off-policy estimator needs.\n appendFileSync(\n logPath,\n `${JSON.stringify({\n ts: new Date().toISOString(),\n query: args.query,\n k,\n returned: results.map((r) => ({ id: r.id, score: r.score })),\n })}\\n`,\n )\n }\n return { query: args.query, results }\n },\n }\n\n const get: McpToolDescriptor = {\n name: 'memory_get',\n description: 'Fetch one memory item verbatim by its id (ids come from memory_search results).',\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string', description: 'The memory item id.' } },\n required: ['id'],\n },\n handler: async (raw) => {\n const args = (raw ?? {}) as { id?: unknown }\n if (typeof args.id !== 'string' || args.id.trim().length === 0) {\n throw new TypeError('memory_get: id must be a non-empty string')\n }\n const item = byId.get(args.id)\n if (!item) throw new Error(`memory_get: no memory item with id '${args.id}'`)\n return item\n },\n }\n\n return createStdioToolServer({\n serverName: opts.serverName ?? 'agent-memory',\n serverVersion: opts.serverVersion ?? '0',\n tools: [search, get],\n })\n}\n\n/** Coerce an untrusted JSON array into validated `MemoryItem` rows. */\nexport function parseMemoryItems(value: unknown, source: string): MemoryItem[] {\n if (!Array.isArray(value)) {\n throw new ValidationError(`${source}: expected a JSON array of memory items`)\n }\n return value.map((row, i) => coerceMemoryItem(row, `${source}[${i}]`))\n}\n\n/** Read a memory store file: a JSON array, or JSONL (one `MemoryItem` per line). */\nexport function readMemoryItemsFile(path: string): MemoryItem[] {\n let raw: string\n try {\n raw = readFileSync(path, 'utf8')\n } catch (err) {\n throw new ValidationError(\n `readMemoryItemsFile: cannot read '${path}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n const trimmed = raw.trim()\n if (trimmed.length === 0) return []\n if (trimmed.startsWith('[')) {\n let parsed: unknown\n try {\n parsed = JSON.parse(trimmed)\n } catch (err) {\n throw new ValidationError(\n `readMemoryItemsFile: '${path}' is not valid JSON: ${(err as Error).message}`,\n )\n }\n return parseMemoryItems(parsed, path)\n }\n return trimmed\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line, i) => {\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (err) {\n throw new ValidationError(\n `readMemoryItemsFile: '${path}' line ${i + 1} is not valid JSON: ${(err as Error).message}`,\n )\n }\n return coerceMemoryItem(parsed, `${path}:${i + 1}`)\n })\n}\n\n/** What the memory bin resolved from its environment. */\nexport interface ResolvedMemoryEnv {\n items: MemoryItem[]\n serverName?: string\n logPath?: string\n}\n\n/**\n * Resolve the bin's memory from `AGENT_MEMORY_FILE` (durable store) and/or\n * `AGENT_MEMORY_ITEMS` (inline JSON rows; wins on id collision). Zero rows is\n * a boot FAILURE, matching the fail-closed materialization discipline.\n */\nexport function resolveMemoryFromEnv(env: Record<string, string | undefined>): ResolvedMemoryEnv {\n const filePath = env[MEMORY_FILE_ENV]\n const inlineRaw = env[MEMORY_ITEMS_ENV]\n const fromFile = filePath ? readMemoryItemsFile(filePath) : []\n let inline: MemoryItem[] = []\n if (inlineRaw) {\n let parsed: unknown\n try {\n parsed = JSON.parse(inlineRaw)\n } catch (err) {\n throw new ValidationError(\n `${MEMORY_ITEMS_ENV} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n inline = parseMemoryItems(parsed, MEMORY_ITEMS_ENV)\n }\n const byId = new Map<string, MemoryItem>()\n for (const item of fromFile) byId.set(item.id, item)\n for (const item of inline) byId.set(item.id, item)\n if (byId.size === 0) {\n throw new ValidationError(\n `memory bin: no memory items — set ${MEMORY_FILE_ENV} and/or ${MEMORY_ITEMS_ENV}; an EMPTY memory must never be served (a profile without memory omits the artifact)`,\n )\n }\n const serverName = env[MEMORY_NAME_ENV]\n const logPath = env[MEMORY_LOG_ENV]\n return {\n items: [...byId.values()],\n ...(serverName ? { serverName } : {}),\n ...(logPath ? { logPath } : {}),\n }\n}\n\nfunction coerceMemoryItem(row: unknown, at: string): MemoryItem {\n if (!row || typeof row !== 'object' || Array.isArray(row)) {\n throw new ValidationError(`${at}: memory item must be an object`)\n }\n const r = row as Record<string, unknown>\n if (typeof r.id !== 'string' || r.id.trim().length === 0) {\n throw new ValidationError(`${at}: 'id' must be a non-empty string`)\n }\n if (typeof r.text !== 'string' || r.text.trim().length === 0) {\n throw new ValidationError(`${at}: 'text' must be a non-empty string`)\n }\n let tags: string[] | undefined\n if (r.tags !== undefined) {\n if (!Array.isArray(r.tags) || r.tags.some((t) => typeof t !== 'string')) {\n throw new ValidationError(`${at}: 'tags' must be an array of strings`)\n }\n tags = r.tags as string[]\n }\n if (r.source !== undefined && typeof r.source !== 'string') {\n throw new ValidationError(`${at}: 'source' must be a string`)\n }\n return {\n id: r.id,\n text: r.text,\n ...(tags ? { tags } : {}),\n ...(typeof r.source === 'string' ? { source: r.source } : {}),\n }\n}\n\n/** Unique lowercase alphanumeric tokens of length >= 2. */\nfunction tokenize(text: string): string[] {\n return [\n ...new Set(\n text\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((t) => t.length >= 2),\n ),\n ]\n}\n\n/** Fraction of query tokens present in the item's text + tags (0..1). */\nfunction scoreItem(queryTokens: readonly string[], item: MemoryItem): number {\n if (queryTokens.length === 0) return 0\n const hay = new Set(tokenize(`${item.text} ${(item.tags ?? []).join(' ')}`))\n let hit = 0\n for (const t of queryTokens) if (hay.has(t)) hit += 1\n return hit / queryTokens.length\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as ConfigError, m as ValidationError } from "./errors-
|
|
1
|
+
import { i as ConfigError, m as ValidationError } from "./errors-DodWX-cb.js";
|
|
2
2
|
import { HARNESS_NATIVE_MODEL } from "@tangle-network/agent-eval";
|
|
3
3
|
//#region src/runtime/harness-role.ts
|
|
4
4
|
/**
|
|
@@ -300,4 +300,4 @@ function assertProfileModelsAllowed(profile, allowed) {
|
|
|
300
300
|
//#endregion
|
|
301
301
|
export { concreteProfileModel as a, profileModelExecutionSettings as c, agentHarness as d, harnessRunsAgent as f, concreteModelId as i, profileProviderModel as l, assertModelAllowed as n, enforceTokenLimits as o, assertProfileModelsAllowed as r, profileBridgeWireModel as s, assertExecutableAgentProfile as t, resolveRouterRetryPolicy as u };
|
|
302
302
|
|
|
303
|
-
//# sourceMappingURL=model-policy-
|
|
303
|
+
//# sourceMappingURL=model-policy-DKDyr-fc.js.map
|