@caupulican/pi-adaptative 0.85.3 → 0.85.4

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.
Files changed (192) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/core/agent-session-services.d.ts.map +1 -1
  3. package/dist/core/agent-session-services.js +2 -0
  4. package/dist/core/agent-session-services.js.map +1 -1
  5. package/dist/core/agent-session.d.ts +6 -5
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +76 -87
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/auth-guidance.d.ts.map +1 -1
  10. package/dist/core/auth-guidance.js +3 -0
  11. package/dist/core/auth-guidance.js.map +1 -1
  12. package/dist/core/autonomy/lane-tool-surface.d.ts +2 -0
  13. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  14. package/dist/core/autonomy/lane-tool-surface.js +4 -3
  15. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  16. package/dist/core/background-lane-controller.d.ts +4 -0
  17. package/dist/core/background-lane-controller.d.ts.map +1 -1
  18. package/dist/core/background-lane-controller.js +2 -0
  19. package/dist/core/background-lane-controller.js.map +1 -1
  20. package/dist/core/background-tool-task-controller.d.ts +12 -7
  21. package/dist/core/background-tool-task-controller.d.ts.map +1 -1
  22. package/dist/core/background-tool-task-controller.js +55 -19
  23. package/dist/core/background-tool-task-controller.js.map +1 -1
  24. package/dist/core/bedrock-scope.d.ts +26 -0
  25. package/dist/core/bedrock-scope.d.ts.map +1 -0
  26. package/dist/core/bedrock-scope.js +178 -0
  27. package/dist/core/bedrock-scope.js.map +1 -0
  28. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  29. package/dist/core/delegation/worker-delegation-controller.js +6 -0
  30. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  31. package/dist/core/extensions/loader.d.ts.map +1 -1
  32. package/dist/core/extensions/loader.js +3 -0
  33. package/dist/core/extensions/loader.js.map +1 -1
  34. package/dist/core/foreground-recovery-controller.d.ts +25 -2
  35. package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
  36. package/dist/core/foreground-recovery-controller.js +111 -2
  37. package/dist/core/foreground-recovery-controller.js.map +1 -1
  38. package/dist/core/foreground-terminal-handoff-controller.d.ts +27 -0
  39. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -0
  40. package/dist/core/foreground-terminal-handoff-controller.js +56 -0
  41. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -0
  42. package/dist/core/goal-loop-controller.d.ts.map +1 -1
  43. package/dist/core/goal-loop-controller.js +5 -0
  44. package/dist/core/goal-loop-controller.js.map +1 -1
  45. package/dist/core/goals/goal-auto-continue-controller.d.ts +3 -0
  46. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
  47. package/dist/core/goals/goal-auto-continue-controller.js +28 -7
  48. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
  49. package/dist/core/human-input-controller.d.ts +9 -0
  50. package/dist/core/human-input-controller.d.ts.map +1 -1
  51. package/dist/core/human-input-controller.js +60 -5
  52. package/dist/core/human-input-controller.js.map +1 -1
  53. package/dist/core/human-input.d.ts +12 -0
  54. package/dist/core/human-input.d.ts.map +1 -1
  55. package/dist/core/human-input.js +59 -12
  56. package/dist/core/human-input.js.map +1 -1
  57. package/dist/core/local-runtime-controller.d.ts.map +1 -1
  58. package/dist/core/local-runtime-controller.js +15 -9
  59. package/dist/core/local-runtime-controller.js.map +1 -1
  60. package/dist/core/memory/providers/file-store.d.ts +1 -0
  61. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  62. package/dist/core/memory/providers/file-store.js +252 -125
  63. package/dist/core/memory/providers/file-store.js.map +1 -1
  64. package/dist/core/model-capability.d.ts +15 -1
  65. package/dist/core/model-capability.d.ts.map +1 -1
  66. package/dist/core/model-capability.js +24 -1
  67. package/dist/core/model-capability.js.map +1 -1
  68. package/dist/core/model-registry.d.ts +5 -0
  69. package/dist/core/model-registry.d.ts.map +1 -1
  70. package/dist/core/model-registry.js +18 -0
  71. package/dist/core/model-registry.js.map +1 -1
  72. package/dist/core/model-router-controller.d.ts +6 -6
  73. package/dist/core/model-router-controller.d.ts.map +1 -1
  74. package/dist/core/model-router-controller.js +5 -5
  75. package/dist/core/model-router-controller.js.map +1 -1
  76. package/dist/core/models/context-sizing.d.ts +1 -0
  77. package/dist/core/models/context-sizing.d.ts.map +1 -1
  78. package/dist/core/models/context-sizing.js +4 -1
  79. package/dist/core/models/context-sizing.js.map +1 -1
  80. package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
  81. package/dist/core/models/default-model-suggestions.js +20 -10
  82. package/dist/core/models/default-model-suggestions.js.map +1 -1
  83. package/dist/core/models/llamacpp-runtime.d.ts +32 -11
  84. package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
  85. package/dist/core/models/llamacpp-runtime.js +79 -28
  86. package/dist/core/models/llamacpp-runtime.js.map +1 -1
  87. package/dist/core/models/local-execution-planner.d.ts +24 -0
  88. package/dist/core/models/local-execution-planner.d.ts.map +1 -0
  89. package/dist/core/models/local-execution-planner.js +119 -0
  90. package/dist/core/models/local-execution-planner.js.map +1 -0
  91. package/dist/core/models/local-inference-profile.d.ts +34 -0
  92. package/dist/core/models/local-inference-profile.d.ts.map +1 -0
  93. package/dist/core/models/local-inference-profile.js +74 -0
  94. package/dist/core/models/local-inference-profile.js.map +1 -0
  95. package/dist/core/models/local-runtime.d.ts +23 -4
  96. package/dist/core/models/local-runtime.d.ts.map +1 -1
  97. package/dist/core/models/local-runtime.js +11 -8
  98. package/dist/core/models/local-runtime.js.map +1 -1
  99. package/dist/core/models/managed-ollama-model.d.ts +26 -0
  100. package/dist/core/models/managed-ollama-model.d.ts.map +1 -0
  101. package/dist/core/models/managed-ollama-model.js +59 -0
  102. package/dist/core/models/managed-ollama-model.js.map +1 -0
  103. package/dist/core/models/model-ref.js +11 -11
  104. package/dist/core/models/model-ref.js.map +1 -1
  105. package/dist/core/models/prism-llamacpp-lifecycle.d.ts +10 -20
  106. package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
  107. package/dist/core/models/prism-llamacpp-lifecycle.js +11 -31
  108. package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
  109. package/dist/core/models/prism-llamacpp-server-probe.d.ts +10 -0
  110. package/dist/core/models/prism-llamacpp-server-probe.d.ts.map +1 -0
  111. package/dist/core/models/prism-llamacpp-server-probe.js +36 -0
  112. package/dist/core/models/prism-llamacpp-server-probe.js.map +1 -0
  113. package/dist/core/models/runtime-arbiter.d.ts +3 -0
  114. package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
  115. package/dist/core/models/runtime-arbiter.js +2 -1
  116. package/dist/core/models/runtime-arbiter.js.map +1 -1
  117. package/dist/core/research/research-lane-controller.d.ts.map +1 -1
  118. package/dist/core/research/research-lane-controller.js +14 -5
  119. package/dist/core/research/research-lane-controller.js.map +1 -1
  120. package/dist/core/runtime-builder.d.ts +5 -1
  121. package/dist/core/runtime-builder.d.ts.map +1 -1
  122. package/dist/core/runtime-builder.js +37 -4
  123. package/dist/core/runtime-builder.js.map +1 -1
  124. package/dist/core/scout-controller.d.ts +3 -2
  125. package/dist/core/scout-controller.d.ts.map +1 -1
  126. package/dist/core/scout-controller.js +1 -0
  127. package/dist/core/scout-controller.js.map +1 -1
  128. package/dist/core/sdk.d.ts.map +1 -1
  129. package/dist/core/sdk.js +10 -8
  130. package/dist/core/sdk.js.map +1 -1
  131. package/dist/core/settings-manager.d.ts +13 -0
  132. package/dist/core/settings-manager.d.ts.map +1 -1
  133. package/dist/core/settings-manager.js +59 -0
  134. package/dist/core/settings-manager.js.map +1 -1
  135. package/dist/core/system-prompt-builder.d.ts +5 -2
  136. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  137. package/dist/core/system-prompt-builder.js +22 -10
  138. package/dist/core/system-prompt-builder.js.map +1 -1
  139. package/dist/core/system-prompt.d.ts +3 -0
  140. package/dist/core/system-prompt.d.ts.map +1 -1
  141. package/dist/core/system-prompt.js +181 -55
  142. package/dist/core/system-prompt.js.map +1 -1
  143. package/dist/core/tool-protocol-controller.d.ts.map +1 -1
  144. package/dist/core/tool-protocol-controller.js +5 -3
  145. package/dist/core/tool-protocol-controller.js.map +1 -1
  146. package/dist/core/tools/edit-diff.d.ts +2 -0
  147. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  148. package/dist/core/tools/edit-diff.js +9 -1
  149. package/dist/core/tools/edit-diff.js.map +1 -1
  150. package/dist/core/tools/edit.d.ts +5 -8
  151. package/dist/core/tools/edit.d.ts.map +1 -1
  152. package/dist/core/tools/edit.js +88 -55
  153. package/dist/core/tools/edit.js.map +1 -1
  154. package/dist/core/tools/file-mutation-intent.d.ts +42 -15
  155. package/dist/core/tools/file-mutation-intent.d.ts.map +1 -1
  156. package/dist/core/tools/file-mutation-intent.js +271 -77
  157. package/dist/core/tools/file-mutation-intent.js.map +1 -1
  158. package/dist/core/tools/index.d.ts +1 -1
  159. package/dist/core/tools/index.d.ts.map +1 -1
  160. package/dist/core/tools/index.js +1 -1
  161. package/dist/core/tools/index.js.map +1 -1
  162. package/dist/core/tools/write.d.ts +5 -10
  163. package/dist/core/tools/write.d.ts.map +1 -1
  164. package/dist/core/tools/write.js +92 -73
  165. package/dist/core/tools/write.js.map +1 -1
  166. package/dist/index.d.ts +1 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +1 -1
  169. package/dist/index.js.map +1 -1
  170. package/dist/modes/interactive/auth-dialogs-controller.d.ts +6 -0
  171. package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
  172. package/dist/modes/interactive/auth-dialogs-controller.js +59 -12
  173. package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
  174. package/dist/modes/interactive/local-model-commands.d.ts +1 -1
  175. package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
  176. package/dist/modes/interactive/local-model-commands.js +51 -8
  177. package/dist/modes/interactive/local-model-commands.js.map +1 -1
  178. package/docs/providers.md +34 -10
  179. package/docs/tool-boundary-performance-roadmap-2026-08-02.md +21 -18
  180. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  181. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  182. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  183. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  184. package/examples/extensions/minimal-mode.ts +1 -1
  185. package/examples/extensions/prompt-customizer.ts +2 -2
  186. package/examples/extensions/sandbox/package-lock.json +2 -2
  187. package/examples/extensions/sandbox/package.json +1 -1
  188. package/examples/extensions/ssh.ts +17 -0
  189. package/examples/extensions/with-deps/package-lock.json +2 -2
  190. package/examples/extensions/with-deps/package.json +1 -1
  191. package/npm-shrinkwrap.json +240 -260
  192. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"background-tool-task-controller.js","sourceRoot":"","sources":["../../src/core/background-tool-task-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tBackgroundToolCallCompletion,\n\tBackgroundToolCallContext,\n\tBackgroundToolCallHandoff,\n} from \"@caupulican/pi-agent-core\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Usage } from \"@caupulican/pi-ai\";\nimport type { ArtifactStore } from \"./context/context-artifacts.ts\";\nimport { formatArtifactNotice, packToolOutput } from \"./context/tool-output-packer.ts\";\nimport { hasOnlyKeys, isPlainRecord } from \"./util/value-guards.ts\";\n\nexport const DEFAULT_BACKGROUND_TOOL_CALL_AFTER_MS = 15_000;\nexport const BACKGROUND_TOOL_TASK_CUSTOM_TYPE = \"background_tool_task\";\n\nconst MAX_RETAINED_TERMINAL_TASKS = 64;\nconst MAX_INLINE_OUTPUT_BYTES = 32 * 1024;\nconst MAX_INLINE_OUTPUT_LINES = 400;\nconst MAX_SUMMARY_CHARS = 200;\nconst TASK_ID_PATTERN = /^tool-task-([1-9]\\d*)$/;\nconst RECORD_KEYS = [\n\t\"sessionId\",\n\t\"taskId\",\n\t\"toolCallId\",\n\t\"toolName\",\n\t\"status\",\n\t\"startedAt\",\n\t\"completedAt\",\n\t\"elapsedBeforeHandoffMs\",\n\t\"summary\",\n\t\"output\",\n\t\"artifactId\",\n\t\"usage\",\n\t\"cancellationRequested\",\n] as const;\n\nexport type BackgroundToolTaskStatus = \"running\" | \"completed\" | \"failed\" | \"canceled\";\n\nexport interface BackgroundToolTaskRecord {\n\tsessionId: string;\n\ttaskId: string;\n\ttoolCallId: string;\n\ttoolName: string;\n\tstatus: BackgroundToolTaskStatus;\n\tstartedAt: string;\n\tcompletedAt?: string;\n\telapsedBeforeHandoffMs: number;\n\tsummary: string;\n\toutput: string;\n\tartifactId?: string;\n\tusage?: Usage;\n\tcancellationRequested?: boolean;\n}\n\nexport interface BackgroundToolTaskLiveView {\n\ttaskId: string;\n\ttoolCallId: string;\n\ttoolName: string;\n\tdescription: string;\n}\n\nexport interface BackgroundToolTerminalMessage {\n\tcustomType: \"background-tool-completion\";\n\tcontent: string;\n\tdisplay: true;\n\tdetails: {\n\t\ttaskId: string;\n\t\tstatus: BackgroundToolTaskStatus;\n\t\ttoolName: string;\n\t\tartifactId?: string;\n\t};\n}\n\nexport interface BackgroundToolTaskControllerDeps {\n\tgetSessionId(): string;\n\tgetArtifactStore(): ArtifactStore | undefined;\n\t/** Durable task records on the active branch, newest first, without rebuilding full model context. */\n\tloadPersistedRecordsNewestFirst?(): readonly unknown[];\n\tpersist(record: BackgroundToolTaskRecord): void;\n\tnotifyTerminal(record: BackgroundToolTaskRecord, options: { wakeParent: boolean }): Promise<void> | void;\n\tonLiveTasksChanged?(tasks: readonly BackgroundToolTaskLiveView[]): void;\n\trecordUsage?(taskId: string, usage: Usage): void;\n\tonError?(message: string, error: unknown): void;\n\tnow?(): Date;\n}\n\ninterface BackgroundToolTaskState {\n\trecord: BackgroundToolTaskRecord;\n\tcancel: () => void;\n\tcancellationRequested: boolean;\n\twaitingConsumers: number;\n\tterminal: Promise<BackgroundToolTaskRecord>;\n\tresolveTerminal: (record: BackgroundToolTaskRecord) => void;\n\tartifactHolderId: string;\n}\n\n/** Read only task records on the active branch without allocating or hydrating the full branch context. */\nexport function loadBackgroundToolTaskRecordsNewestFirst(\n\tsessionManager: Pick<SessionManager, \"getLatestCustomEntryOnBranch\">,\n): unknown[] {\n\tconst records: unknown[] = [];\n\tlet fromId: string | undefined;\n\tfor (;;) {\n\t\tconst entry = sessionManager.getLatestCustomEntryOnBranch(BACKGROUND_TOOL_TASK_CUSTOM_TYPE, fromId);\n\t\tif (!entry) return records;\n\t\trecords.push(entry.data);\n\t\tif (entry.parentId === null) return records;\n\t\tfromId = entry.parentId;\n\t}\n}\n\nexport function createBackgroundToolTerminalMessage(record: BackgroundToolTaskRecord): BackgroundToolTerminalMessage {\n\treturn {\n\t\tcustomType: \"background-tool-completion\",\n\t\tcontent: [\n\t\t\t\"Background tool terminal handoff:\",\n\t\t\t`- ${record.taskId}: ${record.status} (tool=${record.toolName})`,\n\t\t\t\"This terminal event woke the owning session. Retrieve the result once with tool_task action=wait if it is needed; never poll.\",\n\t\t].join(\"\\n\"),\n\t\tdisplay: true,\n\t\tdetails: {\n\t\t\ttaskId: record.taskId,\n\t\t\tstatus: record.status,\n\t\t\ttoolName: record.toolName,\n\t\t\t...(record.artifactId ? { artifactId: record.artifactId } : {}),\n\t\t},\n\t};\n}\n\nfunction renderCompletionOutput(completion: BackgroundToolCallCompletion): string {\n\tconst blocks = completion.result.content.map((block) =>\n\t\tblock.type === \"text\" ? block.text : \"[Image output retained outside the foreground transcript]\",\n\t);\n\treturn blocks.join(\"\\n\") || \"Tool completed without text output.\";\n}\n\nfunction oneLine(value: string): string {\n\treturn value\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nfunction summaryFor(status: BackgroundToolTaskStatus, toolName: string, output: string): string {\n\tconst prefix = `${toolName} ${status}`;\n\tconst firstLine = oneLine(output);\n\tif (!firstLine) return prefix;\n\tconst remaining = Math.max(0, MAX_SUMMARY_CHARS - prefix.length - 2);\n\treturn `${prefix}: ${firstLine.slice(0, remaining)}`;\n}\n\nfunction taskNumber(taskId: string): number | undefined {\n\tconst match = TASK_ID_PATTERN.exec(taskId);\n\tif (!match) return undefined;\n\tconst value = Number(match[1]);\n\treturn Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n\nfunction cloneUsage(value: unknown): Usage | undefined {\n\tif (!isPlainRecord(value)) return undefined;\n\tconst cost = value.cost;\n\tif (!isPlainRecord(cost)) return undefined;\n\tconst fields = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"totalTokens\"] as const;\n\tconst costFields = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"total\"] as const;\n\tif (\n\t\tfields.some((field) => typeof value[field] !== \"number\" || !Number.isFinite(value[field])) ||\n\t\tcostFields.some((field) => typeof cost[field] !== \"number\" || !Number.isFinite(cost[field]))\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tinput: value.input as number,\n\t\toutput: value.output as number,\n\t\tcacheRead: value.cacheRead as number,\n\t\tcacheWrite: value.cacheWrite as number,\n\t\ttotalTokens: value.totalTokens as number,\n\t\tcost: {\n\t\t\tinput: cost.input as number,\n\t\t\toutput: cost.output as number,\n\t\t\tcacheRead: cost.cacheRead as number,\n\t\t\tcacheWrite: cost.cacheWrite as number,\n\t\t\ttotal: cost.total as number,\n\t\t},\n\t};\n}\n\nfunction decodeRecord(value: unknown, sessionId: string): BackgroundToolTaskRecord | undefined {\n\tif (!isPlainRecord(value) || !hasOnlyKeys(value, RECORD_KEYS)) return undefined;\n\tif (\n\t\tvalue.sessionId !== sessionId ||\n\t\ttypeof value.taskId !== \"string\" ||\n\t\ttaskNumber(value.taskId) === undefined ||\n\t\ttypeof value.toolCallId !== \"string\" ||\n\t\tvalue.toolCallId.length === 0 ||\n\t\ttypeof value.toolName !== \"string\" ||\n\t\tvalue.toolName.length === 0 ||\n\t\t(value.status !== \"running\" &&\n\t\t\tvalue.status !== \"completed\" &&\n\t\t\tvalue.status !== \"failed\" &&\n\t\t\tvalue.status !== \"canceled\") ||\n\t\ttypeof value.startedAt !== \"string\" ||\n\t\t!Number.isFinite(Date.parse(value.startedAt)) ||\n\t\t(value.completedAt !== undefined &&\n\t\t\t(typeof value.completedAt !== \"string\" || !Number.isFinite(Date.parse(value.completedAt)))) ||\n\t\t(value.status !== \"running\" && value.completedAt === undefined) ||\n\t\ttypeof value.elapsedBeforeHandoffMs !== \"number\" ||\n\t\t!Number.isFinite(value.elapsedBeforeHandoffMs) ||\n\t\tvalue.elapsedBeforeHandoffMs < 0 ||\n\t\ttypeof value.summary !== \"string\" ||\n\t\ttypeof value.output !== \"string\" ||\n\t\t(value.artifactId !== undefined &&\n\t\t\t(typeof value.artifactId !== \"string\" || !/^[0-9a-f]{1,64}$/.test(value.artifactId))) ||\n\t\t(value.cancellationRequested !== undefined && typeof value.cancellationRequested !== \"boolean\")\n\t) {\n\t\treturn undefined;\n\t}\n\tconst usage = value.usage === undefined ? undefined : cloneUsage(value.usage);\n\tif (value.usage !== undefined && !usage) return undefined;\n\treturn {\n\t\tsessionId,\n\t\ttaskId: value.taskId,\n\t\ttoolCallId: value.toolCallId,\n\t\ttoolName: value.toolName,\n\t\tstatus: value.status,\n\t\tstartedAt: value.startedAt,\n\t\t...(value.completedAt ? { completedAt: value.completedAt } : {}),\n\t\telapsedBeforeHandoffMs: value.elapsedBeforeHandoffMs,\n\t\tsummary: value.summary,\n\t\toutput: value.output,\n\t\t...(value.artifactId ? { artifactId: value.artifactId } : {}),\n\t\t...(usage ? { usage } : {}),\n\t\t...(value.cancellationRequested !== undefined ? { cancellationRequested: value.cancellationRequested } : {}),\n\t};\n}\n\n/**\n * Session-owned registry for foreground tool calls transferred into background execution.\n * It emits edge records for durability and a replace-style live-task signal for UI consumers.\n */\nexport class BackgroundToolTaskController {\n\tprivate readonly deps: BackgroundToolTaskControllerDeps;\n\tprivate readonly tasks = new Map<string, BackgroundToolTaskState>();\n\tprivate readonly handoffRequests = new Map<string, Set<() => void>>();\n\tprivate readonly pendingNotifications = new Set<Promise<void>>();\n\tprivate nextTaskId = 1;\n\tprivate disposed = false;\n\n\tconstructor(deps: BackgroundToolTaskControllerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.restorePersistedTasks();\n\t}\n\n\thandoff(context: BackgroundToolCallContext): BackgroundToolCallHandoff | undefined {\n\t\tif (this.disposed || context.toolCall.name === \"tool_task\") return undefined;\n\t\tconst sessionId = this.deps.getSessionId();\n\t\tconst taskId = `tool-task-${this.nextTaskId++}`;\n\t\tconst startedAt = this.now().toISOString();\n\t\tconst record: BackgroundToolTaskRecord = {\n\t\t\tsessionId,\n\t\t\ttaskId,\n\t\t\ttoolCallId: context.toolCall.id,\n\t\t\ttoolName: context.toolCall.name,\n\t\t\tstatus: \"running\",\n\t\t\tstartedAt,\n\t\t\telapsedBeforeHandoffMs: context.elapsedMs,\n\t\t\tsummary: `${context.toolCall.name} running in the background`,\n\t\t\toutput: \"\",\n\t\t};\n\t\tconst state = this.createState(record, context.cancel);\n\t\tthis.tasks.set(taskId, state);\n\t\tif (!this.persist(record)) {\n\t\t\tthis.tasks.delete(taskId);\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.emitLiveTasks();\n\t\tcontext.completion.then(\n\t\t\t(completion) => this.settle(state, completion),\n\t\t\t(error) => this.settleRejected(state, error),\n\t\t);\n\n\t\treturn {\n\t\t\tresult: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t`Tool ${context.toolCall.name} exceeded ${Math.max(1, Math.round(context.elapsedMs / 1000))}s and continues as session task ${taskId}.`,\n\t\t\t\t\t\t\t\"Continue independent work. If its result is a dependency, call tool_task once with action=wait and this taskId; the wait is event-driven. Never poll.\",\n\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: { sessionId, taskId, status: \"running\" as const },\n\t\t\t},\n\t\t};\n\t}\n\n\tlist(): BackgroundToolTaskRecord[] {\n\t\treturn [...this.tasks.values()].map((state) => ({ ...state.record }));\n\t}\n\n\twait(taskId: string, signal?: AbortSignal): Promise<BackgroundToolTaskRecord> {\n\t\tconst state = this.tasks.get(taskId);\n\t\tif (!state) return Promise.reject(new Error(`Unknown background tool task: ${taskId}`));\n\t\tif (state.record.status !== \"running\") return Promise.resolve({ ...state.record });\n\t\tstate.waitingConsumers++;\n\t\tlet waiting = true;\n\t\tconst releaseWaiter = (): void => {\n\t\t\tif (!waiting) return;\n\t\t\twaiting = false;\n\t\t\tstate.waitingConsumers--;\n\t\t};\n\t\tif (!signal) {\n\t\t\treturn state.terminal.then((record) => {\n\t\t\t\treleaseWaiter();\n\t\t\t\treturn { ...record };\n\t\t\t});\n\t\t}\n\t\tif (signal.aborted) {\n\t\t\treleaseWaiter();\n\t\t\treturn Promise.reject(signal.reason ?? new Error(\"Operation aborted\"));\n\t\t}\n\t\treturn new Promise<BackgroundToolTaskRecord>((resolve, reject) => {\n\t\t\tconst onAbort = (): void => {\n\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\treleaseWaiter();\n\t\t\t\treject(signal.reason ?? new Error(\"Operation aborted\"));\n\t\t\t};\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tstate.terminal.then((record) => {\n\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\treleaseWaiter();\n\t\t\t\tresolve({ ...record });\n\t\t\t});\n\t\t});\n\t}\n\n\tcancel(taskId: string): boolean {\n\t\tconst state = this.tasks.get(taskId);\n\t\tif (!state || state.record.status !== \"running\") return false;\n\t\tstate.cancellationRequested = true;\n\t\tstate.record = { ...state.record, cancellationRequested: true };\n\t\ttry {\n\t\t\tstate.cancel();\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(`Failed to cancel background tool task ${taskId}`, error);\n\t\t}\n\t\treturn true;\n\t}\n\n\tsubscribeHandoffRequest(toolCallId: string, request: () => void): () => void {\n\t\tif (this.disposed) return () => {};\n\t\tconst requests = this.handoffRequests.get(toolCallId) ?? new Set<() => void>();\n\t\trequests.add(request);\n\t\tthis.handoffRequests.set(toolCallId, requests);\n\t\treturn () => {\n\t\t\trequests.delete(request);\n\t\t\tif (requests.size === 0) this.handoffRequests.delete(toolCallId);\n\t\t};\n\t}\n\n\trequestHandoff(toolCallId?: string): number {\n\t\tif (this.disposed) return 0;\n\t\tconst requested = toolCallId\n\t\t\t? [...(this.handoffRequests.get(toolCallId) ?? [])]\n\t\t\t: [...this.handoffRequests.values()].flatMap((requests) => [...requests]);\n\t\tfor (const request of requested) request();\n\t\treturn requested.length;\n\t}\n\n\tasync waitForNotifications(): Promise<void> {\n\t\tawait Promise.allSettled([...this.pendingNotifications]);\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tif (!this.disposed) {\n\t\t\tthis.disposed = true;\n\t\t\tthis.handoffRequests.clear();\n\t\t\tfor (const state of this.tasks.values()) {\n\t\t\t\tif (state.record.status !== \"running\") continue;\n\t\t\t\tstate.cancellationRequested = true;\n\t\t\t\ttry {\n\t\t\t\t\tstate.cancel();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.deps.onError?.(`Failed to cancel background tool task ${state.record.taskId}`, error);\n\t\t\t\t}\n\t\t\t\tthis.finishState(\n\t\t\t\t\tstate,\n\t\t\t\t\t\"canceled\",\n\t\t\t\t\t\"Session ended before the background tool completed.\",\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tawait this.waitForNotifications();\n\t}\n\n\tprivate settle(state: BackgroundToolTaskState, completion: BackgroundToolCallCompletion): void {\n\t\tif (state.record.status !== \"running\") return;\n\t\tconst status = state.cancellationRequested ? \"canceled\" : completion.isError ? \"failed\" : \"completed\";\n\t\tconst output = renderCompletionOutput(completion);\n\t\tthis.finishState(state, status, output, completion.result.usage, true);\n\t}\n\n\tprivate settleRejected(state: BackgroundToolTaskState, error: unknown): void {\n\t\tif (state.record.status !== \"running\") return;\n\t\tconst status = state.cancellationRequested ? \"canceled\" : \"failed\";\n\t\tconst output = error instanceof Error ? error.message : String(error);\n\t\tthis.finishState(state, status, output, undefined, true);\n\t}\n\n\tprivate restorePersistedTasks(): void {\n\t\tconst load = this.deps.loadPersistedRecordsNewestFirst;\n\t\tif (!load) return;\n\t\tlet values: readonly unknown[];\n\t\ttry {\n\t\t\tvalues = load();\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(\"Failed to load persisted background tool tasks\", error);\n\t\t\treturn;\n\t\t}\n\t\tconst sessionId = this.deps.getSessionId();\n\t\tconst seenTaskIds = new Set<string>();\n\t\tconst latestRecords: BackgroundToolTaskRecord[] = [];\n\t\tlet highestTaskNumber = 0;\n\t\tfor (const value of values) {\n\t\t\tif (!isPlainRecord(value) || value.sessionId !== sessionId || typeof value.taskId !== \"string\") continue;\n\t\t\tconst numericTaskId = taskNumber(value.taskId);\n\t\t\tif (numericTaskId === undefined) continue;\n\t\t\thighestTaskNumber = Math.max(highestTaskNumber, numericTaskId);\n\t\t\tif (seenTaskIds.has(value.taskId)) continue;\n\t\t\tseenTaskIds.add(value.taskId);\n\t\t\tconst record = decodeRecord(value, sessionId);\n\t\t\tif (record) latestRecords.push(record);\n\t\t}\n\t\tthis.nextTaskId = highestTaskNumber + 1;\n\t\tlatestRecords.sort((left, right) => taskNumber(left.taskId)! - taskNumber(right.taskId)!);\n\t\tfor (const record of latestRecords) {\n\t\t\tconst state = this.createState(record, () => {});\n\t\t\tthis.tasks.set(record.taskId, state);\n\t\t\tif (record.status !== \"running\") {\n\t\t\t\tstate.resolveTerminal(record);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.finishState(\n\t\t\t\tstate,\n\t\t\t\t\"failed\",\n\t\t\t\t\"The session resumed after the owning process ended; the original tool completion is unavailable.\",\n\t\t\t\tundefined,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t\tthis.pruneTerminalTasks();\n\t\tthis.emitLiveTasks();\n\t}\n\n\tprivate createState(record: BackgroundToolTaskRecord, cancel: () => void): BackgroundToolTaskState {\n\t\tlet resolveTerminal: ((terminalRecord: BackgroundToolTaskRecord) => void) | undefined;\n\t\tconst terminal = new Promise<BackgroundToolTaskRecord>((resolve) => {\n\t\t\tresolveTerminal = resolve;\n\t\t});\n\t\treturn {\n\t\t\trecord: { ...record },\n\t\t\tcancel,\n\t\t\tcancellationRequested: record.cancellationRequested ?? false,\n\t\t\twaitingConsumers: 0,\n\t\t\tterminal,\n\t\t\tresolveTerminal: resolveTerminal!,\n\t\t\tartifactHolderId: `background-tool-task:${record.sessionId}:${record.taskId}`,\n\t\t};\n\t}\n\n\tprivate finishState(\n\t\tstate: BackgroundToolTaskState,\n\t\tstatus: Exclude<BackgroundToolTaskStatus, \"running\">,\n\t\trawOutput: string,\n\t\tusage: Usage | undefined,\n\t\tnotify: boolean,\n\t): void {\n\t\tconst packed = packToolOutput(\n\t\t\t{\n\t\t\t\ttoolName: state.record.toolName,\n\t\t\t\trawContent: rawOutput,\n\t\t\t\tsessionEntryId: state.record.taskId,\n\t\t\t\tcreatedAtTurn: 0,\n\t\t\t\treproducible: false,\n\t\t\t\ttruncation: { maxBytes: MAX_INLINE_OUTPUT_BYTES, maxLines: MAX_INLINE_OUTPUT_LINES },\n\t\t\t},\n\t\t\tthis.deps.getArtifactStore(),\n\t\t\tstate.artifactHolderId,\n\t\t);\n\t\tconst output = packed.artifactId\n\t\t\t? `${packed.content}\\n\\n[${formatArtifactNotice(packed.artifactId)}]`\n\t\t\t: packed.content;\n\t\tconst record: BackgroundToolTaskRecord = {\n\t\t\t...state.record,\n\t\t\tstatus,\n\t\t\tcompletedAt: this.now().toISOString(),\n\t\t\tsummary: summaryFor(status, state.record.toolName, output),\n\t\t\toutput,\n\t\t\t...(packed.artifactId ? { artifactId: packed.artifactId } : {}),\n\t\t\t...(usage ? { usage } : {}),\n\t\t\t...(state.cancellationRequested ? { cancellationRequested: true } : {}),\n\t\t};\n\t\tstate.record = record;\n\t\tthis.persist(record);\n\t\tif (usage) this.deps.recordUsage?.(record.taskId, usage);\n\t\tstate.resolveTerminal(record);\n\t\tthis.emitLiveTasks();\n\t\tthis.pruneTerminalTasks();\n\t\tif (notify) this.notify(record, state.waitingConsumers === 0);\n\t}\n\n\tprivate persist(record: BackgroundToolTaskRecord): boolean {\n\t\ttry {\n\t\t\tthis.deps.persist({ ...record });\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(`Failed to persist background tool task ${record.taskId}`, error);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate notify(record: BackgroundToolTaskRecord, wakeParent: boolean): void {\n\t\tlet notification: Promise<void>;\n\t\ttry {\n\t\t\tnotification = Promise.resolve(this.deps.notifyTerminal({ ...record }, { wakeParent }));\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(`Failed to notify terminal background tool task ${record.taskId}`, error);\n\t\t\treturn;\n\t\t}\n\t\tthis.pendingNotifications.add(notification);\n\t\tnotification.then(\n\t\t\t() => this.pendingNotifications.delete(notification),\n\t\t\t(error) => {\n\t\t\t\tthis.pendingNotifications.delete(notification);\n\t\t\t\tthis.deps.onError?.(`Failed to notify terminal background tool task ${record.taskId}`, error);\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate emitLiveTasks(): void {\n\t\tconst tasks = [...this.tasks.values()]\n\t\t\t.filter((state) => state.record.status === \"running\")\n\t\t\t.map((state) => ({\n\t\t\t\ttaskId: state.record.taskId,\n\t\t\t\ttoolCallId: state.record.toolCallId,\n\t\t\t\ttoolName: state.record.toolName,\n\t\t\t\tdescription: state.record.summary,\n\t\t\t}));\n\t\ttry {\n\t\t\tthis.deps.onLiveTasksChanged?.(tasks);\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(\"Failed to emit background tool task level signal\", error);\n\t\t}\n\t}\n\n\tprivate pruneTerminalTasks(): void {\n\t\tconst terminal = [...this.tasks.values()].filter((state) => state.record.status !== \"running\");\n\t\tfor (const state of terminal.slice(0, Math.max(0, terminal.length - MAX_RETAINED_TERMINAL_TASKS))) {\n\t\t\tthis.tasks.delete(state.record.taskId);\n\t\t\tif (!state.record.artifactId) continue;\n\t\t\tconst store = this.deps.getArtifactStore();\n\t\t\tstore?.removeReference(state.record.artifactId, state.artifactHolderId);\n\t\t\tstore?.cleanup();\n\t\t}\n\t}\n\n\tprivate now(): Date {\n\t\treturn this.deps.now?.() ?? new Date();\n\t}\n}\n"]}
