@synergenius/flow-weaver 0.33.1 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (922) hide show
  1. package/LICENSE +201 -226
  2. package/NOTICE +13 -0
  3. package/README.md +152 -244
  4. package/dist/agent/agent-loop.d.ts +4 -2
  5. package/dist/agent/cli-session.d.ts +3 -3
  6. package/dist/agent/cli-session.js +511 -438
  7. package/dist/agent/cli-spawn-config.d.ts +4 -4
  8. package/dist/agent/gate.d.ts +164 -0
  9. package/dist/agent/index.d.ts +4 -4
  10. package/dist/agent/index.js +174 -28
  11. package/dist/agent/mcp-bridge.d.ts +1 -1
  12. package/dist/agent/mcp-bridge.js +114 -128
  13. package/dist/agent/mcp-tool-server.d.ts +2 -2
  14. package/dist/agent/mcp-tool-server.js +147 -189
  15. package/dist/agent/profiles.d.ts +69 -0
  16. package/dist/agent/providers/anthropic.d.ts +2 -4
  17. package/dist/agent/providers/claude-cli.d.ts +4 -5
  18. package/dist/agent/providers/openai-compat.d.ts +8 -1
  19. package/dist/agent/streaming.d.ts +2 -2
  20. package/dist/agent/types.d.ts +16 -10
  21. package/dist/api/builder.d.ts +3 -3
  22. package/dist/api/compile.d.ts +9 -4
  23. package/dist/api/durable-validation.d.ts +15 -0
  24. package/dist/api/generate-in-place.d.ts +21 -19
  25. package/dist/api/generate.d.ts +21 -16
  26. package/dist/api/generated-module/local-node-functions.d.ts +24 -0
  27. package/dist/api/generated-module/module-format.d.ts +23 -0
  28. package/dist/api/generated-module/module-writer.d.ts +34 -0
  29. package/dist/api/generated-module/node-type-imports.d.ts +39 -0
  30. package/dist/api/generated-module/preamble.d.ts +16 -0
  31. package/dist/api/generated-module/workflow-functions.d.ts +29 -0
  32. package/dist/api/graph-identity.d.ts +39 -0
  33. package/dist/api/helpers.d.ts +4 -60
  34. package/dist/api/in-place/built-in-nodes.d.ts +18 -0
  35. package/dist/api/in-place/function-body.d.ts +21 -0
  36. package/dist/api/in-place/fw-imports.d.ts +30 -0
  37. package/dist/api/in-place/macro-coverage.d.ts +14 -0
  38. package/dist/api/in-place/node-type-functions.d.ts +18 -0
  39. package/dist/api/in-place/node-type-jsdoc.d.ts +20 -0
  40. package/dist/api/in-place/orphaned-node-types.d.ts +16 -0
  41. package/dist/api/in-place/runtime-section.d.ts +16 -0
  42. package/dist/api/in-place/signature.d.ts +47 -0
  43. package/dist/api/in-place/source-file.d.ts +19 -0
  44. package/dist/api/in-place/workflow-jsdoc.d.ts +19 -0
  45. package/dist/api/index.d.ts +18 -21
  46. package/dist/api/index.js +259 -53
  47. package/dist/api/inline-engine.generated.d.ts +3 -0
  48. package/dist/api/inline-runtime.d.ts +10 -2
  49. package/dist/api/manipulation/connections.d.ts +1 -1
  50. package/dist/api/manipulation/index.d.ts +8 -8
  51. package/dist/api/manipulation/node-types.d.ts +1 -1
  52. package/dist/api/manipulation/nodes.d.ts +3 -13
  53. package/dist/api/manipulation/ports.d.ts +1 -1
  54. package/dist/api/manipulation/scopes.d.ts +1 -1
  55. package/dist/api/manipulation/workflow.d.ts +1 -1
  56. package/dist/api/modify-operation.d.ts +0 -2
  57. package/dist/api/parse.d.ts +22 -1
  58. package/dist/api/port-references.d.ts +66 -0
  59. package/dist/api/query.d.ts +18 -2
  60. package/dist/api/templates.d.ts +1 -1
  61. package/dist/api/transform.d.ts +1 -1
  62. package/dist/api/validate.d.ts +1 -1
  63. package/dist/api/validation-registry.d.ts +2 -2
  64. package/dist/artifacts/brief.d.ts +43 -0
  65. package/dist/artifacts/index.d.ts +31 -0
  66. package/dist/artifacts/pdf.d.ts +19 -0
  67. package/dist/ast/builder.d.ts +3 -3
  68. package/dist/ast/index.d.ts +4 -4
  69. package/dist/ast/index.js +60 -5
  70. package/dist/ast/serialization-node.d.ts +1 -1
  71. package/dist/ast/serialization.d.ts +1 -1
  72. package/dist/ast/types.d.ts +82 -291
  73. package/dist/ast/workflow-utils.d.ts +4 -4
  74. package/dist/built-in-nodes/coercion-types.d.ts +1 -1
  75. package/dist/built-in-nodes/delay.d.ts +3 -1
  76. package/dist/built-in-nodes/generated-registry.d.ts +1 -1
  77. package/dist/built-in-nodes/index.d.ts +6 -5
  78. package/dist/built-in-nodes/index.js +79 -5
  79. package/dist/built-in-nodes/invoke-workflow.d.ts +2 -1
  80. package/dist/built-in-nodes/mock-types.d.ts +45 -14
  81. package/dist/built-in-nodes/sleep.d.ts +12 -0
  82. package/dist/built-in-nodes/wait-for-agent.d.ts +2 -1
  83. package/dist/built-in-nodes/wait-for-event.d.ts +2 -1
  84. package/dist/chevrotain-parser/coerce-parser.d.ts +1 -1
  85. package/dist/chevrotain-parser/connect-parser.d.ts +1 -1
  86. package/dist/chevrotain-parser/grammar-diagrams.d.ts +1 -1
  87. package/dist/chevrotain-parser/index.d.ts +20 -23
  88. package/dist/chevrotain-parser/node-parser.d.ts +7 -8
  89. package/dist/chevrotain-parser/parse-line.d.ts +54 -0
  90. package/dist/chevrotain-parser/tokens.d.ts +0 -17
  91. package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +6 -1
  92. package/dist/chunks/chunk-4EUSHAY6.js +298 -0
  93. package/dist/chunks/chunk-4KDUEOFD.js +197 -0
  94. package/dist/chunks/chunk-5Y3AIUWY.js +911 -0
  95. package/dist/chunks/chunk-6KMVP6AU.js +20 -0
  96. package/dist/chunks/chunk-6PNJORFL.js +128 -0
  97. package/dist/chunks/chunk-7AAQNGRH.js +2001 -0
  98. package/dist/chunks/chunk-7YYKTPJ5.js +22705 -0
  99. package/dist/chunks/chunk-A5MBOFVY.js +33 -0
  100. package/dist/chunks/chunk-AXNQRVJB.js +18 -0
  101. package/dist/chunks/chunk-B6HQ6YS5.js +572 -0
  102. package/dist/chunks/chunk-CY3RNVML.js +296 -0
  103. package/dist/chunks/chunk-CYHYDLV4.js +653 -0
  104. package/dist/chunks/chunk-CZBCCK4Y.js +82 -0
  105. package/dist/chunks/chunk-DCMGQP5V.js +505 -0
  106. package/dist/chunks/chunk-DIAA66GL.js +72 -0
  107. package/dist/chunks/chunk-DUO6H5PR.js +20 -0
  108. package/dist/chunks/chunk-E5WN7IGO.js +125 -0
  109. package/dist/chunks/chunk-EFGFXXQF.js +184 -0
  110. package/dist/chunks/chunk-F3RTZV2A.js +2811 -0
  111. package/dist/chunks/chunk-FMTLP5ZX.js +1397 -0
  112. package/dist/chunks/chunk-HKZLQJDV.js +79 -0
  113. package/dist/chunks/chunk-INDEVYEC.js +146 -0
  114. package/dist/chunks/chunk-JQTF4R5L.js +390 -0
  115. package/dist/chunks/chunk-KMCAYNUM.js +331 -0
  116. package/dist/chunks/chunk-KMWCCOUJ.js +1444 -0
  117. package/dist/chunks/chunk-KU3CLJI2.js +338 -0
  118. package/dist/chunks/chunk-NDSTGMKR.js +3300 -0
  119. package/dist/chunks/chunk-NQNLUAPO.js +505 -0
  120. package/dist/chunks/chunk-O2U2LO57.js +466 -0
  121. package/dist/chunks/chunk-OOQG7UPP.js +457 -0
  122. package/dist/chunks/chunk-OZQAW5ZG.js +112 -0
  123. package/dist/chunks/chunk-P2CVDGHR.js +487 -0
  124. package/dist/chunks/chunk-P44RIZ7C.js +592 -0
  125. package/dist/chunks/chunk-PEZCT37T.js +1475 -0
  126. package/dist/chunks/chunk-PKWSAW6O.js +152 -0
  127. package/dist/chunks/chunk-Q6MDDZMT.js +4373 -0
  128. package/dist/chunks/chunk-QDE4Z7KW.js +6 -0
  129. package/dist/chunks/chunk-QJDAVSNY.js +8 -0
  130. package/dist/chunks/chunk-QYPORSLO.js +7552 -0
  131. package/dist/chunks/chunk-R4QGNK34.js +183 -0
  132. package/dist/chunks/chunk-REEYC73I.js +3002 -0
  133. package/dist/chunks/chunk-SEWDMQ6Q.js +46 -0
  134. package/dist/chunks/chunk-TAIUWKZB.js +3057 -0
  135. package/dist/chunks/chunk-TN4YZ3O7.js +196 -0
  136. package/dist/chunks/chunk-TRMFB43C.js +143 -0
  137. package/dist/chunks/chunk-VO4QXG2X.js +1016 -0
  138. package/dist/chunks/chunk-VP2P3BPA.js +1002 -0
  139. package/dist/chunks/chunk-VQ7H33J4.js +2176 -0
  140. package/dist/chunks/chunk-VWA7MCV2.js +105 -0
  141. package/dist/chunks/chunk-XAV22WD7.js +253 -0
  142. package/dist/chunks/chunk-YSPBPZDV.js +148 -0
  143. package/dist/chunks/chunk-ZKEGXO73.js +282 -0
  144. package/dist/chunks/chunk-ZMGN6F3S.js +4256 -0
  145. package/dist/chunks/grammar-diagrams-AI7VDXOM.js +14 -0
  146. package/dist/chunks/index.min-ECJD6GZC.js +37 -0
  147. package/dist/chunks/manifest-EPTR5MYH.js +21 -0
  148. package/dist/chunks/openapi-document-6TCGVDUW.js +69 -0
  149. package/dist/chunks/registry-K2U5KUTY.js +23 -0
  150. package/dist/chunks/serialization-node-UGY6CFH6.js +38 -0
  151. package/dist/chunks/validate-GEKSZPIN.js +24 -0
  152. package/dist/chunks/validation-registry-IQZX3UE3.js +7 -0
  153. package/dist/chunks/validator-VXFHLPDW.js +26 -0
  154. package/dist/chunks/workflow-executor-KBGFKHNR.js +36 -0
  155. package/dist/cli/commands/agents.d.ts +16 -0
  156. package/dist/cli/commands/artifact.d.ts +10 -0
  157. package/dist/cli/commands/compile.d.ts +0 -30
  158. package/dist/cli/commands/console.d.ts +32 -0
  159. package/dist/cli/commands/context.d.ts +0 -3
  160. package/dist/cli/commands/describe.js +386 -352
  161. package/dist/cli/commands/dev.d.ts +9 -4
  162. package/dist/cli/commands/diagram.d.ts +3 -5
  163. package/dist/cli/commands/doctor.d.ts +27 -4
  164. package/dist/cli/commands/doctor.js +3307 -633
  165. package/dist/cli/commands/export.d.ts +6 -4
  166. package/dist/cli/commands/grammar.d.ts +0 -3
  167. package/dist/cli/commands/implement.d.ts +1 -1
  168. package/dist/cli/commands/init/agent-handoff.d.ts +28 -0
  169. package/dist/cli/commands/init/config.d.ts +3 -0
  170. package/dist/cli/commands/init/files.d.ts +12 -0
  171. package/dist/cli/commands/init/naming.d.ts +13 -0
  172. package/dist/cli/commands/init/output.d.ts +12 -0
  173. package/dist/cli/commands/init/setup.d.ts +21 -0
  174. package/dist/cli/commands/init/types.d.ts +53 -0
  175. package/dist/cli/commands/init-personas.d.ts +9 -1
  176. package/dist/cli/commands/init.d.ts +24 -88
  177. package/dist/cli/commands/market.d.ts +1 -1
  178. package/dist/cli/commands/mcp-setup.d.ts +1 -4
  179. package/dist/cli/commands/modify.d.ts +0 -5
  180. package/dist/cli/commands/openapi.d.ts +9 -11
  181. package/dist/cli/commands/run.d.ts +0 -4
  182. package/dist/cli/commands/serve.d.ts +24 -26
  183. package/dist/cli/commands/status.d.ts +1 -1
  184. package/dist/cli/exports.d.ts +3 -4
  185. package/dist/cli/exports.js +124 -23
  186. package/dist/cli/flow-weaver-agents-H653446S.mjs +81 -0
  187. package/dist/cli/flow-weaver-artifact-WBFYTW76.mjs +58 -0
  188. package/dist/cli/flow-weaver-chunk-265CEK74.mjs +2 -0
  189. package/dist/cli/flow-weaver-chunk-2C7PZCV5.mjs +186 -0
  190. package/dist/cli/flow-weaver-chunk-3BSYCWPL.mjs +3109 -0
  191. package/dist/cli/flow-weaver-chunk-3MKUQP3D.mjs +547 -0
  192. package/dist/cli/flow-weaver-chunk-3ZLMPQTH.mjs +27 -0
  193. package/dist/cli/flow-weaver-chunk-4DVY73ML.mjs +280 -0
  194. package/dist/cli/flow-weaver-chunk-54M4KNEL.mjs +200 -0
  195. package/dist/cli/flow-weaver-chunk-55QMUZIA.mjs +256 -0
  196. package/dist/cli/flow-weaver-chunk-6ZUJ7LMX.mjs +2003 -0
  197. package/dist/cli/flow-weaver-chunk-7ET6N32V.mjs +419 -0
  198. package/dist/cli/flow-weaver-chunk-7G63RR4K.mjs +8880 -0
  199. package/dist/cli/flow-weaver-chunk-A6M5K3W7.mjs +4418 -0
  200. package/dist/cli/flow-weaver-chunk-AA3NATMX.mjs +154 -0
  201. package/dist/cli/flow-weaver-chunk-APX6MQ5A.mjs +5652 -0
  202. package/dist/cli/flow-weaver-chunk-BHCC5FE5.mjs +17 -0
  203. package/dist/cli/flow-weaver-chunk-DM4BBRRU.mjs +35 -0
  204. package/dist/cli/flow-weaver-chunk-DRN7KPWY.mjs +168 -0
  205. package/dist/cli/flow-weaver-chunk-EKWF27G6.mjs +23 -0
  206. package/dist/cli/flow-weaver-chunk-EM5HWQ4R.mjs +338 -0
  207. package/dist/cli/flow-weaver-chunk-FPPPU2DG.mjs +226 -0
  208. package/dist/cli/flow-weaver-chunk-GAQXZHNO.mjs +3005 -0
  209. package/dist/cli/flow-weaver-chunk-GBUNNP33.mjs +1329 -0
  210. package/dist/cli/flow-weaver-chunk-HMAKDE55.mjs +636 -0
  211. package/dist/cli/flow-weaver-chunk-HQ3ZAN44.mjs +367 -0
  212. package/dist/cli/flow-weaver-chunk-I4APCXYN.mjs +21442 -0
  213. package/dist/cli/flow-weaver-chunk-IJJ4JXTL.mjs +2297 -0
  214. package/dist/cli/flow-weaver-chunk-J7EPZW2I.mjs +33 -0
  215. package/dist/cli/flow-weaver-chunk-KOEMJHLG.mjs +83 -0
  216. package/dist/cli/flow-weaver-chunk-M6CBWQKJ.mjs +271 -0
  217. package/dist/cli/flow-weaver-chunk-MHJ4N652.mjs +1580 -0
  218. package/dist/cli/flow-weaver-chunk-MKAFQWLP.mjs +202 -0
  219. package/dist/cli/flow-weaver-chunk-MMV2XGD3.mjs +3291 -0
  220. package/dist/cli/flow-weaver-chunk-MSI2UJES.mjs +125 -0
  221. package/dist/cli/flow-weaver-chunk-N767YRAI.mjs +48 -0
  222. package/dist/cli/flow-weaver-chunk-NQKKWDGF.mjs +56 -0
  223. package/dist/cli/flow-weaver-chunk-NYZDQYFU.mjs +45 -0
  224. package/dist/cli/flow-weaver-chunk-OMVWSNHJ.mjs +14 -0
  225. package/dist/cli/flow-weaver-chunk-PUWZ47H5.mjs +2188 -0
  226. package/dist/cli/flow-weaver-chunk-QOPRVDES.mjs +46 -0
  227. package/dist/cli/flow-weaver-chunk-RIWE7YTR.mjs +216 -0
  228. package/dist/cli/flow-weaver-chunk-S63Q3JIU.mjs +789 -0
  229. package/dist/cli/flow-weaver-chunk-T7X5A23H.mjs +558 -0
  230. package/dist/cli/flow-weaver-chunk-TLV3VZUN.mjs +2 -0
  231. package/dist/cli/flow-weaver-chunk-TS5P3PIN.mjs +194 -0
  232. package/dist/cli/flow-weaver-chunk-U3EO3X4B.mjs +649 -0
  233. package/dist/cli/flow-weaver-chunk-UNFS3NQP.mjs +34 -0
  234. package/dist/cli/flow-weaver-chunk-V6DHWFQG.mjs +2811 -0
  235. package/dist/cli/flow-weaver-chunk-VXWNLYQU.mjs +9 -0
  236. package/dist/cli/flow-weaver-chunk-W3YNK26P.mjs +149 -0
  237. package/dist/cli/flow-weaver-chunk-XG2WKXYZ.mjs +324 -0
  238. package/dist/cli/flow-weaver-chunk-YLSRZWFK.mjs +2219 -0
  239. package/dist/cli/flow-weaver-chunk-YVPURWS6.mjs +40 -0
  240. package/dist/cli/flow-weaver-chunk-Z44JK332.mjs +582 -0
  241. package/dist/cli/flow-weaver-chunk-Z5ZJPNSY.mjs +517 -0
  242. package/dist/cli/flow-weaver-chunk-ZQALO25T.mjs +594 -0
  243. package/dist/cli/flow-weaver-compile-A2CABDSB.mjs +37 -0
  244. package/dist/cli/flow-weaver-console-6EBHDBTN.mjs +71 -0
  245. package/dist/cli/flow-weaver-context-ECLYANFF.mjs +17 -0
  246. package/dist/cli/flow-weaver-context-ZRUMW2KE.mjs +69 -0
  247. package/dist/cli/flow-weaver-create-WIP4EFNP.mjs +124 -0
  248. package/dist/cli/flow-weaver-deployment-WJJRK7NO.mjs +14 -0
  249. package/dist/cli/flow-weaver-describe-XDIFF5LI.mjs +41 -0
  250. package/dist/cli/flow-weaver-dev-LG2NSQAU.mjs +196 -0
  251. package/dist/cli/flow-weaver-diagram-3EVQARQE.mjs +52 -0
  252. package/dist/cli/flow-weaver-diagram-7LR7O4M2.mjs +44 -0
  253. package/dist/cli/flow-weaver-diff-USF7DJLU.mjs +85 -0
  254. package/dist/cli/flow-weaver-docs-QU2ZOXKH.mjs +96 -0
  255. package/dist/cli/flow-weaver-doctor-K447YWHR.mjs +43 -0
  256. package/dist/cli/flow-weaver-export-LAS6N56Y.mjs +140 -0
  257. package/dist/cli/flow-weaver-grammar-RIRUS3Q6.mjs +49 -0
  258. package/dist/cli/flow-weaver-grammar-diagrams-WXRTW5SK.mjs +15 -0
  259. package/dist/cli/flow-weaver-implement-5JG6BCFZ.mjs +114 -0
  260. package/dist/cli/flow-weaver-index.min-OR5SIHXD.mjs +39 -0
  261. package/dist/cli/flow-weaver-init-34YZNPQX.mjs +972 -0
  262. package/dist/cli/flow-weaver-init-personas-NOGZTQQ2.mjs +48 -0
  263. package/dist/cli/flow-weaver-manifest-4JNUSEB3.mjs +18 -0
  264. package/dist/cli/flow-weaver-market-WA4CKHKV.mjs +444 -0
  265. package/dist/cli/flow-weaver-mcp-setup-O26MGXSD.mjs +22 -0
  266. package/dist/cli/flow-weaver-migrate-VFVEUTPH.mjs +119 -0
  267. package/dist/cli/flow-weaver-modify-VM3JP5K6.mjs +97 -0
  268. package/dist/cli/flow-weaver-openapi-IRBWI3HM.mjs +71 -0
  269. package/dist/cli/flow-weaver-openapi-document-7N6YMPG3.mjs +30 -0
  270. package/dist/cli/flow-weaver-pack-commands-OS2QRXAK.mjs +146 -0
  271. package/dist/cli/flow-weaver-registry-5MLFRPPT.mjs +25 -0
  272. package/dist/cli/flow-weaver-run-DSTLSTHR.mjs +555 -0
  273. package/dist/cli/flow-weaver-serialization-node-LE6PCG4M.mjs +50 -0
  274. package/dist/cli/flow-weaver-serve-NVLCLSOW.mjs +192 -0
  275. package/dist/cli/flow-weaver-server-7IERLVXE.mjs +2925 -0
  276. package/dist/cli/flow-weaver-server-KWF4PXYC.mjs +19112 -0
  277. package/dist/cli/flow-weaver-status-75W2S3YB.mjs +138 -0
  278. package/dist/cli/flow-weaver-strip-AZPXUYVA.mjs +79 -0
  279. package/dist/cli/flow-weaver-templates-DSNMB6K7.mjs +72 -0
  280. package/dist/cli/flow-weaver-validate-A4UWDQN6.mjs +19 -0
  281. package/dist/cli/flow-weaver-validate-GRBZ5W4C.mjs +296 -0
  282. package/dist/cli/flow-weaver-validation-registry-BINGUNXX.mjs +9 -0
  283. package/dist/cli/flow-weaver-validator-TY56CI42.mjs +21 -0
  284. package/dist/cli/flow-weaver-watch-OPPERXL6.mjs +114 -0
  285. package/dist/cli/flow-weaver-workflow-executor-6AHYPXAN.mjs +26 -0
  286. package/dist/cli/flow-weaver.mjs +3557 -89498
  287. package/dist/cli/index.d.ts +5 -2
  288. package/dist/cli/pack-commands-needed.d.ts +12 -0
  289. package/dist/cli/program.d.ts +14 -0
  290. package/dist/cli/templates/ai/mock-provider.d.ts +1 -1
  291. package/dist/cli/templates/index.d.ts +1 -8
  292. package/dist/cli/templates/nodes/agent-router.d.ts +1 -1
  293. package/dist/cli/templates/nodes/aggregator.d.ts +1 -1
  294. package/dist/cli/templates/nodes/conversation-memory.d.ts +1 -1
  295. package/dist/cli/templates/nodes/http.d.ts +1 -1
  296. package/dist/cli/templates/nodes/human-approval.d.ts +1 -1
  297. package/dist/cli/templates/nodes/json-extractor.d.ts +1 -1
  298. package/dist/cli/templates/nodes/llm-call.d.ts +1 -1
  299. package/dist/cli/templates/nodes/prompt-template.d.ts +1 -1
  300. package/dist/cli/templates/nodes/rag-retriever.d.ts +1 -1
  301. package/dist/cli/templates/nodes/tool-executor.d.ts +1 -1
  302. package/dist/cli/templates/nodes/transformer.d.ts +1 -1
  303. package/dist/cli/templates/nodes/validator.d.ts +1 -1
  304. package/dist/cli/templates/shared/approval-types.d.ts +1 -1
  305. package/dist/cli/templates/shared/case.d.ts +14 -0
  306. package/dist/cli/templates/shared/llm-types.d.ts +4 -4
  307. package/dist/cli/templates/workflows/aggregator.d.ts +1 -1
  308. package/dist/cli/templates/workflows/ai-agent.d.ts +1 -1
  309. package/dist/cli/templates/workflows/ai-chat.d.ts +1 -1
  310. package/dist/cli/templates/workflows/ai-rag.d.ts +1 -1
  311. package/dist/cli/templates/workflows/ai-react.d.ts +1 -1
  312. package/dist/cli/templates/workflows/approval.d.ts +10 -0
  313. package/dist/cli/templates/workflows/conditional.d.ts +2 -2
  314. package/dist/cli/templates/workflows/error-handler.d.ts +2 -2
  315. package/dist/cli/templates/workflows/foreach.d.ts +1 -1
  316. package/dist/cli/templates/workflows/sequential.d.ts +1 -1
  317. package/dist/cli/templates/workflows/webhook.d.ts +1 -1
  318. package/dist/cli/utils/interactive.d.ts +6 -0
  319. package/dist/cli/utils/json-option.d.ts +8 -0
  320. package/dist/cli/utils/logger.d.ts +2 -0
  321. package/dist/compiler/durable-source-proof.d.ts +23 -0
  322. package/dist/compiler/executable-artifact.d.ts +29 -0
  323. package/dist/compiler/index.d.ts +4 -0
  324. package/dist/compiler/index.js +36 -0
  325. package/dist/console/app.js +106 -0
  326. package/dist/console/assets/synergenius.svg +18 -0
  327. package/dist/console/author.d.ts +32 -0
  328. package/dist/console/cli-catalog.d.ts +21 -0
  329. package/dist/console/cli-run.d.ts +35 -0
  330. package/dist/console/cli-run.js +46 -0
  331. package/dist/console/debug.d.ts +67 -0
  332. package/dist/console/diff-view.d.ts +96 -0
  333. package/dist/console/export.d.ts +36 -0
  334. package/dist/console/git.d.ts +27 -0
  335. package/dist/console/index.d.ts +4 -0
  336. package/dist/console/index.html +16 -0
  337. package/dist/console/index.js +203 -0
  338. package/dist/console/packs.d.ts +100 -0
  339. package/dist/console/request-guard.d.ts +10 -0
  340. package/dist/console/respond.d.ts +16 -0
  341. package/dist/console/router.d.ts +64 -0
  342. package/dist/console/routes-agents.d.ts +14 -0
  343. package/dist/console/routes-project.d.ts +3 -0
  344. package/dist/console/routes-runs.d.ts +3 -0
  345. package/dist/console/routes-services.d.ts +7 -0
  346. package/dist/console/routes-tools.d.ts +3 -0
  347. package/dist/console/runs.d.ts +69 -0
  348. package/dist/console/scan.d.ts +49 -0
  349. package/dist/console/schema.d.ts +74 -0
  350. package/dist/console/server.d.ts +34 -0
  351. package/dist/console/server.js +43264 -0
  352. package/dist/console/services.d.ts +119 -0
  353. package/dist/console/source.d.ts +23 -0
  354. package/dist/console/status.d.ts +68 -0
  355. package/dist/console/styles.css +1023 -0
  356. package/dist/console/terminals.d.ts +22 -0
  357. package/dist/console/workflow-view.d.ts +153 -0
  358. package/dist/constants.d.ts +5 -1
  359. package/dist/constants.js +56 -167
  360. package/dist/context/index.d.ts +10 -0
  361. package/dist/context/index.js +14 -191
  362. package/dist/coordinator/agent-gate.d.ts +107 -0
  363. package/dist/coordinator/bundle-digest.d.ts +20 -0
  364. package/dist/coordinator/clock-tick.d.ts +4 -0
  365. package/dist/coordinator/effect-receipts.d.ts +10 -0
  366. package/dist/coordinator/errors.d.ts +31 -0
  367. package/dist/coordinator/file-store.d.ts +3 -0
  368. package/dist/coordinator/gate-labeling.d.ts +33 -0
  369. package/dist/coordinator/gate-resolution.d.ts +28 -0
  370. package/dist/coordinator/index.d.ts +12 -0
  371. package/dist/coordinator/index.js +107 -0
  372. package/dist/coordinator/memory-store.d.ts +3 -0
  373. package/dist/coordinator/params.d.ts +18 -0
  374. package/dist/coordinator/run-annotations.d.ts +6 -0
  375. package/dist/coordinator/run-context.d.ts +11 -0
  376. package/dist/coordinator/run-ending.d.ts +5 -0
  377. package/dist/coordinator/run-outcome.d.ts +31 -0
  378. package/dist/coordinator/run-resume.d.ts +6 -0
  379. package/dist/coordinator/run-start.d.ts +4 -0
  380. package/dist/coordinator/run-store.d.ts +275 -0
  381. package/dist/coordinator/run-trace.d.ts +41 -0
  382. package/dist/coordinator/run-views.d.ts +12 -0
  383. package/dist/coordinator/runs-dir.d.ts +26 -0
  384. package/dist/coordinator/store.d.ts +67 -0
  385. package/dist/coordinator/time.d.ts +39 -0
  386. package/dist/coordinator/workflow-selection.d.ts +6 -0
  387. package/dist/deployment/index.d.ts +11 -16
  388. package/dist/deployment/index.js +541 -50
  389. package/dist/deployment/targets/base.d.ts +11 -13
  390. package/dist/deployment/targets/openapi-parts.d.ts +92 -0
  391. package/dist/diagram/arms.d.ts +70 -0
  392. package/dist/diagram/ascii-renderer.d.ts +1 -1
  393. package/dist/diagram/geometry.d.ts +22 -29
  394. package/dist/diagram/graph/bounds.d.ts +30 -0
  395. package/dist/diagram/graph/metrics.d.ts +21 -0
  396. package/dist/diagram/graph/nodes.d.ts +33 -0
  397. package/dist/diagram/graph/placement.d.ts +22 -0
  398. package/dist/diagram/graph/ports.d.ts +23 -0
  399. package/dist/diagram/graph/routing.d.ts +40 -0
  400. package/dist/diagram/graph/scopes.d.ts +30 -0
  401. package/dist/diagram/index.d.ts +15 -23
  402. package/dist/diagram/index.js +632 -111
  403. package/dist/diagram/labels.d.ts +12 -0
  404. package/dist/diagram/lanes.d.ts +93 -0
  405. package/dist/diagram/layout.d.ts +1 -1
  406. package/dist/diagram/material-symbols.d.ts +7 -0
  407. package/dist/diagram/orthogonal-router.d.ts +15 -51
  408. package/dist/diagram/process-view.d.ts +79 -0
  409. package/dist/diagram/spine.d.ts +25 -0
  410. package/dist/diagram/theme.d.ts +3 -5
  411. package/dist/diagram/types.d.ts +6 -20
  412. package/dist/diff/index.js +53 -9
  413. package/dist/diff/types.d.ts +1 -5
  414. package/dist/doc-metadata/extractors/annotations.d.ts +0 -4
  415. package/dist/doc-metadata/extractors/cli-commands.d.ts +2 -1
  416. package/dist/doc-metadata/extractors/core-metadata.d.ts +19 -4
  417. package/dist/doc-metadata/extractors/error-codes.d.ts +1 -1
  418. package/dist/doc-metadata/extractors/mcp-tools.d.ts +7 -3
  419. package/dist/doc-metadata/index.d.ts +1 -2
  420. package/dist/doc-metadata/index.js +2368 -9
  421. package/dist/doc-metadata/types.d.ts +7 -24
  422. package/dist/docs/guide.d.ts +33 -0
  423. package/dist/docs/index.d.ts +7 -4
  424. package/dist/docs/index.js +298 -298
  425. package/dist/docs/pack-topics.d.ts +18 -0
  426. package/dist/editor-completions/annotationValues.d.ts +1 -1
  427. package/dist/editor-completions/contextParser.d.ts +3 -2
  428. package/dist/editor-completions/dataTypes.d.ts +1 -1
  429. package/dist/editor-completions/goToDefinition.d.ts +1 -1
  430. package/dist/editor-completions/index.d.ts +8 -8
  431. package/dist/editor-completions/index.js +1244 -175
  432. package/dist/editor-completions/jsDocAnnotations.d.ts +1 -1
  433. package/dist/editor-completions/modifierCompletions.d.ts +1 -1
  434. package/dist/export/index.d.ts +7 -1
  435. package/dist/generated-branding.js +8 -21
  436. package/dist/generated-version.d.ts +1 -1
  437. package/dist/generated-version.js +7 -3
  438. package/dist/generator/annotation-generator.d.ts +84 -0
  439. package/dist/generator/async-detection.d.ts +1 -1
  440. package/dist/{body-generator.d.ts → generator/body-generator.d.ts} +7 -3
  441. package/dist/generator/code-utils.d.ts +15 -60
  442. package/dist/generator/connection-reads.d.ts +94 -0
  443. package/dist/generator/control-flow-plan.d.ts +74 -0
  444. package/dist/generator/control-flow.d.ts +1 -1
  445. package/dist/generator/exit-assembly.d.ts +11 -0
  446. package/dist/generator/index.d.ts +4 -5
  447. package/dist/generator/index.js +34 -11
  448. package/dist/generator/input-port-values.d.ts +22 -0
  449. package/dist/generator/{scope-function-generator.d.ts → node-arguments.d.ts} +76 -1
  450. package/dist/generator/node-invocation.d.ts +74 -0
  451. package/dist/{node-types-generator.d.ts → generator/node-types-generator.d.ts} +3 -2
  452. package/dist/generator/scope-closure.d.ts +23 -0
  453. package/dist/generator/scoped-child.d.ts +49 -0
  454. package/dist/{sugar-optimizer.d.ts → generator/sugar-optimizer.d.ts} +1 -1
  455. package/dist/generator/unified.d.ts +14 -2
  456. package/dist/generator/workflow-generator.d.ts +37 -0
  457. package/dist/index.d.ts +29 -26
  458. package/dist/index.js +1322 -92
  459. package/dist/jsdoc-port-sync/apply-diff.d.ts +15 -0
  460. package/dist/jsdoc-port-sync/callback-signature.d.ts +17 -0
  461. package/dist/jsdoc-port-sync/diff.d.ts +5 -7
  462. package/dist/jsdoc-port-sync/incomplete-lines.d.ts +41 -0
  463. package/dist/jsdoc-port-sync/index.d.ts +11 -11
  464. package/dist/jsdoc-port-sync/index.js +88 -45
  465. package/dist/jsdoc-port-sync/jsdoc-to-signature.d.ts +66 -0
  466. package/dist/jsdoc-port-sync/port-parser.d.ts +6 -24
  467. package/dist/jsdoc-port-sync/port-tag-placement.d.ts +55 -0
  468. package/dist/jsdoc-port-sync/scoped-ports.d.ts +21 -0
  469. package/dist/jsdoc-port-sync/signature-parser.d.ts +8 -1
  470. package/dist/jsdoc-port-sync/signature-to-jsdoc.d.ts +77 -0
  471. package/dist/jsdoc-port-sync/sync.d.ts +4 -1
  472. package/dist/marketplace/index.d.ts +5 -3
  473. package/dist/marketplace/index.js +62 -10
  474. package/dist/marketplace/install.d.ts +24 -0
  475. package/dist/marketplace/manifest.d.ts +1 -1
  476. package/dist/marketplace/npmrc.d.ts +24 -0
  477. package/dist/marketplace/registry.d.ts +46 -11
  478. package/dist/marketplace/types.d.ts +41 -24
  479. package/dist/marketplace/validator.d.ts +1 -1
  480. package/dist/mcp/debug-session.d.ts +2 -4
  481. package/dist/mcp/dist-imports.d.ts +12 -0
  482. package/dist/mcp/response-utils.d.ts +11 -9
  483. package/dist/mcp/server.d.ts +0 -1
  484. package/dist/mcp/tools-context.d.ts +11 -0
  485. package/dist/mcp/tools-diagram.d.ts +1 -2
  486. package/dist/mcp/tools-export.d.ts +2 -2
  487. package/dist/mcp/tools-marketplace.d.ts +1 -1
  488. package/dist/mcp/tools-run.d.ts +17 -0
  489. package/dist/mcp/tools-workflow.d.ts +3 -0
  490. package/dist/mcp/types.d.ts +4 -14
  491. package/dist/mcp/workflow-executor.d.ts +57 -19
  492. package/dist/npm-packages.d.ts +1 -1
  493. package/dist/npm-packages.js +10 -473
  494. package/dist/parser/annotation-parser.d.ts +88 -0
  495. package/dist/parser/annotation-suggestion.d.ts +23 -0
  496. package/dist/parser/durable-effect-contract.d.ts +10 -0
  497. package/dist/parser/expression-references.d.ts +101 -0
  498. package/dist/parser/external-node-types.d.ts +69 -0
  499. package/dist/{function-like.d.ts → parser/function-like.d.ts} +10 -3
  500. package/dist/parser/generated-sections.d.ts +25 -0
  501. package/dist/parser/import-resolution.d.ts +67 -0
  502. package/dist/parser/import-stub.d.ts +29 -0
  503. package/dist/parser/jsdoc/config-types.d.ts +209 -0
  504. package/dist/parser/jsdoc/graph-tags.d.ts +54 -0
  505. package/dist/parser/jsdoc/node-type-block.d.ts +23 -0
  506. package/dist/parser/jsdoc/parse-line-once.d.ts +11 -0
  507. package/dist/parser/jsdoc/port-tags.d.ts +42 -0
  508. package/dist/parser/jsdoc/runtime-tags.d.ts +65 -0
  509. package/dist/parser/jsdoc/signature-types.d.ts +52 -0
  510. package/dist/parser/jsdoc/workflow-block.d.ts +22 -0
  511. package/dist/parser/jsdoc-parser.d.ts +23 -0
  512. package/dist/parser/macro-expansion.d.ts +80 -0
  513. package/dist/parser/module-resolution.d.ts +38 -0
  514. package/dist/parser/node-inference.d.ts +39 -0
  515. package/dist/parser/npm-node-types.d.ts +24 -0
  516. package/dist/parser/pack-handlers.d.ts +12 -0
  517. package/dist/parser/path-data-resolution.d.ts +75 -0
  518. package/dist/parser/port-inference.d.ts +15 -0
  519. package/dist/{resolve-package-types.d.ts → parser/resolve-package-types.d.ts} +4 -0
  520. package/dist/parser/serialize-deploy-annotations.d.ts +19 -0
  521. package/dist/parser/tag-registry.d.ts +22 -0
  522. package/dist/parser/workflow-extraction.d.ts +39 -0
  523. package/dist/runtime/ExecutionContext.d.ts +87 -99
  524. package/dist/runtime/continuation-core.d.ts +147 -0
  525. package/dist/runtime/continuation.d.ts +48 -0
  526. package/dist/runtime/debug-controller.d.ts +7 -22
  527. package/dist/runtime/durable-execution.d.ts +176 -0
  528. package/dist/runtime/events.d.ts +16 -1
  529. package/dist/runtime/executable-module-contract.d.ts +16 -0
  530. package/dist/runtime/index.d.ts +13 -10
  531. package/dist/runtime/index.js +947 -9
  532. package/dist/runtime/strict-json.d.ts +15 -0
  533. package/dist/server/access.d.ts +12 -0
  534. package/dist/server/api.d.ts +126 -0
  535. package/dist/server/callback-delivery.d.ts +62 -0
  536. package/dist/server/callback-url.d.ts +44 -0
  537. package/dist/server/context.d.ts +35 -0
  538. package/dist/server/http-error.d.ts +10 -0
  539. package/dist/server/index.d.ts +7 -1
  540. package/dist/server/index.js +125 -6
  541. package/dist/server/openapi-document.d.ts +33 -0
  542. package/dist/server/openapi.d.ts +32 -0
  543. package/dist/server/respond.d.ts +35 -0
  544. package/dist/server/route-params.d.ts +17 -0
  545. package/dist/server/route-plan.d.ts +41 -0
  546. package/dist/server/routes-catalog.d.ts +5 -0
  547. package/dist/server/routes-declared.d.ts +12 -0
  548. package/dist/server/routes-runs.d.ts +8 -0
  549. package/dist/server/run-driver.d.ts +58 -0
  550. package/dist/server/run-view.d.ts +26 -0
  551. package/dist/server/transport.d.ts +35 -0
  552. package/dist/server/types.d.ts +143 -52
  553. package/dist/server/webhook-server.d.ts +12 -38
  554. package/dist/server/workflow-registry.d.ts +7 -4
  555. package/dist/service-registry.d.ts +49 -0
  556. package/dist/service-registry.js +123 -0
  557. package/dist/testing/assertions.d.ts +2 -2
  558. package/dist/testing/index.d.ts +14 -13
  559. package/dist/testing/index.js +582 -24
  560. package/dist/testing/mock-approval.d.ts +3 -5
  561. package/dist/testing/mock-llm.d.ts +2 -3
  562. package/dist/testing/recorder.d.ts +5 -6
  563. package/dist/testing/replayer.d.ts +6 -7
  564. package/dist/testing/run-store-check.d.ts +3 -0
  565. package/dist/testing/token-tracker.d.ts +2 -2
  566. package/dist/{type-mappings.d.ts → types/type-mappings.d.ts} +13 -1
  567. package/dist/utils/error-utils.d.ts +4 -2
  568. package/dist/utils/port-ordering.d.ts +2 -2
  569. package/dist/utils/port-tag-utils.d.ts +1 -1
  570. package/dist/validation/agent-detection.d.ts +17 -5
  571. package/dist/validation/agent-rules.d.ts +6 -7
  572. package/dist/validation/core-rules.d.ts +49 -0
  573. package/dist/validation/design-rules.d.ts +9 -3
  574. package/dist/validation/rule-registry.d.ts +3 -3
  575. package/dist/validation/rules/connections.d.ts +27 -0
  576. package/dist/validation/rules/context.d.ts +11 -0
  577. package/dist/validation/rules/cycles.d.ts +17 -0
  578. package/dist/validation/rules/data-flow.d.ts +19 -0
  579. package/dist/validation/rules/scope-topology.d.ts +35 -0
  580. package/dist/validation/rules/type-compatibility.d.ts +30 -0
  581. package/dist/validation/type-checker.d.ts +39 -0
  582. package/dist/validation/validator-helpers.d.ts +31 -0
  583. package/dist/validation/validator.d.ts +30 -0
  584. package/docs/reference/advanced-annotations.md +277 -60
  585. package/docs/reference/built-in-nodes.md +164 -94
  586. package/docs/reference/cancellation.md +44 -0
  587. package/docs/reference/cli-reference.md +252 -234
  588. package/docs/reference/compilation.md +36 -109
  589. package/docs/reference/concepts.md +80 -63
  590. package/docs/reference/console.md +169 -0
  591. package/docs/reference/debugging.md +26 -57
  592. package/docs/reference/deployment.md +217 -143
  593. package/docs/reference/durable-gates.md +445 -0
  594. package/docs/reference/error-codes.md +90 -43
  595. package/docs/reference/export-interface.md +91 -26
  596. package/docs/reference/iterative-development.md +50 -28
  597. package/docs/reference/jsdoc-grammar.md +66 -311
  598. package/docs/reference/library.md +250 -0
  599. package/docs/reference/marketplace.md +301 -152
  600. package/docs/reference/mcp-tools.md +102 -0
  601. package/docs/reference/node-conversion.md +84 -59
  602. package/docs/reference/orientation.md +68 -0
  603. package/docs/reference/scaffold.md +5 -4
  604. package/docs/reference/tutorial.md +106 -166
  605. package/docs/reference/visual-reference.md +1 -1
  606. package/package.json +85 -50
  607. package/dist/agent/agent-loop.js +0 -156
  608. package/dist/agent/cli-spawn-config.js +0 -65
  609. package/dist/agent/device-connection.d.ts +0 -79
  610. package/dist/agent/device-connection.js +0 -184
  611. package/dist/agent/env-allowlist.js +0 -60
  612. package/dist/agent/providers/anthropic.js +0 -198
  613. package/dist/agent/providers/claude-cli.js +0 -161
  614. package/dist/agent/providers/openai-compat.js +0 -205
  615. package/dist/agent/providers/platform.d.ts +0 -23
  616. package/dist/agent/providers/platform.js +0 -132
  617. package/dist/agent/streaming.js +0 -186
  618. package/dist/agent/types.js +0 -20
  619. package/dist/annotation-generator.d.ts +0 -50
  620. package/dist/annotation-generator.js +0 -743
  621. package/dist/api/builder.js +0 -345
  622. package/dist/api/command-runner.js +0 -787
  623. package/dist/api/compile.js +0 -148
  624. package/dist/api/extract-types.js +0 -57
  625. package/dist/api/generate-in-place.js +0 -1477
  626. package/dist/api/generate.js +0 -514
  627. package/dist/api/helpers.js +0 -285
  628. package/dist/api/inline-runtime.js +0 -526
  629. package/dist/api/manipulation/connections.js +0 -151
  630. package/dist/api/manipulation/index.js +0 -41
  631. package/dist/api/manipulation/node-types.js +0 -200
  632. package/dist/api/manipulation/nodes.js +0 -355
  633. package/dist/api/manipulation/ports.js +0 -228
  634. package/dist/api/manipulation/scopes.js +0 -156
  635. package/dist/api/manipulation/workflow.js +0 -116
  636. package/dist/api/modify-operation.js +0 -177
  637. package/dist/api/parse.js +0 -115
  638. package/dist/api/patterns.d.ts +0 -112
  639. package/dist/api/patterns.js +0 -303
  640. package/dist/api/query.js +0 -840
  641. package/dist/api/templates.js +0 -117
  642. package/dist/api/transform.js +0 -40
  643. package/dist/api/validate.js +0 -64
  644. package/dist/api/validation-registry.js +0 -10
  645. package/dist/api/workflow-file-operations.js +0 -180
  646. package/dist/ast/builder.js +0 -395
  647. package/dist/ast/serialization-node.js +0 -30
  648. package/dist/ast/serialization.js +0 -134
  649. package/dist/ast/types.js +0 -2
  650. package/dist/ast/workflow-utils.js +0 -114
  651. package/dist/body-generator.js +0 -35
  652. package/dist/built-in-nodes/coercion-types.js +0 -61
  653. package/dist/built-in-nodes/delay.js +0 -29
  654. package/dist/built-in-nodes/generated-registry.js +0 -299
  655. package/dist/built-in-nodes/invoke-workflow.js +0 -36
  656. package/dist/built-in-nodes/mock-types.js +0 -42
  657. package/dist/built-in-nodes/wait-for-agent.js +0 -31
  658. package/dist/built-in-nodes/wait-for-event.js +0 -25
  659. package/dist/chevrotain-parser/coerce-parser.js +0 -103
  660. package/dist/chevrotain-parser/connect-parser.js +0 -136
  661. package/dist/chevrotain-parser/fan-parser.js +0 -149
  662. package/dist/chevrotain-parser/grammar-diagrams.js +0 -273
  663. package/dist/chevrotain-parser/index.js +0 -31
  664. package/dist/chevrotain-parser/map-parser.js +0 -130
  665. package/dist/chevrotain-parser/node-parser.js +0 -558
  666. package/dist/chevrotain-parser/path-parser.js +0 -140
  667. package/dist/chevrotain-parser/port-parser.js +0 -519
  668. package/dist/chevrotain-parser/position-parser.d.ts +0 -20
  669. package/dist/chevrotain-parser/position-parser.js +0 -83
  670. package/dist/chevrotain-parser/scope-parser.js +0 -104
  671. package/dist/chevrotain-parser/tokens.js +0 -429
  672. package/dist/chevrotain-parser/trigger-cancel-parser.js +0 -291
  673. package/dist/cli/commands/account.d.ts +0 -4
  674. package/dist/cli/commands/account.js +0 -50
  675. package/dist/cli/commands/ai-credentials.d.ts +0 -12
  676. package/dist/cli/commands/ai-credentials.js +0 -95
  677. package/dist/cli/commands/apikey.d.ts +0 -4
  678. package/dist/cli/commands/apikey.js +0 -64
  679. package/dist/cli/commands/auth.d.ts +0 -9
  680. package/dist/cli/commands/auth.js +0 -255
  681. package/dist/cli/commands/compile.js +0 -331
  682. package/dist/cli/commands/connect.d.ts +0 -4
  683. package/dist/cli/commands/connect.js +0 -163
  684. package/dist/cli/commands/context.js +0 -51
  685. package/dist/cli/commands/create.js +0 -139
  686. package/dist/cli/commands/deploy.d.ts +0 -6
  687. package/dist/cli/commands/deploy.js +0 -74
  688. package/dist/cli/commands/dev.js +0 -227
  689. package/dist/cli/commands/diagram.js +0 -39
  690. package/dist/cli/commands/diff.js +0 -57
  691. package/dist/cli/commands/docs.js +0 -74
  692. package/dist/cli/commands/export.js +0 -153
  693. package/dist/cli/commands/grammar.js +0 -40
  694. package/dist/cli/commands/implement.js +0 -91
  695. package/dist/cli/commands/init-personas.js +0 -541
  696. package/dist/cli/commands/init.js +0 -797
  697. package/dist/cli/commands/market.js +0 -440
  698. package/dist/cli/commands/mcp-setup.js +0 -433
  699. package/dist/cli/commands/migrate.js +0 -91
  700. package/dist/cli/commands/modify.js +0 -58
  701. package/dist/cli/commands/openapi.js +0 -71
  702. package/dist/cli/commands/org.d.ts +0 -8
  703. package/dist/cli/commands/org.js +0 -136
  704. package/dist/cli/commands/pattern.d.ts +0 -34
  705. package/dist/cli/commands/pattern.js +0 -186
  706. package/dist/cli/commands/plugin.d.ts +0 -16
  707. package/dist/cli/commands/plugin.js +0 -176
  708. package/dist/cli/commands/run.js +0 -742
  709. package/dist/cli/commands/serve.js +0 -93
  710. package/dist/cli/commands/status.js +0 -123
  711. package/dist/cli/commands/strip.js +0 -61
  712. package/dist/cli/commands/templates.js +0 -58
  713. package/dist/cli/commands/validate.js +0 -267
  714. package/dist/cli/commands/watch.js +0 -71
  715. package/dist/cli/config/credentials.d.ts +0 -15
  716. package/dist/cli/config/credentials.js +0 -43
  717. package/dist/cli/config/platform-client.d.ts +0 -123
  718. package/dist/cli/config/platform-client.js +0 -248
  719. package/dist/cli/env-setup.js +0 -12
  720. package/dist/cli/index.js +0 -850
  721. package/dist/cli/pack-commands.js +0 -122
  722. package/dist/cli/postinstall.d.ts +0 -16
  723. package/dist/cli/postinstall.js +0 -119
  724. package/dist/cli/templates/ai/mock-provider.js +0 -64
  725. package/dist/cli/templates/ai/types.js +0 -5
  726. package/dist/cli/templates/approvals/index.d.ts +0 -15
  727. package/dist/cli/templates/approvals/index.js +0 -241
  728. package/dist/cli/templates/index.js +0 -123
  729. package/dist/cli/templates/nodes/agent-router.js +0 -114
  730. package/dist/cli/templates/nodes/aggregator.js +0 -63
  731. package/dist/cli/templates/nodes/conversation-memory.js +0 -85
  732. package/dist/cli/templates/nodes/http.js +0 -80
  733. package/dist/cli/templates/nodes/human-approval.js +0 -109
  734. package/dist/cli/templates/nodes/json-extractor.js +0 -119
  735. package/dist/cli/templates/nodes/llm-call.js +0 -106
  736. package/dist/cli/templates/nodes/prompt-template.js +0 -52
  737. package/dist/cli/templates/nodes/rag-retriever.js +0 -128
  738. package/dist/cli/templates/nodes/tool-executor.js +0 -108
  739. package/dist/cli/templates/nodes/transformer.js +0 -68
  740. package/dist/cli/templates/nodes/validator.js +0 -62
  741. package/dist/cli/templates/pack-loader.js +0 -58
  742. package/dist/cli/templates/providers/index.js +0 -239
  743. package/dist/cli/templates/shared/approval-types.js +0 -31
  744. package/dist/cli/templates/shared/llm-types.js +0 -109
  745. package/dist/cli/templates/workflows/aggregator.js +0 -101
  746. package/dist/cli/templates/workflows/ai-agent.js +0 -326
  747. package/dist/cli/templates/workflows/ai-chat.js +0 -167
  748. package/dist/cli/templates/workflows/ai-rag.js +0 -184
  749. package/dist/cli/templates/workflows/ai-react.js +0 -293
  750. package/dist/cli/templates/workflows/conditional.js +0 -139
  751. package/dist/cli/templates/workflows/error-handler.js +0 -145
  752. package/dist/cli/templates/workflows/foreach.js +0 -140
  753. package/dist/cli/templates/workflows/sequential.js +0 -200
  754. package/dist/cli/templates/workflows/webhook.js +0 -158
  755. package/dist/cli/utils/cli-helpers.d.ts +0 -44
  756. package/dist/cli/utils/cli-helpers.js +0 -99
  757. package/dist/cli/utils/logger.js +0 -126
  758. package/dist/cli/utils/parse-int-strict.js +0 -17
  759. package/dist/cli/utils/safe-write.js +0 -54
  760. package/dist/deployment/config/defaults.d.ts +0 -29
  761. package/dist/deployment/config/defaults.js +0 -98
  762. package/dist/deployment/config/loader.d.ts +0 -24
  763. package/dist/deployment/config/loader.js +0 -237
  764. package/dist/deployment/config/types.d.ts +0 -117
  765. package/dist/deployment/config/types.js +0 -5
  766. package/dist/deployment/core/adapters.d.ts +0 -66
  767. package/dist/deployment/core/adapters.js +0 -156
  768. package/dist/deployment/core/executor.d.ts +0 -62
  769. package/dist/deployment/core/executor.js +0 -197
  770. package/dist/deployment/core/formatters.d.ts +0 -42
  771. package/dist/deployment/core/formatters.js +0 -146
  772. package/dist/deployment/openapi/generator.d.ts +0 -146
  773. package/dist/deployment/openapi/generator.js +0 -347
  774. package/dist/deployment/openapi/schema-converter.d.ts +0 -49
  775. package/dist/deployment/openapi/schema-converter.js +0 -192
  776. package/dist/deployment/targets/base.js +0 -855
  777. package/dist/deployment/types.d.ts +0 -140
  778. package/dist/deployment/types.js +0 -8
  779. package/dist/diagram/ascii-renderer.js +0 -528
  780. package/dist/diagram/geometry.js +0 -1267
  781. package/dist/diagram/html-viewer.d.ts +0 -21
  782. package/dist/diagram/html-viewer.js +0 -1689
  783. package/dist/diagram/layout.js +0 -143
  784. package/dist/diagram/orthogonal-router.js +0 -568
  785. package/dist/diagram/renderer.d.ts +0 -3
  786. package/dist/diagram/renderer.js +0 -266
  787. package/dist/diagram/theme.js +0 -282
  788. package/dist/diagram/types.js +0 -2
  789. package/dist/diff/WorkflowDiffer.js +0 -429
  790. package/dist/diff/formatDiff.js +0 -239
  791. package/dist/diff/impact.js +0 -119
  792. package/dist/diff/types.js +0 -35
  793. package/dist/doc-metadata/extractors/annotations.js +0 -638
  794. package/dist/doc-metadata/extractors/cli-commands.js +0 -326
  795. package/dist/doc-metadata/extractors/core-metadata.js +0 -61
  796. package/dist/doc-metadata/extractors/error-codes.js +0 -372
  797. package/dist/doc-metadata/extractors/grammar-rules.js +0 -51
  798. package/dist/doc-metadata/extractors/mcp-tools.js +0 -705
  799. package/dist/doc-metadata/extractors/plugin-api.d.ts +0 -19
  800. package/dist/doc-metadata/extractors/plugin-api.js +0 -279
  801. package/dist/doc-metadata/types.js +0 -5
  802. package/dist/editor-completions/annotationValues.js +0 -146
  803. package/dist/editor-completions/contextParser.js +0 -410
  804. package/dist/editor-completions/dataTypes.js +0 -95
  805. package/dist/editor-completions/goToDefinition.js +0 -112
  806. package/dist/editor-completions/jsDocAnnotations.js +0 -359
  807. package/dist/editor-completions/modifierCompletions.js +0 -197
  808. package/dist/editor-completions/types.js +0 -8
  809. package/dist/export/index.js +0 -212
  810. package/dist/extensions/index.d.ts +0 -16
  811. package/dist/extensions/index.js +0 -17
  812. package/dist/friendly-errors.js +0 -761
  813. package/dist/function-like.js +0 -84
  814. package/dist/generator/async-detection.js +0 -56
  815. package/dist/generator/code-utils.js +0 -551
  816. package/dist/generator/compile-target-registry.d.ts +0 -20
  817. package/dist/generator/compile-target-registry.js +0 -20
  818. package/dist/generator/control-flow.js +0 -358
  819. package/dist/generator/dev-mode-registry.d.ts +0 -27
  820. package/dist/generator/dev-mode-registry.js +0 -20
  821. package/dist/generator/scope-function-generator.js +0 -397
  822. package/dist/generator/unified.js +0 -1831
  823. package/dist/generator.d.ts +0 -54
  824. package/dist/generator.js +0 -101
  825. package/dist/jsdoc-parser.d.ts +0 -377
  826. package/dist/jsdoc-parser.js +0 -1189
  827. package/dist/jsdoc-port-sync/constants.js +0 -103
  828. package/dist/jsdoc-port-sync/diff.js +0 -319
  829. package/dist/jsdoc-port-sync/port-parser.js +0 -579
  830. package/dist/jsdoc-port-sync/rename.js +0 -256
  831. package/dist/jsdoc-port-sync/signature-parser.js +0 -559
  832. package/dist/jsdoc-port-sync/sync.js +0 -653
  833. package/dist/marketplace/manifest.js +0 -194
  834. package/dist/marketplace/registry.js +0 -198
  835. package/dist/marketplace/types.js +0 -9
  836. package/dist/marketplace/validator.js +0 -150
  837. package/dist/mcp/agent-channel.d.ts +0 -35
  838. package/dist/mcp/agent-channel.js +0 -61
  839. package/dist/mcp/auto-registration.d.ts +0 -3
  840. package/dist/mcp/auto-registration.js +0 -62
  841. package/dist/mcp/debug-session.js +0 -25
  842. package/dist/mcp/index.d.ts +0 -11
  843. package/dist/mcp/index.js +0 -10
  844. package/dist/mcp/pack-tools.js +0 -59
  845. package/dist/mcp/prompts.js +0 -68
  846. package/dist/mcp/response-utils.js +0 -97
  847. package/dist/mcp/run-registry.d.ts +0 -29
  848. package/dist/mcp/run-registry.js +0 -24
  849. package/dist/mcp/server.js +0 -63
  850. package/dist/mcp/tools-context.js +0 -51
  851. package/dist/mcp/tools-debug.js +0 -451
  852. package/dist/mcp/tools-diagram.js +0 -97
  853. package/dist/mcp/tools-docs.js +0 -62
  854. package/dist/mcp/tools-export.js +0 -222
  855. package/dist/mcp/tools-marketplace.js +0 -132
  856. package/dist/mcp/tools-model.d.ts +0 -3
  857. package/dist/mcp/tools-model.js +0 -279
  858. package/dist/mcp/tools-pattern.d.ts +0 -3
  859. package/dist/mcp/tools-pattern.js +0 -604
  860. package/dist/mcp/tools-query.js +0 -377
  861. package/dist/mcp/tools-resources.js +0 -41
  862. package/dist/mcp/tools-template.js +0 -119
  863. package/dist/mcp/tools-workflow-run.d.ts +0 -40
  864. package/dist/mcp/tools-workflow-run.js +0 -150
  865. package/dist/mcp/types.js +0 -2
  866. package/dist/mcp/workflow-executor.js +0 -242
  867. package/dist/migration/registry.js +0 -29
  868. package/dist/node-types-generator.js +0 -139
  869. package/dist/parser/tag-registry.js +0 -57
  870. package/dist/parser.d.ts +0 -232
  871. package/dist/parser.js +0 -2500
  872. package/dist/plugin/PluginPanel.d.ts +0 -12
  873. package/dist/plugin/PluginPanel.js +0 -5
  874. package/dist/plugin/index.d.ts +0 -13
  875. package/dist/plugin/index.js +0 -14
  876. package/dist/plugin/types.d.ts +0 -75
  877. package/dist/plugin/types.js +0 -8
  878. package/dist/resolve-package-types.js +0 -123
  879. package/dist/runtime/CancellationError.js +0 -20
  880. package/dist/runtime/ExecutionContext.js +0 -280
  881. package/dist/runtime/builtin-functions.js +0 -549
  882. package/dist/runtime/checkpoint.d.ts +0 -84
  883. package/dist/runtime/checkpoint.js +0 -225
  884. package/dist/runtime/debug-controller.js +0 -247
  885. package/dist/runtime/events.js +0 -2
  886. package/dist/runtime/function-registry.js +0 -66
  887. package/dist/runtime/parameter-resolver.js +0 -113
  888. package/dist/server/types.js +0 -5
  889. package/dist/server/webhook-server.js +0 -269
  890. package/dist/server/workflow-registry.js +0 -202
  891. package/dist/shared-project.js +0 -28
  892. package/dist/sugar-optimizer.js +0 -498
  893. package/dist/testing/assertions.js +0 -127
  894. package/dist/testing/mock-approval.js +0 -98
  895. package/dist/testing/mock-llm.js +0 -119
  896. package/dist/testing/recorder.js +0 -70
  897. package/dist/testing/replayer.js +0 -143
  898. package/dist/testing/token-tracker.js +0 -94
  899. package/dist/type-checker.d.ts +0 -42
  900. package/dist/type-checker.js +0 -190
  901. package/dist/type-mappings.js +0 -131
  902. package/dist/types/branded-ports.d.ts +0 -151
  903. package/dist/types/branded-ports.js +0 -121
  904. package/dist/types/index.d.ts +0 -5
  905. package/dist/types/index.js +0 -5
  906. package/dist/types.d.ts +0 -139
  907. package/dist/types.js +0 -15
  908. package/dist/utils/error-utils.js +0 -27
  909. package/dist/utils/lru-cache.js +0 -40
  910. package/dist/utils/port-ordering.js +0 -81
  911. package/dist/utils/port-tag-utils.js +0 -41
  912. package/dist/utils/string-distance.js +0 -56
  913. package/dist/validation/agent-detection.js +0 -115
  914. package/dist/validation/agent-rules.js +0 -262
  915. package/dist/validation/design-rules.js +0 -377
  916. package/dist/validation/rule-registry.js +0 -37
  917. package/dist/validator.d.ts +0 -113
  918. package/dist/validator.js +0 -1631
  919. package/docs/reference/patterns.md +0 -159
  920. package/scripts/postinstall.cjs +0 -86
  921. /package/dist/{shared-project.d.ts → parser/shared-project.d.ts} +0 -0
  922. /package/dist/{friendly-errors.d.ts → validation/friendly-errors.d.ts} +0 -0
@@ -1,465 +1,538 @@
1
- /**
2
- * Persistent CLI session manager — eliminates cold-start delay by keeping
3
- * the Claude CLI process alive between messages.
4
- *
5
- * Instead of spawning a new CLI process per message (~5s cold start + MCP
6
- * handshake), we spawn once with `--input-format stream-json` and feed
7
- * messages via stdin. The CLI maintains conversation context internally.
8
- *
9
- * KEY LEARNINGS (Claude Code CLI v2.1.76):
10
- *
11
- * 1. Stdin message format (NDJSON):
12
- * {"type":"user","message":{"role":"user","content":"..."},"parent_tool_use_id":null}
13
- *
14
- * 2. The CLI stays alive between messages when stdin is kept open.
15
- * Each message gets its own system/init → stream_events → result cycle.
16
- *
17
- * 3. Turn boundary: the `result` event marks the end of a CLI turn, NOT
18
- * `message_stop` from stream_event.
19
- *
20
- * 4. The CLI uses NDJSON for MCP stdio transport (not Content-Length framing).
21
- */
22
- import { randomUUID } from 'node:crypto';
23
- import { readFileSync } from 'node:fs';
24
- import { resolve, dirname } from 'node:path';
25
- import { spawn as nodeSpawn } from 'node:child_process';
26
- import { fileURLToPath } from 'node:url';
27
- import { StreamJsonParser } from './streaming.js';
28
- const DEFAULT_IDLE_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
29
- // Package version included in session fingerprint so cached sessions
30
- // auto-invalidate when the core is updated (e.g. npm update).
31
- let CORE_VERSION = 'unknown';
32
- try {
33
- const pkgPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../package.json');
34
- CORE_VERSION = JSON.parse(readFileSync(pkgPath, 'utf-8')).version;
35
- }
36
- catch { /* non-fatal */ }
37
- export class CliSession {
38
- sessionId = randomUUID();
39
- child = null;
40
- alive = false;
41
- stderrBuf = '';
42
- stdoutBuffer = '';
43
- activeTurn = null;
44
- idleTimer = null;
45
- cleanupFn = null;
46
- parser;
47
- log;
48
- spawnFn;
49
- idleTimeout;
50
- opts;
51
- constructor(options) {
52
- this.opts = options;
53
- this.log = options.logger;
54
- this.spawnFn = options.spawnFn ?? ((cmd, args, opts) => nodeSpawn(cmd, args, { ...opts, stdio: opts.stdio }));
55
- this.idleTimeout = options.idleTimeout ?? DEFAULT_IDLE_TIMEOUT_MS;
56
- // Parser delegates to pushEvent which routes to activeTurn
57
- this.parser = new StreamJsonParser((event) => this.pushEvent(event));
1
+ // src/agent/cli-session.ts
2
+ import { randomUUID } from "node:crypto";
3
+ import { readFileSync } from "node:fs";
4
+ import { resolve, dirname } from "node:path";
5
+ import { spawn as nodeSpawn } from "node:child_process";
6
+ import { fileURLToPath } from "node:url";
7
+
8
+ // src/agent/streaming.ts
9
+ var StreamJsonParser = class {
10
+ constructor(pushEvent) {
11
+ this.pushEvent = pushEvent;
12
+ }
13
+ pushEvent;
14
+ hasAssistantText = false;
15
+ insideToolUse = false;
16
+ activeToolJsonChunks = /* @__PURE__ */ new Map();
17
+ /** Reset per-turn state. Call before starting a new turn in persistent sessions. */
18
+ reset() {
19
+ this.hasAssistantText = false;
20
+ this.insideToolUse = false;
21
+ this.activeToolJsonChunks.clear();
22
+ }
23
+ /** Whether any text_delta events have been emitted this turn. */
24
+ get hasText() {
25
+ return this.hasAssistantText;
26
+ }
27
+ /**
28
+ * Feed a single NDJSON line (without trailing newline).
29
+ * Parses and emits StreamEvent(s) via the callback.
30
+ */
31
+ feed(line) {
32
+ if (!line.trim()) return;
33
+ let event;
34
+ try {
35
+ event = JSON.parse(line);
36
+ } catch {
37
+ if (line.trim() && !this.hasAssistantText) {
38
+ this.pushEvent({ type: "text_delta", text: line });
39
+ }
40
+ return;
58
41
  }
59
- get ready() {
60
- return this.alive;
42
+ if (event.type === "stream_event" && event.event) {
43
+ event = event.event;
61
44
  }
62
- /**
63
- * Check if this session was created with equivalent CLI-relevant options.
64
- * Used by the session cache to detect option drift.
65
- */
66
- matchesOptions(other) {
67
- return CliSession.fingerprint(this.opts) === CliSession.fingerprint(other);
45
+ this.processEvent(event);
46
+ }
47
+ processEvent(event) {
48
+ const block = event.content_block;
49
+ const delta = event.delta;
50
+ if (event.type === "content_block_start" && block?.type === "tool_use") {
51
+ this.insideToolUse = true;
52
+ const id = block.id || `cli-tool-${Date.now()}`;
53
+ const name = block.name || "unknown";
54
+ this.pushEvent({ type: "tool_use_start", id, name });
55
+ this.activeToolJsonChunks.set(id, { name, chunks: [] });
56
+ return;
68
57
  }
69
- /**
70
- * Inject a mock child process for testing.
71
- * @internal — test only
72
- */
73
- _injectForTest(child) {
74
- this.child = child;
75
- this.alive = true;
76
- this.stderrBuf = '';
77
- this.stdoutBuffer = '';
78
- child.stdout.on('data', (chunk) => {
79
- this.onStdoutData(chunk.toString());
80
- });
81
- child.on('exit', () => this.markDead());
82
- child.on('error', () => this.markDead());
58
+ if (event.type === "content_block_start" && block?.type === "text") {
59
+ this.insideToolUse = false;
60
+ return;
83
61
  }
84
- /**
85
- * Spawn the CLI process. Must be called before send().
86
- */
87
- async spawn() {
88
- // Kill existing child to prevent orphaned processes from concurrent spawn
89
- if (this.child && this.alive) {
90
- this.child.kill('SIGTERM');
91
- }
92
- const { binPath, cwd, env, model, mcpConfigPath } = this.opts;
93
- const args = [
94
- '-p',
95
- '--input-format',
96
- 'stream-json',
97
- '--output-format',
98
- 'stream-json',
99
- '--include-partial-messages',
100
- '--verbose',
101
- '--dangerously-skip-permissions',
102
- '--permission-mode',
103
- 'bypassPermissions',
104
- '--setting-sources',
105
- 'user,local',
106
- '--model',
107
- model,
108
- ];
109
- if (mcpConfigPath) {
110
- args.push('--mcp-config', mcpConfigPath);
111
- }
112
- if (this.opts.strictMcpConfig || mcpConfigPath) {
113
- args.push('--strict-mcp-config');
114
- }
115
- const { disallowedTools, tools, systemPrompt, appendSystemPrompt } = this.opts;
116
- if (disallowedTools && disallowedTools.length > 0) {
117
- args.push('--disallowed-tools', disallowedTools.join(','));
118
- }
119
- // Phase 1.1: --tools flag (whitelist / disable all)
120
- if (tools !== undefined) {
121
- args.push('--tools', tools);
122
- }
123
- if (systemPrompt) {
124
- args.push('--system-prompt', systemPrompt);
125
- }
126
- // Phase 1.2: --append-system-prompt flag
127
- if (appendSystemPrompt) {
128
- args.push('--append-system-prompt', appendSystemPrompt);
129
- }
130
- const spawnResult = this.spawnFn(binPath, args, { cwd, stdio: ['pipe', 'pipe', 'pipe'], env: env ?? process.env });
131
- const child = 'child' in spawnResult ? spawnResult.child : spawnResult;
132
- const cleanup = 'cleanup' in spawnResult ? spawnResult.cleanup : undefined;
133
- this.child = child;
134
- this.cleanupFn = cleanup ?? null;
135
- this.alive = true;
136
- this.stderrBuf = '';
137
- this.stdoutBuffer = '';
138
- child.stderr.on('data', (chunk) => {
139
- this.stderrBuf += chunk.toString();
140
- });
141
- child.stdout.on('data', (chunk) => {
142
- this.onStdoutData(chunk.toString());
143
- });
144
- child.on('exit', (code) => {
145
- this.log?.info('CLI session process exited', { sessionId: this.sessionId, exitCode: code });
146
- this.markDead();
147
- });
148
- child.on('error', (err) => {
149
- this.log?.error('CLI session process error', { sessionId: this.sessionId, err });
150
- this.markDead();
151
- });
152
- this.resetIdleTimer();
153
- this.log?.info('CLI session spawned', { sessionId: this.sessionId, cwd, model });
62
+ if (event.type === "content_block_delta" && delta?.type === "input_json_delta") {
63
+ const lastTool = [...this.activeToolJsonChunks.entries()].pop();
64
+ if (lastTool) lastTool[1].chunks.push(delta.partial_json || "");
65
+ return;
154
66
  }
155
- /**
156
- * Send a user message and stream back events.
157
- * Auto-respawns if the process has died.
158
- *
159
- * Phase 1.3: Concurrent send() guard — throws if a previous turn is still active.
160
- * The activeTurn lock is claimed synchronously BEFORE any async work (spawn)
161
- * to prevent TOCTOU races.
162
- */
163
- async *send(userMessage, systemPromptPrefix) {
164
- // Phase 1.3: Guard against concurrent sends
165
- if (this.activeTurn) {
166
- throw new Error('CliSession: concurrent send() calls are not supported. Previous turn still active.');
167
- }
168
- // Claim the turn synchronously BEFORE any await to prevent TOCTOU race
169
- const turn = { resolve: () => { }, events: [], done: false };
170
- this.activeTurn = turn;
67
+ if (event.type === "content_block_delta" && delta?.type === "thinking_delta" && delta?.thinking) {
68
+ this.pushEvent({ type: "thinking_delta", text: delta.thinking });
69
+ return;
70
+ }
71
+ if (event.type === "content_block_delta" && delta?.text && !this.insideToolUse) {
72
+ this.hasAssistantText = true;
73
+ this.pushEvent({ type: "text_delta", text: delta.text });
74
+ return;
75
+ }
76
+ if (event.type === "content_block_stop" && this.insideToolUse) {
77
+ const lastTool = [...this.activeToolJsonChunks.entries()].pop();
78
+ if (lastTool) {
79
+ const [id, { chunks }] = lastTool;
80
+ let args = {};
171
81
  try {
172
- if (!this.alive) {
173
- this.log?.info('CLI session dead, respawning', { sessionId: this.sessionId });
174
- await this.spawn();
175
- }
176
- this.resetIdleTimer();
177
- this.parser.reset();
178
- const content = systemPromptPrefix ? `${systemPromptPrefix}\n\n${userMessage}` : userMessage;
179
- // Write NDJSON message to stdin
180
- const ndjsonMessage = JSON.stringify({
181
- type: 'user',
182
- message: { role: 'user', content },
183
- parent_tool_use_id: null,
184
- }) + '\n';
185
- // Track whether this turn saw a 'result' event (definitive turn end)
186
- let sawResult = false;
187
- // Wrap pushEvent to suppress intermediate message_stop events.
188
- // The CLI emits message_stop for each API turn, but the session's turn
189
- // boundary is the `result` event. Intermediate message_stop events would
190
- // cause runAgentLoop to exit early (thinking the model stopped), missing
191
- // later events including the result's usage with total_cost_usd.
192
- const originalPush = this.pushEvent.bind(this);
193
- this.parser = new StreamJsonParser((event) => {
194
- if (event.type === 'message_stop' && !sawResult && event.finishReason !== 'error') {
195
- // Suppress — not the real turn end. The result event will emit
196
- // the final message_stop after all usage data is captured.
197
- // Error stops (e.g. authentication_failed) must pass through
198
- // so runAgentLoop can detect the failure.
199
- return;
200
- }
201
- originalPush(event);
202
- });
203
- // Override parser feed to detect result events for turn completion
204
- let sawTerminal = false;
205
- const baseFeed = this.parser.feed.bind(this.parser);
206
- this.parser.feed = (line) => {
207
- // Check if this line is a turn-ending event before parsing
208
- try {
209
- let parsed = JSON.parse(line);
210
- if (parsed.type === 'stream_event' && parsed.event)
211
- parsed = parsed.event;
212
- if (parsed.type === 'result') {
213
- sawResult = true;
214
- sawTerminal = true;
215
- }
216
- // authentication_failed is also a terminal event
217
- if (parsed.type === 'assistant' && parsed.error === 'authentication_failed') {
218
- sawTerminal = true;
219
- }
220
- }
221
- catch {
222
- // Not JSON, let parser handle it
223
- }
224
- baseFeed(line);
225
- if (sawTerminal) {
226
- this.completeTurn();
227
- }
228
- };
229
- try {
230
- this.child.stdin.write(ndjsonMessage, (err) => {
231
- if (err) {
232
- this.log?.error('stdin write error', { sessionId: this.sessionId, err });
233
- this.markDead();
234
- turn.done = true;
235
- turn.resolve();
236
- }
237
- });
238
- }
239
- catch (err) {
240
- this.log?.error('stdin write exception', { sessionId: this.sessionId, err });
241
- this.markDead();
242
- throw new Error('CLI session stdin write failed');
243
- }
244
- // Yield events as they arrive
245
- while (!turn.done || turn.events.length > 0) {
246
- if (turn.events.length > 0) {
247
- yield turn.events.shift();
248
- }
249
- else {
250
- await new Promise((r) => {
251
- turn.resolve = r;
252
- setTimeout(r, 50);
253
- });
254
- }
255
- }
256
- // Yield any remaining events
257
- while (turn.events.length > 0) {
258
- yield turn.events.shift();
259
- }
82
+ args = JSON.parse(chunks.join(""));
83
+ } catch {
260
84
  }
261
- finally {
262
- // Log how the turn ended for debugging cost/result event issues.
263
- // If turn.done is false here, the generator was abandoned by the consumer
264
- // (e.g., for-await broke out) before completeTurn/markDead fired.
265
- // This means the result event hasn't been processed yet, and any
266
- // subsequent stdout data (including the result) will be silently dropped
267
- // because activeTurn is about to be set to null.
268
- if (!turn.done) {
269
- process.stderr.write(`\x1b[33m ⚠ CliSession: generator abandoned before turn.done (events=${turn.events.length}). Result event will be lost.\x1b[0m\n`);
270
- }
271
- this.activeTurn = null;
272
- this.resetIdleTimer();
85
+ this.pushEvent({ type: "tool_use_end", id, arguments: args });
86
+ this.activeToolJsonChunks.delete(id);
87
+ }
88
+ this.insideToolUse = false;
89
+ return;
90
+ }
91
+ if (event.type === "user" && event.message?.content) {
92
+ const content = event.message.content;
93
+ for (const contentBlock of content) {
94
+ if (contentBlock.type === "tool_result" && contentBlock.tool_use_id) {
95
+ const text = Array.isArray(contentBlock.content) ? contentBlock.content.map((c) => c.text || "").join("") : String(contentBlock.content || "");
96
+ this.pushEvent({
97
+ type: "tool_result",
98
+ id: contentBlock.tool_use_id,
99
+ result: text,
100
+ isError: !!contentBlock.is_error
101
+ });
273
102
  }
103
+ }
104
+ return;
274
105
  }
275
- /** Whether a send() call is currently active. */
276
- get hasActiveTurn() {
277
- return this.activeTurn !== null && !this.activeTurn.done;
106
+ if (event.type === "message_start" && event.message?.usage) {
107
+ const usage = event.message.usage;
108
+ this.pushEvent({
109
+ type: "usage",
110
+ promptTokens: usage.input_tokens ?? 0,
111
+ completionTokens: usage.output_tokens ?? 0
112
+ });
113
+ return;
278
114
  }
279
- /**
280
- * Kill the CLI process.
281
- */
282
- kill() {
283
- if (this.hasActiveTurn) {
284
- process.stderr.write(`\x1b[31m ✗ CliSession.kill() called with active turn — data loss will occur (session=${this.sessionId.slice(0, 8)})\x1b[0m\n`);
285
- this._onSessionKilled?.({ sessionId: this.sessionId, hadActiveTurn: true, eventsInTurn: this.activeTurn.events.length });
286
- }
287
- this.clearIdleTimer();
288
- if (this.child && this.alive) {
289
- this.log?.info('Killing CLI session', { sessionId: this.sessionId });
290
- this.child.kill('SIGTERM');
291
- // Phase 1.5: unref the SIGKILL fallback timer so it doesn't keep Node alive
292
- const sigkillTimer = setTimeout(() => {
293
- if (this.child && !this.child.killed) {
294
- this.child.kill('SIGKILL');
295
- }
296
- }, 2000);
297
- sigkillTimer.unref();
298
- }
299
- this.markDead();
115
+ if (event.type === "message_delta" && event.usage) {
116
+ const usage = event.usage;
117
+ this.pushEvent({
118
+ type: "usage",
119
+ promptTokens: 0,
120
+ completionTokens: usage.output_tokens ?? 0
121
+ });
122
+ return;
300
123
  }
301
- /** Callback for session kill events — wire to audit logging. */
302
- _onSessionKilled;
303
- /** Register a callback that fires when this session is killed. */
304
- set onSessionKilled(cb) {
305
- this._onSessionKilled = cb;
124
+ if (event.type === "message_stop") {
125
+ this.pushEvent({ type: "message_stop", finishReason: "stop" });
126
+ return;
306
127
  }
307
- // ---------------------------------------------------------------------------
308
- // Private
309
- // ---------------------------------------------------------------------------
310
- /**
311
- * Compute a fingerprint of CLI-relevant options for cache comparison.
312
- * Field order is significant for JSON.stringify comparison.
313
- * Add new CLI-relevant fields here when they're added to CliSessionOptions.
314
- *
315
- * NOTE: mcpConfigPath is EXCLUDED. It's an ephemeral temp path that changes
316
- * on every createMcpBridge() call. Including it causes fingerprint mismatches
317
- * that kill active sessions mid-turn when a second provider is created for
318
- * the same project (e.g., orchestrator + worker sharing the same projectDir).
319
- * The MCP bridge is swapped per-request via setHandlers() — the config path
320
- * is only needed at spawn time, not for session identity.
321
- */
322
- static fingerprint(options) {
323
- return JSON.stringify({
324
- _coreVersion: CORE_VERSION, // auto-invalidate cache on core update
325
- model: options.model,
326
- // mcpConfigPath deliberately excluded — see comment above
327
- strictMcpConfig: options.strictMcpConfig,
328
- disallowedTools: options.disallowedTools,
329
- tools: options.tools,
330
- systemPrompt: options.systemPrompt,
331
- appendSystemPrompt: options.appendSystemPrompt,
128
+ if (event.type === "result") {
129
+ if (event.is_error) {
130
+ this.pushEvent({ type: "message_stop", finishReason: "error" });
131
+ return;
132
+ }
133
+ if (event.result && !this.hasAssistantText) {
134
+ this.pushEvent({ type: "text_delta", text: event.result });
135
+ }
136
+ if (event.usage) {
137
+ const usage = event.usage;
138
+ this.pushEvent({
139
+ type: "usage",
140
+ promptTokens: usage.input_tokens ?? 0,
141
+ completionTokens: usage.output_tokens ?? 0,
142
+ cacheReadTokens: usage.cache_read_input_tokens ?? void 0,
143
+ cacheCreationTokens: usage.cache_creation_input_tokens ?? void 0,
144
+ costUsd: typeof event.total_cost_usd === "number" ? event.total_cost_usd : void 0
332
145
  });
146
+ }
147
+ this.pushEvent({ type: "message_stop", finishReason: "stop" });
148
+ return;
149
+ }
150
+ if (event.type === "assistant") {
151
+ if (event.error === "authentication_failed") {
152
+ this.pushEvent({ type: "message_stop", finishReason: "error" });
153
+ }
333
154
  }
334
- pushEvent(event) {
335
- if (!this.activeTurn)
336
- return;
337
- this.activeTurn.events.push(event);
338
- this.activeTurn.resolve();
155
+ }
156
+ };
157
+
158
+ // src/agent/cli-session.ts
159
+ var DEFAULT_IDLE_TIMEOUT_MS = 10 * 60 * 1e3;
160
+ var CORE_VERSION = "unknown";
161
+ try {
162
+ const pkgPath = resolve(dirname(fileURLToPath(import.meta.url)), "../../package.json");
163
+ CORE_VERSION = JSON.parse(readFileSync(pkgPath, "utf-8")).version;
164
+ } catch {
165
+ }
166
+ var CliSession = class _CliSession {
167
+ sessionId = randomUUID();
168
+ child = null;
169
+ alive = false;
170
+ stderrBuf = "";
171
+ stdoutBuffer = "";
172
+ activeTurn = null;
173
+ idleTimer = null;
174
+ cleanupFn = null;
175
+ parser;
176
+ log;
177
+ spawnFn;
178
+ idleTimeout;
179
+ opts;
180
+ constructor(options) {
181
+ this.opts = options;
182
+ this.log = options.logger;
183
+ this.spawnFn = options.spawnFn ?? ((cmd, args, opts) => nodeSpawn(cmd, args, { ...opts, stdio: opts.stdio }));
184
+ this.idleTimeout = options.idleTimeout ?? DEFAULT_IDLE_TIMEOUT_MS;
185
+ this.parser = new StreamJsonParser((event) => this.pushEvent(event));
186
+ }
187
+ get ready() {
188
+ return this.alive;
189
+ }
190
+ /**
191
+ * Check if this session was created with equivalent CLI-relevant options.
192
+ * Used by the session cache to detect option drift.
193
+ */
194
+ matchesOptions(other) {
195
+ return _CliSession.fingerprint(this.opts) === _CliSession.fingerprint(other);
196
+ }
197
+ /**
198
+ * Inject a mock child process for testing.
199
+ * @internal test only
200
+ */
201
+ _injectForTest(child) {
202
+ this.child = child;
203
+ this.alive = true;
204
+ this.stderrBuf = "";
205
+ this.stdoutBuffer = "";
206
+ child.stdout.on("data", (chunk) => {
207
+ this.onStdoutData(chunk.toString());
208
+ });
209
+ child.on("exit", () => this.markDead());
210
+ child.on("error", () => this.markDead());
211
+ }
212
+ /**
213
+ * Spawn the CLI process. Must be called before send().
214
+ */
215
+ async spawn() {
216
+ if (this.child && this.alive) {
217
+ this.child.kill("SIGTERM");
339
218
  }
340
- completeTurn() {
341
- if (!this.activeTurn)
342
- return;
343
- this.activeTurn.done = true;
344
- this.activeTurn.resolve();
219
+ const { binPath, cwd, env, model, mcpConfigPath } = this.opts;
220
+ const args = [
221
+ "-p",
222
+ "--input-format",
223
+ "stream-json",
224
+ "--output-format",
225
+ "stream-json",
226
+ "--include-partial-messages",
227
+ "--verbose",
228
+ "--dangerously-skip-permissions",
229
+ "--permission-mode",
230
+ "bypassPermissions",
231
+ "--setting-sources",
232
+ "user,local",
233
+ "--model",
234
+ model
235
+ ];
236
+ if (mcpConfigPath) {
237
+ args.push("--mcp-config", mcpConfigPath);
345
238
  }
346
- markDead() {
347
- // Phase 1.5: Clear idle timer to prevent dangling timer on process crash
348
- this.clearIdleTimer();
349
- this.alive = false;
350
- this.cleanupFn?.();
351
- this.cleanupFn = null;
352
- if (this.activeTurn && !this.activeTurn.done) {
353
- // KNOWN ISSUE: On long orchestrator runs (many MCP tool calls), the CLI
354
- // process can die before emitting the `result` event. This means:
355
- // - costUsd from total_cost_usd is lost (stays 0)
356
- // - cacheReadTokens / cacheCreationTokens are lost
357
- // - The turn ends via markDead instead of completeTurn
358
- // When this happens, consumers should fall back to cost-update events
359
- // from the global usage callback for accurate cost tracking.
360
- // See: project_costUsd_bench_issue.md in memory for full investigation.
361
- const eventCount = this.activeTurn.events.length;
362
- const hasResult = this.activeTurn.events.some((e) => e.type === 'usage' && e.costUsd != null);
363
- if (!hasResult) {
364
- const lastStderr = this.stderrBuf.slice(-500);
365
- this.log?.warn('CLI session died before result event — costUsd will be 0', {
366
- sessionId: this.sessionId,
367
- eventsInTurn: eventCount,
368
- lastStderr: lastStderr || '(empty)',
369
- });
370
- // Always log to stderr so it's visible in bench output
371
- process.stderr.write(`\x1b[33m ⚠ CLI session died before result event (${eventCount} events buffered). costUsd will be 0. stderr: ${lastStderr.slice(0, 200)}\x1b[0m\n`);
372
- }
373
- if (!this.activeTurn.events.some((e) => e.type === 'message_stop')) {
374
- this.activeTurn.events.push({ type: 'message_stop', finishReason: 'error' });
375
- }
376
- this.activeTurn.done = true;
377
- this.activeTurn.resolve();
378
- }
239
+ if (this.opts.strictMcpConfig || mcpConfigPath) {
240
+ args.push("--strict-mcp-config");
379
241
  }
380
- onStdoutData(data) {
381
- this.stdoutBuffer += data;
382
- const lines = this.stdoutBuffer.split('\n');
383
- this.stdoutBuffer = lines.pop() || '';
384
- for (const line of lines) {
385
- this.parser.feed(line);
386
- }
242
+ const { disallowedTools, allowedTools, systemPrompt, appendSystemPrompt } = this.opts;
243
+ if (disallowedTools && disallowedTools.length > 0) {
244
+ args.push("--disallowed-tools", disallowedTools.join(","));
387
245
  }
388
- resetIdleTimer() {
389
- this.clearIdleTimer();
390
- this.idleTimer = setTimeout(() => {
391
- this.log?.info('CLI session idle timeout, killing', { sessionId: this.sessionId });
392
- this.kill();
393
- }, this.idleTimeout);
394
- // Phase 1.5: unref so idle timer doesn't keep Node alive on shutdown
395
- this.idleTimer.unref();
246
+ if (allowedTools !== void 0) {
247
+ args.push("--allowed-tools", allowedTools.join(","));
396
248
  }
397
- clearIdleTimer() {
398
- if (this.idleTimer) {
399
- clearTimeout(this.idleTimer);
400
- this.idleTimer = null;
401
- }
249
+ if (systemPrompt) {
250
+ args.push("--system-prompt", systemPrompt);
402
251
  }
403
- }
404
- // ---------------------------------------------------------------------------
405
- // Session manager — cache keyed by identifier
406
- // ---------------------------------------------------------------------------
407
- const sessions = new Map();
408
- /**
409
- * Get an existing session or create a new one.
410
- * Phase 1.4: Validates that cached sessions have matching CLI-relevant options.
411
- * If options changed on the same key, the old session is killed and recreated.
412
- *
413
- * SAFETY: Refuses to kill a session with an active turn. This prevents data
414
- * loss when multiple providers share the same session key (e.g., orchestrator
415
- * and worker both using projectDir as key). If the fingerprint doesn't match
416
- * but the session has an active turn, we return the existing session and log
417
- * a warning — better to reuse a session with slightly different options than
418
- * to kill an active conversation and lose costUsd/result data.
419
- */
420
- export function getOrCreateCliSession(key, options) {
421
- const existing = sessions.get(key);
422
- if (existing && existing.ready) {
423
- // Phase 1.4: Check if CLI-relevant options match
424
- if (existing.matchesOptions(options)) {
425
- return existing;
252
+ if (appendSystemPrompt) {
253
+ args.push("--append-system-prompt", appendSystemPrompt);
254
+ }
255
+ const spawnResult = this.spawnFn(
256
+ binPath,
257
+ args,
258
+ { cwd, stdio: ["pipe", "pipe", "pipe"], env: env ?? process.env }
259
+ );
260
+ const child = "child" in spawnResult ? spawnResult.child : spawnResult;
261
+ const cleanup = "cleanup" in spawnResult ? spawnResult.cleanup : void 0;
262
+ this.child = child;
263
+ this.cleanupFn = cleanup ?? null;
264
+ this.alive = true;
265
+ this.stderrBuf = "";
266
+ this.stdoutBuffer = "";
267
+ child.stderr.on("data", (chunk) => {
268
+ this.stderrBuf += chunk.toString();
269
+ });
270
+ child.stdout.on("data", (chunk) => {
271
+ this.onStdoutData(chunk.toString());
272
+ });
273
+ child.on("exit", (code) => {
274
+ this.log?.info("CLI session process exited", { sessionId: this.sessionId, exitCode: code });
275
+ this.markDead();
276
+ });
277
+ child.on("error", (err) => {
278
+ this.log?.error("CLI session process error", { sessionId: this.sessionId, err });
279
+ this.markDead();
280
+ });
281
+ this.resetIdleTimer();
282
+ this.log?.info("CLI session spawned", { sessionId: this.sessionId, cwd, model });
283
+ }
284
+ /**
285
+ * Send a user message and stream back events.
286
+ * Auto-respawns if the process has died.
287
+ *
288
+ * Phase 1.3: Concurrent send() guard that throws if a previous turn is still active.
289
+ * The activeTurn lock is claimed synchronously BEFORE any async work (spawn)
290
+ * to prevent TOCTOU races.
291
+ */
292
+ async *send(userMessage, systemPromptPrefix) {
293
+ if (this.activeTurn) {
294
+ throw new Error("CliSession: concurrent send() calls are not supported. Previous turn still active.");
295
+ }
296
+ const turn = { resolve: () => {
297
+ }, events: [], done: false };
298
+ this.activeTurn = turn;
299
+ try {
300
+ if (!this.alive) {
301
+ this.log?.info("CLI session dead, respawning", { sessionId: this.sessionId });
302
+ await this.spawn();
303
+ }
304
+ this.resetIdleTimer();
305
+ this.parser.reset();
306
+ const content = systemPromptPrefix ? `${systemPromptPrefix}
307
+
308
+ ${userMessage}` : userMessage;
309
+ const ndjsonMessage = JSON.stringify({
310
+ type: "user",
311
+ message: { role: "user", content },
312
+ parent_tool_use_id: null
313
+ }) + "\n";
314
+ let sawResult = false;
315
+ const originalPush = this.pushEvent.bind(this);
316
+ this.parser = new StreamJsonParser((event) => {
317
+ if (event.type === "message_stop" && !sawResult && event.finishReason !== "error") {
318
+ return;
319
+ }
320
+ originalPush(event);
321
+ });
322
+ let sawTerminal = false;
323
+ const baseFeed = this.parser.feed.bind(this.parser);
324
+ this.parser.feed = (line) => {
325
+ try {
326
+ let parsed = JSON.parse(line);
327
+ if (parsed.type === "stream_event" && parsed.event) parsed = parsed.event;
328
+ if (parsed.type === "result") {
329
+ sawResult = true;
330
+ sawTerminal = true;
331
+ }
332
+ if (parsed.type === "assistant" && parsed.error === "authentication_failed") {
333
+ sawTerminal = true;
334
+ }
335
+ } catch {
336
+ }
337
+ baseFeed(line);
338
+ if (sawTerminal) {
339
+ this.completeTurn();
340
+ }
341
+ };
342
+ try {
343
+ this.child.stdin.write(ndjsonMessage, (err) => {
344
+ if (err) {
345
+ this.log?.error("stdin write error", { sessionId: this.sessionId, err });
346
+ this.markDead();
347
+ turn.done = true;
348
+ turn.resolve();
349
+ }
350
+ });
351
+ } catch (err) {
352
+ this.log?.error("stdin write exception", { sessionId: this.sessionId, err });
353
+ this.markDead();
354
+ throw new Error("CLI session stdin write failed", { cause: err });
355
+ }
356
+ while (!turn.done || turn.events.length > 0) {
357
+ if (turn.events.length > 0) {
358
+ yield turn.events.shift();
359
+ } else {
360
+ await new Promise((r) => {
361
+ turn.resolve = r;
362
+ setTimeout(r, 50);
363
+ });
426
364
  }
427
- // Options changed — but REFUSE to kill if there's an active turn
428
- if (existing.hasActiveTurn) {
429
- process.stderr.write(`\x1b[33m ⚠ getOrCreateCliSession: fingerprint mismatch on key "${key}" but session has active turn — reusing existing session to prevent data loss\x1b[0m\n`);
430
- return existing;
365
+ }
366
+ while (turn.events.length > 0) {
367
+ yield turn.events.shift();
368
+ }
369
+ } finally {
370
+ if (!turn.done) {
371
+ process.stderr.write(`\x1B[33m CliSession: generator abandoned before turn.done (events=${turn.events.length}). Result event will be lost.\x1B[0m
372
+ `);
373
+ }
374
+ this.activeTurn = null;
375
+ this.resetIdleTimer();
376
+ }
377
+ }
378
+ /** Whether a send() call is currently active. */
379
+ get hasActiveTurn() {
380
+ return this.activeTurn !== null && !this.activeTurn.done;
381
+ }
382
+ /**
383
+ * Kill the CLI process.
384
+ */
385
+ kill() {
386
+ if (this.hasActiveTurn) {
387
+ process.stderr.write(`\x1B[31m \u2717 CliSession.kill() called with active turn, so data loss will occur (session=${this.sessionId.slice(0, 8)})\x1B[0m
388
+ `);
389
+ this._onSessionKilled?.({ sessionId: this.sessionId, hadActiveTurn: true, eventsInTurn: this.activeTurn.events.length });
390
+ }
391
+ this.clearIdleTimer();
392
+ if (this.child && this.alive) {
393
+ this.log?.info("Killing CLI session", { sessionId: this.sessionId });
394
+ this.child.kill("SIGTERM");
395
+ const sigkillTimer = setTimeout(() => {
396
+ if (this.child && !this.child.killed) {
397
+ this.child.kill("SIGKILL");
431
398
  }
432
- // No active turn — safe to kill and recreate
433
- process.stderr.write(`\x1b[2m [session-cache] killing session for key "${key}" — fingerprint changed\x1b[0m\n`);
434
- existing.kill();
435
- sessions.delete(key);
399
+ }, 2e3);
400
+ sigkillTimer.unref();
401
+ }
402
+ this.markDead();
403
+ }
404
+ /** Callback for session kill events — wire to audit logging. */
405
+ _onSessionKilled;
406
+ /** Register a callback that fires when this session is killed. */
407
+ set onSessionKilled(cb) {
408
+ this._onSessionKilled = cb;
409
+ }
410
+ // ---------------------------------------------------------------------------
411
+ // Private
412
+ // ---------------------------------------------------------------------------
413
+ /**
414
+ * Compute a fingerprint of CLI-relevant options for cache comparison.
415
+ * Field order is significant for JSON.stringify comparison.
416
+ * Add new CLI-relevant fields here when they're added to CliSessionOptions.
417
+ *
418
+ * NOTE: mcpConfigPath is EXCLUDED. It's an ephemeral temp path that changes
419
+ * on every createMcpBridge() call. Including it causes fingerprint mismatches
420
+ * that kill active sessions mid-turn when a second provider is created for
421
+ * the same project (e.g., orchestrator + worker sharing the same projectDir).
422
+ * The MCP bridge is swapped per-request via setHandlers() — the config path
423
+ * is only needed at spawn time, not for session identity.
424
+ */
425
+ static fingerprint(options) {
426
+ return JSON.stringify({
427
+ _coreVersion: CORE_VERSION,
428
+ // auto-invalidate cache on core update
429
+ model: options.model,
430
+ // mcpConfigPath deliberately excluded — see comment above
431
+ strictMcpConfig: options.strictMcpConfig,
432
+ disallowedTools: options.disallowedTools,
433
+ allowedTools: options.allowedTools,
434
+ systemPrompt: options.systemPrompt,
435
+ appendSystemPrompt: options.appendSystemPrompt
436
+ });
437
+ }
438
+ pushEvent(event) {
439
+ if (!this.activeTurn) return;
440
+ this.activeTurn.events.push(event);
441
+ this.activeTurn.resolve();
442
+ }
443
+ completeTurn() {
444
+ if (!this.activeTurn) return;
445
+ this.activeTurn.done = true;
446
+ this.activeTurn.resolve();
447
+ }
448
+ markDead() {
449
+ this.clearIdleTimer();
450
+ this.alive = false;
451
+ this.cleanupFn?.();
452
+ this.cleanupFn = null;
453
+ if (this.activeTurn && !this.activeTurn.done) {
454
+ const eventCount = this.activeTurn.events.length;
455
+ const hasResult = this.activeTurn.events.some((e) => e.type === "usage" && e.costUsd != null);
456
+ if (!hasResult) {
457
+ const lastStderr = this.stderrBuf.slice(-500);
458
+ this.log?.warn("CLI session died before result event, so costUsd will be 0", {
459
+ sessionId: this.sessionId,
460
+ eventsInTurn: eventCount,
461
+ lastStderr: lastStderr || "(empty)"
462
+ });
463
+ process.stderr.write(`\x1B[33m CLI session died before result event (${eventCount} events buffered). costUsd will be 0. stderr: ${lastStderr.slice(0, 200)}\x1B[0m
464
+ `);
465
+ }
466
+ if (!this.activeTurn.events.some((e) => e.type === "message_stop")) {
467
+ this.activeTurn.events.push({ type: "message_stop", finishReason: "error" });
468
+ }
469
+ this.activeTurn.done = true;
470
+ this.activeTurn.resolve();
436
471
  }
437
- else if (existing) {
438
- // Kill stale (dead) session
439
- existing.kill();
440
- sessions.delete(key);
472
+ }
473
+ onStdoutData(data) {
474
+ this.stdoutBuffer += data;
475
+ const lines = this.stdoutBuffer.split("\n");
476
+ this.stdoutBuffer = lines.pop() || "";
477
+ for (const line of lines) {
478
+ this.parser.feed(line);
441
479
  }
442
- const session = new CliSession(options);
443
- sessions.set(key, session);
444
- return session;
445
- }
446
- /**
447
- * Kill a specific session.
448
- */
449
- export function killCliSession(key) {
450
- const session = sessions.get(key);
451
- if (session) {
452
- session.kill();
453
- sessions.delete(key);
480
+ }
481
+ resetIdleTimer() {
482
+ this.clearIdleTimer();
483
+ this.idleTimer = setTimeout(() => {
484
+ this.log?.info("CLI session idle timeout, killing", { sessionId: this.sessionId });
485
+ this.kill();
486
+ }, this.idleTimeout);
487
+ this.idleTimer.unref();
488
+ }
489
+ clearIdleTimer() {
490
+ if (this.idleTimer) {
491
+ clearTimeout(this.idleTimer);
492
+ this.idleTimer = null;
454
493
  }
455
- }
456
- /**
457
- * Kill all CLI sessions (for shutdown).
458
- */
459
- export function killAllCliSessions() {
460
- for (const [, session] of sessions) {
461
- session.kill();
494
+ }
495
+ };
496
+ var sessions = /* @__PURE__ */ new Map();
497
+ function getOrCreateCliSession(key, options) {
498
+ const existing = sessions.get(key);
499
+ if (existing && existing.ready) {
500
+ if (existing.matchesOptions(options)) {
501
+ return existing;
462
502
  }
463
- sessions.clear();
503
+ if (existing.hasActiveTurn) {
504
+ process.stderr.write(`\x1B[33m getOrCreateCliSession: fingerprint mismatch on key "${key}" but session has active turn. Reusing existing session to prevent data loss\x1B[0m
505
+ `);
506
+ return existing;
507
+ }
508
+ process.stderr.write(`\x1B[2m [session-cache] killing session for key "${key}", fingerprint changed\x1B[0m
509
+ `);
510
+ existing.kill();
511
+ sessions.delete(key);
512
+ } else if (existing) {
513
+ existing.kill();
514
+ sessions.delete(key);
515
+ }
516
+ const session = new CliSession(options);
517
+ sessions.set(key, session);
518
+ return session;
519
+ }
520
+ function killCliSession(key) {
521
+ const session = sessions.get(key);
522
+ if (session) {
523
+ session.kill();
524
+ sessions.delete(key);
525
+ }
526
+ }
527
+ function killAllCliSessions() {
528
+ for (const [, session] of sessions) {
529
+ session.kill();
530
+ }
531
+ sessions.clear();
464
532
  }
465
- //# sourceMappingURL=cli-session.js.map
533
+ export {
534
+ CliSession,
535
+ getOrCreateCliSession,
536
+ killAllCliSessions,
537
+ killCliSession
538
+ };