@narumitw/pi-subagents 2.0.6 → 2.1.0

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 (178) hide show
  1. package/README.md +152 -50
  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-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
  5. package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
  6. package/dist/chunks/chunk-6H6TBBED.ts +108 -0
  7. package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
  8. package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
  9. package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
  10. package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
  11. package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
  12. package/dist/chunks/{chunk-434NII74.ts → chunk-DIHBUR2E.ts} +54 -8
  13. package/dist/chunks/chunk-DIHBUR2E.ts.map +7 -0
  14. package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
  15. package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
  16. package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-FXI45N3J.ts} +5 -5
  17. package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
  18. package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
  19. package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
  20. package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
  21. package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
  22. package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
  23. package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
  24. package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
  25. package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
  26. package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
  27. package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
  28. package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
  29. package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
  30. package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
  31. package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
  32. package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
  33. package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
  34. package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-PABJJYP6.ts} +174 -47
  35. package/dist/chunks/chunk-PABJJYP6.ts.map +7 -0
  36. package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
  37. package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
  38. package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
  39. package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
  40. package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
  41. package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
  42. package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
  43. package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
  44. package/dist/chunks/chunk-VBDGNNLM.ts +214 -0
  45. package/dist/chunks/chunk-VBDGNNLM.ts.map +7 -0
  46. package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
  47. package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
  48. package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
  49. package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
  50. package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
  51. package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-JVLNQRWX.ts} +5 -4
  52. package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
  53. package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-DDKERQHI.ts} +297 -231
  54. package/dist/chunks/config-ui-DDKERQHI.ts.map +7 -0
  55. package/dist/chunks/{consult-IV7UBNQQ.ts → consult-PQ6PRAKC.ts} +14 -13
  56. package/dist/chunks/consult-PQ6PRAKC.ts.map +7 -0
  57. package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
  58. package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
  59. package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
  60. package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
  61. package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
  62. package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
  63. package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
  64. package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
  65. package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-XHPJBZL7.ts} +11 -7
  66. package/dist/chunks/persistence-XHPJBZL7.ts.map +7 -0
  67. package/dist/chunks/{registry-E6XPJB7L.ts → registry-XDXPECWF.ts} +136 -15
  68. package/dist/chunks/registry-XDXPECWF.ts.map +7 -0
  69. package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
  70. package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
  71. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
  72. package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
  73. package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
  74. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
  75. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
  76. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
  77. package/dist/index.ts +427 -30
  78. package/dist/index.ts.map +3 -3
  79. package/docs/async-runtime-protocol.md +69 -0
  80. package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
  81. package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
  82. package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
  83. package/docs/pi-subagents-diagrams.md +183 -0
  84. package/package.json +9 -8
  85. package/src/agents/types.ts +2 -0
  86. package/src/async-subagent-benchmark.ts +532 -0
  87. package/src/completion-delivery.ts +71 -4
  88. package/src/completion-render.ts +1 -0
  89. package/src/completion-requirement.ts +308 -0
  90. package/src/config-registration.ts +5 -5
  91. package/src/config-status.ts +66 -70
  92. package/src/config-ui.ts +244 -150
  93. package/src/consult-resources.ts +1 -1
  94. package/src/consult.ts +3 -8
  95. package/src/delegation-contract.ts +55 -9
  96. package/src/execution-plan.ts +1 -1
  97. package/src/execution-ui.ts +40 -29
  98. package/src/execution.ts +2 -3
  99. package/src/inspect.ts +24 -1
  100. package/src/orchestration-metrics.ts +1 -1
  101. package/src/panel-execution.ts +2 -3
  102. package/src/panel-failure.ts +1 -1
  103. package/src/panel-render.ts +1 -1
  104. package/src/parallel-limit-ui.ts +6 -5
  105. package/src/params.ts +2 -1
  106. package/src/persistence.ts +9 -0
  107. package/src/process-control.ts +43 -0
  108. package/src/registry-types.ts +5 -0
  109. package/src/registry.ts +162 -18
  110. package/src/render.ts +2 -1
  111. package/src/rpc-transport.ts +1 -1
  112. package/src/runner-outcome.ts +1 -1
  113. package/src/runner-result.ts +1 -1
  114. package/src/runner-types.ts +102 -0
  115. package/src/runner.ts +11 -192
  116. package/src/settings/inspection.ts +27 -0
  117. package/src/settings/schema.ts +9 -0
  118. package/src/settings-reader.ts +7 -0
  119. package/src/settings.ts +20 -0
  120. package/src/spawn-idempotency.ts +5 -0
  121. package/src/stateful-agent-view.ts +15 -19
  122. package/src/stateful-guidance.ts +14 -4
  123. package/src/stateful-limit-ui.ts +23 -20
  124. package/src/stateful-limits.ts +10 -10
  125. package/src/stateful-registration.ts +126 -9
  126. package/src/stateful-render.ts +27 -2
  127. package/src/subagent-details.ts +43 -0
  128. package/src/subagents-extension.ts +66 -8
  129. package/src/subagents.ts +2 -0
  130. package/src/subprocess-transport.ts +2 -1
  131. package/src/supervision.ts +2 -1
  132. package/src/timeout-finalization.ts +1 -1
  133. package/src/tool-schema-compatibility.ts +73 -0
  134. package/src/transport-types.ts +6 -0
  135. package/src/transport-ui.ts +18 -46
  136. package/src/usage-recording-config.ts +13 -0
  137. package/src/usage-recording-store.ts +183 -0
  138. package/src/usage-recording.ts +478 -0
  139. package/src/verification-harness.ts +1 -1
  140. package/src/workflow-ui.ts +17 -9
  141. package/dist/chunks/chunk-434NII74.ts.map +0 -7
  142. package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
  143. package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
  144. package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
  145. package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
  146. package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
  147. package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
  148. package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
  149. package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
  150. package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
  151. package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
  152. package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
  153. package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
  154. package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
  155. package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
  156. package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
  157. package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
  158. package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
  159. package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
  160. package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
  161. package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
  162. /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
  163. /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
  164. /package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-FXI45N3J.ts.map} +0 -0
  165. /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
  166. /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
  167. /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
  168. /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
  169. /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
  170. /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
  171. /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-JVLNQRWX.ts.map} +0 -0
  172. /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
  173. /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
  174. /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
  175. /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
  176. /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
  177. /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
  178. /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
