@narumitw/pi-subagents 2.0.6 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +171 -60
  2. package/dist/chunks/{auto-transport-SY2VHUFH.ts → auto-transport-FUUKFDIG.ts} +6 -6
  3. package/dist/chunks/{capability-grant-CGEWOEKE.ts → capability-grant-PR72SWWS.ts} +4 -4
  4. package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-2LMJU25E.ts} +172 -74
  5. package/dist/chunks/chunk-2LMJU25E.ts.map +7 -0
  6. package/dist/chunks/{chunk-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
  7. package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
  8. package/dist/chunks/chunk-6H6TBBED.ts +108 -0
  9. package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
  10. package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-6NSJVPXX.ts} +6 -16
  11. package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-6NSJVPXX.ts.map} +2 -2
  12. package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
  13. package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
  14. package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
  15. package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
  16. package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
  17. package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
  18. package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
  19. package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
  20. package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
  21. package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
  22. package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
  23. package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
  24. package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
  25. package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
  26. package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
  27. package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
  28. package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
  29. package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
  30. package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
  31. package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
  32. package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
  33. package/dist/chunks/chunk-NLT67IZS.ts +322 -0
  34. package/dist/chunks/chunk-NLT67IZS.ts.map +7 -0
  35. package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
  36. package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
  37. package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
  38. package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
  39. package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
  40. package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
  41. package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
  42. package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
  43. package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
  44. package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
  45. package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
  46. package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
  47. package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
  48. package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
  49. package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
  50. package/dist/chunks/{chunk-434NII74.ts → chunk-YU53SHA7.ts} +54 -8
  51. package/dist/chunks/chunk-YU53SHA7.ts.map +7 -0
  52. package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-RSJU6BXL.ts} +5 -4
  53. package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
  54. package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-ABHYNGQ7.ts} +297 -231
  55. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +7 -0
  56. package/dist/chunks/{consult-IV7UBNQQ.ts → consult-LJU3IQY5.ts} +14 -13
  57. package/dist/chunks/consult-LJU3IQY5.ts.map +7 -0
  58. package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
  59. package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
  60. package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
  61. package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
  62. package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
  63. package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
  64. package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
  65. package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
  66. package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-UY3PY6E5.ts} +11 -7
  67. package/dist/chunks/persistence-UY3PY6E5.ts.map +7 -0
  68. package/dist/chunks/{registry-E6XPJB7L.ts → registry-BT54L6CY.ts} +136 -15
  69. package/dist/chunks/registry-BT54L6CY.ts.map +7 -0
  70. package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
  71. package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
  72. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
  73. package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
  74. package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
  75. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
  76. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
  77. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
  78. package/dist/index.ts +682 -82
  79. package/dist/index.ts.map +3 -3
  80. package/docs/async-runtime-protocol.md +83 -0
  81. package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
  82. package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
  83. package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
  84. package/docs/pi-subagents-diagrams.md +183 -0
  85. package/package.json +9 -8
  86. package/src/agents/types.ts +2 -0
  87. package/src/async-subagent-benchmark.ts +532 -0
  88. package/src/completion-delivery.ts +71 -4
  89. package/src/completion-render.ts +1 -0
  90. package/src/completion-requirement.ts +479 -0
  91. package/src/config-registration.ts +5 -5
  92. package/src/config-status.ts +66 -70
  93. package/src/config-ui.ts +244 -150
  94. package/src/consult-registration.ts +4 -12
  95. package/src/consult-resources.ts +1 -1
  96. package/src/consult.ts +3 -8
  97. package/src/delegation-contract.ts +55 -9
  98. package/src/execution-plan.ts +1 -1
  99. package/src/execution-ui.ts +40 -29
  100. package/src/execution.ts +2 -3
  101. package/src/inspect.ts +24 -1
  102. package/src/orchestration-metrics.ts +1 -1
  103. package/src/panel-execution.ts +2 -3
  104. package/src/panel-failure.ts +1 -1
  105. package/src/panel-render.ts +1 -1
  106. package/src/parallel-limit-ui.ts +6 -5
  107. package/src/params.ts +2 -1
  108. package/src/persistence.ts +9 -0
  109. package/src/process-control.ts +43 -0
  110. package/src/registry-types.ts +5 -0
  111. package/src/registry.ts +162 -18
  112. package/src/render.ts +2 -1
  113. package/src/rpc-transport.ts +1 -1
  114. package/src/runner-outcome.ts +1 -1
  115. package/src/runner-result.ts +1 -1
  116. package/src/runner-types.ts +102 -0
  117. package/src/runner.ts +11 -192
  118. package/src/session-guidance-contract.ts +309 -0
  119. package/src/settings/inspection.ts +27 -0
  120. package/src/settings/schema.ts +9 -0
  121. package/src/settings-reader.ts +7 -0
  122. package/src/settings.ts +20 -0
  123. package/src/spawn-idempotency.ts +5 -0
  124. package/src/stateful-agent-view.ts +15 -19
  125. package/src/stateful-guidance.ts +11 -18
  126. package/src/stateful-limit-ui.ts +23 -20
  127. package/src/stateful-limits.ts +10 -10
  128. package/src/stateful-registration.ts +126 -36
  129. package/src/stateful-render.ts +27 -2
  130. package/src/subagent-details.ts +43 -0
  131. package/src/subagents-extension.ts +116 -68
  132. package/src/subagents.ts +2 -0
  133. package/src/subprocess-transport.ts +2 -1
  134. package/src/supervision.ts +2 -1
  135. package/src/timeout-finalization.ts +1 -1
  136. package/src/tool-schema-compatibility.ts +73 -0
  137. package/src/transport-types.ts +6 -0
  138. package/src/transport-ui.ts +18 -46
  139. package/src/usage-recording-config.ts +13 -0
  140. package/src/usage-recording-store.ts +183 -0
  141. package/src/usage-recording.ts +478 -0
  142. package/src/verification-harness.ts +1 -1
  143. package/src/workflow-ui.ts +17 -9
  144. package/dist/chunks/chunk-434NII74.ts.map +0 -7
  145. package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
  146. package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
  147. package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
  148. package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
  149. package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
  150. package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
  151. package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
  152. package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
  153. package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
  154. package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
  155. package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
  156. package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
  157. package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
  158. package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
  159. package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
  160. package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
  161. package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
  162. package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
  163. package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
  164. package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
  165. /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
  166. /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
  167. /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
  168. /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
  169. /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
  170. /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
  171. /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
  172. /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
  173. /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-RSJU6BXL.ts.map} +0 -0
  174. /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
  175. /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
  176. /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
  177. /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
  178. /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
  179. /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
  180. /package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts.map → spawn-idempotency-BNHOSMZW.ts.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/runner-result.ts", "../../src/runner-outcome.ts"],
