@mrpatronz/nexusflow 2.8.1 → 2.10.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 (732) hide show
  1. package/README.md +172 -113
  2. package/dist/agent/AcpCliAdapter.d.ts +2 -0
  3. package/dist/agent/AcpCliAdapter.d.ts.map +1 -1
  4. package/dist/agent/AcpCliAdapter.js +50 -4
  5. package/dist/agent/AcpCliAdapter.js.map +1 -1
  6. package/dist/agent/AntigravityCliAdapter.d.ts +44 -2
  7. package/dist/agent/AntigravityCliAdapter.d.ts.map +1 -1
  8. package/dist/agent/AntigravityCliAdapter.js +363 -16
  9. package/dist/agent/AntigravityCliAdapter.js.map +1 -1
  10. package/dist/agent/ClaudeCliAdapter.d.ts +3 -0
  11. package/dist/agent/ClaudeCliAdapter.d.ts.map +1 -1
  12. package/dist/agent/ClaudeCliAdapter.js +37 -10
  13. package/dist/agent/ClaudeCliAdapter.js.map +1 -1
  14. package/dist/agent/ClaudeSdkAdapter.d.ts +1 -0
  15. package/dist/agent/ClaudeSdkAdapter.d.ts.map +1 -1
  16. package/dist/agent/ClaudeSdkAdapter.js +38 -11
  17. package/dist/agent/ClaudeSdkAdapter.js.map +1 -1
  18. package/dist/agent/CliAdapterBase.d.ts +2 -0
  19. package/dist/agent/CliAdapterBase.d.ts.map +1 -1
  20. package/dist/agent/CliAdapterBase.js +5 -1
  21. package/dist/agent/CliAdapterBase.js.map +1 -1
  22. package/dist/agent/CodexCliAdapter.d.ts +1 -1
  23. package/dist/agent/CodexCliAdapter.d.ts.map +1 -1
  24. package/dist/agent/CodexCliAdapter.js +5 -4
  25. package/dist/agent/CodexCliAdapter.js.map +1 -1
  26. package/dist/agent/CodexSdkAdapter.d.ts.map +1 -1
  27. package/dist/agent/CodexSdkAdapter.js +4 -1
  28. package/dist/agent/CodexSdkAdapter.js.map +1 -1
  29. package/dist/agent/CopilotAcpAdapter.d.ts.map +1 -1
  30. package/dist/agent/CopilotAcpAdapter.js +2 -2
  31. package/dist/agent/CopilotAcpAdapter.js.map +1 -1
  32. package/dist/agent/ProviderRegistry.d.ts +8 -1
  33. package/dist/agent/ProviderRegistry.d.ts.map +1 -1
  34. package/dist/agent/ProviderRegistry.js.map +1 -1
  35. package/dist/agent/TurnSessionManager.d.ts +65 -0
  36. package/dist/agent/TurnSessionManager.d.ts.map +1 -0
  37. package/dist/agent/TurnSessionManager.js +330 -0
  38. package/dist/agent/TurnSessionManager.js.map +1 -0
  39. package/dist/agent/adapters.d.ts.map +1 -1
  40. package/dist/agent/adapters.js +23 -6
  41. package/dist/agent/adapters.js.map +1 -1
  42. package/dist/agent/cliAvailability.d.ts.map +1 -1
  43. package/dist/agent/cliAvailability.js +12 -0
  44. package/dist/agent/cliAvailability.js.map +1 -1
  45. package/dist/agent/mcp-config.d.ts +0 -5
  46. package/dist/agent/mcp-config.d.ts.map +1 -1
  47. package/dist/agent/mcp-config.js +2 -1
  48. package/dist/agent/mcp-config.js.map +1 -1
  49. package/dist/agent/models.d.ts +13 -0
  50. package/dist/agent/models.d.ts.map +1 -1
  51. package/dist/agent/models.js +262 -8
  52. package/dist/agent/models.js.map +1 -1
  53. package/dist/agent/nativeTools.d.ts.map +1 -1
  54. package/dist/agent/nativeTools.js +1 -0
  55. package/dist/agent/nativeTools.js.map +1 -1
  56. package/dist/agent/orchestrator.d.ts.map +1 -1
  57. package/dist/agent/orchestrator.js +3 -2
  58. package/dist/agent/orchestrator.js.map +1 -1
  59. package/dist/agent/session.d.ts +1 -0
  60. package/dist/agent/session.d.ts.map +1 -1
  61. package/dist/agent/session.js.map +1 -1
  62. package/dist/analyzers/detect-deps.js +16 -1
  63. package/dist/analyzers/detect-deps.js.map +1 -1
  64. package/dist/analyzers/run-analyzer.d.ts.map +1 -1
  65. package/dist/analyzers/run-analyzer.js.map +1 -1
  66. package/dist/commands/adapter.d.ts.map +1 -1
  67. package/dist/commands/adapter.js +15 -14
  68. package/dist/commands/adapter.js.map +1 -1
  69. package/dist/commands/add-repo.d.ts.map +1 -1
  70. package/dist/commands/add-repo.js +6 -5
  71. package/dist/commands/add-repo.js.map +1 -1
  72. package/dist/commands/commit.js +6 -8
  73. package/dist/commands/commit.js.map +1 -1
  74. package/dist/commands/config.d.ts.map +1 -1
  75. package/dist/commands/config.js +2 -1
  76. package/dist/commands/config.js.map +1 -1
  77. package/dist/commands/create.d.ts +4 -4
  78. package/dist/commands/create.d.ts.map +1 -1
  79. package/dist/commands/create.js +8 -7
  80. package/dist/commands/create.js.map +1 -1
  81. package/dist/commands/desktop.d.ts +44 -3
  82. package/dist/commands/desktop.d.ts.map +1 -1
  83. package/dist/commands/desktop.js +246 -7
  84. package/dist/commands/desktop.js.map +1 -1
  85. package/dist/commands/diff.d.ts.map +1 -1
  86. package/dist/commands/diff.js +3 -2
  87. package/dist/commands/diff.js.map +1 -1
  88. package/dist/commands/doctor.d.ts.map +1 -1
  89. package/dist/commands/doctor.js +3 -2
  90. package/dist/commands/doctor.js.map +1 -1
  91. package/dist/commands/finish.js +2 -1
  92. package/dist/commands/finish.js.map +1 -1
  93. package/dist/commands/handoff.d.ts.map +1 -1
  94. package/dist/commands/handoff.js +12 -12
  95. package/dist/commands/handoff.js.map +1 -1
  96. package/dist/commands/init.d.ts +2 -2
  97. package/dist/commands/init.d.ts.map +1 -1
  98. package/dist/commands/init.js +8 -7
  99. package/dist/commands/init.js.map +1 -1
  100. package/dist/commands/isolate.d.ts.map +1 -1
  101. package/dist/commands/isolate.js +2 -1
  102. package/dist/commands/isolate.js.map +1 -1
  103. package/dist/commands/knowledge.d.ts.map +1 -1
  104. package/dist/commands/knowledge.js +3 -2
  105. package/dist/commands/knowledge.js.map +1 -1
  106. package/dist/commands/list.d.ts.map +1 -1
  107. package/dist/commands/list.js +3 -2
  108. package/dist/commands/list.js.map +1 -1
  109. package/dist/commands/logs.js +3 -3
  110. package/dist/commands/logs.js.map +1 -1
  111. package/dist/commands/mcp.d.ts +1 -2
  112. package/dist/commands/mcp.d.ts.map +1 -1
  113. package/dist/commands/mcp.js +19 -12
  114. package/dist/commands/mcp.js.map +1 -1
  115. package/dist/commands/migrate.d.ts +12 -0
  116. package/dist/commands/migrate.d.ts.map +1 -0
  117. package/dist/commands/migrate.js +128 -0
  118. package/dist/commands/migrate.js.map +1 -0
  119. package/dist/commands/open.d.ts.map +1 -1
  120. package/dist/commands/open.js +2 -1
  121. package/dist/commands/open.js.map +1 -1
  122. package/dist/commands/progress.d.ts.map +1 -1
  123. package/dist/commands/progress.js +2 -1
  124. package/dist/commands/progress.js.map +1 -1
  125. package/dist/commands/project.d.ts.map +1 -1
  126. package/dist/commands/project.js +7 -6
  127. package/dist/commands/project.js.map +1 -1
  128. package/dist/commands/refresh.d.ts.map +1 -1
  129. package/dist/commands/refresh.js +8 -11
  130. package/dist/commands/refresh.js.map +1 -1
  131. package/dist/commands/remove.d.ts.map +1 -1
  132. package/dist/commands/remove.js +2 -1
  133. package/dist/commands/remove.js.map +1 -1
  134. package/dist/commands/schedule.js +16 -18
  135. package/dist/commands/schedule.js.map +1 -1
  136. package/dist/commands/start.d.ts.map +1 -1
  137. package/dist/commands/start.js +9 -8
  138. package/dist/commands/start.js.map +1 -1
  139. package/dist/commands/status.d.ts.map +1 -1
  140. package/dist/commands/status.js +2 -1
  141. package/dist/commands/status.js.map +1 -1
  142. package/dist/commands/stop.d.ts.map +1 -1
  143. package/dist/commands/stop.js +2 -1
  144. package/dist/commands/stop.js.map +1 -1
  145. package/dist/commands/strategy.d.ts.map +1 -1
  146. package/dist/commands/strategy.js +6 -5
  147. package/dist/commands/strategy.js.map +1 -1
  148. package/dist/commands/sync.js +8 -10
  149. package/dist/commands/sync.js.map +1 -1
  150. package/dist/commands/tui.d.ts.map +1 -1
  151. package/dist/commands/tui.js +11 -10
  152. package/dist/commands/tui.js.map +1 -1
  153. package/dist/commands/ui.d.ts.map +1 -1
  154. package/dist/commands/ui.js +4 -3
  155. package/dist/commands/ui.js.map +1 -1
  156. package/dist/core/adapters/local-storage.d.ts +3 -1
  157. package/dist/core/adapters/local-storage.d.ts.map +1 -1
  158. package/dist/core/adapters/local-storage.js +62 -4
  159. package/dist/core/adapters/local-storage.js.map +1 -1
  160. package/dist/core/analysis-cache.d.ts.map +1 -1
  161. package/dist/core/analysis-cache.js +8 -7
  162. package/dist/core/analysis-cache.js.map +1 -1
  163. package/dist/core/brand-config.d.ts +261 -0
  164. package/dist/core/brand-config.d.ts.map +1 -0
  165. package/dist/core/brand-config.js +514 -0
  166. package/dist/core/brand-config.js.map +1 -0
  167. package/dist/core/config.d.ts +1 -1
  168. package/dist/core/config.d.ts.map +1 -1
  169. package/dist/core/config.js +18 -8
  170. package/dist/core/config.js.map +1 -1
  171. package/dist/core/constants.d.ts +88 -0
  172. package/dist/core/constants.d.ts.map +1 -0
  173. package/dist/core/constants.js +103 -0
  174. package/dist/core/constants.js.map +1 -0
  175. package/dist/core/doctor.d.ts.map +1 -1
  176. package/dist/core/doctor.js +11 -3
  177. package/dist/core/doctor.js.map +1 -1
  178. package/dist/core/generation-lock.d.ts +2 -2
  179. package/dist/core/generation-lock.d.ts.map +1 -1
  180. package/dist/core/generation-lock.js +49 -22
  181. package/dist/core/generation-lock.js.map +1 -1
  182. package/dist/core/knowledge.d.ts +19 -0
  183. package/dist/core/knowledge.d.ts.map +1 -1
  184. package/dist/core/knowledge.js +150 -24
  185. package/dist/core/knowledge.js.map +1 -1
  186. package/dist/core/migrate.d.ts +53 -0
  187. package/dist/core/migrate.d.ts.map +1 -0
  188. package/dist/core/migrate.js +607 -0
  189. package/dist/core/migrate.js.map +1 -0
  190. package/dist/core/new-repo.js +1 -1
  191. package/dist/core/new-repo.js.map +1 -1
  192. package/dist/core/projects.d.ts.map +1 -1
  193. package/dist/core/projects.js +13 -4
  194. package/dist/core/projects.js.map +1 -1
  195. package/dist/core/refresh.d.ts.map +1 -1
  196. package/dist/core/refresh.js +6 -4
  197. package/dist/core/refresh.js.map +1 -1
  198. package/dist/core/scheduler.d.ts +1 -1
  199. package/dist/core/scheduler.d.ts.map +1 -1
  200. package/dist/core/scheduler.js +11 -9
  201. package/dist/core/scheduler.js.map +1 -1
  202. package/dist/core/sync.js +1 -1
  203. package/dist/core/sync.js.map +1 -1
  204. package/dist/core/workspace-git.d.ts.map +1 -1
  205. package/dist/core/workspace-git.js +34 -10
  206. package/dist/core/workspace-git.js.map +1 -1
  207. package/dist/core/workspace-state.d.ts +4 -0
  208. package/dist/core/workspace-state.d.ts.map +1 -1
  209. package/dist/core/workspace-state.js +8 -8
  210. package/dist/core/workspace-state.js.map +1 -1
  211. package/dist/core/workspace.d.ts +3 -4
  212. package/dist/core/workspace.d.ts.map +1 -1
  213. package/dist/core/workspace.js +62 -30
  214. package/dist/core/workspace.js.map +1 -1
  215. package/dist/desktop-server.js +6 -3
  216. package/dist/desktop-server.js.map +1 -1
  217. package/dist/generators/base.d.ts.map +1 -1
  218. package/dist/generators/base.js +7 -5
  219. package/dist/generators/base.js.map +1 -1
  220. package/dist/generators/claude.d.ts.map +1 -1
  221. package/dist/generators/claude.js +2 -1
  222. package/dist/generators/claude.js.map +1 -1
  223. package/dist/generators/cursor.d.ts +1 -1
  224. package/dist/generators/cursor.d.ts.map +1 -1
  225. package/dist/generators/cursor.js +9 -4
  226. package/dist/generators/cursor.js.map +1 -1
  227. package/dist/generators/index.d.ts +4 -8
  228. package/dist/generators/index.d.ts.map +1 -1
  229. package/dist/generators/index.js +34 -69
  230. package/dist/generators/index.js.map +1 -1
  231. package/dist/generators/plan-generator.d.ts.map +1 -1
  232. package/dist/generators/plan-generator.js +20 -11
  233. package/dist/generators/plan-generator.js.map +1 -1
  234. package/dist/generators/skills-generator.d.ts.map +1 -1
  235. package/dist/generators/skills-generator.js +26 -11
  236. package/dist/generators/skills-generator.js.map +1 -1
  237. package/dist/gui/app_logo.png +0 -0
  238. package/dist/gui/assets/AgentsPage-CnXzZFo1.js +3 -0
  239. package/dist/gui/assets/DashboardPage-rm3hKgsw.js +1 -0
  240. package/dist/gui/assets/GettingStartedPage-BKeuSHZQ.js +1 -0
  241. package/dist/gui/assets/NullStore-DuSDhGOe.js +1 -0
  242. package/dist/gui/assets/ProjectsPage-CioaA4uf.js +1 -0
  243. package/dist/gui/assets/ScaffoldRepoInline-DKZ1rPmE.js +1 -0
  244. package/dist/gui/assets/Separator-BgWyHDtg.js +1 -0
  245. package/dist/gui/assets/SettingsPage-BevO8oge.js +1 -0
  246. package/dist/gui/assets/SkillsPage-D2stJRWy.js +6 -0
  247. package/dist/gui/assets/StartWorkPage-C8a6eN90.js +1 -0
  248. package/dist/gui/assets/{StrategiesPage-C36TZgDX.js → StrategiesPage-BRQMly_d.js} +2 -2
  249. package/dist/gui/assets/WorkroomsPage-KqBkRD-x.js +4 -0
  250. package/dist/gui/assets/WorkspacesPage-DcA2i5HN.js +2 -0
  251. package/dist/gui/assets/alert-QnMXzwpU.js +1 -0
  252. package/dist/gui/assets/alert-dialog-BHEUQVyS.js +1 -0
  253. package/dist/gui/assets/badge-DTBzXOWn.js +1 -0
  254. package/dist/gui/assets/brand-hHByyyzq.js +1 -0
  255. package/dist/gui/assets/button-CREn1mup.js +1 -0
  256. package/dist/gui/assets/card-yrg6ov8B.js +1 -0
  257. package/dist/gui/assets/chevron-down-B_Mwbim8.js +1 -0
  258. package/dist/gui/assets/{circle-plus-lmU1yNJd.js → circle-plus--zM3-3r3.js} +1 -1
  259. package/dist/gui/assets/{code-xml-jFAa3-TT.js → code-xml-DH-38Tt7.js} +1 -1
  260. package/dist/gui/assets/{git-branch-Cfj9D8yW.js → git-branch-Ce0I2663.js} +1 -1
  261. package/dist/gui/assets/index-BB4BuHBQ.css +2 -0
  262. package/dist/gui/assets/index-BTe-_1Mu.js +57 -0
  263. package/dist/gui/assets/isElementDisabled-BrwmCB1d.js +1 -0
  264. package/dist/gui/assets/label-DC730X8s.js +1 -0
  265. package/dist/gui/assets/layers-j_brOuoa.js +1 -0
  266. package/dist/gui/assets/menu-d_G9km1-.js +1 -0
  267. package/dist/gui/assets/shield-check-Dd1Yv3l2.js +1 -0
  268. package/dist/gui/assets/square-check-big-BSIiYXPI.js +1 -0
  269. package/dist/gui/assets/tabs-BHwTt4t1.js +1 -0
  270. package/dist/gui/assets/{trash-2-CtR35_eF.js → trash-2-CMdv3eD3.js} +1 -1
  271. package/dist/gui/assets/useAriaLabelledBy-BmJErI5a.js +1 -0
  272. package/dist/gui/assets/useValueChanged-WS99hTmm.js +1 -0
  273. package/dist/gui/assets/{vsc-DFh0-53h.js → vsc-eMRaEwN3.js} +1 -1
  274. package/dist/gui/favicon-aurora.svg +8 -0
  275. package/dist/gui/favicon.ico +0 -0
  276. package/dist/gui/favicon.svg +8 -1
  277. package/dist/gui/index.html +21 -12
  278. package/dist/harness/claude.d.ts.map +1 -1
  279. package/dist/harness/claude.js +97 -7
  280. package/dist/harness/claude.js.map +1 -1
  281. package/dist/harness/codex.d.ts +1 -0
  282. package/dist/harness/codex.d.ts.map +1 -1
  283. package/dist/harness/codex.js +51 -34
  284. package/dist/harness/codex.js.map +1 -1
  285. package/dist/index.js +57 -27
  286. package/dist/index.js.map +1 -1
  287. package/dist/mcp/server.d.ts +12 -1
  288. package/dist/mcp/server.d.ts.map +1 -1
  289. package/dist/mcp/server.js +24 -6
  290. package/dist/mcp/server.js.map +1 -1
  291. package/dist/mcp/tools.d.ts +4 -2
  292. package/dist/mcp/tools.d.ts.map +1 -1
  293. package/dist/mcp/tools.js +372 -17
  294. package/dist/mcp/tools.js.map +1 -1
  295. package/dist/orchestration/detect.d.ts.map +1 -1
  296. package/dist/orchestration/detect.js +12 -5
  297. package/dist/orchestration/detect.js.map +1 -1
  298. package/dist/orchestration/log-tail.js +17 -17
  299. package/dist/orchestration/log-tail.js.map +1 -1
  300. package/dist/orchestration/runner.d.ts +1 -1
  301. package/dist/orchestration/runner.d.ts.map +1 -1
  302. package/dist/orchestration/runner.js +13 -8
  303. package/dist/orchestration/runner.js.map +1 -1
  304. package/dist/resources/agents-catalog.d.ts +3 -1
  305. package/dist/resources/agents-catalog.d.ts.map +1 -1
  306. package/dist/resources/agents-catalog.js +12 -6
  307. package/dist/resources/agents-catalog.js.map +1 -1
  308. package/dist/resources/contracts.d.ts +7 -0
  309. package/dist/resources/contracts.d.ts.map +1 -1
  310. package/dist/resources/contracts.js +8 -1
  311. package/dist/resources/contracts.js.map +1 -1
  312. package/dist/resources/fs-safety.d.ts +7 -1
  313. package/dist/resources/fs-safety.d.ts.map +1 -1
  314. package/dist/resources/fs-safety.js +44 -1
  315. package/dist/resources/fs-safety.js.map +1 -1
  316. package/dist/resources/materializer.d.ts +1 -0
  317. package/dist/resources/materializer.d.ts.map +1 -1
  318. package/dist/resources/materializer.js +48 -17
  319. package/dist/resources/materializer.js.map +1 -1
  320. package/dist/resources/service.d.ts.map +1 -1
  321. package/dist/resources/service.js +3 -2
  322. package/dist/resources/service.js.map +1 -1
  323. package/dist/server.d.ts +2 -19
  324. package/dist/server.d.ts.map +1 -1
  325. package/dist/server.js +1158 -318
  326. package/dist/server.js.map +1 -1
  327. package/dist/static-resources/workflows/cost-aware-sol-luna.md +95 -0
  328. package/dist/storage/db.d.ts +94 -0
  329. package/dist/storage/db.d.ts.map +1 -0
  330. package/dist/storage/db.js +609 -0
  331. package/dist/storage/db.js.map +1 -0
  332. package/dist/types.d.ts +19 -0
  333. package/dist/types.d.ts.map +1 -1
  334. package/dist/utils/detect-ai.d.ts.map +1 -1
  335. package/dist/utils/detect-ai.js +1 -3
  336. package/dist/utils/detect-ai.js.map +1 -1
  337. package/dist/utils/multi-git.d.ts +0 -8
  338. package/dist/utils/multi-git.d.ts.map +1 -1
  339. package/dist/utils/multi-git.js +12 -4
  340. package/dist/utils/multi-git.js.map +1 -1
  341. package/dist/utils/pr.d.ts.map +1 -1
  342. package/dist/utils/pr.js +10 -5
  343. package/dist/utils/pr.js.map +1 -1
  344. package/dist/utils/resolve-workspace.d.ts +1 -1
  345. package/dist/utils/resolve-workspace.d.ts.map +1 -1
  346. package/dist/utils/resolve-workspace.js +10 -3
  347. package/dist/utils/resolve-workspace.js.map +1 -1
  348. package/dist/utils/session-finder.d.ts +12 -1
  349. package/dist/utils/session-finder.d.ts.map +1 -1
  350. package/dist/utils/session-finder.js +183 -0
  351. package/dist/utils/session-finder.js.map +1 -1
  352. package/dist/utils/skills-catalog.d.ts +5 -1
  353. package/dist/utils/skills-catalog.d.ts.map +1 -1
  354. package/dist/utils/skills-catalog.js +131 -75
  355. package/dist/utils/skills-catalog.js.map +1 -1
  356. package/dist/utils/terminal-launch.d.ts +4 -0
  357. package/dist/utils/terminal-launch.d.ts.map +1 -1
  358. package/dist/utils/terminal-launch.js +71 -12
  359. package/dist/utils/terminal-launch.js.map +1 -1
  360. package/dist/utils/update-check.d.ts +4 -1
  361. package/dist/utils/update-check.d.ts.map +1 -1
  362. package/dist/utils/update-check.js +66 -19
  363. package/dist/utils/update-check.js.map +1 -1
  364. package/dist/utils/workflows.d.ts +4 -1
  365. package/dist/utils/workflows.d.ts.map +1 -1
  366. package/dist/utils/workflows.js +51 -21
  367. package/dist/utils/workflows.js.map +1 -1
  368. package/dist/workrooms/client.d.ts +54 -0
  369. package/dist/workrooms/client.d.ts.map +1 -0
  370. package/dist/workrooms/client.js +191 -0
  371. package/dist/workrooms/client.js.map +1 -0
  372. package/dist/workrooms/contracts.d.ts +579 -0
  373. package/dist/workrooms/contracts.d.ts.map +1 -0
  374. package/dist/workrooms/contracts.js +231 -0
  375. package/dist/workrooms/contracts.js.map +1 -0
  376. package/dist/workrooms/crypto.d.ts +30 -0
  377. package/dist/workrooms/crypto.d.ts.map +1 -0
  378. package/dist/workrooms/crypto.js +72 -0
  379. package/dist/workrooms/crypto.js.map +1 -0
  380. package/dist/workrooms/host.d.ts +61 -0
  381. package/dist/workrooms/host.d.ts.map +1 -0
  382. package/dist/workrooms/host.js +747 -0
  383. package/dist/workrooms/host.js.map +1 -0
  384. package/dist/workrooms/local-resources.d.ts +26 -0
  385. package/dist/workrooms/local-resources.d.ts.map +1 -0
  386. package/dist/workrooms/local-resources.js +367 -0
  387. package/dist/workrooms/local-resources.js.map +1 -0
  388. package/dist/workrooms/manager.d.ts +228 -0
  389. package/dist/workrooms/manager.d.ts.map +1 -0
  390. package/dist/workrooms/manager.js +768 -0
  391. package/dist/workrooms/manager.js.map +1 -0
  392. package/dist/workrooms/milestones.d.ts +42 -0
  393. package/dist/workrooms/milestones.d.ts.map +1 -0
  394. package/dist/workrooms/milestones.js +94 -0
  395. package/dist/workrooms/milestones.js.map +1 -0
  396. package/dist/workrooms/portable.d.ts +21 -0
  397. package/dist/workrooms/portable.d.ts.map +1 -0
  398. package/dist/workrooms/portable.js +201 -0
  399. package/dist/workrooms/portable.js.map +1 -0
  400. package/dist/workrooms/resource-package.d.ts +7 -0
  401. package/dist/workrooms/resource-package.d.ts.map +1 -0
  402. package/dist/workrooms/resource-package.js +260 -0
  403. package/dist/workrooms/resource-package.js.map +1 -0
  404. package/dist/workrooms/service.d.ts +92 -0
  405. package/dist/workrooms/service.d.ts.map +1 -0
  406. package/dist/workrooms/service.js +788 -0
  407. package/dist/workrooms/service.js.map +1 -0
  408. package/dist/workrooms/sqlite-store.d.ts +31 -0
  409. package/dist/workrooms/sqlite-store.d.ts.map +1 -0
  410. package/dist/workrooms/sqlite-store.js +511 -0
  411. package/dist/workrooms/sqlite-store.js.map +1 -0
  412. package/dist/workrooms/store.d.ts +542 -0
  413. package/dist/workrooms/store.d.ts.map +1 -0
  414. package/dist/workrooms/store.js +71 -0
  415. package/dist/workrooms/store.js.map +1 -0
  416. package/package.json +16 -10
  417. package/resources/workflows/cost-aware-sol-luna.md +95 -0
  418. package/dist/agent/AcpCliAdapter.test.d.ts +0 -2
  419. package/dist/agent/AcpCliAdapter.test.d.ts.map +0 -1
  420. package/dist/agent/AcpCliAdapter.test.js +0 -235
  421. package/dist/agent/AcpCliAdapter.test.js.map +0 -1
  422. package/dist/agent/AntigravityCliAdapter.test.d.ts +0 -2
  423. package/dist/agent/AntigravityCliAdapter.test.d.ts.map +0 -1
  424. package/dist/agent/AntigravityCliAdapter.test.js +0 -222
  425. package/dist/agent/AntigravityCliAdapter.test.js.map +0 -1
  426. package/dist/agent/ClaudeCliAdapter.test.d.ts +0 -2
  427. package/dist/agent/ClaudeCliAdapter.test.d.ts.map +0 -1
  428. package/dist/agent/ClaudeCliAdapter.test.js +0 -320
  429. package/dist/agent/ClaudeCliAdapter.test.js.map +0 -1
  430. package/dist/agent/ClaudeSdkAdapter.test.d.ts +0 -2
  431. package/dist/agent/ClaudeSdkAdapter.test.d.ts.map +0 -1
  432. package/dist/agent/ClaudeSdkAdapter.test.js +0 -155
  433. package/dist/agent/ClaudeSdkAdapter.test.js.map +0 -1
  434. package/dist/agent/CliAdapterBase.test.d.ts +0 -2
  435. package/dist/agent/CliAdapterBase.test.d.ts.map +0 -1
  436. package/dist/agent/CliAdapterBase.test.js +0 -240
  437. package/dist/agent/CliAdapterBase.test.js.map +0 -1
  438. package/dist/agent/CodexCliAdapter.test.d.ts +0 -2
  439. package/dist/agent/CodexCliAdapter.test.d.ts.map +0 -1
  440. package/dist/agent/CodexCliAdapter.test.js +0 -331
  441. package/dist/agent/CodexCliAdapter.test.js.map +0 -1
  442. package/dist/agent/CodexSdkAdapter.test.d.ts +0 -2
  443. package/dist/agent/CodexSdkAdapter.test.d.ts.map +0 -1
  444. package/dist/agent/CodexSdkAdapter.test.js +0 -76
  445. package/dist/agent/CodexSdkAdapter.test.js.map +0 -1
  446. package/dist/agent/ProviderRegistry.test.d.ts +0 -2
  447. package/dist/agent/ProviderRegistry.test.d.ts.map +0 -1
  448. package/dist/agent/ProviderRegistry.test.js +0 -129
  449. package/dist/agent/ProviderRegistry.test.js.map +0 -1
  450. package/dist/agent/adapters.test.d.ts +0 -2
  451. package/dist/agent/adapters.test.d.ts.map +0 -1
  452. package/dist/agent/adapters.test.js +0 -71
  453. package/dist/agent/adapters.test.js.map +0 -1
  454. package/dist/agent/cliAvailability.test.d.ts +0 -2
  455. package/dist/agent/cliAvailability.test.d.ts.map +0 -1
  456. package/dist/agent/cliAvailability.test.js +0 -217
  457. package/dist/agent/cliAvailability.test.js.map +0 -1
  458. package/dist/agent/mcp-config.test.d.ts +0 -2
  459. package/dist/agent/mcp-config.test.d.ts.map +0 -1
  460. package/dist/agent/mcp-config.test.js +0 -22
  461. package/dist/agent/mcp-config.test.js.map +0 -1
  462. package/dist/agent/models.test.d.ts +0 -2
  463. package/dist/agent/models.test.d.ts.map +0 -1
  464. package/dist/agent/models.test.js +0 -40
  465. package/dist/agent/models.test.js.map +0 -1
  466. package/dist/agent/nativeAgent.test.d.ts +0 -2
  467. package/dist/agent/nativeAgent.test.d.ts.map +0 -1
  468. package/dist/agent/nativeAgent.test.js +0 -35
  469. package/dist/agent/nativeAgent.test.js.map +0 -1
  470. package/dist/agent/nativeTools.test.d.ts +0 -2
  471. package/dist/agent/nativeTools.test.d.ts.map +0 -1
  472. package/dist/agent/nativeTools.test.js +0 -67
  473. package/dist/agent/nativeTools.test.js.map +0 -1
  474. package/dist/agent/orchestrator.test.d.ts +0 -2
  475. package/dist/agent/orchestrator.test.d.ts.map +0 -1
  476. package/dist/agent/orchestrator.test.js +0 -284
  477. package/dist/agent/orchestrator.test.js.map +0 -1
  478. package/dist/agent/session.test.d.ts +0 -2
  479. package/dist/agent/session.test.d.ts.map +0 -1
  480. package/dist/agent/session.test.js +0 -74
  481. package/dist/agent/session.test.js.map +0 -1
  482. package/dist/agent/smoke-chat.test.d.ts +0 -2
  483. package/dist/agent/smoke-chat.test.d.ts.map +0 -1
  484. package/dist/agent/smoke-chat.test.js +0 -166
  485. package/dist/agent/smoke-chat.test.js.map +0 -1
  486. package/dist/commands/add-repo.test.d.ts +0 -2
  487. package/dist/commands/add-repo.test.d.ts.map +0 -1
  488. package/dist/commands/add-repo.test.js +0 -30
  489. package/dist/commands/add-repo.test.js.map +0 -1
  490. package/dist/commands/commands.test.d.ts +0 -2
  491. package/dist/commands/commands.test.d.ts.map +0 -1
  492. package/dist/commands/commands.test.js +0 -156
  493. package/dist/commands/commands.test.js.map +0 -1
  494. package/dist/commands/commit.test.d.ts +0 -2
  495. package/dist/commands/commit.test.d.ts.map +0 -1
  496. package/dist/commands/commit.test.js +0 -54
  497. package/dist/commands/commit.test.js.map +0 -1
  498. package/dist/commands/isolate.test.d.ts +0 -2
  499. package/dist/commands/isolate.test.d.ts.map +0 -1
  500. package/dist/commands/isolate.test.js +0 -59
  501. package/dist/commands/isolate.test.js.map +0 -1
  502. package/dist/commands/knowledge.test.d.ts +0 -2
  503. package/dist/commands/knowledge.test.d.ts.map +0 -1
  504. package/dist/commands/knowledge.test.js +0 -90
  505. package/dist/commands/knowledge.test.js.map +0 -1
  506. package/dist/commands/status.test.d.ts +0 -2
  507. package/dist/commands/status.test.d.ts.map +0 -1
  508. package/dist/commands/status.test.js +0 -31
  509. package/dist/commands/status.test.js.map +0 -1
  510. package/dist/commands/ui.test.d.ts +0 -2
  511. package/dist/commands/ui.test.d.ts.map +0 -1
  512. package/dist/commands/ui.test.js +0 -58
  513. package/dist/commands/ui.test.js.map +0 -1
  514. package/dist/core/adapters/storage.test.d.ts +0 -2
  515. package/dist/core/adapters/storage.test.d.ts.map +0 -1
  516. package/dist/core/adapters/storage.test.js +0 -65
  517. package/dist/core/adapters/storage.test.js.map +0 -1
  518. package/dist/core/analysis-cache.test.d.ts +0 -2
  519. package/dist/core/analysis-cache.test.d.ts.map +0 -1
  520. package/dist/core/analysis-cache.test.js +0 -163
  521. package/dist/core/analysis-cache.test.js.map +0 -1
  522. package/dist/core/config.test.d.ts +0 -2
  523. package/dist/core/config.test.d.ts.map +0 -1
  524. package/dist/core/config.test.js +0 -90
  525. package/dist/core/config.test.js.map +0 -1
  526. package/dist/core/finish.test.d.ts +0 -2
  527. package/dist/core/finish.test.d.ts.map +0 -1
  528. package/dist/core/finish.test.js +0 -110
  529. package/dist/core/finish.test.js.map +0 -1
  530. package/dist/core/generation-lock.test.d.ts +0 -2
  531. package/dist/core/generation-lock.test.d.ts.map +0 -1
  532. package/dist/core/generation-lock.test.js +0 -134
  533. package/dist/core/generation-lock.test.js.map +0 -1
  534. package/dist/core/isolate.test.d.ts +0 -2
  535. package/dist/core/isolate.test.d.ts.map +0 -1
  536. package/dist/core/isolate.test.js +0 -320
  537. package/dist/core/isolate.test.js.map +0 -1
  538. package/dist/core/knowledge.test.d.ts +0 -2
  539. package/dist/core/knowledge.test.d.ts.map +0 -1
  540. package/dist/core/knowledge.test.js +0 -287
  541. package/dist/core/knowledge.test.js.map +0 -1
  542. package/dist/core/locks.test.d.ts +0 -2
  543. package/dist/core/locks.test.d.ts.map +0 -1
  544. package/dist/core/locks.test.js +0 -143
  545. package/dist/core/locks.test.js.map +0 -1
  546. package/dist/core/new-repo.test.d.ts +0 -2
  547. package/dist/core/new-repo.test.d.ts.map +0 -1
  548. package/dist/core/new-repo.test.js +0 -78
  549. package/dist/core/new-repo.test.js.map +0 -1
  550. package/dist/core/progress.test.d.ts +0 -2
  551. package/dist/core/progress.test.d.ts.map +0 -1
  552. package/dist/core/progress.test.js +0 -52
  553. package/dist/core/progress.test.js.map +0 -1
  554. package/dist/core/projects.test.d.ts +0 -2
  555. package/dist/core/projects.test.d.ts.map +0 -1
  556. package/dist/core/projects.test.js +0 -165
  557. package/dist/core/projects.test.js.map +0 -1
  558. package/dist/core/refresh.test.d.ts +0 -2
  559. package/dist/core/refresh.test.d.ts.map +0 -1
  560. package/dist/core/refresh.test.js +0 -93
  561. package/dist/core/refresh.test.js.map +0 -1
  562. package/dist/core/scanner.test.d.ts +0 -2
  563. package/dist/core/scanner.test.d.ts.map +0 -1
  564. package/dist/core/scanner.test.js +0 -53
  565. package/dist/core/scanner.test.js.map +0 -1
  566. package/dist/core/scheduler.test.d.ts +0 -2
  567. package/dist/core/scheduler.test.d.ts.map +0 -1
  568. package/dist/core/scheduler.test.js +0 -169
  569. package/dist/core/scheduler.test.js.map +0 -1
  570. package/dist/core/sync.test.d.ts +0 -2
  571. package/dist/core/sync.test.d.ts.map +0 -1
  572. package/dist/core/sync.test.js +0 -128
  573. package/dist/core/sync.test.js.map +0 -1
  574. package/dist/core/workspace-git.test.d.ts +0 -2
  575. package/dist/core/workspace-git.test.d.ts.map +0 -1
  576. package/dist/core/workspace-git.test.js +0 -52
  577. package/dist/core/workspace-git.test.js.map +0 -1
  578. package/dist/core/workspace-skills-workflow.integration.test.d.ts +0 -2
  579. package/dist/core/workspace-skills-workflow.integration.test.d.ts.map +0 -1
  580. package/dist/core/workspace-skills-workflow.integration.test.js +0 -177
  581. package/dist/core/workspace-skills-workflow.integration.test.js.map +0 -1
  582. package/dist/core/workspace-state.test.d.ts +0 -2
  583. package/dist/core/workspace-state.test.d.ts.map +0 -1
  584. package/dist/core/workspace-state.test.js +0 -84
  585. package/dist/core/workspace-state.test.js.map +0 -1
  586. package/dist/core/workspace.create.test.d.ts +0 -2
  587. package/dist/core/workspace.create.test.d.ts.map +0 -1
  588. package/dist/core/workspace.create.test.js +0 -224
  589. package/dist/core/workspace.create.test.js.map +0 -1
  590. package/dist/core/workspace.test.d.ts +0 -2
  591. package/dist/core/workspace.test.d.ts.map +0 -1
  592. package/dist/core/workspace.test.js +0 -53
  593. package/dist/core/workspace.test.js.map +0 -1
  594. package/dist/core/worktree.test.d.ts +0 -2
  595. package/dist/core/worktree.test.d.ts.map +0 -1
  596. package/dist/core/worktree.test.js +0 -153
  597. package/dist/core/worktree.test.js.map +0 -1
  598. package/dist/generators/base.test.d.ts +0 -2
  599. package/dist/generators/base.test.d.ts.map +0 -1
  600. package/dist/generators/base.test.js +0 -287
  601. package/dist/generators/base.test.js.map +0 -1
  602. package/dist/generators/knowledge-migration.test.d.ts +0 -2
  603. package/dist/generators/knowledge-migration.test.d.ts.map +0 -1
  604. package/dist/generators/knowledge-migration.test.js +0 -22
  605. package/dist/generators/knowledge-migration.test.js.map +0 -1
  606. package/dist/generators/plan-generator.test.d.ts +0 -2
  607. package/dist/generators/plan-generator.test.d.ts.map +0 -1
  608. package/dist/generators/plan-generator.test.js +0 -220
  609. package/dist/generators/plan-generator.test.js.map +0 -1
  610. package/dist/generators/skills-generator.test.d.ts +0 -2
  611. package/dist/generators/skills-generator.test.d.ts.map +0 -1
  612. package/dist/generators/skills-generator.test.js +0 -79
  613. package/dist/generators/skills-generator.test.js.map +0 -1
  614. package/dist/gui/assets/AgentsPage-B4fx43rd.js +0 -3
  615. package/dist/gui/assets/CSPContext-DBUu9tE0.js +0 -1
  616. package/dist/gui/assets/DashboardPage-DH52G8IG.js +0 -1
  617. package/dist/gui/assets/GettingStartedPage-BlTrQhvi.js +0 -1
  618. package/dist/gui/assets/ProjectsPage-BPVSLPXv.js +0 -1
  619. package/dist/gui/assets/ScaffoldRepoInline-ywcpq9PX.js +0 -1
  620. package/dist/gui/assets/SettingsPage-RQr8SalV.js +0 -1
  621. package/dist/gui/assets/SkillsPage-CYoSRrwx.js +0 -6
  622. package/dist/gui/assets/StartWorkPage-DBKK4lFi.js +0 -1
  623. package/dist/gui/assets/WorkspacesPage-DxEONvSq.js +0 -6
  624. package/dist/gui/assets/alert-dialog-CQAX2yRx.js +0 -1
  625. package/dist/gui/assets/badge-CAohJGj6.js +0 -1
  626. package/dist/gui/assets/bot-C2HWrAft.js +0 -1
  627. package/dist/gui/assets/button-BDDZnIHx.js +0 -1
  628. package/dist/gui/assets/card-BKXzd_5L.js +0 -1
  629. package/dist/gui/assets/chevron-down-qTL8HPug.js +0 -1
  630. package/dist/gui/assets/cpu-Cdwd84Jz.js +0 -1
  631. package/dist/gui/assets/empty-BdlgbifD.js +0 -1
  632. package/dist/gui/assets/index-BF6pre6G.css +0 -2
  633. package/dist/gui/assets/index-C_rwnBzF.js +0 -52
  634. package/dist/gui/assets/isElementDisabled-uy_EOitH.js +0 -1
  635. package/dist/gui/assets/label-CG5exjag.js +0 -1
  636. package/dist/gui/assets/square-DlIYnlSq.js +0 -1
  637. package/dist/gui/assets/textarea-ByfoCb54.js +0 -1
  638. package/dist/gui/assets/useAriaLabelledBy-ClesgjMe.js +0 -1
  639. package/dist/gui/assets/useValueChanged-DeYvGnKs.js +0 -1
  640. package/dist/gui/assets/zap-CWG_Lvki.js +0 -1
  641. package/dist/harness/contract.test.d.ts +0 -2
  642. package/dist/harness/contract.test.d.ts.map +0 -1
  643. package/dist/harness/contract.test.js +0 -426
  644. package/dist/harness/contract.test.js.map +0 -1
  645. package/dist/harness/harness.test.d.ts +0 -2
  646. package/dist/harness/harness.test.d.ts.map +0 -1
  647. package/dist/harness/harness.test.js +0 -215
  648. package/dist/harness/harness.test.js.map +0 -1
  649. package/dist/mcp/tools.test.d.ts +0 -2
  650. package/dist/mcp/tools.test.d.ts.map +0 -1
  651. package/dist/mcp/tools.test.js +0 -194
  652. package/dist/mcp/tools.test.js.map +0 -1
  653. package/dist/orchestration/log-tail.test.d.ts +0 -2
  654. package/dist/orchestration/log-tail.test.d.ts.map +0 -1
  655. package/dist/orchestration/log-tail.test.js +0 -72
  656. package/dist/orchestration/log-tail.test.js.map +0 -1
  657. package/dist/orchestration/orchestrator.test.d.ts +0 -2
  658. package/dist/orchestration/orchestrator.test.d.ts.map +0 -1
  659. package/dist/orchestration/orchestrator.test.js +0 -85
  660. package/dist/orchestration/orchestrator.test.js.map +0 -1
  661. package/dist/orchestration/runner.test.d.ts +0 -2
  662. package/dist/orchestration/runner.test.d.ts.map +0 -1
  663. package/dist/orchestration/runner.test.js +0 -233
  664. package/dist/orchestration/runner.test.js.map +0 -1
  665. package/dist/resources/agents-catalog.test.d.ts +0 -2
  666. package/dist/resources/agents-catalog.test.d.ts.map +0 -1
  667. package/dist/resources/agents-catalog.test.js +0 -50
  668. package/dist/resources/agents-catalog.test.js.map +0 -1
  669. package/dist/resources/codex-agent.test.d.ts +0 -2
  670. package/dist/resources/codex-agent.test.d.ts.map +0 -1
  671. package/dist/resources/codex-agent.test.js +0 -27
  672. package/dist/resources/codex-agent.test.js.map +0 -1
  673. package/dist/resources/materializer.test.d.ts +0 -2
  674. package/dist/resources/materializer.test.d.ts.map +0 -1
  675. package/dist/resources/materializer.test.js +0 -149
  676. package/dist/resources/materializer.test.js.map +0 -1
  677. package/dist/resources/service.test.d.ts +0 -2
  678. package/dist/resources/service.test.d.ts.map +0 -1
  679. package/dist/resources/service.test.js +0 -58
  680. package/dist/resources/service.test.js.map +0 -1
  681. package/dist/server.test.d.ts +0 -2
  682. package/dist/server.test.d.ts.map +0 -1
  683. package/dist/server.test.js +0 -1697
  684. package/dist/server.test.js.map +0 -1
  685. package/dist/utils/detect-ai.test.d.ts +0 -2
  686. package/dist/utils/detect-ai.test.d.ts.map +0 -1
  687. package/dist/utils/detect-ai.test.js +0 -70
  688. package/dist/utils/detect-ai.test.js.map +0 -1
  689. package/dist/utils/detect-editors.test.d.ts +0 -2
  690. package/dist/utils/detect-editors.test.d.ts.map +0 -1
  691. package/dist/utils/detect-editors.test.js +0 -85
  692. package/dist/utils/detect-editors.test.js.map +0 -1
  693. package/dist/utils/git.test.d.ts +0 -2
  694. package/dist/utils/git.test.d.ts.map +0 -1
  695. package/dist/utils/git.test.js +0 -125
  696. package/dist/utils/git.test.js.map +0 -1
  697. package/dist/utils/multi-git.test.d.ts +0 -2
  698. package/dist/utils/multi-git.test.d.ts.map +0 -1
  699. package/dist/utils/multi-git.test.js +0 -330
  700. package/dist/utils/multi-git.test.js.map +0 -1
  701. package/dist/utils/pr.test.d.ts +0 -2
  702. package/dist/utils/pr.test.d.ts.map +0 -1
  703. package/dist/utils/pr.test.js +0 -47
  704. package/dist/utils/pr.test.js.map +0 -1
  705. package/dist/utils/session-finder.test.d.ts +0 -2
  706. package/dist/utils/session-finder.test.d.ts.map +0 -1
  707. package/dist/utils/session-finder.test.js +0 -304
  708. package/dist/utils/session-finder.test.js.map +0 -1
  709. package/dist/utils/skills-catalog.test.d.ts +0 -2
  710. package/dist/utils/skills-catalog.test.d.ts.map +0 -1
  711. package/dist/utils/skills-catalog.test.js +0 -281
  712. package/dist/utils/skills-catalog.test.js.map +0 -1
  713. package/dist/utils/system-scanner.test.d.ts +0 -2
  714. package/dist/utils/system-scanner.test.d.ts.map +0 -1
  715. package/dist/utils/system-scanner.test.js +0 -73
  716. package/dist/utils/system-scanner.test.js.map +0 -1
  717. package/dist/utils/terminal-launch.test.d.ts +0 -2
  718. package/dist/utils/terminal-launch.test.d.ts.map +0 -1
  719. package/dist/utils/terminal-launch.test.js +0 -117
  720. package/dist/utils/terminal-launch.test.js.map +0 -1
  721. package/dist/utils/update-check.test.d.ts +0 -2
  722. package/dist/utils/update-check.test.d.ts.map +0 -1
  723. package/dist/utils/update-check.test.js +0 -30
  724. package/dist/utils/update-check.test.js.map +0 -1
  725. package/dist/utils/workflows.test.d.ts +0 -2
  726. package/dist/utils/workflows.test.d.ts.map +0 -1
  727. package/dist/utils/workflows.test.js +0 -86
  728. package/dist/utils/workflows.test.js.map +0 -1
  729. package/dist/utils/workspace-launch.test.d.ts +0 -2
  730. package/dist/utils/workspace-launch.test.d.ts.map +0 -1
  731. package/dist/utils/workspace-launch.test.js +0 -128
  732. package/dist/utils/workspace-launch.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrpatronz/nexusflow",
