byterover-cli 2.5.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/.env.production +8 -0
  2. package/LICENSE +44 -0
  3. package/README.md +240 -14
  4. package/bin/dev.js +8 -1
  5. package/bin/run.js +8 -1
  6. package/dist/agent/core/domain/knowledge/conflict-detector.d.ts +38 -0
  7. package/dist/agent/core/domain/knowledge/conflict-detector.js +71 -0
  8. package/dist/agent/core/domain/knowledge/conflict-resolver.d.ts +17 -0
  9. package/dist/agent/core/domain/knowledge/conflict-resolver.js +118 -0
  10. package/dist/agent/core/domain/knowledge/utils.d.ts +4 -0
  11. package/dist/agent/core/domain/knowledge/utils.js +6 -0
  12. package/dist/agent/core/interfaces/i-curate-service.d.ts +6 -0
  13. package/dist/agent/infra/tools/implementations/curate-tool.d.ts +67 -34
  14. package/dist/agent/infra/tools/implementations/curate-tool.js +294 -47
  15. package/dist/agent/resources/prompts/system-prompt.yml +15 -8
  16. package/dist/agent/resources/tools/code_exec.txt +3 -0
  17. package/dist/agent/resources/tools/curate.txt +12 -3
  18. package/dist/oclif/commands/connectors/install.d.ts +2 -1
  19. package/dist/oclif/commands/connectors/install.js +38 -3
  20. package/dist/oclif/commands/curate/index.d.ts +18 -0
  21. package/dist/oclif/commands/curate/index.js +78 -1
  22. package/dist/oclif/commands/init.d.ts +12 -0
  23. package/dist/oclif/commands/init.js +75 -0
  24. package/dist/oclif/commands/locations.js +1 -1
  25. package/dist/oclif/commands/providers/connect.d.ts +31 -1
  26. package/dist/oclif/commands/providers/connect.js +307 -27
  27. package/dist/oclif/commands/pull.d.ts +1 -0
  28. package/dist/oclif/commands/pull.js +7 -0
  29. package/dist/oclif/commands/push.d.ts +1 -0
  30. package/dist/oclif/commands/push.js +8 -0
  31. package/dist/oclif/commands/review/approve.d.ts +17 -0
  32. package/dist/oclif/commands/review/approve.js +37 -0
  33. package/dist/oclif/commands/review/base-review-decision.d.ts +18 -0
  34. package/dist/oclif/commands/review/base-review-decision.js +71 -0
  35. package/dist/oclif/commands/review/pending.d.ts +13 -0
  36. package/dist/oclif/commands/review/pending.js +94 -0
  37. package/dist/oclif/commands/review/reject.d.ts +17 -0
  38. package/dist/oclif/commands/review/reject.js +38 -0
  39. package/dist/oclif/commands/space/list.d.ts +2 -2
  40. package/dist/oclif/commands/space/list.js +13 -35
  41. package/dist/oclif/commands/space/switch.d.ts +2 -7
  42. package/dist/oclif/commands/space/switch.js +13 -56
  43. package/dist/oclif/commands/status.d.ts +1 -0
  44. package/dist/oclif/commands/status.js +11 -1
  45. package/dist/oclif/commands/vc/add.d.ts +7 -0
  46. package/dist/oclif/commands/vc/add.js +29 -0
  47. package/dist/oclif/commands/vc/branch.d.ts +15 -0
  48. package/dist/oclif/commands/vc/branch.js +70 -0
  49. package/dist/oclif/commands/vc/checkout.d.ts +14 -0
  50. package/dist/oclif/commands/vc/checkout.js +47 -0
  51. package/dist/oclif/commands/vc/clone.d.ts +9 -0
  52. package/dist/oclif/commands/vc/clone.js +61 -0
  53. package/dist/oclif/commands/vc/commit.d.ts +10 -0
  54. package/dist/oclif/commands/vc/commit.js +32 -0
  55. package/dist/oclif/commands/vc/config.d.ts +10 -0
  56. package/dist/oclif/commands/vc/config.js +30 -0
  57. package/dist/oclif/commands/vc/fetch.d.ts +10 -0
  58. package/dist/oclif/commands/vc/fetch.js +42 -0
  59. package/dist/oclif/commands/vc/index.d.ts +6 -0
  60. package/dist/oclif/commands/vc/index.js +8 -0
  61. package/dist/oclif/commands/vc/init.d.ts +6 -0
  62. package/dist/oclif/commands/vc/init.js +25 -0
  63. package/dist/oclif/commands/vc/log.d.ts +13 -0
  64. package/dist/oclif/commands/vc/log.js +48 -0
  65. package/dist/oclif/commands/vc/merge.d.ts +19 -0
  66. package/dist/oclif/commands/vc/merge.js +130 -0
  67. package/dist/oclif/commands/vc/pull.d.ts +13 -0
  68. package/dist/oclif/commands/vc/pull.js +60 -0
  69. package/dist/oclif/commands/vc/push.d.ts +13 -0
  70. package/dist/oclif/commands/vc/push.js +60 -0
  71. package/dist/oclif/commands/vc/remote/add.d.ts +10 -0
  72. package/dist/oclif/commands/vc/remote/add.js +30 -0
  73. package/dist/oclif/commands/vc/remote/index.d.ts +6 -0
  74. package/dist/oclif/commands/vc/remote/index.js +16 -0
  75. package/dist/oclif/commands/vc/remote/set-url.d.ts +10 -0
  76. package/dist/oclif/commands/vc/remote/set-url.js +30 -0
  77. package/dist/oclif/commands/vc/reset.d.ts +13 -0
  78. package/dist/oclif/commands/vc/reset.js +62 -0
  79. package/dist/oclif/commands/vc/status.d.ts +8 -0
  80. package/dist/oclif/commands/vc/status.js +106 -0
  81. package/dist/oclif/hooks/init/validate-brv-config.d.ts +26 -0
  82. package/dist/oclif/hooks/init/validate-brv-config.js +62 -0
  83. package/dist/oclif/lib/daemon-client.d.ts +2 -0
  84. package/dist/oclif/lib/daemon-client.js +36 -10
  85. package/dist/oclif/lib/prompt-utils.d.ts +43 -0
  86. package/dist/oclif/lib/prompt-utils.js +84 -0
  87. package/dist/oclif/lib/spinner.d.ts +8 -0
  88. package/dist/oclif/lib/spinner.js +23 -0
  89. package/dist/oclif/lib/task-client.d.ts +5 -0
  90. package/dist/oclif/lib/task-client.js +15 -2
  91. package/dist/server/config/environment.d.ts +2 -19
  92. package/dist/server/config/environment.js +31 -38
  93. package/dist/server/constants.d.ts +3 -9
  94. package/dist/server/constants.js +9 -12
  95. package/dist/server/core/domain/entities/auth-token.d.ts +2 -0
  96. package/dist/server/core/domain/entities/auth-token.js +7 -1
  97. package/dist/server/core/domain/entities/curate-log-entry.d.ts +11 -0
  98. package/dist/server/core/domain/entities/space.d.ts +4 -0
  99. package/dist/server/core/domain/entities/space.js +8 -0
  100. package/dist/server/core/domain/entities/team.d.ts +2 -0
  101. package/dist/server/core/domain/entities/team.js +4 -0
  102. package/dist/server/core/domain/errors/auth-error.d.ts +0 -6
  103. package/dist/server/core/domain/errors/auth-error.js +0 -12
  104. package/dist/server/core/domain/errors/git-error.d.ts +6 -0
  105. package/dist/server/core/domain/errors/git-error.js +12 -0
  106. package/dist/server/core/domain/errors/task-error.d.ts +4 -3
  107. package/dist/server/core/domain/errors/task-error.js +8 -8
  108. package/dist/server/core/domain/errors/transport-error.d.ts +0 -31
  109. package/dist/server/core/domain/errors/transport-error.js +0 -50
  110. package/dist/server/core/domain/errors/vc-error.d.ts +5 -0
  111. package/dist/server/core/domain/errors/vc-error.js +8 -0
  112. package/dist/server/core/domain/knowledge/markdown-writer.d.ts +4 -1
  113. package/dist/server/core/domain/knowledge/markdown-writer.js +37 -7
  114. package/dist/server/core/domain/transport/schemas.d.ts +6 -6
  115. package/dist/server/core/interfaces/context-tree/i-context-tree-service.d.ts +11 -0
  116. package/dist/server/core/interfaces/process/i-task-lifecycle-hook.d.ts +6 -0
  117. package/dist/server/core/interfaces/services/i-git-service.d.ts +234 -0
  118. package/dist/server/core/interfaces/storage/i-curate-log-store.d.ts +5 -0
  119. package/dist/server/core/interfaces/storage/i-review-backup-store.d.ts +19 -0
  120. package/dist/server/core/interfaces/vc/i-vc-git-config-store.d.ts +8 -0
  121. package/dist/server/infra/config/auto-init.d.ts +0 -2
  122. package/dist/server/infra/config/auto-init.js +0 -1
  123. package/dist/server/infra/connectors/rules/rules-connector-config.d.ts +0 -4
  124. package/dist/server/infra/context-tree/file-context-tree-service.d.ts +2 -0
  125. package/dist/server/infra/context-tree/file-context-tree-service.js +13 -0
  126. package/dist/server/infra/daemon/brv-server.js +23 -3
  127. package/dist/server/infra/git/cogit-url.d.ts +17 -0
  128. package/dist/server/infra/git/cogit-url.js +39 -0
  129. package/dist/server/infra/git/git-http-wrapper.d.ts +20 -0
  130. package/dist/server/infra/git/git-http-wrapper.js +334 -0
  131. package/dist/server/infra/git/isomorphic-git-service.d.ts +78 -0
  132. package/dist/server/infra/git/isomorphic-git-service.js +983 -0
  133. package/dist/server/infra/http/models-dev-client.d.ts +0 -4
  134. package/dist/server/infra/http/models-dev-client.js +0 -6
  135. package/dist/server/infra/http/openrouter-api-client.d.ts +0 -8
  136. package/dist/server/infra/http/openrouter-api-client.js +0 -13
  137. package/dist/server/infra/http/provider-model-fetcher-registry.d.ts +0 -5
  138. package/dist/server/infra/http/provider-model-fetcher-registry.js +0 -7
  139. package/dist/server/infra/http/review-api-handler.d.ts +13 -0
  140. package/dist/server/infra/http/review-api-handler.js +286 -0
  141. package/dist/server/infra/http/review-ui.d.ts +7 -0
  142. package/dist/server/infra/http/review-ui.js +606 -0
  143. package/dist/server/infra/mcp/tools/brv-curate-tool.d.ts +2 -2
  144. package/dist/server/infra/process/curate-log-handler.d.ts +18 -2
  145. package/dist/server/infra/process/curate-log-handler.js +50 -13
  146. package/dist/server/infra/process/feature-handlers.js +41 -1
  147. package/dist/server/infra/process/task-router.js +16 -0
  148. package/dist/server/infra/provider/env-provider-detector.d.ts +0 -20
  149. package/dist/server/infra/provider/env-provider-detector.js +0 -27
  150. package/dist/server/infra/space/http-space-service.js +2 -0
  151. package/dist/server/infra/storage/file-curate-log-store.d.ts +10 -0
  152. package/dist/server/infra/storage/file-curate-log-store.js +35 -0
  153. package/dist/server/infra/storage/file-provider-config-store.d.ts +0 -4
  154. package/dist/server/infra/storage/file-provider-config-store.js +0 -6
  155. package/dist/server/infra/storage/file-review-backup-store.d.ts +29 -0
  156. package/dist/server/infra/storage/file-review-backup-store.js +121 -0
  157. package/dist/server/infra/transport/handlers/auth-handler.js +9 -5
  158. package/dist/server/infra/transport/handlers/handler-types.d.ts +9 -0
  159. package/dist/server/infra/transport/handlers/handler-types.js +11 -0
  160. package/dist/server/infra/transport/handlers/index.d.ts +4 -0
  161. package/dist/server/infra/transport/handlers/index.js +2 -0
  162. package/dist/server/infra/transport/handlers/init-handler.d.ts +1 -0
  163. package/dist/server/infra/transport/handlers/init-handler.js +13 -1
  164. package/dist/server/infra/transport/handlers/pull-handler.d.ts +3 -0
  165. package/dist/server/infra/transport/handlers/pull-handler.js +5 -1
  166. package/dist/server/infra/transport/handlers/push-handler.d.ts +20 -0
  167. package/dist/server/infra/transport/handlers/push-handler.js +116 -14
  168. package/dist/server/infra/transport/handlers/reset-handler.d.ts +11 -0
  169. package/dist/server/infra/transport/handlers/reset-handler.js +37 -1
  170. package/dist/server/infra/transport/handlers/review-handler.d.ts +35 -0
  171. package/dist/server/infra/transport/handlers/review-handler.js +162 -0
  172. package/dist/server/infra/transport/handlers/space-handler.d.ts +3 -0
  173. package/dist/server/infra/transport/handlers/space-handler.js +4 -1
  174. package/dist/server/infra/transport/handlers/status-handler.d.ts +5 -0
  175. package/dist/server/infra/transport/handlers/status-handler.js +51 -16
  176. package/dist/server/infra/transport/handlers/vc-handler.d.ts +100 -0
  177. package/dist/server/infra/transport/handlers/vc-handler.js +1050 -0
  178. package/dist/server/infra/transport/socket-io-transport-server.d.ts +7 -0
  179. package/dist/server/infra/transport/socket-io-transport-server.js +12 -1
  180. package/dist/server/infra/transport/transport-connector.d.ts +1 -1
  181. package/dist/server/infra/transport/transport-connector.js +2 -1
  182. package/dist/server/infra/vc/file-vc-git-config-store.d.ts +11 -0
  183. package/dist/server/infra/vc/file-vc-git-config-store.js +43 -0
  184. package/dist/server/templates/skill/SKILL.md +167 -33
  185. package/dist/server/utils/curate-result-parser.d.ts +64 -0
  186. package/dist/server/utils/curate-result-parser.js +8 -0
  187. package/dist/server/utils/file-content-reader.d.ts +2 -1
  188. package/dist/server/utils/file-helpers.d.ts +0 -24
  189. package/dist/server/utils/file-helpers.js +0 -81
  190. package/dist/server/utils/gitignore.d.ts +9 -0
  191. package/dist/server/utils/gitignore.js +47 -0
  192. package/dist/server/utils/process-logger.d.ts +0 -13
  193. package/dist/server/utils/process-logger.js +1 -78
  194. package/dist/shared/transport/events/index.d.ts +6 -0
  195. package/dist/shared/transport/events/index.js +3 -0
  196. package/dist/shared/transport/events/init-events.d.ts +8 -0
  197. package/dist/shared/transport/events/init-events.js +1 -0
  198. package/dist/shared/transport/events/push-events.d.ts +6 -0
  199. package/dist/shared/transport/events/review-events.d.ts +41 -0
  200. package/dist/shared/transport/events/review-events.js +5 -0
  201. package/dist/shared/transport/events/vc-events.d.ts +257 -0
  202. package/dist/shared/transport/events/vc-events.js +67 -0
  203. package/dist/shared/transport/types/dto.d.ts +6 -1
  204. package/dist/tui/app/pages/init-project-page.d.ts +9 -0
  205. package/dist/tui/app/pages/init-project-page.js +54 -0
  206. package/dist/tui/app/pages/protected-routes.js +14 -6
  207. package/dist/tui/components/index.d.ts +0 -2
  208. package/dist/tui/components/index.js +0 -1
  209. package/dist/tui/features/activity/hooks/use-activity-logs.js +7 -1
  210. package/dist/tui/features/commands/definitions/index.js +3 -0
  211. package/dist/tui/features/commands/definitions/space-list.js +9 -18
  212. package/dist/tui/features/commands/definitions/space-switch.js +10 -6
  213. package/dist/tui/features/commands/definitions/vc-add.d.ts +2 -0
  214. package/dist/tui/features/commands/definitions/vc-add.js +15 -0
  215. package/dist/tui/features/commands/definitions/vc-branch.d.ts +2 -0
  216. package/dist/tui/features/commands/definitions/vc-branch.js +33 -0
  217. package/dist/tui/features/commands/definitions/vc-checkout.d.ts +2 -0
  218. package/dist/tui/features/commands/definitions/vc-checkout.js +32 -0
  219. package/dist/tui/features/commands/definitions/vc-clone.d.ts +2 -0
  220. package/dist/tui/features/commands/definitions/vc-clone.js +18 -0
  221. package/dist/tui/features/commands/definitions/vc-commit.d.ts +2 -0
  222. package/dist/tui/features/commands/definitions/vc-commit.js +32 -0
  223. package/dist/tui/features/commands/definitions/vc-config.d.ts +2 -0
  224. package/dist/tui/features/commands/definitions/vc-config.js +40 -0
  225. package/dist/tui/features/commands/definitions/vc-fetch.d.ts +2 -0
  226. package/dist/tui/features/commands/definitions/vc-fetch.js +37 -0
  227. package/dist/tui/features/commands/definitions/vc-init.d.ts +2 -0
  228. package/dist/tui/features/commands/definitions/vc-init.js +11 -0
  229. package/dist/tui/features/commands/definitions/vc-log.d.ts +2 -0
  230. package/dist/tui/features/commands/definitions/vc-log.js +25 -0
  231. package/dist/tui/features/commands/definitions/vc-merge.d.ts +2 -0
  232. package/dist/tui/features/commands/definitions/vc-merge.js +48 -0
  233. package/dist/tui/features/commands/definitions/vc-pull.d.ts +2 -0
  234. package/dist/tui/features/commands/definitions/vc-pull.js +42 -0
  235. package/dist/tui/features/commands/definitions/vc-push.d.ts +2 -0
  236. package/dist/tui/features/commands/definitions/vc-push.js +38 -0
  237. package/dist/tui/features/commands/definitions/vc-remote.d.ts +2 -0
  238. package/dist/tui/features/commands/definitions/vc-remote.js +57 -0
  239. package/dist/tui/features/commands/definitions/vc-reset.d.ts +2 -0
  240. package/dist/tui/features/commands/definitions/vc-reset.js +35 -0
  241. package/dist/tui/features/commands/definitions/vc-status.d.ts +2 -0
  242. package/dist/tui/features/commands/definitions/vc-status.js +11 -0
  243. package/dist/tui/features/commands/definitions/vc.d.ts +2 -0
  244. package/dist/tui/features/commands/definitions/vc.js +36 -0
  245. package/dist/tui/features/commands/hooks/use-slash-command-processor.js +5 -5
  246. package/dist/tui/features/log/api/execute-log.d.ts +8 -0
  247. package/dist/tui/features/log/api/execute-log.js +13 -0
  248. package/dist/tui/features/log/components/log-flow.d.ts +14 -0
  249. package/dist/tui/features/log/components/log-flow.js +29 -0
  250. package/dist/tui/features/log/utils/format-log.d.ts +3 -0
  251. package/dist/tui/features/log/utils/format-log.js +42 -0
  252. package/dist/tui/features/onboarding/hooks/use-app-view-mode.d.ts +9 -5
  253. package/dist/tui/features/onboarding/hooks/use-app-view-mode.js +12 -5
  254. package/dist/tui/features/push/components/push-flow.js +9 -2
  255. package/dist/tui/features/reset/components/reset-flow.js +2 -1
  256. package/dist/tui/features/status/components/status-view.js +2 -1
  257. package/dist/tui/features/status/utils/format-status.js +9 -0
  258. package/dist/tui/features/tasks/hooks/use-task-subscriptions.js +11 -0
  259. package/dist/tui/features/tasks/stores/tasks-store.d.ts +10 -0
  260. package/dist/tui/features/tasks/stores/tasks-store.js +16 -0
  261. package/dist/tui/features/vc/add/api/execute-vc-add.d.ts +8 -0
  262. package/dist/tui/features/vc/add/api/execute-vc-add.js +13 -0
  263. package/dist/tui/features/vc/add/components/vc-add-flow.d.ts +7 -0
  264. package/dist/tui/features/vc/add/components/vc-add-flow.js +35 -0
  265. package/dist/tui/features/vc/branch/api/execute-vc-branch.d.ts +8 -0
  266. package/dist/tui/features/vc/branch/api/execute-vc-branch.js +13 -0
  267. package/dist/tui/features/vc/branch/components/vc-branch-flow.d.ts +8 -0
  268. package/dist/tui/features/vc/branch/components/vc-branch-flow.js +53 -0
  269. package/dist/tui/features/vc/branch/utils/format-branch.d.ts +4 -0
  270. package/dist/tui/features/vc/branch/utils/format-branch.js +12 -0
  271. package/dist/tui/features/vc/checkout/api/execute-vc-checkout.d.ts +8 -0
  272. package/dist/tui/features/vc/checkout/api/execute-vc-checkout.js +13 -0
  273. package/dist/tui/features/vc/checkout/components/vc-checkout-flow.d.ts +8 -0
  274. package/dist/tui/features/vc/checkout/components/vc-checkout-flow.js +33 -0
  275. package/dist/tui/features/vc/clone/api/execute-vc-clone.d.ts +8 -0
  276. package/dist/tui/features/vc/clone/api/execute-vc-clone.js +13 -0
  277. package/dist/tui/features/vc/clone/components/vc-clone-flow.d.ts +7 -0
  278. package/dist/tui/features/vc/clone/components/vc-clone-flow.js +79 -0
  279. package/dist/tui/features/vc/commit/api/execute-vc-commit.d.ts +8 -0
  280. package/dist/tui/features/vc/commit/api/execute-vc-commit.js +13 -0
  281. package/dist/tui/features/vc/commit/components/vc-commit-flow.d.ts +7 -0
  282. package/dist/tui/features/vc/commit/components/vc-commit-flow.js +29 -0
  283. package/dist/tui/features/vc/config/api/execute-vc-config.d.ts +8 -0
  284. package/dist/tui/features/vc/config/api/execute-vc-config.js +13 -0
  285. package/dist/tui/features/vc/config/components/vc-config-flow.d.ts +9 -0
  286. package/dist/tui/features/vc/config/components/vc-config-flow.js +30 -0
  287. package/dist/tui/features/vc/fetch/api/execute-vc-fetch.d.ts +8 -0
  288. package/dist/tui/features/vc/fetch/api/execute-vc-fetch.js +13 -0
  289. package/dist/tui/features/vc/fetch/components/vc-fetch-flow.d.ts +8 -0
  290. package/dist/tui/features/vc/fetch/components/vc-fetch-flow.js +75 -0
  291. package/dist/tui/features/vc/init/api/execute-vc-init.d.ts +8 -0
  292. package/dist/tui/features/vc/init/api/execute-vc-init.js +13 -0
  293. package/dist/tui/features/vc/init/components/vc-init-flow.d.ts +10 -0
  294. package/dist/tui/features/vc/init/components/vc-init-flow.js +37 -0
  295. package/dist/tui/features/vc/merge/api/execute-vc-merge.d.ts +8 -0
  296. package/dist/tui/features/vc/merge/api/execute-vc-merge.js +13 -0
  297. package/dist/tui/features/vc/merge/components/vc-merge-flow.d.ts +11 -0
  298. package/dist/tui/features/vc/merge/components/vc-merge-flow.js +72 -0
  299. package/dist/tui/features/vc/pull/api/execute-vc-pull.d.ts +8 -0
  300. package/dist/tui/features/vc/pull/api/execute-vc-pull.js +13 -0
  301. package/dist/tui/features/vc/pull/components/vc-pull-flow.d.ts +9 -0
  302. package/dist/tui/features/vc/pull/components/vc-pull-flow.js +83 -0
  303. package/dist/tui/features/vc/push/api/execute-vc-push.d.ts +8 -0
  304. package/dist/tui/features/vc/push/api/execute-vc-push.js +13 -0
  305. package/dist/tui/features/vc/push/components/vc-push-flow.d.ts +8 -0
  306. package/dist/tui/features/vc/push/components/vc-push-flow.js +83 -0
  307. package/dist/tui/features/vc/remote/api/execute-vc-remote.d.ts +8 -0
  308. package/dist/tui/features/vc/remote/api/execute-vc-remote.js +13 -0
  309. package/dist/tui/features/vc/remote/components/vc-remote-flow.d.ts +9 -0
  310. package/dist/tui/features/vc/remote/components/vc-remote-flow.js +42 -0
  311. package/dist/tui/features/vc/reset/api/execute-vc-reset.d.ts +8 -0
  312. package/dist/tui/features/vc/reset/api/execute-vc-reset.js +13 -0
  313. package/dist/tui/features/vc/reset/components/vc-reset-flow.d.ts +10 -0
  314. package/dist/tui/features/vc/reset/components/vc-reset-flow.js +63 -0
  315. package/dist/tui/features/vc/status/api/execute-vc-status.d.ts +8 -0
  316. package/dist/tui/features/vc/status/api/execute-vc-status.js +13 -0
  317. package/dist/tui/features/vc/status/components/vc-status-flow.d.ts +10 -0
  318. package/dist/tui/features/vc/status/components/vc-status-flow.js +133 -0
  319. package/dist/tui/lib/environment.d.ts +8 -0
  320. package/dist/tui/lib/environment.js +8 -0
  321. package/dist/tui/utils/error-messages.d.ts +5 -1
  322. package/dist/tui/utils/error-messages.js +32 -3
  323. package/node_modules/@campfirein/brv-transport-client/LICENSE +95 -0
  324. package/node_modules/@campfirein/brv-transport-client/README.md +3 -4
  325. package/node_modules/@campfirein/brv-transport-client/package.json +2 -2
  326. package/oclif.manifest.json +985 -65
  327. package/package.json +13 -5
  328. package/dist/oclif/hooks/prerun/validate-brv-config-version.d.ts +0 -33
  329. package/dist/oclif/hooks/prerun/validate-brv-config-version.js +0 -86
  330. package/dist/server/core/domain/entities/bullet.d.ts +0 -51
  331. package/dist/server/core/domain/entities/bullet.js +0 -94
  332. package/dist/server/core/domain/entities/memory.d.ts +0 -55
  333. package/dist/server/core/domain/entities/memory.js +0 -90
  334. package/dist/server/core/domain/entities/playbook.d.ts +0 -80
  335. package/dist/server/core/domain/entities/playbook.js +0 -214
  336. package/dist/server/core/domain/entities/presigned-url.d.ts +0 -9
  337. package/dist/server/core/domain/entities/presigned-url.js +0 -18
  338. package/dist/server/core/domain/entities/presigned-urls-response.d.ts +0 -10
  339. package/dist/server/core/domain/entities/presigned-urls-response.js +0 -18
  340. package/dist/server/core/domain/entities/retrieve-result.d.ts +0 -35
  341. package/dist/server/core/domain/entities/retrieve-result.js +0 -35
  342. package/dist/server/core/domain/errors/headless-prompt-error.d.ts +0 -11
  343. package/dist/server/core/domain/errors/headless-prompt-error.js +0 -18
  344. package/dist/server/core/interfaces/services/i-legacy-rule-detector.d.ts +0 -56
  345. package/dist/server/core/interfaces/services/i-memory-retrieval-service.d.ts +0 -39
  346. package/dist/server/core/interfaces/services/i-memory-storage-service.d.ts +0 -53
  347. package/dist/server/core/interfaces/services/i-terminal.d.ts +0 -146
  348. package/dist/server/core/interfaces/services/i-terminal.js +0 -1
  349. package/dist/server/core/interfaces/services/i-workspace-detector-service.d.ts +0 -8
  350. package/dist/server/core/interfaces/services/i-workspace-detector-service.js +0 -1
  351. package/dist/server/core/interfaces/storage/i-onboarding-preference-store.d.ts +0 -20
  352. package/dist/server/core/interfaces/storage/i-onboarding-preference-store.js +0 -1
  353. package/dist/server/infra/connectors/rules/legacy-rule-detector.d.ts +0 -21
  354. package/dist/server/infra/connectors/rules/legacy-rule-detector.js +0 -106
  355. package/dist/server/infra/memory/http-memory-retrieval-service.d.ts +0 -18
  356. package/dist/server/infra/memory/http-memory-retrieval-service.js +0 -64
  357. package/dist/server/infra/memory/http-memory-storage-service.d.ts +0 -18
  358. package/dist/server/infra/memory/http-memory-storage-service.js +0 -72
  359. package/dist/server/infra/memory/memory-to-playbook-mapper.d.ts +0 -33
  360. package/dist/server/infra/memory/memory-to-playbook-mapper.js +0 -51
  361. package/dist/server/infra/storage/file-onboarding-preference-store.d.ts +0 -10
  362. package/dist/server/infra/storage/file-onboarding-preference-store.js +0 -45
  363. package/dist/server/infra/terminal/headless-terminal.d.ts +0 -91
  364. package/dist/server/infra/terminal/headless-terminal.js +0 -211
  365. package/dist/server/infra/workspace/workspace-detector-service.d.ts +0 -57
  366. package/dist/server/infra/workspace/workspace-detector-service.js +0 -165
  367. package/dist/server/utils/crash-log.d.ts +0 -14
  368. package/dist/server/utils/crash-log.js +0 -19
  369. package/dist/server/utils/emoji-helpers.d.ts +0 -38
  370. package/dist/server/utils/emoji-helpers.js +0 -42
  371. package/dist/server/utils/error-handler.d.ts +0 -51
  372. package/dist/server/utils/error-handler.js +0 -169
  373. package/dist/server/utils/oclif-error-helpers.d.ts +0 -40
  374. package/dist/server/utils/oclif-error-helpers.js +0 -46
  375. package/dist/server/utils/tool-display-formatter.d.ts +0 -53
  376. package/dist/server/utils/tool-display-formatter.js +0 -257
  377. package/dist/tui/components/init.d.ts +0 -33
  378. package/dist/tui/components/init.js +0 -234
  379. package/dist/tui/features/space/api/get-spaces.d.ts +0 -16
  380. package/dist/tui/features/space/api/get-spaces.js +0 -17
  381. package/dist/tui/features/space/api/switch-space.d.ts +0 -11
  382. package/dist/tui/features/space/api/switch-space.js +0 -24
  383. package/dist/tui/features/space/components/space-list-view.d.ts +0 -12
  384. package/dist/tui/features/space/components/space-list-view.js +0 -56
  385. package/dist/tui/features/space/components/space-switch-flow.d.ts +0 -13
  386. package/dist/tui/features/space/components/space-switch-flow.js +0 -97
  387. /package/dist/server/core/interfaces/services/{i-legacy-rule-detector.js → i-git-service.js} +0 -0
  388. /package/dist/server/core/interfaces/{services/i-memory-retrieval-service.js → storage/i-review-backup-store.js} +0 -0
  389. /package/dist/server/core/interfaces/{services/i-memory-storage-service.js → vc/i-vc-git-config-store.js} +0 -0
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { VcMergeAction } from '../../../../../shared/transport/events/vc-events.js';
3
+ import type { CustomDialogCallbacks } from '../../../../types/commands.js';
4
+ type VcMergeFlowProps = CustomDialogCallbacks & {
5
+ action: VcMergeAction;
6
+ allowUnrelatedHistories?: boolean;
7
+ branch?: string;
8
+ message?: string;
9
+ };
10
+ export declare function VcMergeFlow({ action, allowUnrelatedHistories, branch, message, onCancel, onComplete }: VcMergeFlowProps): React.ReactNode;
11
+ export {};
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text, useInput } from 'ink';
3
+ import Spinner from 'ink-spinner';
4
+ import React, { useEffect } from 'react';
5
+ import { formatTransportError } from '../../../../utils/error-messages.js';
6
+ import { useExecuteVcMerge } from '../api/execute-vc-merge.js';
7
+ export function VcMergeFlow({ action, allowUnrelatedHistories, branch, message, onCancel, onComplete }) {
8
+ const mergeMutation = useExecuteVcMerge();
9
+ useInput((_, key) => {
10
+ if (key.escape && !mergeMutation.isPending) {
11
+ onCancel();
12
+ }
13
+ });
14
+ const fired = React.useRef(false);
15
+ useEffect(() => {
16
+ if (fired.current)
17
+ return;
18
+ fired.current = true;
19
+ const request = { action, allowUnrelatedHistories, branch, message };
20
+ // For TUI --continue without message: send first to get defaultMessage, then commit with it
21
+ if (action === 'continue' && !message) {
22
+ mergeMutation.mutate(request, {
23
+ onError(error) {
24
+ onComplete(`Failed to continue merge: ${formatTransportError(error)}`);
25
+ },
26
+ onSuccess(result) {
27
+ // Got defaultMessage — now commit with it silently (TUI can't spawn editor)
28
+ const commitMessage = result.defaultMessage ?? 'Merge commit';
29
+ mergeMutation.mutate({ action: 'continue', message: commitMessage }, {
30
+ onError(error) {
31
+ onComplete(`Failed to continue merge: ${formatTransportError(error)}`);
32
+ },
33
+ onSuccess() {
34
+ onComplete('Merge commit created.');
35
+ },
36
+ });
37
+ },
38
+ });
39
+ return;
40
+ }
41
+ mergeMutation.mutate(request, {
42
+ onError(error) {
43
+ onComplete(`Failed to ${action} merge: ${formatTransportError(error)}`);
44
+ },
45
+ onSuccess(result) {
46
+ if (result.action === 'abort') {
47
+ onComplete('Merge aborted.');
48
+ return;
49
+ }
50
+ if (result.action === 'continue') {
51
+ onComplete('Merge commit created.');
52
+ return;
53
+ }
54
+ // action: 'merge'
55
+ if (result.alreadyUpToDate) {
56
+ onComplete('Already up to date.');
57
+ }
58
+ else if (result.conflicts && result.conflicts.length > 0) {
59
+ const conflictLines = result.conflicts
60
+ .map((c) => `CONFLICT (${c.type}): ${c.path}`)
61
+ .join('\n');
62
+ onComplete(`${conflictLines}\nAutomatic merge failed; fix conflicts and then commit the result.`);
63
+ }
64
+ else {
65
+ onComplete(`Merged branch '${branch}'.`);
66
+ }
67
+ },
68
+ });
69
+ }, []);
70
+ const statusText = action === 'abort' ? 'Aborting merge...' : action === 'continue' ? 'Continuing merge...' : `Merging ${branch}...`;
71
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " ", statusText] }));
72
+ }
@@ -0,0 +1,8 @@
1
+ import type { MutationConfig } from '../../../../lib/react-query.js';
2
+ import { type IVcPullRequest, type IVcPullResponse } from '../../../../../shared/transport/events/vc-events.js';
3
+ export declare const executeVcPull: (request?: IVcPullRequest) => Promise<IVcPullResponse>;
4
+ type UseExecuteVcPullOptions = {
5
+ mutationConfig?: MutationConfig<typeof executeVcPull>;
6
+ };
7
+ export declare const useExecuteVcPull: ({ mutationConfig }?: UseExecuteVcPullOptions) => import("@tanstack/react-query").UseMutationResult<IVcPullResponse, Error, IVcPullRequest | undefined, unknown>;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import { useMutation } from '@tanstack/react-query';
2
+ import { VcEvents } from '../../../../../shared/transport/events/vc-events.js';
3
+ import { useTransportStore } from '../../../../stores/transport-store.js';
4
+ export const executeVcPull = (request) => {
5
+ const { apiClient } = useTransportStore.getState();
6
+ if (!apiClient)
7
+ return Promise.reject(new Error('Not connected'));
8
+ return apiClient.request(VcEvents.PULL, request);
9
+ };
10
+ export const useExecuteVcPull = ({ mutationConfig } = {}) => useMutation({
11
+ ...mutationConfig,
12
+ mutationFn: executeVcPull,
13
+ });
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { CustomDialogCallbacks } from '../../../../types/commands.js';
3
+ type VcPullFlowProps = CustomDialogCallbacks & {
4
+ allowUnrelatedHistories?: boolean;
5
+ branch?: string;
6
+ remote?: string;
7
+ };
8
+ export declare function VcPullFlow({ allowUnrelatedHistories, branch, onCancel, onComplete, remote }: VcPullFlowProps): React.ReactNode;
9
+ export {};
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import Spinner from 'ink-spinner';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { VcErrorCode } from '../../../../../shared/transport/events/vc-events.js';
6
+ import { InlineInput } from '../../../../components/inline-prompts/inline-input.js';
7
+ import { useTheme } from '../../../../hooks/index.js';
8
+ import { getWebAppUrl } from '../../../../lib/environment.js';
9
+ import { formatTransportError, getTransportErrorCode } from '../../../../utils/error-messages.js';
10
+ import { useExecuteVcRemote } from '../../remote/api/execute-vc-remote.js';
11
+ import { useExecuteVcPull } from '../api/execute-vc-pull.js';
12
+ function validateRemoteUrl(value) {
13
+ if (!value)
14
+ return 'URL is required';
15
+ try {
16
+ const parsed = new URL(value);
17
+ if (parsed.protocol !== 'https:') {
18
+ return 'URL must start with https://';
19
+ }
20
+ return true;
21
+ }
22
+ catch {
23
+ return 'Invalid URL';
24
+ }
25
+ }
26
+ export function VcPullFlow({ allowUnrelatedHistories, branch, onCancel, onComplete, remote }) {
27
+ const { theme: { colors }, } = useTheme();
28
+ const [step, setStep] = useState('pulling');
29
+ const pullMutation = useExecuteVcPull();
30
+ const remoteMutation = useExecuteVcRemote();
31
+ useInput((_, key) => {
32
+ if (key.escape && !pullMutation.isPending && !remoteMutation.isPending) {
33
+ onCancel();
34
+ }
35
+ });
36
+ const executePull = useCallback(() => {
37
+ pullMutation.mutate({ allowUnrelatedHistories, branch, remote }, {
38
+ onError(error) {
39
+ if (getTransportErrorCode(error) === VcErrorCode.NO_REMOTE) {
40
+ setStep('configuring_remote');
41
+ return;
42
+ }
43
+ onComplete(`Failed to pull: ${formatTransportError(error)}`);
44
+ },
45
+ onSuccess(result) {
46
+ if (result.conflicts && result.conflicts.length > 0) {
47
+ const conflictLines = result.conflicts
48
+ .map((c) => `CONFLICT (${c.type}): ${c.path}`)
49
+ .join('\n');
50
+ onComplete(`${conflictLines}\nAutomatic merge failed; fix conflicts and then commit the result.`);
51
+ }
52
+ else {
53
+ onComplete(result.alreadyUpToDate ? 'Already up to date.' : `Pulled from origin/${result.branch}.`);
54
+ }
55
+ },
56
+ });
57
+ }, [allowUnrelatedHistories, branch, onComplete, pullMutation, remote]);
58
+ const fired = useRef(false);
59
+ useEffect(() => {
60
+ if (fired.current)
61
+ return;
62
+ fired.current = true;
63
+ executePull();
64
+ }, []);
65
+ const handleUrlSubmit = useCallback((url) => {
66
+ remoteMutation.mutate({ subcommand: 'add', url }, {
67
+ onError(error) {
68
+ onComplete(`Failed to add remote: ${formatTransportError(error)}`);
69
+ },
70
+ onSuccess() {
71
+ setStep('pulling');
72
+ executePull();
73
+ },
74
+ });
75
+ }, [executePull, onComplete, remoteMutation]);
76
+ if (step === 'configuring_remote') {
77
+ if (remoteMutation.isPending) {
78
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " Adding remote..."] }));
79
+ }
80
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.warning, children: "No remote configured." }), _jsx(Text, {}), _jsx(Text, { children: "To connect to cloud:" }), _jsxs(Text, { children: [" Go to ", _jsx(Text, { bold: true, children: getWebAppUrl() }), " \u2192 create or open a Space"] }), _jsx(Text, { children: " and copy the remote URL." })] }), _jsx(InlineInput, { message: "Paste your remote URL:", onSubmit: handleUrlSubmit, validate: validateRemoteUrl })] }));
81
+ }
82
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " Pulling..."] }));
83
+ }
@@ -0,0 +1,8 @@
1
+ import type { MutationConfig } from '../../../../lib/react-query.js';
2
+ import { type IVcPushRequest, type IVcPushResponse } from '../../../../../shared/transport/events/vc-events.js';
3
+ export declare const executeVcPush: (request: IVcPushRequest) => Promise<IVcPushResponse>;
4
+ type UseExecuteVcPushOptions = {
5
+ mutationConfig?: MutationConfig<typeof executeVcPush>;
6
+ };
7
+ export declare const useExecuteVcPush: ({ mutationConfig }?: UseExecuteVcPushOptions) => import("@tanstack/react-query").UseMutationResult<IVcPushResponse, Error, IVcPushRequest, unknown>;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import { useMutation } from '@tanstack/react-query';
2
+ import { VcEvents, } from '../../../../../shared/transport/events/vc-events.js';
3
+ import { useTransportStore } from '../../../../stores/transport-store.js';
4
+ export const executeVcPush = (request) => {
5
+ const { apiClient } = useTransportStore.getState();
6
+ if (!apiClient)
7
+ return Promise.reject(new Error('Not connected'));
8
+ return apiClient.request(VcEvents.PUSH, request);
9
+ };
10
+ export const useExecuteVcPush = ({ mutationConfig } = {}) => useMutation({
11
+ ...mutationConfig,
12
+ mutationFn: executeVcPush,
13
+ });
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { CustomDialogCallbacks } from '../../../../types/commands.js';
3
+ type VcPushFlowProps = CustomDialogCallbacks & {
4
+ branch?: string;
5
+ setUpstream?: boolean;
6
+ };
7
+ export declare function VcPushFlow({ branch, onCancel, onComplete, setUpstream }: VcPushFlowProps): React.ReactNode;
8
+ export {};
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import Spinner from 'ink-spinner';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { VcErrorCode } from '../../../../../shared/transport/events/vc-events.js';
6
+ import { InlineInput } from '../../../../components/inline-prompts/inline-input.js';
7
+ import { useTheme } from '../../../../hooks/index.js';
8
+ import { getWebAppUrl } from '../../../../lib/environment.js';
9
+ import { formatTransportError, getTransportErrorCode } from '../../../../utils/error-messages.js';
10
+ import { useExecuteVcRemote } from '../../remote/api/execute-vc-remote.js';
11
+ import { useExecuteVcPush } from '../api/execute-vc-push.js';
12
+ function validateRemoteUrl(value) {
13
+ if (!value)
14
+ return 'URL is required';
15
+ try {
16
+ const parsed = new URL(value);
17
+ if (parsed.protocol !== 'https:') {
18
+ return 'URL must start with https://';
19
+ }
20
+ return true;
21
+ }
22
+ catch {
23
+ return 'Invalid URL';
24
+ }
25
+ }
26
+ export function VcPushFlow({ branch, onCancel, onComplete, setUpstream }) {
27
+ const { theme: { colors }, } = useTheme();
28
+ const [step, setStep] = useState('pushing');
29
+ const pushMutation = useExecuteVcPush();
30
+ const remoteMutation = useExecuteVcRemote();
31
+ useInput((_, key) => {
32
+ if (key.escape && !pushMutation.isPending && !remoteMutation.isPending) {
33
+ onCancel();
34
+ }
35
+ });
36
+ const executePush = useCallback((overrideSetUpstream) => {
37
+ pushMutation.mutate({ branch, setUpstream: overrideSetUpstream ?? setUpstream }, {
38
+ onError(error) {
39
+ if (getTransportErrorCode(error) === VcErrorCode.NO_REMOTE) {
40
+ setStep('configuring_remote');
41
+ return;
42
+ }
43
+ onComplete(`Failed to push: ${formatTransportError(error)}`);
44
+ },
45
+ onSuccess(result) {
46
+ if (result.alreadyUpToDate) {
47
+ onComplete('Everything up-to-date.');
48
+ }
49
+ else if (result.upstreamSet) {
50
+ onComplete(`Pushed to origin/${result.branch} and set upstream.`);
51
+ }
52
+ else {
53
+ onComplete(`Pushed to origin/${result.branch}.`);
54
+ }
55
+ },
56
+ });
57
+ }, [branch, onComplete, pushMutation, setUpstream]);
58
+ const fired = useRef(false);
59
+ useEffect(() => {
60
+ if (fired.current)
61
+ return;
62
+ fired.current = true;
63
+ executePush();
64
+ }, []);
65
+ const handleUrlSubmit = useCallback((url) => {
66
+ remoteMutation.mutate({ subcommand: 'add', url }, {
67
+ onError(error) {
68
+ onComplete(`Failed to add remote: ${formatTransportError(error)}`);
69
+ },
70
+ onSuccess() {
71
+ setStep('pushing');
72
+ executePush(true);
73
+ },
74
+ });
75
+ }, [executePush, onComplete, remoteMutation]);
76
+ if (step === 'configuring_remote') {
77
+ if (remoteMutation.isPending) {
78
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " Adding remote..."] }));
79
+ }
80
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.warning, children: "No remote configured." }), _jsx(Text, {}), _jsx(Text, { children: "To connect to cloud:" }), _jsxs(Text, { children: [" Go to ", _jsx(Text, { bold: true, children: getWebAppUrl() }), " \u2192 create or open a Space"] }), _jsx(Text, { children: " and copy the remote URL." })] }), _jsx(InlineInput, { message: "Paste your remote URL:", onSubmit: handleUrlSubmit, validate: validateRemoteUrl })] }));
81
+ }
82
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " ", branch ? `Pushing to origin/${branch}...` : 'Pushing...'] }));
83
+ }
@@ -0,0 +1,8 @@
1
+ import type { MutationConfig } from '../../../../lib/react-query.js';
2
+ import { type IVcRemoteRequest, type IVcRemoteResponse } from '../../../../../shared/transport/events/vc-events.js';
3
+ export declare const executeVcRemote: (request: IVcRemoteRequest) => Promise<IVcRemoteResponse>;
4
+ type UseExecuteVcRemoteOptions = {
5
+ mutationConfig?: MutationConfig<typeof executeVcRemote>;
6
+ };
7
+ export declare const useExecuteVcRemote: ({ mutationConfig }?: UseExecuteVcRemoteOptions) => import("@tanstack/react-query").UseMutationResult<IVcRemoteResponse, Error, IVcRemoteRequest, unknown>;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import { useMutation } from '@tanstack/react-query';
2
+ import { VcEvents, } from '../../../../../shared/transport/events/vc-events.js';
3
+ import { useTransportStore } from '../../../../stores/transport-store.js';
4
+ export const executeVcRemote = (request) => {
5
+ const { apiClient } = useTransportStore.getState();
6
+ if (!apiClient)
7
+ return Promise.reject(new Error('Not connected'));
8
+ return apiClient.request(VcEvents.REMOTE, request);
9
+ };
10
+ export const useExecuteVcRemote = ({ mutationConfig } = {}) => useMutation({
11
+ ...mutationConfig,
12
+ mutationFn: executeVcRemote,
13
+ });
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { VcRemoteSubcommand } from '../../../../../shared/transport/events/vc-events.js';
3
+ import type { CustomDialogCallbacks } from '../../../../types/commands.js';
4
+ type VcRemoteFlowProps = CustomDialogCallbacks & {
5
+ subcommand: VcRemoteSubcommand;
6
+ url?: string;
7
+ };
8
+ export declare function VcRemoteFlow({ onCancel, onComplete, subcommand, url }: VcRemoteFlowProps): React.ReactNode;
9
+ export {};
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text, useInput } from 'ink';
3
+ import Spinner from 'ink-spinner';
4
+ import React, { useEffect } from 'react';
5
+ import { formatTransportError } from '../../../../utils/error-messages.js';
6
+ import { useExecuteVcRemote } from '../api/execute-vc-remote.js';
7
+ const LABELS = {
8
+ add: 'Adding remote...',
9
+ 'set-url': 'Updating remote...',
10
+ show: 'Fetching remote...',
11
+ };
12
+ export function VcRemoteFlow({ onCancel, onComplete, subcommand, url }) {
13
+ const remoteMutation = useExecuteVcRemote();
14
+ useInput((_, key) => {
15
+ if (key.escape && !remoteMutation.isPending) {
16
+ onCancel();
17
+ }
18
+ });
19
+ const fired = React.useRef(false);
20
+ useEffect(() => {
21
+ if (fired.current)
22
+ return;
23
+ fired.current = true;
24
+ remoteMutation.mutate({ subcommand, url }, {
25
+ onError(error) {
26
+ onComplete(`Failed: ${formatTransportError(error)}`);
27
+ },
28
+ onSuccess(result) {
29
+ if (result.action === 'show') {
30
+ onComplete(result.url ? `origin: ${result.url}` : 'No remote configured.');
31
+ }
32
+ else if (result.action === 'add') {
33
+ onComplete(`Remote 'origin' set to ${result.url}.`);
34
+ }
35
+ else {
36
+ onComplete(`Remote 'origin' updated to ${result.url}.`);
37
+ }
38
+ },
39
+ });
40
+ }, []);
41
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " ", LABELS[subcommand]] }));
42
+ }
@@ -0,0 +1,8 @@
1
+ import type { MutationConfig } from '../../../../lib/react-query.js';
2
+ import { type IVcResetRequest, type IVcResetResponse } from '../../../../../shared/transport/events/vc-events.js';
3
+ export declare const executeVcReset: (request: IVcResetRequest) => Promise<IVcResetResponse>;
4
+ type UseExecuteVcResetOptions = {
5
+ mutationConfig?: MutationConfig<typeof executeVcReset>;
6
+ };
7
+ export declare const useExecuteVcReset: ({ mutationConfig }?: UseExecuteVcResetOptions) => import("@tanstack/react-query").UseMutationResult<IVcResetResponse, Error, IVcResetRequest, unknown>;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import { useMutation } from '@tanstack/react-query';
2
+ import { VcEvents } from '../../../../../shared/transport/events/vc-events.js';
3
+ import { useTransportStore } from '../../../../stores/transport-store.js';
4
+ export const executeVcReset = (request) => {
5
+ const { apiClient } = useTransportStore.getState();
6
+ if (!apiClient)
7
+ return Promise.reject(new Error('Not connected'));
8
+ return apiClient.request(VcEvents.RESET, request);
9
+ };
10
+ export const useExecuteVcReset = ({ mutationConfig } = {}) => useMutation({
11
+ ...mutationConfig,
12
+ mutationFn: executeVcReset,
13
+ });
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { VcResetMode } from '../../../../../shared/transport/events/vc-events.js';
3
+ import type { CustomDialogCallbacks } from '../../../../types/commands.js';
4
+ type VcResetFlowProps = CustomDialogCallbacks & {
5
+ filePaths?: string[];
6
+ mode?: VcResetMode;
7
+ ref?: string;
8
+ };
9
+ export declare function VcResetFlow({ filePaths, mode, onCancel, onComplete, ref }: VcResetFlowProps): React.ReactNode;
10
+ export {};
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text, useInput } from 'ink';
3
+ import Spinner from 'ink-spinner';
4
+ import { useEffect, useState } from 'react';
5
+ import { InlineConfirm } from '../../../../components/inline-prompts/inline-confirm.js';
6
+ import { formatTransportError } from '../../../../utils/error-messages.js';
7
+ import { useExecuteVcReset } from '../api/execute-vc-reset.js';
8
+ export function VcResetFlow({ filePaths, mode, onCancel, onComplete, ref }) {
9
+ const needsConfirm = mode === 'hard';
10
+ const [step, setStep] = useState(needsConfirm ? 'confirm' : 'executing');
11
+ const resetMutation = useExecuteVcReset();
12
+ useInput((_, key) => {
13
+ if (key.escape && !resetMutation.isPending) {
14
+ onCancel();
15
+ }
16
+ });
17
+ useEffect(() => {
18
+ if (step !== 'executing')
19
+ return;
20
+ const request = filePaths
21
+ ? { filePaths }
22
+ : { mode: mode ?? 'mixed', ref };
23
+ resetMutation.mutate(request, {
24
+ onError(error) {
25
+ onComplete(`Failed to reset: ${formatTransportError(error)}`);
26
+ },
27
+ onSuccess(result) {
28
+ if (result.filesUnstaged === undefined) {
29
+ if (result.headSha) {
30
+ onComplete(`HEAD is now at ${result.headSha.slice(0, 7)}`);
31
+ }
32
+ else {
33
+ onComplete(''); // Empty repo — silent no-op, matches git
34
+ }
35
+ }
36
+ else if (result.filesUnstaged === 0) {
37
+ onComplete('Nothing to unstage.');
38
+ }
39
+ else {
40
+ onComplete(`Unstaged ${result.filesUnstaged} file(s).`);
41
+ }
42
+ },
43
+ });
44
+ }, [step]);
45
+ if (step === 'confirm') {
46
+ return (_jsx(InlineConfirm, { default: false, message: `This will discard all changes and reset to ${ref ?? 'HEAD'}. Continue`, onConfirm: (confirmed) => {
47
+ if (confirmed) {
48
+ setStep('executing');
49
+ }
50
+ else {
51
+ onComplete('Reset cancelled.');
52
+ }
53
+ } }));
54
+ }
55
+ const label = filePaths
56
+ ? `Unstaging ${filePaths.join(' ')}...`
57
+ : mode === 'soft'
58
+ ? `Soft resetting to ${ref ?? 'HEAD'}...`
59
+ : mode === 'hard'
60
+ ? `Hard resetting to ${ref ?? 'HEAD'}...`
61
+ : 'Unstaging all files...';
62
+ return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " ", label] }));
63
+ }
@@ -0,0 +1,8 @@
1
+ import type { MutationConfig } from '../../../../lib/react-query.js';
2
+ import { type IVcStatusResponse } from '../../../../../shared/transport/events/vc-events.js';
3
+ export declare const executeVcStatus: () => Promise<IVcStatusResponse>;
4
+ type UseExecuteVcStatusOptions = {
5
+ mutationConfig?: MutationConfig<typeof executeVcStatus>;
6
+ };
7
+ export declare const useExecuteVcStatus: ({ mutationConfig }?: UseExecuteVcStatusOptions) => import("@tanstack/react-query").UseMutationResult<IVcStatusResponse, Error, undefined, unknown>;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import { useMutation } from '@tanstack/react-query';
2
+ import { VcEvents } from '../../../../../shared/transport/events/vc-events.js';
3
+ import { useTransportStore } from '../../../../stores/transport-store.js';
4
+ export const executeVcStatus = () => {
5
+ const { apiClient } = useTransportStore.getState();
6
+ if (!apiClient)
7
+ return Promise.reject(new Error('Not connected'));
8
+ return apiClient.request(VcEvents.STATUS, {});
9
+ };
10
+ export const useExecuteVcStatus = ({ mutationConfig } = {}) => useMutation({
11
+ ...mutationConfig,
12
+ mutationFn: executeVcStatus,
13
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * VcStatusFlow Component
3
+ *
4
+ * Shows git status of the context tree via VcHandler.
5
+ */
6
+ import React from 'react';
7
+ import type { CustomDialogCallbacks } from '../../../../types/commands.js';
8
+ type VcStatusFlowProps = CustomDialogCallbacks;
9
+ export declare function VcStatusFlow({ onCancel, onComplete }: VcStatusFlowProps): React.ReactNode;
10
+ export {};