@explyt/ai-agent 0.1.0-rc.1 → 0.1.3

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 (1219) hide show
  1. package/README.md +14 -15
  2. package/THIRD-PARTY-NOTICES.md +153 -5
  3. package/agent-docs/README.md +43 -0
  4. package/agent-docs/mcp.md +111 -0
  5. package/agent-docs/rules.md +92 -0
  6. package/agent-docs/settings.md +54 -0
  7. package/agent-docs/skills.md +90 -0
  8. package/dist/app-bridge.bundle.js +67 -0
  9. package/dist/cli/engine.js +680 -135
  10. package/dist/cli/index.js +152 -194
  11. package/dist/extensions/bash.js +1 -0
  12. package/dist/extensions/custom-provider.js +1 -0
  13. package/dist/extensions/hello.js +1 -1
  14. package/dist/extensions/identity.js +1 -0
  15. package/dist/extensions/mcp.js +1 -0
  16. package/dist/extensions/misc-hacks.js +1 -0
  17. package/dist/extensions/policy.js +1 -1
  18. package/dist/extensions/rules.js +1 -0
  19. package/dist/extensions/skills.js +1 -0
  20. package/dist/mcp-adapter.js +602 -0
  21. package/dist/mcp-keyring-helper.cjs +89 -0
  22. package/dist/mcp-script-worker.mjs +130 -0
  23. package/node_modules/acorn/CHANGELOG.md +998 -0
  24. package/node_modules/acorn/LICENSE +21 -0
  25. package/node_modules/acorn/README.md +309 -0
  26. package/node_modules/acorn/bin/acorn +4 -0
  27. package/node_modules/acorn/dist/acorn.d.mts +897 -0
  28. package/node_modules/acorn/dist/acorn.d.ts +897 -0
  29. package/node_modules/acorn/dist/acorn.js +6342 -0
  30. package/node_modules/acorn/dist/acorn.mjs +6313 -0
  31. package/node_modules/acorn/dist/bin.js +90 -0
  32. package/node_modules/acorn/package.json +50 -0
  33. package/node_modules/default-browser/package.json +1 -1
  34. package/node_modules/default-browser/windows.js +3 -1
  35. package/node_modules/fast-uri/index.js +221 -49
  36. package/node_modules/fast-uri/lib/schemes.js +9 -4
  37. package/node_modules/fast-uri/lib/utils.js +396 -92
  38. package/node_modules/fast-uri/package.json +1 -1
  39. package/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
  40. package/node_modules/fast-uri/test/equal.test.js +31 -3
  41. package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  42. package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  43. package/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
  44. package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  45. package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  46. package/node_modules/fast-uri/test/parse.test.js +7 -3
  47. package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  48. package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  49. package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  50. package/node_modules/fast-uri/test/security-normalization.test.js +139 -0
  51. package/node_modules/fast-uri/test/security.test.js +75 -3
  52. package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  53. package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  54. package/node_modules/jose/dist/types/index.d.ts +1 -2
  55. package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +12 -25
  56. package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +18 -31
  57. package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +12 -25
  58. package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +24 -49
  59. package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +15 -30
  60. package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +29 -51
  61. package/node_modules/jose/dist/types/jwk/embedded.d.ts +5 -8
  62. package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +7 -9
  63. package/node_modules/jose/dist/types/jwks/local.d.ts +10 -13
  64. package/node_modules/jose/dist/types/jwks/remote.d.ts +30 -42
  65. package/node_modules/jose/dist/types/jws/compact/sign.d.ts +8 -13
  66. package/node_modules/jose/dist/types/jws/compact/verify.d.ts +14 -26
  67. package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +10 -19
  68. package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +14 -26
  69. package/node_modules/jose/dist/types/jws/general/sign.d.ts +19 -33
  70. package/node_modules/jose/dist/types/jws/general/verify.d.ts +17 -32
  71. package/node_modules/jose/dist/types/jwt/decrypt.d.ts +20 -27
  72. package/node_modules/jose/dist/types/jwt/encrypt.d.ts +32 -42
  73. package/node_modules/jose/dist/types/jwt/sign.d.ts +10 -21
  74. package/node_modules/jose/dist/types/jwt/unsecured.d.ts +13 -28
  75. package/node_modules/jose/dist/types/jwt/verify.d.ts +19 -22
  76. package/node_modules/jose/dist/types/key/export.d.ts +10 -10
  77. package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +15 -22
  78. package/node_modules/jose/dist/types/key/generate_secret.d.ts +12 -19
  79. package/node_modules/jose/dist/types/key/import.d.ts +25 -31
  80. package/node_modules/jose/dist/types/types.d.ts +186 -319
  81. package/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
  82. package/node_modules/jose/dist/types/util/decode_jwt.d.ts +5 -7
  83. package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +6 -5
  84. package/node_modules/jose/dist/types/util/errors.d.ts +50 -88
  85. package/node_modules/jose/dist/webapi/index.js +70 -32
  86. package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +6 -8
  87. package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +25 -26
  88. package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -10
  89. package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +34 -71
  90. package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
  91. package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +100 -161
  92. package/node_modules/jose/dist/webapi/jwk/embedded.js +29 -18
  93. package/node_modules/jose/dist/webapi/jwk/thumbprint.js +51 -64
  94. package/node_modules/jose/dist/webapi/jwks/local.js +55 -74
  95. package/node_modules/jose/dist/webapi/jwks/remote.js +91 -160
  96. package/node_modules/jose/dist/webapi/jws/compact/sign.js +19 -20
  97. package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
  98. package/node_modules/jose/dist/webapi/jws/flattened/sign.js +22 -30
  99. package/node_modules/jose/dist/webapi/jws/flattened/verify.js +11 -23
  100. package/node_modules/jose/dist/webapi/jws/general/sign.js +55 -71
  101. package/node_modules/jose/dist/webapi/jws/general/verify.js +45 -41
  102. package/node_modules/jose/dist/webapi/jwt/decrypt.js +12 -22
  103. package/node_modules/jose/dist/webapi/jwt/encrypt.js +44 -100
  104. package/node_modules/jose/dist/webapi/jwt/sign.js +18 -50
  105. package/node_modules/jose/dist/webapi/jwt/unsecured.js +33 -63
  106. package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
  107. package/node_modules/jose/dist/webapi/key/export.js +32 -41
  108. package/node_modules/jose/dist/webapi/key/generate_key_pair.js +32 -45
  109. package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -39
  110. package/node_modules/jose/dist/webapi/key/import.js +48 -52
  111. package/node_modules/jose/dist/webapi/lib/asn1.js +128 -164
  112. package/node_modules/jose/dist/webapi/lib/buffer_utils.js +72 -41
  113. package/node_modules/jose/dist/webapi/lib/content_encryption.js +75 -127
  114. package/node_modules/jose/dist/webapi/lib/deflate.js +36 -40
  115. package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +102 -93
  116. package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +178 -177
  117. package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +72 -107
  118. package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
  119. package/node_modules/jose/dist/webapi/lib/jws_sign.js +44 -72
  120. package/node_modules/jose/dist/webapi/lib/jws_verify.js +82 -103
  121. package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +134 -185
  122. package/node_modules/jose/dist/webapi/lib/key.js +147 -124
  123. package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
  124. package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
  125. package/node_modules/jose/dist/webapi/lib/key_management.js +169 -229
  126. package/node_modules/jose/dist/webapi/lib/validate.js +122 -0
  127. package/node_modules/jose/dist/webapi/util/base64url.js +14 -37
  128. package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
  129. package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
  130. package/node_modules/jose/dist/webapi/util/errors.js +94 -84
  131. package/node_modules/jose/package.json +17 -81
  132. package/node_modules/pi-mcp-adapter/CHANGELOG.md +156 -0
  133. package/node_modules/pi-mcp-adapter/README.md +121 -13
  134. package/node_modules/pi-mcp-adapter/agent-dir.ts +12 -4
  135. package/node_modules/pi-mcp-adapter/agent-plugin-loader.ts +1 -1
  136. package/node_modules/pi-mcp-adapter/cli.js +188 -5
  137. package/node_modules/pi-mcp-adapter/commands.ts +136 -20
  138. package/node_modules/pi-mcp-adapter/config.ts +74 -15
  139. package/node_modules/pi-mcp-adapter/direct-tools.ts +134 -72
  140. package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
  141. package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
  142. package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
  143. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
  144. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
  145. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
  146. package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
  147. package/node_modules/pi-mcp-adapter/dist/config.js +1088 -0
  148. package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
  149. package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.d.ts +24 -0
  150. package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.js +336 -0
  151. package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.js.map +1 -0
  152. package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
  153. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
  154. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
  155. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
  156. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
  157. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
  158. package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
  159. package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
  160. package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
  161. package/node_modules/pi-mcp-adapter/dist/types.d.ts +566 -0
  162. package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
  163. package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
  164. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
  165. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
  166. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
  167. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
  168. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
  169. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
  170. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
  171. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
  172. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
  173. package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
  174. package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
  175. package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
  176. package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
  177. package/node_modules/pi-mcp-adapter/host-html-template.ts +0 -8
  178. package/node_modules/pi-mcp-adapter/index.ts +434 -36
  179. package/node_modules/pi-mcp-adapter/init.ts +102 -35
  180. package/node_modules/pi-mcp-adapter/lifecycle.ts +323 -28
  181. package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +161 -37
  182. package/node_modules/pi-mcp-adapter/mcp-auth.ts +60 -2
  183. package/node_modules/pi-mcp-adapter/mcp-bearer-store.ts +385 -0
  184. package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +27 -3
  185. package/node_modules/pi-mcp-adapter/mcp-code.ts +6 -0
  186. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +155 -16
  187. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
  188. package/node_modules/pi-mcp-adapter/mcp-panel.ts +87 -22
  189. package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
  190. package/node_modules/pi-mcp-adapter/mcp-references.ts +376 -0
  191. package/node_modules/pi-mcp-adapter/mcp-script-worker.mjs +22 -20
  192. package/node_modules/pi-mcp-adapter/mcp-setup-panel.ts +2 -1
  193. package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
  194. package/node_modules/pi-mcp-adapter/metadata-cache.ts +66 -14
  195. package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
  196. package/node_modules/pi-mcp-adapter/npx-resolver.ts +81 -26
  197. package/node_modules/pi-mcp-adapter/package-mcp-loader.ts +168 -0
  198. package/node_modules/pi-mcp-adapter/package.json +29 -8
  199. package/node_modules/pi-mcp-adapter/proxy-modes.ts +229 -50
  200. package/node_modules/pi-mcp-adapter/request-headers-command.ts +330 -0
  201. package/node_modules/pi-mcp-adapter/search-ranking.ts +167 -16
  202. package/node_modules/pi-mcp-adapter/server-manager.ts +243 -14
  203. package/node_modules/pi-mcp-adapter/session-recovery.ts +15 -2
  204. package/node_modules/pi-mcp-adapter/state.ts +1 -3
  205. package/node_modules/pi-mcp-adapter/tool-approval.ts +63 -9
  206. package/node_modules/pi-mcp-adapter/tool-metadata.ts +62 -4
  207. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +195 -15
  208. package/node_modules/pi-mcp-adapter/types.ts +229 -29
  209. package/node_modules/pi-mcp-adapter/ui-server.ts +41 -36
  210. package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
  211. package/node_modules/pi-mcp-adapter/utils.ts +91 -19
  212. package/node_modules/pi-subagents/CHANGELOG.md +582 -0
  213. package/node_modules/pi-subagents/README.md +6 -0
  214. package/node_modules/pi-subagents/agents/claude-code-writer.md +15 -0
  215. package/node_modules/pi-subagents/agents/claude-code.md +15 -0
  216. package/node_modules/pi-subagents/agents/codex-exec-writer.md +15 -0
  217. package/node_modules/pi-subagents/agents/codex-exec.md +15 -0
  218. package/node_modules/pi-subagents/agents/cursor-agent-writer.md +14 -0
  219. package/node_modules/pi-subagents/agents/cursor-agent.md +14 -0
  220. package/node_modules/pi-subagents/agents/oracle.md +9 -5
  221. package/node_modules/pi-subagents/agents/researcher.md +1 -1
  222. package/node_modules/pi-subagents/agents/reviewer.md +15 -4
  223. package/node_modules/pi-subagents/agents/scout.md +3 -3
  224. package/node_modules/pi-subagents/agents/worker.md +3 -2
  225. package/node_modules/pi-subagents/async-retention-discovery-worker.mjs +180 -0
  226. package/node_modules/pi-subagents/docs/agents.md +164 -14
  227. package/node_modules/pi-subagents/docs/configuration.md +204 -24
  228. package/node_modules/pi-subagents/docs/extension-api.md +146 -11
  229. package/node_modules/pi-subagents/docs/missions.md +5 -3
  230. package/node_modules/pi-subagents/docs/models.md +74 -8
  231. package/node_modules/pi-subagents/docs/observability.md +100 -12
  232. package/node_modules/pi-subagents/docs/tool-reference.md +185 -46
  233. package/node_modules/pi-subagents/docs/workflows.md +317 -5
  234. package/node_modules/pi-subagents/index.ts +10 -1
  235. package/node_modules/pi-subagents/install.mjs +1 -1
  236. package/node_modules/pi-subagents/package.json +7 -2
  237. package/node_modules/pi-subagents/prompts/council.md +60 -0
  238. package/node_modules/pi-subagents/prompts/parallel-review.md +5 -1
  239. package/node_modules/pi-subagents/prompts/review-loop.md +11 -7
  240. package/node_modules/pi-subagents/skills/council-mode/SKILL.md +59 -0
  241. package/node_modules/pi-subagents/skills/council-mode/references/pass-contracts.md +150 -0
  242. package/node_modules/pi-subagents/skills/pi-subagents/SKILL.md +87 -25
  243. package/node_modules/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +40 -221
  244. package/node_modules/pi-subagents/skills/pi-subagents/references/execution-controls.md +136 -26
  245. package/node_modules/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +8 -8
  246. package/node_modules/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +51 -0
  247. package/node_modules/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +99 -46
  248. package/node_modules/pi-subagents/skills/pi-subagents/references/review-and-validation.md +73 -0
  249. package/node_modules/pi-subagents/src/agents/agent-management.ts +541 -442
  250. package/node_modules/pi-subagents/src/agents/agent-refinements.ts +4 -4
  251. package/node_modules/pi-subagents/src/agents/agent-serializer.ts +20 -4
  252. package/node_modules/pi-subagents/src/agents/agents.ts +1177 -267
  253. package/node_modules/pi-subagents/src/agents/builtin-names.ts +15 -0
  254. package/node_modules/pi-subagents/src/agents/runtime-agent-events.ts +70 -0
  255. package/node_modules/pi-subagents/src/agents/runtime-agent-registry.ts +429 -0
  256. package/node_modules/pi-subagents/src/agents/skills.ts +1 -1
  257. package/node_modules/pi-subagents/src/api/agents.ts +12 -0
  258. package/node_modules/pi-subagents/src/api/background-work.ts +12 -3
  259. package/node_modules/pi-subagents/src/api/delegation.ts +0 -7
  260. package/node_modules/pi-subagents/src/api/external-job-provider.ts +195 -0
  261. package/node_modules/pi-subagents/src/api/external-runs.ts +237 -84
  262. package/node_modules/pi-subagents/src/api/preflight.ts +140 -42
  263. package/node_modules/pi-subagents/src/api/project-panes.ts +2 -0
  264. package/node_modules/pi-subagents/src/api/shared-types.ts +5 -0
  265. package/node_modules/pi-subagents/src/extension/config.ts +134 -2
  266. package/node_modules/pi-subagents/src/extension/doctor.ts +54 -6
  267. package/node_modules/pi-subagents/src/extension/fanout-child.ts +9 -6
  268. package/node_modules/pi-subagents/src/extension/index.ts +361 -118
  269. package/node_modules/pi-subagents/src/extension/public-execution.ts +149 -10
  270. package/node_modules/pi-subagents/src/extension/rpc.ts +229 -23
  271. package/node_modules/pi-subagents/src/extension/schemas.ts +81 -58
  272. package/node_modules/pi-subagents/src/extension/tool-description.ts +70 -31
  273. package/node_modules/pi-subagents/src/extension/tool-result.ts +19 -0
  274. package/node_modules/pi-subagents/src/inspectors/herdr/actions.ts +16 -10
  275. package/node_modules/pi-subagents/src/inspectors/herdr/client.ts +3 -3
  276. package/node_modules/pi-subagents/src/inspectors/herdr/focus.ts +55 -0
  277. package/node_modules/pi-subagents/src/inspectors/herdr/inspector-runner.ts +10 -4
  278. package/node_modules/pi-subagents/src/inspectors/herdr/project-panes.ts +230 -50
  279. package/node_modules/pi-subagents/src/inspectors/herdr/session-roots-codec.ts +42 -0
  280. package/node_modules/pi-subagents/src/inspectors/herdr/shell-command.ts +16 -0
  281. package/node_modules/pi-subagents/src/integrations/herdr-status.ts +75 -5
  282. package/node_modules/pi-subagents/src/intercom/intercom-bridge.ts +9 -5
  283. package/node_modules/pi-subagents/src/intercom/native-supervisor-channel.ts +51 -52
  284. package/node_modules/pi-subagents/src/intercom/result-intercom.ts +2 -0
  285. package/node_modules/pi-subagents/src/missions/goal-driver.ts +3 -1
  286. package/node_modules/pi-subagents/src/missions/lifecycle.ts +10 -8
  287. package/node_modules/pi-subagents/src/missions/store.ts +16 -16
  288. package/node_modules/pi-subagents/src/missions/workflow-state.ts +8 -4
  289. package/node_modules/pi-subagents/src/profiles/profiles.ts +8 -7
  290. package/node_modules/pi-subagents/src/runs/background/active-async-capacity.ts +517 -0
  291. package/node_modules/pi-subagents/src/runs/background/active-run-index.ts +100 -3
  292. package/node_modules/pi-subagents/src/runs/background/async-execution.ts +630 -184
  293. package/node_modules/pi-subagents/src/runs/background/async-job-tracker.ts +143 -33
  294. package/node_modules/pi-subagents/src/runs/background/async-resume.ts +117 -44
  295. package/node_modules/pi-subagents/src/runs/background/async-retention.ts +903 -0
  296. package/node_modules/pi-subagents/src/runs/background/async-status-snapshot.ts +48 -0
  297. package/node_modules/pi-subagents/src/runs/background/async-status.ts +235 -69
  298. package/node_modules/pi-subagents/src/runs/background/auto-drain.ts +2 -1
  299. package/node_modules/pi-subagents/src/runs/background/chain-append.ts +44 -51
  300. package/node_modules/pi-subagents/src/runs/background/chain-root-attachment.ts +79 -8
  301. package/node_modules/pi-subagents/src/runs/background/completion-dedupe.ts +5 -1
  302. package/node_modules/pi-subagents/src/runs/background/completion-replay.ts +33 -13
  303. package/node_modules/pi-subagents/src/runs/background/control-channel.ts +108 -73
  304. package/node_modules/pi-subagents/src/runs/background/fleet-view.ts +125 -45
  305. package/node_modules/pi-subagents/src/runs/background/index-segment.ts +59 -0
  306. package/node_modules/pi-subagents/src/runs/background/inspect-rpc.ts +443 -0
  307. package/node_modules/pi-subagents/src/runs/background/notify.ts +272 -10
  308. package/node_modules/pi-subagents/src/runs/background/owned-process-tree.ts +104 -0
  309. package/node_modules/pi-subagents/src/runs/background/process-terminal.ts +33 -3
  310. package/node_modules/pi-subagents/src/runs/background/result-delivery-ownership.ts +45 -0
  311. package/node_modules/pi-subagents/src/runs/background/result-files.ts +519 -0
  312. package/node_modules/pi-subagents/src/runs/background/result-watcher.ts +329 -54
  313. package/node_modules/pi-subagents/src/runs/background/resume-guidance.ts +35 -12
  314. package/node_modules/pi-subagents/src/runs/background/retained-children.ts +85 -18
  315. package/node_modules/pi-subagents/src/runs/background/run-id-query.ts +7 -0
  316. package/node_modules/pi-subagents/src/runs/background/run-id-resolver.ts +37 -29
  317. package/node_modules/pi-subagents/src/runs/background/run-status.ts +204 -32
  318. package/node_modules/pi-subagents/src/runs/background/scheduled-runs.ts +228 -40
  319. package/node_modules/pi-subagents/src/runs/background/stale-run-reconciler.ts +42 -16
  320. package/node_modules/pi-subagents/src/runs/background/steering.ts +18 -15
  321. package/node_modules/pi-subagents/src/runs/background/subagent-runner.ts +1419 -546
  322. package/node_modules/pi-subagents/src/runs/background/subagent-wait.ts +105 -44
  323. package/node_modules/pi-subagents/src/runs/background/terminal-run-index.ts +138 -0
  324. package/node_modules/pi-subagents/src/runs/background/wait-completions.ts +54 -4
  325. package/node_modules/pi-subagents/src/runs/background/wait-config.ts +23 -9
  326. package/node_modules/pi-subagents/src/runs/background/wait-subscriptions.ts +81 -2
  327. package/node_modules/pi-subagents/src/runs/background/wait-tool.ts +28 -19
  328. package/node_modules/pi-subagents/src/runs/foreground/async-dismiss-action.ts +2 -1
  329. package/node_modules/pi-subagents/src/runs/foreground/async-steering-action.ts +23 -16
  330. package/node_modules/pi-subagents/src/runs/foreground/async-stop-action.ts +23 -2
  331. package/node_modules/pi-subagents/src/runs/foreground/execution.ts +730 -168
  332. package/node_modules/pi-subagents/src/runs/foreground/foreground-control.ts +21 -0
  333. package/node_modules/pi-subagents/src/runs/foreground/foreground-history.ts +26 -3
  334. package/node_modules/pi-subagents/src/runs/foreground/prompt-audit.ts +172 -0
  335. package/node_modules/pi-subagents/src/runs/foreground/subagent-executor.ts +2705 -1726
  336. package/node_modules/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +299 -0
  337. package/node_modules/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +6 -5
  338. package/node_modules/pi-subagents/src/runs/shared/abort-recovery.ts +119 -0
  339. package/node_modules/pi-subagents/src/runs/shared/acceptance.ts +183 -39
  340. package/node_modules/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
  341. package/node_modules/pi-subagents/src/runs/shared/async-status-projection.ts +597 -0
  342. package/node_modules/pi-subagents/src/runs/shared/background-process-options.ts +9 -0
  343. package/node_modules/pi-subagents/src/runs/shared/capability-ceiling.ts +1 -0
  344. package/node_modules/pi-subagents/src/runs/shared/chain-outputs.ts +1 -3
  345. package/node_modules/pi-subagents/src/runs/shared/child-identity.ts +51 -0
  346. package/node_modules/pi-subagents/src/runs/shared/child-launch-plan.ts +151 -0
  347. package/node_modules/pi-subagents/src/runs/shared/child-protocol.ts +21 -7
  348. package/node_modules/pi-subagents/src/runs/shared/claude-code-adapter.ts +129 -0
  349. package/node_modules/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
  350. package/node_modules/pi-subagents/src/runs/shared/completion-evidence.ts +89 -0
  351. package/node_modules/pi-subagents/src/runs/shared/completion-guard.ts +163 -6
  352. package/node_modules/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
  353. package/node_modules/pi-subagents/src/runs/shared/dynamic-fanout.ts +4 -4
  354. package/node_modules/pi-subagents/src/runs/shared/extension-bindings.ts +78 -0
  355. package/node_modules/pi-subagents/src/runs/shared/external-cli-contract.ts +167 -0
  356. package/node_modules/pi-subagents/src/runs/shared/external-cli-preflight.ts +122 -0
  357. package/node_modules/pi-subagents/src/runs/shared/external-cli-runner.ts +353 -54
  358. package/node_modules/pi-subagents/src/runs/shared/external-job-bridge.ts +460 -0
  359. package/node_modules/pi-subagents/src/runs/shared/external-job-runner.ts +389 -0
  360. package/node_modules/pi-subagents/src/runs/shared/fast-mode-extension.ts +10 -0
  361. package/node_modules/pi-subagents/src/runs/shared/host-step-status.ts +231 -0
  362. package/node_modules/pi-subagents/src/runs/shared/lane-metadata.ts +105 -0
  363. package/node_modules/pi-subagents/src/runs/shared/launch-cwd.ts +16 -0
  364. package/node_modules/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +302 -0
  365. package/node_modules/pi-subagents/src/runs/shared/long-running-guard.ts +2 -1
  366. package/node_modules/pi-subagents/src/runs/shared/mcp-config-sources.ts +422 -0
  367. package/node_modules/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +230 -153
  368. package/node_modules/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +194 -0
  369. package/node_modules/pi-subagents/src/runs/shared/model-exclusions.ts +305 -0
  370. package/node_modules/pi-subagents/src/runs/shared/model-fallback.ts +300 -62
  371. package/node_modules/pi-subagents/src/runs/shared/model-scope.ts +106 -39
  372. package/node_modules/pi-subagents/src/runs/shared/mutation-evidence.ts +199 -0
  373. package/node_modules/pi-subagents/src/runs/shared/nested-events.ts +75 -65
  374. package/node_modules/pi-subagents/src/runs/shared/nested-render.ts +9 -5
  375. package/node_modules/pi-subagents/src/runs/shared/orca-progress-tabs.ts +499 -0
  376. package/node_modules/pi-subagents/src/runs/shared/parallel-handoff.ts +464 -10
  377. package/node_modules/pi-subagents/src/runs/shared/parallel-utils.ts +38 -20
  378. package/node_modules/pi-subagents/src/runs/shared/permissions.ts +6 -2
  379. package/node_modules/pi-subagents/src/runs/shared/pi-args.ts +279 -21
  380. package/node_modules/pi-subagents/src/runs/shared/pi-spawn.ts +69 -35
  381. package/node_modules/pi-subagents/src/runs/shared/process-signal.ts +13 -0
  382. package/node_modules/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
  383. package/node_modules/pi-subagents/src/runs/shared/run-history.ts +21 -1
  384. package/node_modules/pi-subagents/src/runs/shared/session-lease.ts +0 -6
  385. package/node_modules/pi-subagents/src/runs/shared/single-output.ts +93 -24
  386. package/node_modules/pi-subagents/src/runs/shared/structured-output.ts +46 -5
  387. package/node_modules/pi-subagents/src/runs/shared/subagent-control.ts +66 -7
  388. package/node_modules/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +195 -44
  389. package/node_modules/pi-subagents/src/runs/shared/subagent-startup-retry.ts +12 -0
  390. package/node_modules/pi-subagents/src/runs/shared/task-intent.ts +36 -9
  391. package/node_modules/pi-subagents/src/runs/shared/tool-availability.ts +1 -3
  392. package/node_modules/pi-subagents/src/runs/shared/tool-timeout.ts +93 -0
  393. package/node_modules/pi-subagents/src/runs/shared/workflow-graph.ts +17 -23
  394. package/node_modules/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +847 -0
  395. package/node_modules/pi-subagents/src/runs/shared/worktree.ts +49 -7
  396. package/node_modules/pi-subagents/src/shared/agent-stream-options.ts +5 -0
  397. package/node_modules/pi-subagents/src/shared/artifacts.ts +2 -6
  398. package/node_modules/pi-subagents/src/shared/atomic-json.ts +24 -2
  399. package/node_modules/pi-subagents/src/shared/capacity-resilient-json.ts +102 -0
  400. package/node_modules/pi-subagents/src/shared/child-session-name.ts +46 -0
  401. package/node_modules/pi-subagents/src/shared/completion-owner.ts +14 -0
  402. package/node_modules/pi-subagents/src/shared/display-text.ts +50 -0
  403. package/node_modules/pi-subagents/src/shared/extension-context.ts +24 -0
  404. package/node_modules/pi-subagents/src/shared/file-system-retry.ts +49 -1
  405. package/node_modules/pi-subagents/src/shared/fork-context.ts +80 -13
  406. package/node_modules/pi-subagents/src/shared/fork-session-cwd.ts +27 -0
  407. package/node_modules/pi-subagents/src/shared/formatters.ts +18 -3
  408. package/node_modules/pi-subagents/src/shared/launch-contract.ts +20 -6
  409. package/node_modules/pi-subagents/src/shared/model-info.ts +20 -0
  410. package/node_modules/pi-subagents/src/shared/node-executable.ts +21 -0
  411. package/node_modules/pi-subagents/src/shared/prompt-resources.ts +0 -40
  412. package/node_modules/pi-subagents/src/shared/pruned-fork.ts +450 -0
  413. package/node_modules/pi-subagents/src/shared/session-file-trust.ts +19 -0
  414. package/node_modules/pi-subagents/src/shared/session-tokens.ts +14 -3
  415. package/node_modules/pi-subagents/src/shared/settings.ts +25 -130
  416. package/node_modules/pi-subagents/src/shared/shortcuts.ts +17 -0
  417. package/node_modules/pi-subagents/src/shared/thinking-ceiling.ts +52 -0
  418. package/node_modules/pi-subagents/src/shared/types.ts +788 -64
  419. package/node_modules/pi-subagents/src/shared/utils.ts +52 -85
  420. package/node_modules/pi-subagents/src/shared/watch-strategy.ts +10 -0
  421. package/node_modules/pi-subagents/src/shared/workflow-child-permit.ts +207 -0
  422. package/node_modules/pi-subagents/src/slash/delegation-adapters.ts +1 -9
  423. package/node_modules/pi-subagents/src/slash/delegation-request.ts +0 -4
  424. package/node_modules/pi-subagents/src/slash/prompt-template-bridge.ts +37 -1
  425. package/node_modules/pi-subagents/src/slash/slash-commands.ts +457 -135
  426. package/node_modules/pi-subagents/src/slash/slash-live-state.ts +28 -14
  427. package/node_modules/pi-subagents/src/slash/subagents-admin.ts +5 -0
  428. package/node_modules/pi-subagents/src/tui/fleet-status.ts +402 -71
  429. package/node_modules/pi-subagents/src/tui/fleet-transcript.ts +12 -53
  430. package/node_modules/pi-subagents/src/tui/fleet.ts +500 -53
  431. package/node_modules/pi-subagents/src/tui/render-helpers.ts +31 -0
  432. package/node_modules/pi-subagents/src/tui/render.ts +1192 -192
  433. package/node_modules/pi-subagents/src/watchdog/change-signature.ts +41 -2
  434. package/node_modules/pi-subagents/src/watchdog/lsp-diagnostics.ts +1 -0
  435. package/node_modules/pi-subagents/src/watchdog/permission-arbiter.ts +60 -51
  436. package/node_modules/pi-subagents/src/watchdog/review.ts +4 -3
  437. package/node_modules/pi-subagents/src/watchdog/turn-delta.ts +1 -1
  438. package/node_modules/pi-subagents/src/workflows/chat-progress.ts +17 -6
  439. package/node_modules/pi-subagents/src/workflows/host-command.ts +235 -0
  440. package/node_modules/pi-subagents/src/workflows/scripted-workflow.ts +1654 -174
  441. package/node_modules/pi-subagents/src/workflows/workflow-child-summary.ts +121 -0
  442. package/node_modules/pi-subagents/src/workflows/workflow-preflight.ts +270 -0
  443. package/node_modules/pi-subagents/src/workflows/workflow-receipt.ts +366 -0
  444. package/node_modules/pi-subagents/src/workflows/workflow-resources.ts +150 -0
  445. package/node_modules/pi-subagents/src/workflows/workflow-settlement.ts +246 -0
  446. package/node_modules/zod/README.md +29 -2
  447. package/node_modules/zod/compile.cjs +96 -0
  448. package/node_modules/zod/compile.d.cts +1 -0
  449. package/node_modules/zod/compile.d.ts +1 -0
  450. package/node_modules/zod/compile.js +52 -0
  451. package/node_modules/zod/index.cjs +21 -2
  452. package/node_modules/zod/index.d.cts +1 -2
  453. package/node_modules/zod/index.d.ts +1 -2
  454. package/node_modules/zod/index.js +5 -2
  455. package/node_modules/zod/locales/index.cjs +19 -0
  456. package/node_modules/zod/mini/index.cjs +19 -0
  457. package/node_modules/zod/package.json +20 -8
  458. package/node_modules/zod/src/compile.ts +56 -0
  459. package/node_modules/zod/src/index.ts +5 -2
  460. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  461. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  462. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  463. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  464. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  465. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  466. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  467. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  468. package/node_modules/zod/src/v3/types.ts +5 -5
  469. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  470. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  471. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  472. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  473. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  474. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  475. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  476. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  477. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  478. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  479. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  480. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  481. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  482. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  483. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  484. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  485. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  486. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  487. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  488. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  489. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  490. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  491. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  492. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  493. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  494. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  495. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  496. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  497. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  498. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  499. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  500. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  501. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  502. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  503. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  504. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  505. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  506. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  507. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  508. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  509. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  510. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  511. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  512. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  513. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  514. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  515. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  516. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  517. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  518. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  519. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  520. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  521. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  522. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  523. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  524. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  525. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  526. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  527. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  528. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  529. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  530. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  531. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  532. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  533. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  534. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  535. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  536. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  537. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  538. package/node_modules/zod/src/v4/core/api.ts +87 -35
  539. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  540. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  541. package/node_modules/zod/src/v4/core/core.ts +99 -22
  542. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  543. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  544. package/node_modules/zod/src/v4/core/index.ts +3 -0
  545. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  546. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  547. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  548. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  549. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  550. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  551. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  552. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  553. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  554. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  555. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  556. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  557. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  558. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  559. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  560. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  561. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  562. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  563. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  564. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  565. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  566. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  567. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  568. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  569. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  570. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  571. package/node_modules/zod/src/v4/core/util.ts +454 -157
  572. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  573. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  574. package/node_modules/zod/src/v4/index.ts +3 -3
  575. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  576. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  577. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  578. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  579. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  580. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  581. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  582. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  583. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  584. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  585. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  586. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  587. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  588. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  589. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  590. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  591. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  592. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  593. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  594. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  595. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  596. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  597. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  598. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  599. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  600. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  601. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  602. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  603. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  604. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  605. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  606. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  607. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  608. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  609. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  610. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  611. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  612. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  613. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  614. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  615. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  616. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  617. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  618. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  619. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  620. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  621. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  622. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  623. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  624. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  625. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  626. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  627. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  628. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  629. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  630. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  631. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  632. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  633. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  634. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  635. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  636. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  637. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  638. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  639. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  640. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  641. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  642. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  643. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  644. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  645. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  646. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  647. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  648. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  649. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  650. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  651. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  652. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  653. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  654. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  655. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  656. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  657. package/node_modules/zod/v3/ZodError.cjs +41 -12
  658. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  659. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  660. package/node_modules/zod/v3/ZodError.js +22 -12
  661. package/node_modules/zod/v3/errors.cjs +19 -0
  662. package/node_modules/zod/v3/external.cjs +19 -0
  663. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  664. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  665. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  666. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  667. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  668. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  669. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  670. package/node_modules/zod/v3/index.cjs +19 -0
  671. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  672. package/node_modules/zod/v3/types.cjs +26 -5
  673. package/node_modules/zod/v3/types.js +7 -5
  674. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  675. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  676. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  677. package/node_modules/zod/v4/classic/checks.js +1 -1
  678. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  679. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  680. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  681. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  682. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  683. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  684. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  685. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  686. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  687. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  688. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  689. package/node_modules/zod/v4/classic/errors.js +43 -34
  690. package/node_modules/zod/v4/classic/external.cjs +51 -27
  691. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  692. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  693. package/node_modules/zod/v4/classic/external.js +5 -8
  694. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  695. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  696. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  697. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  698. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  699. package/node_modules/zod/v4/classic/in-out.js +36 -0
  700. package/node_modules/zod/v4/classic/index.cjs +21 -2
  701. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  702. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  703. package/node_modules/zod/v4/classic/index.js +2 -2
  704. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  705. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  706. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  707. package/node_modules/zod/v4/classic/iso.js +2 -17
  708. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  709. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  710. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  711. package/node_modules/zod/v4/classic/parse.js +1 -0
  712. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  713. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  714. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  715. package/node_modules/zod/v4/classic/schemas.js +564 -424
  716. package/node_modules/zod/v4/core/api.cjs +66 -24
  717. package/node_modules/zod/v4/core/api.d.cts +22 -12
  718. package/node_modules/zod/v4/core/api.d.ts +22 -12
  719. package/node_modules/zod/v4/core/api.js +44 -24
  720. package/node_modules/zod/v4/core/checks.cjs +88 -128
  721. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  722. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  723. package/node_modules/zod/v4/core/checks.js +68 -127
  724. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  725. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  726. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  727. package/node_modules/zod/v4/core/compile.js +1858 -0
  728. package/node_modules/zod/v4/core/core.cjs +101 -19
  729. package/node_modules/zod/v4/core/core.d.cts +16 -4
  730. package/node_modules/zod/v4/core/core.d.ts +16 -4
  731. package/node_modules/zod/v4/core/core.js +83 -20
  732. package/node_modules/zod/v4/core/doc.cjs +31 -9
  733. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  734. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  735. package/node_modules/zod/v4/core/doc.js +12 -9
  736. package/node_modules/zod/v4/core/errors.cjs +126 -25
  737. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  738. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  739. package/node_modules/zod/v4/core/errors.js +107 -25
  740. package/node_modules/zod/v4/core/index.cjs +24 -1
  741. package/node_modules/zod/v4/core/index.d.cts +3 -0
  742. package/node_modules/zod/v4/core/index.d.ts +3 -0
  743. package/node_modules/zod/v4/core/index.js +3 -0
  744. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  745. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  746. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  747. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  748. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  749. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  750. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  751. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  752. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  753. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  754. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  755. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  756. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  757. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  758. package/node_modules/zod/v4/core/memoizer.js +311 -0
  759. package/node_modules/zod/v4/core/parse.cjs +148 -46
  760. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  761. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  762. package/node_modules/zod/v4/core/parse.js +127 -45
  763. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  764. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  765. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  766. package/node_modules/zod/v4/core/regexes.js +32 -15
  767. package/node_modules/zod/v4/core/registries.cjs +19 -0
  768. package/node_modules/zod/v4/core/registries.js +2 -2
  769. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  770. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  771. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  772. package/node_modules/zod/v4/core/schemas.js +753 -386
  773. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  774. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  775. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  776. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  777. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  778. package/node_modules/zod/v4/core/util.cjs +372 -157
  779. package/node_modules/zod/v4/core/util.d.cts +79 -1
  780. package/node_modules/zod/v4/core/util.d.ts +79 -1
  781. package/node_modules/zod/v4/core/util.js +341 -156
  782. package/node_modules/zod/v4/core/versions.cjs +21 -2
  783. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  784. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  785. package/node_modules/zod/v4/core/versions.js +2 -2
  786. package/node_modules/zod/v4/core/visit.cjs +214 -0
  787. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  788. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  789. package/node_modules/zod/v4/core/visit.js +169 -0
  790. package/node_modules/zod/v4/index.cjs +34 -5
  791. package/node_modules/zod/v4/index.d.cts +2 -2
  792. package/node_modules/zod/v4/index.d.ts +2 -2
  793. package/node_modules/zod/v4/index.js +3 -2
  794. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  795. package/node_modules/zod/v4/locales/ar.js +5 -0
  796. package/node_modules/zod/v4/locales/az.cjs +5 -0
  797. package/node_modules/zod/v4/locales/az.js +5 -0
  798. package/node_modules/zod/v4/locales/be.cjs +12 -0
  799. package/node_modules/zod/v4/locales/be.js +12 -0
  800. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  801. package/node_modules/zod/v4/locales/bg.js +5 -0
  802. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  803. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  804. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  805. package/node_modules/zod/v4/locales/bn.js +113 -0
  806. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  807. package/node_modules/zod/v4/locales/ca.js +5 -0
  808. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  809. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  810. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  811. package/node_modules/zod/v4/locales/ckb.js +133 -0
  812. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  813. package/node_modules/zod/v4/locales/cs.js +5 -0
  814. package/node_modules/zod/v4/locales/da.cjs +7 -2
  815. package/node_modules/zod/v4/locales/da.js +7 -2
  816. package/node_modules/zod/v4/locales/de.cjs +5 -0
  817. package/node_modules/zod/v4/locales/de.js +5 -0
  818. package/node_modules/zod/v4/locales/el.cjs +3 -0
  819. package/node_modules/zod/v4/locales/el.js +3 -0
  820. package/node_modules/zod/v4/locales/en.cjs +16 -4
  821. package/node_modules/zod/v4/locales/en.js +16 -4
  822. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  823. package/node_modules/zod/v4/locales/eo.js +5 -0
  824. package/node_modules/zod/v4/locales/es.cjs +4 -0
  825. package/node_modules/zod/v4/locales/es.js +4 -0
  826. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  827. package/node_modules/zod/v4/locales/fa.js +5 -0
  828. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  829. package/node_modules/zod/v4/locales/fi.js +5 -0
  830. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  831. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  832. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  833. package/node_modules/zod/v4/locales/fr.js +18 -14
  834. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  835. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  836. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  837. package/node_modules/zod/v4/locales/gu.js +113 -0
  838. package/node_modules/zod/v4/locales/he.cjs +7 -0
  839. package/node_modules/zod/v4/locales/he.js +7 -0
  840. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  841. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  842. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  843. package/node_modules/zod/v4/locales/hi.js +111 -0
  844. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  845. package/node_modules/zod/v4/locales/hr.js +4 -0
  846. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  847. package/node_modules/zod/v4/locales/hu.js +5 -0
  848. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  849. package/node_modules/zod/v4/locales/hy.js +11 -0
  850. package/node_modules/zod/v4/locales/id.cjs +5 -0
  851. package/node_modules/zod/v4/locales/id.js +5 -0
  852. package/node_modules/zod/v4/locales/index.cjs +43 -2
  853. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  854. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  855. package/node_modules/zod/v4/locales/index.js +11 -0
  856. package/node_modules/zod/v4/locales/is.cjs +5 -0
  857. package/node_modules/zod/v4/locales/is.js +5 -0
  858. package/node_modules/zod/v4/locales/it.cjs +5 -0
  859. package/node_modules/zod/v4/locales/it.js +5 -0
  860. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  861. package/node_modules/zod/v4/locales/ja.js +5 -0
  862. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  863. package/node_modules/zod/v4/locales/ka.js +5 -0
  864. package/node_modules/zod/v4/locales/km.cjs +5 -0
  865. package/node_modules/zod/v4/locales/km.js +5 -0
  866. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  867. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  868. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  869. package/node_modules/zod/v4/locales/kn.js +116 -0
  870. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  871. package/node_modules/zod/v4/locales/ko.js +5 -0
  872. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  873. package/node_modules/zod/v4/locales/lt.js +4 -0
  874. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  875. package/node_modules/zod/v4/locales/mk.js +5 -0
  876. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  877. package/node_modules/zod/v4/locales/ms.js +5 -0
  878. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  879. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  880. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  881. package/node_modules/zod/v4/locales/ne.js +111 -0
  882. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  883. package/node_modules/zod/v4/locales/nl.js +5 -0
  884. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  885. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  886. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  887. package/node_modules/zod/v4/locales/nn.js +113 -0
  888. package/node_modules/zod/v4/locales/no.cjs +7 -2
  889. package/node_modules/zod/v4/locales/no.js +7 -2
  890. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  891. package/node_modules/zod/v4/locales/ota.js +5 -0
  892. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  893. package/node_modules/zod/v4/locales/pl.js +5 -0
  894. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  895. package/node_modules/zod/v4/locales/ps.js +5 -0
  896. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  897. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  898. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  899. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  900. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  901. package/node_modules/zod/v4/locales/pt.js +89 -55
  902. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  903. package/node_modules/zod/v4/locales/ro.js +3 -0
  904. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  905. package/node_modules/zod/v4/locales/ru.js +12 -0
  906. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  907. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  908. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  909. package/node_modules/zod/v4/locales/sk.js +116 -0
  910. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  911. package/node_modules/zod/v4/locales/sl.js +5 -0
  912. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  913. package/node_modules/zod/v4/locales/sv.js +7 -2
  914. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  915. package/node_modules/zod/v4/locales/ta.js +5 -0
  916. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  917. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  918. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  919. package/node_modules/zod/v4/locales/tg.js +117 -0
  920. package/node_modules/zod/v4/locales/th.cjs +5 -0
  921. package/node_modules/zod/v4/locales/th.js +5 -0
  922. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  923. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  924. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  925. package/node_modules/zod/v4/locales/tk.js +107 -0
  926. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  927. package/node_modules/zod/v4/locales/tr.js +5 -0
  928. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  929. package/node_modules/zod/v4/locales/uk.js +5 -0
  930. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  931. package/node_modules/zod/v4/locales/ur.js +5 -0
  932. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  933. package/node_modules/zod/v4/locales/uz.js +3 -0
  934. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  935. package/node_modules/zod/v4/locales/vi.js +5 -0
  936. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  937. package/node_modules/zod/v4/locales/yo.js +5 -0
  938. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  939. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  940. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  941. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  942. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  943. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  944. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  945. package/node_modules/zod/v4/mini/checks.js +1 -1
  946. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  947. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  948. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  949. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  950. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  951. package/node_modules/zod/v4/mini/external.cjs +33 -1
  952. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  953. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  954. package/node_modules/zod/v4/mini/external.js +3 -1
  955. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  956. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  957. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  958. package/node_modules/zod/v4/mini/in-out.js +36 -0
  959. package/node_modules/zod/v4/mini/index.cjs +19 -0
  960. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  961. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  962. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  963. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  964. package/node_modules/zod/v4/mini/parse.js +1 -1
  965. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  966. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  967. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  968. package/node_modules/zod/v4/mini/schemas.js +92 -51
  969. package/node_modules/zod/v4-mini/index.cjs +19 -0
  970. package/package.json +172 -11
  971. package/dist/acp/index.js +0 -62
  972. package/dist/extensions/tool-gradle.js +0 -1
  973. package/dist/extensions/usage.js +0 -1
  974. package/node_modules/jose/dist/webapi/lib/base64.js +0 -22
  975. package/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -28
  976. package/node_modules/jose/dist/webapi/lib/helpers.js +0 -42
  977. package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -26
  978. package/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -17
  979. package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -17
  980. package/node_modules/jose/dist/webapi/lib/options.js +0 -48
  981. package/node_modules/jose/dist/webapi/lib/signing.js +0 -26
  982. package/node_modules/jose/dist/webapi/lib/type_checks.js +0 -35
  983. package/node_modules/pi-subagents/src/runs/foreground/chain-clarify.ts +0 -1354
  984. package/node_modules/pi-subagents/src/runs/foreground/chain-execution.ts +0 -1530
  985. package/node_modules/pi-subagents/src/runs/shared/turn-budget.ts +0 -98
  986. package/node_modules/zod/src/v4/core/config.ts +0 -15
  987. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/LICENSE +0 -0
  988. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/README.md +0 -0
  989. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/bin.mjs +0 -0
  990. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-collection.js +0 -0
  991. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-doc.js +0 -0
  992. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-node.js +0 -0
  993. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/compose-scalar.js +0 -0
  994. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/composer.js +0 -0
  995. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-block-map.js +0 -0
  996. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-block-scalar.js +0 -0
  997. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-block-seq.js +0 -0
  998. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-end.js +0 -0
  999. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-flow-collection.js +0 -0
  1000. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-flow-scalar.js +0 -0
  1001. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/resolve-props.js +0 -0
  1002. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-contains-newline.js +0 -0
  1003. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-empty-scalar-position.js +0 -0
  1004. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-flow-indent-check.js +0 -0
  1005. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/compose/util-map-includes.js +0 -0
  1006. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/Document.js +0 -0
  1007. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/anchors.js +0 -0
  1008. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/applyReviver.js +0 -0
  1009. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/createNode.js +0 -0
  1010. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/doc/directives.js +0 -0
  1011. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/errors.js +0 -0
  1012. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/index.js +0 -0
  1013. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/log.js +0 -0
  1014. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Alias.js +0 -0
  1015. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Collection.js +0 -0
  1016. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Node.js +0 -0
  1017. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Pair.js +0 -0
  1018. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/Scalar.js +0 -0
  1019. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/YAMLMap.js +0 -0
  1020. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/YAMLSeq.js +0 -0
  1021. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/addPairToJSMap.js +0 -0
  1022. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/identity.js +0 -0
  1023. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/nodes/toJS.js +0 -0
  1024. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst-scalar.js +0 -0
  1025. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst-stringify.js +0 -0
  1026. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst-visit.js +0 -0
  1027. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/cst.js +0 -0
  1028. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/lexer.js +0 -0
  1029. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/line-counter.js +0 -0
  1030. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/parse/parser.js +0 -0
  1031. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/public-api.js +0 -0
  1032. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/Schema.js +0 -0
  1033. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/map.js +0 -0
  1034. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/null.js +0 -0
  1035. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/seq.js +0 -0
  1036. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/common/string.js +0 -0
  1037. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/bool.js +0 -0
  1038. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/float.js +0 -0
  1039. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/int.js +0 -0
  1040. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/core/schema.js +0 -0
  1041. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/json/schema.js +0 -0
  1042. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/tags.js +0 -0
  1043. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/binary.js +0 -0
  1044. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/bool.js +0 -0
  1045. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/float.js +0 -0
  1046. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/int.js +0 -0
  1047. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/merge.js +0 -0
  1048. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/omap.js +0 -0
  1049. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/pairs.js +0 -0
  1050. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/schema.js +0 -0
  1051. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/set.js +0 -0
  1052. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/schema/yaml-1.1/timestamp.js +0 -0
  1053. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/foldFlowLines.js +0 -0
  1054. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringify.js +0 -0
  1055. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyCollection.js +0 -0
  1056. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyComment.js +0 -0
  1057. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyDocument.js +0 -0
  1058. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyNumber.js +0 -0
  1059. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyPair.js +0 -0
  1060. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/stringify/stringifyString.js +0 -0
  1061. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/util.js +0 -0
  1062. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/dist/visit.js +0 -0
  1063. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/index.js +0 -0
  1064. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/browser/package.json +0 -0
  1065. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/cli.d.ts +0 -0
  1066. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/cli.mjs +0 -0
  1067. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-collection.d.ts +0 -0
  1068. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-collection.js +0 -0
  1069. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-doc.d.ts +0 -0
  1070. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-doc.js +0 -0
  1071. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-node.d.ts +0 -0
  1072. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-node.js +0 -0
  1073. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-scalar.d.ts +0 -0
  1074. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/compose-scalar.js +0 -0
  1075. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/composer.d.ts +0 -0
  1076. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/composer.js +0 -0
  1077. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-map.d.ts +0 -0
  1078. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-map.js +0 -0
  1079. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-scalar.d.ts +0 -0
  1080. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-scalar.js +0 -0
  1081. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-seq.d.ts +0 -0
  1082. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-block-seq.js +0 -0
  1083. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-end.d.ts +0 -0
  1084. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-end.js +0 -0
  1085. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-collection.d.ts +0 -0
  1086. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-collection.js +0 -0
  1087. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-scalar.d.ts +0 -0
  1088. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-flow-scalar.js +0 -0
  1089. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-props.d.ts +0 -0
  1090. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/resolve-props.js +0 -0
  1091. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-contains-newline.d.ts +0 -0
  1092. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-contains-newline.js +0 -0
  1093. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-empty-scalar-position.d.ts +0 -0
  1094. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-empty-scalar-position.js +0 -0
  1095. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-flow-indent-check.d.ts +0 -0
  1096. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-flow-indent-check.js +0 -0
  1097. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-map-includes.d.ts +0 -0
  1098. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/compose/util-map-includes.js +0 -0
  1099. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/Document.d.ts +0 -0
  1100. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/Document.js +0 -0
  1101. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/anchors.d.ts +0 -0
  1102. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/anchors.js +0 -0
  1103. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/applyReviver.d.ts +0 -0
  1104. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/applyReviver.js +0 -0
  1105. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/createNode.d.ts +0 -0
  1106. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/createNode.js +0 -0
  1107. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/directives.d.ts +0 -0
  1108. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/doc/directives.js +0 -0
  1109. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/errors.d.ts +0 -0
  1110. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/errors.js +0 -0
  1111. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/index.d.ts +0 -0
  1112. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/index.js +0 -0
  1113. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/log.d.ts +0 -0
  1114. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/log.js +0 -0
  1115. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Alias.d.ts +0 -0
  1116. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Alias.js +0 -0
  1117. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Collection.d.ts +0 -0
  1118. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Collection.js +0 -0
  1119. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Node.d.ts +0 -0
  1120. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Node.js +0 -0
  1121. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Pair.d.ts +0 -0
  1122. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Pair.js +0 -0
  1123. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Scalar.d.ts +0 -0
  1124. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/Scalar.js +0 -0
  1125. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLMap.d.ts +0 -0
  1126. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLMap.js +0 -0
  1127. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLSeq.d.ts +0 -0
  1128. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/YAMLSeq.js +0 -0
  1129. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/addPairToJSMap.d.ts +0 -0
  1130. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/addPairToJSMap.js +0 -0
  1131. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/identity.d.ts +0 -0
  1132. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/identity.js +0 -0
  1133. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/toJS.d.ts +0 -0
  1134. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/nodes/toJS.js +0 -0
  1135. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/options.d.ts +0 -0
  1136. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-scalar.d.ts +0 -0
  1137. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-scalar.js +0 -0
  1138. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-stringify.d.ts +0 -0
  1139. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-stringify.js +0 -0
  1140. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-visit.d.ts +0 -0
  1141. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst-visit.js +0 -0
  1142. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst.d.ts +0 -0
  1143. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/cst.js +0 -0
  1144. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/lexer.d.ts +0 -0
  1145. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/lexer.js +0 -0
  1146. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/line-counter.d.ts +0 -0
  1147. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/line-counter.js +0 -0
  1148. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/parser.d.ts +0 -0
  1149. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/parse/parser.js +0 -0
  1150. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/public-api.d.ts +0 -0
  1151. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/public-api.js +0 -0
  1152. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/Schema.d.ts +0 -0
  1153. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/Schema.js +0 -0
  1154. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/map.d.ts +0 -0
  1155. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/map.js +0 -0
  1156. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/null.d.ts +0 -0
  1157. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/null.js +0 -0
  1158. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/seq.d.ts +0 -0
  1159. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/seq.js +0 -0
  1160. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/string.d.ts +0 -0
  1161. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/common/string.js +0 -0
  1162. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/bool.d.ts +0 -0
  1163. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/bool.js +0 -0
  1164. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/float.d.ts +0 -0
  1165. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/float.js +0 -0
  1166. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/int.d.ts +0 -0
  1167. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/int.js +0 -0
  1168. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/schema.d.ts +0 -0
  1169. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/core/schema.js +0 -0
  1170. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/json/schema.d.ts +0 -0
  1171. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/json/schema.js +0 -0
  1172. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/json-schema.d.ts +0 -0
  1173. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/tags.d.ts +0 -0
  1174. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/tags.js +0 -0
  1175. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/types.d.ts +0 -0
  1176. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/binary.d.ts +0 -0
  1177. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/binary.js +0 -0
  1178. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/bool.d.ts +0 -0
  1179. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/bool.js +0 -0
  1180. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/float.d.ts +0 -0
  1181. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/float.js +0 -0
  1182. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/int.d.ts +0 -0
  1183. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/int.js +0 -0
  1184. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/merge.d.ts +0 -0
  1185. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/merge.js +0 -0
  1186. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/omap.d.ts +0 -0
  1187. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/omap.js +0 -0
  1188. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/pairs.d.ts +0 -0
  1189. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/pairs.js +0 -0
  1190. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/schema.d.ts +0 -0
  1191. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/schema.js +0 -0
  1192. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/set.d.ts +0 -0
  1193. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/set.js +0 -0
  1194. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/timestamp.d.ts +0 -0
  1195. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/schema/yaml-1.1/timestamp.js +0 -0
  1196. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/foldFlowLines.d.ts +0 -0
  1197. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/foldFlowLines.js +0 -0
  1198. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringify.d.ts +0 -0
  1199. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringify.js +0 -0
  1200. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyCollection.d.ts +0 -0
  1201. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyCollection.js +0 -0
  1202. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyComment.d.ts +0 -0
  1203. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyComment.js +0 -0
  1204. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyDocument.d.ts +0 -0
  1205. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyDocument.js +0 -0
  1206. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyNumber.d.ts +0 -0
  1207. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyNumber.js +0 -0
  1208. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyPair.d.ts +0 -0
  1209. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyPair.js +0 -0
  1210. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyString.d.ts +0 -0
  1211. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/stringify/stringifyString.js +0 -0
  1212. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/test-events.d.ts +0 -0
  1213. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/test-events.js +0 -0
  1214. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/util.d.ts +0 -0
  1215. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/util.js +0 -0
  1216. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/visit.d.ts +0 -0
  1217. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/dist/visit.js +0 -0
  1218. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/package.json +0 -0
  1219. /package/node_modules/{yaml → pi-subagents/node_modules/yaml}/util.js +0 -0
@@ -1,167 +1,121 @@
1
1
  // Pure helpers for the user-facing CLI. Kept free of side effects so they can be
2
2
  // unit-tested without spawning anything.
3
3
 
4
- import { accessSync, constants, existsSync } from "node:fs";
5
- import { delimiter, dirname, isAbsolute, join, resolve, sep } from "node:path";
6
- import { platform } from "node:os";
4
+ import {
5
+ accessSync,
6
+ constants,
7
+ copyFileSync,
8
+ existsSync,
9
+ lstatSync,
10
+ mkdirSync,
11
+ readFileSync,
12
+ readlinkSync,
13
+ renameSync,
14
+ rmSync,
15
+ statSync,
16
+ symlinkSync,
17
+ writeFileSync,
18
+ } from "node:fs";
19
+ import { basename, delimiter, dirname, isAbsolute, join, resolve, sep } from "node:path";
20
+ import { homedir, platform } from "node:os";
21
+ import { fileURLToPath } from "node:url";
22
+ import { randomBytes } from "node:crypto";
7
23
 
8
24
  export const ENGINE_PACKAGE = "@earendil-works/pi-coding-agent";
9
25
 
10
26
  export const SELF_PACKAGE = "@explyt/ai-agent";
11
27
 
12
28
  /**
13
- * Did npm fetch this copy from the registry?
29
+ * The name the engine presents itself under: its TUI header, terminal title, `/help`,
30
+ * dialog texts, process title and debug-log name.
14
31
  *
15
- * Single predicate shared by registration and removal: when the two disagreed, an
16
- * install could write a path while the matching uninstall looked for an `npm:`
17
- * spec and silently missed it.
32
+ * ONE WORD, deliberately. The engine derives the name of its configuration-directory
33
+ * variable from this string (`${name.toUpperCase()}_CODING_AGENT_DIR`,
34
+ * `dist/config.js`), and a space would put a space into an environment variable
35
+ * name. The full product name goes into the header our own extension draws.
18
36
  */
19
- export function isRegistryInstall(resolvedFrom) {
20
- return typeof resolvedFrom === "string" && /^https?:\/\//.test(resolvedFrom);
21
- }
37
+ export const ENGINE_BRAND = "Explyt";
22
38
 
23
39
  /**
24
- * Directory holding the copy of ourselves that gets registered with the agent.
25
- *
26
- * Honours `XDG_DATA_HOME`, falling back to `~/.local/share` as the spec prescribes.
27
- * A sibling of the `local-release` directory that `scripts/setup.mjs` manages, so
28
- * the published wrapper and a locally built release never overwrite each other.
40
+ * Engine variable naming the directory it keeps its configuration in, as the
41
+ * UNBRANDED engine and the third-party extensions we bundle spell it.
29
42
  *
30
- * The same layout is used on every platform, deliberately. The agent we plug into
31
- * is itself home-relative (`~/.pi/agent`) with no platform branching, and the
32
- * closest comparable ACP tool (opencode) applies the XDG layout everywhere too.
33
- * Native placement such as `%LOCALAPPDATA%` would also split this directory from
34
- * `local-release`, leaving two places to look on Windows instead of one.
43
+ * The engine resolves it as `$PI_CODING_AGENT_DIR ?? ~/.pi/agent`
44
+ * (`@earendil-works/pi-coding-agent/dist/config.js`, `getAgentDir`), and the whole
45
+ * configuration tree hangs off that one root: `auth.json`, `models.json`,
46
+ * `settings.json`, `sessions/`, `bin/`, `prompts/`, `tools/`.
35
47
  *
36
- * A relative `XDG_DATA_HOME` is ignored: the spec requires an absolute path, and
37
- * honouring a relative one would silently resolve it against the current working
38
- * directory, scattering installs wherever the command happened to be run.
48
+ * This spelling stays even though the engine is rebranded: `pi-subagents` reads the
49
+ * literal `PI_CODING_AGENT_DIR` (`src/shared/utils.ts`), `pi-mcp-adapter` falls back to
50
+ * it, and so does the ACP adapter fork (`vendor/pi-acp/src/acp/agent-dir.ts`). All of
51
+ * them live in the same engine process and must agree on one directory.
39
52
  */
40
- export function installDir({ home, xdgDataHome } = {}) {
41
- const configured = typeof xdgDataHome === "string" ? xdgDataHome.trim() : "";
42
- const base = configured && isAbsolute(configured) ? configured : join(home, ".local", "share");
43
- return join(base, "explyt-ai-agent", "installed");
44
- }
53
+ export const AGENT_DIR_ENV = "PI_CODING_AGENT_DIR";
45
54
 
46
55
  /**
47
- * Should `install` copy this package into its own directory before registering?
56
+ * The same variable as the BRANDED engine spells it.
48
57
  *
49
- * Yes when npm put us inside a `node_modules` tree, no for a source checkout.
58
+ * The engine builds this name from `piConfig.name` at load time, so it follows
59
+ * ENGINE_BRAND mechanically. Set alongside AGENT_DIR_ENV with the same value: with only
60
+ * the old name the engine silently falls back to `~/.pi/agent`; with only the new one
61
+ * the bundled extensions do. A test pins that the engine really derives THIS name.
50
62
  *
51
- * The distinction preserves two different needs. An npm-installed copy may live in
52
- * `~/.npm/_npx/<hash>/`, which `npm cache clean` deletes, so registering that path
53
- * would leave a dangling entry -- it has to be copied somewhere we control. A
54
- * checkout, by contrast, is registered in place ON PURPOSE: edits to the sources
55
- * are then picked up live, which is the whole point of developing against it.
63
+ * The engine derives `${NAME}_CODING_AGENT_SESSION_DIR` the same way. It is not
64
+ * mirrored here because this project never sets it -- sessions live under the agent
65
+ * directory above -- but a developer exporting `PI_CODING_AGENT_SESSION_DIR` by hand
66
+ * should know the branded engine no longer reads that spelling.
56
67
  */
57
- export function shouldCopyBeforeRegistering(packageRoot) {
58
- return lockPathFor(packageRoot) !== null;
59
- }
68
+ export const BRANDED_AGENT_DIR_ENV = `${ENGINE_BRAND.toUpperCase()}_CODING_AGENT_DIR`;
60
69
 
61
70
  /**
62
- * Paths inside the package that must NOT be copied into the registered directory.
71
+ * Silences the engine's "New version X is available. Run `<name> update`" banner.
63
72
  *
64
- * The engine is excluded deliberately. The registered copy is loaded BY the engine,
65
- * so it never needs its own: our extensions import it only as `import type`, which
66
- * disappears at compile time. Copying it would waste ~177 MB per install.
73
+ * Under our brand that banner would tell the user to run `Explyt update` -- a command
74
+ * that does not exist -- and link them to the engine's own changelog. The engine's
75
+ * version is pinned by the wrapper's release, so the check is meaningless here anyway.
67
76
  */
68
- export function isExcludedFromInstall(relativePath) {
69
- const normalised = relativePath.split(sep).join("/");
70
- return normalised === "node_modules/@earendil-works"
71
- || normalised.startsWith("node_modules/@earendil-works/");
72
- }
77
+ export const SKIP_VERSION_CHECK_ENV = "PI_SKIP_VERSION_CHECK";
73
78
 
74
79
  /**
75
- * What to hand the engine's `install` as the package source.
80
+ * Engine variable overriding where it looks for ITS OWN package directory.
76
81
  *
77
- * Always a filesystem path, never an `npm:<name>@<version>` spec, even though the
78
- * engine accepts both (docs/packages.md, "Package Sources"). The spec looks tempting
79
- * because the engine then keeps its own copy -- but it reaches that copy by running
80
- * `npm install` in its own store, which re-resolves our dependency graph and drags
81
- * in a SECOND ~177 MB engine. Registering a path installs nothing at all (verified:
82
- * the agent's `npm` store directory is not even created), so a path plus a directory
83
- * we control is strictly cheaper.
82
+ * `getPackageDir()` in the engine's `dist/config.js` returns this when set, and
83
+ * everything the engine reads about itself hangs off that one directory: its
84
+ * `package.json` (name, version, `piConfig`), `docs/`, `examples/`, `README.md`,
85
+ * `CHANGELOG.md`, and under `dist/` its themes, export template and assets. Upstream
86
+ * added it for Nix/Guix store paths; it is also the one supported way to hand the engine
87
+ * a manifest that is not the installed one -- see `ensureEngineShim`.
84
88
  *
85
- * @param packageRoot absolute path to this package's root.
86
- * @param installedRoot directory the package was copied into, when it was copied.
89
+ * The name is literal, not derived from `piConfig.name`: it has to be readable before
90
+ * the manifest is.
87
91
  */
88
- export function registrationSource({ packageRoot, installedRoot }) {
89
- return installedRoot
90
- ? { source: installedRoot, kind: "copied" }
91
- : { source: packageRoot, kind: "in-place" };
92
- }
92
+ export const PACKAGE_DIR_ENV = "PI_PACKAGE_DIR";
93
93
 
94
94
  /**
95
- * Every source `remove` should be tried with, most likely first.
95
+ * Everything the engine resolves relative to `getPackageDir()`, and therefore
96
+ * everything the shim directory must contain.
96
97
  *
97
- * Returning a LIST rather than one source is deliberate. The engine matches
98
- * registrations by key -- `npm:<name>` for specs, the resolved path for paths --
99
- * so a registration made through one channel is invisible to the other. Verified:
100
- * registering a path and then removing `npm:@explyt/ai-agent` reports "No matching
101
- * package found" AND STILL EXITS 0, so a single-source uninstall silently leaves
102
- * the entry behind while claiming success.
103
- *
104
- * All three channels are attempted because a machine can legitimately carry a
105
- * registration from any of them: the current copied directory, a checkout
106
- * registered in place, or an `npm:` spec written by an older build of this wrapper.
107
- *
108
- * The spec is intentionally unversioned. The engine matches npm packages by name
109
- * (verified: an unversioned remove clears a versioned entry), which lets a newer
110
- * build uninstall a registration written by an older one.
98
+ * Taken from `dist/config.js`: `getPackageJsonPath`, `getReadmePath`, `getDocsPath`,
99
+ * `getExamplesPath`, `getChangelogPath`, plus `getThemesDir`, `getExportTemplateDir`
100
+ * and `getInteractiveAssetsDir`, which all resolve under `dist/` in the node layout
101
+ * (the bare `theme`, `export-html`, `assets` spellings in that file are the Bun-binary
102
+ * layout, which we never run). `package.json` is the shim's own file, so it is not a
103
+ * link. A test greps that file for `join(getPackageDir(), "<x>")` and fails when an
104
+ * entry appears here that is not covered -- an upstream addition would otherwise be a
105
+ * silent ENOENT at some later feature.
111
106
  */
112
- export function removalSources({ packageRoot, installedRoot }) {
113
- const sources = [];
114
- if (installedRoot) sources.push(installedRoot);
115
- if (packageRoot !== installedRoot) sources.push(packageRoot);
116
- sources.push(`npm:${SELF_PACKAGE}`);
117
- return sources;
118
- }
107
+ export const ENGINE_SHIM_LINKS = Object.freeze(["dist", "docs", "examples", "README.md", "CHANGELOG.md"]);
119
108
 
120
109
  /**
121
- * Path of the lockfile describing how THIS package was installed, or null when it
122
- * cannot exist.
110
+ * Flag that pins the agent to exactly one package of resources: ours.
123
111
  *
124
- * The lockfile belongs to the project that installed us, not to us: our own
125
- * manifest never records `resolved`. A path without a `node_modules` segment means
126
- * a source checkout, which npm did not install at all.
112
+ * The name is historical -- it was introduced for developing against a checkout --
113
+ * and it is INTERNAL, travelling only from this wrapper to the ACP adapter we ship
114
+ * in the same tarball. The adapter expands it into the engine's isolation flags plus
115
+ * `--extension <path>` for every engine process it spawns; `devPackageArgs()` in
116
+ * vendor/pi-acp/src/cli.ts is the authoritative list.
127
117
  */
128
- export function lockPathFor(packageRoot) {
129
- const at = packageRoot.lastIndexOf(`node_modules${sep}`);
130
- if (at === -1) return null;
131
- return join(packageRoot.slice(0, at), "node_modules", ".package-lock.json");
132
- }
133
-
134
- /**
135
- * `resolved` recorded for THIS package, or null when absent.
136
- *
137
- * The key is derived from the real location instead of matching any key that ends
138
- * with our package name: a nested duplicate
139
- * (`node_modules/other/node_modules/@explyt/ai-agent`) would otherwise win when it
140
- * happens to come first in the object, and report a different origin than ours.
141
- */
142
- export function resolvedFromLock(lock, packageRoot) {
143
- const at = packageRoot.lastIndexOf(`node_modules${sep}`);
144
- if (at === -1) return null;
145
- const key = packageRoot.slice(at).split(sep).join("/");
146
- return lock?.packages?.[key]?.resolved ?? null;
147
- }
148
-
149
- /**
150
- * Entries in settings' `packages` that refer to THIS agent.
151
- *
152
- * Used to tell a real uninstall from the engine's silent no-op. Path entries are
153
- * stored relative to the settings file, so they are resolved before comparison.
154
- */
155
- export function selfRegistrations(packages, { packageRoot, installedRoot, settingsDir }) {
156
- const ourPaths = [packageRoot, installedRoot].filter(Boolean).map((p) => resolve(p));
157
- return (Array.isArray(packages) ? packages : []).filter((entry) => {
158
- const source = typeof entry === "string" ? entry : entry?.source;
159
- if (typeof source !== "string") return false;
160
- if (source.startsWith(`npm:${SELF_PACKAGE}`)) return true;
161
- if (source.startsWith("npm:") || source.startsWith("git:") || source.startsWith("http")) return false;
162
- return ourPaths.includes(resolve(settingsDir, source));
163
- });
164
- }
118
+ export const ISOLATION_FLAG = "--dev-package";
165
119
 
166
120
  /** npm writes `pi` on POSIX and `pi.cmd` on Windows. */
167
121
  export function engineShimName(os = platform()) {
@@ -293,8 +247,584 @@ export function withEnginePath(env, binDir) {
293
247
  return { ...env, PATH: current ? `${binDir}${delimiter}${current}` : binDir };
294
248
  }
295
249
 
296
- /** Subcommands this CLI understands. */
297
- export const COMMANDS = new Set(["install", "uninstall", "acp"]);
250
+ /**
251
+ * The one parent directory everything this project writes lives under.
252
+ *
253
+ * The layout is XDG-like on EVERY platform -- no `%LOCALAPPDATA%`, no
254
+ * `~/Library/Application Support` -- so that every directory this project owns is a
255
+ * sibling of the others: one place to inspect, one to delete. The engine we embed is
256
+ * home-relative and free of platform branches itself, so a platform-specific layout
257
+ * here would make us the odd one out rather than the native one.
258
+ *
259
+ * A RELATIVE `XDG_DATA_HOME` is ignored, as the XDG specification requires: honouring
260
+ * it would resolve the path against the current working directory and scatter our
261
+ * data wherever the program happened to be started from.
262
+ *
263
+ * This function exists so that rule lives in exactly ONE place. It did not, and the
264
+ * two halves disagreed: the agent's own state followed `XDG_DATA_HOME` while the
265
+ * local-release installer in `scripts/setup.mjs` ignored it, so relocating user data
266
+ * split this project's tree across two parents. A copy of the rule is what allowed
267
+ * that, which is why callers must derive their directory from here rather than
268
+ * rebuilding the base themselves.
269
+ */
270
+ export function appDataDir(env = process.env, home = homedir()) {
271
+ const dataHome = env.XDG_DATA_HOME;
272
+ const base = typeof dataHome === "string" && isAbsolute(dataHome)
273
+ ? dataHome
274
+ : join(home, ".local", "share");
275
+ return join(base, "explyt-ai-agent");
276
+ }
277
+
278
+ /**
279
+ * Directory this agent keeps ITS engine configuration in.
280
+ *
281
+ * The agent is a product of its own, so its credentials, model catalogue, settings
282
+ * and sessions are its own too: they live here rather than in the `~/.pi/agent`
283
+ * directory belonging to a pi the user may also run by hand. Sharing that directory
284
+ * made the agent read and rewrite another program's credential file, and left the
285
+ * model choice a property of the machine rather than of the pinned version.
286
+ */
287
+ export function agentConfigDir(env = process.env, home = homedir()) {
288
+ return join(appDataDir(env, home), "agent");
289
+ }
290
+
291
+ /**
292
+ * Env with the engine pointed at this agent's own configuration directory.
293
+ *
294
+ * Set once in our own process before the adapter is imported: the adapter passes
295
+ * `env: process.env` to every engine it spawns, so the child inherits it. That is the
296
+ * only channel available -- one of our IDE clients can pass a backend nothing but
297
+ * `command` and `args`, and the ACP host it embeds forwards a fixed whitelist of
298
+ * variables (HOME, PATH, SHELL, TERM, USER), so nothing set outside would reach us.
299
+ *
300
+ * An explicit value is never overwritten, for the same reason `withIsolation` never
301
+ * overwrites an explicit `--dev-package`: a developer pointing the agent at a
302
+ * scratch directory must not have it silently replaced by the product default.
303
+ *
304
+ * An explicit value IS normalised, the way the engine normalises it (`getAgentDir` ->
305
+ * `expandTildePath` -> `normalizePath` in `dist/utils/paths.js`): `~` and `~/x` expand
306
+ * against the home directory, a `file://` URL becomes a path, and the result is made
307
+ * absolute. The wrapper reads this directory itself -- `ensureAgentSettings` writes
308
+ * into it and `engineShimDir` builds next to it -- so it has to read the SAME directory
309
+ * the engine will: with `PI_CODING_AGENT_DIR=~/x` taken literally, the settings landed
310
+ * in a directory named `~` while the engine read `$HOME/x`. A whitespace-only value is
311
+ * treated as absent, like the empty string the engine already ignores.
312
+ *
313
+ * Not reproduced: the engine's `normalizeWindowsShellPath` (Git Bash `/c/x` -> `C:\x`),
314
+ * a win32-only branch this project has no way to exercise; a user who spells the
315
+ * directory in MSYS form on Windows gets a split until that is confirmed on a machine.
316
+ */
317
+ export function withAgentDir(env, home = homedir()) {
318
+ // The unbranded name wins when both are set and disagree: it is the one every
319
+ // reader in the process understands, and two different directories in one process
320
+ // is the split this function exists to prevent.
321
+ const explicit = explicitAgentDir(env[AGENT_DIR_ENV], home) ?? explicitAgentDir(env[BRANDED_AGENT_DIR_ENV], home);
322
+ const dir = explicit ?? agentConfigDir(env, home);
323
+ return { ...env, [AGENT_DIR_ENV]: dir, [BRANDED_AGENT_DIR_ENV]: dir };
324
+ }
325
+
326
+ /** The engine's reading of an explicit agent-directory value; null when it counts as unset. */
327
+ function explicitAgentDir(value, home) {
328
+ if (typeof value !== "string" || value.trim() === "") return null;
329
+ let path = value;
330
+ if (path === "~") path = home;
331
+ else if (path.startsWith("~/") || (platform() === "win32" && path.startsWith("~\\"))) path = join(home, path.slice(2));
332
+ else if (/^file:\/\//.test(path)) path = fileURLToPath(path);
333
+ return resolve(path);
334
+ }
335
+
336
+ /**
337
+ * Directory the engine shim lives in: a SIBLING of the agent directory, never inside it.
338
+ *
339
+ * Inside would make it a resource root -- the engine scans its agent directory for
340
+ * `extensions/`, `skills/`, `prompts/`, and a `dist/` link pointing at the whole engine
341
+ * package would be walked as one. Next to it keeps it under the one parent this project
342
+ * owns, and moves with an explicit `PI_CODING_AGENT_DIR` (the agent directory's parent
343
+ * is what a developer relocating the state relocates).
344
+ */
345
+ export function engineShimDir(env = process.env, home = homedir()) {
346
+ const agentDir = withAgentDir(env, home)[AGENT_DIR_ENV];
347
+ return join(dirname(agentDir), "engine");
348
+ }
349
+
350
+ /**
351
+ * Env for an engine we spawn: our configuration directory under both names, no update
352
+ * banner, and -- when the shim exists -- the shim as the engine's package directory.
353
+ * See the constants for why each is there.
354
+ *
355
+ * @param {object} env the environment to extend
356
+ * @param {string} [home] home directory, injectable for tests
357
+ * @param {{ shimDir?: string | null }} [options] `shimDir` is the result of
358
+ * `ensureEngineShim`; null (shim not created) REMOVES any inherited PI_PACKAGE_DIR so
359
+ * the engine runs from its installed directory and shows its own name. Inherited is
360
+ * not hypothetical: the ACP path assigns this env into `process.env`, and a user may
361
+ * have exported one -- either would point a shim-less engine at a foreign or stale
362
+ * directory instead of its own.
363
+ */
364
+ export function engineEnv(env, home = homedir(), { shimDir = null } = {}) {
365
+ const result = { ...withAgentDir(env, home), [SKIP_VERSION_CHECK_ENV]: "1" };
366
+ if (shimDir) result[PACKAGE_DIR_ENV] = shimDir;
367
+ else delete result[PACKAGE_DIR_ENV];
368
+ return result;
369
+ }
370
+
371
+ /**
372
+ * Settings the engine must start with in a configuration directory we own.
373
+ *
374
+ * `quietStartup` suppresses the engine's built-in startup header. Our own header
375
+ * replaces it through `ctx.ui.setHeader()` from the identity extension, but that hook
376
+ * runs on `session_start`, which the engine fires AFTER it has drawn its header and
377
+ * finished downloading its managed tools -- so for up to a second on a first run the
378
+ * user sees the engine's own name and its "Pi can explain its own features" sentence
379
+ * before ours appears. With the setting on, the engine mounts an empty header instead
380
+ * (`interactive-mode.js`, "Minimal header when silenced") and ours is the first thing
381
+ * drawn. The setting also hides the loaded-resources listing, which names the bundled
382
+ * packages by directory; it stays reachable through the engine's expand key.
383
+ */
384
+ export const SEEDED_SETTINGS = Object.freeze({ quietStartup: true });
385
+
386
+ /**
387
+ * Writes SEEDED_SETTINGS into the agent directory's `settings.json`, adding only the
388
+ * keys that are absent.
389
+ *
390
+ * Absent, not different: a user who set `quietStartup: false` by hand asked for the
391
+ * engine's header and keeps it. The engine itself merges only the fields it modified
392
+ * into this file (`settings-manager.js`, `persistScopedSettings`), so a key seeded here
393
+ * survives the engine's own writes. Same temp+rename discipline as the manifest: the
394
+ * engine reads this file at every start and a truncated one is a load error.
395
+ *
396
+ * @param {string} agentDir the engine configuration directory
397
+ * @returns {{ status: "unchanged" | "seeded" | "failed", detail?: string }}
398
+ */
399
+ export function ensureAgentSettings(agentDir, {
400
+ read = readFileSync,
401
+ write = writeFileSync,
402
+ rename = renameSync,
403
+ remove = rmSync,
404
+ mkdir = mkdirSync,
405
+ } = {}) {
406
+ const settingsPath = join(agentDir, "settings.json");
407
+ let current = {};
408
+ try {
409
+ current = JSON.parse(read(settingsPath, "utf8"));
410
+ } catch (error) {
411
+ if (error.code !== "ENOENT") {
412
+ // Malformed or unreadable: the engine will report that itself; do not paper over it.
413
+ return { status: "failed", detail: `cannot read ${settingsPath}: ${error.message}` };
414
+ }
415
+ }
416
+ if (current === null || typeof current !== "object" || Array.isArray(current)) {
417
+ return { status: "failed", detail: `${settingsPath} is not a JSON object` };
418
+ }
419
+ const missing = Object.entries(SEEDED_SETTINGS).filter(([key]) => !(key in current));
420
+ if (missing.length === 0) return { status: "unchanged" };
421
+
422
+ const seeded = { ...current, ...Object.fromEntries(missing) };
423
+ const tempPath = join(agentDir, `.settings.json.${process.pid}.${Date.now()}.tmp`);
424
+ try {
425
+ mkdir(agentDir, { recursive: true });
426
+ } catch (error) {
427
+ return { status: "failed", detail: `cannot create ${agentDir}: ${error.message}` };
428
+ }
429
+ const written = writeAtomically(settingsPath, tempPath, `${JSON.stringify(seeded, null, 2)}\n`, { write, rename, remove });
430
+ if (written !== null) return { status: "failed", detail: `cannot write ${settingsPath}: ${written.message}` };
431
+ return { status: "seeded" };
432
+ }
433
+
434
+ /**
435
+ * Writes `text` to `path` through `tempPath` + rename, so a reader never sees a
436
+ * truncated file. Returns null on success, the error otherwise. The temp file is
437
+ * removed on EITHER failure: a `write` that dies halfway (ENOSPC) leaves one behind
438
+ * just as a failed `rename` does, and each launch would add another.
439
+ */
440
+ function writeAtomically(path, tempPath, text, { write, rename, remove }) {
441
+ try {
442
+ write(tempPath, text);
443
+ rename(tempPath, path);
444
+ return null;
445
+ } catch (error) {
446
+ try { remove(tempPath, { force: true }); } catch { /* the temp file is the lesser leftover */ }
447
+ return error;
448
+ }
449
+ }
450
+
451
+ /**
452
+ * Builds (or refreshes) the directory the engine is told is its own package.
453
+ *
454
+ * ## Why a shim and not the installed manifest
455
+ *
456
+ * The engine reads its `package.json` once at load and takes its display name, terminal
457
+ * title and the name of its configuration-directory variable from `piConfig.name` -- a
458
+ * mechanism upstream documents for forks. That file belongs to a peer dependency that
459
+ * npm installs into whatever prefix runs us (`release/`, an IDE's private prefix, the
460
+ * `npx` cache), sometimes deduplicated with a `pi` the user installed globally. Editing
461
+ * it in place worked but meant rewriting a file we do not own, in a directory that may
462
+ * be shared with another program: a global `pi` next to a global install of this package
463
+ * would silently start answering as ours.
464
+ *
465
+ * `PI_PACKAGE_DIR` is the engine's own override of where that manifest lives. So the
466
+ * wrapper keeps a directory of its own next to the agent directory holding a COPY of the
467
+ * engine's manifest with `piConfig.name` set, and links for everything else the engine
468
+ * resolves relative to its package directory (`ENGINE_SHIM_LINKS`). The engine runs
469
+ * from its installed `dist/`, reads its identity from our copy, and finds its docs,
470
+ * themes and assets through the links. Nothing under `node_modules` is touched, and the
471
+ * paths the engine prints about itself ("see .../docs/providers.md") are ours.
472
+ *
473
+ * ## Idempotence
474
+ *
475
+ * Rebuilt only when the shim no longer describes the installed engine; what "describes"
476
+ * checks is in `shimIsCurrent`. A version bump of the engine, an install in a new
477
+ * prefix, a reinstall of the same version with a changed manifest, or a link whose
478
+ * target is gone all rebuild the whole directory. The copy is `version`-exact on
479
+ * purpose -- the engine prints that version, and the self-update code compares it.
480
+ *
481
+ * ## Concurrency
482
+ *
483
+ * The rebuild is STAGED in a sibling directory and PUBLISHED by rename, never built in
484
+ * place: two wrappers (the IDE adapter and a terminal `login`) can start together on a
485
+ * first run or right after an engine bump, and an in-place `rm -rf` + rebuild would let
486
+ * one delete the directory the other was filling -- or the one an engine was already
487
+ * reading. With staging, the live directory is replaced by a whole one in a single
488
+ * rename; the loser of the race finds the winner's directory in the way, and if that
489
+ * directory is current, that is the result it wanted. No lock file: one that survives a
490
+ * crash would have to be aged out, and a wait loop belongs in neither of these
491
+ * launches.
492
+ *
493
+ * ## Failure
494
+ *
495
+ * Reported, not thrown, and the caller launches WITHOUT `PI_PACKAGE_DIR`: the engine then
496
+ * shows its own name, which is a cosmetic defect; a refused login is not. The manifest
497
+ * copy goes through temp + rename (same reason as `ensureAgentSettings`: the engine
498
+ * reads it at every start and a truncated one is a load error).
499
+ *
500
+ * ## Links and copies
501
+ *
502
+ * Directories are linked as `"junction"` so Windows needs no privilege (a junction is
503
+ * the one reparse type an unprivileged user may create; Node maps the type to a plain
504
+ * symlink elsewhere). Files (`README.md`, `CHANGELOG.md`) are COPIED, not linked: a file
505
+ * symlink on Windows needs Developer Mode or elevation, and failing the whole shim over
506
+ * two small text files the engine only shows on request would be the wrong trade. The
507
+ * copies are compared by size on every launch (see `shimIsCurrent`); a same-size edit
508
+ * of a file the engine only shows on request is the accepted blind spot.
509
+ *
510
+ * @param {string} engineDir directory of the installed engine (holds its package.json)
511
+ * @param {string} shimDir where the shim lives; see `engineShimDir`
512
+ * @param {object} [io] file operations, injectable for tests
513
+ * @returns {{ status: "unchanged" | "built" | "failed", shimDir: string | null, detail?: string }}
514
+ */
515
+ export function ensureEngineShim(engineDir, shimDir, {
516
+ read = readFileSync,
517
+ write = writeFileSync,
518
+ rename = renameSync,
519
+ remove = rmSync,
520
+ mkdir = mkdirSync,
521
+ symlink = symlinkSync,
522
+ copy = copyFileSync,
523
+ readlink = readlinkSync,
524
+ lstat = lstatSync,
525
+ stat = statSync,
526
+ } = {}) {
527
+ const installedPath = join(engineDir, "package.json");
528
+ const shimManifestPath = join(shimDir, "package.json");
529
+ let installed;
530
+ try {
531
+ installed = JSON.parse(read(installedPath, "utf8"));
532
+ } catch (error) {
533
+ return { status: "failed", shimDir: null, detail: `cannot read ${installedPath}: ${error.message}` };
534
+ }
535
+
536
+ const branded = { ...installed, piConfig: { ...(installed.piConfig ?? {}), name: ENGINE_BRAND } };
537
+ const brandedText = `${JSON.stringify(branded, null, 2)}\n`;
538
+ const fsOps = { read, readlink, lstat, stat };
539
+ const linksOf = (dir) => ENGINE_SHIM_LINKS.map((entry) => [join(dir, entry), join(engineDir, entry)]);
540
+
541
+ if (shimIsCurrent(brandedText, shimManifestPath, linksOf(shimDir), fsOps)) {
542
+ return { status: "unchanged", shimDir };
543
+ }
544
+
545
+ // Stage in a sibling, publish by rename: see "Concurrency" above. The random part
546
+ // keeps two builds in one process (or two processes in one millisecond) apart.
547
+ const stamp = `${process.pid}.${Date.now()}.${randomBytes(4).toString("hex")}`;
548
+ const staging = join(dirname(shimDir), `.${basename(shimDir)}.${stamp}.tmp`);
549
+ const retired = join(dirname(shimDir), `.${basename(shimDir)}.${stamp}.old`);
550
+ const discard = (dir) => { try { remove(dir, { recursive: true, force: true }); } catch { /* a leftover is the lesser defect */ } };
551
+ const failed = (detail) => { discard(staging); return { status: "failed", shimDir: null, detail }; };
552
+
553
+ try {
554
+ mkdir(staging, { recursive: true });
555
+ } catch (error) {
556
+ return failed(`cannot create ${staging}: ${error.message}`);
557
+ }
558
+
559
+ const stagedManifest = join(staging, "package.json");
560
+ const written = writeAtomically(stagedManifest, join(staging, `.package.json.${stamp}.tmp`), brandedText, { write, rename, remove });
561
+ if (written !== null) return failed(`cannot write ${stagedManifest}: ${written.message}`);
562
+
563
+ for (const [linkPath, target] of linksOf(staging)) {
564
+ let isDirectory = false;
565
+ try {
566
+ isDirectory = stat(target).isDirectory();
567
+ } catch (error) {
568
+ return failed(`engine has no ${target}: ${error.message}`);
569
+ }
570
+ try {
571
+ if (isDirectory) symlink(target, linkPath, "junction");
572
+ else copy(target, linkPath);
573
+ } catch (error) {
574
+ return failed(`cannot ${isDirectory ? "link" : "copy"} ${linkPath}: ${error.message}`);
575
+ }
576
+ }
577
+
578
+ // Publish. The previous directory is moved aside first (a rename onto a non-empty
579
+ // directory fails on every platform), then removed once the new one is in place.
580
+ try {
581
+ try {
582
+ rename(shimDir, retired);
583
+ } catch (error) {
584
+ if (error.code !== "ENOENT") throw error;
585
+ }
586
+ rename(staging, shimDir);
587
+ } catch (error) {
588
+ discard(staging);
589
+ // Another wrapper published between our check and our rename: its directory is the
590
+ // one in the way. If it describes this engine, that is exactly the result we wanted.
591
+ if (shimIsCurrent(brandedText, shimManifestPath, linksOf(shimDir), fsOps)) {
592
+ discard(retired);
593
+ return { status: "built", shimDir };
594
+ }
595
+ // Nothing usable is in place and we moved a working shim aside a moment ago, so the
596
+ // publish failed for a reason of our own (EACCES, EIO, a full disk). Put the old
597
+ // directory back instead of discarding it: it was valid until we touched it, and
598
+ // destroying it would leave every LATER launch unbranded too, until a rebuild happens
599
+ // to succeed. THIS launch still reports failure -- the restored shim describes the
600
+ // engine we were replacing, so handing it over would make the engine read a stale
601
+ // version out of it.
602
+ try {
603
+ rename(retired, shimDir);
604
+ } catch {
605
+ discard(retired);
606
+ }
607
+ return { status: "failed", shimDir: null, detail: `cannot publish ${shimDir}: ${error.message}` };
608
+ }
609
+ discard(retired);
610
+ return { status: "built", shimDir };
611
+ }
612
+
613
+ /**
614
+ * Whether an existing shim already describes THIS installed engine.
615
+ *
616
+ * The check is what a launch can afford: everything it reads is either already in
617
+ * memory or a single `stat`.
618
+ *
619
+ * - The manifest copy must be byte-identical to what we would write now. The installed
620
+ * manifest is read anyway, so this costs one string comparison, and it catches what a
621
+ * `name` + `version` check let through: a reinstall of the same version whose manifest
622
+ * changed (`npm link` to a checkout, a patched `bin`).
623
+ * - Every directory link must point at the installed engine AND its target must exist:
624
+ * the text of a link says where it pointed, not whether anything is still there, so
625
+ * an engine removed from under the shim (uninstall, `npx` cache eviction) is a
626
+ * dangling link with the right text.
627
+ * - Every file copy must exist with the SAME SIZE as its source. Content is not compared
628
+ * -- two file reads per launch for files the engine only shows on request -- so a
629
+ * same-size edit is the accepted blind spot.
630
+ *
631
+ * `brandedText` is the exact text `ensureEngineShim` writes.
632
+ */
633
+ function shimIsCurrent(brandedText, shimManifestPath, linkTargets, { read, readlink, lstat, stat }) {
634
+ try {
635
+ if (read(shimManifestPath, "utf8") !== brandedText) return false;
636
+ } catch {
637
+ return false;
638
+ }
639
+ for (const [linkPath, target] of linkTargets) {
640
+ try {
641
+ const entry = lstat(linkPath);
642
+ if (entry.isSymbolicLink()) {
643
+ if (resolve(readlink(linkPath)) !== resolve(target)) return false;
644
+ if (!stat(linkPath).isDirectory()) return false; // follows the link: throws when the target is gone
645
+ } else if (!entry.isFile() || entry.size !== stat(target).size) {
646
+ return false;
647
+ }
648
+ } catch {
649
+ return false;
650
+ }
651
+ }
652
+ return true;
653
+ }
654
+
655
+ /**
656
+ * Where an interactive engine should read the user's keystrokes from.
657
+ *
658
+ * Returns `0` when our own stdin is already a terminal, the descriptor of the
659
+ * controlling terminal when it is not, and `null` when there is no terminal at all.
660
+ *
661
+ * The middle case is the one that matters, and it is not a corner case: it is how an
662
+ * IDE runs the login. A client offers the "Authenticate" action by launching the
663
+ * command from its config with the auth method's `args` appended, and it wires the
664
+ * child's OUTPUT to a terminal panel while leaving stdin a pipe it controls. Judging
665
+ * "is there a terminal?" by `process.stdin.isTTY` therefore answers a different
666
+ * question than the one being asked, and refusing on that basis closes the window
667
+ * the user just opened.
668
+ *
669
+ * `/dev/tty` is the process's CONTROLLING terminal rather than one of its
670
+ * descriptors, so it stays reachable when fd 0 has been replaced -- and it fails with
671
+ * ENXIO precisely when the process has no terminal to fall back on, which is the
672
+ * genuinely unusable case (a headless pipe, cron, CI). That makes opening it both the
673
+ * fix and the test.
674
+ *
675
+ * `openTty` is injected so the decision can be exercised without depending on the
676
+ * machine the tests run on.
677
+ */
678
+ export function interactiveStdin({ isTTY, openTty }) {
679
+ if (isTTY) return 0;
680
+ try {
681
+ return openTty();
682
+ } catch {
683
+ return null;
684
+ }
685
+ }
686
+
687
+ /**
688
+ * Adapter arguments with resource isolation guaranteed.
689
+ *
690
+ * Every ACP run is isolated from the machine's own pi resources: the engine loads
691
+ * the extensions, skills and prompt templates of OUR package, and none of the user's.
692
+ * The flag list and its rationale live in `vendor/pi-acp/src/cli.ts` (`devPackageArgs`),
693
+ * which is the single source of truth for what isolation covers.
694
+ *
695
+ * Without this the engine merges its user-level registrations into the session, so
696
+ * the agent's tool set becomes a property of the machine it runs on -- and any
697
+ * pi package the user already registered collides with the copy we bundle. That is
698
+ * not hypothetical: a pre-existing `pi-subagents` registration makes the engine
699
+ * exit 1 with `Tool "subagent" conflicts`, killing the session before a single
700
+ * protocol frame is written.
701
+ *
702
+ * An explicit flag is never overwritten, so the wrapper's own root is a DEFAULT and
703
+ * not a policy. Every backend this project writes relies on that default and passes
704
+ * no path at all; the flag is for pointing a wrapper at some OTHER package root --
705
+ * an experiment, a bisect, a second build -- and silently rewriting it to the
706
+ * wrapper's own would run something different from what was asked for while
707
+ * reporting success.
708
+ *
709
+ * The scan is deliberately flat and does NOT stop at a `--` separator, even though
710
+ * that means data after `--` can look like the flag. Teaching it about `--` would be
711
+ * strictly worse: the adapter scans the whole argv the same way and rejects a second
712
+ * occurrence outright (`--dev-package may only be specified once`, vendor/pi-acp/src/
713
+ * cli.ts), so on `acp -- --dev-package x` we would add a duplicate and the agent would
714
+ * not start at all. Matching the consumer's parser beats being right in isolation.
715
+ */
716
+ export function withIsolation(rest, packageRoot) {
717
+ if (!packageRoot) return [...rest];
718
+ if (rest.includes(ISOLATION_FLAG)) return [...rest];
719
+ return [ISOLATION_FLAG, packageRoot, ...rest];
720
+ }
721
+
722
+ /**
723
+ * Subcommands this CLI understands.
724
+ *
725
+ * `tui` (also the bare invocation) is the terminal product. `login` exists because
726
+ * the agent's configuration directory is its own: a fresh one holds no credentials,
727
+ * and the engine has no non-interactive command that writes them -- `pi auth ...`
728
+ * only prints and checks. So the one supported bootstrap is the engine's own
729
+ * interactive UI, started directly against our directory; `logout` removes what it
730
+ * stored. `acp` is parsed everywhere but only FUNCTIONS in the managed-backend and
731
+ * debug artifacts, where the adapter ships next to the wrapper; the public terminal
732
+ * package answers it with a migration error.
733
+ */
734
+ export const COMMANDS = new Set(["acp", "login", "logout", "tui"]);
735
+
736
+ /**
737
+ * Engine flags that confine a terminal run to a single package: ours.
738
+ *
739
+ * The same three flags the ACP adapter's `devPackageArgs()` passes (vendor/pi-acp/
740
+ * src/cli.ts), duplicated here DELIBERATELY: the public terminal artifact ships
741
+ * without the adapter and without `scripts/`, so nothing in the tarball can derive
742
+ * the list from the adapter source. A test compares the two where the submodule is
743
+ * present, so the copies cannot drift silently.
744
+ */
745
+ export const TERMINAL_ISOLATION_FLAGS = ["--no-extensions", "--no-skills", "--no-prompt-templates"];
746
+
747
+ /**
748
+ * Engine flag that keeps a run out of the session store.
749
+ *
750
+ * `login` is not a work session: nothing said in it is worth resuming, and the engine's
751
+ * exit hint ("To resume this session: <name> --session <id>") names a command that does
752
+ * not exist under our brand. Ephemeral, the engine writes no session file and prints no
753
+ * hint. The bare TUI keeps its sessions -- there resuming is a feature.
754
+ */
755
+ export const NO_SESSION_FLAG = "--no-session";
756
+
757
+ /**
758
+ * Engine flags that ask for a stored session, which `login` cannot honour.
759
+ *
760
+ * In the engine, `--no-session` is checked BEFORE `--session`, `--fork`, `--resume` and
761
+ * `--continue` (`dist/main.js`, `createSessionManager`): with NO_SESSION_FLAG present
762
+ * they parse fine and do nothing. Passing them through would therefore ACCEPT a
763
+ * `login --session <id>` and silently ignore it, so `terminalEngineArgs` refuses them
764
+ * for login instead. Spellings are the engine's own (`dist/cli/args.js`): the long
765
+ * flags, the `-c`/`-r` shorts, and the `--flag=value` form -- which the engine's parser
766
+ * does not even recognise as these flags, but the user meant it, and a mis-spelled
767
+ * request that is refused beats one that is quietly dropped. `--session-id` is NOT
768
+ * here: the engine honours it for an in-memory session too.
769
+ */
770
+ export const LOGIN_SESSION_CONFLICTS = Object.freeze(["--session", "--fork", "--resume", "-r", "--continue", "-c"]);
771
+
772
+ /**
773
+ * The first argument in `extra` that asks for a stored session, or null.
774
+ * Exported so the entrypoint can turn it into a message without repeating the list.
775
+ */
776
+ export function loginSessionConflict(extra) {
777
+ const valueForm = LOGIN_SESSION_CONFLICTS.filter((flag) => flag.startsWith("--")).map((flag) => `${flag}=`);
778
+ return extra.find((arg) => LOGIN_SESSION_CONFLICTS.includes(arg) || valueForm.some((prefix) => arg.startsWith(prefix))) ?? null;
779
+ }
780
+
781
+ /**
782
+ * The engine argv for a terminal run (TUI or interactive login).
783
+ *
784
+ * Assembled as a WHOLE so a caller cannot spread the isolation flags and forget the
785
+ * `--extension` value, or vice versa: the engine would start fine either way and load
786
+ * something other than the product.
787
+ *
788
+ * Throws for `login` combined with a LOGIN_SESSION_CONFLICTS flag: the engine would
789
+ * take the flag and do nothing with it. The message is for a person.
790
+ *
791
+ * @param {string} entrypoint the engine's JS entrypoint
792
+ * @param {string} packageRoot the package the engine must load exclusively
793
+ * @param {string[]} extra flags the user passed through
794
+ * @param {{ login?: boolean }} [options] `login: true` adds NO_SESSION_FLAG
795
+ */
796
+ export function terminalEngineArgs(entrypoint, packageRoot, extra = [], { login = false } = {}) {
797
+ if (login) {
798
+ const conflict = loginSessionConflict(extra);
799
+ if (conflict !== null) {
800
+ throw new Error(
801
+ `\`login\` does not accept ${conflict}: login is not a work session and stores nothing to resume.\n` +
802
+ " Store the credential with `login` alone, then open the session with `tui` and that flag.",
803
+ );
804
+ }
805
+ }
806
+ const session = login && !extra.includes(NO_SESSION_FLAG) ? [NO_SESSION_FLAG] : [];
807
+ return [entrypoint, ...TERMINAL_ISOLATION_FLAGS, "--extension", packageRoot, ...session, ...extra];
808
+ }
809
+
810
+ /**
811
+ * The adapter's spelling of `login`, which we must answer to as well.
812
+ *
813
+ * Only the managed-backend artifact ever emits it: there the adapter advertises, in
814
+ * its `authMethods`, a terminal command built from `process.argv[0..1]`
815
+ * (`vendor/pi-acp/src/acp/auth.ts`) -- `<node> <wrapper> --terminal-login` -- and the
816
+ * client appends those args to the command line already in its config, so what runs
817
+ * is `... index.js acp --terminal-login`. `parseArgs` lets the flag OUTRANK the
818
+ * leading `acp`, mapping it to `command = "login"`; the wrapper then spawns the
819
+ * engine's interactive UI directly (`terminalEngineArgs`), exactly as a typed `login`
820
+ * does. Letting `acp` win would start a protocol server in the user's terminal,
821
+ * waiting for frames nobody types. In the public terminal artifact the flag is
822
+ * accepted as a harmless synonym: nothing there advertises it.
823
+ *
824
+ * Accepting the flag rather than teaching the fork to advertise `login` keeps the
825
+ * edit out of a file that merges with upstream.
826
+ */
827
+ export const ADAPTER_LOGIN_FLAG = "--terminal-login";
298
828
 
299
829
  /**
300
830
  * Flags belonging to other programs that consume the NEXT argument as their value.
@@ -304,7 +834,7 @@ export const COMMANDS = new Set(["install", "uninstall", "acp"]);
304
834
  * which it rejects. Only pass-through flags need listing; our own flags are handled
305
835
  * explicitly below.
306
836
  */
307
- export const VALUE_FLAGS = new Set(["--dev-package", "--extension", "--model", "--cwd"]);
837
+ export const VALUE_FLAGS = new Set([ISOLATION_FLAG, "--extension", "--model", "--cwd"]);
308
838
 
309
839
  /**
310
840
  * Argument shape of the user-facing CLI.
@@ -334,6 +864,13 @@ export function parseArgs(argv) {
334
864
  if (arg === "--help" || arg === "-h") { help = true; continue; }
335
865
  if (arg === "--version" || arg === "-v") { version = true; continue; }
336
866
 
867
+ // The flag form of `login`, which is what a client runs from `authMethods`. It
868
+ // overrides a subcommand instead of yielding to it, because the client appends it
869
+ // to the `acp` invocation from its own config -- see ADAPTER_LOGIN_FLAG. It is also
870
+ // consumed rather than forwarded: the entrypoint re-adds it for the adapter, so
871
+ // passing it through as well would hand the adapter the same flag twice.
872
+ if (arg === ADAPTER_LOGIN_FLAG) { command = "login"; continue; }
873
+
337
874
  // A foreign flag plus its value: forward both, and never read the value as a
338
875
  // subcommand.
339
876
  if (VALUE_FLAGS.has(arg)) {
@@ -360,18 +897,26 @@ export function helpText(name = "explyt-ai-agent") {
360
897
  return [
361
898
  "Explyt AI Agent",
362
899
  "",
900
+ "A terminal AI coding agent. There is nothing to install: run it and it starts,",
901
+ "carrying its own engine and its own extensions.",
902
+ "",
363
903
  "Usage:",
364
- ` npx ${name} install register the agent so IDEs and the terminal can use it`,
365
- ` npx ${name} uninstall remove the registration`,
366
- ` npx ${name} acp run as an ACP server (this is how an IDE starts it)`,
904
+ ` npx ${name} start the terminal UI (needs an interactive terminal)`,
905
+ ` npx ${name} tui the same, spelled explicitly`,
906
+ ` npx ${name} login store a provider credential for this agent`,
907
+ ` npx ${name} logout remove the stored credentials`,
367
908
  "",
368
909
  "Options:",
369
910
  " -h, --help show this message",
370
911
  " -v, --version print the version",
371
912
  "",
372
- "With no arguments the agent starts in ACP mode when its input is a pipe, which is",
373
- "what IDE clients do. Configure a client with:",
374
- ` {"command": "npx", "args": ["-y", "@explyt/ai-agent@<version>", "acp"]}`,
913
+ "The agent keeps its own credentials, model catalogue, settings and sessions, so",
914
+ "they are separate from a pi you may run by hand: logging in there does not log in",
915
+ "here. Run `login` once in a terminal, pick a provider, and enter a key or complete",
916
+ "an OAuth flow.",
917
+ "",
918
+ "IDE (ACP) integration is not part of this package: it ships in the Explyt managed",
919
+ "backend, which the Neo plugin downloads, verifies and manages.",
375
920
  "",
376
921
  ].join("\n");
377
922
  }