1
+ {"version":3,"file":"background-tool-task-controller.js","sourceRoot":"","sources":["../../src/core/background-tool-task-controller.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,CAAC,MAAM,qCAAqC,GAAG,MAAM,CAAC;AAC5D,MAAM,CAAC,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AAEvE,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC1C,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,4BAA4B,GAAG,CAAC,CAAC;AACvC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACjD,MAAM,WAAW,GAAG;IACnB,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,WAAW;IACX,aAAa;IACb,wBAAwB;IACxB,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,uBAAuB;CACd,CAAC;AAgEX,2GAA2G;AAC3G,MAAM,UAAU,wCAAwC,CACvD,cAAoE;IAEpE,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,IAAI,MAA0B,CAAC;IAC/B,SAAS,CAAC;QACT,MAAM,KAAK,GAAG,cAAc,CAAC,4BAA4B,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QAC5C,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;IACzB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mCAAmC,CAClD,OAA4C;IAE5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACjD,OAAO;QACN,UAAU,EAAE,4BAA4B;QACxC,OAAO,EAAE;YACR,mCAAmC;YACnC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC7F,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,sEAAsE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5G,+HAA+H;SAC/H,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;SACH;KACD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAwC;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACtD,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,2DAA2D,CAChG,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,qCAAqC,CAAC;AACnE,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC7B,OAAO,KAAK;SACV,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACV,CAAC;AAED,SAAS,UAAU,CAAC,MAAgC,EAAE,QAAgB,EAAE,MAAc;IACrF,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IACjC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IACjC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAU,CAAC;IACtF,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,CAAU,CAAC;IACpF,IACC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAC3F,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO;QACN,KAAK,EAAE,KAAK,CAAC,KAAe;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAgB;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAmB;QACpC,UAAU,EAAE,KAAK,CAAC,UAAoB;QACtC,WAAW,EAAE,KAAK,CAAC,WAAqB;QACxC,IAAI,EAAE;YACL,KAAK,EAAE,IAAI,CAAC,KAAe;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAgB;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAmB;YACnC,UAAU,EAAE,IAAI,CAAC,UAAoB;YACrC,KAAK,EAAE,IAAI,CAAC,KAAe;SAC3B;KACD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,SAAiB;IACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAChF,IACC,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS;QACtC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC7B,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC3B,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;YAC1B,KAAK,CAAC,MAAM,KAAK,WAAW;YAC5B,KAAK,CAAC,MAAM,KAAK,QAAQ;YACzB,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC;QAC7B,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;YAC/B,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC;QAC/D,OAAO,KAAK,CAAC,sBAAsB,KAAK,QAAQ;QAChD,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAC9C,KAAK,CAAC,sBAAsB,GAAG,CAAC;QAChC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;YAC9B,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACtF,CAAC,KAAK,CAAC,qBAAqB,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,qBAAqB,KAAK,SAAS,CAAC,EAC9F,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO;QACN,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5G,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,4BAA4B;IASxC,YAAY,IAAsC;QAPjC,UAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;QACnD,oBAAe,GAAG,IAAI,GAAG,EAA2B,CAAC;QACrD,wBAAmB,GAAqE,EAAE,CAAC;QAEpG,eAAU,GAAG,CAAC,CAAC;QACf,aAAQ,GAAG,KAAK,CAAC;QAGxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,OAAkC;QACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,aAAa,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,MAAM,GAA6B;YACxC,SAAS;YACT,MAAM;YACN,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YAC/B,MAAM,EAAE,SAAS;YACjB,SAAS;YACT,sBAAsB,EAAE,OAAO,CAAC,SAAS;YACzC,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,4BAA4B;YAC7D,MAAM,EAAE,EAAE;SACV,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,CAAC,UAAU,CAAC,IAAI,CACtB,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,EAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAC5C,CAAC;QAEF,OAAO;YACN,MAAM,EAAE;gBACP,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACL,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,mCAAmC,MAAM,GAAG;4BACvI,uJAAuJ;yBACvJ,CAAC,IAAI,CAAC,IAAI,CAAC;qBACZ;iBACD;gBACD,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAkB,EAAE;aAC1D;SACD,CAAC;IACH,CAAC;IAED,IAAI;QACH,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,MAAoB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxF,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,aAAa,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,OAAO,GAAG,KAAK,CAAC;YAChB,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACrC,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,OAAO,CAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChE,MAAM,OAAO,GAAG,GAAS,EAAE;gBAC1B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,aAAa,EAAE,CAAC;gBAChB,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC9B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,aAAa,EAAE,CAAC;gBAChB,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC9D,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACnC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC;YACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,yCAAyC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,uBAAuB,CAAC,UAAkB,EAAE,OAAmB;QAC9D,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAc,CAAC;QAC/E,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,OAAO,GAAG,EAAE;YACX,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC,CAAC;IACH,CAAC;IAED,cAAc,CAAC,UAAmB;QACjC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAU;YAC3B,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC3E,KAAK,MAAM,OAAO,IAAI,SAAS;YAAE,OAAO,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACzB,iGAAiG;QACjG,yFAAyF;QACzF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,SAAS,CAAC;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,KAAK,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;QAC9E,CAAC;IACF,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,SAAS;gBAChD,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC;oBACJ,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,yCAAyC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC5F,CAAC;gBACD,IAAI,CAAC,WAAW,CACf,KAAK,EACL,UAAU,EACV,qDAAqD,EACrD,SAAS,EACT,KAAK,CACL,CAAC;YACH,CAAC;QACF,CAAC;QACD,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACnC,CAAC;IAEO,MAAM,CAAC,KAA8B,EAAE,UAAwC;QACtF,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;QACtG,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAEO,cAAc,CAAC,KAA8B,EAAE,KAAc;QACpE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnE,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAEO,qBAAqB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACJ,MAAM,GAAG,IAAI,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;YAC7E,OAAO;QACR,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,MAAM,aAAa,GAA+B,EAAE,CAAC;QACrD,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACzG,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,aAAa,KAAK,SAAS;gBAAE,SAAS;YAC1C,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;YAC/D,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC5C,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC9C,IAAI,MAAM;gBAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,CAAC,CAAC;QACxC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAE,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC,CAAC;QAC1F,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC9B,SAAS;YACV,CAAC;YACD,IAAI,CAAC,WAAW,CACf,KAAK,EACL,QAAQ,EACR,kGAAkG,EAClG,SAAS,EACT,KAAK,CACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAEO,WAAW,CAAC,MAAgC,EAAE,MAAkB;QACvE,IAAI,eAAiF,CAAC;QACtF,MAAM,QAAQ,GAAG,IAAI,OAAO,CAA2B,CAAC,OAAO,EAAE,EAAE;YAClE,eAAe,GAAG,OAAO,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,OAAO;YACN,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;YACrB,MAAM;YACN,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,KAAK;YAC5D,gBAAgB,EAAE,CAAC;YACnB,QAAQ;YACR,eAAe,EAAE,eAAgB;YACjC,gBAAgB,EAAE,wBAAwB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE;SAC7E,CAAC;IACH,CAAC;IAEO,WAAW,CAClB,KAA8B,EAC9B,MAAoD,EACpD,SAAiB,EACjB,KAAwB,EACxB,MAAe;QAEf,MAAM,MAAM,GAAG,cAAc,CAC5B;YACC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YACnC,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB,EAAE;SACpF,EACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAC5B,KAAK,CAAC,gBAAgB,CACtB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU;YAC/B,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,QAAQ,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;YACrE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAClB,MAAM,MAAM,GAA6B;YACxC,GAAG,KAAK,CAAC,MAAM;YACf,MAAM;YACN,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1D,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC;QACF,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzD,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,OAAO,CAAC,MAAgC;QAC/C,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,0CAA0C,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAEO,MAAM,CAAC,MAAgC,EAAE,UAAmB;QACnE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAClC,CAAC;IAEO,yBAAyB;QAChC,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC/D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACnC,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC/B,6FAA6F;QAC7F,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACjE,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;oBACvC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC;iBACjE,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClG,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBACpD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAClB,wDAAwD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,EACzF,KAAK,CACL,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAEO,aAAa;QACpB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;aACpD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YAC3B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;YACnC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;SACjC,CAAC,CAAC,CAAC;QACL,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;IACF,CAAC;IAEO,kBAAkB;QACzB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAC/F,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,2BAA2B,CAAC,CAAC,EAAE,CAAC;YACnG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU;gBAAE,SAAS;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3C,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACxE,KAAK,EAAE,OAAO,EAAE,CAAC;QAClB,CAAC;IACF,CAAC;IAEO,GAAG;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;IACxC,CAAC;CACD","sourcesContent":["import type {\n\tBackgroundToolCallCompletion,\n\tBackgroundToolCallContext,\n\tBackgroundToolCallHandoff,\n} from \"@caupulican/pi-agent-core\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Usage } from \"@caupulican/pi-ai\";\nimport type { ArtifactStore } from \"./context/context-artifacts.ts\";\nimport { formatArtifactNotice, packToolOutput } from \"./context/tool-output-packer.ts\";\nimport { hasOnlyKeys, isPlainRecord } from \"./util/value-guards.ts\";\n\nexport const DEFAULT_BACKGROUND_TOOL_CALL_AFTER_MS = 15_000;\nexport const BACKGROUND_TOOL_TASK_CUSTOM_TYPE = \"background_tool_task\";\n\nconst MAX_RETAINED_TERMINAL_TASKS = 64;\nconst MAX_INLINE_OUTPUT_BYTES = 32 * 1024;\nconst MAX_INLINE_OUTPUT_LINES = 400;\nconst MAX_SUMMARY_CHARS = 200;\nconst MAX_TERMINAL_HANDOFF_RECORDS = 8;\nconst TASK_ID_PATTERN = /^tool-task-([1-9]\\d*)$/;\nconst RECORD_KEYS = [\n\t\"sessionId\",\n\t\"taskId\",\n\t\"toolCallId\",\n\t\"toolName\",\n\t\"status\",\n\t\"startedAt\",\n\t\"completedAt\",\n\t\"elapsedBeforeHandoffMs\",\n\t\"summary\",\n\t\"output\",\n\t\"artifactId\",\n\t\"usage\",\n\t\"cancellationRequested\",\n] as const;\n\nexport type BackgroundToolTaskStatus = \"running\" | \"completed\" | \"failed\" | \"canceled\";\n\nexport interface BackgroundToolTaskRecord {\n\tsessionId: string;\n\ttaskId: string;\n\ttoolCallId: string;\n\ttoolName: string;\n\tstatus: BackgroundToolTaskStatus;\n\tstartedAt: string;\n\tcompletedAt?: string;\n\telapsedBeforeHandoffMs: number;\n\tsummary: string;\n\toutput: string;\n\tartifactId?: string;\n\tusage?: Usage;\n\tcancellationRequested?: boolean;\n}\n\nexport interface BackgroundToolTaskLiveView {\n\ttaskId: string;\n\ttoolCallId: string;\n\ttoolName: string;\n\tdescription: string;\n}\n\nexport interface BackgroundToolTerminalMessage {\n\tcustomType: \"background-tool-completion\";\n\tcontent: string;\n\tdisplay: true;\n\tdetails: {\n\t\trecords: Array<{\n\t\t\ttaskId: string;\n\t\t\tstatus: BackgroundToolTaskStatus;\n\t\t\ttoolName: string;\n\t\t\tartifactId?: string;\n\t\t}>;\n\t};\n}\n\nexport interface BackgroundToolTaskControllerDeps {\n\tgetSessionId(): string;\n\tgetArtifactStore(): ArtifactStore | undefined;\n\t/** Durable task records on the active branch, newest first, without rebuilding full model context. */\n\tloadPersistedRecordsNewestFirst?(): readonly unknown[];\n\tpersist(record: BackgroundToolTaskRecord): void;\n\tnotifyTerminal(records: readonly BackgroundToolTaskRecord[], options: { wakeParent: boolean }): Promise<void> | void;\n\tonLiveTasksChanged?(tasks: readonly BackgroundToolTaskLiveView[]): void;\n\trecordUsage?(taskId: string, usage: Usage): void;\n\tonError?(message: string, error: unknown): void;\n\tnow?(): Date;\n}\n\ninterface BackgroundToolTaskState {\n\trecord: BackgroundToolTaskRecord;\n\tcancel: () => void;\n\tcancellationRequested: boolean;\n\twaitingConsumers: number;\n\tterminal: Promise<BackgroundToolTaskRecord>;\n\tresolveTerminal: (record: BackgroundToolTaskRecord) => void;\n\tartifactHolderId: string;\n}\n\n/** Read only task records on the active branch without allocating or hydrating the full branch context. */\nexport function loadBackgroundToolTaskRecordsNewestFirst(\n\tsessionManager: Pick<SessionManager, \"getLatestCustomEntryOnBranch\">,\n): unknown[] {\n\tconst records: unknown[] = [];\n\tlet fromId: string | undefined;\n\tfor (;;) {\n\t\tconst entry = sessionManager.getLatestCustomEntryOnBranch(BACKGROUND_TOOL_TASK_CUSTOM_TYPE, fromId);\n\t\tif (!entry) return records;\n\t\trecords.push(entry.data);\n\t\tif (entry.parentId === null) return records;\n\t\tfromId = entry.parentId;\n\t}\n}\n\nexport function createBackgroundToolTerminalMessage(\n\trecords: readonly BackgroundToolTaskRecord[],\n): BackgroundToolTerminalMessage {\n\tif (records.length === 0) throw new TypeError(\"Background tool terminal handoff requires at least one record\");\n\tconst included = records.slice(0, MAX_TERMINAL_HANDOFF_RECORDS);\n\tconst omitted = records.length - included.length;\n\treturn {\n\t\tcustomType: \"background-tool-completion\",\n\t\tcontent: [\n\t\t\t\"Background tool terminal handoff:\",\n\t\t\t...included.map((record) => `- ${record.taskId}: ${record.status} (tool=${record.toolName})`),\n\t\t\t...(omitted > 0 ? [`- ${omitted} additional terminal tool task(s) omitted from this bounded handoff.`] : []),\n\t\t\t\"This terminal event woke the owning session. Retrieve the result once with tool_task action=wait if it is needed; never poll.\",\n\t\t].join(\"\\n\"),\n\t\tdisplay: true,\n\t\tdetails: {\n\t\t\trecords: included.map((record) => ({\n\t\t\t\ttaskId: record.taskId,\n\t\t\t\tstatus: record.status,\n\t\t\t\ttoolName: record.toolName,\n\t\t\t\t...(record.artifactId ? { artifactId: record.artifactId } : {}),\n\t\t\t})),\n\t\t},\n\t};\n}\n\nfunction renderCompletionOutput(completion: BackgroundToolCallCompletion): string {\n\tconst blocks = completion.result.content.map((block) =>\n\t\tblock.type === \"text\" ? block.text : \"[Image output retained outside the foreground transcript]\",\n\t);\n\treturn blocks.join(\"\\n\") || \"Tool completed without text output.\";\n}\n\nfunction oneLine(value: string): string {\n\treturn value\n\t\t.replace(/[\\r\\n]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nfunction summaryFor(status: BackgroundToolTaskStatus, toolName: string, output: string): string {\n\tconst prefix = `${toolName} ${status}`;\n\tconst firstLine = oneLine(output);\n\tif (!firstLine) return prefix;\n\tconst remaining = Math.max(0, MAX_SUMMARY_CHARS - prefix.length - 2);\n\treturn `${prefix}: ${firstLine.slice(0, remaining)}`;\n}\n\nfunction taskNumber(taskId: string): number | undefined {\n\tconst match = TASK_ID_PATTERN.exec(taskId);\n\tif (!match) return undefined;\n\tconst value = Number(match[1]);\n\treturn Number.isSafeInteger(value) && value > 0 ? value : undefined;\n}\n\nfunction cloneUsage(value: unknown): Usage | undefined {\n\tif (!isPlainRecord(value)) return undefined;\n\tconst cost = value.cost;\n\tif (!isPlainRecord(cost)) return undefined;\n\tconst fields = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"totalTokens\"] as const;\n\tconst costFields = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"total\"] as const;\n\tif (\n\t\tfields.some((field) => typeof value[field] !== \"number\" || !Number.isFinite(value[field])) ||\n\t\tcostFields.some((field) => typeof cost[field] !== \"number\" || !Number.isFinite(cost[field]))\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tinput: value.input as number,\n\t\toutput: value.output as number,\n\t\tcacheRead: value.cacheRead as number,\n\t\tcacheWrite: value.cacheWrite as number,\n\t\ttotalTokens: value.totalTokens as number,\n\t\tcost: {\n\t\t\tinput: cost.input as number,\n\t\t\toutput: cost.output as number,\n\t\t\tcacheRead: cost.cacheRead as number,\n\t\t\tcacheWrite: cost.cacheWrite as number,\n\t\t\ttotal: cost.total as number,\n\t\t},\n\t};\n}\n\nfunction decodeRecord(value: unknown, sessionId: string): BackgroundToolTaskRecord | undefined {\n\tif (!isPlainRecord(value) || !hasOnlyKeys(value, RECORD_KEYS)) return undefined;\n\tif (\n\t\tvalue.sessionId !== sessionId ||\n\t\ttypeof value.taskId !== \"string\" ||\n\t\ttaskNumber(value.taskId) === undefined ||\n\t\ttypeof value.toolCallId !== \"string\" ||\n\t\tvalue.toolCallId.length === 0 ||\n\t\ttypeof value.toolName !== \"string\" ||\n\t\tvalue.toolName.length === 0 ||\n\t\t(value.status !== \"running\" &&\n\t\t\tvalue.status !== \"completed\" &&\n\t\t\tvalue.status !== \"failed\" &&\n\t\t\tvalue.status !== \"canceled\") ||\n\t\ttypeof value.startedAt !== \"string\" ||\n\t\t!Number.isFinite(Date.parse(value.startedAt)) ||\n\t\t(value.completedAt !== undefined &&\n\t\t\t(typeof value.completedAt !== \"string\" || !Number.isFinite(Date.parse(value.completedAt)))) ||\n\t\t(value.status !== \"running\" && value.completedAt === undefined) ||\n\t\ttypeof value.elapsedBeforeHandoffMs !== \"number\" ||\n\t\t!Number.isFinite(value.elapsedBeforeHandoffMs) ||\n\t\tvalue.elapsedBeforeHandoffMs < 0 ||\n\t\ttypeof value.summary !== \"string\" ||\n\t\ttypeof value.output !== \"string\" ||\n\t\t(value.artifactId !== undefined &&\n\t\t\t(typeof value.artifactId !== \"string\" || !/^[0-9a-f]{1,64}$/.test(value.artifactId))) ||\n\t\t(value.cancellationRequested !== undefined && typeof value.cancellationRequested !== \"boolean\")\n\t) {\n\t\treturn undefined;\n\t}\n\tconst usage = value.usage === undefined ? undefined : cloneUsage(value.usage);\n\tif (value.usage !== undefined && !usage) return undefined;\n\treturn {\n\t\tsessionId,\n\t\ttaskId: value.taskId,\n\t\ttoolCallId: value.toolCallId,\n\t\ttoolName: value.toolName,\n\t\tstatus: value.status,\n\t\tstartedAt: value.startedAt,\n\t\t...(value.completedAt ? { completedAt: value.completedAt } : {}),\n\t\telapsedBeforeHandoffMs: value.elapsedBeforeHandoffMs,\n\t\tsummary: value.summary,\n\t\toutput: value.output,\n\t\t...(value.artifactId ? { artifactId: value.artifactId } : {}),\n\t\t...(usage ? { usage } : {}),\n\t\t...(value.cancellationRequested !== undefined ? { cancellationRequested: value.cancellationRequested } : {}),\n\t};\n}\n\n/**\n * Session-owned registry for foreground tool calls transferred into background execution.\n * It emits edge records for durability and a replace-style live-task signal for UI consumers.\n */\nexport class BackgroundToolTaskController {\n\tprivate readonly deps: BackgroundToolTaskControllerDeps;\n\tprivate readonly tasks = new Map<string, BackgroundToolTaskState>();\n\tprivate readonly handoffRequests = new Map<string, Set<() => void>>();\n\tprivate readonly queuedNotifications: Array<{ record: BackgroundToolTaskRecord; wakeParent: boolean }> = [];\n\tprivate notificationDrain: Promise<void> | undefined;\n\tprivate nextTaskId = 1;\n\tprivate disposed = false;\n\n\tconstructor(deps: BackgroundToolTaskControllerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.restorePersistedTasks();\n\t}\n\n\thandoff(context: BackgroundToolCallContext): BackgroundToolCallHandoff | undefined {\n\t\tif (this.disposed || context.toolCall.name === \"tool_task\") return undefined;\n\t\tconst sessionId = this.deps.getSessionId();\n\t\tconst taskId = `tool-task-${this.nextTaskId++}`;\n\t\tconst startedAt = this.now().toISOString();\n\t\tconst record: BackgroundToolTaskRecord = {\n\t\t\tsessionId,\n\t\t\ttaskId,\n\t\t\ttoolCallId: context.toolCall.id,\n\t\t\ttoolName: context.toolCall.name,\n\t\t\tstatus: \"running\",\n\t\t\tstartedAt,\n\t\t\telapsedBeforeHandoffMs: context.elapsedMs,\n\t\t\tsummary: `${context.toolCall.name} running in the background`,\n\t\t\toutput: \"\",\n\t\t};\n\t\tconst state = this.createState(record, context.cancel);\n\t\tthis.tasks.set(taskId, state);\n\t\tif (!this.persist(record)) {\n\t\t\tthis.tasks.delete(taskId);\n\t\t\treturn undefined;\n\t\t}\n\t\tthis.emitLiveTasks();\n\t\tcontext.completion.then(\n\t\t\t(completion) => this.settle(state, completion),\n\t\t\t(error) => this.settleRejected(state, error),\n\t\t);\n\n\t\treturn {\n\t\t\tresult: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t`Tool ${context.toolCall.name} exceeded ${Math.max(1, Math.round(context.elapsedMs / 1000))}s and continues as session task ${taskId}.`,\n\t\t\t\t\t\t\t\"Continue independent work. If its result is a dependency, call tool_task once with action=wait and this taskId; the wait is event-driven. Never poll.\",\n\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: { sessionId, taskId, status: \"running\" as const },\n\t\t\t},\n\t\t};\n\t}\n\n\tlist(): BackgroundToolTaskRecord[] {\n\t\treturn [...this.tasks.values()].map((state) => ({ ...state.record }));\n\t}\n\n\twait(taskId: string, signal?: AbortSignal): Promise<BackgroundToolTaskRecord> {\n\t\tconst state = this.tasks.get(taskId);\n\t\tif (!state) return Promise.reject(new Error(`Unknown background tool task: ${taskId}`));\n\t\tif (state.record.status !== \"running\") return Promise.resolve({ ...state.record });\n\t\tstate.waitingConsumers++;\n\t\tlet waiting = true;\n\t\tconst releaseWaiter = (): void => {\n\t\t\tif (!waiting) return;\n\t\t\twaiting = false;\n\t\t\tstate.waitingConsumers--;\n\t\t};\n\t\tif (!signal) {\n\t\t\treturn state.terminal.then((record) => {\n\t\t\t\treleaseWaiter();\n\t\t\t\treturn { ...record };\n\t\t\t});\n\t\t}\n\t\tif (signal.aborted) {\n\t\t\treleaseWaiter();\n\t\t\treturn Promise.reject(signal.reason ?? new Error(\"Operation aborted\"));\n\t\t}\n\t\treturn new Promise<BackgroundToolTaskRecord>((resolve, reject) => {\n\t\t\tconst onAbort = (): void => {\n\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\treleaseWaiter();\n\t\t\t\treject(signal.reason ?? new Error(\"Operation aborted\"));\n\t\t\t};\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tstate.terminal.then((record) => {\n\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\treleaseWaiter();\n\t\t\t\tresolve({ ...record });\n\t\t\t});\n\t\t});\n\t}\n\n\tcancel(taskId: string): boolean {\n\t\tconst state = this.tasks.get(taskId);\n\t\tif (!state || state.record.status !== \"running\") return false;\n\t\tstate.cancellationRequested = true;\n\t\tstate.record = { ...state.record, cancellationRequested: true };\n\t\ttry {\n\t\t\tstate.cancel();\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(`Failed to cancel background tool task ${taskId}`, error);\n\t\t}\n\t\treturn true;\n\t}\n\n\tsubscribeHandoffRequest(toolCallId: string, request: () => void): () => void {\n\t\tif (this.disposed) return () => {};\n\t\tconst requests = this.handoffRequests.get(toolCallId) ?? new Set<() => void>();\n\t\trequests.add(request);\n\t\tthis.handoffRequests.set(toolCallId, requests);\n\t\treturn () => {\n\t\t\trequests.delete(request);\n\t\t\tif (requests.size === 0) this.handoffRequests.delete(toolCallId);\n\t\t};\n\t}\n\n\trequestHandoff(toolCallId?: string): number {\n\t\tif (this.disposed) return 0;\n\t\tconst requested = toolCallId\n\t\t\t? [...(this.handoffRequests.get(toolCallId) ?? [])]\n\t\t\t: [...this.handoffRequests.values()].flatMap((requests) => [...requests]);\n\t\tfor (const request of requested) request();\n\t\treturn requested.length;\n\t}\n\n\tasync waitForNotifications(): Promise<void> {\n\t\t// A just-resolved tool completion settles through its promise continuation before it can enqueue\n\t\t// the notification drain. Yield once so this event-driven barrier observes that enqueue.\n\t\tawait Promise.resolve();\n\t\tfor (;;) {\n\t\t\tconst drain = this.notificationDrain;\n\t\t\tif (!drain) return;\n\t\t\tawait drain;\n\t\t\tif (!this.notificationDrain && this.queuedNotifications.length === 0) return;\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tif (!this.disposed) {\n\t\t\tthis.disposed = true;\n\t\t\tthis.handoffRequests.clear();\n\t\t\tfor (const state of this.tasks.values()) {\n\t\t\t\tif (state.record.status !== \"running\") continue;\n\t\t\t\tstate.cancellationRequested = true;\n\t\t\t\ttry {\n\t\t\t\t\tstate.cancel();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.deps.onError?.(`Failed to cancel background tool task ${state.record.taskId}`, error);\n\t\t\t\t}\n\t\t\t\tthis.finishState(\n\t\t\t\t\tstate,\n\t\t\t\t\t\"canceled\",\n\t\t\t\t\t\"Session ended before the background tool completed.\",\n\t\t\t\t\tundefined,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tawait this.waitForNotifications();\n\t}\n\n\tprivate settle(state: BackgroundToolTaskState, completion: BackgroundToolCallCompletion): void {\n\t\tif (state.record.status !== \"running\") return;\n\t\tconst status = state.cancellationRequested ? \"canceled\" : completion.isError ? \"failed\" : \"completed\";\n\t\tconst output = renderCompletionOutput(completion);\n\t\tthis.finishState(state, status, output, completion.result.usage, true);\n\t}\n\n\tprivate settleRejected(state: BackgroundToolTaskState, error: unknown): void {\n\t\tif (state.record.status !== \"running\") return;\n\t\tconst status = state.cancellationRequested ? \"canceled\" : \"failed\";\n\t\tconst output = error instanceof Error ? error.message : String(error);\n\t\tthis.finishState(state, status, output, undefined, true);\n\t}\n\n\tprivate restorePersistedTasks(): void {\n\t\tconst load = this.deps.loadPersistedRecordsNewestFirst;\n\t\tif (!load) return;\n\t\tlet values: readonly unknown[];\n\t\ttry {\n\t\t\tvalues = load();\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(\"Failed to load persisted background tool tasks\", error);\n\t\t\treturn;\n\t\t}\n\t\tconst sessionId = this.deps.getSessionId();\n\t\tconst seenTaskIds = new Set<string>();\n\t\tconst latestRecords: BackgroundToolTaskRecord[] = [];\n\t\tlet highestTaskNumber = 0;\n\t\tfor (const value of values) {\n\t\t\tif (!isPlainRecord(value) || value.sessionId !== sessionId || typeof value.taskId !== \"string\") continue;\n\t\t\tconst numericTaskId = taskNumber(value.taskId);\n\t\t\tif (numericTaskId === undefined) continue;\n\t\t\thighestTaskNumber = Math.max(highestTaskNumber, numericTaskId);\n\t\t\tif (seenTaskIds.has(value.taskId)) continue;\n\t\t\tseenTaskIds.add(value.taskId);\n\t\t\tconst record = decodeRecord(value, sessionId);\n\t\t\tif (record) latestRecords.push(record);\n\t\t}\n\t\tthis.nextTaskId = highestTaskNumber + 1;\n\t\tlatestRecords.sort((left, right) => taskNumber(left.taskId)! - taskNumber(right.taskId)!);\n\t\tfor (const record of latestRecords) {\n\t\t\tconst state = this.createState(record, () => {});\n\t\t\tthis.tasks.set(record.taskId, state);\n\t\t\tif (record.status !== \"running\") {\n\t\t\t\tstate.resolveTerminal(record);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.finishState(\n\t\t\t\tstate,\n\t\t\t\t\"failed\",\n\t\t\t\t\"The session resumed after the owning process ended; the original tool completion is unavailable.\",\n\t\t\t\tundefined,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t\tthis.pruneTerminalTasks();\n\t\tthis.emitLiveTasks();\n\t}\n\n\tprivate createState(record: BackgroundToolTaskRecord, cancel: () => void): BackgroundToolTaskState {\n\t\tlet resolveTerminal: ((terminalRecord: BackgroundToolTaskRecord) => void) | undefined;\n\t\tconst terminal = new Promise<BackgroundToolTaskRecord>((resolve) => {\n\t\t\tresolveTerminal = resolve;\n\t\t});\n\t\treturn {\n\t\t\trecord: { ...record },\n\t\t\tcancel,\n\t\t\tcancellationRequested: record.cancellationRequested ?? false,\n\t\t\twaitingConsumers: 0,\n\t\t\tterminal,\n\t\t\tresolveTerminal: resolveTerminal!,\n\t\t\tartifactHolderId: `background-tool-task:${record.sessionId}:${record.taskId}`,\n\t\t};\n\t}\n\n\tprivate finishState(\n\t\tstate: BackgroundToolTaskState,\n\t\tstatus: Exclude<BackgroundToolTaskStatus, \"running\">,\n\t\trawOutput: string,\n\t\tusage: Usage | undefined,\n\t\tnotify: boolean,\n\t): void {\n\t\tconst packed = packToolOutput(\n\t\t\t{\n\t\t\t\ttoolName: state.record.toolName,\n\t\t\t\trawContent: rawOutput,\n\t\t\t\tsessionEntryId: state.record.taskId,\n\t\t\t\tcreatedAtTurn: 0,\n\t\t\t\treproducible: false,\n\t\t\t\ttruncation: { maxBytes: MAX_INLINE_OUTPUT_BYTES, maxLines: MAX_INLINE_OUTPUT_LINES },\n\t\t\t},\n\t\t\tthis.deps.getArtifactStore(),\n\t\t\tstate.artifactHolderId,\n\t\t);\n\t\tconst output = packed.artifactId\n\t\t\t? `${packed.content}\\n\\n[${formatArtifactNotice(packed.artifactId)}]`\n\t\t\t: packed.content;\n\t\tconst record: BackgroundToolTaskRecord = {\n\t\t\t...state.record,\n\t\t\tstatus,\n\t\t\tcompletedAt: this.now().toISOString(),\n\t\t\tsummary: summaryFor(status, state.record.toolName, output),\n\t\t\toutput,\n\t\t\t...(packed.artifactId ? { artifactId: packed.artifactId } : {}),\n\t\t\t...(usage ? { usage } : {}),\n\t\t\t...(state.cancellationRequested ? { cancellationRequested: true } : {}),\n\t\t};\n\t\tstate.record = record;\n\t\tthis.persist(record);\n\t\tif (usage) this.deps.recordUsage?.(record.taskId, usage);\n\t\tstate.resolveTerminal(record);\n\t\tthis.emitLiveTasks();\n\t\tthis.pruneTerminalTasks();\n\t\tif (notify) this.notify(record, state.waitingConsumers === 0);\n\t}\n\n\tprivate persist(record: BackgroundToolTaskRecord): boolean {\n\t\ttry {\n\t\t\tthis.deps.persist({ ...record });\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(`Failed to persist background tool task ${record.taskId}`, error);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate notify(record: BackgroundToolTaskRecord, wakeParent: boolean): void {\n\t\tthis.queuedNotifications.push({ record: { ...record }, wakeParent });\n\t\tthis.scheduleNotificationDrain();\n\t}\n\n\tprivate scheduleNotificationDrain(): void {\n\t\tif (this.notificationDrain) return;\n\t\tthis.notificationDrain = this.drainNotifications().finally(() => {\n\t\t\tthis.notificationDrain = undefined;\n\t\t\tif (this.queuedNotifications.length > 0) this.scheduleNotificationDrain();\n\t\t});\n\t}\n\n\tprivate async drainNotifications(): Promise<void> {\n\t\t// Allow completions released by the same event to reach this queue before forming the batch.\n\t\tawait Promise.resolve();\n\t\twhile (this.queuedNotifications.length > 0) {\n\t\t\tawait Promise.resolve();\n\t\t\tconst batch = this.queuedNotifications.splice(0);\n\t\t\tconst records = batch.map((notification) => notification.record);\n\t\t\ttry {\n\t\t\t\tawait this.deps.notifyTerminal(records, {\n\t\t\t\t\twakeParent: batch.some((notification) => notification.wakeParent),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconst includedIds = records.slice(0, MAX_TERMINAL_HANDOFF_RECORDS).map((record) => record.taskId);\n\t\t\t\tconst omitted = records.length - includedIds.length;\n\t\t\t\tconst suffix = omitted > 0 ? ` (+${omitted} more)` : \"\";\n\t\t\t\tthis.deps.onError?.(\n\t\t\t\t\t`Failed to notify terminal background tool task batch ${includedIds.join(\", \")}${suffix}`,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate emitLiveTasks(): void {\n\t\tconst tasks = [...this.tasks.values()]\n\t\t\t.filter((state) => state.record.status === \"running\")\n\t\t\t.map((state) => ({\n\t\t\t\ttaskId: state.record.taskId,\n\t\t\t\ttoolCallId: state.record.toolCallId,\n\t\t\t\ttoolName: state.record.toolName,\n\t\t\t\tdescription: state.record.summary,\n\t\t\t}));\n\t\ttry {\n\t\t\tthis.deps.onLiveTasksChanged?.(tasks);\n\t\t} catch (error) {\n\t\t\tthis.deps.onError?.(\"Failed to emit background tool task level signal\", error);\n\t\t}\n\t}\n\n\tprivate pruneTerminalTasks(): void {\n\t\tconst terminal = [...this.tasks.values()].filter((state) => state.record.status !== \"running\");\n\t\tfor (const state of terminal.slice(0, Math.max(0, terminal.length - MAX_RETAINED_TERMINAL_TASKS))) {\n\t\t\tthis.tasks.delete(state.record.taskId);\n\t\t\tif (!state.record.artifactId) continue;\n\t\t\tconst store = this.deps.getArtifactStore();\n\t\t\tstore?.removeReference(state.record.artifactId, state.artifactHolderId);\n\t\t\tstore?.cleanup();\n\t\t}\n\t}\n\n\tprivate now(): Date {\n\t\treturn this.deps.now?.() ?? new Date();\n\t}\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { Api, Model } from "@caupulican/pi-ai";
2
+ import { discoverBedrockInferenceProfiles, probeBedrockModelAccess } from "@caupulican/pi-ai/bedrock-provider";
3
+ import type { ModelRegistry } from "./model-registry.ts";
4
+ import type { BedrockScopeSettings, SettingsManager } from "./settings-manager.ts";
5
+ export declare const BEDROCK_PROVIDER_ID = "amazon-bedrock";
6
+ export declare function isUnscopedBedrockProxy(env?: NodeJS.ProcessEnv): boolean;
7
+ export interface BedrockScopeVerificationRequest {
8
+ region: string;
9
+ profile?: string;
10
+ signal?: AbortSignal;
11
+ credentialMode?: "profile" | "ambient";
12
+ }
13
+ export interface BedrockScopeVerificationDependencies {
14
+ env?: NodeJS.ProcessEnv;
15
+ discoverInferenceProfiles?: typeof discoverBedrockInferenceProfiles;
16
+ probeModelAccess?: typeof probeBedrockModelAccess;
17
+ now?: () => Date;
18
+ }
19
+ /** Choose one current model per Claude tier, preferring the region's inference-profile prefix. */
20
+ export declare function selectBedrockTierModelIds(models: readonly Model<Api>[], discoveredModelIds: readonly string[] | undefined, region: string): string[];
21
+ export declare function verifyBedrockScope(request: BedrockScopeVerificationRequest, modelRegistry: ModelRegistry, dependencies?: BedrockScopeVerificationDependencies): Promise<BedrockScopeSettings>;
22
+ export declare function getActiveBedrockScope(settingsManager: SettingsManager, env?: NodeJS.ProcessEnv): BedrockScopeSettings | undefined;
23
+ /** Bind persisted evidence to both provider visibility and the SDK's exact request environment. */
24
+ export declare function bindSavedBedrockScope(settingsManager: SettingsManager, modelRegistry: ModelRegistry, env?: NodeJS.ProcessEnv): BedrockScopeSettings | undefined;
25
+ export declare function activateVerifiedBedrockScope(settingsManager: SettingsManager, modelRegistry: ModelRegistry, scope: BedrockScopeSettings, env?: NodeJS.ProcessEnv): void;
26
+ //# sourceMappingURL=bedrock-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock-scope.d.ts","sourceRoot":"","sources":["../../src/core/bedrock-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAEN,gCAAgC,EAChC,uBAAuB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEnF,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAIpD,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEpF;AAED,MAAM,WAAW,+BAA+B;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,oCAAoC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,yBAAyB,CAAC,EAAE,OAAO,gCAAgC,CAAC;IACpE,gBAAgB,CAAC,EAAE,OAAO,uBAAuB,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CACjB;AAgDD,kGAAkG;AAClG,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,EAC7B,kBAAkB,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACjD,MAAM,EAAE,MAAM,GACZ,MAAM,EAAE,CA2BV;AAoBD,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,+BAA+B,EACxC,aAAa,EAAE,aAAa,EAC5B,YAAY,GAAE,oCAAyC,GACrD,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAmBD,wBAAgB,qBAAqB,CACpC,eAAe,EAAE,eAAe,EAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,oBAAoB,GAAG,SAAS,CAGlC;AAED,mGAAmG;AACnG,wBAAgB,qBAAqB,CACpC,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,oBAAoB,GAAG,SAAS,CAclC;AAED,wBAAgB,4BAA4B,CAC3C,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,oBAAoB,EAC3B,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,IAAI,CAMN"}
@@ -0,0 +1,178 @@
1
+ import { discoverBedrockInferenceProfiles, probeBedrockModelAccess, } from "@caupulican/pi-ai/bedrock-provider";
2
+ export const BEDROCK_PROVIDER_ID = "amazon-bedrock";
3
+ const BEDROCK_MODEL_FAMILIES = ["sonnet", "opus", "haiku", "fable"];
4
+ const MODEL_VERSION_COLLATOR = new Intl.Collator("en", { numeric: true, sensitivity: "base" });
5
+ export function isUnscopedBedrockProxy(env = process.env) {
6
+ return env.AWS_BEDROCK_SKIP_AUTH === "1" && Boolean(env.AWS_ENDPOINT_URL_BEDROCK_RUNTIME?.trim());
7
+ }
8
+ function normalizeRegion(region) {
9
+ const normalized = region.trim().toLowerCase();
10
+ if (!/^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/.test(normalized)) {
11
+ throw new Error("AWS region must be an explicit valid region name.");
12
+ }
13
+ return normalized;
14
+ }
15
+ function normalizeProfile(profile) {
16
+ if (profile === undefined)
17
+ return undefined;
18
+ const normalized = profile.trim();
19
+ if (!normalized || normalized.length > 256 || /[\u0000-\u001f\u007f]/.test(normalized)) {
20
+ throw new Error("AWS profile must be a non-empty printable name of at most 256 characters.");
21
+ }
22
+ return normalized;
23
+ }
24
+ function regionInferencePrefix(region) {
25
+ if (region.startsWith("us-gov-"))
26
+ return "us-gov";
27
+ if (region.startsWith("us-"))
28
+ return "us";
29
+ if (region.startsWith("eu-"))
30
+ return "eu";
31
+ if (region.startsWith("ap-"))
32
+ return "apac";
33
+ return "global";
34
+ }
35
+ function modelRegionPrefix(modelId) {
36
+ const marker = ".anthropic.";
37
+ const markerIndex = modelId.indexOf(marker);
38
+ if (markerIndex >= 0)
39
+ return modelId.slice(0, markerIndex);
40
+ return modelId.startsWith("anthropic.") ? undefined : "foreign";
41
+ }
42
+ function regionRank(modelId, preferredPrefix, trustDiscovery) {
43
+ const prefix = modelRegionPrefix(modelId);
44
+ if (prefix === preferredPrefix)
45
+ return 0;
46
+ if (prefix === "global")
47
+ return 1;
48
+ if (prefix === undefined)
49
+ return 2;
50
+ return trustDiscovery && prefix !== "foreign" ? 3 : undefined;
51
+ }
52
+ function isAnthropicBedrockModel(model) {
53
+ return (model.provider === BEDROCK_PROVIDER_ID && (model.id.startsWith("anthropic.") || model.id.includes(".anthropic.")));
54
+ }
55
+ /** Choose one current model per Claude tier, preferring the region's inference-profile prefix. */
56
+ export function selectBedrockTierModelIds(models, discoveredModelIds, region) {
57
+ const normalizedRegion = normalizeRegion(region);
58
+ const preferredPrefix = regionInferencePrefix(normalizedRegion);
59
+ const discovered = discoveredModelIds ? new Set(discoveredModelIds) : undefined;
60
+ const candidates = models.filter((model) => isAnthropicBedrockModel(model) && (!discovered || discovered.has(model.id)));
61
+ const selected = [];
62
+ for (const family of BEDROCK_MODEL_FAMILIES) {
63
+ const familyCandidates = candidates
64
+ .map((model) => ({
65
+ model,
66
+ rank: regionRank(model.id, preferredPrefix, discovered !== undefined),
67
+ }))
68
+ .filter((candidate) => candidate.rank !== undefined && candidate.model.id.toLowerCase().includes(`claude-${family}`))
69
+ .sort((a, b) => a.rank - b.rank ||
70
+ MODEL_VERSION_COLLATOR.compare(b.model.name, a.model.name) ||
71
+ MODEL_VERSION_COLLATOR.compare(b.model.id, a.model.id));
72
+ if (familyCandidates[0])
73
+ selected.push(familyCandidates[0].model.id);
74
+ }
75
+ return selected;
76
+ }
77
+ function connection(request) {
78
+ const region = normalizeRegion(request.region);
79
+ const profile = normalizeProfile(request.profile);
80
+ return {
81
+ region,
82
+ ...(profile ? { profile } : {}),
83
+ ...(request.signal ? { signal: request.signal } : {}),
84
+ };
85
+ }
86
+ function noVerifiedModelsError(result) {
87
+ const details = result.failures
88
+ .slice(0, 4)
89
+ .map((failure) => `${failure.modelId}: ${failure.reason}`)
90
+ .join("; ");
91
+ return new Error(`No Anthropic Bedrock model passed runtime verification${details ? ` (${details})` : ""}.`);
92
+ }
93
+ export async function verifyBedrockScope(request, modelRegistry, dependencies = {}) {
94
+ const normalized = connection(request);
95
+ const env = dependencies.env ?? process.env;
96
+ const bearerToken = request.credentialMode === "profile" ? undefined : env.AWS_BEARER_TOKEN_BEDROCK?.trim();
97
+ const models = modelRegistry.getAll();
98
+ let candidates;
99
+ let verification;
100
+ if (bearerToken) {
101
+ candidates = selectBedrockTierModelIds(models, undefined, normalized.region);
102
+ verification = "runtime";
103
+ }
104
+ else {
105
+ const discover = dependencies.discoverInferenceProfiles ?? discoverBedrockInferenceProfiles;
106
+ const discovery = await discover(normalized);
107
+ candidates = selectBedrockTierModelIds(models, discovery.inferenceProfileIds, normalized.region);
108
+ verification = "identity+control-plane+runtime";
109
+ }
110
+ if (candidates.length === 0) {
111
+ throw new Error(`No catalogued Anthropic inference profiles were discovered in ${normalized.region}.`);
112
+ }
113
+ const probe = dependencies.probeModelAccess ?? probeBedrockModelAccess;
114
+ const result = await probe({
115
+ ...normalized,
116
+ modelIds: candidates,
117
+ ...(bearerToken ? { bearerToken } : {}),
118
+ });
119
+ if (result.verifiedModelIds.length === 0)
120
+ throw noVerifiedModelsError(result);
121
+ return {
122
+ region: normalized.region,
123
+ ...(normalized.profile ? { profile: normalized.profile } : {}),
124
+ modelIds: result.verifiedModelIds,
125
+ verifiedAt: (dependencies.now ?? (() => new Date()))().toISOString(),
126
+ verification,
127
+ };
128
+ }
129
+ function scopeMatchesEnvironment(scope, env) {
130
+ const environmentRegion = env.AWS_REGION?.trim().toLowerCase();
131
+ if (environmentRegion && environmentRegion !== scope.region)
132
+ return false;
133
+ const environmentProfile = env.AWS_PROFILE?.trim();
134
+ return environmentProfile === undefined || environmentProfile === scope.profile;
135
+ }
136
+ function scopedModelIds(scope, modelRegistry) {
137
+ const modelIds = new Set(scope.modelIds);
138
+ for (const model of modelRegistry.getAll()) {
139
+ if (model.provider !== BEDROCK_PROVIDER_ID)
140
+ continue;
141
+ const applicationProfile = model.id.match(/^arn:[^:]+:bedrock:([^:]+):[^:]*:application-inference-profile\//i);
142
+ if (applicationProfile?.[1]?.toLowerCase() === scope.region)
143
+ modelIds.add(model.id);
144
+ }
145
+ return [...modelIds];
146
+ }
147
+ export function getActiveBedrockScope(settingsManager, env = process.env) {
148
+ const scope = settingsManager.getBedrockScopeSettings();
149
+ return scope && scopeMatchesEnvironment(scope, env) ? scope : undefined;
150
+ }
151
+ /** Bind persisted evidence to both provider visibility and the SDK's exact request environment. */
152
+ export function bindSavedBedrockScope(settingsManager, modelRegistry, env = process.env) {
153
+ if (isUnscopedBedrockProxy(env)) {
154
+ modelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, undefined);
155
+ return undefined;
156
+ }
157
+ const scope = getActiveBedrockScope(settingsManager, env);
158
+ if (!scope) {
159
+ modelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, []);
160
+ return undefined;
161
+ }
162
+ if (!env.AWS_REGION?.trim())
163
+ env.AWS_REGION = scope.region;
164
+ if (scope.profile && !env.AWS_PROFILE?.trim())
165
+ env.AWS_PROFILE = scope.profile;
166
+ modelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, scopedModelIds(scope, modelRegistry));
167
+ return scope;
168
+ }
169
+ export function activateVerifiedBedrockScope(settingsManager, modelRegistry, scope, env = process.env) {
170
+ settingsManager.setBedrockScopeSettings(scope);
171
+ env.AWS_REGION = scope.region;
172
+ if (scope.profile)
173
+ env.AWS_PROFILE = scope.profile;
174
+ else
175
+ delete env.AWS_PROFILE;
176
+ modelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, scopedModelIds(scope, modelRegistry));
177
+ }
178
+ //# sourceMappingURL=bedrock-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock-scope.js","sourceRoot":"","sources":["../../src/core/bedrock-scope.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@caupulican/pi-ai\";\nimport {\n\ttype BedrockModelProbeResult,\n\tdiscoverBedrockInferenceProfiles,\n\tprobeBedrockModelAccess,\n} from \"@caupulican/pi-ai/bedrock-provider\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport type { BedrockScopeSettings, SettingsManager } from \"./settings-manager.ts\";\n\nexport const BEDROCK_PROVIDER_ID = \"amazon-bedrock\";\nconst BEDROCK_MODEL_FAMILIES = [\"sonnet\", \"opus\", \"haiku\", \"fable\"] as const;\nconst MODEL_VERSION_COLLATOR = new Intl.Collator(\"en\", { numeric: true, sensitivity: \"base\" });\n\nexport function isUnscopedBedrockProxy(env: NodeJS.ProcessEnv = process.env): boolean {\n\treturn env.AWS_BEDROCK_SKIP_AUTH === \"1\" && Boolean(env.AWS_ENDPOINT_URL_BEDROCK_RUNTIME?.trim());\n}\n\nexport interface BedrockScopeVerificationRequest {\n\tregion: string;\n\tprofile?: string;\n\tsignal?: AbortSignal;\n\tcredentialMode?: \"profile\" | \"ambient\";\n}\n\nexport interface BedrockScopeVerificationDependencies {\n\tenv?: NodeJS.ProcessEnv;\n\tdiscoverInferenceProfiles?: typeof discoverBedrockInferenceProfiles;\n\tprobeModelAccess?: typeof probeBedrockModelAccess;\n\tnow?: () => Date;\n}\n\nfunction normalizeRegion(region: string): string {\n\tconst normalized = region.trim().toLowerCase();\n\tif (!/^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$/.test(normalized)) {\n\t\tthrow new Error(\"AWS region must be an explicit valid region name.\");\n\t}\n\treturn normalized;\n}\n\nfunction normalizeProfile(profile: string | undefined): string | undefined {\n\tif (profile === undefined) return undefined;\n\tconst normalized = profile.trim();\n\tif (!normalized || normalized.length > 256 || /[\\u0000-\\u001f\\u007f]/.test(normalized)) {\n\t\tthrow new Error(\"AWS profile must be a non-empty printable name of at most 256 characters.\");\n\t}\n\treturn normalized;\n}\n\nfunction regionInferencePrefix(region: string): string {\n\tif (region.startsWith(\"us-gov-\")) return \"us-gov\";\n\tif (region.startsWith(\"us-\")) return \"us\";\n\tif (region.startsWith(\"eu-\")) return \"eu\";\n\tif (region.startsWith(\"ap-\")) return \"apac\";\n\treturn \"global\";\n}\n\nfunction modelRegionPrefix(modelId: string): string | undefined {\n\tconst marker = \".anthropic.\";\n\tconst markerIndex = modelId.indexOf(marker);\n\tif (markerIndex >= 0) return modelId.slice(0, markerIndex);\n\treturn modelId.startsWith(\"anthropic.\") ? undefined : \"foreign\";\n}\n\nfunction regionRank(modelId: string, preferredPrefix: string, trustDiscovery: boolean): number | undefined {\n\tconst prefix = modelRegionPrefix(modelId);\n\tif (prefix === preferredPrefix) return 0;\n\tif (prefix === \"global\") return 1;\n\tif (prefix === undefined) return 2;\n\treturn trustDiscovery && prefix !== \"foreign\" ? 3 : undefined;\n}\n\nfunction isAnthropicBedrockModel(model: Model<Api>): boolean {\n\treturn (\n\t\tmodel.provider === BEDROCK_PROVIDER_ID && (model.id.startsWith(\"anthropic.\") || model.id.includes(\".anthropic.\"))\n\t);\n}\n\n/** Choose one current model per Claude tier, preferring the region's inference-profile prefix. */\nexport function selectBedrockTierModelIds(\n\tmodels: readonly Model<Api>[],\n\tdiscoveredModelIds: readonly string[] | undefined,\n\tregion: string,\n): string[] {\n\tconst normalizedRegion = normalizeRegion(region);\n\tconst preferredPrefix = regionInferencePrefix(normalizedRegion);\n\tconst discovered = discoveredModelIds ? new Set(discoveredModelIds) : undefined;\n\tconst candidates = models.filter(\n\t\t(model) => isAnthropicBedrockModel(model) && (!discovered || discovered.has(model.id)),\n\t);\n\tconst selected: string[] = [];\n\tfor (const family of BEDROCK_MODEL_FAMILIES) {\n\t\tconst familyCandidates = candidates\n\t\t\t.map((model) => ({\n\t\t\t\tmodel,\n\t\t\t\trank: regionRank(model.id, preferredPrefix, discovered !== undefined),\n\t\t\t}))\n\t\t\t.filter(\n\t\t\t\t(candidate): candidate is { model: Model<Api>; rank: number } =>\n\t\t\t\t\tcandidate.rank !== undefined && candidate.model.id.toLowerCase().includes(`claude-${family}`),\n\t\t\t)\n\t\t\t.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\ta.rank - b.rank ||\n\t\t\t\t\tMODEL_VERSION_COLLATOR.compare(b.model.name, a.model.name) ||\n\t\t\t\t\tMODEL_VERSION_COLLATOR.compare(b.model.id, a.model.id),\n\t\t\t);\n\t\tif (familyCandidates[0]) selected.push(familyCandidates[0].model.id);\n\t}\n\treturn selected;\n}\n\nfunction connection(request: BedrockScopeVerificationRequest): BedrockScopeVerificationRequest {\n\tconst region = normalizeRegion(request.region);\n\tconst profile = normalizeProfile(request.profile);\n\treturn {\n\t\tregion,\n\t\t...(profile ? { profile } : {}),\n\t\t...(request.signal ? { signal: request.signal } : {}),\n\t};\n}\n\nfunction noVerifiedModelsError(result: BedrockModelProbeResult): Error {\n\tconst details = result.failures\n\t\t.slice(0, 4)\n\t\t.map((failure) => `${failure.modelId}: ${failure.reason}`)\n\t\t.join(\"; \");\n\treturn new Error(`No Anthropic Bedrock model passed runtime verification${details ? ` (${details})` : \"\"}.`);\n}\n\nexport async function verifyBedrockScope(\n\trequest: BedrockScopeVerificationRequest,\n\tmodelRegistry: ModelRegistry,\n\tdependencies: BedrockScopeVerificationDependencies = {},\n): Promise<BedrockScopeSettings> {\n\tconst normalized = connection(request);\n\tconst env = dependencies.env ?? process.env;\n\tconst bearerToken = request.credentialMode === \"profile\" ? undefined : env.AWS_BEARER_TOKEN_BEDROCK?.trim();\n\tconst models = modelRegistry.getAll();\n\tlet candidates: string[];\n\tlet verification: BedrockScopeSettings[\"verification\"];\n\n\tif (bearerToken) {\n\t\tcandidates = selectBedrockTierModelIds(models, undefined, normalized.region);\n\t\tverification = \"runtime\";\n\t} else {\n\t\tconst discover = dependencies.discoverInferenceProfiles ?? discoverBedrockInferenceProfiles;\n\t\tconst discovery = await discover(normalized);\n\t\tcandidates = selectBedrockTierModelIds(models, discovery.inferenceProfileIds, normalized.region);\n\t\tverification = \"identity+control-plane+runtime\";\n\t}\n\tif (candidates.length === 0) {\n\t\tthrow new Error(`No catalogued Anthropic inference profiles were discovered in ${normalized.region}.`);\n\t}\n\n\tconst probe = dependencies.probeModelAccess ?? probeBedrockModelAccess;\n\tconst result = await probe({\n\t\t...normalized,\n\t\tmodelIds: candidates,\n\t\t...(bearerToken ? { bearerToken } : {}),\n\t});\n\tif (result.verifiedModelIds.length === 0) throw noVerifiedModelsError(result);\n\n\treturn {\n\t\tregion: normalized.region,\n\t\t...(normalized.profile ? { profile: normalized.profile } : {}),\n\t\tmodelIds: result.verifiedModelIds,\n\t\tverifiedAt: (dependencies.now ?? (() => new Date()))().toISOString(),\n\t\tverification,\n\t};\n}\n\nfunction scopeMatchesEnvironment(scope: BedrockScopeSettings, env: NodeJS.ProcessEnv): boolean {\n\tconst environmentRegion = env.AWS_REGION?.trim().toLowerCase();\n\tif (environmentRegion && environmentRegion !== scope.region) return false;\n\tconst environmentProfile = env.AWS_PROFILE?.trim();\n\treturn environmentProfile === undefined || environmentProfile === scope.profile;\n}\n\nfunction scopedModelIds(scope: BedrockScopeSettings, modelRegistry: ModelRegistry): string[] {\n\tconst modelIds = new Set(scope.modelIds);\n\tfor (const model of modelRegistry.getAll()) {\n\t\tif (model.provider !== BEDROCK_PROVIDER_ID) continue;\n\t\tconst applicationProfile = model.id.match(/^arn:[^:]+:bedrock:([^:]+):[^:]*:application-inference-profile\\//i);\n\t\tif (applicationProfile?.[1]?.toLowerCase() === scope.region) modelIds.add(model.id);\n\t}\n\treturn [...modelIds];\n}\n\nexport function getActiveBedrockScope(\n\tsettingsManager: SettingsManager,\n\tenv: NodeJS.ProcessEnv = process.env,\n): BedrockScopeSettings | undefined {\n\tconst scope = settingsManager.getBedrockScopeSettings();\n\treturn scope && scopeMatchesEnvironment(scope, env) ? scope : undefined;\n}\n\n/** Bind persisted evidence to both provider visibility and the SDK's exact request environment. */\nexport function bindSavedBedrockScope(\n\tsettingsManager: SettingsManager,\n\tmodelRegistry: ModelRegistry,\n\tenv: NodeJS.ProcessEnv = process.env,\n): BedrockScopeSettings | undefined {\n\tif (isUnscopedBedrockProxy(env)) {\n\t\tmodelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, undefined);\n\t\treturn undefined;\n\t}\n\tconst scope = getActiveBedrockScope(settingsManager, env);\n\tif (!scope) {\n\t\tmodelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, []);\n\t\treturn undefined;\n\t}\n\tif (!env.AWS_REGION?.trim()) env.AWS_REGION = scope.region;\n\tif (scope.profile && !env.AWS_PROFILE?.trim()) env.AWS_PROFILE = scope.profile;\n\tmodelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, scopedModelIds(scope, modelRegistry));\n\treturn scope;\n}\n\nexport function activateVerifiedBedrockScope(\n\tsettingsManager: SettingsManager,\n\tmodelRegistry: ModelRegistry,\n\tscope: BedrockScopeSettings,\n\tenv: NodeJS.ProcessEnv = process.env,\n): void {\n\tsettingsManager.setBedrockScopeSettings(scope);\n\tenv.AWS_REGION = scope.region;\n\tif (scope.profile) env.AWS_PROFILE = scope.profile;\n\telse delete env.AWS_PROFILE;\n\tmodelRegistry.setProviderModelScope(BEDROCK_PROVIDER_ID, scopedModelIds(scope, modelRegistry));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"worker-delegation-controller.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-delegation-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-delegation-controller.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-delegation-controller.ts"],"names":[],"mappings":"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"}
@@ -1002,6 +1002,12 @@ export class WorkerDelegationController {
1002
1002
  this.writeReservations.release(startedRecord.laneId, durableHandle.attemptId, durableHandle.fencingToken);
1003
1003
  this.inFlightLedgers.delete(startedRecord.laneId);
1004
1004
  this.laneAbortControllers.delete(startedRecord.laneId);
1005
+ try {
1006
+ await toolSurface.dispose();
1007
+ }
1008
+ catch (error) {
1009
+ this.safeWarn(`Worker mutation payload cleanup failed: ${error instanceof Error ? error.message : String(error)}`);
1010
+ }
1005
1011
  this.agentControl.signalStateChanged();
1006
1012
  deregisterInFlight();
1007
1013
  }