@caupulican/pi-adaptative 0.90.2 → 0.90.5

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 (174) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/core/agent-session-contracts.d.ts +2 -0
  3. package/dist/core/agent-session-contracts.d.ts.map +1 -1
  4. package/dist/core/agent-session-contracts.js.map +1 -1
  5. package/dist/core/autonomy/bounded-completion.d.ts +10 -1
  6. package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
  7. package/dist/core/autonomy/bounded-completion.js +24 -2
  8. package/dist/core/autonomy/bounded-completion.js.map +1 -1
  9. package/dist/core/autonomy/lane-tracker.d.ts +6 -1
  10. package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
  11. package/dist/core/autonomy/lane-tracker.js +17 -1
  12. package/dist/core/autonomy/lane-tracker.js.map +1 -1
  13. package/dist/core/background-lane-controller.d.ts +1 -3
  14. package/dist/core/background-lane-controller.d.ts.map +1 -1
  15. package/dist/core/background-lane-controller.js.map +1 -1
  16. package/dist/core/compaction-controller.d.ts.map +1 -1
  17. package/dist/core/compaction-controller.js +0 -1
  18. package/dist/core/compaction-controller.js.map +1 -1
  19. package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -1
  20. package/dist/core/delegation/managed-lane-controller.js +5 -1
  21. package/dist/core/delegation/managed-lane-controller.js.map +1 -1
  22. package/dist/core/delegation/worker-agent-control-coordinator.d.ts +8 -1
  23. package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
  24. package/dist/core/delegation/worker-agent-control-coordinator.js +94 -36
  25. package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
  26. package/dist/core/delegation/worker-agent-control.d.ts +1 -0
  27. package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
  28. package/dist/core/delegation/worker-agent-control.js.map +1 -1
  29. package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
  30. package/dist/core/delegation/worker-attempt-executor.js +7 -2
  31. package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
  32. package/dist/core/delegation/worker-authority-resolver.d.ts +2 -0
  33. package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
  34. package/dist/core/delegation/worker-authority-resolver.js +49 -6
  35. package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
  36. package/dist/core/delegation/worker-delegation-controller.d.ts +8 -5
  37. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  38. package/dist/core/delegation/worker-delegation-controller.js +158 -40
  39. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  40. package/dist/core/delegation/worker-fleet-limits.d.ts +9 -2
  41. package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
  42. package/dist/core/delegation/worker-fleet-limits.js +39 -3
  43. package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
  44. package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
  45. package/dist/core/delegation/worker-lane-projection.js +10 -0
  46. package/dist/core/delegation/worker-lane-projection.js.map +1 -1
  47. package/dist/core/delegation/worker-lease-heartbeat.d.ts +16 -0
  48. package/dist/core/delegation/worker-lease-heartbeat.d.ts.map +1 -0
  49. package/dist/core/delegation/worker-lease-heartbeat.js +37 -0
  50. package/dist/core/delegation/worker-lease-heartbeat.js.map +1 -0
  51. package/dist/core/delegation/worker-lifecycle.d.ts +1 -0
  52. package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
  53. package/dist/core/delegation/worker-lifecycle.js +6 -0
  54. package/dist/core/delegation/worker-lifecycle.js.map +1 -1
  55. package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
  56. package/dist/core/delegation/worker-notification-coordinator.js +2 -1
  57. package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
  58. package/dist/core/delegation/worker-profile-resolver.d.ts +28 -1
  59. package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -1
  60. package/dist/core/delegation/worker-profile-resolver.js +38 -9
  61. package/dist/core/delegation/worker-profile-resolver.js.map +1 -1
  62. package/dist/core/delegation/worker-runner.js +2 -2
  63. package/dist/core/delegation/worker-runner.js.map +1 -1
  64. package/dist/core/delegation/worker-terminal-handoff-coordinator.d.ts +1 -0
  65. package/dist/core/delegation/worker-terminal-handoff-coordinator.d.ts.map +1 -1
  66. package/dist/core/delegation/worker-terminal-handoff-coordinator.js +1 -0
  67. package/dist/core/delegation/worker-terminal-handoff-coordinator.js.map +1 -1
  68. package/dist/core/delegation/worker-tree-budget-coordinator.d.ts +4 -2
  69. package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -1
  70. package/dist/core/delegation/worker-tree-budget-coordinator.js +10 -2
  71. package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -1
  72. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +14 -0
  73. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
  74. package/dist/core/delegation/worker-write-reservation-coordinator.js +121 -33
  75. package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
  76. package/dist/core/foreground-terminal-handoff-controller.d.ts +5 -0
  77. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
  78. package/dist/core/foreground-terminal-handoff-controller.js +28 -12
  79. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
  80. package/dist/core/orchestration/capability-gateway.d.ts +2 -1
  81. package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
  82. package/dist/core/orchestration/capability-gateway.js +9 -2
  83. package/dist/core/orchestration/capability-gateway.js.map +1 -1
  84. package/dist/core/orchestration/contracts.d.ts +16 -1
  85. package/dist/core/orchestration/contracts.d.ts.map +1 -1
  86. package/dist/core/orchestration/contracts.js +5 -0
  87. package/dist/core/orchestration/contracts.js.map +1 -1
  88. package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
  89. package/dist/core/orchestration/profile-registry.js +38 -1
  90. package/dist/core/orchestration/profile-registry.js.map +1 -1
  91. package/dist/core/orchestration/risk-budget.d.ts +10 -0
  92. package/dist/core/orchestration/risk-budget.d.ts.map +1 -1
  93. package/dist/core/orchestration/risk-budget.js +14 -0
  94. package/dist/core/orchestration/risk-budget.js.map +1 -1
  95. package/dist/core/orchestration/task-runtime-reducer.d.ts +1 -0
  96. package/dist/core/orchestration/task-runtime-reducer.d.ts.map +1 -1
  97. package/dist/core/orchestration/task-runtime-reducer.js +34 -0
  98. package/dist/core/orchestration/task-runtime-reducer.js.map +1 -1
  99. package/dist/core/orchestration/task-runtime.d.ts +1 -0
  100. package/dist/core/orchestration/task-runtime.d.ts.map +1 -1
  101. package/dist/core/orchestration/task-runtime.js +24 -1
  102. package/dist/core/orchestration/task-runtime.js.map +1 -1
  103. package/dist/core/orchestration/worker-model-pins.d.ts +28 -0
  104. package/dist/core/orchestration/worker-model-pins.d.ts.map +1 -0
  105. package/dist/core/orchestration/worker-model-pins.js +141 -0
  106. package/dist/core/orchestration/worker-model-pins.js.map +1 -0
  107. package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
  108. package/dist/core/provider-prompt-contracts.js +2 -1
  109. package/dist/core/provider-prompt-contracts.js.map +1 -1
  110. package/dist/core/reflection-controller.d.ts.map +1 -1
  111. package/dist/core/reflection-controller.js +8 -1
  112. package/dist/core/reflection-controller.js.map +1 -1
  113. package/dist/core/runtime-builder.d.ts.map +1 -1
  114. package/dist/core/runtime-builder.js +1 -0
  115. package/dist/core/runtime-builder.js.map +1 -1
  116. package/dist/core/settings-manager.d.ts +6 -3
  117. package/dist/core/settings-manager.d.ts.map +1 -1
  118. package/dist/core/settings-manager.js +26 -2
  119. package/dist/core/settings-manager.js.map +1 -1
  120. package/dist/core/tools/bash.d.ts +3 -0
  121. package/dist/core/tools/bash.d.ts.map +1 -1
  122. package/dist/core/tools/bash.js +13 -2
  123. package/dist/core/tools/bash.js.map +1 -1
  124. package/dist/core/tools/delegate-status.d.ts +3 -0
  125. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  126. package/dist/core/tools/delegate-status.js +26 -1
  127. package/dist/core/tools/delegate-status.js.map +1 -1
  128. package/dist/core/tools/delegate.d.ts +15 -1
  129. package/dist/core/tools/delegate.d.ts.map +1 -1
  130. package/dist/core/tools/delegate.js +234 -68
  131. package/dist/core/tools/delegate.js.map +1 -1
  132. package/dist/core/tools/edit.d.ts.map +1 -1
  133. package/dist/core/tools/edit.js +14 -1
  134. package/dist/core/tools/edit.js.map +1 -1
  135. package/dist/core/tools/file-failure-recovery.d.ts +3 -0
  136. package/dist/core/tools/file-failure-recovery.d.ts.map +1 -1
  137. package/dist/core/tools/file-failure-recovery.js +11 -0
  138. package/dist/core/tools/file-failure-recovery.js.map +1 -1
  139. package/dist/core/tools/orchestration-panel.d.ts +1 -1
  140. package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
  141. package/dist/core/tools/orchestration-panel.js +1 -0
  142. package/dist/core/tools/orchestration-panel.js.map +1 -1
  143. package/dist/core/tools/profile-writer.d.ts.map +1 -1
  144. package/dist/core/tools/profile-writer.js +2 -8
  145. package/dist/core/tools/profile-writer.js.map +1 -1
  146. package/dist/core/tools/search-command-guard.d.ts.map +1 -1
  147. package/dist/core/tools/search-command-guard.js +10 -3
  148. package/dist/core/tools/search-command-guard.js.map +1 -1
  149. package/dist/core/tools/write.d.ts.map +1 -1
  150. package/dist/core/tools/write.js +10 -1
  151. package/dist/core/tools/write.js.map +1 -1
  152. package/dist/modes/interactive/components/activity-lane.d.ts +1 -1
  153. package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
  154. package/dist/modes/interactive/components/activity-lane.js +11 -2
  155. package/dist/modes/interactive/components/activity-lane.js.map +1 -1
  156. package/dist/modes/interactive/components/settings-selector.js +1 -1
  157. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  158. package/dist/utils/shell.d.ts +2 -0
  159. package/dist/utils/shell.d.ts.map +1 -1
  160. package/dist/utils/shell.js +3 -1
  161. package/dist/utils/shell.js.map +1 -1
  162. package/docs/harness-architecture.md +6 -3
  163. package/docs/settings.md +39 -6
  164. package/docs/tool-repair.md +1 -1
  165. package/docs/worker-profiles.md +2 -2
  166. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  167. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  168. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  169. package/examples/extensions/sandbox/package-lock.json +2 -2
  170. package/examples/extensions/sandbox/package.json +1 -1
  171. package/examples/extensions/with-deps/package-lock.json +2 -2
  172. package/examples/extensions/with-deps/package.json +1 -1
  173. package/npm-shrinkwrap.json +12 -12
  174. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"worker-notification-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-notification-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAIlF,MAAM,WAAW,2BAA2B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,SAAS,2BAA2B,EAAE,CAAC;CAC3D;AAQD,MAAM,WAAW,oCAAoC;IACpD,gBAAgB,IAAI,SAAS,UAAU,EAAE,CAAC;IAC1C,UAAU,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,SAAS,2BAA2B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oBAAoB,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/D;AAED,sGAAsG;AACtG,qBAAa,6BAA6B;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IACxE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,UAAU,CAAK;IAEvB,YAAY,OAAO,EAAE,oCAAoC,EAExD;IAED,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAavE;IAED,aAAa,IAAI,IAAI,CAEpB;IAED,OAAO,IAAI,IAAI,CAMd;IAED,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,KAAK;CA+Db"}
1
+ {"version":3,"file":"worker-notification-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-notification-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKlF,MAAM,WAAW,2BAA2B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,SAAS,2BAA2B,EAAE,CAAC;CAC3D;AAQD,MAAM,WAAW,oCAAoC;IACpD,gBAAgB,IAAI,SAAS,UAAU,EAAE,CAAC;IAC1C,UAAU,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,SAAS,2BAA2B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oBAAoB,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/D;AAED,sGAAsG;AACtG,qBAAa,6BAA6B;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IACxE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,UAAU,CAAK;IAEvB,YAAY,OAAO,EAAE,oCAAoC,EAExD;IAED,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAavE;IAED,aAAa,IAAI,IAAI,CAEpB;IAED,OAAO,IAAI,IAAI,CAMd;IAED,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,KAAK;CA+Db"}
@@ -1,4 +1,5 @@
1
1
  const HANDOFF_TIMEOUT_MS = 1_800_000;
2
+ const FAILED_TERMINAL_STATUSES = new Set(["failed", "timeout", "budget_exhausted"]);
2
3
  /** Event-driven, bounded terminal outbox. Durable worker events can be replayed into it on resume. */