4
- "sourcesContent": ["import type { Message } from \"@earendil-works/pi-ai\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { SingleResult } from \"./runner.js\";\nimport { formatTimeoutCheckpoint } from \"./timeout-checkpoint.js\";\n\nexport function getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg?.role === \"assistant\") {\n\t\t\tconst text = msg.content\n\t\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (text) return text;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nexport function getResultFinalOutput(result: SingleResult): string {\n\treturn result.finalOutput ?? getFinalOutput(result.messages);\n}\n\nexport function isResultError(result: SingleResult): boolean {\n\treturn (\n\t\t(result.exitCode !== 0 && result.exitCode !== -1) ||\n\t\tresult.timedOut === true ||\n\t\tresult.stopReason === \"timeout\" ||\n\t\tresult.stopReason === \"error\" ||\n\t\tresult.stopReason === \"aborted\"\n\t);\n}\n\nexport function formatResultFailure(result: SingleResult): string {\n\tconst error = result.errorMessage || result.stderr.trim();\n\tconst output = getResultFinalOutput(result);\n\tconst sections = [error];\n\tif (result.timeoutSummary) sections.push(`Timed-out work summary:\\n${result.timeoutSummary}`);\n\telse if (output) sections.push(`Partial output:\\n${output}`);\n\tif (result.partialOutput && result.partialOutput !== output) {\n\t\tsections.push(`Partial output before finalization:\\n${result.partialOutput}`);\n\t}\n\tif (result.termination && !result.timeoutSummary) {\n\t\tsections.push(\n\t\t\t`Termination checkpoint:\\n${formatTimeoutCheckpoint(result.termination.checkpoint)}`,\n\t\t);\n\t}\n\tif (result.timeoutSummaryError) {\n\t\tsections.push(`Summary finalization failed: ${result.timeoutSummaryError}`);\n\t}\n\treturn truncateUtf8(\n\t\tsections.filter(Boolean).join(\"\\n\\n\") || \"(no output)\",\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n}\n", "import type { SingleResult } from \"./runner.js\";\nimport {\n\tformatResultFailure as formatBaseResultFailure,\n\tgetResultFinalOutput as getBaseResultFinalOutput,\n\tisResultError as isBaseResultError,\n} from \"./runner-result.js\";\n\nexport function getResultFinalOutput(result: SingleResult): string {\n\treturn getBaseResultFinalOutput(result);\n}\n\nexport function isResultError(result: SingleResult): boolean {\n\treturn (\n\t\tisBaseResultError(result) ||\n\t\tresult.resultContractInvalid === true ||\n\t\t(result.outcome !== undefined &&\n\t\t\tresult.outcome.status !== \"completed\" &&\n\t\t\tresult.outcome.status !== \"partial\")\n\t);\n}\n\nexport function formatResultFailure(result: SingleResult): string {\n\tconst contractError = result.resultContractInvalid\n\t\t? `Subagent returned an invalid ${result.resultFormat ?? \"structured\"} result contract`\n\t\t: result.outcome && ![\"completed\", \"partial\"].includes(result.outcome.status)\n\t\t\t? `Subagent outcome ${result.outcome.status}${result.outcome.reasonCode ? ` (${result.outcome.reasonCode})` : \"\"}; recovery: ${result.outcome.recoveryActions.join(\", \") || \"none\"}`\n\t\t\t: undefined;\n\treturn contractError\n\t\t? formatBaseResultFailure({ ...result, errorMessage: contractError })\n\t\t: formatBaseResultFailure(result);\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAKO,SAAS,eAAe,UAA6B;AAC3D,WAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,KAAK,SAAS,aAAa;AAC9B,YAAM,OAAO,IAAI,QACf,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,IAAI;AACX,UAAI,KAAM,QAAO;AAAA,IAClB;AAAA,EACD;AACA,SAAO;AACR;AAEO,SAAS,qBAAqB,QAA8B;AAClE,SAAO,OAAO,eAAe,eAAe,OAAO,QAAQ;AAC5D;AAEO,SAAS,cAAc,QAA+B;AAC5D,SACE,OAAO,aAAa,KAAK,OAAO,aAAa,MAC9C,OAAO,aAAa,QACpB,OAAO,eAAe,aACtB,OAAO,eAAe,WACtB,OAAO,eAAe;AAExB;AAEO,SAAS,oBAAoB,QAA8B;AACjE,QAAM,QAAQ,OAAO,gBAAgB,OAAO,OAAO,KAAK;AACxD,QAAM,SAAS,qBAAqB,MAAM;AAC1C,QAAM,WAAW,CAAC,KAAK;AACvB,MAAI,OAAO,eAAgB,UAAS,KAAK;AAAA,EAA4B,OAAO,cAAc,EAAE;AAAA,WACnF,OAAQ,UAAS,KAAK;AAAA,EAAoB,MAAM,EAAE;AAC3D,MAAI,OAAO,iBAAiB,OAAO,kBAAkB,QAAQ;AAC5D,aAAS,KAAK;AAAA,EAAwC,OAAO,aAAa,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,eAAe,CAAC,OAAO,gBAAgB;AACjD,aAAS;AAAA,MACR;AAAA,EAA4B,wBAAwB,OAAO,YAAY,UAAU,CAAC;AAAA,IACnF;AAAA,EACD;AACA,MAAI,OAAO,qBAAqB;AAC/B,aAAS,KAAK,gCAAgC,OAAO,mBAAmB,EAAE;AAAA,EAC3E;AACA,SAAO;AAAA,IACN,SAAS,OAAO,OAAO,EAAE,KAAK,MAAM,KAAK;AAAA,IACzC;AAAA,EACD,EAAE;AACH;;;AC/CO,SAASA,sBAAqB,QAA8B;AAClE,SAAO,qBAAyB,MAAM;AACvC;AAEO,SAASC,eAAc,QAA+B;AAC5D,SACC,cAAkB,MAAM,KACxB,OAAO,0BAA0B,QAChC,OAAO,YAAY,UACnB,OAAO,QAAQ,WAAW,eAC1B,OAAO,QAAQ,WAAW;AAE7B;AAEO,SAASC,qBAAoB,QAA8B;AACjE,QAAM,gBAAgB,OAAO,wBAC1B,gCAAgC,OAAO,gBAAgB,YAAY,qBACnE,OAAO,WAAW,CAAC,CAAC,aAAa,SAAS,EAAE,SAAS,OAAO,QAAQ,MAAM,IACzE,oBAAoB,OAAO,QAAQ,MAAM,GAAG,OAAO,QAAQ,aAAa,KAAK,OAAO,QAAQ,UAAU,MAAM,EAAE,eAAe,OAAO,QAAQ,gBAAgB,KAAK,IAAI,KAAK,MAAM,KAChL;AACJ,SAAO,gBACJ,oBAAwB,EAAE,GAAG,QAAQ,cAAc,cAAc,CAAC,IAClE,oBAAwB,MAAM;AAClC;",
6
- "names": ["getResultFinalOutput", "isResultError", "formatResultFailure"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/stateful-agent-view.ts", "../../src/stateful-config.ts", "../../src/stateful-registration.ts", "../../src/stateful-guidance.ts", "../../src/stateful-render.ts", "../../src/stateful-tool-params.ts"],
4
- "sourcesContent": ["import { MAX_TOOL_MESSAGE_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { ManagedAgent } from \"./registry.js\";\n\nexport function formatStatefulAgentLine(agent: ManagedAgent, now = Date.now()): string {\n\tconst elapsedSeconds = Math.max(0, Math.floor((now - agent.updatedAt) / 1000));\n\tconst actions =\n\t\tagent.state === \"running\" || agent.state === \"starting\"\n\t\t\t? \"interrupt, close\"\n\t\t\t: agent.state === \"closed\"\n\t\t\t\t? \"inspect\"\n\t\t\t\t: \"send, close\";\n\tconst task = agent.currentTask ? ` \u2014 ${sanitizeStatusLine(agent.currentTask, 80)}` : \"\";\n\tconst unread = agent.mailbox.filter((message) => !message.readAt).length;\n\tconst indent = \" \".repeat(agent.depth);\n\tconst thinking = agent.thinkingLevel ? ` thinking:${agent.thinkingLevel}` : \"\";\n\tconst timeout = agent.currentTimeoutMs ?? agent.timeoutMs;\n\tconst timeoutText = timeout ? ` timeout:${timeout}ms` : \"\";\n\tconst idleTimeout = agent.currentIdleTimeoutMs ?? agent.idleTimeoutMs;\n\tconst idleText = idleTimeout ? ` idle:${idleTimeout}ms` : \"\";\n\tconst maxTurns = agent.currentMaxTurns ?? agent.maxTurns;\n\tconst turnsText = maxTurns ? ` turns:${maxTurns}` : \"\";\n\tconst maxToolCalls = agent.currentMaxToolCalls ?? agent.maxToolCalls;\n\tconst toolsText = maxToolCalls ? ` tools:${maxToolCalls}` : \"\";\n\tconst transport = agent.telemetry?.transport ? ` transport:${agent.telemetry.transport}` : \"\";\n\tconst phase = agent.telemetry?.phase ? ` phase:${agent.telemetry.phase}` : \"\";\n\tconst queued = agent.telemetry?.queuePosition ? ` queue:${agent.telemetry.queuePosition}` : \"\";\n\treturn `${indent}${sanitizeStatusLine(agent.taskPath ?? agent.id, 256)} (${sanitizeStatusLine(agent.id, 128)}) ${sanitizeStatusLine(agent.agent, 128)} ${agent.state} ${elapsedSeconds}s${thinking}${timeoutText}${idleText}${turnsText}${toolsText}${transport}${phase}${queued} unread:${unread} [${actions}]${task}`;\n}\n\nexport function summarizeStatefulAgent(agent: ManagedAgent) {\n\treturn {\n\t\tid: agent.id,\n\t\ttaskName: agent.taskName,\n\t\ttaskPath: agent.taskPath,\n\t\tagent: agent.agent,\n\t\tparentId: agent.parentId,\n\t\trootId: agent.rootId,\n\t\tdepth: agent.depth,\n\t\tchildren: [...agent.children],\n\t\tstate: agent.state,\n\t\tcreatedAt: agent.createdAt,\n\t\tupdatedAt: agent.updatedAt,\n\t\tcwd: agent.cwd,\n\t\tworkspaceMode: agent.workspaceMode ?? \"shared\",\n\t\tthinkingLevel: agent.thinkingLevel,\n\t\ttimeoutMs: agent.timeoutMs,\n\t\tcurrentTimeoutMs: agent.currentTimeoutMs,\n\t\tidleTimeoutMs: agent.idleTimeoutMs,\n\t\tcurrentIdleTimeoutMs: agent.currentIdleTimeoutMs,\n\t\tmaxTurns: agent.maxTurns,\n\t\tcurrentMaxTurns: agent.currentMaxTurns,\n\t\tmaxToolCalls: agent.maxToolCalls,\n\t\tcurrentMaxToolCalls: agent.currentMaxToolCalls,\n\t\tcurrentTask: agent.currentTask\n\t\t\t? truncateUtf8(agent.currentTask, MAX_TOOL_MESSAGE_BYTES).text\n\t\t\t: undefined,\n\t\thistoryCount: agent.history.length,\n\t\tunreadMessages: agent.mailbox.filter((message) => !message.readAt).length,\n\t\tcontext: {\n\t\t\tturns: agent.contextTurns ?? 0,\n\t\t\tsources: agent.contextSourceIds?.length ?? 0,\n\t\t\tbytes: agent.contextBytes ?? 0,\n\t\t\ttruncated: agent.contextTruncated === true,\n\t\t},\n\t\tresultFormat: agent.resultFormat ?? \"text\",\n\t\tstructuredResult: agent.structuredResult,\n\t\ttermination: agent.termination,\n\t\toutcome: agent.outcome,\n\t\texecutionPlan: agent.executionPlan,\n\t\tcapabilityGrant: agent.capabilityGrant,\n\t\tsemanticCompatibility: agent.semanticCompatibility,\n\t\tsemanticSnapshotDigest: agent.semanticSnapshot?.digest,\n\t\ttelemetry: agent.telemetry,\n\t\terror: agent.error ? truncateUtf8(agent.error, MAX_TOOL_MESSAGE_BYTES).text : undefined,\n\t\ttarget: agent.target,\n\t\tpolicy: agent.policy,\n\t};\n}\n\nfunction sanitizeStatusLine(value: string, maxLength: number): string {\n\treturn (\n\t\tvalue\n\t\t\t.slice(0, maxLength)\n\t\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Escape untrusted terminal controls.\n\t\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/gu, \" \")\n\t\t\t.replace(/\\s+/gu, \" \")\n\t\t\t.trim()\n\t);\n}\n", "import type { CompletionDelivery, SubagentTransportKind } from \"./agents/types.js\";\n\nexport function resolveStatefulTransportKind(\n\tvalue: SubagentTransportKind | undefined,\n): SubagentTransportKind {\n\treturn value ?? \"subprocess\";\n}\n\nexport function resolveCompletionDelivery(\n\tvalue: CompletionDelivery | undefined,\n): CompletionDelivery {\n\treturn value ?? \"next-turn\";\n}\n", "/**\n * Stateful registration remains one lifecycle owner so session replacement, persistence,\n * capability revocation, workspace cleanup, and completion delivery cannot reorder.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { defineTool, type ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { Type } from \"typebox\";\nimport {\n\ttype AgentScope,\n\ttype CompletionDelivery,\n\tisThinkingLevel,\n\ttype SubagentRuntimeSettings,\n\ttype SubagentSettings,\n\ttype SubagentTransportKind,\n\tTHINKING_LEVELS,\n} from \"./agents/types.js\";\nimport type { CompletionDeliveryBroker } from \"./completion-delivery.js\";\nimport type { ContextMode } from \"./context.js\";\nimport type { CreateStatefulTransportOptions } from \"./create-stateful-transport.js\";\nimport { DelegationContractSchema } from \"./delegation-contract.js\";\nimport type { ChildSessionFactory, ParentRuntimeSnapshot } from \"./in-process-transport.js\";\nimport {\n\tDEFAULT_MAX_CONTEXT_BYTES,\n\tMAX_SUBAGENT_TIMEOUT_MS,\n\tMAX_TOOL_MESSAGE_BYTES,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport type { AgentPersistence } from \"./persistence.js\";\nimport type {\n\tAgentRegistry,\n\tAgentRunInspectionDetail,\n\tAgentRunInspectionSummary,\n\tManagedAgent,\n} from \"./registry.js\";\nimport { SUBAGENT_RESULT_FORMATS, type SubagentResultFormat } from \"./result-contract.js\";\nimport { DEFAULT_DELEGATION_CWD_POLICY } from \"./settings/inspection.js\";\nimport { readSubagentSettings } from \"./settings-reader.js\";\nimport {\n\tassertSpawnIdempotencyKey,\n\tMAX_SPAWN_IDEMPOTENCY_KEY_LENGTH,\n} from \"./spawn-idempotency.js\";\nimport { summarizeStatefulAgent } from \"./stateful-agent-view.js\";\nimport { resolveCompletionDelivery, resolveStatefulTransportKind } from \"./stateful-config.js\";\nimport { createSpawnPromptGuidelines } from \"./stateful-guidance.js\";\nimport { assertCurrentSpawn, waitForOwnedSpawn } from \"./stateful-lifecycle.js\";\nimport { resolveStatefulLimits, type StatefulLimits } from \"./stateful-limits.js\";\nimport { createStatefulToolRenderer } from \"./stateful-render.js\";\nimport { confirmProjectAgent } from \"./stateful-safety.js\";\nimport {\n\tMailboxParamsSchema,\n\tManageParamsSchema,\n\tvalidateMailboxParams,\n\tvalidateManageParams,\n} from \"./stateful-tool-params.js\";\nimport { MAX_TASK_NAME_LENGTH } from \"./task-path.js\";\nimport { MAX_SUBAGENT_TOOL_CALLS, MAX_SUBAGENT_TURNS } from \"./turn-budget.js\";\nimport type { WorkspaceManager } from \"./workspace.js\";\n\ntype CwdPolicyModule = typeof import(\"./cwd-policy.js\");\ntype StateLifecycleModule = typeof import(\"./stateful-lifecycle.js\");\n\ntype StatefulSessionModules = {\n\tbroker: typeof import(\"./completion-delivery.js\");\n\tpeerCommunication: typeof import(\"./peer-communication.js\");\n\tcontext: typeof import(\"./context.js\");\n\ttransport: typeof import(\"./create-stateful-transport.js\");\n\tcwdPolicy: CwdPolicyModule;\n\tpersistence: typeof import(\"./persistence.js\");\n\tregistry: typeof import(\"./registry.js\");\n\tlifecycle: StateLifecycleModule;\n};\n\ntype StatefulSpawnModules = {\n\tagents: typeof import(\"./agents/discovery.js\");\n\tcapabilityGrant: typeof import(\"./capability-grant.js\");\n\tcontext: typeof import(\"./context.js\");\n\tcwdPolicy: CwdPolicyModule;\n\tdelegationContract: typeof import(\"./delegation-contract.js\");\n\truntimePolicy: typeof import(\"./execution/runtime-policy.js\");\n\tretainedSemanticState: typeof import(\"./retained-semantic-state.js\");\n\tsemanticSnapshot: typeof import(\"./semantic-snapshot.js\");\n\tspawnIdempotency: typeof import(\"./spawn-idempotency.js\");\n};\n\nlet statefulSessionModules: Promise<StatefulSessionModules> | undefined;\nlet statefulSpawnModules: Promise<StatefulSpawnModules> | undefined;\nlet workspaceModule: Promise<typeof import(\"./workspace.js\")> | undefined;\n\nfunction loadStatefulSessionModules(): Promise<StatefulSessionModules> {\n\tstatefulSessionModules ??= Promise.all([\n\t\timport(\"./completion-delivery.js\"),\n\t\timport(\"./peer-communication.js\"),\n\t\timport(\"./context.js\"),\n\t\timport(\"./create-stateful-transport.js\"),\n\t\timport(\"./cwd-policy.js\"),\n\t\timport(\"./persistence.js\"),\n\t\timport(\"./registry.js\"),\n\t\timport(\"./stateful-lifecycle.js\"),\n\t])\n\t\t.then(\n\t\t\t([\n\t\t\t\tbroker,\n\t\t\t\tpeerCommunication,\n\t\t\t\tcontext,\n\t\t\t\ttransport,\n\t\t\t\tcwdPolicy,\n\t\t\t\tpersistence,\n\t\t\t\tregistry,\n\t\t\t\tlifecycle,\n\t\t\t]) => ({\n\t\t\t\tbroker,\n\t\t\t\tpeerCommunication,\n\t\t\t\tcontext,\n\t\t\t\ttransport,\n\t\t\t\tcwdPolicy,\n\t\t\t\tpersistence,\n\t\t\t\tregistry,\n\t\t\t\tlifecycle,\n\t\t\t}),\n\t\t)\n\t\t.catch((error: unknown) => {\n\t\t\tstatefulSessionModules = undefined;\n\t\t\tthrow error;\n\t\t});\n\treturn statefulSessionModules;\n}\n\nfunction loadStatefulSpawnModules(): Promise<StatefulSpawnModules> {\n\tstatefulSpawnModules ??= Promise.all([\n\t\timport(\"./agents/discovery.js\"),\n\t\timport(\"./capability-grant.js\"),\n\t\timport(\"./context.js\"),\n\t\timport(\"./cwd-policy.js\"),\n\t\timport(\"./delegation-contract.js\"),\n\t\timport(\"./execution/runtime-policy.js\"),\n\t\timport(\"./retained-semantic-state.js\"),\n\t\timport(\"./semantic-snapshot.js\"),\n\t\timport(\"./spawn-idempotency.js\"),\n\t])\n\t\t.then(\n\t\t\t([\n\t\t\t\tagents,\n\t\t\t\tcapabilityGrant,\n\t\t\t\tcontext,\n\t\t\t\tcwdPolicy,\n\t\t\t\tdelegationContract,\n\t\t\t\truntimePolicy,\n\t\t\t\tretainedSemanticState,\n\t\t\t\tsemanticSnapshot,\n\t\t\t\tspawnIdempotency,\n\t\t\t]) => ({\n\t\t\t\tagents,\n\t\t\t\tcapabilityGrant,\n\t\t\t\tcontext,\n\t\t\t\tcwdPolicy,\n\t\t\t\tdelegationContract,\n\t\t\t\truntimePolicy,\n\t\t\t\tretainedSemanticState,\n\t\t\t\tsemanticSnapshot,\n\t\t\t\tspawnIdempotency,\n\t\t\t}),\n\t\t)\n\t\t.catch((error: unknown) => {\n\t\t\tstatefulSpawnModules = undefined;\n\t\t\tthrow error;\n\t\t});\n\treturn statefulSpawnModules;\n}\n\nasync function loadWorkspaceModule(): Promise<typeof import(\"./workspace.js\")> {\n\tworkspaceModule ??= import(\"./workspace.js\").catch((error: unknown) => {\n\t\tworkspaceModule = undefined;\n\t\tthrow error;\n\t});\n\treturn workspaceModule;\n}\n\nconst ContextModeSchema = Type.Union([\n\tStringEnum([\"none\", \"all\", \"summary\"] as const),\n\tType.Number({ minimum: 1, description: \"Include the most recent N user turns.\" }),\n]);\nconst ScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription:\n\t\t'Per-invocation custom agent scope for this spawn. Default: \"user\". Use \"project\" for project-local agents or \"both\" for user and project agents; the selected scope is retained for follow-ups.',\n\tdefault: \"user\",\n});\nconst StatefulThinkingLevelSchema = StringEnum(THINKING_LEVELS, {\n\tdescription:\n\t\t\"Optional requested Pi thinking level selected for this task difficulty; retained for every turn of the spawned agent.\",\n});\nconst StatefulTimeoutSchema = Type.Integer({\n\tminimum: 1,\n\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\tdescription:\n\t\t\"Work deadline in milliseconds selected for the task difficulty. On expiry, Pi aborts the work and makes one separately bounded summary attempt. Retained as the agent default.\",\n});\nconst StatefulTurnLimitFields = {\n\tidleTimeoutMs: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\t\t\tdescription:\n\t\t\t\t\"Maximum milliseconds without a completed assistant turn or tool result; retained as the agent default.\",\n\t\t}),\n\t),\n\tmaxTurns: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TURNS,\n\t\t\tdescription: \"Maximum unfinished assistant turns; retained as the agent default.\",\n\t\t}),\n\t),\n\tmaxToolCalls: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: MAX_SUBAGENT_TOOL_CALLS,\n\t\t\tdescription: \"Maximum tool calls; retained as the agent default.\",\n\t\t}),\n\t),\n};\nexport interface StatefulSubagentDependencies {\n\tblockingEnabled?: boolean;\n\tcreateInProcessSession?: ChildSessionFactory;\n\tworkspaceManager?: WorkspaceManager;\n\tsettings?: SubagentRuntimeSettings;\n\tgetSettings?: () => SubagentSettings | undefined;\n\tloadTransport?: CreateStatefulTransportOptions[\"loadTransport\"];\n}\n\nexport interface StatefulSubagentRuntimeStatus {\n\tenabled: boolean;\n\tinitialized: boolean;\n\ttransport: SubagentTransportKind;\n\tcompletionDelivery: CompletionDelivery;\n\tlimits: StatefulLimits;\n\tactiveAgents: number;\n\tretainedAgents: number;\n}\n\nexport interface StatefulSubagentController {\n\tgetCompletionDelivery(): CompletionDelivery;\n\tsetCompletionDelivery(value: CompletionDelivery): void;\n\tsetAgentCatalog(value: string): void;\n\trefreshSettingsGuidance(): void;\n\tgetRuntimeStatus(): StatefulSubagentRuntimeStatus;\n\tlistAgents(includeClosed?: boolean): ManagedAgent[];\n\tlistRunInspection(includeClosed?: boolean): AgentRunInspectionSummary[];\n\tgetRunInspection(agentId: string): AgentRunInspectionDetail | undefined;\n\tclearAgents(): Promise<number>;\n}\n\ninterface StatefulActionToolResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Record<string, unknown>;\n}\n\nexport function registerStatefulSubagents(\n\tpi: ExtensionAPI,\n\tdependencies: StatefulSubagentDependencies = {},\n): StatefulSubagentController {\n\tconst settings = Object.hasOwn(dependencies, \"settings\")\n\t\t? (dependencies.settings ?? {})\n\t\t: (readSubagentSettings()?.stateful ?? {});\n\tconst blockingEnabled = dependencies.blockingEnabled !== false;\n\tconst enabled = settings.enabled !== false;\n\tconst transportKind = resolveStatefulTransportKind(settings.transport);\n\tlet completionDelivery = resolveCompletionDelivery(settings.completionDelivery);\n\tlet runtimeLimits = resolveStatefulLimits(settings);\n\tlet agentCatalog = \"\";\n\tlet completionBroker: CompletionDeliveryBroker | undefined;\n\tlet peerBroker: import(\"./peer-communication.js\").PeerCommunicationBroker | undefined;\n\tlet refreshSpawnToolRegistration: (() => void) | undefined;\n\tlet registry: AgentRegistry | undefined;\n\tlet persistence: AgentPersistence | undefined;\n\tlet sweepTimer: NodeJS.Timeout | undefined;\n\tlet runtimeGeneration = 0;\n\tlet runtimeTransition: Promise<void> = Promise.resolve();\n\tlet workspaceManager = dependencies.workspaceManager;\n\tconst getWorkspaceManager = async () => {\n\t\tif (workspaceManager) return workspaceManager;\n\t\tconst { WorkspaceManager } = await loadWorkspaceModule();\n\t\tworkspaceManager = new WorkspaceManager();\n\t\treturn workspaceManager;\n\t};\n\tconst isolatedAgents = new Map<string, string>();\n\tconst seenMessageIds = new Set<string>();\n\ttype PendingIdempotentSpawn = {\n\t\tgeneration: number;\n\t\trequestHash: string;\n\t\tpromise: Promise<ManagedAgent>;\n\t};\n\tconst pendingIdempotentSpawns = new Map<string, PendingIdempotentSpawn>();\n\tconst parentRuntime: ParentRuntimeSnapshot = { model: undefined, thinkingLevel: \"off\" };\n\tconst getCurrentSettings = () =>\n\t\tdependencies.getSettings ? dependencies.getSettings() : readSubagentSettings();\n\tconst getCurrentStatefulSettings = () =>\n\t\tdependencies.getSettings ? (dependencies.getSettings()?.stateful ?? {}) : settings;\n\n\tconst clearAgents = async (): Promise<number> => {\n\t\tconst generation = runtimeGeneration;\n\t\tconst currentRegistry = registry;\n\t\tconst currentPersistence = persistence;\n\t\tif (!currentRegistry) return 0;\n\t\tconst currentWorkspaceManager = await getWorkspaceManager();\n\t\tconst count = currentRegistry.list().length;\n\t\tconst clear = async () => {\n\t\t\tawait currentRegistry.closeAll();\n\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\tawait currentWorkspaceManager.cleanupAll();\n\t\t\tisolatedAgents.clear();\n\t\t\tseenMessageIds.clear();\n\t\t\tawait currentPersistence?.delete();\n\t\t};\n\t\tconst transition = runtimeTransition.then(clear, clear);\n\t\truntimeTransition = transition.catch(() => undefined);\n\t\tawait transition;\n\t\treturn count;\n\t};\n\tconst controller: StatefulSubagentController = {\n\t\tgetCompletionDelivery() {\n\t\t\treturn completionDelivery;\n\t\t},\n\t\tsetCompletionDelivery(value) {\n\t\t\tcompletionDelivery = value;\n\t\t\tcompletionBroker?.setDelivery(value);\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t},\n\t\tsetAgentCatalog(value) {\n\t\t\tagentCatalog = value;\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t},\n\t\trefreshSettingsGuidance() {\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t},\n\t\tgetRuntimeStatus() {\n\t\t\tconst counts = registry?.inspectionCounts() ?? { activeAgents: 0, retainedAgents: 0 };\n\t\t\treturn {\n\t\t\t\tenabled,\n\t\t\t\tinitialized: registry !== undefined,\n\t\t\t\ttransport: transportKind,\n\t\t\t\tcompletionDelivery,\n\t\t\t\tlimits: { ...runtimeLimits },\n\t\t\t\t...counts,\n\t\t\t};\n\t\t},\n\t\tlistAgents(includeClosed = false) {\n\t\t\treturn registry?.list(includeClosed) ?? [];\n\t\t},\n\t\tlistRunInspection(includeClosed = false) {\n\t\t\treturn registry?.listInspection(includeClosed) ?? [];\n\t\t},\n\t\tgetRunInspection(agentId) {\n\t\t\treturn registry?.getInspection(agentId);\n\t\t},\n\t\tclearAgents,\n\t};\n\tif (!enabled) return controller;\n\n\tconst requireRegistry = () => {\n\t\tif (!registry) throw new Error(\"Stateful subagents are not initialized for this session\");\n\t\treturn registry;\n\t};\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tconst generation = ++runtimeGeneration;\n\t\tcompletionBroker?.close();\n\t\tcompletionBroker = undefined;\n\t\tconst previousPeerBroker = peerBroker;\n\t\tpeerBroker = undefined;\n\t\tif (sweepTimer) clearInterval(sweepTimer);\n\t\tsweepTimer = undefined;\n\t\tconst previousRegistry = registry;\n\t\tregistry = undefined;\n\t\tpersistence = undefined;\n\t\tisolatedAgents.clear();\n\t\tseenMessageIds.clear();\n\t\tpendingIdempotentSpawns.clear();\n\t\tconst initialize = async () => {\n\t\t\tawait previousPeerBroker?.close();\n\t\t\tconst currentWorkspaceManager = await getWorkspaceManager();\n\t\t\tconst modules = await loadStatefulSessionModules();\n\t\t\tconst cleanupErrors = await modules.lifecycle.disposeStatefulRuntime(\n\t\t\t\tpreviousRegistry,\n\t\t\t\tcurrentWorkspaceManager,\n\t\t\t);\n\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\tif (cleanupErrors.length > 0 && ctx.hasUI) {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`Previous subagent runtime cleanup reported ${cleanupErrors.length} error(s).`,\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tparentRuntime.model = ctx.model;\n\t\t\tparentRuntime.thinkingLevel = normalizeRuntimeThinkingLevel(pi.getThinkingLevel());\n\t\t\tconst sessionSettings = getCurrentStatefulSettings();\n\t\t\tconst nextLimits = resolveStatefulLimits(sessionSettings);\n\t\t\tconst owner =\n\t\t\t\tctx.sessionManager.getSessionId?.() ??\n\t\t\t\tctx.sessionManager.getSessionFile?.() ??\n\t\t\t\t`ephemeral:${ctx.cwd}`;\n\t\t\tconst sessionPersistence = new modules.persistence.AgentPersistence(owner, {\n\t\t\t\tretentionDays: sessionSettings.retentionDays,\n\t\t\t\tmaxStoredAgents: nextLimits.maxStoredAgents,\n\t\t\t});\n\t\t\tlet nextRegistry: AgentRegistry;\n\t\t\tlet transport: import(\"./transport.js\").SubagentTransport;\n\t\t\tconst sessionBroker = new modules.broker.CompletionDeliveryBroker(\n\t\t\t\tpi,\n\t\t\t\tctx,\n\t\t\t\tcompletionDelivery,\n\t\t\t\t{\n\t\t\t\t\tonDeliveryError: (error) => {\n\t\t\t\t\t\tif (!ctx.hasUI) return;\n\t\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tctx.ui.notify(`Subagent completion delivery failed: ${reason}`, \"warning\");\n\t\t\t\t\t},\n\t\t\t\t\tonAcknowledged: (completions, deliveredAt) => {\n\t\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\t\tfor (const completion of completions) {\n\t\t\t\t\t\t\tvoid nextRegistry\n\t\t\t\t\t\t\t\t.markCompletionDelivered(completion.completionId, deliveredAt)\n\t\t\t\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\t\t\t\tif (!ctx.hasUI || generation !== runtimeGeneration) return;\n\t\t\t\t\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\t\t\t\tctx.ui.notify(`Subagent completion acknowledgement failed: ${reason}`, \"warning\");\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst sessionPeerBroker = new modules.peerCommunication.PeerCommunicationBroker({\n\t\t\t\tgetRegistry: () => nextRegistry,\n\t\t\t\tsendRoot: ({ message, senderPath }) => {\n\t\t\t\t\tpi.appendEntry(\"pi-subagent-peer-message\", {\n\t\t\t\t\t\tmessageId: message.id,\n\t\t\t\t\t\tsenderId: message.senderId,\n\t\t\t\t\t\tsenderPath,\n\t\t\t\t\t\tcontent: modules.context.redactPrivateText(message.content),\n\t\t\t\t\t});\n\t\t\t\t\tpi.sendMessage(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcustomType: \"pi-subagent-peer-message\",\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\"Message Type: SUBAGENT_PEER_MESSAGE\",\n\t\t\t\t\t\t\t\t\"Protocol: pi-subagents:v1\",\n\t\t\t\t\t\t\t\t`Message ID: ${message.id}`,\n\t\t\t\t\t\t\t\t`Sender ID: ${message.senderId}`,\n\t\t\t\t\t\t\t\t`Sender Path: ${senderPath}`,\n\t\t\t\t\t\t\t\t\"Payload:\",\n\t\t\t\t\t\t\t\tmessage.content,\n\t\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\tdetails: { ...message, senderPath },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ deliverAs: \"steer\", triggerTurn: false },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdispatch: (recipient, message) => transport.deliverMessage?.(recipient, message) ?? false,\n\t\t\t});\n\t\t\ttransport = modules.transport.createStatefulTransport({\n\t\t\t\tkind: transportKind,\n\t\t\t\tmodelRegistry: ctx.modelRegistry,\n\t\t\t\tgetParentRuntime: () => ({ ...parentRuntime }),\n\t\t\t\tgetSettings: getCurrentSettings,\n\t\t\t\tcreateInProcessSession: dependencies.createInProcessSession,\n\t\t\t\tpeerRuntime: sessionPeerBroker,\n\t\t\t\tloadTransport: dependencies.loadTransport,\n\t\t\t});\n\t\t\tnextRegistry = new modules.registry.AgentRegistry(transport, {\n\t\t\t\tmaxAgents: nextLimits.maxAgents,\n\t\t\t\tmaxActiveTurns: nextLimits.maxActiveTurns,\n\t\t\t\tmaxDepth: nextLimits.maxDepth,\n\t\t\t\tmaxChildrenPerAgent: nextLimits.maxChildrenPerAgent,\n\t\t\t\tmaxMailboxMessages: sessionSettings.maxMailboxMessages,\n\t\t\t\tmaxMailboxMessageBytes: sessionSettings.maxMailboxMessageBytes,\n\t\t\t\tidleTtlMs: sessionSettings.idleTtlMs,\n\t\t\t\tonChange: async (agents) => {\n\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\tawait sessionPersistence.save(agents);\n\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\tfor (const agent of agents) {\n\t\t\t\t\t\tfor (const message of agent.mailbox) {\n\t\t\t\t\t\t\tif (seenMessageIds.has(message.id)) continue;\n\t\t\t\t\t\t\tseenMessageIds.add(message.id);\n\t\t\t\t\t\t\tpi.appendEntry(\"pi-subagent-message\", {\n\t\t\t\t\t\t\t\tsenderId: message.senderId,\n\t\t\t\t\t\t\t\trecipientId: message.recipientId,\n\t\t\t\t\t\t\t\tcontent: modules.context.redactPrivateText(message.content).slice(0, 160),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tagent.state === \"running\" &&\n\t\t\t\t\t\t\t\tmessage.deduplicationKey?.startsWith(\"completion:\")\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait transport.deliverMessage?.(agent, {\n\t\t\t\t\t\t\t\t\t\t...message,\n\t\t\t\t\t\t\t\t\t\tcontent: modules.context.redactPrivateText(message.content),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// The durable parent mailbox remains the retry path for the next turn.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (generation !== runtimeGeneration) return;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonTurnComplete: (completion) => {\n\t\t\t\t\tif (generation === runtimeGeneration && completion.recipientId === \"root\") {\n\t\t\t\t\t\tsessionBroker.enqueue(completion);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst persisted = sessionPersistence.load();\n\t\t\tconst orphanCleanupFailures = await modules.lifecycle.cleanupPersistedWorkspaces(\n\t\t\t\tpersisted,\n\t\t\t\tcurrentWorkspaceManager,\n\t\t\t);\n\t\t\tif (generation !== runtimeGeneration) {\n\t\t\t\tsessionBroker.close();\n\t\t\t\tawait sessionPeerBroker.close();\n\t\t\t\tawait modules.lifecycle.disposeStatefulRuntime(nextRegistry, currentWorkspaceManager);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (ctx.hasUI && orphanCleanupFailures > 0) {\n\t\t\t\tctx.ui.notify(\"Some orphaned subagent worktrees could not be cleaned\", \"warning\");\n\t\t\t}\n\t\t\tconst restored = persisted\n\t\t\t\t.filter(\n\t\t\t\t\t(agent) =>\n\t\t\t\t\t\tagent.workspaceMode !== \"worktree\" &&\n\t\t\t\t\t\t((agent.agentScope !== \"project\" && agent.agentScope !== \"both\") ||\n\t\t\t\t\t\t\tctx.isProjectTrusted()),\n\t\t\t\t)\n\t\t\t\t.flatMap((agent) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst target = modules.cwdPolicy.resolveSubagentTarget({\n\t\t\t\t\t\t\tworkspace: ctx.cwd,\n\t\t\t\t\t\t\trequestedCwd: agent.cwd,\n\t\t\t\t\t\t\tcurrentProjectTrusted: ctx.isProjectTrusted(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t{ ...agent, cwd: target.cwd, target: modules.cwdPolicy.targetPolicyAudit(target) },\n\t\t\t\t\t\t];\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tfor (const agent of restored) {\n\t\t\t\tfor (const message of agent.mailbox) seenMessageIds.add(message.id);\n\t\t\t}\n\t\t\tnextRegistry.restore(restored);\n\t\t\tif (generation !== runtimeGeneration) {\n\t\t\t\tsessionBroker.close();\n\t\t\t\tawait sessionPeerBroker.close();\n\t\t\t\tawait modules.lifecycle.disposeStatefulRuntime(nextRegistry, currentWorkspaceManager);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tregistry = nextRegistry;\n\t\t\tpersistence = sessionPersistence;\n\t\t\tcompletionBroker = sessionBroker;\n\t\t\tpeerBroker = sessionPeerBroker;\n\t\t\tfor (const completion of nextRegistry.listPendingCompletions()) {\n\t\t\t\tif (completion.recipientId === \"root\") sessionBroker.enqueue(completion);\n\t\t\t}\n\t\t\truntimeLimits = nextLimits;\n\t\t\trefreshSpawnToolRegistration?.();\n\t\t\tconst sweepEveryMs = Math.max(\n\t\t\t\t1_000,\n\t\t\t\tMath.min(sessionSettings.idleTtlMs ?? 60 * 60 * 1000, 60_000),\n\t\t\t);\n\t\t\tsweepTimer = setInterval(() => {\n\t\t\t\tvoid nextRegistry.sweepExpired().catch((error: unknown) => {\n\t\t\t\t\tif (!ctx.hasUI || generation !== runtimeGeneration) return;\n\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tctx.ui.notify(`Subagent expiry cleanup failed: ${reason}`, \"warning\");\n\t\t\t\t});\n\t\t\t}, sweepEveryMs);\n\t\t\tsweepTimer.unref();\n\t\t};\n\t\tconst transition = runtimeTransition.then(initialize, initialize);\n\t\truntimeTransition = transition.catch(() => undefined);\n\t\tawait transition;\n\t});\n\n\tpi.on(\"agent_start\", () => {\n\t\tcompletionBroker?.onParentTurnStart();\n\t});\n\n\tpi.on(\"context\", (event) => {\n\t\tcompletionBroker?.onParentContext(event.messages);\n\t});\n\n\tpi.on(\"agent_settled\", () => {\n\t\tcompletionBroker?.onParentSettled();\n\t});\n\n\tpi.on(\"model_select\", (event) => {\n\t\tparentRuntime.model = event.model;\n\t});\n\n\tpi.on(\"thinking_level_select\", (event) => {\n\t\tparentRuntime.thinkingLevel = normalizeRuntimeThinkingLevel(event.level);\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\truntimeGeneration++;\n\t\tcompletionBroker?.close();\n\t\tcompletionBroker = undefined;\n\t\tconst previousPeerBroker = peerBroker;\n\t\tpeerBroker = undefined;\n\t\tif (sweepTimer) clearInterval(sweepTimer);\n\t\tsweepTimer = undefined;\n\t\tconst previousRegistry = registry;\n\t\tregistry = undefined;\n\t\tpersistence = undefined;\n\t\tisolatedAgents.clear();\n\t\tseenMessageIds.clear();\n\t\tpendingIdempotentSpawns.clear();\n\t\tconst shutdown = async () => {\n\t\t\tawait previousPeerBroker?.close();\n\t\t\tconst currentWorkspaceManager = await getWorkspaceManager();\n\t\t\tconst { disposeStatefulRuntime } = await import(\"./stateful-lifecycle.js\");\n\t\t\tconst errors = await disposeStatefulRuntime(previousRegistry, currentWorkspaceManager);\n\t\t\tif (errors.length > 0 && ctx.hasUI) {\n\t\t\t\tctx.ui.notify(`Subagent shutdown cleanup reported ${errors.length} error(s).`, \"warning\");\n\t\t\t}\n\t\t};\n\t\tconst transition = runtimeTransition.then(shutdown, shutdown);\n\t\truntimeTransition = transition.catch(() => undefined);\n\t\tawait transition;\n\t});\n\n\tconst baseSpawnDescription = () =>\n\t\t`Start an addressable background subagent with an opaque agentId and canonical taskPath, plus an optional thinking level and execution budgets chosen for the task difficulty, return immediately with an agentId, and receive its completion asynchronously. Detached capacity: ${runtimeLimits.maxAgents} retained agents, ${runtimeLimits.maxActiveTurns} active turns, ${runtimeLimits.maxChildrenPerAgent} direct children per agent, and depth ${runtimeLimits.maxDepth}. Working-directory target policy: ${dependencies.getSettings?.()?.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY}. This controls launch targets and protected project resources, not filesystem access or sandboxing.`;\n\tconst spawnTool = defineTool({\n\t\tname: \"subagent_spawn\",\n\t\tlabel: \"Spawn Subagent\",\n\t\tdescription: appendAgentCatalog(baseSpawnDescription(), agentCatalog),\n\t\tpromptSnippet: \"Start a reusable detached subagent; completion is delivered asynchronously\",\n\t\tpromptGuidelines: createSpawnPromptGuidelines(completionDelivery, blockingEnabled),\n\t\tparameters: Type.Object({\n\t\t\tagent: Type.String({ minLength: 1 }),\n\t\t\ttaskName: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tmaxLength: MAX_TASK_NAME_LENGTH,\n\t\t\t\t\tpattern: \"^[a-z0-9_]+$\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Canonical path segment for this task; use lowercase letters, digits, and underscores.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttask: Type.String({ minLength: 1, maxLength: DEFAULT_MAX_CONTEXT_BYTES }),\n\t\t\tthinkingLevel: Type.Optional(StatefulThinkingLevelSchema),\n\t\t\ttimeoutMs: Type.Optional(StatefulTimeoutSchema),\n\t\t\t...StatefulTurnLimitFields,\n\t\t\tcwd: Type.Optional(Type.String()),\n\t\t\tagentScope: Type.Optional(ScopeSchema),\n\t\t\tconfirmProjectAgents: Type.Optional(Type.Boolean({ default: true })),\n\t\t\tcontext: Type.Optional(ContextModeSchema),\n\t\t\tcontextEntryIds: Type.Optional(\n\t\t\t\tType.Array(Type.String(), { description: \"Optional selected session entry IDs.\" }),\n\t\t\t),\n\t\t\tparentId: Type.Optional(\n\t\t\t\tType.String({ description: \"Optional parent agent ID or canonical task path.\" }),\n\t\t\t),\n\t\t\tallowConcurrentWrites: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deprecated compatibility field; shared-workspace concurrency is allowed by default.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tworkspaceMode: Type.Optional(\n\t\t\t\tStringEnum([\"shared\", \"worktree\"] as const, {\n\t\t\t\t\tdescription: \"Use the shared workspace (default) or an opt-in disposable Git worktree.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tcontract: Type.Optional(DelegationContractSchema),\n\t\t\tidempotencyKey: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tmaxLength: MAX_SPAWN_IDEMPOTENCY_KEY_LENGTH,\n\t\t\t\t\tdescription: \"Reuse the same retained agent for an exact accepted spawn retry.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tresultFormat: Type.Optional(\n\t\t\t\tStringEnum(SUBAGENT_RESULT_FORMATS, {\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Use text (default), structured-v1, or the evidence-preserving structured-v2 completion contract.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\t...createStatefulToolRenderer(\"spawn\"),\n\t\tasync execute(_id, params, signal, _update, ctx) {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst capturedRegistry = registry;\n\t\t\tlet modules: StatefulSpawnModules;\n\t\t\ttry {\n\t\t\t\tmodules = await loadStatefulSpawnModules();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tlet currentWorkspaceManager: WorkspaceManager;\n\t\t\ttry {\n\t\t\t\tcurrentWorkspaceManager = await getWorkspaceManager();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst scope = (params.agentScope ?? \"user\") as AgentScope;\n\t\t\tconst resultFormat = (params.resultFormat ?? \"text\") as SubagentResultFormat;\n\t\t\tconst contract = modules.delegationContract.normalizeDelegationContract(params.contract);\n\t\t\tif (params.contract !== undefined && !contract) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"subagent_spawn contract must be a valid pi-subagents:delegation:v2 object\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tmodules.runtimePolicy.assertSubagentDepthAllowed();\n\t\t\tassertSpawnIdempotencyKey(params.idempotencyKey);\n\t\t\tconst currentSettings = getCurrentSettings();\n\t\t\tconst target = modules.cwdPolicy.resolveSubagentTarget({\n\t\t\t\tworkspace: ctx.cwd,\n\t\t\t\trequestedCwd: params.cwd,\n\t\t\t\tcurrentProjectTrusted: ctx.isProjectTrusted(),\n\t\t\t});\n\t\t\tmodules.cwdPolicy.assertDelegationTargetAllowed(\n\t\t\t\ttarget,\n\t\t\t\tcurrentSettings?.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\t);\n\t\t\tconst cwd = target.cwd;\n\t\t\tconst mode = resolveSpawnContextMode(params.context, params.contextEntryIds);\n\t\t\tconst snapshot = modules.context.buildContextSnapshot(\n\t\t\t\tctx.sessionManager.getBranch(),\n\t\t\t\tmode,\n\t\t\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t\t\t\tparams.contextEntryIds,\n\t\t\t);\n\t\t\tif ((scope === \"project\" || scope === \"both\") && !ctx.isProjectTrusted()) {\n\t\t\t\tthrow new Error(\"Project-local subagent definitions require a trusted project\");\n\t\t\t}\n\t\t\tconst resolvedAgents = modules.agents.discoverAgents(cwd, scope, currentSettings).agents;\n\t\t\tconst resolvedAgent = resolvedAgents.find((agent) => agent.name === params.agent);\n\t\t\tif (!resolvedAgent) {\n\t\t\t\tconst available = resolvedAgents.map((agent) => agent.name).join(\", \") || \"none\";\n\t\t\t\tthrow new Error(`Unknown subagent ${params.agent}. Available agents: ${available}`);\n\t\t\t}\n\t\t\tconst targetSnapshot = modules.cwdPolicy.targetPolicyAudit(target);\n\t\t\tconst { executionPlan, semanticSnapshot } =\n\t\t\t\tawait modules.retainedSemanticState.buildRetainedSemanticState({\n\t\t\t\t\tagent: resolvedAgent,\n\t\t\t\t\tcontract,\n\t\t\t\t\ttarget: targetSnapshot,\n\t\t\t\t\tcwd,\n\t\t\t\t\tworkspaceMode: params.workspaceMode === \"worktree\" ? \"worktree\" : \"shared\",\n\t\t\t\t\ttransport: transportKind,\n\t\t\t\t\tresultFormat,\n\t\t\t\t\tthinkingLevel: params.thinkingLevel,\n\t\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\t\ttaskGeneration: 1,\n\t\t\t\t});\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst requestHash = modules.spawnIdempotency.hashSpawnRequest({\n\t\t\t\tagent: params.agent,\n\t\t\t\ttaskName: params.taskName,\n\t\t\t\ttask: params.task,\n\t\t\t\tcwd,\n\t\t\t\tagentScope: scope,\n\t\t\t\tthinkingLevel: params.thinkingLevel,\n\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\tidleTimeoutMs: params.idleTimeoutMs,\n\t\t\t\tmaxTurns: params.maxTurns,\n\t\t\t\tmaxToolCalls: params.maxToolCalls,\n\t\t\t\tparentId: params.parentId,\n\t\t\t\tcontext: snapshot.text || undefined,\n\t\t\t\tcontextSourceIds: snapshot.sourceIds,\n\t\t\t\tworkspaceMode: params.workspaceMode ?? \"shared\",\n\t\t\t\tallowConcurrentWrites: params.allowConcurrentWrites ?? false,\n\t\t\t\tcontract,\n\t\t\t\tresultFormat,\n\t\t\t});\n\t\t\tif (!capturedRegistry) {\n\t\t\t\tthrow new Error(\"Stateful subagents are not initialized for this session\");\n\t\t\t}\n\t\t\tconst ownedRegistry = capturedRegistry;\n\t\t\tconst retained = ownedRegistry.findBySpawnIdempotencyKey(params.idempotencyKey, requestHash);\n\t\t\tif (retained) return result(retained, `Reused ${retained.agent} as ${retained.id}.`);\n\t\t\tconst foundPending = params.idempotencyKey\n\t\t\t\t? pendingIdempotentSpawns.get(params.idempotencyKey)\n\t\t\t\t: undefined;\n\t\t\tif (\n\t\t\t\tparams.idempotencyKey &&\n\t\t\t\tfoundPending &&\n\t\t\t\tfoundPending.generation !== generation &&\n\t\t\t\tpendingIdempotentSpawns.get(params.idempotencyKey) === foundPending\n\t\t\t) {\n\t\t\t\tpendingIdempotentSpawns.delete(params.idempotencyKey);\n\t\t\t}\n\t\t\tconst pending = foundPending?.generation === generation ? foundPending : undefined;\n\t\t\tif (pending) {\n\t\t\t\tif (pending.requestHash !== requestHash) {\n\t\t\t\t\tthrow new Error(\"The subagent_spawn idempotencyKey is pending with different parameters\");\n\t\t\t\t}\n\t\t\t\tconst agent = await waitForOwnedSpawn(pending.promise, signal);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn result(agent, `Reused ${agent.agent} as ${agent.id}.`);\n\t\t\t}\n\t\t\tlet resolvePending: ((agent: ManagedAgent) => void) | undefined;\n\t\t\tlet rejectPending: ((error: unknown) => void) | undefined;\n\t\t\tlet ownedPending: PendingIdempotentSpawn | undefined;\n\t\t\tif (params.idempotencyKey) {\n\t\t\t\tconst promise = new Promise<ManagedAgent>((resolve, reject) => {\n\t\t\t\t\tresolvePending = resolve;\n\t\t\t\t\trejectPending = reject;\n\t\t\t\t});\n\t\t\t\tvoid promise.catch(() => undefined);\n\t\t\t\townedPending = { generation, requestHash, promise };\n\t\t\t\tpendingIdempotentSpawns.set(params.idempotencyKey, ownedPending);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait confirmProjectAgent(\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tscope,\n\t\t\t\t\tparams.confirmProjectAgents ?? true,\n\t\t\t\t\tctx,\n\t\t\t\t\tcwd,\n\t\t\t\t\tcurrentSettings,\n\t\t\t\t);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tif (params.workspaceMode === \"worktree\" && resolvedAgent.source === \"project\") {\n\t\t\t\t\tthrow new Error(\"Project-local subagent definitions cannot run in a detached worktree\");\n\t\t\t\t}\n\t\t\t\tconst requestedCwd = cwd;\n\t\t\t\tconst workspaceOwner = `pending-${randomUUID()}`;\n\t\t\t\tconst workspace =\n\t\t\t\t\tparams.workspaceMode === \"worktree\"\n\t\t\t\t\t\t? await currentWorkspaceManager.create(workspaceOwner, requestedCwd)\n\t\t\t\t\t\t: undefined;\n\t\t\t\ttry {\n\t\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (workspace) await currentWorkspaceManager.cleanup(workspaceOwner);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlet agent: ManagedAgent | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst capabilityGrant = modules.capabilityGrant.issueCapabilityGrant(\n\t\t\t\t\t\texecutionPlan,\n\t\t\t\t\t\tDate.now(),\n\t\t\t\t\t\tMath.max(1, (params.timeoutMs ?? resolvedAgent.timeoutMs ?? 600_000) + 60_000),\n\t\t\t\t\t);\n\t\t\t\t\tagent = await ownedRegistry.spawn({\n\t\t\t\t\t\tagent: params.agent,\n\t\t\t\t\t\ttaskName: params.taskName,\n\t\t\t\t\t\ttask: params.task,\n\t\t\t\t\t\tcwd: workspace?.path ?? requestedCwd,\n\t\t\t\t\t\tagentScope: scope,\n\t\t\t\t\t\tthinkingLevel: params.thinkingLevel,\n\t\t\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\t\t\tidleTimeoutMs: params.idleTimeoutMs,\n\t\t\t\t\t\tmaxTurns: params.maxTurns,\n\t\t\t\t\t\tmaxToolCalls: params.maxToolCalls,\n\t\t\t\t\t\tparentId: params.parentId,\n\t\t\t\t\t\tcontext: snapshot.text || undefined,\n\t\t\t\t\t\tcontextSourceIds: snapshot.sourceIds,\n\t\t\t\t\t\tcontextTruncated: snapshot.truncated,\n\t\t\t\t\t\tcontextTurns: snapshot.turns,\n\t\t\t\t\t\tcontextBytes: Buffer.byteLength(snapshot.text, \"utf8\"),\n\t\t\t\t\t\tworkspaceMode: workspace ? \"worktree\" : undefined,\n\t\t\t\t\t\tspawnIdempotencyKey: params.idempotencyKey,\n\t\t\t\t\t\tspawnRequestHash: params.idempotencyKey ? requestHash : undefined,\n\t\t\t\t\t\tcontract,\n\t\t\t\t\t\tresultFormat: resultFormat === \"text\" ? undefined : resultFormat,\n\t\t\t\t\t\texecutionPlan,\n\t\t\t\t\t\tcapabilityGrant,\n\t\t\t\t\t\tsemanticSnapshot,\n\t\t\t\t\t\tsemanticCompatibility: { status: \"compatible\", changedComponents: [] },\n\t\t\t\t\t\ttarget: targetSnapshot,\n\t\t\t\t\t});\n\t\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (agent) await ownedRegistry.closeTree(agent.id).catch(() => undefined);\n\t\t\t\t\tif (workspace) await currentWorkspaceManager.cleanup(workspaceOwner);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (!agent) throw new Error(\"Subagent spawn completed without a retained agent\");\n\t\t\t\tif (workspace && agent.cwd === workspace.path) isolatedAgents.set(agent.id, workspaceOwner);\n\t\t\t\telse if (workspace) await currentWorkspaceManager.cleanup(workspaceOwner);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tresolvePending?.(agent);\n\t\t\t\tconst deliveryNote =\n\t\t\t\t\tcompletionDelivery === \"auto-resume\"\n\t\t\t\t\t\t? \"Auto-resume will request synthesis after completion.\"\n\t\t\t\t\t\t: \"The current response must not depend on the result because next-turn delivery will not wake an idle root.\";\n\t\t\t\treturn result(\n\t\t\t\t\tagent,\n\t\t\t\t\t`Spawned ${agent.agent} as ${agent.taskPath ?? agent.id} (${agent.id}). Continue the identified non-overlapping local work immediately; do not merely announce the spawn or end while useful local work remains. Only an explicit user-requested specialist model, tool-profile, or isolation exception may lack concurrent local work. ${deliveryNote} Do not poll for progress.`,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\trejectPending?.(error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tif (\n\t\t\t\t\tparams.idempotencyKey &&\n\t\t\t\t\townedPending &&\n\t\t\t\t\tpendingIdempotentSpawns.get(params.idempotencyKey) === ownedPending\n\t\t\t\t) {\n\t\t\t\t\tpendingIdempotentSpawns.delete(params.idempotencyKey);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\trefreshSpawnToolRegistration = () => {\n\t\tspawnTool.description = appendAgentCatalog(baseSpawnDescription(), agentCatalog);\n\t\tspawnTool.promptGuidelines = createSpawnPromptGuidelines(completionDelivery, blockingEnabled);\n\t\tpi.registerTool(spawnTool);\n\t};\n\trefreshSpawnToolRegistration();\n\n\tpi.registerTool({\n\t\tname: \"subagent_send\",\n\t\tlabel: \"Send Subagent Follow-up\",\n\t\tdescription:\n\t\t\t\"Send follow-up work to a reusable retained subagent and start a new turn. Semantic resource skew requires explicit revalidation. Use subagent_mailbox for queue-only messages.\",\n\t\tpromptSnippet: \"Start a new detached follow-up turn on a retained subagent\",\n\t\tparameters: Type.Object({\n\t\t\tagentId: Type.String({ description: \"Retained agent ID or canonical task path.\" }),\n\t\t\ttask: Type.String({ minLength: 1, maxLength: DEFAULT_MAX_CONTEXT_BYTES }),\n\t\t\ttimeoutMs: Type.Optional(\n\t\t\t\tType.Integer({\n\t\t\t\t\tminimum: 1,\n\t\t\t\t\tmaximum: MAX_SUBAGENT_TIMEOUT_MS,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional work deadline for this follow-up turn. On expiry, Pi aborts the work and makes one separately bounded summary attempt.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\t...StatefulTurnLimitFields,\n\t\t\trevalidate: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Accept the current semantic resource snapshot after a reported mismatch before starting this follow-up.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tallowConcurrentWrites: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Deprecated compatibility field; shared-workspace concurrency is allowed by default.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\t...createStatefulToolRenderer(\"send\"),\n\t\tasync execute(_id, params, signal, _update, ctx) {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst ownedRegistry = requireRegistry();\n\t\t\tlet modules: StatefulSpawnModules;\n\t\t\ttry {\n\t\t\t\tmodules = await loadStatefulSpawnModules();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst currentSettings = getCurrentSettings();\n\t\t\tconst existing = ownedRegistry.get(params.agentId);\n\t\t\tif (!existing) throw new Error(`Unknown subagent: ${params.agentId}`);\n\t\t\tconst currentAgent = modules.agents\n\t\t\t\t.discoverAgents(existing.cwd, existing.agentScope ?? \"user\", currentSettings)\n\t\t\t\t.agents.find((agent) => agent.name === existing.agent);\n\t\t\tif (!currentAgent) throw new Error(`Unknown retained subagent definition: ${existing.agent}`);\n\t\t\tconst resolvedFollowUpTarget =\n\t\t\t\texisting.workspaceMode === \"worktree\"\n\t\t\t\t\t? undefined\n\t\t\t\t\t: modules.cwdPolicy.resolveSubagentTarget({\n\t\t\t\t\t\t\tworkspace: ctx.cwd,\n\t\t\t\t\t\t\trequestedCwd: existing.cwd,\n\t\t\t\t\t\t\tcurrentProjectTrusted: ctx.isProjectTrusted(),\n\t\t\t\t\t\t});\n\t\t\tif (resolvedFollowUpTarget) {\n\t\t\t\tmodules.cwdPolicy.assertDelegationTargetAllowed(\n\t\t\t\t\tresolvedFollowUpTarget,\n\t\t\t\t\tcurrentSettings?.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (existing.workspaceMode === \"worktree\" && !existing.target) {\n\t\t\t\tthrow new Error(\"Retained worktree is missing its trusted target snapshot\");\n\t\t\t}\n\t\t\tconst currentTarget =\n\t\t\t\texisting.workspaceMode === \"worktree\" && existing.target\n\t\t\t\t\t? existing.target\n\t\t\t\t\t: modules.cwdPolicy.targetPolicyAudit(\n\t\t\t\t\t\t\tresolvedFollowUpTarget as NonNullable<typeof resolvedFollowUpTarget>,\n\t\t\t\t\t\t);\n\t\t\tconst { executionPlan: currentPlan, semanticSnapshot: currentSnapshot } =\n\t\t\t\tawait modules.retainedSemanticState.buildRetainedSemanticState({\n\t\t\t\t\tagent: currentAgent,\n\t\t\t\t\tcontract: existing.contract,\n\t\t\t\t\ttarget: currentTarget,\n\t\t\t\t\tcwd: existing.cwd,\n\t\t\t\t\tworkspaceMode: existing.workspaceMode === \"worktree\" ? \"worktree\" : \"shared\",\n\t\t\t\t\ttransport: transportKind,\n\t\t\t\t\tresultFormat: existing.resultFormat ?? \"text\",\n\t\t\t\t\tthinkingLevel: existing.thinkingLevel,\n\t\t\t\t\ttimeoutMs: params.timeoutMs ?? existing.timeoutMs,\n\t\t\t\t\ttaskGeneration: (existing.executionPlan?.taskGeneration ?? 0) + 1,\n\t\t\t\t\tcancellationLineage: [\n\t\t\t\t\t\t...(existing.executionPlan?.cancellationLineage ?? []),\n\t\t\t\t\t\t...(existing.state === \"interrupted\" && existing.executionPlan?.id\n\t\t\t\t\t\t\t? [existing.executionPlan.id]\n\t\t\t\t\t\t\t: []),\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst compatibility = existing.semanticSnapshot\n\t\t\t\t? modules.semanticSnapshot.evaluateSemanticCompatibility(\n\t\t\t\t\t\texisting.semanticSnapshot,\n\t\t\t\t\t\tcurrentSnapshot,\n\t\t\t\t\t)\n\t\t\t\t: { status: \"warning\" as const, changedComponents: [\"legacy-missing-snapshot\"] };\n\t\t\tif (\n\t\t\t\t(compatibility.status === \"needs-revalidation\" || compatibility.status === \"rejected\") &&\n\t\t\t\tparams.revalidate !== true\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Subagent semantic resources changed; retry with revalidate: true after reviewing: ${compatibility.changedComponents.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait confirmProjectAgent(\n\t\t\t\texisting.agent,\n\t\t\t\texisting.agentScope ?? \"user\",\n\t\t\t\tfalse,\n\t\t\t\tctx,\n\t\t\t\texisting.cwd,\n\t\t\t\tcurrentSettings,\n\t\t\t);\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst currentGrant = modules.capabilityGrant.issueCapabilityGrant(\n\t\t\t\tcurrentPlan,\n\t\t\t\tDate.now(),\n\t\t\t\tMath.max(1, (params.timeoutMs ?? existing.timeoutMs ?? 600_000) + 60_000),\n\t\t\t);\n\t\t\tawait ownedRegistry.updateSemanticState(\n\t\t\t\texisting.id,\n\t\t\t\tcurrentPlan,\n\t\t\t\tcurrentGrant,\n\t\t\t\tcurrentSnapshot,\n\t\t\t\tparams.revalidate === true && compatibility.status !== \"compatible\"\n\t\t\t\t\t? { status: \"warning\", changedComponents: compatibility.changedComponents }\n\t\t\t\t\t: compatibility,\n\t\t\t);\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst agent = await ownedRegistry.followUp(params.agentId, params.task, {\n\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\tidleTimeoutMs: params.idleTimeoutMs,\n\t\t\t\tmaxTurns: params.maxTurns,\n\t\t\t\tmaxToolCalls: params.maxToolCalls,\n\t\t\t});\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\treturn result(agent, `Started follow-up for ${agent.id}.`);\n\t\t},\n\t});\n\n\tpi.registerTool({\n\t\tname: \"subagent_manage\",\n\t\tlabel: \"Manage Subagents\",\n\t\tdescription:\n\t\t\t\"Interrupt active work while keeping an agent reusable, or close agents and release their resources. Use subagent_inspect for every read-only list, detail, status, and diagnostic operation.\",\n\t\tpromptSnippet: \"Interrupt or close retained detached subagents\",\n\t\tparameters: ManageParamsSchema,\n\t\t...createStatefulToolRenderer(\"manage\"),\n\t\tasync execute(_id, params, signal): Promise<StatefulActionToolResult> {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst ownedRegistry = requireRegistry();\n\t\t\tlet currentWorkspaceManager: WorkspaceManager;\n\t\t\ttry {\n\t\t\t\tcurrentWorkspaceManager = await getWorkspaceManager();\n\t\t\t} catch (error) {\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst ownedAgent = (agentId: string): ManagedAgent => {\n\t\t\t\tconst value = ownedRegistry.get(agentId);\n\t\t\t\tif (!value) throw new Error(`Unknown subagent: ${agentId}`);\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tconst operation = validateManageParams(params);\n\t\t\tconst agentId = operation.agentId;\n\t\t\tif (operation.action === \"interrupt\") {\n\t\t\t\tif (operation.subtree) {\n\t\t\t\t\tconst agents = await ownedRegistry.interruptTree(agentId);\n\t\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Interrupted ${agents.length} active agent(s).` }],\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\tagent: summarizeStatefulAgent(ownedAgent(agentId)),\n\t\t\t\t\t\t\tagents: agents.map(summarizeStatefulAgent),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst agent = await ownedRegistry.interrupt(agentId);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn result(agent, `Interrupted ${agent.id}; it remains reusable.`);\n\t\t\t}\n\t\t\tconst existing = ownedRegistry.get(agentId);\n\t\t\tif (existing?.state === \"closed\" && !operation.subtree) {\n\t\t\t\tconst pendingOwner = isolatedAgents.get(existing.id);\n\t\t\t\tif (pendingOwner) await currentWorkspaceManager.cleanup(pendingOwner);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\tisolatedAgents.delete(existing.id);\n\t\t\t\treturn result(existing, `Closed ${existing.id}.`);\n\t\t\t}\n\t\t\tif (operation.subtree) {\n\t\t\t\tlet agents: ManagedAgent[];\n\t\t\t\ttry {\n\t\t\t\t\tagents = await ownedRegistry.closeTree(agentId);\n\t\t\t\t} finally {\n\t\t\t\t\tawait cleanupClosedWorkspaces(ownedRegistry, isolatedAgents, currentWorkspaceManager);\n\t\t\t\t}\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `Closed ${agents.length} agent(s).` }],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tagent: summarizeStatefulAgent(ownedAgent(agentId)),\n\t\t\t\t\t\tagents: agents.map(summarizeStatefulAgent),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet agent: ManagedAgent;\n\t\t\ttry {\n\t\t\t\tagent = await ownedRegistry.close(agentId);\n\t\t\t} finally {\n\t\t\t\tawait cleanupClosedWorkspaces(ownedRegistry, isolatedAgents, currentWorkspaceManager);\n\t\t\t}\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\treturn result(agent, `Closed ${agent.id}.`);\n\t\t},\n\t});\n\n\tpi.registerTool({\n\t\tname: \"subagent_mailbox\",\n\t\tlabel: \"Subagent Mailbox\",\n\t\tdescription:\n\t\t\t\"Queue a bounded message without starting a turn, or read unread mailbox messages. Read acknowledges returned messages by default; use subagent_inspect for metadata-only unread counts.\",\n\t\tpromptSnippet: \"Send or read queue-only detached-subagent mailbox messages\",\n\t\tparameters: MailboxParamsSchema,\n\t\t...createStatefulToolRenderer(\"mailbox\"),\n\t\tasync execute(_id, params, signal): Promise<StatefulActionToolResult> {\n\t\t\tconst generation = runtimeGeneration;\n\t\t\tconst ownedRegistry = requireRegistry();\n\t\t\tconst operation = validateMailboxParams(params);\n\t\t\tif (operation.action === \"send\") {\n\t\t\t\tconst message = await ownedRegistry.sendMessage(\n\t\t\t\t\toperation.agentId,\n\t\t\t\t\toperation.message,\n\t\t\t\t\toperation.senderId,\n\t\t\t\t\toperation.deduplicationKey,\n\t\t\t\t);\n\t\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `Queued ${message.id} for ${message.recipientId}.` }],\n\t\t\t\t\tdetails: { message },\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst messages = await ownedRegistry.readMessages(\n\t\t\t\toperation.agentId,\n\t\t\t\toperation.acknowledge,\n\t\t\t\toperation.limit,\n\t\t\t);\n\t\t\tassertCurrentSpawn(signal, generation, runtimeGeneration);\n\t\t\tconst summaries = messages.map((message) => ({\n\t\t\t\t...message,\n\t\t\t\tcontent: truncateUtf8(message.content, MAX_TOOL_MESSAGE_BYTES).text,\n\t\t\t}));\n\t\t\tconst text = summaries.length\n\t\t\t\t? summaries\n\t\t\t\t\t\t.map((message) => `${message.id} from ${message.senderId}: ${message.content}`)\n\t\t\t\t\t\t.join(\"\\n\")\n\t\t\t\t: \"No unread messages.\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: truncateUtf8(text, DEFAULT_MAX_CONTEXT_BYTES).text }],\n\t\t\t\tdetails: { messages: summaries },\n\t\t\t};\n\t\t},\n\t});\n\n\treturn controller;\n}\n\nfunction normalizeContextMode(value: \"none\" | \"all\" | \"summary\" | number | undefined): ContextMode {\n\tif (value === undefined) return \"none\";\n\tif (value === \"none\" || value === \"all\" || value === \"summary\") return value;\n\treturn Math.max(1, Math.floor(value));\n}\n\nexport function resolveSpawnContextMode(\n\tvalue: \"none\" | \"all\" | \"summary\" | number | undefined,\n\tcontextEntryIds: readonly string[] | undefined,\n): ContextMode {\n\tif (value === undefined && contextEntryIds !== undefined) return \"all\";\n\treturn normalizeContextMode(value);\n}\n\nasync function cleanupClosedWorkspaces(\n\tregistry: AgentRegistry,\n\tisolatedAgents: Map<string, string>,\n\tworkspaceManager: WorkspaceManager,\n): Promise<void> {\n\tfor (const [agentId, owner] of [...isolatedAgents]) {\n\t\tif (registry.get(agentId)?.state !== \"closed\") continue;\n\t\tawait workspaceManager.cleanup(owner);\n\t\tisolatedAgents.delete(agentId);\n\t}\n}\n\nfunction appendAgentCatalog(baseDescription: string, catalog: string): string {\n\treturn catalog ? `${baseDescription}\\n\\n${catalog}` : baseDescription;\n}\n\nfunction result(agent: ManagedAgent, text: string) {\n\treturn {\n\t\tcontent: [{ type: \"text\" as const, text }],\n\t\tdetails: { agent: summarizeStatefulAgent(agent) },\n\t};\n}\n\nfunction normalizeRuntimeThinkingLevel(value: string): ParentRuntimeSnapshot[\"thinkingLevel\"] {\n\treturn isThinkingLevel(value) ? value : \"off\";\n}\n", "import type { CompletionDelivery } from \"./agents/types.js\";\n\nexport function createSpawnPromptGuidelines(\n\tcompletionDelivery: CompletionDelivery,\n\tblockingEnabled = true,\n): string[] {\n\tconst deliveryGuidance =\n\t\tcompletionDelivery === \"auto-resume\"\n\t\t\t? blockingEnabled\n\t\t\t\t? \"With subagent_spawn completion delivery set to auto-resume, prefer one subagent_spawn for broad asynchronous research or consequential independent review that covers related branches even when the final answer depends on its result; do not choose blocking parallel fan-out merely to keep delegation in the same turn.\"\n\t\t\t\t: \"With subagent_spawn completion delivery set to auto-resume, prefer one subagent_spawn for broad asynchronous research or consequential independent review that covers related branches even when the final answer depends on its result.\"\n\t\t\t: blockingEnabled\n\t\t\t\t? \"With subagent_spawn completion delivery set to next-turn (the default), prefer one subagent_spawn for broad asynchronous research or consequential independent review only when the current response does not depend on its result; use the blocking subagent when the final answer depends on the detached result.\"\n\t\t\t\t: \"With subagent_spawn completion delivery set to next-turn (the default), use subagent_spawn only when the current response does not depend on its result; complete final-answer-dependent work directly because an idle root is not awakened.\";\n\treturn [\n\t\t\"Do not use subagent_spawn for simple or critical-path work that the main agent can perform directly. The main agent retains overall planning, immediate critical-path work, integration, final verification, and the final answer.\",\n\t\t\"Before one ordinary subagent_spawn, identify concrete useful non-overlapping main-agent work you can start immediately and a supported completion integration path. If none exists, perform the task directly instead of calling subagent_spawn.\",\n\t\t\"Give subagent_spawn a concise unique taskName using lowercase letters, digits, and underscores so the retained agent has a stable canonical task path.\",\n\t\t\"Set subagent_spawn thinkingLevel to the lowest sufficient thinking level for the delegated task: use off or minimal for extraction, formatting, or mechanical work; low for straightforward bounded work; medium for ordinary multi-step research or implementation; high for complex debugging, design, review, or cross-file analysis; xhigh for highly ambiguous, cross-system, or high-risk analysis; and max only for the hardest tasks when quality clearly outweighs latency and cost. Omit subagent_spawn thinkingLevel only to preserve the agent or child default.\",\n\t\t\"Set subagent_spawn timeoutMs to the shortest realistic work deadline for the task difficulty; use idleTimeoutMs for stalled work and maxTurns or maxToolCalls to stop repeated work without progress. Split oversized tasks instead of extending budgets merely to compensate for broad scope. Omit these fields only to preserve the retained agent or configured defaults.\",\n\t\tdeliveryGuidance,\n\t\t\"Keep ordinary review in the main agent with a review skill and deterministic checks; use subagent_spawn for detached review only when consequential independent verification has concrete parallel value.\",\n\t\t\"Use a single subagent_spawn for a bounded implementation slice with clear ownership only when it can run beside the identified main-agent work.\",\n\t\t\"Use a single subagent_spawn without concurrent main-agent work only for an explicit user-requested specialist model, tool profile, or isolation boundary.\",\n\t\t...(blockingEnabled\n\t\t\t? [\n\t\t\t\t\t\"Use the blocking subagent instead of subagent_spawn when synchronous output is required before the main agent can continue and waiting is intentional; queued steering cannot be processed until that blocking call returns.\",\n\t\t\t\t\t\"When subagent_spawn fits the completion-delivery policy, do not choose a blocking parallel subagent merely to keep delegation in the same turn.\",\n\t\t\t\t]\n\t\t\t: []),\n\t\t\"Add another subagent_spawn only for truly independent work with safe workspace concurrency and disjoint write ownership; shared workspaces permit concurrent writes by default, so use workspaceMode worktree when repository isolation is required. The main agent still owns integration.\",\n\t\t\"After subagent_spawn returns, immediately continue the identified local task; do not merely announce the spawn, wait, poll, or end the response while useful local work remains.\",\n\t\t'Consume and synthesize available subagent_spawn completion messages; use subagent_manage with action \"interrupt\" or \"close\" for agents that are no longer needed.',\n\t\t'Completion from subagent_spawn is delivered automatically. Do not poll with subagent_inspect or subagent_mailbox action \"read\", repeatedly check progress, or duplicate the delegated work.',\n\t];\n}\n", "import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Theme, ToolRenderResultOptions } from \"@earendil-works/pi-coding-agent\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport {\n\tCOLLAPSED_LIST_LIMIT,\n\texpansionHint,\n\ttype RenderStatus,\n\trecordList,\n\trecordValue,\n\trenderFallbackResult,\n\tsafeBlock,\n\tsafeLine,\n\tstatusBadge,\n\tstringValue,\n\ttype ToolRendererContext,\n\ttextResult,\n\ttoolHeader,\n} from \"./render-common.js\";\n\nexport type StatefulRenderTool = \"spawn\" | \"send\" | \"manage\" | \"mailbox\";\n\nexport function createStatefulToolRenderer(tool: StatefulRenderTool) {\n\treturn {\n\t\trenderCall(args: unknown, theme: Theme) {\n\t\t\treturn renderStatefulCall(tool, recordValue(args) ?? {}, theme);\n\t\t},\n\t\trenderResult(\n\t\t\tresult: AgentToolResult<unknown>,\n\t\t\toptions: ToolRenderResultOptions,\n\t\t\ttheme: Theme,\n\t\t\tcontext: ToolRendererContext<unknown>,\n\t\t) {\n\t\t\treturn renderStatefulResult(tool, result, options, theme, context);\n\t\t},\n\t};\n}\n\nfunction renderStatefulCall(tool: StatefulRenderTool, args: Record<string, unknown>, theme: Theme) {\n\tif (tool === \"spawn\") {\n\t\tconst metadata = [\n\t\t\t`[${safeLine(args.agentScope, \"user\", 64)}]`,\n\t\t\t\"detached\",\n\t\t\tsafeLine(args.workspaceMode, \"shared\", 64),\n\t\t];\n\t\tif (typeof args.thinkingLevel === \"string\") metadata.push(`thinking:${args.thinkingLevel}`);\n\t\tif (typeof args.timeoutMs === \"number\") metadata.push(`timeout:${args.timeoutMs}ms`);\n\t\tif (typeof args.idleTimeoutMs === \"number\") metadata.push(`idle:${args.idleTimeoutMs}ms`);\n\t\tif (typeof args.maxTurns === \"number\") metadata.push(`turns:${args.maxTurns}`);\n\t\tif (typeof args.maxToolCalls === \"number\") metadata.push(`tools:${args.maxToolCalls}`);\n\t\treturn new Text(\n\t\t\t[\n\t\t\t\ttoolHeader(theme, \"subagent_spawn\", args.agent, metadata),\n\t\t\t\t` ${theme.fg(\"dim\", safeLine(args.task, \"...\", 2 * 1024))}`,\n\t\t\t].join(\"\\n\"),\n\t\t\t0,\n\t\t\t0,\n\t\t);\n\t}\n\tif (tool === \"send\") {\n\t\tconst metadata = [\"follow-up\"];\n\t\tif (typeof args.timeoutMs === \"number\") metadata.push(`timeout:${args.timeoutMs}ms`);\n\t\tif (typeof args.idleTimeoutMs === \"number\") metadata.push(`idle:${args.idleTimeoutMs}ms`);\n\t\tif (typeof args.maxTurns === \"number\") metadata.push(`turns:${args.maxTurns}`);\n\t\tif (typeof args.maxToolCalls === \"number\") metadata.push(`tools:${args.maxToolCalls}`);\n\t\treturn new Text(\n\t\t\t[\n\t\t\t\ttoolHeader(theme, \"subagent_send\", args.agentId, metadata),\n\t\t\t\t` ${theme.fg(\"dim\", safeLine(args.task, \"...\", 2 * 1024))}`,\n\t\t\t].join(\"\\n\"),\n\t\t\t0,\n\t\t\t0,\n\t\t);\n\t}\n\tif (tool === \"manage\") {\n\t\tconst metadata: string[] = [];\n\t\tif (typeof args.agentId === \"string\") metadata.push(`id:${safeLine(args.agentId, \"\", 256)}`);\n\t\tif (args.subtree === true) metadata.push(\"subtree\");\n\t\treturn new Text(toolHeader(theme, \"subagent_manage\", args.action, metadata), 0, 0);\n\t}\n\tconst metadata = [`id:${safeLine(args.agentId, \"...\", 256)}`];\n\tif (args.action === \"read\") {\n\t\tmetadata.push(args.acknowledge === false ? \"leave unread\" : \"acknowledge\");\n\t}\n\tconst lines = [toolHeader(theme, \"subagent_mailbox\", args.action, metadata)];\n\tif (args.action === \"send\") {\n\t\tlines.push(` ${theme.fg(\"dim\", safeLine(args.message, \"...\", 2 * 1024))}`);\n\t}\n\treturn new Text(lines.join(\"\\n\"), 0, 0);\n}\n\nfunction renderStatefulResult(\n\ttool: StatefulRenderTool,\n\tresult: AgentToolResult<unknown>,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcontext: ToolRendererContext<unknown>,\n) {\n\tconst details = recordValue(result.details);\n\tconst args = recordValue(context.args) ?? {};\n\tif (!details) return renderFallbackResult(result, options, theme, context.isError);\n\tif (tool === \"spawn\" || tool === \"send\") {\n\t\tconst agent = recordValue(details.agent);\n\t\tif (!agent) return renderFallbackResult(result, options, theme, context.isError);\n\t\treturn new Text(renderAgentResult(agent, result, options.expanded, theme), 0, 0);\n\t}\n\tif (tool === \"manage\") {\n\t\treturn new Text(renderManageResult(args, details, result, options.expanded, theme), 0, 0);\n\t}\n\treturn new Text(renderMailboxResult(args, details, options.expanded, theme), 0, 0);\n}\n\nfunction renderAgentResult(\n\tagent: Record<string, unknown>,\n\tresult: AgentToolResult<unknown>,\n\texpanded: boolean,\n\ttheme: Theme,\n): string {\n\tconst state = safeLine(agent.state, \"unknown\", 128);\n\tconst lines = [\n\t\t`${statusBadge(theme, lifecycleStatus(state))} \u00B7 ${theme.fg(\"accent\", safeLine(agent.id, \"agent\", 256))} \u00B7 ${theme.fg(\"toolOutput\", safeLine(agent.agent, \"subagent\", 256))} \u00B7 ${theme.fg(\"muted\", state)}`,\n\t];\n\tconst thinking = stringValue(agent.thinkingLevel);\n\tconst timeout =\n\t\ttypeof agent.currentTimeoutMs === \"number\"\n\t\t\t? agent.currentTimeoutMs\n\t\t\t: typeof agent.timeoutMs === \"number\"\n\t\t\t\t? agent.timeoutMs\n\t\t\t\t: 0;\n\tconst idleTimeout =\n\t\ttypeof agent.currentIdleTimeoutMs === \"number\"\n\t\t\t? agent.currentIdleTimeoutMs\n\t\t\t: typeof agent.idleTimeoutMs === \"number\"\n\t\t\t\t? agent.idleTimeoutMs\n\t\t\t\t: 0;\n\tconst maxTurns =\n\t\ttypeof agent.currentMaxTurns === \"number\"\n\t\t\t? agent.currentMaxTurns\n\t\t\t: typeof agent.maxTurns === \"number\"\n\t\t\t\t? agent.maxTurns\n\t\t\t\t: 0;\n\tconst maxToolCalls =\n\t\ttypeof agent.currentMaxToolCalls === \"number\"\n\t\t\t? agent.currentMaxToolCalls\n\t\t\t: typeof agent.maxToolCalls === \"number\"\n\t\t\t\t? agent.maxToolCalls\n\t\t\t\t: 0;\n\tconst unread = typeof agent.unreadMessages === \"number\" ? agent.unreadMessages : 0;\n\tif (thinking || timeout || idleTimeout || maxTurns || maxToolCalls || unread > 0) {\n\t\tlines.push(\n\t\t\ttheme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\t[\n\t\t\t\t\tthinking && `thinking:${safeLine(thinking, \"\", 128)}`,\n\t\t\t\t\ttimeout && `timeout:${timeout}ms`,\n\t\t\t\t\tidleTimeout && `idle:${idleTimeout}ms`,\n\t\t\t\t\tmaxTurns && `turns:${maxTurns}`,\n\t\t\t\t\tmaxToolCalls && `tools:${maxToolCalls}`,\n\t\t\t\t\tunread > 0 && `unread:${unread}`,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\" \u00B7 \"),\n\t\t\t),\n\t\t);\n\t}\n\tif (expanded) {\n\t\tconst task = safeBlock(agent.currentTask, \"\", 2 * 1024).trim();\n\t\tconst error = safeBlock(agent.error, \"\", 2 * 1024).trim();\n\t\tif (task) lines.push(theme.fg(\"dim\", `task: ${task}`));\n\t\tif (error) lines.push(theme.fg(\"error\", `error: ${error}`));\n\t\tconst content = safeBlock(textResult(result), \"\", 8 * 1024).trim();\n\t\tif (content) lines.push(theme.fg(\"toolOutput\", content));\n\t} else lines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction renderManageResult(\n\targs: Record<string, unknown>,\n\tdetails: Record<string, unknown>,\n\tresult: AgentToolResult<unknown>,\n\texpanded: boolean,\n\ttheme: Theme,\n): string {\n\tconst action = safeLine(args.action, \"action\", 128);\n\tconst agents = recordList(details.agents);\n\tconst primary = recordValue(details.agent);\n\tif (action === \"list\") {\n\t\tconst lines = [\n\t\t\t`${statusBadge(theme, \"completed\")} \u00B7 list \u00B7 ${agents.length} agent${agents.length === 1 ? \"\" : \"s\"}`,\n\t\t];\n\t\tconst selected = expanded ? agents : agents.slice(0, COLLAPSED_LIST_LIMIT);\n\t\tfor (const agent of selected) lines.push(formatAgentLine(agent, theme, expanded));\n\t\tif (agents.length === 0) lines.push(theme.fg(\"muted\", \"(no retained agents)\"));\n\t\tif (agents.length > selected.length)\n\t\t\tlines.push(theme.fg(\"muted\", `\u2026 ${agents.length - selected.length} omitted`));\n\t\tif (!expanded && agents.length > 0) lines.push(expansionHint());\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst subtree = args.subtree === true;\n\tconst affected = subtree ? agents.length : agents.length > 0 ? agents.length : primary ? 1 : 0;\n\tconst status: RenderStatus = action === \"interrupt\" ? \"interrupted\" : \"closed\";\n\tconst lines = [\n\t\t`${statusBadge(theme, status)} \u00B7 ${affected} agent${affected === 1 ? \"\" : \"s\"}${subtree ? theme.fg(\"muted\", \" \u00B7 subtree\") : \"\"}`,\n\t];\n\tconst selected = agents.length > 0 ? agents : !subtree && primary ? [primary] : [];\n\tfor (const agent of expanded ? selected : selected.slice(0, COLLAPSED_LIST_LIMIT)) {\n\t\tlines.push(formatAgentLine(agent, theme, expanded));\n\t}\n\tif (selected.length === 0) {\n\t\tconst content = safeBlock(textResult(result), \"(no output)\", 8 * 1024);\n\t\tlines.push(theme.fg(\"toolOutput\", content));\n\t}\n\tif (!expanded && selected.length > 0) lines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction renderMailboxResult(\n\targs: Record<string, unknown>,\n\tdetails: Record<string, unknown>,\n\texpanded: boolean,\n\ttheme: Theme,\n): string {\n\tconst action = safeLine(args.action, \"action\", 64);\n\tif (action === \"send\") {\n\t\tconst message = recordValue(details.message);\n\t\tif (!message) return `${statusBadge(theme, \"completed\")} \u00B7 Queued message`;\n\t\tconst lines = [\n\t\t\t`${theme.fg(\"success\", \"\u2713\")} ${theme.fg(\"success\", \"Queued\")} \u00B7 ${theme.fg(\"accent\", safeLine(message.id, \"message\", 256))} \u00B7 ${theme.fg(\"muted\", `to ${safeLine(message.recipientId, safeLine(args.agentId), 256)}`)}`,\n\t\t];\n\t\tif (expanded) {\n\t\t\tlines.push(theme.fg(\"toolOutput\", safeBlock(message.content, \"(empty message)\", 2 * 1024)));\n\t\t} else lines.push(expansionHint());\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst messages = recordList(details.messages);\n\tconst acknowledged = args.acknowledge === false ? \"left unread\" : \"acknowledged\";\n\tconst lines = [\n\t\t`${statusBadge(theme, \"completed\")} \u00B7 ${messages.length} message${messages.length === 1 ? \"\" : \"s\"} \u00B7 ${acknowledged}`,\n\t];\n\tconst selected = expanded ? messages : messages.slice(0, COLLAPSED_LIST_LIMIT);\n\tfor (const message of selected) {\n\t\tconst content = expanded\n\t\t\t? safeBlock(message.content, \"(empty message)\", 2 * 1024)\n\t\t\t: safeLine(message.content, \"(empty message)\", 512);\n\t\tlines.push(\n\t\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", safeLine(message.id, \"message\", 256))} ${theme.fg(\"muted\", `from ${safeLine(message.senderId, \"unknown\", 256)}: `)}${theme.fg(\"toolOutput\", content)}`,\n\t\t);\n\t}\n\tif (messages.length === 0) lines.push(theme.fg(\"muted\", \"(no unread messages)\"));\n\tif (messages.length > selected.length)\n\t\tlines.push(theme.fg(\"muted\", `\u2026 ${messages.length - selected.length} omitted`));\n\tif (!expanded && messages.length > 0) lines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction formatAgentLine(agent: Record<string, unknown>, theme: Theme, expanded: boolean): string {\n\tconst unread = typeof agent.unreadMessages === \"number\" ? agent.unreadMessages : 0;\n\tconst lines = [\n\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", safeLine(agent.id, \"agent\", 256))} ${theme.fg(\"toolOutput\", safeLine(agent.agent, \"subagent\", 256))} ${theme.fg(\"muted\", safeLine(agent.state, \"unknown\", 128))}${unread > 0 ? theme.fg(\"warning\", ` \u00B7 unread:${unread}`) : \"\"}`,\n\t];\n\tif (expanded) {\n\t\tconst task = safeBlock(agent.currentTask, \"\", 2 * 1024).trim();\n\t\tconst error = safeBlock(agent.error, \"\", 2 * 1024).trim();\n\t\tif (task) lines.push(` ${theme.fg(\"dim\", `task: ${task}`)}`);\n\t\tif (error) lines.push(` ${theme.fg(\"error\", `error: ${error}`)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction lifecycleStatus(state: string): RenderStatus {\n\tswitch (state) {\n\t\tcase \"starting\":\n\t\t\treturn \"starting\";\n\t\tcase \"running\":\n\t\t\treturn \"running\";\n\t\tcase \"idle\":\n\t\t\treturn \"idle\";\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn \"warning\";\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tcase \"closed\":\n\t\t\treturn \"closed\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n", "import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Type } from \"typebox\";\n\nconst MANAGE_ACTIONS = [\"interrupt\", \"close\"] as const;\nconst MAILBOX_ACTIONS = [\"send\", \"read\"] as const;\nconst MAX_MAILBOX_MESSAGE_LENGTH = 16 * 1024;\n\nexport const ManageParamsSchema = Type.Object(\n\t{\n\t\taction: StringEnum(MANAGE_ACTIONS, {\n\t\t\tdescription: \"Interrupt active work or close an agent and release its resources.\",\n\t\t}),\n\t\tagentId: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: \"Required agent ID or canonical task path for interrupt and close.\",\n\t\t\t}),\n\t\t),\n\t\tsubtree: Type.Optional(\n\t\t\tType.Boolean({\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: \"Interrupt or close the target and all descendants child-first.\",\n\t\t\t}),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport const MailboxParamsSchema = Type.Object(\n\t{\n\t\taction: StringEnum(MAILBOX_ACTIONS, {\n\t\t\tdescription: \"Use send for queue-only delivery or read to inspect unread mailbox messages.\",\n\t\t}),\n\t\tagentId: Type.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Mailbox owner or recipient agent ID or canonical task path.\",\n\t\t}),\n\t\tmessage: Type.Optional(\n\t\t\tType.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: MAX_MAILBOX_MESSAGE_LENGTH,\n\t\t\t\tdescription: \"Message content required by send; sending does not start a turn.\",\n\t\t\t}),\n\t\t),\n\t\tsenderId: Type.Optional(\n\t\t\tType.String({ description: \"Optional sender agent ID or canonical task path.\" }),\n\t\t),\n\t\tdeduplicationKey: Type.Optional(\n\t\t\tType.String({ maxLength: 256, description: \"Optional idempotency key for send.\" }),\n\t\t),\n\t\tacknowledge: Type.Optional(\n\t\t\tType.Boolean({ default: true, description: \"Mark returned read messages as acknowledged.\" }),\n\t\t),\n\t\tlimit: Type.Optional(\n\t\t\tType.Number({ minimum: 1, maximum: 20, default: 20, description: \"Maximum messages.\" }),\n\t\t),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type ValidatedManageParams = {\n\taction: \"interrupt\" | \"close\";\n\tagentId: string;\n\tsubtree?: boolean;\n};\n\nexport type ValidatedMailboxParams =\n\t| {\n\t\t\taction: \"send\";\n\t\t\tagentId: string;\n\t\t\tmessage: string;\n\t\t\tsenderId?: string;\n\t\t\tdeduplicationKey?: string;\n\t }\n\t| { action: \"read\"; agentId: string; acknowledge?: boolean; limit?: number };\n\nexport function validateManageParams(params: unknown): ValidatedManageParams {\n\tconst values = parameterRecord(params, \"subagent_manage\");\n\tassertKnownKeys(\"subagent_manage\", values, [\"action\", \"agentId\", \"subtree\"]);\n\tconst action = values.action;\n\tif (action === \"list\") {\n\t\tthrow new Error(\n\t\t\t'subagent_manage no longer supports \"list\"; use subagent_inspect action \"list_runs\"',\n\t\t);\n\t}\n\tif (\n\t\ttypeof action !== \"string\" ||\n\t\t!MANAGE_ACTIONS.includes(action as (typeof MANAGE_ACTIONS)[number])\n\t) {\n\t\tthrow new Error(`subagent_manage action must be one of: ${MANAGE_ACTIONS.join(\", \")}`);\n\t}\n\tassertRequiredString(\"subagent_manage\", action, values, \"agentId\");\n\tassertOptionalBoolean(\"subagent_manage\", action, values, \"subtree\");\n\treturn {\n\t\taction,\n\t\tagentId: values.agentId,\n\t\t...(values.subtree === undefined ? {} : { subtree: values.subtree }),\n\t} as ValidatedManageParams;\n}\n\nexport function validateMailboxParams(params: unknown): ValidatedMailboxParams {\n\tconst values = parameterRecord(params, \"subagent_mailbox\");\n\tassertKnownKeys(\"subagent_mailbox\", values, [\n\t\t\"action\",\n\t\t\"agentId\",\n\t\t\"message\",\n\t\t\"senderId\",\n\t\t\"deduplicationKey\",\n\t\t\"acknowledge\",\n\t\t\"limit\",\n\t]);\n\tconst action = values.action;\n\tif (\n\t\ttypeof action !== \"string\" ||\n\t\t!MAILBOX_ACTIONS.includes(action as (typeof MAILBOX_ACTIONS)[number])\n\t) {\n\t\tthrow new Error(`subagent_mailbox action must be one of: ${MAILBOX_ACTIONS.join(\", \")}`);\n\t}\n\tif (action === \"send\") {\n\t\tassertRequiredString(\"subagent_mailbox\", action, values, \"agentId\");\n\t\tassertRequiredString(\"subagent_mailbox\", action, values, \"message\");\n\t\tconst message = values.message as string;\n\t\tif (message.length > MAX_MAILBOX_MESSAGE_LENGTH) {\n\t\t\tthrow new Error(\n\t\t\t\t`subagent_mailbox action \"send\" requires message at most ${MAX_MAILBOX_MESSAGE_LENGTH} characters`,\n\t\t\t);\n\t\t}\n\t\tassertOptionalString(\"subagent_mailbox\", action, values, \"senderId\");\n\t\tassertOptionalString(\"subagent_mailbox\", action, values, \"deduplicationKey\");\n\t\tif (typeof values.deduplicationKey === \"string\" && values.deduplicationKey.length > 256) {\n\t\t\tthrow new Error(\n\t\t\t\t'subagent_mailbox action \"send\" requires deduplicationKey at most 256 characters',\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\taction,\n\t\t\tagentId: values.agentId,\n\t\t\tmessage,\n\t\t\t...(values.senderId === undefined ? {} : { senderId: values.senderId }),\n\t\t\t...(values.deduplicationKey === undefined\n\t\t\t\t? {}\n\t\t\t\t: { deduplicationKey: values.deduplicationKey }),\n\t\t} as ValidatedMailboxParams;\n\t}\n\tassertRequiredString(\"subagent_mailbox\", action, values, \"agentId\");\n\tassertOptionalBoolean(\"subagent_mailbox\", action, values, \"acknowledge\");\n\tif (\n\t\tvalues.limit !== undefined &&\n\t\t(typeof values.limit !== \"number\" ||\n\t\t\t!Number.isFinite(values.limit) ||\n\t\t\tvalues.limit < 1 ||\n\t\t\tvalues.limit > 20)\n\t) {\n\t\tthrow new Error('subagent_mailbox action \"read\" requires limit between 1 and 20');\n\t}\n\treturn {\n\t\taction,\n\t\tagentId: values.agentId,\n\t\t...(values.acknowledge === undefined ? {} : { acknowledge: values.acknowledge }),\n\t\t...(values.limit === undefined ? {} : { limit: values.limit }),\n\t} as ValidatedMailboxParams;\n}\n\nfunction parameterRecord(params: unknown, toolName: string): Record<string, unknown> {\n\tif (!params || typeof params !== \"object\" || Array.isArray(params)) {\n\t\tthrow new Error(`${toolName} parameters must be an object`);\n\t}\n\treturn params as Record<string, unknown>;\n}\n\nfunction assertKnownKeys(\n\ttoolName: string,\n\tvalues: Record<string, unknown>,\n\tallowed: readonly string[],\n): void {\n\tconst unexpected = Object.keys(values).find(\n\t\t(key) => values[key] !== undefined && !allowed.includes(key),\n\t);\n\tif (unexpected) throw new Error(`${toolName} does not accept ${unexpected}`);\n}\n\nfunction assertRequiredString(\n\ttoolName: string,\n\taction: string,\n\tvalues: Record<string, unknown>,\n\tkey: string,\n): void {\n\tconst value = values[key];\n\tif (value === undefined) throw new Error(`${toolName} action \"${action}\" requires ${key}`);\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${toolName} action \"${action}\" requires ${key} to be a non-empty string`);\n\t}\n}\n\nfunction assertOptionalString(\n\ttoolName: string,\n\taction: string,\n\tvalues: Record<string, unknown>,\n\tkey: string,\n): void {\n\tif (values[key] !== undefined && typeof values[key] !== \"string\") {\n\t\tthrow new Error(`${toolName} action \"${action}\" requires ${key} to be a string`);\n\t}\n}\n\nfunction assertOptionalBoolean(\n\ttoolName: string,\n\taction: string,\n\tvalues: Record<string, unknown>,\n\tkey: string,\n): void {\n\tif (values[key] !== undefined && typeof values[key] !== \"boolean\") {\n\t\tthrow new Error(`${toolName} action \"${action}\" requires ${key} to be a boolean`);\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": ["StringEnum", "Type", "result", "metadata", "lines", "selected", "Type", "StringEnum", "agent", "agentId"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/agents/types.ts"],
4
- "sourcesContent": ["/**\n * Foundational agent and settings types with dependency-light validation helpers.\n */\n\nimport type { AgentCapabilityManifest } from \"../capabilities.js\";\n\nexport const THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\n\nexport type SubagentThinkingLevel = (typeof THINKING_LEVELS)[number];\n\nexport function isThinkingLevel(value: unknown): value is SubagentThinkingLevel {\n\treturn typeof value === \"string\" && THINKING_LEVELS.includes(value as SubagentThinkingLevel);\n}\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport type AgentSource = \"built-in\" | \"user\" | \"project\";\n\nexport const DEFAULT_PI_TOOL_NAMES = [\"read\", \"bash\", \"edit\", \"write\"] as const;\n\nexport function resolveAgentToolNames(tools: readonly string[] | undefined): string[] {\n\treturn [...new Set(tools ?? DEFAULT_PI_TOOL_NAMES)];\n}\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tthinkingLevel?: SubagentThinkingLevel;\n\ttimeoutMs?: number;\n\tcapabilityManifest?: AgentCapabilityManifest;\n\tsystemPrompt: string;\n\tsource: AgentSource;\n\tfilePath: string;\n}\n\nexport interface SubagentAgentConfig {\n\ttools?: string[];\n\tmodel?: string | null;\n\tthinkingLevel?: SubagentThinkingLevel | null;\n\ttimeoutMs?: number | null;\n}\n\nexport type SubagentTransportKind = \"subprocess\" | \"in-process\" | \"rpc\" | \"auto\";\n\nexport type CompletionDelivery = \"next-turn\" | \"auto-resume\";\n\nexport const CONSULT_RESOURCE_POLICIES = [\"project-context\", \"none\", \"all\"] as const;\n\nexport type ConsultResourcePolicy = (typeof CONSULT_RESOURCE_POLICIES)[number];\n\nexport interface SubagentConsultSettings {\n\tresources?: ConsultResourcePolicy;\n}\n\nexport const CONSULTATION_CWD_POLICIES = [\"anywhere\", \"current-workspace\"] as const;\nexport type ConsultationCwdPolicy = (typeof CONSULTATION_CWD_POLICIES)[number];\n\nexport const DELEGATION_CWD_POLICIES = [\n\t\"trusted-targets\",\n\t\"current-workspace\",\n\t\"anywhere\",\n] as const;\nexport type DelegationCwdPolicy = (typeof DELEGATION_CWD_POLICIES)[number];\n\nexport interface SubagentCwdPolicySettings {\n\tconsultation?: ConsultationCwdPolicy;\n\tdelegation?: DelegationCwdPolicy;\n}\n\nexport interface SubagentBlockingSettings {\n\tenabled?: boolean;\n\tmaxParallelTasks?: number;\n}\n\nexport interface SubagentRuntimeSettings {\n\tenabled?: boolean;\n\ttransport?: SubagentTransportKind;\n\tcompletionDelivery?: CompletionDelivery;\n\tmaxAgents?: number;\n\tmaxActiveTurns?: number;\n\tmaxDepth?: number;\n\tmaxChildrenPerAgent?: number;\n\tmaxMailboxMessages?: number;\n\tmaxMailboxMessageBytes?: number;\n\tidleTtlMs?: number;\n\tretentionDays?: number;\n\tmaxStoredAgents?: number;\n}\n\nexport interface SubagentSettings {\n\tagents?: Record<string, SubagentAgentConfig>;\n\tblocking?: SubagentBlockingSettings;\n\tstateful?: SubagentRuntimeSettings;\n\tconsult?: SubagentConsultSettings;\n\tcwdPolicy?: SubagentCwdPolicySettings;\n}\n"],
5
- "mappings": ";;;;AAMO,IAAM,kBAAkB,CAAC,OAAO,WAAW,OAAO,UAAU,QAAQ,SAAS,KAAK;AAIlF,SAAS,gBAAgB,OAAgD;AAC/E,SAAO,OAAO,UAAU,YAAY,gBAAgB,SAAS,KAA8B;AAC5F;AAMO,IAAM,wBAAwB,CAAC,QAAQ,QAAQ,QAAQ,OAAO;AAE9D,SAAS,sBAAsB,OAAgD;AACrF,SAAO,CAAC,GAAG,IAAI,IAAI,SAAS,qBAAqB,CAAC;AACnD;AA0BO,IAAM,4BAA4B,CAAC,mBAAmB,QAAQ,KAAK;AAQnE,IAAM,4BAA4B,CAAC,YAAY,mBAAmB;AAGlE,IAAM,0BAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACD;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/protocol.ts", "../../src/runner.ts", "../../src/pi-args.ts", "../../src/runner-usage.ts"],
4
- "sourcesContent": ["import { StringDecoder } from \"node:string_decoder\";\n\nconst DEFAULT_MAX_LINE_BYTES = 256 * 1024;\n\nexport interface JsonLineDecoderOptions {\n\tmaxLineBytes?: number;\n\tonValue: (value: unknown) => void;\n\tonMalformed?: (line: string) => void;\n\tonOversized?: (bytes: number) => void;\n}\n\n/** Bounded newline-delimited JSON decoder for child Pi event streams. */\nexport class JsonLineDecoder {\n\tprivate buffer = \"\";\n\tprivate droppingOversizedLine = false;\n\tprivate readonly maxLineBytes: number;\n\tprivate readonly decoder = new StringDecoder(\"utf8\");\n\n\tconstructor(private readonly options: JsonLineDecoderOptions) {\n\t\tconst maxLineBytes = options.maxLineBytes ?? DEFAULT_MAX_LINE_BYTES;\n\t\tif (!Number.isSafeInteger(maxLineBytes) || maxLineBytes < 1) {\n\t\t\tthrow new Error(\"JSON line limit must be a positive safe integer\");\n\t\t}\n\t\tthis.maxLineBytes = maxLineBytes;\n\t}\n\n\tpush(chunk: string | Buffer): void {\n\t\tthis.buffer += typeof chunk === \"string\" ? chunk : this.decoder.write(chunk);\n\t\tthis.drain(false);\n\t}\n\n\tfinish(): void {\n\t\tthis.buffer += this.decoder.end();\n\t\tthis.drain(true);\n\t\tthis.buffer = \"\";\n\t\tthis.droppingOversizedLine = false;\n\t}\n\n\tprivate drain(flush: boolean): void {\n\t\twhile (true) {\n\t\t\tconst newline = this.buffer.indexOf(\"\\n\");\n\t\t\tif (newline < 0) break;\n\t\t\tconst line = this.buffer.slice(0, newline).replace(/\\r$/, \"\");\n\t\t\tthis.buffer = this.buffer.slice(newline + 1);\n\t\t\tif (this.droppingOversizedLine) {\n\t\t\t\tthis.droppingOversizedLine = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.processLine(line);\n\t\t}\n\n\t\tif (!flush && Buffer.byteLength(this.buffer, \"utf8\") > this.maxLineBytes) {\n\t\t\tthis.options.onOversized?.(Buffer.byteLength(this.buffer, \"utf8\"));\n\t\t\tthis.buffer = \"\";\n\t\t\tthis.droppingOversizedLine = true;\n\t\t}\n\n\t\tif (flush && this.buffer.length > 0 && !this.droppingOversizedLine) {\n\t\t\tthis.processLine(this.buffer.replace(/\\r$/, \"\"));\n\t\t}\n\t}\n\n\tprivate processLine(line: string): void {\n\t\tif (!line.trim()) return;\n\t\tconst bytes = Buffer.byteLength(line, \"utf8\");\n\t\tif (bytes > this.maxLineBytes) {\n\t\t\tthis.options.onOversized?.(bytes);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tthis.options.onValue(JSON.parse(line));\n\t\t} catch {\n\t\t\tthis.options.onMalformed?.(line);\n\t\t}\n\t}\n}\n", "import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { withFileMutationQueue } from \"@earendil-works/pi-coding-agent\";\nimport type { SchedulingDecision } from \"./adaptive-scheduler.js\";\nimport type {\n\tAgentConfig,\n\tAgentScope,\n\tAgentSource,\n\tSubagentThinkingLevel,\n} from \"./agents/types.js\";\nimport { type CapabilityGrant, revokeCapabilityGrant } from \"./capability-grant.js\";\nimport type { TargetPolicyAudit } from \"./cwd-policy.js\";\nimport type { DelegationContract } from \"./delegation-contract.js\";\nimport type { ExecutionPlan } from \"./execution-plan.js\";\nimport {\n\tappendBounded,\n\tDEFAULT_MAX_CONTEXT_BYTES,\n\tDEFAULT_MAX_MESSAGES,\n\tDEFAULT_MAX_OUTPUT_BYTES,\n\tDEFAULT_MAX_STDERR_BYTES,\n\tMAX_SUBAGENT_TIMEOUT_MS,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport type { OrchestrationMetrics } from \"./orchestration-metrics.js\";\nimport { type ClassifiedSubagentOutcome, classifyStructuredOutcome } from \"./outcome.js\";\nimport type { PanelSynthesis } from \"./panel-contract.js\";\nimport type { PanelEvidenceArtifact } from \"./panel-evidence.js\";\nimport type { PanelFailure } from \"./panel-failure.js\";\nimport type { PanelPhaseBudgets, PanelPreset } from \"./panel-planning.js\";\nimport { buildPiArgs } from \"./pi-args.js\";\nimport { resolvePiInvocation } from \"./pi-invocation.js\";\nimport { JsonLineDecoder } from \"./protocol.js\";\nimport {\n\ttype AnyStructuredSubagentResult,\n\tparseAnyStructuredSubagentResult,\n\ttype SubagentResultFormat,\n} from \"./result-contract.js\";\nimport { formatResultFailure, getResultFinalOutput, isResultError } from \"./runner-outcome.js\";\nimport { getFinalOutput } from \"./runner-result.js\";\nimport {\n\taddUsageValue,\n\tmergeUsageStats,\n\tprotocolUsageCost,\n\tprotocolUsageCount,\n\ttype UsageStats,\n} from \"./runner-usage.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\tformatTurnTerminationMessage,\n\tjournalMessages,\n\tTimeoutProgressJournal,\n\tTURN_TERMINATION_VERSION,\n\ttype TurnTerminationReport,\n} from \"./timeout-checkpoint.js\";\nimport {\n\tbuildTimeoutFinalizationPrompt,\n\tresolveTimeoutFinalizationMs,\n} from \"./timeout-finalization.js\";\nimport { TurnBudgetMonitor, type TurnBudgetStop, type TurnLimits } from \"./turn-budget.js\";\nimport type { WorkItemLedgerSnapshot } from \"./work-item-ledger.js\";\n\nexport const KILL_GRACE_MS = 5000;\n\nexport type { PiArgsOptions } from \"./pi-args.js\";\nexport { buildPiArgs } from \"./pi-args.js\";\nexport {\n\tformatResultFailure,\n\tgetResultFinalOutput,\n\tisResultError,\n} from \"./runner-outcome.js\";\nexport type { UsageStats } from \"./runner-usage.js\";\nexport type RecentActivityItem =\n\t| { type: \"text\"; text: string }\n\t| { type: \"toolCall\"; name: string; args: Record<string, unknown> };\n\nconst MAX_RECENT_ACTIVITY_ITEMS = 10;\nconst MAX_RECENT_ACTIVITY_BYTES = 8 * 1024;\nconst MAX_RECENT_ACTIVITY_ARGUMENT_BYTES = 1024;\n\nexport interface SingleResult {\n\tagent: string;\n\tagentSource: AgentSource | \"unknown\";\n\ttask: string;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\tusage: UsageStats;\n\tmodel?: string;\n\tactualProvider?: string;\n\tactualModel?: string;\n\trecentActivity?: RecentActivityItem[];\n\trecentActivityTotal?: number;\n\tthinkingLevel?: SubagentThinkingLevel;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n\tfinalOutput?: string;\n\tpartialOutput?: string;\n\ttimeoutSummary?: string;\n\ttimeoutSummaryError?: string;\n\ttermination?: TurnTerminationReport;\n\ttimedOut?: boolean;\n\ttimeoutMs?: number;\n\taborted?: boolean;\n\ttruncated?: boolean;\n\tmalformedEvents?: number;\n\tlaunchFailed?: boolean;\n\tprocessStarted?: boolean;\n\ttarget?: TargetPolicyAudit;\n\tpolicy?: {\n\t\tinherited: string[];\n\t\toverridden: string[];\n\t\tunsupported: string[];\n\t};\n\tcontract?: DelegationContract;\n\tresultFormat?: SubagentResultFormat;\n\tstructuredResult?: AnyStructuredSubagentResult;\n\tresultContractInvalid?: boolean;\n\toutcome?: ClassifiedSubagentOutcome;\n\tattemptCount?: number;\n\thedged?: boolean;\n\texecutionPlan?: ExecutionPlan;\n\tcapabilityGrant?: CapabilityGrant;\n}\n\nexport interface PanelDetails {\n\tid: string;\n\tpreset: PanelPreset;\n\tsharedTaskPreview: string;\n\tstate: \"running\" | \"completed\" | \"degraded\" | \"insufficient-panel\" | \"failed\" | \"cancelled\";\n\treviewerIds: string[];\n\tvalidReviewCount: number;\n\tfailedReviewCount: number;\n\tblockingObjectionCount: number;\n\tdissentCount: number;\n\tbudgets: PanelPhaseBudgets;\n\tevidence: PanelEvidenceArtifact[];\n\tfailures: PanelFailure[];\n\tsynthesis?: PanelSynthesis;\n\tsynthesizerResult?: SingleResult;\n\tcleanupComplete: boolean;\n}\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\" | \"workflow\" | \"panel\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SingleResult[];\n\taggregator?: SingleResult;\n\tworkflow?: WorkItemLedgerSnapshot;\n\tschedulerDecisions?: SchedulingDecision[];\n\tmetrics?: OrchestrationMetrics;\n\tpanel?: PanelDetails;\n\tisError?: boolean;\n}\n\nfunction boundMessageText(\n\tmessage: Message,\n\tmaxBytes: number,\n): { message?: Message; bytes: number; truncated: boolean } {\n\tconst originalBytes = Buffer.byteLength(JSON.stringify(message), \"utf8\");\n\tif (Number.isSafeInteger(maxBytes) && maxBytes >= 0 && originalBytes <= maxBytes) {\n\t\treturn { message, bytes: originalBytes, truncated: false };\n\t}\n\tif (!Number.isSafeInteger(maxBytes) || maxBytes < 0) return { bytes: 0, truncated: true };\n\n\tconst content: Array<\n\t\t| { type: \"text\"; text: string }\n\t\t| { type: \"toolCall\"; id: string; name: string; arguments: Record<string, unknown> }\n\t> = [];\n\tconst bounded = () => ({ ...message, content }) as Message;\n\tconst fits = () => Buffer.byteLength(JSON.stringify(bounded()), \"utf8\") <= maxBytes;\n\tconst addText = (text: string, prepend = false) => {\n\t\tif (!text.trim()) return;\n\t\tconst part = { type: \"text\" as const, text: \"\" };\n\t\tif (prepend) content.unshift(part);\n\t\telse content.push(part);\n\t\tif (!fits()) {\n\t\t\tcontent.splice(content.indexOf(part), 1);\n\t\t\treturn;\n\t\t}\n\t\tlet low = 0;\n\t\tlet high = Buffer.byteLength(text, \"utf8\");\n\t\twhile (low < high) {\n\t\t\tconst middle = Math.ceil((low + high) / 2);\n\t\t\tpart.text = truncateUtf8(text, middle).text;\n\t\t\tif (fits()) low = middle;\n\t\t\telse high = middle - 1;\n\t\t}\n\t\tpart.text = truncateUtf8(text, low).text;\n\t\tif (!part.text.trim()) content.splice(content.indexOf(part), 1);\n\t};\n\tconst addToolCall = (part: Extract<Message[\"content\"][number], { type: \"toolCall\" }>) => {\n\t\tconst toolCall = {\n\t\t\ttype: \"toolCall\" as const,\n\t\t\tid: part.id,\n\t\t\tname: part.name,\n\t\t\targuments: part.arguments,\n\t\t};\n\t\tcontent.unshift(toolCall);\n\t\tif (fits()) return;\n\t\tconst arguments_: Record<string, unknown> = {};\n\t\tfor (const key of [\"command\", \"path\", \"file_path\", \"pattern\", \"url\"]) {\n\t\t\tconst value = part.arguments[key];\n\t\t\tif (typeof value === \"string\") arguments_[key] = truncateUtf8(value, 256).text;\n\t\t}\n\t\ttoolCall.arguments = arguments_;\n\t\tif (fits()) return;\n\t\ttoolCall.arguments = {};\n\t\tif (!fits()) content.shift();\n\t};\n\n\tif (message.role === \"assistant\") {\n\t\tfor (let index = message.content.length - 1; index >= 0; index--) {\n\t\t\tconst part = message.content[index];\n\t\t\tif (part.type === \"text\") addText(part.text, true);\n\t\t\telse if (part.type === \"toolCall\") addToolCall(part);\n\t\t}\n\t} else {\n\t\tfor (const part of message.content) {\n\t\t\tif (typeof part === \"object\" && part && part.type === \"text\") addText(part.text);\n\t\t}\n\t}\n\n\tif (content.length === 0) return { bytes: 0, truncated: true };\n\tconst result = bounded();\n\tconst bytes = Buffer.byteLength(JSON.stringify(result), \"utf8\");\n\treturn { message: result, bytes, truncated: true };\n}\nfunction compactRecentActivityArguments(args: Record<string, unknown>): Record<string, unknown> {\n\tif (Buffer.byteLength(JSON.stringify(args), \"utf8\") <= MAX_RECENT_ACTIVITY_ARGUMENT_BYTES)\n\t\treturn args;\n\tconst compact: Record<string, unknown> = {};\n\tfor (const key of [\"command\", \"path\", \"file_path\", \"pattern\", \"url\", \"selector\"]) {\n\t\tconst value = args[key];\n\t\tif (typeof value === \"string\") compact[key] = truncateUtf8(value, 256).text;\n\t\telse if (typeof value === \"number\" || typeof value === \"boolean\") compact[key] = value;\n\t}\n\treturn compact;\n}\n\nfunction appendRecentActivity(result: SingleResult, message: Message): void {\n\tif (message.role !== \"assistant\") return;\n\tconst append = (item: RecentActivityItem) => {\n\t\tresult.recentActivity ??= [];\n\t\tresult.recentActivityTotal = (result.recentActivityTotal ?? 0) + 1;\n\t\tresult.recentActivity.push(item);\n\t\tif (result.recentActivity.length > MAX_RECENT_ACTIVITY_ITEMS) {\n\t\t\tresult.recentActivity.splice(0, result.recentActivity.length - MAX_RECENT_ACTIVITY_ITEMS);\n\t\t}\n\t\twhile (\n\t\t\tBuffer.byteLength(JSON.stringify(result.recentActivity), \"utf8\") > MAX_RECENT_ACTIVITY_BYTES\n\t\t) {\n\t\t\tresult.recentActivity.shift();\n\t\t}\n\t};\n\tfor (const part of message.content) {\n\t\tif (part.type === \"text\") {\n\t\t\tconst text = part.text.trim();\n\t\t\tif (text) append({ type: \"text\", text: truncateUtf8(text, 1024).text });\n\t\t} else if (part.type === \"toolCall\") {\n\t\t\tappend({\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tname: part.name,\n\t\t\t\targs: compactRecentActivityArguments(part.arguments),\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function buildFanInContext(\n\tresults: SingleResult[],\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): string {\n\tconst text = results\n\t\t.map((result, index) => {\n\t\t\tconst failed = isResultError(result);\n\t\t\tconst status = result.exitCode === -1 ? \"running\" : failed ? \"failed\" : \"completed\";\n\t\t\tconst output = getResultFinalOutput(result);\n\t\t\tconst error = result.errorMessage || result.stderr.trim();\n\t\t\tconst resultText = failed\n\t\t\t\t? `${error ? \"Error\" : output ? \"Partial output\" : \"Error\"}:\\n${formatResultFailure(result)}`\n\t\t\t\t: result.structuredResult\n\t\t\t\t\t? `Structured result:\\n${JSON.stringify(result.structuredResult)}`\n\t\t\t\t\t: output\n\t\t\t\t\t\t? `Output:\\n${output}`\n\t\t\t\t\t\t: \"Output: (no output)\";\n\t\t\treturn [\n\t\t\t\t`## Result ${index + 1}: ${result.agent} (${status})`,\n\t\t\t\t`Task: ${result.task}`,\n\t\t\t\tresultText,\n\t\t\t].join(\"\\n\\n\");\n\t\t})\n\t\t.join(\"\\n\\n---\\n\\n\");\n\treturn truncateUtf8(text, maxBytes).text;\n}\n\nexport async function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n\tonSkipped?: (item: TIn, index: number) => TOut,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tif (signal?.aborted && onSkipped) {\n\t\t\t\tresults[current] = onSkipped(items[current], current);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(\n\tagentName: string,\n\tprompt: string,\n): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"pi-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction signalProcess(proc: ReturnType<typeof spawn>, signal: NodeJS.Signals): void {\n\tif (process.platform !== \"win32\" && proc.pid) {\n\t\ttry {\n\t\t\tprocess.kill(-proc.pid, signal);\n\t\t\treturn;\n\t\t} catch {\n\t\t\t// Fall back to signaling the immediate child when process-group signaling is unavailable.\n\t\t}\n\t}\n\ttry {\n\t\tproc.kill(signal);\n\t} catch {\n\t\t// The process may already have exited.\n\t}\n}\n\nexport function terminateProcess(\n\tproc: ReturnType<typeof spawn>,\n\tgraceMs = KILL_GRACE_MS,\n): () => void {\n\tconst leaderExited = proc.exitCode !== null || proc.signalCode !== null;\n\tconst capturedOutputClosed = [proc.stdout, proc.stderr].every(\n\t\t(stream) => !stream || stream.readableEnded || stream.destroyed,\n\t);\n\tlet closed = leaderExited && capturedOutputClosed;\n\tconst onClose = () => {\n\t\tclosed = true;\n\t};\n\tproc.once(\"close\", onClose);\n\tif (!closed) signalProcess(proc, \"SIGTERM\");\n\tconst escalation = setTimeout(() => {\n\t\tif (!closed) signalProcess(proc, \"SIGKILL\");\n\t}, graceMs);\n\tescalation.unref();\n\treturn () => {\n\t\tclearTimeout(escalation);\n\t\tproc.off(\"close\", onClose);\n\t};\n}\n\nexport type OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;\n\nexport interface ChildLaunchPolicy {\n\ttools?: string[];\n\tdisableExtensions?: boolean;\n\tdisableSkills?: boolean;\n\tdisablePromptTemplates?: boolean;\n\tdisableContextFiles?: boolean;\n\tprojectTrust?: boolean;\n\tbaseSystemPrompt?: string;\n\tappendSystemPromptPaths?: string[];\n\t/** Package-owned explicit child extensions loaded even when unrelated extensions are disabled. */\n\textensionPaths?: string[];\n\t/** Package-owned tools added to the child allowlist without changing delegated execution tools. */\n\tadditionalTools?: string[];\n\t/** Ephemeral child-process environment consumed and cleared by a package-owned bridge. */\n\tenv?: NodeJS.ProcessEnv;\n\t/** Internal timeout recovery control; omitted means enabled. */\n\tfinalizeOnTimeout?: boolean;\n\t/** Internal hard deadline for the summary attempt. */\n\ttimeoutFinalizationMs?: number;\n\t/** Optional stateful result contract retained during timeout finalization. */\n\ttimeoutResultFormat?: SubagentResultFormat;\n\t/** Optional non-wall-clock limits for this turn. */\n\tturnLimits?: TurnLimits;\n\t/** Override the timeout reason when an orchestration deadline caps this child. */\n\tworkTimeoutReason?: \"work_timeout\" | \"orchestration_timeout\";\n\t/** Public limit value reported when the effective child timeout is only the remaining budget. */\n\tworkTimeoutReportLimit?: number;\n\t/** Absolute blocking-workflow deadline that also caps model finalization. */\n\torchestrationDeadlineAt?: number;\n\t/** Completion contract requested for this turn. */\n\tresultFormat?: SubagentResultFormat;\n\t/** Normalized request contract retained in result details. */\n\tcontract?: DelegationContract;\n\t/** Original task summary shown in result details when the executed prompt has contract metadata. */\n\tdisplayTask?: string;\n\t/** Immutable audit or enforcement decision made before launch. */\n\texecutionPlan?: ExecutionPlan;\n\t/** Executor-owned authority lifetime bound to the accepted plan generation. */\n\tcapabilityGrant?: CapabilityGrant;\n}\n\nexport async function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tsignal: AbortSignal | undefined,\n\tthinkingLevel: SubagentThinkingLevel | undefined,\n\ttimeoutMs: number,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SingleResult[]) => SubagentDetails,\n\tinvocationOverride?: { command: string; argsPrefix?: string[] },\n\tlaunchPolicy?: ChildLaunchPolicy,\n): Promise<SingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\tcost: 0,\n\t\t\t\tcontextTokens: 0,\n\t\t\t\tturns: 0,\n\t\t\t},\n\t\t\tthinkingLevel,\n\t\t\tstep,\n\t\t\tfinalOutput: \"\",\n\t\t};\n\t}\n\n\tconst temporaryPrompts: Array<{ dir: string; filePath: string }> = [];\n\tlet tmpPromptPath: string | null = null;\n\tlet baseSystemPromptPath: string | null = null;\n\n\tlet latestAssistantOutput = \"\";\n\tlet terminalAssistantOutput: string | undefined;\n\n\tconst progressJournal = new TimeoutProgressJournal();\n\tconst currentResult: SingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask: launchPolicy?.displayTask ?? task,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: 0,\n\t\t\tcontextTokens: 0,\n\t\t\tturns: 0,\n\t\t},\n\t\tmodel: agent.model ?? undefined,\n\t\tthinkingLevel,\n\t\tstep,\n\t\ttimeoutMs,\n\t\tcontract: launchPolicy?.contract,\n\t\tresultFormat: launchPolicy?.resultFormat,\n\t\texecutionPlan: launchPolicy?.executionPlan,\n\t\tcapabilityGrant: launchPolicy?.capabilityGrant,\n\t};\n\tconst selectedAssistantOutput = () =>\n\t\tterminalAssistantOutput !== undefined\n\t\t\t? terminalAssistantOutput\n\t\t\t: latestAssistantOutput || getFinalOutput(currentResult.messages);\n\tconst setErrorMessage = (message: string) => {\n\t\tconst bounded = truncateUtf8(message, DEFAULT_MAX_STDERR_BYTES);\n\t\tcurrentResult.errorMessage = bounded.text;\n\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\treturn bounded.text;\n\t};\n\n\tconst emitUpdate = () => {\n\t\tconst latest = truncateUtf8(selectedAssistantOutput(), DEFAULT_MAX_OUTPUT_BYTES);\n\t\tcurrentResult.finalOutput = latest.text;\n\t\tcurrentResult.truncated ||= latest.truncated;\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: currentResult.finalOutput || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tconst effectiveCwd = cwd ?? defaultCwd;\n\t\ttry {\n\t\t\tif (!fs.statSync(effectiveCwd).isDirectory()) throw new Error(\"not a directory\");\n\t\t} catch (error) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\tcurrentResult.stderr = setErrorMessage(`Invalid subagent cwd: ${effectiveCwd} (${reason})`);\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tif (signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 130;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted before start\");\n\t\t\treturn currentResult;\n\t\t}\n\t\tif (!Number.isFinite(timeoutMs) || timeoutMs < 1 || timeoutMs > MAX_SUBAGENT_TIMEOUT_MS) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tsetErrorMessage(\n\t\t\t\t`Invalid subagent timeout: expected 1-${MAX_SUBAGENT_TIMEOUT_MS}ms, received ${timeoutMs}`,\n\t\t\t);\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tif (launchPolicy?.baseSystemPrompt?.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(`${agent.name}-base`, launchPolicy.baseSystemPrompt);\n\t\t\ttemporaryPrompts.push(tmp);\n\t\t\tbaseSystemPromptPath = tmp.filePath;\n\t\t}\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttemporaryPrompts.push(tmp);\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t}\n\t\tif (signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 130;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted before launch\");\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tconst effectiveTools =\n\t\t\tlaunchPolicy && Object.hasOwn(launchPolicy, \"tools\") ? launchPolicy.tools : agent.tools;\n\t\tconst selectedTools =\n\t\t\teffectiveTools === undefined\n\t\t\t\t? undefined\n\t\t\t\t: [...new Set([...effectiveTools, ...(launchPolicy?.additionalTools ?? [])])];\n\t\tconst args = buildPiArgs({\n\t\t\tmodel: agent.model,\n\t\t\tthinkingLevel,\n\t\t\ttools: selectedTools,\n\t\t\tdisableExtensions: launchPolicy?.disableExtensions,\n\t\t\tdisableSkills: launchPolicy?.disableSkills,\n\t\t\tdisablePromptTemplates: launchPolicy?.disablePromptTemplates,\n\t\t\tdisableContextFiles: launchPolicy?.disableContextFiles,\n\t\t\tprojectTrust: launchPolicy?.projectTrust,\n\t\t\tbaseSystemPromptPath: baseSystemPromptPath ?? undefined,\n\t\t\tappendSystemPromptPaths: launchPolicy?.appendSystemPromptPaths,\n\t\t\textensionPaths: launchPolicy?.extensionPaths,\n\t\t\tsystemPromptPath: tmpPromptPath ?? undefined,\n\t\t\ttask,\n\t\t});\n\t\tlet invocation: { command: string; args: string[] };\n\t\ttry {\n\t\t\tinvocation = invocationOverride\n\t\t\t\t? {\n\t\t\t\t\t\tcommand: invocationOverride.command,\n\t\t\t\t\t\targs: [...(invocationOverride.argsPrefix ?? []), ...args],\n\t\t\t\t\t}\n\t\t\t\t: resolvePiInvocation(args);\n\t\t} catch (error) {\n\t\t\tcurrentResult.launchFailed = true;\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stderr = setErrorMessage(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t);\n\t\t\treturn currentResult;\n\t\t}\n\t\tlet wasAborted = false;\n\t\tlet timedOut = false;\n\t\tlet budgetStop:\n\t\t\t| TurnBudgetStop\n\t\t\t| { reason: \"work_timeout\" | \"orchestration_timeout\"; limit: number }\n\t\t\t| undefined;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet cleanupTermination: (() => void) | undefined;\n\t\t\tlet timeout: NodeJS.Timeout | undefined;\n\t\t\tlet terminationDeadline: NodeJS.Timeout | undefined;\n\t\t\tlet abortHandler: (() => void) | undefined;\n\t\t\tlet budgetMonitor: TurnBudgetMonitor | undefined;\n\t\t\tconst finish = (code: number) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\tif (terminationDeadline) clearTimeout(terminationDeadline);\n\t\t\t\tcleanupTermination?.();\n\t\t\t\tbudgetMonitor?.dispose();\n\t\t\t\tif (signal && abortHandler) signal.removeEventListener(\"abort\", abortHandler);\n\t\t\t\tresolve(code);\n\t\t\t};\n\t\t\tlet proc: ReturnType<typeof spawn>;\n\t\t\ttry {\n\t\t\t\tproc = spawn(invocation.command, invocation.args, {\n\t\t\t\t\tcwd: effectiveCwd,\n\t\t\t\t\tdetached: process.platform !== \"win32\",\n\t\t\t\t\tshell: false,\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\tenv: {\n\t\t\t\t\t\t...process.env,\n\t\t\t\t\t\t...launchPolicy?.env,\n\t\t\t\t\t\tPI_SUBAGENT_DEPTH: String(\n\t\t\t\t\t\t\t(Number.parseInt(process.env.PI_SUBAGENT_DEPTH ?? \"0\", 10) || 0) + 1,\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tcurrentResult.launchFailed = true;\n\t\t\t\tcurrentResult.stderr = setErrorMessage(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t);\n\t\t\t\tfinish(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst addMessage = (msg: Message) => {\n\t\t\t\tconst boundedMessage = boundMessageText(msg, DEFAULT_MAX_OUTPUT_BYTES - 2);\n\t\t\t\tcurrentResult.truncated ||= boundedMessage.truncated;\n\t\t\t\tif (!boundedMessage.message) return;\n\t\t\t\twhile (\n\t\t\t\t\tcurrentResult.messages.length >= DEFAULT_MAX_MESSAGES ||\n\t\t\t\t\tBuffer.byteLength(\n\t\t\t\t\t\tJSON.stringify([...currentResult.messages, boundedMessage.message]),\n\t\t\t\t\t\t\"utf8\",\n\t\t\t\t\t) > DEFAULT_MAX_OUTPUT_BYTES\n\t\t\t\t) {\n\t\t\t\t\tconst removed = currentResult.messages.shift();\n\t\t\t\t\tif (!removed) break;\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tBuffer.byteLength(\n\t\t\t\t\t\tJSON.stringify([...currentResult.messages, boundedMessage.message]),\n\t\t\t\t\t\t\"utf8\",\n\t\t\t\t\t) > DEFAULT_MAX_OUTPUT_BYTES\n\t\t\t\t) {\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrentResult.messages.push(boundedMessage.message);\n\t\t\t};\n\t\t\tconst processEvent = (raw: unknown) => {\n\t\t\t\tif (!raw || typeof raw !== \"object\") return;\n\t\t\t\tconst event = raw as { type?: string; message?: Message };\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message;\n\t\t\t\t\tjournalMessages(progressJournal, [msg]);\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tconst output = truncateUtf8(getFinalOutput([msg]), DEFAULT_MAX_OUTPUT_BYTES);\n\t\t\t\t\t\tcurrentResult.truncated ||= output.truncated;\n\t\t\t\t\t\tif (output.text) latestAssistantOutput = output.text;\n\t\t\t\t\t\tif (msg.stopReason === \"stop\" || msg.stopReason === \"length\") {\n\t\t\t\t\t\t\tterminalAssistantOutput = output.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tappendRecentActivity(currentResult, msg);\n\t\t\t\t\taddMessage(msg);\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tbudgetMonitor?.recordToolCalls(\n\t\t\t\t\t\t\tmsg.content.filter((part) => part.type === \"toolCall\").length,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbudgetMonitor?.recordAssistantTurn(msg.stopReason);\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage && typeof usage === \"object\") {\n\t\t\t\t\t\t\tconst input = protocolUsageCount(usage.input);\n\t\t\t\t\t\t\tconst output = protocolUsageCount(usage.output);\n\t\t\t\t\t\t\tconst cacheRead = protocolUsageCount(usage.cacheRead);\n\t\t\t\t\t\t\tconst cacheWrite = protocolUsageCount(usage.cacheWrite);\n\t\t\t\t\t\t\tconst reportedTotal = protocolUsageCount(usage.totalTokens);\n\t\t\t\t\t\t\tconst turnTotal =\n\t\t\t\t\t\t\t\treportedTotal ||\n\t\t\t\t\t\t\t\taddUsageValue(addUsageValue(input, output), addUsageValue(cacheRead, cacheWrite));\n\t\t\t\t\t\t\tconst cost = usage.cost && typeof usage.cost === \"object\" ? usage.cost : undefined;\n\t\t\t\t\t\t\tcurrentResult.usage.input = addUsageValue(currentResult.usage.input, input);\n\t\t\t\t\t\t\tcurrentResult.usage.output = addUsageValue(currentResult.usage.output, output);\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cacheRead,\n\t\t\t\t\t\t\t\tcacheRead,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite,\n\t\t\t\t\t\t\t\tcacheWrite,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.cost = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cost,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.total),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costInput = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costInput ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.input),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costOutput = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costOutput ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.output),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costCacheRead = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costCacheRead ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.cacheRead),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costCacheWrite = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costCacheWrite ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.cacheWrite),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.totalTokens = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.totalTokens ?? 0,\n\t\t\t\t\t\t\t\tturnTotal,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = turnTotal;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof msg.provider === \"string\") currentResult.actualProvider = msg.provider;\n\t\t\t\t\t\tconst actualModel =\n\t\t\t\t\t\t\ttypeof msg.responseModel === \"string\"\n\t\t\t\t\t\t\t\t? msg.responseModel\n\t\t\t\t\t\t\t\t: typeof msg.model === \"string\"\n\t\t\t\t\t\t\t\t\t? msg.model\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tif (actualModel) currentResult.actualModel = actualModel;\n\t\t\t\t\t\tif (typeof msg.stopReason === \"string\") currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (typeof msg.errorMessage === \"string\") setErrorMessage(msg.errorMessage);\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t} else if (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tjournalMessages(progressJournal, [event.message]);\n\t\t\t\t\tbudgetMonitor?.recordActivity();\n\t\t\t\t\taddMessage(event.message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst decoder = new JsonLineDecoder({\n\t\t\t\tonValue: processEvent,\n\t\t\t\tonMalformed: () => {\n\t\t\t\t\tcurrentResult.malformedEvents = (currentResult.malformedEvents ?? 0) + 1;\n\t\t\t\t},\n\t\t\t\tonOversized: () => {\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst beginTermination = (exitCode: number) => {\n\t\t\t\tif (cleanupTermination || settled) return;\n\t\t\t\tcleanupTermination = terminateProcess(proc);\n\t\t\t\tterminationDeadline = setTimeout(() => {\n\t\t\t\t\tdecoder.finish();\n\t\t\t\t\tproc.stdin?.destroy();\n\t\t\t\t\tproc.stdout?.destroy();\n\t\t\t\t\tproc.stderr?.destroy();\n\t\t\t\t\tfinish(exitCode);\n\t\t\t\t}, KILL_GRACE_MS + 1_000);\n\t\t\t};\n\t\t\tconst stopForBudget = (\n\t\t\t\tstop: TurnBudgetStop | { reason: \"work_timeout\" | \"orchestration_timeout\"; limit: number },\n\t\t\t) => {\n\t\t\t\tif (budgetStop || settled || wasAborted) return;\n\t\t\t\tbudgetStop = stop;\n\t\t\t\ttimedOut = stop.reason.endsWith(\"timeout\");\n\t\t\t\tcurrentResult.timedOut = timedOut || undefined;\n\t\t\t\tcurrentResult.stopReason = timedOut ? \"timeout\" : \"limit\";\n\t\t\t\tconst message = formatTurnTerminationMessage(stop.reason, stop.limit);\n\t\t\t\tsetErrorMessage(message);\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\t`\\n${message}.`,\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t\temitUpdate();\n\t\t\t\tbeginTermination(124);\n\t\t\t};\n\t\t\tbudgetMonitor = new TurnBudgetMonitor({\n\t\t\t\t...launchPolicy?.turnLimits,\n\t\t\t\tonExceeded: stopForBudget,\n\t\t\t});\n\n\t\t\tproc.once(\"spawn\", () => {\n\t\t\t\tcurrentResult.processStarted = true;\n\t\t\t\tif (settled || budgetStop || wasAborted) return;\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tstopForBudget({\n\t\t\t\t\t\treason: launchPolicy?.workTimeoutReason ?? \"work_timeout\",\n\t\t\t\t\t\tlimit: launchPolicy?.workTimeoutReportLimit ?? timeoutMs,\n\t\t\t\t\t});\n\t\t\t\t}, timeoutMs);\n\t\t\t\ttimeout.unref();\n\t\t\t});\n\t\t\tproc.stdout?.on(\"data\", (data) => decoder.push(data));\n\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\tdata.toString(),\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t});\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tdecoder.finish();\n\t\t\t\tfinish(budgetStop ? 124 : wasAborted ? 130 : (code ?? 0));\n\t\t\t});\n\t\t\tproc.on(\"error\", (error) => {\n\t\t\t\tcurrentResult.launchFailed = currentResult.processStarted ? undefined : true;\n\t\t\t\tconst message = setErrorMessage(error.message);\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\t`${currentResult.stderr ? \"\\n\" : \"\"}${message}`,\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t\tif (currentResult.processStarted) beginTermination(1);\n\t\t\t\telse finish(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tabortHandler = () => {\n\t\t\t\t\tif (budgetStop || settled) return;\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tcurrentResult.aborted = true;\n\t\t\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\t\t\tsetErrorMessage(\"Subagent was aborted\");\n\t\t\t\t\tbeginTermination(130);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) abortHandler();\n\t\t\t\telse signal.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tif (signal?.aborted && budgetStop) {\n\t\t\tbudgetStop = undefined;\n\t\t\ttimedOut = false;\n\t\t\tcurrentResult.timedOut = undefined;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted\");\n\t\t}\n\t\tcurrentResult.exitCode = currentResult.aborted ? 130 : exitCode;\n\t\tconst final = truncateUtf8(selectedAssistantOutput(), DEFAULT_MAX_OUTPUT_BYTES);\n\t\tcurrentResult.finalOutput = final.text;\n\t\tcurrentResult.truncated ||= final.truncated;\n\t\tif (budgetStop) {\n\t\t\tcurrentResult.partialOutput = currentResult.finalOutput || undefined;\n\t\t\tcurrentResult.termination = {\n\t\t\t\tversion: TURN_TERMINATION_VERSION,\n\t\t\t\treason: budgetStop.reason,\n\t\t\t\tlimit: budgetStop.limit,\n\t\t\t\tcheckpoint: progressJournal.checkpoint(task, currentResult.partialOutput),\n\t\t\t\tfinalization: { attempted: false, status: \"skipped\", durationMs: 0 },\n\t\t\t};\n\t\t}\n\t\tconst remainingFinalizationMs = launchPolicy?.orchestrationDeadlineAt\n\t\t\t? Math.floor(launchPolicy.orchestrationDeadlineAt - Date.now())\n\t\t\t: undefined;\n\t\tif (\n\t\t\tbudgetStop &&\n\t\t\tbudgetStop.reason !== \"orchestration_timeout\" &&\n\t\t\tlaunchPolicy?.finalizeOnTimeout !== false &&\n\t\t\t!signal?.aborted &&\n\t\t\t(remainingFinalizationMs === undefined || remainingFinalizationMs > 0)\n\t\t) {\n\t\t\tconst finalizationStartedAt = Date.now();\n\t\t\tconst requestedFinalizationMs = resolveTimeoutFinalizationMs(\n\t\t\t\ttimeoutMs,\n\t\t\t\tlaunchPolicy?.timeoutFinalizationMs,\n\t\t\t);\n\t\t\tconst finalizationMs = Math.min(\n\t\t\t\trequestedFinalizationMs,\n\t\t\t\tremainingFinalizationMs ?? requestedFinalizationMs,\n\t\t\t);\n\t\t\tconst summary = await runSingleAgent(\n\t\t\t\tdefaultCwd,\n\t\t\t\tagents,\n\t\t\t\tagentName,\n\t\t\t\tbuildTimeoutFinalizationPrompt({\n\t\t\t\t\ttask,\n\t\t\t\t\tpartialOutput: currentResult.partialOutput,\n\t\t\t\t\trecentActivity: currentResult.recentActivity,\n\t\t\t\t\tcheckpoint: currentResult.termination?.checkpoint,\n\t\t\t\t\tterminationReason: budgetStop.reason,\n\t\t\t\t\tresultFormat: launchPolicy?.timeoutResultFormat,\n\t\t\t\t}),\n\t\t\t\tcwd,\n\t\t\t\tstep,\n\t\t\t\tsignal,\n\t\t\t\tthinkingLevel,\n\t\t\t\tfinalizationMs,\n\t\t\t\tundefined,\n\t\t\t\tmakeDetails,\n\t\t\t\tinvocationOverride,\n\t\t\t\t{\n\t\t\t\t\t...launchPolicy,\n\t\t\t\t\ttools: [],\n\t\t\t\t\tdisableExtensions: true,\n\t\t\t\t\tdisableSkills: true,\n\t\t\t\t\tdisablePromptTemplates: true,\n\t\t\t\t\tdisableContextFiles: true,\n\t\t\t\t\tappendSystemPromptPaths: undefined,\n\t\t\t\t\tfinalizeOnTimeout: false,\n\t\t\t\t\tturnLimits: undefined,\n\t\t\t\t\tworkTimeoutReason: \"work_timeout\",\n\t\t\t\t\tworkTimeoutReportLimit: finalizationMs,\n\t\t\t\t\torchestrationDeadlineAt: undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tmergeUsageStats(currentResult.usage, summary.usage);\n\t\t\tconst summaryOutput = getResultFinalOutput(summary).trim();\n\t\t\tif (summary.exitCode === 0 && summaryOutput) {\n\t\t\t\tcurrentResult.timeoutSummary = summaryOutput;\n\t\t\t\tcurrentResult.finalOutput = summaryOutput;\n\t\t\t\tif (currentResult.termination) {\n\t\t\t\t\tcurrentResult.termination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentResult.timeoutSummaryError =\n\t\t\t\t\tsummary.errorMessage || summary.stderr.trim() || \"Summary produced no final text\";\n\t\t\t\tif (currentResult.termination) {\n\t\t\t\t\tcurrentResult.termination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: summary.timedOut ? \"timed_out\" : \"failed\",\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t\terror: currentResult.timeoutSummaryError,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentResult.truncated ||= summary.truncated;\n\t\t}\n\t\tif (currentResult.termination && !currentResult.finalOutput.trim()) {\n\t\t\tcurrentResult.finalOutput = formatTimeoutCheckpoint(currentResult.termination.checkpoint);\n\t\t}\n\t\tif (currentResult.exitCode === 0 && launchPolicy?.resultFormat !== undefined) {\n\t\t\tcurrentResult.structuredResult = parseAnyStructuredSubagentResult(\n\t\t\t\tcurrentResult.finalOutput ?? \"\",\n\t\t\t\tlaunchPolicy.resultFormat,\n\t\t\t);\n\t\t\tcurrentResult.resultContractInvalid =\n\t\t\t\tlaunchPolicy.resultFormat !== \"text\" && currentResult.structuredResult === undefined;\n\t\t\tif (\n\t\t\t\tcurrentResult.structuredResult?.version === \"pi-subagents:result:v2\" &&\n\t\t\t\tlaunchPolicy.executionPlan\n\t\t\t) {\n\t\t\t\tcurrentResult.structuredResult.provenance = {\n\t\t\t\t\t...currentResult.structuredResult.provenance,\n\t\t\t\t\t...(launchPolicy.executionPlan.taskId\n\t\t\t\t\t\t? { taskId: launchPolicy.executionPlan.taskId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\ttaskGeneration: launchPolicy.executionPlan.taskGeneration,\n\t\t\t\t\texecutionPlanId: launchPolicy.executionPlan.id,\n\t\t\t\t\tcancellationLineage: [...launchPolicy.executionPlan.cancellationLineage],\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (currentResult.structuredResult?.version === \"pi-subagents:result:v2\") {\n\t\t\t\tcurrentResult.outcome = classifyStructuredOutcome(\n\t\t\t\t\tcurrentResult.structuredResult.status,\n\t\t\t\t\tcurrentResult.structuredResult.reasonCode,\n\t\t\t\t);\n\t\t\t} else if (currentResult.resultContractInvalid) {\n\t\t\t\tcurrentResult.outcome = classifyStructuredOutcome(\n\t\t\t\t\t\"contract-invalid\",\n\t\t\t\t\t\"malformed-structured-result\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tcurrentResult.exitCode === 0 &&\n\t\t\tcurrentResult.stopReason !== \"error\" &&\n\t\t\t(currentResult.stopReason === \"toolUse\" || !currentResult.finalOutput.trim())\n\t\t) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tsetErrorMessage(\"Subagent completed without final text\");\n\t\t}\n\t\tif (currentResult.capabilityGrant?.state === \"active\") {\n\t\t\tcurrentResult.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\tcurrentResult.capabilityGrant,\n\t\t\t\t\"turn-settled\",\n\t\t\t\tDate.now(),\n\t\t\t);\n\t\t}\n\t\tcurrentResult.policy = {\n\t\t\tinherited: [\"environment\"],\n\t\t\toverridden: [\n\t\t\t\t\"cwd\",\n\t\t\t\t...(agent.model ? [\"model\"] : []),\n\t\t\t\t...(thinkingLevel ? [\"thinkingLevel\"] : []),\n\t\t\t\t...(effectiveTools !== undefined ? [\"tools\"] : []),\n\t\t\t\t...(launchPolicy?.disableExtensions ? [\"extensions\"] : []),\n\t\t\t\t...(launchPolicy?.disableSkills ? [\"skills\"] : []),\n\t\t\t\t...(launchPolicy?.disablePromptTemplates ? [\"promptTemplates\"] : []),\n\t\t\t\t...(launchPolicy?.disableContextFiles ? [\"contextFiles\"] : []),\n\t\t\t],\n\t\t\tunsupported: [\"approvalPolicy\", \"sandboxProfile\", \"providerHeaders\"],\n\t\t};\n\t\treturn currentResult;\n\t} finally {\n\t\tfor (const temporary of temporaryPrompts.reverse()) {\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(temporary.filePath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(temporary.dir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type { SubagentThinkingLevel } from \"./agents/types.js\";\n\nexport interface PiArgsOptions {\n\tmodel?: string;\n\tthinkingLevel?: SubagentThinkingLevel;\n\ttools?: string[];\n\tdisableExtensions?: boolean;\n\tdisableSkills?: boolean;\n\tdisablePromptTemplates?: boolean;\n\tdisableContextFiles?: boolean;\n\tprojectTrust?: boolean;\n\tbaseSystemPromptPath?: string;\n\tappendSystemPromptPaths?: string[];\n\textensionPaths?: string[];\n\t/** Existing single append prompt path retained for compatibility. */\n\tsystemPromptPath?: string;\n\ttask: string;\n}\n\nexport function buildPiArgs(options: PiArgsOptions): string[] {\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (options.model) args.push(\"--model\", options.model);\n\tif (options.thinkingLevel) args.push(\"--thinking\", options.thinkingLevel);\n\tif (options.disableExtensions) args.push(\"--no-extensions\");\n\tfor (const extensionPath of options.extensionPaths ?? []) args.push(\"-e\", extensionPath);\n\tif (options.disableSkills) args.push(\"--no-skills\");\n\tif (options.disablePromptTemplates) args.push(\"--no-prompt-templates\");\n\tif (options.disableContextFiles) args.push(\"--no-context-files\");\n\tif (options.projectTrust !== undefined) {\n\t\targs.push(options.projectTrust ? \"--approve\" : \"--no-approve\");\n\t}\n\tif (Array.isArray(options.tools)) {\n\t\tif (options.tools.length > 0) args.push(\"--tools\", options.tools.join(\",\"));\n\t\telse args.push(\"--no-tools\");\n\t}\n\tif (options.baseSystemPromptPath) args.push(\"--system-prompt\", options.baseSystemPromptPath);\n\tfor (const promptPath of options.appendSystemPromptPaths ?? []) {\n\t\targs.push(\"--append-system-prompt\", promptPath);\n\t}\n\tif (options.systemPromptPath) args.push(\"--append-system-prompt\", options.systemPromptPath);\n\targs.push(`Task: ${options.task}`);\n\treturn args;\n}\n", "export interface UsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcostInput?: number;\n\tcostOutput?: number;\n\tcostCacheRead?: number;\n\tcostCacheWrite?: number;\n\ttotalTokens?: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nconst MAX_USAGE_VALUE = Number.MAX_SAFE_INTEGER;\n\nexport function protocolUsageCount(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : 0;\n}\n\nexport function protocolUsageCost(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0\n\t\t? Math.min(value, MAX_USAGE_VALUE)\n\t\t: 0;\n}\n\nexport function addUsageValue(current: number, addition: number): number {\n\treturn Math.min(MAX_USAGE_VALUE, current + addition);\n}\n\nexport function mergeUsageStats(target: UsageStats, addition: UsageStats): void {\n\tfor (const key of [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"cost\", \"turns\"] as const) {\n\t\ttarget[key] = addUsageValue(target[key], addition[key]);\n\t}\n\tfor (const key of [\n\t\t\"costInput\",\n\t\t\"costOutput\",\n\t\t\"costCacheRead\",\n\t\t\"costCacheWrite\",\n\t\t\"totalTokens\",\n\t] as const) {\n\t\tif (addition[key] !== undefined) {\n\t\t\ttarget[key] = addUsageValue(target[key] ?? 0, addition[key]);\n\t\t}\n\t}\n\ttarget.contextTokens = addition.contextTokens || target.contextTokens;\n}\n"],
5
- "mappings": "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",
6
- "names": ["exitCode"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/stateful-limit-ui.ts", "../../src/workflow-ui.ts", "../../src/config-status.ts"],
4
- "sourcesContent": ["import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport { projectAgentRecords } from \"./agent-projection.js\";\nimport type { ManagedAgent } from \"./registry.js\";\nimport { safeTerminalLine as safeTerminalText } from \"./safe-text.js\";\nimport { inspectStatefulLimitSettings, updateStatefulLimitSetting } from \"./settings.js\";\nimport type { StatefulSubagentRuntimeStatus } from \"./stateful.js\";\nimport {\n\tisValidStatefulLimit,\n\tresolveStatefulLimits,\n\tSTATEFUL_LIMIT_DEFINITIONS,\n\ttype StatefulLimitField,\n\ttype StatefulLimits,\n\tstatefulLimitDefinition,\n} from \"./stateful-limits.js\";\n\nexport interface StatefulLimitRuntime {\n\tgetRuntimeStatus(): StatefulSubagentRuntimeStatus;\n\tlistAgents(includeClosed?: boolean): ManagedAgent[];\n}\n\nexport interface StatefulLimitApplyOptions {\n\tsignal: AbortSignal;\n\tisCurrent(): boolean;\n}\n\nexport function statefulLimitListScreen(runtime: StatefulLimitRuntime) {\n\tconst inspected = inspectStatefulLimitSettings();\n\tconst current = runtime.getRuntimeStatus().limits;\n\treturn {\n\t\tkind: \"actions\" as const,\n\t\ttitle: \"Detached Agent Limits\",\n\t\tlines: [\n\t\t\t\"These limits apply after /reload or the next Pi session.\",\n\t\t\t\"Reloading can interrupt retained detached work.\",\n\t\t\t...(inspected.error\n\t\t\t\t? [\n\t\t\t\t\t\t`Settings cannot be edited: ${safeTerminalText(inspected.error)}`,\n\t\t\t\t\t\t`Repair ${safeTerminalText(inspected.path)} and retry.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t],\n\t\titems: [\n\t\t\t...(inspected.values\n\t\t\t\t? STATEFUL_LIMIT_DEFINITIONS.map((definition) => {\n\t\t\t\t\t\tconst configured = inspected.values?.[definition.field];\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: definition.field,\n\t\t\t\t\t\t\tlabel: definition.label,\n\t\t\t\t\t\t\tdescription: `Current ${current[definition.field]} \u00B7 configured ${configured?.value ?? \"unavailable\"} (${configured?.source ?? \"unknown\"})`,\n\t\t\t\t\t\t\taction: \"pick-stateful-limit\" as const,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t: []),\n\t\t\t{ id: \"back\", label: \"Back\", action: \"back\" as const },\n\t\t],\n\t\thint: \"back\" as const,\n\t};\n}\n\nexport function statefulLimitInputScreen(field: StatefulLimitField, runtime: StatefulLimitRuntime) {\n\tconst definition = statefulLimitDefinition(field);\n\tconst inspected = inspectStatefulLimitSettings();\n\tconst configured = inspected.values?.[field];\n\treturn {\n\t\tkind: \"input\" as const,\n\t\ttitle: definition.label,\n\t\tlines: [\n\t\t\tdefinition.description,\n\t\t\t`Current session: ${runtime.getRuntimeStatus().limits[field]}`,\n\t\t\t`Configured after reload: ${configured?.value ?? \"unavailable\"} (${configured?.source ?? \"unknown\"})`,\n\t\t\t`Allowed: whole numbers ${definition.minimum === 0 ? \"0 or greater\" : \"1 or greater\"}`,\n\t\t\t`Read from: ${safeTerminalText(inspected.path)}`,\n\t\t\t...(inspected.writePath !== inspected.path\n\t\t\t\t? [`Saves to: ${safeTerminalText(inspected.writePath)}`]\n\t\t\t\t: []),\n\t\t],\n\t\tplaceholder: \"Enter a whole number\",\n\t\taction: \"set-stateful-limit\" as const,\n\t\thint: \"back\" as const,\n\t};\n}\n\nexport async function applyStatefulLimitSetting(\n\tfield: StatefulLimitField,\n\tvalue: string | undefined,\n\tctx: ExtensionCommandContext,\n\truntime: StatefulLimitRuntime,\n\toptions: StatefulLimitApplyOptions,\n) {\n\tconst next = parseStatefulLimit(field, value);\n\tif (next === undefined) {\n\t\tnotifyValidationError(field, ctx);\n\t\treturn { kind: \"rejected\" as const };\n\t}\n\tconst inspected = inspectStatefulLimitSettings();\n\tif (inspected.error || !inspected.values) {\n\t\tif (options.isCurrent() && !options.signal.aborted) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Subagent settings cannot be edited: ${safeTerminalText(inspected.error ?? \"settings are unavailable\")}`,\n\t\t\t\t\"error\",\n\t\t\t);\n\t\t}\n\t\treturn { kind: \"rejected\" as const };\n\t}\n\tconst expected = configuredValues(inspected.values);\n\tif (next === expected[field]) return { kind: \"back\" as const };\n\n\tconst beforeAgents = runtime.listAgents();\n\tconst affectedBefore = projectedRemovedAgentIds(beforeAgents, expected, {\n\t\t...expected,\n\t\t[field]: next,\n\t});\n\tif (affectedBefore.length > 0) {\n\t\tconst confirmed = await ctx.ui.confirm(\n\t\t\t`Lower ${statefulLimitDefinition(field).label}?`,\n\t\t\t[\n\t\t\t\t`This configured value would omit ${affectedBefore.length} currently retained agent record${affectedBefore.length === 1 ? \"\" : \"s\"} from projected recovery after reload.`,\n\t\t\t\t\"No agent is closed now, and this menu will not reload Pi.\",\n\t\t\t\t\"A later state rewrite can make omitted records unavailable for recovery.\",\n\t\t\t].join(\"\\n\\n\"),\n\t\t\t{ signal: options.signal },\n\t\t);\n\t\tif (options.signal.aborted || !options.isCurrent()) return { kind: \"close\" as const };\n\t\tif (!confirmed) return { kind: \"rejected\" as const };\n\t\tconst affectedAfter = projectedRemovedAgentIds(runtime.listAgents(), expected, {\n\t\t\t...expected,\n\t\t\t[field]: next,\n\t\t});\n\t\tif (!sameIds(affectedBefore, affectedAfter)) {\n\t\t\tctx.ui.notify(\"Detached agents changed while confirming; review the limit again.\", \"warning\");\n\t\t\treturn { kind: \"rejected\" as const };\n\t\t}\n\t}\n\n\tif (options.signal.aborted || !options.isCurrent()) return { kind: \"close\" as const };\n\ttry {\n\t\tupdateStatefulLimitSetting(field, next, expected);\n\t} catch (error) {\n\t\tif (options.isCurrent() && !options.signal.aborted) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Detached limit was not saved; the previous setting is unchanged: ${formatError(error)}`,\n\t\t\t\t\"error\",\n\t\t\t);\n\t\t}\n\t\treturn { kind: \"rejected\" as const };\n\t}\n\tif (options.signal.aborted || !options.isCurrent()) return { kind: \"close\" as const };\n\tctx.ui.notify(\n\t\t`Saved ${statefulLimitDefinition(field).label.toLowerCase()}: ${next}. Applies after /reload; clear retained agents before reloading if their work must not be interrupted.`,\n\t\t\"info\",\n\t);\n\treturn { kind: \"back\" as const };\n}\n\nexport function formatDetachedLimitSummary(status: StatefulSubagentRuntimeStatus): string {\n\treturn [\n\t\t`${status.limits.maxAgents} retained`,\n\t\t`${status.limits.maxActiveTurns} active turns`,\n\t\t`${status.limits.maxChildrenPerAgent} children`,\n\t\t`depth ${status.limits.maxDepth}`,\n\t\t`${status.limits.maxStoredAgents} stored`,\n\t].join(\" \u00B7 \");\n}\n\nexport function formatConfiguredDetachedLimitDivergence(\n\tstatus: StatefulSubagentRuntimeStatus,\n\tvalues: NonNullable<ReturnType<typeof inspectStatefulLimitSettings>[\"values\"]>,\n): string | undefined {\n\tconst changed = STATEFUL_LIMIT_DEFINITIONS.flatMap((definition) => {\n\t\tconst configured = values[definition.field].value;\n\t\treturn configured === status.limits[definition.field]\n\t\t\t? []\n\t\t\t: [`${definition.label.toLowerCase()} ${configured}`];\n\t});\n\treturn changed.length > 0 ? `Configured after reload: ${changed.join(\" \u00B7 \")}` : undefined;\n}\n\nexport function formatConfiguredDetachedLimits(\n\tvalues: NonNullable<ReturnType<typeof inspectStatefulLimitSettings>[\"values\"]>,\n): string {\n\treturn STATEFUL_LIMIT_DEFINITIONS.map((definition) => {\n\t\tconst snapshot = values[definition.field];\n\t\treturn `${definition.label.toLowerCase()} ${snapshot.value} (${snapshot.source})`;\n\t}).join(\" \u00B7 \");\n}\n\nexport function formatEmptyStatefulRuntime(status: StatefulSubagentRuntimeStatus): string {\n\tif (!status.enabled) return \"Stateful subagents are disabled in user settings.\";\n\tif (!status.initialized) return \"Stateful subagents are not initialized for this session.\";\n\treturn \"No current-session subagents.\";\n}\n\nfunction parseStatefulLimit(\n\tfield: StatefulLimitField,\n\tvalue: string | undefined,\n): number | undefined {\n\tconst normalized = value?.trim() ?? \"\";\n\tif (!/^\\d+$/u.test(normalized)) return undefined;\n\tconst parsed = Number(normalized);\n\treturn isValidStatefulLimit(field, parsed) ? parsed : undefined;\n}\n\nfunction notifyValidationError(field: StatefulLimitField, ctx: ExtensionCommandContext): void {\n\tconst definition = statefulLimitDefinition(field);\n\tctx.ui.notify(\n\t\t`${definition.label} must be a safe whole number ${definition.minimum === 0 ? \"0 or greater\" : \"1 or greater\"}.`,\n\t\t\"warning\",\n\t);\n}\n\nfunction configuredValues(\n\tvalues: NonNullable<ReturnType<typeof inspectStatefulLimitSettings>[\"values\"]>,\n): StatefulLimits {\n\treturn resolveStatefulLimits(\n\t\tObject.fromEntries(Object.entries(values).map(([field, snapshot]) => [field, snapshot.value])),\n\t);\n}\n\nfunction projectedRemovedAgentIds(\n\tagents: readonly ManagedAgent[],\n\tcurrent: StatefulLimits,\n\tnext: StatefulLimits,\n): string[] {\n\tconst restorable = agents.filter(\n\t\t(agent) => agent.state !== \"closed\" && agent.workspaceMode !== \"worktree\",\n\t);\n\tconst before = projectForReload(restorable, current);\n\tconst afterIds = new Set(projectForReload(restorable, next).map((agent) => agent.id));\n\treturn before.filter((agent) => !afterIds.has(agent.id)).map((agent) => agent.id);\n}\n\nfunction projectForReload(agents: readonly ManagedAgent[], limits: StatefulLimits): ManagedAgent[] {\n\tconst stored = projectAgentRecords(agents, { maxAgents: limits.maxStoredAgents });\n\treturn projectAgentRecords(stored, {\n\t\tmaxAgents: limits.maxAgents,\n\t\tmaxDepth: limits.maxDepth,\n\t});\n}\n\nfunction sameIds(left: readonly string[], right: readonly string[]): boolean {\n\treturn left.length === right.length && left.every((id, index) => id === right[index]);\n}\n\nfunction formatError(error: unknown): string {\n\treturn safeTerminalText(error instanceof Error ? error.message : String(error));\n}\n", "import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport type { DelegationWorkflow } from \"./settings/inspection.js\";\n\nexport async function showWorkflowPreview(\n\tctx: ExtensionCommandContext,\n\tcurrent: DelegationWorkflow,\n\tnext: DelegationWorkflow,\n\trequiresReload: boolean,\n\tsignal: AbortSignal,\n): Promise<boolean> {\n\tconst changes = workflowEffects(current, next);\n\treturn ctx.ui.confirm(\n\t\trequiresReload ? \"Save delegation change and reload?\" : \"Save delegation change?\",\n\t\t[\n\t\t\t`Current: ${workflowLabel(current)}`,\n\t\t\t`New: ${workflowLabel(next)}`,\n\t\t\t\"\",\n\t\t\t\"Effect:\",\n\t\t\t...(changes.length > 0 ? changes : [\"Keep the current registered tools\"]).map(\n\t\t\t\t(effect) => `- ${effect}`,\n\t\t\t),\n\t\t\t`- ${requiresReload ? \"Reload the extension to apply this tool surface\" : \"No reload is needed because the active tools already match\"}`,\n\t\t].join(\"\\n\"),\n\t\t{ signal },\n\t);\n}\n\nexport function workflowLabel(value: DelegationWorkflow): string {\n\tswitch (value) {\n\t\tcase \"all\":\n\t\t\treturn \"All delegation methods\";\n\t\tcase \"async-only\":\n\t\t\treturn \"Async only\";\n\t\tcase \"blocking-only\":\n\t\t\treturn \"Blocking only\";\n\t\tcase \"disabled\":\n\t\t\treturn \"Delegation disabled\";\n\t}\n}\n\nfunction workflowEffects(current: DelegationWorkflow, next: DelegationWorkflow): string[] {\n\tconst blockingEnabled = (value: DelegationWorkflow) =>\n\t\tvalue === \"all\" || value === \"blocking-only\";\n\tconst asyncEnabled = (value: DelegationWorkflow) => value === \"all\" || value === \"async-only\";\n\tconst effects: string[] = [];\n\tif (blockingEnabled(current) !== blockingEnabled(next)) {\n\t\teffects.push(\n\t\t\tblockingEnabled(next)\n\t\t\t\t? \"Add blocking `subagent` and read-only `subagent_consult`\"\n\t\t\t\t: \"Remove blocking `subagent` and read-only `subagent_consult`\",\n\t\t);\n\t}\n\tif (asyncEnabled(current) !== asyncEnabled(next)) {\n\t\teffects.push(\n\t\t\tasyncEnabled(next)\n\t\t\t\t? \"Add async `subagent_spawn`, `subagent_send`, `subagent_manage`, and `subagent_mailbox`\"\n\t\t\t\t: \"Remove async `subagent_spawn`, `subagent_send`, `subagent_manage`, and `subagent_mailbox`\",\n\t\t);\n\t}\n\treturn effects;\n}\n", "import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport type {\n\tCompletionDelivery,\n\tConsultationCwdPolicy,\n\tConsultResourcePolicy,\n\tDelegationCwdPolicy,\n} from \"./agents/types.js\";\nimport type { SubagentSettingsRuntime } from \"./config-ui.js\";\nimport { safeTerminalLine as safeTerminalText } from \"./safe-text.js\";\nimport type { DelegationWorkflow } from \"./settings/inspection.js\";\nimport {\n\tinspectBlockingParallelLimitSettings,\n\tinspectCompletionDeliverySettings,\n\tinspectConsultResourceSettings,\n\tinspectCwdPolicySettings,\n\tinspectDelegationWorkflowSettings,\n\tinspectStatefulLimitSettings,\n\tinspectStatefulTransportSettings,\n} from \"./settings.js\";\nimport type { StatefulSubagentRuntimeStatus } from \"./stateful.js\";\nimport {\n\tformatConfiguredDetachedLimitDivergence,\n\tformatConfiguredDetachedLimits,\n\tformatDetachedLimitSummary,\n} from \"./stateful-limit-ui.js\";\nimport { STATEFUL_LIMIT_DEFINITIONS } from \"./stateful-limits.js\";\nimport { workflowLabel } from \"./workflow-ui.js\";\n\nexport function showSubagentStatus(\n\tctx: ExtensionCommandContext,\n\truntime: SubagentSettingsRuntime,\n): void {\n\tif (ctx.mode !== \"tui\" && !ctx.hasUI) return;\n\tconst snapshot = inspectCompletionDeliverySettings();\n\tctx.ui.notify(\n\t\tformatStatus(runtime.getRuntimeStatus(), snapshot, runtime),\n\t\tsnapshot.error ? \"warning\" : \"info\",\n\t);\n}\n\nexport function showSubagentHelp(\n\tctx: ExtensionCommandContext,\n\truntime: SubagentSettingsRuntime,\n): void {\n\tif (ctx.mode !== \"tui\" && !ctx.hasUI) return;\n\tctx.ui.notify(helpLines(runtime).join(\"\\n\"), \"info\");\n}\n\nexport function statusLines(runtime: SubagentSettingsRuntime): string[] {\n\tconst snapshot = inspectCompletionDeliverySettings();\n\treturn formatStatus(runtime.getRuntimeStatus(), snapshot, runtime).split(\"\\n\");\n}\n\nexport function helpLines(runtime: SubagentSettingsRuntime): string[] {\n\tconst snapshot = inspectCompletionDeliverySettings();\n\tconst cwdPolicy = inspectCwdPolicySettings();\n\tconst parallelLimit = inspectBlockingParallelLimitSettings();\n\tconst detachedLimits = inspectStatefulLimitSettings();\n\tconst transport = inspectStatefulTransportSettings();\n\treturn [\n\t\t\"/subagents \u2014 choose delegation workflow, manage current agents, and configure agent tools\",\n\t\t\"/subagents settings \u2014 configure target locations, trusted resources, and async completion\",\n\t\t\"/subagents status \u2014 show current-session and user-setting values\",\n\t\t\"/subagents help \u2014 show this help\",\n\t\t\"Target policies control startup directories and resources, not filesystem access or sandboxing.\",\n\t\t\"Manage saved folder trust with Pi /trust and restart Pi after changing it.\",\n\t\t`Runtime consultation target: ${consultationCwdLabel(runtime.getConsultationCwdPolicy())}`,\n\t\t`Configured consultation target: ${consultationCwdLabel(cwdPolicy.consultation.value)} (${cwdPolicy.consultation.source})`,\n\t\t`Runtime delegation target: ${delegationCwdLabel(runtime.getDelegationCwdPolicy())}`,\n\t\t`Configured delegation target: ${delegationCwdLabel(cwdPolicy.delegation.value)} (${cwdPolicy.delegation.source})`,\n\t\t`Maximum parallel workers: ${runtime.getMaxParallelTasks()} per blocking call`,\n\t\t`Configured parallel limit: ${parallelLimit.value} (${parallelLimit.source})`,\n\t\t`Detached limits: ${formatDetachedLimitSummary(runtime.getRuntimeStatus())}`,\n\t\t`Configured transport: ${transport.value} (${transport.source})`,\n\t\t...(detachedLimits.values\n\t\t\t? [`Configured detached limits: ${formatConfiguredDetachedLimits(detachedLimits.values)}`]\n\t\t\t: [\"Configured detached limits: unavailable; repair user settings\"]),\n\t\t\"Detached limits and transport apply after /reload; clear retained agents first if their work must not be interrupted.\",\n\t\t`User settings: ${safeTerminalText(snapshot.path)}`,\n\t];\n}\n\nexport function formatManagerSummary(\n\truntime: SubagentSettingsRuntime,\n\tstatus: StatefulSubagentRuntimeStatus,\n\tconfigured: ReturnType<typeof inspectDelegationWorkflowSettings>,\n): string {\n\tconst current = currentWorkflow(runtime, status);\n\tconst cwdPolicy = inspectCwdPolicySettings();\n\tconst consult = inspectConsultResourceSettings();\n\tconst detachedLimits = inspectStatefulLimitSettings();\n\tconst transport = inspectStatefulTransportSettings();\n\tconst detachedDivergence = detachedLimits.values\n\t\t? formatConfiguredDetachedLimitDivergence(status, detachedLimits.values)\n\t\t: undefined;\n\treturn [\n\t\t`Delegation: ${workflowLabel(current)}`,\n\t\t`Completion: ${completionLabel(status.completionDelivery)}`,\n\t\t`Consult target: ${consultationCwdLabel(runtime.getConsultationCwdPolicy())}`,\n\t\t`Delegation target: ${delegationCwdLabel(runtime.getDelegationCwdPolicy())}`,\n\t\t`Consult resources: ${consultResourceLabel(runtime.getConsultResourcePolicy())}`,\n\t\t`Parallel workers: max ${runtime.getMaxParallelTasks()} per blocking call`,\n\t\t`Detached limits: ${formatDetachedLimitSummary(status)}`,\n\t\t`Transport: ${status.transport}`,\n\t\t`Configured transport: ${transport.value} \u00B7 ${transport.source}`,\n\t\t`Configured consult target: ${consultationCwdLabel(cwdPolicy.consultation.value)} \u00B7 ${cwdPolicy.consultation.source}`,\n\t\t`Configured delegation target: ${delegationCwdLabel(cwdPolicy.delegation.value)} \u00B7 ${cwdPolicy.delegation.source}`,\n\t\t`Configured consult resources: ${consultResourceLabel(consult.value)} \u00B7 ${consult.source}`,\n\t\t`Settings: ${safeTerminalText(cwdPolicy.path)}`,\n\t\t`Agents: ${status.activeAgents} active \u00B7 ${status.retainedAgents} retained`,\n\t\t...(detachedDivergence ? [detachedDivergence] : []),\n\t\t...(configured.value !== current\n\t\t\t? [`Configured after reload: ${workflowLabel(configured.value)}`]\n\t\t\t: []),\n\t\t...(configured.error || detachedLimits.error\n\t\t\t? [\"Settings need repair; open Advanced settings for details.\"]\n\t\t\t: []),\n\t].join(\"\\n\");\n}\n\nfunction formatStatus(\n\tstatus: StatefulSubagentRuntimeStatus,\n\tsnapshot: ReturnType<typeof inspectCompletionDeliverySettings>,\n\truntime?: SubagentSettingsRuntime,\n): string {\n\tconst configuredWorkflow = inspectDelegationWorkflowSettings();\n\tconst consult = inspectConsultResourceSettings();\n\tconst cwdPolicy = inspectCwdPolicySettings();\n\tconst parallelLimit = inspectBlockingParallelLimitSettings();\n\tconst detachedLimits = inspectStatefulLimitSettings();\n\tconst transport = inspectStatefulTransportSettings();\n\tconst current = runtime ? currentWorkflow(runtime, status) : configuredWorkflow.value;\n\treturn [\n\t\t\"Current session\",\n\t\t` Delegation: ${workflowLabel(current)}`,\n\t\t` Async runtime: ${status.initialized ? \"initialized\" : status.enabled ? \"not initialized\" : \"disabled\"}`,\n\t\t` Transport: ${status.transport}`,\n\t\t` Configured transport: ${transport.value} (${transport.source})`,\n\t\t` Completion: ${completionLabel(status.completionDelivery)}`,\n\t\t` Consultation target: ${consultationCwdLabel(runtime?.getConsultationCwdPolicy() ?? cwdPolicy.consultation.value)}`,\n\t\t` Delegation target: ${delegationCwdLabel(runtime?.getDelegationCwdPolicy() ?? cwdPolicy.delegation.value)}`,\n\t\t` Consultation resources: ${consultResourceLabel(runtime?.getConsultResourcePolicy() ?? consult.value)}`,\n\t\t` Maximum parallel workers: ${runtime?.getMaxParallelTasks() ?? parallelLimit.value} per blocking call`,\n\t\t` Detached limits: ${formatDetachedLimitSummary(status)}`,\n\t\t` Agents: ${status.activeAgents} active, ${status.retainedAgents} retained`,\n\t\t\"User settings\",\n\t\t` Delegation source: ${configuredWorkflow.source}`,\n\t\t` Configured delegation: ${workflowLabel(configuredWorkflow.value)}`,\n\t\t` Completion source: ${snapshot.source}`,\n\t\t` Configured completion: ${completionLabel(snapshot.value)}`,\n\t\t` Configured parallel limit: ${parallelLimit.value}`,\n\t\t` Parallel limit source: ${parallelLimit.source}`,\n\t\t...(detachedLimits.values\n\t\t\t? STATEFUL_LIMIT_DEFINITIONS.map((definition) => {\n\t\t\t\t\tconst configured = detachedLimits.values?.[definition.field];\n\t\t\t\t\treturn ` Configured ${definition.label.toLowerCase()}: ${configured?.value} (${configured?.source})`;\n\t\t\t\t})\n\t\t\t: [\" Configured detached limits: unavailable\"]),\n\t\t` Configured consultation target: ${consultationCwdLabel(cwdPolicy.consultation.value)}`,\n\t\t` Consultation target source: ${cwdPolicy.consultation.source}`,\n\t\t` Configured delegation target: ${delegationCwdLabel(cwdPolicy.delegation.value)}`,\n\t\t` Delegation target source: ${cwdPolicy.delegation.source}`,\n\t\t` Configured consultation resources: ${consultResourceLabel(consult.value)}`,\n\t\t` Consultation resource source: ${consult.source}`,\n\t\t` Path: ${safeTerminalText(snapshot.path)}`,\n\t\tconfiguredWorkflow.error ||\n\t\tsnapshot.error ||\n\t\tcwdPolicy.error ||\n\t\tparallelLimit.error ||\n\t\tdetachedLimits.error ||\n\t\ttransport.error\n\t\t\t? ` Warning: ${safeTerminalText(configuredWorkflow.error ?? snapshot.error ?? cwdPolicy.error ?? parallelLimit.error ?? detachedLimits.error ?? transport.error ?? \"invalid settings\")}`\n\t\t\t: \" Warning: none\",\n\t\tconfiguredWorkflow.value !== current\n\t\t\t? \"Configured delegation differs from this session. Run /reload to apply it.\"\n\t\t\t: \"Manual file changes require /reload.\",\n\t].join(\"\\n\");\n}\n\nexport function currentWorkflow(\n\truntime: SubagentSettingsRuntime,\n\tstatus: StatefulSubagentRuntimeStatus,\n): DelegationWorkflow {\n\tconst blocking = runtime.getBlockingEnabled();\n\tif (blocking && status.enabled) return \"all\";\n\tif (status.enabled) return \"async-only\";\n\tif (blocking) return \"blocking-only\";\n\treturn \"disabled\";\n}\n\nexport function completionLabel(value: CompletionDelivery): string {\n\treturn value === \"auto-resume\" ? \"Resume automatically when finished\" : \"Wait until my next turn\";\n}\n\nexport function consultationCwdLabel(value: ConsultationCwdPolicy): string {\n\treturn value === \"current-workspace\"\n\t\t? \"Current workspace only\"\n\t\t: \"Anywhere \u00B7 untrusted targets inherit nothing\";\n}\n\nexport function delegationCwdLabel(value: DelegationCwdPolicy): string {\n\tswitch (value) {\n\t\tcase \"trusted-targets\":\n\t\t\treturn \"Current or saved-trusted folders\";\n\t\tcase \"current-workspace\":\n\t\t\treturn \"Current workspace only\";\n\t\tcase \"anywhere\":\n\t\t\treturn \"Anywhere \u00B7 normal Pi permissions\";\n\t}\n}\n\nexport function consultResourceLabel(value: ConsultResourcePolicy): string {\n\tswitch (value) {\n\t\tcase \"project-context\":\n\t\t\treturn \"Project context only\";\n\t\tcase \"none\":\n\t\t\treturn \"No inherited resources\";\n\t\tcase \"all\":\n\t\t\treturn \"All trusted resources\";\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }