@narumitw/pi-subagents 2.1.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/README.md +181 -1250
  2. package/dist/child-communication-bridge.ts +136 -0
  3. package/dist/child-communication-bridge.ts.map +7 -0
  4. package/dist/chunks/chunk-UKTWUQRM.js +667 -0
  5. package/dist/chunks/chunk-UKTWUQRM.js.map +7 -0
  6. package/dist/index.ts +1448 -1598
  7. package/dist/index.ts.map +4 -4
  8. package/docs/design-principles.md +31 -0
  9. package/docs/ipc-transport-idea.md +103 -0
  10. package/docs/tools.md +109 -0
  11. package/package.json +11 -19
  12. package/src/broker-credentials.ts +71 -0
  13. package/src/child-communication-bridge.ts +153 -0
  14. package/src/child-communication-tools.ts +147 -0
  15. package/src/completion-renderer.ts +60 -0
  16. package/src/index.ts +1 -1
  17. package/src/message-broker.ts +628 -0
  18. package/src/model-output.ts +42 -0
  19. package/src/process.ts +688 -0
  20. package/src/runtime.ts +538 -0
  21. package/src/subagents.ts +33 -34
  22. package/src/tools.ts +416 -0
  23. package/src/types.ts +85 -0
  24. package/src/widget.ts +130 -0
  25. package/dist/chunks/auto-transport-FUUKFDIG.ts +0 -109
  26. package/dist/chunks/auto-transport-FUUKFDIG.ts.map +0 -7
  27. package/dist/chunks/capability-grant-PR72SWWS.ts +0 -19
  28. package/dist/chunks/capability-grant-PR72SWWS.ts.map +0 -7
  29. package/dist/chunks/child-peer-bridge.ts +0 -108
  30. package/dist/chunks/child-peer-bridge.ts.map +0 -7
  31. package/dist/chunks/chunk-2LMJU25E.ts +0 -1641
  32. package/dist/chunks/chunk-2LMJU25E.ts.map +0 -7
  33. package/dist/chunks/chunk-47SK2QYC.ts +0 -56
  34. package/dist/chunks/chunk-47SK2QYC.ts.map +0 -7
  35. package/dist/chunks/chunk-4AQSF7AS.ts +0 -29
  36. package/dist/chunks/chunk-4AQSF7AS.ts.map +0 -7
  37. package/dist/chunks/chunk-5DGRMKNV.ts +0 -126
  38. package/dist/chunks/chunk-5DGRMKNV.ts.map +0 -7
  39. package/dist/chunks/chunk-6H6TBBED.ts +0 -108
  40. package/dist/chunks/chunk-6H6TBBED.ts.map +0 -7
  41. package/dist/chunks/chunk-6KJ34M6S.ts +0 -159
  42. package/dist/chunks/chunk-6KJ34M6S.ts.map +0 -7
  43. package/dist/chunks/chunk-6NSJVPXX.ts +0 -480
  44. package/dist/chunks/chunk-6NSJVPXX.ts.map +0 -7
  45. package/dist/chunks/chunk-7AAJEUSL.ts +0 -238
  46. package/dist/chunks/chunk-7AAJEUSL.ts.map +0 -7
  47. package/dist/chunks/chunk-BFK2Z4ZF.ts +0 -189
  48. package/dist/chunks/chunk-BFK2Z4ZF.ts.map +0 -7
  49. package/dist/chunks/chunk-BOAXY55Y.ts +0 -153
  50. package/dist/chunks/chunk-BOAXY55Y.ts.map +0 -7
  51. package/dist/chunks/chunk-D4CR7T73.ts +0 -353
  52. package/dist/chunks/chunk-D4CR7T73.ts.map +0 -7
  53. package/dist/chunks/chunk-FEVPWRMU.ts +0 -300
  54. package/dist/chunks/chunk-FEVPWRMU.ts.map +0 -7
  55. package/dist/chunks/chunk-G6VZTCFH.ts +0 -70
  56. package/dist/chunks/chunk-G6VZTCFH.ts.map +0 -7
  57. package/dist/chunks/chunk-H3FP6DLR.ts +0 -160
  58. package/dist/chunks/chunk-H3FP6DLR.ts.map +0 -7
  59. package/dist/chunks/chunk-HA36LPCO.ts +0 -130
  60. package/dist/chunks/chunk-HA36LPCO.ts.map +0 -7
  61. package/dist/chunks/chunk-HOP5FXDT.ts +0 -27
  62. package/dist/chunks/chunk-HOP5FXDT.ts.map +0 -7
  63. package/dist/chunks/chunk-IGAMVWFN.ts +0 -139
  64. package/dist/chunks/chunk-IGAMVWFN.ts.map +0 -7
  65. package/dist/chunks/chunk-ILEQ27AL.ts +0 -45
  66. package/dist/chunks/chunk-ILEQ27AL.ts.map +0 -7
  67. package/dist/chunks/chunk-ITVWPNU4.ts +0 -819
  68. package/dist/chunks/chunk-ITVWPNU4.ts.map +0 -7
  69. package/dist/chunks/chunk-IWC32VPY.ts +0 -172
  70. package/dist/chunks/chunk-IWC32VPY.ts.map +0 -7
  71. package/dist/chunks/chunk-JSZIP73U.ts +0 -362
  72. package/dist/chunks/chunk-JSZIP73U.ts.map +0 -7
  73. package/dist/chunks/chunk-JU6LUNLP.ts +0 -380
  74. package/dist/chunks/chunk-JU6LUNLP.ts.map +0 -7
  75. package/dist/chunks/chunk-KMGKCEO4.ts +0 -38
  76. package/dist/chunks/chunk-KMGKCEO4.ts.map +0 -7
  77. package/dist/chunks/chunk-LASD73CM.ts +0 -339
  78. package/dist/chunks/chunk-LASD73CM.ts.map +0 -7
  79. package/dist/chunks/chunk-LEOYDZI3.ts +0 -22
  80. package/dist/chunks/chunk-LEOYDZI3.ts.map +0 -7
  81. package/dist/chunks/chunk-LL4LP2T7.ts +0 -737
  82. package/dist/chunks/chunk-LL4LP2T7.ts.map +0 -7
  83. package/dist/chunks/chunk-N2T5IN4X.ts +0 -18
  84. package/dist/chunks/chunk-N2T5IN4X.ts.map +0 -7
  85. package/dist/chunks/chunk-N7BLVXKK.ts +0 -73
  86. package/dist/chunks/chunk-N7BLVXKK.ts.map +0 -7
  87. package/dist/chunks/chunk-NLT67IZS.ts +0 -322
  88. package/dist/chunks/chunk-NLT67IZS.ts.map +0 -7
  89. package/dist/chunks/chunk-NTRPLF46.ts +0 -63
  90. package/dist/chunks/chunk-NTRPLF46.ts.map +0 -7
  91. package/dist/chunks/chunk-ONDTY4EL.ts +0 -91
  92. package/dist/chunks/chunk-ONDTY4EL.ts.map +0 -7
  93. package/dist/chunks/chunk-OVPHFGKO.ts +0 -1769
  94. package/dist/chunks/chunk-OVPHFGKO.ts.map +0 -7
  95. package/dist/chunks/chunk-P7OH4XMF.ts +0 -60
  96. package/dist/chunks/chunk-P7OH4XMF.ts.map +0 -7
  97. package/dist/chunks/chunk-PBZMBTNJ.ts +0 -422
  98. package/dist/chunks/chunk-PBZMBTNJ.ts.map +0 -7
  99. package/dist/chunks/chunk-PGLSFLYW.ts +0 -52
  100. package/dist/chunks/chunk-PGLSFLYW.ts.map +0 -7
  101. package/dist/chunks/chunk-RRR66UWR.ts +0 -28
  102. package/dist/chunks/chunk-RRR66UWR.ts.map +0 -7
  103. package/dist/chunks/chunk-RSUXZD6S.ts +0 -275
  104. package/dist/chunks/chunk-RSUXZD6S.ts.map +0 -7
  105. package/dist/chunks/chunk-RTCVYIZA.ts +0 -221
  106. package/dist/chunks/chunk-RTCVYIZA.ts.map +0 -7
  107. package/dist/chunks/chunk-RY2AEGMZ.ts +0 -34
  108. package/dist/chunks/chunk-RY2AEGMZ.ts.map +0 -7
  109. package/dist/chunks/chunk-SWGQLFSD.ts +0 -60
  110. package/dist/chunks/chunk-SWGQLFSD.ts.map +0 -7
  111. package/dist/chunks/chunk-TM2R67J3.ts +0 -52
  112. package/dist/chunks/chunk-TM2R67J3.ts.map +0 -7
  113. package/dist/chunks/chunk-TMZRHIIK.ts +0 -497
  114. package/dist/chunks/chunk-TMZRHIIK.ts.map +0 -7
  115. package/dist/chunks/chunk-TZ34IQ3M.ts +0 -59
  116. package/dist/chunks/chunk-TZ34IQ3M.ts.map +0 -7
  117. package/dist/chunks/chunk-UMBPMVJW.ts +0 -22
  118. package/dist/chunks/chunk-UMBPMVJW.ts.map +0 -7
  119. package/dist/chunks/chunk-VDG7LTYE.ts +0 -80
  120. package/dist/chunks/chunk-VDG7LTYE.ts.map +0 -7
  121. package/dist/chunks/chunk-X4NMONPE.ts +0 -73
  122. package/dist/chunks/chunk-X4NMONPE.ts.map +0 -7
  123. package/dist/chunks/chunk-YPJEN6NU.ts +0 -65
  124. package/dist/chunks/chunk-YPJEN6NU.ts.map +0 -7
  125. package/dist/chunks/chunk-YU53SHA7.ts +0 -328
  126. package/dist/chunks/chunk-YU53SHA7.ts.map +0 -7
  127. package/dist/chunks/completion-delivery-RSJU6BXL.ts +0 -17
  128. package/dist/chunks/completion-delivery-RSJU6BXL.ts.map +0 -7
  129. package/dist/chunks/config-status-FKGDECZ3.ts +0 -35
  130. package/dist/chunks/config-status-FKGDECZ3.ts.map +0 -7
  131. package/dist/chunks/config-ui-ABHYNGQ7.ts +0 -1212
  132. package/dist/chunks/config-ui-ABHYNGQ7.ts.map +0 -7
  133. package/dist/chunks/consult-LJU3IQY5.ts +0 -519
  134. package/dist/chunks/consult-LJU3IQY5.ts.map +0 -7
  135. package/dist/chunks/context-QDKLVQXE.ts +0 -11
  136. package/dist/chunks/context-QDKLVQXE.ts.map +0 -7
  137. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts +0 -130
  138. package/dist/chunks/create-stateful-transport-JWC2EFYL.ts.map +0 -7
  139. package/dist/chunks/cwd-policy-NB6XZ5GF.ts +0 -17
  140. package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +0 -7
  141. package/dist/chunks/delegation-contract-LA56I5DT.ts +0 -24
  142. package/dist/chunks/delegation-contract-LA56I5DT.ts.map +0 -7
  143. package/dist/chunks/discovery-MIFB2U4Y.ts +0 -12
  144. package/dist/chunks/discovery-MIFB2U4Y.ts.map +0 -7
  145. package/dist/chunks/execution-Q2JZLKJA.ts +0 -4037
  146. package/dist/chunks/execution-Q2JZLKJA.ts.map +0 -7
  147. package/dist/chunks/in-process-transport-HJ6TZXC3.ts +0 -39
  148. package/dist/chunks/in-process-transport-HJ6TZXC3.ts.map +0 -7
  149. package/dist/chunks/inspect-UH2TKH6E.ts +0 -634
  150. package/dist/chunks/inspect-UH2TKH6E.ts.map +0 -7
  151. package/dist/chunks/peer-communication-KL36Z6CO.ts +0 -294
  152. package/dist/chunks/peer-communication-KL36Z6CO.ts.map +0 -7
  153. package/dist/chunks/persistence-UY3PY6E5.ts +0 -348
  154. package/dist/chunks/persistence-UY3PY6E5.ts.map +0 -7
  155. package/dist/chunks/registry-BT54L6CY.ts +0 -1445
  156. package/dist/chunks/registry-BT54L6CY.ts.map +0 -7
  157. package/dist/chunks/retained-semantic-state-GM75FZGE.ts +0 -81
  158. package/dist/chunks/retained-semantic-state-GM75FZGE.ts.map +0 -7
  159. package/dist/chunks/rpc-transport-7R7DVCEB.ts +0 -1222
  160. package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +0 -7
  161. package/dist/chunks/runtime-policy-5YELCOVC.ts +0 -15
  162. package/dist/chunks/runtime-policy-5YELCOVC.ts.map +0 -7
  163. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +0 -19
  164. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +0 -7
  165. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts +0 -13
  166. package/dist/chunks/spawn-idempotency-BNHOSMZW.ts.map +0 -7
  167. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +0 -15
  168. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +0 -7
  169. package/dist/chunks/subprocess-transport-VHZJRBTW.ts +0 -160
  170. package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +0 -7
  171. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +0 -164
  172. package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +0 -7
  173. package/dist/chunks/workspace-WDKLN72J.ts +0 -11
  174. package/dist/chunks/workspace-WDKLN72J.ts.map +0 -7
  175. package/docs/async-runtime-protocol.md +0 -84
  176. package/docs/implementation-notes/pi-subagents-capability-matrix.md +0 -62
  177. package/docs/implementation-notes/pi-subagents-current-direction.md +0 -99
  178. package/docs/implementation-notes/pi-subagents-rpc-v1.md +0 -153
  179. package/docs/pi-subagents-diagrams.md +0 -183
  180. package/src/adaptive-scheduler.ts +0 -224
  181. package/src/admission-benchmark.ts +0 -95
  182. package/src/admission-policy.ts +0 -78
  183. package/src/agent-projection.ts +0 -53
  184. package/src/agents/built-ins.ts +0 -71
  185. package/src/agents/catalog.ts +0 -241
  186. package/src/agents/discovery.ts +0 -265
  187. package/src/agents/types.ts +0 -100
  188. package/src/agents.ts +0 -51
  189. package/src/async-subagent-benchmark.ts +0 -532
  190. package/src/auto-transport.ts +0 -121
  191. package/src/blocking-status.ts +0 -63
  192. package/src/cached-module-loader.ts +0 -18
  193. package/src/capabilities.ts +0 -145
  194. package/src/capability-grant.ts +0 -115
  195. package/src/capability-router.ts +0 -107
  196. package/src/child-peer-bridge.ts +0 -124
  197. package/src/child-peer-tools.ts +0 -132
  198. package/src/completion-delivery.ts +0 -409
  199. package/src/completion-render.ts +0 -190
  200. package/src/completion-requirement.ts +0 -479
  201. package/src/completion-routing.ts +0 -24
  202. package/src/config-registration.ts +0 -114
  203. package/src/config-status.ts +0 -217
  204. package/src/config-ui.ts +0 -983
  205. package/src/consult-policy.ts +0 -15
  206. package/src/consult-registration.ts +0 -125
  207. package/src/consult-render.ts +0 -194
  208. package/src/consult-resources.ts +0 -51
  209. package/src/consult-tool.ts +0 -95
  210. package/src/consult.ts +0 -566
  211. package/src/context.ts +0 -126
  212. package/src/create-stateful-transport.ts +0 -157
  213. package/src/cwd-policy.ts +0 -183
  214. package/src/delegation-contract.ts +0 -463
  215. package/src/execution/budget.ts +0 -56
  216. package/src/execution/runtime-policy.ts +0 -19
  217. package/src/execution-plan.ts +0 -322
  218. package/src/execution-ui.ts +0 -259
  219. package/src/execution.ts +0 -1679
  220. package/src/in-process-transport.ts +0 -941
  221. package/src/inspect-registration.ts +0 -64
  222. package/src/inspect-render.ts +0 -334
  223. package/src/inspect-tool.ts +0 -45
  224. package/src/inspect.ts +0 -769
  225. package/src/integration-controller.ts +0 -98
  226. package/src/limits.ts +0 -75
  227. package/src/orchestration-metrics.ts +0 -116
  228. package/src/outcome.ts +0 -61
  229. package/src/panel-child-group.ts +0 -35
  230. package/src/panel-contract.ts +0 -343
  231. package/src/panel-evidence.ts +0 -59
  232. package/src/panel-execution.ts +0 -769
  233. package/src/panel-failure.ts +0 -56
  234. package/src/panel-planning.ts +0 -175
  235. package/src/panel-presets.ts +0 -3
  236. package/src/panel-prompts.ts +0 -132
  237. package/src/panel-reconciliation.ts +0 -57
  238. package/src/panel-render.ts +0 -103
  239. package/src/parallel-limit-ui.ts +0 -113
  240. package/src/params.ts +0 -278
  241. package/src/peer-communication.ts +0 -352
  242. package/src/peer-transport.ts +0 -49
  243. package/src/persistence.ts +0 -522
  244. package/src/pi-args.ts +0 -43
  245. package/src/pi-invocation.ts +0 -168
  246. package/src/process-control.ts +0 -43
  247. package/src/prompt-resources.ts +0 -38
  248. package/src/prompt-source-safety.ts +0 -48
  249. package/src/protocol.ts +0 -76
  250. package/src/registry-types.ts +0 -204
  251. package/src/registry.ts +0 -1698
  252. package/src/render-common.ts +0 -252
  253. package/src/render.ts +0 -704
  254. package/src/result-contract.ts +0 -431
  255. package/src/retained-semantic-state.ts +0 -100
  256. package/src/rpc-timeout-finalization.ts +0 -207
  257. package/src/rpc-transport-metadata.ts +0 -65
  258. package/src/rpc-transport.ts +0 -1035
  259. package/src/rpc-turn-capture.ts +0 -217
  260. package/src/runner-outcome.ts +0 -31
  261. package/src/runner-result.ts +0 -55
  262. package/src/runner-types.ts +0 -102
  263. package/src/runner-usage.ts +0 -48
  264. package/src/runner.ts +0 -866
  265. package/src/safe-text.ts +0 -67
  266. package/src/semantic-snapshot.ts +0 -214
  267. package/src/session-guidance-contract.ts +0 -399
  268. package/src/settings/inspection.ts +0 -302
  269. package/src/settings/schema.ts +0 -195
  270. package/src/settings-reader.ts +0 -215
  271. package/src/settings.ts +0 -452
  272. package/src/spawn-idempotency.ts +0 -68
  273. package/src/stateful-agent-view.ts +0 -85
  274. package/src/stateful-config.ts +0 -13
  275. package/src/stateful-guidance.ts +0 -29
  276. package/src/stateful-lifecycle.ts +0 -74
  277. package/src/stateful-limit-ui.ts +0 -249
  278. package/src/stateful-limits.ts +0 -96
  279. package/src/stateful-prompt.ts +0 -49
  280. package/src/stateful-registration.ts +0 -1320
  281. package/src/stateful-render.ts +0 -318
  282. package/src/stateful-safety.ts +0 -47
  283. package/src/stateful-tool-params.ts +0 -215
  284. package/src/stateful.ts +0 -12
  285. package/src/subagent-details.ts +0 -43
  286. package/src/subagents-extension.ts +0 -355
  287. package/src/subprocess-transport.ts +0 -145
  288. package/src/supervision.ts +0 -104
  289. package/src/task-path.ts +0 -65
  290. package/src/timeout-checkpoint.ts +0 -305
  291. package/src/timeout-finalization.ts +0 -75
  292. package/src/tool-schema-compatibility.ts +0 -73
  293. package/src/transport-types.ts +0 -74
  294. package/src/transport-ui.ts +0 -135
  295. package/src/transport.ts +0 -43
  296. package/src/turn-budget.ts +0 -109
  297. package/src/usage-format.ts +0 -42
  298. package/src/usage-recording-config.ts +0 -13
  299. package/src/usage-recording-store.ts +0 -183
  300. package/src/usage-recording.ts +0 -478
  301. package/src/verification-harness.ts +0 -516
  302. package/src/verification-policy.ts +0 -67
  303. package/src/verification-receipt.ts +0 -275
  304. package/src/verified-execution-benchmark.ts +0 -86
  305. package/src/verified-execution-contract.ts +0 -191
  306. package/src/verified-execution-schema.ts +0 -32
  307. package/src/work-item-ledger.ts +0 -1404
  308. package/src/work-item-persistence.ts +0 -254
  309. package/src/workflow-completion-controller.ts +0 -397
  310. package/src/workflow-planning.ts +0 -172
  311. package/src/workflow-tree-identity.ts +0 -289
  312. package/src/workflow-ui.ts +0 -69
  313. package/src/workflow-verification.ts +0 -296
  314. package/src/workspace.ts +0 -174
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/settings/schema.ts", "../../src/settings/inspection.ts", "../../src/settings-reader.ts"],
4
- "sourcesContent": ["import {\n\tCONSULT_RESOURCE_POLICIES,\n\tCONSULTATION_CWD_POLICIES,\n\ttype ConsultationCwdPolicy,\n\ttype ConsultResourcePolicy,\n\tDELEGATION_CWD_POLICIES,\n\ttype DelegationCwdPolicy,\n\tisThinkingLevel,\n\ttype SubagentAgentConfig,\n\ttype SubagentSettings,\n} from \"../agents/types.js\";\nimport { MAX_CONFIGURABLE_PARALLEL_TASKS, MAX_SUBAGENT_TIMEOUT_MS } from \"../limits.js\";\nimport { isValidStatefulLimit, STATEFUL_LIMIT_FIELDS } from \"../stateful-limits.js\";\n\nexport function hasOwn(obj: object, key: PropertyKey): boolean {\n\treturn Object.hasOwn(obj, key);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n\nexport function isPositiveNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 1;\n}\n\nexport function isPositiveInteger(value: unknown): value is number {\n\treturn isPositiveNumber(value) && Number.isSafeInteger(value);\n}\n\nexport function normalizeAgentSettings(value: unknown): SubagentAgentConfig | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\n\tconst config: SubagentAgentConfig = {};\n\tlet hasKnownField = false;\n\n\tif (hasOwn(value, \"tools\")) {\n\t\tif (!isStringArray(value.tools)) return undefined;\n\t\tconfig.tools = value.tools;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"model\")) {\n\t\tif (value.model !== null && typeof value.model !== \"string\") return undefined;\n\t\tconfig.model = value.model;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"thinkingLevel\")) {\n\t\tif (value.thinkingLevel !== null && !isThinkingLevel(value.thinkingLevel)) return undefined;\n\t\tconfig.thinkingLevel = value.thinkingLevel;\n\t\thasKnownField = true;\n\t}\n\n\tif (hasOwn(value, \"timeoutMs\")) {\n\t\tif (\n\t\t\tvalue.timeoutMs !== null &&\n\t\t\t(!isPositiveNumber(value.timeoutMs) || value.timeoutMs > MAX_SUBAGENT_TIMEOUT_MS)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconfig.timeoutMs = value.timeoutMs;\n\t\thasKnownField = true;\n\t}\n\n\treturn hasKnownField ? config : undefined;\n}\n\nexport function normalizeSubagentSettings(value: unknown): SubagentSettings | undefined {\n\tif (!isPlainObject(value)) return undefined;\n\tconst settings: SubagentSettings = {};\n\tif (hasOwn(value, \"agents\")) {\n\t\tif (!isPlainObject(value.agents)) return undefined;\n\t\tconst agents: Record<string, SubagentAgentConfig> = {};\n\t\tfor (const [name, rawConfig] of Object.entries(value.agents)) {\n\t\t\tconst config = normalizeAgentSettings(rawConfig);\n\t\t\tif (config) agents[name] = config;\n\t\t}\n\t\tif (Object.keys(agents).length > 0) settings.agents = agents;\n\t}\n\tif (hasOwn(value, \"blocking\")) {\n\t\tif (!isPlainObject(value.blocking)) return undefined;\n\t\tconst blocking: NonNullable<SubagentSettings[\"blocking\"]> = {};\n\t\tif (hasOwn(value.blocking, \"enabled\")) {\n\t\t\tif (typeof value.blocking.enabled !== \"boolean\") return undefined;\n\t\t\tblocking.enabled = value.blocking.enabled;\n\t\t}\n\t\tif (hasOwn(value.blocking, \"maxParallelTasks\")) {\n\t\t\tif (\n\t\t\t\t!isPositiveInteger(value.blocking.maxParallelTasks) ||\n\t\t\t\tvalue.blocking.maxParallelTasks > MAX_CONFIGURABLE_PARALLEL_TASKS\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tblocking.maxParallelTasks = value.blocking.maxParallelTasks;\n\t\t}\n\t\tsettings.blocking = blocking;\n\t}\n\tif (hasOwn(value, \"stateful\")) {\n\t\tif (!isPlainObject(value.stateful)) return undefined;\n\t\tconst runtime: NonNullable<SubagentSettings[\"stateful\"]> = {};\n\t\tif (hasOwn(value.stateful, \"transport\")) {\n\t\t\tif (\n\t\t\t\tvalue.stateful.transport !== \"subprocess\" &&\n\t\t\t\tvalue.stateful.transport !== \"in-process\" &&\n\t\t\t\tvalue.stateful.transport !== \"rpc\" &&\n\t\t\t\tvalue.stateful.transport !== \"auto\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\truntime.transport = value.stateful.transport;\n\t\t}\n\t\tif (hasOwn(value.stateful, \"completionDelivery\")) {\n\t\t\tif (\n\t\t\t\tvalue.stateful.completionDelivery !== \"next-turn\" &&\n\t\t\t\tvalue.stateful.completionDelivery !== \"auto-resume\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\truntime.completionDelivery = value.stateful.completionDelivery;\n\t\t}\n\t\tfor (const key of STATEFUL_LIMIT_FIELDS) {\n\t\t\tif (hasOwn(value.stateful, key)) {\n\t\t\t\tif (!isValidStatefulLimit(key, value.stateful[key])) return undefined;\n\t\t\t\truntime[key] = value.stateful[key];\n\t\t\t}\n\t\t}\n\t\tfor (const key of [\"maxMailboxMessages\", \"maxMailboxMessageBytes\", \"idleTtlMs\"] as const) {\n\t\t\tif (hasOwn(value.stateful, key)) {\n\t\t\t\tif (!isPositiveInteger(value.stateful[key])) return undefined;\n\t\t\t\truntime[key] = value.stateful[key];\n\t\t\t}\n\t\t}\n\t\tif (hasOwn(value.stateful, \"retentionDays\")) {\n\t\t\tif (!isPositiveNumber(value.stateful.retentionDays)) return undefined;\n\t\t\truntime.retentionDays = value.stateful.retentionDays;\n\t\t}\n\t\tif (hasOwn(value.stateful, \"enabled\")) {\n\t\t\tif (typeof value.stateful.enabled !== \"boolean\") return undefined;\n\t\t\truntime.enabled = value.stateful.enabled;\n\t\t}\n\t\tsettings.stateful = runtime;\n\t}\n\tif (hasOwn(value, \"consult\")) {\n\t\tif (!isPlainObject(value.consult)) return undefined;\n\t\tconst consult: NonNullable<SubagentSettings[\"consult\"]> = {};\n\t\tif (hasOwn(value.consult, \"resources\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.consult.resources !== \"string\" ||\n\t\t\t\t!CONSULT_RESOURCE_POLICIES.includes(value.consult.resources as ConsultResourcePolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconsult.resources = value.consult.resources as ConsultResourcePolicy;\n\t\t}\n\t\tsettings.consult = consult;\n\t}\n\tif (hasOwn(value, \"cwdPolicy\")) {\n\t\tif (!isPlainObject(value.cwdPolicy)) return undefined;\n\t\tconst cwdPolicy: NonNullable<SubagentSettings[\"cwdPolicy\"]> = {};\n\t\tif (hasOwn(value.cwdPolicy, \"consultation\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.cwdPolicy.consultation !== \"string\" ||\n\t\t\t\t!CONSULTATION_CWD_POLICIES.includes(value.cwdPolicy.consultation as ConsultationCwdPolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcwdPolicy.consultation = value.cwdPolicy.consultation as ConsultationCwdPolicy;\n\t\t}\n\t\tif (hasOwn(value.cwdPolicy, \"delegation\")) {\n\t\t\tif (\n\t\t\t\ttypeof value.cwdPolicy.delegation !== \"string\" ||\n\t\t\t\t!DELEGATION_CWD_POLICIES.includes(value.cwdPolicy.delegation as DelegationCwdPolicy)\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcwdPolicy.delegation = value.cwdPolicy.delegation as DelegationCwdPolicy;\n\t\t}\n\t\tsettings.cwdPolicy = cwdPolicy;\n\t}\n\tif (hasOwn(value, \"usageRecording\")) {\n\t\tif (!isPlainObject(value.usageRecording)) return undefined;\n\t\tconst usageRecording: NonNullable<SubagentSettings[\"usageRecording\"]> = {};\n\t\tif (hasOwn(value.usageRecording, \"enabled\")) {\n\t\t\tif (typeof value.usageRecording.enabled !== \"boolean\") return undefined;\n\t\t\tusageRecording.enabled = value.usageRecording.enabled;\n\t\t}\n\t\tsettings.usageRecording = usageRecording;\n\t}\n\treturn settings;\n}\n", "import type {\n\tCompletionDelivery,\n\tConsultationCwdPolicy,\n\tConsultResourcePolicy,\n\tDelegationCwdPolicy,\n\tSubagentSettings,\n\tSubagentTransportKind,\n} from \"../agents/types.js\";\nimport { DEFAULT_MAX_PARALLEL_TASKS } from \"../limits.js\";\nimport {\n\tresolveStatefulLimits,\n\tSTATEFUL_LIMIT_FIELDS,\n\ttype StatefulLimitField,\n} from \"../stateful-limits.js\";\nimport { hasOwn, isPlainObject } from \"./schema.js\";\n\nconst DEFAULT_COMPLETION_DELIVERY: CompletionDelivery = \"next-turn\";\nexport const DEFAULT_CONSULT_RESOURCE_POLICY: ConsultResourcePolicy = \"project-context\";\nexport const DEFAULT_CONSULTATION_CWD_POLICY: ConsultationCwdPolicy = \"anywhere\";\nexport const DEFAULT_DELEGATION_CWD_POLICY: DelegationCwdPolicy = \"trusted-targets\";\n\nexport type DelegationWorkflow = \"all\" | \"async-only\" | \"blocking-only\" | \"disabled\";\n\ntype SettingsSource = \"default\" | \"user settings\";\n\nexport interface InspectedSubagentSettingsDocument {\n\tpath: string;\n\traw?: Record<string, unknown>;\n\tsettings?: SubagentSettings;\n\terror?: string;\n}\n\nexport interface DelegationWorkflowSettingsSnapshot {\n\tpath: string;\n\tvalue: DelegationWorkflow;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface CompletionDeliverySettingsSnapshot {\n\tpath: string;\n\tvalue: CompletionDelivery;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface StatefulTransportSettingsSnapshot {\n\tpath: string;\n\tvalue: SubagentTransportKind;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface BlockingParallelLimitSettingsSnapshot {\n\tpath: string;\n\tvalue: number;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface StatefulLimitFieldSnapshot {\n\tvalue: number;\n\tsource: SettingsSource;\n}\n\nexport interface StatefulLimitSettingsSnapshot {\n\tpath: string;\n\twritePath: string;\n\tvalues?: Record<StatefulLimitField, StatefulLimitFieldSnapshot>;\n\terror?: string;\n}\n\nexport interface ConsultResourceSettingsSnapshot {\n\tpath: string;\n\tvalue: ConsultResourcePolicy;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface CwdPolicyFieldSnapshot<T> {\n\tvalue: T;\n\tsource: SettingsSource;\n}\n\nexport interface CwdPolicySettingsSnapshot {\n\tpath: string;\n\tconsultation: CwdPolicyFieldSnapshot<ConsultationCwdPolicy>;\n\tdelegation: CwdPolicyFieldSnapshot<DelegationCwdPolicy>;\n\terror?: string;\n}\n\nexport interface SubagentSettingsSnapshot {\n\tpath: string;\n\tsettings?: SubagentSettings;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport interface UsageRecordingSettingsSnapshot {\n\tpath: string;\n\tenabled: boolean;\n\tsource: SettingsSource;\n\terror?: string;\n}\n\nexport function resolveDelegationWorkflow(\n\tblockingEnabled: boolean,\n\tstatefulEnabled: boolean,\n): DelegationWorkflow {\n\tif (blockingEnabled && statefulEnabled) return \"all\";\n\tif (statefulEnabled) return \"async-only\";\n\tif (blockingEnabled) return \"blocking-only\";\n\treturn \"disabled\";\n}\n\nexport function resolveBlockingMaxParallelTasks(settings?: SubagentSettings): number {\n\treturn settings?.blocking?.maxParallelTasks ?? DEFAULT_MAX_PARALLEL_TASKS;\n}\n\nexport function buildSubagentSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): SubagentSettingsSnapshot {\n\treturn {\n\t\tpath: inspected.path,\n\t\tsettings: inspected.settings,\n\t\tsource: inspected.settings ? \"user settings\" : \"default\",\n\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t};\n}\n\nexport function buildUsageRecordingSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): UsageRecordingSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tenabled: false,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.usageRecording) && hasOwn(inspected.raw.usageRecording, \"enabled\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tenabled: inspected.settings.usageRecording?.enabled === true,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildConsultResourceSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): ConsultResourceSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_CONSULT_RESOURCE_POLICY,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.consult) && hasOwn(inspected.raw.consult, \"resources\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.consult?.resources ?? DEFAULT_CONSULT_RESOURCE_POLICY,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildCwdPolicySettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): CwdPolicySettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tconsultation: { value: DEFAULT_CONSULTATION_CWD_POLICY, source: \"default\" },\n\t\t\tdelegation: { value: DEFAULT_DELEGATION_CWD_POLICY, source: \"default\" },\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst rawPolicy = isPlainObject(inspected.raw.cwdPolicy) ? inspected.raw.cwdPolicy : undefined;\n\treturn {\n\t\tpath: inspected.path,\n\t\tconsultation: {\n\t\t\tvalue: inspected.settings.cwdPolicy?.consultation ?? DEFAULT_CONSULTATION_CWD_POLICY,\n\t\t\tsource: rawPolicy && hasOwn(rawPolicy, \"consultation\") ? \"user settings\" : \"default\",\n\t\t},\n\t\tdelegation: {\n\t\t\tvalue: inspected.settings.cwdPolicy?.delegation ?? DEFAULT_DELEGATION_CWD_POLICY,\n\t\t\tsource: rawPolicy && hasOwn(rawPolicy, \"delegation\") ? \"user settings\" : \"default\",\n\t\t},\n\t};\n}\n\nexport function buildDelegationWorkflowSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): DelegationWorkflowSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: \"all\",\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\t(isPlainObject(inspected.raw.blocking) && hasOwn(inspected.raw.blocking, \"enabled\")) ||\n\t\t(isPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"enabled\"));\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: resolveDelegationWorkflow(\n\t\t\tinspected.settings.blocking?.enabled !== false,\n\t\t\tinspected.settings.stateful?.enabled !== false,\n\t\t),\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildCompletionDeliverySettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): CompletionDeliverySettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_COMPLETION_DELIVERY,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"completionDelivery\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.stateful?.completionDelivery ?? DEFAULT_COMPLETION_DELIVERY,\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildStatefulTransportSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): StatefulTransportSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: \"subprocess\",\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.stateful) && hasOwn(inspected.raw.stateful, \"transport\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: inspected.settings.stateful?.transport ?? \"subprocess\",\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildBlockingParallelLimitSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n): BlockingParallelLimitSettingsSnapshot {\n\tif (!inspected.raw || !inspected.settings) {\n\t\treturn {\n\t\t\tpath: inspected.path,\n\t\t\tvalue: DEFAULT_MAX_PARALLEL_TASKS,\n\t\t\tsource: \"default\",\n\t\t\t...(inspected.error ? { error: inspected.error } : {}),\n\t\t};\n\t}\n\tconst explicit =\n\t\tisPlainObject(inspected.raw.blocking) && hasOwn(inspected.raw.blocking, \"maxParallelTasks\");\n\treturn {\n\t\tpath: inspected.path,\n\t\tvalue: resolveBlockingMaxParallelTasks(inspected.settings),\n\t\tsource: explicit ? \"user settings\" : \"default\",\n\t};\n}\n\nexport function buildStatefulLimitSettingsSnapshot(\n\tinspected: InspectedSubagentSettingsDocument,\n\twritePath: string,\n): StatefulLimitSettingsSnapshot {\n\tif (inspected.error) {\n\t\treturn { path: inspected.path, writePath, error: inspected.error };\n\t}\n\tconst resolved = resolveStatefulLimits(inspected.settings?.stateful);\n\tconst rawStateful = isPlainObject(inspected.raw?.stateful) ? inspected.raw.stateful : undefined;\n\treturn {\n\t\tpath: inspected.path,\n\t\twritePath,\n\t\tvalues: Object.fromEntries(\n\t\t\tSTATEFUL_LIMIT_FIELDS.map((field) => [\n\t\t\t\tfield,\n\t\t\t\t{\n\t\t\t\t\tvalue: resolved[field],\n\t\t\t\t\tsource: rawStateful && hasOwn(rawStateful, field) ? \"user settings\" : \"default\",\n\t\t\t\t},\n\t\t\t]),\n\t\t) as unknown as Record<StatefulLimitField, StatefulLimitFieldSnapshot>,\n\t};\n}\n", "import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\nimport type { SubagentSettings } from \"./agents/types.js\";\nimport {\n\ttype BlockingParallelLimitSettingsSnapshot,\n\tbuildBlockingParallelLimitSettingsSnapshot,\n\tbuildCompletionDeliverySettingsSnapshot,\n\tbuildConsultResourceSettingsSnapshot,\n\tbuildCwdPolicySettingsSnapshot,\n\tbuildDelegationWorkflowSettingsSnapshot,\n\tbuildStatefulLimitSettingsSnapshot,\n\tbuildStatefulTransportSettingsSnapshot,\n\tbuildSubagentSettingsSnapshot,\n\tbuildUsageRecordingSettingsSnapshot,\n\ttype CompletionDeliverySettingsSnapshot,\n\ttype ConsultResourceSettingsSnapshot,\n\ttype CwdPolicySettingsSnapshot,\n\ttype DelegationWorkflowSettingsSnapshot,\n\ttype InspectedSubagentSettingsDocument,\n\ttype StatefulLimitSettingsSnapshot,\n\ttype StatefulTransportSettingsSnapshot,\n\ttype SubagentSettingsSnapshot,\n\ttype UsageRecordingSettingsSnapshot,\n} from \"./settings/inspection.js\";\nimport { isPlainObject, normalizeSubagentSettings } from \"./settings/schema.js\";\n\nexport {\n\ttype BlockingParallelLimitSettingsSnapshot,\n\ttype CompletionDeliverySettingsSnapshot,\n\ttype ConsultResourceSettingsSnapshot,\n\ttype CwdPolicyFieldSnapshot,\n\ttype CwdPolicySettingsSnapshot,\n\tDEFAULT_CONSULT_RESOURCE_POLICY,\n\tDEFAULT_CONSULTATION_CWD_POLICY,\n\tDEFAULT_DELEGATION_CWD_POLICY,\n\ttype DelegationWorkflow,\n\ttype DelegationWorkflowSettingsSnapshot,\n\tresolveBlockingMaxParallelTasks,\n\tresolveDelegationWorkflow,\n\ttype StatefulLimitFieldSnapshot,\n\ttype StatefulLimitSettingsSnapshot,\n\ttype StatefulTransportSettingsSnapshot,\n\ttype SubagentSettingsSnapshot,\n\ttype UsageRecordingSettingsSnapshot,\n} from \"./settings/inspection.js\";\nexport { hasOwn, normalizeAgentSettings, normalizeSubagentSettings } from \"./settings/schema.js\";\n\nexport const SUBAGENT_SETTINGS_FILE = \"pi-subagents.json\";\nconst LEGACY_SETTINGS_FILE = \"pi-subagents-config.json\";\nlet pendingSettingsNotice: string | undefined;\n\nexport function resolveSubagentSettingsPaths(): {\n\tcanonicalPath: string;\n\tlegacyPath: string;\n\tactivePath?: string;\n} {\n\tconst canonicalPath = path.join(getAgentDir(), SUBAGENT_SETTINGS_FILE);\n\tconst legacyPath = path.join(getAgentDir(), LEGACY_SETTINGS_FILE);\n\treturn {\n\t\tcanonicalPath,\n\t\tlegacyPath,\n\t\tactivePath: fs.existsSync(canonicalPath)\n\t\t\t? canonicalPath\n\t\t\t: fs.existsSync(legacyPath)\n\t\t\t\t? legacyPath\n\t\t\t\t: undefined,\n\t};\n}\n\nexport function readSubagentSettings(): SubagentSettings | undefined {\n\tpendingSettingsNotice = undefined;\n\tconst { canonicalPath, legacyPath, activePath } = resolveSubagentSettingsPaths();\n\tif (activePath === canonicalPath) {\n\t\tconst canonical = readSettingsFile(canonicalPath);\n\t\tconst notices: string[] = [];\n\t\tif (!canonical) notices.push(`${SUBAGENT_SETTINGS_FILE} is invalid and was ignored.`);\n\t\tif (fs.existsSync(legacyPath)) {\n\t\t\tnotices.push(\n\t\t\t\t`${LEGACY_SETTINGS_FILE} ignored because ${SUBAGENT_SETTINGS_FILE} takes precedence.`,\n\t\t\t);\n\t\t}\n\t\tif (notices.length > 0) pendingSettingsNotice = notices.join(\"\\n\");\n\t\treturn canonical;\n\t}\n\tif (activePath === undefined) return undefined;\n\tconst legacy = readSettingsFile(legacyPath);\n\tif (fs.existsSync(canonicalPath)) {\n\t\tconst canonical = readSettingsFile(canonicalPath);\n\t\tpendingSettingsNotice = [\n\t\t\t...(!canonical ? [`${SUBAGENT_SETTINGS_FILE} is invalid and was ignored.`] : []),\n\t\t\t`${LEGACY_SETTINGS_FILE} ignored because ${SUBAGENT_SETTINGS_FILE} was created concurrently.`,\n\t\t].join(\"\\n\");\n\t\treturn canonical;\n\t}\n\tif (!legacy) {\n\t\tpendingSettingsNotice = `${LEGACY_SETTINGS_FILE} is invalid and was ignored.`;\n\t\treturn undefined;\n\t}\n\tpendingSettingsNotice = `Using legacy ${LEGACY_SETTINGS_FILE}; rename it to ${SUBAGENT_SETTINGS_FILE}. Future saves write ${SUBAGENT_SETTINGS_FILE} without modifying the legacy file.`;\n\treturn legacy;\n}\n\nexport function consumeSubagentSettingsNotice() {\n\tconst notice = pendingSettingsNotice;\n\tpendingSettingsNotice = undefined;\n\treturn notice;\n}\n\nexport function subagentSettingsFilePath(): string {\n\treturn path.join(getAgentDir(), SUBAGENT_SETTINGS_FILE);\n}\n\nfunction inspectSubagentSettingsDocument(): InspectedSubagentSettingsDocument {\n\tconst { canonicalPath, activePath } = resolveSubagentSettingsPaths();\n\tif (activePath === undefined) return { path: canonicalPath };\n\tconst inspected = inspectSubagentSettingsPath(activePath);\n\treturn activePath !== canonicalPath && fs.existsSync(canonicalPath)\n\t\t? inspectSubagentSettingsPath(canonicalPath)\n\t\t: inspected;\n}\n\nfunction inspectSubagentSettingsPath(configPath: string): InspectedSubagentSettingsDocument {\n\tconst fileName = path.basename(configPath);\n\tlet contents: string;\n\ttry {\n\t\tcontents = fs.readFileSync(configPath, \"utf8\");\n\t} catch (error) {\n\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\treturn {\n\t\t\tpath: configPath,\n\t\t\terror: `${fileName} could not be read${code ? ` (${safeErrorCode(code)})` : \"\"}`,\n\t\t};\n\t}\n\tlet raw: unknown;\n\ttry {\n\t\traw = JSON.parse(contents);\n\t} catch {\n\t\treturn { path: configPath, error: `${fileName} contains malformed JSON` };\n\t}\n\tconst settings = normalizeSubagentSettings(raw);\n\tif (!isPlainObject(raw) || !settings) {\n\t\treturn { path: configPath, error: `${fileName} is not a valid settings object` };\n\t}\n\treturn { path: configPath, raw, settings };\n}\n\nexport function inspectSubagentSettings(): SubagentSettingsSnapshot {\n\treturn buildSubagentSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectConsultResourceSettings(): ConsultResourceSettingsSnapshot {\n\treturn buildConsultResourceSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectCwdPolicySettings(): CwdPolicySettingsSnapshot {\n\treturn buildCwdPolicySettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectDelegationWorkflowSettings(): DelegationWorkflowSettingsSnapshot {\n\treturn buildDelegationWorkflowSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectCompletionDeliverySettings(): CompletionDeliverySettingsSnapshot {\n\treturn buildCompletionDeliverySettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectUsageRecordingSettings(): UsageRecordingSettingsSnapshot {\n\treturn buildUsageRecordingSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectStatefulTransportSettings(): StatefulTransportSettingsSnapshot {\n\treturn buildStatefulTransportSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectBlockingParallelLimitSettings(): BlockingParallelLimitSettingsSnapshot {\n\treturn buildBlockingParallelLimitSettingsSnapshot(inspectSubagentSettingsDocument());\n}\n\nexport function inspectStatefulLimitSettings(): StatefulLimitSettingsSnapshot {\n\treturn buildStatefulLimitSettingsSnapshot(\n\t\tinspectSubagentSettingsDocument(),\n\t\tsubagentSettingsFilePath(),\n\t);\n}\n\nexport function pathEntryExists(filePath: string): boolean {\n\ttry {\n\t\tfs.lstatSync(filePath);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return false;\n\t\tthrow error;\n\t}\n}\n\nfunction readSettingsFile(configPath: string): SubagentSettings | undefined {\n\treturn readSettingsSnapshot(configPath).settings;\n}\n\nexport function readSettingsSnapshot(configPath: string): {\n\tsettings?: SubagentSettings;\n\tcontents?: string;\n} {\n\ttry {\n\t\tconst contents = fs.readFileSync(configPath, \"utf8\");\n\t\treturn { settings: normalizeSubagentSettings(JSON.parse(contents)), contents };\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction safeErrorCode(value: string): string {\n\treturn value.replace(/[^A-Z0-9_-]/giu, \"?\").slice(0, 64);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAcO,SAAS,OAAO,KAAa,KAA2B;AAC9D,SAAO,OAAO,OAAO,KAAK,GAAG;AAC9B;AAEO,SAAS,cAAc,OAAkD;AAC/E,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;AAEA,SAAS,cAAc,OAAmC;AACzD,SAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ;AAC9E;AAEO,SAAS,iBAAiB,OAAiC;AACjE,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,SAAS;AACxE;AAEO,SAAS,kBAAkB,OAAiC;AAClE,SAAO,iBAAiB,KAAK,KAAK,OAAO,cAAc,KAAK;AAC7D;AAEO,SAAS,uBAAuB,OAAiD;AACvF,MAAI,CAAC,cAAc,KAAK,EAAG,QAAO;AAElC,QAAM,SAA8B,CAAC;AACrC,MAAI,gBAAgB;AAEpB,MAAI,OAAO,OAAO,OAAO,GAAG;AAC3B,QAAI,CAAC,cAAc,MAAM,KAAK,EAAG,QAAO;AACxC,WAAO,QAAQ,MAAM;AACrB,oBAAgB;AAAA,EACjB;AAEA,MAAI,OAAO,OAAO,OAAO,GAAG;AAC3B,QAAI,MAAM,UAAU,QAAQ,OAAO,MAAM,UAAU,SAAU,QAAO;AACpE,WAAO,QAAQ,MAAM;AACrB,oBAAgB;AAAA,EACjB;AAEA,MAAI,OAAO,OAAO,eAAe,GAAG;AACnC,QAAI,MAAM,kBAAkB,QAAQ,CAAC,gBAAgB,MAAM,aAAa,EAAG,QAAO;AAClF,WAAO,gBAAgB,MAAM;AAC7B,oBAAgB;AAAA,EACjB;AAEA,MAAI,OAAO,OAAO,WAAW,GAAG;AAC/B,QACC,MAAM,cAAc,SACnB,CAAC,iBAAiB,MAAM,SAAS,KAAK,MAAM,YAAY,0BACxD;AACD,aAAO;AAAA,IACR;AACA,WAAO,YAAY,MAAM;AACzB,oBAAgB;AAAA,EACjB;AAEA,SAAO,gBAAgB,SAAS;AACjC;AAEO,SAAS,0BAA0B,OAA8C;AACvF,MAAI,CAAC,cAAc,KAAK,EAAG,QAAO;AAClC,QAAM,WAA6B,CAAC;AACpC,MAAI,OAAO,OAAO,QAAQ,GAAG;AAC5B,QAAI,CAAC,cAAc,MAAM,MAAM,EAAG,QAAO;AACzC,UAAM,SAA8C,CAAC;AACrD,eAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG;AAC7D,YAAM,SAAS,uBAAuB,SAAS;AAC/C,UAAI,OAAQ,QAAO,IAAI,IAAI;AAAA,IAC5B;AACA,QAAI,OAAO,KAAK,MAAM,EAAE,SAAS,EAAG,UAAS,SAAS;AAAA,EACvD;AACA,MAAI,OAAO,OAAO,UAAU,GAAG;AAC9B,QAAI,CAAC,cAAc,MAAM,QAAQ,EAAG,QAAO;AAC3C,UAAM,WAAsD,CAAC;AAC7D,QAAI,OAAO,MAAM,UAAU,SAAS,GAAG;AACtC,UAAI,OAAO,MAAM,SAAS,YAAY,UAAW,QAAO;AACxD,eAAS,UAAU,MAAM,SAAS;AAAA,IACnC;AACA,QAAI,OAAO,MAAM,UAAU,kBAAkB,GAAG;AAC/C,UACC,CAAC,kBAAkB,MAAM,SAAS,gBAAgB,KAClD,MAAM,SAAS,mBAAmB,iCACjC;AACD,eAAO;AAAA,MACR;AACA,eAAS,mBAAmB,MAAM,SAAS;AAAA,IAC5C;AACA,aAAS,WAAW;AAAA,EACrB;AACA,MAAI,OAAO,OAAO,UAAU,GAAG;AAC9B,QAAI,CAAC,cAAc,MAAM,QAAQ,EAAG,QAAO;AAC3C,UAAM,UAAqD,CAAC;AAC5D,QAAI,OAAO,MAAM,UAAU,WAAW,GAAG;AACxC,UACC,MAAM,SAAS,cAAc,gBAC7B,MAAM,SAAS,cAAc,gBAC7B,MAAM,SAAS,cAAc,SAC7B,MAAM,SAAS,cAAc,QAC5B;AACD,eAAO;AAAA,MACR;AACA,cAAQ,YAAY,MAAM,SAAS;AAAA,IACpC;AACA,QAAI,OAAO,MAAM,UAAU,oBAAoB,GAAG;AACjD,UACC,MAAM,SAAS,uBAAuB,eACtC,MAAM,SAAS,uBAAuB,eACrC;AACD,eAAO;AAAA,MACR;AACA,cAAQ,qBAAqB,MAAM,SAAS;AAAA,IAC7C;AACA,eAAW,OAAO,uBAAuB;AACxC,UAAI,OAAO,MAAM,UAAU,GAAG,GAAG;AAChC,YAAI,CAAC,qBAAqB,KAAK,MAAM,SAAS,GAAG,CAAC,EAAG,QAAO;AAC5D,gBAAQ,GAAG,IAAI,MAAM,SAAS,GAAG;AAAA,MAClC;AAAA,IACD;AACA,eAAW,OAAO,CAAC,sBAAsB,0BAA0B,WAAW,GAAY;AACzF,UAAI,OAAO,MAAM,UAAU,GAAG,GAAG;AAChC,YAAI,CAAC,kBAAkB,MAAM,SAAS,GAAG,CAAC,EAAG,QAAO;AACpD,gBAAQ,GAAG,IAAI,MAAM,SAAS,GAAG;AAAA,MAClC;AAAA,IACD;AACA,QAAI,OAAO,MAAM,UAAU,eAAe,GAAG;AAC5C,UAAI,CAAC,iBAAiB,MAAM,SAAS,aAAa,EAAG,QAAO;AAC5D,cAAQ,gBAAgB,MAAM,SAAS;AAAA,IACxC;AACA,QAAI,OAAO,MAAM,UAAU,SAAS,GAAG;AACtC,UAAI,OAAO,MAAM,SAAS,YAAY,UAAW,QAAO;AACxD,cAAQ,UAAU,MAAM,SAAS;AAAA,IAClC;AACA,aAAS,WAAW;AAAA,EACrB;AACA,MAAI,OAAO,OAAO,SAAS,GAAG;AAC7B,QAAI,CAAC,cAAc,MAAM,OAAO,EAAG,QAAO;AAC1C,UAAM,UAAoD,CAAC;AAC3D,QAAI,OAAO,MAAM,SAAS,WAAW,GAAG;AACvC,UACC,OAAO,MAAM,QAAQ,cAAc,YACnC,CAAC,0BAA0B,SAAS,MAAM,QAAQ,SAAkC,GACnF;AACD,eAAO;AAAA,MACR;AACA,cAAQ,YAAY,MAAM,QAAQ;AAAA,IACnC;AACA,aAAS,UAAU;AAAA,EACpB;AACA,MAAI,OAAO,OAAO,WAAW,GAAG;AAC/B,QAAI,CAAC,cAAc,MAAM,SAAS,EAAG,QAAO;AAC5C,UAAM,YAAwD,CAAC;AAC/D,QAAI,OAAO,MAAM,WAAW,cAAc,GAAG;AAC5C,UACC,OAAO,MAAM,UAAU,iBAAiB,YACxC,CAAC,0BAA0B,SAAS,MAAM,UAAU,YAAqC,GACxF;AACD,eAAO;AAAA,MACR;AACA,gBAAU,eAAe,MAAM,UAAU;AAAA,IAC1C;AACA,QAAI,OAAO,MAAM,WAAW,YAAY,GAAG;AAC1C,UACC,OAAO,MAAM,UAAU,eAAe,YACtC,CAAC,wBAAwB,SAAS,MAAM,UAAU,UAAiC,GAClF;AACD,eAAO;AAAA,MACR;AACA,gBAAU,aAAa,MAAM,UAAU;AAAA,IACxC;AACA,aAAS,YAAY;AAAA,EACtB;AACA,MAAI,OAAO,OAAO,gBAAgB,GAAG;AACpC,QAAI,CAAC,cAAc,MAAM,cAAc,EAAG,QAAO;AACjD,UAAM,iBAAkE,CAAC;AACzE,QAAI,OAAO,MAAM,gBAAgB,SAAS,GAAG;AAC5C,UAAI,OAAO,MAAM,eAAe,YAAY,UAAW,QAAO;AAC9D,qBAAe,UAAU,MAAM,eAAe;AAAA,IAC/C;AACA,aAAS,iBAAiB;AAAA,EAC3B;AACA,SAAO;AACR;;;AClLA,IAAM,8BAAkD;AACjD,IAAM,kCAAyD;AAC/D,IAAM,kCAAyD;AAC/D,IAAM,gCAAqD;AAsF3D,SAAS,0BACf,iBACA,iBACqB;AACrB,MAAI,mBAAmB,gBAAiB,QAAO;AAC/C,MAAI,gBAAiB,QAAO;AAC5B,MAAI,gBAAiB,QAAO;AAC5B,SAAO;AACR;AAEO,SAAS,gCAAgC,UAAqC;AACpF,SAAO,UAAU,UAAU,oBAAoB;AAChD;AAEO,SAAS,8BACf,WAC2B;AAC3B,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,UAAU,UAAU;AAAA,IACpB,QAAQ,UAAU,WAAW,kBAAkB;AAAA,IAC/C,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,EACrD;AACD;AAEO,SAAS,oCACf,WACiC;AACjC,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,WACL,cAAc,UAAU,IAAI,cAAc,KAAK,OAAO,UAAU,IAAI,gBAAgB,SAAS;AAC9F,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,SAAS,UAAU,SAAS,gBAAgB,YAAY;AAAA,IACxD,QAAQ,WAAW,kBAAkB;AAAA,EACtC;AACD;AAEO,SAAS,qCACf,WACkC;AAClC,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,WACL,cAAc,UAAU,IAAI,OAAO,KAAK,OAAO,UAAU,IAAI,SAAS,WAAW;AAClF,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,OAAO,UAAU,SAAS,SAAS,aAAa;AAAA,IAChD,QAAQ,WAAW,kBAAkB;AAAA,EACtC;AACD;AAEO,SAAS,+BACf,WAC4B;AAC5B,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,cAAc,EAAE,OAAO,iCAAiC,QAAQ,UAAU;AAAA,MAC1E,YAAY,EAAE,OAAO,+BAA+B,QAAQ,UAAU;AAAA,MACtE,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,YAAY,cAAc,UAAU,IAAI,SAAS,IAAI,UAAU,IAAI,YAAY;AACrF,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,cAAc;AAAA,MACb,OAAO,UAAU,SAAS,WAAW,gBAAgB;AAAA,MACrD,QAAQ,aAAa,OAAO,WAAW,cAAc,IAAI,kBAAkB;AAAA,IAC5E;AAAA,IACA,YAAY;AAAA,MACX,OAAO,UAAU,SAAS,WAAW,cAAc;AAAA,MACnD,QAAQ,aAAa,OAAO,WAAW,YAAY,IAAI,kBAAkB;AAAA,IAC1E;AAAA,EACD;AACD;AAEO,SAAS,wCACf,WACqC;AACrC,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,WACJ,cAAc,UAAU,IAAI,QAAQ,KAAK,OAAO,UAAU,IAAI,UAAU,SAAS,KACjF,cAAc,UAAU,IAAI,QAAQ,KAAK,OAAO,UAAU,IAAI,UAAU,SAAS;AACnF,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,OAAO;AAAA,MACN,UAAU,SAAS,UAAU,YAAY;AAAA,MACzC,UAAU,SAAS,UAAU,YAAY;AAAA,IAC1C;AAAA,IACA,QAAQ,WAAW,kBAAkB;AAAA,EACtC;AACD;AAEO,SAAS,wCACf,WACqC;AACrC,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,WACL,cAAc,UAAU,IAAI,QAAQ,KAAK,OAAO,UAAU,IAAI,UAAU,oBAAoB;AAC7F,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,OAAO,UAAU,SAAS,UAAU,sBAAsB;AAAA,IAC1D,QAAQ,WAAW,kBAAkB;AAAA,EACtC;AACD;AAEO,SAAS,uCACf,WACoC;AACpC,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,WACL,cAAc,UAAU,IAAI,QAAQ,KAAK,OAAO,UAAU,IAAI,UAAU,WAAW;AACpF,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,OAAO,UAAU,SAAS,UAAU,aAAa;AAAA,IACjD,QAAQ,WAAW,kBAAkB;AAAA,EACtC;AACD;AAEO,SAAS,2CACf,WACwC;AACxC,MAAI,CAAC,UAAU,OAAO,CAAC,UAAU,UAAU;AAC1C,WAAO;AAAA,MACN,MAAM,UAAU;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,GAAI,UAAU,QAAQ,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACrD;AAAA,EACD;AACA,QAAM,WACL,cAAc,UAAU,IAAI,QAAQ,KAAK,OAAO,UAAU,IAAI,UAAU,kBAAkB;AAC3F,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB,OAAO,gCAAgC,UAAU,QAAQ;AAAA,IACzD,QAAQ,WAAW,kBAAkB;AAAA,EACtC;AACD;AAEO,SAAS,mCACf,WACA,WACgC;AAChC,MAAI,UAAU,OAAO;AACpB,WAAO,EAAE,MAAM,UAAU,MAAM,WAAW,OAAO,UAAU,MAAM;AAAA,EAClE;AACA,QAAM,WAAW,sBAAsB,UAAU,UAAU,QAAQ;AACnE,QAAM,cAAc,cAAc,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,WAAW;AACtF,SAAO;AAAA,IACN,MAAM,UAAU;AAAA,IAChB;AAAA,IACA,QAAQ,OAAO;AAAA,MACd,sBAAsB,IAAI,CAAC,UAAU;AAAA,QACpC;AAAA,QACA;AAAA,UACC,OAAO,SAAS,KAAK;AAAA,UACrB,QAAQ,eAAe,OAAO,aAAa,KAAK,IAAI,kBAAkB;AAAA,QACvE;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AC7SA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,mBAAmB;AA8CrB,IAAM,yBAAyB;AACtC,IAAM,uBAAuB;AAC7B,IAAI;AAEG,SAAS,+BAId;AACD,QAAM,gBAAqB,UAAK,YAAY,GAAG,sBAAsB;AACrE,QAAM,aAAkB,UAAK,YAAY,GAAG,oBAAoB;AAChE,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,YAAe,cAAW,aAAa,IACpC,gBACG,cAAW,UAAU,IACvB,aACA;AAAA,EACL;AACD;AAEO,SAAS,uBAAqD;AACpE,0BAAwB;AACxB,QAAM,EAAE,eAAe,YAAY,WAAW,IAAI,6BAA6B;AAC/E,MAAI,eAAe,eAAe;AACjC,UAAM,YAAY,iBAAiB,aAAa;AAChD,UAAM,UAAoB,CAAC;AAC3B,QAAI,CAAC,UAAW,SAAQ,KAAK,GAAG,sBAAsB,8BAA8B;AACpF,QAAO,cAAW,UAAU,GAAG;AAC9B,cAAQ;AAAA,QACP,GAAG,oBAAoB,oBAAoB,sBAAsB;AAAA,MAClE;AAAA,IACD;AACA,QAAI,QAAQ,SAAS,EAAG,yBAAwB,QAAQ,KAAK,IAAI;AACjE,WAAO;AAAA,EACR;AACA,MAAI,eAAe,OAAW,QAAO;AACrC,QAAM,SAAS,iBAAiB,UAAU;AAC1C,MAAO,cAAW,aAAa,GAAG;AACjC,UAAM,YAAY,iBAAiB,aAAa;AAChD,4BAAwB;AAAA,MACvB,GAAI,CAAC,YAAY,CAAC,GAAG,sBAAsB,8BAA8B,IAAI,CAAC;AAAA,MAC9E,GAAG,oBAAoB,oBAAoB,sBAAsB;AAAA,IAClE,EAAE,KAAK,IAAI;AACX,WAAO;AAAA,EACR;AACA,MAAI,CAAC,QAAQ;AACZ,4BAAwB,GAAG,oBAAoB;AAC/C,WAAO;AAAA,EACR;AACA,0BAAwB,gBAAgB,oBAAoB,kBAAkB,sBAAsB,wBAAwB,sBAAsB;AAClJ,SAAO;AACR;AAEO,SAAS,gCAAgC;AAC/C,QAAM,SAAS;AACf,0BAAwB;AACxB,SAAO;AACR;AAEO,SAAS,2BAAmC;AAClD,SAAY,UAAK,YAAY,GAAG,sBAAsB;AACvD;AAEA,SAAS,kCAAqE;AAC7E,QAAM,EAAE,eAAe,WAAW,IAAI,6BAA6B;AACnE,MAAI,eAAe,OAAW,QAAO,EAAE,MAAM,cAAc;AAC3D,QAAM,YAAY,4BAA4B,UAAU;AACxD,SAAO,eAAe,iBAAoB,cAAW,aAAa,IAC/D,4BAA4B,aAAa,IACzC;AACJ;AAEA,SAAS,4BAA4B,YAAuD;AAC3F,QAAM,WAAgB,cAAS,UAAU;AACzC,MAAI;AACJ,MAAI;AACH,eAAc,gBAAa,YAAY,MAAM;AAAA,EAC9C,SAAS,OAAO;AACf,UAAM,OAAQ,MAAgC;AAC9C,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,GAAG,QAAQ,qBAAqB,OAAO,KAAK,cAAc,IAAI,CAAC,MAAM,EAAE;AAAA,IAC/E;AAAA,EACD;AACA,MAAI;AACJ,MAAI;AACH,UAAM,KAAK,MAAM,QAAQ;AAAA,EAC1B,QAAQ;AACP,WAAO,EAAE,MAAM,YAAY,OAAO,GAAG,QAAQ,2BAA2B;AAAA,EACzE;AACA,QAAM,WAAW,0BAA0B,GAAG;AAC9C,MAAI,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU;AACrC,WAAO,EAAE,MAAM,YAAY,OAAO,GAAG,QAAQ,kCAAkC;AAAA,EAChF;AACA,SAAO,EAAE,MAAM,YAAY,KAAK,SAAS;AAC1C;AAEO,SAAS,0BAAoD;AACnE,SAAO,8BAA8B,gCAAgC,CAAC;AACvE;AAEO,SAAS,iCAAkE;AACjF,SAAO,qCAAqC,gCAAgC,CAAC;AAC9E;AAEO,SAAS,2BAAsD;AACrE,SAAO,+BAA+B,gCAAgC,CAAC;AACxE;AAEO,SAAS,oCAAwE;AACvF,SAAO,wCAAwC,gCAAgC,CAAC;AACjF;AAEO,SAAS,oCAAwE;AACvF,SAAO,wCAAwC,gCAAgC,CAAC;AACjF;AAEO,SAAS,gCAAgE;AAC/E,SAAO,oCAAoC,gCAAgC,CAAC;AAC7E;AAEO,SAAS,mCAAsE;AACrF,SAAO,uCAAuC,gCAAgC,CAAC;AAChF;AAEO,SAAS,uCAA8E;AAC7F,SAAO,2CAA2C,gCAAgC,CAAC;AACpF;AAEO,SAAS,+BAA8D;AAC7E,SAAO;AAAA,IACN,gCAAgC;AAAA,IAChC,yBAAyB;AAAA,EAC1B;AACD;AAEO,SAAS,gBAAgB,UAA2B;AAC1D,MAAI;AACH,IAAG,aAAU,QAAQ;AACrB,WAAO;AAAA,EACR,SAAS,OAAO;AACf,QAAK,MAAgC,SAAS,SAAU,QAAO;AAC/D,UAAM;AAAA,EACP;AACD;AAEA,SAAS,iBAAiB,YAAkD;AAC3E,SAAO,qBAAqB,UAAU,EAAE;AACzC;AAEO,SAAS,qBAAqB,YAGnC;AACD,MAAI;AACH,UAAM,WAAc,gBAAa,YAAY,MAAM;AACnD,WAAO,EAAE,UAAU,0BAA0B,KAAK,MAAM,QAAQ,CAAC,GAAG,SAAS;AAAA,EAC9E,QAAQ;AACP,WAAO,CAAC;AAAA,EACT;AACD;AAEA,SAAS,cAAc,OAAuB;AAC7C,SAAO,MAAM,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE;AACxD;",
6
- "names": []
7
- }
@@ -1,59 +0,0 @@
1
- // @generated by scripts/build-runtime.mjs; do not edit.
2
- // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
-
4
- // src/tool-schema-compatibility.ts
5
- import { Type } from "typebox";
6
- var LLAMA_CPP_MAX_REPETITION_THRESHOLD = 2e3;
7
- function grammarSafeToolObject(properties, options) {
8
- return makeGrammarSafeToolSchema(Type.Object(properties, options));
9
- }
10
- function makeGrammarSafeToolSchema(schema) {
11
- return cloneSchema(schema, 0);
12
- }
13
- function cloneSchema(schema, depth) {
14
- if (!isRecord(schema)) return schema;
15
- const clone = cloneWithDescriptors(schema);
16
- if (depth > 1 && clone.type === "string" && typeof clone.maxLength === "number" && clone.maxLength >= LLAMA_CPP_MAX_REPETITION_THRESHOLD) {
17
- delete clone.maxLength;
18
- }
19
- if (isRecord(clone.properties)) {
20
- clone.properties = mapSchemas(clone.properties, depth + 1);
21
- }
22
- if (clone.items !== void 0) {
23
- clone.items = Array.isArray(clone.items) ? clone.items.map((item) => cloneSchema(item, depth + 1)) : cloneSchema(clone.items, depth + 1);
24
- }
25
- if (Array.isArray(clone.prefixItems)) {
26
- clone.prefixItems = clone.prefixItems.map((item) => cloneSchema(item, depth + 1));
27
- }
28
- for (const keyword of ["allOf", "anyOf", "oneOf"]) {
29
- if (Array.isArray(clone[keyword])) {
30
- clone[keyword] = clone[keyword].map((item) => cloneSchema(item, depth));
31
- }
32
- }
33
- if (isRecord(clone.patternProperties)) {
34
- clone.patternProperties = mapSchemas(clone.patternProperties, depth + 1);
35
- }
36
- if (isRecord(clone.additionalProperties)) {
37
- clone.additionalProperties = cloneSchema(clone.additionalProperties, depth + 1);
38
- }
39
- return clone;
40
- }
41
- function mapSchemas(schemas, depth) {
42
- return Object.fromEntries(
43
- Object.entries(schemas).map(([name, schema]) => [name, cloneSchema(schema, depth)])
44
- );
45
- }
46
- function cloneWithDescriptors(value) {
47
- return Object.defineProperties(
48
- Object.create(Object.getPrototypeOf(value)),
49
- Object.getOwnPropertyDescriptors(value)
50
- );
51
- }
52
- function isRecord(value) {
53
- return typeof value === "object" && value !== null && !Array.isArray(value);
54
- }
55
-
56
- export {
57
- grammarSafeToolObject
58
- };
59
- //# sourceMappingURL=chunk-TZ34IQ3M.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/tool-schema-compatibility.ts"],
4
- "sourcesContent": ["import { type TObject, type TObjectOptions, type TProperties, type TSchema, Type } from \"typebox\";\n\nconst LLAMA_CPP_MAX_REPETITION_THRESHOLD = 2_000;\n\n/**\n * Remove large nested string repetitions that llama.cpp cannot compile into GBNF.\n *\n * Runtime normalization and validation continue to bound these inputs.\n * See https://github.com/ggml-org/llama.cpp/issues/25746.\n */\nexport function grammarSafeToolObject<Properties extends TProperties>(\n\tproperties: Properties,\n\toptions?: TObjectOptions,\n): TObject<Properties> {\n\treturn makeGrammarSafeToolSchema(Type.Object(properties, options));\n}\n\nfunction makeGrammarSafeToolSchema<Schema extends TSchema>(schema: Schema): Schema {\n\treturn cloneSchema(schema, 0) as Schema;\n}\n\nfunction cloneSchema(schema: unknown, depth: number): unknown {\n\tif (!isRecord(schema)) return schema;\n\tconst clone = cloneWithDescriptors(schema);\n\tif (\n\t\tdepth > 1 &&\n\t\tclone.type === \"string\" &&\n\t\ttypeof clone.maxLength === \"number\" &&\n\t\tclone.maxLength >= LLAMA_CPP_MAX_REPETITION_THRESHOLD\n\t) {\n\t\tdelete clone.maxLength;\n\t}\n\tif (isRecord(clone.properties)) {\n\t\tclone.properties = mapSchemas(clone.properties, depth + 1);\n\t}\n\tif (clone.items !== undefined) {\n\t\tclone.items = Array.isArray(clone.items)\n\t\t\t? clone.items.map((item) => cloneSchema(item, depth + 1))\n\t\t\t: cloneSchema(clone.items, depth + 1);\n\t}\n\tif (Array.isArray(clone.prefixItems)) {\n\t\tclone.prefixItems = clone.prefixItems.map((item) => cloneSchema(item, depth + 1));\n\t}\n\tfor (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n\t\tif (Array.isArray(clone[keyword])) {\n\t\t\tclone[keyword] = clone[keyword].map((item) => cloneSchema(item, depth));\n\t\t}\n\t}\n\tif (isRecord(clone.patternProperties)) {\n\t\tclone.patternProperties = mapSchemas(clone.patternProperties, depth + 1);\n\t}\n\tif (isRecord(clone.additionalProperties)) {\n\t\tclone.additionalProperties = cloneSchema(clone.additionalProperties, depth + 1);\n\t}\n\treturn clone;\n}\n\nfunction mapSchemas(schemas: Record<string, unknown>, depth: number): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(schemas).map(([name, schema]) => [name, cloneSchema(schema, depth)]),\n\t);\n}\n\nfunction cloneWithDescriptors(value: Record<string, unknown>): Record<string, unknown> {\n\treturn Object.defineProperties(\n\t\tObject.create(Object.getPrototypeOf(value)),\n\t\tObject.getOwnPropertyDescriptors(value),\n\t) as Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
5
- "mappings": ";;;;AAAA,SAA4E,YAAY;AAExF,IAAM,qCAAqC;AAQpC,SAAS,sBACf,YACA,SACsB;AACtB,SAAO,0BAA0B,KAAK,OAAO,YAAY,OAAO,CAAC;AAClE;AAEA,SAAS,0BAAkD,QAAwB;AAClF,SAAO,YAAY,QAAQ,CAAC;AAC7B;AAEA,SAAS,YAAY,QAAiB,OAAwB;AAC7D,MAAI,CAAC,SAAS,MAAM,EAAG,QAAO;AAC9B,QAAM,QAAQ,qBAAqB,MAAM;AACzC,MACC,QAAQ,KACR,MAAM,SAAS,YACf,OAAO,MAAM,cAAc,YAC3B,MAAM,aAAa,oCAClB;AACD,WAAO,MAAM;AAAA,EACd;AACA,MAAI,SAAS,MAAM,UAAU,GAAG;AAC/B,UAAM,aAAa,WAAW,MAAM,YAAY,QAAQ,CAAC;AAAA,EAC1D;AACA,MAAI,MAAM,UAAU,QAAW;AAC9B,UAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IACpC,MAAM,MAAM,IAAI,CAAC,SAAS,YAAY,MAAM,QAAQ,CAAC,CAAC,IACtD,YAAY,MAAM,OAAO,QAAQ,CAAC;AAAA,EACtC;AACA,MAAI,MAAM,QAAQ,MAAM,WAAW,GAAG;AACrC,UAAM,cAAc,MAAM,YAAY,IAAI,CAAC,SAAS,YAAY,MAAM,QAAQ,CAAC,CAAC;AAAA,EACjF;AACA,aAAW,WAAW,CAAC,SAAS,SAAS,OAAO,GAAY;AAC3D,QAAI,MAAM,QAAQ,MAAM,OAAO,CAAC,GAAG;AAClC,YAAM,OAAO,IAAI,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS,YAAY,MAAM,KAAK,CAAC;AAAA,IACvE;AAAA,EACD;AACA,MAAI,SAAS,MAAM,iBAAiB,GAAG;AACtC,UAAM,oBAAoB,WAAW,MAAM,mBAAmB,QAAQ,CAAC;AAAA,EACxE;AACA,MAAI,SAAS,MAAM,oBAAoB,GAAG;AACzC,UAAM,uBAAuB,YAAY,MAAM,sBAAsB,QAAQ,CAAC;AAAA,EAC/E;AACA,SAAO;AACR;AAEA,SAAS,WAAW,SAAkC,OAAwC;AAC7F,SAAO,OAAO;AAAA,IACb,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM,YAAY,QAAQ,KAAK,CAAC,CAAC;AAAA,EACnF;AACD;AAEA,SAAS,qBAAqB,OAAyD;AACtF,SAAO,OAAO;AAAA,IACb,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;AAAA,IAC1C,OAAO,0BAA0B,KAAK;AAAA,EACvC;AACD;AAEA,SAAS,SAAS,OAAkD;AACnE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;",
6
- "names": []
7
- }
@@ -1,22 +0,0 @@
1
- // @generated by scripts/build-runtime.mjs; do not edit.
2
- // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
-
4
- // src/consult-policy.ts
5
- var READ_ONLY_CONSULT_TOOLS = ["read", "grep", "find", "ls"];
6
- var READ_ONLY_CONSULT_TOOL_SET = new Set(READ_ONLY_CONSULT_TOOLS);
7
- function resolveConsultTools(tools) {
8
- if (tools === void 0) return [...READ_ONLY_CONSULT_TOOLS];
9
- const seen = /* @__PURE__ */ new Set();
10
- const effective = [];
11
- for (const tool of tools) {
12
- if (!READ_ONLY_CONSULT_TOOL_SET.has(tool) || seen.has(tool)) continue;
13
- seen.add(tool);
14
- effective.push(tool);
15
- }
16
- return effective;
17
- }
18
-
19
- export {
20
- resolveConsultTools
21
- };
22
- //# sourceMappingURL=chunk-UMBPMVJW.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/consult-policy.ts"],
4
- "sourcesContent": ["export const READ_ONLY_CONSULT_TOOLS = [\"read\", \"grep\", \"find\", \"ls\"] as const;\n\nconst READ_ONLY_CONSULT_TOOL_SET = new Set<string>(READ_ONLY_CONSULT_TOOLS);\n\nexport function resolveConsultTools(tools: readonly string[] | undefined): string[] {\n\tif (tools === undefined) return [...READ_ONLY_CONSULT_TOOLS];\n\tconst seen = new Set<string>();\n\tconst effective: string[] = [];\n\tfor (const tool of tools) {\n\t\tif (!READ_ONLY_CONSULT_TOOL_SET.has(tool) || seen.has(tool)) continue;\n\t\tseen.add(tool);\n\t\teffective.push(tool);\n\t}\n\treturn effective;\n}\n"],
5
- "mappings": ";;;;AAAO,IAAM,0BAA0B,CAAC,QAAQ,QAAQ,QAAQ,IAAI;AAEpE,IAAM,6BAA6B,IAAI,IAAY,uBAAuB;AAEnE,SAAS,oBAAoB,OAAgD;AACnF,MAAI,UAAU,OAAW,QAAO,CAAC,GAAG,uBAAuB;AAC3D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,YAAsB,CAAC;AAC7B,aAAW,QAAQ,OAAO;AACzB,QAAI,CAAC,2BAA2B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAG;AAC7D,SAAK,IAAI,IAAI;AACb,cAAU,KAAK,IAAI;AAAA,EACpB;AACA,SAAO;AACR;",
6
- "names": []
7
- }
@@ -1,80 +0,0 @@
1
- // @generated by scripts/build-runtime.mjs; do not edit.
2
- // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
-
4
- // src/stateful-limits.ts
5
- var STATEFUL_LIMIT_FIELDS = [
6
- "maxAgents",
7
- "maxActiveTurns",
8
- "maxChildrenPerAgent",
9
- "maxDepth",
10
- "maxStoredAgents"
11
- ];
12
- var STATEFUL_LIMIT_DEFINITIONS = [
13
- {
14
- field: "maxAgents",
15
- label: "Subagents saved for follow-up",
16
- description: "Working, queued, and reusable background subagents kept in one session",
17
- defaultValue: 16,
18
- minimum: 1
19
- },
20
- {
21
- field: "maxActiveTurns",
22
- label: "Subagents working at once",
23
- description: "Background subagent turns that may run at the same time",
24
- defaultValue: 4,
25
- minimum: 1
26
- },
27
- {
28
- field: "maxChildrenPerAgent",
29
- label: "Direct children per subagent",
30
- description: "Subagents that one parent subagent may keep for follow-up",
31
- defaultValue: 8,
32
- minimum: 1
33
- },
34
- {
35
- field: "maxDepth",
36
- label: "Nested subagent levels",
37
- description: "Child levels allowed below a top-level subagent",
38
- defaultValue: 3,
39
- minimum: 0
40
- },
41
- {
42
- field: "maxStoredAgents",
43
- label: "Stored subagent records",
44
- description: "Background subagent records kept on disk for each session",
45
- defaultValue: 50,
46
- minimum: 1
47
- }
48
- ];
49
- var definitionsByField = new Map(
50
- STATEFUL_LIMIT_DEFINITIONS.map((definition) => [definition.field, definition])
51
- );
52
- function statefulLimitDefinition(field) {
53
- const definition = definitionsByField.get(field);
54
- if (!definition) throw new Error(`Unknown stateful limit: ${field}`);
55
- return definition;
56
- }
57
- function isStatefulLimitField(value) {
58
- return STATEFUL_LIMIT_FIELDS.includes(value);
59
- }
60
- function isValidStatefulLimit(field, value) {
61
- return typeof value === "number" && Number.isSafeInteger(value) && value >= statefulLimitDefinition(field).minimum;
62
- }
63
- function resolveStatefulLimits(settings) {
64
- return Object.fromEntries(
65
- STATEFUL_LIMIT_DEFINITIONS.map((definition) => [
66
- definition.field,
67
- settings?.[definition.field] ?? definition.defaultValue
68
- ])
69
- );
70
- }
71
-
72
- export {
73
- STATEFUL_LIMIT_FIELDS,
74
- STATEFUL_LIMIT_DEFINITIONS,
75
- statefulLimitDefinition,
76
- isStatefulLimitField,
77
- isValidStatefulLimit,
78
- resolveStatefulLimits
79
- };
80
- //# sourceMappingURL=chunk-VDG7LTYE.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/stateful-limits.ts"],
4
- "sourcesContent": ["import type { SubagentRuntimeSettings } from \"./agents/types.js\";\n\nexport const STATEFUL_LIMIT_FIELDS = [\n\t\"maxAgents\",\n\t\"maxActiveTurns\",\n\t\"maxChildrenPerAgent\",\n\t\"maxDepth\",\n\t\"maxStoredAgents\",\n] as const;\n\nexport type StatefulLimitField = (typeof STATEFUL_LIMIT_FIELDS)[number];\n\nexport interface StatefulLimits {\n\tmaxAgents: number;\n\tmaxActiveTurns: number;\n\tmaxChildrenPerAgent: number;\n\tmaxDepth: number;\n\tmaxStoredAgents: number;\n}\n\nexport interface StatefulLimitDefinition {\n\tfield: StatefulLimitField;\n\tlabel: string;\n\tdescription: string;\n\tdefaultValue: number;\n\tminimum: number;\n}\n\nexport const STATEFUL_LIMIT_DEFINITIONS: readonly StatefulLimitDefinition[] = [\n\t{\n\t\tfield: \"maxAgents\",\n\t\tlabel: \"Subagents saved for follow-up\",\n\t\tdescription: \"Working, queued, and reusable background subagents kept in one session\",\n\t\tdefaultValue: 16,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxActiveTurns\",\n\t\tlabel: \"Subagents working at once\",\n\t\tdescription: \"Background subagent turns that may run at the same time\",\n\t\tdefaultValue: 4,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxChildrenPerAgent\",\n\t\tlabel: \"Direct children per subagent\",\n\t\tdescription: \"Subagents that one parent subagent may keep for follow-up\",\n\t\tdefaultValue: 8,\n\t\tminimum: 1,\n\t},\n\t{\n\t\tfield: \"maxDepth\",\n\t\tlabel: \"Nested subagent levels\",\n\t\tdescription: \"Child levels allowed below a top-level subagent\",\n\t\tdefaultValue: 3,\n\t\tminimum: 0,\n\t},\n\t{\n\t\tfield: \"maxStoredAgents\",\n\t\tlabel: \"Stored subagent records\",\n\t\tdescription: \"Background subagent records kept on disk for each session\",\n\t\tdefaultValue: 50,\n\t\tminimum: 1,\n\t},\n];\n\nconst definitionsByField = new Map(\n\tSTATEFUL_LIMIT_DEFINITIONS.map((definition) => [definition.field, definition]),\n);\n\nexport function statefulLimitDefinition(field: StatefulLimitField): StatefulLimitDefinition {\n\tconst definition = definitionsByField.get(field);\n\tif (!definition) throw new Error(`Unknown stateful limit: ${field}`);\n\treturn definition;\n}\n\nexport function isStatefulLimitField(value: string): value is StatefulLimitField {\n\treturn (STATEFUL_LIMIT_FIELDS as readonly string[]).includes(value);\n}\n\nexport function isValidStatefulLimit(field: StatefulLimitField, value: unknown): value is number {\n\treturn (\n\t\ttypeof value === \"number\" &&\n\t\tNumber.isSafeInteger(value) &&\n\t\tvalue >= statefulLimitDefinition(field).minimum\n\t);\n}\n\nexport function resolveStatefulLimits(settings?: SubagentRuntimeSettings): StatefulLimits {\n\treturn Object.fromEntries(\n\t\tSTATEFUL_LIMIT_DEFINITIONS.map((definition) => [\n\t\t\tdefinition.field,\n\t\t\tsettings?.[definition.field] ?? definition.defaultValue,\n\t\t]),\n\t) as unknown as StatefulLimits;\n}\n"],
5
- "mappings": ";;;;AAEO,IAAM,wBAAwB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAoBO,IAAM,6BAAiE;AAAA,EAC7E;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACV;AACD;AAEA,IAAM,qBAAqB,IAAI;AAAA,EAC9B,2BAA2B,IAAI,CAAC,eAAe,CAAC,WAAW,OAAO,UAAU,CAAC;AAC9E;AAEO,SAAS,wBAAwB,OAAoD;AAC3F,QAAM,aAAa,mBAAmB,IAAI,KAAK;AAC/C,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,2BAA2B,KAAK,EAAE;AACnE,SAAO;AACR;AAEO,SAAS,qBAAqB,OAA4C;AAChF,SAAQ,sBAA4C,SAAS,KAAK;AACnE;AAEO,SAAS,qBAAqB,OAA2B,OAAiC;AAChG,SACC,OAAO,UAAU,YACjB,OAAO,cAAc,KAAK,KAC1B,SAAS,wBAAwB,KAAK,EAAE;AAE1C;AAEO,SAAS,sBAAsB,UAAoD;AACzF,SAAO,OAAO;AAAA,IACb,2BAA2B,IAAI,CAAC,eAAe;AAAA,MAC9C,WAAW;AAAA,MACX,WAAW,WAAW,KAAK,KAAK,WAAW;AAAA,IAC5C,CAAC;AAAA,EACF;AACD;",
6
- "names": []
7
- }
@@ -1,73 +0,0 @@
1
- // @generated by scripts/build-runtime.mjs; do not edit.
2
- // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
- import {
4
- formatTimeoutCheckpoint
5
- } from "./chunk-RTCVYIZA.ts";
6
- import {
7
- DEFAULT_MAX_CONTEXT_BYTES,
8
- truncateUtf8
9
- } from "./chunk-H3FP6DLR.ts";
10
-
11
- // src/runner-result.ts
12
- function getFinalOutput(messages) {
13
- for (let i = messages.length - 1; i >= 0; i--) {
14
- const msg = messages[i];
15
- if (msg?.role === "assistant") {
16
- const text = msg.content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
17
- if (text) return text;
18
- }
19
- }
20
- return "";
21
- }
22
- function getResultFinalOutput(result) {
23
- return result.finalOutput ?? getFinalOutput(result.messages);
24
- }
25
- function isResultError(result) {
26
- return result.exitCode !== 0 && result.exitCode !== -1 || result.timedOut === true || result.stopReason === "timeout" || result.stopReason === "error" || result.stopReason === "aborted";
27
- }
28
- function formatResultFailure(result) {
29
- const error = result.errorMessage || result.stderr.trim();
30
- const output = getResultFinalOutput(result);
31
- const sections = [error];
32
- if (result.timeoutSummary) sections.push(`Timed-out work summary:
33
- ${result.timeoutSummary}`);
34
- else if (output) sections.push(`Partial output:
35
- ${output}`);
36
- if (result.partialOutput && result.partialOutput !== output) {
37
- sections.push(`Partial output before finalization:
38
- ${result.partialOutput}`);
39
- }
40
- if (result.termination && !result.timeoutSummary) {
41
- sections.push(
42
- `Termination checkpoint:
43
- ${formatTimeoutCheckpoint(result.termination.checkpoint)}`
44
- );
45
- }
46
- if (result.timeoutSummaryError) {
47
- sections.push(`Summary finalization failed: ${result.timeoutSummaryError}`);
48
- }
49
- return truncateUtf8(
50
- sections.filter(Boolean).join("\n\n") || "(no output)",
51
- DEFAULT_MAX_CONTEXT_BYTES
52
- ).text;
53
- }
54
-
55
- // src/runner-outcome.ts
56
- function getResultFinalOutput2(result) {
57
- return getResultFinalOutput(result);
58
- }
59
- function isResultError2(result) {
60
- return isResultError(result) || result.resultContractInvalid === true || result.outcome !== void 0 && result.outcome.status !== "completed" && result.outcome.status !== "partial";
61
- }
62
- function formatResultFailure2(result) {
63
- const contractError = result.resultContractInvalid ? `Subagent returned an invalid ${result.resultFormat ?? "structured"} result contract` : result.outcome && !["completed", "partial"].includes(result.outcome.status) ? `Subagent outcome ${result.outcome.status}${result.outcome.reasonCode ? ` (${result.outcome.reasonCode})` : ""}; recovery: ${result.outcome.recoveryActions.join(", ") || "none"}` : void 0;
64
- return contractError ? formatResultFailure({ ...result, errorMessage: contractError }) : formatResultFailure(result);
65
- }
66
-
67
- export {
68
- getFinalOutput,
69
- getResultFinalOutput2 as getResultFinalOutput,
70
- isResultError2 as isResultError,
71
- formatResultFailure2 as formatResultFailure
72
- };
73
- //# sourceMappingURL=chunk-X4NMONPE.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/runner-result.ts", "../../src/runner-outcome.ts"],
4
- "sourcesContent": ["import type { Message } from \"@earendil-works/pi-ai\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { SingleResult } from \"./runner-types.js\";\nimport { formatTimeoutCheckpoint } from \"./timeout-checkpoint.js\";\n\nexport function getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg?.role === \"assistant\") {\n\t\t\tconst text = msg.content\n\t\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (text) return text;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nexport function getResultFinalOutput(result: SingleResult): string {\n\treturn result.finalOutput ?? getFinalOutput(result.messages);\n}\n\nexport function isResultError(result: SingleResult): boolean {\n\treturn (\n\t\t(result.exitCode !== 0 && result.exitCode !== -1) ||\n\t\tresult.timedOut === true ||\n\t\tresult.stopReason === \"timeout\" ||\n\t\tresult.stopReason === \"error\" ||\n\t\tresult.stopReason === \"aborted\"\n\t);\n}\n\nexport function formatResultFailure(result: SingleResult): string {\n\tconst error = result.errorMessage || result.stderr.trim();\n\tconst output = getResultFinalOutput(result);\n\tconst sections = [error];\n\tif (result.timeoutSummary) sections.push(`Timed-out work summary:\\n${result.timeoutSummary}`);\n\telse if (output) sections.push(`Partial output:\\n${output}`);\n\tif (result.partialOutput && result.partialOutput !== output) {\n\t\tsections.push(`Partial output before finalization:\\n${result.partialOutput}`);\n\t}\n\tif (result.termination && !result.timeoutSummary) {\n\t\tsections.push(\n\t\t\t`Termination checkpoint:\\n${formatTimeoutCheckpoint(result.termination.checkpoint)}`,\n\t\t);\n\t}\n\tif (result.timeoutSummaryError) {\n\t\tsections.push(`Summary finalization failed: ${result.timeoutSummaryError}`);\n\t}\n\treturn truncateUtf8(\n\t\tsections.filter(Boolean).join(\"\\n\\n\") || \"(no output)\",\n\t\tDEFAULT_MAX_CONTEXT_BYTES,\n\t).text;\n}\n", "import {\n\tformatResultFailure as formatBaseResultFailure,\n\tgetResultFinalOutput as getBaseResultFinalOutput,\n\tisResultError as isBaseResultError,\n} from \"./runner-result.js\";\nimport type { SingleResult } from \"./runner-types.js\";\n\nexport function getResultFinalOutput(result: SingleResult): string {\n\treturn getBaseResultFinalOutput(result);\n}\n\nexport function isResultError(result: SingleResult): boolean {\n\treturn (\n\t\tisBaseResultError(result) ||\n\t\tresult.resultContractInvalid === true ||\n\t\t(result.outcome !== undefined &&\n\t\t\tresult.outcome.status !== \"completed\" &&\n\t\t\tresult.outcome.status !== \"partial\")\n\t);\n}\n\nexport function formatResultFailure(result: SingleResult): string {\n\tconst contractError = result.resultContractInvalid\n\t\t? `Subagent returned an invalid ${result.resultFormat ?? \"structured\"} result contract`\n\t\t: result.outcome && ![\"completed\", \"partial\"].includes(result.outcome.status)\n\t\t\t? `Subagent outcome ${result.outcome.status}${result.outcome.reasonCode ? ` (${result.outcome.reasonCode})` : \"\"}; recovery: ${result.outcome.recoveryActions.join(\", \") || \"none\"}`\n\t\t\t: undefined;\n\treturn contractError\n\t\t? formatBaseResultFailure({ ...result, errorMessage: contractError })\n\t\t: formatBaseResultFailure(result);\n}\n"],
5
- "mappings": ";;;;;;;;;;;AAKO,SAAS,eAAe,UAA6B;AAC3D,WAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,KAAK,SAAS,aAAa;AAC9B,YAAM,OAAO,IAAI,QACf,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,IAAI;AACX,UAAI,KAAM,QAAO;AAAA,IAClB;AAAA,EACD;AACA,SAAO;AACR;AAEO,SAAS,qBAAqB,QAA8B;AAClE,SAAO,OAAO,eAAe,eAAe,OAAO,QAAQ;AAC5D;AAEO,SAAS,cAAc,QAA+B;AAC5D,SACE,OAAO,aAAa,KAAK,OAAO,aAAa,MAC9C,OAAO,aAAa,QACpB,OAAO,eAAe,aACtB,OAAO,eAAe,WACtB,OAAO,eAAe;AAExB;AAEO,SAAS,oBAAoB,QAA8B;AACjE,QAAM,QAAQ,OAAO,gBAAgB,OAAO,OAAO,KAAK;AACxD,QAAM,SAAS,qBAAqB,MAAM;AAC1C,QAAM,WAAW,CAAC,KAAK;AACvB,MAAI,OAAO,eAAgB,UAAS,KAAK;AAAA,EAA4B,OAAO,cAAc,EAAE;AAAA,WACnF,OAAQ,UAAS,KAAK;AAAA,EAAoB,MAAM,EAAE;AAC3D,MAAI,OAAO,iBAAiB,OAAO,kBAAkB,QAAQ;AAC5D,aAAS,KAAK;AAAA,EAAwC,OAAO,aAAa,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,eAAe,CAAC,OAAO,gBAAgB;AACjD,aAAS;AAAA,MACR;AAAA,EAA4B,wBAAwB,OAAO,YAAY,UAAU,CAAC;AAAA,IACnF;AAAA,EACD;AACA,MAAI,OAAO,qBAAqB;AAC/B,aAAS,KAAK,gCAAgC,OAAO,mBAAmB,EAAE;AAAA,EAC3E;AACA,SAAO;AAAA,IACN,SAAS,OAAO,OAAO,EAAE,KAAK,MAAM,KAAK;AAAA,IACzC;AAAA,EACD,EAAE;AACH;;;AC/CO,SAASA,sBAAqB,QAA8B;AAClE,SAAO,qBAAyB,MAAM;AACvC;AAEO,SAASC,eAAc,QAA+B;AAC5D,SACC,cAAkB,MAAM,KACxB,OAAO,0BAA0B,QAChC,OAAO,YAAY,UACnB,OAAO,QAAQ,WAAW,eAC1B,OAAO,QAAQ,WAAW;AAE7B;AAEO,SAASC,qBAAoB,QAA8B;AACjE,QAAM,gBAAgB,OAAO,wBAC1B,gCAAgC,OAAO,gBAAgB,YAAY,qBACnE,OAAO,WAAW,CAAC,CAAC,aAAa,SAAS,EAAE,SAAS,OAAO,QAAQ,MAAM,IACzE,oBAAoB,OAAO,QAAQ,MAAM,GAAG,OAAO,QAAQ,aAAa,KAAK,OAAO,QAAQ,UAAU,MAAM,EAAE,eAAe,OAAO,QAAQ,gBAAgB,KAAK,IAAI,KAAK,MAAM,KAChL;AACJ,SAAO,gBACJ,oBAAwB,EAAE,GAAG,QAAQ,cAAc,cAAc,CAAC,IAClE,oBAAwB,MAAM;AAClC;",
6
- "names": ["getResultFinalOutput", "isResultError", "formatResultFailure"]
7
- }
@@ -1,65 +0,0 @@
1
- // @generated by scripts/build-runtime.mjs; do not edit.
2
- // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
- import {
4
- isExecutionPlan
5
- } from "./chunk-7AAJEUSL.ts";
6
-
7
- // src/capability-grant.ts
8
- import { createHash } from "node:crypto";
9
- var CAPABILITY_GRANT_VERSION = "pi-subagents:capability-grant:v1";
10
- function grantId(projection) {
11
- return createHash("sha256").update(JSON.stringify(projection)).digest("hex");
12
- }
13
- function issueCapabilityGrant(plan, issuedAt, lifetimeMs) {
14
- if (!Number.isFinite(issuedAt) || !Number.isFinite(lifetimeMs) || lifetimeMs <= 0) {
15
- throw new Error("Capability grant requires finite issuance and lifetime bounds");
16
- }
17
- const expiresAt = issuedAt + lifetimeMs;
18
- const projection = {
19
- executionPlanId: plan.id,
20
- taskGeneration: plan.taskGeneration,
21
- effectiveTools: plan.effectiveTools,
22
- issuedAt,
23
- expiresAt
24
- };
25
- return {
26
- version: CAPABILITY_GRANT_VERSION,
27
- id: grantId(projection),
28
- ...projection,
29
- state: "active"
30
- };
31
- }
32
- function revokeCapabilityGrant(grant, reason, revokedAt) {
33
- if (grant.state === "revoked") throw new Error("Capability grant is already revoked");
34
- grant.state = "revoked";
35
- grant.revokedAt = revokedAt;
36
- grant.revocationReason = reason.slice(0, 256);
37
- return structuredClone(grant);
38
- }
39
- function isCapabilityGrant(value) {
40
- if (!value || typeof value !== "object" || Array.isArray(value)) return false;
41
- const grant = value;
42
- const validShape = grant.version === CAPABILITY_GRANT_VERSION && typeof grant.id === "string" && /^[a-f0-9]{64}$/u.test(grant.id) && typeof grant.executionPlanId === "string" && /^[a-f0-9]{64}$/u.test(grant.executionPlanId) && Number.isSafeInteger(grant.taskGeneration) && Number(grant.taskGeneration) >= 0 && Number.isFinite(grant.issuedAt) && Number.isFinite(grant.expiresAt) && Number(grant.expiresAt) >= Number(grant.issuedAt) && (grant.state === "active" || grant.state === "revoked") && (grant.state === "active" ? grant.revokedAt === void 0 && grant.revocationReason === void 0 : Number.isFinite(grant.revokedAt) && typeof grant.revocationReason === "string" && grant.revocationReason.length > 0) && (grant.effectiveTools === void 0 || Array.isArray(grant.effectiveTools) && grant.effectiveTools.every((tool) => typeof tool === "string"));
43
- if (!validShape) return false;
44
- const validated = grant;
45
- const expectedId = grantId({
46
- executionPlanId: validated.executionPlanId,
47
- taskGeneration: validated.taskGeneration,
48
- effectiveTools: validated.effectiveTools,
49
- issuedAt: validated.issuedAt,
50
- expiresAt: validated.expiresAt
51
- });
52
- return validated.id === expectedId;
53
- }
54
- function isCapabilityGrantActive(grant, plan, now) {
55
- return isCapabilityGrant(grant) && isExecutionPlan(plan) && grant.state === "active" && grant.executionPlanId === plan.id && grant.taskGeneration === plan.taskGeneration && JSON.stringify(grant.effectiveTools ?? null) === JSON.stringify(plan.effectiveTools ?? null) && now >= grant.issuedAt && now <= grant.expiresAt;
56
- }
57
-
58
- export {
59
- CAPABILITY_GRANT_VERSION,
60
- issueCapabilityGrant,
61
- revokeCapabilityGrant,
62
- isCapabilityGrant,
63
- isCapabilityGrantActive
64
- };
65
- //# sourceMappingURL=chunk-YPJEN6NU.ts.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/capability-grant.ts"],
4
- "sourcesContent": ["import { createHash } from \"node:crypto\";\nimport { type ExecutionPlan, isExecutionPlan } from \"./execution-plan.js\";\n\nexport const CAPABILITY_GRANT_VERSION = \"pi-subagents:capability-grant:v1\" as const;\n\nexport interface CapabilityGrant {\n\tversion: typeof CAPABILITY_GRANT_VERSION;\n\tid: string;\n\texecutionPlanId: string;\n\ttaskGeneration: number;\n\teffectiveTools?: string[];\n\tissuedAt: number;\n\texpiresAt: number;\n\tstate: \"active\" | \"revoked\";\n\trevokedAt?: number;\n\trevocationReason?: string;\n}\n\nfunction grantId(projection: {\n\texecutionPlanId: string;\n\ttaskGeneration: number;\n\teffectiveTools?: string[];\n\tissuedAt: number;\n\texpiresAt: number;\n}): string {\n\treturn createHash(\"sha256\").update(JSON.stringify(projection)).digest(\"hex\");\n}\n\nexport function issueCapabilityGrant(\n\tplan: ExecutionPlan,\n\tissuedAt: number,\n\tlifetimeMs: number,\n): CapabilityGrant {\n\tif (!Number.isFinite(issuedAt) || !Number.isFinite(lifetimeMs) || lifetimeMs <= 0) {\n\t\tthrow new Error(\"Capability grant requires finite issuance and lifetime bounds\");\n\t}\n\tconst expiresAt = issuedAt + lifetimeMs;\n\tconst projection = {\n\t\texecutionPlanId: plan.id,\n\t\ttaskGeneration: plan.taskGeneration,\n\t\teffectiveTools: plan.effectiveTools,\n\t\tissuedAt,\n\t\texpiresAt,\n\t};\n\treturn {\n\t\tversion: CAPABILITY_GRANT_VERSION,\n\t\tid: grantId(projection),\n\t\t...projection,\n\t\tstate: \"active\",\n\t};\n}\n\nexport function revokeCapabilityGrant(\n\tgrant: CapabilityGrant,\n\treason: string,\n\trevokedAt: number,\n): CapabilityGrant {\n\tif (grant.state === \"revoked\") throw new Error(\"Capability grant is already revoked\");\n\tgrant.state = \"revoked\";\n\tgrant.revokedAt = revokedAt;\n\tgrant.revocationReason = reason.slice(0, 256);\n\treturn structuredClone(grant);\n}\n\nexport function isCapabilityGrant(value: unknown): value is CapabilityGrant {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst grant = value as Partial<CapabilityGrant>;\n\tconst validShape =\n\t\tgrant.version === CAPABILITY_GRANT_VERSION &&\n\t\ttypeof grant.id === \"string\" &&\n\t\t/^[a-f0-9]{64}$/u.test(grant.id) &&\n\t\ttypeof grant.executionPlanId === \"string\" &&\n\t\t/^[a-f0-9]{64}$/u.test(grant.executionPlanId) &&\n\t\tNumber.isSafeInteger(grant.taskGeneration) &&\n\t\tNumber(grant.taskGeneration) >= 0 &&\n\t\tNumber.isFinite(grant.issuedAt) &&\n\t\tNumber.isFinite(grant.expiresAt) &&\n\t\tNumber(grant.expiresAt) >= Number(grant.issuedAt) &&\n\t\t(grant.state === \"active\" || grant.state === \"revoked\") &&\n\t\t(grant.state === \"active\"\n\t\t\t? grant.revokedAt === undefined && grant.revocationReason === undefined\n\t\t\t: Number.isFinite(grant.revokedAt) &&\n\t\t\t\ttypeof grant.revocationReason === \"string\" &&\n\t\t\t\tgrant.revocationReason.length > 0) &&\n\t\t(grant.effectiveTools === undefined ||\n\t\t\t(Array.isArray(grant.effectiveTools) &&\n\t\t\t\tgrant.effectiveTools.every((tool) => typeof tool === \"string\")));\n\tif (!validShape) return false;\n\tconst validated = grant as CapabilityGrant;\n\tconst expectedId = grantId({\n\t\texecutionPlanId: validated.executionPlanId,\n\t\ttaskGeneration: validated.taskGeneration,\n\t\teffectiveTools: validated.effectiveTools,\n\t\tissuedAt: validated.issuedAt,\n\t\texpiresAt: validated.expiresAt,\n\t});\n\treturn validated.id === expectedId;\n}\n\nexport function isCapabilityGrantActive(\n\tgrant: CapabilityGrant,\n\tplan: ExecutionPlan,\n\tnow: number,\n): boolean {\n\treturn (\n\t\tisCapabilityGrant(grant) &&\n\t\tisExecutionPlan(plan) &&\n\t\tgrant.state === \"active\" &&\n\t\tgrant.executionPlanId === plan.id &&\n\t\tgrant.taskGeneration === plan.taskGeneration &&\n\t\tJSON.stringify(grant.effectiveTools ?? null) === JSON.stringify(plan.effectiveTools ?? null) &&\n\t\tnow >= grant.issuedAt &&\n\t\tnow <= grant.expiresAt\n\t);\n}\n"],
5
- "mappings": ";;;;;;;AAAA,SAAS,kBAAkB;AAGpB,IAAM,2BAA2B;AAexC,SAAS,QAAQ,YAMN;AACV,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,UAAU,UAAU,CAAC,EAAE,OAAO,KAAK;AAC5E;AAEO,SAAS,qBACf,MACA,UACA,YACkB;AAClB,MAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,CAAC,OAAO,SAAS,UAAU,KAAK,cAAc,GAAG;AAClF,UAAM,IAAI,MAAM,+DAA+D;AAAA,EAChF;AACA,QAAM,YAAY,WAAW;AAC7B,QAAM,aAAa;AAAA,IAClB,iBAAiB,KAAK;AAAA,IACtB,gBAAgB,KAAK;AAAA,IACrB,gBAAgB,KAAK;AAAA,IACrB;AAAA,IACA;AAAA,EACD;AACA,SAAO;AAAA,IACN,SAAS;AAAA,IACT,IAAI,QAAQ,UAAU;AAAA,IACtB,GAAG;AAAA,IACH,OAAO;AAAA,EACR;AACD;AAEO,SAAS,sBACf,OACA,QACA,WACkB;AAClB,MAAI,MAAM,UAAU,UAAW,OAAM,IAAI,MAAM,qCAAqC;AACpF,QAAM,QAAQ;AACd,QAAM,YAAY;AAClB,QAAM,mBAAmB,OAAO,MAAM,GAAG,GAAG;AAC5C,SAAO,gBAAgB,KAAK;AAC7B;AAEO,SAAS,kBAAkB,OAA0C;AAC3E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,QAAQ;AACd,QAAM,aACL,MAAM,YAAY,4BAClB,OAAO,MAAM,OAAO,YACpB,kBAAkB,KAAK,MAAM,EAAE,KAC/B,OAAO,MAAM,oBAAoB,YACjC,kBAAkB,KAAK,MAAM,eAAe,KAC5C,OAAO,cAAc,MAAM,cAAc,KACzC,OAAO,MAAM,cAAc,KAAK,KAChC,OAAO,SAAS,MAAM,QAAQ,KAC9B,OAAO,SAAS,MAAM,SAAS,KAC/B,OAAO,MAAM,SAAS,KAAK,OAAO,MAAM,QAAQ,MAC/C,MAAM,UAAU,YAAY,MAAM,UAAU,eAC5C,MAAM,UAAU,WACd,MAAM,cAAc,UAAa,MAAM,qBAAqB,SAC5D,OAAO,SAAS,MAAM,SAAS,KAChC,OAAO,MAAM,qBAAqB,YAClC,MAAM,iBAAiB,SAAS,OACjC,MAAM,mBAAmB,UACxB,MAAM,QAAQ,MAAM,cAAc,KAClC,MAAM,eAAe,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ;AAChE,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,YAAY;AAClB,QAAM,aAAa,QAAQ;AAAA,IAC1B,iBAAiB,UAAU;AAAA,IAC3B,gBAAgB,UAAU;AAAA,IAC1B,gBAAgB,UAAU;AAAA,IAC1B,UAAU,UAAU;AAAA,IACpB,WAAW,UAAU;AAAA,EACtB,CAAC;AACD,SAAO,UAAU,OAAO;AACzB;AAEO,SAAS,wBACf,OACA,MACA,KACU;AACV,SACC,kBAAkB,KAAK,KACvB,gBAAgB,IAAI,KACpB,MAAM,UAAU,YAChB,MAAM,oBAAoB,KAAK,MAC/B,MAAM,mBAAmB,KAAK,kBAC9B,KAAK,UAAU,MAAM,kBAAkB,IAAI,MAAM,KAAK,UAAU,KAAK,kBAAkB,IAAI,KAC3F,OAAO,MAAM,YACb,OAAO,MAAM;AAEf;",
6
- "names": []
7
- }