@averyyy/pi-coding-agent 1.0.4-piclient.1 → 1.1.0-piclient.1
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/CHANGELOG.md +52 -0
- package/dist/bundle/chunks/{anthropic-messages-K2IO6UO3.js → anthropic-messages-VWV2LQLU.js} +1 -1
- package/dist/bundle/chunks/anthropic.js +1 -1
- package/dist/bundle/chunks/{azure-openai-responses-NHLW5JRZ.js → azure-openai-responses-TJZBTKRM.js} +1 -1
- package/dist/bundle/chunks/bedrock-converse-stream.js +2 -2
- package/dist/bundle/chunks/{chunk-AEYCEUYN.js → chunk-2DXGY63V.js} +3 -3
- package/dist/bundle/chunks/{chunk-CSX55THN.js → chunk-4QEUO5LF.js} +3 -3
- package/dist/bundle/chunks/{chunk-7EJR6TT4.js → chunk-ATAYHPRT.js} +74 -66
- package/dist/bundle/chunks/chunk-G7JAXKAE.js +11 -0
- package/dist/bundle/chunks/{chunk-44C62PJ2.js → chunk-IHNTZDOC.js} +1 -1
- package/dist/bundle/chunks/{chunk-O33PDY7S.js → chunk-JPAIS7JS.js} +1 -1
- package/dist/bundle/chunks/{chunk-3AL52GGC.js → chunk-KE3SIIQZ.js} +1 -1
- package/dist/bundle/chunks/{chunk-5JWYRNJY.js → chunk-L2QJRZTO.js} +1 -1
- package/dist/bundle/chunks/chunk-LPXNMA2W.js +2 -0
- package/dist/bundle/chunks/chunk-LQELYOUU.js +2 -0
- package/dist/bundle/chunks/chunk-M6HKFBHF.js +2 -0
- package/dist/bundle/chunks/chunk-MFRJR46A.js +2 -0
- package/dist/bundle/chunks/{chunk-LD2P6SFZ.js → chunk-PMRZO46Y.js} +1 -1
- package/dist/bundle/chunks/chunk-QEAD7ZDM.js +82 -0
- package/dist/bundle/chunks/{chunk-BASBVYQV.js → chunk-SJAIFNJC.js} +1 -1
- package/dist/bundle/chunks/{chunk-S6UOZSLC.js → chunk-WMAKGH2U.js} +3 -3
- package/dist/bundle/chunks/{chunk-2AJMIBDW.js → chunk-XJNJKWWG.js} +3 -3
- package/dist/bundle/chunks/{cli-OLBSEIG4.js → cli-G46DCMLG.js} +2 -2
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-TXNQKF7U.js +2 -0
- package/dist/bundle/chunks/codemode-worker.js +2 -2
- package/dist/bundle/chunks/devin-runtime.js +1 -1
- package/dist/bundle/chunks/{easter-egg-3d-XLWVR7B5.js → easter-egg-3d-VPOZMPG6.js} +1 -1
- package/dist/bundle/chunks/{execute-JUL3TNKC.js → execute-W7LFAU5T.js} +11 -5
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/{google-generative-ai-RDSM3DET.js → google-generative-ai-MU3HY65Y.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-IAA22EFU.js → google-vertex-4KLEFGPG.js} +1 -1
- package/dist/bundle/chunks/image-resize-worker.js +1 -1
- package/dist/bundle/chunks/{llama-cpp-classify-XT44PI3C.js → llama-cpp-classify-FYN623RH.js} +2 -2
- package/dist/bundle/chunks/{mistral-conversations-ZP3T32V3.js → mistral-conversations-QSGGIXSP.js} +2 -2
- package/dist/bundle/chunks/openai-chatgpt.js +1 -1
- package/dist/bundle/chunks/{openai-codex-responses-SNUYQ3OP.js → openai-codex-responses-XHPOB5DF.js} +2 -2
- package/dist/bundle/chunks/openai-codex.js +1 -1
- package/dist/bundle/chunks/{openai-completions-PZGVLXR5.js → openai-completions-IIJZEEG4.js} +1 -1
- package/dist/bundle/chunks/openai-decisions-7HAB4DS5.js +5 -0
- package/dist/bundle/chunks/{openai-responses-VIKEOSVV.js → openai-responses-27B2XLS7.js} +1 -1
- package/dist/bundle/chunks/{openrouter-images-ZVXWCSIM.js → openrouter-images-DUPG5DZO.js} +1 -1
- package/dist/bundle/chunks/{pi-messages-TM5SOOIW.js → pi-messages-YHKPQIHC.js} +1 -1
- package/dist/bundle/chunks/{runtime-BBIT3FW5.js → runtime-PVOHGROZ.js} +1 -1
- package/dist/bundle/chunks/typesafe-system-one-JIF5KZZR.js +2 -0
- package/dist/bundle/chunks/{virtual-modules-HXQALFKD.js → virtual-modules-6AQQJ6OW.js} +1 -1
- package/dist/bundle/cli-runtime.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +13 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session.d.ts +7 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +12 -7
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +40 -45
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +2 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/types.d.ts +11 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +2 -1
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/nested-tool-calls.d.ts +1 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -1
- package/dist/core/nested-tool-calls.js +1 -0
- package/dist/core/nested-tool-calls.js.map +1 -1
- package/dist/core/pi-server-client.d.ts +2 -4
- package/dist/core/pi-server-client.d.ts.map +1 -1
- package/dist/core/pi-server-client.js +2 -13
- package/dist/core/pi-server-client.js.map +1 -1
- package/dist/core/sdk.d.ts +4 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +17 -5
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +37 -13
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +8 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +8 -3
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/edit.d.ts.map +1 -1
- package/dist/core/tools/renderers/edit.js +5 -4
- package/dist/core/tools/renderers/edit.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.js +63 -7
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/tool.js +2 -2
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +34 -11
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/mcp/cli.js +17 -23
- package/dist/extensions/mcp/cli.js.map +1 -1
- package/dist/extensions/mcp/index.d.ts.map +1 -1
- package/dist/extensions/mcp/index.js +165 -64
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/oauth.d.ts +5 -3
- package/dist/extensions/mcp/oauth.d.ts.map +1 -1
- package/dist/extensions/mcp/oauth.js +36 -10
- package/dist/extensions/mcp/oauth.js.map +1 -1
- package/dist/extensions/mcp/ui.d.ts +3 -3
- package/dist/extensions/mcp/ui.d.ts.map +1 -1
- package/dist/extensions/mcp/ui.js +10 -2
- package/dist/extensions/mcp/ui.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +17 -14
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +5 -2
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +5 -2
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +8 -2
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +5 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +10 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +50 -29
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/program-status-reporter.d.ts +34 -0
- package/dist/modes/interactive/program-status-reporter.d.ts.map +1 -0
- package/dist/modes/interactive/program-status-reporter.js +110 -0
- package/dist/modes/interactive/program-status-reporter.js.map +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +24 -0
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/ansi.d.ts +8 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +30 -11
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +12 -11
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts +12 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js +5 -0
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.js +3 -2
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +9 -10
- package/dist/utils/image-resize.js.map +1 -1
- package/docs/cli.md +4 -4
- package/docs/codemode.md +23 -3
- package/docs/environment-variables.md +1 -0
- package/docs/json.md +3 -3
- package/docs/llama-cpp.md +8 -1
- package/docs/message-types.md +22 -4
- package/docs/models.md +4 -1
- package/docs/providers.md +27 -0
- package/docs/settings.md +3 -3
- package/docs/terminal-setup.md +14 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +12 -12
- package/dist/bundle/chunks/chunk-A3JYRWB6.js +0 -2
- package/dist/bundle/chunks/chunk-CQ233VQM.js +0 -82
- package/dist/bundle/chunks/chunk-J43OEKXQ.js +0 -2
- package/dist/bundle/chunks/chunk-RUCGJH5V.js +0 -11
- package/dist/bundle/chunks/chunk-XBLMUBBW.js +0 -2
- package/dist/bundle/chunks/cloudflare-workers-ai-system-one-L4GFVN6I.js +0 -2
- package/dist/bundle/chunks/typesafe-system-one-ZZ2PGRBM.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-server-client.js","sourceRoot":"","sources":["../../src/core/pi-server-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport type {\n\tCompactionPreparationOptions,\n\tLegacyCompactResult,\n\tProxyAssistantMessageEvent,\n\tSessionTreeEntry,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AnyModel,\n\ttype AssistantImages,\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\ttype AuthOperationOptions,\n\ttype CacheRetention,\n\ttype ClassifierApi,\n\ttype ClassifierContext,\n\ttype ClassifierModel,\n\ttype ClassifierOptions,\n\ttype ClassifierResult,\n\ttype Context,\n\ttype DeferredCancelOptions,\n\ttype DeferredFetchOptions,\n\ttype DeferredHandle,\n\tEventStream,\n\tgetModelType,\n\ttype ImageApi,\n\ttype ImageModel,\n\ttype ImagesContext,\n\ttype ImagesOptions,\n\ttype Message,\n\ttype Model,\n\ttype ModelsApiStreamOptions,\n\ttype ProviderRequestOptions,\n\ttype ProviderStreamOptions,\n\tparseStreamingJson,\n\ttype SimpleStreamOptions,\n\ttype StreamOptions,\n} from \"@earendil-works/pi-ai\";\nimport { raceWithAbortSignal } from \"../utils/abort.ts\";\nimport {\n\tbuildPiServerTreePrefixHashes,\n\thashPiServerSessionEntries,\n\thashPiServerStaticContext,\n\ttype PiServerProviderCallbackRequest,\n} from \"./pi-server-protocol.ts\";\nimport { ChunkRequest } from \"./pi-server-request.ts\";\n\nclass PiServerEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {\n\tconstructor() {\n\t\tsuper(\n\t\t\t(event) => event.type === \"done\" || event.type === \"error\",\n\t\t\t(event) => {\n\t\t\t\tif (event.type === \"done\") return event.message;\n\t\t\t\tif (event.type === \"error\") return event.error;\n\t\t\t\tthrow new Error(\"Unexpected event type\");\n\t\t\t},\n\t\t);\n\t}\n}\n\nfunction getServerUrl(): string {\n\treturn process.env.PI_SERVER_URL ?? \"http://127.0.0.1:4217\";\n}\n\nfunction getAuthToken(): string {\n\treturn process.env.PI_SERVER_AUTH_TOKEN ?? \"\";\n}\n\nfunction createPiServerRequest(signal?: AbortSignal): ChunkRequest {\n\treturn new ChunkRequest({\n\t\tserverUrl: getServerUrl(),\n\t\tauthToken: getAuthToken(),\n\t\tsignal,\n\t});\n}\n\nconst sessionStaticContextHashes = new Map<string, string>();\nconst sessionTreeHashes = new Map<string, string>();\nconst sessionTreeEntryCounts = new Map<string, number>();\nconst sessionTreeLeafIds = new Map<string, string | null>();\nconst sessionHasTemporaryTree = new Set<string>();\ninterface ActivePiServerOperation {\n\townerSessionId: string;\n\tsessionId: string;\n\trunId: string;\n\tsignal?: AbortSignal;\n\tcancelListener?: () => void;\n\tcancelPromise?: Promise<void>;\n\tcancelFailed?: boolean;\n\tcancelConfirmed?: boolean;\n}\n\nconst activePiServerOperations = new Map<string, Map<string, ActivePiServerOperation>>();\nconst RESPONSE_BODY_EXCERPT_CHARS = 500;\nconst TRANSIENT_PI_SERVER_RETRY_DELAYS_MS = [250, 750, 1500];\nconst TRANSIENT_PI_SERVER_STATUS_CODES = new Set([500, 502, 503, 504, 524, 530]);\nconst PI_SERVER_RUN_RECOVERY_POLL_MS = 250;\nconst DEFAULT_PI_SERVER_RUN_RECOVERY_TIMEOUT_MS = 10 * 60 * 1000;\n\nclass PiServerRunRecoveryTimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"pi-server run recovery timed out; the server may still be processing the request\");\n\t\tthis.name = \"PiServerRunRecoveryTimeoutError\";\n\t}\n}\n\nexport function hashStaticContext(ctx: Context): string {\n\treturn hashPiServerStaticContext(ctx);\n}\n\nfunction hashEntries(entries: SessionTreeEntry[]): string {\n\treturn hashPiServerSessionEntries(entries);\n}\n\nfunction getLinearTreeFromMessages(messages: Message[]): { entries: SessionTreeEntry[]; leafId: string | null } {\n\tlet parentId: string | null = null;\n\tconst entries = messages.map((message, index): SessionTreeEntry => {\n\t\tconst id = `message-${index}`;\n\t\tconst entry: SessionTreeEntry = {\n\t\t\ttype: \"message\",\n\t\t\tid,\n\t\t\tparentId,\n\t\t\ttimestamp: new Date(message.timestamp).toISOString(),\n\t\t\tmessage,\n\t\t};\n\t\tparentId = id;\n\t\treturn entry;\n\t});\n\treturn { entries, leafId: parentId };\n}\n\nexport function resetSessionTracking(sessionId: string): void {\n\tsessionStaticContextHashes.delete(sessionId);\n\tsessionTreeHashes.delete(sessionId);\n\tsessionTreeEntryCounts.delete(sessionId);\n\tsessionTreeLeafIds.delete(sessionId);\n\tsessionHasTemporaryTree.delete(sessionId);\n}\n\nexport function resetAllSessionTracking(): void {\n\tsessionStaticContextHashes.clear();\n\tsessionTreeHashes.clear();\n\tsessionTreeEntryCounts.clear();\n\tsessionTreeLeafIds.clear();\n\tsessionHasTemporaryTree.clear();\n\tactivePiServerOperations.clear();\n}\n\nfunction registerPiServerOperation(\n\townerSessionId: string | undefined,\n\tsessionId: string,\n\trunId: string,\n\tsignal?: AbortSignal,\n): ActivePiServerOperation | undefined {\n\tif (!ownerSessionId) return undefined;\n\tlet operations = activePiServerOperations.get(ownerSessionId);\n\tif (!operations) {\n\t\toperations = new Map();\n\t\tactivePiServerOperations.set(ownerSessionId, operations);\n\t}\n\tconst operation: ActivePiServerOperation = { ownerSessionId, sessionId, runId, signal };\n\toperations.set(runId, operation);\n\tif (signal) {\n\t\tconst onAbort = () => {\n\t\t\tvoid cancelPiServerOperation(operation).catch(() => {\n\t\t\t\t// The owner session retries cancellation and reports the failure.\n\t\t\t});\n\t\t};\n\t\toperation.cancelListener = onAbort;\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t}\n\treturn operation;\n}\n\nfunction removePiServerOperation(operation: ActivePiServerOperation): void {\n\tconst operations = activePiServerOperations.get(operation.ownerSessionId);\n\toperation.cancelConfirmed = true;\n\tif (operation.signal && operation.cancelListener) {\n\t\toperation.signal.removeEventListener(\"abort\", operation.cancelListener);\n\t}\n\toperation.cancelListener = undefined;\n\tif (!operations || operations.get(operation.runId) !== operation) return;\n\toperations.delete(operation.runId);\n\tif (operations.size === 0) activePiServerOperations.delete(operation.ownerSessionId);\n}\n\nasync function finishPiServerOperation(\n\toperation: ActivePiServerOperation | undefined,\n\taborted: boolean,\n): Promise<void> {\n\tif (!operation) return;\n\tif (aborted) {\n\t\tif (operation.cancelPromise) await operation.cancelPromise;\n\t} else {\n\t\tremovePiServerOperation(operation);\n\t}\n}\n\nasync function cancelPiServerOperation(operation: ActivePiServerOperation, retryFailed = false): Promise<void> {\n\tif (operation.cancelConfirmed) return;\n\tif (retryFailed && operation.cancelFailed) {\n\t\toperation.cancelFailed = false;\n\t\toperation.cancelPromise = undefined;\n\t}\n\tif (operation.cancelPromise) return operation.cancelPromise;\n\n\tconst cancellation = (async () => {\n\t\tconst request = createPiServerRequest();\n\t\tconst response = await request.postJson(\n\t\t\t`/api/session/${encodeURIComponent(operation.sessionId)}/runs/${encodeURIComponent(operation.runId)}/abort`,\n\t\t\t{ sessionId: operation.sessionId, runId: operation.runId },\n\t\t);\n\t\tconst result = await readPiServerJson<PiServerAbortResponse>(response, \"Session run cancellation failed\");\n\t\tif (result.sessionId !== operation.sessionId || result.runId !== operation.runId) {\n\t\t\tthrow new Error(\"Session run cancellation failed (response did not echo the cancelled run)\");\n\t\t}\n\t\tif (result.status !== \"aborted\" && result.status !== \"completed\" && result.status !== \"failed\") {\n\t\t\tthrow new Error(\"Session run cancellation failed (response was not terminal)\");\n\t\t}\n\t\tremovePiServerOperation(operation);\n\t})();\n\n\toperation.cancelPromise = cancellation;\n\ttry {\n\t\tawait cancellation;\n\t} catch (error) {\n\t\toperation.cancelFailed = true;\n\t\tthrow error;\n\t}\n}\n\n/** Cancel all provider operations owned by a coding-agent session and wait for terminal acknowledgements. */\nexport async function cancelPiServerOperations(ownerSessionId: string): Promise<void> {\n\tconst operations = [...(activePiServerOperations.get(ownerSessionId)?.values() ?? [])];\n\tconst results = await Promise.allSettled(operations.map((operation) => cancelPiServerOperation(operation, true)));\n\tconst failure = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n\tif (failure) throw failure.reason;\n}\n\ninterface SessionInitResponse {\n\tsessionId: string;\n\tstaticContextHash: string;\n\ttreeHash?: string;\n\tmessageCount: number;\n\tentryCount?: number;\n\tleafId?: string | null;\n\trevision?: number;\n\tfromCache?: boolean;\n}\n\nexport interface PiServerTreeSnapshot {\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\treplace?: boolean;\n}\n\nexport interface PiServerCompactionResult {\n\tcompaction: Omit<LegacyCompactResult, \"retainedTail\">;\n\tcompactionEntry: SessionTreeEntry;\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\tmessages: Message[];\n}\n\nexport interface PiServerHistorySnapshot {\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\tmessages: Message[];\n}\n\nexport interface PiServerStreamOptions extends SimpleStreamOptions {\n\trequireCacheRetention?: boolean;\n\tonCacheRetentionResolved?: (retention: CacheRetention) => void | Promise<void>;\n\trequestKind?: \"api\" | \"simple\" | \"deferred\";\n\tdeferredHandle?: DeferredHandle;\n\tapiOptions?: StreamOptions;\n\townerSessionId?: string;\n\tsessionTree?: PiServerTreeSnapshot;\n\tephemeralMessages?: Message[];\n\tcontextOverlay?: Message[];\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>;\n}\n\ninterface PiServerErrorResponse {\n\terror: string;\n\tcode?: string;\n\tdetails?: Record<string, unknown>;\n}\n\ninterface PiServerResponseFailure {\n\tdetails: string;\n\tcode?: string;\n}\n\nclass PiServerResponseError extends Error {\n\tpublic readonly code?: string;\n\tpublic readonly details?: Record<string, unknown>;\n\n\tconstructor(message: string, code?: string, details?: Record<string, unknown>) {\n\t\tsuper(message);\n\t\tthis.name = \"PiServerResponseError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n}\n\ninterface PiServerHistoryResponse extends Partial<PiServerHistorySnapshot> {\n\tsessionId: string;\n\ttreeHash?: string;\n\tentryCount?: number;\n\tleafId?: string | null;\n\ttreePatch?: PiServerTreePatch;\n}\n\ninterface PiServerTreePatch {\n\tentriesFrom: number;\n\tbaseRevision?: number;\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\trevision: number;\n}\n\ninterface PiServerCompactionResponse extends Partial<PiServerCompactionResult> {\n\ttreePatch?: PiServerTreePatch & { baseTreeHash?: string };\n}\n\ninterface ServerSentEvent {\n\tevent: string;\n\tdata: string;\n}\n\nclass ServerSentEventParser {\n\tprivate buffer = \"\";\n\tprivate event = \"message\";\n\tprivate dataLines: string[] = [];\n\n\tfeed(text: string): ServerSentEvent[] {\n\t\tthis.buffer += text;\n\t\tconst lines = this.buffer.split(\"\\n\");\n\t\tthis.buffer = lines.pop() ?? \"\";\n\t\treturn lines.flatMap((line) => this.consumeLine(line));\n\t}\n\n\tfinish(): ServerSentEvent[] {\n\t\tconst events: ServerSentEvent[] = [];\n\t\tif (this.buffer.length > 0) {\n\t\t\tevents.push(...this.consumeLine(this.buffer));\n\t\t\tthis.buffer = \"\";\n\t\t}\n\t\tconst final = this.flush();\n\t\tif (final) events.push(final);\n\t\treturn events;\n\t}\n\n\tprivate consumeLine(rawLine: string): ServerSentEvent[] {\n\t\tconst line = rawLine.endsWith(\"\\r\") ? rawLine.slice(0, -1) : rawLine;\n\t\tif (line === \"\") {\n\t\t\tconst event = this.flush();\n\t\t\treturn event ? [event] : [];\n\t\t}\n\t\tif (line.startsWith(\":\")) return [];\n\t\tif (line.startsWith(\"event:\")) {\n\t\t\tthis.event = getServerSentEventFieldValue(line, \"event\");\n\t\t\treturn [];\n\t\t}\n\t\tif (line.startsWith(\"data:\")) {\n\t\t\tthis.dataLines.push(getServerSentEventFieldValue(line, \"data\"));\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate flush(): ServerSentEvent | undefined {\n\t\tif (this.dataLines.length === 0) return undefined;\n\t\tconst event = { event: this.event, data: this.dataLines.join(\"\\n\") };\n\t\tthis.event = \"message\";\n\t\tthis.dataLines = [];\n\t\treturn event;\n\t}\n}\n\ninterface PiServerRunResponse {\n\tcacheRetention?: CacheRetention;\n\trunId: string;\n\tstatus: \"running\" | \"completed\" | \"failed\" | \"aborted\";\n\tmessage?: AssistantMessage;\n\tcompactResult?: PiServerCompactionResponse;\n\toperationResult?:\n\t\t| AssistantImages\n\t\t| ClassifierResult\n\t\t| { cancelled: true; stopReason: \"stop\" | \"aborted\"; errorMessage?: string };\n\terrorMessage?: string;\n}\n\ninterface PiServerAbortResponse {\n\tsessionId: string;\n\trunId: string;\n\tstatus: \"aborted\" | \"completed\" | \"failed\";\n}\n\ninterface PiServerSyncOptions {\n\tsignal?: AbortSignal;\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>;\n}\n\ntype PiServerFailurePhase = \"session_init\" | \"tree_sync\" | \"provider_stream\" | \"history_reconcile\";\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getResponseStatus(response: Response): string {\n\tconst status = response.statusText ? `${response.status} ${response.statusText}` : String(response.status);\n\treturn response.status >= 500 ? `${status} (server error)` : status;\n}\n\nfunction getResponseContentType(response: Response): string {\n\treturn response.headers.get(\"content-type\") ?? \"unknown\";\n}\n\nfunction getBodyExcerpt(text: string): string {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"<empty>\";\n\tconst excerpt = trimmed.slice(0, RESPONSE_BODY_EXCERPT_CHARS);\n\treturn excerpt.length < trimmed.length ? `${excerpt}...` : excerpt;\n}\n\nfunction getJsonErrorResponse(text: string): PiServerErrorResponse | undefined {\n\tif (!text) return undefined;\n\ttry {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (!isObject(parsed) || typeof parsed.error !== \"string\" || parsed.error.length === 0) return undefined;\n\t\tconst code = parsed.code;\n\t\treturn {\n\t\t\terror: parsed.error,\n\t\t\tcode: typeof code === \"string\" ? code : undefined,\n\t\t\tdetails: isObject(parsed.details) ? parsed.details : undefined,\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction getJsonErrorText(text: string): string | undefined {\n\treturn getJsonErrorResponse(text)?.error;\n}\n\nfunction formatResponseDetails(response: Response, bodyText: string): string {\n\tconst body = getJsonErrorText(bodyText) ?? getBodyExcerpt(bodyText);\n\treturn `${getResponseStatus(response)}; content-type: ${getResponseContentType(response)}; body excerpt: ${body}`;\n}\n\nasync function readPiServerFailure(response: Response): Promise<PiServerResponseFailure> {\n\tconst bodyText = await response.text();\n\tconst errorResponse = getJsonErrorResponse(bodyText);\n\treturn {\n\t\tdetails: formatResponseDetails(response, bodyText),\n\t\tcode: errorResponse?.code,\n\t};\n}\n\nasync function readPiServerJson<T>(response: Response, errorPrefix: string): Promise<T> {\n\tconst bodyText = await response.text();\n\tif (!response.ok) {\n\t\tconst errorResponse = getJsonErrorResponse(bodyText);\n\t\tif (errorResponse) {\n\t\t\tthrow new PiServerResponseError(\n\t\t\t\t`${errorPrefix} (${formatResponseDetails(response, bodyText)})`,\n\t\t\t\terrorResponse.code,\n\t\t\t\terrorResponse.details,\n\t\t\t);\n\t\t}\n\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)})`);\n\t}\n\ttry {\n\t\treturn JSON.parse(bodyText) as T;\n\t} catch {\n\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)}; expected JSON)`);\n\t}\n}\n\nfunction getServerSentEventFieldValue(line: string, field: string): string {\n\tconst prefix = `${field}:`;\n\tconst value = line.slice(prefix.length);\n\treturn value.startsWith(\" \") ? value.slice(1) : value;\n}\n\nfunction parseServerSentEventData(event: ServerSentEvent, errorPrefix: string): unknown {\n\ttry {\n\t\treturn JSON.parse(event.data) as unknown;\n\t} catch {\n\t\tthrow new Error(`${errorPrefix} (invalid event-stream JSON data: ${getBodyExcerpt(event.data)})`);\n\t}\n}\n\nfunction formatServerSentEventError(response: Response, payload: unknown): string {\n\tconst message = isObject(payload) && typeof payload.error === \"string\" ? payload.error : JSON.stringify(payload);\n\treturn `${getResponseStatus(response)}; content-type: ${getResponseContentType(response)}; body excerpt: ${getBodyExcerpt(message)}`;\n}\n\nasync function readPiServerEventStreamJson<T>(\n\tresponse: Response,\n\terrorPrefix: string,\n\tonCallback?: (request: PiServerProviderCallbackRequest) => Promise<void>,\n): Promise<T> {\n\tif (!response.body) throw new Error(`${errorPrefix} (missing event stream body)`);\n\tconst reader = response.body.getReader();\n\tconst decoder = new TextDecoder();\n\tconst parser = new ServerSentEventParser();\n\tconst processEvents = async (events: ServerSentEvent[]): Promise<{ value: T } | undefined> => {\n\t\tfor (const event of events) {\n\t\t\tif (event.event === \"provider_callback\") {\n\t\t\t\tif (!onCallback) throw new Error(`${errorPrefix} (unexpected provider callback)`);\n\t\t\t\tawait onCallback(parseServerSentEventData(event, errorPrefix) as PiServerProviderCallbackRequest);\n\t\t\t} else if (event.event === \"error\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${errorPrefix} (${formatServerSentEventError(response, parseServerSentEventData(event, errorPrefix))})`,\n\t\t\t\t);\n\t\t\t} else if (event.event === \"result\") {\n\t\t\t\treturn { value: parseServerSentEventData(event, errorPrefix) as T };\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t};\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst chunk = await reader.read();\n\t\t\tconst result = await processEvents(\n\t\t\t\tchunk.done\n\t\t\t\t\t? [...parser.feed(decoder.decode()), ...parser.finish()]\n\t\t\t\t\t: parser.feed(decoder.decode(chunk.value, { stream: true })),\n\t\t\t);\n\t\t\tif (result) return result.value;\n\t\t\tif (chunk.done) break;\n\t\t}\n\t\tthrow new Error(`${errorPrefix} (expected result event)`);\n\t} finally {\n\t\tawait reader.cancel().catch(() => {});\n\t}\n}\n\nasync function readPiServerCompactResponse<T>(response: Response, errorPrefix: string): Promise<T> {\n\tconst contentType = getResponseContentType(response).toLowerCase().split(\";\")[0]?.trim();\n\tif (contentType === \"text/event-stream\") {\n\t\treturn readPiServerEventStreamJson<T>(response, errorPrefix);\n\t}\n\treturn readPiServerJson<T>(response, errorPrefix);\n}\n\nfunction isAbortError(error: unknown, signal: AbortSignal | undefined): boolean {\n\treturn signal?.aborted === true || (error instanceof Error && error.name === \"AbortError\");\n}\n\nfunction isTransientPiServerFetchError(error: unknown): boolean {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn /fetch failed|network|socket hang up|terminated|ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|CONNECT timeout/i.test(\n\t\tmessage,\n\t);\n}\n\nfunction isTransientPiServerError(error: unknown): boolean {\n\tif (isTransientPiServerFetchError(error)) return true;\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\t/\\b(?:500|502|503|504|524|530)\\b/.test(message) ||\n\t\t/CONNECT timeout|Bad Gateway|upstream|A timeout occurred/i.test(message)\n\t);\n}\n\nfunction isRetryablePiServerFailure(phase: PiServerFailurePhase, error: unknown): boolean {\n\tif (phase === \"provider_stream\") return true;\n\tif (phase === \"history_reconcile\") return false;\n\treturn isTransientPiServerError(error);\n}\n\nasync function waitForPiServerRetry(attempt: number, signal: AbortSignal | undefined): Promise<void> {\n\tawait sleep(TRANSIENT_PI_SERVER_RETRY_DELAYS_MS[attempt], undefined, { signal });\n}\n\nasync function postPiServerJsonWithTransientRetry<T>(\n\trequest: ChunkRequest,\n\tendpoint: string,\n\tbody: unknown,\n\terrorPrefix: string,\n): Promise<T> {\n\tfor (let attempt = 0; ; attempt++) {\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await request.postJson(endpoint, body);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\tattempt < TRANSIENT_PI_SERVER_RETRY_DELAYS_MS.length &&\n\t\t\t\t!isAbortError(error, request.options.signal) &&\n\t\t\t\tisTransientPiServerFetchError(error)\n\t\t\t) {\n\t\t\t\tawait waitForPiServerRetry(attempt, request.options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst bodyText = await response.text();\n\t\tif (!response.ok) {\n\t\t\tif (\n\t\t\t\tattempt < TRANSIENT_PI_SERVER_RETRY_DELAYS_MS.length &&\n\t\t\t\t!request.options.signal?.aborted &&\n\t\t\t\tTRANSIENT_PI_SERVER_STATUS_CODES.has(response.status)\n\t\t\t) {\n\t\t\t\tawait waitForPiServerRetry(attempt, request.options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst errorResponse = getJsonErrorResponse(bodyText);\n\t\t\tif (errorResponse) {\n\t\t\t\tthrow new PiServerResponseError(\n\t\t\t\t\t`${errorPrefix} (${formatResponseDetails(response, bodyText)})`,\n\t\t\t\t\terrorResponse.code,\n\t\t\t\t\terrorResponse.details,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)})`);\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(bodyText) as T;\n\t\t} catch {\n\t\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)}; expected JSON)`);\n\t\t}\n\t}\n}\n\nasync function ensurePiServerEventStream(response: Response): Promise<void> {\n\tconst contentType = getResponseContentType(response);\n\tif (contentType.toLowerCase().split(\";\")[0]?.trim() === \"text/event-stream\") {\n\t\treturn;\n\t}\n\tconst bodyText = await response.text();\n\tthrow new Error(`pi-server error: ${formatResponseDetails(response, bodyText)}; expected text/event-stream`);\n}\n\nasync function ensureSessionInit(\n\tsessionId: string,\n\tcontext: Context,\n\trequest: ChunkRequest,\n): Promise<SessionInitResponse> {\n\tconst currentHash = hashStaticContext(context);\n\tconst previousHash = sessionStaticContextHashes.get(sessionId);\n\n\tif (previousHash === currentHash) {\n\t\treturn {\n\t\t\tsessionId,\n\t\t\tstaticContextHash: previousHash,\n\t\t\tmessageCount: 0,\n\t\t\tfromCache: true,\n\t\t};\n\t}\n\n\tconst staticContext = {\n\t\tsystemPrompt: context.systemPrompt,\n\t\ttools: context.tools,\n\t};\n\n\tconst endpoint = previousHash === undefined ? \"/api/session/init\" : \"/api/session/update\";\n\n\tconst result = await postPiServerJsonWithTransientRetry<SessionInitResponse>(\n\t\trequest,\n\t\tendpoint,\n\t\t{ sessionId, staticContext },\n\t\t\"Session init failed\",\n\t);\n\tsessionStaticContextHashes.set(sessionId, currentHash);\n\tif (result.treeHash !== undefined) {\n\t\tsessionTreeHashes.set(sessionId, result.treeHash);\n\t\tsessionTreeLeafIds.set(sessionId, result.leafId ?? null);\n\t\tif (result.entryCount !== undefined) {\n\t\t\tsessionTreeEntryCounts.set(sessionId, result.entryCount);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction getStaticContext(context: Context) {\n\treturn {\n\t\tsystemPrompt: context.systemPrompt,\n\t\ttools: context.tools,\n\t};\n}\n\nfunction markTreeSynced(sessionId: string, tree: PiServerTreeSnapshot): void {\n\tconst prefixHashes = buildPiServerTreePrefixHashes(tree.entries);\n\tsessionTreeHashes.set(sessionId, prefixHashes[prefixHashes.length - 1]);\n\tsessionTreeEntryCounts.set(sessionId, tree.entries.length);\n\tsessionTreeLeafIds.set(sessionId, tree.leafId);\n\tif (tree.replace) {\n\t\tsessionHasTemporaryTree.add(sessionId);\n\t} else {\n\t\tsessionHasTemporaryTree.delete(sessionId);\n\t}\n}\n\nasync function postTreeJson(\n\trequest: ChunkRequest,\n\tendpoint: string,\n\tbody: unknown,\n\terrorPrefix: string,\n): Promise<void> {\n\tawait postPiServerJsonWithTransientRetry<unknown>(request, endpoint, body, errorPrefix);\n}\n\nasync function fetchPiServerHistory(\n\tsessionId: string,\n\trequest: ChunkRequest,\n\tlocalTree?: PiServerTreeSnapshot,\n): Promise<PiServerHistorySnapshot | undefined> {\n\tconst prefixHashes = localTree ? buildPiServerTreePrefixHashes(localTree.entries) : undefined;\n\tconst historyUrl =\n\t\tlocalTree && prefixHashes\n\t\t\t? `/api/session/${encodeURIComponent(sessionId)}/history?entriesFrom=${localTree.entries.length}&baseTreeHash=${encodeURIComponent(prefixHashes[prefixHashes.length - 1])}`\n\t\t\t: `/api/session/${encodeURIComponent(sessionId)}/history`;\n\tconst response = await request.getJson(historyUrl);\n\tif (response.status === 404) {\n\t\treturn undefined;\n\t}\n\tconst history = await readPiServerJson<PiServerHistoryResponse>(response, \"Session history reconciliation failed\");\n\tif (history.treePatch && localTree) {\n\t\treturn {\n\t\t\tentries: [...localTree.entries.slice(0, history.treePatch.entriesFrom), ...history.treePatch.entries],\n\t\t\tleafId: history.treePatch.leafId,\n\t\t\tmessages: history.messages ?? [],\n\t\t};\n\t}\n\tif (!history.entries || history.leafId === undefined || !history.messages) {\n\t\tthrow new Error(\"Session history reconciliation failed (response did not include the session tree)\");\n\t}\n\treturn {\n\t\tentries: history.entries,\n\t\tleafId: history.leafId,\n\t\tmessages: history.messages,\n\t};\n}\n\nasync function applyPiServerHistory(\n\tsessionId: string,\n\tsnapshot: PiServerHistorySnapshot,\n\tonHistoryReconciled: ((snapshot: PiServerHistorySnapshot) => void | Promise<void>) | undefined,\n): Promise<void> {\n\tmarkTreeSynced(sessionId, snapshot);\n\tawait onHistoryReconciled?.(snapshot);\n}\n\nasync function fetchPiServerRun(\n\tsessionId: string,\n\trunId: string,\n\trequest: ChunkRequest,\n): Promise<PiServerRunResponse | undefined> {\n\tconst response = await request.getJson(\n\t\t`/api/session/${encodeURIComponent(sessionId)}/runs/${encodeURIComponent(runId)}`,\n\t);\n\tif (response.status === 404) {\n\t\treturn undefined;\n\t}\n\treturn readPiServerJson<PiServerRunResponse>(response, \"Session run recovery failed\");\n}\n\nasync function waitForPiServerRunCompletion(\n\tsessionId: string,\n\trunId: string,\n\trequest: ChunkRequest,\n\toptions: PiServerStreamOptions | undefined,\n): Promise<PiServerRunResponse | undefined> {\n\tconst deadline = Date.now() + DEFAULT_PI_SERVER_RUN_RECOVERY_TIMEOUT_MS;\n\tfor (;;) {\n\t\tconst run = await fetchPiServerRun(sessionId, runId, request);\n\t\tif (!run || run.status !== \"running\") return run;\n\t\tif (Date.now() >= deadline) throw new PiServerRunRecoveryTimeoutError();\n\t\tawait sleep(PI_SERVER_RUN_RECOVERY_POLL_MS, undefined, { signal: options?.signal });\n\t}\n}\n\nfunction getKnownServerPrefixIds(sessionId: string, entries: SessionTreeEntry[]): Set<string> | undefined {\n\tconst entryCount = sessionTreeEntryCounts.get(sessionId);\n\tconst treeHash = sessionTreeHashes.get(sessionId);\n\tif (entryCount === undefined || treeHash === undefined || entryCount > entries.length) {\n\t\treturn undefined;\n\t}\n\tconst prefixHashes = buildPiServerTreePrefixHashes(entries);\n\tif (prefixHashes[entryCount] !== treeHash) {\n\t\treturn undefined;\n\t}\n\treturn new Set(entries.slice(0, entryCount).map((entry) => entry.id));\n}\n\nfunction isRecoverableTreeDivergenceCode(code: string | undefined): boolean {\n\treturn code === \"PARENT_ENTRY_NOT_FOUND\" || code === \"LEAF_ID_NOT_FOUND\" || code === \"ENTRY_ALREADY_EXISTS\";\n}\n\nfunction isRecoverableMissingServerStateCode(code: string | undefined): boolean {\n\treturn code === \"SESSION_NOT_FOUND\" || code === \"SESSION_NO_STATIC_CONTEXT\" || isRecoverableTreeDivergenceCode(code);\n}\n\nfunction isRecoverableTreeDivergenceError(error: unknown): boolean {\n\tif (error instanceof PiServerResponseError) {\n\t\treturn isRecoverableTreeDivergenceCode(error.code);\n\t}\n\tif (error && typeof error === \"object\" && \"code\" in error) {\n\t\treturn isRecoverableTreeDivergenceCode((error as { code?: string }).code);\n\t}\n\treturn false;\n}\n\nfunction isRecoverableMissingServerState(response: Response, errorCode?: string): boolean {\n\tif (response.status !== 400 && response.status !== 404) return false;\n\treturn isRecoverableMissingServerStateCode(errorCode);\n}\n\nasync function syncFullPiServerTree(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\trequest: ChunkRequest,\n): Promise<void> {\n\tawait postTreeJson(\n\t\trequest,\n\t\t\"/api/session/tree/sync\",\n\t\t{\n\t\t\tsessionId,\n\t\t\tentries: tree.entries,\n\t\t\tleafId: tree.leafId,\n\t\t\tstaticContext: getStaticContext(context),\n\t\t},\n\t\t\"Session tree sync failed\",\n\t);\n\tmarkTreeSynced(sessionId, tree);\n}\n\nfunction shouldUseServerHistory(sessionId: string, tree: PiServerTreeSnapshot): boolean {\n\treturn !tree.replace && !sessionHasTemporaryTree.has(sessionId) && (sessionTreeEntryCounts.get(sessionId) ?? 0) > 0;\n}\n\nasync function recoverPiServerTreeDivergence(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\trequest: ChunkRequest,\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>,\n): Promise<PiServerHistorySnapshot | undefined> {\n\tif (shouldUseServerHistory(sessionId, tree)) {\n\t\tconst snapshot = await fetchPiServerHistory(sessionId, request, tree);\n\t\tif (snapshot && snapshot.entries.length > 0) {\n\t\t\tawait applyPiServerHistory(sessionId, snapshot, onHistoryReconciled);\n\t\t\treturn snapshot;\n\t\t}\n\t}\n\n\tawait syncFullPiServerTree(sessionId, context, tree, request);\n}\n\nexport async function syncPiServerTree(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\toptions?: PiServerSyncOptions,\n): Promise<void> {\n\tconst request = createPiServerRequest(options?.signal);\n\tawait ensureSessionInit(sessionId, context, request);\n\tconst reconciled = await syncPiServerTreeWithRequest(\n\t\tsessionId,\n\t\tcontext,\n\t\ttree,\n\t\trequest,\n\t\toptions?.onHistoryReconciled,\n\t);\n\tif (reconciled) {\n\t\tthrow new Error(\"pi-server history differed from local history; local session was reconciled to server history\");\n\t}\n}\n\nasync function syncPiServerTreeWithRequest(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\trequest: ChunkRequest,\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>,\n): Promise<PiServerHistorySnapshot | undefined> {\n\tconst syncTree = tree;\n\tconst currentHash = hashEntries(syncTree.entries);\n\tconst previousHash = sessionTreeHashes.get(sessionId);\n\tconst previousLeafId = sessionTreeLeafIds.get(sessionId);\n\n\tif (!tree.replace && previousHash === currentHash) {\n\t\tif (previousLeafId !== syncTree.leafId) {\n\t\t\ttry {\n\t\t\t\tawait postTreeJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"/api/session/tree/switch\",\n\t\t\t\t\t{ sessionId, leafId: syncTree.leafId },\n\t\t\t\t\t\"Session tree switch failed\",\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isRecoverableTreeDivergenceError(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn recoverPiServerTreeDivergence(sessionId, context, syncTree, request, onHistoryReconciled);\n\t\t\t}\n\t\t\tsessionTreeLeafIds.set(sessionId, syncTree.leafId);\n\t\t}\n\t\tmarkTreeSynced(sessionId, syncTree);\n\t\treturn;\n\t}\n\n\tconst syncedIds =\n\t\t!tree.replace && !sessionHasTemporaryTree.has(sessionId)\n\t\t\t? getKnownServerPrefixIds(sessionId, syncTree.entries)\n\t\t\t: undefined;\n\tif (syncedIds) {\n\t\tconst deltaEntries = syncTree.entries.filter((entry) => !syncedIds.has(entry.id));\n\t\tif (deltaEntries.length > 0) {\n\t\t\ttry {\n\t\t\t\tawait postTreeJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"/api/session/tree/append\",\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tentries: deltaEntries,\n\t\t\t\t\t\tleafId: syncTree.leafId,\n\t\t\t\t\t\tstaticContext: getStaticContext(context),\n\t\t\t\t\t},\n\t\t\t\t\t\"Session tree append failed\",\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isRecoverableTreeDivergenceError(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn recoverPiServerTreeDivergence(sessionId, context, syncTree, request, onHistoryReconciled);\n\t\t\t}\n\t\t\tmarkTreeSynced(sessionId, syncTree);\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn recoverPiServerTreeDivergence(sessionId, context, syncTree, request, onHistoryReconciled);\n}\n\nfunction serializeOptions(options: SimpleStreamOptions | undefined): SimpleStreamOptions {\n\treturn {\n\t\ttemperature: options?.temperature,\n\t\tmaxTokens: options?.maxTokens,\n\t\tsamplingParams: options?.samplingParams,\n\t\ttoolChoice: options?.toolChoice,\n\t\tdeferred: options?.deferred,\n\t\tenv: options?.env,\n\t\treasoning: options?.reasoning,\n\t\tcacheRetention: options?.cacheRetention,\n\t\tsessionId: options?.sessionId,\n\t\tapiKey: options?.apiKey,\n\t\theaders: options?.headers,\n\t\tmetadata: options?.metadata,\n\t\ttransport: options?.transport,\n\t\tthinkingBudgets: options?.thinkingBudgets,\n\t\ttimeoutMs: options?.timeoutMs,\n\t\twebsocketConnectTimeoutMs: options?.websocketConnectTimeoutMs,\n\t\tmaxRetries: options?.maxRetries,\n\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t};\n}\n\nexport function streamRawPiServer<TApi extends string>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ModelsApiStreamOptions<TApi>,\n): Promise<PiServerEventStream> {\n\tif (options?.transformPreparedStreamOptions) {\n\t\tthrow new Error(\"Prepared stream option transforms cannot execute on pi-server\");\n\t}\n\treturn streamPiServer(model, context, {\n\t\tsignal: options?.signal,\n\t\tsessionId: options?.sessionId,\n\t\tonProviderStreamEvent: options?.onProviderStreamEvent,\n\t\tonPayload: options?.onPayload,\n\t\tonResponse: options?.onResponse,\n\t\tfetch: options?.fetch,\n\t\trequestKind: \"api\",\n\t\tapiOptions: options ?? {},\n\t});\n}\n\nexport function fetchDeferredPiServer(\n\tmodel: Model<string>,\n\thandle: DeferredHandle,\n\toptions?: DeferredFetchOptions,\n): Promise<PiServerEventStream> {\n\treturn streamPiServer(\n\t\tmodel,\n\t\t{ messages: [] },\n\t\t{\n\t\t\t...options,\n\t\t\trequestKind: \"deferred\",\n\t\t\tdeferredHandle: handle,\n\t\t\tapiOptions: options,\n\t\t},\n\t);\n}\n\nexport async function cancelDeferredPiServer(\n\tmodel: Model<string>,\n\thandle: DeferredHandle,\n\toptions?: DeferredCancelOptions,\n): Promise<void> {\n\tassertNoCustomPiServerFetch(options);\n\tconst result = await postPiServerModelOperation<{ cancelled: true; stopReason: \"stop\" }, Model<string>>(\n\t\t\"/api/cancel-deferred\",\n\t\t{ model, handle, options: serializeApiOptions(options ?? {}) },\n\t\tmodel,\n\t\toptions,\n\t);\n\tif (result.cancelled !== true || result.stopReason !== \"stop\")\n\t\tthrow new Error(\"pi-server deferred cancellation did not complete\");\n}\n\nexport interface PiServerCompactOptions extends SimpleStreamOptions {\n\townerSessionId?: string;\n\tcustomInstructions?: string;\n\tsettings?: unknown;\n\tpreparation?: CompactionPreparationOptions;\n\t/** Fixed-size digest of the exact provider message overlay for this session. */\n\tcacheContextHash?: string;\n\t/** Fixed-size digest of the synchronized static prompt and tools. */\n\tcacheStaticContextHash?: string;\n\tcacheFallbackReason?: string;\n\tsessionTree?: PiServerTreeSnapshot;\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>;\n}\n\nexport async function compactPiServer(\n\tmodel: Model<any>,\n\tcontext: Context,\n\toptions?: PiServerCompactOptions,\n): Promise<PiServerCompactionResult> {\n\tconst sessionId = options?.sessionId ?? \"default\";\n\tconst runId = randomUUID();\n\tconst operation = registerPiServerOperation(options?.ownerSessionId ?? sessionId, sessionId, runId, options?.signal);\n\tconst request = createPiServerRequest(options?.signal);\n\n\ttry {\n\t\tawait ensureSessionInit(sessionId, context, request);\n\t\tlet tree = options?.sessionTree ?? getLinearTreeFromMessages(context.messages as Message[]);\n\t\tlet preparation = options?.preparation;\n\t\tconst syncTree = async () => {\n\t\t\tconst reconciled = await syncPiServerTreeWithRequest(\n\t\t\t\tsessionId,\n\t\t\t\tcontext,\n\t\t\t\ttree,\n\t\t\t\trequest,\n\t\t\t\toptions?.onHistoryReconciled,\n\t\t\t);\n\t\t\tif (reconciled) {\n\t\t\t\ttree = reconciled;\n\t\t\t\t// A forced cut point belongs to the old branch. Recompute it on the authoritative tree.\n\t\t\t\tpreparation = undefined;\n\t\t\t}\n\t\t};\n\t\tawait syncTree();\n\n\t\tconst makeBody = () => ({\n\t\t\tsessionId,\n\t\t\trunId,\n\t\t\tmodel,\n\t\t\toptions: serializeOptions(options),\n\t\t\tsettings: options?.settings,\n\t\t\tpreparation,\n\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\tcacheContextHash: options?.cacheContextHash,\n\t\t\tcacheStaticContextHash: options?.cacheStaticContextHash,\n\t\t\tcacheFallbackReason: options?.cacheFallbackReason,\n\t\t\tbaseTreeHash: sessionTreeHashes.get(sessionId) ?? hashEntries(tree.entries),\n\t\t\tstreamResponse: true,\n\t\t});\n\t\tlet response = await request.postJson(\"/api/session/compact\", makeBody());\n\t\tif (!response.ok) {\n\t\t\tlet failure = await readPiServerFailure(response);\n\t\t\tif (!options?.signal?.aborted && isRecoverableMissingServerState(response, failure.code)) {\n\t\t\t\tresetSessionTracking(sessionId);\n\t\t\t\tawait ensureSessionInit(sessionId, context, request);\n\t\t\t\tawait syncTree();\n\t\t\t\tresponse = await request.postJson(\"/api/session/compact\", makeBody());\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tfailure = { details: \"\", code: undefined };\n\t\t\t\t} else {\n\t\t\t\t\tfailure = await readPiServerFailure(response);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`Server compaction failed (${failure.details})`);\n\t\t\t}\n\t\t}\n\t\tlet result: PiServerCompactionResponse;\n\t\ttry {\n\t\t\tresult = await readPiServerCompactResponse<PiServerCompactionResponse>(response, \"Server compaction failed\");\n\t\t} catch (error) {\n\t\t\tif (options?.signal?.aborted || !getResponseContentType(response).startsWith(\"text/event-stream\")) throw error;\n\t\t\tconst run = await waitForPiServerRunCompletion(sessionId, runId, request, options);\n\t\t\tif (run?.status !== \"completed\" || !run.compactResult) {\n\t\t\t\tif (run?.errorMessage) throw new Error(`Server compaction failed: ${run.errorMessage}`);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tresult = run.compactResult;\n\t\t}\n\t\tif (!result.compaction) {\n\t\t\tthrow new Error(\"Server compaction response did not include a compaction result\");\n\t\t}\n\t\tconst resultEntries =\n\t\t\tresult.entries ??\n\t\t\t(result.treePatch\n\t\t\t\t? [...tree.entries.slice(0, result.treePatch.entriesFrom), ...result.treePatch.entries]\n\t\t\t\t: undefined);\n\t\tconst resultLeafId = result.leafId ?? result.treePatch?.leafId;\n\t\tif (!result.compactionEntry || !resultEntries || resultLeafId === undefined) {\n\t\t\tthrow new Error(\"Server compaction response did not include the updated session tree\");\n\t\t}\n\t\tmarkTreeSynced(sessionId, { entries: resultEntries, leafId: resultLeafId });\n\t\treturn {\n\t\t\tcompaction: result.compaction,\n\t\t\tcompactionEntry: result.compactionEntry,\n\t\t\tentries: resultEntries,\n\t\t\tleafId: resultLeafId,\n\t\t\tmessages: result.messages ?? [],\n\t\t};\n\t} finally {\n\t\tawait finishPiServerOperation(operation, options?.signal?.aborted === true);\n\t}\n}\n\nexport async function streamPiServer(\n\tmodel: Model<any>,\n\tcontext: Context,\n\toptions?: PiServerStreamOptions,\n): Promise<PiServerEventStream> {\n\tassertNoCustomPiServerFetch(options);\n\tassertNoCustomPiServerFetch(options?.apiOptions);\n\tconst sessionId = options?.sessionId ?? randomUUID();\n\tconst runId = randomUUID();\n\tconst isEphemeralSession = options?.sessionId === undefined;\n\tconst operation = registerPiServerOperation(options?.ownerSessionId ?? sessionId, sessionId, runId, options?.signal);\n\tconst stream = new PiServerEventStream();\n\n\tconst partial: AssistantMessage = {\n\t\trole: \"assistant\",\n\t\tstopReason: \"stop\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\ttimestamp: Date.now(),\n\t};\n\n\t(async () => {\n\t\tlet phase: PiServerFailurePhase = \"session_init\";\n\t\tlet streamOpened = false;\n\t\tlet observerFailed = false;\n\t\tlet callbackFailed = false;\n\t\tlet cacheRetention: CacheRetention | undefined;\n\t\tconst requireCacheRetention = options?.requireCacheRetention || options?.onCacheRetentionResolved !== undefined;\n\t\tconst applyCachePolicy = async (retention: unknown): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tif (retention !== \"none\" && retention !== \"short\" && retention !== \"long\") {\n\t\t\t\t\tthrow new Error(\"pi-server cache policy has an invalid cacheRetention\");\n\t\t\t\t}\n\t\t\t\tif (cacheRetention !== undefined) {\n\t\t\t\t\tif (cacheRetention !== retention) throw new Error(\"pi-server cache policy changed during the same run\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcacheRetention = retention;\n\t\t\t\tawait raceWithAbortSignal(\n\t\t\t\t\tPromise.resolve().then(() => options?.onCacheRetentionResolved?.(retention)),\n\t\t\t\t\toptions?.signal,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tobserverFailed = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t};\n\t\ttry {\n\t\t\tconst request = createPiServerRequest(options?.signal);\n\t\t\tawait ensureSessionInit(sessionId, context, request);\n\n\t\t\tconst makeBody = () => ({\n\t\t\t\tsessionId,\n\t\t\t\trunId,\n\t\t\t\tmodel,\n\t\t\t\toptions:\n\t\t\t\t\toptions?.requestKind === \"api\" || options?.requestKind === \"deferred\"\n\t\t\t\t\t\t? serializeApiOptions(options.apiOptions ?? {})\n\t\t\t\t\t\t: serializeOptions(options),\n\t\t\t\trequestKind: options?.requestKind,\n\t\t\t\tdeferredHandle: options?.deferredHandle,\n\t\t\t\tobserveProviderStreamEvents: options?.onProviderStreamEvent !== undefined,\n\t\t\t\tcallbacks: { onPayload: options?.onPayload !== undefined, onResponse: options?.onResponse !== undefined },\n\t\t\t\tcontextOverlay: options?.contextOverlay ?? [\n\t\t\t\t\t...(context.messages as Message[]),\n\t\t\t\t\t...(options?.ephemeralMessages ?? []),\n\t\t\t\t],\n\t\t\t});\n\t\t\tphase = \"provider_stream\";\n\t\t\tlet response = await request.postJson(\"/api/stream\", makeBody());\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlet failure = await readPiServerFailure(response);\n\t\t\t\tif (!options?.signal?.aborted && isRecoverableMissingServerState(response, failure.code)) {\n\t\t\t\t\tresetSessionTracking(sessionId);\n\t\t\t\t\tawait ensureSessionInit(sessionId, context, request);\n\t\t\t\t\tresponse = await request.postJson(\"/api/stream\", makeBody());\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\tfailure = { details: \"\", code: undefined };\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfailure = await readPiServerFailure(response);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`pi-server error: ${failure.details}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait ensurePiServerEventStream(response);\n\t\t\tstreamOpened = true;\n\t\t\tconst reader = response.body!.getReader();\n\t\t\tconst decoder = new TextDecoder();\n\t\t\tconst parser = new ServerSentEventParser();\n\t\t\tlet terminalReceived = false;\n\n\t\t\tconst consumeEvents = async (events: ServerSentEvent[]): Promise<void> => {\n\t\t\t\tfor (const serverEvent of events) {\n\t\t\t\t\tif (serverEvent.event === \"cache_policy\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst policy = parseServerSentEventData(serverEvent, \"pi-server cache policy\");\n\t\t\t\t\t\t\tawait applyCachePolicy(isObject(policy) ? policy.cacheRetention : undefined);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tobserverFailed = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (serverEvent.event === \"provider_callback\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait handleProviderCallback(\n\t\t\t\t\t\t\t\tparseServerSentEventData(serverEvent, \"pi-server callback\") as PiServerProviderCallbackRequest,\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\trunId,\n\t\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tcallbackFailed = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst proxyEvent = parseServerSentEventData(\n\t\t\t\t\t\tserverEvent,\n\t\t\t\t\t\t\"pi-server stream\",\n\t\t\t\t\t) as ProxyAssistantMessageEvent;\n\t\t\t\t\tif (requireCacheRetention && cacheRetention === undefined && proxyEvent.type !== \"error\") {\n\t\t\t\t\t\tobserverFailed = true;\n\t\t\t\t\t\tthrow new Error(\"pi-server stream is missing its resolved cache policy\");\n\t\t\t\t\t}\n\t\t\t\t\tif (proxyEvent.type === \"provider_stream_event\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait options?.onProviderStreamEvent?.(proxyEvent.data, proxyEvent.model);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tobserverFailed = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst event = processProxyEvent(proxyEvent, partial);\n\t\t\t\t\tif (!event) continue;\n\t\t\t\t\tif (event.type === \"done\" || event.type === \"error\") terminalReceived = true;\n\t\t\t\t\tstream.push(event);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\n\t\t\t\tif (options?.signal?.aborted) {\n\t\t\t\t\tthrow new Error(\"Request aborted by user\");\n\t\t\t\t}\n\n\t\t\t\tawait consumeEvents(parser.feed(decoder.decode(value, { stream: true })));\n\t\t\t}\n\t\t\tawait consumeEvents(parser.feed(decoder.decode()));\n\t\t\tawait consumeEvents(parser.finish());\n\n\t\t\tif (options?.signal?.aborted) {\n\t\t\t\tthrow new Error(\"Request aborted by user\");\n\t\t\t}\n\t\t\tif (!terminalReceived) {\n\t\t\t\tthrow new Error(\"pi-server stream ended before a terminal response event\");\n\t\t\t}\n\n\t\t\tif (isEphemeralSession) {\n\t\t\t\tresetSessionTracking(sessionId);\n\t\t\t}\n\n\t\t\tstream.end();\n\t\t} catch (error) {\n\t\t\tlet errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t// Same-run recovery only applies to an interrupted event-stream. HTTP/proxy\n\t\t\t// failures before the stream starts (502/504/fetch failed) never opened a run\n\t\t\t// we can poll; attempting recovery against a down proxy reclassifies the error\n\t\t\t// as history_reconcile and blocks session auto-retry.\n\t\t\tif (\n\t\t\t\t!options?.signal?.aborted &&\n\t\t\t\tphase === \"provider_stream\" &&\n\t\t\t\tstreamOpened &&\n\t\t\t\t!observerFailed &&\n\t\t\t\t!callbackFailed\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tconst recoveredRun = await waitForPiServerRunCompletion(\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\tcreatePiServerRequest(options?.signal),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\trecoveredRun?.cacheRetention !== undefined ||\n\t\t\t\t\t\t(requireCacheRetention && recoveredRun?.status === \"completed\")\n\t\t\t\t\t) {\n\t\t\t\t\t\tawait applyCachePolicy(recoveredRun?.cacheRetention);\n\t\t\t\t\t}\n\t\t\t\t\tif (recoveredRun?.status === \"completed\" && recoveredRun.message) {\n\t\t\t\t\t\tswitch (recoveredRun.message.stopReason) {\n\t\t\t\t\t\t\tcase \"stop\":\n\t\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\tcase \"toolUse\":\n\t\t\t\t\t\t\tcase \"deferred\":\n\t\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\t\ttype: \"done\",\n\t\t\t\t\t\t\t\t\treason: recoveredRun.message.stopReason,\n\t\t\t\t\t\t\t\t\tmessage: recoveredRun.message,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"aborted\":\n\t\t\t\t\t\t\t\tstream.push({ type: \"error\", reason: \"aborted\", error: recoveredRun.message });\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"error\":\n\t\t\t\t\t\t\t\tstream.push({ type: \"error\", reason: \"error\", error: recoveredRun.message });\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstream.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (recoveredRun?.status === \"failed\" && recoveredRun.errorMessage) {\n\t\t\t\t\t\tif (recoveredRun.message) {\n\t\t\t\t\t\t\tstream.push({ type: \"error\", reason: \"error\", error: recoveredRun.message });\n\t\t\t\t\t\t\tstream.end();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorMessage = recoveredRun.errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tif (recoveredRun?.status === \"aborted\") {\n\t\t\t\t\t\terrorMessage = recoveredRun.errorMessage ?? \"pi-server run aborted\";\n\t\t\t\t\t}\n\t\t\t\t} catch (recoveryError) {\n\t\t\t\t\tphase = \"history_reconcile\";\n\t\t\t\t\terrorMessage = recoveryError instanceof Error ? recoveryError.message : String(recoveryError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(options?.signal?.aborted || callbackFailed || observerFailed) &&\n\t\t\t\toperation &&\n\t\t\t\t!operation.cancelConfirmed\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cancelPiServerOperation(operation);\n\t\t\t\t} catch (cancelError) {\n\t\t\t\t\terrorMessage = `${errorMessage}; cancellation failed: ${\n\t\t\t\t\t\tcancelError instanceof Error ? cancelError.message : String(cancelError)\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst reason = options?.signal?.aborted ? \"aborted\" : \"error\";\n\t\t\tpartial.stopReason = reason;\n\t\t\tpartial.errorMessage = errorMessage;\n\t\t\tpartial.diagnostics = [\n\t\t\t\t...(partial.diagnostics ?? []),\n\t\t\t\t{\n\t\t\t\t\ttype: \"pi_server_failure\",\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\terror: { name: error instanceof Error ? error.name : \"Error\", message: errorMessage },\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tsource: \"pi-server\",\n\t\t\t\t\t\tretryable: !callbackFailed && !observerFailed && isRetryablePiServerFailure(phase, error),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t\tstream.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\treason,\n\t\t\t\terror: partial,\n\t\t\t});\n\t\t\tstream.end();\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tawait finishPiServerOperation(\n\t\t\t\t\toperation,\n\t\t\t\t\toptions?.signal?.aborted === true || callbackFailed || observerFailed,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// The owning session's cancellation helper reports the failure and keeps\n\t\t\t\t// this operation registered for a retry.\n\t\t\t}\n\t\t}\n\t})();\n\n\treturn stream;\n}\n\nfunction processProxyEvent(\n\tproxyEvent: ProxyAssistantMessageEvent,\n\tpartial: AssistantMessage,\n): AssistantMessageEvent | undefined {\n\tswitch (proxyEvent.type) {\n\t\tcase \"provider_stream_event\":\n\t\t\treturn undefined;\n\t\tcase \"start\":\n\t\t\treturn { type: \"start\", partial };\n\t\tcase \"text_start\":\n\t\t\tpartial.content[proxyEvent.contentIndex] = { type: \"text\", text: \"\" };\n\t\t\treturn { type: \"text_start\", contentIndex: proxyEvent.contentIndex, partial };\n\t\tcase \"text_delta\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"text\") {\n\t\t\t\tcontent.text += proxyEvent.delta;\n\t\t\t\treturn { type: \"text_delta\", contentIndex: proxyEvent.contentIndex, delta: proxyEvent.delta, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received text_delta for non-text content\");\n\t\t}\n\t\tcase \"text_end\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"text\") {\n\t\t\t\tcontent.textSignature = proxyEvent.contentSignature;\n\t\t\t\treturn { type: \"text_end\", contentIndex: proxyEvent.contentIndex, content: content.text, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received text_end for non-text content\");\n\t\t}\n\t\tcase \"thinking_start\":\n\t\t\tpartial.content[proxyEvent.contentIndex] = { type: \"thinking\", thinking: \"\" };\n\t\t\treturn { type: \"thinking_start\", contentIndex: proxyEvent.contentIndex, partial };\n\t\tcase \"thinking_delta\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"thinking\") {\n\t\t\t\tcontent.thinking += proxyEvent.delta;\n\t\t\t\treturn { type: \"thinking_delta\", contentIndex: proxyEvent.contentIndex, delta: proxyEvent.delta, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received thinking_delta for non-thinking content\");\n\t\t}\n\t\tcase \"thinking_end\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"thinking\") {\n\t\t\t\tcontent.thinkingSignature = proxyEvent.contentSignature;\n\t\t\t\treturn { type: \"thinking_end\", contentIndex: proxyEvent.contentIndex, content: content.thinking, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received thinking_end for non-thinking content\");\n\t\t}\n\t\tcase \"toolcall_start\":\n\t\t\tpartial.content[proxyEvent.contentIndex] = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: proxyEvent.id,\n\t\t\t\tname: proxyEvent.toolName,\n\t\t\t\targuments: {},\n\t\t\t\tpartialJson: \"\",\n\t\t\t} as any;\n\t\t\treturn { type: \"toolcall_start\", contentIndex: proxyEvent.contentIndex, partial };\n\t\tcase \"toolcall_delta\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"toolCall\") {\n\t\t\t\t(content as any).partialJson += proxyEvent.delta;\n\t\t\t\tcontent.arguments = parseStreamingJson((content as any).partialJson) || {};\n\t\t\t\tpartial.content[proxyEvent.contentIndex] = { ...content };\n\t\t\t\treturn { type: \"toolcall_delta\", contentIndex: proxyEvent.contentIndex, delta: proxyEvent.delta, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received toolcall_delta for non-toolCall content\");\n\t\t}\n\t\tcase \"toolcall_end\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"toolCall\") {\n\t\t\t\tObject.assign(content, proxyEvent.toolCall);\n\t\t\t\tdelete (content as any).partialJson;\n\t\t\t\treturn { type: \"toolcall_end\", contentIndex: proxyEvent.contentIndex, toolCall: content, partial };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"done\":\n\t\t\tif (proxyEvent.message) return { type: \"done\", reason: proxyEvent.reason, message: proxyEvent.message };\n\t\t\tpartial.stopReason = proxyEvent.reason;\n\t\t\tpartial.usage = proxyEvent.usage;\n\t\t\tpartial.deferred = proxyEvent.deferred;\n\t\t\treturn { type: \"done\", reason: proxyEvent.reason, message: partial };\n\t\tcase \"error\":\n\t\t\tif (proxyEvent.message) return { type: \"error\", reason: proxyEvent.reason, error: proxyEvent.message };\n\t\t\tpartial.stopReason = proxyEvent.reason;\n\t\t\tpartial.errorMessage = proxyEvent.errorMessage;\n\t\t\tpartial.usage = proxyEvent.usage;\n\t\t\treturn { type: \"error\", reason: proxyEvent.reason, error: partial };\n\t\tdefault: {\n\t\t\tconst _exhaustiveCheck: never = proxyEvent;\n\t\t\tconsole.warn(`Unhandled proxy event type: ${(proxyEvent as any).type}`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nexport { getServerUrl, getAuthToken };\n\nfunction serializeApiOptions(options: StreamOptions): ProviderStreamOptions {\n\tconst {\n\t\tsignal: _signal,\n\t\tfetch: _fetch,\n\t\tonPayload: _onPayload,\n\t\tonResponse: _onResponse,\n\t\tonProviderStreamEvent: _onProviderStreamEvent,\n\t\ttelemetryContext: _telemetryContext,\n\t\t...serialized\n\t} = options;\n\treturn serialized;\n}\n\nexport interface PiServerModelCatalog {\n\tmodels: AnyModel[];\n\tavailable: AnyModel[];\n\tproviders: { id: string; fetchDeferred: boolean; cancelDeferred: boolean }[];\n}\n\nexport async function fetchPiServerModels(options?: AuthOperationOptions): Promise<PiServerModelCatalog> {\n\tconst response = await createPiServerRequest(options?.signal).getJson(\"/api/models\");\n\treturn readPiServerJson<PiServerModelCatalog>(response, \"pi-server model catalog failed\");\n}\n\nexport async function generateImagesPiServer(\n\tmodel: ImageModel<ImageApi>,\n\tcontext: ImagesContext,\n\toptions?: ImagesOptions,\n): Promise<AssistantImages> {\n\tassertNoCustomPiServerFetch(options);\n\treturn postPiServerModelOperation<AssistantImages, ImageModel<ImageApi>>(\n\t\t\"/api/generate-images\",\n\t\t{\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t\toptions: {\n\t\t\t\tapiKey: options?.apiKey,\n\t\t\t\tenv: options?.env,\n\t\t\t\theaders: options?.headers,\n\t\t\t\tmetadata: options?.metadata,\n\t\t\t\ttimeoutMs: options?.timeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\t\t},\n\t\t},\n\t\tmodel,\n\t\toptions,\n\t);\n}\n\nexport async function classifyPiServer(\n\tmodel: ClassifierModel<ClassifierApi>,\n\tcontext: ClassifierContext,\n\toptions?: ClassifierOptions,\n): Promise<ClassifierResult> {\n\tassertNoCustomPiServerFetch(options);\n\treturn postPiServerModelOperation<ClassifierResult, ClassifierModel<ClassifierApi>>(\n\t\t\"/api/classify\",\n\t\t{\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t\toptions: {\n\t\t\t\tapiKey: options?.apiKey,\n\t\t\t\tenv: options?.env,\n\t\t\t\theaders: options?.headers,\n\t\t\t\ttemperature: options?.temperature,\n\t\t\t\ttimeoutMs: options?.timeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\t\t},\n\t\t},\n\t\tmodel,\n\t\toptions,\n\t);\n}\n\nfunction assertNoCustomPiServerFetch(options?: Pick<ProviderRequestOptions<AnyModel>, \"fetch\">): void {\n\tif (options?.fetch) throw new Error(\"Custom fetch functions cannot execute on pi-server\");\n}\n\nasync function handleProviderCallback<TModel extends AnyModel>(\n\tcallback: PiServerProviderCallbackRequest,\n\tmodel: TModel,\n\toptions: ProviderRequestOptions<TModel> | undefined,\n\tsessionId: string,\n\trunId: string,\n\trequest: ChunkRequest,\n): Promise<void> {\n\tif (\n\t\t!callback ||\n\t\ttypeof callback.callbackId !== \"string\" ||\n\t\t!callback.model ||\n\t\tcallback.model.provider !== model.provider ||\n\t\tcallback.model.id !== model.id ||\n\t\tcallback.model.api !== model.api ||\n\t\tgetModelType(callback.model) !== getModelType(model)\n\t) {\n\t\tthrow new Error(\"pi-server provider callback has an invalid model or callback identity\");\n\t}\n\tconst remoteModel = callback.model as TModel;\n\tlet result: unknown;\n\tlet failure: unknown;\n\tlet failed = false;\n\ttry {\n\t\tif (callback.kind === \"payload\") {\n\t\t\tif (!options?.onPayload) throw new Error(\"Unexpected pi-server payload callback\");\n\t\t\tconst replacement = await raceWithAbortSignal(\n\t\t\t\tPromise.resolve().then(() => options.onPayload!(callback.payload, remoteModel)),\n\t\t\t\toptions.signal,\n\t\t\t);\n\t\t\tresult = replacement === undefined ? callback.payload : replacement;\n\t\t} else if (callback.kind === \"response\") {\n\t\t\tif (!options?.onResponse) throw new Error(\"Unexpected pi-server response callback\");\n\t\t\tawait raceWithAbortSignal(\n\t\t\t\tPromise.resolve().then(() => options.onResponse!(callback.response, remoteModel)),\n\t\t\t\toptions.signal,\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(\"Unknown pi-server provider callback kind\");\n\t\t}\n\t} catch (error) {\n\t\tif (options?.signal?.aborted) throw error;\n\t\tfailure = error;\n\t\tfailed = true;\n\t}\n\tconst response = await request.postJson(\"/api/provider-callback\", {\n\t\tsessionId,\n\t\trunId,\n\t\tcallbackId: callback.callbackId,\n\t\tresult,\n\t\terror: !failed\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tname: failure instanceof Error ? failure.name : \"Error\",\n\t\t\t\t\tmessage: failure instanceof Error ? failure.message : String(failure),\n\t\t\t\t},\n\t});\n\tconst reply = await readPiServerJson<{ accepted: boolean; callbackId: string; runId: string }>(\n\t\tresponse,\n\t\t\"pi-server callback reply failed\",\n\t);\n\tif (!reply.accepted || reply.callbackId !== callback.callbackId || reply.runId !== runId) {\n\t\tthrow new Error(\"pi-server callback reply did not acknowledge the pending callback\");\n\t}\n\tif (failed) throw failure;\n}\n\nasync function postPiServerModelOperation<T, TModel extends AnyModel>(\n\tendpoint: \"/api/generate-images\" | \"/api/classify\" | \"/api/cancel-deferred\",\n\tbody: Record<string, unknown>,\n\tmodel: TModel,\n\toptions?: ProviderRequestOptions<TModel>,\n): Promise<T> {\n\tconst signal = options?.signal;\n\tconst sessionId = randomUUID();\n\tconst runId = randomUUID();\n\tconst operation = registerPiServerOperation(sessionId, sessionId, runId, signal);\n\tconst request = createPiServerRequest(signal);\n\tlet callbackFailed = false;\n\ttry {\n\t\tconst response = await request.postJson(endpoint, {\n\t\t\t...body,\n\t\t\tsessionId,\n\t\t\trunId,\n\t\t\tcallbacks: { onPayload: options?.onPayload !== undefined, onResponse: options?.onResponse !== undefined },\n\t\t});\n\t\tif (!response.ok) return await readPiServerJson<T>(response, \"pi-server model operation failed\");\n\t\tawait ensurePiServerEventStream(response);\n\t\ttry {\n\t\t\treturn await readPiServerEventStreamJson<T>(response, \"pi-server model operation failed\", async (callback) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait handleProviderCallback(callback, model, options, sessionId, runId, request);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcallbackFailed = true;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (signal?.aborted || callbackFailed) throw error;\n\t\t\tconst recovered = await waitForPiServerRunCompletion(sessionId, runId, request, { signal });\n\t\t\tif (recovered?.operationResult) return recovered.operationResult as T;\n\t\t\tthrow error;\n\t\t}\n\t} catch (error) {\n\t\tif ((signal?.aborted || callbackFailed) && operation && !operation.cancelConfirmed)\n\t\t\tawait cancelPiServerOperation(operation);\n\t\tthrow error;\n\t} finally {\n\t\tawait finishPiServerOperation(operation, signal?.aborted === true || callbackFailed);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pi-server-client.js","sourceRoot":"","sources":["../../src/core/pi-server-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport type {\n\tCompactionPreparationOptions,\n\tLegacyCompactResult,\n\tProxyAssistantMessageEvent,\n\tSessionTreeEntry,\n} from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AnyModel,\n\ttype AssistantImages,\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\ttype AssistantMessageEventStream,\n\ttype AuthOperationOptions,\n\ttype CacheRetention,\n\ttype ClassifierApi,\n\ttype ClassifierContext,\n\ttype ClassifierModel,\n\ttype ClassifierOptions,\n\ttype ClassifierResult,\n\ttype Context,\n\tcreateAssistantMessageEventStream,\n\ttype DeferredCancelOptions,\n\ttype DeferredFetchOptions,\n\ttype DeferredHandle,\n\tgetModelType,\n\ttype ImageApi,\n\ttype ImageModel,\n\ttype ImagesContext,\n\ttype ImagesOptions,\n\ttype Message,\n\ttype Model,\n\ttype ModelsApiStreamOptions,\n\ttype ProviderRequestOptions,\n\ttype ProviderStreamOptions,\n\tparseStreamingJson,\n\ttype SimpleStreamOptions,\n\ttype StreamOptions,\n} from \"@earendil-works/pi-ai\";\nimport { raceWithAbortSignal } from \"../utils/abort.ts\";\nimport {\n\tbuildPiServerTreePrefixHashes,\n\thashPiServerSessionEntries,\n\thashPiServerStaticContext,\n\ttype PiServerProviderCallbackRequest,\n} from \"./pi-server-protocol.ts\";\nimport { ChunkRequest } from \"./pi-server-request.ts\";\n\ntype PiServerEventStream = AssistantMessageEventStream;\n\nfunction getServerUrl(): string {\n\treturn process.env.PI_SERVER_URL ?? \"http://127.0.0.1:4217\";\n}\n\nfunction getAuthToken(): string {\n\treturn process.env.PI_SERVER_AUTH_TOKEN ?? \"\";\n}\n\nfunction createPiServerRequest(signal?: AbortSignal): ChunkRequest {\n\treturn new ChunkRequest({\n\t\tserverUrl: getServerUrl(),\n\t\tauthToken: getAuthToken(),\n\t\tsignal,\n\t});\n}\n\nconst sessionStaticContextHashes = new Map<string, string>();\nconst sessionTreeHashes = new Map<string, string>();\nconst sessionTreeEntryCounts = new Map<string, number>();\nconst sessionTreeLeafIds = new Map<string, string | null>();\nconst sessionHasTemporaryTree = new Set<string>();\ninterface ActivePiServerOperation {\n\townerSessionId: string;\n\tsessionId: string;\n\trunId: string;\n\tsignal?: AbortSignal;\n\tcancelListener?: () => void;\n\tcancelPromise?: Promise<void>;\n\tcancelFailed?: boolean;\n\tcancelConfirmed?: boolean;\n}\n\nconst activePiServerOperations = new Map<string, Map<string, ActivePiServerOperation>>();\nconst RESPONSE_BODY_EXCERPT_CHARS = 500;\nconst TRANSIENT_PI_SERVER_RETRY_DELAYS_MS = [250, 750, 1500];\nconst TRANSIENT_PI_SERVER_STATUS_CODES = new Set([500, 502, 503, 504, 524, 530]);\nconst PI_SERVER_RUN_RECOVERY_POLL_MS = 250;\nconst DEFAULT_PI_SERVER_RUN_RECOVERY_TIMEOUT_MS = 10 * 60 * 1000;\n\nclass PiServerRunRecoveryTimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"pi-server run recovery timed out; the server may still be processing the request\");\n\t\tthis.name = \"PiServerRunRecoveryTimeoutError\";\n\t}\n}\n\nexport function hashStaticContext(ctx: Context): string {\n\treturn hashPiServerStaticContext(ctx);\n}\n\nfunction hashEntries(entries: SessionTreeEntry[]): string {\n\treturn hashPiServerSessionEntries(entries);\n}\n\nfunction getLinearTreeFromMessages(messages: Message[]): { entries: SessionTreeEntry[]; leafId: string | null } {\n\tlet parentId: string | null = null;\n\tconst entries = messages.map((message, index): SessionTreeEntry => {\n\t\tconst id = `message-${index}`;\n\t\tconst entry: SessionTreeEntry = {\n\t\t\ttype: \"message\",\n\t\t\tid,\n\t\t\tparentId,\n\t\t\ttimestamp: new Date(message.timestamp).toISOString(),\n\t\t\tmessage,\n\t\t};\n\t\tparentId = id;\n\t\treturn entry;\n\t});\n\treturn { entries, leafId: parentId };\n}\n\nexport function resetSessionTracking(sessionId: string): void {\n\tsessionStaticContextHashes.delete(sessionId);\n\tsessionTreeHashes.delete(sessionId);\n\tsessionTreeEntryCounts.delete(sessionId);\n\tsessionTreeLeafIds.delete(sessionId);\n\tsessionHasTemporaryTree.delete(sessionId);\n}\n\nexport function resetAllSessionTracking(): void {\n\tsessionStaticContextHashes.clear();\n\tsessionTreeHashes.clear();\n\tsessionTreeEntryCounts.clear();\n\tsessionTreeLeafIds.clear();\n\tsessionHasTemporaryTree.clear();\n\tactivePiServerOperations.clear();\n}\n\nfunction registerPiServerOperation(\n\townerSessionId: string | undefined,\n\tsessionId: string,\n\trunId: string,\n\tsignal?: AbortSignal,\n): ActivePiServerOperation | undefined {\n\tif (!ownerSessionId) return undefined;\n\tlet operations = activePiServerOperations.get(ownerSessionId);\n\tif (!operations) {\n\t\toperations = new Map();\n\t\tactivePiServerOperations.set(ownerSessionId, operations);\n\t}\n\tconst operation: ActivePiServerOperation = { ownerSessionId, sessionId, runId, signal };\n\toperations.set(runId, operation);\n\tif (signal) {\n\t\tconst onAbort = () => {\n\t\t\tvoid cancelPiServerOperation(operation).catch(() => {\n\t\t\t\t// The owner session retries cancellation and reports the failure.\n\t\t\t});\n\t\t};\n\t\toperation.cancelListener = onAbort;\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t}\n\treturn operation;\n}\n\nfunction removePiServerOperation(operation: ActivePiServerOperation): void {\n\tconst operations = activePiServerOperations.get(operation.ownerSessionId);\n\toperation.cancelConfirmed = true;\n\tif (operation.signal && operation.cancelListener) {\n\t\toperation.signal.removeEventListener(\"abort\", operation.cancelListener);\n\t}\n\toperation.cancelListener = undefined;\n\tif (!operations || operations.get(operation.runId) !== operation) return;\n\toperations.delete(operation.runId);\n\tif (operations.size === 0) activePiServerOperations.delete(operation.ownerSessionId);\n}\n\nasync function finishPiServerOperation(\n\toperation: ActivePiServerOperation | undefined,\n\taborted: boolean,\n): Promise<void> {\n\tif (!operation) return;\n\tif (aborted) {\n\t\tif (operation.cancelPromise) await operation.cancelPromise;\n\t} else {\n\t\tremovePiServerOperation(operation);\n\t}\n}\n\nasync function cancelPiServerOperation(operation: ActivePiServerOperation, retryFailed = false): Promise<void> {\n\tif (operation.cancelConfirmed) return;\n\tif (retryFailed && operation.cancelFailed) {\n\t\toperation.cancelFailed = false;\n\t\toperation.cancelPromise = undefined;\n\t}\n\tif (operation.cancelPromise) return operation.cancelPromise;\n\n\tconst cancellation = (async () => {\n\t\tconst request = createPiServerRequest();\n\t\tconst response = await request.postJson(\n\t\t\t`/api/session/${encodeURIComponent(operation.sessionId)}/runs/${encodeURIComponent(operation.runId)}/abort`,\n\t\t\t{ sessionId: operation.sessionId, runId: operation.runId },\n\t\t);\n\t\tconst result = await readPiServerJson<PiServerAbortResponse>(response, \"Session run cancellation failed\");\n\t\tif (result.sessionId !== operation.sessionId || result.runId !== operation.runId) {\n\t\t\tthrow new Error(\"Session run cancellation failed (response did not echo the cancelled run)\");\n\t\t}\n\t\tif (result.status !== \"aborted\" && result.status !== \"completed\" && result.status !== \"failed\") {\n\t\t\tthrow new Error(\"Session run cancellation failed (response was not terminal)\");\n\t\t}\n\t\tremovePiServerOperation(operation);\n\t})();\n\n\toperation.cancelPromise = cancellation;\n\ttry {\n\t\tawait cancellation;\n\t} catch (error) {\n\t\toperation.cancelFailed = true;\n\t\tthrow error;\n\t}\n}\n\n/** Cancel all provider operations owned by a coding-agent session and wait for terminal acknowledgements. */\nexport async function cancelPiServerOperations(ownerSessionId: string): Promise<void> {\n\tconst operations = [...(activePiServerOperations.get(ownerSessionId)?.values() ?? [])];\n\tconst results = await Promise.allSettled(operations.map((operation) => cancelPiServerOperation(operation, true)));\n\tconst failure = results.find((result): result is PromiseRejectedResult => result.status === \"rejected\");\n\tif (failure) throw failure.reason;\n}\n\ninterface SessionInitResponse {\n\tsessionId: string;\n\tstaticContextHash: string;\n\ttreeHash?: string;\n\tmessageCount: number;\n\tentryCount?: number;\n\tleafId?: string | null;\n\trevision?: number;\n\tfromCache?: boolean;\n}\n\nexport interface PiServerTreeSnapshot {\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\treplace?: boolean;\n}\n\nexport interface PiServerCompactionResult {\n\tcompaction: Omit<LegacyCompactResult, \"retainedTail\">;\n\tcompactionEntry: SessionTreeEntry;\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\tmessages: Message[];\n}\n\nexport interface PiServerHistorySnapshot {\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\tmessages: Message[];\n}\n\nexport interface PiServerStreamOptions extends SimpleStreamOptions {\n\trequireCacheRetention?: boolean;\n\tonCacheRetentionResolved?: (retention: CacheRetention) => void | Promise<void>;\n\trequestKind?: \"api\" | \"simple\" | \"deferred\";\n\tdeferredHandle?: DeferredHandle;\n\tapiOptions?: StreamOptions;\n\townerSessionId?: string;\n\tsessionTree?: PiServerTreeSnapshot;\n\tephemeralMessages?: Message[];\n\tcontextOverlay?: Message[];\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>;\n}\n\ninterface PiServerErrorResponse {\n\terror: string;\n\tcode?: string;\n\tdetails?: Record<string, unknown>;\n}\n\ninterface PiServerResponseFailure {\n\tdetails: string;\n\tcode?: string;\n}\n\nclass PiServerResponseError extends Error {\n\tpublic readonly code?: string;\n\tpublic readonly details?: Record<string, unknown>;\n\n\tconstructor(message: string, code?: string, details?: Record<string, unknown>) {\n\t\tsuper(message);\n\t\tthis.name = \"PiServerResponseError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n}\n\ninterface PiServerHistoryResponse extends Partial<PiServerHistorySnapshot> {\n\tsessionId: string;\n\ttreeHash?: string;\n\tentryCount?: number;\n\tleafId?: string | null;\n\ttreePatch?: PiServerTreePatch;\n}\n\ninterface PiServerTreePatch {\n\tentriesFrom: number;\n\tbaseRevision?: number;\n\tentries: SessionTreeEntry[];\n\tleafId: string | null;\n\trevision: number;\n}\n\ninterface PiServerCompactionResponse extends Partial<PiServerCompactionResult> {\n\ttreePatch?: PiServerTreePatch & { baseTreeHash?: string };\n}\n\ninterface ServerSentEvent {\n\tevent: string;\n\tdata: string;\n}\n\nclass ServerSentEventParser {\n\tprivate buffer = \"\";\n\tprivate event = \"message\";\n\tprivate dataLines: string[] = [];\n\n\tfeed(text: string): ServerSentEvent[] {\n\t\tthis.buffer += text;\n\t\tconst lines = this.buffer.split(\"\\n\");\n\t\tthis.buffer = lines.pop() ?? \"\";\n\t\treturn lines.flatMap((line) => this.consumeLine(line));\n\t}\n\n\tfinish(): ServerSentEvent[] {\n\t\tconst events: ServerSentEvent[] = [];\n\t\tif (this.buffer.length > 0) {\n\t\t\tevents.push(...this.consumeLine(this.buffer));\n\t\t\tthis.buffer = \"\";\n\t\t}\n\t\tconst final = this.flush();\n\t\tif (final) events.push(final);\n\t\treturn events;\n\t}\n\n\tprivate consumeLine(rawLine: string): ServerSentEvent[] {\n\t\tconst line = rawLine.endsWith(\"\\r\") ? rawLine.slice(0, -1) : rawLine;\n\t\tif (line === \"\") {\n\t\t\tconst event = this.flush();\n\t\t\treturn event ? [event] : [];\n\t\t}\n\t\tif (line.startsWith(\":\")) return [];\n\t\tif (line.startsWith(\"event:\")) {\n\t\t\tthis.event = getServerSentEventFieldValue(line, \"event\");\n\t\t\treturn [];\n\t\t}\n\t\tif (line.startsWith(\"data:\")) {\n\t\t\tthis.dataLines.push(getServerSentEventFieldValue(line, \"data\"));\n\t\t}\n\t\treturn [];\n\t}\n\n\tprivate flush(): ServerSentEvent | undefined {\n\t\tif (this.dataLines.length === 0) return undefined;\n\t\tconst event = { event: this.event, data: this.dataLines.join(\"\\n\") };\n\t\tthis.event = \"message\";\n\t\tthis.dataLines = [];\n\t\treturn event;\n\t}\n}\n\ninterface PiServerRunResponse {\n\tcacheRetention?: CacheRetention;\n\trunId: string;\n\tstatus: \"running\" | \"completed\" | \"failed\" | \"aborted\";\n\tmessage?: AssistantMessage;\n\tcompactResult?: PiServerCompactionResponse;\n\toperationResult?:\n\t\t| AssistantImages\n\t\t| ClassifierResult\n\t\t| { cancelled: true; stopReason: \"stop\" | \"aborted\"; errorMessage?: string };\n\terrorMessage?: string;\n}\n\ninterface PiServerAbortResponse {\n\tsessionId: string;\n\trunId: string;\n\tstatus: \"aborted\" | \"completed\" | \"failed\";\n}\n\ninterface PiServerSyncOptions {\n\tsignal?: AbortSignal;\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>;\n}\n\ntype PiServerFailurePhase = \"session_init\" | \"tree_sync\" | \"provider_stream\" | \"history_reconcile\";\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getResponseStatus(response: Response): string {\n\tconst status = response.statusText ? `${response.status} ${response.statusText}` : String(response.status);\n\treturn response.status >= 500 ? `${status} (server error)` : status;\n}\n\nfunction getResponseContentType(response: Response): string {\n\treturn response.headers.get(\"content-type\") ?? \"unknown\";\n}\n\nfunction getBodyExcerpt(text: string): string {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"<empty>\";\n\tconst excerpt = trimmed.slice(0, RESPONSE_BODY_EXCERPT_CHARS);\n\treturn excerpt.length < trimmed.length ? `${excerpt}...` : excerpt;\n}\n\nfunction getJsonErrorResponse(text: string): PiServerErrorResponse | undefined {\n\tif (!text) return undefined;\n\ttry {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (!isObject(parsed) || typeof parsed.error !== \"string\" || parsed.error.length === 0) return undefined;\n\t\tconst code = parsed.code;\n\t\treturn {\n\t\t\terror: parsed.error,\n\t\t\tcode: typeof code === \"string\" ? code : undefined,\n\t\t\tdetails: isObject(parsed.details) ? parsed.details : undefined,\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction getJsonErrorText(text: string): string | undefined {\n\treturn getJsonErrorResponse(text)?.error;\n}\n\nfunction formatResponseDetails(response: Response, bodyText: string): string {\n\tconst body = getJsonErrorText(bodyText) ?? getBodyExcerpt(bodyText);\n\treturn `${getResponseStatus(response)}; content-type: ${getResponseContentType(response)}; body excerpt: ${body}`;\n}\n\nasync function readPiServerFailure(response: Response): Promise<PiServerResponseFailure> {\n\tconst bodyText = await response.text();\n\tconst errorResponse = getJsonErrorResponse(bodyText);\n\treturn {\n\t\tdetails: formatResponseDetails(response, bodyText),\n\t\tcode: errorResponse?.code,\n\t};\n}\n\nasync function readPiServerJson<T>(response: Response, errorPrefix: string): Promise<T> {\n\tconst bodyText = await response.text();\n\tif (!response.ok) {\n\t\tconst errorResponse = getJsonErrorResponse(bodyText);\n\t\tif (errorResponse) {\n\t\t\tthrow new PiServerResponseError(\n\t\t\t\t`${errorPrefix} (${formatResponseDetails(response, bodyText)})`,\n\t\t\t\terrorResponse.code,\n\t\t\t\terrorResponse.details,\n\t\t\t);\n\t\t}\n\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)})`);\n\t}\n\ttry {\n\t\treturn JSON.parse(bodyText) as T;\n\t} catch {\n\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)}; expected JSON)`);\n\t}\n}\n\nfunction getServerSentEventFieldValue(line: string, field: string): string {\n\tconst prefix = `${field}:`;\n\tconst value = line.slice(prefix.length);\n\treturn value.startsWith(\" \") ? value.slice(1) : value;\n}\n\nfunction parseServerSentEventData(event: ServerSentEvent, errorPrefix: string): unknown {\n\ttry {\n\t\treturn JSON.parse(event.data) as unknown;\n\t} catch {\n\t\tthrow new Error(`${errorPrefix} (invalid event-stream JSON data: ${getBodyExcerpt(event.data)})`);\n\t}\n}\n\nfunction formatServerSentEventError(response: Response, payload: unknown): string {\n\tconst message = isObject(payload) && typeof payload.error === \"string\" ? payload.error : JSON.stringify(payload);\n\treturn `${getResponseStatus(response)}; content-type: ${getResponseContentType(response)}; body excerpt: ${getBodyExcerpt(message)}`;\n}\n\nasync function readPiServerEventStreamJson<T>(\n\tresponse: Response,\n\terrorPrefix: string,\n\tonCallback?: (request: PiServerProviderCallbackRequest) => Promise<void>,\n): Promise<T> {\n\tif (!response.body) throw new Error(`${errorPrefix} (missing event stream body)`);\n\tconst reader = response.body.getReader();\n\tconst decoder = new TextDecoder();\n\tconst parser = new ServerSentEventParser();\n\tconst processEvents = async (events: ServerSentEvent[]): Promise<{ value: T } | undefined> => {\n\t\tfor (const event of events) {\n\t\t\tif (event.event === \"provider_callback\") {\n\t\t\t\tif (!onCallback) throw new Error(`${errorPrefix} (unexpected provider callback)`);\n\t\t\t\tawait onCallback(parseServerSentEventData(event, errorPrefix) as PiServerProviderCallbackRequest);\n\t\t\t} else if (event.event === \"error\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${errorPrefix} (${formatServerSentEventError(response, parseServerSentEventData(event, errorPrefix))})`,\n\t\t\t\t);\n\t\t\t} else if (event.event === \"result\") {\n\t\t\t\treturn { value: parseServerSentEventData(event, errorPrefix) as T };\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t};\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst chunk = await reader.read();\n\t\t\tconst result = await processEvents(\n\t\t\t\tchunk.done\n\t\t\t\t\t? [...parser.feed(decoder.decode()), ...parser.finish()]\n\t\t\t\t\t: parser.feed(decoder.decode(chunk.value, { stream: true })),\n\t\t\t);\n\t\t\tif (result) return result.value;\n\t\t\tif (chunk.done) break;\n\t\t}\n\t\tthrow new Error(`${errorPrefix} (expected result event)`);\n\t} finally {\n\t\tawait reader.cancel().catch(() => {});\n\t}\n}\n\nasync function readPiServerCompactResponse<T>(response: Response, errorPrefix: string): Promise<T> {\n\tconst contentType = getResponseContentType(response).toLowerCase().split(\";\")[0]?.trim();\n\tif (contentType === \"text/event-stream\") {\n\t\treturn readPiServerEventStreamJson<T>(response, errorPrefix);\n\t}\n\treturn readPiServerJson<T>(response, errorPrefix);\n}\n\nfunction isAbortError(error: unknown, signal: AbortSignal | undefined): boolean {\n\treturn signal?.aborted === true || (error instanceof Error && error.name === \"AbortError\");\n}\n\nfunction isTransientPiServerFetchError(error: unknown): boolean {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn /fetch failed|network|socket hang up|terminated|ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|CONNECT timeout/i.test(\n\t\tmessage,\n\t);\n}\n\nfunction isTransientPiServerError(error: unknown): boolean {\n\tif (isTransientPiServerFetchError(error)) return true;\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\t/\\b(?:500|502|503|504|524|530)\\b/.test(message) ||\n\t\t/CONNECT timeout|Bad Gateway|upstream|A timeout occurred/i.test(message)\n\t);\n}\n\nfunction isRetryablePiServerFailure(phase: PiServerFailurePhase, error: unknown): boolean {\n\tif (phase === \"provider_stream\") return true;\n\tif (phase === \"history_reconcile\") return false;\n\treturn isTransientPiServerError(error);\n}\n\nasync function waitForPiServerRetry(attempt: number, signal: AbortSignal | undefined): Promise<void> {\n\tawait sleep(TRANSIENT_PI_SERVER_RETRY_DELAYS_MS[attempt], undefined, { signal });\n}\n\nasync function postPiServerJsonWithTransientRetry<T>(\n\trequest: ChunkRequest,\n\tendpoint: string,\n\tbody: unknown,\n\terrorPrefix: string,\n): Promise<T> {\n\tfor (let attempt = 0; ; attempt++) {\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await request.postJson(endpoint, body);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\tattempt < TRANSIENT_PI_SERVER_RETRY_DELAYS_MS.length &&\n\t\t\t\t!isAbortError(error, request.options.signal) &&\n\t\t\t\tisTransientPiServerFetchError(error)\n\t\t\t) {\n\t\t\t\tawait waitForPiServerRetry(attempt, request.options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst bodyText = await response.text();\n\t\tif (!response.ok) {\n\t\t\tif (\n\t\t\t\tattempt < TRANSIENT_PI_SERVER_RETRY_DELAYS_MS.length &&\n\t\t\t\t!request.options.signal?.aborted &&\n\t\t\t\tTRANSIENT_PI_SERVER_STATUS_CODES.has(response.status)\n\t\t\t) {\n\t\t\t\tawait waitForPiServerRetry(attempt, request.options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst errorResponse = getJsonErrorResponse(bodyText);\n\t\t\tif (errorResponse) {\n\t\t\t\tthrow new PiServerResponseError(\n\t\t\t\t\t`${errorPrefix} (${formatResponseDetails(response, bodyText)})`,\n\t\t\t\t\terrorResponse.code,\n\t\t\t\t\terrorResponse.details,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)})`);\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(bodyText) as T;\n\t\t} catch {\n\t\t\tthrow new Error(`${errorPrefix} (${formatResponseDetails(response, bodyText)}; expected JSON)`);\n\t\t}\n\t}\n}\n\nasync function ensurePiServerEventStream(response: Response): Promise<void> {\n\tconst contentType = getResponseContentType(response);\n\tif (contentType.toLowerCase().split(\";\")[0]?.trim() === \"text/event-stream\") {\n\t\treturn;\n\t}\n\tconst bodyText = await response.text();\n\tthrow new Error(`pi-server error: ${formatResponseDetails(response, bodyText)}; expected text/event-stream`);\n}\n\nasync function ensureSessionInit(\n\tsessionId: string,\n\tcontext: Context,\n\trequest: ChunkRequest,\n): Promise<SessionInitResponse> {\n\tconst currentHash = hashStaticContext(context);\n\tconst previousHash = sessionStaticContextHashes.get(sessionId);\n\n\tif (previousHash === currentHash) {\n\t\treturn {\n\t\t\tsessionId,\n\t\t\tstaticContextHash: previousHash,\n\t\t\tmessageCount: 0,\n\t\t\tfromCache: true,\n\t\t};\n\t}\n\n\tconst staticContext = {\n\t\tsystemPrompt: context.systemPrompt,\n\t\ttools: context.tools,\n\t};\n\n\tconst endpoint = previousHash === undefined ? \"/api/session/init\" : \"/api/session/update\";\n\n\tconst result = await postPiServerJsonWithTransientRetry<SessionInitResponse>(\n\t\trequest,\n\t\tendpoint,\n\t\t{ sessionId, staticContext },\n\t\t\"Session init failed\",\n\t);\n\tsessionStaticContextHashes.set(sessionId, currentHash);\n\tif (result.treeHash !== undefined) {\n\t\tsessionTreeHashes.set(sessionId, result.treeHash);\n\t\tsessionTreeLeafIds.set(sessionId, result.leafId ?? null);\n\t\tif (result.entryCount !== undefined) {\n\t\t\tsessionTreeEntryCounts.set(sessionId, result.entryCount);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction getStaticContext(context: Context) {\n\treturn {\n\t\tsystemPrompt: context.systemPrompt,\n\t\ttools: context.tools,\n\t};\n}\n\nfunction markTreeSynced(sessionId: string, tree: PiServerTreeSnapshot): void {\n\tconst prefixHashes = buildPiServerTreePrefixHashes(tree.entries);\n\tsessionTreeHashes.set(sessionId, prefixHashes[prefixHashes.length - 1]);\n\tsessionTreeEntryCounts.set(sessionId, tree.entries.length);\n\tsessionTreeLeafIds.set(sessionId, tree.leafId);\n\tif (tree.replace) {\n\t\tsessionHasTemporaryTree.add(sessionId);\n\t} else {\n\t\tsessionHasTemporaryTree.delete(sessionId);\n\t}\n}\n\nasync function postTreeJson(\n\trequest: ChunkRequest,\n\tendpoint: string,\n\tbody: unknown,\n\terrorPrefix: string,\n): Promise<void> {\n\tawait postPiServerJsonWithTransientRetry<unknown>(request, endpoint, body, errorPrefix);\n}\n\nasync function fetchPiServerHistory(\n\tsessionId: string,\n\trequest: ChunkRequest,\n\tlocalTree?: PiServerTreeSnapshot,\n): Promise<PiServerHistorySnapshot | undefined> {\n\tconst prefixHashes = localTree ? buildPiServerTreePrefixHashes(localTree.entries) : undefined;\n\tconst historyUrl =\n\t\tlocalTree && prefixHashes\n\t\t\t? `/api/session/${encodeURIComponent(sessionId)}/history?entriesFrom=${localTree.entries.length}&baseTreeHash=${encodeURIComponent(prefixHashes[prefixHashes.length - 1])}`\n\t\t\t: `/api/session/${encodeURIComponent(sessionId)}/history`;\n\tconst response = await request.getJson(historyUrl);\n\tif (response.status === 404) {\n\t\treturn undefined;\n\t}\n\tconst history = await readPiServerJson<PiServerHistoryResponse>(response, \"Session history reconciliation failed\");\n\tif (history.treePatch && localTree) {\n\t\treturn {\n\t\t\tentries: [...localTree.entries.slice(0, history.treePatch.entriesFrom), ...history.treePatch.entries],\n\t\t\tleafId: history.treePatch.leafId,\n\t\t\tmessages: history.messages ?? [],\n\t\t};\n\t}\n\tif (!history.entries || history.leafId === undefined || !history.messages) {\n\t\tthrow new Error(\"Session history reconciliation failed (response did not include the session tree)\");\n\t}\n\treturn {\n\t\tentries: history.entries,\n\t\tleafId: history.leafId,\n\t\tmessages: history.messages,\n\t};\n}\n\nasync function applyPiServerHistory(\n\tsessionId: string,\n\tsnapshot: PiServerHistorySnapshot,\n\tonHistoryReconciled: ((snapshot: PiServerHistorySnapshot) => void | Promise<void>) | undefined,\n): Promise<void> {\n\tmarkTreeSynced(sessionId, snapshot);\n\tawait onHistoryReconciled?.(snapshot);\n}\n\nasync function fetchPiServerRun(\n\tsessionId: string,\n\trunId: string,\n\trequest: ChunkRequest,\n): Promise<PiServerRunResponse | undefined> {\n\tconst response = await request.getJson(\n\t\t`/api/session/${encodeURIComponent(sessionId)}/runs/${encodeURIComponent(runId)}`,\n\t);\n\tif (response.status === 404) {\n\t\treturn undefined;\n\t}\n\treturn readPiServerJson<PiServerRunResponse>(response, \"Session run recovery failed\");\n}\n\nasync function waitForPiServerRunCompletion(\n\tsessionId: string,\n\trunId: string,\n\trequest: ChunkRequest,\n\toptions: PiServerStreamOptions | undefined,\n): Promise<PiServerRunResponse | undefined> {\n\tconst deadline = Date.now() + DEFAULT_PI_SERVER_RUN_RECOVERY_TIMEOUT_MS;\n\tfor (;;) {\n\t\tconst run = await fetchPiServerRun(sessionId, runId, request);\n\t\tif (!run || run.status !== \"running\") return run;\n\t\tif (Date.now() >= deadline) throw new PiServerRunRecoveryTimeoutError();\n\t\tawait sleep(PI_SERVER_RUN_RECOVERY_POLL_MS, undefined, { signal: options?.signal });\n\t}\n}\n\nfunction getKnownServerPrefixIds(sessionId: string, entries: SessionTreeEntry[]): Set<string> | undefined {\n\tconst entryCount = sessionTreeEntryCounts.get(sessionId);\n\tconst treeHash = sessionTreeHashes.get(sessionId);\n\tif (entryCount === undefined || treeHash === undefined || entryCount > entries.length) {\n\t\treturn undefined;\n\t}\n\tconst prefixHashes = buildPiServerTreePrefixHashes(entries);\n\tif (prefixHashes[entryCount] !== treeHash) {\n\t\treturn undefined;\n\t}\n\treturn new Set(entries.slice(0, entryCount).map((entry) => entry.id));\n}\n\nfunction isRecoverableTreeDivergenceCode(code: string | undefined): boolean {\n\treturn code === \"PARENT_ENTRY_NOT_FOUND\" || code === \"LEAF_ID_NOT_FOUND\" || code === \"ENTRY_ALREADY_EXISTS\";\n}\n\nfunction isRecoverableMissingServerStateCode(code: string | undefined): boolean {\n\treturn code === \"SESSION_NOT_FOUND\" || code === \"SESSION_NO_STATIC_CONTEXT\" || isRecoverableTreeDivergenceCode(code);\n}\n\nfunction isRecoverableTreeDivergenceError(error: unknown): boolean {\n\tif (error instanceof PiServerResponseError) {\n\t\treturn isRecoverableTreeDivergenceCode(error.code);\n\t}\n\tif (error && typeof error === \"object\" && \"code\" in error) {\n\t\treturn isRecoverableTreeDivergenceCode((error as { code?: string }).code);\n\t}\n\treturn false;\n}\n\nfunction isRecoverableMissingServerState(response: Response, errorCode?: string): boolean {\n\tif (response.status !== 400 && response.status !== 404) return false;\n\treturn isRecoverableMissingServerStateCode(errorCode);\n}\n\nasync function syncFullPiServerTree(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\trequest: ChunkRequest,\n): Promise<void> {\n\tawait postTreeJson(\n\t\trequest,\n\t\t\"/api/session/tree/sync\",\n\t\t{\n\t\t\tsessionId,\n\t\t\tentries: tree.entries,\n\t\t\tleafId: tree.leafId,\n\t\t\tstaticContext: getStaticContext(context),\n\t\t},\n\t\t\"Session tree sync failed\",\n\t);\n\tmarkTreeSynced(sessionId, tree);\n}\n\nfunction shouldUseServerHistory(sessionId: string, tree: PiServerTreeSnapshot): boolean {\n\treturn !tree.replace && !sessionHasTemporaryTree.has(sessionId) && (sessionTreeEntryCounts.get(sessionId) ?? 0) > 0;\n}\n\nasync function recoverPiServerTreeDivergence(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\trequest: ChunkRequest,\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>,\n): Promise<PiServerHistorySnapshot | undefined> {\n\tif (shouldUseServerHistory(sessionId, tree)) {\n\t\tconst snapshot = await fetchPiServerHistory(sessionId, request, tree);\n\t\tif (snapshot && snapshot.entries.length > 0) {\n\t\t\tawait applyPiServerHistory(sessionId, snapshot, onHistoryReconciled);\n\t\t\treturn snapshot;\n\t\t}\n\t}\n\n\tawait syncFullPiServerTree(sessionId, context, tree, request);\n}\n\nexport async function syncPiServerTree(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\toptions?: PiServerSyncOptions,\n): Promise<void> {\n\tconst request = createPiServerRequest(options?.signal);\n\tawait ensureSessionInit(sessionId, context, request);\n\tconst reconciled = await syncPiServerTreeWithRequest(\n\t\tsessionId,\n\t\tcontext,\n\t\ttree,\n\t\trequest,\n\t\toptions?.onHistoryReconciled,\n\t);\n\tif (reconciled) {\n\t\tthrow new Error(\"pi-server history differed from local history; local session was reconciled to server history\");\n\t}\n}\n\nasync function syncPiServerTreeWithRequest(\n\tsessionId: string,\n\tcontext: Context,\n\ttree: PiServerTreeSnapshot,\n\trequest: ChunkRequest,\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>,\n): Promise<PiServerHistorySnapshot | undefined> {\n\tconst syncTree = tree;\n\tconst currentHash = hashEntries(syncTree.entries);\n\tconst previousHash = sessionTreeHashes.get(sessionId);\n\tconst previousLeafId = sessionTreeLeafIds.get(sessionId);\n\n\tif (!tree.replace && previousHash === currentHash) {\n\t\tif (previousLeafId !== syncTree.leafId) {\n\t\t\ttry {\n\t\t\t\tawait postTreeJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"/api/session/tree/switch\",\n\t\t\t\t\t{ sessionId, leafId: syncTree.leafId },\n\t\t\t\t\t\"Session tree switch failed\",\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isRecoverableTreeDivergenceError(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn recoverPiServerTreeDivergence(sessionId, context, syncTree, request, onHistoryReconciled);\n\t\t\t}\n\t\t\tsessionTreeLeafIds.set(sessionId, syncTree.leafId);\n\t\t}\n\t\tmarkTreeSynced(sessionId, syncTree);\n\t\treturn;\n\t}\n\n\tconst syncedIds =\n\t\t!tree.replace && !sessionHasTemporaryTree.has(sessionId)\n\t\t\t? getKnownServerPrefixIds(sessionId, syncTree.entries)\n\t\t\t: undefined;\n\tif (syncedIds) {\n\t\tconst deltaEntries = syncTree.entries.filter((entry) => !syncedIds.has(entry.id));\n\t\tif (deltaEntries.length > 0) {\n\t\t\ttry {\n\t\t\t\tawait postTreeJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"/api/session/tree/append\",\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tentries: deltaEntries,\n\t\t\t\t\t\tleafId: syncTree.leafId,\n\t\t\t\t\t\tstaticContext: getStaticContext(context),\n\t\t\t\t\t},\n\t\t\t\t\t\"Session tree append failed\",\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isRecoverableTreeDivergenceError(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn recoverPiServerTreeDivergence(sessionId, context, syncTree, request, onHistoryReconciled);\n\t\t\t}\n\t\t\tmarkTreeSynced(sessionId, syncTree);\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn recoverPiServerTreeDivergence(sessionId, context, syncTree, request, onHistoryReconciled);\n}\n\nfunction serializeOptions(options: SimpleStreamOptions | undefined): SimpleStreamOptions {\n\treturn {\n\t\ttemperature: options?.temperature,\n\t\tmaxTokens: options?.maxTokens,\n\t\tsamplingParams: options?.samplingParams,\n\t\ttoolChoice: options?.toolChoice,\n\t\tdeferred: options?.deferred,\n\t\tenv: options?.env,\n\t\treasoning: options?.reasoning,\n\t\tcacheRetention: options?.cacheRetention,\n\t\tsessionId: options?.sessionId,\n\t\tapiKey: options?.apiKey,\n\t\theaders: options?.headers,\n\t\tmetadata: options?.metadata,\n\t\ttransport: options?.transport,\n\t\tthinkingBudgets: options?.thinkingBudgets,\n\t\ttimeoutMs: options?.timeoutMs,\n\t\twebsocketConnectTimeoutMs: options?.websocketConnectTimeoutMs,\n\t\tmaxRetries: options?.maxRetries,\n\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t};\n}\n\nexport function streamRawPiServer<TApi extends string>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ModelsApiStreamOptions<TApi>,\n): Promise<PiServerEventStream> {\n\tif (options?.transformPreparedStreamOptions) {\n\t\tthrow new Error(\"Prepared stream option transforms cannot execute on pi-server\");\n\t}\n\treturn streamPiServer(model, context, {\n\t\tsignal: options?.signal,\n\t\tsessionId: options?.sessionId,\n\t\tonProviderStreamEvent: options?.onProviderStreamEvent,\n\t\tonPayload: options?.onPayload,\n\t\tonResponse: options?.onResponse,\n\t\tfetch: options?.fetch,\n\t\trequestKind: \"api\",\n\t\tapiOptions: options ?? {},\n\t});\n}\n\nexport function fetchDeferredPiServer(\n\tmodel: Model<string>,\n\thandle: DeferredHandle,\n\toptions?: DeferredFetchOptions,\n): Promise<PiServerEventStream> {\n\treturn streamPiServer(\n\t\tmodel,\n\t\t{ messages: [] },\n\t\t{\n\t\t\t...options,\n\t\t\trequestKind: \"deferred\",\n\t\t\tdeferredHandle: handle,\n\t\t\tapiOptions: options,\n\t\t},\n\t);\n}\n\nexport async function cancelDeferredPiServer(\n\tmodel: Model<string>,\n\thandle: DeferredHandle,\n\toptions?: DeferredCancelOptions,\n): Promise<void> {\n\tassertNoCustomPiServerFetch(options);\n\tconst result = await postPiServerModelOperation<{ cancelled: true; stopReason: \"stop\" }, Model<string>>(\n\t\t\"/api/cancel-deferred\",\n\t\t{ model, handle, options: serializeApiOptions(options ?? {}) },\n\t\tmodel,\n\t\toptions,\n\t);\n\tif (result.cancelled !== true || result.stopReason !== \"stop\")\n\t\tthrow new Error(\"pi-server deferred cancellation did not complete\");\n}\n\nexport interface PiServerCompactOptions extends SimpleStreamOptions {\n\townerSessionId?: string;\n\tcustomInstructions?: string;\n\tsettings?: unknown;\n\tpreparation?: CompactionPreparationOptions;\n\t/** Fixed-size digest of the exact provider message overlay for this session. */\n\tcacheContextHash?: string;\n\t/** Fixed-size digest of the synchronized static prompt and tools. */\n\tcacheStaticContextHash?: string;\n\tcacheFallbackReason?: string;\n\tsessionTree?: PiServerTreeSnapshot;\n\tonHistoryReconciled?: (snapshot: PiServerHistorySnapshot) => void | Promise<void>;\n}\n\nexport async function compactPiServer(\n\tmodel: Model<any>,\n\tcontext: Context,\n\toptions?: PiServerCompactOptions,\n): Promise<PiServerCompactionResult> {\n\tconst sessionId = options?.sessionId ?? \"default\";\n\tconst runId = randomUUID();\n\tconst operation = registerPiServerOperation(options?.ownerSessionId ?? sessionId, sessionId, runId, options?.signal);\n\tconst request = createPiServerRequest(options?.signal);\n\n\ttry {\n\t\tawait ensureSessionInit(sessionId, context, request);\n\t\tlet tree = options?.sessionTree ?? getLinearTreeFromMessages(context.messages as Message[]);\n\t\tlet preparation = options?.preparation;\n\t\tconst syncTree = async () => {\n\t\t\tconst reconciled = await syncPiServerTreeWithRequest(\n\t\t\t\tsessionId,\n\t\t\t\tcontext,\n\t\t\t\ttree,\n\t\t\t\trequest,\n\t\t\t\toptions?.onHistoryReconciled,\n\t\t\t);\n\t\t\tif (reconciled) {\n\t\t\t\ttree = reconciled;\n\t\t\t\t// A forced cut point belongs to the old branch. Recompute it on the authoritative tree.\n\t\t\t\tpreparation = undefined;\n\t\t\t}\n\t\t};\n\t\tawait syncTree();\n\n\t\tconst makeBody = () => ({\n\t\t\tsessionId,\n\t\t\trunId,\n\t\t\tmodel,\n\t\t\toptions: serializeOptions(options),\n\t\t\tsettings: options?.settings,\n\t\t\tpreparation,\n\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\tcacheContextHash: options?.cacheContextHash,\n\t\t\tcacheStaticContextHash: options?.cacheStaticContextHash,\n\t\t\tcacheFallbackReason: options?.cacheFallbackReason,\n\t\t\tbaseTreeHash: sessionTreeHashes.get(sessionId) ?? hashEntries(tree.entries),\n\t\t\tstreamResponse: true,\n\t\t});\n\t\tlet response = await request.postJson(\"/api/session/compact\", makeBody());\n\t\tif (!response.ok) {\n\t\t\tlet failure = await readPiServerFailure(response);\n\t\t\tif (!options?.signal?.aborted && isRecoverableMissingServerState(response, failure.code)) {\n\t\t\t\tresetSessionTracking(sessionId);\n\t\t\t\tawait ensureSessionInit(sessionId, context, request);\n\t\t\t\tawait syncTree();\n\t\t\t\tresponse = await request.postJson(\"/api/session/compact\", makeBody());\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tfailure = { details: \"\", code: undefined };\n\t\t\t\t} else {\n\t\t\t\t\tfailure = await readPiServerFailure(response);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`Server compaction failed (${failure.details})`);\n\t\t\t}\n\t\t}\n\t\tlet result: PiServerCompactionResponse;\n\t\ttry {\n\t\t\tresult = await readPiServerCompactResponse<PiServerCompactionResponse>(response, \"Server compaction failed\");\n\t\t} catch (error) {\n\t\t\tif (options?.signal?.aborted || !getResponseContentType(response).startsWith(\"text/event-stream\")) throw error;\n\t\t\tconst run = await waitForPiServerRunCompletion(sessionId, runId, request, options);\n\t\t\tif (run?.status !== \"completed\" || !run.compactResult) {\n\t\t\t\tif (run?.errorMessage) throw new Error(`Server compaction failed: ${run.errorMessage}`);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tresult = run.compactResult;\n\t\t}\n\t\tif (!result.compaction) {\n\t\t\tthrow new Error(\"Server compaction response did not include a compaction result\");\n\t\t}\n\t\tconst resultEntries =\n\t\t\tresult.entries ??\n\t\t\t(result.treePatch\n\t\t\t\t? [...tree.entries.slice(0, result.treePatch.entriesFrom), ...result.treePatch.entries]\n\t\t\t\t: undefined);\n\t\tconst resultLeafId = result.leafId ?? result.treePatch?.leafId;\n\t\tif (!result.compactionEntry || !resultEntries || resultLeafId === undefined) {\n\t\t\tthrow new Error(\"Server compaction response did not include the updated session tree\");\n\t\t}\n\t\tmarkTreeSynced(sessionId, { entries: resultEntries, leafId: resultLeafId });\n\t\treturn {\n\t\t\tcompaction: result.compaction,\n\t\t\tcompactionEntry: result.compactionEntry,\n\t\t\tentries: resultEntries,\n\t\t\tleafId: resultLeafId,\n\t\t\tmessages: result.messages ?? [],\n\t\t};\n\t} finally {\n\t\tawait finishPiServerOperation(operation, options?.signal?.aborted === true);\n\t}\n}\n\nexport async function streamPiServer(\n\tmodel: Model<any>,\n\tcontext: Context,\n\toptions?: PiServerStreamOptions,\n): Promise<PiServerEventStream> {\n\tassertNoCustomPiServerFetch(options);\n\tassertNoCustomPiServerFetch(options?.apiOptions);\n\tconst sessionId = options?.sessionId ?? randomUUID();\n\tconst runId = randomUUID();\n\tconst isEphemeralSession = options?.sessionId === undefined;\n\tconst operation = registerPiServerOperation(options?.ownerSessionId ?? sessionId, sessionId, runId, options?.signal);\n\tconst stream = createAssistantMessageEventStream();\n\n\tconst partial: AssistantMessage = {\n\t\trole: \"assistant\",\n\t\tstopReason: \"stop\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\ttimestamp: Date.now(),\n\t};\n\n\t(async () => {\n\t\tlet phase: PiServerFailurePhase = \"session_init\";\n\t\tlet streamOpened = false;\n\t\tlet observerFailed = false;\n\t\tlet callbackFailed = false;\n\t\tlet cacheRetention: CacheRetention | undefined;\n\t\tconst requireCacheRetention = options?.requireCacheRetention || options?.onCacheRetentionResolved !== undefined;\n\t\tconst applyCachePolicy = async (retention: unknown): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tif (retention !== \"none\" && retention !== \"short\" && retention !== \"long\") {\n\t\t\t\t\tthrow new Error(\"pi-server cache policy has an invalid cacheRetention\");\n\t\t\t\t}\n\t\t\t\tif (cacheRetention !== undefined) {\n\t\t\t\t\tif (cacheRetention !== retention) throw new Error(\"pi-server cache policy changed during the same run\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcacheRetention = retention;\n\t\t\t\tawait raceWithAbortSignal(\n\t\t\t\t\tPromise.resolve().then(() => options?.onCacheRetentionResolved?.(retention)),\n\t\t\t\t\toptions?.signal,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tobserverFailed = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t};\n\t\ttry {\n\t\t\tconst request = createPiServerRequest(options?.signal);\n\t\t\tawait ensureSessionInit(sessionId, context, request);\n\n\t\t\tconst makeBody = () => ({\n\t\t\t\tsessionId,\n\t\t\t\trunId,\n\t\t\t\tmodel,\n\t\t\t\toptions:\n\t\t\t\t\toptions?.requestKind === \"api\" || options?.requestKind === \"deferred\"\n\t\t\t\t\t\t? serializeApiOptions(options.apiOptions ?? {})\n\t\t\t\t\t\t: serializeOptions(options),\n\t\t\t\trequestKind: options?.requestKind,\n\t\t\t\tdeferredHandle: options?.deferredHandle,\n\t\t\t\tobserveProviderStreamEvents: options?.onProviderStreamEvent !== undefined,\n\t\t\t\tcallbacks: { onPayload: options?.onPayload !== undefined, onResponse: options?.onResponse !== undefined },\n\t\t\t\tcontextOverlay: options?.contextOverlay ?? [\n\t\t\t\t\t...(context.messages as Message[]),\n\t\t\t\t\t...(options?.ephemeralMessages ?? []),\n\t\t\t\t],\n\t\t\t});\n\t\t\tphase = \"provider_stream\";\n\t\t\tlet response = await request.postJson(\"/api/stream\", makeBody());\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlet failure = await readPiServerFailure(response);\n\t\t\t\tif (!options?.signal?.aborted && isRecoverableMissingServerState(response, failure.code)) {\n\t\t\t\t\tresetSessionTracking(sessionId);\n\t\t\t\t\tawait ensureSessionInit(sessionId, context, request);\n\t\t\t\t\tresponse = await request.postJson(\"/api/stream\", makeBody());\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\tfailure = { details: \"\", code: undefined };\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfailure = await readPiServerFailure(response);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`pi-server error: ${failure.details}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait ensurePiServerEventStream(response);\n\t\t\tstreamOpened = true;\n\t\t\tconst reader = response.body!.getReader();\n\t\t\tconst decoder = new TextDecoder();\n\t\t\tconst parser = new ServerSentEventParser();\n\t\t\tlet terminalReceived = false;\n\n\t\t\tconst consumeEvents = async (events: ServerSentEvent[]): Promise<void> => {\n\t\t\t\tfor (const serverEvent of events) {\n\t\t\t\t\tif (serverEvent.event === \"cache_policy\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst policy = parseServerSentEventData(serverEvent, \"pi-server cache policy\");\n\t\t\t\t\t\t\tawait applyCachePolicy(isObject(policy) ? policy.cacheRetention : undefined);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tobserverFailed = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (serverEvent.event === \"provider_callback\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait handleProviderCallback(\n\t\t\t\t\t\t\t\tparseServerSentEventData(serverEvent, \"pi-server callback\") as PiServerProviderCallbackRequest,\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\trunId,\n\t\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tcallbackFailed = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst proxyEvent = parseServerSentEventData(\n\t\t\t\t\t\tserverEvent,\n\t\t\t\t\t\t\"pi-server stream\",\n\t\t\t\t\t) as ProxyAssistantMessageEvent;\n\t\t\t\t\tif (requireCacheRetention && cacheRetention === undefined && proxyEvent.type !== \"error\") {\n\t\t\t\t\t\tobserverFailed = true;\n\t\t\t\t\t\tthrow new Error(\"pi-server stream is missing its resolved cache policy\");\n\t\t\t\t\t}\n\t\t\t\t\tif (proxyEvent.type === \"provider_stream_event\") {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait options?.onProviderStreamEvent?.(proxyEvent.data, proxyEvent.model);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tobserverFailed = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst event = processProxyEvent(proxyEvent, partial);\n\t\t\t\t\tif (!event) continue;\n\t\t\t\t\tif (event.type === \"done\" || event.type === \"error\") terminalReceived = true;\n\t\t\t\t\tstream.push(event);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\n\t\t\t\tif (options?.signal?.aborted) {\n\t\t\t\t\tthrow new Error(\"Request aborted by user\");\n\t\t\t\t}\n\n\t\t\t\tawait consumeEvents(parser.feed(decoder.decode(value, { stream: true })));\n\t\t\t}\n\t\t\tawait consumeEvents(parser.feed(decoder.decode()));\n\t\t\tawait consumeEvents(parser.finish());\n\n\t\t\tif (options?.signal?.aborted) {\n\t\t\t\tthrow new Error(\"Request aborted by user\");\n\t\t\t}\n\t\t\tif (!terminalReceived) {\n\t\t\t\tthrow new Error(\"pi-server stream ended before a terminal response event\");\n\t\t\t}\n\n\t\t\tif (isEphemeralSession) {\n\t\t\t\tresetSessionTracking(sessionId);\n\t\t\t}\n\n\t\t\tstream.end();\n\t\t} catch (error) {\n\t\t\tlet errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t// Same-run recovery only applies to an interrupted event-stream. HTTP/proxy\n\t\t\t// failures before the stream starts (502/504/fetch failed) never opened a run\n\t\t\t// we can poll; attempting recovery against a down proxy reclassifies the error\n\t\t\t// as history_reconcile and blocks session auto-retry.\n\t\t\tif (\n\t\t\t\t!options?.signal?.aborted &&\n\t\t\t\tphase === \"provider_stream\" &&\n\t\t\t\tstreamOpened &&\n\t\t\t\t!observerFailed &&\n\t\t\t\t!callbackFailed\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tconst recoveredRun = await waitForPiServerRunCompletion(\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\tcreatePiServerRequest(options?.signal),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\trecoveredRun?.cacheRetention !== undefined ||\n\t\t\t\t\t\t(requireCacheRetention && recoveredRun?.status === \"completed\")\n\t\t\t\t\t) {\n\t\t\t\t\t\tawait applyCachePolicy(recoveredRun?.cacheRetention);\n\t\t\t\t\t}\n\t\t\t\t\tif (recoveredRun?.status === \"completed\" && recoveredRun.message) {\n\t\t\t\t\t\tswitch (recoveredRun.message.stopReason) {\n\t\t\t\t\t\t\tcase \"stop\":\n\t\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\tcase \"toolUse\":\n\t\t\t\t\t\t\tcase \"deferred\":\n\t\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\t\ttype: \"done\",\n\t\t\t\t\t\t\t\t\treason: recoveredRun.message.stopReason,\n\t\t\t\t\t\t\t\t\tmessage: recoveredRun.message,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"aborted\":\n\t\t\t\t\t\t\t\tstream.push({ type: \"error\", reason: \"aborted\", error: recoveredRun.message });\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"error\":\n\t\t\t\t\t\t\t\tstream.push({ type: \"error\", reason: \"error\", error: recoveredRun.message });\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstream.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (recoveredRun?.status === \"failed\" && recoveredRun.errorMessage) {\n\t\t\t\t\t\tif (recoveredRun.message) {\n\t\t\t\t\t\t\tstream.push({ type: \"error\", reason: \"error\", error: recoveredRun.message });\n\t\t\t\t\t\t\tstream.end();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorMessage = recoveredRun.errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tif (recoveredRun?.status === \"aborted\") {\n\t\t\t\t\t\terrorMessage = recoveredRun.errorMessage ?? \"pi-server run aborted\";\n\t\t\t\t\t}\n\t\t\t\t} catch (recoveryError) {\n\t\t\t\t\tphase = \"history_reconcile\";\n\t\t\t\t\terrorMessage = recoveryError instanceof Error ? recoveryError.message : String(recoveryError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(options?.signal?.aborted || callbackFailed || observerFailed) &&\n\t\t\t\toperation &&\n\t\t\t\t!operation.cancelConfirmed\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cancelPiServerOperation(operation);\n\t\t\t\t} catch (cancelError) {\n\t\t\t\t\terrorMessage = `${errorMessage}; cancellation failed: ${\n\t\t\t\t\t\tcancelError instanceof Error ? cancelError.message : String(cancelError)\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst reason = options?.signal?.aborted ? \"aborted\" : \"error\";\n\t\t\tpartial.stopReason = reason;\n\t\t\tpartial.errorMessage = errorMessage;\n\t\t\tpartial.diagnostics = [\n\t\t\t\t...(partial.diagnostics ?? []),\n\t\t\t\t{\n\t\t\t\t\ttype: \"pi_server_failure\",\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\terror: { name: error instanceof Error ? error.name : \"Error\", message: errorMessage },\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tsource: \"pi-server\",\n\t\t\t\t\t\tretryable: !callbackFailed && !observerFailed && isRetryablePiServerFailure(phase, error),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t\tstream.push({\n\t\t\t\ttype: \"error\",\n\t\t\t\treason,\n\t\t\t\terror: partial,\n\t\t\t});\n\t\t\tstream.end();\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tawait finishPiServerOperation(\n\t\t\t\t\toperation,\n\t\t\t\t\toptions?.signal?.aborted === true || callbackFailed || observerFailed,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// The owning session's cancellation helper reports the failure and keeps\n\t\t\t\t// this operation registered for a retry.\n\t\t\t}\n\t\t}\n\t})();\n\n\treturn stream;\n}\n\nfunction processProxyEvent(\n\tproxyEvent: ProxyAssistantMessageEvent,\n\tpartial: AssistantMessage,\n): AssistantMessageEvent | undefined {\n\tswitch (proxyEvent.type) {\n\t\tcase \"provider_stream_event\":\n\t\t\treturn undefined;\n\t\tcase \"start\":\n\t\t\treturn { type: \"start\", partial };\n\t\tcase \"text_start\":\n\t\t\tpartial.content[proxyEvent.contentIndex] = { type: \"text\", text: \"\" };\n\t\t\treturn { type: \"text_start\", contentIndex: proxyEvent.contentIndex, partial };\n\t\tcase \"text_delta\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"text\") {\n\t\t\t\tcontent.text += proxyEvent.delta;\n\t\t\t\treturn { type: \"text_delta\", contentIndex: proxyEvent.contentIndex, delta: proxyEvent.delta, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received text_delta for non-text content\");\n\t\t}\n\t\tcase \"text_end\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"text\") {\n\t\t\t\tcontent.textSignature = proxyEvent.contentSignature;\n\t\t\t\treturn { type: \"text_end\", contentIndex: proxyEvent.contentIndex, content: content.text, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received text_end for non-text content\");\n\t\t}\n\t\tcase \"thinking_start\":\n\t\t\tpartial.content[proxyEvent.contentIndex] = { type: \"thinking\", thinking: \"\" };\n\t\t\treturn { type: \"thinking_start\", contentIndex: proxyEvent.contentIndex, partial };\n\t\tcase \"thinking_delta\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"thinking\") {\n\t\t\t\tcontent.thinking += proxyEvent.delta;\n\t\t\t\treturn { type: \"thinking_delta\", contentIndex: proxyEvent.contentIndex, delta: proxyEvent.delta, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received thinking_delta for non-thinking content\");\n\t\t}\n\t\tcase \"thinking_end\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"thinking\") {\n\t\t\t\tcontent.thinkingSignature = proxyEvent.contentSignature;\n\t\t\t\treturn { type: \"thinking_end\", contentIndex: proxyEvent.contentIndex, content: content.thinking, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received thinking_end for non-thinking content\");\n\t\t}\n\t\tcase \"toolcall_start\":\n\t\t\tpartial.content[proxyEvent.contentIndex] = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: proxyEvent.id,\n\t\t\t\tname: proxyEvent.toolName,\n\t\t\t\targuments: {},\n\t\t\t\tpartialJson: \"\",\n\t\t\t} as any;\n\t\t\treturn { type: \"toolcall_start\", contentIndex: proxyEvent.contentIndex, partial };\n\t\tcase \"toolcall_delta\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"toolCall\") {\n\t\t\t\t(content as any).partialJson += proxyEvent.delta;\n\t\t\t\tcontent.arguments = parseStreamingJson((content as any).partialJson) || {};\n\t\t\t\tpartial.content[proxyEvent.contentIndex] = { ...content };\n\t\t\t\treturn { type: \"toolcall_delta\", contentIndex: proxyEvent.contentIndex, delta: proxyEvent.delta, partial };\n\t\t\t}\n\t\t\tthrow new Error(\"Received toolcall_delta for non-toolCall content\");\n\t\t}\n\t\tcase \"toolcall_end\": {\n\t\t\tconst content = partial.content[proxyEvent.contentIndex];\n\t\t\tif (content?.type === \"toolCall\") {\n\t\t\t\tObject.assign(content, proxyEvent.toolCall);\n\t\t\t\tdelete (content as any).partialJson;\n\t\t\t\treturn { type: \"toolcall_end\", contentIndex: proxyEvent.contentIndex, toolCall: content, partial };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"done\":\n\t\t\tif (proxyEvent.message) return { type: \"done\", reason: proxyEvent.reason, message: proxyEvent.message };\n\t\t\tpartial.stopReason = proxyEvent.reason;\n\t\t\tpartial.usage = proxyEvent.usage;\n\t\t\tpartial.deferred = proxyEvent.deferred;\n\t\t\treturn { type: \"done\", reason: proxyEvent.reason, message: partial };\n\t\tcase \"error\":\n\t\t\tif (proxyEvent.message) return { type: \"error\", reason: proxyEvent.reason, error: proxyEvent.message };\n\t\t\tpartial.stopReason = proxyEvent.reason;\n\t\t\tpartial.errorMessage = proxyEvent.errorMessage;\n\t\t\tpartial.usage = proxyEvent.usage;\n\t\t\treturn { type: \"error\", reason: proxyEvent.reason, error: partial };\n\t\tdefault: {\n\t\t\tconst _exhaustiveCheck: never = proxyEvent;\n\t\t\tconsole.warn(`Unhandled proxy event type: ${(proxyEvent as any).type}`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nexport { getServerUrl, getAuthToken };\n\nfunction serializeApiOptions(options: StreamOptions): ProviderStreamOptions {\n\tconst {\n\t\tsignal: _signal,\n\t\tfetch: _fetch,\n\t\tonPayload: _onPayload,\n\t\tonResponse: _onResponse,\n\t\tonProviderStreamEvent: _onProviderStreamEvent,\n\t\ttelemetryContext: _telemetryContext,\n\t\t...serialized\n\t} = options;\n\treturn serialized;\n}\n\nexport interface PiServerModelCatalog {\n\tmodels: AnyModel[];\n\tavailable: AnyModel[];\n\tproviders: { id: string; fetchDeferred: boolean; cancelDeferred: boolean }[];\n}\n\nexport async function fetchPiServerModels(options?: AuthOperationOptions): Promise<PiServerModelCatalog> {\n\tconst response = await createPiServerRequest(options?.signal).getJson(\"/api/models\");\n\treturn readPiServerJson<PiServerModelCatalog>(response, \"pi-server model catalog failed\");\n}\n\nexport async function generateImagesPiServer(\n\tmodel: ImageModel<ImageApi>,\n\tcontext: ImagesContext,\n\toptions?: ImagesOptions,\n): Promise<AssistantImages> {\n\tassertNoCustomPiServerFetch(options);\n\treturn postPiServerModelOperation<AssistantImages, ImageModel<ImageApi>>(\n\t\t\"/api/generate-images\",\n\t\t{\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t\toptions: {\n\t\t\t\tapiKey: options?.apiKey,\n\t\t\t\tenv: options?.env,\n\t\t\t\theaders: options?.headers,\n\t\t\t\tmetadata: options?.metadata,\n\t\t\t\ttimeoutMs: options?.timeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\t\t},\n\t\t},\n\t\tmodel,\n\t\toptions,\n\t);\n}\n\nexport async function classifyPiServer(\n\tmodel: ClassifierModel<ClassifierApi>,\n\tcontext: ClassifierContext,\n\toptions?: ClassifierOptions,\n): Promise<ClassifierResult> {\n\tassertNoCustomPiServerFetch(options);\n\treturn postPiServerModelOperation<ClassifierResult, ClassifierModel<ClassifierApi>>(\n\t\t\"/api/classify\",\n\t\t{\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t\toptions: {\n\t\t\t\tapiKey: options?.apiKey,\n\t\t\t\tenv: options?.env,\n\t\t\t\theaders: options?.headers,\n\t\t\t\ttemperature: options?.temperature,\n\t\t\t\ttimeoutMs: options?.timeoutMs,\n\t\t\t\tmaxRetries: options?.maxRetries,\n\t\t\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\t\t},\n\t\t},\n\t\tmodel,\n\t\toptions,\n\t);\n}\n\nfunction assertNoCustomPiServerFetch(options?: Pick<ProviderRequestOptions<AnyModel>, \"fetch\">): void {\n\tif (options?.fetch) throw new Error(\"Custom fetch functions cannot execute on pi-server\");\n}\n\nasync function handleProviderCallback<TModel extends AnyModel>(\n\tcallback: PiServerProviderCallbackRequest,\n\tmodel: TModel,\n\toptions: ProviderRequestOptions<TModel> | undefined,\n\tsessionId: string,\n\trunId: string,\n\trequest: ChunkRequest,\n): Promise<void> {\n\tif (\n\t\t!callback ||\n\t\ttypeof callback.callbackId !== \"string\" ||\n\t\t!callback.model ||\n\t\tcallback.model.provider !== model.provider ||\n\t\tcallback.model.id !== model.id ||\n\t\tcallback.model.api !== model.api ||\n\t\tgetModelType(callback.model) !== getModelType(model)\n\t) {\n\t\tthrow new Error(\"pi-server provider callback has an invalid model or callback identity\");\n\t}\n\tconst remoteModel = callback.model as TModel;\n\tlet result: unknown;\n\tlet failure: unknown;\n\tlet failed = false;\n\ttry {\n\t\tif (callback.kind === \"payload\") {\n\t\t\tif (!options?.onPayload) throw new Error(\"Unexpected pi-server payload callback\");\n\t\t\tconst replacement = await raceWithAbortSignal(\n\t\t\t\tPromise.resolve().then(() => options.onPayload!(callback.payload, remoteModel)),\n\t\t\t\toptions.signal,\n\t\t\t);\n\t\t\tresult = replacement === undefined ? callback.payload : replacement;\n\t\t} else if (callback.kind === \"response\") {\n\t\t\tif (!options?.onResponse) throw new Error(\"Unexpected pi-server response callback\");\n\t\t\tawait raceWithAbortSignal(\n\t\t\t\tPromise.resolve().then(() => options.onResponse!(callback.response, remoteModel)),\n\t\t\t\toptions.signal,\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(\"Unknown pi-server provider callback kind\");\n\t\t}\n\t} catch (error) {\n\t\tif (options?.signal?.aborted) throw error;\n\t\tfailure = error;\n\t\tfailed = true;\n\t}\n\tconst response = await request.postJson(\"/api/provider-callback\", {\n\t\tsessionId,\n\t\trunId,\n\t\tcallbackId: callback.callbackId,\n\t\tresult,\n\t\terror: !failed\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tname: failure instanceof Error ? failure.name : \"Error\",\n\t\t\t\t\tmessage: failure instanceof Error ? failure.message : String(failure),\n\t\t\t\t},\n\t});\n\tconst reply = await readPiServerJson<{ accepted: boolean; callbackId: string; runId: string }>(\n\t\tresponse,\n\t\t\"pi-server callback reply failed\",\n\t);\n\tif (!reply.accepted || reply.callbackId !== callback.callbackId || reply.runId !== runId) {\n\t\tthrow new Error(\"pi-server callback reply did not acknowledge the pending callback\");\n\t}\n\tif (failed) throw failure;\n}\n\nasync function postPiServerModelOperation<T, TModel extends AnyModel>(\n\tendpoint: \"/api/generate-images\" | \"/api/classify\" | \"/api/cancel-deferred\",\n\tbody: Record<string, unknown>,\n\tmodel: TModel,\n\toptions?: ProviderRequestOptions<TModel>,\n): Promise<T> {\n\tconst signal = options?.signal;\n\tconst sessionId = randomUUID();\n\tconst runId = randomUUID();\n\tconst operation = registerPiServerOperation(sessionId, sessionId, runId, signal);\n\tconst request = createPiServerRequest(signal);\n\tlet callbackFailed = false;\n\ttry {\n\t\tconst response = await request.postJson(endpoint, {\n\t\t\t...body,\n\t\t\tsessionId,\n\t\t\trunId,\n\t\t\tcallbacks: { onPayload: options?.onPayload !== undefined, onResponse: options?.onResponse !== undefined },\n\t\t});\n\t\tif (!response.ok) return await readPiServerJson<T>(response, \"pi-server model operation failed\");\n\t\tawait ensurePiServerEventStream(response);\n\t\ttry {\n\t\t\treturn await readPiServerEventStreamJson<T>(response, \"pi-server model operation failed\", async (callback) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait handleProviderCallback(callback, model, options, sessionId, runId, request);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcallbackFailed = true;\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (signal?.aborted || callbackFailed) throw error;\n\t\t\tconst recovered = await waitForPiServerRunCompletion(sessionId, runId, request, { signal });\n\t\t\tif (recovered?.operationResult) return recovered.operationResult as T;\n\t\t\tthrow error;\n\t\t}\n\t} catch (error) {\n\t\tif ((signal?.aborted || callbackFailed) && operation && !operation.cancelConfirmed)\n\t\t\tawait cancelPiServerOperation(operation);\n\t\tthrow error;\n\t} finally {\n\t\tawait finishPiServerOperation(operation, signal?.aborted === true || callbackFailed);\n\t}\n}\n"]}
|
package/dist/core/sdk.d.ts
CHANGED
|
@@ -41,6 +41,10 @@ export interface CreateAgentSessionOptions {
|
|
|
41
41
|
* enabled. MCP tools stay registered for codemode and tool search unless an
|
|
42
42
|
* entry starts with `mcp__`; then only matching MCP tools are kept. An empty
|
|
43
43
|
* list, like `noTools: "all"`, disables MCP tools too.
|
|
44
|
+
*
|
|
45
|
+
* A list of only `+name` and `-name` entries is not an allowlist: it adds tools
|
|
46
|
+
* to or removes them from the default selection, like the `defaultTools` setting.
|
|
47
|
+
* These entries take exact names. Mixing them with plain entries throws.
|
|
44
48
|
*/
|
|
45
49
|
tools?: string[];
|
|
46
50
|
/**
|
package/dist/core/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAAgD,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEjH,OAAO,EAAsB,KAAK,OAAO,EAAE,KAAK,KAAK,EAAgB,MAAM,8BAA8B,CAAC;AAG1G,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,KAAK,EAAmB,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAItH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAwB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/core/sdk.js
CHANGED
|
@@ -15,7 +15,7 @@ import { streamPiServer } from "./pi-server-client.js";
|
|
|
15
15
|
import { mergeProviderAttributionHeaders } from "./provider-attribution.js";
|
|
16
16
|
import { DefaultResourceLoader } from "./resource-loader.js";
|
|
17
17
|
import { getDefaultSessionDir, SessionManager } from "./session-manager.js";
|
|
18
|
-
import { DEFAULT_TOOL_NAMES, SettingsManager } from "./settings-manager.js";
|
|
18
|
+
import { applyToolModifiers, DEFAULT_TOOL_NAMES, getToolListError, isToolModifier, SettingsManager, } from "./settings-manager.js";
|
|
19
19
|
import { time } from "./timings.js";
|
|
20
20
|
import { createBashTool, createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createPowerShellTool, createReadOnlyTools, createReadTool, createWriteTool, withFileMutationQueue, } from "./tools/index.js";
|
|
21
21
|
import { getBranchSelection } from "./virtual-models.js";
|
|
@@ -146,11 +146,22 @@ export async function createAgentSession(options = {}) {
|
|
|
146
146
|
else {
|
|
147
147
|
thinkingLevel = clampThinkingLevel(model, thinkingLevel);
|
|
148
148
|
}
|
|
149
|
-
const
|
|
150
|
-
|
|
149
|
+
const toolListError = options.tools ? getToolListError(options.tools) : undefined;
|
|
150
|
+
if (toolListError)
|
|
151
|
+
throw new Error(`Invalid tools option: ${toolListError}`);
|
|
152
|
+
const defaultToolNames = options.noTools ? [] : (settingsManager.getDefaultTools() ?? DEFAULT_TOOL_NAMES);
|
|
153
|
+
// A `tools` list of only `+name`/`-name` entries changes the default selection instead of
|
|
154
|
+
// replacing it, like the `defaultTools` setting.
|
|
155
|
+
const toolModifiers = options.tools?.some(isToolModifier) ? options.tools : undefined;
|
|
156
|
+
const selectedToolNames = toolModifiers ? applyToolModifiers(defaultToolNames, toolModifiers) : options.tools;
|
|
157
|
+
const allowedToolNames = toolModifiers
|
|
158
|
+
? options.noTools === "all"
|
|
159
|
+
? selectedToolNames
|
|
160
|
+
: undefined
|
|
161
|
+
: (options.tools ?? (options.noTools === "all" ? [] : undefined));
|
|
151
162
|
const excludedToolNames = options.excludeTools;
|
|
152
163
|
const isExcludedTool = excludedToolNames ? createToolNameMatcher(excludedToolNames) : undefined;
|
|
153
|
-
const initialActiveToolNames = (
|
|
164
|
+
const initialActiveToolNames = (selectedToolNames ?? defaultToolNames).filter((name) => !isExcludedTool?.(name));
|
|
154
165
|
let agent;
|
|
155
166
|
let agentSession;
|
|
156
167
|
// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)
|
|
@@ -361,7 +372,8 @@ export async function createAgentSession(options = {}) {
|
|
|
361
372
|
modelRuntime,
|
|
362
373
|
cacheWarmer,
|
|
363
374
|
initialActiveToolNames,
|
|
364
|
-
usesDefaultTools: options.tools === undefined && !options.noTools,
|
|
375
|
+
usesDefaultTools: (options.tools === undefined || toolModifiers !== undefined) && !options.noTools,
|
|
376
|
+
defaultToolModifiers: toolModifiers,
|
|
365
377
|
allowedToolNames,
|
|
366
378
|
excludedToolNames,
|
|
367
379
|
extensionRunnerRef,
|