3
- "version": "2.8.1",
3
+ "version": "2.10.0",
4
4
  "description": "Combine multiple repos into a workspace with rich AI assistant context",
5
5
  "type": "module",
6
6
  "repository": {
@@ -9,6 +9,9 @@
9
9
  },
10
10
  "main": "dist/index.js",
11
11
  "bin": {
12
+ "ctxspace": "dist/index.js",
13
+ "contextspace": "dist/index.js",
14
+ "cs": "dist/index.js",
12
15
  "nexusflow": "dist/index.js"
13
16
  },
14
17
  "files": [
@@ -22,6 +25,7 @@
22
25
  "scripts": {
23
26
  "build": "tsc && node scripts/copy-resources.mjs && npm run build --prefix gui",
24
27
  "build:backend": "tsc && node scripts/copy-resources.mjs",
28
+ "setup": "npm install --prefix gui && npm install --prefix desktop && npm run setup --prefix desktop && npm install --prefix extension",
25
29
  "version": "node scripts/sync-version.mjs && git add -A",
26
30
  "dev": "tsc --watch",
27
31
  "start": "node dist/index.js",
@@ -48,32 +52,34 @@
48
52
  "author": "MrPatronHogia",
49
53
  "license": "MIT",
50
54
  "engines": {
51
- "node": ">=20"
55
+ "node": ">=22.13.0"
52
56
  },
53
57
  "dependencies": {
54
- "@agentclientprotocol/sdk": "1.3.0",
55
- "@anthropic-ai/claude-agent-sdk": "0.3.239",
56
- "@anthropic-ai/sdk": "^0.116.0",
58
+ "@agentclientprotocol/sdk": "1.4.0",
59
+ "@anthropic-ai/claude-agent-sdk": "0.3.258",
60
+ "@anthropic-ai/sdk": "^0.123.0",
57
61
  "@google/genai": "^2.10.0",
58
62
  "@hono/node-server": "^2.0.8",
59
63
  "@hono/node-ws": "^1.3.1",
60
64
  "@inquirer/prompts": "^8.5.2",
61
- "@modelcontextprotocol/sdk": "^1.29.0",
62
- "@openai/codex-sdk": "0.149.0",
63
- "chalk": "^5.6.2",
65
+ "@modelcontextprotocol/sdk": "^1.30.0",
66
+ "@openai/codex-sdk": "0.152.1",
67
+ "chalk": "^6.0.0",
64
68
  "commander": "^15.0.0",
65
- "execa": "^9.6.1",
69
+ "execa": "^10.0.1",
66
70
  "fs-extra": "^11.3.6",
67
71
  "globby": "^16.2.0",
68
72
  "hono": "^4.12.27",
69
73
  "js-yaml": "^5.2.3",
70
- "openai": "^6.45.0",
74
+ "openai": "^7.9.0",
71
75
  "ora": "^9.4.1",
72
76
  "pm2": "^7.0.3",
77
+ "selfsigned": "5.5.0",
73
78
  "smol-toml": "^1.8.0",
74
79
  "zod": "^4.4.3"
75
80
  },
76
81
  "overrides": {
82
+ "@hono/node-server": "$@hono/node-server",
77
83
  "@hono/node-ws": {
78
84
  "@hono/node-server": "$@hono/node-server"
79
85
  }
@@ -0,0 +1,95 @@
1
+ # Cost-Aware Sol Control + Luna Worker
2
+
3
+ Use a cheaper Luna/max worker for bounded implementation and a more capable,
4
+ expensive Sol worker for independent review in a fresh context. Accepted review
5
+ feedback returns to the same cheaper builder until the explicit acceptance
6
+ criteria are met.
7
+
8
+ ## Capability boundary
9
+
10
+ This is an advisory coordination strategy. ContextSpace stores and injects these
11
+ instructions but does not itself launch roles, enforce model, cost tier, or
12
+ reasoning-effort selection, guarantee provider pricing/capability, create a
13
+ fresh reviewer context, track acceptance, or wait for provider rate-limit
14
+ resets. The developer or selected agent harness must perform and verify those
15
+ controls. “Cheaper” and “more capable/expensive” describe the requested role
16
+ relationship; they are not a claim about a provider's current pricing or
17
+ models. If the harness cannot assign the required role settings, create an
18
+ independent context, or observe the safety guard, stop and ask the human
19
+ instead of claiming this strategy was enforced.
20
+
21
+ ## Required role configuration
22
+
23
+ | Role | Cost/capability target | Model | Reasoning effort | Workspace access |
24
+ | --- | --- | --- | --- | --- |
25
+ | Inspector and planner | Read-only planning gate | `gpt-5.6-sol` | `high` or above | Read-only |
26
+ | Implementation builder | Cheaper model | `gpt-5.6-luna` | `max` | Workspace write |
27
+ | Independent reviewer | More capable/expensive model | `gpt-5.6-sol` | `high` or above | Read-only |
28
+
29
+ The coordinator may be the inspector and planner. The reviewer must start with
30
+ a fresh context after every builder pass, must not edit files, and must not be
31
+ the builder's conversation. Sol may write code only after explicit human
32
+ approval.
33
+
34
+ ## Acceptance contract
35
+
36
+ Before the first builder pass, the coordinator records observable acceptance
37
+ criteria in the work packet. At minimum, criteria cover:
38
+
39
+ - the requested behavior and its important edge cases;
40
+ - targeted tests and relevant regression checks, with the evidence required to
41
+ pass them;
42
+ - security, data-safety, and capability-boundary invariants; and
43
+ - the exact in-scope paths, non-goals, and documentation obligations.
44
+
45
+ The reviewer returns one of these explicit verdicts:
46
+
47
+ - **ACCEPTED** — every required criterion is met with evidence and no
48
+ unresolved finding violates the contract;
49
+ - **CHANGES REQUESTED** — one or more criteria are unmet, with each actionable
50
+ finding identified by severity, criterion, evidence, and expected behavior;
51
+ or
52
+ - **BLOCKED** — the reviewer cannot independently verify the contract (for
53
+ example, the required context, tests, role, or provider is unavailable).
54
+
55
+ The coordinator triages findings against the work packet. Only feedback that
56
+ is accepted as in-scope is sent to the same Luna builder; disputed or
57
+ out-of-scope feedback is documented and escalated to the human.
58
+
59
+ ## Workflow
60
+
61
+ 1. **Inspect and plan with Sol**
62
+ - Read the repository instructions, relevant code, tests, and current diff.
63
+ - Produce a bounded work packet containing the outcome, exact scope and paths, invariants, acceptance tests, non-goals, risks, and recovery notes.
64
+ - Split large features into independently verifiable vertical slices. Do not send the worker an open-ended request to explore the whole repository.
65
+ 2. **Implement with one Luna/max worker**
66
+ - Give the worker the work packet plus only the context needed for the current slice.
67
+ - Keep a single writer. Do not run parallel writers against the same checkout.
68
+ - Require concise checkpoints listing changed files, verification run, and blockers. Reuse this worker for fixes instead of creating another implementation session.
69
+ 3. **Review with fresh Sol**
70
+ - Freeze the diff and give the reviewer the work packet, changed paths, and verification evidence.
71
+ - Ask for correctness, security, regression, boundary, and missing-test findings using the verdicts in the acceptance contract. Each finding must include severity, criterion, location, evidence, and expected behavior.
72
+ - The reviewer reports only; the Luna worker applies accepted fixes.
73
+ 4. **Return accepted feedback to Luna**
74
+ - For **CHANGES REQUESTED**, send only the accepted, in-scope findings to the same Luna builder. Require a checkpoint with changed paths, verification output, and which criteria are now satisfied.
75
+ - Rerun affected verification after every fix, freeze the new diff, and start another fresh Sol review. Do not silently switch writers or reuse the reviewer's context.
76
+ 5. **Terminate or escalate from the verdict**
77
+ - **ACCEPTED** is the only automatic success/termination path. Finish with the criteria evidence, files changed, checks run, review verdict, and remaining risks.
78
+ - On **BLOCKED**, a missing role/context/provider, conflicting feedback, or no measurable progress on a repeated finding, pause and ask the human whether to restore the prerequisite, revise the scope/criteria, accept a documented risk, or continue.
79
+ - Before work starts, the coordinator must record at least one finite safety guard (for example an iteration, wall-clock, token, or cost budget) and checkpoint each pass against it. Reaching the guard pauses the workflow and requires an explicit human decision; it never auto-accepts, silently continues, or silently abandons unmet criteria. A guard is a safety escalation, not a substitute for acceptance, so there is no arbitrary fixed correction-loop cutoff.
80
+
81
+ ## Rate-limit and cost rules
82
+
83
+ - Reuse active role sessions and checkpoint before pausing. A timeout or delayed response is not permission to create a duplicate agent.
84
+ - If a role is rate-limited, preserve its work packet and wait for that role to become available or ask the human for a named substitute. Do not claim an acceptance verdict while the independent reviewer is unavailable. Manual work may continue from the same packet only when it preserves the role and acceptance contract.
85
+ - If Luna is unavailable, ask the human before using `gpt-5.6-terra` at `max` as the implementation worker.
86
+ - Never silently upgrade implementation to Sol. If Sol is unavailable for planning or independent review, pause at that gate or request explicit human approval for a named substitute.
87
+ - Keep raw logs, repeated repository summaries, and broad file dumps out of handoffs. Prefer exact paths, decisions, diffs, and test results.
88
+
89
+ ## Manual cooperation
90
+
91
+ A developer may perform any role manually. Record the same work packet, safety
92
+ guard, builder checkpoints, and review verdicts so another developer or agent
93
+ can take the next turn without reconstructing the session. In a Workroom,
94
+ publish the strategy and update shared plan, decision, handoff, and workflow
95
+ evidence; source code and diffs remain in each developer's local checkout.
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AcpCliAdapter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AcpCliAdapter.test.d.ts","sourceRoot":"","sources":["../../src/agent/AcpCliAdapter.test.ts"],"names":[],"mappings":""}
@@ -1,235 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { fileURLToPath } from 'node:url';
3
- import { describe, expect, it, vi } from 'vitest';
4
- import { AcpCliAdapter, decideReadOnlyPermission, isSafeAcpSessionId, } from './AcpCliAdapter.js';
5
- import { buildCopilotAcpArgs } from './CopilotAcpAdapter.js';
6
- const SESSION_ID = '123e4567-e89b-12d3-a456-426614174000';
7
- class FakeChild extends EventEmitter {
8
- stdin = { end: vi.fn() };
9
- stdout = new EventEmitter();
10
- stderr = new EventEmitter();
11
- killed = false;
12
- exitCode = null;
13
- pid;
14
- }
15
- function makeConnection(overrides = {}) {
16
- return {
17
- initialize: vi.fn().mockResolvedValue({
18
- protocolVersion: 1,
19
- agentCapabilities: { loadSession: true },
20
- }),
21
- newSession: vi.fn().mockResolvedValue({ sessionId: SESSION_ID }),
22
- loadSession: vi.fn().mockResolvedValue({}),
23
- prompt: vi.fn().mockResolvedValue({ stopReason: 'end_turn' }),
24
- cancel: vi.fn().mockResolvedValue(undefined),
25
- close: vi.fn().mockResolvedValue(undefined),
26
- closed: new Promise(() => { }),
27
- ...overrides,
28
- };
29
- }
30
- function makeHarness(connection) {
31
- const child = new FakeChild();
32
- let client;
33
- const factory = vi.fn((options) => {
34
- client = options.client;
35
- return { process: child, connection };
36
- });
37
- const harness = new AcpCliAdapter({
38
- executable: 'copilot',
39
- args: buildCopilotAcpArgs(),
40
- label: 'GitHub Copilot CLI',
41
- loginCommand: 'copilot login',
42
- validateSessionId: (id) => id === SESSION_ID,
43
- transportFactory: factory,
44
- });
45
- return { harness, child, factory, getClient: () => client };
46
- }
47
- describe('Copilot ACP profile', () => {
48
- it('starts stdio ACP with only read/search tools and no remote or MCP surface', () => {
49
- expect(buildCopilotAcpArgs()).toEqual([
50
- '--acp',
51
- '--stdio',
52
- '--available-tools=view,glob,grep',
53
- '--disable-builtin-mcps',
54
- '--no-ask-user',
55
- '--no-auto-update',
56
- '--no-remote',
57
- '--no-remote-export',
58
- ]);
59
- });
60
- });
61
- describe('read-only ACP permissions', () => {
62
- const options = [
63
- { optionId: 'allow', name: 'Allow once', kind: 'allow_once' },
64
- { optionId: 'reject', name: 'Reject once', kind: 'reject_once' },
65
- ];
66
- it.each(['read', 'search', 'edit', 'delete', 'move', 'execute', 'fetch', 'other'])('rejects every escalated %s operation', (kind) => {
67
- expect(decideReadOnlyPermission({
68
- sessionId: SESSION_ID,
69
- toolCall: { toolCallId: 'tool', kind },
70
- options,
71
- })).toEqual({ outcome: { outcome: 'selected', optionId: 'reject' } });
72
- });
73
- it('cancels when the provider offers no policy-compatible option', () => {
74
- expect(decideReadOnlyPermission({
75
- sessionId: SESSION_ID,
76
- toolCall: { toolCallId: 'tool', kind: 'edit' },
77
- options: [{ optionId: 'allow', name: 'Allow', kind: 'allow_always' }],
78
- })).toEqual({ outcome: { outcome: 'cancelled' } });
79
- });
80
- });
81
- describe('AcpCliAdapter', () => {
82
- it('exchanges a streamed turn with a real ACP subprocess', async () => {
83
- const fixturePath = fileURLToPath(new URL('./fixtures/fake-acp-agent.mjs', import.meta.url));
84
- const harness = new AcpCliAdapter({
85
- executable: process.execPath,
86
- args: [fixturePath],
87
- label: 'Fake ACP',
88
- validateSessionId: (id) => id === SESSION_ID,
89
- });
90
- const output = [];
91
- harness.on('data', (text) => output.push(text));
92
- await harness.start(process.cwd());
93
- await harness.send('hello');
94
- harness.stop();
95
- expect(output).toEqual(['real ACP response']);
96
- });
97
- it('creates a provider session and streams only agent text', async () => {
98
- let client;
99
- const connection = makeConnection({
100
- prompt: vi.fn(async () => {
101
- await client.sessionUpdate({
102
- sessionId: SESSION_ID,
103
- update: {
104
- sessionUpdate: 'agent_message_chunk',
105
- content: { type: 'text', text: 'Hello from Copilot' },
106
- },
107
- });
108
- return { stopReason: 'end_turn' };
109
- }),
110
- });
111
- const fixture = makeHarness(connection);
112
- const sessions = [];
113
- const output = [];
114
- fixture.harness.on('session', (id) => sessions.push(id));
115
- fixture.harness.on('data', (text) => output.push(text));
116
- const start = fixture.harness.start('C:\\workspace');
117
- client = fixture.getClient();
118
- await start;
119
- await fixture.harness.send('Explain this repo');
120
- expect(sessions).toEqual([SESSION_ID]);
121
- expect(output).toEqual(['Hello from Copilot']);
122
- expect(connection.newSession).toHaveBeenCalledWith({ cwd: 'C:\\workspace', mcpServers: [] });
123
- expect(connection.prompt).toHaveBeenCalledWith({
124
- sessionId: SESSION_ID,
125
- prompt: [{ type: 'text', text: 'Explain this repo' }],
126
- });
127
- });
128
- it('loads an existing session without replaying its history into the persisted chat', async () => {
129
- let client;
130
- const connection = makeConnection({
131
- loadSession: vi.fn(async () => {
132
- await client.sessionUpdate({
133
- sessionId: SESSION_ID,
134
- update: {
135
- sessionUpdate: 'agent_message_chunk',
136
- content: { type: 'text', text: 'old replayed answer' },
137
- },
138
- });
139
- return {};
140
- }),
141
- });
142
- const fixture = makeHarness(connection);
143
- const output = [];
144
- fixture.harness.on('data', (text) => output.push(text));
145
- const start = fixture.harness.start('C:\\workspace', { id: SESSION_ID, resume: true });
146
- client = fixture.getClient();
147
- await start;
148
- expect(connection.loadSession).toHaveBeenCalledWith({
149
- sessionId: SESSION_ID,
150
- cwd: 'C:\\workspace',
151
- mcpServers: [],
152
- });
153
- expect(connection.newSession).not.toHaveBeenCalled();
154
- expect(output).toEqual([]);
155
- });
156
- it('turns ACP authentication failures into login guidance', async () => {
157
- const connection = makeConnection({
158
- newSession: vi.fn().mockRejectedValue(new Error('auth_required')),
159
- });
160
- const { harness } = makeHarness(connection);
161
- const errors = [];
162
- harness.on('error', (error) => errors.push(error.message));
163
- await harness.start('C:\\workspace');
164
- expect(errors).toEqual([
165
- 'GitHub Copilot CLI is not signed in. Run `copilot login` in a terminal, then try again.',
166
- ]);
167
- });
168
- it('rejects invalid provider session ids before exposing them to the renderer', async () => {
169
- const connection = makeConnection({
170
- newSession: vi.fn().mockResolvedValue({ sessionId: 'not-the-expected-id' }),
171
- });
172
- const { harness } = makeHarness(connection);
173
- const errors = [];
174
- harness.on('error', (error) => errors.push(error.message));
175
- await harness.start('C:\\workspace');
176
- expect(errors[0]).toMatch(/invalid session id/i);
177
- });
178
- it('reports a successful turn with no recognizable message', async () => {
179
- const { harness } = makeHarness(makeConnection());
180
- const errors = [];
181
- harness.on('error', (error) => errors.push(error.message));
182
- await harness.start('C:\\workspace');
183
- await harness.send('Say something');
184
- expect(errors).toEqual([
185
- 'GitHub Copilot CLI ended without a recognizable response. Update the harness and try again.',
186
- ]);
187
- });
188
- it('cancels the active ACP turn before closing the transport', async () => {
189
- let finishPrompt;
190
- const connection = makeConnection({
191
- prompt: vi.fn(() => new Promise((resolve) => {
192
- finishPrompt = resolve;
193
- })),
194
- });
195
- const { harness } = makeHarness(connection);
196
- await harness.start('C:\\workspace');
197
- const sending = harness.send('Long task');
198
- await vi.waitFor(() => expect(connection.prompt).toHaveBeenCalled());
199
- harness.stop();
200
- await vi.waitFor(() => expect(connection.cancel).toHaveBeenCalledWith({ sessionId: SESSION_ID }));
201
- finishPrompt({ stopReason: 'cancelled' });
202
- await sending;
203
- });
204
- it('does not publish idle for a process failure until the active prompt settles', async () => {
205
- let rejectPrompt;
206
- const connection = makeConnection({
207
- prompt: vi.fn(() => new Promise((_resolve, reject) => {
208
- rejectPrompt = reject;
209
- })),
210
- });
211
- const { harness, child } = makeHarness(connection);
212
- const errors = [];
213
- const idle = [];
214
- harness.on('error', (error) => errors.push(error.message));
215
- harness.on('idle', () => idle.push(1));
216
- await harness.start('C:\\workspace');
217
- const sending = harness.send('Long task');
218
- await vi.waitFor(() => expect(connection.prompt).toHaveBeenCalled());
219
- child.emit('error', new Error('transport broke'));
220
- expect(errors).toEqual(['GitHub Copilot CLI failed: transport broke']);
221
- expect(idle).toEqual([]);
222
- rejectPrompt(new Error('connection closed'));
223
- await sending;
224
- expect(errors).toEqual(['GitHub Copilot CLI failed: transport broke']);
225
- expect(idle).toHaveLength(1);
226
- });
227
- });
228
- describe('isSafeAcpSessionId', () => {
229
- it('accepts bounded opaque ids and rejects control characters', () => {
230
- expect(isSafeAcpSessionId('ses_abc-123')).toBe(true);
231
- expect(isSafeAcpSessionId('ses_abc\n123')).toBe(false);
232
- expect(isSafeAcpSessionId('x'.repeat(201))).toBe(false);
233
- });
234
- });
235
- //# sourceMappingURL=AcpCliAdapter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AcpCliAdapter.test.js","sourceRoot":"","sources":["../../src/agent/AcpCliAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AntigravityCliAdapter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AntigravityCliAdapter.test.d.ts","sourceRoot":"","sources":["../../src/agent/AntigravityCliAdapter.test.ts"],"names":[],"mappings":""}
@@ -1,222 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import * as os from 'node:os';
4
- import { EventEmitter } from 'node:events';
5
- import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';
6
- import { AntigravityCliAdapter, buildAntigravityTurnArgs, findAntigravitySessionIdForWorkspace, } from './AntigravityCliAdapter.js';
7
- const SESSION_ID = '123e4567-e89b-42d3-a456-426614174000';
8
- const CAPTURED_SESSION_ID = '987fcdeb-51a2-43d7-b654-321098765432';
9
- class FakeChild extends EventEmitter {
10
- stdin = { write: vi.fn(), end: vi.fn() };
11
- stdout = new EventEmitter();
12
- stderr = new EventEmitter();
13
- killed = false;
14
- exitCode = null;
15
- pid;
16
- }
17
- class TestAntigravityCliAdapter extends AntigravityCliAdapter {
18
- processes = [];
19
- spawnProcess(args) {
20
- const child = new FakeChild();
21
- this.processes.push({ args, child });
22
- return child;
23
- }
24
- }
25
- describe('buildAntigravityTurnArgs', () => {
26
- it('builds first turn arguments without session', () => {
27
- expect(buildAntigravityTurnArgs(true, 'hello world')).toEqual([
28
- '--mode',
29
- 'plan',
30
- '-p',
31
- 'hello world',
32
- ]);
33
- });
34
- it('builds subsequent turn arguments without session', () => {
35
- expect(buildAntigravityTurnArgs(false, 'next prompt')).toEqual([
36
- '-c',
37
- '--mode',
38
- 'plan',
39
- '-p',
40
- 'next prompt',
41
- ]);
42
- });
43
- it('does not treat a caller-provided ID as a new Antigravity conversation', () => {
44
- expect(buildAntigravityTurnArgs(true, 'hello world', { id: SESSION_ID, resume: false })).toEqual([
45
- '--mode',
46
- 'plan',
47
- '-p',
48
- 'hello world',
49
- ]);
50
- });
51
- it('builds resumed session arguments', () => {
52
- expect(buildAntigravityTurnArgs(true, 'resumed prompt', { id: SESSION_ID, resume: true })).toEqual([
53
- '--conversation',
54
- SESSION_ID,
55
- '--mode',
56
- 'plan',
57
- '-p',
58
- 'resumed prompt',
59
- ]);
60
- });
61
- it('applies workspace-write execution profile with session', () => {
62
- expect(buildAntigravityTurnArgs(true, 'edit prompt', { id: SESSION_ID, resume: true }, 'workspace-write')).toEqual([
63
- '--conversation',
64
- SESSION_ID,
65
- '--mode',
66
- 'accept-edits',
67
- '-p',
68
- 'edit prompt',
69
- ]);
70
- });
71
- it('applies workspace-write execution profile without session', () => {
72
- expect(buildAntigravityTurnArgs(true, 'edit prompt', undefined, 'workspace-write')).toEqual([
73
- '--mode',
74
- 'accept-edits',
75
- '-p',
76
- 'edit prompt',
77
- ]);
78
- expect(buildAntigravityTurnArgs(false, 'edit prompt 2', undefined, 'workspace-write')).toEqual([
79
- '-c',
80
- '--mode',
81
- 'accept-edits',
82
- '-p',
83
- 'edit prompt 2',
84
- ]);
85
- });
86
- });
87
- describe('findAntigravitySessionIdForWorkspace', () => {
88
- let tmpDir;
89
- let historyFile;
90
- beforeEach(() => {
91
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ag-test-'));
92
- historyFile = path.join(tmpDir, 'history.jsonl');
93
- });
94
- afterEach(() => {
95
- fs.rmSync(tmpDir, { recursive: true, force: true });
96
- });
97
- it('returns null if history file does not exist', () => {
98
- expect(findAntigravitySessionIdForWorkspace('/my/workspace', Date.now(), historyFile)).toBeNull();
99
- });
100
- it('locates the newest session matching the workspace directory within timestamp window', () => {
101
- const now = Date.now();
102
- const ws = path.join(tmpDir, 'workspace');
103
- const lines = [
104
- JSON.stringify({
105
- display: 'old session',
106
- timestamp: now - 50000,
107
- workspace: ws,
108
- conversationId: '00000000-0000-0000-0000-000000000001',
109
- }),
110
- JSON.stringify({
111
- display: 'other workspace',
112
- timestamp: now,
113
- workspace: path.join(tmpDir, 'other'),
114
- conversationId: '00000000-0000-0000-0000-000000000002',
115
- }),
116
- JSON.stringify({
117
- display: 'new matching session',
118
- timestamp: now + 50,
119
- workspace: ws,
120
- conversationId: CAPTURED_SESSION_ID,
121
- }),
122
- ];
123
- fs.writeFileSync(historyFile, lines.join('\n'), 'utf-8');
124
- const result = findAntigravitySessionIdForWorkspace(ws, now, historyFile);
125
- expect(result).toBe(CAPTURED_SESSION_ID);
126
- });
127
- it('ignores invalid conversation IDs', () => {
128
- const now = Date.now();
129
- const ws = path.join(tmpDir, 'workspace');
130
- const lines = [
131
- JSON.stringify({
132
- display: 'bad id session',
133
- timestamp: now,
134
- workspace: ws,
135
- conversationId: 'not-a-uuid',
136
- }),
137
- ];
138
- fs.writeFileSync(historyFile, lines.join('\n'), 'utf-8');
139
- expect(findAntigravitySessionIdForWorkspace(ws, now, historyFile)).toBeNull();
140
- });
141
- });
142
- describe('AntigravityCliAdapter lifecycle', () => {
143
- let tmpHome;
144
- const originalAgHome = process.env.ANTIGRAVITY_HOME;
145
- beforeEach(() => {
146
- tmpHome = fs.mkdtempSync(path.join(os.tmpdir(), 'ag-home-'));
147
- process.env.ANTIGRAVITY_HOME = tmpHome;
148
- });
149
- afterEach(() => {
150
- if (originalAgHome !== undefined) {
151
- process.env.ANTIGRAVITY_HOME = originalAgHome;
152
- }
153
- else {
154
- delete process.env.ANTIGRAVITY_HOME;
155
- }
156
- fs.rmSync(tmpHome, { recursive: true, force: true });
157
- });
158
- it('resumes an existing provider-assigned session', async () => {
159
- const adapter = new TestAntigravityCliAdapter();
160
- const sessionEvents = [];
161
- adapter.on('session', (id) => sessionEvents.push(id));
162
- await adapter.start('/workspace', { id: SESSION_ID, resume: true });
163
- await adapter.send('first message', 'workspace-write');
164
- expect(sessionEvents).toHaveLength(0);
165
- expect(adapter.processes).toHaveLength(1);
166
- expect(adapter.processes[0].args).toEqual([
167
- '--conversation',
168
- SESSION_ID,
169
- '--mode',
170
- 'accept-edits',
171
- '-p',
172
- 'first message',
173
- ]);
174
- });
175
- it('starts a new conversation, captures session identity from history, and pins turn 2 to --conversation', async () => {
176
- const adapter = new TestAntigravityCliAdapter();
177
- const sessionEvents = [];
178
- adapter.on('session', (id) => sessionEvents.push(id));
179
- const workspaceDir = path.join(tmpHome, 'workspace');
180
- await adapter.start(workspaceDir);
181
- await adapter.send('first message');
182
- expect(adapter.processes[0].args).toEqual(['--mode', 'plan', '-p', 'first message']);
183
- // Simulate agy writing to history.jsonl during turn 1
184
- const historyFile = path.join(tmpHome, 'history.jsonl');
185
- fs.writeFileSync(historyFile, JSON.stringify({
186
- display: 'first message',
187
- timestamp: Date.now(),
188
- workspace: workspaceDir,
189
- conversationId: CAPTURED_SESSION_ID,
190
- }), 'utf-8');
191
- // Complete turn 1
192
- adapter.processes[0].child.emit('close', 0);
193
- // Should have captured and emitted the session ID
194
- expect(sessionEvents).toEqual([CAPTURED_SESSION_ID]);
195
- // Second turn must now use --conversation <CAPTURED_SESSION_ID>
196
- await adapter.send('second message');
197
- expect(adapter.processes).toHaveLength(2);
198
- expect(adapter.processes[1].args).toEqual([
199
- '--conversation',
200
- CAPTURED_SESSION_ID,
201
- '--mode',
202
- 'plan',
203
- '-p',
204
- 'second message',
205
- ]);
206
- });
207
- it('gracefully falls back to -c on turn 2 if history is absent', async () => {
208
- const adapter = new TestAntigravityCliAdapter();
209
- const sessionEvents = [];
210
- adapter.on('session', (id) => sessionEvents.push(id));
211
- await adapter.start('/workspace');
212
- await adapter.send('first message');
213
- expect(sessionEvents).toHaveLength(0);
214
- expect(adapter.processes[0].args).toEqual(['--mode', 'plan', '-p', 'first message']);
215
- // Complete turn 1 without writing history
216
- adapter.processes[0].child.emit('close', 0);
217
- // Second turn uses -c
218
- await adapter.send('second message');
219
- expect(adapter.processes[1].args).toEqual(['-c', '--mode', 'plan', '-p', 'second message']);
220
- });
221
- });
222
- //# sourceMappingURL=AntigravityCliAdapter.test.js.map