3
4
  export class WorkerNotificationCoordinator {
4
5
  constructor(options) {
@@ -85,7 +86,7 @@ export class WorkerNotificationCoordinator {
85
86
  queued,
86
87
  running,
87
88
  completedSinceFlush: terminalSinceFlush.filter((record) => record.status === "succeeded").length,
88
- failedSinceFlush: terminalSinceFlush.filter((record) => record.status !== "succeeded").length,
89
+ failedSinceFlush: terminalSinceFlush.filter((record) => FAILED_TERMINAL_STATUSES.has(record.status)).length,
89
90
  terminalSinceFlush,
90
91
  };
91
92
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"worker-notification-coordinator.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-notification-coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LaneRecord, LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\n\nconst HANDOFF_TIMEOUT_MS = 1_800_000;\n\nexport interface WorkerTerminalHandoffRecord {\n\tlaneId: string;\n\tstatus: LaneTerminalStatus;\n\treasonCode?: string;\n}\n\nexport interface WorkerNotificationStatus {\n\tactive: number;\n\tqueued: number;\n\trunning: number;\n\tcompletedSinceFlush: number;\n\tfailedSinceFlush: number;\n\tterminalSinceFlush: readonly WorkerTerminalHandoffRecord[];\n}\n\ninterface PendingWorkerNotification {\n\tkey: string;\n\trecord: WorkerTerminalHandoffRecord;\n\tdurableNotificationId?: string;\n}\n\nexport interface WorkerNotificationCoordinatorOptions {\n\tgetWorkerRecords(): readonly LaneRecord[];\n\temitStatus(status: WorkerNotificationStatus): void;\n\tnotify(records: readonly WorkerTerminalHandoffRecord[]): Promise<void>;\n\twarn(message: string): void;\n\tmarkDurableDelivered(notificationIds: readonly string[]): void;\n}\n\n/** Event-driven, bounded terminal outbox. Durable worker events can be replayed into it on resume. */\nexport class WorkerNotificationCoordinator {\n\tprivate readonly options: WorkerNotificationCoordinatorOptions;\n\tprivate readonly pending = new Map<string, PendingWorkerNotification>();\n\tprivate scheduled = false;\n\tprivate disposed = false;\n\tprivate deliveryTail = Promise.resolve();\n\tprivate retryTimer: ReturnType<typeof setTimeout> | undefined;\n\tprivate retryCount = 0;\n\n\tconstructor(options: WorkerNotificationCoordinatorOptions) {\n\t\tthis.options = options;\n\t}\n\n\trecordTerminal(record: LaneRecord, durableNotificationId?: string): void {\n\t\tif (record.status === \"queued\" || record.status === \"running\") return;\n\t\tconst key = durableNotificationId ?? `transient:${record.laneId}:${record.completedAt ?? record.status}`;\n\t\tthis.pending.set(key, {\n\t\t\tkey,\n\t\t\trecord: {\n\t\t\t\tlaneId: record.laneId,\n\t\t\t\tstatus: record.status,\n\t\t\t\t...(record.reasonCode ? { reasonCode: record.reasonCode } : {}),\n\t\t\t},\n\t\t\t...(durableNotificationId ? { durableNotificationId } : {}),\n\t\t});\n\t\tthis.schedule();\n\t}\n\n\tstatusChanged(): void {\n\t\tthis.schedule();\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.scheduled = false;\n\t\tif (this.retryTimer) clearTimeout(this.retryTimer);\n\t\tthis.retryTimer = undefined;\n\t\tthis.pending.clear();\n\t}\n\n\tprivate schedule(): void {\n\t\tif (this.disposed || this.scheduled) return;\n\t\tif (this.retryTimer) clearTimeout(this.retryTimer);\n\t\tthis.retryTimer = undefined;\n\t\tthis.scheduled = true;\n\t\tqueueMicrotask(() => this.flush());\n\t}\n\n\tprivate scheduleRetry(): void {\n\t\tif (this.disposed || this.scheduled || this.retryTimer) return;\n\t\tconst delayMs = Math.min(100 * 2 ** Math.min(this.retryCount, 5), 5_000);\n\t\tthis.retryCount++;\n\t\tthis.retryTimer = setTimeout(() => {\n\t\t\tthis.retryTimer = undefined;\n\t\t\tthis.schedule();\n\t\t}, delayMs);\n\t\tif (typeof this.retryTimer === \"object\" && \"unref\" in this.retryTimer) this.retryTimer.unref();\n\t}\n\n\tprivate warnBestEffort(message: string): void {\n\t\ttry {\n\t\t\tthis.options.warn(message);\n\t\t} catch {\n\t\t\t// Diagnostics cannot consume or stop durable notification delivery.\n\t\t}\n\t}\n\n\tprivate flush(): void {\n\t\tthis.scheduled = false;\n\t\tif (this.disposed) return;\n\t\tconst batch = [...this.pending.values()];\n\t\tthis.pending.clear();\n\t\tlet workerRecords: readonly LaneRecord[] = [];\n\t\ttry {\n\t\t\tworkerRecords = this.options.getWorkerRecords();\n\t\t} catch (error) {\n\t\t\tthis.warnBestEffort(\n\t\t\t\t`Background worker status projection failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t\tconst queued = workerRecords.filter((record) => record.status === \"queued\").length;\n\t\tconst running = workerRecords.filter((record) => record.status === \"running\").length;\n\t\tconst terminalSinceFlush = batch.map((notification) => notification.record);\n\t\tconst status = {\n\t\t\tactive: queued + running,\n\t\t\tqueued,\n\t\t\trunning,\n\t\t\tcompletedSinceFlush: terminalSinceFlush.filter((record) => record.status === \"succeeded\").length,\n\t\t\tfailedSinceFlush: terminalSinceFlush.filter((record) => record.status !== \"succeeded\").length,\n\t\t\tterminalSinceFlush,\n\t\t};\n\t\ttry {\n\t\t\tthis.options.emitStatus(status);\n\t\t} catch (error) {\n\t\t\tthis.warnBestEffort(\n\t\t\t\t`Background worker status observer failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t\tif (batch.length === 0) return;\n\t\tconst delivery = this.deliveryTail.then(async () => {\n\t\t\tif (this.disposed) return;\n\t\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\t\ttry {\n\t\t\t\tawait Promise.race([\n\t\t\t\t\tthis.options.notify(terminalSinceFlush),\n\t\t\t\t\tnew Promise<never>((_resolve, reject) => {\n\t\t\t\t\t\ttimeout = setTimeout(\n\t\t\t\t\t\t\t() => reject(new Error(`worker terminal handoff timed out after ${HANDOFF_TIMEOUT_MS}ms`)),\n\t\t\t\t\t\t\tHANDOFF_TIMEOUT_MS,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (typeof timeout === \"object\" && timeout && \"unref\" in timeout) timeout.unref();\n\t\t\t\t\t}),\n\t\t\t\t]);\n\t\t\t\tthis.retryCount = 0;\n\t\t\t\tconst durableIds = batch.flatMap((notification) =>\n\t\t\t\t\tnotification.durableNotificationId ? [notification.durableNotificationId] : [],\n\t\t\t\t);\n\t\t\t\tif (durableIds.length > 0) this.options.markDurableDelivered(durableIds);\n\t\t\t} finally {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t}\n\t\t});\n\t\tthis.deliveryTail = delivery.catch((error: unknown) => {\n\t\t\tfor (const notification of batch) this.pending.set(notification.key, notification);\n\t\t\tthis.warnBestEffort(\n\t\t\t\t`Background worker handoff failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\tthis.scheduleRetry();\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"worker-notification-coordinator.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-notification-coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LaneRecord, LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\n\nconst HANDOFF_TIMEOUT_MS = 1_800_000;\nconst FAILED_TERMINAL_STATUSES: ReadonlySet<LaneTerminalStatus> = new Set([\"failed\", \"timeout\", \"budget_exhausted\"]);\n\nexport interface WorkerTerminalHandoffRecord {\n\tlaneId: string;\n\tstatus: LaneTerminalStatus;\n\treasonCode?: string;\n}\n\nexport interface WorkerNotificationStatus {\n\tactive: number;\n\tqueued: number;\n\trunning: number;\n\tcompletedSinceFlush: number;\n\tfailedSinceFlush: number;\n\tterminalSinceFlush: readonly WorkerTerminalHandoffRecord[];\n}\n\ninterface PendingWorkerNotification {\n\tkey: string;\n\trecord: WorkerTerminalHandoffRecord;\n\tdurableNotificationId?: string;\n}\n\nexport interface WorkerNotificationCoordinatorOptions {\n\tgetWorkerRecords(): readonly LaneRecord[];\n\temitStatus(status: WorkerNotificationStatus): void;\n\tnotify(records: readonly WorkerTerminalHandoffRecord[]): Promise<void>;\n\twarn(message: string): void;\n\tmarkDurableDelivered(notificationIds: readonly string[]): void;\n}\n\n/** Event-driven, bounded terminal outbox. Durable worker events can be replayed into it on resume. */\nexport class WorkerNotificationCoordinator {\n\tprivate readonly options: WorkerNotificationCoordinatorOptions;\n\tprivate readonly pending = new Map<string, PendingWorkerNotification>();\n\tprivate scheduled = false;\n\tprivate disposed = false;\n\tprivate deliveryTail = Promise.resolve();\n\tprivate retryTimer: ReturnType<typeof setTimeout> | undefined;\n\tprivate retryCount = 0;\n\n\tconstructor(options: WorkerNotificationCoordinatorOptions) {\n\t\tthis.options = options;\n\t}\n\n\trecordTerminal(record: LaneRecord, durableNotificationId?: string): void {\n\t\tif (record.status === \"queued\" || record.status === \"running\") return;\n\t\tconst key = durableNotificationId ?? `transient:${record.laneId}:${record.completedAt ?? record.status}`;\n\t\tthis.pending.set(key, {\n\t\t\tkey,\n\t\t\trecord: {\n\t\t\t\tlaneId: record.laneId,\n\t\t\t\tstatus: record.status,\n\t\t\t\t...(record.reasonCode ? { reasonCode: record.reasonCode } : {}),\n\t\t\t},\n\t\t\t...(durableNotificationId ? { durableNotificationId } : {}),\n\t\t});\n\t\tthis.schedule();\n\t}\n\n\tstatusChanged(): void {\n\t\tthis.schedule();\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.scheduled = false;\n\t\tif (this.retryTimer) clearTimeout(this.retryTimer);\n\t\tthis.retryTimer = undefined;\n\t\tthis.pending.clear();\n\t}\n\n\tprivate schedule(): void {\n\t\tif (this.disposed || this.scheduled) return;\n\t\tif (this.retryTimer) clearTimeout(this.retryTimer);\n\t\tthis.retryTimer = undefined;\n\t\tthis.scheduled = true;\n\t\tqueueMicrotask(() => this.flush());\n\t}\n\n\tprivate scheduleRetry(): void {\n\t\tif (this.disposed || this.scheduled || this.retryTimer) return;\n\t\tconst delayMs = Math.min(100 * 2 ** Math.min(this.retryCount, 5), 5_000);\n\t\tthis.retryCount++;\n\t\tthis.retryTimer = setTimeout(() => {\n\t\t\tthis.retryTimer = undefined;\n\t\t\tthis.schedule();\n\t\t}, delayMs);\n\t\tif (typeof this.retryTimer === \"object\" && \"unref\" in this.retryTimer) this.retryTimer.unref();\n\t}\n\n\tprivate warnBestEffort(message: string): void {\n\t\ttry {\n\t\t\tthis.options.warn(message);\n\t\t} catch {\n\t\t\t// Diagnostics cannot consume or stop durable notification delivery.\n\t\t}\n\t}\n\n\tprivate flush(): void {\n\t\tthis.scheduled = false;\n\t\tif (this.disposed) return;\n\t\tconst batch = [...this.pending.values()];\n\t\tthis.pending.clear();\n\t\tlet workerRecords: readonly LaneRecord[] = [];\n\t\ttry {\n\t\t\tworkerRecords = this.options.getWorkerRecords();\n\t\t} catch (error) {\n\t\t\tthis.warnBestEffort(\n\t\t\t\t`Background worker status projection failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t\tconst queued = workerRecords.filter((record) => record.status === \"queued\").length;\n\t\tconst running = workerRecords.filter((record) => record.status === \"running\").length;\n\t\tconst terminalSinceFlush = batch.map((notification) => notification.record);\n\t\tconst status = {\n\t\t\tactive: queued + running,\n\t\t\tqueued,\n\t\t\trunning,\n\t\t\tcompletedSinceFlush: terminalSinceFlush.filter((record) => record.status === \"succeeded\").length,\n\t\t\tfailedSinceFlush: terminalSinceFlush.filter((record) => FAILED_TERMINAL_STATUSES.has(record.status)).length,\n\t\t\tterminalSinceFlush,\n\t\t};\n\t\ttry {\n\t\t\tthis.options.emitStatus(status);\n\t\t} catch (error) {\n\t\t\tthis.warnBestEffort(\n\t\t\t\t`Background worker status observer failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t\tif (batch.length === 0) return;\n\t\tconst delivery = this.deliveryTail.then(async () => {\n\t\t\tif (this.disposed) return;\n\t\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\t\ttry {\n\t\t\t\tawait Promise.race([\n\t\t\t\t\tthis.options.notify(terminalSinceFlush),\n\t\t\t\t\tnew Promise<never>((_resolve, reject) => {\n\t\t\t\t\t\ttimeout = setTimeout(\n\t\t\t\t\t\t\t() => reject(new Error(`worker terminal handoff timed out after ${HANDOFF_TIMEOUT_MS}ms`)),\n\t\t\t\t\t\t\tHANDOFF_TIMEOUT_MS,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (typeof timeout === \"object\" && timeout && \"unref\" in timeout) timeout.unref();\n\t\t\t\t\t}),\n\t\t\t\t]);\n\t\t\t\tthis.retryCount = 0;\n\t\t\t\tconst durableIds = batch.flatMap((notification) =>\n\t\t\t\t\tnotification.durableNotificationId ? [notification.durableNotificationId] : [],\n\t\t\t\t);\n\t\t\t\tif (durableIds.length > 0) this.options.markDurableDelivered(durableIds);\n\t\t\t} finally {\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t}\n\t\t});\n\t\tthis.deliveryTail = delivery.catch((error: unknown) => {\n\t\t\tfor (const notification of batch) this.pending.set(notification.key, notification);\n\t\t\tthis.warnBestEffort(\n\t\t\t\t`Background worker handoff failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\tthis.scheduleRetry();\n\t\t});\n\t}\n}\n"]}
@@ -13,6 +13,12 @@ export interface ResolvedWorkerProfile {
13
13
  resourcePointers: readonly ResourcePointer[];
14
14
  soul?: string;
15
15
  }
16
+ export interface ResolvedWorkerProfilePreset {
17
+ profile: OrchestrationProfile;
18
+ /** Metadata-only pointers admitted from the profile-linked resource configuration. */
19
+ resourcePointers: readonly ResourcePointer[];
20
+ soul?: string;
21
+ }
16
22
  export interface WorkerProfileResolverOptions {
17
23
  agentDir: string;
18
24
  cwd: string;
@@ -39,6 +45,13 @@ export declare class WorkerProfileResolver {
39
45
  ok: false;
40
46
  reason: string;
41
47
  };
48
+ resolvePreset(request: WorkerDelegationRequest, defaultProfileId: string | undefined): {
49
+ ok: true;
50
+ resolved: ResolvedWorkerProfilePreset;
51
+ } | {
52
+ ok: false;
53
+ reason: string;
54
+ };
42
55
  resolveVerifier(workerProfile: OrchestrationProfile): {
43
56
  ok: true;
44
57
  resolved: ResolvedWorkerProfile;
@@ -46,6 +59,20 @@ export declare class WorkerProfileResolver {
46
59
  ok: false;
47
60
  reason: string;
48
61
  };
62
+ resolveVerifierPreset(workerProfile: OrchestrationProfile): {
63
+ ok: true;
64
+ resolved: ResolvedWorkerProfilePreset;
65
+ } | {
66
+ ok: false;
67
+ reason: string;
68
+ };
69
+ bindPreset(preset: ResolvedWorkerProfilePreset, modelPin?: OrchestrationModelBinding): {
70
+ ok: true;
71
+ resolved: ResolvedWorkerProfile;
72
+ } | {
73
+ ok: false;
74
+ reason: string;
75
+ };
49
76
  resolveContract(contract: WorkerProfileExecutionContract): {
50
77
  ok: true;
51
78
  resolved: ResolvedWorkerProfile;
@@ -53,7 +80,7 @@ export declare class WorkerProfileResolver {
53
80
  ok: false;
54
81
  reason: string;
55
82
  };
56
- private resolveProfileId;
83
+ private resolveProfilePresetId;
57
84
  private loadProfiles;
58
85
  }
59
86
  //# sourceMappingURL=worker-profile-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-profile-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-profile-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACX,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EACf,8BAA8B,EAC9B,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAiC,KAAK,mCAAmC,EAAE,MAAM,8BAA8B,CAAC;AAEvH,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,EAAE,yBAAyB,CAAC;IACxC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,sFAAsF;IACtF,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,IAAI,eAAe,CAAC;IACtC,iBAAiB,IAAI,mCAAmC,CAAC;IACzD,gBAAgB,IAAI,aAAa,CAAC;IAClC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAC7C,mBAAmB,IAAI,uBAAuB,CAAC;IAC/C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAOD,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IAEvD,YAAY,OAAO,EAAE,4BAA4B,EAEhD;IAED,OAAO,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAOzE;IAED,OAAO,CACN,OAAO,EAAE,uBAAuB,EAChC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAClC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,qBAAqB,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAgB/E;IAED,eAAe,CACd,aAAa,EAAE,oBAAoB,GACjC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,qBAAqB,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAU/E;IAED,eAAe,CACd,QAAQ,EAAE,8BAA8B,GACtC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,qBAAqB,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAmB/E;IAED,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,YAAY;CA4BpB"}
1
+ {"version":3,"file":"worker-profile-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-profile-resolver.ts"],"names":[],"mappings":"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"}
@@ -15,13 +15,17 @@ export class WorkerProfileResolver {
15
15
  }));
16
16
  }
