@earendil-works/pi-agent-core 0.87.1 → 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/agent-loop.d.ts +27 -2
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +44 -15
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent.d.ts +9 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +3 -0
- package/dist/agent.js.map +1 -1
- package/dist/harness/agent-harness.d.ts.map +1 -1
- package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/dist/harness/compaction/compaction.js.map +1 -1
- package/dist/harness/compaction/utils.d.ts.map +1 -1
- package/dist/harness/compaction/utils.js.map +1 -1
- package/dist/harness/config.d.ts.map +1 -1
- package/dist/harness/config.js.map +1 -1
- package/dist/harness/context.d.ts.map +1 -1
- package/dist/harness/context.js.map +1 -1
- package/dist/harness/env/nodejs.d.ts.map +1 -1
- package/dist/harness/env/nodejs.js.map +1 -1
- package/dist/harness/events.d.ts.map +1 -1
- package/dist/harness/events.js.map +1 -1
- package/dist/harness/execution/assistant.d.ts.map +1 -1
- package/dist/harness/execution/assistant.js.map +1 -1
- package/dist/harness/execution/effect-gate.d.ts.map +1 -1
- package/dist/harness/execution/effect-gate.js.map +1 -1
- package/dist/harness/execution/tools.d.ts.map +1 -1
- package/dist/harness/execution/tools.js.map +1 -1
- package/dist/harness/hooks.d.ts.map +1 -1
- package/dist/harness/hooks.js.map +1 -1
- package/dist/harness/messages.d.ts.map +1 -1
- package/dist/harness/messages.js.map +1 -1
- package/dist/harness/pico3/bash.d.ts.map +1 -1
- package/dist/harness/pico3/bash.js.map +1 -1
- package/dist/harness/pico3/bounded.d.ts.map +1 -1
- package/dist/harness/pico3/bounded.js.map +1 -1
- package/dist/harness/pico3/chord.d.ts.map +1 -1
- package/dist/harness/pico3/chord.js.map +1 -1
- package/dist/harness/pico3/context.d.ts.map +1 -1
- package/dist/harness/pico3/context.js.map +1 -1
- package/dist/harness/pico3/harness.d.ts +4 -3
- package/dist/harness/pico3/harness.d.ts.map +1 -1
- package/dist/harness/pico3/harness.js.map +1 -1
- package/dist/harness/pico3/hooks.d.ts +2 -2
- package/dist/harness/pico3/hooks.d.ts.map +1 -1
- package/dist/harness/pico3/hooks.js.map +1 -1
- package/dist/harness/pico3/index.d.ts.map +1 -1
- package/dist/harness/pico3/jsonl.d.ts.map +1 -1
- package/dist/harness/pico3/jsonl.js.map +1 -1
- package/dist/harness/pico3/kinds/collapse.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/collapse.js.map +1 -1
- package/dist/harness/pico3/kinds/entries.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/frames.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/frames.js.map +1 -1
- package/dist/harness/pico3/kinds/generation.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/generation.js.map +1 -1
- package/dist/harness/pico3/kinds/job.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/job.js.map +1 -1
- package/dist/harness/pico3/kinds/plugin.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/plugin.js.map +1 -1
- package/dist/harness/pico3/kinds/post-tools.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/post-tools.js.map +1 -1
- package/dist/harness/pico3/kinds/task-api.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/task-api.js.map +1 -1
- package/dist/harness/pico3/kinds/tool.d.ts.map +1 -1
- package/dist/harness/pico3/kinds/tool.js.map +1 -1
- package/dist/harness/pico3/legacy-tracker.d.ts +11 -0
- package/dist/harness/pico3/legacy-tracker.d.ts.map +1 -0
- package/dist/harness/pico3/legacy-tracker.js +41 -0
- package/dist/harness/pico3/legacy-tracker.js.map +1 -0
- package/dist/harness/pico3/membrane.d.ts.map +1 -1
- package/dist/harness/pico3/membrane.js.map +1 -1
- package/dist/harness/pico3/memory.d.ts +1 -1
- package/dist/harness/pico3/memory.d.ts.map +1 -1
- package/dist/harness/pico3/memory.js.map +1 -1
- package/dist/harness/pico3/scheduler.d.ts +3 -0
- package/dist/harness/pico3/scheduler.d.ts.map +1 -1
- package/dist/harness/pico3/scheduler.js.map +1 -1
- package/dist/harness/pico3/session.d.ts +3 -2
- package/dist/harness/pico3/session.d.ts.map +1 -1
- package/dist/harness/pico3/session.js +5 -4
- package/dist/harness/pico3/session.js.map +1 -1
- package/dist/harness/pico3/system.d.ts +1 -1
- package/dist/harness/pico3/system.d.ts.map +1 -1
- package/dist/harness/pico3/system.js.map +1 -1
- package/dist/harness/pico3/types.d.ts +1 -1
- package/dist/harness/pico3/types.d.ts.map +1 -1
- package/dist/harness/pico3/types.js.map +1 -1
- package/dist/harness/pico3/view.d.ts.map +1 -1
- package/dist/harness/pico3/view.js +6 -12
- package/dist/harness/pico3/view.js.map +1 -1
- package/dist/harness/prompt-templates.d.ts.map +1 -1
- package/dist/harness/prompt-templates.js.map +1 -1
- package/dist/harness/result.d.ts.map +1 -1
- package/dist/harness/result.js.map +1 -1
- package/dist/harness/runtime/drive/boundary.d.ts.map +1 -1
- package/dist/harness/runtime/drive/boundary.js.map +1 -1
- package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -1
- package/dist/harness/runtime/drive/checkpoint.js.map +1 -1
- package/dist/harness/runtime/drive/deferred.d.ts.map +1 -1
- package/dist/harness/runtime/drive/deferred.js.map +1 -1
- package/dist/harness/runtime/drive/generation.d.ts.map +1 -1
- package/dist/harness/runtime/drive/generation.js.map +1 -1
- package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -1
- package/dist/harness/runtime/drive/reconcile.js.map +1 -1
- package/dist/harness/runtime/drive/recovery.d.ts.map +1 -1
- package/dist/harness/runtime/drive/recovery.js.map +1 -1
- package/dist/harness/runtime/drive/response.d.ts.map +1 -1
- package/dist/harness/runtime/drive/response.js.map +1 -1
- package/dist/harness/runtime/drive/retry.d.ts.map +1 -1
- package/dist/harness/runtime/drive/retry.js.map +1 -1
- package/dist/harness/runtime/drive/structural.d.ts.map +1 -1
- package/dist/harness/runtime/drive/structural.js.map +1 -1
- package/dist/harness/runtime/drive/terminal.d.ts.map +1 -1
- package/dist/harness/runtime/drive/terminal.js.map +1 -1
- package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -1
- package/dist/harness/runtime/drive/tool-placement.js.map +1 -1
- package/dist/harness/runtime/drive/tools.d.ts.map +1 -1
- package/dist/harness/runtime/drive/tools.js.map +1 -1
- package/dist/harness/runtime/drive.d.ts.map +1 -1
- package/dist/harness/runtime/drive.js.map +1 -1
- package/dist/harness/runtime/harness.d.ts.map +1 -1
- package/dist/harness/runtime/harness.js.map +1 -1
- package/dist/harness/runtime/index.d.ts.map +1 -1
- package/dist/harness/runtime/lane.d.ts +17 -0
- package/dist/harness/runtime/lane.d.ts.map +1 -1
- package/dist/harness/runtime/lane.js.map +1 -1
- package/dist/harness/runtime/progress.d.ts.map +1 -1
- package/dist/harness/runtime/progress.js.map +1 -1
- package/dist/harness/runtime/reducer.d.ts.map +1 -1
- package/dist/harness/runtime/reducer.js.map +1 -1
- package/dist/harness/runtime/restore.d.ts.map +1 -1
- package/dist/harness/runtime/restore.js.map +1 -1
- package/dist/harness/runtime/transcript.d.ts.map +1 -1
- package/dist/harness/runtime/transcript.js.map +1 -1
- package/dist/harness/runtime/types.d.ts.map +1 -1
- package/dist/harness/runtime/types.js.map +1 -1
- package/dist/harness/session/commit.d.ts.map +1 -1
- package/dist/harness/session/commit.js.map +1 -1
- package/dist/harness/session/context.d.ts.map +1 -1
- package/dist/harness/session/context.js.map +1 -1
- package/dist/harness/session/fork-policy.d.ts.map +1 -1
- package/dist/harness/session/fork-policy.js.map +1 -1
- package/dist/harness/session/fork.d.ts.map +1 -1
- package/dist/harness/session/fork.js.map +1 -1
- package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -1
- package/dist/harness/session/in-memory-storage-state.js.map +1 -1
- package/dist/harness/session/index.d.ts.map +1 -1
- package/dist/harness/session/jsonl/codec.d.ts.map +1 -1
- package/dist/harness/session/jsonl/codec.js.map +1 -1
- package/dist/harness/session/jsonl/fork.d.ts.map +1 -1
- package/dist/harness/session/jsonl/fork.js.map +1 -1
- package/dist/harness/session/jsonl/index.d.ts.map +1 -1
- package/dist/harness/session/jsonl/io.d.ts.map +1 -1
- package/dist/harness/session/jsonl/io.js.map +1 -1
- package/dist/harness/session/jsonl/legacy-v3.d.ts +1 -0
- package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -1
- package/dist/harness/session/jsonl/legacy-v3.js.map +1 -1
- package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
- package/dist/harness/session/jsonl/repo.js.map +1 -1
- package/dist/harness/session/jsonl/storage.d.ts +1 -0
- package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
- package/dist/harness/session/jsonl/storage.js.map +1 -1
- package/dist/harness/session/jsonl/types.d.ts.map +1 -1
- package/dist/harness/session/memory.d.ts.map +1 -1
- package/dist/harness/session/memory.js.map +1 -1
- package/dist/harness/session/mutation-line.d.ts.map +1 -1
- package/dist/harness/session/mutation-line.js.map +1 -1
- package/dist/harness/session/session.d.ts.map +1 -1
- package/dist/harness/session/session.js.map +1 -1
- package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -1
- package/dist/harness/session/testing/benchmark/datasets.js.map +1 -1
- package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -1
- package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -1
- package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -1
- package/dist/harness/session/testing/benchmark/storage.js.map +1 -1
- package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -1
- package/dist/harness/session/testing/conformance/session-repo.js.map +1 -1
- package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -1
- package/dist/harness/session/testing/conformance/storage.js.map +1 -1
- package/dist/harness/session/testing/gating-storage.d.ts.map +1 -1
- package/dist/harness/session/testing/gating-storage.js.map +1 -1
- package/dist/harness/session/testing/index.d.ts.map +1 -1
- package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -1
- package/dist/harness/session/testing/instrumented-storage.js.map +1 -1
- package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -1
- package/dist/harness/session/testing/storage-decorator.js.map +1 -1
- package/dist/harness/session/testing/types.d.ts.map +1 -1
- package/dist/harness/session/types.d.ts.map +1 -1
- package/dist/harness/session/types.js.map +1 -1
- package/dist/harness/session/values.d.ts +2 -2
- package/dist/harness/session/values.d.ts.map +1 -1
- package/dist/harness/session/values.js.map +1 -1
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/system-prompt.d.ts.map +1 -1
- package/dist/harness/system-prompt.js.map +1 -1
- package/dist/harness/telemetry.d.ts.map +1 -1
- package/dist/harness/telemetry.js.map +1 -1
- package/dist/harness/tools/bash.d.ts.map +1 -1
- package/dist/harness/tools/bash.js.map +1 -1
- package/dist/harness/tools/edit-diff.d.ts.map +1 -1
- package/dist/harness/tools/edit-diff.js.map +1 -1
- package/dist/harness/tools/edit.d.ts.map +1 -1
- package/dist/harness/tools/edit.js.map +1 -1
- package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/harness/tools/file-mutation-queue.js.map +1 -1
- package/dist/harness/tools/image.d.ts.map +1 -1
- package/dist/harness/tools/image.js.map +1 -1
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/path-utils.d.ts.map +1 -1
- package/dist/harness/tools/path-utils.js.map +1 -1
- package/dist/harness/tools/read.d.ts.map +1 -1
- package/dist/harness/tools/read.js.map +1 -1
- package/dist/harness/tools/tool-context.d.ts.map +1 -1
- package/dist/harness/tools/write.d.ts.map +1 -1
- package/dist/harness/tools/write.js.map +1 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -1
- package/dist/harness/utils/adaptive-publisher.js.map +1 -1
- package/dist/harness/utils/output-capture.d.ts.map +1 -1
- package/dist/harness/utils/output-capture.js.map +1 -1
- package/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/dist/harness/utils/shell-output.js.map +1 -1
- package/dist/harness/utils/truncate.d.ts.map +1 -1
- package/dist/harness/utils/truncate.js.map +1 -1
- package/dist/harness/utils/usage.d.ts.map +1 -1
- package/dist/harness/utils/usage.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js.map +1 -1
- package/dist/search/index.d.ts.map +1 -1
- package/dist/stream-fn.d.ts.map +1 -1
- package/dist/stream-fn.js.map +1 -1
- package/dist/types.d.ts +30 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +9 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/generation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, Tool } from \"@earendil-works/pi-ai\";\nimport type { AgentMessage } from \"../../../types.ts\";\nimport { type Context, getTelemetryContext, withAbortSignal } from \"../../context.ts\";\nimport { type HarnessAssistantStreamConfig, streamHarnessAssistant } from \"../../execution/assistant.ts\";\nimport { applyStreamOptionsPatch } from \"../../hooks.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype AssistantEffectPendingOperation,\n\ttype AssistantReadyOperation,\n\ttype AssistantRetryWaitOperation,\n\ttype JsonValue,\n\ttype OperationError,\n\ttype OperationScope,\n\toperationScopeOf,\n\ttype SettledAssistantMessage,\n} from \"../../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../../types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { readBoundedContext } from \"../transcript.ts\";\nimport type { ContinueOperationResult, Drive, ProcedureResult } from \"../types.ts\";\nimport { openAssistantResponse, publishConfigurationFailure, publishResponse } from \"./response.ts\";\nimport { waitUntil } from \"./retry.ts\";\n\n/** Assistant effect-pending payload without the run-wide scope fields. */\ntype AssistantEffectPending = Omit<AssistantEffectPendingOperation, keyof OperationScope>;\n\ntype PreparedGeneration = {\n\tkind: \"ready\";\n\tmodel: Model<Api>;\n\ttools: Tool[];\n\tmessages: AgentMessage[];\n\tsystemPrompt: string;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttoProviderMessages: HarnessAssistantStreamConfig[\"toProviderMessages\"];\n};\n\ntype GenerationPreparation =\n\t| PreparedGeneration\n\t| { kind: \"configuration_failure\"; error: OperationError }\n\t| { kind: \"cancel_requested\" };\n\nfunction configurationError(\n\tcode: \"model_unavailable\" | \"configured_tools_unavailable\",\n\tdetails: JsonValue,\n): OperationError {\n\treturn {\n\t\tcode,\n\t\tmessage:\n\t\t\tcode === \"model_unavailable\"\n\t\t\t\t? \"The configured model is unavailable in this process\"\n\t\t\t\t: \"One or more configured tools are unavailable in this process\",\n\t\tdetails,\n\t};\n}\n\nasync function resolveSystemPrompt<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tcontext: Context,\n): Promise<string> {\n\tconst config = lane.readConfig();\n\tif (config.systemPrompt === undefined) return \"\";\n\tif (typeof config.systemPrompt === \"string\") return config.systemPrompt;\n\tconst source = config.toolContext;\n\tconst toolContext = typeof source === \"function\" ? await source(context) : source;\n\treturn config.systemPrompt(toolContext as TContext, context);\n}\n\nasync function prepareGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantReadyOperation,\n): Promise<GenerationPreparation> {\n\tconst identity = generation.generationContext.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) {\n\t\treturn { kind: \"configuration_failure\", error: configurationError(\"model_unavailable\", identity) };\n\t}\n\n\tconst config = lane.readConfig();\n\tconst toolsByName = new Map(config.tools.map((tool) => [tool.name, tool]));\n\tconst missingTools = generation.generationContext.configuration.activeToolNames.filter(\n\t\t(name) => !toolsByName.has(name),\n\t);\n\tif (missingTools.length !== 0) {\n\t\treturn {\n\t\t\tkind: \"configuration_failure\",\n\t\t\terror: configurationError(\"configured_tools_unavailable\", { tools: missingTools }),\n\t\t};\n\t}\n\tconst tools: Tool[] = generation.generationContext.configuration.activeToolNames.map((name) => {\n\t\tconst tool = toolsByName.get(name);\n\t\tif (tool === undefined) throw new SessionInvariantError(`Configured tool ${name} disappeared during resolution`);\n\t\treturn {\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t\t...(tool.constrainedSampling === undefined ? {} : { constrainedSampling: tool.constrainedSampling }),\n\t\t};\n\t});\n\n\tconst messages = await readBoundedContext(lane, drive, generation);\n\tif (messages.kind === \"cancel_requested\") return messages;\n\tconst systemPrompt = await resolveSystemPrompt(lane, drive.context);\n\tconst beforeRequest = await lane.hooks.runWithGate(\n\t\t\"before_request\",\n\t\t{\n\t\t\tlane: lane.name,\n\t\t\trunId: drive.operationId,\n\t\t\tmodel,\n\t\t\tstep: \"assistant\",\n\t\t\tattempt: generation.nextAttempt,\n\t\t\tstreamOptions: generation.generationContext.streamOptions,\n\t\t},\n\t\tdrive.gate,\n\t\tdrive.context,\n\t);\n\tconst streamOptions =\n\t\tbeforeRequest?.streamOptions === undefined\n\t\t\t? generation.generationContext.streamOptions\n\t\t\t: applyStreamOptionsPatch(generation.generationContext.streamOptions, beforeRequest.streamOptions);\n\treturn {\n\t\tkind: \"ready\",\n\t\tmodel,\n\t\ttools,\n\t\tmessages: messages.value,\n\t\tsystemPrompt,\n\t\tstreamOptions,\n\t\ttoProviderMessages: config.toProviderMessages,\n\t};\n}\n\nasync function publishGenerationIntent<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tready: AssistantReadyOperation,\n\tprepared: PreparedGeneration,\n): Promise<ContinueOperationResult<AssistantEffectPendingOperation>> {\n\tconst at = Date.now();\n\tconst pending: AssistantEffectPending = {\n\t\tat: \"assistant.effect_pending\",\n\t\tgenerationContext: ready.generationContext,\n\t\tattempt: ready.nextAttempt,\n\t\tresponseEntryId: lane.session.idGenerator.next(at),\n\t\tusageId: lane.session.idGenerator.next(at),\n\t\tintendedOutputLimit: prepared.model.maxTokens,\n\t\tcontextWindow: prepared.model.contextWindow,\n\t};\n\treturn lane.continueOperation(\n\t\tready,\n\t\t(_state, current) => {\n\t\t\tconst nextState: AssistantEffectPendingOperation = { ...operationScopeOf(current), ...pending };\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => nextState,\n\t\t\t\tevents: () =>\n\t\t\t\t\tready.nextAttempt === 1\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"turn_start\",\n\t\t\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\t\t\tturnId: ready.generationContext.stepId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\nasync function performGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tintent: AssistantEffectPendingOperation,\n\tprepared: PreparedGeneration,\n): Promise<SettledAssistantMessage> {\n\tconst response = openAssistantResponse(lane, drive, intent.responseEntryId);\n\ttry {\n\t\treturn await streamHarnessAssistant(\n\t\t\tprepared.messages,\n\t\t\t{\n\t\t\t\tmodel: prepared.model,\n\t\t\t\tsystemPrompt: prepared.systemPrompt,\n\t\t\t\ttools: prepared.tools,\n\t\t\t\tthinkingLevel: intent.generationContext.configuration.thinkingLevel,\n\t\t\t\tstreamOptions: prepared.streamOptions,\n\t\t\t\ttransformContext: async (requestContext, context) => {\n\t\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\t\"transform_context\",\n\t\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, ...requestContext },\n\t\t\t\t\t\tdrive.gate,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessages: result?.messages ?? requestContext.messages,\n\t\t\t\t\t\tsystemPrompt: result?.systemPrompt ?? requestContext.systemPrompt,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\ttoProviderMessages: prepared.toProviderMessages,\n\t\t\t\tbeforePayload: async (payload, requestModel, context) => {\n\t\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\t\"before_payload\",\n\t\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, model: requestModel, payload },\n\t\t\t\t\t\tdrive.gate,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn result?.payload;\n\t\t\t\t},\n\t\t\t\tafterResponse: response.afterResponse,\n\t\t\t\trequest: (aiContext, options, context) => {\n\t\t\t\t\tconst admitted = withAbortSignal(drive.gate.signal, context);\n\t\t\t\t\treturn drive.gate.admit(() =>\n\t\t\t\t\t\tlane.models.streamSimple(prepared.model, aiContext, {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tsessionId: `${lane.session.metadata.id}:${lane.name}`,\n\t\t\t\t\t\t\tsignal: admitted.abortSignal,\n\t\t\t\t\t\t\ttelemetryContext: getTelemetryContext(admitted),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tobserver: response.observer,\n\t\t\t},\n\t\t\tdrive.context,\n\t\t);\n\t} finally {\n\t\tawait response.close();\n\t}\n}\n\n/** Advance one durable assistant retry wait according to this pass's local wait policy. */\nexport async function runRetryWait<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantRetryWaitOperation,\n): Promise<ProcedureResult> {\n\tif (Date.now() < generation.notBefore) {\n\t\tif (!drive.waitForRetry) {\n\t\t\treturn {\n\t\t\t\tkind: \"waiting\",\n\t\t\t\toutcome: {\n\t\t\t\t\tkind: \"waiting\",\n\t\t\t\t\toperationId: drive.operationId,\n\t\t\t\t\treason: \"retry\",\n\t\t\t\t\tnotBefore: generation.notBefore,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tawait drive.gate.admit(() => waitUntil(generation.notBefore, drive.gate.signal));\n\t}\n\n\tconst result = await lane.continueOperation(\n\t\tgeneration,\n\t\t(_state, current) => {\n\t\t\tconst nextState: AssistantReadyOperation = {\n\t\t\t\t...operationScopeOf(current),\n\t\t\t\tat: \"assistant.ready\",\n\t\t\t\tgenerationContext: generation.generationContext,\n\t\t\t\tnextAttempt: generation.nextAttempt,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => ({ kind: \"continue\" }) as const,\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"retry_start\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstep: generation.generationContext.stepId,\n\t\t\t\t\t\tattempt: generation.nextAttempt,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n\treturn result.kind === \"cancel_requested\" ? { kind: \"continue\" } : result.value;\n}\n\n/** Execute one ready assistant generation or advance its durable retry wait. */\nexport async function runGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantReadyOperation | AssistantRetryWaitOperation,\n): Promise<ProcedureResult> {\n\tif (generation.at === \"assistant.retry_wait\") return runRetryWait(lane, drive, generation);\n\n\tconst prepared = await prepareGeneration(lane, drive, generation);\n\tif (prepared.kind === \"configuration_failure\") {\n\t\treturn publishConfigurationFailure(lane, drive, generation, prepared.error);\n\t}\n\tif (prepared.kind === \"cancel_requested\") return { kind: \"continue\" };\n\n\tconst intent = await publishGenerationIntent(lane, drive, generation, prepared);\n\tif (intent.kind === \"cancel_requested\") return { kind: \"continue\" };\n\tconst response = await performGeneration(lane, drive, intent.value, prepared);\n\treturn publishResponse(lane, drive, intent.value, response);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/generation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, Tool } from \"@earendil-works/pi-ai\";\nimport type { AgentMessage } from \"../../../types.ts\";\nimport { type Context, getTelemetryContext, withAbortSignal } from \"../../context.ts\";\nimport { type HarnessAssistantStreamConfig, streamHarnessAssistant } from \"../../execution/assistant.ts\";\nimport { applyStreamOptionsPatch } from \"../../hooks.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype AssistantEffectPendingOperation,\n\ttype AssistantReadyOperation,\n\ttype AssistantRetryWaitOperation,\n\ttype JsonValue,\n\ttype OperationError,\n\ttype OperationScope,\n\toperationScopeOf,\n\ttype SettledAssistantMessage,\n} from \"../../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../../types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { readBoundedContext } from \"../transcript.ts\";\nimport type { ContinueOperationResult, Drive, ProcedureResult } from \"../types.ts\";\nimport { openAssistantResponse, publishConfigurationFailure, publishResponse } from \"./response.ts\";\nimport { waitUntil } from \"./retry.ts\";\n\n/** Assistant effect-pending payload without the run-wide scope fields. */\ntype AssistantEffectPending = Omit<AssistantEffectPendingOperation, keyof OperationScope>;\n\ntype PreparedGeneration = {\n\tkind: \"ready\";\n\tmodel: Model<Api>;\n\ttools: Tool[];\n\tmessages: AgentMessage[];\n\tsystemPrompt: string;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttoProviderMessages: HarnessAssistantStreamConfig[\"toProviderMessages\"];\n};\n\ntype GenerationPreparation =\n\t| PreparedGeneration\n\t| { kind: \"configuration_failure\"; error: OperationError }\n\t| { kind: \"cancel_requested\" };\n\nfunction configurationError(\n\tcode: \"model_unavailable\" | \"configured_tools_unavailable\",\n\tdetails: JsonValue,\n): OperationError {\n\treturn {\n\t\tcode,\n\t\tmessage:\n\t\t\tcode === \"model_unavailable\"\n\t\t\t\t? \"The configured model is unavailable in this process\"\n\t\t\t\t: \"One or more configured tools are unavailable in this process\",\n\t\tdetails,\n\t};\n}\n\nasync function resolveSystemPrompt<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tcontext: Context,\n): Promise<string> {\n\tconst config = lane.readConfig();\n\tif (config.systemPrompt === undefined) return \"\";\n\tif (typeof config.systemPrompt === \"string\") return config.systemPrompt;\n\tconst source = config.toolContext;\n\tconst toolContext = typeof source === \"function\" ? await source(context) : source;\n\treturn config.systemPrompt(toolContext as TContext, context);\n}\n\nasync function prepareGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantReadyOperation,\n): Promise<GenerationPreparation> {\n\tconst identity = generation.generationContext.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) {\n\t\treturn { kind: \"configuration_failure\", error: configurationError(\"model_unavailable\", identity) };\n\t}\n\n\tconst config = lane.readConfig();\n\tconst toolsByName = new Map(config.tools.map((tool) => [tool.name, tool]));\n\tconst missingTools = generation.generationContext.configuration.activeToolNames.filter(\n\t\t(name) => !toolsByName.has(name),\n\t);\n\tif (missingTools.length !== 0) {\n\t\treturn {\n\t\t\tkind: \"configuration_failure\",\n\t\t\terror: configurationError(\"configured_tools_unavailable\", { tools: missingTools }),\n\t\t};\n\t}\n\tconst tools: Tool[] = generation.generationContext.configuration.activeToolNames.map((name) => {\n\t\tconst tool = toolsByName.get(name);\n\t\tif (tool === undefined) throw new SessionInvariantError(`Configured tool ${name} disappeared during resolution`);\n\t\treturn {\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters,\n\t\t\t...(tool.constrainedSampling === undefined ? {} : { constrainedSampling: tool.constrainedSampling }),\n\t\t};\n\t});\n\n\tconst messages = await readBoundedContext(lane, drive, generation);\n\tif (messages.kind === \"cancel_requested\") return messages;\n\tconst systemPrompt = await resolveSystemPrompt(lane, drive.context);\n\tconst beforeRequest = await lane.hooks.runWithGate(\n\t\t\"before_request\",\n\t\t{\n\t\t\tlane: lane.name,\n\t\t\trunId: drive.operationId,\n\t\t\tmodel,\n\t\t\tstep: \"assistant\",\n\t\t\tattempt: generation.nextAttempt,\n\t\t\tstreamOptions: generation.generationContext.streamOptions,\n\t\t},\n\t\tdrive.gate,\n\t\tdrive.context,\n\t);\n\tconst streamOptions =\n\t\tbeforeRequest?.streamOptions === undefined\n\t\t\t? generation.generationContext.streamOptions\n\t\t\t: applyStreamOptionsPatch(generation.generationContext.streamOptions, beforeRequest.streamOptions);\n\treturn {\n\t\tkind: \"ready\",\n\t\tmodel,\n\t\ttools,\n\t\tmessages: messages.value,\n\t\tsystemPrompt,\n\t\tstreamOptions,\n\t\ttoProviderMessages: config.toProviderMessages,\n\t};\n}\n\nasync function publishGenerationIntent<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tready: AssistantReadyOperation,\n\tprepared: PreparedGeneration,\n): Promise<ContinueOperationResult<AssistantEffectPendingOperation>> {\n\tconst at = Date.now();\n\tconst pending: AssistantEffectPending = {\n\t\tat: \"assistant.effect_pending\",\n\t\tgenerationContext: ready.generationContext,\n\t\tattempt: ready.nextAttempt,\n\t\tresponseEntryId: lane.session.idGenerator.next(at),\n\t\tusageId: lane.session.idGenerator.next(at),\n\t\tintendedOutputLimit: prepared.model.maxTokens,\n\t\tcontextWindow: prepared.model.contextWindow,\n\t};\n\treturn lane.continueOperation(\n\t\tready,\n\t\t(_state, current) => {\n\t\t\tconst nextState: AssistantEffectPendingOperation = { ...operationScopeOf(current), ...pending };\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => nextState,\n\t\t\t\tevents: () =>\n\t\t\t\t\tready.nextAttempt === 1\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"turn_start\",\n\t\t\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\t\t\tturnId: ready.generationContext.stepId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\nasync function performGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tintent: AssistantEffectPendingOperation,\n\tprepared: PreparedGeneration,\n): Promise<SettledAssistantMessage> {\n\tconst response = openAssistantResponse(lane, drive, intent.responseEntryId);\n\ttry {\n\t\treturn await streamHarnessAssistant(\n\t\t\tprepared.messages,\n\t\t\t{\n\t\t\t\tmodel: prepared.model,\n\t\t\t\tsystemPrompt: prepared.systemPrompt,\n\t\t\t\ttools: prepared.tools,\n\t\t\t\tthinkingLevel: intent.generationContext.configuration.thinkingLevel,\n\t\t\t\tstreamOptions: prepared.streamOptions,\n\t\t\t\ttransformContext: async (requestContext, context) => {\n\t\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\t\"transform_context\",\n\t\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, ...requestContext },\n\t\t\t\t\t\tdrive.gate,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessages: result?.messages ?? requestContext.messages,\n\t\t\t\t\t\tsystemPrompt: result?.systemPrompt ?? requestContext.systemPrompt,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\ttoProviderMessages: prepared.toProviderMessages,\n\t\t\t\tbeforePayload: async (payload, requestModel, context) => {\n\t\t\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\t\t\"before_payload\",\n\t\t\t\t\t\t{ lane: lane.name, runId: drive.operationId, model: requestModel, payload },\n\t\t\t\t\t\tdrive.gate,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t);\n\t\t\t\t\treturn result?.payload;\n\t\t\t\t},\n\t\t\t\tafterResponse: response.afterResponse,\n\t\t\t\trequest: (aiContext, options, context) => {\n\t\t\t\t\tconst admitted = withAbortSignal(drive.gate.signal, context);\n\t\t\t\t\treturn drive.gate.admit(() =>\n\t\t\t\t\t\tlane.models.streamSimple(prepared.model, aiContext, {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tsessionId: `${lane.session.metadata.id}:${lane.name}`,\n\t\t\t\t\t\t\tsignal: admitted.abortSignal,\n\t\t\t\t\t\t\ttelemetryContext: getTelemetryContext(admitted),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tobserver: response.observer,\n\t\t\t},\n\t\t\tdrive.context,\n\t\t);\n\t} finally {\n\t\tawait response.close();\n\t}\n}\n\n/** Advance one durable assistant retry wait according to this pass's local wait policy. */\nexport async function runRetryWait<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantRetryWaitOperation,\n): Promise<ProcedureResult> {\n\tif (Date.now() < generation.notBefore) {\n\t\tif (!drive.waitForRetry) {\n\t\t\treturn {\n\t\t\t\tkind: \"waiting\",\n\t\t\t\toutcome: {\n\t\t\t\t\tkind: \"waiting\",\n\t\t\t\t\toperationId: drive.operationId,\n\t\t\t\t\treason: \"retry\",\n\t\t\t\t\tnotBefore: generation.notBefore,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tawait drive.gate.admit(() => waitUntil(generation.notBefore, drive.gate.signal));\n\t}\n\n\tconst result = await lane.continueOperation(\n\t\tgeneration,\n\t\t(_state, current) => {\n\t\t\tconst nextState: AssistantReadyOperation = {\n\t\t\t\t...operationScopeOf(current),\n\t\t\t\tat: \"assistant.ready\",\n\t\t\t\tgenerationContext: generation.generationContext,\n\t\t\t\tnextAttempt: generation.nextAttempt,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites: [],\n\t\t\t\toperationState: nextState,\n\t\t\t\tmaterialize: () => ({ kind: \"continue\" }) as const,\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"retry_start\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstep: generation.generationContext.stepId,\n\t\t\t\t\t\tattempt: generation.nextAttempt,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n\treturn result.kind === \"cancel_requested\" ? { kind: \"continue\" } : result.value;\n}\n\n/** Execute one ready assistant generation or advance its durable retry wait. */\nexport async function runGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantReadyOperation | AssistantRetryWaitOperation,\n): Promise<ProcedureResult> {\n\tif (generation.at === \"assistant.retry_wait\") return runRetryWait(lane, drive, generation);\n\n\tconst prepared = await prepareGeneration(lane, drive, generation);\n\tif (prepared.kind === \"configuration_failure\") {\n\t\treturn publishConfigurationFailure(lane, drive, generation, prepared.error);\n\t}\n\tif (prepared.kind === \"cancel_requested\") return { kind: \"continue\" };\n\n\tconst intent = await publishGenerationIntent(lane, drive, generation, prepared);\n\tif (intent.kind === \"cancel_requested\") return { kind: \"continue\" };\n\tconst response = await performGeneration(lane, drive, intent.value, prepared);\n\treturn publishResponse(lane, drive, intent.value, response);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/reconcile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwH1D,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EAC3E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,eAAe,CAAC,CAsC1B"
|
|
1
|
+
{"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/reconcile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwH1D,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EAC3E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,eAAe,CAAC,CAsC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/reconcile.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeferredHandle } from \"@earendil-works/pi-ai\";\nimport type { HarnessEvent } from \"../../agent-harness.ts\";\nimport { getTelemetryContext } from \"../../context.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport type {\n\tDeferredEffectPendingOperation,\n\tDeferredSuspendedOperation,\n\tOperationState,\n} from \"../../session/types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { readDeferredSourceHandle } from \"./deferred.ts\";\nimport { recoverCancelledAssistantEffect } from \"./recovery.ts\";\nimport { operationCleanupWrites, operationResultRecord } from \"./terminal.ts\";\nimport { runTools } from \"./tools.ts\";\n\nasync function cancelDeferredBestEffort<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n\thandle: DeferredHandle,\n): Promise<void> {\n\tconst identity = deferred.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) return;\n\ttry {\n\t\tawait lane.models.cancelDeferred(model, handle, {\n\t\t\tsignal: drive.closeSignal,\n\t\t\ttelemetryContext: getTelemetryContext(drive.context),\n\t\t\ttimeoutMs: deferred.streamOptions.timeoutMs,\n\t\t\tmaxRetries: deferred.streamOptions.maxRetries,\n\t\t\tmaxRetryDelayMs: deferred.streamOptions.maxRetryDelayMs,\n\t\t\theaders: deferred.streamOptions.headers,\n\t\t});\n\t} catch {\n\t\t// Remote cancellation is best-effort; durable local reconciliation must continue.\n\t}\n}\n\nasync function readDeferredHandle<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n): Promise<DeferredHandle> {\n\treturn lane.settleOperation(\n\t\tdeferred,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readDeferredSourceHandle(reader, deferred, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n}\n\nasync function publishAbortedTerminal<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcapability: OperationState,\n): Promise<ProcedureResult> {\n\treturn lane.settleOperation(\n\t\tcapability,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tif (current.control.status !== \"cancel_requested\") {\n\t\t\t\tthrow new SessionInvariantError(\"Cancellation reconciliation requires cancelled durable control\");\n\t\t\t}\n\t\t\tconst record = operationResultRecord(meta, \"aborted\", state.tipId);\n\t\t\tconst cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\tconst events: HarnessEvent[] = [];\n\t\t\tif (meta.intent.kind === \"run\") {\n\t\t\t\tswitch (current.at) {\n\t\t\t\t\tcase \"summary.deciding\":\n\t\t\t\t\tcase \"summary.ready\":\n\t\t\t\t\tcase \"summary.effect_pending\":\n\t\t\t\t\tcase \"summary.retry_wait\":\n\t\t\t\t\t\tif (current.task.boundary.kind !== \"resume_checkpoint\" || current.task.reason === undefined) {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(\"Cancelled run summary has an invalid result boundary\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\treason: current.task.reason,\n\t\t\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t} else if (meta.intent.kind === \"compaction\") {\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\treason: \"manual\",\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"navigation_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"finish\",\n\t\t\t\twrites: cleanup,\n\t\t\t\trecord,\n\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\tevents: () => events,\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\n/** Advance one cancelled durable leaf without starting new ordinary work. */\nexport async function reconcileOperation<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n): Promise<ProcedureResult> {\n\tconst operation = lane.state.operation;\n\tif (operation === null || operation.meta.operationId !== drive.operationId) {\n\t\tthrow new SessionInvariantError(`Drive ${drive.operationId} has no matching operation to reconcile`);\n\t}\n\tif (operation.state.control.status !== \"cancel_requested\") {\n\t\tthrow new SessionInvariantError(`Operation ${drive.operationId} is not cancelled`);\n\t}\n\tdrive.beginAbort(Promise.resolve());\n\tdrive.signalAbort();\n\n\tconst state = operation.state;\n\tswitch (state.at) {\n\t\tcase \"assistant.effect_pending\":\n\t\t\treturn recoverCancelledAssistantEffect(lane, drive, state);\n\t\tcase \"tools\":\n\t\t\treturn runTools(lane, drive, state);\n\t\tcase \"deferred.suspended\": {\n\t\t\tconst handle = await readDeferredHandle(lane, drive, state);\n\t\t\tawait cancelDeferredBestEffort(lane, drive, state, handle);\n\t\t\treturn publishAbortedTerminal(lane, drive, state);\n\t\t}\n\t\tcase \"deferred.effect_pending\": {\n\t\t\tconst handle = await readDeferredHandle(lane, drive, state);\n\t\t\tawait cancelDeferredBestEffort(lane, drive, state, handle);\n\t\t\treturn recoverCancelledAssistantEffect(lane, drive, state);\n\t\t}\n\t\tcase \"starting\":\n\t\tcase \"checkpoint\":\n\t\tcase \"assistant.ready\":\n\t\tcase \"assistant.retry_wait\":\n\t\tcase \"summary.deciding\":\n\t\tcase \"summary.ready\":\n\t\tcase \"summary.effect_pending\":\n\t\tcase \"summary.retry_wait\":\n\t\tcase \"navigation.ready_to_commit\":\n\t\t\treturn publishAbortedTerminal(lane, drive, state);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/reconcile.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeferredHandle } from \"@earendil-works/pi-ai\";\nimport type { HarnessEvent } from \"../../agent-harness.ts\";\nimport { getTelemetryContext } from \"../../context.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport type {\n\tDeferredEffectPendingOperation,\n\tDeferredSuspendedOperation,\n\tOperationState,\n} from \"../../session/types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { readDeferredSourceHandle } from \"./deferred.ts\";\nimport { recoverCancelledAssistantEffect } from \"./recovery.ts\";\nimport { operationCleanupWrites, operationResultRecord } from \"./terminal.ts\";\nimport { runTools } from \"./tools.ts\";\n\nasync function cancelDeferredBestEffort<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n\thandle: DeferredHandle,\n): Promise<void> {\n\tconst identity = deferred.configuration.model;\n\tconst model = lane.models.getModel(identity.provider, identity.modelId);\n\tif (model === undefined) return;\n\ttry {\n\t\tawait lane.models.cancelDeferred(model, handle, {\n\t\t\tsignal: drive.closeSignal,\n\t\t\ttelemetryContext: getTelemetryContext(drive.context),\n\t\t\ttimeoutMs: deferred.streamOptions.timeoutMs,\n\t\t\tmaxRetries: deferred.streamOptions.maxRetries,\n\t\t\tmaxRetryDelayMs: deferred.streamOptions.maxRetryDelayMs,\n\t\t\theaders: deferred.streamOptions.headers,\n\t\t});\n\t} catch {\n\t\t// Remote cancellation is best-effort; durable local reconciliation must continue.\n\t}\n}\n\nasync function readDeferredHandle<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tdeferred: DeferredSuspendedOperation | DeferredEffectPendingOperation,\n): Promise<DeferredHandle> {\n\treturn lane.settleOperation(\n\t\tdeferred,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readDeferredSourceHandle(reader, deferred, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n}\n\nasync function publishAbortedTerminal<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcapability: OperationState,\n): Promise<ProcedureResult> {\n\treturn lane.settleOperation(\n\t\tcapability,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tif (current.control.status !== \"cancel_requested\") {\n\t\t\t\tthrow new SessionInvariantError(\"Cancellation reconciliation requires cancelled durable control\");\n\t\t\t}\n\t\t\tconst record = operationResultRecord(meta, \"aborted\", state.tipId);\n\t\t\tconst cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\tconst events: HarnessEvent[] = [];\n\t\t\tif (meta.intent.kind === \"run\") {\n\t\t\t\tswitch (current.at) {\n\t\t\t\t\tcase \"summary.deciding\":\n\t\t\t\t\tcase \"summary.ready\":\n\t\t\t\t\tcase \"summary.effect_pending\":\n\t\t\t\t\tcase \"summary.retry_wait\":\n\t\t\t\t\t\tif (current.task.boundary.kind !== \"resume_checkpoint\" || current.task.reason === undefined) {\n\t\t\t\t\t\t\tthrow new SessionInvariantError(\"Cancelled run summary has an invalid result boundary\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevents.push({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\treason: current.task.reason,\n\t\t\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t} else if (meta.intent.kind === \"compaction\") {\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\treason: \"manual\",\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tevents.push({\n\t\t\t\t\ttype: \"navigation_end\",\n\t\t\t\t\tlane: lane.name,\n\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\tstatus: \"aborted\",\n\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"finish\",\n\t\t\t\twrites: cleanup,\n\t\t\t\trecord,\n\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\tevents: () => events,\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\n/** Advance one cancelled durable leaf without starting new ordinary work. */\nexport async function reconcileOperation<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n): Promise<ProcedureResult> {\n\tconst operation = lane.state.operation;\n\tif (operation === null || operation.meta.operationId !== drive.operationId) {\n\t\tthrow new SessionInvariantError(`Drive ${drive.operationId} has no matching operation to reconcile`);\n\t}\n\tif (operation.state.control.status !== \"cancel_requested\") {\n\t\tthrow new SessionInvariantError(`Operation ${drive.operationId} is not cancelled`);\n\t}\n\tdrive.beginAbort(Promise.resolve());\n\tdrive.signalAbort();\n\n\tconst state = operation.state;\n\tswitch (state.at) {\n\t\tcase \"assistant.effect_pending\":\n\t\t\treturn recoverCancelledAssistantEffect(lane, drive, state);\n\t\tcase \"tools\":\n\t\t\treturn runTools(lane, drive, state);\n\t\tcase \"deferred.suspended\": {\n\t\t\tconst handle = await readDeferredHandle(lane, drive, state);\n\t\t\tawait cancelDeferredBestEffort(lane, drive, state, handle);\n\t\t\treturn publishAbortedTerminal(lane, drive, state);\n\t\t}\n\t\tcase \"deferred.effect_pending\": {\n\t\t\tconst handle = await readDeferredHandle(lane, drive, state);\n\t\t\tawait cancelDeferredBestEffort(lane, drive, state, handle);\n\t\t\treturn recoverCancelledAssistantEffect(lane, drive, state);\n\t\t}\n\t\tcase \"starting\":\n\t\tcase \"checkpoint\":\n\t\tcase \"assistant.ready\":\n\t\tcase \"assistant.retry_wait\":\n\t\tcase \"summary.deciding\":\n\t\tcase \"summary.ready\":\n\t\tcase \"summary.effect_pending\":\n\t\tcase \"summary.retry_wait\":\n\t\tcase \"navigation.ready_to_commit\":\n\t\t\treturn publishAbortedTerminal(lane, drive, state);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/recovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,+BAA+B,EAC/B,8BAA8B,EAG9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiC1D,kHAAkH;AAClH,wBAAsB,0BAA0B,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,+BAA+B,GACzC,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED,uGAAuG;AACvG,wBAAsB,+BAA+B,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,+BAA+B,GAAG,8BAA8B,GACtE,OAAO,CAAC,eAAe,CAAC,CAmC1B"
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/recovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,+BAA+B,EAC/B,8BAA8B,EAG9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiC1D,kHAAkH;AAClH,wBAAsB,0BAA0B,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,+BAA+B,GACzC,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED,uGAAuG;AACvG,wBAAsB,+BAA+B,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,+BAA+B,GAAG,8BAA8B,GACtE,OAAO,CAAC,eAAe,CAAC,CAmC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAQ5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,GAAG;IAClB,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;CACpE,CAAC;AAEF,SAAS,2BAA2B,CACnC,QAAoC,EACpC,OAAqC
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/recovery.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AssistantMessage, reduceAssistantMessageFrames } from \"@earendil-works/pi-ai\";\nimport type {\n\tAssistantEffectPendingOperation,\n\tDeferredEffectPendingOperation,\n\tLaneConfiguration,\n\tSettledAssistantMessage,\n} from \"../../session/types.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { readAssistantFrames } from \"../progress.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { publishResponse } from \"./response.ts\";\n\nconst ZERO_USAGE = {\n\tinput: 0,\n\toutput: 0,\n\tcacheRead: 0,\n\tcacheWrite: 0,\n\ttotalTokens: 0,\n\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n};\n\nfunction interruptedAssistantMessage(\n\tidentity: LaneConfiguration[\"model\"],\n\tpartial: AssistantMessage | undefined,\n): SettledAssistantMessage {\n\tconst warning =\n\t\t\"Assistant request was interrupted. The preceding content is the latest committed partial; newer live output may be missing and the external outcome is unknown.\";\n\treturn partial === undefined\n\t\t? {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: [],\n\t\t\t\tapi: \"unknown\",\n\t\t\t\tprovider: identity.provider,\n\t\t\t\tmodel: identity.modelId,\n\t\t\t\tusage: ZERO_USAGE,\n\t\t\t\tstopReason: \"error\",\n\t\t\t\terrorMessage: warning,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t}\n\t\t: { ...partial, usage: ZERO_USAGE, stopReason: \"error\", errorMessage: warning };\n}\n\n/** Settle an orphaned assistant request from its bounded committed frame prefix without another provider call. */\nexport async function recoverAssistantGeneration<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tgeneration: AssistantEffectPendingOperation,\n): Promise<ProcedureResult> {\n\tconst frames = await lane.continueOperation(\n\t\tgeneration,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readAssistantFrames(reader, drive.operationId, generation.responseEntryId, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n\tif (frames.kind === \"cancel_requested\") return { kind: \"continue\" };\n\n\tconst message = interruptedAssistantMessage(\n\t\tgeneration.generationContext.configuration.model,\n\t\treduceAssistantMessageFrames(frames.value),\n\t);\n\tawait lane.emitBatch(\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"message_start\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"message_end\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\tentryId: generation.responseEntryId,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t],\n\t\tdrive.context,\n\t);\n\treturn publishResponse(lane, drive, generation, message, { recovery: true });\n}\n\n/** Synthetically settle one cancelled orphaned assistant or deferred effect under its reserved ids. */\nexport async function recoverCancelledAssistantEffect<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\teffect: AssistantEffectPendingOperation | DeferredEffectPendingOperation,\n): Promise<ProcedureResult> {\n\tconst frames = await lane.settleOperation(\n\t\teffect,\n\t\tasync (_state, _current, _meta, reader) => ({\n\t\t\tkind: \"return\",\n\t\t\tresult: await readAssistantFrames(reader, drive.operationId, effect.responseEntryId, drive.context),\n\t\t}),\n\t\tdrive.context,\n\t);\n\tconst identity =\n\t\teffect.at === \"assistant.effect_pending\"\n\t\t\t? effect.generationContext.configuration.model\n\t\t\t: effect.configuration.model;\n\tconst message = interruptedAssistantMessage(identity, reduceAssistantMessageFrames(frames));\n\tawait lane.emitBatch(\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"message_start\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"message_end\",\n\t\t\t\tlane: lane.name,\n\t\t\t\trunId: drive.operationId,\n\t\t\t\tmessage,\n\t\t\t\tentryId: effect.responseEntryId,\n\t\t\t\trecovery: true,\n\t\t\t},\n\t\t],\n\t\tdrive.context,\n\t);\n\treturn publishResponse(lane, drive, effect, message, { recovery: true });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/response.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvG,OAAO,EACN,KAAK,+BAA+B,EAEpC,KAAK,8BAA8B,EAGnC,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,uBAAuB,EAI5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK1D,MAAM,MAAM,0BAA0B,GAAG;IACxC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,CACZ,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,yBAAyB,EACnC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,UAAQ,GACd,0BAA0B,CA8C5B;AAED,KAAK,cAAc,GAAG,+BAA+B,GAAG,8BAA8B,CAAC;AACvF,KAAK,yBAAyB,GAAG,OAAO,CACvC,cAAc,EACd;IAAE,EAAE,EAAE,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,yBAAyB,CAAA;CAAE,CACrG,CAAC;AAEF,2FAA2F;AAC3F,wBAAsB,2BAA2B,CAChD,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnC,MAAM,SAAS,yBAAyB,EACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA6BzG;AA2CD,yFAAyF;AACzF,wBAAsB,eAAe,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAyS1B","sourcesContent":["import {\n\ttype AssistantMessageEvent,\n\tAssistantMessageFrameEncoder,\n\tisContextOverflow,\n\tisRecoverableLength,\n\tisRetryableAssistantError,\n\tretryDelayMs,\n} from \"@earendil-works/pi-ai\";\nimport type { HarnessEvent } from \"../../agent-harness.ts\";\nimport type { Context } from \"../../context.ts\";\nimport type { AssistantResponseMetadata, AssistantStreamObserver } from \"../../execution/assistant.ts\";\nimport { insertEntry, insertUsage } from \"../../session/commit.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype AssistantEffectPendingOperation,\n\ttype CommitResult,\n\ttype DeferredEffectPendingOperation,\n\ttype MessageEntry,\n\ttype NewEntry,\n\ttype OperationError,\n\ttype OperationState,\n\toperationScopeOf,\n\ttype SettledAssistantMessage,\n\ttype SummaryDecidingOperation,\n\ttype ToolCall,\n\ttype UsageRow,\n} from \"../../session/types.ts\";\nimport { branchTip, deleteList, operationPreparation, pendingAssistantFrames, setValue } from \"../../session/values.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { openFrameProgress } from \"../progress.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { retryNotBefore } from \"./retry.ts\";\nimport { prepareOverflowCompaction } from \"./structural.ts\";\nimport { operationCleanupWrites, operationResultRecord } from \"./terminal.ts\";\n\nexport type AssistantResponseLifecycle = {\n\tobserver: AssistantStreamObserver;\n\tafterResponse(\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t): Promise<SettledAssistantMessage>;\n\tclose(): Promise<void>;\n};\n\nexport function openAssistantResponse<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tresponseEntryId: string,\n\trecovery = false,\n): AssistantResponseLifecycle {\n\tconst progress = openFrameProgress(lane, drive, responseEntryId);\n\tconst frameEncoder = new AssistantMessageFrameEncoder();\n\tconst eventContext = {\n\t\tlane: lane.name,\n\t\trunId: drive.operationId,\n\t\t...(recovery ? { recovery: true as const } : {}),\n\t};\n\tconst close = async () => {\n\t\tprogress.seal();\n\t\tawait progress.drain();\n\t};\n\treturn {\n\t\tobserver: {\n\t\t\tstart(message, event, context) {\n\t\t\t\tconst frame = frameEncoder.encode(event);\n\t\t\t\tif (frame !== undefined) progress.write(frame);\n\t\t\t\treturn lane.emitBatch([{ type: \"message_start\", ...eventContext, message }], context);\n\t\t\t},\n\t\t\tupdate(message, event: AssistantMessageEvent, context) {\n\t\t\t\tconst frame = frameEncoder.encode(event);\n\t\t\t\tif (frame !== undefined) progress.write(frame);\n\t\t\t\treturn lane.emitBatch(\n\t\t\t\t\t[{ type: \"message_update\", ...eventContext, message, event, ...(frame === undefined ? {} : { frame }) }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t},\n\t\t\tend(message, context) {\n\t\t\t\treturn lane.emitBatch(\n\t\t\t\t\t[{ type: \"message_end\", ...eventContext, message, entryId: responseEntryId }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tasync afterResponse(message, metadata, context) {\n\t\t\tawait close();\n\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\"after_response\",\n\t\t\t\t{ lane: lane.name, runId: drive.operationId, ...metadata, message },\n\t\t\t\tdrive.gate,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\treturn result?.message ?? message;\n\t\t},\n\t\tclose,\n\t};\n}\n\ntype ResponseIntent = AssistantEffectPendingOperation | DeferredEffectPendingOperation;\ntype ConfigurationFailureState = Extract<\n\tOperationState,\n\t{ at: \"assistant.ready\" | \"assistant.retry_wait\" | \"deferred.suspended\" | \"deferred.effect_pending\" }\n>;\n\n/** Publish a non-retryable request-configuration failure before reserving response ids. */\nexport async function publishConfigurationFailure<\n\tTContext extends object | undefined,\n\tTState extends ConfigurationFailureState,\n>(lane: Lane<TContext>, drive: Drive, capability: TState, error: OperationError): Promise<ProcedureResult> {\n\tconst result = await lane.continueOperation(\n\t\tcapability,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tif (state.tipId === null) throw new SessionInvariantError(\"Failed run has no Branch tip\");\n\t\t\tconst record = operationResultRecord(meta, \"failed\", state.tipId, error);\n\t\t\tconst cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\treturn {\n\t\t\t\tkind: \"finish\",\n\t\t\t\twrites: cleanup,\n\t\t\t\trecord,\n\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n\treturn result.kind === \"cancel_requested\" ? { kind: \"continue\" } : result.value;\n}\n\nfunction uuidV7Timestamp(id: string): number {\n\tconst timestamp = Number.parseInt(id.slice(0, 8) + id.slice(9, 13), 16);\n\tif (!Number.isSafeInteger(timestamp)) throw new SessionInvariantError(`Invalid reserved UUIDv7 ${id}`);\n\treturn timestamp;\n}\n\nfunction providerError(source: \"assistant\" | \"deferred\", message: SettledAssistantMessage): OperationError {\n\treturn {\n\t\tcode: \"assistant_error\",\n\t\tmessage:\n\t\t\tmessage.errorMessage ??\n\t\t\t`${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} request ended with ${message.stopReason}`,\n\t};\n}\n\nfunction normalizeError(message: SettledAssistantMessage, errorMessage: string): SettledAssistantMessage {\n\treturn { ...message, stopReason: \"error\", errorMessage };\n}\n\nfunction normalizeAborted(source: \"assistant\" | \"deferred\", message: SettledAssistantMessage): SettledAssistantMessage {\n\treturn {\n\t\t...message,\n\t\tstopReason: \"aborted\",\n\t\terrorMessage:\n\t\t\tmessage.errorMessage ?? `${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} request was cancelled`,\n\t};\n}\n\nfunction deferredHandleIsValid(message: SettledAssistantMessage, generation: AssistantEffectPendingOperation): boolean {\n\tconst handle = message.deferred;\n\tconst identity = generation.generationContext.configuration.model;\n\treturn (\n\t\tmessage.stopReason === \"deferred\" &&\n\t\thandle !== undefined &&\n\t\thandle.id.length !== 0 &&\n\t\thandle.provider === identity.provider &&\n\t\thandle.modelId === identity.modelId &&\n\t\thandle.api === message.api\n\t);\n}\n\n/** Classify and atomically settle one assistant-generation or deferred-poll response. */\nexport async function publishResponse<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tintent: ResponseIntent,\n\tresponse: SettledAssistantMessage,\n\toptions: { recovery?: true } = {},\n): Promise<ProcedureResult> {\n\tconst overflow =\n\t\tintent.at === \"assistant.effect_pending\" &&\n\t\t(isContextOverflow(response, intent.contextWindow) || isRecoverableLength(response, intent.intendedOutputLimit));\n\tconst overflowPreparation =\n\t\toverflow && !intent.generationContext.overflowRecoveryUsed\n\t\t\t? await prepareOverflowCompaction(lane, drive, intent)\n\t\t\t: undefined;\n\treturn lane.settleOperation<ResponseIntent, ProcedureResult>(\n\t\tintent,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tconst source = current.at === \"assistant.effect_pending\" ? \"assistant\" : \"deferred\";\n\t\t\tconst responseEntryId = intent.responseEntryId;\n\t\t\tconst configuration =\n\t\t\t\tcurrent.at === \"assistant.effect_pending\" ? current.generationContext.configuration : current.configuration;\n\t\t\tconst turnId =\n\t\t\t\tcurrent.at === \"assistant.effect_pending\"\n\t\t\t\t\t? current.generationContext.stepId\n\t\t\t\t\t: `${current.stepId}:poll:${current.poll}`;\n\t\t\tconst scope = { ...operationScopeOf(current), latestAssistantEntryId: responseEntryId };\n\t\t\tlet committed = response;\n\t\t\tlet settled: OperationState | undefined;\n\t\t\tlet failure: OperationError | undefined;\n\n\t\t\tif (current.control.status === \"cancel_requested\") {\n\t\t\t\tcommitted = normalizeAborted(source, response);\n\t\t\t\tsettled = {\n\t\t\t\t\t...scope,\n\t\t\t\t\tat: \"checkpoint\",\n\t\t\t\t\tcontinuation: { kind: \"may_finish\", includeFinalAssistant: true },\n\t\t\t\t\ttriggerEntryId: responseEntryId,\n\t\t\t\t};\n\t\t\t} else if (response.stopReason === \"aborted\") {\n\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t`${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} response is aborted while durable control is running`,\n\t\t\t\t);\n\t\t\t} else if (current.at === \"assistant.effect_pending\" && overflow) {\n\t\t\t\tcommitted = normalizeError(\n\t\t\t\t\tresponse,\n\t\t\t\t\tresponse.errorMessage ?? \"Assistant request exceeded the context window\",\n\t\t\t\t);\n\t\t\t\tif (current.generationContext.overflowRecoveryUsed || overflowPreparation === undefined) {\n\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t} else {\n\t\t\t\t\tconst structural: SummaryDecidingOperation = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"summary.deciding\",\n\t\t\t\t\t\ttask: {\n\t\t\t\t\t\t\ttaskId: overflowPreparation.taskId,\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tboundary: {\n\t\t\t\t\t\t\t\tkind: \"resume_checkpoint\",\n\t\t\t\t\t\t\t\tresumeAfter: {\n\t\t\t\t\t\t\t\t\tcontinuation: { kind: \"need_assistant\", overflowRecoveryUsed: true },\n\t\t\t\t\t\t\t\t\ttriggerEntryId: current.generationContext.triggerEntryId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsettled = structural;\n\t\t\t\t}\n\t\t\t} else if (response.stopReason === \"deferred\") {\n\t\t\t\tif (current.at === \"assistant.effect_pending\") {\n\t\t\t\t\tif (deferredHandleIsValid(response, current)) {\n\t\t\t\t\t\tsettled = {\n\t\t\t\t\t\t\t...scope,\n\t\t\t\t\t\t\tat: \"deferred.suspended\",\n\t\t\t\t\t\t\tstepId: current.generationContext.stepId,\n\t\t\t\t\t\t\tsourceEntryId: responseEntryId,\n\t\t\t\t\t\t\tpoll: 0,\n\t\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\t\tstreamOptions: current.generationContext.streamOptions,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommitted = normalizeError(response, \"Provider returned an invalid deferred handle\");\n\t\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"deferred.suspended\",\n\t\t\t\t\t\tstepId: current.stepId,\n\t\t\t\t\t\tsourceEntryId: responseEntryId,\n\t\t\t\t\t\tpoll: current.poll,\n\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\tstreamOptions: current.streamOptions,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else if (response.stopReason === \"error\") {\n\t\t\t\tif (\n\t\t\t\t\tcurrent.at === \"assistant.effect_pending\" &&\n\t\t\t\t\t(options.recovery === true || isRetryableAssistantError(response)) &&\n\t\t\t\t\tcurrent.attempt < current.generationContext.retryPolicy.maxAttempts\n\t\t\t\t) {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"assistant.retry_wait\",\n\t\t\t\t\t\tgenerationContext: current.generationContext,\n\t\t\t\t\t\tnextAttempt: current.attempt + 1,\n\t\t\t\t\t\tnotBefore: retryNotBefore(current.generationContext.retryPolicy, current.attempt),\n\t\t\t\t\t\terrorMessage: response.errorMessage ?? \"Assistant request failed\",\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfailure = providerError(source, response);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst calls = response.content.flatMap((content, sourceIndex) =>\n\t\t\t\t\tcontent.type === \"toolCall\" ? [{ sourceIndex }] : [],\n\t\t\t\t);\n\t\t\t\tif (calls.length !== 0) {\n\t\t\t\t\tconst timestamp = uuidV7Timestamp(responseEntryId);\n\t\t\t\t\tconst planned: ToolCall[] = calls.map(({ sourceIndex }) => ({\n\t\t\t\t\t\tstatus: \"planned\",\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tresultEntryId: lane.session.idGenerator.next(timestamp),\n\t\t\t\t\t}));\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"tools\",\n\t\t\t\t\t\tbatch: { assistantEntryId: responseEntryId, configuration, turnId, calls: planned },\n\t\t\t\t\t};\n\t\t\t\t} else if (response.stopReason === \"toolUse\") {\n\t\t\t\t\tcommitted = normalizeError(response, \"Provider reported tool use without any tool calls\");\n\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t} else {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"checkpoint\",\n\t\t\t\t\t\tcontinuation: { kind: \"may_finish\", includeFinalAssistant: true },\n\t\t\t\t\t\ttriggerEntryId: responseEntryId,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst responseEntry: NewEntry<MessageEntry> = {\n\t\t\t\tid: responseEntryId,\n\t\t\t\tparentId: state.tipId,\n\t\t\t\ttype: \"message\",\n\t\t\t\tmessage: committed,\n\t\t\t};\n\t\t\tconst usageRow: Omit<UsageRow, \"seq\"> = {\n\t\t\t\tid: intent.usageId,\n\t\t\t\tusage: committed.usage,\n\t\t\t\tentryId: responseEntryId,\n\t\t\t\tadjustment: false,\n\t\t\t};\n\t\t\tif (settled === undefined && failure === undefined) {\n\t\t\t\tthrow new SessionInvariantError(\"Response settlement has no durable disposition\");\n\t\t\t}\n\t\t\tconst record =\n\t\t\t\tfailure === undefined ? undefined : operationResultRecord(meta, \"failed\", responseEntryId, failure);\n\t\t\tconst cleanup =\n\t\t\t\trecord === undefined ? [] : await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\tconst writes = [\n\t\t\t\tinsertEntry(responseEntry),\n\t\t\t\tinsertUsage(usageRow),\n\t\t\t\tsetValue(branchTip(lane.name), responseEntryId),\n\t\t\t\t...(record === undefined\n\t\t\t\t\t? [deleteList(pendingAssistantFrames(drive.operationId, responseEntryId))]\n\t\t\t\t\t: cleanup),\n\t\t\t\t...(settled?.at === \"summary.deciding\" && overflowPreparation !== undefined\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tsetValue(\n\t\t\t\t\t\t\t\toperationPreparation(drive.operationId, overflowPreparation.taskId),\n\t\t\t\t\t\t\t\toverflowPreparation.preparation,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tconst materializeEntry = (commit: CommitResult): MessageEntry => ({\n\t\t\t\t...responseEntry,\n\t\t\t\tseq: commit.seqs[0]!,\n\t\t\t\ttimestamp: commit.timestamp,\n\t\t\t});\n\t\t\tconst events = (commit: CommitResult): HarnessEvent[] => {\n\t\t\t\tconst entry = materializeEntry(commit);\n\t\t\t\tconst batch: HarnessEvent[] = [\n\t\t\t\t\t{ type: \"entry_added\", lane: lane.name, entry, ...options },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"usage\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trow: { ...usageRow, seq: commit.seqs[1]! },\n\t\t\t\t\t\ttotals: commit.stats.usage,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t\tif (current.at === \"assistant.effect_pending\") {\n\t\t\t\t\tif (options.recovery !== true && current.attempt > 1 && settled?.at !== \"assistant.retry_wait\") {\n\t\t\t\t\t\tconst success = committed.stopReason !== \"error\" && committed.stopReason !== \"aborted\";\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"retry_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tstep: turnId,\n\t\t\t\t\t\t\tattempt: current.attempt,\n\t\t\t\t\t\t\tsuccess,\n\t\t\t\t\t\t\t...(success\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tfinalError:\n\t\t\t\t\t\t\t\t\t\t\tcommitted.errorMessage ?? `Assistant request ended with ${committed.stopReason}`,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (options.recovery !== true && settled?.at === \"assistant.retry_wait\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"retry_scheduled\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tstep: turnId,\n\t\t\t\t\t\t\tattempt: settled.nextAttempt,\n\t\t\t\t\t\t\tmaxAttempts: settled.generationContext.retryPolicy.maxAttempts,\n\t\t\t\t\t\t\tdelayMs: retryDelayMs(current.generationContext.retryPolicy, current.attempt),\n\t\t\t\t\t\t\tnotBefore: settled.notBefore,\n\t\t\t\t\t\t\terrorMessage: settled.errorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (options.recovery !== true && settled?.at !== \"tools\" && settled?.at !== \"assistant.retry_wait\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"turn_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tturnId,\n\t\t\t\t\t\t\tmessage: committed,\n\t\t\t\t\t\t\ttoolResults: [],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (settled?.at === \"summary.deciding\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"compaction_start\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tstartedAt: commit.timestamp,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (settled?.at !== \"tools\") {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"turn_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tturnId,\n\t\t\t\t\t\tmessage: committed,\n\t\t\t\t\t\ttoolResults: [],\n\t\t\t\t\t\t...options,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t(current.at === \"deferred.effect_pending\" || options.recovery !== true) &&\n\t\t\t\t\tsettled?.at === \"deferred.suspended\" &&\n\t\t\t\t\tcommitted.deferred !== undefined\n\t\t\t\t) {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"run_suspend\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\treason: \"deferred\",\n\t\t\t\t\t\tdeferred: committed.deferred,\n\t\t\t\t\t\tpoll: settled.poll,\n\t\t\t\t\t\t...(current.at === \"deferred.effect_pending\" ? options : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (record !== undefined && failure !== undefined) {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror: failure,\n\t\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\t\ttipId: responseEntryId,\n\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn batch;\n\t\t\t};\n\t\t\tif (record !== undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"finish\",\n\t\t\t\t\twrites,\n\t\t\t\t\trecord,\n\t\t\t\t\tlane: { tipId: responseEntryId },\n\t\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\t\tevents,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (settled === undefined) throw new SessionInvariantError(\"Response settlement is missing its next state\");\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites,\n\t\t\t\toperationState: settled,\n\t\t\t\tlane: { tipId: responseEntryId },\n\t\t\t\tmaterialize: () => ({ kind: \"continue\" }) as const,\n\t\t\t\tevents,\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/response.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvG,OAAO,EACN,KAAK,+BAA+B,EAEpC,KAAK,8BAA8B,EAGnC,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,uBAAuB,EAI5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK1D,MAAM,MAAM,0BAA0B,GAAG;IACxC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,CACZ,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,yBAAyB,EACnC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,MAAM,EACvB,QAAQ,UAAQ,GACd,0BAA0B,CA8C5B;AAED,KAAK,cAAc,GAAG,+BAA+B,GAAG,8BAA8B,CAAC;AACvF,KAAK,yBAAyB,GAAG,OAAO,CACvC,cAAc,EACd;IAAE,EAAE,EAAE,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,yBAAyB,CAAA;CAAE,CACrG,CAAC;AAEF,2FAA2F;AAC3F,wBAAsB,2BAA2B,CAChD,QAAQ,SAAS,MAAM,GAAG,SAAS,EACnC,MAAM,SAAS,yBAAyB,EACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA6BzG;AA2CD,yFAAyF;AACzF,wBAAsB,eAAe,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAyS1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/response.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AssistantMessageEvent,\n\tAssistantMessageFrameEncoder,\n\tisContextOverflow,\n\tisRecoverableLength,\n\tisRetryableAssistantError,\n\tretryDelayMs,\n} from \"@earendil-works/pi-ai\";\nimport type { HarnessEvent } from \"../../agent-harness.ts\";\nimport type { Context } from \"../../context.ts\";\nimport type { AssistantResponseMetadata, AssistantStreamObserver } from \"../../execution/assistant.ts\";\nimport { insertEntry, insertUsage } from \"../../session/commit.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype AssistantEffectPendingOperation,\n\ttype CommitResult,\n\ttype DeferredEffectPendingOperation,\n\ttype MessageEntry,\n\ttype NewEntry,\n\ttype OperationError,\n\ttype OperationState,\n\toperationScopeOf,\n\ttype SettledAssistantMessage,\n\ttype SummaryDecidingOperation,\n\ttype ToolCall,\n\ttype UsageRow,\n} from \"../../session/types.ts\";\nimport { branchTip, deleteList, operationPreparation, pendingAssistantFrames, setValue } from \"../../session/values.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { openFrameProgress } from \"../progress.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { retryNotBefore } from \"./retry.ts\";\nimport { prepareOverflowCompaction } from \"./structural.ts\";\nimport { operationCleanupWrites, operationResultRecord } from \"./terminal.ts\";\n\nexport type AssistantResponseLifecycle = {\n\tobserver: AssistantStreamObserver;\n\tafterResponse(\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t): Promise<SettledAssistantMessage>;\n\tclose(): Promise<void>;\n};\n\nexport function openAssistantResponse<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tresponseEntryId: string,\n\trecovery = false,\n): AssistantResponseLifecycle {\n\tconst progress = openFrameProgress(lane, drive, responseEntryId);\n\tconst frameEncoder = new AssistantMessageFrameEncoder();\n\tconst eventContext = {\n\t\tlane: lane.name,\n\t\trunId: drive.operationId,\n\t\t...(recovery ? { recovery: true as const } : {}),\n\t};\n\tconst close = async () => {\n\t\tprogress.seal();\n\t\tawait progress.drain();\n\t};\n\treturn {\n\t\tobserver: {\n\t\t\tstart(message, event, context) {\n\t\t\t\tconst frame = frameEncoder.encode(event);\n\t\t\t\tif (frame !== undefined) progress.write(frame);\n\t\t\t\treturn lane.emitBatch([{ type: \"message_start\", ...eventContext, message }], context);\n\t\t\t},\n\t\t\tupdate(message, event: AssistantMessageEvent, context) {\n\t\t\t\tconst frame = frameEncoder.encode(event);\n\t\t\t\tif (frame !== undefined) progress.write(frame);\n\t\t\t\treturn lane.emitBatch(\n\t\t\t\t\t[{ type: \"message_update\", ...eventContext, message, event, ...(frame === undefined ? {} : { frame }) }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t},\n\t\t\tend(message, context) {\n\t\t\t\treturn lane.emitBatch(\n\t\t\t\t\t[{ type: \"message_end\", ...eventContext, message, entryId: responseEntryId }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tasync afterResponse(message, metadata, context) {\n\t\t\tawait close();\n\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\"after_response\",\n\t\t\t\t{ lane: lane.name, runId: drive.operationId, ...metadata, message },\n\t\t\t\tdrive.gate,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\treturn result?.message ?? message;\n\t\t},\n\t\tclose,\n\t};\n}\n\ntype ResponseIntent = AssistantEffectPendingOperation | DeferredEffectPendingOperation;\ntype ConfigurationFailureState = Extract<\n\tOperationState,\n\t{ at: \"assistant.ready\" | \"assistant.retry_wait\" | \"deferred.suspended\" | \"deferred.effect_pending\" }\n>;\n\n/** Publish a non-retryable request-configuration failure before reserving response ids. */\nexport async function publishConfigurationFailure<\n\tTContext extends object | undefined,\n\tTState extends ConfigurationFailureState,\n>(lane: Lane<TContext>, drive: Drive, capability: TState, error: OperationError): Promise<ProcedureResult> {\n\tconst result = await lane.continueOperation(\n\t\tcapability,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tif (state.tipId === null) throw new SessionInvariantError(\"Failed run has no Branch tip\");\n\t\t\tconst record = operationResultRecord(meta, \"failed\", state.tipId, error);\n\t\t\tconst cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\treturn {\n\t\t\t\tkind: \"finish\",\n\t\t\t\twrites: cleanup,\n\t\t\t\trecord,\n\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n\treturn result.kind === \"cancel_requested\" ? { kind: \"continue\" } : result.value;\n}\n\nfunction uuidV7Timestamp(id: string): number {\n\tconst timestamp = Number.parseInt(id.slice(0, 8) + id.slice(9, 13), 16);\n\tif (!Number.isSafeInteger(timestamp)) throw new SessionInvariantError(`Invalid reserved UUIDv7 ${id}`);\n\treturn timestamp;\n}\n\nfunction providerError(source: \"assistant\" | \"deferred\", message: SettledAssistantMessage): OperationError {\n\treturn {\n\t\tcode: \"assistant_error\",\n\t\tmessage:\n\t\t\tmessage.errorMessage ??\n\t\t\t`${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} request ended with ${message.stopReason}`,\n\t};\n}\n\nfunction normalizeError(message: SettledAssistantMessage, errorMessage: string): SettledAssistantMessage {\n\treturn { ...message, stopReason: \"error\", errorMessage };\n}\n\nfunction normalizeAborted(source: \"assistant\" | \"deferred\", message: SettledAssistantMessage): SettledAssistantMessage {\n\treturn {\n\t\t...message,\n\t\tstopReason: \"aborted\",\n\t\terrorMessage:\n\t\t\tmessage.errorMessage ?? `${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} request was cancelled`,\n\t};\n}\n\nfunction deferredHandleIsValid(message: SettledAssistantMessage, generation: AssistantEffectPendingOperation): boolean {\n\tconst handle = message.deferred;\n\tconst identity = generation.generationContext.configuration.model;\n\treturn (\n\t\tmessage.stopReason === \"deferred\" &&\n\t\thandle !== undefined &&\n\t\thandle.id.length !== 0 &&\n\t\thandle.provider === identity.provider &&\n\t\thandle.modelId === identity.modelId &&\n\t\thandle.api === message.api\n\t);\n}\n\n/** Classify and atomically settle one assistant-generation or deferred-poll response. */\nexport async function publishResponse<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tintent: ResponseIntent,\n\tresponse: SettledAssistantMessage,\n\toptions: { recovery?: true } = {},\n): Promise<ProcedureResult> {\n\tconst overflow =\n\t\tintent.at === \"assistant.effect_pending\" &&\n\t\t(isContextOverflow(response, intent.contextWindow) || isRecoverableLength(response, intent.intendedOutputLimit));\n\tconst overflowPreparation =\n\t\toverflow && !intent.generationContext.overflowRecoveryUsed\n\t\t\t? await prepareOverflowCompaction(lane, drive, intent)\n\t\t\t: undefined;\n\treturn lane.settleOperation<ResponseIntent, ProcedureResult>(\n\t\tintent,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tconst source = current.at === \"assistant.effect_pending\" ? \"assistant\" : \"deferred\";\n\t\t\tconst responseEntryId = intent.responseEntryId;\n\t\t\tconst configuration =\n\t\t\t\tcurrent.at === \"assistant.effect_pending\" ? current.generationContext.configuration : current.configuration;\n\t\t\tconst turnId =\n\t\t\t\tcurrent.at === \"assistant.effect_pending\"\n\t\t\t\t\t? current.generationContext.stepId\n\t\t\t\t\t: `${current.stepId}:poll:${current.poll}`;\n\t\t\tconst scope = { ...operationScopeOf(current), latestAssistantEntryId: responseEntryId };\n\t\t\tlet committed = response;\n\t\t\tlet settled: OperationState | undefined;\n\t\t\tlet failure: OperationError | undefined;\n\n\t\t\tif (current.control.status === \"cancel_requested\") {\n\t\t\t\tcommitted = normalizeAborted(source, response);\n\t\t\t\tsettled = {\n\t\t\t\t\t...scope,\n\t\t\t\t\tat: \"checkpoint\",\n\t\t\t\t\tcontinuation: { kind: \"may_finish\", includeFinalAssistant: true },\n\t\t\t\t\ttriggerEntryId: responseEntryId,\n\t\t\t\t};\n\t\t\t} else if (response.stopReason === \"aborted\") {\n\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t`${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} response is aborted while durable control is running`,\n\t\t\t\t);\n\t\t\t} else if (current.at === \"assistant.effect_pending\" && overflow) {\n\t\t\t\tcommitted = normalizeError(\n\t\t\t\t\tresponse,\n\t\t\t\t\tresponse.errorMessage ?? \"Assistant request exceeded the context window\",\n\t\t\t\t);\n\t\t\t\tif (current.generationContext.overflowRecoveryUsed || overflowPreparation === undefined) {\n\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t} else {\n\t\t\t\t\tconst structural: SummaryDecidingOperation = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"summary.deciding\",\n\t\t\t\t\t\ttask: {\n\t\t\t\t\t\t\ttaskId: overflowPreparation.taskId,\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tboundary: {\n\t\t\t\t\t\t\t\tkind: \"resume_checkpoint\",\n\t\t\t\t\t\t\t\tresumeAfter: {\n\t\t\t\t\t\t\t\t\tcontinuation: { kind: \"need_assistant\", overflowRecoveryUsed: true },\n\t\t\t\t\t\t\t\t\ttriggerEntryId: current.generationContext.triggerEntryId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsettled = structural;\n\t\t\t\t}\n\t\t\t} else if (response.stopReason === \"deferred\") {\n\t\t\t\tif (current.at === \"assistant.effect_pending\") {\n\t\t\t\t\tif (deferredHandleIsValid(response, current)) {\n\t\t\t\t\t\tsettled = {\n\t\t\t\t\t\t\t...scope,\n\t\t\t\t\t\t\tat: \"deferred.suspended\",\n\t\t\t\t\t\t\tstepId: current.generationContext.stepId,\n\t\t\t\t\t\t\tsourceEntryId: responseEntryId,\n\t\t\t\t\t\t\tpoll: 0,\n\t\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\t\tstreamOptions: current.generationContext.streamOptions,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommitted = normalizeError(response, \"Provider returned an invalid deferred handle\");\n\t\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"deferred.suspended\",\n\t\t\t\t\t\tstepId: current.stepId,\n\t\t\t\t\t\tsourceEntryId: responseEntryId,\n\t\t\t\t\t\tpoll: current.poll,\n\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\tstreamOptions: current.streamOptions,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else if (response.stopReason === \"error\") {\n\t\t\t\tif (\n\t\t\t\t\tcurrent.at === \"assistant.effect_pending\" &&\n\t\t\t\t\t(options.recovery === true || isRetryableAssistantError(response)) &&\n\t\t\t\t\tcurrent.attempt < current.generationContext.retryPolicy.maxAttempts\n\t\t\t\t) {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"assistant.retry_wait\",\n\t\t\t\t\t\tgenerationContext: current.generationContext,\n\t\t\t\t\t\tnextAttempt: current.attempt + 1,\n\t\t\t\t\t\tnotBefore: retryNotBefore(current.generationContext.retryPolicy, current.attempt),\n\t\t\t\t\t\terrorMessage: response.errorMessage ?? \"Assistant request failed\",\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfailure = providerError(source, response);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst calls = response.content.flatMap((content, sourceIndex) =>\n\t\t\t\t\tcontent.type === \"toolCall\" ? [{ sourceIndex }] : [],\n\t\t\t\t);\n\t\t\t\tif (calls.length !== 0) {\n\t\t\t\t\tconst timestamp = uuidV7Timestamp(responseEntryId);\n\t\t\t\t\tconst planned: ToolCall[] = calls.map(({ sourceIndex }) => ({\n\t\t\t\t\t\tstatus: \"planned\",\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tresultEntryId: lane.session.idGenerator.next(timestamp),\n\t\t\t\t\t}));\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"tools\",\n\t\t\t\t\t\tbatch: { assistantEntryId: responseEntryId, configuration, turnId, calls: planned },\n\t\t\t\t\t};\n\t\t\t\t} else if (response.stopReason === \"toolUse\") {\n\t\t\t\t\tcommitted = normalizeError(response, \"Provider reported tool use without any tool calls\");\n\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t} else {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"checkpoint\",\n\t\t\t\t\t\tcontinuation: { kind: \"may_finish\", includeFinalAssistant: true },\n\t\t\t\t\t\ttriggerEntryId: responseEntryId,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst responseEntry: NewEntry<MessageEntry> = {\n\t\t\t\tid: responseEntryId,\n\t\t\t\tparentId: state.tipId,\n\t\t\t\ttype: \"message\",\n\t\t\t\tmessage: committed,\n\t\t\t};\n\t\t\tconst usageRow: Omit<UsageRow, \"seq\"> = {\n\t\t\t\tid: intent.usageId,\n\t\t\t\tusage: committed.usage,\n\t\t\t\tentryId: responseEntryId,\n\t\t\t\tadjustment: false,\n\t\t\t};\n\t\t\tif (settled === undefined && failure === undefined) {\n\t\t\t\tthrow new SessionInvariantError(\"Response settlement has no durable disposition\");\n\t\t\t}\n\t\t\tconst record =\n\t\t\t\tfailure === undefined ? undefined : operationResultRecord(meta, \"failed\", responseEntryId, failure);\n\t\t\tconst cleanup =\n\t\t\t\trecord === undefined ? [] : await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\tconst writes = [\n\t\t\t\tinsertEntry(responseEntry),\n\t\t\t\tinsertUsage(usageRow),\n\t\t\t\tsetValue(branchTip(lane.name), responseEntryId),\n\t\t\t\t...(record === undefined\n\t\t\t\t\t? [deleteList(pendingAssistantFrames(drive.operationId, responseEntryId))]\n\t\t\t\t\t: cleanup),\n\t\t\t\t...(settled?.at === \"summary.deciding\" && overflowPreparation !== undefined\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tsetValue(\n\t\t\t\t\t\t\t\toperationPreparation(drive.operationId, overflowPreparation.taskId),\n\t\t\t\t\t\t\t\toverflowPreparation.preparation,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tconst materializeEntry = (commit: CommitResult): MessageEntry => ({\n\t\t\t\t...responseEntry,\n\t\t\t\tseq: commit.seqs[0]!,\n\t\t\t\ttimestamp: commit.timestamp,\n\t\t\t});\n\t\t\tconst events = (commit: CommitResult): HarnessEvent[] => {\n\t\t\t\tconst entry = materializeEntry(commit);\n\t\t\t\tconst batch: HarnessEvent[] = [\n\t\t\t\t\t{ type: \"entry_added\", lane: lane.name, entry, ...options },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"usage\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trow: { ...usageRow, seq: commit.seqs[1]! },\n\t\t\t\t\t\ttotals: commit.stats.usage,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t\tif (current.at === \"assistant.effect_pending\") {\n\t\t\t\t\tif (options.recovery !== true && current.attempt > 1 && settled?.at !== \"assistant.retry_wait\") {\n\t\t\t\t\t\tconst success = committed.stopReason !== \"error\" && committed.stopReason !== \"aborted\";\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"retry_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tstep: turnId,\n\t\t\t\t\t\t\tattempt: current.attempt,\n\t\t\t\t\t\t\tsuccess,\n\t\t\t\t\t\t\t...(success\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tfinalError:\n\t\t\t\t\t\t\t\t\t\t\tcommitted.errorMessage ?? `Assistant request ended with ${committed.stopReason}`,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (options.recovery !== true && settled?.at === \"assistant.retry_wait\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"retry_scheduled\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tstep: turnId,\n\t\t\t\t\t\t\tattempt: settled.nextAttempt,\n\t\t\t\t\t\t\tmaxAttempts: settled.generationContext.retryPolicy.maxAttempts,\n\t\t\t\t\t\t\tdelayMs: retryDelayMs(current.generationContext.retryPolicy, current.attempt),\n\t\t\t\t\t\t\tnotBefore: settled.notBefore,\n\t\t\t\t\t\t\terrorMessage: settled.errorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (options.recovery !== true && settled?.at !== \"tools\" && settled?.at !== \"assistant.retry_wait\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"turn_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tturnId,\n\t\t\t\t\t\t\tmessage: committed,\n\t\t\t\t\t\t\ttoolResults: [],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (settled?.at === \"summary.deciding\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"compaction_start\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tstartedAt: commit.timestamp,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (settled?.at !== \"tools\") {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"turn_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tturnId,\n\t\t\t\t\t\tmessage: committed,\n\t\t\t\t\t\ttoolResults: [],\n\t\t\t\t\t\t...options,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t(current.at === \"deferred.effect_pending\" || options.recovery !== true) &&\n\t\t\t\t\tsettled?.at === \"deferred.suspended\" &&\n\t\t\t\t\tcommitted.deferred !== undefined\n\t\t\t\t) {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"run_suspend\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\treason: \"deferred\",\n\t\t\t\t\t\tdeferred: committed.deferred,\n\t\t\t\t\t\tpoll: settled.poll,\n\t\t\t\t\t\t...(current.at === \"deferred.effect_pending\" ? options : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (record !== undefined && failure !== undefined) {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror: failure,\n\t\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\t\ttipId: responseEntryId,\n\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn batch;\n\t\t\t};\n\t\t\tif (record !== undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"finish\",\n\t\t\t\t\twrites,\n\t\t\t\t\trecord,\n\t\t\t\t\tlane: { tipId: responseEntryId },\n\t\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\t\tevents,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (settled === undefined) throw new SessionInvariantError(\"Response settlement is missing its next state\");\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites,\n\t\t\t\toperationState: settled,\n\t\t\t\tlane: { tipId: responseEntryId },\n\t\t\t\tmaterialize: () => ({ kind: \"continue\" }) as const,\n\t\t\t\tevents,\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/response.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AssistantMessageEvent,\n\tAssistantMessageFrameEncoder,\n\tisContextOverflow,\n\tisRecoverableLength,\n\tisRetryableAssistantError,\n\tretryDelayMs,\n} from \"@earendil-works/pi-ai\";\nimport type { HarnessEvent } from \"../../agent-harness.ts\";\nimport type { Context } from \"../../context.ts\";\nimport type { AssistantResponseMetadata, AssistantStreamObserver } from \"../../execution/assistant.ts\";\nimport { insertEntry, insertUsage } from \"../../session/commit.ts\";\nimport { SessionInvariantError } from \"../../session/session.ts\";\nimport {\n\ttype AssistantEffectPendingOperation,\n\ttype CommitResult,\n\ttype DeferredEffectPendingOperation,\n\ttype MessageEntry,\n\ttype NewEntry,\n\ttype OperationError,\n\ttype OperationState,\n\toperationScopeOf,\n\ttype SettledAssistantMessage,\n\ttype SummaryDecidingOperation,\n\ttype ToolCall,\n\ttype UsageRow,\n} from \"../../session/types.ts\";\nimport { branchTip, deleteList, operationPreparation, pendingAssistantFrames, setValue } from \"../../session/values.ts\";\nimport type { Lane } from \"../lane.ts\";\nimport { openFrameProgress } from \"../progress.ts\";\nimport type { Drive, ProcedureResult } from \"../types.ts\";\nimport { retryNotBefore } from \"./retry.ts\";\nimport { prepareOverflowCompaction } from \"./structural.ts\";\nimport { operationCleanupWrites, operationResultRecord } from \"./terminal.ts\";\n\nexport type AssistantResponseLifecycle = {\n\tobserver: AssistantStreamObserver;\n\tafterResponse(\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t): Promise<SettledAssistantMessage>;\n\tclose(): Promise<void>;\n};\n\nexport function openAssistantResponse<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tresponseEntryId: string,\n\trecovery = false,\n): AssistantResponseLifecycle {\n\tconst progress = openFrameProgress(lane, drive, responseEntryId);\n\tconst frameEncoder = new AssistantMessageFrameEncoder();\n\tconst eventContext = {\n\t\tlane: lane.name,\n\t\trunId: drive.operationId,\n\t\t...(recovery ? { recovery: true as const } : {}),\n\t};\n\tconst close = async () => {\n\t\tprogress.seal();\n\t\tawait progress.drain();\n\t};\n\treturn {\n\t\tobserver: {\n\t\t\tstart(message, event, context) {\n\t\t\t\tconst frame = frameEncoder.encode(event);\n\t\t\t\tif (frame !== undefined) progress.write(frame);\n\t\t\t\treturn lane.emitBatch([{ type: \"message_start\", ...eventContext, message }], context);\n\t\t\t},\n\t\t\tupdate(message, event: AssistantMessageEvent, context) {\n\t\t\t\tconst frame = frameEncoder.encode(event);\n\t\t\t\tif (frame !== undefined) progress.write(frame);\n\t\t\t\treturn lane.emitBatch(\n\t\t\t\t\t[{ type: \"message_update\", ...eventContext, message, event, ...(frame === undefined ? {} : { frame }) }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t},\n\t\t\tend(message, context) {\n\t\t\t\treturn lane.emitBatch(\n\t\t\t\t\t[{ type: \"message_end\", ...eventContext, message, entryId: responseEntryId }],\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tasync afterResponse(message, metadata, context) {\n\t\t\tawait close();\n\t\t\tconst result = await lane.hooks.runWithGate(\n\t\t\t\t\"after_response\",\n\t\t\t\t{ lane: lane.name, runId: drive.operationId, ...metadata, message },\n\t\t\t\tdrive.gate,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t\treturn result?.message ?? message;\n\t\t},\n\t\tclose,\n\t};\n}\n\ntype ResponseIntent = AssistantEffectPendingOperation | DeferredEffectPendingOperation;\ntype ConfigurationFailureState = Extract<\n\tOperationState,\n\t{ at: \"assistant.ready\" | \"assistant.retry_wait\" | \"deferred.suspended\" | \"deferred.effect_pending\" }\n>;\n\n/** Publish a non-retryable request-configuration failure before reserving response ids. */\nexport async function publishConfigurationFailure<\n\tTContext extends object | undefined,\n\tTState extends ConfigurationFailureState,\n>(lane: Lane<TContext>, drive: Drive, capability: TState, error: OperationError): Promise<ProcedureResult> {\n\tconst result = await lane.continueOperation(\n\t\tcapability,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tif (state.tipId === null) throw new SessionInvariantError(\"Failed run has no Branch tip\");\n\t\t\tconst record = operationResultRecord(meta, \"failed\", state.tipId, error);\n\t\t\tconst cleanup = await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\treturn {\n\t\t\t\tkind: \"finish\",\n\t\t\t\twrites: cleanup,\n\t\t\t\trecord,\n\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\tevents: () => [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\t\ttipId: state.tipId,\n\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n\treturn result.kind === \"cancel_requested\" ? { kind: \"continue\" } : result.value;\n}\n\nfunction uuidV7Timestamp(id: string): number {\n\tconst timestamp = Number.parseInt(id.slice(0, 8) + id.slice(9, 13), 16);\n\tif (!Number.isSafeInteger(timestamp)) throw new SessionInvariantError(`Invalid reserved UUIDv7 ${id}`);\n\treturn timestamp;\n}\n\nfunction providerError(source: \"assistant\" | \"deferred\", message: SettledAssistantMessage): OperationError {\n\treturn {\n\t\tcode: \"assistant_error\",\n\t\tmessage:\n\t\t\tmessage.errorMessage ??\n\t\t\t`${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} request ended with ${message.stopReason}`,\n\t};\n}\n\nfunction normalizeError(message: SettledAssistantMessage, errorMessage: string): SettledAssistantMessage {\n\treturn { ...message, stopReason: \"error\", errorMessage };\n}\n\nfunction normalizeAborted(source: \"assistant\" | \"deferred\", message: SettledAssistantMessage): SettledAssistantMessage {\n\treturn {\n\t\t...message,\n\t\tstopReason: \"aborted\",\n\t\terrorMessage:\n\t\t\tmessage.errorMessage ?? `${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} request was cancelled`,\n\t};\n}\n\nfunction deferredHandleIsValid(message: SettledAssistantMessage, generation: AssistantEffectPendingOperation): boolean {\n\tconst handle = message.deferred;\n\tconst identity = generation.generationContext.configuration.model;\n\treturn (\n\t\tmessage.stopReason === \"deferred\" &&\n\t\thandle !== undefined &&\n\t\thandle.id.length !== 0 &&\n\t\thandle.provider === identity.provider &&\n\t\thandle.modelId === identity.modelId &&\n\t\thandle.api === message.api\n\t);\n}\n\n/** Classify and atomically settle one assistant-generation or deferred-poll response. */\nexport async function publishResponse<TContext extends object | undefined>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tintent: ResponseIntent,\n\tresponse: SettledAssistantMessage,\n\toptions: { recovery?: true } = {},\n): Promise<ProcedureResult> {\n\tconst overflow =\n\t\tintent.at === \"assistant.effect_pending\" &&\n\t\t(isContextOverflow(response, intent.contextWindow) || isRecoverableLength(response, intent.intendedOutputLimit));\n\tconst overflowPreparation =\n\t\toverflow && !intent.generationContext.overflowRecoveryUsed\n\t\t\t? await prepareOverflowCompaction(lane, drive, intent)\n\t\t\t: undefined;\n\treturn lane.settleOperation<ResponseIntent, ProcedureResult>(\n\t\tintent,\n\t\tasync (state, current, meta, reader) => {\n\t\t\tconst source = current.at === \"assistant.effect_pending\" ? \"assistant\" : \"deferred\";\n\t\t\tconst responseEntryId = intent.responseEntryId;\n\t\t\tconst configuration =\n\t\t\t\tcurrent.at === \"assistant.effect_pending\" ? current.generationContext.configuration : current.configuration;\n\t\t\tconst turnId =\n\t\t\t\tcurrent.at === \"assistant.effect_pending\"\n\t\t\t\t\t? current.generationContext.stepId\n\t\t\t\t\t: `${current.stepId}:poll:${current.poll}`;\n\t\t\tconst scope = { ...operationScopeOf(current), latestAssistantEntryId: responseEntryId };\n\t\t\tlet committed = response;\n\t\t\tlet settled: OperationState | undefined;\n\t\t\tlet failure: OperationError | undefined;\n\n\t\t\tif (current.control.status === \"cancel_requested\") {\n\t\t\t\tcommitted = normalizeAborted(source, response);\n\t\t\t\tsettled = {\n\t\t\t\t\t...scope,\n\t\t\t\t\tat: \"checkpoint\",\n\t\t\t\t\tcontinuation: { kind: \"may_finish\", includeFinalAssistant: true },\n\t\t\t\t\ttriggerEntryId: responseEntryId,\n\t\t\t\t};\n\t\t\t} else if (response.stopReason === \"aborted\") {\n\t\t\t\tthrow new SessionInvariantError(\n\t\t\t\t\t`${source === \"assistant\" ? \"Assistant\" : \"Deferred\"} response is aborted while durable control is running`,\n\t\t\t\t);\n\t\t\t} else if (current.at === \"assistant.effect_pending\" && overflow) {\n\t\t\t\tcommitted = normalizeError(\n\t\t\t\t\tresponse,\n\t\t\t\t\tresponse.errorMessage ?? \"Assistant request exceeded the context window\",\n\t\t\t\t);\n\t\t\t\tif (current.generationContext.overflowRecoveryUsed || overflowPreparation === undefined) {\n\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t} else {\n\t\t\t\t\tconst structural: SummaryDecidingOperation = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"summary.deciding\",\n\t\t\t\t\t\ttask: {\n\t\t\t\t\t\t\ttaskId: overflowPreparation.taskId,\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tboundary: {\n\t\t\t\t\t\t\t\tkind: \"resume_checkpoint\",\n\t\t\t\t\t\t\t\tresumeAfter: {\n\t\t\t\t\t\t\t\t\tcontinuation: { kind: \"need_assistant\", overflowRecoveryUsed: true },\n\t\t\t\t\t\t\t\t\ttriggerEntryId: current.generationContext.triggerEntryId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsettled = structural;\n\t\t\t\t}\n\t\t\t} else if (response.stopReason === \"deferred\") {\n\t\t\t\tif (current.at === \"assistant.effect_pending\") {\n\t\t\t\t\tif (deferredHandleIsValid(response, current)) {\n\t\t\t\t\t\tsettled = {\n\t\t\t\t\t\t\t...scope,\n\t\t\t\t\t\t\tat: \"deferred.suspended\",\n\t\t\t\t\t\t\tstepId: current.generationContext.stepId,\n\t\t\t\t\t\t\tsourceEntryId: responseEntryId,\n\t\t\t\t\t\t\tpoll: 0,\n\t\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\t\tstreamOptions: current.generationContext.streamOptions,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommitted = normalizeError(response, \"Provider returned an invalid deferred handle\");\n\t\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"deferred.suspended\",\n\t\t\t\t\t\tstepId: current.stepId,\n\t\t\t\t\t\tsourceEntryId: responseEntryId,\n\t\t\t\t\t\tpoll: current.poll,\n\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\tstreamOptions: current.streamOptions,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else if (response.stopReason === \"error\") {\n\t\t\t\tif (\n\t\t\t\t\tcurrent.at === \"assistant.effect_pending\" &&\n\t\t\t\t\t(options.recovery === true || isRetryableAssistantError(response)) &&\n\t\t\t\t\tcurrent.attempt < current.generationContext.retryPolicy.maxAttempts\n\t\t\t\t) {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"assistant.retry_wait\",\n\t\t\t\t\t\tgenerationContext: current.generationContext,\n\t\t\t\t\t\tnextAttempt: current.attempt + 1,\n\t\t\t\t\t\tnotBefore: retryNotBefore(current.generationContext.retryPolicy, current.attempt),\n\t\t\t\t\t\terrorMessage: response.errorMessage ?? \"Assistant request failed\",\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfailure = providerError(source, response);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst calls = response.content.flatMap((content, sourceIndex) =>\n\t\t\t\t\tcontent.type === \"toolCall\" ? [{ sourceIndex }] : [],\n\t\t\t\t);\n\t\t\t\tif (calls.length !== 0) {\n\t\t\t\t\tconst timestamp = uuidV7Timestamp(responseEntryId);\n\t\t\t\t\tconst planned: ToolCall[] = calls.map(({ sourceIndex }) => ({\n\t\t\t\t\t\tstatus: \"planned\",\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tresultEntryId: lane.session.idGenerator.next(timestamp),\n\t\t\t\t\t}));\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"tools\",\n\t\t\t\t\t\tbatch: { assistantEntryId: responseEntryId, configuration, turnId, calls: planned },\n\t\t\t\t\t};\n\t\t\t\t} else if (response.stopReason === \"toolUse\") {\n\t\t\t\t\tcommitted = normalizeError(response, \"Provider reported tool use without any tool calls\");\n\t\t\t\t\tfailure = providerError(source, committed);\n\t\t\t\t} else {\n\t\t\t\t\tsettled = {\n\t\t\t\t\t\t...scope,\n\t\t\t\t\t\tat: \"checkpoint\",\n\t\t\t\t\t\tcontinuation: { kind: \"may_finish\", includeFinalAssistant: true },\n\t\t\t\t\t\ttriggerEntryId: responseEntryId,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst responseEntry: NewEntry<MessageEntry> = {\n\t\t\t\tid: responseEntryId,\n\t\t\t\tparentId: state.tipId,\n\t\t\t\ttype: \"message\",\n\t\t\t\tmessage: committed,\n\t\t\t};\n\t\t\tconst usageRow: Omit<UsageRow, \"seq\"> = {\n\t\t\t\tid: intent.usageId,\n\t\t\t\tusage: committed.usage,\n\t\t\t\tentryId: responseEntryId,\n\t\t\t\tadjustment: false,\n\t\t\t};\n\t\t\tif (settled === undefined && failure === undefined) {\n\t\t\t\tthrow new SessionInvariantError(\"Response settlement has no durable disposition\");\n\t\t\t}\n\t\t\tconst record =\n\t\t\t\tfailure === undefined ? undefined : operationResultRecord(meta, \"failed\", responseEntryId, failure);\n\t\t\tconst cleanup =\n\t\t\t\trecord === undefined ? [] : await operationCleanupWrites(reader, drive.operationId, current, drive.context);\n\t\t\tconst writes = [\n\t\t\t\tinsertEntry(responseEntry),\n\t\t\t\tinsertUsage(usageRow),\n\t\t\t\tsetValue(branchTip(lane.name), responseEntryId),\n\t\t\t\t...(record === undefined\n\t\t\t\t\t? [deleteList(pendingAssistantFrames(drive.operationId, responseEntryId))]\n\t\t\t\t\t: cleanup),\n\t\t\t\t...(settled?.at === \"summary.deciding\" && overflowPreparation !== undefined\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tsetValue(\n\t\t\t\t\t\t\t\toperationPreparation(drive.operationId, overflowPreparation.taskId),\n\t\t\t\t\t\t\t\toverflowPreparation.preparation,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t];\n\t\t\tconst materializeEntry = (commit: CommitResult): MessageEntry => ({\n\t\t\t\t...responseEntry,\n\t\t\t\tseq: commit.seqs[0]!,\n\t\t\t\ttimestamp: commit.timestamp,\n\t\t\t});\n\t\t\tconst events = (commit: CommitResult): HarnessEvent[] => {\n\t\t\t\tconst entry = materializeEntry(commit);\n\t\t\t\tconst batch: HarnessEvent[] = [\n\t\t\t\t\t{ type: \"entry_added\", lane: lane.name, entry, ...options },\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"usage\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trow: { ...usageRow, seq: commit.seqs[1]! },\n\t\t\t\t\t\ttotals: commit.stats.usage,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t\tif (current.at === \"assistant.effect_pending\") {\n\t\t\t\t\tif (options.recovery !== true && current.attempt > 1 && settled?.at !== \"assistant.retry_wait\") {\n\t\t\t\t\t\tconst success = committed.stopReason !== \"error\" && committed.stopReason !== \"aborted\";\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"retry_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tstep: turnId,\n\t\t\t\t\t\t\tattempt: current.attempt,\n\t\t\t\t\t\t\tsuccess,\n\t\t\t\t\t\t\t...(success\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\tfinalError:\n\t\t\t\t\t\t\t\t\t\t\tcommitted.errorMessage ?? `Assistant request ended with ${committed.stopReason}`,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (options.recovery !== true && settled?.at === \"assistant.retry_wait\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"retry_scheduled\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tstep: turnId,\n\t\t\t\t\t\t\tattempt: settled.nextAttempt,\n\t\t\t\t\t\t\tmaxAttempts: settled.generationContext.retryPolicy.maxAttempts,\n\t\t\t\t\t\t\tdelayMs: retryDelayMs(current.generationContext.retryPolicy, current.attempt),\n\t\t\t\t\t\t\tnotBefore: settled.notBefore,\n\t\t\t\t\t\t\terrorMessage: settled.errorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (options.recovery !== true && settled?.at !== \"tools\" && settled?.at !== \"assistant.retry_wait\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"turn_end\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\tturnId,\n\t\t\t\t\t\t\tmessage: committed,\n\t\t\t\t\t\t\ttoolResults: [],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (settled?.at === \"summary.deciding\") {\n\t\t\t\t\t\tbatch.push({\n\t\t\t\t\t\t\ttype: \"compaction_start\",\n\t\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tstartedAt: commit.timestamp,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (settled?.at !== \"tools\") {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"turn_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tturnId,\n\t\t\t\t\t\tmessage: committed,\n\t\t\t\t\t\ttoolResults: [],\n\t\t\t\t\t\t...options,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t(current.at === \"deferred.effect_pending\" || options.recovery !== true) &&\n\t\t\t\t\tsettled?.at === \"deferred.suspended\" &&\n\t\t\t\t\tcommitted.deferred !== undefined\n\t\t\t\t) {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"run_suspend\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\treason: \"deferred\",\n\t\t\t\t\t\tdeferred: committed.deferred,\n\t\t\t\t\t\tpoll: settled.poll,\n\t\t\t\t\t\t...(current.at === \"deferred.effect_pending\" ? options : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (record !== undefined && failure !== undefined) {\n\t\t\t\t\tbatch.push({\n\t\t\t\t\t\ttype: \"run_end\",\n\t\t\t\t\t\tlane: lane.name,\n\t\t\t\t\t\trunId: drive.operationId,\n\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\terror: failure,\n\t\t\t\t\t\tfromTipId: meta.sourceTipId,\n\t\t\t\t\t\ttipId: responseEntryId,\n\t\t\t\t\t\tendedAt: record.endedAt,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn batch;\n\t\t\t};\n\t\t\tif (record !== undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"finish\",\n\t\t\t\t\twrites,\n\t\t\t\t\trecord,\n\t\t\t\t\tlane: { tipId: responseEntryId },\n\t\t\t\t\tmaterialize: () => ({ kind: \"settled\", outcome: record }) as const,\n\t\t\t\t\tevents,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (settled === undefined) throw new SessionInvariantError(\"Response settlement is missing its next state\");\n\t\t\treturn {\n\t\t\t\tkind: \"commit\",\n\t\t\t\twrites,\n\t\t\t\toperationState: settled,\n\t\t\t\tlane: { tipId: responseEntryId },\n\t\t\t\tmaterialize: () => ({ kind: \"continue\" }) as const,\n\t\t\t\tevents,\n\t\t\t};\n\t\t},\n\t\tdrive.context,\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAgB,MAAM,uBAAuB,CAAC;AAEvE,wBAAgB,cAAc,CAC7B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,CAAC,EAC5D,OAAO,EAAE,MAAM,EACf,GAAG,SAAa,GACd,MAAM,CAGR;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/E"
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAgB,MAAM,uBAAuB,CAAC;AAEvE,wBAAgB,cAAc,CAC7B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,iBAAiB,CAAC,EAC5D,OAAO,EAAE,MAAM,EACf,GAAG,SAAa,GACd,MAAM,CAGR;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,UAAU,cAAc,CAC7B,MAA4D,EAC5D,OAAe,EACf,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/harness/runtime/drive/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,UAAU,cAAc,CAC7B,MAA4D,EAC5D,OAAe,EACf,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,MAAM,GAAG,GAAG,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAiB,EAAE,MAAmB;IAC/D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,IAAI,KAAgD,CAAC;QACrD,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAG,EAAE;YAClB,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,OAAO;YACR,CAAC;YACD,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;;YACzB,KAAK,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { type RetryPolicy, retryDelayMs } from \"@earendil-works/pi-ai\";\n\nexport function retryNotBefore(\n\tpolicy: Pick<RetryPolicy, \"baseDelayMs\" | \"maxAgentDelayMs\">,\n\tattempt: number,\n\tnow = Date.now(),\n): number {\n\tconst sum = now + retryDelayMs(policy, attempt);\n\treturn Number.isSafeInteger(sum) ? sum : Number.MAX_SAFE_INTEGER;\n}\n\nexport function waitUntil(notBefore: number, signal: AbortSignal): Promise<void> {\n\treturn new Promise<void>((resolve, reject) => {\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tconst cleanup = () => {\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst onAbort = () => {\n\t\t\tcleanup();\n\t\t\treject(signal.reason);\n\t\t};\n\t\tconst check = () => {\n\t\t\tconst remaining = notBefore - Date.now();\n\t\t\tif (remaining <= 0) {\n\t\t\t\tcleanup();\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttimer = setTimeout(check, Math.min(remaining, 2_147_483_647));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t\telse check();\n\t});\n}\n"]}
|