+ }
@@ -0,0 +1,214 @@
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
+ import {
4
+ DEFAULT_MAX_CONTEXT_BYTES,
5
+ truncateUtf8
6
+ } from "./chunk-H3FP6DLR.ts";
7
+
8
+ // src/completion-requirement.ts
9
+ import { StringEnum } from "@earendil-works/pi-ai";
10
+ var COMPLETION_REQUIREMENT_MODES = ["background", "required"];
11
+ var CompletionRequirementModeSchema = StringEnum(COMPLETION_REQUIREMENT_MODES, {
12
+ description: "Mark this exact turn as background (default) or required for the parent final answer. Required results are tracked until their exact completion becomes visible, but current Pi versions do not provide a hard pre-display final-answer barrier.",
13
+ default: "background"
14
+ });
15
+ var COMPLETION_REQUIREMENT_VERSION = "pi-subagents:completion-requirement:v1";
16
+ var COMPLETION_REQUIREMENT_CONTEXT_TYPE = "pi-subagent-required-completions";
17
+ var MAX_REQUIREMENTS_PER_AGENT = 20;
18
+ var MAX_UNRESOLVED_REQUIRED_COMPLETIONS = 64;
19
+ function beginCompletionRequirement(records, input) {
20
+ const retained = (records ?? []).filter(
21
+ (record) => record.runId !== input.runId || record.generation !== input.generation
22
+ );
23
+ retained.push({
24
+ version: COMPLETION_REQUIREMENT_VERSION,
25
+ runId: input.runId,
26
+ generation: input.generation,
27
+ state: "pending",
28
+ createdAt: input.createdAt,
29
+ updatedAt: input.createdAt
30
+ });
31
+ return retained.slice(-MAX_REQUIREMENTS_PER_AGENT);
32
+ }
33
+ function makeCompletionAvailable(records, input) {
34
+ return updateExact(records, input.runId, input.generation, (record) => ({
35
+ ...record,
36
+ state: "available",
37
+ completionId: input.completionId,
38
+ terminalState: input.terminalState,
39
+ updatedAt: input.updatedAt
40
+ }));
41
+ }
42
+ function makeCompletionVisible(records, completionId, updatedAt) {
43
+ if (!records?.some((record) => record.completionId === completionId)) {
44
+ return records?.map((record) => ({ ...record }));
45
+ }
46
+ return records.map(
47
+ (record) => record.completionId === completionId ? { ...record, state: "visible", updatedAt } : { ...record }
48
+ );
49
+ }
50
+ function cancelPendingCompletionRequirements(records, terminalState, updatedAt) {
51
+ if (!records?.some((record) => record.state === "pending")) {
52
+ return records?.map((record) => ({ ...record }));
53
+ }
54
+ return records.map(
55
+ (record) => record.state === "pending" ? {
56
+ ...record,
57
+ state: "cancelled",
58
+ terminalState,
59
+ updatedAt
60
+ } : { ...record }
61
+ );
62
+ }
63
+ function requirementForCompletion(agent, completionId) {
64
+ return agent.completionRequirements?.find((record) => record.completionId === completionId);
65
+ }
66
+ function completionRequirementKey(record) {
67
+ return `${record.runId}\0${record.generation}`;
68
+ }
69
+ function completionRequirementsFromBranch(entries) {
70
+ const records = /* @__PURE__ */ new Map();
71
+ let observedState = false;
72
+ for (const entry of entries) {
73
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) continue;
74
+ const candidate = entry;
75
+ const message = candidate.type === "message" && candidate.message && typeof candidate.message === "object" ? candidate.message : candidate;
76
+ if (message.role === "toolResult" && ["subagent_spawn", "subagent_send", "subagent_await", "subagent_manage"].includes(
77
+ String(message.toolName)
78
+ )) {
79
+ observedState = true;
80
+ const details2 = message.details;
81
+ if (!details2 || typeof details2 !== "object" || Array.isArray(details2)) continue;
82
+ const detailsRecord = details2;
83
+ const agents = [
84
+ detailsRecord.agent,
85
+ ...Array.isArray(detailsRecord.agents) ? detailsRecord.agents : []
86
+ ];
87
+ for (const agent of agents) {
88
+ if (!agent || typeof agent !== "object" || Array.isArray(agent)) continue;
89
+ const requirements = agent.completionRequirements;
90
+ if (!Array.isArray(requirements)) continue;
91
+ for (const requirement of requirements) {
92
+ if (isCompletionRequirementRecord(requirement)) {
93
+ records.set(completionRequirementKey(requirement), { ...requirement });
94
+ }
95
+ }
96
+ }
97
+ continue;
98
+ }
99
+ if (message.role !== "custom" || message.customType !== "pi-subagent-completion") continue;
100
+ const details = message.details;
101
+ if (!details || typeof details !== "object" || Array.isArray(details)) continue;
102
+ const detailRecord = details;
103
+ const completionRecords = Array.isArray(detailRecord.completions) ? detailRecord.completions : [detailRecord];
104
+ for (const completion of completionRecords) {
105
+ if (!completion || typeof completion !== "object" || Array.isArray(completion)) continue;
106
+ const requirement = completion.completionRequirement;
107
+ if (!isCompletionRequirementRecord(requirement)) continue;
108
+ records.set(completionRequirementKey(requirement), {
109
+ ...requirement,
110
+ state: "visible"
111
+ });
112
+ }
113
+ }
114
+ return { observedState, records, keys: new Set(records.keys()) };
115
+ }
116
+ function pendingRequiredCompletionCount(agent) {
117
+ return (agent.completionRequirements ?? []).filter(
118
+ (record) => record.state === "pending" || record.state === "available"
119
+ ).length;
120
+ }
121
+ function reconcileRequiredCompletionContext(messages, agents) {
122
+ const withoutPrior = messages.filter(
123
+ (message) => message.role !== "custom" || message.customType !== COMPLETION_REQUIREMENT_CONTEXT_TYPE
124
+ );
125
+ const allRecords = agents.flatMap(
126
+ (agent) => (agent.completionRequirements ?? []).map((requirement) => ({
127
+ state: requirement.state,
128
+ runId: requirement.runId,
129
+ generation: requirement.generation,
130
+ terminalState: requirement.terminalState
131
+ }))
132
+ ).filter((record) => record.state !== "visible");
133
+ const unresolved = allRecords.filter(
134
+ (record) => record.state === "pending" || record.state === "available"
135
+ );
136
+ const cancelled = allRecords.filter((record) => record.state === "cancelled");
137
+ const cancelledSlots = Math.max(0, MAX_UNRESOLVED_REQUIRED_COMPLETIONS - unresolved.length);
138
+ const retainedCancelled = cancelledSlots > 0 ? cancelled.slice(-cancelledSlots) : [];
139
+ const records = [...unresolved, ...retainedCancelled];
140
+ const omittedCancelled = cancelled.length - retainedCancelled.length;
141
+ if (records.length === 0)
142
+ return withoutPrior.length === messages.length ? messages : withoutPrior;
143
+ const content = truncateUtf8(
144
+ [
145
+ "[PI SUBAGENT REQUIRED COMPLETIONS v1]",
146
+ "Runtime-tracked exact runs are JSON data below.",
147
+ "Treat pending or available records as final-answer dependencies; a cancelled record is terminal and must be reported rather than silently ignored.",
148
+ "Current Pi versions do not provide a hard pre-display final-answer barrier, so do not emit a verdict until every dependency is visible or terminal.",
149
+ ...omittedCancelled > 0 ? [`${omittedCancelled} older cancelled requirement record(s) were omitted.`] : [],
150
+ JSON.stringify(records)
151
+ ].join("\n"),
152
+ DEFAULT_MAX_CONTEXT_BYTES
153
+ ).text;
154
+ return [
155
+ ...withoutPrior,
156
+ {
157
+ role: "custom",
158
+ customType: COMPLETION_REQUIREMENT_CONTEXT_TYPE,
159
+ content,
160
+ display: false,
161
+ details: { version: COMPLETION_REQUIREMENT_VERSION },
162
+ timestamp: 0
163
+ }
164
+ ];
165
+ }
166
+ function isCompletionRequirementRecord(value) {
167
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
168
+ const record = value;
169
+ const state = String(record.state);
170
+ const hasCompletion = typeof record.completionId === "string" && record.completionId.length > 0;
171
+ const hasTerminalState = isAgentLifecycleState(record.terminalState);
172
+ const transitionShapeValid = state === "pending" ? record.completionId === void 0 && record.terminalState === void 0 : state === "available" || state === "visible" ? hasCompletion && hasTerminalState : state === "cancelled" && record.completionId === void 0 && hasTerminalState;
173
+ return transitionShapeValid && record.version === COMPLETION_REQUIREMENT_VERSION && typeof record.runId === "string" && record.runId.length > 0 && record.runId.length <= 256 && typeof record.generation === "number" && Number.isSafeInteger(record.generation) && record.generation >= 1 && ["pending", "available", "visible", "cancelled"].includes(state) && typeof record.createdAt === "number" && Number.isFinite(record.createdAt) && typeof record.updatedAt === "number" && Number.isFinite(record.updatedAt) && record.updatedAt >= record.createdAt && (record.completionId === void 0 || typeof record.completionId === "string" && record.completionId.length <= 256) && (record.terminalState === void 0 || isAgentLifecycleState(record.terminalState));
174
+ }
175
+ function updateExact(records, runId, generation, update) {
176
+ if (!records?.some((record) => record.runId === runId && record.generation === generation)) {
177
+ return records?.map((record) => ({ ...record }));
178
+ }
179
+ return records.map(
180
+ (record) => record.runId === runId && record.generation === generation ? update(record) : { ...record }
181
+ );
182
+ }
183
+ function isAgentLifecycleState(value) {
184
+ return [
185
+ "starting",
186
+ "running",
187
+ "idle",
188
+ "completed",
189
+ "partial",
190
+ "blocked",
191
+ "needs-input",
192
+ "abstained",
193
+ "stale",
194
+ "interrupted",
195
+ "failed",
196
+ "closed"
197
+ ].includes(String(value));
198
+ }
199
+
200
+ export {
201
+ CompletionRequirementModeSchema,
202
+ MAX_UNRESOLVED_REQUIRED_COMPLETIONS,
203
+ beginCompletionRequirement,
204
+ makeCompletionAvailable,
205
+ makeCompletionVisible,
206
+ cancelPendingCompletionRequirements,
207
+ requirementForCompletion,
208
+ completionRequirementKey,
209
+ completionRequirementsFromBranch,
210
+ pendingRequiredCompletionCount,
211
+ reconcileRequiredCompletionContext,
212
+ isCompletionRequirementRecord
213
+ };
214
+ //# sourceMappingURL=chunk-VBDGNNLM.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/completion-requirement.ts"],
4
+ "sourcesContent": ["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport type { ContextEvent } from \"@earendil-works/pi-coding-agent\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { AgentLifecycleState, ManagedAgent } from \"./registry-types.js\";\n\nexport const COMPLETION_REQUIREMENT_MODES = [\"background\", \"required\"] as const;\nexport type CompletionRequirementMode = (typeof COMPLETION_REQUIREMENT_MODES)[number];\n\nexport const CompletionRequirementModeSchema = StringEnum(COMPLETION_REQUIREMENT_MODES, {\n\tdescription:\n\t\t\"Mark this exact turn as background (default) or required for the parent final answer. Required results are tracked until their exact completion becomes visible, but current Pi versions do not provide a hard pre-display final-answer barrier.\",\n\tdefault: \"background\",\n});\n\nexport const COMPLETION_REQUIREMENT_VERSION = \"pi-subagents:completion-requirement:v1\" as const;\nexport const COMPLETION_REQUIREMENT_CONTEXT_TYPE = \"pi-subagent-required-completions\";\nconst MAX_REQUIREMENTS_PER_AGENT = 20;\nexport const MAX_UNRESOLVED_REQUIRED_COMPLETIONS = 64;\n\nexport type CompletionRequirementState = \"pending\" | \"available\" | \"visible\" | \"cancelled\";\n\nexport interface CompletionRequirementRecord {\n\tversion: typeof COMPLETION_REQUIREMENT_VERSION;\n\trunId: string;\n\tgeneration: number;\n\tstate: CompletionRequirementState;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\tcompletionId?: string;\n\tterminalState?: AgentLifecycleState;\n}\n\nexport function beginCompletionRequirement(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tinput: { runId: string; generation: number; createdAt: number },\n): CompletionRequirementRecord[] {\n\tconst retained = (records ?? []).filter(\n\t\t(record) => record.runId !== input.runId || record.generation !== input.generation,\n\t);\n\tretained.push({\n\t\tversion: COMPLETION_REQUIREMENT_VERSION,\n\t\trunId: input.runId,\n\t\tgeneration: input.generation,\n\t\tstate: \"pending\",\n\t\tcreatedAt: input.createdAt,\n\t\tupdatedAt: input.createdAt,\n\t});\n\treturn retained.slice(-MAX_REQUIREMENTS_PER_AGENT);\n}\n\nexport function makeCompletionAvailable(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tinput: {\n\t\trunId: string;\n\t\tgeneration: number;\n\t\tcompletionId: string;\n\t\tterminalState: AgentLifecycleState;\n\t\tupdatedAt: number;\n\t},\n): CompletionRequirementRecord[] | undefined {\n\treturn updateExact(records, input.runId, input.generation, (record) => ({\n\t\t...record,\n\t\tstate: \"available\",\n\t\tcompletionId: input.completionId,\n\t\tterminalState: input.terminalState,\n\t\tupdatedAt: input.updatedAt,\n\t}));\n}\n\nexport function makeCompletionVisible(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tcompletionId: string,\n\tupdatedAt: number,\n): CompletionRequirementRecord[] | undefined {\n\tif (!records?.some((record) => record.completionId === completionId)) {\n\t\treturn records?.map((record) => ({ ...record }));\n\t}\n\treturn records.map((record) =>\n\t\trecord.completionId === completionId\n\t\t\t? { ...record, state: \"visible\" as const, updatedAt }\n\t\t\t: { ...record },\n\t);\n}\n\nexport function cancelPendingCompletionRequirements(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\tterminalState: AgentLifecycleState,\n\tupdatedAt: number,\n): CompletionRequirementRecord[] | undefined {\n\tif (!records?.some((record) => record.state === \"pending\")) {\n\t\treturn records?.map((record) => ({ ...record }));\n\t}\n\treturn records.map((record) =>\n\t\trecord.state === \"pending\"\n\t\t\t? {\n\t\t\t\t\t...record,\n\t\t\t\t\tstate: \"cancelled\" as const,\n\t\t\t\t\tterminalState,\n\t\t\t\t\tupdatedAt,\n\t\t\t\t}\n\t\t\t: { ...record },\n\t);\n}\n\nexport function requirementForCompletion(\n\tagent: Pick<ManagedAgent, \"completionRequirements\">,\n\tcompletionId: string,\n): CompletionRequirementRecord | undefined {\n\treturn agent.completionRequirements?.find((record) => record.completionId === completionId);\n}\n\nexport interface BranchCompletionRequirementState {\n\tobservedState: boolean;\n\trecords: Map<string, CompletionRequirementRecord>;\n\tkeys: Set<string>;\n}\n\nexport function completionRequirementKey(\n\trecord: Pick<CompletionRequirementRecord, \"runId\" | \"generation\">,\n): string {\n\treturn `${record.runId}\\u0000${record.generation}`;\n}\n\nexport function completionRequirementsFromBranch(\n\tentries: readonly unknown[],\n): BranchCompletionRequirementState {\n\tconst records = new Map<string, CompletionRequirementRecord>();\n\tlet observedState = false;\n\tfor (const entry of entries) {\n\t\tif (!entry || typeof entry !== \"object\" || Array.isArray(entry)) continue;\n\t\tconst candidate = entry as Record<string, unknown>;\n\t\tconst message =\n\t\t\tcandidate.type === \"message\" && candidate.message && typeof candidate.message === \"object\"\n\t\t\t\t? (candidate.message as Record<string, unknown>)\n\t\t\t\t: candidate;\n\t\tif (\n\t\t\tmessage.role === \"toolResult\" &&\n\t\t\t[\"subagent_spawn\", \"subagent_send\", \"subagent_await\", \"subagent_manage\"].includes(\n\t\t\t\tString(message.toolName),\n\t\t\t)\n\t\t) {\n\t\t\tobservedState = true;\n\t\t\tconst details = message.details;\n\t\t\tif (!details || typeof details !== \"object\" || Array.isArray(details)) continue;\n\t\t\tconst detailsRecord = details as Record<string, unknown>;\n\t\t\tconst agents = [\n\t\t\t\tdetailsRecord.agent,\n\t\t\t\t...(Array.isArray(detailsRecord.agents) ? detailsRecord.agents : []),\n\t\t\t];\n\t\t\tfor (const agent of agents) {\n\t\t\t\tif (!agent || typeof agent !== \"object\" || Array.isArray(agent)) continue;\n\t\t\t\tconst requirements = (agent as Record<string, unknown>).completionRequirements;\n\t\t\t\tif (!Array.isArray(requirements)) continue;\n\t\t\t\tfor (const requirement of requirements) {\n\t\t\t\t\tif (isCompletionRequirementRecord(requirement)) {\n\t\t\t\t\t\trecords.set(completionRequirementKey(requirement), { ...requirement });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"custom\" || message.customType !== \"pi-subagent-completion\") continue;\n\t\tconst details = message.details;\n\t\tif (!details || typeof details !== \"object\" || Array.isArray(details)) continue;\n\t\tconst detailRecord = details as Record<string, unknown>;\n\t\tconst completionRecords = Array.isArray(detailRecord.completions)\n\t\t\t? detailRecord.completions\n\t\t\t: [detailRecord];\n\t\tfor (const completion of completionRecords) {\n\t\t\tif (!completion || typeof completion !== \"object\" || Array.isArray(completion)) continue;\n\t\t\tconst requirement = (completion as Record<string, unknown>).completionRequirement;\n\t\t\tif (!isCompletionRequirementRecord(requirement)) continue;\n\t\t\trecords.set(completionRequirementKey(requirement), {\n\t\t\t\t...requirement,\n\t\t\t\tstate: \"visible\",\n\t\t\t});\n\t\t}\n\t}\n\treturn { observedState, records, keys: new Set(records.keys()) };\n}\n\nexport function pendingRequiredCompletionCount(\n\tagent: Pick<ManagedAgent, \"completionRequirements\">,\n): number {\n\treturn (agent.completionRequirements ?? []).filter(\n\t\t(record) => record.state === \"pending\" || record.state === \"available\",\n\t).length;\n}\n\nexport function reconcileRequiredCompletionContext(\n\tmessages: ContextEvent[\"messages\"],\n\tagents: readonly ManagedAgent[],\n): ContextEvent[\"messages\"] {\n\tconst withoutPrior = messages.filter(\n\t\t(message) =>\n\t\t\tmessage.role !== \"custom\" || message.customType !== COMPLETION_REQUIREMENT_CONTEXT_TYPE,\n\t);\n\tconst allRecords = agents\n\t\t.flatMap((agent) =>\n\t\t\t(agent.completionRequirements ?? []).map((requirement) => ({\n\t\t\t\tstate: requirement.state,\n\t\t\t\trunId: requirement.runId,\n\t\t\t\tgeneration: requirement.generation,\n\t\t\t\tterminalState: requirement.terminalState,\n\t\t\t})),\n\t\t)\n\t\t.filter((record) => record.state !== \"visible\");\n\tconst unresolved = allRecords.filter(\n\t\t(record) => record.state === \"pending\" || record.state === \"available\",\n\t);\n\tconst cancelled = allRecords.filter((record) => record.state === \"cancelled\");\n\tconst cancelledSlots = Math.max(0, MAX_UNRESOLVED_REQUIRED_COMPLETIONS - unresolved.length);\n\tconst retainedCancelled = cancelledSlots > 0 ? cancelled.slice(-cancelledSlots) : [];\n\tconst records = [...unresolved, ...retainedCancelled];\n\tconst omittedCancelled = cancelled.length - retainedCancelled.length;\n\tif (records.length === 0)\n\t\treturn withoutPrior.length === messages.length ? messages : withoutPrior;\n\tconst content = truncateUtf8(\n\t\t[\n\t\t\t\"[PI SUBAGENT REQUIRED COMPLETIONS v1]\",\n\t\t\t\"Runtime-tracked exact runs are JSON data below.\",\n\t\t\t\"Treat pending or available records as final-answer dependencies; a cancelled record is terminal and must be reported rather than silently ignored.\",\n\t\t\t\"Current Pi versions do not provide a hard pre-display final-answer barrier, so do not emit a verdict until every dependency is visible or terminal.\",\n\t\t\t...(omittedCancelled > 0\n\t\t\t\t? [`${omittedCancelled} older cancelled requirement record(s) were omitted.`]\n\t\t\t\t: []),\n\t\t\tJSON.stringify(records),\n\t\t].join(\"\\n\"),\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n\treturn [\n\t\t...withoutPrior,\n\t\t{\n\t\t\trole: \"custom\",\n\t\t\tcustomType: COMPLETION_REQUIREMENT_CONTEXT_TYPE,\n\t\t\tcontent,\n\t\t\tdisplay: false,\n\t\t\tdetails: { version: COMPLETION_REQUIREMENT_VERSION },\n\t\t\ttimestamp: 0,\n\t\t},\n\t];\n}\n\nexport function isCompletionRequirementRecord(\n\tvalue: unknown,\n): value is CompletionRequirementRecord {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst record = value as Record<string, unknown>;\n\tconst state = String(record.state);\n\tconst hasCompletion = typeof record.completionId === \"string\" && record.completionId.length > 0;\n\tconst hasTerminalState = isAgentLifecycleState(record.terminalState);\n\tconst transitionShapeValid =\n\t\tstate === \"pending\"\n\t\t\t? record.completionId === undefined && record.terminalState === undefined\n\t\t\t: state === \"available\" || state === \"visible\"\n\t\t\t\t? hasCompletion && hasTerminalState\n\t\t\t\t: state === \"cancelled\" && record.completionId === undefined && hasTerminalState;\n\treturn (\n\t\ttransitionShapeValid &&\n\t\trecord.version === COMPLETION_REQUIREMENT_VERSION &&\n\t\ttypeof record.runId === \"string\" &&\n\t\trecord.runId.length > 0 &&\n\t\trecord.runId.length <= 256 &&\n\t\ttypeof record.generation === \"number\" &&\n\t\tNumber.isSafeInteger(record.generation) &&\n\t\trecord.generation >= 1 &&\n\t\t[\"pending\", \"available\", \"visible\", \"cancelled\"].includes(state) &&\n\t\ttypeof record.createdAt === \"number\" &&\n\t\tNumber.isFinite(record.createdAt) &&\n\t\ttypeof record.updatedAt === \"number\" &&\n\t\tNumber.isFinite(record.updatedAt) &&\n\t\trecord.updatedAt >= record.createdAt &&\n\t\t(record.completionId === undefined ||\n\t\t\t(typeof record.completionId === \"string\" && record.completionId.length <= 256)) &&\n\t\t(record.terminalState === undefined || isAgentLifecycleState(record.terminalState))\n\t);\n}\n\nfunction updateExact(\n\trecords: readonly CompletionRequirementRecord[] | undefined,\n\trunId: string,\n\tgeneration: number,\n\tupdate: (record: CompletionRequirementRecord) => CompletionRequirementRecord,\n): CompletionRequirementRecord[] | undefined {\n\tif (!records?.some((record) => record.runId === runId && record.generation === generation)) {\n\t\treturn records?.map((record) => ({ ...record }));\n\t}\n\treturn records.map((record) =>\n\t\trecord.runId === runId && record.generation === generation ? update(record) : { ...record },\n\t);\n}\n\nfunction isAgentLifecycleState(value: unknown): value is AgentLifecycleState {\n\treturn [\n\t\t\"starting\",\n\t\t\"running\",\n\t\t\"idle\",\n\t\t\"completed\",\n\t\t\"partial\",\n\t\t\"blocked\",\n\t\t\"needs-input\",\n\t\t\"abstained\",\n\t\t\"stale\",\n\t\t\"interrupted\",\n\t\t\"failed\",\n\t\t\"closed\",\n\t].includes(String(value));\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["details"]
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
@@ -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-DIHBUR2E.ts";
7
+ import "./chunk-LEOYDZI3.ts";
8
+ import "./chunk-IWC32VPY.ts";
9
9
  import "./chunk-BFK2Z4ZF.ts";
10
+ import "./chunk-VBDGNNLM.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-JVLNQRWX.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