@narumitw/pi-subagents 2.1.4 → 3.0.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 (312) hide show
  1. package/README.md +187 -1228
  2. package/dist/child-communication-bridge.ts +136 -0
  3. package/dist/child-communication-bridge.ts.map +7 -0
  4. package/dist/chunks/chunk-UKTWUQRM.js +667 -0
  5. package/dist/chunks/chunk-UKTWUQRM.js.map +7 -0
  6. package/dist/index.ts +1448 -1614
  7. package/dist/index.ts.map +4 -4
  8. package/docs/design-principles.md +31 -0
  9. package/docs/ipc-transport-idea.md +103 -0
  10. package/docs/tools.md +109 -0
  11. package/package.json +11 -19
  12. package/src/broker-credentials.ts +71 -0
  13. package/src/child-communication-bridge.ts +153 -0
  14. package/src/child-communication-tools.ts +147 -0
  15. package/src/completion-renderer.ts +60 -0
  16. package/src/index.ts +1 -1
  17. package/src/message-broker.ts +628 -0
  18. package/src/model-output.ts +42 -0
  19. package/src/process.ts +688 -0
  20. package/src/runtime.ts +538 -0
  21. package/src/subagents.ts +33 -34
  22. package/src/tools.ts +416 -0
  23. package/src/types.ts +85 -0
  24. package/src/widget.ts +130 -0
  25. package/dist/chunks/auto-transport-FUUKFDIG.ts +0 -109
  26. package/dist/chunks/auto-transport-FUUKFDIG.ts.map +0 -7
  27. package/dist/chunks/capability-grant-PR72SWWS.ts +0 -19
  28. package/dist/chunks/capability-grant-PR72SWWS.ts.map +0 -7
  29. package/dist/chunks/child-peer-bridge.ts +0 -108
  30. package/dist/chunks/child-peer-bridge.ts.map +0 -7
  31. package/dist/chunks/chunk-2LMJU25E.ts +0 -1641
  32. package/dist/chunks/chunk-2LMJU25E.ts.map +0 -7
  33. package/dist/chunks/chunk-47SK2QYC.ts +0 -56
  34. package/dist/chunks/chunk-47SK2QYC.ts.map +0 -7
  35. package/dist/chunks/chunk-4AQSF7AS.ts +0 -29
  36. package/dist/chunks/chunk-4AQSF7AS.ts.map +0 -7
  37. package/dist/chunks/chunk-5DGRMKNV.ts +0 -126
  38. package/dist/chunks/chunk-5DGRMKNV.ts.map +0 -7
  39. package/dist/chunks/chunk-6H6TBBED.ts +0 -108
  40. package/dist/chunks/chunk-6H6TBBED.ts.map +0 -7
  41. package/dist/chunks/chunk-6KJ34M6S.ts +0 -159
  42. package/dist/chunks/chunk-6KJ34M6S.ts.map +0 -7
  43. package/dist/chunks/chunk-6NSJVPXX.ts +0 -480
  44. package/dist/chunks/chunk-6NSJVPXX.ts.map +0 -7
  45. package/dist/chunks/chunk-7AAJEUSL.ts +0 -238
  46. package/dist/chunks/chunk-7AAJEUSL.ts.map +0 -7
  47. package/dist/chunks/chunk-BFK2Z4ZF.ts +0 -189
  48. package/dist/chunks/chunk-BFK2Z4ZF.ts.map +0 -7
  49. package/dist/chunks/chunk-BOAXY55Y.ts +0 -153
  50. package/dist/chunks/chunk-BOAXY55Y.ts.map +0 -7
  51. package/dist/chunks/chunk-D4CR7T73.ts +0 -353
  52. package/dist/chunks/chunk-D4CR7T73.ts.map +0 -7
  53. package/dist/chunks/chunk-FEVPWRMU.ts +0 -300
  54. package/dist/chunks/chunk-FEVPWRMU.ts.map +0 -7
  55. package/dist/chunks/chunk-G6VZTCFH.ts +0 -70
  56. package/dist/chunks/chunk-G6VZTCFH.ts.map +0 -7
  57. package/dist/chunks/chunk-H3FP6DLR.ts +0 -160
  58. package/dist/chunks/chunk-H3FP6DLR.ts.map +0 -7
  59. package/dist/chunks/chunk-HA36LPCO.ts +0 -130
  60. package/dist/chunks/chunk-HA36LPCO.ts.map +0 -7
  61. package/dist/chunks/chunk-HOP5FXDT.ts +0 -27
  62. package/dist/chunks/chunk-HOP5FXDT.ts.map +0 -7
  63. package/dist/chunks/chunk-IGAMVWFN.ts +0 -139
  64. package/dist/chunks/chunk-IGAMVWFN.ts.map +0 -7
  65. package/dist/chunks/chunk-ILEQ27AL.ts +0 -45
  66. package/dist/chunks/chunk-ILEQ27AL.ts.map +0 -7
  67. package/dist/chunks/chunk-ITVWPNU4.ts +0 -819
  68. package/dist/chunks/chunk-ITVWPNU4.ts.map +0 -7
  69. package/dist/chunks/chunk-IWC32VPY.ts +0 -172
  70. package/dist/chunks/chunk-IWC32VPY.ts.map +0 -7
  71. package/dist/chunks/chunk-JSZIP73U.ts +0 -362
  72. package/dist/chunks/chunk-JSZIP73U.ts.map +0 -7
  73. package/dist/chunks/chunk-JU6LUNLP.ts +0 -380
  74. package/dist/chunks/chunk-JU6LUNLP.ts.map +0 -7
  75. package/dist/chunks/chunk-KMGKCEO4.ts +0 -38
  76. package/dist/chunks/chunk-KMGKCEO4.ts.map +0 -7
  77. package/dist/chunks/chunk-LASD73CM.ts +0 -339
  78. package/dist/chunks/chunk-LASD73CM.ts.map +0 -7
  79. package/dist/chunks/chunk-LEOYDZI3.ts +0 -22
  80. package/dist/chunks/chunk-LEOYDZI3.ts.map +0 -7
  81. package/dist/chunks/chunk-LL4LP2T7.ts +0 -737
  82. package/dist/chunks/chunk-LL4LP2T7.ts.map +0 -7
  83. package/dist/chunks/chunk-N2T5IN4X.ts +0 -18
  84. package/dist/chunks/chunk-N2T5IN4X.ts.map +0 -7
  85. package/dist/chunks/chunk-N7BLVXKK.ts +0 -73
  86. package/dist/chunks/chunk-N7BLVXKK.ts.map +0 -7
  87. package/dist/chunks/chunk-NLT67IZS.ts +0 -322
  88. package/dist/chunks/chunk-NLT67IZS.ts.map +0 -7
  89. package/dist/chunks/chunk-NTRPLF46.ts +0 -63
  90. package/dist/chunks/chunk-NTRPLF46.ts.map +0 -7
  91. package/dist/chunks/chunk-ONDTY4EL.ts +0 -91
  92. package/dist/chunks/chunk-ONDTY4EL.ts.map +0 -7
  93. package/dist/chunks/chunk-OVPHFGKO.ts +0 -1769
  94. package/dist/chunks/chunk-OVPHFGKO.ts.map +0 -7
  95. package/dist/chunks/chunk-P7OH4XMF.ts +0 -60
  96. package/dist/chunks/chunk-P7OH4XMF.ts.map +0 -7
  97. package/dist/chunks/chunk-PBZMBTNJ.ts +0 -422
  98. package/dist/chunks/chunk-PBZMBTNJ.ts.map +0 -7
  99. package/dist/chunks/chunk-PGLSFLYW.ts +0 -52
  100. package/dist/chunks/chunk-PGLSFLYW.ts.map +0 -7
  101. package/dist/chunks/chunk-RRR66UWR.ts +0 -28
  102. package/dist/chunks/chunk-RRR66UWR.ts.map +0 -7
  103. package/dist/chunks/chunk-RSUXZD6S.ts +0 -275
  104. package/dist/chunks/chunk-RSUXZD6S.ts.map +0 -7
  105. package/dist/chunks/chunk-RTCVYIZA.ts +0 -221
  106. package/dist/chunks/chunk-RTCVYIZA.ts.map +0 -7
  107. package/dist/chunks/chunk-RY2AEGMZ.ts +0 -34
  108. package/dist/chunks/chunk-RY2AEGMZ.ts.map +0 -7
  109. package/dist/chunks/chunk-SWGQLFSD.ts +0 -60
  110. package/dist/chunks/chunk-SWGQLFSD.ts.map +0 -7
  111. package/dist/chunks/chunk-TM2R67J3.ts +0 -52
  112. package/dist/chunks/chunk-TM2R67J3.ts.map +0 -7
  113. package/dist/chunks/chunk-TMZRHIIK.ts +0 -497
  114. package/dist/chunks/chunk-TMZRHIIK.ts.map +0 -7
  115. package/dist/chunks/chunk-TZ34IQ3M.ts +0 -59
  116. package/dist/chunks/chunk-TZ34IQ3M.ts.map +0 -7
  117. package/dist/chunks/chunk-UMBPMVJW.ts +0 -22
  118. package/dist/chunks/chunk-UMBPMVJW.ts.map +0 -7
  119. package/dist/chunks/chunk-VDG7LTYE.ts +0 -80
  120. package/dist/chunks/chunk-VDG7LTYE.ts.map +0 -7
  121. package/dist/chunks/chunk-X4NMONPE.ts +0 -73
  122. package/dist/chunks/chunk-X4NMONPE.ts.map +0 -7
  123. package/dist/chunks/chunk-YPJEN6NU.ts +0 -65
  124. package/dist/chunks/chunk-YPJEN6NU.ts.map +0 -7
  125. package/dist/chunks/chunk-YU53SHA7.ts +0 -328
  126. package/dist/chunks/chunk-YU53SHA7.ts.map +0 -7
  127. package/dist/chunks/completion-delivery-RSJU6BXL.ts +0 -17
  128. package/dist/chunks/completion-delivery-RSJU6BXL.ts.map +0 -7
  129. package/dist/chunks/config-status-FKGDECZ3.ts +0 -35
  130. package/dist/chunks/config-status-FKGDECZ3.ts.map +0 -7
  131. package/dist/chunks/config-ui-ABHYNGQ7.ts +0 -1212
  132. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +0 -7
  133. package/dist/chunks/consult-LJU3IQY5.ts +0 -519
  134. package/dist/chunks/consult-LJU3IQY5.ts.map +0 -7
  135. package/dist/chunks/context-QDKLVQXE.ts +0 -11
  136. package/dist/chunks/context-QDKLVQXE.ts.map +0 -7
  137. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts +0 -130
  138. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts.map +0 -7
  139. package/dist/chunks/cwd-policy-NB6XZ5GF.ts +0 -17
  140. package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +0 -7
  141. package/dist/chunks/delegation-contract-LA56I5DT.ts +0 -24
  142. package/dist/chunks/delegation-contract-LA56I5DT.ts.map +0 -7
  143. package/dist/chunks/discovery-MIFB2U4Y.ts +0 -12
  144. package/dist/chunks/discovery-MIFB2U4Y.ts.map +0 -7
  145. package/dist/chunks/execution-Q2JZLKJA.ts +0 -4037
  146. package/dist/chunks/execution-Q2JZLKJA.ts.map +0 -7
  147. package/dist/chunks/in-process-transport-HJ6TZXC3.ts +0 -39
  148. package/dist/chunks/in-process-transport-HJ6TZXC3.ts.map +0 -7
  149. package/dist/chunks/inspect-UH2TKH6E.ts +0 -634
  150. package/dist/chunks/inspect-UH2TKH6E.ts.map +0 -7
  151. package/dist/chunks/peer-communication-KL36Z6CO.ts +0 -294
  152. package/dist/chunks/peer-communication-KL36Z6CO.ts.map +0 -7
  153. package/dist/chunks/persistence-UY3PY6E5.ts +0 -348
  154. package/dist/chunks/persistence-UY3PY6E5.ts.map +0 -7
  155. package/dist/chunks/registry-BT54L6CY.ts +0 -1445
  156. package/dist/chunks/registry-BT54L6CY.ts.map +0 -7
  157. package/dist/chunks/retained-semantic-state-GM75FZGE.ts +0 -81
  158. package/dist/chunks/retained-semantic-state-GM75FZGE.ts.map +0 -7
  159. package/dist/chunks/rpc-transport-7R7DVCEB.ts +0 -1222
  160. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +0 -7
  161. package/dist/chunks/runtime-policy-5YELCOVC.ts +0 -15
  162. package/dist/chunks/runtime-policy-5YELCOVC.ts.map +0 -7
  163. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +0 -19
  164. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +0 -7
  165. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts +0 -13
  166. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts.map +0 -7
  167. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +0 -15
  168. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +0 -7
  169. package/dist/chunks/subprocess-transport-VHZJRBTW.ts +0 -160
  170. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +0 -7
  171. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +0 -164
  172. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +0 -7
  173. package/dist/chunks/workspace-WDKLN72J.ts +0 -11
  174. package/dist/chunks/workspace-WDKLN72J.ts.map +0 -7
  175. package/docs/async-runtime-protocol.md +0 -84
  176. package/docs/implementation-notes/pi-subagents-capability-matrix.md +0 -62
  177. package/docs/implementation-notes/pi-subagents-current-direction.md +0 -99
  178. package/docs/implementation-notes/pi-subagents-rpc-v1.md +0 -139
  179. package/docs/pi-subagents-diagrams.md +0 -183
  180. package/src/adaptive-scheduler.ts +0 -224
  181. package/src/admission-policy.ts +0 -78
  182. package/src/agent-projection.ts +0 -53
  183. package/src/agents/built-ins.ts +0 -71
  184. package/src/agents/catalog.ts +0 -241
  185. package/src/agents/discovery.ts +0 -265
  186. package/src/agents/types.ts +0 -100
  187. package/src/agents.ts +0 -51
  188. package/src/auto-transport.ts +0 -121
  189. package/src/blocking-status.ts +0 -63
  190. package/src/cached-module-loader.ts +0 -18
  191. package/src/capabilities.ts +0 -145
  192. package/src/capability-grant.ts +0 -115
  193. package/src/capability-router.ts +0 -107
  194. package/src/child-peer-bridge.ts +0 -124
  195. package/src/child-peer-tools.ts +0 -132
  196. package/src/completion-delivery.ts +0 -409
  197. package/src/completion-render.ts +0 -190
  198. package/src/completion-requirement.ts +0 -479
  199. package/src/completion-routing.ts +0 -24
  200. package/src/config-registration.ts +0 -114
  201. package/src/config-status.ts +0 -217
  202. package/src/config-ui.ts +0 -983
  203. package/src/consult-policy.ts +0 -15
  204. package/src/consult-registration.ts +0 -125
  205. package/src/consult-render.ts +0 -194
  206. package/src/consult-resources.ts +0 -51
  207. package/src/consult-tool.ts +0 -95
  208. package/src/consult.ts +0 -566
  209. package/src/context.ts +0 -126
  210. package/src/create-stateful-transport.ts +0 -157
  211. package/src/cwd-policy.ts +0 -183
  212. package/src/delegation-contract.ts +0 -463
  213. package/src/execution/budget.ts +0 -56
  214. package/src/execution/runtime-policy.ts +0 -19
  215. package/src/execution-plan.ts +0 -322
  216. package/src/execution-ui.ts +0 -259
  217. package/src/execution.ts +0 -1679
  218. package/src/in-process-transport.ts +0 -941
  219. package/src/inspect-registration.ts +0 -64
  220. package/src/inspect-render.ts +0 -334
  221. package/src/inspect-tool.ts +0 -45
  222. package/src/inspect.ts +0 -769
  223. package/src/integration-controller.ts +0 -98
  224. package/src/limits.ts +0 -75
  225. package/src/orchestration-metrics.ts +0 -116
  226. package/src/outcome.ts +0 -61
  227. package/src/panel-child-group.ts +0 -35
  228. package/src/panel-contract.ts +0 -343
  229. package/src/panel-evidence.ts +0 -59
  230. package/src/panel-execution.ts +0 -769
  231. package/src/panel-failure.ts +0 -56
  232. package/src/panel-planning.ts +0 -175
  233. package/src/panel-presets.ts +0 -3
  234. package/src/panel-prompts.ts +0 -132
  235. package/src/panel-reconciliation.ts +0 -57
  236. package/src/panel-render.ts +0 -103
  237. package/src/parallel-limit-ui.ts +0 -113
  238. package/src/params.ts +0 -278
  239. package/src/peer-communication.ts +0 -352
  240. package/src/peer-transport.ts +0 -49
  241. package/src/persistence.ts +0 -522
  242. package/src/pi-args.ts +0 -43
  243. package/src/pi-invocation.ts +0 -168
  244. package/src/process-control.ts +0 -43
  245. package/src/prompt-resources.ts +0 -38
  246. package/src/prompt-source-safety.ts +0 -48
  247. package/src/protocol.ts +0 -76
  248. package/src/registry-types.ts +0 -204
  249. package/src/registry.ts +0 -1698
  250. package/src/render-common.ts +0 -252
  251. package/src/render.ts +0 -704
  252. package/src/result-contract.ts +0 -431
  253. package/src/retained-semantic-state.ts +0 -100
  254. package/src/rpc-timeout-finalization.ts +0 -207
  255. package/src/rpc-transport-metadata.ts +0 -65
  256. package/src/rpc-transport.ts +0 -1035
  257. package/src/rpc-turn-capture.ts +0 -217
  258. package/src/runner-outcome.ts +0 -31
  259. package/src/runner-result.ts +0 -55
  260. package/src/runner-types.ts +0 -102
  261. package/src/runner-usage.ts +0 -48
  262. package/src/runner.ts +0 -866
  263. package/src/safe-text.ts +0 -67
  264. package/src/semantic-snapshot.ts +0 -214
  265. package/src/session-guidance-contract.ts +0 -399
  266. package/src/settings/inspection.ts +0 -302
  267. package/src/settings/schema.ts +0 -195
  268. package/src/settings-reader.ts +0 -215
  269. package/src/settings.ts +0 -452
  270. package/src/spawn-idempotency.ts +0 -68
  271. package/src/stateful-agent-view.ts +0 -85
  272. package/src/stateful-config.ts +0 -13
  273. package/src/stateful-guidance.ts +0 -29
  274. package/src/stateful-lifecycle.ts +0 -74
  275. package/src/stateful-limit-ui.ts +0 -249
  276. package/src/stateful-limits.ts +0 -96
  277. package/src/stateful-prompt.ts +0 -49
  278. package/src/stateful-registration.ts +0 -1320
  279. package/src/stateful-render.ts +0 -318
  280. package/src/stateful-safety.ts +0 -47
  281. package/src/stateful-tool-params.ts +0 -215
  282. package/src/stateful.ts +0 -12
  283. package/src/subagent-details.ts +0 -43
  284. package/src/subagents-extension.ts +0 -372
  285. package/src/subprocess-transport.ts +0 -145
  286. package/src/supervision.ts +0 -104
  287. package/src/task-path.ts +0 -65
  288. package/src/timeout-checkpoint.ts +0 -305
  289. package/src/timeout-finalization.ts +0 -75
  290. package/src/tool-schema-compatibility.ts +0 -73
  291. package/src/transport-types.ts +0 -74
  292. package/src/transport-ui.ts +0 -135
  293. package/src/transport.ts +0 -43
  294. package/src/turn-budget.ts +0 -109
  295. package/src/usage-format.ts +0 -42
  296. package/src/usage-recording-config.ts +0 -13
  297. package/src/usage-recording-store.ts +0 -183
  298. package/src/usage-recording.ts +0 -478
  299. package/src/verification-harness.ts +0 -516
  300. package/src/verification-policy.ts +0 -67
  301. package/src/verification-receipt.ts +0 -275
  302. package/src/verified-execution-benchmark.ts +0 -86
  303. package/src/verified-execution-contract.ts +0 -191
  304. package/src/verified-execution-schema.ts +0 -32
  305. package/src/work-item-ledger.ts +0 -1404
  306. package/src/work-item-persistence.ts +0 -254
  307. package/src/workflow-completion-controller.ts +0 -397
  308. package/src/workflow-planning.ts +0 -172
  309. package/src/workflow-tree-identity.ts +0 -289
  310. package/src/workflow-ui.ts +0 -69
  311. package/src/workflow-verification.ts +0 -296
  312. package/src/workspace.ts +0 -174
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/runner.ts", "../../src/pi-args.ts", "../../src/runner-usage.ts"],
4
- "sourcesContent": ["import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { withFileMutationQueue } from \"@earendil-works/pi-coding-agent\";\nimport type { AgentConfig, SubagentThinkingLevel } from \"./agents/types.js\";\nimport { revokeCapabilityGrant } from \"./capability-grant.js\";\nimport {\n\tappendBounded,\n\tDEFAULT_MAX_CONTEXT_BYTES,\n\tDEFAULT_MAX_MESSAGES,\n\tDEFAULT_MAX_OUTPUT_BYTES,\n\tDEFAULT_MAX_STDERR_BYTES,\n\tMAX_SUBAGENT_TIMEOUT_MS,\n\ttruncateUtf8,\n} from \"./limits.js\";\nimport { classifyStructuredOutcome } from \"./outcome.js\";\nimport { buildPiArgs } from \"./pi-args.js\";\nimport { resolvePiInvocation } from \"./pi-invocation.js\";\nimport { KILL_GRACE_MS, terminateProcess } from \"./process-control.js\";\nimport { JsonLineDecoder } from \"./protocol.js\";\nimport { parseAnyStructuredSubagentResult } from \"./result-contract.js\";\nimport { formatResultFailure, getResultFinalOutput, isResultError } from \"./runner-outcome.js\";\nimport { getFinalOutput } from \"./runner-result.js\";\nimport type { ChildLaunchPolicy, RecentActivityItem, SingleResult } from \"./runner-types.js\";\nimport {\n\taddUsageValue,\n\tmergeUsageStats,\n\tprotocolUsageCost,\n\tprotocolUsageCount,\n} from \"./runner-usage.js\";\nimport type { OnUpdateCallback, SubagentDetails } from \"./subagent-details.js\";\nimport {\n\tformatTimeoutCheckpoint,\n\tformatTurnTerminationMessage,\n\tjournalMessages,\n\tTimeoutProgressJournal,\n\tTURN_TERMINATION_VERSION,\n} from \"./timeout-checkpoint.js\";\nimport {\n\tbuildTimeoutFinalizationPrompt,\n\tresolveTimeoutFinalizationMs,\n} from \"./timeout-finalization.js\";\nimport { TurnBudgetMonitor, type TurnBudgetStop } from \"./turn-budget.js\";\n\nexport type { PiArgsOptions } from \"./pi-args.js\";\nexport { buildPiArgs } from \"./pi-args.js\";\nexport { KILL_GRACE_MS, terminateProcess } from \"./process-control.js\";\nexport {\n\tformatResultFailure,\n\tgetResultFinalOutput,\n\tisResultError,\n} from \"./runner-outcome.js\";\nexport type { ChildLaunchPolicy, RecentActivityItem, SingleResult } from \"./runner-types.js\";\nexport type { UsageStats } from \"./runner-usage.js\";\nexport type { OnUpdateCallback, PanelDetails, SubagentDetails } from \"./subagent-details.js\";\n\nconst MAX_RECENT_ACTIVITY_ITEMS = 10;\nconst MAX_RECENT_ACTIVITY_BYTES = 8 * 1024;\nconst MAX_RECENT_ACTIVITY_ARGUMENT_BYTES = 1024;\n\nfunction boundMessageText(\n\tmessage: Message,\n\tmaxBytes: number,\n): { message?: Message; bytes: number; truncated: boolean } {\n\tconst originalBytes = Buffer.byteLength(JSON.stringify(message), \"utf8\");\n\tif (Number.isSafeInteger(maxBytes) && maxBytes >= 0 && originalBytes <= maxBytes) {\n\t\treturn { message, bytes: originalBytes, truncated: false };\n\t}\n\tif (!Number.isSafeInteger(maxBytes) || maxBytes < 0) return { bytes: 0, truncated: true };\n\n\tconst content: Array<\n\t\t| { type: \"text\"; text: string }\n\t\t| { type: \"toolCall\"; id: string; name: string; arguments: Record<string, unknown> }\n\t> = [];\n\tconst bounded = () => ({ ...message, content }) as Message;\n\tconst fits = () => Buffer.byteLength(JSON.stringify(bounded()), \"utf8\") <= maxBytes;\n\tconst addText = (text: string, prepend = false) => {\n\t\tif (!text.trim()) return;\n\t\tconst part = { type: \"text\" as const, text: \"\" };\n\t\tif (prepend) content.unshift(part);\n\t\telse content.push(part);\n\t\tif (!fits()) {\n\t\t\tcontent.splice(content.indexOf(part), 1);\n\t\t\treturn;\n\t\t}\n\t\tlet low = 0;\n\t\tlet high = Buffer.byteLength(text, \"utf8\");\n\t\twhile (low < high) {\n\t\t\tconst middle = Math.ceil((low + high) / 2);\n\t\t\tpart.text = truncateUtf8(text, middle).text;\n\t\t\tif (fits()) low = middle;\n\t\t\telse high = middle - 1;\n\t\t}\n\t\tpart.text = truncateUtf8(text, low).text;\n\t\tif (!part.text.trim()) content.splice(content.indexOf(part), 1);\n\t};\n\tconst addToolCall = (part: Extract<Message[\"content\"][number], { type: \"toolCall\" }>) => {\n\t\tconst toolCall = {\n\t\t\ttype: \"toolCall\" as const,\n\t\t\tid: part.id,\n\t\t\tname: part.name,\n\t\t\targuments: part.arguments,\n\t\t};\n\t\tcontent.unshift(toolCall);\n\t\tif (fits()) return;\n\t\tconst arguments_: Record<string, unknown> = {};\n\t\tfor (const key of [\"command\", \"path\", \"file_path\", \"pattern\", \"url\"]) {\n\t\t\tconst value = part.arguments[key];\n\t\t\tif (typeof value === \"string\") arguments_[key] = truncateUtf8(value, 256).text;\n\t\t}\n\t\ttoolCall.arguments = arguments_;\n\t\tif (fits()) return;\n\t\ttoolCall.arguments = {};\n\t\tif (!fits()) content.shift();\n\t};\n\n\tif (message.role === \"assistant\") {\n\t\tfor (let index = message.content.length - 1; index >= 0; index--) {\n\t\t\tconst part = message.content[index];\n\t\t\tif (part.type === \"text\") addText(part.text, true);\n\t\t\telse if (part.type === \"toolCall\") addToolCall(part);\n\t\t}\n\t} else {\n\t\tfor (const part of message.content) {\n\t\t\tif (typeof part === \"object\" && part && part.type === \"text\") addText(part.text);\n\t\t}\n\t}\n\n\tif (content.length === 0) return { bytes: 0, truncated: true };\n\tconst result = bounded();\n\tconst bytes = Buffer.byteLength(JSON.stringify(result), \"utf8\");\n\treturn { message: result, bytes, truncated: true };\n}\nfunction compactRecentActivityArguments(args: Record<string, unknown>): Record<string, unknown> {\n\tif (Buffer.byteLength(JSON.stringify(args), \"utf8\") <= MAX_RECENT_ACTIVITY_ARGUMENT_BYTES)\n\t\treturn args;\n\tconst compact: Record<string, unknown> = {};\n\tfor (const key of [\"command\", \"path\", \"file_path\", \"pattern\", \"url\", \"selector\"]) {\n\t\tconst value = args[key];\n\t\tif (typeof value === \"string\") compact[key] = truncateUtf8(value, 256).text;\n\t\telse if (typeof value === \"number\" || typeof value === \"boolean\") compact[key] = value;\n\t}\n\treturn compact;\n}\n\nfunction appendRecentActivity(result: SingleResult, message: Message): void {\n\tif (message.role !== \"assistant\") return;\n\tconst append = (item: RecentActivityItem) => {\n\t\tresult.recentActivity ??= [];\n\t\tresult.recentActivityTotal = (result.recentActivityTotal ?? 0) + 1;\n\t\tresult.recentActivity.push(item);\n\t\tif (result.recentActivity.length > MAX_RECENT_ACTIVITY_ITEMS) {\n\t\t\tresult.recentActivity.splice(0, result.recentActivity.length - MAX_RECENT_ACTIVITY_ITEMS);\n\t\t}\n\t\twhile (\n\t\t\tBuffer.byteLength(JSON.stringify(result.recentActivity), \"utf8\") > MAX_RECENT_ACTIVITY_BYTES\n\t\t) {\n\t\t\tresult.recentActivity.shift();\n\t\t}\n\t};\n\tfor (const part of message.content) {\n\t\tif (part.type === \"text\") {\n\t\t\tconst text = part.text.trim();\n\t\t\tif (text) append({ type: \"text\", text: truncateUtf8(text, 1024).text });\n\t\t} else if (part.type === \"toolCall\") {\n\t\t\tappend({\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tname: part.name,\n\t\t\t\targs: compactRecentActivityArguments(part.arguments),\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function buildFanInContext(\n\tresults: SingleResult[],\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): string {\n\tconst text = results\n\t\t.map((result, index) => {\n\t\t\tconst failed = isResultError(result);\n\t\t\tconst status = result.exitCode === -1 ? \"running\" : failed ? \"failed\" : \"completed\";\n\t\t\tconst output = getResultFinalOutput(result);\n\t\t\tconst error = result.errorMessage || result.stderr.trim();\n\t\t\tconst resultText = failed\n\t\t\t\t? `${error ? \"Error\" : output ? \"Partial output\" : \"Error\"}:\\n${formatResultFailure(result)}`\n\t\t\t\t: result.structuredResult\n\t\t\t\t\t? `Structured result:\\n${JSON.stringify(result.structuredResult)}`\n\t\t\t\t\t: output\n\t\t\t\t\t\t? `Output:\\n${output}`\n\t\t\t\t\t\t: \"Output: (no output)\";\n\t\t\treturn [\n\t\t\t\t`## Result ${index + 1}: ${result.agent} (${status})`,\n\t\t\t\t`Task: ${result.task}`,\n\t\t\t\tresultText,\n\t\t\t].join(\"\\n\\n\");\n\t\t})\n\t\t.join(\"\\n\\n---\\n\\n\");\n\treturn truncateUtf8(text, maxBytes).text;\n}\n\nexport async function mapWithConcurrencyLimit<TIn, TOut>(\n\titems: TIn[],\n\tconcurrency: number,\n\tfn: (item: TIn, index: number) => Promise<TOut>,\n\tsignal?: AbortSignal,\n\tonSkipped?: (item: TIn, index: number) => TOut,\n): Promise<TOut[]> {\n\tif (items.length === 0) return [];\n\tconst limit = Math.max(1, Math.min(concurrency, items.length));\n\tconst results: TOut[] = new Array(items.length);\n\tlet nextIndex = 0;\n\tconst workers = new Array(limit).fill(null).map(async () => {\n\t\twhile (true) {\n\t\t\tconst current = nextIndex++;\n\t\t\tif (current >= items.length) return;\n\t\t\tif (signal?.aborted && onSkipped) {\n\t\t\t\tresults[current] = onSkipped(items[current], current);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresults[current] = await fn(items[current], current);\n\t\t}\n\t});\n\tawait Promise.all(workers);\n\treturn results;\n}\n\nasync function writePromptToTempFile(\n\tagentName: string,\n\tprompt: string,\n): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"pi-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nexport async function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tstep: number | undefined,\n\tsignal: AbortSignal | undefined,\n\tthinkingLevel: SubagentThinkingLevel | undefined,\n\ttimeoutMs: number,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeDetails: (results: SingleResult[]) => SubagentDetails,\n\tinvocationOverride?: { command: string; argsPrefix?: string[] },\n\tlaunchPolicy?: ChildLaunchPolicy,\n): Promise<SingleResult> {\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.`,\n\t\t\tusage: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\tcost: 0,\n\t\t\t\tcontextTokens: 0,\n\t\t\t\tturns: 0,\n\t\t\t},\n\t\t\tthinkingLevel,\n\t\t\tstep,\n\t\t\tfinalOutput: \"\",\n\t\t};\n\t}\n\n\tconst temporaryPrompts: Array<{ dir: string; filePath: string }> = [];\n\tlet tmpPromptPath: string | null = null;\n\tlet baseSystemPromptPath: string | null = null;\n\n\tlet latestAssistantOutput = \"\";\n\tlet terminalAssistantOutput: string | undefined;\n\n\tconst progressJournal = new TimeoutProgressJournal();\n\tconst currentResult: SingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask: launchPolicy?.displayTask ?? task,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: 0,\n\t\t\tcontextTokens: 0,\n\t\t\tturns: 0,\n\t\t},\n\t\tmodel: agent.model ?? undefined,\n\t\tthinkingLevel,\n\t\tstep,\n\t\ttimeoutMs,\n\t\tcontract: launchPolicy?.contract,\n\t\tresultFormat: launchPolicy?.resultFormat,\n\t\texecutionPlan: launchPolicy?.executionPlan,\n\t\tcapabilityGrant: launchPolicy?.capabilityGrant,\n\t};\n\tconst selectedAssistantOutput = () =>\n\t\tterminalAssistantOutput !== undefined\n\t\t\t? terminalAssistantOutput\n\t\t\t: latestAssistantOutput || getFinalOutput(currentResult.messages);\n\tconst setErrorMessage = (message: string) => {\n\t\tconst bounded = truncateUtf8(message, DEFAULT_MAX_STDERR_BYTES);\n\t\tcurrentResult.errorMessage = bounded.text;\n\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\treturn bounded.text;\n\t};\n\n\tconst emitUpdate = () => {\n\t\tconst latest = truncateUtf8(selectedAssistantOutput(), DEFAULT_MAX_OUTPUT_BYTES);\n\t\tcurrentResult.finalOutput = latest.text;\n\t\tcurrentResult.truncated ||= latest.truncated;\n\t\tif (onUpdate) {\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: currentResult.finalOutput || \"(running...)\" }],\n\t\t\t\tdetails: makeDetails([currentResult]),\n\t\t\t});\n\t\t}\n\t};\n\n\ttry {\n\t\tconst effectiveCwd = cwd ?? defaultCwd;\n\t\ttry {\n\t\t\tif (!fs.statSync(effectiveCwd).isDirectory()) throw new Error(\"not a directory\");\n\t\t} catch (error) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\tcurrentResult.stderr = setErrorMessage(`Invalid subagent cwd: ${effectiveCwd} (${reason})`);\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tif (signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 130;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted before start\");\n\t\t\treturn currentResult;\n\t\t}\n\t\tif (!Number.isFinite(timeoutMs) || timeoutMs < 1 || timeoutMs > MAX_SUBAGENT_TIMEOUT_MS) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tsetErrorMessage(\n\t\t\t\t`Invalid subagent timeout: expected 1-${MAX_SUBAGENT_TIMEOUT_MS}ms, received ${timeoutMs}`,\n\t\t\t);\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tif (launchPolicy?.baseSystemPrompt?.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(`${agent.name}-base`, launchPolicy.baseSystemPrompt);\n\t\t\ttemporaryPrompts.push(tmp);\n\t\t\tbaseSystemPromptPath = tmp.filePath;\n\t\t}\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttemporaryPrompts.push(tmp);\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t}\n\t\tif (signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 130;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted before launch\");\n\t\t\treturn currentResult;\n\t\t}\n\n\t\tconst effectiveTools =\n\t\t\tlaunchPolicy && Object.hasOwn(launchPolicy, \"tools\") ? launchPolicy.tools : agent.tools;\n\t\tconst selectedTools =\n\t\t\teffectiveTools === undefined\n\t\t\t\t? undefined\n\t\t\t\t: [...new Set([...effectiveTools, ...(launchPolicy?.additionalTools ?? [])])];\n\t\tconst args = buildPiArgs({\n\t\t\tmodel: agent.model,\n\t\t\tthinkingLevel,\n\t\t\ttools: selectedTools,\n\t\t\tdisableExtensions: launchPolicy?.disableExtensions,\n\t\t\tdisableSkills: launchPolicy?.disableSkills,\n\t\t\tdisablePromptTemplates: launchPolicy?.disablePromptTemplates,\n\t\t\tdisableContextFiles: launchPolicy?.disableContextFiles,\n\t\t\tprojectTrust: launchPolicy?.projectTrust,\n\t\t\tbaseSystemPromptPath: baseSystemPromptPath ?? undefined,\n\t\t\tappendSystemPromptPaths: launchPolicy?.appendSystemPromptPaths,\n\t\t\textensionPaths: launchPolicy?.extensionPaths,\n\t\t\tsystemPromptPath: tmpPromptPath ?? undefined,\n\t\t\ttask,\n\t\t});\n\t\tlet invocation: { command: string; args: string[] };\n\t\ttry {\n\t\t\tinvocation = invocationOverride\n\t\t\t\t? {\n\t\t\t\t\t\tcommand: invocationOverride.command,\n\t\t\t\t\t\targs: [...(invocationOverride.argsPrefix ?? []), ...args],\n\t\t\t\t\t}\n\t\t\t\t: resolvePiInvocation(args);\n\t\t} catch (error) {\n\t\t\tcurrentResult.launchFailed = true;\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stderr = setErrorMessage(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t);\n\t\t\treturn currentResult;\n\t\t}\n\t\tlet wasAborted = false;\n\t\tlet timedOut = false;\n\t\tlet budgetStop:\n\t\t\t| TurnBudgetStop\n\t\t\t| { reason: \"work_timeout\" | \"orchestration_timeout\"; limit: number }\n\t\t\t| undefined;\n\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tlet cleanupTermination: (() => void) | undefined;\n\t\t\tlet timeout: NodeJS.Timeout | undefined;\n\t\t\tlet terminationDeadline: NodeJS.Timeout | undefined;\n\t\t\tlet abortHandler: (() => void) | undefined;\n\t\t\tlet budgetMonitor: TurnBudgetMonitor | undefined;\n\t\t\tconst finish = (code: number) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\tif (terminationDeadline) clearTimeout(terminationDeadline);\n\t\t\t\tcleanupTermination?.();\n\t\t\t\tbudgetMonitor?.dispose();\n\t\t\t\tif (signal && abortHandler) signal.removeEventListener(\"abort\", abortHandler);\n\t\t\t\tresolve(code);\n\t\t\t};\n\t\t\tlet proc: ReturnType<typeof spawn>;\n\t\t\ttry {\n\t\t\t\tproc = spawn(invocation.command, invocation.args, {\n\t\t\t\t\tcwd: effectiveCwd,\n\t\t\t\t\tdetached: process.platform !== \"win32\",\n\t\t\t\t\tshell: false,\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\tenv: {\n\t\t\t\t\t\t...process.env,\n\t\t\t\t\t\t...launchPolicy?.env,\n\t\t\t\t\t\tPI_SUBAGENT_DEPTH: String(\n\t\t\t\t\t\t\t(Number.parseInt(process.env.PI_SUBAGENT_DEPTH ?? \"0\", 10) || 0) + 1,\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tcurrentResult.launchFailed = true;\n\t\t\t\tcurrentResult.stderr = setErrorMessage(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t);\n\t\t\t\tfinish(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst addMessage = (msg: Message) => {\n\t\t\t\tconst boundedMessage = boundMessageText(msg, DEFAULT_MAX_OUTPUT_BYTES - 2);\n\t\t\t\tcurrentResult.truncated ||= boundedMessage.truncated;\n\t\t\t\tif (!boundedMessage.message) return;\n\t\t\t\twhile (\n\t\t\t\t\tcurrentResult.messages.length >= DEFAULT_MAX_MESSAGES ||\n\t\t\t\t\tBuffer.byteLength(\n\t\t\t\t\t\tJSON.stringify([...currentResult.messages, boundedMessage.message]),\n\t\t\t\t\t\t\"utf8\",\n\t\t\t\t\t) > DEFAULT_MAX_OUTPUT_BYTES\n\t\t\t\t) {\n\t\t\t\t\tconst removed = currentResult.messages.shift();\n\t\t\t\t\tif (!removed) break;\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tBuffer.byteLength(\n\t\t\t\t\t\tJSON.stringify([...currentResult.messages, boundedMessage.message]),\n\t\t\t\t\t\t\"utf8\",\n\t\t\t\t\t) > DEFAULT_MAX_OUTPUT_BYTES\n\t\t\t\t) {\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrentResult.messages.push(boundedMessage.message);\n\t\t\t};\n\t\t\tconst processEvent = (raw: unknown) => {\n\t\t\t\tif (!raw || typeof raw !== \"object\") return;\n\t\t\t\tconst event = raw as { type?: string; message?: Message };\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message;\n\t\t\t\t\tjournalMessages(progressJournal, [msg]);\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tconst output = truncateUtf8(getFinalOutput([msg]), DEFAULT_MAX_OUTPUT_BYTES);\n\t\t\t\t\t\tcurrentResult.truncated ||= output.truncated;\n\t\t\t\t\t\tif (output.text) latestAssistantOutput = output.text;\n\t\t\t\t\t\tif (msg.stopReason === \"stop\" || msg.stopReason === \"length\") {\n\t\t\t\t\t\t\tterminalAssistantOutput = output.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tappendRecentActivity(currentResult, msg);\n\t\t\t\t\taddMessage(msg);\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tbudgetMonitor?.recordToolCalls(\n\t\t\t\t\t\t\tmsg.content.filter((part) => part.type === \"toolCall\").length,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbudgetMonitor?.recordAssistantTurn(msg.stopReason);\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage && typeof usage === \"object\") {\n\t\t\t\t\t\t\tconst input = protocolUsageCount(usage.input);\n\t\t\t\t\t\t\tconst output = protocolUsageCount(usage.output);\n\t\t\t\t\t\t\tconst cacheRead = protocolUsageCount(usage.cacheRead);\n\t\t\t\t\t\t\tconst cacheWrite = protocolUsageCount(usage.cacheWrite);\n\t\t\t\t\t\t\tconst reportedTotal = protocolUsageCount(usage.totalTokens);\n\t\t\t\t\t\t\tconst turnTotal =\n\t\t\t\t\t\t\t\treportedTotal ||\n\t\t\t\t\t\t\t\taddUsageValue(addUsageValue(input, output), addUsageValue(cacheRead, cacheWrite));\n\t\t\t\t\t\t\tconst cost = usage.cost && typeof usage.cost === \"object\" ? usage.cost : undefined;\n\t\t\t\t\t\t\tcurrentResult.usage.input = addUsageValue(currentResult.usage.input, input);\n\t\t\t\t\t\t\tcurrentResult.usage.output = addUsageValue(currentResult.usage.output, output);\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cacheRead,\n\t\t\t\t\t\t\t\tcacheRead,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite,\n\t\t\t\t\t\t\t\tcacheWrite,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.cost = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.cost,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.total),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costInput = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costInput ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.input),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costOutput = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costOutput ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.output),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costCacheRead = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costCacheRead ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.cacheRead),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.costCacheWrite = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.costCacheWrite ?? 0,\n\t\t\t\t\t\t\t\tprotocolUsageCost(cost?.cacheWrite),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.totalTokens = addUsageValue(\n\t\t\t\t\t\t\t\tcurrentResult.usage.totalTokens ?? 0,\n\t\t\t\t\t\t\t\tturnTotal,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = turnTotal;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof msg.provider === \"string\") currentResult.actualProvider = msg.provider;\n\t\t\t\t\t\tconst actualModel =\n\t\t\t\t\t\t\ttypeof msg.responseModel === \"string\"\n\t\t\t\t\t\t\t\t? msg.responseModel\n\t\t\t\t\t\t\t\t: typeof msg.model === \"string\"\n\t\t\t\t\t\t\t\t\t? msg.model\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tif (actualModel) currentResult.actualModel = actualModel;\n\t\t\t\t\t\tif (typeof msg.stopReason === \"string\") currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tif (typeof msg.errorMessage === \"string\") setErrorMessage(msg.errorMessage);\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t} else if (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tjournalMessages(progressJournal, [event.message]);\n\t\t\t\t\tbudgetMonitor?.recordActivity();\n\t\t\t\t\taddMessage(event.message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst decoder = new JsonLineDecoder({\n\t\t\t\tonValue: processEvent,\n\t\t\t\tonMalformed: () => {\n\t\t\t\t\tcurrentResult.malformedEvents = (currentResult.malformedEvents ?? 0) + 1;\n\t\t\t\t},\n\t\t\t\tonOversized: () => {\n\t\t\t\t\tcurrentResult.truncated = true;\n\t\t\t\t},\n\t\t\t});\n\t\t\tconst beginTermination = (exitCode: number) => {\n\t\t\t\tif (cleanupTermination || settled) return;\n\t\t\t\tcleanupTermination = terminateProcess(proc);\n\t\t\t\tterminationDeadline = setTimeout(() => {\n\t\t\t\t\tdecoder.finish();\n\t\t\t\t\tproc.stdin?.destroy();\n\t\t\t\t\tproc.stdout?.destroy();\n\t\t\t\t\tproc.stderr?.destroy();\n\t\t\t\t\tfinish(exitCode);\n\t\t\t\t}, KILL_GRACE_MS + 1_000);\n\t\t\t};\n\t\t\tconst stopForBudget = (\n\t\t\t\tstop: TurnBudgetStop | { reason: \"work_timeout\" | \"orchestration_timeout\"; limit: number },\n\t\t\t) => {\n\t\t\t\tif (budgetStop || settled || wasAborted) return;\n\t\t\t\tbudgetStop = stop;\n\t\t\t\ttimedOut = stop.reason.endsWith(\"timeout\");\n\t\t\t\tcurrentResult.timedOut = timedOut || undefined;\n\t\t\t\tcurrentResult.stopReason = timedOut ? \"timeout\" : \"limit\";\n\t\t\t\tconst message = formatTurnTerminationMessage(stop.reason, stop.limit);\n\t\t\t\tsetErrorMessage(message);\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\t`\\n${message}.`,\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t\temitUpdate();\n\t\t\t\tbeginTermination(124);\n\t\t\t};\n\t\t\tbudgetMonitor = new TurnBudgetMonitor({\n\t\t\t\t...launchPolicy?.turnLimits,\n\t\t\t\tonExceeded: stopForBudget,\n\t\t\t});\n\n\t\t\tproc.once(\"spawn\", () => {\n\t\t\t\tcurrentResult.processStarted = true;\n\t\t\t\tif (settled || budgetStop || wasAborted) return;\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tstopForBudget({\n\t\t\t\t\t\treason: launchPolicy?.workTimeoutReason ?? \"work_timeout\",\n\t\t\t\t\t\tlimit: launchPolicy?.workTimeoutReportLimit ?? timeoutMs,\n\t\t\t\t\t});\n\t\t\t\t}, timeoutMs);\n\t\t\t\ttimeout.unref();\n\t\t\t});\n\t\t\tproc.stdout?.on(\"data\", (data) => decoder.push(data));\n\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\tdata.toString(),\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t});\n\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\tdecoder.finish();\n\t\t\t\tfinish(budgetStop ? 124 : wasAborted ? 130 : (code ?? 0));\n\t\t\t});\n\t\t\tproc.on(\"error\", (error) => {\n\t\t\t\tcurrentResult.launchFailed = currentResult.processStarted ? undefined : true;\n\t\t\t\tconst message = setErrorMessage(error.message);\n\t\t\t\tconst bounded = appendBounded(\n\t\t\t\t\tcurrentResult.stderr,\n\t\t\t\t\t`${currentResult.stderr ? \"\\n\" : \"\"}${message}`,\n\t\t\t\t\tDEFAULT_MAX_STDERR_BYTES,\n\t\t\t\t);\n\t\t\t\tcurrentResult.stderr = bounded.text;\n\t\t\t\tcurrentResult.truncated ||= bounded.truncated;\n\t\t\t\tif (currentResult.processStarted) beginTermination(1);\n\t\t\t\telse finish(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tabortHandler = () => {\n\t\t\t\t\tif (budgetStop || settled) return;\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tcurrentResult.aborted = true;\n\t\t\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\t\t\tsetErrorMessage(\"Subagent was aborted\");\n\t\t\t\t\tbeginTermination(130);\n\t\t\t\t};\n\t\t\t\tif (signal.aborted) abortHandler();\n\t\t\t\telse signal.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tif (signal?.aborted && budgetStop) {\n\t\t\tbudgetStop = undefined;\n\t\t\ttimedOut = false;\n\t\t\tcurrentResult.timedOut = undefined;\n\t\t\tcurrentResult.aborted = true;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tsetErrorMessage(\"Subagent was aborted\");\n\t\t}\n\t\tcurrentResult.exitCode = currentResult.aborted ? 130 : exitCode;\n\t\tconst final = truncateUtf8(selectedAssistantOutput(), DEFAULT_MAX_OUTPUT_BYTES);\n\t\tcurrentResult.finalOutput = final.text;\n\t\tcurrentResult.truncated ||= final.truncated;\n\t\tif (budgetStop) {\n\t\t\tcurrentResult.partialOutput = currentResult.finalOutput || undefined;\n\t\t\tcurrentResult.termination = {\n\t\t\t\tversion: TURN_TERMINATION_VERSION,\n\t\t\t\treason: budgetStop.reason,\n\t\t\t\tlimit: budgetStop.limit,\n\t\t\t\tcheckpoint: progressJournal.checkpoint(task, currentResult.partialOutput),\n\t\t\t\tfinalization: { attempted: false, status: \"skipped\", durationMs: 0 },\n\t\t\t};\n\t\t}\n\t\tconst remainingFinalizationMs = launchPolicy?.orchestrationDeadlineAt\n\t\t\t? Math.floor(launchPolicy.orchestrationDeadlineAt - Date.now())\n\t\t\t: undefined;\n\t\tif (\n\t\t\tbudgetStop &&\n\t\t\tbudgetStop.reason !== \"orchestration_timeout\" &&\n\t\t\tlaunchPolicy?.finalizeOnTimeout !== false &&\n\t\t\t!signal?.aborted &&\n\t\t\t(remainingFinalizationMs === undefined || remainingFinalizationMs > 0)\n\t\t) {\n\t\t\tconst finalizationStartedAt = Date.now();\n\t\t\tconst requestedFinalizationMs = resolveTimeoutFinalizationMs(\n\t\t\t\ttimeoutMs,\n\t\t\t\tlaunchPolicy?.timeoutFinalizationMs,\n\t\t\t);\n\t\t\tconst finalizationMs = Math.min(\n\t\t\t\trequestedFinalizationMs,\n\t\t\t\tremainingFinalizationMs ?? requestedFinalizationMs,\n\t\t\t);\n\t\t\tconst summary = await runSingleAgent(\n\t\t\t\tdefaultCwd,\n\t\t\t\tagents,\n\t\t\t\tagentName,\n\t\t\t\tbuildTimeoutFinalizationPrompt({\n\t\t\t\t\ttask,\n\t\t\t\t\tpartialOutput: currentResult.partialOutput,\n\t\t\t\t\trecentActivity: currentResult.recentActivity,\n\t\t\t\t\tcheckpoint: currentResult.termination?.checkpoint,\n\t\t\t\t\tterminationReason: budgetStop.reason,\n\t\t\t\t\tresultFormat: launchPolicy?.timeoutResultFormat,\n\t\t\t\t}),\n\t\t\t\tcwd,\n\t\t\t\tstep,\n\t\t\t\tsignal,\n\t\t\t\tthinkingLevel,\n\t\t\t\tfinalizationMs,\n\t\t\t\tundefined,\n\t\t\t\tmakeDetails,\n\t\t\t\tinvocationOverride,\n\t\t\t\t{\n\t\t\t\t\t...launchPolicy,\n\t\t\t\t\ttools: [],\n\t\t\t\t\tdisableExtensions: true,\n\t\t\t\t\tdisableSkills: true,\n\t\t\t\t\tdisablePromptTemplates: true,\n\t\t\t\t\tdisableContextFiles: true,\n\t\t\t\t\tappendSystemPromptPaths: undefined,\n\t\t\t\t\tfinalizeOnTimeout: false,\n\t\t\t\t\tturnLimits: undefined,\n\t\t\t\t\tworkTimeoutReason: \"work_timeout\",\n\t\t\t\t\tworkTimeoutReportLimit: finalizationMs,\n\t\t\t\t\torchestrationDeadlineAt: undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tmergeUsageStats(currentResult.usage, summary.usage);\n\t\t\tconst summaryOutput = getResultFinalOutput(summary).trim();\n\t\t\tif (summary.exitCode === 0 && summaryOutput) {\n\t\t\t\tcurrentResult.timeoutSummary = summaryOutput;\n\t\t\t\tcurrentResult.finalOutput = summaryOutput;\n\t\t\t\tif (currentResult.termination) {\n\t\t\t\t\tcurrentResult.termination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentResult.timeoutSummaryError =\n\t\t\t\t\tsummary.errorMessage || summary.stderr.trim() || \"Summary produced no final text\";\n\t\t\t\tif (currentResult.termination) {\n\t\t\t\t\tcurrentResult.termination.finalization = {\n\t\t\t\t\t\tattempted: true,\n\t\t\t\t\t\tstatus: summary.timedOut ? \"timed_out\" : \"failed\",\n\t\t\t\t\t\tdurationMs: Date.now() - finalizationStartedAt,\n\t\t\t\t\t\terror: currentResult.timeoutSummaryError,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentResult.truncated ||= summary.truncated;\n\t\t}\n\t\tif (currentResult.termination && !currentResult.finalOutput.trim()) {\n\t\t\tcurrentResult.finalOutput = formatTimeoutCheckpoint(currentResult.termination.checkpoint);\n\t\t}\n\t\tif (currentResult.exitCode === 0 && launchPolicy?.resultFormat !== undefined) {\n\t\t\tcurrentResult.structuredResult = parseAnyStructuredSubagentResult(\n\t\t\t\tcurrentResult.finalOutput ?? \"\",\n\t\t\t\tlaunchPolicy.resultFormat,\n\t\t\t);\n\t\t\tcurrentResult.resultContractInvalid =\n\t\t\t\tlaunchPolicy.resultFormat !== \"text\" && currentResult.structuredResult === undefined;\n\t\t\tif (\n\t\t\t\tcurrentResult.structuredResult?.version === \"pi-subagents:result:v2\" &&\n\t\t\t\tlaunchPolicy.executionPlan\n\t\t\t) {\n\t\t\t\tcurrentResult.structuredResult.provenance = {\n\t\t\t\t\t...currentResult.structuredResult.provenance,\n\t\t\t\t\t...(launchPolicy.executionPlan.taskId\n\t\t\t\t\t\t? { taskId: launchPolicy.executionPlan.taskId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\ttaskGeneration: launchPolicy.executionPlan.taskGeneration,\n\t\t\t\t\texecutionPlanId: launchPolicy.executionPlan.id,\n\t\t\t\t\tcancellationLineage: [...launchPolicy.executionPlan.cancellationLineage],\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (currentResult.structuredResult?.version === \"pi-subagents:result:v2\") {\n\t\t\t\tcurrentResult.outcome = classifyStructuredOutcome(\n\t\t\t\t\tcurrentResult.structuredResult.status,\n\t\t\t\t\tcurrentResult.structuredResult.reasonCode,\n\t\t\t\t);\n\t\t\t} else if (currentResult.resultContractInvalid) {\n\t\t\t\tcurrentResult.outcome = classifyStructuredOutcome(\n\t\t\t\t\t\"contract-invalid\",\n\t\t\t\t\t\"malformed-structured-result\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tcurrentResult.exitCode === 0 &&\n\t\t\tcurrentResult.stopReason !== \"error\" &&\n\t\t\t(currentResult.stopReason === \"toolUse\" || !currentResult.finalOutput.trim())\n\t\t) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"error\";\n\t\t\tsetErrorMessage(\"Subagent completed without final text\");\n\t\t}\n\t\tif (currentResult.capabilityGrant?.state === \"active\") {\n\t\t\tcurrentResult.capabilityGrant = revokeCapabilityGrant(\n\t\t\t\tcurrentResult.capabilityGrant,\n\t\t\t\t\"turn-settled\",\n\t\t\t\tDate.now(),\n\t\t\t);\n\t\t}\n\t\tcurrentResult.policy = {\n\t\t\tinherited: [\"environment\"],\n\t\t\toverridden: [\n\t\t\t\t\"cwd\",\n\t\t\t\t...(agent.model ? [\"model\"] : []),\n\t\t\t\t...(thinkingLevel ? [\"thinkingLevel\"] : []),\n\t\t\t\t...(effectiveTools !== undefined ? [\"tools\"] : []),\n\t\t\t\t...(launchPolicy?.disableExtensions ? [\"extensions\"] : []),\n\t\t\t\t...(launchPolicy?.disableSkills ? [\"skills\"] : []),\n\t\t\t\t...(launchPolicy?.disablePromptTemplates ? [\"promptTemplates\"] : []),\n\t\t\t\t...(launchPolicy?.disableContextFiles ? [\"contextFiles\"] : []),\n\t\t\t],\n\t\t\tunsupported: [\"approvalPolicy\", \"sandboxProfile\", \"providerHeaders\"],\n\t\t};\n\t\treturn currentResult;\n\t} finally {\n\t\tfor (const temporary of temporaryPrompts.reverse()) {\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(temporary.filePath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(temporary.dir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type { SubagentThinkingLevel } from \"./agents/types.js\";\n\nexport interface PiArgsOptions {\n\tmodel?: string;\n\tthinkingLevel?: SubagentThinkingLevel;\n\ttools?: string[];\n\tdisableExtensions?: boolean;\n\tdisableSkills?: boolean;\n\tdisablePromptTemplates?: boolean;\n\tdisableContextFiles?: boolean;\n\tprojectTrust?: boolean;\n\tbaseSystemPromptPath?: string;\n\tappendSystemPromptPaths?: string[];\n\textensionPaths?: string[];\n\t/** Existing single append prompt path retained for compatibility. */\n\tsystemPromptPath?: string;\n\ttask: string;\n}\n\nexport function buildPiArgs(options: PiArgsOptions): string[] {\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (options.model) args.push(\"--model\", options.model);\n\tif (options.thinkingLevel) args.push(\"--thinking\", options.thinkingLevel);\n\tif (options.disableExtensions) args.push(\"--no-extensions\");\n\tfor (const extensionPath of options.extensionPaths ?? []) args.push(\"-e\", extensionPath);\n\tif (options.disableSkills) args.push(\"--no-skills\");\n\tif (options.disablePromptTemplates) args.push(\"--no-prompt-templates\");\n\tif (options.disableContextFiles) args.push(\"--no-context-files\");\n\tif (options.projectTrust !== undefined) {\n\t\targs.push(options.projectTrust ? \"--approve\" : \"--no-approve\");\n\t}\n\tif (Array.isArray(options.tools)) {\n\t\tif (options.tools.length > 0) args.push(\"--tools\", options.tools.join(\",\"));\n\t\telse args.push(\"--no-tools\");\n\t}\n\tif (options.baseSystemPromptPath) args.push(\"--system-prompt\", options.baseSystemPromptPath);\n\tfor (const promptPath of options.appendSystemPromptPaths ?? []) {\n\t\targs.push(\"--append-system-prompt\", promptPath);\n\t}\n\tif (options.systemPromptPath) args.push(\"--append-system-prompt\", options.systemPromptPath);\n\targs.push(`Task: ${options.task}`);\n\treturn args;\n}\n", "export interface UsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcostInput?: number;\n\tcostOutput?: number;\n\tcostCacheRead?: number;\n\tcostCacheWrite?: number;\n\ttotalTokens?: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nconst MAX_USAGE_VALUE = Number.MAX_SAFE_INTEGER;\n\nexport function protocolUsageCount(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : 0;\n}\n\nexport function protocolUsageCost(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0\n\t\t? Math.min(value, MAX_USAGE_VALUE)\n\t\t: 0;\n}\n\nexport function addUsageValue(current: number, addition: number): number {\n\treturn Math.min(MAX_USAGE_VALUE, current + addition);\n}\n\nexport function mergeUsageStats(target: UsageStats, addition: UsageStats): void {\n\tfor (const key of [\"input\", \"output\", \"cacheRead\", \"cacheWrite\", \"cost\", \"turns\"] as const) {\n\t\ttarget[key] = addUsageValue(target[key], addition[key]);\n\t}\n\tfor (const key of [\n\t\t\"costInput\",\n\t\t\"costOutput\",\n\t\t\"costCacheRead\",\n\t\t\"costCacheWrite\",\n\t\t\"totalTokens\",\n\t] as const) {\n\t\tif (addition[key] !== undefined) {\n\t\t\ttarget[key] = addUsageValue(target[key] ?? 0, addition[key]);\n\t\t}\n\t}\n\ttarget.contextTokens = addition.contextTokens || target.contextTokens;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AACtB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEtB,SAAS,6BAA6B;;;ACc/B,SAAS,YAAY,SAAkC;AAC7D,QAAM,OAAiB,CAAC,UAAU,QAAQ,MAAM,cAAc;AAC9D,MAAI,QAAQ,MAAO,MAAK,KAAK,WAAW,QAAQ,KAAK;AACrD,MAAI,QAAQ,cAAe,MAAK,KAAK,cAAc,QAAQ,aAAa;AACxE,MAAI,QAAQ,kBAAmB,MAAK,KAAK,iBAAiB;AAC1D,aAAW,iBAAiB,QAAQ,kBAAkB,CAAC,EAAG,MAAK,KAAK,MAAM,aAAa;AACvF,MAAI,QAAQ,cAAe,MAAK,KAAK,aAAa;AAClD,MAAI,QAAQ,uBAAwB,MAAK,KAAK,uBAAuB;AACrE,MAAI,QAAQ,oBAAqB,MAAK,KAAK,oBAAoB;AAC/D,MAAI,QAAQ,iBAAiB,QAAW;AACvC,SAAK,KAAK,QAAQ,eAAe,cAAc,cAAc;AAAA,EAC9D;AACA,MAAI,MAAM,QAAQ,QAAQ,KAAK,GAAG;AACjC,QAAI,QAAQ,MAAM,SAAS,EAAG,MAAK,KAAK,WAAW,QAAQ,MAAM,KAAK,GAAG,CAAC;AAAA,QACrE,MAAK,KAAK,YAAY;AAAA,EAC5B;AACA,MAAI,QAAQ,qBAAsB,MAAK,KAAK,mBAAmB,QAAQ,oBAAoB;AAC3F,aAAW,cAAc,QAAQ,2BAA2B,CAAC,GAAG;AAC/D,SAAK,KAAK,0BAA0B,UAAU;AAAA,EAC/C;AACA,MAAI,QAAQ,iBAAkB,MAAK,KAAK,0BAA0B,QAAQ,gBAAgB;AAC1F,OAAK,KAAK,SAAS,QAAQ,IAAI,EAAE;AACjC,SAAO;AACR;;;AC3BA,IAAM,kBAAkB,OAAO;AAExB,SAAS,mBAAmB,OAAwB;AAC1D,SAAO,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,IAAI,QAAQ;AACzF;AAEO,SAAS,kBAAkB,OAAwB;AACzD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,SAAS,IACpE,KAAK,IAAI,OAAO,eAAe,IAC/B;AACJ;AAEO,SAAS,cAAc,SAAiB,UAA0B;AACxE,SAAO,KAAK,IAAI,iBAAiB,UAAU,QAAQ;AACpD;AAEO,SAAS,gBAAgB,QAAoB,UAA4B;AAC/E,aAAW,OAAO,CAAC,SAAS,UAAU,aAAa,cAAc,QAAQ,OAAO,GAAY;AAC3F,WAAO,GAAG,IAAI,cAAc,OAAO,GAAG,GAAG,SAAS,GAAG,CAAC;AAAA,EACvD;AACA,aAAW,OAAO;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAAY;AACX,QAAI,SAAS,GAAG,MAAM,QAAW;AAChC,aAAO,GAAG,IAAI,cAAc,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,CAAC;AAAA,IAC5D;AAAA,EACD;AACA,SAAO,gBAAgB,SAAS,iBAAiB,OAAO;AACzD;;;AFWA,IAAM,4BAA4B;AAClC,IAAM,4BAA4B,IAAI;AACtC,IAAM,qCAAqC;AAE3C,SAAS,iBACR,SACA,UAC2D;AAC3D,QAAM,gBAAgB,OAAO,WAAW,KAAK,UAAU,OAAO,GAAG,MAAM;AACvE,MAAI,OAAO,cAAc,QAAQ,KAAK,YAAY,KAAK,iBAAiB,UAAU;AACjF,WAAO,EAAE,SAAS,OAAO,eAAe,WAAW,MAAM;AAAA,EAC1D;AACA,MAAI,CAAC,OAAO,cAAc,QAAQ,KAAK,WAAW,EAAG,QAAO,EAAE,OAAO,GAAG,WAAW,KAAK;AAExF,QAAM,UAGF,CAAC;AACL,QAAM,UAAU,OAAO,EAAE,GAAG,SAAS,QAAQ;AAC7C,QAAM,OAAO,MAAM,OAAO,WAAW,KAAK,UAAU,QAAQ,CAAC,GAAG,MAAM,KAAK;AAC3E,QAAM,UAAU,CAAC,MAAc,UAAU,UAAU;AAClD,QAAI,CAAC,KAAK,KAAK,EAAG;AAClB,UAAM,OAAO,EAAE,MAAM,QAAiB,MAAM,GAAG;AAC/C,QAAI,QAAS,SAAQ,QAAQ,IAAI;AAAA,QAC5B,SAAQ,KAAK,IAAI;AACtB,QAAI,CAAC,KAAK,GAAG;AACZ,cAAQ,OAAO,QAAQ,QAAQ,IAAI,GAAG,CAAC;AACvC;AAAA,IACD;AACA,QAAI,MAAM;AACV,QAAI,OAAO,OAAO,WAAW,MAAM,MAAM;AACzC,WAAO,MAAM,MAAM;AAClB,YAAM,SAAS,KAAK,MAAM,MAAM,QAAQ,CAAC;AACzC,WAAK,OAAO,aAAa,MAAM,MAAM,EAAE;AACvC,UAAI,KAAK,EAAG,OAAM;AAAA,UACb,QAAO,SAAS;AAAA,IACtB;AACA,SAAK,OAAO,aAAa,MAAM,GAAG,EAAE;AACpC,QAAI,CAAC,KAAK,KAAK,KAAK,EAAG,SAAQ,OAAO,QAAQ,QAAQ,IAAI,GAAG,CAAC;AAAA,EAC/D;AACA,QAAM,cAAc,CAAC,SAAoE;AACxF,UAAM,WAAW;AAAA,MAChB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,IACjB;AACA,YAAQ,QAAQ,QAAQ;AACxB,QAAI,KAAK,EAAG;AACZ,UAAM,aAAsC,CAAC;AAC7C,eAAW,OAAO,CAAC,WAAW,QAAQ,aAAa,WAAW,KAAK,GAAG;AACrE,YAAM,QAAQ,KAAK,UAAU,GAAG;AAChC,UAAI,OAAO,UAAU,SAAU,YAAW,GAAG,IAAI,aAAa,OAAO,GAAG,EAAE;AAAA,IAC3E;AACA,aAAS,YAAY;AACrB,QAAI,KAAK,EAAG;AACZ,aAAS,YAAY,CAAC;AACtB,QAAI,CAAC,KAAK,EAAG,SAAQ,MAAM;AAAA,EAC5B;AAEA,MAAI,QAAQ,SAAS,aAAa;AACjC,aAAS,QAAQ,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS;AACjE,YAAM,OAAO,QAAQ,QAAQ,KAAK;AAClC,UAAI,KAAK,SAAS,OAAQ,SAAQ,KAAK,MAAM,IAAI;AAAA,eACxC,KAAK,SAAS,WAAY,aAAY,IAAI;AAAA,IACpD;AAAA,EACD,OAAO;AACN,eAAW,QAAQ,QAAQ,SAAS;AACnC,UAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,SAAS,OAAQ,SAAQ,KAAK,IAAI;AAAA,IAChF;AAAA,EACD;AAEA,MAAI,QAAQ,WAAW,EAAG,QAAO,EAAE,OAAO,GAAG,WAAW,KAAK;AAC7D,QAAM,SAAS,QAAQ;AACvB,QAAM,QAAQ,OAAO,WAAW,KAAK,UAAU,MAAM,GAAG,MAAM;AAC9D,SAAO,EAAE,SAAS,QAAQ,OAAO,WAAW,KAAK;AAClD;AACA,SAAS,+BAA+B,MAAwD;AAC/F,MAAI,OAAO,WAAW,KAAK,UAAU,IAAI,GAAG,MAAM,KAAK;AACtD,WAAO;AACR,QAAM,UAAmC,CAAC;AAC1C,aAAW,OAAO,CAAC,WAAW,QAAQ,aAAa,WAAW,OAAO,UAAU,GAAG;AACjF,UAAM,QAAQ,KAAK,GAAG;AACtB,QAAI,OAAO,UAAU,SAAU,SAAQ,GAAG,IAAI,aAAa,OAAO,GAAG,EAAE;AAAA,aAC9D,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,SAAQ,GAAG,IAAI;AAAA,EAClF;AACA,SAAO;AACR;AAEA,SAAS,qBAAqB,QAAsB,SAAwB;AAC3E,MAAI,QAAQ,SAAS,YAAa;AAClC,QAAM,SAAS,CAAC,SAA6B;AAC5C,WAAO,mBAAmB,CAAC;AAC3B,WAAO,uBAAuB,OAAO,uBAAuB,KAAK;AACjE,WAAO,eAAe,KAAK,IAAI;AAC/B,QAAI,OAAO,eAAe,SAAS,2BAA2B;AAC7D,aAAO,eAAe,OAAO,GAAG,OAAO,eAAe,SAAS,yBAAyB;AAAA,IACzF;AACA,WACC,OAAO,WAAW,KAAK,UAAU,OAAO,cAAc,GAAG,MAAM,IAAI,2BAClE;AACD,aAAO,eAAe,MAAM;AAAA,IAC7B;AAAA,EACD;AACA,aAAW,QAAQ,QAAQ,SAAS;AACnC,QAAI,KAAK,SAAS,QAAQ;AACzB,YAAM,OAAO,KAAK,KAAK,KAAK;AAC5B,UAAI,KAAM,QAAO,EAAE,MAAM,QAAQ,MAAM,aAAa,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,IACvE,WAAW,KAAK,SAAS,YAAY;AACpC,aAAO;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,MAAM,+BAA+B,KAAK,SAAS;AAAA,MACpD,CAAC;AAAA,IACF;AAAA,EACD;AACD;AAEO,SAAS,kBACf,SACA,WAAW,2BACF;AACT,QAAM,OAAO,QACX,IAAI,CAAC,QAAQ,UAAU;AACvB,UAAM,SAAS,cAAc,MAAM;AACnC,UAAM,SAAS,OAAO,aAAa,KAAK,YAAY,SAAS,WAAW;AACxE,UAAM,SAAS,qBAAqB,MAAM;AAC1C,UAAM,QAAQ,OAAO,gBAAgB,OAAO,OAAO,KAAK;AACxD,UAAM,aAAa,SAChB,GAAG,QAAQ,UAAU,SAAS,mBAAmB,OAAO;AAAA,EAAM,oBAAoB,MAAM,CAAC,KACzF,OAAO,mBACN;AAAA,EAAuB,KAAK,UAAU,OAAO,gBAAgB,CAAC,KAC9D,SACC;AAAA,EAAY,MAAM,KAClB;AACL,WAAO;AAAA,MACN,aAAa,QAAQ,CAAC,KAAK,OAAO,KAAK,KAAK,MAAM;AAAA,MAClD,SAAS,OAAO,IAAI;AAAA,MACpB;AAAA,IACD,EAAE,KAAK,MAAM;AAAA,EACd,CAAC,EACA,KAAK,aAAa;AACpB,SAAO,aAAa,MAAM,QAAQ,EAAE;AACrC;AAEA,eAAsB,wBACrB,OACA,aACA,IACA,QACA,WACkB;AAClB,MAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAChC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,aAAa,MAAM,MAAM,CAAC;AAC7D,QAAM,UAAkB,IAAI,MAAM,MAAM,MAAM;AAC9C,MAAI,YAAY;AAChB,QAAM,UAAU,IAAI,MAAM,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,YAAY;AAC3D,WAAO,MAAM;AACZ,YAAM,UAAU;AAChB,UAAI,WAAW,MAAM,OAAQ;AAC7B,UAAI,QAAQ,WAAW,WAAW;AACjC,gBAAQ,OAAO,IAAI,UAAU,MAAM,OAAO,GAAG,OAAO;AACpD;AAAA,MACD;AACA,cAAQ,OAAO,IAAI,MAAM,GAAG,MAAM,OAAO,GAAG,OAAO;AAAA,IACpD;AAAA,EACD,CAAC;AACD,QAAM,QAAQ,IAAI,OAAO;AACzB,SAAO;AACR;AAEA,eAAe,sBACd,WACA,QAC6C;AAC7C,QAAM,SAAS,MAAS,YAAS,QAAa,UAAQ,UAAO,GAAG,cAAc,CAAC;AAC/E,QAAM,WAAW,UAAU,QAAQ,aAAa,GAAG;AACnD,QAAM,WAAgB,UAAK,QAAQ,UAAU,QAAQ,KAAK;AAC1D,QAAM,sBAAsB,UAAU,YAAY;AACjD,UAAS,YAAS,UAAU,UAAU,QAAQ,EAAE,UAAU,SAAS,MAAM,IAAM,CAAC;AAAA,EACjF,CAAC;AACD,SAAO,EAAE,KAAK,QAAQ,SAAS;AAChC;AAEA,eAAsB,eACrB,YACA,QACA,WACA,MACA,KACA,MACA,QACA,eACA,WACA,UACA,aACA,oBACA,cACwB;AACxB,QAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS;AAErD,MAAI,CAAC,OAAO;AACX,UAAM,YAAY,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,KAAK;AACjE,WAAO;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,QAAQ,mBAAmB,SAAS,wBAAwB,SAAS;AAAA,MACrE,OAAO;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,eAAe;AAAA,QACf,OAAO;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACd;AAAA,EACD;AAEA,QAAM,mBAA6D,CAAC;AACpE,MAAI,gBAA+B;AACnC,MAAI,uBAAsC;AAE1C,MAAI,wBAAwB;AAC5B,MAAI;AAEJ,QAAM,kBAAkB,IAAI,uBAAuB;AACnD,QAAM,gBAA8B;AAAA,IACnC,OAAO;AAAA,IACP,aAAa,MAAM;AAAA,IACnB,MAAM,cAAc,eAAe;AAAA,IACnC,UAAU;AAAA,IACV,UAAU,CAAC;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,eAAe;AAAA,MACf,OAAO;AAAA,IACR;AAAA,IACA,OAAO,MAAM,SAAS;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,cAAc;AAAA,IACxB,cAAc,cAAc;AAAA,IAC5B,eAAe,cAAc;AAAA,IAC7B,iBAAiB,cAAc;AAAA,EAChC;AACA,QAAM,0BAA0B,MAC/B,4BAA4B,SACzB,0BACA,yBAAyB,eAAe,cAAc,QAAQ;AAClE,QAAM,kBAAkB,CAAC,YAAoB;AAC5C,UAAM,UAAU,aAAa,SAAS,wBAAwB;AAC9D,kBAAc,eAAe,QAAQ;AACrC,kBAAc,cAAc,QAAQ;AACpC,WAAO,QAAQ;AAAA,EAChB;AAEA,QAAM,aAAa,MAAM;AACxB,UAAM,SAAS,aAAa,wBAAwB,GAAG,wBAAwB;AAC/E,kBAAc,cAAc,OAAO;AACnC,kBAAc,cAAc,OAAO;AACnC,QAAI,UAAU;AACb,eAAS;AAAA,QACR,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,cAAc,eAAe,eAAe,CAAC;AAAA,QAC7E,SAAS,YAAY,CAAC,aAAa,CAAC;AAAA,MACrC,CAAC;AAAA,IACF;AAAA,EACD;AAEA,MAAI;AACH,UAAM,eAAe,OAAO;AAC5B,QAAI;AACH,UAAI,CAAI,YAAS,YAAY,EAAE,YAAY,EAAG,OAAM,IAAI,MAAM,iBAAiB;AAAA,IAChF,SAAS,OAAO;AACf,oBAAc,WAAW;AACzB,oBAAc,aAAa;AAC3B,YAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACpE,oBAAc,SAAS,gBAAgB,yBAAyB,YAAY,KAAK,MAAM,GAAG;AAC1F,aAAO;AAAA,IACR;AAEA,QAAI,QAAQ,SAAS;AACpB,oBAAc,WAAW;AACzB,oBAAc,UAAU;AACxB,oBAAc,aAAa;AAC3B,sBAAgB,mCAAmC;AACnD,aAAO;AAAA,IACR;AACA,QAAI,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,KAAK,YAAY,yBAAyB;AACxF,oBAAc,WAAW;AACzB,oBAAc,aAAa;AAC3B;AAAA,QACC,wCAAwC,uBAAuB,gBAAgB,SAAS;AAAA,MACzF;AACA,aAAO;AAAA,IACR;AAEA,QAAI,cAAc,kBAAkB,KAAK,GAAG;AAC3C,YAAM,MAAM,MAAM,sBAAsB,GAAG,MAAM,IAAI,SAAS,aAAa,gBAAgB;AAC3F,uBAAiB,KAAK,GAAG;AACzB,6BAAuB,IAAI;AAAA,IAC5B;AACA,QAAI,MAAM,aAAa,KAAK,GAAG;AAC9B,YAAM,MAAM,MAAM,sBAAsB,MAAM,MAAM,MAAM,YAAY;AACtE,uBAAiB,KAAK,GAAG;AACzB,sBAAgB,IAAI;AAAA,IACrB;AACA,QAAI,QAAQ,SAAS;AACpB,oBAAc,WAAW;AACzB,oBAAc,UAAU;AACxB,oBAAc,aAAa;AAC3B,sBAAgB,oCAAoC;AACpD,aAAO;AAAA,IACR;AAEA,UAAM,iBACL,gBAAgB,OAAO,OAAO,cAAc,OAAO,IAAI,aAAa,QAAQ,MAAM;AACnF,UAAM,gBACL,mBAAmB,SAChB,SACA,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,gBAAgB,GAAI,cAAc,mBAAmB,CAAC,CAAE,CAAC,CAAC;AAC9E,UAAM,OAAO,YAAY;AAAA,MACxB,OAAO,MAAM;AAAA,MACb;AAAA,MACA,OAAO;AAAA,MACP,mBAAmB,cAAc;AAAA,MACjC,eAAe,cAAc;AAAA,MAC7B,wBAAwB,cAAc;AAAA,MACtC,qBAAqB,cAAc;AAAA,MACnC,cAAc,cAAc;AAAA,MAC5B,sBAAsB,wBAAwB;AAAA,MAC9C,yBAAyB,cAAc;AAAA,MACvC,gBAAgB,cAAc;AAAA,MAC9B,kBAAkB,iBAAiB;AAAA,MACnC;AAAA,IACD,CAAC;AACD,QAAI;AACJ,QAAI;AACH,mBAAa,qBACV;AAAA,QACA,SAAS,mBAAmB;AAAA,QAC5B,MAAM,CAAC,GAAI,mBAAmB,cAAc,CAAC,GAAI,GAAG,IAAI;AAAA,MACzD,IACC,oBAAoB,IAAI;AAAA,IAC5B,SAAS,OAAO;AACf,oBAAc,eAAe;AAC7B,oBAAc,WAAW;AACzB,oBAAc,SAAS;AAAA,QACtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACtD;AACA,aAAO;AAAA,IACR;AACA,QAAI,aAAa;AACjB,QAAI,WAAW;AACf,QAAI;AAKJ,UAAM,WAAW,MAAM,IAAI,QAAgB,CAAC,YAAY;AACvD,UAAI,UAAU;AACd,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,YAAM,SAAS,CAAC,SAAiB;AAChC,YAAI,QAAS;AACb,kBAAU;AACV,YAAI,QAAS,cAAa,OAAO;AACjC,YAAI,oBAAqB,cAAa,mBAAmB;AACzD,6BAAqB;AACrB,uBAAe,QAAQ;AACvB,YAAI,UAAU,aAAc,QAAO,oBAAoB,SAAS,YAAY;AAC5E,gBAAQ,IAAI;AAAA,MACb;AACA,UAAI;AACJ,UAAI;AACH,eAAO,MAAM,WAAW,SAAS,WAAW,MAAM;AAAA,UACjD,KAAK;AAAA,UACL,UAAU,QAAQ,aAAa;AAAA,UAC/B,OAAO;AAAA,UACP,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,UAChC,KAAK;AAAA,YACJ,GAAG,QAAQ;AAAA,YACX,GAAG,cAAc;AAAA,YACjB,mBAAmB;AAAA,eACjB,OAAO,SAAS,QAAQ,IAAI,qBAAqB,KAAK,EAAE,KAAK,KAAK;AAAA,YACpE;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF,SAAS,OAAO;AACf,sBAAc,eAAe;AAC7B,sBAAc,SAAS;AAAA,UACtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QACtD;AACA,eAAO,CAAC;AACR;AAAA,MACD;AAEA,YAAM,aAAa,CAAC,QAAiB;AACpC,cAAM,iBAAiB,iBAAiB,KAAK,2BAA2B,CAAC;AACzE,sBAAc,cAAc,eAAe;AAC3C,YAAI,CAAC,eAAe,QAAS;AAC7B,eACC,cAAc,SAAS,UAAU,wBACjC,OAAO;AAAA,UACN,KAAK,UAAU,CAAC,GAAG,cAAc,UAAU,eAAe,OAAO,CAAC;AAAA,UAClE;AAAA,QACD,IAAI,0BACH;AACD,gBAAM,UAAU,cAAc,SAAS,MAAM;AAC7C,cAAI,CAAC,QAAS;AACd,wBAAc,YAAY;AAAA,QAC3B;AACA,YACC,OAAO;AAAA,UACN,KAAK,UAAU,CAAC,GAAG,cAAc,UAAU,eAAe,OAAO,CAAC;AAAA,UAClE;AAAA,QACD,IAAI,0BACH;AACD,wBAAc,YAAY;AAC1B;AAAA,QACD;AACA,sBAAc,SAAS,KAAK,eAAe,OAAO;AAAA,MACnD;AACA,YAAM,eAAe,CAAC,QAAiB;AACtC,YAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AACrC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,iBAAiB,MAAM,SAAS;AAClD,gBAAM,MAAM,MAAM;AAClB,0BAAgB,iBAAiB,CAAC,GAAG,CAAC;AACtC,cAAI,IAAI,SAAS,aAAa;AAC7B,kBAAM,SAAS,aAAa,eAAe,CAAC,GAAG,CAAC,GAAG,wBAAwB;AAC3E,0BAAc,cAAc,OAAO;AACnC,gBAAI,OAAO,KAAM,yBAAwB,OAAO;AAChD,gBAAI,IAAI,eAAe,UAAU,IAAI,eAAe,UAAU;AAC7D,wCAA0B,OAAO;AAAA,YAClC;AAAA,UACD;AACA,+BAAqB,eAAe,GAAG;AACvC,qBAAW,GAAG;AACd,cAAI,IAAI,SAAS,aAAa;AAC7B,0BAAc,MAAM;AACpB,2BAAe;AAAA,cACd,IAAI,QAAQ,OAAO,CAAC,SAAS,KAAK,SAAS,UAAU,EAAE;AAAA,YACxD;AACA,2BAAe,oBAAoB,IAAI,UAAU;AACjD,kBAAM,QAAQ,IAAI;AAClB,gBAAI,SAAS,OAAO,UAAU,UAAU;AACvC,oBAAM,QAAQ,mBAAmB,MAAM,KAAK;AAC5C,oBAAM,SAAS,mBAAmB,MAAM,MAAM;AAC9C,oBAAM,YAAY,mBAAmB,MAAM,SAAS;AACpD,oBAAM,aAAa,mBAAmB,MAAM,UAAU;AACtD,oBAAM,gBAAgB,mBAAmB,MAAM,WAAW;AAC1D,oBAAM,YACL,iBACA,cAAc,cAAc,OAAO,MAAM,GAAG,cAAc,WAAW,UAAU,CAAC;AACjF,oBAAM,OAAO,MAAM,QAAQ,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AACzE,4BAAc,MAAM,QAAQ,cAAc,cAAc,MAAM,OAAO,KAAK;AAC1E,4BAAc,MAAM,SAAS,cAAc,cAAc,MAAM,QAAQ,MAAM;AAC7E,4BAAc,MAAM,YAAY;AAAA,gBAC/B,cAAc,MAAM;AAAA,gBACpB;AAAA,cACD;AACA,4BAAc,MAAM,aAAa;AAAA,gBAChC,cAAc,MAAM;AAAA,gBACpB;AAAA,cACD;AACA,4BAAc,MAAM,OAAO;AAAA,gBAC1B,cAAc,MAAM;AAAA,gBACpB,kBAAkB,MAAM,KAAK;AAAA,cAC9B;AACA,4BAAc,MAAM,YAAY;AAAA,gBAC/B,cAAc,MAAM,aAAa;AAAA,gBACjC,kBAAkB,MAAM,KAAK;AAAA,cAC9B;AACA,4BAAc,MAAM,aAAa;AAAA,gBAChC,cAAc,MAAM,cAAc;AAAA,gBAClC,kBAAkB,MAAM,MAAM;AAAA,cAC/B;AACA,4BAAc,MAAM,gBAAgB;AAAA,gBACnC,cAAc,MAAM,iBAAiB;AAAA,gBACrC,kBAAkB,MAAM,SAAS;AAAA,cAClC;AACA,4BAAc,MAAM,iBAAiB;AAAA,gBACpC,cAAc,MAAM,kBAAkB;AAAA,gBACtC,kBAAkB,MAAM,UAAU;AAAA,cACnC;AACA,4BAAc,MAAM,cAAc;AAAA,gBACjC,cAAc,MAAM,eAAe;AAAA,gBACnC;AAAA,cACD;AACA,4BAAc,MAAM,gBAAgB;AAAA,YACrC;AACA,gBAAI,OAAO,IAAI,aAAa,SAAU,eAAc,iBAAiB,IAAI;AACzE,kBAAM,cACL,OAAO,IAAI,kBAAkB,WAC1B,IAAI,gBACJ,OAAO,IAAI,UAAU,WACpB,IAAI,QACJ;AACL,gBAAI,YAAa,eAAc,cAAc;AAC7C,gBAAI,OAAO,IAAI,eAAe,SAAU,eAAc,aAAa,IAAI;AACvE,gBAAI,OAAO,IAAI,iBAAiB,SAAU,iBAAgB,IAAI,YAAY;AAAA,UAC3E;AACA,qBAAW;AAAA,QACZ,WAAW,MAAM,SAAS,qBAAqB,MAAM,SAAS;AAC7D,0BAAgB,iBAAiB,CAAC,MAAM,OAAO,CAAC;AAChD,yBAAe,eAAe;AAC9B,qBAAW,MAAM,OAAO;AACxB,qBAAW;AAAA,QACZ;AAAA,MACD;AACA,YAAM,UAAU,IAAI,gBAAgB;AAAA,QACnC,SAAS;AAAA,QACT,aAAa,MAAM;AAClB,wBAAc,mBAAmB,cAAc,mBAAmB,KAAK;AAAA,QACxE;AAAA,QACA,aAAa,MAAM;AAClB,wBAAc,YAAY;AAAA,QAC3B;AAAA,MACD,CAAC;AACD,YAAM,mBAAmB,CAACA,cAAqB;AAC9C,YAAI,sBAAsB,QAAS;AACnC,6BAAqB,iBAAiB,IAAI;AAC1C,8BAAsB,WAAW,MAAM;AACtC,kBAAQ,OAAO;AACf,eAAK,OAAO,QAAQ;AACpB,eAAK,QAAQ,QAAQ;AACrB,eAAK,QAAQ,QAAQ;AACrB,iBAAOA,SAAQ;AAAA,QAChB,GAAG,gBAAgB,GAAK;AAAA,MACzB;AACA,YAAM,gBAAgB,CACrB,SACI;AACJ,YAAI,cAAc,WAAW,WAAY;AACzC,qBAAa;AACb,mBAAW,KAAK,OAAO,SAAS,SAAS;AACzC,sBAAc,WAAW,YAAY;AACrC,sBAAc,aAAa,WAAW,YAAY;AAClD,cAAM,UAAU,6BAA6B,KAAK,QAAQ,KAAK,KAAK;AACpE,wBAAgB,OAAO;AACvB,cAAM,UAAU;AAAA,UACf,cAAc;AAAA,UACd;AAAA,EAAK,OAAO;AAAA,UACZ;AAAA,QACD;AACA,sBAAc,SAAS,QAAQ;AAC/B,sBAAc,cAAc,QAAQ;AACpC,mBAAW;AACX,yBAAiB,GAAG;AAAA,MACrB;AACA,sBAAgB,IAAI,kBAAkB;AAAA,QACrC,GAAG,cAAc;AAAA,QACjB,YAAY;AAAA,MACb,CAAC;AAED,WAAK,KAAK,SAAS,MAAM;AACxB,sBAAc,iBAAiB;AAC/B,YAAI,WAAW,cAAc,WAAY;AACzC,kBAAU,WAAW,MAAM;AAC1B,wBAAc;AAAA,YACb,QAAQ,cAAc,qBAAqB;AAAA,YAC3C,OAAO,cAAc,0BAA0B;AAAA,UAChD,CAAC;AAAA,QACF,GAAG,SAAS;AACZ,gBAAQ,MAAM;AAAA,MACf,CAAC;AACD,WAAK,QAAQ,GAAG,QAAQ,CAAC,SAAS,QAAQ,KAAK,IAAI,CAAC;AACpD,WAAK,QAAQ,GAAG,QAAQ,CAAC,SAAS;AACjC,cAAM,UAAU;AAAA,UACf,cAAc;AAAA,UACd,KAAK,SAAS;AAAA,UACd;AAAA,QACD;AACA,sBAAc,SAAS,QAAQ;AAC/B,sBAAc,cAAc,QAAQ;AAAA,MACrC,CAAC;AACD,WAAK,GAAG,SAAS,CAAC,SAAS;AAC1B,gBAAQ,OAAO;AACf,eAAO,aAAa,MAAM,aAAa,MAAO,QAAQ,CAAE;AAAA,MACzD,CAAC;AACD,WAAK,GAAG,SAAS,CAAC,UAAU;AAC3B,sBAAc,eAAe,cAAc,iBAAiB,SAAY;AACxE,cAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,cAAM,UAAU;AAAA,UACf,cAAc;AAAA,UACd,GAAG,cAAc,SAAS,OAAO,EAAE,GAAG,OAAO;AAAA,UAC7C;AAAA,QACD;AACA,sBAAc,SAAS,QAAQ;AAC/B,sBAAc,cAAc,QAAQ;AACpC,YAAI,cAAc,eAAgB,kBAAiB,CAAC;AAAA,YAC/C,QAAO,CAAC;AAAA,MACd,CAAC;AAED,UAAI,QAAQ;AACX,uBAAe,MAAM;AACpB,cAAI,cAAc,QAAS;AAC3B,uBAAa;AACb,wBAAc,UAAU;AACxB,wBAAc,aAAa;AAC3B,0BAAgB,sBAAsB;AACtC,2BAAiB,GAAG;AAAA,QACrB;AACA,YAAI,OAAO,QAAS,cAAa;AAAA,YAC5B,QAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,KAAK,CAAC;AAAA,MACnE;AAAA,IACD,CAAC;AAED,QAAI,QAAQ,WAAW,YAAY;AAClC,mBAAa;AACb,iBAAW;AACX,oBAAc,WAAW;AACzB,oBAAc,UAAU;AACxB,oBAAc,aAAa;AAC3B,sBAAgB,sBAAsB;AAAA,IACvC;AACA,kBAAc,WAAW,cAAc,UAAU,MAAM;AACvD,UAAM,QAAQ,aAAa,wBAAwB,GAAG,wBAAwB;AAC9E,kBAAc,cAAc,MAAM;AAClC,kBAAc,cAAc,MAAM;AAClC,QAAI,YAAY;AACf,oBAAc,gBAAgB,cAAc,eAAe;AAC3D,oBAAc,cAAc;AAAA,QAC3B,SAAS;AAAA,QACT,QAAQ,WAAW;AAAA,QACnB,OAAO,WAAW;AAAA,QAClB,YAAY,gBAAgB,WAAW,MAAM,cAAc,aAAa;AAAA,QACxE,cAAc,EAAE,WAAW,OAAO,QAAQ,WAAW,YAAY,EAAE;AAAA,MACpE;AAAA,IACD;AACA,UAAM,0BAA0B,cAAc,0BAC3C,KAAK,MAAM,aAAa,0BAA0B,KAAK,IAAI,CAAC,IAC5D;AACH,QACC,cACA,WAAW,WAAW,2BACtB,cAAc,sBAAsB,SACpC,CAAC,QAAQ,YACR,4BAA4B,UAAa,0BAA0B,IACnE;AACD,YAAM,wBAAwB,KAAK,IAAI;AACvC,YAAM,0BAA0B;AAAA,QAC/B;AAAA,QACA,cAAc;AAAA,MACf;AACA,YAAM,iBAAiB,KAAK;AAAA,QAC3B;AAAA,QACA,2BAA2B;AAAA,MAC5B;AACA,YAAM,UAAU,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA,+BAA+B;AAAA,UAC9B;AAAA,UACA,eAAe,cAAc;AAAA,UAC7B,gBAAgB,cAAc;AAAA,UAC9B,YAAY,cAAc,aAAa;AAAA,UACvC,mBAAmB,WAAW;AAAA,UAC9B,cAAc,cAAc;AAAA,QAC7B,CAAC;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH,OAAO,CAAC;AAAA,UACR,mBAAmB;AAAA,UACnB,eAAe;AAAA,UACf,wBAAwB;AAAA,UACxB,qBAAqB;AAAA,UACrB,yBAAyB;AAAA,UACzB,mBAAmB;AAAA,UACnB,YAAY;AAAA,UACZ,mBAAmB;AAAA,UACnB,wBAAwB;AAAA,UACxB,yBAAyB;AAAA,QAC1B;AAAA,MACD;AACA,sBAAgB,cAAc,OAAO,QAAQ,KAAK;AAClD,YAAM,gBAAgB,qBAAqB,OAAO,EAAE,KAAK;AACzD,UAAI,QAAQ,aAAa,KAAK,eAAe;AAC5C,sBAAc,iBAAiB;AAC/B,sBAAc,cAAc;AAC5B,YAAI,cAAc,aAAa;AAC9B,wBAAc,YAAY,eAAe;AAAA,YACxC,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,YAAY,KAAK,IAAI,IAAI;AAAA,UAC1B;AAAA,QACD;AAAA,MACD,OAAO;AACN,sBAAc,sBACb,QAAQ,gBAAgB,QAAQ,OAAO,KAAK,KAAK;AAClD,YAAI,cAAc,aAAa;AAC9B,wBAAc,YAAY,eAAe;AAAA,YACxC,WAAW;AAAA,YACX,QAAQ,QAAQ,WAAW,cAAc;AAAA,YACzC,YAAY,KAAK,IAAI,IAAI;AAAA,YACzB,OAAO,cAAc;AAAA,UACtB;AAAA,QACD;AAAA,MACD;AACA,oBAAc,cAAc,QAAQ;AAAA,IACrC;AACA,QAAI,cAAc,eAAe,CAAC,cAAc,YAAY,KAAK,GAAG;AACnE,oBAAc,cAAc,wBAAwB,cAAc,YAAY,UAAU;AAAA,IACzF;AACA,QAAI,cAAc,aAAa,KAAK,cAAc,iBAAiB,QAAW;AAC7E,oBAAc,mBAAmB;AAAA,QAChC,cAAc,eAAe;AAAA,QAC7B,aAAa;AAAA,MACd;AACA,oBAAc,wBACb,aAAa,iBAAiB,UAAU,cAAc,qBAAqB;AAC5E,UACC,cAAc,kBAAkB,YAAY,4BAC5C,aAAa,eACZ;AACD,sBAAc,iBAAiB,aAAa;AAAA,UAC3C,GAAG,cAAc,iBAAiB;AAAA,UAClC,GAAI,aAAa,cAAc,SAC5B,EAAE,QAAQ,aAAa,cAAc,OAAO,IAC5C,CAAC;AAAA,UACJ,gBAAgB,aAAa,cAAc;AAAA,UAC3C,iBAAiB,aAAa,cAAc;AAAA,UAC5C,qBAAqB,CAAC,GAAG,aAAa,cAAc,mBAAmB;AAAA,QACxE;AAAA,MACD;AACA,UAAI,cAAc,kBAAkB,YAAY,0BAA0B;AACzE,sBAAc,UAAU;AAAA,UACvB,cAAc,iBAAiB;AAAA,UAC/B,cAAc,iBAAiB;AAAA,QAChC;AAAA,MACD,WAAW,cAAc,uBAAuB;AAC/C,sBAAc,UAAU;AAAA,UACvB;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,QACC,cAAc,aAAa,KAC3B,cAAc,eAAe,YAC5B,cAAc,eAAe,aAAa,CAAC,cAAc,YAAY,KAAK,IAC1E;AACD,oBAAc,WAAW;AACzB,oBAAc,aAAa;AAC3B,sBAAgB,uCAAuC;AAAA,IACxD;AACA,QAAI,cAAc,iBAAiB,UAAU,UAAU;AACtD,oBAAc,kBAAkB;AAAA,QAC/B,cAAc;AAAA,QACd;AAAA,QACA,KAAK,IAAI;AAAA,MACV;AAAA,IACD;AACA,kBAAc,SAAS;AAAA,MACtB,WAAW,CAAC,aAAa;AAAA,MACzB,YAAY;AAAA,QACX;AAAA,QACA,GAAI,MAAM,QAAQ,CAAC,OAAO,IAAI,CAAC;AAAA,QAC/B,GAAI,gBAAgB,CAAC,eAAe,IAAI,CAAC;AAAA,QACzC,GAAI,mBAAmB,SAAY,CAAC,OAAO,IAAI,CAAC;AAAA,QAChD,GAAI,cAAc,oBAAoB,CAAC,YAAY,IAAI,CAAC;AAAA,QACxD,GAAI,cAAc,gBAAgB,CAAC,QAAQ,IAAI,CAAC;AAAA,QAChD,GAAI,cAAc,yBAAyB,CAAC,iBAAiB,IAAI,CAAC;AAAA,QAClE,GAAI,cAAc,sBAAsB,CAAC,cAAc,IAAI,CAAC;AAAA,MAC7D;AAAA,MACA,aAAa,CAAC,kBAAkB,kBAAkB,iBAAiB;AAAA,IACpE;AACA,WAAO;AAAA,EACR,UAAE;AACD,eAAW,aAAa,iBAAiB,QAAQ,GAAG;AACnD,UAAI;AACH,QAAG,cAAW,UAAU,QAAQ;AAAA,MACjC,QAAQ;AAAA,MAER;AACA,UAAI;AACH,QAAG,aAAU,UAAU,GAAG;AAAA,MAC3B,QAAQ;AAAA,MAER;AAAA,IACD;AAAA,EACD;AACD;",
6
- "names": ["exitCode"]
7
- }
@@ -1,172 +0,0 @@
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
- COLLAPSED_LIST_LIMIT,
5
- expansionHint,
6
- recordList,
7
- recordValue,
8
- safeBlock,
9
- safeLine,
10
- statusBadge
11
- } from "./chunk-BFK2Z4ZF.ts";
12
- import {
13
- MAX_TOOL_MESSAGE_BYTES
14
- } from "./chunk-H3FP6DLR.ts";
15
-
16
- // src/completion-render.ts
17
- import { Box, Spacer, sliceByColumn, visibleWidth } from "@earendil-works/pi-tui";
18
- var SUBAGENT_COMPLETION_MESSAGE_TYPE = "pi-subagent-completion";
19
- var renderCompletionMessage = (message, options, theme) => {
20
- const box = new Box(options.outputPad, 1, (text) => theme.bg("customMessageBg", text));
21
- if (options.expanded) {
22
- box.addChild(
23
- new ExactText(
24
- theme.fg("customMessageLabel", theme.bold(`[${SUBAGENT_COMPLETION_MESSAGE_TYPE}]`))
25
- )
26
- );
27
- box.addChild(new Spacer(1));
28
- box.addChild(
29
- new ExactText(
30
- safeBlock(messageText(message.content), "(no completion content)", MAX_TOOL_MESSAGE_BYTES),
31
- (text) => theme.fg("customMessageText", text)
32
- )
33
- );
34
- return box;
35
- }
36
- box.addChild(new ExactText(collapsedCompletion(message.content, message.details, theme)));
37
- return box;
38
- };
39
- function collapsedCompletion(contentValue, detailsValue, theme) {
40
- const content = safeBlock(messageText(contentValue), "", MAX_TOOL_MESSAGE_BYTES);
41
- const details = recordValue(detailsValue) ?? {};
42
- const completions = recordList(details.completions);
43
- if (completions.length > 0 || details.completionCount !== void 0) {
44
- return collapsedBatch(details, completions, theme);
45
- }
46
- return collapsedSingle(content, details, theme);
47
- }
48
- function collapsedSingle(content, details, theme) {
49
- const agent = optionalLine(details.agent) || extractedField(content, "Agent") || "subagent";
50
- const state = optionalLine(details.state) || extractedField(content, "State") || "completed";
51
- const task = optionalLine(details.task) || extractedField(content, "Task");
52
- const payload = payloadPreview(content);
53
- const lines = [
54
- `${statusBadge(theme, renderStatus(state))}${theme.fg("muted", " \xB7 ")}${theme.fg("customMessageLabel", theme.bold(agent))}`
55
- ];
56
- if (task) lines.push(`${theme.fg("muted", "Task: ")}${theme.fg("customMessageText", task)}`);
57
- if (payload) {
58
- lines.push(`${theme.fg("muted", "Payload: ")}${theme.fg("customMessageText", payload)}`);
59
- }
60
- lines.push(expansionHint());
61
- return lines.join("\n");
62
- }
63
- function collapsedBatch(details, completions, theme) {
64
- const declaredCount = typeof details.completionCount === "number" && Number.isFinite(details.completionCount) ? Math.max(0, Math.floor(details.completionCount)) : completions.length;
65
- const count = Math.max(declaredCount, completions.length);
66
- const statuses = completions.map((completion) => renderStatus(optionalLine(completion.state)));
67
- const icon = statuses.includes("failed") ? theme.fg("error", "\u2717") : statuses.some((status) => status !== "completed" && status !== "closed") ? theme.fg("warning", "\u25D0") : theme.fg("success", "\u2713");
68
- const lines = [
69
- `${icon} ${theme.fg("customMessageLabel", theme.bold(`${count} subagent completions`))}`
70
- ];
71
- for (const completion of completions.slice(0, COLLAPSED_LIST_LIMIT)) {
72
- const agent = optionalLine(completion.agent) || "subagent";
73
- const state = optionalLine(completion.state) || "completed";
74
- const task = optionalLine(completion.task);
75
- lines.push(
76
- `${theme.fg("muted", "\u2022 ")}${theme.fg("accent", agent)} \xB7 ${statusBadge(theme, renderStatus(state))}${task ? theme.fg("dim", ` \u2014 ${task}`) : ""}`
77
- );
78
- }
79
- const visibleCount = Math.min(completions.length, COLLAPSED_LIST_LIMIT);
80
- if (count > visibleCount) {
81
- lines.push(theme.fg("muted", `\u2026 ${count - visibleCount} more`));
82
- }
83
- lines.push(expansionHint());
84
- return lines.join("\n");
85
- }
86
- function messageText(value) {
87
- if (typeof value === "string") return value;
88
- if (!Array.isArray(value)) return "";
89
- return value.flatMap((part) => {
90
- const record = recordValue(part);
91
- return record?.type === "text" && typeof record.text === "string" ? [record.text] : [];
92
- }).join("\n");
93
- }
94
- function extractedField(content, label) {
95
- const prefix = `${label}:`;
96
- const line = content.split("\n").find((candidate) => candidate.startsWith(prefix));
97
- return line ? safeLine(line.slice(prefix.length), "", 512) : "";
98
- }
99
- function payloadPreview(content) {
100
- const marker = "\nPayload:\n";
101
- const start = content.indexOf(marker);
102
- if (start < 0) return "";
103
- for (const line of content.slice(start + marker.length).split("\n")) {
104
- const preview = safeLine(line, "", 1024);
105
- if (preview) return preview;
106
- }
107
- return "";
108
- }
109
- function optionalLine(value) {
110
- return typeof value === "string" ? safeLine(value, "", 512) : "";
111
- }
112
- function renderStatus(state) {
113
- switch (state) {
114
- case "failed":
115
- return "failed";
116
- case "cancelled":
117
- return "cancelled";
118
- case "interrupted":
119
- return "interrupted";
120
- case "closed":
121
- return "closed";
122
- case "partial":
123
- case "blocked":
124
- case "needs-input":
125
- case "abstained":
126
- case "stale":
127
- return "warning";
128
- default:
129
- return "completed";
130
- }
131
- }
132
- var ExactText = class {
133
- constructor(value, style = (text) => text) {
134
- this.value = value;
135
- this.style = style;
136
- }
137
- value;
138
- style;
139
- render(width) {
140
- const safeWidth = Math.max(1, width);
141
- return this.value.split("\n").flatMap((line) => hardWrapExact(line, safeWidth)).map(this.style);
142
- }
143
- invalidate() {
144
- }
145
- };
146
- function hardWrapExact(value, width) {
147
- if (value.length === 0) return [""];
148
- const columns = visibleWidth(value);
149
- if (columns === 0) return [value];
150
- const lines = [];
151
- let column = 0;
152
- while (column < columns) {
153
- const chunk = sliceByColumn(value, column, width, true);
154
- const chunkWidth = visibleWidth(chunk);
155
- if (chunkWidth > 0) {
156
- lines.push(chunk);
157
- column += chunkWidth;
158
- continue;
159
- }
160
- const oversized = sliceByColumn(value, column, width, false);
161
- const oversizedWidth = visibleWidth(oversized);
162
- lines.push("?".repeat(width));
163
- column += Math.max(1, oversizedWidth);
164
- }
165
- return lines;
166
- }
167
-
168
- export {
169
- SUBAGENT_COMPLETION_MESSAGE_TYPE,
170
- renderCompletionMessage
171
- };
172
- //# sourceMappingURL=chunk-IWC32VPY.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/completion-render.ts"],
4
- "sourcesContent": ["import type { MessageRenderer, Theme } from \"@earendil-works/pi-coding-agent\";\nimport { Box, type Component, Spacer, sliceByColumn, visibleWidth } from \"@earendil-works/pi-tui\";\nimport { MAX_TOOL_MESSAGE_BYTES } from \"./limits.js\";\nimport {\n\tCOLLAPSED_LIST_LIMIT,\n\texpansionHint,\n\ttype RenderStatus,\n\trecordList,\n\trecordValue,\n\tsafeBlock,\n\tsafeLine,\n\tstatusBadge,\n} from \"./render-common.js\";\n\nexport const SUBAGENT_COMPLETION_MESSAGE_TYPE = \"pi-subagent-completion\";\n\nexport const renderCompletionMessage: MessageRenderer = (message, options, theme) => {\n\tconst box = new Box(options.outputPad, 1, (text) => theme.bg(\"customMessageBg\", text));\n\tif (options.expanded) {\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\ttheme.fg(\"customMessageLabel\", theme.bold(`[${SUBAGENT_COMPLETION_MESSAGE_TYPE}]`)),\n\t\t\t),\n\t\t);\n\t\tbox.addChild(new Spacer(1));\n\t\tbox.addChild(\n\t\t\tnew ExactText(\n\t\t\t\tsafeBlock(messageText(message.content), \"(no completion content)\", MAX_TOOL_MESSAGE_BYTES),\n\t\t\t\t(text) => theme.fg(\"customMessageText\", text),\n\t\t\t),\n\t\t);\n\t\treturn box;\n\t}\n\n\tbox.addChild(new ExactText(collapsedCompletion(message.content, message.details, theme)));\n\treturn box;\n};\n\nfunction collapsedCompletion(contentValue: unknown, detailsValue: unknown, theme: Theme): string {\n\tconst content = safeBlock(messageText(contentValue), \"\", MAX_TOOL_MESSAGE_BYTES);\n\tconst details = recordValue(detailsValue) ?? {};\n\tconst completions = recordList(details.completions);\n\tif (completions.length > 0 || details.completionCount !== undefined) {\n\t\treturn collapsedBatch(details, completions, theme);\n\t}\n\treturn collapsedSingle(content, details, theme);\n}\n\nfunction collapsedSingle(content: string, details: Record<string, unknown>, theme: Theme): string {\n\tconst agent = optionalLine(details.agent) || extractedField(content, \"Agent\") || \"subagent\";\n\tconst state = optionalLine(details.state) || extractedField(content, \"State\") || \"completed\";\n\tconst task = optionalLine(details.task) || extractedField(content, \"Task\");\n\tconst payload = payloadPreview(content);\n\tconst lines = [\n\t\t`${statusBadge(theme, renderStatus(state))}${theme.fg(\"muted\", \" \u00B7 \")}${theme.fg(\"customMessageLabel\", theme.bold(agent))}`,\n\t];\n\tif (task) lines.push(`${theme.fg(\"muted\", \"Task: \")}${theme.fg(\"customMessageText\", task)}`);\n\tif (payload) {\n\t\tlines.push(`${theme.fg(\"muted\", \"Payload: \")}${theme.fg(\"customMessageText\", payload)}`);\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction collapsedBatch(\n\tdetails: Record<string, unknown>,\n\tcompletions: Record<string, unknown>[],\n\ttheme: Theme,\n): string {\n\tconst declaredCount =\n\t\ttypeof details.completionCount === \"number\" && Number.isFinite(details.completionCount)\n\t\t\t? Math.max(0, Math.floor(details.completionCount))\n\t\t\t: completions.length;\n\tconst count = Math.max(declaredCount, completions.length);\n\tconst statuses = completions.map((completion) => renderStatus(optionalLine(completion.state)));\n\tconst icon = statuses.includes(\"failed\")\n\t\t? theme.fg(\"error\", \"\u2717\")\n\t\t: statuses.some((status) => status !== \"completed\" && status !== \"closed\")\n\t\t\t? theme.fg(\"warning\", \"\u25D0\")\n\t\t\t: theme.fg(\"success\", \"\u2713\");\n\tconst lines = [\n\t\t`${icon} ${theme.fg(\"customMessageLabel\", theme.bold(`${count} subagent completions`))}`,\n\t];\n\tfor (const completion of completions.slice(0, COLLAPSED_LIST_LIMIT)) {\n\t\tconst agent = optionalLine(completion.agent) || \"subagent\";\n\t\tconst state = optionalLine(completion.state) || \"completed\";\n\t\tconst task = optionalLine(completion.task);\n\t\tlines.push(\n\t\t\t`${theme.fg(\"muted\", \"\u2022 \")}${theme.fg(\"accent\", agent)} \u00B7 ${statusBadge(theme, renderStatus(state))}${task ? theme.fg(\"dim\", ` \u2014 ${task}`) : \"\"}`,\n\t\t);\n\t}\n\tconst visibleCount = Math.min(completions.length, COLLAPSED_LIST_LIMIT);\n\tif (count > visibleCount) {\n\t\tlines.push(theme.fg(\"muted\", `\u2026 ${count - visibleCount} more`));\n\t}\n\tlines.push(expansionHint());\n\treturn lines.join(\"\\n\");\n}\n\nfunction messageText(value: unknown): string {\n\tif (typeof value === \"string\") return value;\n\tif (!Array.isArray(value)) return \"\";\n\treturn value\n\t\t.flatMap((part) => {\n\t\t\tconst record = recordValue(part);\n\t\t\treturn record?.type === \"text\" && typeof record.text === \"string\" ? [record.text] : [];\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction extractedField(content: string, label: string): string {\n\tconst prefix = `${label}:`;\n\tconst line = content.split(\"\\n\").find((candidate) => candidate.startsWith(prefix));\n\treturn line ? safeLine(line.slice(prefix.length), \"\", 512) : \"\";\n}\n\nfunction payloadPreview(content: string): string {\n\tconst marker = \"\\nPayload:\\n\";\n\tconst start = content.indexOf(marker);\n\tif (start < 0) return \"\";\n\tfor (const line of content.slice(start + marker.length).split(\"\\n\")) {\n\t\tconst preview = safeLine(line, \"\", 1024);\n\t\tif (preview) return preview;\n\t}\n\treturn \"\";\n}\n\nfunction optionalLine(value: unknown): string {\n\treturn typeof value === \"string\" ? safeLine(value, \"\", 512) : \"\";\n}\n\nfunction renderStatus(state: string): RenderStatus {\n\tswitch (state) {\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"cancelled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"interrupted\":\n\t\t\treturn \"interrupted\";\n\t\tcase \"closed\":\n\t\t\treturn \"closed\";\n\t\tcase \"partial\":\n\t\tcase \"blocked\":\n\t\tcase \"needs-input\":\n\t\tcase \"abstained\":\n\t\tcase \"stale\":\n\t\t\treturn \"warning\";\n\t\tdefault:\n\t\t\treturn \"completed\";\n\t}\n}\n\nclass ExactText implements Component {\n\tconstructor(\n\t\tprivate readonly value: string,\n\t\tprivate readonly style: (text: string) => string = (text) => text,\n\t) {}\n\n\trender(width: number): string[] {\n\t\tconst safeWidth = Math.max(1, width);\n\t\treturn this.value\n\t\t\t.split(\"\\n\")\n\t\t\t.flatMap((line) => hardWrapExact(line, safeWidth))\n\t\t\t.map(this.style);\n\t}\n\n\tinvalidate(): void {}\n}\n\nfunction hardWrapExact(value: string, width: number): string[] {\n\tif (value.length === 0) return [\"\"];\n\tconst columns = visibleWidth(value);\n\tif (columns === 0) return [value];\n\tconst lines: string[] = [];\n\tlet column = 0;\n\twhile (column < columns) {\n\t\tconst chunk = sliceByColumn(value, column, width, true);\n\t\tconst chunkWidth = visibleWidth(chunk);\n\t\tif (chunkWidth > 0) {\n\t\t\tlines.push(chunk);\n\t\t\tcolumn += chunkWidth;\n\t\t\tcontinue;\n\t\t}\n\t\tconst oversized = sliceByColumn(value, column, width, false);\n\t\tconst oversizedWidth = visibleWidth(oversized);\n\t\tlines.push(\"?\".repeat(width));\n\t\tcolumn += Math.max(1, oversizedWidth);\n\t}\n\treturn lines;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }