@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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/settings/schema.ts", "../../src/settings/inspection.ts", "../../src/settings-reader.ts"],
4
+ "sourcesContent": ["import {\n\tCONSULT_RESOURCE_POLICIES,\n\tCONSULTATION_CWD_POLICIES,\n\ttype ConsultationCwdPolicy,\n\ttype ConsultResourcePolicy,\n\tDELEGATION_CWD_POLICIES,\n\ttype DelegationCwdPolicy,\n\tisThinkingLevel,\n\ttype SubagentAgentConfig,\n\ttype SubagentSettings,\n} from \"../agents/types.js\";\nimport { MAX_CONFIGURABLE_PARALLEL_TASKS, MAX_SUBAGENT_TIMEOUT_MS } from \"../limits.js\";\nimport { isValidStatefulLimit, STATEFUL_LIMIT_FIELDS } from \"../stateful-limits.js\";\n\nexport function hasOwn(obj: object, key: PropertyKey): boolean {\n\treturn Object.hasOwn(obj, key);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nexport function isPositiveNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 1;\n}\n\nexport function isPositiveInteger(value: unknown): value is number {\n\treturn isPositiveNumber(value) && Number.isSafeInteger(value);\n}\n\nexport function normalizeAgentSettings(value: unknown): SubagentAgentConfig | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\n\tconst config: SubagentAgentConfig = {};\n\tlet hasKnownField = false;\n\n\tif (hasOwn(value, \"tools\")) {\n\t\tif (!isStringArray(value.tools)) return undefined;\n\t\tconfig.tools = value.tools;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"model\")) {\n\t\tif (value.model !== null && typeof value.model !== \"string\") return undefined;\n\t\tconfig.model = value.model;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"thinkingLevel\")) {\n\t\tif (value.thinkingLevel !== null && !isThinkingLevel(value.thinkingLevel)) return undefined;\n\t\tconfig.thinkingLevel = value.thinkingLevel;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"timeoutMs\")) {\n\t\tif (\n\t\t\tvalue.timeoutMs !== null &&\n\t\t\t(!isPositiveNumber(value.timeoutMs) || value.timeoutMs > MAX_SUBAGENT_TIMEOUT_MS)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconfig.timeoutMs = value.timeoutMs;\n\t\thasKnownField = true;\n\t}\n\n\treturn hasKnownField ? config : undefined;\n}\n\nexport function normalizeSubagentSettings(value: unknown): SubagentSettings | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\tconst settings: SubagentSettings = {};\n\tif (hasOwn(value, \"agents\")) {\n\t\tif (!isPlainObject(value.agents)) return undefined;\n\t\tconst agents: Record<string, SubagentAgentConfig> = {};\n\t\tfor (const [name, rawConfig] of Object.entries(value.agents)) {\n\t\t\tconst config = normalizeAgentSettings(rawConfig);\n\t\t\tif (config) agents[name] = config;\n\t\t}\n\t\tif (Object.keys(agents).length > 0) settings.agents = agents;\n\t}\n\tif (hasOwn(value, \"blocking\")) {\n\t\tif (!isPlainObject(value.blocking)) return undefined;\n\t\tconst blocking: NonNullable<SubagentSettings[\"blocking\"]> = {};\n\t\tif (hasOwn(value.blocking, \"enabled\")) {\n\t\t\tif (typeof value.blocking.enabled !== \"boolean\") return undefined;\n\t\t\tblocking.enabled = value.blocking.enabled;\n\t\t}\n\t\tif (hasOwn(value.blocking, \"maxParallelTasks\")) {\n\t\t\tif (\n\t\t\t\t!isPositiveInteger(value.blocking.maxParallelTasks) ||\n\t\t\t\tvalue.blocking.maxParallelTasks > MAX_CONFIGURABLE_PARALLEL_TASKS\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tblocking.maxParallelTasks = value.blocking.maxParallelTasks;\n\t\t}\n\t\tsettings.blocking = blocking;\n\t}\n\tif (hasOwn(value, \"stateful\")) {\n\t\tif (!isPlainObject(value.stateful)) return undefined;\n\t\tconst runtime: NonNullable<SubagentSettings[\"stateful\"]> = {};\n\t\tif (hasOwn(value.stateful, \"transport\")) {\n\t\t\tif (\n\t\t\t\tvalue.stateful.transport !== \"subprocess\" &&\n\t\t\t\tvalue.stateful.transport !== \"in-process\" &&\n\t\t\t\tvalue.stateful.transport !== \"rpc\" &&\n\t\t\t\tvalue.stateful.transport !== \"auto\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\truntime.transport = value.stateful.transport;\n\t\t}\n\t\tif (hasOwn(value.stateful, \"completionDelivery\")) {\n\t\t\tif (\n\t\t\t\tvalue.stateful.completionDelivery !== \"next-turn\" &&\n\t\t\t\tvalue.stateful.completionDelivery !== \"auto-resume\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\truntime.completionDelivery = value.stateful.completionDelivery;\n\t\t}\n\t\tfor (const key of STATEFUL_LIMIT_FIELDS) {\n\t\t\tif (hasOwn(value.stateful, key)) {\n\t\t\t\tif (!isValidStatefulLimit(key, value.stateful[key])) return undefined;\n\t\t\t\truntime[key] = value.stateful[key];\n\t\t\t}\n\t\t}\n\t\tfor (const key of [\"maxMailboxMessages\", \"maxMailboxMessageBytes\", \"idleTtlMs\"] as const) {\n\t\t\tif (hasOwn(value.stateful, key)) {\n\t\t\t\tif (!isPositiveInteger(value.stateful[key])) return undefined;\n\t\t\t\truntime[key] = value.stateful[key];\n\t\t\t}\n\t\t}\n\t\tif (hasOwn(value.stateful, \"retentionDays\")) {\n\t\t\tif (!isPositiveNumber(value.stateful.retentionDays)) return undefined;\n\t\t\truntime.retentionDays = value.stateful.retentionDays;\n\t\t}\n\t\tif (hasOwn(value.stateful, \"enabled\")) {\n\t\t\tif (typeof value.stateful.enabled !== \"boolean\") return undefined;\n\t\t\truntime.enabled = value.stateful.enabled;\n\t\t}\n\t\tsettings.stateful = runtime;\n\t}\n\tif (hasOwn(value, \"consult\")) {\n\t\tif (!isPlainObject(value.consult)) return undefined;\n\t\tconst consult: NonNullable<SubagentSettings[\"consult\"]> = {};\n\t\tif (hasOwn(value.consult, \"resources\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.consult.resources !== \"string\" ||\n\t\t\t\t!CONSULT_RESOURCE_POLICIES.includes(value.consult.resources as ConsultResourcePolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconsult.resources = value.consult.resources as ConsultResourcePolicy;\n\t\t}\n\t\tsettings.consult = consult;\n\t}\n\tif (hasOwn(value, \"cwdPolicy\")) {\n\t\tif (!isPlainObject(value.cwdPolicy)) return undefined;\n\t\tconst cwdPolicy: NonNullable<SubagentSettings[\"cwdPolicy\"]> = {};\n\t\tif (hasOwn(value.cwdPolicy, \"consultation\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.cwdPolicy.consultation !== \"string\" ||\n\t\t\t\t!CONSULTATION_CWD_POLICIES.includes(value.cwdPolicy.consultation as ConsultationCwdPolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcwdPolicy.consultation = value.cwdPolicy.consultation as ConsultationCwdPolicy;\n\t\t}\n\t\tif (hasOwn(value.cwdPolicy, \"delegation\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.cwdPolicy.delegation !== \"string\" ||\n\t\t\t\t!DELEGATION_CWD_POLICIES.includes(value.cwdPolicy.delegation as DelegationCwdPolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcwdPolicy.delegation = value.cwdPolicy.delegation as DelegationCwdPolicy;\n\t\t}\n\t\tsettings.cwdPolicy = cwdPolicy;\n\t}\n\tif (hasOwn(value, \"usageRecording\")) {\n\t\tif (!isPlainObject(value.usageRecording)) return undefined;\n\t\tconst usageRecording: NonNullable<SubagentSettings[\"usageRecording\"]> = {};\n\t\tif (hasOwn(value.usageRecording, \"enabled\")) {\n\t\t\tif (typeof value.usageRecording.enabled !== \"boolean\") return undefined;\n\t\t\tusageRecording.enabled = value.usageRecording.enabled;\n\t\t}\n\t\tsettings.usageRecording = usageRecording;\n\t}\n\treturn settings;\n}\n", "import type {\n\tCompletionDelivery,\n\tConsultationCwdPolicy,\n\tConsultResourcePolicy,\n\tDelegationCwdPolicy,\n\tSubagentSettings,\n\tSubagentTransportKind,\n} from \"../agents/types.js\";\nimport { DEFAULT_MAX_PARALLEL_TASKS } from \"../limits.js\";\nimport {\n\tresolveStatefulLimits,\n\tSTATEFUL_LIMIT_FIELDS,\n\ttype StatefulLimitField,\n} from \"../stateful-limits.js\";\nimport { hasOwn, isPlainObject } from \"./schema.js\";\n\nconst DEFAULT_COMPLETION_DELIVERY: CompletionDelivery = \"next-turn\";\nexport const DEFAULT_CONSULT_RESOURCE_POLICY: ConsultResourcePolicy = \"project-context\";\nexport const DEFAULT_CONSULTATION_CWD_POLICY: ConsultationCwdPolicy = \"anywhere\";\nexport const DEFAULT_DELEGATION_CWD_POLICY: DelegationCwdPolicy = \"trusted-targets\";\n\nexport type DelegationWorkflow = \"all\" | \"async-only\" | \"blocking-only\" | \"disabled\";\n\ntype SettingsSource = \"default\" | \"user settings\";\n\nexport interface InspectedSubagentSettingsDocument {\n\tpath: string;\n\traw?: Record<string, unknown>;\n\tsettings?: SubagentSettings;\n\terror?: string;\n}\n\nexport interface DelegationWorkflowSettingsSnapshot {\n\tpath: string;\n\tvalue: DelegationWorkflow;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface CompletionDeliverySettingsSnapshot {\n\tpath: string;\n\tvalue: CompletionDelivery;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface StatefulTransportSettingsSnapshot {\n\tpath: string;\n\tvalue: SubagentTransportKind;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface BlockingParallelLimitSettingsSnapshot {\n\tpath: string;\n\tvalue: number;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface StatefulLimitFieldSnapshot {\n\tvalue: number;\n\tsource: SettingsSource;\n}\n\nexport interface StatefulLimitSettingsSnapshot {\n\tpath: string;\n\twritePath: string;\n\tvalues?: Record<StatefulLimitField, StatefulLimitFieldSnapshot>;\n\terror?: string;\n}\n\nexport interface ConsultResourceSettingsSnapshot {\n\tpath: string;\n\tvalue: ConsultResourcePolicy;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface CwdPolicyFieldSnapshot<T> {\n\tvalue: T;\n\tsource: SettingsSource;\n}\n\nexport interface CwdPolicySettingsSnapshot {\n\tpath: string;\n\tconsultation: CwdPolicyFieldSnapshot<ConsultationCwdPolicy>;\n\tdelegation: CwdPolicyFieldSnapshot<DelegationCwdPolicy>;\n\terror?: string;\n}\n\nexport interface SubagentSettingsSnapshot {\n\tpath: string;\n\tsettings?: SubagentSettings;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface UsageRecordingSettingsSnapshot {\n\tpath: string;\n\tenabled: boolean;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport function resolveDelegationWorkflow(\n\tblockingEnabled: boolean,\n\tstatefulEnabled: boolean,\n): DelegationWorkflow {\n\tif (blockingEnabled && statefulEnabled) return \"all\";\n\tif (statefulEnabled) return \"async-only\";\n\tif (blockingEnabled) return \"blocking-only\";\n\treturn \"disabled\";\n}\n\nexport function resolveBlockingMaxParallelTasks(settings?: SubagentSettings): number {\n\treturn settings?.blocking?.maxParallelTasks ?? DEFAULT_MAX_PARALLEL_TASKS;\n}\n\nexport function buildSubagentSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): SubagentSettingsSnapshot {\n\treturn {\n\t\tpath: inspected.path,\n\t\tsettings: inspected.settings,\n\t\tsource: inspected.settings ? \"user settings\" : \"default\",\n\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t};\n}\n\nexport function buildUsageRecordingSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): UsageRecordingSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tenabled: false,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.usageRecording) && hasOwn(inspected.raw.usageRecording, \"enabled\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tenabled: inspected.settings.usageRecording?.enabled === true,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildConsultResourceSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): ConsultResourceSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_CONSULT_RESOURCE_POLICY,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.consult) && hasOwn(inspected.raw.consult, \"resources\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.consult?.resources ?? DEFAULT_CONSULT_RESOURCE_POLICY,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildCwdPolicySettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): CwdPolicySettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tconsultation: { value: DEFAULT_CONSULTATION_CWD_POLICY, source: \"default\" },\n\t\t\tdelegation: { value: DEFAULT_DELEGATION_CWD_POLICY, source: \"default\" },\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst rawPolicy = isPlainObject(inspected.raw.cwdPolicy) ? inspected.raw.cwdPolicy : undefined;\n\treturn {\n\t\tpath: inspected.path,\n\t\tconsultation: {\n\t\t\tvalue: inspected.settings.cwdPolicy?.consultation ?? DEFAULT_CONSULTATION_CWD_POLICY,\n\t\t\tsource: rawPolicy && hasOwn(rawPolicy, \"consultation\") ? \"user settings\" : \"default\",\n\t\t},\n\t\tdelegation: {\n\t\t\tvalue: inspected.settings.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\tsource: rawPolicy && hasOwn(rawPolicy, \"delegation\") ? \"user settings\" : \"default\",\n\t\t},\n\t};\n}\n\nexport function buildDelegationWorkflowSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): DelegationWorkflowSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: \"all\",\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\t(isPlainObject(inspected.raw.blocking) && hasOwn(inspected.raw.blocking, \"enabled\")) ||\n\t\t(isPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"enabled\"));\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: resolveDelegationWorkflow(\n\t\t\tinspected.settings.blocking?.enabled !== false,\n\t\t\tinspected.settings.stateful?.enabled !== false,\n\t\t),\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildCompletionDeliverySettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): CompletionDeliverySettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_COMPLETION_DELIVERY,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"completionDelivery\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.stateful?.completionDelivery ?? DEFAULT_COMPLETION_DELIVERY,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildStatefulTransportSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): StatefulTransportSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: \"subprocess\",\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"transport\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.stateful?.transport ?? \"subprocess\",\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildBlockingParallelLimitSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): BlockingParallelLimitSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_MAX_PARALLEL_TASKS,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.blocking) && hasOwn(inspected.raw.blocking, \"maxParallelTasks\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: resolveBlockingMaxParallelTasks(inspected.settings),\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildStatefulLimitSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n\twritePath: string,\n): StatefulLimitSettingsSnapshot {\n\tif (inspected.error) {\n\t\treturn { path: inspected.path, writePath, error: inspected.error };\n\t}\n\tconst resolved = resolveStatefulLimits(inspected.settings?.stateful);\n\tconst rawStateful = isPlainObject(inspected.raw?.stateful) ? inspected.raw.stateful : undefined;\n\treturn {\n\t\tpath: inspected.path,\n\t\twritePath,\n\t\tvalues: Object.fromEntries(\n\t\t\tSTATEFUL_LIMIT_FIELDS.map((field) => [\n\t\t\t\tfield,\n\t\t\t\t{\n\t\t\t\t\tvalue: resolved[field],\n\t\t\t\t\tsource: rawStateful && hasOwn(rawStateful, field) ? \"user settings\" : \"default\",\n\t\t\t\t},\n\t\t\t]),\n\t\t) as unknown as Record<StatefulLimitField, StatefulLimitFieldSnapshot>,\n\t};\n}\n", "import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\nimport type { SubagentSettings } from \"./agents/types.js\";\nimport {\n\ttype BlockingParallelLimitSettingsSnapshot,\n\tbuildBlockingParallelLimitSettingsSnapshot,\n\tbuildCompletionDeliverySettingsSnapshot,\n\tbuildConsultResourceSettingsSnapshot,\n\tbuildCwdPolicySettingsSnapshot,\n\tbuildDelegationWorkflowSettingsSnapshot,\n\tbuildStatefulLimitSettingsSnapshot,\n\tbuildStatefulTransportSettingsSnapshot,\n\tbuildSubagentSettingsSnapshot,\n\tbuildUsageRecordingSettingsSnapshot,\n\ttype CompletionDeliverySettingsSnapshot,\n\ttype ConsultResourceSettingsSnapshot,\n\ttype CwdPolicySettingsSnapshot,\n\ttype DelegationWorkflowSettingsSnapshot,\n\ttype InspectedSubagentSettingsDocument,\n\ttype StatefulLimitSettingsSnapshot,\n\ttype StatefulTransportSettingsSnapshot,\n\ttype SubagentSettingsSnapshot,\n\ttype UsageRecordingSettingsSnapshot,\n} from \"./settings/inspection.js\";\nimport { isPlainObject, normalizeSubagentSettings } from \"./settings/schema.js\";\n\nexport {\n\ttype BlockingParallelLimitSettingsSnapshot,\n\ttype CompletionDeliverySettingsSnapshot,\n\ttype ConsultResourceSettingsSnapshot,\n\ttype CwdPolicyFieldSnapshot,\n\ttype CwdPolicySettingsSnapshot,\n\tDEFAULT_CONSULT_RESOURCE_POLICY,\n\tDEFAULT_CONSULTATION_CWD_POLICY,\n\tDEFAULT_DELEGATION_CWD_POLICY,\n\ttype DelegationWorkflow,\n\ttype DelegationWorkflowSettingsSnapshot,\n\tresolveBlockingMaxParallelTasks,\n\tresolveDelegationWorkflow,\n\ttype StatefulLimitFieldSnapshot,\n\ttype StatefulLimitSettingsSnapshot,\n\ttype StatefulTransportSettingsSnapshot,\n\ttype SubagentSettingsSnapshot,\n\ttype UsageRecordingSettingsSnapshot,\n} from \"./settings/inspection.js\";\nexport { hasOwn, normalizeAgentSettings, normalizeSubagentSettings } from \"./settings/schema.js\";\n\nexport const SUBAGENT_SETTINGS_FILE = \"pi-subagents.json\";\nconst LEGACY_SETTINGS_FILE = \"pi-subagents-config.json\";\nlet pendingSettingsNotice: string | undefined;\n\nexport function resolveSubagentSettingsPaths(): {\n\tcanonicalPath: string;\n\tlegacyPath: string;\n\tactivePath?: string;\n} {\n\tconst canonicalPath = path.join(getAgentDir(), SUBAGENT_SETTINGS_FILE);\n\tconst legacyPath = path.join(getAgentDir(), LEGACY_SETTINGS_FILE);\n\treturn {\n\t\tcanonicalPath,\n\t\tlegacyPath,\n\t\tactivePath: fs.existsSync(canonicalPath)\n\t\t\t? canonicalPath\n\t\t\t: fs.existsSync(legacyPath)\n\t\t\t\t? legacyPath\n\t\t\t\t: undefined,\n\t};\n}\n\nexport function readSubagentSettings(): SubagentSettings | undefined {\n\tpendingSettingsNotice = undefined;\n\tconst { canonicalPath, legacyPath, activePath } = resolveSubagentSettingsPaths();\n\tif (activePath === canonicalPath) {\n\t\tconst canonical = readSettingsFile(canonicalPath);\n\t\tconst notices: string[] = [];\n\t\tif (!canonical) notices.push(`${SUBAGENT_SETTINGS_FILE} is invalid and was ignored.`);\n\t\tif (fs.existsSync(legacyPath)) {\n\t\t\tnotices.push(\n\t\t\t\t`${LEGACY_SETTINGS_FILE} ignored because ${SUBAGENT_SETTINGS_FILE} takes precedence.`,\n\t\t\t);\n\t\t}\n\t\tif (notices.length > 0) pendingSettingsNotice = notices.join(\"\\n\");\n\t\treturn canonical;\n\t}\n\tif (activePath === undefined) return undefined;\n\tconst legacy = readSettingsFile(legacyPath);\n\tif (fs.existsSync(canonicalPath)) {\n\t\tconst canonical = readSettingsFile(canonicalPath);\n\t\tpendingSettingsNotice = [\n\t\t\t...(!canonical ? [`${SUBAGENT_SETTINGS_FILE} is invalid and was ignored.`] : []),\n\t\t\t`${LEGACY_SETTINGS_FILE} ignored because ${SUBAGENT_SETTINGS_FILE} was created concurrently.`,\n\t\t].join(\"\\n\");\n\t\treturn canonical;\n\t}\n\tif (!legacy) {\n\t\tpendingSettingsNotice = `${LEGACY_SETTINGS_FILE} is invalid and was ignored.`;\n\t\treturn undefined;\n\t}\n\tpendingSettingsNotice = `Using legacy ${LEGACY_SETTINGS_FILE}; rename it to ${SUBAGENT_SETTINGS_FILE}. Future saves write ${SUBAGENT_SETTINGS_FILE} without modifying the legacy file.`;\n\treturn legacy;\n}\n\nexport function consumeSubagentSettingsNotice() {\n\tconst notice = pendingSettingsNotice;\n\tpendingSettingsNotice = undefined;\n\treturn notice;\n}\n\nexport function subagentSettingsFilePath(): string {\n\treturn path.join(getAgentDir(), SUBAGENT_SETTINGS_FILE);\n}\n\nfunction inspectSubagentSettingsDocument(): InspectedSubagentSettingsDocument {\n\tconst { canonicalPath, activePath } = resolveSubagentSettingsPaths();\n\tif (activePath === undefined) return { path: canonicalPath };\n\tconst inspected = inspectSubagentSettingsPath(activePath);\n\treturn activePath !== canonicalPath && fs.existsSync(canonicalPath)\n\t\t? inspectSubagentSettingsPath(canonicalPath)\n\t\t: inspected;\n}\n\nfunction inspectSubagentSettingsPath(configPath: string): InspectedSubagentSettingsDocument {\n\tconst fileName = path.basename(configPath);\n\tlet contents: string;\n\ttry {\n\t\tcontents = fs.readFileSync(configPath, \"utf8\");\n\t} catch (error) {\n\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\treturn {\n\t\t\tpath: configPath,\n\t\t\terror: `${fileName} could not be read${code ? ` (${safeErrorCode(code)})` : \"\"}`,\n\t\t};\n\t}\n\tlet raw: unknown;\n\ttry {\n\t\traw = JSON.parse(contents);\n\t} catch {\n\t\treturn { path: configPath, error: `${fileName} contains malformed JSON` };\n\t}\n\tconst settings = normalizeSubagentSettings(raw);\n\tif (!isPlainObject(raw) || !settings) {\n\t\treturn { path: configPath, error: `${fileName} is not a valid settings object` };\n\t}\n\treturn { path: configPath, raw, settings };\n}\n\nexport function inspectSubagentSettings(): SubagentSettingsSnapshot {\n\treturn buildSubagentSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectConsultResourceSettings(): ConsultResourceSettingsSnapshot {\n\treturn buildConsultResourceSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectCwdPolicySettings(): CwdPolicySettingsSnapshot {\n\treturn buildCwdPolicySettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectDelegationWorkflowSettings(): DelegationWorkflowSettingsSnapshot {\n\treturn buildDelegationWorkflowSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectCompletionDeliverySettings(): CompletionDeliverySettingsSnapshot {\n\treturn buildCompletionDeliverySettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectUsageRecordingSettings(): UsageRecordingSettingsSnapshot {\n\treturn buildUsageRecordingSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectStatefulTransportSettings(): StatefulTransportSettingsSnapshot {\n\treturn buildStatefulTransportSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectBlockingParallelLimitSettings(): BlockingParallelLimitSettingsSnapshot {\n\treturn buildBlockingParallelLimitSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectStatefulLimitSettings(): StatefulLimitSettingsSnapshot {\n\treturn buildStatefulLimitSettingsSnapshot(\n\t\tinspectSubagentSettingsDocument(),\n\t\tsubagentSettingsFilePath(),\n\t);\n}\n\nexport function pathEntryExists(filePath: string): boolean {\n\ttry {\n\t\tfs.lstatSync(filePath);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return false;\n\t\tthrow error;\n\t}\n}\n\nfunction readSettingsFile(configPath: string): SubagentSettings | undefined {\n\treturn readSettingsSnapshot(configPath).settings;\n}\n\nexport function readSettingsSnapshot(configPath: string): {\n\tsettings?: SubagentSettings;\n\tcontents?: string;\n} {\n\ttry {\n\t\tconst contents = fs.readFileSync(configPath, \"utf8\");\n\t\treturn { settings: normalizeSubagentSettings(JSON.parse(contents)), contents };\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction safeErrorCode(value: string): string {\n\treturn value.replace(/[^A-Z0-9_-]/giu, \"?\").slice(0, 64);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,59 @@
1
+ // @generated by scripts/build-runtime.mjs; do not edit.
2
+ // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
+
4
+ // src/tool-schema-compatibility.ts
5
+ import { Type } from "typebox";
6
+ var LLAMA_CPP_MAX_REPETITION_THRESHOLD = 2e3;
7
+ function grammarSafeToolObject(properties, options) {
8
+ return makeGrammarSafeToolSchema(Type.Object(properties, options));
9
+ }
10
+ function makeGrammarSafeToolSchema(schema) {
11
+ return cloneSchema(schema, 0);
12
+ }
13
+ function cloneSchema(schema, depth) {
14
+ if (!isRecord(schema)) return schema;
15
+ const clone = cloneWithDescriptors(schema);
16
+ if (depth > 1 && clone.type === "string" && typeof clone.maxLength === "number" && clone.maxLength >= LLAMA_CPP_MAX_REPETITION_THRESHOLD) {
17
+ delete clone.maxLength;
18
+ }
19
+ if (isRecord(clone.properties)) {
20
+ clone.properties = mapSchemas(clone.properties, depth + 1);
21
+ }
22
+ if (clone.items !== void 0) {
23
+ clone.items = Array.isArray(clone.items) ? clone.items.map((item) => cloneSchema(item, depth + 1)) : cloneSchema(clone.items, depth + 1);
24
+ }
25
+ if (Array.isArray(clone.prefixItems)) {
26
+ clone.prefixItems = clone.prefixItems.map((item) => cloneSchema(item, depth + 1));
27
+ }
28
+ for (const keyword of ["allOf", "anyOf", "oneOf"]) {
29
+ if (Array.isArray(clone[keyword])) {
30
+ clone[keyword] = clone[keyword].map((item) => cloneSchema(item, depth));
31
+ }
32
+ }
33
+ if (isRecord(clone.patternProperties)) {
34
+ clone.patternProperties = mapSchemas(clone.patternProperties, depth + 1);
35
+ }
36
+ if (isRecord(clone.additionalProperties)) {
37
+ clone.additionalProperties = cloneSchema(clone.additionalProperties, depth + 1);
38
+ }
39
+ return clone;
40
+ }
41
+ function mapSchemas(schemas, depth) {
42
+ return Object.fromEntries(
43
+ Object.entries(schemas).map(([name, schema]) => [name, cloneSchema(schema, depth)])
44
+ );
45
+ }
46
+ function cloneWithDescriptors(value) {
47
+ return Object.defineProperties(
48
+ Object.create(Object.getPrototypeOf(value)),
49
+ Object.getOwnPropertyDescriptors(value)
50
+ );
51
+ }
52
+ function isRecord(value) {
53
+ return typeof value === "object" && value !== null && !Array.isArray(value);
54
+ }
55
+
56
+ export {
57
+ grammarSafeToolObject
58
+ };
59
+ //# sourceMappingURL=chunk-TZ34IQ3M.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/tool-schema-compatibility.ts"],
4
+ "sourcesContent": ["import { type TObject, type TObjectOptions, type TProperties, type TSchema, Type } from \"typebox\";\n\nconst LLAMA_CPP_MAX_REPETITION_THRESHOLD = 2_000;\n\n/**\n * Remove large nested string repetitions that llama.cpp cannot compile into GBNF.\n *\n * Runtime normalization and validation continue to bound these inputs.\n * See https://github.com/ggml-org/llama.cpp/issues/25746.\n */\nexport function grammarSafeToolObject<Properties extends TProperties>(\n\tproperties: Properties,\n\toptions?: TObjectOptions,\n): TObject<Properties> {\n\treturn makeGrammarSafeToolSchema(Type.Object(properties, options));\n}\n\nfunction makeGrammarSafeToolSchema<Schema extends TSchema>(schema: Schema): Schema {\n\treturn cloneSchema(schema, 0) as Schema;\n}\n\nfunction cloneSchema(schema: unknown, depth: number): unknown {\n\tif (!isRecord(schema)) return schema;\n\tconst clone = cloneWithDescriptors(schema);\n\tif (\n\t\tdepth > 1 &&\n\t\tclone.type === \"string\" &&\n\t\ttypeof clone.maxLength === \"number\" &&\n\t\tclone.maxLength >= LLAMA_CPP_MAX_REPETITION_THRESHOLD\n\t) {\n\t\tdelete clone.maxLength;\n\t}\n\tif (isRecord(clone.properties)) {\n\t\tclone.properties = mapSchemas(clone.properties, depth + 1);\n\t}\n\tif (clone.items !== undefined) {\n\t\tclone.items = Array.isArray(clone.items)\n\t\t\t? clone.items.map((item) => cloneSchema(item, depth + 1))\n\t\t\t: cloneSchema(clone.items, depth + 1);\n\t}\n\tif (Array.isArray(clone.prefixItems)) {\n\t\tclone.prefixItems = clone.prefixItems.map((item) => cloneSchema(item, depth + 1));\n\t}\n\tfor (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n\t\tif (Array.isArray(clone[keyword])) {\n\t\t\tclone[keyword] = clone[keyword].map((item) => cloneSchema(item, depth));\n\t\t}\n\t}\n\tif (isRecord(clone.patternProperties)) {\n\t\tclone.patternProperties = mapSchemas(clone.patternProperties, depth + 1);\n\t}\n\tif (isRecord(clone.additionalProperties)) {\n\t\tclone.additionalProperties = cloneSchema(clone.additionalProperties, depth + 1);\n\t}\n\treturn clone;\n}\n\nfunction mapSchemas(schemas: Record<string, unknown>, depth: number): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(schemas).map(([name, schema]) => [name, cloneSchema(schema, depth)]),\n\t);\n}\n\nfunction cloneWithDescriptors(value: Record<string, unknown>): Record<string, unknown> {\n\treturn Object.defineProperties(\n\t\tObject.create(Object.getPrototypeOf(value)),\n\t\tObject.getOwnPropertyDescriptors(value),\n\t) as Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
5
+ "mappings": ";;;;AAAA,SAA4E,YAAY;AAExF,IAAM,qCAAqC;AAQpC,SAAS,sBACf,YACA,SACsB;AACtB,SAAO,0BAA0B,KAAK,OAAO,YAAY,OAAO,CAAC;AAClE;AAEA,SAAS,0BAAkD,QAAwB;AAClF,SAAO,YAAY,QAAQ,CAAC;AAC7B;AAEA,SAAS,YAAY,QAAiB,OAAwB;AAC7D,MAAI,CAAC,SAAS,MAAM,EAAG,QAAO;AAC9B,QAAM,QAAQ,qBAAqB,MAAM;AACzC,MACC,QAAQ,KACR,MAAM,SAAS,YACf,OAAO,MAAM,cAAc,YAC3B,MAAM,aAAa,oCAClB;AACD,WAAO,MAAM;AAAA,EACd;AACA,MAAI,SAAS,MAAM,UAAU,GAAG;AAC/B,UAAM,aAAa,WAAW,MAAM,YAAY,QAAQ,CAAC;AAAA,EAC1D;AACA,MAAI,MAAM,UAAU,QAAW;AAC9B,UAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IACpC,MAAM,MAAM,IAAI,CAAC,SAAS,YAAY,MAAM,QAAQ,CAAC,CAAC,IACtD,YAAY,MAAM,OAAO,QAAQ,CAAC;AAAA,EACtC;AACA,MAAI,MAAM,QAAQ,MAAM,WAAW,GAAG;AACrC,UAAM,cAAc,MAAM,YAAY,IAAI,CAAC,SAAS,YAAY,MAAM,QAAQ,CAAC,CAAC;AAAA,EACjF;AACA,aAAW,WAAW,CAAC,SAAS,SAAS,OAAO,GAAY;AAC3D,QAAI,MAAM,QAAQ,MAAM,OAAO,CAAC,GAAG;AAClC,YAAM,OAAO,IAAI,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS,YAAY,MAAM,KAAK,CAAC;AAAA,IACvE;AAAA,EACD;AACA,MAAI,SAAS,MAAM,iBAAiB,GAAG;AACtC,UAAM,oBAAoB,WAAW,MAAM,mBAAmB,QAAQ,CAAC;AAAA,EACxE;AACA,MAAI,SAAS,MAAM,oBAAoB,GAAG;AACzC,UAAM,uBAAuB,YAAY,MAAM,sBAAsB,QAAQ,CAAC;AAAA,EAC/E;AACA,SAAO;AACR;AAEA,SAAS,WAAW,SAAkC,OAAwC;AAC7F,SAAO,OAAO;AAAA,IACb,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,YAAY,QAAQ,KAAK,CAAC,CAAC;AAAA,EACnF;AACD;AAEA,SAAS,qBAAqB,OAAyD;AACtF,SAAO,OAAO;AAAA,IACb,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;AAAA,IAC1C,OAAO,0BAA0B,KAAK;AAAA,EACvC;AACD;AAEA,SAAS,SAAS,OAAkD;AACnE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;",
6
+ "names": []
7
+ }
@@ -12,36 +12,36 @@ var STATEFUL_LIMIT_FIELDS = [
12
12
  var STATEFUL_LIMIT_DEFINITIONS = [
13
13
  {
14
14
  field: "maxAgents",
15
- label: "Retained agents",
16
- description: "Running, queued, and reusable idle detached agents",
15
+ label: "Subagents saved for follow-up",
16
+ description: "Working, queued, and reusable background subagents kept in one session",
17
17
  defaultValue: 16,
18
18
  minimum: 1
19
19
  },
20
20
  {
21
21
  field: "maxActiveTurns",
22
- label: "Active turns",
23
- description: "Detached agent turns that may run at the same time",
22
+ label: "Subagents working at once",
23
+ description: "Background subagent turns that may run at the same time",
24
24
  defaultValue: 4,
25
25
  minimum: 1
26
26
  },
27
27
  {
28
28
  field: "maxChildrenPerAgent",
29
- label: "Children per agent",
30
- description: "Direct child agents retained beneath one parent",
29
+ label: "Direct children per subagent",
30
+ description: "Subagents that one parent subagent may keep for follow-up",
31
31
  defaultValue: 8,
32
32
  minimum: 1
33
33
  },
34
34
  {
35
35
  field: "maxDepth",
36
- label: "Agent tree depth",
37
- description: "Nested child levels below a root agent",
36
+ label: "Nested subagent levels",
37
+ description: "Child levels allowed below a top-level subagent",
38
38
  defaultValue: 3,
39
39
  minimum: 0
40
40
  },
41
41
  {
42
42
  field: "maxStoredAgents",
43
- label: "Stored agents",
44
- description: "Detached agent records kept per session on disk",
43
+ label: "Stored subagent records",
44
+ description: "Background subagent records kept on disk for each session",
45
45
  defaultValue: 50,
46
46
  minimum: 1
47
47
  }
@@ -77,4 +77,4 @@ export {
77
77
  isValidStatefulLimit,
78
78
  resolveStatefulLimits
79
79
  };
80
- //# sourceMappingURL=chunk-7OBINKFM.ts.map
80
+ //# sourceMappingURL=chunk-VDG7LTYE.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/stateful-limits.ts"],
4
+ "sourcesContent": ["import type { SubagentRuntimeSettings } from \"./agents/types.js\";\n\nexport const STATEFUL_LIMIT_FIELDS = [\n\t\"maxAgents\",\n\t\"maxActiveTurns\",\n\t\"maxChildrenPerAgent\",\n\t\"maxDepth\",\n\t\"maxStoredAgents\",\n] as const;\n\nexport type StatefulLimitField = (typeof STATEFUL_LIMIT_FIELDS)[number];\n\nexport interface StatefulLimits {\n\tmaxAgents: number;\n\tmaxActiveTurns: number;\n\tmaxChildrenPerAgent: number;\n\tmaxDepth: number;\n\tmaxStoredAgents: number;\n}\n\nexport interface StatefulLimitDefinition {\n\tfield: StatefulLimitField;\n\tlabel: string;\n\tdescription: string;\n\tdefaultValue: number;\n\tminimum: number;\n}\n\nexport const STATEFUL_LIMIT_DEFINITIONS: readonly StatefulLimitDefinition[] = [\n\t{\n\t\tfield: \"maxAgents\",\n\t\tlabel: \"Subagents saved for follow-up\",\n\t\tdescription: \"Working, queued, and reusable background subagents kept in one session\",\n\t\tdefaultValue: 16,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxActiveTurns\",\n\t\tlabel: \"Subagents working at once\",\n\t\tdescription: \"Background subagent turns that may run at the same time\",\n\t\tdefaultValue: 4,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxChildrenPerAgent\",\n\t\tlabel: \"Direct children per subagent\",\n\t\tdescription: \"Subagents that one parent subagent may keep for follow-up\",\n\t\tdefaultValue: 8,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxDepth\",\n\t\tlabel: \"Nested subagent levels\",\n\t\tdescription: \"Child levels allowed below a top-level subagent\",\n\t\tdefaultValue: 3,\n\t\tminimum: 0,\n\t},\n\t{\n\t\tfield: \"maxStoredAgents\",\n\t\tlabel: \"Stored subagent records\",\n\t\tdescription: \"Background subagent records kept on disk for each session\",\n\t\tdefaultValue: 50,\n\t\tminimum: 1,\n\t},\n];\n\nconst definitionsByField = new Map(\n\tSTATEFUL_LIMIT_DEFINITIONS.map((definition) => [definition.field, definition]),\n);\n\nexport function statefulLimitDefinition(field: StatefulLimitField): StatefulLimitDefinition {\n\tconst definition = definitionsByField.get(field);\n\tif (!definition) throw new Error(`Unknown stateful limit: ${field}`);\n\treturn definition;\n}\n\nexport function isStatefulLimitField(value: string): value is StatefulLimitField {\n\treturn (STATEFUL_LIMIT_FIELDS as readonly string[]).includes(value);\n}\n\nexport function isValidStatefulLimit(field: StatefulLimitField, value: unknown): value is number {\n\treturn (\n\t\ttypeof value === \"number\" &&\n\t\tNumber.isSafeInteger(value) &&\n\t\tvalue >= statefulLimitDefinition(field).minimum\n\t);\n}\n\nexport function resolveStatefulLimits(settings?: SubagentRuntimeSettings): StatefulLimits {\n\treturn Object.fromEntries(\n\t\tSTATEFUL_LIMIT_DEFINITIONS.map((definition) => [\n\t\t\tdefinition.field,\n\t\t\tsettings?.[definition.field] ?? definition.defaultValue,\n\t\t]),\n\t) as unknown as StatefulLimits;\n}\n"],
5
+ "mappings": ";;;;AAEO,IAAM,wBAAwB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAoBO,IAAM,6BAAiE;AAAA,EAC7E;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AACD;AAEA,IAAM,qBAAqB,IAAI;AAAA,EAC9B,2BAA2B,IAAI,CAAC,eAAe,CAAC,WAAW,OAAO,UAAU,CAAC;AAC9E;AAEO,SAAS,wBAAwB,OAAoD;AAC3F,QAAM,aAAa,mBAAmB,IAAI,KAAK;AAC/C,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,2BAA2B,KAAK,EAAE;AACnE,SAAO;AACR;AAEO,SAAS,qBAAqB,OAA4C;AAChF,SAAQ,sBAA4C,SAAS,KAAK;AACnE;AAEO,SAAS,qBAAqB,OAA2B,OAAiC;AAChG,SACC,OAAO,UAAU,YACjB,OAAO,cAAc,KAAK,KAC1B,SAAS,wBAAwB,KAAK,EAAE;AAE1C;AAEO,SAAS,sBAAsB,UAAoD;AACzF,SAAO,OAAO;AAAA,IACb,2BAA2B,IAAI,CAAC,eAAe;AAAA,MAC9C,WAAW;AAAA,MACX,WAAW,WAAW,KAAK,KAAK,WAAW;AAAA,IAC5C,CAAC;AAAA,EACF;AACD;",
6
+ "names": []
7
+ }
@@ -70,4 +70,4 @@ export {
70
70
  isResultError2 as isResultError,
71
71
  formatResultFailure2 as formatResultFailure
72
72
  };
73
- //# sourceMappingURL=chunk-AEUYS7JC.ts.map
73
+ //# sourceMappingURL=chunk-X4NMONPE.ts.map
@@ -0,0 +1,7 @@
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-types.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 {\n\tformatResultFailure as formatBaseResultFailure,\n\tgetResultFinalOutput as getBaseResultFinalOutput,\n\tisResultError as isBaseResultError,\n} from \"./runner-result.js\";\nimport type { SingleResult } from \"./runner-types.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
+ }
@@ -2,7 +2,7 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  isExecutionPlan
5
- } from "./chunk-DSOOH73Y.ts";
5
+ } from "./chunk-7AAJEUSL.ts";
6
6
 
7
7
  // src/capability-grant.ts
8
8
  import { createHash } from "node:crypto";
@@ -62,4 +62,4 @@ export {
62
62
  isCapabilityGrant,
63
63
  isCapabilityGrantActive
64
64
  };
65
- //# sourceMappingURL=chunk-HKC4ES4B.ts.map
65
+ //# sourceMappingURL=chunk-YPJEN6NU.ts.map
@@ -2,10 +2,13 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
  import {
4
4
  PI_SUBAGENTS_RPC_PROTOCOL
5
- } from "./chunk-C4L6P266.ts";
5
+ } from "./chunk-LEOYDZI3.ts";
6
6
  import {
7
7
  SUBAGENT_COMPLETION_MESSAGE_TYPE
8
- } from "./chunk-QDVGH2X7.ts";
8
+ } from "./chunk-IWC32VPY.ts";
9
+ import {
10
+ requirementForCompletion
11
+ } from "./chunk-NLT67IZS.ts";
9
12
  import {
10
13
  safeTerminalText
11
14
  } from "./chunk-SWGQLFSD.ts";
@@ -19,6 +22,7 @@ import {
19
22
  // src/completion-delivery.ts
20
23
  var MAX_COMPLETION_ERROR_BYTES = 512;
21
24
  var MAX_COMPLETIONS_PER_MESSAGE = 16;
25
+ var MAX_ACKNOWLEDGED_COMPLETION_IDS = 2048;
22
26
  var COMPLETION_BATCH_DELAY_MS = 10;
23
27
  var CompletionDeliveryBroker = class {
24
28
  constructor(pi, ctx, delivery, options = {}) {
@@ -33,12 +37,15 @@ var CompletionDeliveryBroker = class {
33
37
  options;
34
38
  pending = [];
35
39
  knownCompletionIds = /* @__PURE__ */ new Set();
40
+ acknowledgedCompletionIds = /* @__PURE__ */ new Set();
36
41
  awaitingParentAck = [];
37
42
  flushTimer;
38
43
  wakeInFlight = false;
39
44
  closed = false;
40
45
  enqueue(completion) {
41
- if (this.closed || this.knownCompletionIds.has(completion.completionId)) return;
46
+ if (this.closed || this.knownCompletionIds.has(completion.completionId) || this.acknowledgedCompletionIds.has(completion.completionId)) {
47
+ return;
48
+ }
42
49
  this.knownCompletionIds.add(completion.completionId);
43
50
  this.pending.push(completion);
44
51
  this.scheduleFlush();
@@ -66,7 +73,6 @@ var CompletionDeliveryBroker = class {
66
73
  if (this.closed || this.pending.length === 0) return;
67
74
  if (this.flushTimer) clearTimeout(this.flushTimer);
68
75
  this.flushTimer = void 0;
69
- if (this.delivery === "auto-resume" && !this.isRootIdle()) return;
70
76
  const completions = this.pending.splice(0);
71
77
  const batches = chunkCompletions(completions);
72
78
  let canWake = this.shouldWakeRoot();
@@ -81,14 +87,34 @@ var CompletionDeliveryBroker = class {
81
87
  deliverAs: "steer",
82
88
  ...triggerTurn ? { triggerTurn: true } : {}
83
89
  });
90
+ this.notifyDeliveryAttempt(batch, {
91
+ delivery: "steer",
92
+ triggerTurn,
93
+ outcome: "accepted"
94
+ });
84
95
  } catch (primaryError) {
96
+ this.notifyDeliveryAttempt(batch, {
97
+ delivery: "steer",
98
+ triggerTurn,
99
+ outcome: "failed"
100
+ });
85
101
  this.removeAwaiting(batch);
86
102
  if (triggerTurn) this.wakeInFlight = false;
87
103
  canWake = false;
88
104
  this.awaitingParentAck.push(...batch);
89
105
  try {
90
106
  this.pi.sendMessage(message, { deliverAs: "nextTurn", triggerTurn: false });
107
+ this.notifyDeliveryAttempt(batch, {
108
+ delivery: "nextTurn",
109
+ triggerTurn: false,
110
+ outcome: "accepted"
111
+ });
91
112
  } catch (fallbackError) {
113
+ this.notifyDeliveryAttempt(batch, {
114
+ delivery: "nextTurn",
115
+ triggerTurn: false,
116
+ outcome: "failed"
117
+ });
92
118
  this.removeAwaiting(batch);
93
119
  this.pending = [...batches.slice(index).flat(), ...this.pending];
94
120
  try {
@@ -112,6 +138,7 @@ var CompletionDeliveryBroker = class {
112
138
  this.pending = [];
113
139
  this.awaitingParentAck = [];
114
140
  this.knownCompletionIds.clear();
141
+ this.acknowledgedCompletionIds.clear();
115
142
  }
116
143
  scheduleFlush() {
117
144
  if (this.closed || this.pending.length === 0 || this.flushTimer) return;
@@ -133,18 +160,35 @@ var CompletionDeliveryBroker = class {
133
160
  this.pending = this.pending.filter(
134
161
  (completion) => !acknowledgedIds.has(completion.completionId)
135
162
  );
136
- for (const completion of completions) this.knownCompletionIds.delete(completion.completionId);
163
+ for (const completion of completions) {
164
+ this.knownCompletionIds.delete(completion.completionId);
165
+ this.rememberAcknowledged(completion.completionId);
166
+ }
137
167
  try {
138
168
  this.options.onAcknowledged?.(completions, (this.options.now ?? Date.now)());
139
169
  } catch {
140
170
  }
141
171
  }
172
+ rememberAcknowledged(completionId) {
173
+ this.acknowledgedCompletionIds.add(completionId);
174
+ while (this.acknowledgedCompletionIds.size > MAX_ACKNOWLEDGED_COMPLETION_IDS) {
175
+ const oldest = this.acknowledgedCompletionIds.values().next().value;
176
+ if (typeof oldest !== "string") return;
177
+ this.acknowledgedCompletionIds.delete(oldest);
178
+ }
179
+ }
142
180
  removeAwaiting(completions) {
143
181
  const removed = new Set(completions.map((completion) => completion.completionId));
144
182
  this.awaitingParentAck = this.awaitingParentAck.filter(
145
183
  (completion) => !removed.has(completion.completionId)
146
184
  );
147
185
  }
186
+ notifyDeliveryAttempt(completions, input) {
187
+ try {
188
+ this.options.onDeliveryAttempt?.(completions, input);
189
+ } catch {
190
+ }
191
+ }
148
192
  isRootIdle() {
149
193
  try {
150
194
  return this.ctx.isIdle();
@@ -153,7 +197,7 @@ var CompletionDeliveryBroker = class {
153
197
  }
154
198
  }
155
199
  shouldWakeRoot() {
156
- if (this.delivery !== "auto-resume" || this.wakeInFlight) return false;
200
+ if (this.delivery !== "auto-resume" || this.wakeInFlight || !this.isRootIdle()) return false;
157
201
  try {
158
202
  return !this.ctx.hasPendingMessages();
159
203
  } catch {
@@ -226,6 +270,7 @@ function buildCompletionMessage(completions) {
226
270
  };
227
271
  }
228
272
  function completionMetadata(completion) {
273
+ const completionRequirement = requirementForCompletion(completion.agent, completion.completionId);
229
274
  return {
230
275
  protocol: PI_SUBAGENTS_RPC_PROTOCOL,
231
276
  completionId: completion.completionId,
@@ -240,7 +285,8 @@ function completionMetadata(completion) {
240
285
  ...completion.agent.telemetry?.transport ? { transport: completion.agent.telemetry.transport } : {},
241
286
  ...completion.agent.structuredResult ? { structuredResult: completion.agent.structuredResult } : {},
242
287
  ...completion.agent.outcome ? { outcome: completion.agent.outcome } : {},
243
- ...completion.agent.capabilityGrant ? { capabilityGrant: completion.agent.capabilityGrant } : {}
288
+ ...completion.agent.capabilityGrant ? { capabilityGrant: completion.agent.capabilityGrant } : {},
289
+ ...completionRequirement ? { completionRequirement } : {}
244
290
  };
245
291
  }
246
292
  function buildDetachedCompletionMessage(completion) {
@@ -279,4 +325,4 @@ export {
279
325
  CompletionDeliveryBroker,
280
326
  buildDetachedCompletionMessage
281
327
  };
282
- //# sourceMappingURL=chunk-434NII74.ts.map
328
+ //# sourceMappingURL=chunk-YU53SHA7.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/completion-delivery.ts"],
4
+ "sourcesContent": ["import type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { CompletionDelivery } from \"./agents/types.js\";\nimport { SUBAGENT_COMPLETION_MESSAGE_TYPE } from \"./completion-render.js\";\nimport { requirementForCompletion } from \"./completion-requirement.js\";\nimport { redactPrivateText } from \"./context.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, MAX_TOOL_MESSAGE_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { AgentTurnCompletion, ManagedAgent } from \"./registry.js\";\nimport { safeTerminalText } from \"./safe-text.js\";\nimport { PI_SUBAGENTS_RPC_PROTOCOL } from \"./transport-types.js\";\n\nconst MAX_COMPLETION_ERROR_BYTES = 512;\nconst MAX_COMPLETIONS_PER_MESSAGE = 16;\nconst MAX_ACKNOWLEDGED_COMPLETION_IDS = 2_048;\nconst COMPLETION_BATCH_DELAY_MS = 10;\n\ninterface CompletionMetadata {\n\tprotocol: typeof PI_SUBAGENTS_RPC_PROTOCOL;\n\tcompletionId: string;\n\trunId: string;\n\tgeneration: number;\n\tagentId: string;\n\ttaskPath?: string;\n\trecipientPath?: string;\n\tagent: string;\n\ttask: string;\n\tstate: string;\n\ttransport?: string;\n\tstructuredResult?: ManagedAgent[\"structuredResult\"];\n\toutcome?: ManagedAgent[\"outcome\"];\n\tcapabilityGrant?: ManagedAgent[\"capabilityGrant\"];\n\tcompletionRequirement?: NonNullable<ManagedAgent[\"completionRequirements\"]>[number];\n}\n\ninterface CompletionMessage {\n\tcustomType: typeof SUBAGENT_COMPLETION_MESSAGE_TYPE;\n\tcontent: string;\n\tdisplay: true;\n\tdetails:\n\t\t| CompletionMetadata\n\t\t| {\n\t\t\t\tcompletionCount: number;\n\t\t\t\tcompletions: CompletionMetadata[];\n\t\t };\n}\n\ntype CompletionContext = Pick<ExtensionContext, \"hasPendingMessages\" | \"isIdle\">;\ntype CompletionPi = Pick<ExtensionAPI, \"sendMessage\">;\n\nexport interface CompletionDeliveryBrokerOptions {\n\tonDeliveryError?: (error: unknown) => void;\n\tonDeliveryAttempt?: (\n\t\tcompletions: readonly AgentTurnCompletion[],\n\t\tinput: {\n\t\t\tdelivery: \"steer\" | \"nextTurn\";\n\t\t\ttriggerTurn: boolean;\n\t\t\toutcome: \"accepted\" | \"failed\";\n\t\t},\n\t) => void;\n\tonAcknowledged?: (completions: readonly AgentTurnCompletion[], acknowledgedAt: number) => void;\n\tnow?: () => number;\n}\n\n/** Owns bounded completion batching and at most one idle-root wake for one parent session. */\nexport class CompletionDeliveryBroker {\n\tprivate pending: AgentTurnCompletion[] = [];\n\tprivate readonly knownCompletionIds = new Set<string>();\n\tprivate readonly acknowledgedCompletionIds = new Set<string>();\n\tprivate awaitingParentAck: AgentTurnCompletion[] = [];\n\tprivate flushTimer?: NodeJS.Timeout;\n\tprivate wakeInFlight = false;\n\tprivate closed = false;\n\n\tconstructor(\n\t\tprivate readonly pi: CompletionPi,\n\t\tprivate readonly ctx: CompletionContext,\n\t\tprivate delivery: CompletionDelivery,\n\t\tprivate readonly options: CompletionDeliveryBrokerOptions = {},\n\t) {}\n\n\tenqueue(completion: AgentTurnCompletion): void {\n\t\tif (\n\t\t\tthis.closed ||\n\t\t\tthis.knownCompletionIds.has(completion.completionId) ||\n\t\t\tthis.acknowledgedCompletionIds.has(completion.completionId)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.knownCompletionIds.add(completion.completionId);\n\t\tthis.pending.push(completion);\n\t\tthis.scheduleFlush();\n\t}\n\n\tsetDelivery(value: CompletionDelivery): void {\n\t\tthis.delivery = value;\n\t\tthis.scheduleFlush();\n\t}\n\n\tonParentTurnStart(): void {\n\t\tthis.wakeInFlight = false;\n\t\tthis.scheduleFlush();\n\t}\n\n\tonParentContext(messages: readonly unknown[]): void {\n\t\tthis.acknowledgeVisible(completionIdsFromContext(messages));\n\t\tif (this.awaitingParentAck.length > 0) {\n\t\t\tthis.pending = [...this.awaitingParentAck.splice(0), ...this.pending];\n\t\t}\n\t\tthis.scheduleFlush();\n\t}\n\n\tonParentSettled(): void {\n\t\tthis.wakeInFlight = false;\n\t\tthis.scheduleFlush();\n\t}\n\n\tflush(): void {\n\t\tif (this.closed || this.pending.length === 0) return;\n\t\tif (this.flushTimer) clearTimeout(this.flushTimer);\n\t\tthis.flushTimer = undefined;\n\n\t\tconst completions = this.pending.splice(0);\n\t\tconst batches = chunkCompletions(completions);\n\t\tlet canWake = this.shouldWakeRoot();\n\t\tfor (let index = 0; index < batches.length; index++) {\n\t\t\tconst triggerTurn = canWake && index === batches.length - 1;\n\t\t\tconst batch = batches[index];\n\t\t\tconst message = buildCompletionMessage(batch);\n\t\t\tif (triggerTurn) this.wakeInFlight = true;\n\t\t\tthis.awaitingParentAck.push(...batch);\n\t\t\ttry {\n\t\t\t\t// Pi treats explicit false as immediate insertion instead of queued steering while streaming.\n\t\t\t\tthis.pi.sendMessage(message, {\n\t\t\t\t\tdeliverAs: \"steer\",\n\t\t\t\t\t...(triggerTurn ? { triggerTurn: true } : {}),\n\t\t\t\t});\n\t\t\t\tthis.notifyDeliveryAttempt(batch, {\n\t\t\t\t\tdelivery: \"steer\",\n\t\t\t\t\ttriggerTurn,\n\t\t\t\t\toutcome: \"accepted\",\n\t\t\t\t});\n\t\t\t} catch (primaryError) {\n\t\t\t\tthis.notifyDeliveryAttempt(batch, {\n\t\t\t\t\tdelivery: \"steer\",\n\t\t\t\t\ttriggerTurn,\n\t\t\t\t\toutcome: \"failed\",\n\t\t\t\t});\n\t\t\t\tthis.removeAwaiting(batch);\n\t\t\t\tif (triggerTurn) this.wakeInFlight = false;\n\t\t\t\tcanWake = false;\n\t\t\t\tthis.awaitingParentAck.push(...batch);\n\t\t\t\ttry {\n\t\t\t\t\tthis.pi.sendMessage(message, { deliverAs: \"nextTurn\", triggerTurn: false });\n\t\t\t\t\tthis.notifyDeliveryAttempt(batch, {\n\t\t\t\t\t\tdelivery: \"nextTurn\",\n\t\t\t\t\t\ttriggerTurn: false,\n\t\t\t\t\t\toutcome: \"accepted\",\n\t\t\t\t\t});\n\t\t\t\t} catch (fallbackError) {\n\t\t\t\t\tthis.notifyDeliveryAttempt(batch, {\n\t\t\t\t\t\tdelivery: \"nextTurn\",\n\t\t\t\t\t\ttriggerTurn: false,\n\t\t\t\t\t\toutcome: \"failed\",\n\t\t\t\t\t});\n\t\t\t\t\tthis.removeAwaiting(batch);\n\t\t\t\t\tthis.pending = [...batches.slice(index).flat(), ...this.pending];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.options.onDeliveryError?.(\n\t\t\t\t\t\t\tnew AggregateError(\n\t\t\t\t\t\t\t\t[primaryError, fallbackError],\n\t\t\t\t\t\t\t\t\"Detached subagent completion delivery failed\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Delivery retention must survive a failing observer.\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tthis.closed = true;\n\t\tif (this.flushTimer) clearTimeout(this.flushTimer);\n\t\tthis.flushTimer = undefined;\n\t\tthis.pending = [];\n\t\tthis.awaitingParentAck = [];\n\t\tthis.knownCompletionIds.clear();\n\t\tthis.acknowledgedCompletionIds.clear();\n\t}\n\n\tprivate scheduleFlush(): void {\n\t\tif (this.closed || this.pending.length === 0 || this.flushTimer) return;\n\t\tthis.flushTimer = setTimeout(() => {\n\t\t\tthis.flushTimer = undefined;\n\t\t\tthis.flush();\n\t\t}, COMPLETION_BATCH_DELAY_MS);\n\t}\n\n\tprivate acknowledgeVisible(visibleIds: ReadonlySet<string>): void {\n\t\tif (visibleIds.size === 0) return;\n\t\tconst completions = [...this.awaitingParentAck, ...this.pending].filter((completion) =>\n\t\t\tvisibleIds.has(completion.completionId),\n\t\t);\n\t\tif (completions.length === 0) return;\n\t\tconst acknowledgedIds = new Set(completions.map((completion) => completion.completionId));\n\t\tthis.awaitingParentAck = this.awaitingParentAck.filter(\n\t\t\t(completion) => !acknowledgedIds.has(completion.completionId),\n\t\t);\n\t\tthis.pending = this.pending.filter(\n\t\t\t(completion) => !acknowledgedIds.has(completion.completionId),\n\t\t);\n\t\tfor (const completion of completions) {\n\t\t\tthis.knownCompletionIds.delete(completion.completionId);\n\t\t\tthis.rememberAcknowledged(completion.completionId);\n\t\t}\n\t\ttry {\n\t\t\tthis.options.onAcknowledged?.(completions, (this.options.now ?? Date.now)());\n\t\t} catch {\n\t\t\t// Context assembly already observed the message, so observer failures cannot retract it.\n\t\t}\n\t}\n\n\tprivate rememberAcknowledged(completionId: string): void {\n\t\tthis.acknowledgedCompletionIds.add(completionId);\n\t\twhile (this.acknowledgedCompletionIds.size > MAX_ACKNOWLEDGED_COMPLETION_IDS) {\n\t\t\tconst oldest = this.acknowledgedCompletionIds.values().next().value;\n\t\t\tif (typeof oldest !== \"string\") return;\n\t\t\tthis.acknowledgedCompletionIds.delete(oldest);\n\t\t}\n\t}\n\n\tprivate removeAwaiting(completions: readonly AgentTurnCompletion[]): void {\n\t\tconst removed = new Set(completions.map((completion) => completion.completionId));\n\t\tthis.awaitingParentAck = this.awaitingParentAck.filter(\n\t\t\t(completion) => !removed.has(completion.completionId),\n\t\t);\n\t}\n\n\tprivate notifyDeliveryAttempt(\n\t\tcompletions: readonly AgentTurnCompletion[],\n\t\tinput: {\n\t\t\tdelivery: \"steer\" | \"nextTurn\";\n\t\t\ttriggerTurn: boolean;\n\t\t\toutcome: \"accepted\" | \"failed\";\n\t\t},\n\t): void {\n\t\ttry {\n\t\t\tthis.options.onDeliveryAttempt?.(completions, input);\n\t\t} catch {\n\t\t\t// Delivery already succeeded, so an observer cannot retract it.\n\t\t}\n\t}\n\n\tprivate isRootIdle(): boolean {\n\t\ttry {\n\t\t\treturn this.ctx.isIdle();\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate shouldWakeRoot(): boolean {\n\t\tif (this.delivery !== \"auto-resume\" || this.wakeInFlight || !this.isRootIdle()) return false;\n\t\ttry {\n\t\t\treturn !this.ctx.hasPendingMessages();\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nfunction completionIdsFromContext(messages: readonly unknown[]): Set<string> {\n\tconst ids = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (!message || typeof message !== \"object\" || Array.isArray(message)) continue;\n\t\tconst record = message as Record<string, unknown>;\n\t\tif (record.role !== \"custom\" || record.customType !== SUBAGENT_COMPLETION_MESSAGE_TYPE)\n\t\t\tcontinue;\n\t\tconst details = record.details;\n\t\tif (!details || typeof details !== \"object\" || Array.isArray(details)) continue;\n\t\tconst metadata = details as Record<string, unknown>;\n\t\tif (\n\t\t\tmetadata.protocol === PI_SUBAGENTS_RPC_PROTOCOL &&\n\t\t\ttypeof metadata.completionId === \"string\"\n\t\t) {\n\t\t\tids.add(metadata.completionId);\n\t\t}\n\t\tif (!Array.isArray(metadata.completions)) continue;\n\t\tfor (const completion of metadata.completions) {\n\t\t\tif (!completion || typeof completion !== \"object\" || Array.isArray(completion)) continue;\n\t\t\tconst item = completion as Record<string, unknown>;\n\t\t\tif (item.protocol === PI_SUBAGENTS_RPC_PROTOCOL && typeof item.completionId === \"string\") {\n\t\t\t\tids.add(item.completionId);\n\t\t\t}\n\t\t}\n\t}\n\treturn ids;\n}\n\nfunction chunkCompletions(completions: AgentTurnCompletion[]): AgentTurnCompletion[][] {\n\tconst batches: AgentTurnCompletion[][] = [];\n\tfor (let index = 0; index < completions.length; index += MAX_COMPLETIONS_PER_MESSAGE) {\n\t\tbatches.push(completions.slice(index, index + MAX_COMPLETIONS_PER_MESSAGE));\n\t}\n\treturn batches;\n}\n\nfunction buildCompletionMessage(completions: AgentTurnCompletion[]): CompletionMessage {\n\tif (completions.length === 1) {\n\t\tconst completion = completions[0];\n\t\treturn {\n\t\t\tcustomType: SUBAGENT_COMPLETION_MESSAGE_TYPE,\n\t\t\tcontent: buildDetachedCompletionMessage(completion),\n\t\t\tdisplay: true,\n\t\t\tdetails: completionMetadata(completion),\n\t\t};\n\t}\n\tconst content = truncateUtf8(\n\t\t[\n\t\t\t\"Message Type: SUBAGENT_COMPLETION_BATCH\",\n\t\t\t`Protocol: ${PI_SUBAGENTS_RPC_PROTOCOL}`,\n\t\t\t`Completion Count: ${completions.length}`,\n\t\t\t...completions.flatMap((completion, index) => [\n\t\t\t\t\"\",\n\t\t\t\t`--- Completion ${index + 1} of ${completions.length} ---`,\n\t\t\t\tbuildDetachedCompletionMessage(completion),\n\t\t\t]),\n\t\t].join(\"\\n\"),\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n\treturn {\n\t\tcustomType: SUBAGENT_COMPLETION_MESSAGE_TYPE,\n\t\tcontent,\n\t\tdisplay: true,\n\t\tdetails: {\n\t\t\tcompletionCount: completions.length,\n\t\t\tcompletions: completions.map(completionMetadata),\n\t\t},\n\t};\n}\n\nfunction completionMetadata(completion: AgentTurnCompletion): CompletionMetadata {\n\tconst completionRequirement = requirementForCompletion(completion.agent, completion.completionId);\n\treturn {\n\t\tprotocol: PI_SUBAGENTS_RPC_PROTOCOL,\n\t\tcompletionId: completion.completionId,\n\t\trunId: completion.runId,\n\t\tgeneration: completion.generation,\n\t\tagentId: completion.agent.id,\n\t\t...(completion.agent.taskPath ? { taskPath: completion.agent.taskPath } : {}),\n\t\t...(completion.recipientPath ? { recipientPath: completion.recipientPath } : {}),\n\t\tagent: completion.agent.agent,\n\t\ttask: sanitizeCompletionLine(completion.task, 256) || \"(unknown task)\",\n\t\tstate: completion.agent.state,\n\t\t...(completion.agent.telemetry?.transport\n\t\t\t? { transport: completion.agent.telemetry.transport }\n\t\t\t: {}),\n\t\t...(completion.agent.structuredResult\n\t\t\t? { structuredResult: completion.agent.structuredResult }\n\t\t\t: {}),\n\t\t...(completion.agent.outcome ? { outcome: completion.agent.outcome } : {}),\n\t\t...(completion.agent.capabilityGrant\n\t\t\t? { capabilityGrant: completion.agent.capabilityGrant }\n\t\t\t: {}),\n\t\t...(completionRequirement ? { completionRequirement } : {}),\n\t};\n}\n\nexport function buildDetachedCompletionMessage(completion: AgentTurnCompletion): string {\n\tconst task = sanitizeCompletionLine(completion.task, 256) || \"(unknown task)\";\n\tconst agentName = sanitizeCompletionLine(completion.agent.agent, 128) || \"(unknown agent)\";\n\tconst output = safeTerminalText(redactPrivateText(completion.output));\n\tconst error = completion.error\n\t\t? truncateUtf8(\n\t\t\t\tsafeTerminalText(redactPrivateText(completion.error)),\n\t\t\t\tMAX_COMPLETION_ERROR_BYTES,\n\t\t\t).text\n\t\t: \"\";\n\treturn truncateUtf8(\n\t\t[\n\t\t\t\"Message Type: SUBAGENT_COMPLETION\",\n\t\t\t`Protocol: ${PI_SUBAGENTS_RPC_PROTOCOL}`,\n\t\t\t`Completion ID: ${completion.completionId}`,\n\t\t\t`Run ID: ${completion.runId}`,\n\t\t\t`Generation: ${completion.generation}`,\n\t\t\t`Agent ID: ${completion.agent.id}`,\n\t\t\t...(completion.agent.taskPath ? [`Agent Path: ${completion.agent.taskPath}`] : []),\n\t\t\t...(completion.recipientPath ? [`Recipient Path: ${completion.recipientPath}`] : []),\n\t\t\t`Agent: ${agentName}`,\n\t\t\t`Task: ${task}`,\n\t\t\t`State: ${completion.agent.state}`,\n\t\t\t...(error.trim() ? [\"Error:\", error] : []),\n\t\t\t\"Payload:\",\n\t\t\toutput.trim() ? output : \"(no output)\",\n\t\t].join(\"\\n\"),\n\t\tMAX_TOOL_MESSAGE_BYTES,\n\t).text;\n}\n\nfunction sanitizeCompletionLine(value: string, maxBytes: number): string {\n\treturn (\n\t\ttruncateUtf8(redactPrivateText(value), maxBytes)\n\t\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Strip untrusted terminal controls.\n\t\t\t.text.replace(/[\\u0000-\\u001f\\u007f]+/g, \" \")\n\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t.trim()\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -3,14 +3,15 @@
3
3
  import {
4
4
  CompletionDeliveryBroker,
5
5
  buildDetachedCompletionMessage
6
- } from "./chunk-434NII74.ts";
7
- import "./chunk-C4L6P266.ts";
8
- import "./chunk-QDVGH2X7.ts";
6
+ } from "./chunk-YU53SHA7.ts";
7
+ import "./chunk-LEOYDZI3.ts";
8
+ import "./chunk-IWC32VPY.ts";
9
9
  import "./chunk-BFK2Z4ZF.ts";
10
+ import "./chunk-NLT67IZS.ts";
10
11
  import "./chunk-SWGQLFSD.ts";
11
12
  import "./chunk-H3FP6DLR.ts";
12
13
  export {
13
14
  CompletionDeliveryBroker,
14
15
  buildDetachedCompletionMessage
15
16
  };
16
- //# sourceMappingURL=completion-delivery-YPOWSSV3.ts.map
17
+ //# sourceMappingURL=completion-delivery-RSJU6BXL.ts.map
@@ -11,12 +11,13 @@ import {
11
11
  showSubagentHelp,
12
12
  showSubagentStatus,
13
13
  statusLines
14
- } from "./chunk-EFBPISNT.ts";
14
+ } from "./chunk-PBZMBTNJ.ts";
15
15
  import "./chunk-KMGKCEO4.ts";
16
- import "./chunk-7QPPBBXZ.ts";
17
- import "./chunk-QBORTI4W.ts";
18
- import "./chunk-7OBINKFM.ts";
19
- import "./chunk-DPPVEQAM.ts";
16
+ import "./chunk-D4CR7T73.ts";
17
+ import "./chunk-N2T5IN4X.ts";
18
+ import "./chunk-TMZRHIIK.ts";
19
+ import "./chunk-VDG7LTYE.ts";
20
+ import "./chunk-4AQSF7AS.ts";
20
21
  import "./chunk-SWGQLFSD.ts";
21
22
  import "./chunk-H3FP6DLR.ts";
22
23
  export {
@@ -31,4 +32,4 @@ export {
31
32
  showSubagentStatus,
32
33
  statusLines
33
34
  };
34
- //# sourceMappingURL=config-status-J4GPWP46.ts.map
35
+ //# sourceMappingURL=config-status-FKGDECZ3.ts.map