@narumitw/pi-subagents 2.0.6 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +171 -60
  2. package/dist/chunks/{auto-transport-SY2VHUFH.ts → auto-transport-FUUKFDIG.ts} +6 -6
  3. package/dist/chunks/{capability-grant-CGEWOEKE.ts → capability-grant-PR72SWWS.ts} +4 -4
  4. package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-2LMJU25E.ts} +172 -74
  5. package/dist/chunks/chunk-2LMJU25E.ts.map +7 -0
  6. package/dist/chunks/{chunk-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
  7. package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
  8. package/dist/chunks/chunk-6H6TBBED.ts +108 -0
  9. package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
  10. package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-6NSJVPXX.ts} +6 -16
  11. package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-6NSJVPXX.ts.map} +2 -2
  12. package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
  13. package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
  14. package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
  15. package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
  16. package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
  17. package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
  18. package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
  19. package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
  20. package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
  21. package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
  22. package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
  23. package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
  24. package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
  25. package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
  26. package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
  27. package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
  28. package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
  29. package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
  30. package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
  31. package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
  32. package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
  33. package/dist/chunks/chunk-NLT67IZS.ts +322 -0
  34. package/dist/chunks/chunk-NLT67IZS.ts.map +7 -0
  35. package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
  36. package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
  37. package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
  38. package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
  39. package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
  40. package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
  41. package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
  42. package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
  43. package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
  44. package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
  45. package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
  46. package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
  47. package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
  48. package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
  49. package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
  50. package/dist/chunks/{chunk-434NII74.ts → chunk-YU53SHA7.ts} +54 -8
  51. package/dist/chunks/chunk-YU53SHA7.ts.map +7 -0
  52. package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-RSJU6BXL.ts} +5 -4
  53. package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
  54. package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-ABHYNGQ7.ts} +297 -231
  55. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +7 -0
  56. package/dist/chunks/{consult-IV7UBNQQ.ts → consult-LJU3IQY5.ts} +14 -13
  57. package/dist/chunks/consult-LJU3IQY5.ts.map +7 -0
  58. package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
  59. package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
  60. package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
  61. package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
  62. package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
  63. package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
  64. package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
  65. package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
  66. package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-UY3PY6E5.ts} +11 -7
  67. package/dist/chunks/persistence-UY3PY6E5.ts.map +7 -0
  68. package/dist/chunks/{registry-E6XPJB7L.ts → registry-BT54L6CY.ts} +136 -15
  69. package/dist/chunks/registry-BT54L6CY.ts.map +7 -0
  70. package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
  71. package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
  72. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
  73. package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
  74. package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
  75. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
  76. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
  77. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
  78. package/dist/index.ts +682 -82
  79. package/dist/index.ts.map +3 -3
  80. package/docs/async-runtime-protocol.md +83 -0
  81. package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
  82. package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
  83. package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
  84. package/docs/pi-subagents-diagrams.md +183 -0
  85. package/package.json +9 -8
  86. package/src/agents/types.ts +2 -0
  87. package/src/async-subagent-benchmark.ts +532 -0
  88. package/src/completion-delivery.ts +71 -4
  89. package/src/completion-render.ts +1 -0
  90. package/src/completion-requirement.ts +479 -0
  91. package/src/config-registration.ts +5 -5
  92. package/src/config-status.ts +66 -70
  93. package/src/config-ui.ts +244 -150
  94. package/src/consult-registration.ts +4 -12
  95. package/src/consult-resources.ts +1 -1
  96. package/src/consult.ts +3 -8
  97. package/src/delegation-contract.ts +55 -9
  98. package/src/execution-plan.ts +1 -1
  99. package/src/execution-ui.ts +40 -29
  100. package/src/execution.ts +2 -3
  101. package/src/inspect.ts +24 -1
  102. package/src/orchestration-metrics.ts +1 -1
  103. package/src/panel-execution.ts +2 -3
  104. package/src/panel-failure.ts +1 -1
  105. package/src/panel-render.ts +1 -1
  106. package/src/parallel-limit-ui.ts +6 -5
  107. package/src/params.ts +2 -1
  108. package/src/persistence.ts +9 -0
  109. package/src/process-control.ts +43 -0
  110. package/src/registry-types.ts +5 -0
  111. package/src/registry.ts +162 -18
  112. package/src/render.ts +2 -1
  113. package/src/rpc-transport.ts +1 -1
  114. package/src/runner-outcome.ts +1 -1
  115. package/src/runner-result.ts +1 -1
  116. package/src/runner-types.ts +102 -0
  117. package/src/runner.ts +11 -192
  118. package/src/session-guidance-contract.ts +309 -0
  119. package/src/settings/inspection.ts +27 -0
  120. package/src/settings/schema.ts +9 -0
  121. package/src/settings-reader.ts +7 -0
  122. package/src/settings.ts +20 -0
  123. package/src/spawn-idempotency.ts +5 -0
  124. package/src/stateful-agent-view.ts +15 -19
  125. package/src/stateful-guidance.ts +11 -18
  126. package/src/stateful-limit-ui.ts +23 -20
  127. package/src/stateful-limits.ts +10 -10
  128. package/src/stateful-registration.ts +126 -36
  129. package/src/stateful-render.ts +27 -2
  130. package/src/subagent-details.ts +43 -0
  131. package/src/subagents-extension.ts +116 -68
  132. package/src/subagents.ts +2 -0
  133. package/src/subprocess-transport.ts +2 -1
  134. package/src/supervision.ts +2 -1
  135. package/src/timeout-finalization.ts +1 -1
  136. package/src/tool-schema-compatibility.ts +73 -0
  137. package/src/transport-types.ts +6 -0
  138. package/src/transport-ui.ts +18 -46
  139. package/src/usage-recording-config.ts +13 -0
  140. package/src/usage-recording-store.ts +183 -0
  141. package/src/usage-recording.ts +478 -0
  142. package/src/verification-harness.ts +1 -1
  143. package/src/workflow-ui.ts +17 -9
  144. package/dist/chunks/chunk-434NII74.ts.map +0 -7
  145. package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
  146. package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
  147. package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
  148. package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
  149. package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
  150. package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
  151. package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
  152. package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
  153. package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
  154. package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
  155. package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
  156. package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
  157. package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
  158. package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
  159. package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
  160. package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
  161. package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
  162. package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
  163. package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
  164. package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
  165. /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
  166. /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
  167. /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
  168. /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
  169. /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
  170. /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
  171. /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
  172. /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
  173. /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-RSJU6BXL.ts.map} +0 -0
  174. /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
  175. /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
  176. /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
  177. /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
  178. /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
  179. /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
  180. /package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts.map → spawn-idempotency-BNHOSMZW.ts.map} +0 -0
@@ -1,24 +1,29 @@
1
1
  // @generated by scripts/build-runtime.mjs; do not edit.
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
- import {
4
- resolvePiInvocation
5
- } from "./chunk-IGAMVWFN.ts";
6
3
  import {
7
4
  classifyStructuredOutcome
8
5
  } from "./chunk-47SK2QYC.ts";
9
6
  import {
10
7
  revokeCapabilityGrant
11
- } from "./chunk-HKC4ES4B.ts";
8
+ } from "./chunk-YPJEN6NU.ts";
9
+ import {
10
+ JsonLineDecoder,
11
+ KILL_GRACE_MS,
12
+ terminateProcess
13
+ } from "./chunk-6H6TBBED.ts";
14
+ import {
15
+ resolvePiInvocation
16
+ } from "./chunk-IGAMVWFN.ts";
12
17
  import {
13
18
  buildTimeoutFinalizationPrompt,
14
19
  resolveTimeoutFinalizationMs
15
- } from "./chunk-G3RSMSXJ.ts";
20
+ } from "./chunk-NTRPLF46.ts";
16
21
  import {
17
22
  formatResultFailure,
18
23
  getFinalOutput,
19
24
  getResultFinalOutput,
20
25
  isResultError
21
- } from "./chunk-AEUYS7JC.ts";
26
+ } from "./chunk-X4NMONPE.ts";
22
27
  import {
23
28
  TURN_TERMINATION_VERSION,
24
29
  TimeoutProgressJournal,
@@ -42,69 +47,6 @@ import {
42
47
  truncateUtf8
43
48
  } from "./chunk-H3FP6DLR.ts";
44
49
 
45
- // src/protocol.ts
46
- import { StringDecoder } from "node:string_decoder";
47
- var DEFAULT_MAX_LINE_BYTES = 256 * 1024;
48
- var JsonLineDecoder = class {
49
- constructor(options) {
50
- this.options = options;
51
- const maxLineBytes = options.maxLineBytes ?? DEFAULT_MAX_LINE_BYTES;
52
- if (!Number.isSafeInteger(maxLineBytes) || maxLineBytes < 1) {
53
- throw new Error("JSON line limit must be a positive safe integer");
54
- }
55
- this.maxLineBytes = maxLineBytes;
56
- }
57
- options;
58
- buffer = "";
59
- droppingOversizedLine = false;
60
- maxLineBytes;
61
- decoder = new StringDecoder("utf8");
62
- push(chunk) {
63
- this.buffer += typeof chunk === "string" ? chunk : this.decoder.write(chunk);
64
- this.drain(false);
65
- }
66
- finish() {
67
- this.buffer += this.decoder.end();
68
- this.drain(true);
69
- this.buffer = "";
70
- this.droppingOversizedLine = false;
71
- }
72
- drain(flush) {
73
- while (true) {
74
- const newline = this.buffer.indexOf("\n");
75
- if (newline < 0) break;
76
- const line = this.buffer.slice(0, newline).replace(/\r$/, "");
77
- this.buffer = this.buffer.slice(newline + 1);
78
- if (this.droppingOversizedLine) {
79
- this.droppingOversizedLine = false;
80
- continue;
81
- }
82
- this.processLine(line);
83
- }
84
- if (!flush && Buffer.byteLength(this.buffer, "utf8") > this.maxLineBytes) {
85
- this.options.onOversized?.(Buffer.byteLength(this.buffer, "utf8"));
86
- this.buffer = "";
87
- this.droppingOversizedLine = true;
88
- }
89
- if (flush && this.buffer.length > 0 && !this.droppingOversizedLine) {
90
- this.processLine(this.buffer.replace(/\r$/, ""));
91
- }
92
- }
93
- processLine(line) {
94
- if (!line.trim()) return;
95
- const bytes = Buffer.byteLength(line, "utf8");
96
- if (bytes > this.maxLineBytes) {
97
- this.options.onOversized?.(bytes);
98
- return;
99
- }
100
- try {
101
- this.options.onValue(JSON.parse(line));
102
- } catch {
103
- this.options.onMalformed?.(line);
104
- }
105
- }
106
- };
107
-
108
50
  // src/runner.ts
109
51
  import { spawn } from "node:child_process";
110
52
  import * as fs from "node:fs";
@@ -168,7 +110,6 @@ function mergeUsageStats(target, addition) {
168
110
  }
169
111
 
170
112
  // src/runner.ts
171
- var KILL_GRACE_MS = 5e3;
172
113
  var MAX_RECENT_ACTIVITY_ITEMS = 10;
173
114
  var MAX_RECENT_ACTIVITY_BYTES = 8 * 1024;
174
115
  var MAX_RECENT_ACTIVITY_ARGUMENT_BYTES = 1024;
@@ -319,39 +260,6 @@ async function writePromptToTempFile(agentName, prompt) {
319
260
  });
320
261
  return { dir: tmpDir, filePath };
321
262
  }
322
- function signalProcess(proc, signal) {
323
- if (process.platform !== "win32" && proc.pid) {
324
- try {
325
- process.kill(-proc.pid, signal);
326
- return;
327
- } catch {
328
- }
329
- }
330
- try {
331
- proc.kill(signal);
332
- } catch {
333
- }
334
- }
335
- function terminateProcess(proc, graceMs = KILL_GRACE_MS) {
336
- const leaderExited = proc.exitCode !== null || proc.signalCode !== null;
337
- const capturedOutputClosed = [proc.stdout, proc.stderr].every(
338
- (stream) => !stream || stream.readableEnded || stream.destroyed
339
- );
340
- let closed = leaderExited && capturedOutputClosed;
341
- const onClose = () => {
342
- closed = true;
343
- };
344
- proc.once("close", onClose);
345
- if (!closed) signalProcess(proc, "SIGTERM");
346
- const escalation = setTimeout(() => {
347
- if (!closed) signalProcess(proc, "SIGKILL");
348
- }, graceMs);
349
- escalation.unref();
350
- return () => {
351
- clearTimeout(escalation);
352
- proc.off("close", onClose);
353
- };
354
- }
355
263
  async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, signal, thinkingLevel, timeoutMs, onUpdate, makeDetails, invocationOverride, launchPolicy) {
356
264
  const agent = agents.find((a) => a.name === agentName);
357
265
  if (!agent) {
@@ -904,10 +812,8 @@ ${message}.`,
904
812
  }
905
813
 
906
814
  export {
907
- JsonLineDecoder,
908
815
  buildFanInContext,
909
816
  mapWithConcurrencyLimit,
910
- terminateProcess,
911
817
  runSingleAgent
912
818
  };
913
- //# sourceMappingURL=chunk-DQMN4OYM.ts.map
819
+ //# sourceMappingURL=chunk-ITVWPNU4.ts.map
@@ -0,0 +1,7 @@
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": "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",
6
+ "names": ["exitCode"]
7
+ }
@@ -119,6 +119,7 @@ function renderStatus(state) {
119
119
  return "interrupted";
120
120
  case "closed":
121
121
  return "closed";
122
+ case "partial":
122
123
  case "blocked":
123
124
  case "needs-input":
124
125
  case "abstained":
@@ -168,4 +169,4 @@ export {
168
169
  SUBAGENT_COMPLETION_MESSAGE_TYPE,
169
170
  renderCompletionMessage
170
171
  };
171
- //# sourceMappingURL=chunk-QDVGH2X7.ts.map
172
+ //# sourceMappingURL=chunk-IWC32VPY.ts.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 \"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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",
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
6
  "names": []
7
7
  }
@@ -43,14 +43,45 @@ var DelegationContractSchema = Type.Object(
43
43
  requestedAuthority: Type.Optional(
44
44
  Type.Object(
45
45
  {
46
- capabilities: Type.Optional(BoundedItems),
47
- tools: Type.Optional(BoundedItems),
48
- readPaths: Type.Optional(BoundedItems),
49
- writePaths: Type.Optional(BoundedItems),
50
- network: Type.Optional(StringEnum(AUTHORITY_REQUIREMENTS)),
51
- secrets: Type.Optional(StringEnum(AUTHORITY_REQUIREMENTS))
46
+ capabilities: Type.Optional(
47
+ Type.Array(BoundedItem, {
48
+ maxItems: MAX_ITEMS,
49
+ description: "Capabilities requested from the selected agent manifest."
50
+ })
51
+ ),
52
+ tools: Type.Optional(
53
+ Type.Array(BoundedItem, {
54
+ maxItems: MAX_ITEMS,
55
+ description: "Tools that enforcement may narrow to the selected agent's available set."
56
+ })
57
+ ),
58
+ readPaths: Type.Optional(
59
+ Type.Array(BoundedItem, {
60
+ maxItems: MAX_ITEMS,
61
+ description: 'Audit metadata only; enforcement "enforce" rejects non-empty readPaths because path scope is unsupported.'
62
+ })
63
+ ),
64
+ writePaths: Type.Optional(
65
+ Type.Array(BoundedItem, {
66
+ maxItems: MAX_ITEMS,
67
+ description: 'Audit metadata only; enforcement "enforce" rejects non-empty writePaths because path scope is unsupported.'
68
+ })
69
+ ),
70
+ network: Type.Optional(
71
+ StringEnum(AUTHORITY_REQUIREMENTS, {
72
+ description: 'Audit metadata only; enforcement "enforce" rejects denied or required network guarantees as unsupported.'
73
+ })
74
+ ),
75
+ secrets: Type.Optional(
76
+ StringEnum(AUTHORITY_REQUIREMENTS, {
77
+ description: 'Audit metadata only; enforcement "enforce" rejects denied or required secret guarantees as unsupported.'
78
+ })
79
+ )
52
80
  },
53
- { additionalProperties: false }
81
+ {
82
+ additionalProperties: false,
83
+ description: "Only capabilities and tools have executor enforcement; readPaths, writePaths, network, and secrets are unsupported guarantees."
84
+ }
54
85
  )
55
86
  ),
56
87
  acceptanceCriteria: Type.Optional(BoundedItems),
@@ -80,9 +111,16 @@ var DelegationContractSchema = Type.Object(
80
111
  )
81
112
  ),
82
113
  sideEffectPolicy: Type.Optional(StringEnum(DELEGATION_SIDE_EFFECT_POLICIES)),
83
- enforcement: Type.Optional(StringEnum(DELEGATION_ENFORCEMENT_MODES))
114
+ enforcement: Type.Optional(
115
+ StringEnum(DELEGATION_ENFORCEMENT_MODES, {
116
+ description: "Defaults to audit; enforce rejects unsupported requestedAuthority guarantees before child launch."
117
+ })
118
+ )
84
119
  },
85
- { additionalProperties: false }
120
+ {
121
+ additionalProperties: false,
122
+ description: "Advanced delegation contract. For ordinary delegation omit this object; use it only for explicit acceptance, authority, evidence, or admission semantics."
123
+ }
86
124
  );
87
125
  function normalizeDelegationContract(value) {
88
126
  if (!isPlainObject(value)) return void 0;
@@ -321,4 +359,4 @@ export {
321
359
  normalizeDelegationContract,
322
360
  appendDelegationContract
323
361
  };
324
- //# sourceMappingURL=chunk-I2FAK44T.ts.map
362
+ //# sourceMappingURL=chunk-JSZIP73U.ts.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/delegation-contract.ts"],
4
+ "sourcesContent": ["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Type } from \"typebox\";\nimport { redactPrivateText } from \"./context.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, MAX_SUBAGENT_TIMEOUT_MS, truncateUtf8 } from \"./limits.js\";\n\nexport const DELEGATION_CONTRACT_VERSION = \"pi-subagents:delegation:v2\" as const;\nexport const DELEGATION_CONTRACT_LEVELS = [\"minimal\", \"full\"] as const;\nexport const DELEGATION_ENFORCEMENT_MODES = [\"audit\", \"enforce\"] as const;\nexport const AUTHORITY_REQUIREMENTS = [\"unspecified\", \"denied\", \"required\"] as const;\nexport const DELEGATION_SIDE_EFFECT_POLICIES = [\"read-only\", \"idempotent\", \"mutating\"] as const;\n\nconst MAX_IDENTIFIER_BYTES = 256;\nconst MAX_TEXT_BYTES = 16 * 1024;\nconst MAX_ITEM_BYTES = 4 * 1024;\nconst MAX_ITEMS = 50;\nconst MAX_TURNS_OR_TOOLS = 1_000_000;\n\nconst BoundedString = Type.String({ maxLength: MAX_TEXT_BYTES });\nconst BoundedItem = Type.String({ maxLength: MAX_ITEM_BYTES });\nconst BoundedItems = Type.Array(BoundedItem, { maxItems: MAX_ITEMS });\nconst DependencySchema = Type.Object(\n\t{\n\t\ttaskId: Type.String({ minLength: 1, maxLength: MAX_IDENTIFIER_BYTES }),\n\t\tartifactId: Type.Optional(Type.String({ minLength: 1, maxLength: MAX_IDENTIFIER_BYTES })),\n\t\tversion: Type.Optional(Type.String({ minLength: 1, maxLength: MAX_IDENTIFIER_BYTES })),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport const DelegationContractSchema = Type.Object(\n\t{\n\t\tversion: Type.Literal(DELEGATION_CONTRACT_VERSION),\n\t\tlevel: StringEnum(DELEGATION_CONTRACT_LEVELS),\n\t\ttaskId: Type.String({ minLength: 1, maxLength: MAX_IDENTIFIER_BYTES }),\n\t\tobjective: BoundedString,\n\t\tnonGoals: Type.Optional(BoundedItems),\n\t\tdependencies: Type.Optional(Type.Array(DependencySchema, { maxItems: MAX_ITEMS })),\n\t\trequiredInputs: Type.Optional(BoundedItems),\n\t\trequestedAuthority: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\tcapabilities: Type.Optional(\n\t\t\t\t\t\tType.Array(BoundedItem, {\n\t\t\t\t\t\t\tmaxItems: MAX_ITEMS,\n\t\t\t\t\t\t\tdescription: \"Capabilities requested from the selected agent manifest.\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\ttools: Type.Optional(\n\t\t\t\t\t\tType.Array(BoundedItem, {\n\t\t\t\t\t\t\tmaxItems: MAX_ITEMS,\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Tools that enforcement may narrow to the selected agent's available set.\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\treadPaths: Type.Optional(\n\t\t\t\t\t\tType.Array(BoundedItem, {\n\t\t\t\t\t\t\tmaxItems: MAX_ITEMS,\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Audit metadata only; enforcement \"enforce\" rejects non-empty readPaths because path scope is unsupported.',\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\twritePaths: Type.Optional(\n\t\t\t\t\t\tType.Array(BoundedItem, {\n\t\t\t\t\t\t\tmaxItems: MAX_ITEMS,\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Audit metadata only; enforcement \"enforce\" rejects non-empty writePaths because path scope is unsupported.',\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\tnetwork: Type.Optional(\n\t\t\t\t\t\tStringEnum(AUTHORITY_REQUIREMENTS, {\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Audit metadata only; enforcement \"enforce\" rejects denied or required network guarantees as unsupported.',\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\tsecrets: Type.Optional(\n\t\t\t\t\t\tStringEnum(AUTHORITY_REQUIREMENTS, {\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Audit metadata only; enforcement \"enforce\" rejects denied or required secret guarantees as unsupported.',\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Only capabilities and tools have executor enforcement; readPaths, writePaths, network, and secrets are unsupported guarantees.\",\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tacceptanceCriteria: Type.Optional(BoundedItems),\n\t\trequiredEvidence: Type.Optional(BoundedItems),\n\t\tbudget: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\ttimeoutMs: Type.Optional(Type.Integer({ minimum: 1, maximum: MAX_SUBAGENT_TIMEOUT_MS })),\n\t\t\t\t\tmaxTurns: Type.Optional(Type.Integer({ minimum: 1, maximum: MAX_TURNS_OR_TOOLS })),\n\t\t\t\t\tmaxToolCalls: Type.Optional(Type.Integer({ minimum: 1, maximum: MAX_TURNS_OR_TOOLS })),\n\t\t\t\t},\n\t\t\t\t{ additionalProperties: false },\n\t\t\t),\n\t\t),\n\t\tadmission: Type.Optional(\n\t\t\tType.Object(\n\t\t\t\t{\n\t\t\t\t\tcontextPressure: StringEnum([\"low\", \"medium\", \"high\"] as const),\n\t\t\t\t\tindependentWorkItems: Type.Integer({ minimum: 1, maximum: 2 }),\n\t\t\t\t\tcoupling: StringEnum([\"dense\", \"sparse\"] as const),\n\t\t\t\t\tverificationRequired: Type.Boolean(),\n\t\t\t\t\tverificationAvailable: Type.Boolean(),\n\t\t\t\t\tbudgetAllowsChildren: Type.Boolean(),\n\t\t\t\t\trequirementsComplete: Type.Boolean(),\n\t\t\t\t},\n\t\t\t\t{ additionalProperties: false },\n\t\t\t),\n\t\t),\n\t\tsideEffectPolicy: Type.Optional(StringEnum(DELEGATION_SIDE_EFFECT_POLICIES)),\n\t\tenforcement: Type.Optional(\n\t\t\tStringEnum(DELEGATION_ENFORCEMENT_MODES, {\n\t\t\t\tdescription:\n\t\t\t\t\t\"Defaults to audit; enforce rejects unsupported requestedAuthority guarantees before child launch.\",\n\t\t\t}),\n\t\t),\n\t},\n\t{\n\t\tadditionalProperties: false,\n\t\tdescription:\n\t\t\t\"Advanced delegation contract. For ordinary delegation omit this object; use it only for explicit acceptance, authority, evidence, or admission semantics.\",\n\t},\n);\n\nexport interface DelegationDependency {\n\ttaskId: string;\n\tartifactId?: string;\n\tversion?: string;\n}\n\nexport interface DelegationAuthorityRequest {\n\tcapabilities?: string[];\n\ttools?: string[];\n\treadPaths?: string[];\n\twritePaths?: string[];\n\tnetwork?: (typeof AUTHORITY_REQUIREMENTS)[number];\n\tsecrets?: (typeof AUTHORITY_REQUIREMENTS)[number];\n}\n\nexport interface DelegationBudgetRequest {\n\ttimeoutMs?: number;\n\tmaxTurns?: number;\n\tmaxToolCalls?: number;\n}\n\nexport interface DelegationAdmissionRequest {\n\tcontextPressure: \"low\" | \"medium\" | \"high\";\n\tindependentWorkItems: number;\n\tcoupling: \"dense\" | \"sparse\";\n\tverificationRequired: boolean;\n\tverificationAvailable: boolean;\n\tbudgetAllowsChildren: boolean;\n\trequirementsComplete: boolean;\n}\n\nexport interface DelegationContract {\n\tversion: typeof DELEGATION_CONTRACT_VERSION;\n\tlevel: (typeof DELEGATION_CONTRACT_LEVELS)[number];\n\ttaskId: string;\n\tobjective: string;\n\tnonGoals: string[];\n\tdependencies: DelegationDependency[];\n\trequiredInputs: string[];\n\trequestedAuthority?: DelegationAuthorityRequest;\n\tacceptanceCriteria: string[];\n\trequiredEvidence: string[];\n\tbudget?: DelegationBudgetRequest;\n\tadmission?: DelegationAdmissionRequest;\n\tsideEffectPolicy: (typeof DELEGATION_SIDE_EFFECT_POLICIES)[number];\n\tenforcement: (typeof DELEGATION_ENFORCEMENT_MODES)[number];\n}\n\nexport interface AppendedDelegationContract {\n\ttext: string;\n\tcontract?: DelegationContract;\n\ttruncated: boolean;\n}\n\nexport function normalizeDelegationContract(value: unknown): DelegationContract | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\tif (\n\t\t!hasOnlyKeys(value, [\n\t\t\t\"version\",\n\t\t\t\"level\",\n\t\t\t\"taskId\",\n\t\t\t\"objective\",\n\t\t\t\"nonGoals\",\n\t\t\t\"dependencies\",\n\t\t\t\"requiredInputs\",\n\t\t\t\"requestedAuthority\",\n\t\t\t\"acceptanceCriteria\",\n\t\t\t\"requiredEvidence\",\n\t\t\t\"budget\",\n\t\t\t\"admission\",\n\t\t\t\"sideEffectPolicy\",\n\t\t\t\"enforcement\",\n\t\t])\n\t) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\tvalue.version !== DELEGATION_CONTRACT_VERSION ||\n\t\ttypeof value.level !== \"string\" ||\n\t\t!DELEGATION_CONTRACT_LEVELS.includes(\n\t\t\tvalue.level as (typeof DELEGATION_CONTRACT_LEVELS)[number],\n\t\t) ||\n\t\ttypeof value.taskId !== \"string\" ||\n\t\t!value.taskId.trim() ||\n\t\ttypeof value.objective !== \"string\"\n\t) {\n\t\treturn undefined;\n\t}\n\tconst taskId = bounded(value.taskId, MAX_IDENTIFIER_BYTES);\n\tconst objective = bounded(value.objective, MAX_TEXT_BYTES);\n\tif (!taskId || !objective) return undefined;\n\tconst nonGoals = normalizeStrings(value.nonGoals);\n\tconst requiredInputs = normalizeStrings(value.requiredInputs);\n\tconst acceptanceCriteria = normalizeStrings(value.acceptanceCriteria);\n\tconst requiredEvidence = normalizeStrings(value.requiredEvidence);\n\tif (!nonGoals || !requiredInputs || !acceptanceCriteria || !requiredEvidence) return undefined;\n\tconst dependencies = normalizeDependencies(value.dependencies);\n\tif (!dependencies) return undefined;\n\tconst authority = normalizeAuthority(value.requestedAuthority);\n\tif (authority === false) return undefined;\n\tconst budget = normalizeBudget(value.budget);\n\tif (budget === false) return undefined;\n\tconst admission = normalizeAdmission(value.admission);\n\tif (admission === false) return undefined;\n\tconst sideEffectPolicy = value.sideEffectPolicy ?? \"mutating\";\n\tif (\n\t\ttypeof sideEffectPolicy !== \"string\" ||\n\t\t!DELEGATION_SIDE_EFFECT_POLICIES.includes(\n\t\t\tsideEffectPolicy as (typeof DELEGATION_SIDE_EFFECT_POLICIES)[number],\n\t\t)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst enforcement = value.enforcement ?? \"audit\";\n\tif (\n\t\ttypeof enforcement !== \"string\" ||\n\t\t!DELEGATION_ENFORCEMENT_MODES.includes(\n\t\t\tenforcement as (typeof DELEGATION_ENFORCEMENT_MODES)[number],\n\t\t)\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tversion: DELEGATION_CONTRACT_VERSION,\n\t\tlevel: value.level as DelegationContract[\"level\"],\n\t\ttaskId,\n\t\tobjective,\n\t\tnonGoals,\n\t\tdependencies,\n\t\trequiredInputs,\n\t\t...(authority === undefined ? {} : { requestedAuthority: authority }),\n\t\tacceptanceCriteria,\n\t\trequiredEvidence,\n\t\t...(budget === undefined ? {} : { budget }),\n\t\t...(admission === undefined ? {} : { admission }),\n\t\tsideEffectPolicy: sideEffectPolicy as DelegationContract[\"sideEffectPolicy\"],\n\t\tenforcement: enforcement as DelegationContract[\"enforcement\"],\n\t};\n}\n\nexport function appendDelegationContract(\n\tprompt: string,\n\tvalue: unknown,\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): AppendedDelegationContract {\n\tconst contract = normalizeDelegationContract(value);\n\tif (!contract) return { text: prompt, truncated: false };\n\tconst suffix = [\n\t\t\"\",\n\t\t\"Delegation contract:\",\n\t\tJSON.stringify(contract),\n\t\t\"The requested authority is advisory until an executor-owned ExecutionPlan confirms which controls are enforceable and effective.\",\n\t\t\"Acknowledge missing inputs, authority, capabilities, or verification instead of guessing.\",\n\t].join(\"\\n\");\n\tconst suffixBytes = Buffer.byteLength(suffix, \"utf8\");\n\tconst boundedPrompt = truncateUtf8(\n\t\tredactPrivateText(prompt),\n\t\tMath.max(0, maxBytes - suffixBytes),\n\t);\n\tconst text = truncateUtf8(`${boundedPrompt.text}${suffix}`, maxBytes);\n\treturn {\n\t\ttext: text.text,\n\t\tcontract,\n\t\ttruncated: boundedPrompt.truncated || text.truncated,\n\t};\n}\n\nfunction normalizeAdmission(value: unknown): DelegationAdmissionRequest | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (!isPlainObject(value)) return false;\n\tif (\n\t\t!hasOnlyKeys(value, [\n\t\t\t\"contextPressure\",\n\t\t\t\"independentWorkItems\",\n\t\t\t\"coupling\",\n\t\t\t\"verificationRequired\",\n\t\t\t\"verificationAvailable\",\n\t\t\t\"budgetAllowsChildren\",\n\t\t\t\"requirementsComplete\",\n\t\t]) ||\n\t\t![\"low\", \"medium\", \"high\"].includes(String(value.contextPressure)) ||\n\t\t!Number.isSafeInteger(value.independentWorkItems) ||\n\t\tNumber(value.independentWorkItems) < 1 ||\n\t\tNumber(value.independentWorkItems) > 2 ||\n\t\t![\"dense\", \"sparse\"].includes(String(value.coupling)) ||\n\t\ttypeof value.verificationRequired !== \"boolean\" ||\n\t\ttypeof value.verificationAvailable !== \"boolean\" ||\n\t\ttypeof value.budgetAllowsChildren !== \"boolean\" ||\n\t\ttypeof value.requirementsComplete !== \"boolean\"\n\t) {\n\t\treturn false;\n\t}\n\treturn {\n\t\tcontextPressure: value.contextPressure as DelegationAdmissionRequest[\"contextPressure\"],\n\t\tindependentWorkItems: Number(value.independentWorkItems),\n\t\tcoupling: value.coupling as DelegationAdmissionRequest[\"coupling\"],\n\t\tverificationRequired: value.verificationRequired,\n\t\tverificationAvailable: value.verificationAvailable,\n\t\tbudgetAllowsChildren: value.budgetAllowsChildren,\n\t\trequirementsComplete: value.requirementsComplete,\n\t};\n}\n\nfunction normalizeDependencies(value: unknown): DelegationDependency[] | undefined {\n\tif (value === undefined) return [];\n\tif (!Array.isArray(value) || value.length > MAX_ITEMS) return undefined;\n\tconst result: DelegationDependency[] = [];\n\tconst seen = new Set<string>();\n\tfor (const item of value) {\n\t\tif (\n\t\t\t!isPlainObject(item) ||\n\t\t\t!hasOnlyKeys(item, [\"taskId\", \"artifactId\", \"version\"]) ||\n\t\t\ttypeof item.taskId !== \"string\"\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst taskId = bounded(item.taskId, MAX_IDENTIFIER_BYTES);\n\t\tif (!taskId || seen.has(taskId)) return undefined;\n\t\tseen.add(taskId);\n\t\tconst artifactId = optionalString(item.artifactId, MAX_IDENTIFIER_BYTES);\n\t\tconst version = optionalString(item.version, MAX_IDENTIFIER_BYTES);\n\t\tif (artifactId === false || version === false) return undefined;\n\t\tresult.push({\n\t\t\ttaskId,\n\t\t\t...(artifactId === undefined ? {} : { artifactId }),\n\t\t\t...(version === undefined ? {} : { version }),\n\t\t});\n\t}\n\treturn result;\n}\n\nfunction normalizeAuthority(value: unknown): DelegationAuthorityRequest | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (!isPlainObject(value)) return false;\n\tif (\n\t\t!hasOnlyKeys(value, [\"capabilities\", \"tools\", \"readPaths\", \"writePaths\", \"network\", \"secrets\"])\n\t) {\n\t\treturn false;\n\t}\n\tconst capabilities = normalizeOptionalStrings(value.capabilities);\n\tconst tools = normalizeOptionalStrings(value.tools);\n\tconst readPaths = normalizeOptionalStrings(value.readPaths);\n\tconst writePaths = normalizeOptionalStrings(value.writePaths);\n\tif (capabilities === false || tools === false || readPaths === false || writePaths === false) {\n\t\treturn false;\n\t}\n\tconst network = normalizeAuthorityRequirement(value.network);\n\tconst secrets = normalizeAuthorityRequirement(value.secrets);\n\tif (network === false || secrets === false) return false;\n\treturn {\n\t\t...(capabilities === undefined ? {} : { capabilities }),\n\t\t...(tools === undefined ? {} : { tools }),\n\t\t...(readPaths === undefined ? {} : { readPaths }),\n\t\t...(writePaths === undefined ? {} : { writePaths }),\n\t\t...(network === undefined ? {} : { network }),\n\t\t...(secrets === undefined ? {} : { secrets }),\n\t};\n}\n\nfunction normalizeBudget(value: unknown): DelegationBudgetRequest | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (!isPlainObject(value) || !hasOnlyKeys(value, [\"timeoutMs\", \"maxTurns\", \"maxToolCalls\"])) {\n\t\treturn false;\n\t}\n\tconst timeoutMs = optionalInteger(value.timeoutMs, MAX_SUBAGENT_TIMEOUT_MS);\n\tconst maxTurns = optionalInteger(value.maxTurns, MAX_TURNS_OR_TOOLS);\n\tconst maxToolCalls = optionalInteger(value.maxToolCalls, MAX_TURNS_OR_TOOLS);\n\tif (timeoutMs === false || maxTurns === false || maxToolCalls === false) return false;\n\treturn {\n\t\t...(timeoutMs === undefined ? {} : { timeoutMs }),\n\t\t...(maxTurns === undefined ? {} : { maxTurns }),\n\t\t...(maxToolCalls === undefined ? {} : { maxToolCalls }),\n\t};\n}\n\nfunction normalizeStrings(value: unknown): string[] | undefined {\n\tif (value === undefined) return [];\n\tconst normalized = normalizeOptionalStrings(value);\n\treturn normalized === false ? undefined : normalized;\n}\n\nfunction normalizeOptionalStrings(value: unknown): string[] | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (!Array.isArray(value) || value.length > MAX_ITEMS) return false;\n\tconst result: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const item of value) {\n\t\tif (typeof item !== \"string\") return false;\n\t\tconst normalized = bounded(item, MAX_ITEM_BYTES);\n\t\tif (!normalized || seen.has(normalized)) continue;\n\t\tseen.add(normalized);\n\t\tresult.push(normalized);\n\t}\n\treturn result;\n}\n\nfunction normalizeAuthorityRequirement(\n\tvalue: unknown,\n): (typeof AUTHORITY_REQUIREMENTS)[number] | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (\n\t\ttypeof value !== \"string\" ||\n\t\t!AUTHORITY_REQUIREMENTS.includes(value as (typeof AUTHORITY_REQUIREMENTS)[number])\n\t) {\n\t\treturn false;\n\t}\n\treturn value as (typeof AUTHORITY_REQUIREMENTS)[number];\n}\n\nfunction optionalString(value: unknown, maxBytes: number): string | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"string\") return false;\n\tconst normalized = bounded(value, maxBytes);\n\treturn normalized || false;\n}\n\nfunction optionalInteger(value: unknown, max: number): number | undefined | false {\n\tif (value === undefined) return undefined;\n\tif (!Number.isSafeInteger(value) || (value as number) < 1 || (value as number) > max)\n\t\treturn false;\n\treturn value as number;\n}\n\nfunction bounded(value: string, maxBytes: number): string {\n\treturn truncateUtf8(redactPrivateText(value), maxBytes).text.trim();\n}\n\nfunction hasOnlyKeys(value: Record<string, unknown>, allowed: readonly string[]): boolean {\n\treturn Object.keys(value).every((key) => allowed.includes(key));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -328,7 +328,7 @@ function stringList(value) {
328
328
  // src/inspect-registration.ts
329
329
  function registerSubagentInspect(pi, runtime, dependencies = {}) {
330
330
  const loadExecution = cachedModuleLoader(
331
- dependencies.loadExecution ?? (() => import("./inspect-XV2QALMR.ts"))
331
+ dependencies.loadExecution ?? (() => import("./inspect-UH2TKH6E.ts"))
332
332
  );
333
333
  let lifecycleGeneration = 0;
334
334
  pi.on("session_start", () => {
@@ -377,4 +377,4 @@ export {
377
377
  SubagentInspectParams,
378
378
  registerSubagentInspect
379
379
  };
380
- //# sourceMappingURL=chunk-ZHTNCZIA.ts.map
380
+ //# sourceMappingURL=chunk-JU6LUNLP.ts.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-RSUXZD6S.ts";
6
6
  import {
7
7
  isThinkingLevel
8
- } from "./chunk-DPPVEQAM.ts";
8
+ } from "./chunk-4AQSF7AS.ts";
9
9
 
10
10
  // src/agents/discovery.ts
11
11
  import * as fs from "node:fs";
@@ -336,4 +336,4 @@ export {
336
336
  BUILT_IN_AGENTS,
337
337
  discoverAgents
338
338
  };
339
- //# sourceMappingURL=chunk-PSK43Y6A.ts.map
339
+ //# sourceMappingURL=chunk-LASD73CM.ts.map
@@ -19,4 +19,4 @@ export {
19
19
  PI_SUBAGENTS_RPC_PROTOCOL,
20
20
  emptyTransportUsage
21
21
  };
22
- //# sourceMappingURL=chunk-C4L6P266.ts.map
22
+ //# sourceMappingURL=chunk-LEOYDZI3.ts.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/transport-types.ts"],
4
- "sourcesContent": ["import type { SubagentThinkingLevel } from \"./agents/types.js\";\n\nexport const PI_SUBAGENTS_RPC_PROTOCOL = \"pi-subagents:v1\" as const;\n\nexport type EffectiveSubagentTransportKind = \"subprocess\" | \"in-process\" | \"rpc\";\n\nexport type TransportProgressPhase =\n\t| \"queued\"\n\t| \"starting\"\n\t| \"ready\"\n\t| \"accepted\"\n\t| \"running\"\n\t| \"finalizing\"\n\t| \"retrying\"\n\t| \"compacting\"\n\t| \"settled\"\n\t| \"failed\"\n\t| \"interrupted\";\n\nexport interface TransportUsage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\ttotalTokens: number;\n\tcost: number;\n\tturns: number;\n}\n\nexport interface TransportTiming {\n\tqueuedAt?: number;\n\tstartedAt?: number;\n\ttransportStartedAt?: number;\n\treadyAt?: number;\n\tpromptAcceptedAt?: number;\n\tfirstActivityAt?: number;\n\tsettledAt?: number;\n\tcompletionDeliveredAt?: number;\n}\n\nexport interface TransportTelemetry {\n\ttransport?: EffectiveSubagentTransportKind;\n\tselectionReason?: string;\n\tprotocol?: typeof PI_SUBAGENTS_RPC_PROTOCOL;\n\tphase: TransportProgressPhase;\n\tqueuePosition?: number;\n\tupdatedAt: number;\n\ttiming: TransportTiming;\n\tprovider?: string;\n\tmodel?: string;\n\tthinkingLevel?: SubagentThinkingLevel;\n\tusage?: TransportUsage;\n\tfailurePhase?: TransportProgressPhase;\n}\n\nexport type TransportProgressCallback = (progress: TransportTelemetry) => void;\n\nexport function emptyTransportUsage(): TransportUsage {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotalTokens: 0,\n\t\tcost: 0,\n\t\tturns: 0,\n\t};\n}\n"],
5
- "mappings": ";;;;AAEO,IAAM,4BAA4B;AAuDlC,SAAS,sBAAsC;AACrD,SAAO;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,EACR;AACD;",
4
+ "sourcesContent": ["import type { SubagentThinkingLevel } from \"./agents/types.js\";\n\nexport const PI_SUBAGENTS_RPC_PROTOCOL = \"pi-subagents:v1\" as const;\n\nexport type EffectiveSubagentTransportKind = \"subprocess\" | \"in-process\" | \"rpc\";\n\nexport type TransportProgressPhase =\n\t| \"queued\"\n\t| \"starting\"\n\t| \"ready\"\n\t| \"accepted\"\n\t| \"running\"\n\t| \"finalizing\"\n\t| \"retrying\"\n\t| \"compacting\"\n\t| \"settled\"\n\t| \"failed\"\n\t| \"interrupted\";\n\nexport interface TransportUsage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\ttotalTokens: number;\n\tcost: number;\n\tturns: number;\n}\n\nexport interface TransportTiming {\n\tqueuedAt?: number;\n\tstartedAt?: number;\n\ttransportStartedAt?: number;\n\treadyAt?: number;\n\tpromptAcceptedAt?: number;\n\tfirstActivityAt?: number;\n\tsettledAt?: number;\n\tcompletionDeliveredAt?: number;\n}\n\nexport interface TransportTelemetry {\n\ttransport?: EffectiveSubagentTransportKind;\n\tselectionReason?: string;\n\tprotocol?: typeof PI_SUBAGENTS_RPC_PROTOCOL;\n\tphase: TransportProgressPhase;\n\tqueuePosition?: number;\n\tupdatedAt: number;\n\ttiming: TransportTiming;\n\tprovider?: string;\n\tmodel?: string;\n\tthinkingLevel?: SubagentThinkingLevel;\n\tusage?: TransportUsage;\n\tbudgetSource?: {\n\t\ttimeout: \"runtime\" | \"explicit\";\n\t\tidleTimeout: \"runtime\" | \"explicit\";\n\t\tturnLimit: \"runtime\" | \"explicit\";\n\t\ttoolCallLimit: \"runtime\" | \"explicit\";\n\t};\n\tfailurePhase?: TransportProgressPhase;\n}\n\nexport type TransportProgressCallback = (progress: TransportTelemetry) => void;\n\nexport function emptyTransportUsage(): TransportUsage {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotalTokens: 0,\n\t\tcost: 0,\n\t\tturns: 0,\n\t};\n}\n"],
5
+ "mappings": ";;;;AAEO,IAAM,4BAA4B;AA6DlC,SAAS,sBAAsC;AACrD,SAAO;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,MAAM;AAAA,IACN,OAAO;AAAA,EACR;AACD;",
6
6
  "names": []
7
7
  }
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  buildTimeoutFinalizationPrompt,
12
12
  resolveTimeoutFinalizationMs
13
- } from "./chunk-G3RSMSXJ.ts";
13
+ } from "./chunk-NTRPLF46.ts";
14
14
  import {
15
15
  TURN_TERMINATION_VERSION,
16
16
  TimeoutProgressJournal,
@@ -26,19 +26,19 @@ import {
26
26
  } from "./chunk-5DGRMKNV.ts";
27
27
  import {
28
28
  discoverAgents
29
- } from "./chunk-PSK43Y6A.ts";
29
+ } from "./chunk-LASD73CM.ts";
30
30
  import {
31
31
  appendResultInstruction
32
32
  } from "./chunk-RSUXZD6S.ts";
33
33
  import {
34
34
  readSubagentSettings
35
- } from "./chunk-QBORTI4W.ts";
35
+ } from "./chunk-TMZRHIIK.ts";
36
36
  import {
37
37
  safeTerminalLine
38
38
  } from "./chunk-SWGQLFSD.ts";
39
39
  import {
40
40
  appendDelegationContract
41
- } from "./chunk-I2FAK44T.ts";
41
+ } from "./chunk-JSZIP73U.ts";
42
42
  import {
43
43
  DEFAULT_MAX_CONTEXT_BYTES,
44
44
  DEFAULT_MAX_OUTPUT_BYTES,
@@ -734,4 +734,4 @@ export {
734
734
  seedChildSessionManager,
735
735
  buildCurrentTurnPrompt
736
736
  };
737
- //# sourceMappingURL=chunk-H3BFJ7HJ.ts.map
737
+ //# sourceMappingURL=chunk-LL4LP2T7.ts.map