@pentoshi/clai 3.5.1 → 3.7.2

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 (369) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/compaction-summary.d.ts +17 -0
  3. package/dist/agent/compaction-summary.js +64 -0
  4. package/dist/agent/compaction-summary.js.map +1 -0
  5. package/dist/agent/confirm-port.d.ts +3 -1
  6. package/dist/agent/confirm-port.js +5 -1
  7. package/dist/agent/confirm-port.js.map +1 -1
  8. package/dist/agent/context-manager.js +53 -24
  9. package/dist/agent/context-manager.js.map +1 -1
  10. package/dist/agent/events.d.ts +6 -0
  11. package/dist/agent/evidence-governor.d.ts +37 -0
  12. package/dist/agent/evidence-governor.js +70 -0
  13. package/dist/agent/evidence-governor.js.map +1 -0
  14. package/dist/agent/loop-guard.d.ts +29 -9
  15. package/dist/agent/loop-guard.js +117 -26
  16. package/dist/agent/loop-guard.js.map +1 -1
  17. package/dist/agent/must-continue.d.ts +56 -0
  18. package/dist/agent/must-continue.js +240 -0
  19. package/dist/agent/must-continue.js.map +1 -0
  20. package/dist/agent/outcomes.d.ts +101 -0
  21. package/dist/agent/outcomes.js +359 -0
  22. package/dist/agent/outcomes.js.map +1 -0
  23. package/dist/agent/plan-decision.d.ts +33 -0
  24. package/dist/agent/plan-decision.js +104 -0
  25. package/dist/agent/plan-decision.js.map +1 -0
  26. package/dist/agent/plan-tool.d.ts +34 -0
  27. package/dist/agent/plan-tool.js +594 -76
  28. package/dist/agent/plan-tool.js.map +1 -1
  29. package/dist/agent/project-root.d.ts +33 -0
  30. package/dist/agent/project-root.js +161 -0
  31. package/dist/agent/project-root.js.map +1 -0
  32. package/dist/agent/prompt-composer.d.ts +21 -0
  33. package/dist/agent/prompt-composer.js +46 -0
  34. package/dist/agent/prompt-composer.js.map +1 -0
  35. package/dist/agent/runner.d.ts +11 -1
  36. package/dist/agent/runner.js +1915 -886
  37. package/dist/agent/runner.js.map +1 -1
  38. package/dist/agent/scope-context.d.ts +3 -0
  39. package/dist/agent/scope-context.js +24 -0
  40. package/dist/agent/scope-context.js.map +1 -0
  41. package/dist/agent/scratch-write.d.ts +4 -0
  42. package/dist/agent/scratch-write.js +54 -0
  43. package/dist/agent/scratch-write.js.map +1 -0
  44. package/dist/agent/session-policy.d.ts +7 -0
  45. package/dist/agent/session-policy.js +61 -0
  46. package/dist/agent/session-policy.js.map +1 -1
  47. package/dist/agent/session-state.d.ts +41 -0
  48. package/dist/agent/session-state.js +107 -0
  49. package/dist/agent/session-state.js.map +1 -0
  50. package/dist/agent/step-budget.d.ts +14 -0
  51. package/dist/agent/step-budget.js +26 -0
  52. package/dist/agent/step-budget.js.map +1 -0
  53. package/dist/agent/task-analyzer.d.ts +12 -3
  54. package/dist/agent/task-analyzer.js +263 -23
  55. package/dist/agent/task-analyzer.js.map +1 -1
  56. package/dist/agent/task-evidence.d.ts +173 -0
  57. package/dist/agent/task-evidence.js +802 -0
  58. package/dist/agent/task-evidence.js.map +1 -0
  59. package/dist/agent/task-plan.d.ts +57 -0
  60. package/dist/agent/task-plan.js +147 -1
  61. package/dist/agent/task-plan.js.map +1 -1
  62. package/dist/agent/tool-call-parser.d.ts +19 -11
  63. package/dist/agent/tool-call-parser.js +96 -71
  64. package/dist/agent/tool-call-parser.js.map +1 -1
  65. package/dist/agent/tool-history.d.ts +34 -0
  66. package/dist/agent/tool-history.js +200 -0
  67. package/dist/agent/tool-history.js.map +1 -0
  68. package/dist/agent/tool-output-formatting.d.ts +13 -1
  69. package/dist/agent/tool-output-formatting.js +75 -22
  70. package/dist/agent/tool-output-formatting.js.map +1 -1
  71. package/dist/agent/turn-outcome.d.ts +11 -0
  72. package/dist/agent/turn-outcome.js +17 -0
  73. package/dist/agent/turn-outcome.js.map +1 -0
  74. package/dist/agent/turn-state.d.ts +11 -0
  75. package/dist/agent/turn-state.js +28 -0
  76. package/dist/agent/turn-state.js.map +1 -0
  77. package/dist/agent/workspace-orient.d.ts +75 -0
  78. package/dist/agent/workspace-orient.js +509 -0
  79. package/dist/agent/workspace-orient.js.map +1 -0
  80. package/dist/app/adapters/agent-event-adapter.d.ts +2 -13
  81. package/dist/app/adapters/agent-event-adapter.js +63 -25
  82. package/dist/app/adapters/agent-event-adapter.js.map +1 -1
  83. package/dist/app/adapters/current-agent-adapter.d.ts +0 -5
  84. package/dist/app/adapters/current-agent-adapter.js +4 -7
  85. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  86. package/dist/app/adapters/current-jobs-adapter.js +1 -0
  87. package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
  88. package/dist/app/adapters/current-terminal-adapter.d.ts +0 -7
  89. package/dist/app/adapters/current-terminal-adapter.js +0 -7
  90. package/dist/app/adapters/current-terminal-adapter.js.map +1 -1
  91. package/dist/app/adapters/current-updates-adapter.d.ts +0 -5
  92. package/dist/app/adapters/current-updates-adapter.js +0 -5
  93. package/dist/app/adapters/current-updates-adapter.js.map +1 -1
  94. package/dist/app/adapters/in-memory-clipboard-adapter.d.ts +0 -5
  95. package/dist/app/adapters/in-memory-clipboard-adapter.js +0 -5
  96. package/dist/app/adapters/in-memory-clipboard-adapter.js.map +1 -1
  97. package/dist/app/commands/command.d.ts +0 -5
  98. package/dist/app/commands/command.js.map +1 -1
  99. package/dist/app/commands/registry.d.ts +0 -14
  100. package/dist/app/commands/registry.js +0 -20
  101. package/dist/app/commands/registry.js.map +1 -1
  102. package/dist/app/controllers/disposable.d.ts +0 -5
  103. package/dist/app/controllers/disposable.js +0 -5
  104. package/dist/app/controllers/disposable.js.map +1 -1
  105. package/dist/app/controllers/job-controller.d.ts +1 -5
  106. package/dist/app/controllers/job-controller.js +0 -4
  107. package/dist/app/controllers/job-controller.js.map +1 -1
  108. package/dist/app/controllers/plan-controller.d.ts +5 -8
  109. package/dist/app/controllers/plan-controller.js +30 -12
  110. package/dist/app/controllers/plan-controller.js.map +1 -1
  111. package/dist/app/controllers/session-controller.d.ts +17 -32
  112. package/dist/app/controllers/session-controller.js +60 -35
  113. package/dist/app/controllers/session-controller.js.map +1 -1
  114. package/dist/app/controllers/turn-controller.d.ts +2 -6
  115. package/dist/app/controllers/turn-controller.js +8 -8
  116. package/dist/app/controllers/turn-controller.js.map +1 -1
  117. package/dist/app/events/app-event.d.ts +4 -7
  118. package/dist/app/events/app-event.js +0 -6
  119. package/dist/app/events/app-event.js.map +1 -1
  120. package/dist/app/events/event-buffer.d.ts +6 -17
  121. package/dist/app/events/event-buffer.js +27 -24
  122. package/dist/app/events/event-buffer.js.map +1 -1
  123. package/dist/app/events/sequencer.d.ts +0 -9
  124. package/dist/app/events/sequencer.js +0 -4
  125. package/dist/app/events/sequencer.js.map +1 -1
  126. package/dist/app/ports/agent-port.d.ts +13 -3
  127. package/dist/app/ports/clipboard-port.d.ts +0 -5
  128. package/dist/app/ports/confirm-port.d.ts +0 -7
  129. package/dist/app/ports/jobs-port.d.ts +2 -5
  130. package/dist/app/ports/persistence-port.d.ts +0 -4
  131. package/dist/app/ports/secret-port.d.ts +0 -5
  132. package/dist/app/ports/terminal-port.d.ts +0 -6
  133. package/dist/app/ports/updates-port.d.ts +0 -4
  134. package/dist/attachments/service.d.ts +29 -0
  135. package/dist/attachments/service.js +47 -0
  136. package/dist/attachments/service.js.map +1 -0
  137. package/dist/commands/doctor.js +3 -0
  138. package/dist/commands/doctor.js.map +1 -1
  139. package/dist/commands/providers.js +0 -3
  140. package/dist/commands/providers.js.map +1 -1
  141. package/dist/commands/search-providers.d.ts +0 -33
  142. package/dist/commands/search-providers.js +0 -33
  143. package/dist/commands/search-providers.js.map +1 -1
  144. package/dist/commands/update.js +1 -9
  145. package/dist/commands/update.js.map +1 -1
  146. package/dist/index.js +22 -42
  147. package/dist/index.js.map +1 -1
  148. package/dist/llm/adapters/anthropic-tools.d.ts +99 -0
  149. package/dist/llm/adapters/anthropic-tools.js +225 -0
  150. package/dist/llm/adapters/anthropic-tools.js.map +1 -0
  151. package/dist/llm/adapters/gemini-tools.d.ts +54 -0
  152. package/dist/llm/adapters/gemini-tools.js +139 -0
  153. package/dist/llm/adapters/gemini-tools.js.map +1 -0
  154. package/dist/llm/adapters/ollama-tools.d.ts +18 -0
  155. package/dist/llm/adapters/ollama-tools.js +58 -0
  156. package/dist/llm/adapters/ollama-tools.js.map +1 -0
  157. package/dist/llm/adapters/openai-tools.d.ts +39 -0
  158. package/dist/llm/adapters/openai-tools.js +71 -0
  159. package/dist/llm/adapters/openai-tools.js.map +1 -0
  160. package/dist/llm/agentrouter.js +23 -4
  161. package/dist/llm/agentrouter.js.map +1 -1
  162. package/dist/llm/anthropic.js +93 -92
  163. package/dist/llm/anthropic.js.map +1 -1
  164. package/dist/llm/aws-mantle.js +93 -56
  165. package/dist/llm/aws-mantle.js.map +1 -1
  166. package/dist/llm/bynara.js +23 -4
  167. package/dist/llm/bynara.js.map +1 -1
  168. package/dist/llm/capabilities.d.ts +13 -6
  169. package/dist/llm/capabilities.js +113 -13
  170. package/dist/llm/capabilities.js.map +1 -1
  171. package/dist/llm/gemini.js +63 -48
  172. package/dist/llm/gemini.js.map +1 -1
  173. package/dist/llm/groq.js +23 -10
  174. package/dist/llm/groq.js.map +1 -1
  175. package/dist/llm/http.d.ts +22 -34
  176. package/dist/llm/http.js +97 -69
  177. package/dist/llm/http.js.map +1 -1
  178. package/dist/llm/kimchi.js +23 -4
  179. package/dist/llm/kimchi.js.map +1 -1
  180. package/dist/llm/nvidia.js +23 -4
  181. package/dist/llm/nvidia.js.map +1 -1
  182. package/dist/llm/ollama.js +49 -31
  183. package/dist/llm/ollama.js.map +1 -1
  184. package/dist/llm/openai.js +23 -4
  185. package/dist/llm/openai.js.map +1 -1
  186. package/dist/llm/openrouter.js +23 -4
  187. package/dist/llm/openrouter.js.map +1 -1
  188. package/dist/llm/qwen-cloud.js +23 -4
  189. package/dist/llm/qwen-cloud.js.map +1 -1
  190. package/dist/llm/router.d.ts +0 -6
  191. package/dist/llm/router.js +48 -21
  192. package/dist/llm/router.js.map +1 -1
  193. package/dist/llm/tool-protocol.d.ts +67 -0
  194. package/dist/llm/tool-protocol.js +278 -0
  195. package/dist/llm/tool-protocol.js.map +1 -0
  196. package/dist/modes/agent.d.ts +2 -1
  197. package/dist/modes/agent.js +4 -2
  198. package/dist/modes/agent.js.map +1 -1
  199. package/dist/modes/ask.d.ts +0 -18
  200. package/dist/modes/ask.js +71 -66
  201. package/dist/modes/ask.js.map +1 -1
  202. package/dist/os/cwd.d.ts +0 -21
  203. package/dist/os/cwd.js +0 -24
  204. package/dist/os/cwd.js.map +1 -1
  205. package/dist/os/pkgmgr.js +0 -6
  206. package/dist/os/pkgmgr.js.map +1 -1
  207. package/dist/prompts/index.d.ts +17 -21
  208. package/dist/prompts/index.js +131 -259
  209. package/dist/prompts/index.js.map +1 -1
  210. package/dist/prompts/system.agent.md +242 -0
  211. package/dist/prompts/system.ask.md +56 -0
  212. package/dist/repl/prompt-line.js +0 -36
  213. package/dist/repl/prompt-line.js.map +1 -1
  214. package/dist/repl/slash-commands.d.ts +0 -9
  215. package/dist/repl/slash-commands.js +2 -23
  216. package/dist/repl/slash-commands.js.map +1 -1
  217. package/dist/repl.d.ts +5 -0
  218. package/dist/repl.js +176 -55
  219. package/dist/repl.js.map +1 -1
  220. package/dist/safety/classifier.js +17 -9
  221. package/dist/safety/classifier.js.map +1 -1
  222. package/dist/safety/engagement-policy.d.ts +46 -0
  223. package/dist/safety/engagement-policy.js +198 -0
  224. package/dist/safety/engagement-policy.js.map +1 -0
  225. package/dist/store/config.d.ts +7 -0
  226. package/dist/store/config.js +1 -0
  227. package/dist/store/config.js.map +1 -1
  228. package/dist/store/engagement.d.ts +115 -0
  229. package/dist/store/engagement.js +278 -0
  230. package/dist/store/engagement.js.map +1 -0
  231. package/dist/store/logs.d.ts +5 -0
  232. package/dist/store/logs.js +52 -2
  233. package/dist/store/logs.js.map +1 -1
  234. package/dist/store/plan.d.ts +59 -5
  235. package/dist/store/plan.js +182 -8
  236. package/dist/store/plan.js.map +1 -1
  237. package/dist/store/scope.d.ts +4 -1
  238. package/dist/store/scope.js +2 -2
  239. package/dist/store/scope.js.map +1 -1
  240. package/dist/tools/capabilities.d.ts +2 -0
  241. package/dist/tools/capabilities.js +101 -6
  242. package/dist/tools/capabilities.js.map +1 -1
  243. package/dist/tools/command-intent.d.ts +1 -0
  244. package/dist/tools/command-intent.js +31 -0
  245. package/dist/tools/command-intent.js.map +1 -1
  246. package/dist/tools/definitions.d.ts +20 -0
  247. package/dist/tools/definitions.js +578 -0
  248. package/dist/tools/definitions.js.map +1 -0
  249. package/dist/tools/elevated-shell.d.ts +60 -0
  250. package/dist/tools/elevated-shell.js +233 -0
  251. package/dist/tools/elevated-shell.js.map +1 -0
  252. package/dist/tools/file-diff.d.ts +125 -0
  253. package/dist/tools/file-diff.js +495 -0
  254. package/dist/tools/file-diff.js.map +1 -0
  255. package/dist/tools/fs.d.ts +11 -13
  256. package/dist/tools/fs.js +280 -80
  257. package/dist/tools/fs.js.map +1 -1
  258. package/dist/tools/http.d.ts +15 -0
  259. package/dist/tools/http.js +202 -61
  260. package/dist/tools/http.js.map +1 -1
  261. package/dist/tools/jobs.d.ts +71 -10
  262. package/dist/tools/jobs.js +403 -124
  263. package/dist/tools/jobs.js.map +1 -1
  264. package/dist/tools/net-ping-sweep.js +69 -16
  265. package/dist/tools/net-ping-sweep.js.map +1 -1
  266. package/dist/tools/nmap-runner.d.ts +19 -7
  267. package/dist/tools/nmap-runner.js +182 -80
  268. package/dist/tools/nmap-runner.js.map +1 -1
  269. package/dist/tools/pentest-workflows.d.ts +8 -0
  270. package/dist/tools/pentest-workflows.js +71 -0
  271. package/dist/tools/pentest-workflows.js.map +1 -0
  272. package/dist/tools/registry.d.ts +9 -0
  273. package/dist/tools/registry.js +272 -63
  274. package/dist/tools/registry.js.map +1 -1
  275. package/dist/tools/shell.d.ts +3 -0
  276. package/dist/tools/shell.js +35 -13
  277. package/dist/tools/shell.js.map +1 -1
  278. package/dist/tools/tool-types.d.ts +11 -0
  279. package/dist/tools/validate.d.ts +11 -0
  280. package/dist/tools/validate.js +53 -0
  281. package/dist/tools/validate.js.map +1 -1
  282. package/dist/tools/web/search.js +48 -4
  283. package/dist/tools/web/search.js.map +1 -1
  284. package/dist/tui-v2/app/App.js +25 -39
  285. package/dist/tui-v2/app/App.js.map +1 -1
  286. package/dist/tui-v2/app/command-handlers.js +20 -1
  287. package/dist/tui-v2/app/command-handlers.js.map +1 -1
  288. package/dist/tui-v2/app/commands/picker-commands.js +3 -0
  289. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  290. package/dist/tui-v2/app/commands/session-commands.js +5 -0
  291. package/dist/tui-v2/app/commands/session-commands.js.map +1 -1
  292. package/dist/tui-v2/app/plan-lifecycle.d.ts +25 -3
  293. package/dist/tui-v2/app/plan-lifecycle.js +87 -24
  294. package/dist/tui-v2/app/plan-lifecycle.js.map +1 -1
  295. package/dist/tui-v2/bootstrap/patch-opentui-text.d.ts +6 -0
  296. package/dist/tui-v2/bootstrap/patch-opentui-text.js +53 -0
  297. package/dist/tui-v2/bootstrap/patch-opentui-text.js.map +1 -0
  298. package/dist/tui-v2/bootstrap/start-tui-v2.js +7 -0
  299. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  300. package/dist/tui-v2/components/jobs/jobs-panel.js +23 -14
  301. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  302. package/dist/tui-v2/components/modal/confirm-modal.d.ts +1 -1
  303. package/dist/tui-v2/components/modal/confirm-modal.js +18 -7
  304. package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
  305. package/dist/tui-v2/components/overlay/overlay-host.js +1 -1
  306. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  307. package/dist/tui-v2/components/pager/pager.d.ts +6 -0
  308. package/dist/tui-v2/components/pager/pager.js +313 -67
  309. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  310. package/dist/tui-v2/components/status/status-line.d.ts +9 -0
  311. package/dist/tui-v2/components/status/status-line.js +17 -3
  312. package/dist/tui-v2/components/status/status-line.js.map +1 -1
  313. package/dist/tui-v2/components/transcript/assistant-message.js +1 -1
  314. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  315. package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
  316. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  317. package/dist/tui-v2/components/transcript/tool-card.d.ts +9 -1
  318. package/dist/tui-v2/components/transcript/tool-card.js +115 -10
  319. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  320. package/dist/tui-v2/components/transcript/transcript-row.js +2 -2
  321. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  322. package/dist/tui-v2/composer/composer-editor.js +16 -0
  323. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  324. package/dist/tui-v2/controllers/overlay-controller.d.ts +16 -2
  325. package/dist/tui-v2/controllers/overlay-controller.js +92 -12
  326. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
  327. package/dist/tui-v2/rendering/artifact-pager-source.d.ts +19 -0
  328. package/dist/tui-v2/rendering/artifact-pager-source.js +103 -0
  329. package/dist/tui-v2/rendering/artifact-pager-source.js.map +1 -0
  330. package/dist/tui-v2/rendering/file-diff-view.d.ts +63 -0
  331. package/dist/tui-v2/rendering/file-diff-view.js +263 -0
  332. package/dist/tui-v2/rendering/file-diff-view.js.map +1 -0
  333. package/dist/tui-v2/rendering/open-tool-output.d.ts +9 -1
  334. package/dist/tui-v2/rendering/open-tool-output.js +65 -12
  335. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
  336. package/dist/tui-v2/rendering/pager-chrome.d.ts +12 -0
  337. package/dist/tui-v2/rendering/pager-chrome.js +56 -0
  338. package/dist/tui-v2/rendering/pager-chrome.js.map +1 -0
  339. package/dist/tui-v2/rendering/plan-view.js +1 -1
  340. package/dist/tui-v2/rendering/plan-view.js.map +1 -1
  341. package/dist/tui-v2/rendering/syntax-highlight.d.ts +37 -0
  342. package/dist/tui-v2/rendering/syntax-highlight.js +1303 -0
  343. package/dist/tui-v2/rendering/syntax-highlight.js.map +1 -0
  344. package/dist/tui-v2/rendering/theme.d.ts +28 -0
  345. package/dist/tui-v2/rendering/theme.js +28 -0
  346. package/dist/tui-v2/rendering/theme.js.map +1 -1
  347. package/dist/tui-v2/rendering/tool-presenter.d.ts +11 -1
  348. package/dist/tui-v2/rendering/tool-presenter.js +101 -5
  349. package/dist/tui-v2/rendering/tool-presenter.js.map +1 -1
  350. package/dist/tui-v2/state/transcript-hydrate.js +5 -0
  351. package/dist/tui-v2/state/transcript-hydrate.js.map +1 -1
  352. package/dist/tui-v2/state/transcript-reducer.js +12 -2
  353. package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
  354. package/dist/tui-v2/state/transcript-store.d.ts +7 -0
  355. package/dist/tui-v2/state/transcript-store.js +46 -0
  356. package/dist/tui-v2/state/transcript-store.js.map +1 -1
  357. package/dist/tui-v2/state/transcript-types.d.ts +12 -0
  358. package/dist/tui-v2/state/transcript-types.js +9 -0
  359. package/dist/tui-v2/state/transcript-types.js.map +1 -1
  360. package/dist/types.d.ts +75 -1
  361. package/dist/ui/ansi-box.d.ts +2 -0
  362. package/dist/ui/ansi-box.js +8 -1
  363. package/dist/ui/ansi-box.js.map +1 -1
  364. package/dist/ui/mentions.d.ts +6 -0
  365. package/dist/ui/mentions.js +50 -12
  366. package/dist/ui/mentions.js.map +1 -1
  367. package/dist/ui/plan-pane.js +1 -1
  368. package/dist/ui/plan-pane.js.map +1 -1
  369. package/package.json +16 -11
@@ -0,0 +1,509 @@
1
+ /**
2
+ * Stack-agnostic workspace orientation for build turns.
3
+ *
4
+ * Weak models often skip fs.list/fs.read and plan against an imaginary empty
5
+ * destination — then re-scaffold into a non-empty folder ("Operation cancelled")
6
+ * or write into the agent package. This module snapshots the real cwd /
7
+ * destination / candidate project paths so the model always sees ground truth
8
+ * before plan.create or implement.
9
+ */
10
+ import { existsSync, readdirSync, statSync } from "node:fs";
11
+ import { isAbsolute, join, resolve } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { safeCwd } from "../os/cwd.js";
14
+ /** Filenames that strongly suggest "this directory is already a software project". */
15
+ export const PROJECT_MARKERS = [
16
+ "package.json",
17
+ "package-lock.json",
18
+ "pnpm-lock.yaml",
19
+ "yarn.lock",
20
+ "bun.lockb",
21
+ "Cargo.toml",
22
+ "go.mod",
23
+ "pyproject.toml",
24
+ "requirements.txt",
25
+ "Pipfile",
26
+ "composer.json",
27
+ "Gemfile",
28
+ "pom.xml",
29
+ "build.gradle",
30
+ "build.gradle.kts",
31
+ "CMakeLists.txt",
32
+ "Makefile",
33
+ "mix.exs",
34
+ "pubspec.yaml",
35
+ "Package.swift",
36
+ "deno.json",
37
+ "deno.jsonc",
38
+ "tsconfig.json",
39
+ "index.html",
40
+ "setup.py",
41
+ "manage.py",
42
+ "Cargo.lock",
43
+ ".git",
44
+ ];
45
+ /** Parent folders that are destinations, not project roots (never pin sticky root here). */
46
+ const BARE_PARENT_DIR_RE = /(?:^|[/\\])(?:Desktop|Documents|Downloads|Projects|dev|code|work|repos?|tmp|temp)$/i;
47
+ export function isBareParentDirectory(path) {
48
+ const p = resolve(path.trim()).replace(/[/\\]+$/, "");
49
+ if (/^\/(?:Users|home)\/[^/\\]+$/i.test(p))
50
+ return true; // ~ only
51
+ if (p === homedir() || p === resolve(homedir()))
52
+ return true;
53
+ return BARE_PARENT_DIR_RE.test(p);
54
+ }
55
+ export function detectProjectMarkers(dir) {
56
+ if (!dir || !existsSync(dir))
57
+ return [];
58
+ const found = [];
59
+ for (const name of PROJECT_MARKERS) {
60
+ try {
61
+ if (existsSync(join(dir, name)))
62
+ found.push(name);
63
+ }
64
+ catch {
65
+ /* ignore */
66
+ }
67
+ }
68
+ return found;
69
+ }
70
+ /**
71
+ * Infer package manager from lockfiles / markers present in a project dir.
72
+ * Prefer lockfile over bare package.json.
73
+ */
74
+ export function detectPackageManager(dir) {
75
+ if (!dir || !existsSync(dir))
76
+ return undefined;
77
+ if (existsSync(join(dir, "pnpm-lock.yaml")))
78
+ return "pnpm";
79
+ if (existsSync(join(dir, "yarn.lock")))
80
+ return "yarn";
81
+ if (existsSync(join(dir, "bun.lockb")) ||
82
+ existsSync(join(dir, "bun.lock"))) {
83
+ return "bun";
84
+ }
85
+ if (existsSync(join(dir, "package-lock.json")))
86
+ return "npm";
87
+ if (existsSync(join(dir, "package.json")))
88
+ return "npm";
89
+ if (existsSync(join(dir, "poetry.lock")) || existsSync(join(dir, "pyproject.toml"))) {
90
+ // poetry.lock is definitive; pyproject may be non-poetry — still useful hint
91
+ if (existsSync(join(dir, "poetry.lock")))
92
+ return "poetry";
93
+ }
94
+ if (existsSync(join(dir, "requirements.txt")))
95
+ return "pip";
96
+ if (existsSync(join(dir, "Cargo.toml")))
97
+ return "cargo";
98
+ if (existsSync(join(dir, "go.mod")))
99
+ return "go";
100
+ return undefined;
101
+ }
102
+ export function isExistingProjectDir(dir) {
103
+ if (!dir || !existsSync(dir))
104
+ return false;
105
+ try {
106
+ if (!statSync(dir).isDirectory())
107
+ return false;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ return detectProjectMarkers(dir).length > 0;
113
+ }
114
+ const IGNORED_PROJECT_CHILDREN = new Set([
115
+ "node_modules",
116
+ "dist",
117
+ "build",
118
+ "coverage",
119
+ "target",
120
+ "vendor",
121
+ "__pycache__",
122
+ ]);
123
+ /**
124
+ * Discover marker-bearing immediate children under a user-named destination.
125
+ * This is intentionally bounded and non-recursive: enough to resume an
126
+ * arbitrary existing Desktop project without crawling the user's filesystem.
127
+ */
128
+ export function discoverImmediateProjectRoots(parent, maxEntries = 80) {
129
+ const root = resolve(parent);
130
+ if (!existsSync(root))
131
+ return [];
132
+ let entries;
133
+ try {
134
+ entries = readdirSync(root, { withFileTypes: true });
135
+ }
136
+ catch {
137
+ return [];
138
+ }
139
+ const candidates = entries
140
+ .filter((entry) => {
141
+ const name = entry.name;
142
+ return Boolean(name &&
143
+ !name.startsWith(".") &&
144
+ name !== ".DS_Store" &&
145
+ name !== "Thumbs.db" &&
146
+ !IGNORED_PROJECT_CHILDREN.has(name) &&
147
+ entry.isDirectory());
148
+ })
149
+ .sort((a, b) => a.name.localeCompare(b.name));
150
+ const projects = [];
151
+ for (const entry of candidates) {
152
+ const candidate = join(root, entry.name);
153
+ if (isExistingProjectDir(candidate))
154
+ projects.push(candidate);
155
+ }
156
+ return projects.slice(0, Math.max(0, maxEntries));
157
+ }
158
+ export function snapshotDir(path, maxNames = 36) {
159
+ const resolved = resolve(path);
160
+ if (!existsSync(resolved)) {
161
+ return {
162
+ path: resolved,
163
+ exists: false,
164
+ isDir: false,
165
+ entryCount: 0,
166
+ entries: [],
167
+ markers: [],
168
+ isProject: false,
169
+ emptyOrMissing: true,
170
+ };
171
+ }
172
+ let isDir = false;
173
+ try {
174
+ isDir = statSync(resolved).isDirectory();
175
+ }
176
+ catch {
177
+ return {
178
+ path: resolved,
179
+ exists: true,
180
+ isDir: false,
181
+ entryCount: 0,
182
+ entries: [],
183
+ markers: [],
184
+ isProject: false,
185
+ emptyOrMissing: false,
186
+ };
187
+ }
188
+ if (!isDir) {
189
+ return {
190
+ path: resolved,
191
+ exists: true,
192
+ isDir: false,
193
+ entryCount: 0,
194
+ entries: [],
195
+ markers: [],
196
+ isProject: false,
197
+ emptyOrMissing: false,
198
+ };
199
+ }
200
+ let names = [];
201
+ try {
202
+ names = readdirSync(resolved);
203
+ }
204
+ catch {
205
+ names = [];
206
+ }
207
+ // Ignore pure noise when judging emptiness for scaffolders
208
+ const meaningful = names.filter((n) => n !== ".DS_Store" && n !== "Thumbs.db");
209
+ const markers = detectProjectMarkers(resolved);
210
+ return {
211
+ path: resolved,
212
+ exists: true,
213
+ isDir: true,
214
+ entryCount: names.length,
215
+ entries: names.slice(0, maxNames),
216
+ markers,
217
+ isProject: markers.length > 0,
218
+ emptyOrMissing: meaningful.length === 0,
219
+ };
220
+ }
221
+ function formatSnapshot(label, snap) {
222
+ if (!snap.exists) {
223
+ return `- ${label}: ${snap.path}\n status: DOES NOT EXIST (safe to create as new project path)`;
224
+ }
225
+ if (!snap.isDir) {
226
+ return `- ${label}: ${snap.path}\n status: exists but is a FILE, not a directory`;
227
+ }
228
+ const markerLine = snap.markers.length > 0
229
+ ? `project markers: ${snap.markers.join(", ")}`
230
+ : "project markers: (none detected)";
231
+ const entries = snap.entries.length > 0
232
+ ? snap.entries.join(", ") +
233
+ (snap.entryCount > snap.entries.length
234
+ ? `, … (+${snap.entryCount - snap.entries.length} more)`
235
+ : "")
236
+ : "(empty)";
237
+ const kind = snap.isProject
238
+ ? "EXISTING PROJECT — do NOT re-scaffold into this directory; continue / implement inside it"
239
+ : snap.emptyOrMissing
240
+ ? "empty or only junk files — OK for a new scaffold into a subfolder here"
241
+ : "non-empty directory (not a clear project root) — list carefully; scaffolders often refuse non-empty targets";
242
+ const pm = detectPackageManager(snap.path);
243
+ const pmLine = pm
244
+ ? `package manager (from lockfile/manifest): ${pm} — use this for install/run, do not invent another`
245
+ : undefined;
246
+ return (`- ${label}: ${snap.path}\n` +
247
+ ` status: ${kind}\n` +
248
+ ` entries (${snap.entryCount}): ${entries}\n` +
249
+ ` ${markerLine}` +
250
+ (pmLine ? `\n ${pmLine}` : ""));
251
+ }
252
+ /**
253
+ * Guess a likely project subfolder name from free text (todo-app, my-api, …).
254
+ * Stack-agnostic: any reasonable folder token after create/scaffold/in/on.
255
+ */
256
+ export function guessProjectFolderName(text) {
257
+ const blob = text.trim();
258
+ if (!blob)
259
+ return undefined;
260
+ // …/Desktop/todo-app or Desktop/todo-app
261
+ const pathish = blob.match(/(?:Desktop|Documents|Projects|dev|code|work)[/\\]([A-Za-z0-9._-]+)/i);
262
+ if (pathish?.[1] && !/^(directory|folder|dir)$/i.test(pathish[1])) {
263
+ return pathish[1];
264
+ }
265
+ // create a <name> app / project called <name>
266
+ const named = blob.match(/\b(?:project|app|service|cli|package|crate|module)\s+(?:called|named)\s+["']?([A-Za-z][A-Za-z0-9._-]{1,40})/i);
267
+ if (named?.[1])
268
+ return named[1];
269
+ // create <name> in/on desktop — prefer hyphenated or *app* tokens
270
+ const createName = blob.match(/\b(?:create|scaffold|init|bootstrap)\s+(?:a\s+|an\s+)?(?:new\s+)?([A-Za-z][A-Za-z0-9._-]{1,40})(?:\s+(?:app|project|service))?\s+(?:in|on|under|into)\b/i);
271
+ if (createName?.[1] &&
272
+ !/^(a|an|the|new|simple|react|vue|next|python|rust|go|node|web|todo)$/i.test(createName[1])) {
273
+ return createName[1];
274
+ }
275
+ // "todo app" / "blog app" → todo-app style
276
+ const kindApp = blob.match(/\b([a-z][a-z0-9]{1,20})[\s-]+(?:app|application|project|service|cli)\b/i);
277
+ if (kindApp?.[1] &&
278
+ !/^(react|vue|next|simple|new|web|full|small|demo|sample|node|python|rust)$/i.test(kindApp[1])) {
279
+ return `${kindApp[1].toLowerCase()}-app`;
280
+ }
281
+ return undefined;
282
+ }
283
+ /**
284
+ * Human + model-facing block injected into the system prompt for build turns.
285
+ */
286
+ export function buildWorkspaceOrientation(input) {
287
+ const cwd = resolve(input.cwd?.trim() || safeCwd());
288
+ const paths = new Map(); // path → label
289
+ paths.set(cwd, "agent process cwd (NOT necessarily the user project)");
290
+ if (input.destinationHint?.trim()) {
291
+ const d = resolve(input.destinationHint.trim());
292
+ if (!paths.has(d))
293
+ paths.set(d, "user destination (from prompt)");
294
+ }
295
+ if (input.candidateProject?.trim()) {
296
+ const c = resolve(input.candidateProject.trim());
297
+ if (!paths.has(c))
298
+ paths.set(c, "candidate project path (from plan/prompt)");
299
+ }
300
+ for (const extra of input.extraPaths ?? []) {
301
+ if (!extra?.trim())
302
+ continue;
303
+ const p = resolve(extra.trim());
304
+ if (!paths.has(p))
305
+ paths.set(p, "related path");
306
+ }
307
+ // If destination is a bare parent, snapshot bounded marker-bearing children
308
+ // regardless of their name (for example Desktop/blogging-app), plus a few
309
+ // conventional folders even when they are only partially materialized.
310
+ const dest = input.destinationHint?.trim()
311
+ ? resolve(input.destinationHint.trim())
312
+ : undefined;
313
+ const discoveryParent = dest ?? (isBareParentDirectory(cwd) ? cwd : undefined);
314
+ if (discoveryParent) {
315
+ for (const project of discoverImmediateProjectRoots(discoveryParent)) {
316
+ if (!paths.has(project)) {
317
+ paths.set(project, "discovered existing project under destination");
318
+ }
319
+ }
320
+ for (const guess of ["todo-app", "app", "my-app", "project"]) {
321
+ const p = join(discoveryParent, guess);
322
+ if (!paths.has(p) && existsSync(p)) {
323
+ paths.set(p, `existing subfolder under destination ("${guess}")`);
324
+ }
325
+ }
326
+ }
327
+ const lines = [
328
+ "WORKSPACE STATUS (runtime pre-check — treat as EXPLORE step 1; still fs.list deeper as needed):",
329
+ "Rules derived from this snapshot:",
330
+ "1. Process cwd may be the agent package tree — never write user app source there unless the user asked to modify this agent.",
331
+ "2. If a target project path ALREADY EXISTS with project markers, CONTINUE that project (edit feature files). Do NOT re-run a scaffolder into it (scaffolders cancel on non-empty dirs).",
332
+ "3. If creating new, scaffold into a NEW empty subfolder under the destination (not into a non-empty dir).",
333
+ "4. Prefer absolute paths under the real project root for all fs/shell work.",
334
+ "5. plan.create detail MUST mention what exists vs what you will create, based on this status.",
335
+ "",
336
+ ];
337
+ for (const [path, label] of paths) {
338
+ lines.push(formatSnapshot(label, snapshotDir(path)));
339
+ lines.push("");
340
+ }
341
+ return lines.join("\n").trimEnd();
342
+ }
343
+ /**
344
+ * Extract the directory name a scaffolder would create (stack-agnostic).
345
+ * Returns undefined when the command is not a one-shot create into a named path.
346
+ */
347
+ export function extractScaffoldTargetName(command) {
348
+ const cmd = command.trim();
349
+ if (!cmd)
350
+ return undefined;
351
+ // Absolute path only when it is the scaffolder's target argument — never the
352
+ // `cd /path` destination (that wrongly returned "Desktop" for
353
+ // `cd ~/Desktop && npm create vite@latest blogging-app`).
354
+ const absCreate = cmd.match(/(?:npm\s+create\s+\S+|npx\s+(?:--yes\s+)?create-[\w@./-]+|yarn\s+create\s+\S+|pnpm\s+create\s+\S+|bun\s+create\s+\S+|npm\s+init\s+\S+|create-[\w@./-]+|vite@\S+|cargo\s+new|rails\s+new|poetry\s+new|flutter\s+create|django-admin\s+startproject|composer\s+create-project\s+\S+|mix\s+new|dotnet\s+new\s+\S+\s+(?:-n|--name))\s+((?:\/(?:Users|home)\/\S+|~\/\S+))/i);
355
+ if (absCreate?.[1] && !absCreate[1].includes("node_modules")) {
356
+ const base = absCreate[1].replace(/\/+$/, "").split(/[/\\]/).pop();
357
+ if (base && !base.startsWith("-"))
358
+ return base;
359
+ }
360
+ // Generic: create-* / npm create X / yarn create / cargo new / rails new / etc.
361
+ const patterns = [
362
+ /(?:npm\s+create\s+\S+|npx\s+(?:--yes\s+)?create-[\w@./-]+|yarn\s+create\s+\S+|pnpm\s+create\s+\S+|bun\s+create\s+\S+)\s+([A-Za-z0-9._@/-]+)/i,
363
+ /(?:npm\s+init\s+\S+)\s+([A-Za-z0-9._-]+)/i,
364
+ /\bcargo\s+new\s+([A-Za-z0-9._-]+)/i,
365
+ /\bgo\s+mod\s+init\s+(\S+)/i,
366
+ /\bpoetry\s+new\s+([A-Za-z0-9._-]+)/i,
367
+ /\bdjango-admin\s+startproject\s+([A-Za-z0-9._-]+)/i,
368
+ /\brails\s+new\s+([A-Za-z0-9._-]+)/i,
369
+ /\bcomposer\s+create-project\s+\S+\s+([A-Za-z0-9._-]+)/i,
370
+ /\bmix\s+new\s+([A-Za-z0-9._-]+)/i,
371
+ /\bflutter\s+create\s+([A-Za-z0-9._-]+)/i,
372
+ /\bcargo\s+init\b/i, // init in place — no name
373
+ /\bdotnet\s+new\s+\S+\s+-n\s+([A-Za-z0-9._-]+)/i,
374
+ /\bdotnet\s+new\s+\S+\s+--name\s+([A-Za-z0-9._-]+)/i,
375
+ ];
376
+ for (const re of patterns) {
377
+ const m = cmd.match(re);
378
+ if (m?.[1] && m[1] !== "." && m[1] !== ".." && !m[1].startsWith("-")) {
379
+ // Strip version tags from package names mistaken as target
380
+ if (/^@/.test(m[1]) && !m[1].includes("/"))
381
+ continue;
382
+ const name = m[1].replace(/\/+$/, "").split(/[/\\]/).pop();
383
+ if (name && name !== "." && !name.startsWith("-"))
384
+ return name;
385
+ }
386
+ }
387
+ // Trailing bare name before flags: `create-vite@latest todo-app -- --template react`
388
+ const beforeFlags = cmd
389
+ .replace(/\s+--\s+.*$/, "")
390
+ .replace(/\s+--\S+=\S+/g, "")
391
+ .replace(/\s+--\S+/g, "")
392
+ .trim();
393
+ const tokens = beforeFlags.split(/\s+/);
394
+ const last = tokens[tokens.length - 1];
395
+ if (last &&
396
+ /^[A-Za-z0-9._-]+$/.test(last) &&
397
+ !/^(latest|react|vue|svelte|vanilla|typescript|ts|js|app|yes)$/i.test(last) &&
398
+ tokens.some((t) => /create|new|init|startproject/i.test(t))) {
399
+ return last;
400
+ }
401
+ return undefined;
402
+ }
403
+ /**
404
+ * Resolve absolute path a scaffolder would write into.
405
+ */
406
+ export function resolveScaffoldTargetPath(command, shellCwd) {
407
+ const cmd = command.trim();
408
+ if (!cmd)
409
+ return undefined;
410
+ // Honour leading `cd /path && …` / `mkdir -p /path && cd /path && …`
411
+ // so preflight sees the real target when models chain shell in one call.
412
+ let base = resolve(shellCwd?.trim() || safeCwd());
413
+ const stripShellQuotes = (raw) => raw.trim().replace(/^['"]|['"]$/g, "");
414
+ const cdMatch = cmd.match(/(?:^|[;&|]\s*)cd\s+([^\s;&|]+)\s*(?:&&|;)/i);
415
+ if (cdMatch?.[1]) {
416
+ const cdTarget = stripShellQuotes(cdMatch[1]).replace(/^~(?=\/)/, homedir());
417
+ base = isAbsolute(cdTarget) ? resolve(cdTarget) : resolve(base, cdTarget);
418
+ }
419
+ // `mkdir -p /abs/path && … create .` without explicit cd
420
+ const mkdirMatch = cmd.match(/mkdir\s+(?:-p\s+)?([^\s;&|]+)\s*(?:&&|;)/i);
421
+ if (mkdirMatch?.[1] && !cdMatch) {
422
+ const m = stripShellQuotes(mkdirMatch[1]).replace(/^~(?=\/)/, homedir());
423
+ if (isAbsolute(m) || m.startsWith("~/")) {
424
+ base = resolve(m);
425
+ }
426
+ }
427
+ // In-place initializers (no new subfolder)
428
+ if (/\bgo\s+mod\s+init\b/i.test(cmd) ||
429
+ /\bcargo\s+init\b/i.test(cmd) ||
430
+ /\bnpm\s+init\s+-y\b/i.test(cmd) ||
431
+ /\bnpm\s+init\s+--yes\b/i.test(cmd)) {
432
+ return base;
433
+ }
434
+ const createAbs = cmd.match(/(?:create-[\w@./-]+|vite@\S+|cargo\s+new|rails\s+new|poetry\s+new)\s+(\/(?:Users|home)\/[^\s]+|~\/[^\s]+)/i);
435
+ if (createAbs?.[1]) {
436
+ return resolve(createAbs[1].replace(/^~(?=\/)/, homedir()));
437
+ }
438
+ // `create-vite .` / `npm init vite@latest .` → current (post-cd) base
439
+ if (/(?:create-\S+|vite@\S+|init\s+\S+)\s+\.(?:\s|$)/i.test(cmd) ||
440
+ /\s\.(?:\s+--|\s*$)/.test(cmd)) {
441
+ return base;
442
+ }
443
+ const name = extractScaffoldTargetName(cmd);
444
+ if (!name)
445
+ return undefined;
446
+ // go.mod style module paths are not directory names
447
+ if (name.includes("/") || name.includes("@")) {
448
+ return base;
449
+ }
450
+ if (isAbsolute(name) || name.startsWith("~/")) {
451
+ return resolve(name.replace(/^~(?=\/)/, homedir()));
452
+ }
453
+ if (base.endsWith(name) || base.endsWith("/" + name) || base.endsWith("\\" + name)) {
454
+ return base;
455
+ }
456
+ return resolve(base, name);
457
+ }
458
+ /** Scaffold cancelled / refused without creating a usable tree. */
459
+ export function isScaffoldCancelledOutput(output) {
460
+ const o = output.toLowerCase();
461
+ return (/\boperation cancelled\b/.test(o) ||
462
+ /\bcanceled\b/.test(o) ||
463
+ /\buser aborted\b/.test(o) ||
464
+ /\balready exists\b/.test(o) ||
465
+ /\bdirectory is not empty\b/.test(o) ||
466
+ /\bnon-empty\b/.test(o) ||
467
+ /\brefusing to\b/.test(o) ||
468
+ /\bcould not create\b/.test(o));
469
+ }
470
+ /**
471
+ * True when the target path looks like a materialized project after scaffold.
472
+ */
473
+ export function scaffoldLooksMaterialized(targetPath) {
474
+ if (!targetPath || !existsSync(targetPath))
475
+ return false;
476
+ const snap = snapshotDir(targetPath);
477
+ if (!snap.isDir)
478
+ return false;
479
+ // At least one marker OR several source-ish entries
480
+ if (snap.isProject)
481
+ return true;
482
+ if (snap.entryCount >= 3 && !snap.emptyOrMissing)
483
+ return true;
484
+ return false;
485
+ }
486
+ /**
487
+ * Soft preflight: block scaffold into an existing non-empty project path.
488
+ * Returns an error message for the model, or undefined if OK to proceed.
489
+ */
490
+ export function scaffoldTargetConflictMessage(command, shellCwd) {
491
+ const target = resolveScaffoldTargetPath(command, shellCwd);
492
+ if (!target)
493
+ return undefined;
494
+ const snap = snapshotDir(target);
495
+ if (!snap.exists || snap.emptyOrMissing)
496
+ return undefined;
497
+ // Existing non-empty (or project) — refuse re-scaffold
498
+ if (snap.isProject || snap.entryCount > 0) {
499
+ return (`Scaffold blocked: target already exists at ${target} ` +
500
+ `(${snap.entryCount} entries` +
501
+ (snap.markers.length ? `; markers: ${snap.markers.join(", ")}` : "") +
502
+ `). Scaffolders refuse non-empty directories and print "Operation cancelled". ` +
503
+ `Choose one: (A) CONTINUE the existing project — set work there with absolute paths, implement the requested feature, do NOT re-scaffold; ` +
504
+ `(B) use a NEW empty subfolder name; or (C) only if the user asked to recreate from scratch, remove the directory first then scaffold. ` +
505
+ `fs.list the target before deciding.`);
506
+ }
507
+ return undefined;
508
+ }
509
+ //# sourceMappingURL=workspace-orient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-orient.js","sourceRoot":"","sources":["../../src/agent/workspace-orient.ts"],"names":[],"mappings":"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"}
@@ -2,28 +2,17 @@ import type { AgentEvent } from "../../agent/events.js";
2
2
  import { type AnyAppEvent, type TurnId } from "../events/app-event.js";
3
3
  import type { OutputSpool } from "../events/event-buffer.js";
4
4
  import type { EventSequencer } from "../events/sequencer.js";
5
- /**
6
- * Translates the legacy `AgentEvent` stream (the agent's unchanged emitter
7
- * contract) into versioned `AppEvent` envelopes (V2-021). Pure translation: it
8
- * mints no side effects beyond appending tool output to the injected spool and
9
- * emitting envelopes. Given the same input events, id factory, and clock it
10
- * produces byte-identical output, which the replay contract test relies on.
11
- */
12
5
  export declare class AgentEventAdapter {
13
6
  private readonly sequencer;
14
7
  private readonly spool;
15
8
  private readonly emit;
16
9
  private turnId;
10
+ private readonly bufferedMetaTools;
17
11
  constructor(sequencer: EventSequencer, spool: OutputSpool, emit: (event: AnyAppEvent) => void);
18
12
  /** Bind subsequent events to a turn; pass undefined for session-level events. */
19
13
  setTurn(turnId: TurnId | undefined): void;
20
14
  ingest(event: AgentEvent): void;
15
+ private flushBufferedMetaTool;
21
16
  private push;
22
- /**
23
- * Legacy agents restart their display counter at `tool-1` for every turn.
24
- * It is only locally unique, while the transcript and output spool retain a
25
- * whole session. Namespace it at the application boundary so tool rows and
26
- * output stay correlated without ever reusing a semantic document id.
27
- */
28
17
  private toolCallId;
29
18
  }