17
17
  resolve(request, defaultProfileId) {
18
+ const preset = this.resolvePreset(request, defaultProfileId);
19
+ return preset.ok ? this.bindPreset(preset.resolved) : preset;
20
+ }
21
+ resolvePreset(request, defaultProfileId) {
18
22
  const requestedProfileId = request.profileId?.trim();
19
23
  // Profiles are routing presets, not authority cages. Any loaded preset may be selected; the
20
24
  // execution controller independently intersects its materialized plan with inherited authority.
21
25
  const profileId = requestedProfileId || defaultProfileId;
22
26
  if (!profileId)
23
27
  return { ok: false, reason: "orchestration_profile_required" };
24
- const selected = this.resolveProfileId(profileId);
28
+ const selected = this.resolveProfilePresetId(profileId);
25
29
  if (!selected.ok)
26
30
  return selected;
27
31
  const profile = selected.resolved.profile;
@@ -34,10 +38,14 @@ export class WorkerProfileResolver {
34
38
  return selected;
35
39
  }
36
40
  resolveVerifier(workerProfile) {
41
+ const preset = this.resolveVerifierPreset(workerProfile);
42
+ return preset.ok ? this.bindPreset(preset.resolved) : preset;
43
+ }
44
+ resolveVerifierPreset(workerProfile) {
37
45
  if (!workerProfile.requireIndependentVerification || !workerProfile.verificationProfileId) {
38
46
  return { ok: false, reason: "independent_verifier_not_configured" };
39
47
  }
40
- const selected = this.resolveProfileId(workerProfile.verificationProfileId);
48
+ const selected = this.resolveProfilePresetId(workerProfile.verificationProfileId);
41
49
  if (!selected.ok)
42
50
  return selected;
43
51
  if (selected.resolved.profile.role !== "verifier") {
@@ -45,6 +53,32 @@ export class WorkerProfileResolver {
45
53
  }
46
54
  return selected;
47
55
  }
56
+ bindPreset(preset, modelPin) {
57
+ const resolvedModel = modelPin
58
+ ? resolvePinnedOrchestrationModel(modelPin, this.options.getModelRegistry(), (model) => this.options.isModelExhausted(model))
59
+ : resolveConfiguredOrchestrationModel(preset.profile, this.options.getModelRegistry(), (model) => this.options.isModelExhausted(model));
60
+ if (!resolvedModel) {
61
+ return {
62
+ ok: false,
63
+ reason: modelPin ? "orchestration_model_unavailable" : "orchestration_profile_model_unavailable",
64
+ };
65
+ }
66
+ return {
67
+ ok: true,
68
+ resolved: {
69
+ model: resolvedModel.model,
70
+ modelBinding: resolvedModel.binding,
71
+ profile: modelPin
72
+ ? {
73
+ ...structuredClone(preset.profile),
74
+ modelPolicy: { mode: "fixed", candidates: [resolvedModel.binding] },
75
+ }
76
+ : structuredClone(preset.profile),
77
+ resourcePointers: structuredClone(preset.resourcePointers),
78
+ ...(preset.soul ? { soul: preset.soul } : {}),
79
+ },
80
+ };
81
+ }
48
82
  resolveContract(contract) {
49
83
  // Admission already fixed this contract. Live host controls may revoke execution, but mutable
50
84
  // profile files cannot retroactively redefine the model, resources, or authority snapshot.
@@ -62,13 +96,10 @@ export class WorkerProfileResolver {
62
96
  },
63
97
  };
64
98
  }
65
- resolveProfileId(profileId, loaded = this.loadProfiles()) {
99
+ resolveProfilePresetId(profileId, loaded = this.loadProfiles()) {
66
100
  const profile = loaded.registry.get(profileId);
67
101
  if (!profile)
68
102
  return { ok: false, reason: "orchestration_profile_not_found" };
69
- const resolvedModel = resolveConfiguredOrchestrationModel(profile, this.options.getModelRegistry(), (model) => this.options.isModelExhausted(model));
70
- if (!resolvedModel)
71
- return { ok: false, reason: "orchestration_profile_model_unavailable" };
72
103
  const linkedProfiles = profile.resourceProfileNames.map((name) => this.options.getSettingsManager().getProfileRegistry().getProfile(name));
73
104
  if (linkedProfiles.some((linked) => linked === undefined)) {
74
105
  return { ok: false, reason: "orchestration_resource_profile_not_found" };
@@ -85,9 +116,7 @@ export class WorkerProfileResolver {
85
116
  return {
86
117
  ok: true,
87
118
  resolved: {
88
- model: resolvedModel.model,
89
- modelBinding: resolvedModel.binding,
90
- profile,
119
+ profile: structuredClone(profile),
91
120
  resourcePointers,
92
121
  ...(soul ? { soul } : {}),
93
122
  },
@@ -1 +1 @@
1
- {"version":3,"file":"worker-profile-resolver.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-profile-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@caupulican/pi-ai\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type {\n\tOrchestrationModelBinding,\n\tOrchestrationProfile,\n\tResourcePointer,\n\tWorkerProfileExecutionContract,\n} from \"../orchestration/contracts.ts\";\nimport {\n\tresolveConfiguredOrchestrationModel,\n\tresolvePinnedOrchestrationModel,\n} from \"../orchestration/model-binding.ts\";\nimport { OrchestrationProfileStore } from \"../orchestration/profile-store.ts\";\nimport type { SessionTaskProfileStore } from \"../orchestration/session-task-profile-store.ts\";\nimport type { SettingsManager } from \"../settings-manager.ts\";\nimport type { WorkerDelegationRequest } from \"./worker-delegation-request.ts\";\nimport { catalogWorkerResourcePointers, type WorkerResourceCatalogResourceLoader } from \"./worker-resource-catalog.ts\";\n\nexport interface ResolvedWorkerProfile {\n\tmodel: Model<Api>;\n\tmodelBinding: OrchestrationModelBinding;\n\tprofile: OrchestrationProfile;\n\t/** Metadata-only pointers admitted from the profile-linked resource configuration. */\n\tresourcePointers: readonly ResourcePointer[];\n\tsoul?: string;\n}\n\nexport interface WorkerProfileResolverOptions {\n\tagentDir: string;\n\tcwd: string;\n\tgetSettingsManager(): SettingsManager;\n\tgetResourceLoader(): WorkerResourceCatalogResourceLoader;\n\tgetModelRegistry(): ModelRegistry;\n\tisModelExhausted(model: Model<Api>): boolean;\n\tgetTaskProfileStore(): SessionTaskProfileStore;\n\tonDiagnostic(message: string): void;\n}\n\ninterface LoadedWorkerProfiles {\n\tprofiles: OrchestrationProfile[];\n\tregistry: ReadonlyMap<string, OrchestrationProfile>;\n}\n\nexport class WorkerProfileResolver {\n\tprivate readonly options: WorkerProfileResolverOptions;\n\tprivate readonly warnedDiagnostics = new Set<string>();\n\n\tconstructor(options: WorkerProfileResolverOptions) {\n\t\tthis.options = options;\n\t}\n\n\tcatalog(): Array<{ profileId: string; role: string; description: string }> {\n\t\tconst loaded = this.loadProfiles();\n\t\treturn loaded.profiles.map((profile) => ({\n\t\t\tprofileId: profile.profileId,\n\t\t\trole: profile.role,\n\t\t\tdescription: profile.description,\n\t\t}));\n\t}\n\n\tresolve(\n\t\trequest: WorkerDelegationRequest,\n\t\tdefaultProfileId: string | undefined,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\tconst requestedProfileId = request.profileId?.trim();\n\t\t// Profiles are routing presets, not authority cages. Any loaded preset may be selected; the\n\t\t// execution controller independently intersects its materialized plan with inherited authority.\n\t\tconst profileId = requestedProfileId || defaultProfileId;\n\t\tif (!profileId) return { ok: false, reason: \"orchestration_profile_required\" };\n\t\tconst selected = this.resolveProfileId(profileId);\n\t\tif (!selected.ok) return selected;\n\t\tconst profile = selected.resolved.profile;\n\t\tif (request.verificationOfTaskId && profile.role !== \"verifier\") {\n\t\t\treturn { ok: false, reason: \"verification_profile_role_mismatch\" };\n\t\t}\n\t\tif (!request.verificationOfTaskId && profile.role === \"verifier\") {\n\t\t\treturn { ok: false, reason: \"verifier_profile_requires_runtime_dispatch\" };\n\t\t}\n\t\treturn selected;\n\t}\n\n\tresolveVerifier(\n\t\tworkerProfile: OrchestrationProfile,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\tif (!workerProfile.requireIndependentVerification || !workerProfile.verificationProfileId) {\n\t\t\treturn { ok: false, reason: \"independent_verifier_not_configured\" };\n\t\t}\n\t\tconst selected = this.resolveProfileId(workerProfile.verificationProfileId);\n\t\tif (!selected.ok) return selected;\n\t\tif (selected.resolved.profile.role !== \"verifier\") {\n\t\t\treturn { ok: false, reason: \"verification_profile_role_mismatch\" };\n\t\t}\n\t\treturn selected;\n\t}\n\n\tresolveContract(\n\t\tcontract: WorkerProfileExecutionContract,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\t// Admission already fixed this contract. Live host controls may revoke execution, but mutable\n\t\t// profile files cannot retroactively redefine the model, resources, or authority snapshot.\n\t\tconst resolvedModel = resolvePinnedOrchestrationModel(\n\t\t\tcontract.modelBinding,\n\t\t\tthis.options.getModelRegistry(),\n\t\t\t(model) => this.options.isModelExhausted(model),\n\t\t);\n\t\tif (!resolvedModel) return { ok: false, reason: \"orchestration_profile_model_unavailable\" };\n\t\treturn {\n\t\t\tok: true,\n\t\t\tresolved: {\n\t\t\t\tmodel: resolvedModel.model,\n\t\t\t\tmodelBinding: resolvedModel.binding,\n\t\t\t\tprofile: structuredClone(contract.profile),\n\t\t\t\tresourcePointers: structuredClone(contract.resourcePointers),\n\t\t\t\t...(contract.soul ? { soul: contract.soul } : {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate resolveProfileId(\n\t\tprofileId: string,\n\t\tloaded: LoadedWorkerProfiles = this.loadProfiles(),\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\tconst profile = loaded.registry.get(profileId);\n\t\tif (!profile) return { ok: false, reason: \"orchestration_profile_not_found\" };\n\t\tconst resolvedModel = resolveConfiguredOrchestrationModel(profile, this.options.getModelRegistry(), (model) =>\n\t\t\tthis.options.isModelExhausted(model),\n\t\t);\n\t\tif (!resolvedModel) return { ok: false, reason: \"orchestration_profile_model_unavailable\" };\n\t\tconst linkedProfiles = profile.resourceProfileNames.map((name) =>\n\t\t\tthis.options.getSettingsManager().getProfileRegistry().getProfile(name),\n\t\t);\n\t\tif (linkedProfiles.some((linked) => linked === undefined)) {\n\t\t\treturn { ok: false, reason: \"orchestration_resource_profile_not_found\" };\n\t\t}\n\t\tconst soul = linkedProfiles\n\t\t\t.flatMap((linked) => (linked?.soul ? [linked.soul] : []))\n\t\t\t.join(\"\\n\\n\")\n\t\t\t.trim();\n\t\tconst resourcePointers = catalogWorkerResourcePointers({\n\t\t\tcwd: this.options.cwd,\n\t\t\tresourceLoader: this.options.getResourceLoader(),\n\t\t\tresourceProfiles: linkedProfiles.filter(\n\t\t\t\t(linked): linked is NonNullable<typeof linked> => linked !== undefined,\n\t\t\t),\n\t\t});\n\t\treturn {\n\t\t\tok: true,\n\t\t\tresolved: {\n\t\t\t\tmodel: resolvedModel.model,\n\t\t\t\tmodelBinding: resolvedModel.binding,\n\t\t\t\tprofile,\n\t\t\t\tresourcePointers,\n\t\t\t\t...(soul ? { soul } : {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loadProfiles(): LoadedWorkerProfiles {\n\t\tconst loaded = new OrchestrationProfileStore({\n\t\t\tagentDir: this.options.agentDir,\n\t\t\tcwd: this.options.cwd,\n\t\t\tprojectTrusted: this.options.getSettingsManager().isProjectTrusted(),\n\t\t}).load();\n\t\tfor (const diagnostic of loaded.diagnostics) {\n\t\t\tconst key = `${diagnostic.path}\\0${diagnostic.message}`;\n\t\t\tif (this.warnedDiagnostics.has(key)) continue;\n\t\t\tthis.warnedDiagnostics.add(key);\n\t\t\tthis.options.onDiagnostic(`Orchestration profile ignored (${diagnostic.path}): ${diagnostic.message}`);\n\t\t}\n\t\tconst taskProfiles = this.options.getTaskProfileStore().load();\n\t\tfor (const diagnostic of taskProfiles.diagnostics) {\n\t\t\tconst key = `session\\0${diagnostic}`;\n\t\t\tif (this.warnedDiagnostics.has(key)) continue;\n\t\t\tthis.warnedDiagnostics.add(key);\n\t\t\tthis.options.onDiagnostic(`Session task profile ignored: ${diagnostic}`);\n\t\t}\n\t\tconst profiles = [...loaded.profiles];\n\t\tconst registry = new Map(loaded.profiles.map((profile) => [profile.profileId, profile]));\n\t\tfor (const record of taskProfiles.records) {\n\t\t\tif (registry.has(record.profile.profileId)) continue;\n\t\t\tprofiles.push(record.profile);\n\t\t\tregistry.set(record.profile.profileId, record.profile);\n\t\t}\n\t\treturn { profiles, registry };\n\t}\n}\n"]}
1
+ {"version":3,"file":"worker-profile-resolver.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-profile-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@caupulican/pi-ai\";\nimport type { ModelRegistry } from \"../model-registry.ts\";\nimport type {\n\tOrchestrationModelBinding,\n\tOrchestrationProfile,\n\tResourcePointer,\n\tWorkerProfileExecutionContract,\n} from \"../orchestration/contracts.ts\";\nimport {\n\tresolveConfiguredOrchestrationModel,\n\tresolvePinnedOrchestrationModel,\n} from \"../orchestration/model-binding.ts\";\nimport { OrchestrationProfileStore } from \"../orchestration/profile-store.ts\";\nimport type { SessionTaskProfileStore } from \"../orchestration/session-task-profile-store.ts\";\nimport type { SettingsManager } from \"../settings-manager.ts\";\nimport type { WorkerDelegationRequest } from \"./worker-delegation-request.ts\";\nimport { catalogWorkerResourcePointers, type WorkerResourceCatalogResourceLoader } from \"./worker-resource-catalog.ts\";\n\nexport interface ResolvedWorkerProfile {\n\tmodel: Model<Api>;\n\tmodelBinding: OrchestrationModelBinding;\n\tprofile: OrchestrationProfile;\n\t/** Metadata-only pointers admitted from the profile-linked resource configuration. */\n\tresourcePointers: readonly ResourcePointer[];\n\tsoul?: string;\n}\n\nexport interface ResolvedWorkerProfilePreset {\n\tprofile: OrchestrationProfile;\n\t/** Metadata-only pointers admitted from the profile-linked resource configuration. */\n\tresourcePointers: readonly ResourcePointer[];\n\tsoul?: string;\n}\n\nexport interface WorkerProfileResolverOptions {\n\tagentDir: string;\n\tcwd: string;\n\tgetSettingsManager(): SettingsManager;\n\tgetResourceLoader(): WorkerResourceCatalogResourceLoader;\n\tgetModelRegistry(): ModelRegistry;\n\tisModelExhausted(model: Model<Api>): boolean;\n\tgetTaskProfileStore(): SessionTaskProfileStore;\n\tonDiagnostic(message: string): void;\n}\n\ninterface LoadedWorkerProfiles {\n\tprofiles: OrchestrationProfile[];\n\tregistry: ReadonlyMap<string, OrchestrationProfile>;\n}\n\nexport class WorkerProfileResolver {\n\tprivate readonly options: WorkerProfileResolverOptions;\n\tprivate readonly warnedDiagnostics = new Set<string>();\n\n\tconstructor(options: WorkerProfileResolverOptions) {\n\t\tthis.options = options;\n\t}\n\n\tcatalog(): Array<{ profileId: string; role: string; description: string }> {\n\t\tconst loaded = this.loadProfiles();\n\t\treturn loaded.profiles.map((profile) => ({\n\t\t\tprofileId: profile.profileId,\n\t\t\trole: profile.role,\n\t\t\tdescription: profile.description,\n\t\t}));\n\t}\n\n\tresolve(\n\t\trequest: WorkerDelegationRequest,\n\t\tdefaultProfileId: string | undefined,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\tconst preset = this.resolvePreset(request, defaultProfileId);\n\t\treturn preset.ok ? this.bindPreset(preset.resolved) : preset;\n\t}\n\n\tresolvePreset(\n\t\trequest: WorkerDelegationRequest,\n\t\tdefaultProfileId: string | undefined,\n\t): { ok: true; resolved: ResolvedWorkerProfilePreset } | { ok: false; reason: string } {\n\t\tconst requestedProfileId = request.profileId?.trim();\n\t\t// Profiles are routing presets, not authority cages. Any loaded preset may be selected; the\n\t\t// execution controller independently intersects its materialized plan with inherited authority.\n\t\tconst profileId = requestedProfileId || defaultProfileId;\n\t\tif (!profileId) return { ok: false, reason: \"orchestration_profile_required\" };\n\t\tconst selected = this.resolveProfilePresetId(profileId);\n\t\tif (!selected.ok) return selected;\n\t\tconst profile = selected.resolved.profile;\n\t\tif (request.verificationOfTaskId && profile.role !== \"verifier\") {\n\t\t\treturn { ok: false, reason: \"verification_profile_role_mismatch\" };\n\t\t}\n\t\tif (!request.verificationOfTaskId && profile.role === \"verifier\") {\n\t\t\treturn { ok: false, reason: \"verifier_profile_requires_runtime_dispatch\" };\n\t\t}\n\t\treturn selected;\n\t}\n\n\tresolveVerifier(\n\t\tworkerProfile: OrchestrationProfile,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\tconst preset = this.resolveVerifierPreset(workerProfile);\n\t\treturn preset.ok ? this.bindPreset(preset.resolved) : preset;\n\t}\n\n\tresolveVerifierPreset(\n\t\tworkerProfile: OrchestrationProfile,\n\t): { ok: true; resolved: ResolvedWorkerProfilePreset } | { ok: false; reason: string } {\n\t\tif (!workerProfile.requireIndependentVerification || !workerProfile.verificationProfileId) {\n\t\t\treturn { ok: false, reason: \"independent_verifier_not_configured\" };\n\t\t}\n\t\tconst selected = this.resolveProfilePresetId(workerProfile.verificationProfileId);\n\t\tif (!selected.ok) return selected;\n\t\tif (selected.resolved.profile.role !== \"verifier\") {\n\t\t\treturn { ok: false, reason: \"verification_profile_role_mismatch\" };\n\t\t}\n\t\treturn selected;\n\t}\n\n\tbindPreset(\n\t\tpreset: ResolvedWorkerProfilePreset,\n\t\tmodelPin?: OrchestrationModelBinding,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\tconst resolvedModel = modelPin\n\t\t\t? resolvePinnedOrchestrationModel(modelPin, this.options.getModelRegistry(), (model) =>\n\t\t\t\t\tthis.options.isModelExhausted(model),\n\t\t\t\t)\n\t\t\t: resolveConfiguredOrchestrationModel(preset.profile, this.options.getModelRegistry(), (model) =>\n\t\t\t\t\tthis.options.isModelExhausted(model),\n\t\t\t\t);\n\t\tif (!resolvedModel) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: modelPin ? \"orchestration_model_unavailable\" : \"orchestration_profile_model_unavailable\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tok: true,\n\t\t\tresolved: {\n\t\t\t\tmodel: resolvedModel.model,\n\t\t\t\tmodelBinding: resolvedModel.binding,\n\t\t\t\tprofile: modelPin\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...structuredClone(preset.profile),\n\t\t\t\t\t\t\tmodelPolicy: { mode: \"fixed\", candidates: [resolvedModel.binding] },\n\t\t\t\t\t\t}\n\t\t\t\t\t: structuredClone(preset.profile),\n\t\t\t\tresourcePointers: structuredClone(preset.resourcePointers),\n\t\t\t\t...(preset.soul ? { soul: preset.soul } : {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tresolveContract(\n\t\tcontract: WorkerProfileExecutionContract,\n\t): { ok: true; resolved: ResolvedWorkerProfile } | { ok: false; reason: string } {\n\t\t// Admission already fixed this contract. Live host controls may revoke execution, but mutable\n\t\t// profile files cannot retroactively redefine the model, resources, or authority snapshot.\n\t\tconst resolvedModel = resolvePinnedOrchestrationModel(\n\t\t\tcontract.modelBinding,\n\t\t\tthis.options.getModelRegistry(),\n\t\t\t(model) => this.options.isModelExhausted(model),\n\t\t);\n\t\tif (!resolvedModel) return { ok: false, reason: \"orchestration_profile_model_unavailable\" };\n\t\treturn {\n\t\t\tok: true,\n\t\t\tresolved: {\n\t\t\t\tmodel: resolvedModel.model,\n\t\t\t\tmodelBinding: resolvedModel.binding,\n\t\t\t\tprofile: structuredClone(contract.profile),\n\t\t\t\tresourcePointers: structuredClone(contract.resourcePointers),\n\t\t\t\t...(contract.soul ? { soul: contract.soul } : {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate resolveProfilePresetId(\n\t\tprofileId: string,\n\t\tloaded: LoadedWorkerProfiles = this.loadProfiles(),\n\t): { ok: true; resolved: ResolvedWorkerProfilePreset } | { ok: false; reason: string } {\n\t\tconst profile = loaded.registry.get(profileId);\n\t\tif (!profile) return { ok: false, reason: \"orchestration_profile_not_found\" };\n\t\tconst linkedProfiles = profile.resourceProfileNames.map((name) =>\n\t\t\tthis.options.getSettingsManager().getProfileRegistry().getProfile(name),\n\t\t);\n\t\tif (linkedProfiles.some((linked) => linked === undefined)) {\n\t\t\treturn { ok: false, reason: \"orchestration_resource_profile_not_found\" };\n\t\t}\n\t\tconst soul = linkedProfiles\n\t\t\t.flatMap((linked) => (linked?.soul ? [linked.soul] : []))\n\t\t\t.join(\"\\n\\n\")\n\t\t\t.trim();\n\t\tconst resourcePointers = catalogWorkerResourcePointers({\n\t\t\tcwd: this.options.cwd,\n\t\t\tresourceLoader: this.options.getResourceLoader(),\n\t\t\tresourceProfiles: linkedProfiles.filter(\n\t\t\t\t(linked): linked is NonNullable<typeof linked> => linked !== undefined,\n\t\t\t),\n\t\t});\n\t\treturn {\n\t\t\tok: true,\n\t\t\tresolved: {\n\t\t\t\tprofile: structuredClone(profile),\n\t\t\t\tresourcePointers,\n\t\t\t\t...(soul ? { soul } : {}),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loadProfiles(): LoadedWorkerProfiles {\n\t\tconst loaded = new OrchestrationProfileStore({\n\t\t\tagentDir: this.options.agentDir,\n\t\t\tcwd: this.options.cwd,\n\t\t\tprojectTrusted: this.options.getSettingsManager().isProjectTrusted(),\n\t\t}).load();\n\t\tfor (const diagnostic of loaded.diagnostics) {\n\t\t\tconst key = `${diagnostic.path}\\0${diagnostic.message}`;\n\t\t\tif (this.warnedDiagnostics.has(key)) continue;\n\t\t\tthis.warnedDiagnostics.add(key);\n\t\t\tthis.options.onDiagnostic(`Orchestration profile ignored (${diagnostic.path}): ${diagnostic.message}`);\n\t\t}\n\t\tconst taskProfiles = this.options.getTaskProfileStore().load();\n\t\tfor (const diagnostic of taskProfiles.diagnostics) {\n\t\t\tconst key = `session\\0${diagnostic}`;\n\t\t\tif (this.warnedDiagnostics.has(key)) continue;\n\t\t\tthis.warnedDiagnostics.add(key);\n\t\t\tthis.options.onDiagnostic(`Session task profile ignored: ${diagnostic}`);\n\t\t}\n\t\tconst profiles = [...loaded.profiles];\n\t\tconst registry = new Map(loaded.profiles.map((profile) => [profile.profileId, profile]));\n\t\tfor (const record of taskProfiles.records) {\n\t\t\tif (registry.has(record.profile.profileId)) continue;\n\t\t\tprofiles.push(record.profile);\n\t\t\tregistry.set(record.profile.profileId, record.profile);\n\t\t}\n\t\treturn { profiles, registry };\n\t}\n}\n"]}
@@ -300,7 +300,7 @@ export async function runWorker(options) {
300
300
  summary,
301
301
  ...(blocked ? { blockers: completionBlockers } : {}),
302
302
  },
303
- laneStatus: blocked ? "failed" : "succeeded",
303
+ laneStatus: blocked ? "blocked" : "succeeded",
304
304
  reasonCode: blocked
305
305
  ? "worker_blocked"
306
306
  : completion.stopReason === "stop"
@@ -426,7 +426,7 @@ export async function runWorker(options) {
426
426
  request: options.request,
427
427
  cwd: options.cwd,
428
428
  claim,
429
- laneStatus: "failed",
429
+ laneStatus: "blocked",
430
430
  reasonCode: "worker_blocked",
431
431
  costUsd,
432
432
  });
@@ -1 +1 @@
1
- {"version":3,"file":"worker-runner.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { runBoundedCompletion } from \"../autonomy/bounded-completion.ts\";\nimport type { EvidenceRef, GateOutcome, WorkerClaim, WorkerRequest } from \"../autonomy/contracts.ts\";\nimport {\n\ttype EvidenceFindingDraft,\n\tnormalizeEvidenceFinding,\n\tprojectEvidenceFindings,\n} from \"../autonomy/evidence-finding-projection.ts\";\nimport type { LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\nimport {\n\tbuildVerifierSystemPrompt,\n\tbuildWorkerSystemPrompt,\n\tWORKER_LANE_SYSTEM_PROMPT,\n\tWORKER_OPERATOR_LANE_SYSTEM_PROMPT,\n\tWORKER_WRITE_LANE_SYSTEM_PROMPT,\n} from \"../provider-prompt-contracts.ts\";\nimport { createEvidenceBundle } from \"../research/evidence-bundle.ts\";\nimport {\n\ttype AppliedActionsReport,\n\tparseWorkerActions,\n\ttype RejectedWorkerActions,\n\ttype WorkerAction,\n} from \"./worker-actions.ts\";\nimport {\n\tcollectBoundedWorkerClaimBlockers,\n\tcollectBoundedWorkerClaimChangedFiles,\n\tMAX_WORKER_CLAIM_BLOCKER_CHARS,\n\tMAX_WORKER_CLAIM_BLOCKERS,\n\tMAX_WORKER_CLAIM_SUMMARY_CHARS,\n\tnormalizeWorkerClaimForHost,\n\tvalidateWorkerClaim,\n} from \"./worker-claim.ts\";\n\nexport {\n\tbuildVerifierSystemPrompt,\n\tbuildWorkerSystemPrompt,\n\tWORKER_LANE_SYSTEM_PROMPT,\n\tWORKER_OPERATOR_LANE_SYSTEM_PROMPT,\n\tWORKER_WRITE_LANE_SYSTEM_PROMPT,\n};\n\n/**\n * Pure execution for one bounded specialist delegation: bounded isolated completion ->\n * parse -> untrusted `WorkerClaim` -> parent validation via {@link validateWorkerClaim}.\n *\n * The injected completion may be a bounded child tool loop. Its tool surface is built and gated by\n * the host; this module keeps the structured-output contract and treats every claim as untrusted\n * until parent validation succeeds.\n */\n\nexport interface WorkerCompletion {\n\ttext: string;\n\tcostUsd: number;\n\tstopReason: string;\n\t/** Files successfully changed by the child tool loop before it produced the final JSON. */\n\tchangedFiles?: readonly string[];\n\t/** Capability refusals or execution failures observed inside the child tool loop. */\n\tblockers?: readonly string[];\n}\n\nexport interface WorkerRunnerOptions {\n\trequest: WorkerRequest;\n\t/** Budget for this delegation; undefined disables this bound, while zero permits only free work. */\n\tmaxUsd?: number;\n\t/** Wall-clock budget in milliseconds; 0 disables. */\n\tmaxWallClockMs: number;\n\t/**\n\t * Pre-allocated spawned-usage report id. Always stamped on the claim so parent validation can\n\t * enforce the cost-visibility invariant (a completed claim without a usage report is blocked).\n\t */\n\tusageReportId: string;\n\tcomplete: (args: { systemPrompt: string; userPrompt: string; signal: AbortSignal }) => Promise<WorkerCompletion>;\n\t/** Live successful child-tool mutations, including writes completed before timeout/cancellation. */\n\tgetChangedFiles?: () => readonly string[];\n\tsignal?: AbortSignal;\n\tnow?: () => string;\n\t/** Enables the WRITE lane: only honored when the request envelope grants \"filesystem.write\". The\n\t * runner applies the worker's structured actions through the envelope path scope; refusals\n\t * and failures become blockers, never silent drops. */\n\tapplyActions?: (actions: readonly WorkerAction[]) => AppliedActionsReport;\n\t/** Enables the constrained direct-argv operator role prompt. */\n\tprocessCapable?: boolean;\n\t/** Enables recursive delegation and orchestration-tree coordination guidance. */\n\tdelegationCapable?: boolean;\n\t/** Session cwd — the baseline for relative changed-file and envelope paths in parent\n\t * validation. Defaults to process.cwd(). */\n\tcwd?: string;\n\t/** Turns the child into a read-only semantic verifier for this exact durable task. */\n\tverificationSubjectTaskId?: string;\n}\n\nexport interface WorkerRunOutcome {\n\tclaim: WorkerClaim;\n\t/** Parent-review verdict from {@link validateWorkerClaim}; worker output stays untrusted. */\n\tacceptance: GateOutcome;\n\taccepted: boolean;\n\tlaneStatus: LaneTerminalStatus;\n\treasonCode: string;\n\t/** Underlying executor error for bounded failures; drives the in-process retry decision. */\n\treasonDetail?: string;\n\tcostUsd: number;\n}\n\nexport function buildWorkerUserPrompt(request: WorkerRequest): string {\n\treturn [\n\t\t\"TASK\",\n\t\trequest.instructions,\n\t\t\"END TASK\",\n\t\t'Do not replace the worker claim envelope; put requested detail inside \"summary\" and \"findings\".',\n\t].join(\"\\n\");\n}\n\nexport interface ParsedWorkerOutput {\n\tsummary: string;\n\tstatus: \"completed\" | \"blocked\";\n\tblockers: string[];\n\tfindings: EvidenceFindingDraft[];\n\tactions: WorkerAction[];\n\t/** Present when the model emitted an action list that cannot safely reach execution. */\n\tactionRejection?: RejectedWorkerActions;\n\tverdict?: \"accepted\" | \"rejected\";\n\treasonCodes: string[];\n}\n\nconst MAX_WORKER_OUTPUT_CHARS = 512 * 1024;\nconst MAX_WORKER_JSON_CANDIDATES = 64;\nconst MAX_WORKER_JSON_DEPTH = 256;\nconst MAX_WORKER_FINDINGS = 64;\nconst MAX_WORKER_FINDING_CHARS = 2_000;\nconst MAX_WORKER_REASON_CODES = 32;\nconst MAX_WORKER_REASON_CODE_CHARS = 128;\n\nfunction balancedObjectCandidates(text: string): string[] {\n\tconst ranges: Array<{ start: number; end: number }> = [];\n\tconst starts: number[] = [];\n\tlet inString = false;\n\tlet escaped = false;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tconst character = text[index];\n\t\tif (inString) {\n\t\t\tif (escaped) escaped = false;\n\t\t\telse if (character === \"\\\\\") escaped = true;\n\t\t\telse if (character === '\"') inString = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === '\"') {\n\t\t\tinString = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"{\") {\n\t\t\tif (starts.length >= MAX_WORKER_JSON_DEPTH) return ranges.map(({ start, end }) => text.slice(start, end));\n\t\t\tstarts.push(index);\n\t\t\tcontinue;\n\t\t}\n\t\tif (character !== \"}\") continue;\n\t\tconst start = starts.pop();\n\t\tif (start === undefined || ranges.length >= MAX_WORKER_JSON_CANDIDATES) continue;\n\t\tconst end = index + 1;\n\t\tif (end - start <= MAX_WORKER_OUTPUT_CHARS) ranges.push({ start, end });\n\t}\n\treturn ranges.map(({ start, end }) => text.slice(start, end));\n}\n\nfunction workerOutputRecords(text: string): Record<string, unknown>[] {\n\tconst trimmed = text.trim();\n\tif (trimmed.length === 0 || trimmed.length > MAX_WORKER_OUTPUT_CHARS) return [];\n\tconst candidates: string[] = [trimmed];\n\tconst fenced = /```(?:json)?\\s*([\\s\\S]*?)```/.exec(trimmed);\n\tif (fenced?.[1]) candidates.push(fenced[1].trim());\n\tcandidates.push(...balancedObjectCandidates(trimmed));\n\tconst records: Record<string, unknown>[] = [];\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(candidate);\n\t\t\tif (parsed && typeof parsed === \"object\" && !Array.isArray(parsed))\n\t\t\t\trecords.push(parsed as Record<string, unknown>);\n\t\t} catch {\n\t\t\t// Candidate extraction is deliberately best-effort; a later balanced candidate may still be valid.\n\t\t}\n\t}\n\treturn records;\n}\n\nfunction isWorkerStatus(value: unknown): value is ParsedWorkerOutput[\"status\"] {\n\treturn value === \"completed\" || value === \"blocked\";\n}\n\n/**\n * Plain-text fallback is for output that never attempted the worker claim envelope. A JSON object\n * with a claim summary but malformed typed fields is a contract failure, never an implicit success.\n */\nfunction hasMalformedWorkerClaimEnvelope(text: string): boolean {\n\treturn workerOutputRecords(text).some((record) => {\n\t\tif (typeof record.summary !== \"string\" || record.summary.trim().length === 0) return false;\n\t\tif (!isWorkerStatus(record.status)) return true;\n\t\tif (record.verdict !== undefined && record.verdict !== \"accepted\" && record.verdict !== \"rejected\") return true;\n\t\treturn (\n\t\t\trecord.reasonCodes !== undefined &&\n\t\t\t(!Array.isArray(record.reasonCodes) ||\n\t\t\t\trecord.reasonCodes.some((reasonCode) => typeof reasonCode !== \"string\" || reasonCode.trim().length === 0))\n\t\t);\n\t});\n}\n\nexport function parseWorkerOutput(text: string): ParsedWorkerOutput | undefined {\n\tfor (const record of workerOutputRecords(text)) {\n\t\tconst summary = record.summary;\n\t\tif (typeof summary !== \"string\" || summary.trim().length === 0) continue;\n\t\tif (!isWorkerStatus(record.status)) continue;\n\t\tif (record.verdict !== undefined && record.verdict !== \"accepted\" && record.verdict !== \"rejected\") continue;\n\t\tif (\n\t\t\trecord.reasonCodes !== undefined &&\n\t\t\t(!Array.isArray(record.reasonCodes) ||\n\t\t\t\trecord.reasonCodes.some((reasonCode) => typeof reasonCode !== \"string\" || reasonCode.trim().length === 0))\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst status = record.status;\n\t\tconst blockers = Array.isArray(record.blockers)\n\t\t\t? record.blockers\n\t\t\t\t\t.filter((blocker): blocker is string => typeof blocker === \"string\" && blocker.trim().length > 0)\n\t\t\t\t\t.slice(0, MAX_WORKER_CLAIM_BLOCKERS)\n\t\t\t\t\t.map((blocker) => blocker.trim().slice(0, MAX_WORKER_CLAIM_BLOCKER_CHARS))\n\t\t\t: [];\n\t\tconst findings: EvidenceFindingDraft[] = [];\n\t\tif (Array.isArray(record.findings)) {\n\t\t\tfor (let index = 0; index < record.findings.length && index < MAX_WORKER_FINDINGS; index++) {\n\t\t\t\tconst finding = normalizeEvidenceFinding(record.findings[index], MAX_WORKER_FINDING_CHARS);\n\t\t\t\tif (finding) findings.push(finding);\n\t\t\t}\n\t\t}\n\t\tconst verdict = record.verdict === \"accepted\" || record.verdict === \"rejected\" ? record.verdict : undefined;\n\t\tconst reasonCodes = Array.isArray(record.reasonCodes)\n\t\t\t? record.reasonCodes\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(reasonCode): reasonCode is string => typeof reasonCode === \"string\" && reasonCode.trim().length > 0,\n\t\t\t\t\t)\n\t\t\t\t\t.slice(0, MAX_WORKER_REASON_CODES)\n\t\t\t\t\t.map((reasonCode) => reasonCode.trim().slice(0, MAX_WORKER_REASON_CODE_CHARS))\n\t\t\t: [];\n\t\tconst actionOutcome = parseWorkerActions(record.actions);\n\t\treturn {\n\t\t\tsummary: summary.trim().slice(0, MAX_WORKER_CLAIM_SUMMARY_CHARS),\n\t\t\tstatus,\n\t\t\tblockers,\n\t\t\tfindings,\n\t\t\tactions: actionOutcome.kind === \"accepted\" ? actionOutcome.actions : [],\n\t\t\t...(actionOutcome.kind === \"rejected\" ? { actionRejection: actionOutcome } : {}),\n\t\t\t...(verdict ? { verdict } : {}),\n\t\t\treasonCodes,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction buildWorkerEvidence(request: WorkerRequest, findings: ParsedWorkerOutput[\"findings\"]) {\n\tif (findings.length === 0) return undefined;\n\tconst instructionsRef: EvidenceRef = {\n\t\tid: \"src-instructions\",\n\t\tkind: \"user\",\n\t\ttitle: \"Delegated task instructions\",\n\t\ttrusted: true,\n\t\texcerpt: request.instructions.slice(0, 2000),\n\t};\n\tconst synthesisRef: EvidenceRef = {\n\t\tid: \"src-worker\",\n\t\tkind: \"tool\",\n\t\ttitle: \"Delegated worker synthesis\",\n\t\ttrusted: false,\n\t};\n\treturn createEvidenceBundle({\n\t\tquery: `worker:${request.id}`,\n\t\tsources: [instructionsRef, synthesisRef],\n\t\tfindings: projectEvidenceFindings(findings, synthesisRef.id),\n\t});\n}\n\nfunction finishOutcome(args: {\n\trequest: WorkerRequest;\n\tclaim: WorkerClaim;\n\tlaneStatus: LaneTerminalStatus;\n\treasonCode: string;\n\treasonDetail?: string;\n\tcostUsd: number;\n\tcwd?: string;\n}): WorkerRunOutcome {\n\tconst claim = normalizeWorkerClaimForHost(args.claim);\n\tconst acceptance = validateWorkerClaim({ request: args.request, claim, cwd: args.cwd });\n\treturn {\n\t\tclaim,\n\t\tacceptance,\n\t\taccepted: acceptance.outcome === \"allow\",\n\t\tlaneStatus: args.laneStatus,\n\t\treasonCode: args.reasonCode,\n\t\t...(args.reasonDetail ? { reasonDetail: args.reasonDetail } : {}),\n\t\tcostUsd: args.costUsd,\n\t};\n}\n\nexport async function runWorker(options: WorkerRunnerOptions): Promise<WorkerRunOutcome> {\n\tconst now = options.now ?? (() => new Date().toISOString());\n\tconst baseClaim = {\n\t\trequestId: options.request.id,\n\t\tchangedFiles: [] as string[],\n\t\tusageReportId: options.usageReportId,\n\t\tcreatedAt: now(),\n\t};\n\n\t// The write prompt requires BOTH the envelope grant and a caller-supplied applier.\n\tconst writeCapable =\n\t\toptions.request.envelope.capabilities.includes(\"filesystem.write\") && options.applyActions !== undefined;\n\n\tconst bounded = await runBoundedCompletion({\n\t\tmaxWallClockMs: options.maxWallClockMs,\n\t\tsignal: options.signal,\n\t\texecute: (signal) =>\n\t\t\toptions.complete({\n\t\t\t\tsystemPrompt: options.verificationSubjectTaskId\n\t\t\t\t\t? buildVerifierSystemPrompt(options.verificationSubjectTaskId, {\n\t\t\t\t\t\t\tdelegate: options.delegationCapable === true,\n\t\t\t\t\t\t})\n\t\t\t\t\t: buildWorkerSystemPrompt({\n\t\t\t\t\t\t\twrite: writeCapable,\n\t\t\t\t\t\t\tprocess: options.processCapable === true,\n\t\t\t\t\t\t\tdelegate: options.delegationCapable === true,\n\t\t\t\t\t\t}),\n\t\t\t\tuserPrompt: buildWorkerUserPrompt(options.request),\n\t\t\t\tsignal,\n\t\t\t}),\n\t});\n\tconst costUsd = bounded.completion?.costUsd ?? 0;\n\tconst liveChangedFilesReport = collectBoundedWorkerClaimChangedFiles(options.getChangedFiles?.() ?? []);\n\tconst liveChangedFiles = liveChangedFilesReport.values;\n\n\tif (bounded.failure) {\n\t\tconst cancelled = bounded.failure.status === \"canceled\" || bounded.failure.status === \"timeout\";\n\t\tconst blockers = liveChangedFilesReport.overflowed\n\t\t\t? [\"worker changed-file report exceeded the durable claim bound; parent review is required\"]\n\t\t\t: undefined;\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...baseClaim,\n\t\t\t\tchangedFiles: liveChangedFiles,\n\t\t\t\tstatus: cancelled ? \"cancelled\" : \"failed\",\n\t\t\t\tsummary: `Worker did not complete: ${bounded.failure.reasonCode}${\n\t\t\t\t\tbounded.failure.detail ? ` — ${bounded.failure.detail}` : \"\"\n\t\t\t\t}`,\n\t\t\t\t...(blockers ? { blockers } : {}),\n\t\t\t},\n\t\t\tlaneStatus: bounded.failure.status,\n\t\t\treasonCode: bounded.failure.reasonCode,\n\t\t\t...(bounded.failure.detail ? { reasonDetail: bounded.failure.detail } : {}),\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst completion = bounded.completion as WorkerCompletion | undefined;\n\tconst completionChangedFilesReport = collectBoundedWorkerClaimChangedFiles(completion?.changedFiles ?? []);\n\tconst mergedChangedFilesReport = collectBoundedWorkerClaimChangedFiles([\n\t\t...liveChangedFiles,\n\t\t...completionChangedFilesReport.values,\n\t]);\n\tconst changedFilesOverflowed =\n\t\tliveChangedFilesReport.overflowed ||\n\t\tcompletionChangedFilesReport.overflowed ||\n\t\tmergedChangedFilesReport.overflowed;\n\tconst completionChangedFiles = mergedChangedFilesReport.values;\n\tconst completionBaseClaim = { ...baseClaim, changedFiles: completionChangedFiles };\n\tif (!completion || completion.stopReason === \"error\" || completion.stopReason === \"aborted\") {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: { ...completionBaseClaim, status: \"failed\", summary: \"Worker model call failed.\" },\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"model_error\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst parsed = parseWorkerOutput(completion.text);\n\tif (!parsed) {\n\t\tif (hasMalformedWorkerClaimEnvelope(completion.text)) {\n\t\t\treturn finishOutcome({\n\t\t\t\trequest: options.request,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tclaim: {\n\t\t\t\t\t...completionBaseClaim,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\tsummary: \"Worker output used a malformed structured claim envelope.\",\n\t\t\t\t},\n\t\t\t\tlaneStatus: \"failed\",\n\t\t\t\treasonCode: \"unparseable_output\",\n\t\t\t\tcostUsd,\n\t\t\t});\n\t\t}\n\t\tconst readOnlyPlainText =\n\t\t\t!options.verificationSubjectTaskId &&\n\t\t\t!writeCapable &&\n\t\t\tcompletion.text.trim().length > 0 &&\n\t\t\tcompletionChangedFiles.length === 0 &&\n\t\t\t!changedFilesOverflowed;\n\t\tif (readOnlyPlainText) {\n\t\t\tconst completionBlockersReport = collectBoundedWorkerClaimBlockers(completion.blockers ?? []);\n\t\t\tconst completionBlockers = completionBlockersReport.overflowed\n\t\t\t\t? [\n\t\t\t\t\t\t...completionBlockersReport.values.slice(0, Math.max(0, MAX_WORKER_CLAIM_BLOCKERS - 1)),\n\t\t\t\t\t\t\"worker blocker report exceeded the durable claim bound; parent review is required\",\n\t\t\t\t\t]\n\t\t\t\t: completionBlockersReport.values;\n\t\t\tconst incompleteNote =\n\t\t\t\tcompletion.stopReason === \"stop\"\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: `\\n\\n[Worker output ended with stop reason '${completion.stopReason}'; verify completeness.]`;\n\t\t\tconst summary = `${completion.text.trim().slice(0, Math.max(0, MAX_WORKER_CLAIM_SUMMARY_CHARS - incompleteNote.length))}${incompleteNote}`;\n\t\t\tconst blocked = completionBlockers.length > 0;\n\t\t\treturn finishOutcome({\n\t\t\t\trequest: options.request,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tclaim: {\n\t\t\t\t\t...completionBaseClaim,\n\t\t\t\t\tstatus: blocked ? \"blocked\" : \"completed\",\n\t\t\t\t\toutputFormat: \"plain_text\",\n\t\t\t\t\tsummary,\n\t\t\t\t\t...(blocked ? { blockers: completionBlockers } : {}),\n\t\t\t\t},\n\t\t\t\tlaneStatus: blocked ? \"failed\" : \"succeeded\",\n\t\t\t\treasonCode: blocked\n\t\t\t\t\t? \"worker_blocked\"\n\t\t\t\t\t: completion.stopReason === \"stop\"\n\t\t\t\t\t\t? \"worker_completed_plain_text\"\n\t\t\t\t\t\t: \"worker_completed_plain_text_incomplete\",\n\t\t\t\tcostUsd,\n\t\t\t});\n\t\t}\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...completionBaseClaim,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsummary: \"Worker output was not valid structured JSON.\",\n\t\t\t\t...(changedFilesOverflowed\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tblockers: [\n\t\t\t\t\t\t\t\t\"worker changed-file report exceeded the durable claim bound; parent review is required\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"unparseable_output\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst evidence = buildWorkerEvidence(options.request, parsed.findings);\n\tif (parsed.actionRejection) {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...completionBaseClaim,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsummary: \"Worker output contained invalid structured actions.\",\n\t\t\t\tblockers: [parsed.actionRejection.reasonCode],\n\t\t\t},\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"unparseable_output\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\tif (options.verificationSubjectTaskId && (!parsed.verdict || parsed.reasonCodes.length === 0)) {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...completionBaseClaim,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsummary: \"Verifier output omitted its typed verdict or reasonCodes.\",\n\t\t\t},\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"invalid_verifier_result\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\tlet changedFiles: string[] = [...completionChangedFiles];\n\tconst completionBlockersReport = collectBoundedWorkerClaimBlockers(completion.blockers ?? []);\n\tconst actionBlockers: string[] = [...completionBlockersReport.values];\n\tif (changedFilesOverflowed) {\n\t\tactionBlockers.push(\"worker changed-file report exceeded the durable claim bound; parent review is required\");\n\t}\n\tif (completionBlockersReport.overflowed) {\n\t\tactionBlockers.push(\"worker blocker report exceeded the durable claim bound; parent review is required\");\n\t}\n\tif (!writeCapable && completionChangedFiles.length > 0) {\n\t\tactionBlockers.push(\"worker reported file changes without a filesystem.write envelope grant\");\n\t}\n\tif (writeCapable && parsed.status !== \"blocked\" && parsed.actions.length > 0 && options.applyActions) {\n\t\t// Runner-side application through the envelope path scope: refusals and failures are\n\t\t// surfaced as blockers so a partially-applied change can never look like clean success.\n\t\tconst applied = options.applyActions(parsed.actions);\n\t\tconst appliedChangedFilesReport = collectBoundedWorkerClaimChangedFiles(applied.changedFiles);\n\t\tconst mergedAppliedChangedFilesReport = collectBoundedWorkerClaimChangedFiles([\n\t\t\t...changedFiles,\n\t\t\t...appliedChangedFilesReport.values,\n\t\t]);\n\t\tchangedFiles = mergedAppliedChangedFilesReport.values;\n\t\tif (appliedChangedFilesReport.overflowed || mergedAppliedChangedFilesReport.overflowed) {\n\t\t\tactionBlockers.push(\"applied changed-file report exceeded the durable claim bound; parent review is required\");\n\t\t}\n\t\tfor (const refusal of applied.refused) {\n\t\t\tactionBlockers.push(`action refused (${refusal.path}): ${refusal.reason}`);\n\t\t}\n\t\tfor (const failure of applied.failed) {\n\t\t\tactionBlockers.push(`action failed (${failure.path}): ${failure.reason}`);\n\t\t}\n\t\tfor (const inspection of applied.inspectionRequired) {\n\t\t\tactionBlockers.push(\n\t\t\t\t`action requires workspace/evidence inspection (${inspection.path}, ${inspection.state}): ${inspection.reasonCode}`,\n\t\t\t);\n\t\t}\n\t} else if (!writeCapable && parsed.actions.length > 0) {\n\t\tactionBlockers.push(\"worker emitted file actions without a filesystem.write envelope grant; nothing was applied\");\n\t}\n\tconst allBlockersReport = collectBoundedWorkerClaimBlockers([...parsed.blockers, ...actionBlockers]);\n\tconst allBlockers = allBlockersReport.overflowed\n\t\t? [\n\t\t\t\t...allBlockersReport.values.slice(0, Math.max(0, MAX_WORKER_CLAIM_BLOCKERS - 1)),\n\t\t\t\t\"worker blocker report exceeded the durable claim bound; parent review is required\",\n\t\t\t]\n\t\t: allBlockersReport.values;\n\tconst claim: WorkerClaim = {\n\t\t...baseClaim,\n\t\tchangedFiles,\n\t\tstatus: parsed.status === \"blocked\" || allBlockers.length > 0 ? \"blocked\" : \"completed\",\n\t\tsummary: parsed.summary,\n\t\t...(allBlockers.length > 0 ? { blockers: allBlockers } : {}),\n\t\t...(evidence ? { evidence } : {}),\n\t\t...(options.verificationSubjectTaskId && parsed.verdict\n\t\t\t? {\n\t\t\t\t\tverification: {\n\t\t\t\t\t\tsubjectTaskId: options.verificationSubjectTaskId,\n\t\t\t\t\t\tverdict: parsed.verdict,\n\t\t\t\t\t\treasonCodes: parsed.reasonCodes,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n\n\tif (claim.status === \"blocked\") {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim,\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"worker_blocked\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst overBudget = options.maxUsd !== undefined && costUsd > options.maxUsd;\n\treturn finishOutcome({\n\t\trequest: options.request,\n\t\tcwd: options.cwd,\n\t\tclaim,\n\t\tlaneStatus: overBudget ? \"budget_exhausted\" : \"succeeded\",\n\t\treasonCode: overBudget\n\t\t\t? \"cost_budget_exceeded\"\n\t\t\t: claim.verification\n\t\t\t\t? claim.verification.verdict === \"accepted\"\n\t\t\t\t\t? \"verification_accepted\"\n\t\t\t\t\t: \"verification_rejected\"\n\t\t\t\t: \"worker_completed\",\n\t\tcostUsd,\n\t});\n}\n"]}
1
+ {"version":3,"file":"worker-runner.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { runBoundedCompletion } from \"../autonomy/bounded-completion.ts\";\nimport type { EvidenceRef, GateOutcome, WorkerClaim, WorkerRequest } from \"../autonomy/contracts.ts\";\nimport {\n\ttype EvidenceFindingDraft,\n\tnormalizeEvidenceFinding,\n\tprojectEvidenceFindings,\n} from \"../autonomy/evidence-finding-projection.ts\";\nimport type { LaneTerminalStatus } from \"../autonomy/lane-tracker.ts\";\nimport {\n\tbuildVerifierSystemPrompt,\n\tbuildWorkerSystemPrompt,\n\tWORKER_LANE_SYSTEM_PROMPT,\n\tWORKER_OPERATOR_LANE_SYSTEM_PROMPT,\n\tWORKER_WRITE_LANE_SYSTEM_PROMPT,\n} from \"../provider-prompt-contracts.ts\";\nimport { createEvidenceBundle } from \"../research/evidence-bundle.ts\";\nimport {\n\ttype AppliedActionsReport,\n\tparseWorkerActions,\n\ttype RejectedWorkerActions,\n\ttype WorkerAction,\n} from \"./worker-actions.ts\";\nimport {\n\tcollectBoundedWorkerClaimBlockers,\n\tcollectBoundedWorkerClaimChangedFiles,\n\tMAX_WORKER_CLAIM_BLOCKER_CHARS,\n\tMAX_WORKER_CLAIM_BLOCKERS,\n\tMAX_WORKER_CLAIM_SUMMARY_CHARS,\n\tnormalizeWorkerClaimForHost,\n\tvalidateWorkerClaim,\n} from \"./worker-claim.ts\";\n\nexport {\n\tbuildVerifierSystemPrompt,\n\tbuildWorkerSystemPrompt,\n\tWORKER_LANE_SYSTEM_PROMPT,\n\tWORKER_OPERATOR_LANE_SYSTEM_PROMPT,\n\tWORKER_WRITE_LANE_SYSTEM_PROMPT,\n};\n\n/**\n * Pure execution for one bounded specialist delegation: bounded isolated completion ->\n * parse -> untrusted `WorkerClaim` -> parent validation via {@link validateWorkerClaim}.\n *\n * The injected completion may be a bounded child tool loop. Its tool surface is built and gated by\n * the host; this module keeps the structured-output contract and treats every claim as untrusted\n * until parent validation succeeds.\n */\n\nexport interface WorkerCompletion {\n\ttext: string;\n\tcostUsd: number;\n\tstopReason: string;\n\t/** Files successfully changed by the child tool loop before it produced the final JSON. */\n\tchangedFiles?: readonly string[];\n\t/** Capability refusals or execution failures observed inside the child tool loop. */\n\tblockers?: readonly string[];\n}\n\nexport interface WorkerRunnerOptions {\n\trequest: WorkerRequest;\n\t/** Budget for this delegation; undefined disables this bound, while zero permits only free work. */\n\tmaxUsd?: number;\n\t/** Wall-clock budget in milliseconds; 0 disables. */\n\tmaxWallClockMs: number;\n\t/**\n\t * Pre-allocated spawned-usage report id. Always stamped on the claim so parent validation can\n\t * enforce the cost-visibility invariant (a completed claim without a usage report is blocked).\n\t */\n\tusageReportId: string;\n\tcomplete: (args: { systemPrompt: string; userPrompt: string; signal: AbortSignal }) => Promise<WorkerCompletion>;\n\t/** Live successful child-tool mutations, including writes completed before timeout/cancellation. */\n\tgetChangedFiles?: () => readonly string[];\n\tsignal?: AbortSignal;\n\tnow?: () => string;\n\t/** Enables the WRITE lane: only honored when the request envelope grants \"filesystem.write\". The\n\t * runner applies the worker's structured actions through the envelope path scope; refusals\n\t * and failures become blockers, never silent drops. */\n\tapplyActions?: (actions: readonly WorkerAction[]) => AppliedActionsReport;\n\t/** Enables the constrained direct-argv operator role prompt. */\n\tprocessCapable?: boolean;\n\t/** Enables recursive delegation and orchestration-tree coordination guidance. */\n\tdelegationCapable?: boolean;\n\t/** Session cwd — the baseline for relative changed-file and envelope paths in parent\n\t * validation. Defaults to process.cwd(). */\n\tcwd?: string;\n\t/** Turns the child into a read-only semantic verifier for this exact durable task. */\n\tverificationSubjectTaskId?: string;\n}\n\nexport interface WorkerRunOutcome {\n\tclaim: WorkerClaim;\n\t/** Parent-review verdict from {@link validateWorkerClaim}; worker output stays untrusted. */\n\tacceptance: GateOutcome;\n\taccepted: boolean;\n\tlaneStatus: LaneTerminalStatus;\n\treasonCode: string;\n\t/** Underlying executor error for bounded failures; drives the in-process retry decision. */\n\treasonDetail?: string;\n\tcostUsd: number;\n}\n\nexport function buildWorkerUserPrompt(request: WorkerRequest): string {\n\treturn [\n\t\t\"TASK\",\n\t\trequest.instructions,\n\t\t\"END TASK\",\n\t\t'Do not replace the worker claim envelope; put requested detail inside \"summary\" and \"findings\".',\n\t].join(\"\\n\");\n}\n\nexport interface ParsedWorkerOutput {\n\tsummary: string;\n\tstatus: \"completed\" | \"blocked\";\n\tblockers: string[];\n\tfindings: EvidenceFindingDraft[];\n\tactions: WorkerAction[];\n\t/** Present when the model emitted an action list that cannot safely reach execution. */\n\tactionRejection?: RejectedWorkerActions;\n\tverdict?: \"accepted\" | \"rejected\";\n\treasonCodes: string[];\n}\n\nconst MAX_WORKER_OUTPUT_CHARS = 512 * 1024;\nconst MAX_WORKER_JSON_CANDIDATES = 64;\nconst MAX_WORKER_JSON_DEPTH = 256;\nconst MAX_WORKER_FINDINGS = 64;\nconst MAX_WORKER_FINDING_CHARS = 2_000;\nconst MAX_WORKER_REASON_CODES = 32;\nconst MAX_WORKER_REASON_CODE_CHARS = 128;\n\nfunction balancedObjectCandidates(text: string): string[] {\n\tconst ranges: Array<{ start: number; end: number }> = [];\n\tconst starts: number[] = [];\n\tlet inString = false;\n\tlet escaped = false;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tconst character = text[index];\n\t\tif (inString) {\n\t\t\tif (escaped) escaped = false;\n\t\t\telse if (character === \"\\\\\") escaped = true;\n\t\t\telse if (character === '\"') inString = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === '\"') {\n\t\t\tinString = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"{\") {\n\t\t\tif (starts.length >= MAX_WORKER_JSON_DEPTH) return ranges.map(({ start, end }) => text.slice(start, end));\n\t\t\tstarts.push(index);\n\t\t\tcontinue;\n\t\t}\n\t\tif (character !== \"}\") continue;\n\t\tconst start = starts.pop();\n\t\tif (start === undefined || ranges.length >= MAX_WORKER_JSON_CANDIDATES) continue;\n\t\tconst end = index + 1;\n\t\tif (end - start <= MAX_WORKER_OUTPUT_CHARS) ranges.push({ start, end });\n\t}\n\treturn ranges.map(({ start, end }) => text.slice(start, end));\n}\n\nfunction workerOutputRecords(text: string): Record<string, unknown>[] {\n\tconst trimmed = text.trim();\n\tif (trimmed.length === 0 || trimmed.length > MAX_WORKER_OUTPUT_CHARS) return [];\n\tconst candidates: string[] = [trimmed];\n\tconst fenced = /```(?:json)?\\s*([\\s\\S]*?)```/.exec(trimmed);\n\tif (fenced?.[1]) candidates.push(fenced[1].trim());\n\tcandidates.push(...balancedObjectCandidates(trimmed));\n\tconst records: Record<string, unknown>[] = [];\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(candidate);\n\t\t\tif (parsed && typeof parsed === \"object\" && !Array.isArray(parsed))\n\t\t\t\trecords.push(parsed as Record<string, unknown>);\n\t\t} catch {\n\t\t\t// Candidate extraction is deliberately best-effort; a later balanced candidate may still be valid.\n\t\t}\n\t}\n\treturn records;\n}\n\nfunction isWorkerStatus(value: unknown): value is ParsedWorkerOutput[\"status\"] {\n\treturn value === \"completed\" || value === \"blocked\";\n}\n\n/**\n * Plain-text fallback is for output that never attempted the worker claim envelope. A JSON object\n * with a claim summary but malformed typed fields is a contract failure, never an implicit success.\n */\nfunction hasMalformedWorkerClaimEnvelope(text: string): boolean {\n\treturn workerOutputRecords(text).some((record) => {\n\t\tif (typeof record.summary !== \"string\" || record.summary.trim().length === 0) return false;\n\t\tif (!isWorkerStatus(record.status)) return true;\n\t\tif (record.verdict !== undefined && record.verdict !== \"accepted\" && record.verdict !== \"rejected\") return true;\n\t\treturn (\n\t\t\trecord.reasonCodes !== undefined &&\n\t\t\t(!Array.isArray(record.reasonCodes) ||\n\t\t\t\trecord.reasonCodes.some((reasonCode) => typeof reasonCode !== \"string\" || reasonCode.trim().length === 0))\n\t\t);\n\t});\n}\n\nexport function parseWorkerOutput(text: string): ParsedWorkerOutput | undefined {\n\tfor (const record of workerOutputRecords(text)) {\n\t\tconst summary = record.summary;\n\t\tif (typeof summary !== \"string\" || summary.trim().length === 0) continue;\n\t\tif (!isWorkerStatus(record.status)) continue;\n\t\tif (record.verdict !== undefined && record.verdict !== \"accepted\" && record.verdict !== \"rejected\") continue;\n\t\tif (\n\t\t\trecord.reasonCodes !== undefined &&\n\t\t\t(!Array.isArray(record.reasonCodes) ||\n\t\t\t\trecord.reasonCodes.some((reasonCode) => typeof reasonCode !== \"string\" || reasonCode.trim().length === 0))\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst status = record.status;\n\t\tconst blockers = Array.isArray(record.blockers)\n\t\t\t? record.blockers\n\t\t\t\t\t.filter((blocker): blocker is string => typeof blocker === \"string\" && blocker.trim().length > 0)\n\t\t\t\t\t.slice(0, MAX_WORKER_CLAIM_BLOCKERS)\n\t\t\t\t\t.map((blocker) => blocker.trim().slice(0, MAX_WORKER_CLAIM_BLOCKER_CHARS))\n\t\t\t: [];\n\t\tconst findings: EvidenceFindingDraft[] = [];\n\t\tif (Array.isArray(record.findings)) {\n\t\t\tfor (let index = 0; index < record.findings.length && index < MAX_WORKER_FINDINGS; index++) {\n\t\t\t\tconst finding = normalizeEvidenceFinding(record.findings[index], MAX_WORKER_FINDING_CHARS);\n\t\t\t\tif (finding) findings.push(finding);\n\t\t\t}\n\t\t}\n\t\tconst verdict = record.verdict === \"accepted\" || record.verdict === \"rejected\" ? record.verdict : undefined;\n\t\tconst reasonCodes = Array.isArray(record.reasonCodes)\n\t\t\t? record.reasonCodes\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(reasonCode): reasonCode is string => typeof reasonCode === \"string\" && reasonCode.trim().length > 0,\n\t\t\t\t\t)\n\t\t\t\t\t.slice(0, MAX_WORKER_REASON_CODES)\n\t\t\t\t\t.map((reasonCode) => reasonCode.trim().slice(0, MAX_WORKER_REASON_CODE_CHARS))\n\t\t\t: [];\n\t\tconst actionOutcome = parseWorkerActions(record.actions);\n\t\treturn {\n\t\t\tsummary: summary.trim().slice(0, MAX_WORKER_CLAIM_SUMMARY_CHARS),\n\t\t\tstatus,\n\t\t\tblockers,\n\t\t\tfindings,\n\t\t\tactions: actionOutcome.kind === \"accepted\" ? actionOutcome.actions : [],\n\t\t\t...(actionOutcome.kind === \"rejected\" ? { actionRejection: actionOutcome } : {}),\n\t\t\t...(verdict ? { verdict } : {}),\n\t\t\treasonCodes,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction buildWorkerEvidence(request: WorkerRequest, findings: ParsedWorkerOutput[\"findings\"]) {\n\tif (findings.length === 0) return undefined;\n\tconst instructionsRef: EvidenceRef = {\n\t\tid: \"src-instructions\",\n\t\tkind: \"user\",\n\t\ttitle: \"Delegated task instructions\",\n\t\ttrusted: true,\n\t\texcerpt: request.instructions.slice(0, 2000),\n\t};\n\tconst synthesisRef: EvidenceRef = {\n\t\tid: \"src-worker\",\n\t\tkind: \"tool\",\n\t\ttitle: \"Delegated worker synthesis\",\n\t\ttrusted: false,\n\t};\n\treturn createEvidenceBundle({\n\t\tquery: `worker:${request.id}`,\n\t\tsources: [instructionsRef, synthesisRef],\n\t\tfindings: projectEvidenceFindings(findings, synthesisRef.id),\n\t});\n}\n\nfunction finishOutcome(args: {\n\trequest: WorkerRequest;\n\tclaim: WorkerClaim;\n\tlaneStatus: LaneTerminalStatus;\n\treasonCode: string;\n\treasonDetail?: string;\n\tcostUsd: number;\n\tcwd?: string;\n}): WorkerRunOutcome {\n\tconst claim = normalizeWorkerClaimForHost(args.claim);\n\tconst acceptance = validateWorkerClaim({ request: args.request, claim, cwd: args.cwd });\n\treturn {\n\t\tclaim,\n\t\tacceptance,\n\t\taccepted: acceptance.outcome === \"allow\",\n\t\tlaneStatus: args.laneStatus,\n\t\treasonCode: args.reasonCode,\n\t\t...(args.reasonDetail ? { reasonDetail: args.reasonDetail } : {}),\n\t\tcostUsd: args.costUsd,\n\t};\n}\n\nexport async function runWorker(options: WorkerRunnerOptions): Promise<WorkerRunOutcome> {\n\tconst now = options.now ?? (() => new Date().toISOString());\n\tconst baseClaim = {\n\t\trequestId: options.request.id,\n\t\tchangedFiles: [] as string[],\n\t\tusageReportId: options.usageReportId,\n\t\tcreatedAt: now(),\n\t};\n\n\t// The write prompt requires BOTH the envelope grant and a caller-supplied applier.\n\tconst writeCapable =\n\t\toptions.request.envelope.capabilities.includes(\"filesystem.write\") && options.applyActions !== undefined;\n\n\tconst bounded = await runBoundedCompletion({\n\t\tmaxWallClockMs: options.maxWallClockMs,\n\t\tsignal: options.signal,\n\t\texecute: (signal) =>\n\t\t\toptions.complete({\n\t\t\t\tsystemPrompt: options.verificationSubjectTaskId\n\t\t\t\t\t? buildVerifierSystemPrompt(options.verificationSubjectTaskId, {\n\t\t\t\t\t\t\tdelegate: options.delegationCapable === true,\n\t\t\t\t\t\t})\n\t\t\t\t\t: buildWorkerSystemPrompt({\n\t\t\t\t\t\t\twrite: writeCapable,\n\t\t\t\t\t\t\tprocess: options.processCapable === true,\n\t\t\t\t\t\t\tdelegate: options.delegationCapable === true,\n\t\t\t\t\t\t}),\n\t\t\t\tuserPrompt: buildWorkerUserPrompt(options.request),\n\t\t\t\tsignal,\n\t\t\t}),\n\t});\n\tconst costUsd = bounded.completion?.costUsd ?? 0;\n\tconst liveChangedFilesReport = collectBoundedWorkerClaimChangedFiles(options.getChangedFiles?.() ?? []);\n\tconst liveChangedFiles = liveChangedFilesReport.values;\n\n\tif (bounded.failure) {\n\t\tconst cancelled = bounded.failure.status === \"canceled\" || bounded.failure.status === \"timeout\";\n\t\tconst blockers = liveChangedFilesReport.overflowed\n\t\t\t? [\"worker changed-file report exceeded the durable claim bound; parent review is required\"]\n\t\t\t: undefined;\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...baseClaim,\n\t\t\t\tchangedFiles: liveChangedFiles,\n\t\t\t\tstatus: cancelled ? \"cancelled\" : \"failed\",\n\t\t\t\tsummary: `Worker did not complete: ${bounded.failure.reasonCode}${\n\t\t\t\t\tbounded.failure.detail ? ` — ${bounded.failure.detail}` : \"\"\n\t\t\t\t}`,\n\t\t\t\t...(blockers ? { blockers } : {}),\n\t\t\t},\n\t\t\tlaneStatus: bounded.failure.status,\n\t\t\treasonCode: bounded.failure.reasonCode,\n\t\t\t...(bounded.failure.detail ? { reasonDetail: bounded.failure.detail } : {}),\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst completion = bounded.completion as WorkerCompletion | undefined;\n\tconst completionChangedFilesReport = collectBoundedWorkerClaimChangedFiles(completion?.changedFiles ?? []);\n\tconst mergedChangedFilesReport = collectBoundedWorkerClaimChangedFiles([\n\t\t...liveChangedFiles,\n\t\t...completionChangedFilesReport.values,\n\t]);\n\tconst changedFilesOverflowed =\n\t\tliveChangedFilesReport.overflowed ||\n\t\tcompletionChangedFilesReport.overflowed ||\n\t\tmergedChangedFilesReport.overflowed;\n\tconst completionChangedFiles = mergedChangedFilesReport.values;\n\tconst completionBaseClaim = { ...baseClaim, changedFiles: completionChangedFiles };\n\tif (!completion || completion.stopReason === \"error\" || completion.stopReason === \"aborted\") {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: { ...completionBaseClaim, status: \"failed\", summary: \"Worker model call failed.\" },\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"model_error\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst parsed = parseWorkerOutput(completion.text);\n\tif (!parsed) {\n\t\tif (hasMalformedWorkerClaimEnvelope(completion.text)) {\n\t\t\treturn finishOutcome({\n\t\t\t\trequest: options.request,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tclaim: {\n\t\t\t\t\t...completionBaseClaim,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\tsummary: \"Worker output used a malformed structured claim envelope.\",\n\t\t\t\t},\n\t\t\t\tlaneStatus: \"failed\",\n\t\t\t\treasonCode: \"unparseable_output\",\n\t\t\t\tcostUsd,\n\t\t\t});\n\t\t}\n\t\tconst readOnlyPlainText =\n\t\t\t!options.verificationSubjectTaskId &&\n\t\t\t!writeCapable &&\n\t\t\tcompletion.text.trim().length > 0 &&\n\t\t\tcompletionChangedFiles.length === 0 &&\n\t\t\t!changedFilesOverflowed;\n\t\tif (readOnlyPlainText) {\n\t\t\tconst completionBlockersReport = collectBoundedWorkerClaimBlockers(completion.blockers ?? []);\n\t\t\tconst completionBlockers = completionBlockersReport.overflowed\n\t\t\t\t? [\n\t\t\t\t\t\t...completionBlockersReport.values.slice(0, Math.max(0, MAX_WORKER_CLAIM_BLOCKERS - 1)),\n\t\t\t\t\t\t\"worker blocker report exceeded the durable claim bound; parent review is required\",\n\t\t\t\t\t]\n\t\t\t\t: completionBlockersReport.values;\n\t\t\tconst incompleteNote =\n\t\t\t\tcompletion.stopReason === \"stop\"\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: `\\n\\n[Worker output ended with stop reason '${completion.stopReason}'; verify completeness.]`;\n\t\t\tconst summary = `${completion.text.trim().slice(0, Math.max(0, MAX_WORKER_CLAIM_SUMMARY_CHARS - incompleteNote.length))}${incompleteNote}`;\n\t\t\tconst blocked = completionBlockers.length > 0;\n\t\t\treturn finishOutcome({\n\t\t\t\trequest: options.request,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tclaim: {\n\t\t\t\t\t...completionBaseClaim,\n\t\t\t\t\tstatus: blocked ? \"blocked\" : \"completed\",\n\t\t\t\t\toutputFormat: \"plain_text\",\n\t\t\t\t\tsummary,\n\t\t\t\t\t...(blocked ? { blockers: completionBlockers } : {}),\n\t\t\t\t},\n\t\t\t\tlaneStatus: blocked ? \"blocked\" : \"succeeded\",\n\t\t\t\treasonCode: blocked\n\t\t\t\t\t? \"worker_blocked\"\n\t\t\t\t\t: completion.stopReason === \"stop\"\n\t\t\t\t\t\t? \"worker_completed_plain_text\"\n\t\t\t\t\t\t: \"worker_completed_plain_text_incomplete\",\n\t\t\t\tcostUsd,\n\t\t\t});\n\t\t}\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...completionBaseClaim,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsummary: \"Worker output was not valid structured JSON.\",\n\t\t\t\t...(changedFilesOverflowed\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tblockers: [\n\t\t\t\t\t\t\t\t\"worker changed-file report exceeded the durable claim bound; parent review is required\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"unparseable_output\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst evidence = buildWorkerEvidence(options.request, parsed.findings);\n\tif (parsed.actionRejection) {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...completionBaseClaim,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsummary: \"Worker output contained invalid structured actions.\",\n\t\t\t\tblockers: [parsed.actionRejection.reasonCode],\n\t\t\t},\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"unparseable_output\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\tif (options.verificationSubjectTaskId && (!parsed.verdict || parsed.reasonCodes.length === 0)) {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim: {\n\t\t\t\t...completionBaseClaim,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsummary: \"Verifier output omitted its typed verdict or reasonCodes.\",\n\t\t\t},\n\t\t\tlaneStatus: \"failed\",\n\t\t\treasonCode: \"invalid_verifier_result\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\tlet changedFiles: string[] = [...completionChangedFiles];\n\tconst completionBlockersReport = collectBoundedWorkerClaimBlockers(completion.blockers ?? []);\n\tconst actionBlockers: string[] = [...completionBlockersReport.values];\n\tif (changedFilesOverflowed) {\n\t\tactionBlockers.push(\"worker changed-file report exceeded the durable claim bound; parent review is required\");\n\t}\n\tif (completionBlockersReport.overflowed) {\n\t\tactionBlockers.push(\"worker blocker report exceeded the durable claim bound; parent review is required\");\n\t}\n\tif (!writeCapable && completionChangedFiles.length > 0) {\n\t\tactionBlockers.push(\"worker reported file changes without a filesystem.write envelope grant\");\n\t}\n\tif (writeCapable && parsed.status !== \"blocked\" && parsed.actions.length > 0 && options.applyActions) {\n\t\t// Runner-side application through the envelope path scope: refusals and failures are\n\t\t// surfaced as blockers so a partially-applied change can never look like clean success.\n\t\tconst applied = options.applyActions(parsed.actions);\n\t\tconst appliedChangedFilesReport = collectBoundedWorkerClaimChangedFiles(applied.changedFiles);\n\t\tconst mergedAppliedChangedFilesReport = collectBoundedWorkerClaimChangedFiles([\n\t\t\t...changedFiles,\n\t\t\t...appliedChangedFilesReport.values,\n\t\t]);\n\t\tchangedFiles = mergedAppliedChangedFilesReport.values;\n\t\tif (appliedChangedFilesReport.overflowed || mergedAppliedChangedFilesReport.overflowed) {\n\t\t\tactionBlockers.push(\"applied changed-file report exceeded the durable claim bound; parent review is required\");\n\t\t}\n\t\tfor (const refusal of applied.refused) {\n\t\t\tactionBlockers.push(`action refused (${refusal.path}): ${refusal.reason}`);\n\t\t}\n\t\tfor (const failure of applied.failed) {\n\t\t\tactionBlockers.push(`action failed (${failure.path}): ${failure.reason}`);\n\t\t}\n\t\tfor (const inspection of applied.inspectionRequired) {\n\t\t\tactionBlockers.push(\n\t\t\t\t`action requires workspace/evidence inspection (${inspection.path}, ${inspection.state}): ${inspection.reasonCode}`,\n\t\t\t);\n\t\t}\n\t} else if (!writeCapable && parsed.actions.length > 0) {\n\t\tactionBlockers.push(\"worker emitted file actions without a filesystem.write envelope grant; nothing was applied\");\n\t}\n\tconst allBlockersReport = collectBoundedWorkerClaimBlockers([...parsed.blockers, ...actionBlockers]);\n\tconst allBlockers = allBlockersReport.overflowed\n\t\t? [\n\t\t\t\t...allBlockersReport.values.slice(0, Math.max(0, MAX_WORKER_CLAIM_BLOCKERS - 1)),\n\t\t\t\t\"worker blocker report exceeded the durable claim bound; parent review is required\",\n\t\t\t]\n\t\t: allBlockersReport.values;\n\tconst claim: WorkerClaim = {\n\t\t...baseClaim,\n\t\tchangedFiles,\n\t\tstatus: parsed.status === \"blocked\" || allBlockers.length > 0 ? \"blocked\" : \"completed\",\n\t\tsummary: parsed.summary,\n\t\t...(allBlockers.length > 0 ? { blockers: allBlockers } : {}),\n\t\t...(evidence ? { evidence } : {}),\n\t\t...(options.verificationSubjectTaskId && parsed.verdict\n\t\t\t? {\n\t\t\t\t\tverification: {\n\t\t\t\t\t\tsubjectTaskId: options.verificationSubjectTaskId,\n\t\t\t\t\t\tverdict: parsed.verdict,\n\t\t\t\t\t\treasonCodes: parsed.reasonCodes,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n\n\tif (claim.status === \"blocked\") {\n\t\treturn finishOutcome({\n\t\t\trequest: options.request,\n\t\t\tcwd: options.cwd,\n\t\t\tclaim,\n\t\t\tlaneStatus: \"blocked\",\n\t\t\treasonCode: \"worker_blocked\",\n\t\t\tcostUsd,\n\t\t});\n\t}\n\n\tconst overBudget = options.maxUsd !== undefined && costUsd > options.maxUsd;\n\treturn finishOutcome({\n\t\trequest: options.request,\n\t\tcwd: options.cwd,\n\t\tclaim,\n\t\tlaneStatus: overBudget ? \"budget_exhausted\" : \"succeeded\",\n\t\treasonCode: overBudget\n\t\t\t? \"cost_budget_exceeded\"\n\t\t\t: claim.verification\n\t\t\t\t? claim.verification.verdict === \"accepted\"\n\t\t\t\t\t? \"verification_accepted\"\n\t\t\t\t\t: \"verification_rejected\"\n\t\t\t\t: \"worker_completed\",\n\t\tcostUsd,\n\t});\n}\n"]}
@@ -5,6 +5,7 @@ export interface WorkerTerminalHandoff {
5
5
  childAgentId: string;
6
6
  record: LaneRecord;
7
7
  }
8
+ export declare const WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE = "CAVEMAN MODE - MANDATORY: completion_error means a worker execution failed, not harness failure. Tool timeout, provider/model/API/network/WebSocket/fetch/overload, and exhausted retry are worker failures. NEVER call any of them harness failure. NEVER stop, cancel, or interrupt healthy siblings for them. A delivered terminal handoff proves persistence and delivery worked. Harness failure requires direct evidence that orchestration state, terminal delivery, or control broke. Otherwise read evidence and continue or replan.";
8
9
  /** Per-entry ceiling; combined with the durable attempt cap this bounds retained memory to 4 MiB. */
9
10
  export declare const MAX_WORKER_TERMINAL_HANDOFF_BYTES: number;
10
11
  export type WorkerTerminalHandoffDelivery = "delivered" | "retained";
@@ -1 +1 @@
1
- {"version":3,"file":"worker-terminal-handoff-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-terminal-handoff-coordinator.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGlG,MAAM,WAAW,qBAAqB;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,qGAAqG;AACrG,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,gCAAgC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,gCAAgC,CAAC;CACxC;AAED,MAAM,WAAW,uCAAuC;IACvD,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,6BAA6B,CAAC;IACjF,eAAe,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACjF;AAkCD;;;GAGG;AACH,qBAAa,gCAAgC;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAS;IAEzB,YAAY,OAAO,EAAE,uCAAuC,EAE3D;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,qBAAqB,EAAE,CAElC;IAED,qHAAqH;IACrH,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,8BAA8B,CAcrE;IAED;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GAAG,sCAAsC,CAuB5F;IAED,gGAAgG;IAChG,MAAM,IAAI,gCAAgC,CAoDzC;IAED,KAAK,IAAI,IAAI,CAGZ;IAED,OAAO,IAAI,IAAI,CAGd;IAED,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;CAO3B"}
1
+ {"version":3,"file":"worker-terminal-handoff-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-terminal-handoff-coordinator.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGlG,MAAM,WAAW,qBAAqB;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,eAAO,MAAM,wCAAwC,khBAC2d,CAAC;AAEjhB,qGAAqG;AACrG,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D,MAAM,MAAM,6BAA6B,GAAG,WAAW,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,gCAAgC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sCAAsC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,gCAAgC,CAAC;CACxC;AAED,MAAM,WAAW,uCAAuC;IACvD,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,6BAA6B,CAAC;IACjF,eAAe,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACjF;AAkCD;;;GAGG;AACH,qBAAa,gCAAgC;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAS;IAEzB,YAAY,OAAO,EAAE,uCAAuC,EAE3D;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,qBAAqB,EAAE,CAElC;IAED,qHAAqH;IACrH,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,8BAA8B,CAcrE;IAED;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GAAG,sCAAsC,CAuB5F;IAED,gGAAgG;IAChG,MAAM,IAAI,gCAAgC,CAoDzC;IAED,KAAK,IAAI,IAAI,CAGZ;IAED,OAAO,IAAI,IAAI,CAGd;IAED,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;CAO3B"}
@@ -1,6 +1,7 @@
1
1
  import { isDeepStrictEqual } from "node:util";
2
2
  import { isLaneRecord, isLaneTerminalStatus } from "../autonomy/lane-tracker.js";
3
3
  import { MAX_ORCHESTRATION_ATTEMPTS, MAX_ORCHESTRATION_IDENTIFIER_LENGTH } from "../orchestration/contracts.js";
4
+ export const WORKER_COMPLETION_ERROR_CAVEMAN_GUIDANCE = "CAVEMAN MODE - MANDATORY: completion_error means a worker execution failed, not harness failure. Tool timeout, provider/model/API/network/WebSocket/fetch/overload, and exhausted retry are worker failures. NEVER call any of them harness failure. NEVER stop, cancel, or interrupt healthy siblings for them. A delivered terminal handoff proves persistence and delivery worked. Harness failure requires direct evidence that orchestration state, terminal delivery, or control broke. Otherwise read evidence and continue or replan.";
4
5
  /** Per-entry ceiling; combined with the durable attempt cap this bounds retained memory to 4 MiB. */
5
6
  export const MAX_WORKER_TERMINAL_HANDOFF_BYTES = 16 * 1024;
6
7
  function assertIdentifier(value, label) {