byterover-cli 2.6.0 → 3.0.1

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 (316) hide show
  1. package/.env.production +1 -0
  2. package/README.md +240 -14
  3. package/dist/agent/core/domain/knowledge/conflict-detector.d.ts +38 -0
  4. package/dist/agent/core/domain/knowledge/conflict-detector.js +71 -0
  5. package/dist/agent/core/domain/knowledge/conflict-resolver.d.ts +17 -0
  6. package/dist/agent/core/domain/knowledge/conflict-resolver.js +118 -0
  7. package/dist/agent/core/domain/knowledge/utils.d.ts +4 -0
  8. package/dist/agent/core/domain/knowledge/utils.js +6 -0
  9. package/dist/agent/core/interfaces/i-curate-service.d.ts +6 -0
  10. package/dist/agent/infra/tools/implementations/curate-tool.d.ts +67 -34
  11. package/dist/agent/infra/tools/implementations/curate-tool.js +294 -47
  12. package/dist/agent/resources/prompts/system-prompt.yml +15 -8
  13. package/dist/agent/resources/tools/code_exec.txt +3 -0
  14. package/dist/agent/resources/tools/curate.txt +12 -3
  15. package/dist/oclif/commands/connectors/install.d.ts +2 -1
  16. package/dist/oclif/commands/connectors/install.js +38 -3
  17. package/dist/oclif/commands/curate/index.d.ts +18 -0
  18. package/dist/oclif/commands/curate/index.js +78 -1
  19. package/dist/oclif/commands/init.d.ts +12 -0
  20. package/dist/oclif/commands/init.js +75 -0
  21. package/dist/oclif/commands/locations.js +1 -1
  22. package/dist/oclif/commands/providers/connect.d.ts +31 -1
  23. package/dist/oclif/commands/providers/connect.js +307 -27
  24. package/dist/oclif/commands/pull.d.ts +1 -0
  25. package/dist/oclif/commands/pull.js +7 -0
  26. package/dist/oclif/commands/push.d.ts +1 -0
  27. package/dist/oclif/commands/push.js +8 -0
  28. package/dist/oclif/commands/review/approve.d.ts +17 -0
  29. package/dist/oclif/commands/review/approve.js +37 -0
  30. package/dist/oclif/commands/review/base-review-decision.d.ts +18 -0
  31. package/dist/oclif/commands/review/base-review-decision.js +71 -0
  32. package/dist/oclif/commands/review/pending.d.ts +13 -0
  33. package/dist/oclif/commands/review/pending.js +94 -0
  34. package/dist/oclif/commands/review/reject.d.ts +17 -0
  35. package/dist/oclif/commands/review/reject.js +38 -0
  36. package/dist/oclif/commands/space/list.d.ts +2 -2
  37. package/dist/oclif/commands/space/list.js +13 -35
  38. package/dist/oclif/commands/space/switch.d.ts +2 -7
  39. package/dist/oclif/commands/space/switch.js +13 -56
  40. package/dist/oclif/commands/status.d.ts +1 -0
  41. package/dist/oclif/commands/status.js +11 -1
  42. package/dist/oclif/commands/vc/add.d.ts +7 -0
  43. package/dist/oclif/commands/vc/add.js +29 -0
  44. package/dist/oclif/commands/vc/branch.d.ts +15 -0
  45. package/dist/oclif/commands/vc/branch.js +70 -0
  46. package/dist/oclif/commands/vc/checkout.d.ts +14 -0
  47. package/dist/oclif/commands/vc/checkout.js +47 -0
  48. package/dist/oclif/commands/vc/clone.d.ts +9 -0
  49. package/dist/oclif/commands/vc/clone.js +61 -0
  50. package/dist/oclif/commands/vc/commit.d.ts +10 -0
  51. package/dist/oclif/commands/vc/commit.js +32 -0
  52. package/dist/oclif/commands/vc/config.d.ts +10 -0
  53. package/dist/oclif/commands/vc/config.js +30 -0
  54. package/dist/oclif/commands/vc/fetch.d.ts +10 -0
  55. package/dist/oclif/commands/vc/fetch.js +42 -0
  56. package/dist/oclif/commands/vc/index.d.ts +6 -0
  57. package/dist/oclif/commands/vc/index.js +8 -0
  58. package/dist/oclif/commands/vc/init.d.ts +6 -0
  59. package/dist/oclif/commands/vc/init.js +25 -0
  60. package/dist/oclif/commands/vc/log.d.ts +13 -0
  61. package/dist/oclif/commands/vc/log.js +48 -0
  62. package/dist/oclif/commands/vc/merge.d.ts +19 -0
  63. package/dist/oclif/commands/vc/merge.js +130 -0
  64. package/dist/oclif/commands/vc/pull.d.ts +13 -0
  65. package/dist/oclif/commands/vc/pull.js +60 -0
  66. package/dist/oclif/commands/vc/push.d.ts +13 -0
  67. package/dist/oclif/commands/vc/push.js +60 -0
  68. package/dist/oclif/commands/vc/remote/add.d.ts +10 -0
  69. package/dist/oclif/commands/vc/remote/add.js +30 -0
  70. package/dist/oclif/commands/vc/remote/index.d.ts +6 -0
  71. package/dist/oclif/commands/vc/remote/index.js +16 -0
  72. package/dist/oclif/commands/vc/remote/set-url.d.ts +10 -0
  73. package/dist/oclif/commands/vc/remote/set-url.js +30 -0
  74. package/dist/oclif/commands/vc/reset.d.ts +13 -0
  75. package/dist/oclif/commands/vc/reset.js +62 -0
  76. package/dist/oclif/commands/vc/status.d.ts +8 -0
  77. package/dist/oclif/commands/vc/status.js +106 -0
  78. package/dist/oclif/hooks/init/validate-brv-config.d.ts +26 -0
  79. package/dist/oclif/hooks/init/validate-brv-config.js +62 -0
  80. package/dist/oclif/lib/daemon-client.d.ts +2 -0
  81. package/dist/oclif/lib/daemon-client.js +36 -10
  82. package/dist/oclif/lib/prompt-utils.d.ts +43 -0
  83. package/dist/oclif/lib/prompt-utils.js +84 -0
  84. package/dist/oclif/lib/spinner.d.ts +8 -0
  85. package/dist/oclif/lib/spinner.js +23 -0
  86. package/dist/oclif/lib/task-client.d.ts +5 -0
  87. package/dist/oclif/lib/task-client.js +15 -2
  88. package/dist/server/config/environment.d.ts +2 -0
  89. package/dist/server/config/environment.js +2 -0
  90. package/dist/server/constants.d.ts +3 -0
  91. package/dist/server/constants.js +9 -0
  92. package/dist/server/core/domain/entities/auth-token.d.ts +2 -0
  93. package/dist/server/core/domain/entities/auth-token.js +7 -1
  94. package/dist/server/core/domain/entities/curate-log-entry.d.ts +11 -0
  95. package/dist/server/core/domain/entities/space.d.ts +4 -0
  96. package/dist/server/core/domain/entities/space.js +8 -0
  97. package/dist/server/core/domain/entities/team.d.ts +2 -0
  98. package/dist/server/core/domain/entities/team.js +4 -0
  99. package/dist/server/core/domain/errors/git-error.d.ts +6 -0
  100. package/dist/server/core/domain/errors/git-error.js +12 -0
  101. package/dist/server/core/domain/errors/task-error.d.ts +4 -0
  102. package/dist/server/core/domain/errors/task-error.js +8 -0
  103. package/dist/server/core/domain/errors/vc-error.d.ts +5 -0
  104. package/dist/server/core/domain/errors/vc-error.js +8 -0
  105. package/dist/server/core/domain/knowledge/markdown-writer.d.ts +4 -1
  106. package/dist/server/core/domain/knowledge/markdown-writer.js +37 -7
  107. package/dist/server/core/domain/transport/schemas.d.ts +6 -6
  108. package/dist/server/core/interfaces/context-tree/i-context-tree-service.d.ts +11 -0
  109. package/dist/server/core/interfaces/process/i-task-lifecycle-hook.d.ts +6 -0
  110. package/dist/server/core/interfaces/services/i-git-service.d.ts +234 -0
  111. package/dist/server/core/interfaces/services/i-git-service.js +1 -0
  112. package/dist/server/core/interfaces/storage/i-curate-log-store.d.ts +5 -0
  113. package/dist/server/core/interfaces/storage/i-review-backup-store.d.ts +19 -0
  114. package/dist/server/core/interfaces/storage/i-review-backup-store.js +1 -0
  115. package/dist/server/core/interfaces/vc/i-vc-git-config-store.d.ts +8 -0
  116. package/dist/server/core/interfaces/vc/i-vc-git-config-store.js +1 -0
  117. package/dist/server/infra/config/auto-init.d.ts +0 -2
  118. package/dist/server/infra/config/auto-init.js +0 -1
  119. package/dist/server/infra/context-tree/file-context-tree-service.d.ts +2 -0
  120. package/dist/server/infra/context-tree/file-context-tree-service.js +13 -0
  121. package/dist/server/infra/daemon/brv-server.js +23 -3
  122. package/dist/server/infra/git/cogit-url.d.ts +17 -0
  123. package/dist/server/infra/git/cogit-url.js +39 -0
  124. package/dist/server/infra/git/git-http-wrapper.d.ts +20 -0
  125. package/dist/server/infra/git/git-http-wrapper.js +334 -0
  126. package/dist/server/infra/git/isomorphic-git-service.d.ts +78 -0
  127. package/dist/server/infra/git/isomorphic-git-service.js +983 -0
  128. package/dist/server/infra/http/review-api-handler.d.ts +13 -0
  129. package/dist/server/infra/http/review-api-handler.js +286 -0
  130. package/dist/server/infra/http/review-ui.d.ts +7 -0
  131. package/dist/server/infra/http/review-ui.js +606 -0
  132. package/dist/server/infra/mcp/tools/brv-curate-tool.d.ts +2 -2
  133. package/dist/server/infra/process/curate-log-handler.d.ts +18 -2
  134. package/dist/server/infra/process/curate-log-handler.js +50 -13
  135. package/dist/server/infra/process/feature-handlers.js +41 -1
  136. package/dist/server/infra/process/task-router.js +16 -0
  137. package/dist/server/infra/space/http-space-service.js +2 -0
  138. package/dist/server/infra/storage/file-curate-log-store.d.ts +10 -0
  139. package/dist/server/infra/storage/file-curate-log-store.js +35 -0
  140. package/dist/server/infra/storage/file-review-backup-store.d.ts +29 -0
  141. package/dist/server/infra/storage/file-review-backup-store.js +121 -0
  142. package/dist/server/infra/transport/handlers/auth-handler.js +9 -5
  143. package/dist/server/infra/transport/handlers/handler-types.d.ts +9 -0
  144. package/dist/server/infra/transport/handlers/handler-types.js +11 -0
  145. package/dist/server/infra/transport/handlers/index.d.ts +4 -0
  146. package/dist/server/infra/transport/handlers/index.js +2 -0
  147. package/dist/server/infra/transport/handlers/init-handler.d.ts +1 -0
  148. package/dist/server/infra/transport/handlers/init-handler.js +13 -1
  149. package/dist/server/infra/transport/handlers/pull-handler.d.ts +3 -0
  150. package/dist/server/infra/transport/handlers/pull-handler.js +5 -1
  151. package/dist/server/infra/transport/handlers/push-handler.d.ts +20 -0
  152. package/dist/server/infra/transport/handlers/push-handler.js +116 -14
  153. package/dist/server/infra/transport/handlers/reset-handler.d.ts +11 -0
  154. package/dist/server/infra/transport/handlers/reset-handler.js +37 -1
  155. package/dist/server/infra/transport/handlers/review-handler.d.ts +35 -0
  156. package/dist/server/infra/transport/handlers/review-handler.js +162 -0
  157. package/dist/server/infra/transport/handlers/space-handler.d.ts +3 -0
  158. package/dist/server/infra/transport/handlers/space-handler.js +4 -1
  159. package/dist/server/infra/transport/handlers/status-handler.d.ts +5 -0
  160. package/dist/server/infra/transport/handlers/status-handler.js +51 -16
  161. package/dist/server/infra/transport/handlers/vc-handler.d.ts +100 -0
  162. package/dist/server/infra/transport/handlers/vc-handler.js +1050 -0
  163. package/dist/server/infra/transport/socket-io-transport-server.d.ts +7 -0
  164. package/dist/server/infra/transport/socket-io-transport-server.js +12 -1
  165. package/dist/server/infra/transport/transport-connector.d.ts +1 -1
  166. package/dist/server/infra/transport/transport-connector.js +2 -1
  167. package/dist/server/infra/vc/file-vc-git-config-store.d.ts +11 -0
  168. package/dist/server/infra/vc/file-vc-git-config-store.js +43 -0
  169. package/dist/server/templates/skill/SKILL.md +167 -33
  170. package/dist/server/utils/curate-result-parser.d.ts +64 -0
  171. package/dist/server/utils/curate-result-parser.js +8 -0
  172. package/dist/server/utils/gitignore.d.ts +9 -0
  173. package/dist/server/utils/gitignore.js +47 -0
  174. package/dist/shared/transport/events/index.d.ts +6 -0
  175. package/dist/shared/transport/events/index.js +3 -0
  176. package/dist/shared/transport/events/init-events.d.ts +8 -0
  177. package/dist/shared/transport/events/init-events.js +1 -0
  178. package/dist/shared/transport/events/push-events.d.ts +6 -0
  179. package/dist/shared/transport/events/review-events.d.ts +41 -0
  180. package/dist/shared/transport/events/review-events.js +5 -0
  181. package/dist/shared/transport/events/vc-events.d.ts +257 -0
  182. package/dist/shared/transport/events/vc-events.js +67 -0
  183. package/dist/shared/transport/types/dto.d.ts +6 -1
  184. package/dist/tui/app/pages/init-project-page.d.ts +9 -0
  185. package/dist/tui/app/pages/init-project-page.js +54 -0
  186. package/dist/tui/app/pages/protected-routes.js +14 -6
  187. package/dist/tui/components/index.d.ts +0 -2
  188. package/dist/tui/components/index.js +0 -1
  189. package/dist/tui/features/activity/hooks/use-activity-logs.js +7 -1
  190. package/dist/tui/features/commands/definitions/index.js +3 -0
  191. package/dist/tui/features/commands/definitions/space-list.js +9 -18
  192. package/dist/tui/features/commands/definitions/space-switch.js +10 -6
  193. package/dist/tui/features/commands/definitions/vc-add.d.ts +2 -0
  194. package/dist/tui/features/commands/definitions/vc-add.js +15 -0
  195. package/dist/tui/features/commands/definitions/vc-branch.d.ts +2 -0
  196. package/dist/tui/features/commands/definitions/vc-branch.js +33 -0
  197. package/dist/tui/features/commands/definitions/vc-checkout.d.ts +2 -0
  198. package/dist/tui/features/commands/definitions/vc-checkout.js +32 -0
  199. package/dist/tui/features/commands/definitions/vc-clone.d.ts +2 -0
  200. package/dist/tui/features/commands/definitions/vc-clone.js +18 -0
  201. package/dist/tui/features/commands/definitions/vc-commit.d.ts +2 -0
  202. package/dist/tui/features/commands/definitions/vc-commit.js +32 -0
  203. package/dist/tui/features/commands/definitions/vc-config.d.ts +2 -0
  204. package/dist/tui/features/commands/definitions/vc-config.js +40 -0
  205. package/dist/tui/features/commands/definitions/vc-fetch.d.ts +2 -0
  206. package/dist/tui/features/commands/definitions/vc-fetch.js +37 -0
  207. package/dist/tui/features/commands/definitions/vc-init.d.ts +2 -0
  208. package/dist/tui/features/commands/definitions/vc-init.js +11 -0
  209. package/dist/tui/features/commands/definitions/vc-log.d.ts +2 -0
  210. package/dist/tui/features/commands/definitions/vc-log.js +25 -0
  211. package/dist/tui/features/commands/definitions/vc-merge.d.ts +2 -0
  212. package/dist/tui/features/commands/definitions/vc-merge.js +48 -0
  213. package/dist/tui/features/commands/definitions/vc-pull.d.ts +2 -0
  214. package/dist/tui/features/commands/definitions/vc-pull.js +42 -0
  215. package/dist/tui/features/commands/definitions/vc-push.d.ts +2 -0
  216. package/dist/tui/features/commands/definitions/vc-push.js +38 -0
  217. package/dist/tui/features/commands/definitions/vc-remote.d.ts +2 -0
  218. package/dist/tui/features/commands/definitions/vc-remote.js +57 -0
  219. package/dist/tui/features/commands/definitions/vc-reset.d.ts +2 -0
  220. package/dist/tui/features/commands/definitions/vc-reset.js +35 -0
  221. package/dist/tui/features/commands/definitions/vc-status.d.ts +2 -0
  222. package/dist/tui/features/commands/definitions/vc-status.js +11 -0
  223. package/dist/tui/features/commands/definitions/vc.d.ts +2 -0
  224. package/dist/tui/features/commands/definitions/vc.js +36 -0
  225. package/dist/tui/features/commands/hooks/use-slash-command-processor.js +5 -5
  226. package/dist/tui/features/log/api/execute-log.d.ts +8 -0
  227. package/dist/tui/features/log/api/execute-log.js +13 -0
  228. package/dist/tui/features/log/components/log-flow.d.ts +14 -0
  229. package/dist/tui/features/log/components/log-flow.js +29 -0
  230. package/dist/tui/features/log/utils/format-log.d.ts +3 -0
  231. package/dist/tui/features/log/utils/format-log.js +42 -0
  232. package/dist/tui/features/onboarding/hooks/use-app-view-mode.d.ts +9 -5
  233. package/dist/tui/features/onboarding/hooks/use-app-view-mode.js +12 -5
  234. package/dist/tui/features/push/components/push-flow.js +9 -2
  235. package/dist/tui/features/reset/components/reset-flow.js +2 -1
  236. package/dist/tui/features/status/components/status-view.js +2 -1
  237. package/dist/tui/features/status/utils/format-status.js +9 -0
  238. package/dist/tui/features/tasks/hooks/use-task-subscriptions.js +11 -0
  239. package/dist/tui/features/tasks/stores/tasks-store.d.ts +10 -0
  240. package/dist/tui/features/tasks/stores/tasks-store.js +16 -0
  241. package/dist/tui/features/vc/add/api/execute-vc-add.d.ts +8 -0
  242. package/dist/tui/features/vc/add/api/execute-vc-add.js +13 -0
  243. package/dist/tui/features/vc/add/components/vc-add-flow.d.ts +7 -0
  244. package/dist/tui/features/vc/add/components/vc-add-flow.js +35 -0
  245. package/dist/tui/features/vc/branch/api/execute-vc-branch.d.ts +8 -0
  246. package/dist/tui/features/vc/branch/api/execute-vc-branch.js +13 -0
  247. package/dist/tui/features/vc/branch/components/vc-branch-flow.d.ts +8 -0
  248. package/dist/tui/features/vc/branch/components/vc-branch-flow.js +53 -0
  249. package/dist/tui/features/vc/branch/utils/format-branch.d.ts +4 -0
  250. package/dist/tui/features/vc/branch/utils/format-branch.js +12 -0
  251. package/dist/tui/features/vc/checkout/api/execute-vc-checkout.d.ts +8 -0
  252. package/dist/tui/features/vc/checkout/api/execute-vc-checkout.js +13 -0
  253. package/dist/tui/features/vc/checkout/components/vc-checkout-flow.d.ts +8 -0
  254. package/dist/tui/features/vc/checkout/components/vc-checkout-flow.js +33 -0
  255. package/dist/tui/features/vc/clone/api/execute-vc-clone.d.ts +8 -0
  256. package/dist/tui/features/vc/clone/api/execute-vc-clone.js +13 -0
  257. package/dist/tui/features/vc/clone/components/vc-clone-flow.d.ts +7 -0
  258. package/dist/tui/features/vc/clone/components/vc-clone-flow.js +79 -0
  259. package/dist/tui/features/vc/commit/api/execute-vc-commit.d.ts +8 -0
  260. package/dist/tui/features/vc/commit/api/execute-vc-commit.js +13 -0
  261. package/dist/tui/features/vc/commit/components/vc-commit-flow.d.ts +7 -0
  262. package/dist/tui/features/vc/commit/components/vc-commit-flow.js +29 -0
  263. package/dist/tui/features/vc/config/api/execute-vc-config.d.ts +8 -0
  264. package/dist/tui/features/vc/config/api/execute-vc-config.js +13 -0
  265. package/dist/tui/features/vc/config/components/vc-config-flow.d.ts +9 -0
  266. package/dist/tui/features/vc/config/components/vc-config-flow.js +30 -0
  267. package/dist/tui/features/vc/fetch/api/execute-vc-fetch.d.ts +8 -0
  268. package/dist/tui/features/vc/fetch/api/execute-vc-fetch.js +13 -0
  269. package/dist/tui/features/vc/fetch/components/vc-fetch-flow.d.ts +8 -0
  270. package/dist/tui/features/vc/fetch/components/vc-fetch-flow.js +75 -0
  271. package/dist/tui/features/vc/init/api/execute-vc-init.d.ts +8 -0
  272. package/dist/tui/features/vc/init/api/execute-vc-init.js +13 -0
  273. package/dist/tui/features/vc/init/components/vc-init-flow.d.ts +10 -0
  274. package/dist/tui/features/vc/init/components/vc-init-flow.js +37 -0
  275. package/dist/tui/features/vc/merge/api/execute-vc-merge.d.ts +8 -0
  276. package/dist/tui/features/vc/merge/api/execute-vc-merge.js +13 -0
  277. package/dist/tui/features/vc/merge/components/vc-merge-flow.d.ts +11 -0
  278. package/dist/tui/features/vc/merge/components/vc-merge-flow.js +72 -0
  279. package/dist/tui/features/vc/pull/api/execute-vc-pull.d.ts +8 -0
  280. package/dist/tui/features/vc/pull/api/execute-vc-pull.js +13 -0
  281. package/dist/tui/features/vc/pull/components/vc-pull-flow.d.ts +9 -0
  282. package/dist/tui/features/vc/pull/components/vc-pull-flow.js +83 -0
  283. package/dist/tui/features/vc/push/api/execute-vc-push.d.ts +8 -0
  284. package/dist/tui/features/vc/push/api/execute-vc-push.js +13 -0
  285. package/dist/tui/features/vc/push/components/vc-push-flow.d.ts +8 -0
  286. package/dist/tui/features/vc/push/components/vc-push-flow.js +83 -0
  287. package/dist/tui/features/vc/remote/api/execute-vc-remote.d.ts +8 -0
  288. package/dist/tui/features/vc/remote/api/execute-vc-remote.js +13 -0
  289. package/dist/tui/features/vc/remote/components/vc-remote-flow.d.ts +9 -0
  290. package/dist/tui/features/vc/remote/components/vc-remote-flow.js +42 -0
  291. package/dist/tui/features/vc/reset/api/execute-vc-reset.d.ts +8 -0
  292. package/dist/tui/features/vc/reset/api/execute-vc-reset.js +13 -0
  293. package/dist/tui/features/vc/reset/components/vc-reset-flow.d.ts +10 -0
  294. package/dist/tui/features/vc/reset/components/vc-reset-flow.js +63 -0
  295. package/dist/tui/features/vc/status/api/execute-vc-status.d.ts +8 -0
  296. package/dist/tui/features/vc/status/api/execute-vc-status.js +13 -0
  297. package/dist/tui/features/vc/status/components/vc-status-flow.d.ts +10 -0
  298. package/dist/tui/features/vc/status/components/vc-status-flow.js +133 -0
  299. package/dist/tui/lib/environment.d.ts +8 -0
  300. package/dist/tui/lib/environment.js +8 -0
  301. package/dist/tui/utils/error-messages.d.ts +5 -1
  302. package/dist/tui/utils/error-messages.js +32 -3
  303. package/oclif.manifest.json +1018 -98
  304. package/package.json +9 -3
  305. package/dist/oclif/hooks/prerun/validate-brv-config-version.d.ts +0 -33
  306. package/dist/oclif/hooks/prerun/validate-brv-config-version.js +0 -86
  307. package/dist/tui/components/init.d.ts +0 -33
  308. package/dist/tui/components/init.js +0 -234
  309. package/dist/tui/features/space/api/get-spaces.d.ts +0 -16
  310. package/dist/tui/features/space/api/get-spaces.js +0 -17
  311. package/dist/tui/features/space/api/switch-space.d.ts +0 -11
  312. package/dist/tui/features/space/api/switch-space.js +0 -24
  313. package/dist/tui/features/space/components/space-list-view.d.ts +0 -12
  314. package/dist/tui/features/space/components/space-list-view.js +0 -56
  315. package/dist/tui/features/space/components/space-switch-flow.d.ts +0 -13
  316. package/dist/tui/features/space/components/space-switch-flow.js +0 -97
package/package.json CHANGED
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "name": "byterover-cli",
3
3
  "description": "ByteRover's CLI",
4
- "version": "2.6.0",
4
+ "keywords": [
5
+ "cli", "ai", "llm", "mcp", "developer-tools",
6
+ "context-memory", "autonomous-agents", "coding-assistant",
7
+ "knowledge-management"
8
+ ],
9
+ "version": "3.0.1",
5
10
  "author": "ByteRover",
6
11
  "bin": {
7
12
  "brv": "./bin/run.js"
@@ -49,6 +54,7 @@
49
54
  "ink-spinner": "^5.0.0",
50
55
  "ink-text-input": "^6.0.0",
51
56
  "inquirer-file-selector": "^1.0.1",
57
+ "isomorphic-git": "^1.37.2",
52
58
  "js-yaml": "^4.1.1",
53
59
  "lodash-es": "^4.17.22",
54
60
  "minisearch": "^7.2.0",
@@ -128,11 +134,11 @@
128
134
  "init": [
129
135
  "./dist/oclif/hooks/init/block-command-update-npm",
130
136
  "./dist/oclif/hooks/init/welcome",
131
- "./dist/oclif/hooks/init/update-notifier"
137
+ "./dist/oclif/hooks/init/update-notifier",
138
+ "./dist/oclif/hooks/init/validate-brv-config"
132
139
  ],
133
140
  "command_not_found": "./dist/oclif/hooks/command_not_found/handle-invalid-commands",
134
141
  "error": "./dist/oclif/hooks/error/clean-errors",
135
- "prerun": "./dist/oclif/hooks/prerun/validate-brv-config-version",
136
142
  "postrun": "./dist/oclif/hooks/postrun/restart-after-update"
137
143
  },
138
144
  "plugins": [
@@ -1,33 +0,0 @@
1
- import type { Hook } from '@oclif/core';
2
- import type { IProjectConfigStore } from '../../../server/core/interfaces/storage/i-project-config-store.js';
3
- import { type AutoInitDeps } from '../../../server/infra/config/auto-init.js';
4
- /**
5
- * Commands that should skip auto-init and config version validation.
6
- */
7
- export declare const SKIP_COMMANDS: Set<string>;
8
- /**
9
- * Dependencies for the curate-view patch marker, injected for testability.
10
- * The marker file lives in the XDG/global data dir scoped to the current project,
11
- * keeping internal patch bookkeeping out of the user-facing .brv/config.json.
12
- */
13
- export type PatchMarkerDeps = {
14
- isPatched(): Promise<boolean>;
15
- markPatched(): Promise<void>;
16
- patchFn?: (cwd: string) => Promise<void>;
17
- };
18
- /**
19
- * Core validation logic extracted for testability.
20
- * Auto-initializes .brv/ if it doesn't exist, then migrates config version if needed.
21
- * Also ensures connector files are patched with `brv curate view` docs (once per project).
22
- *
23
- * @param commandId - The command being executed
24
- * @param configStore - The config store to use for reading config
25
- * @param autoInitDeps - Dependencies for auto-init (optional, for testing)
26
- * @param patchMarkerDeps - Dependencies for the curate-view patch marker (optional, for testing)
27
- */
28
- export declare const validateBrvConfigVersion: (commandId: string, configStore: IProjectConfigStore, autoInitDeps?: AutoInitDeps, patchMarkerDeps?: PatchMarkerDeps) => Promise<void>;
29
- /**
30
- * Prerun hook that auto-initializes .brv/ if missing, then validates config version.
31
- */
32
- declare const hook: Hook<'prerun'>;
33
- export default hook;
@@ -1,86 +0,0 @@
1
- import { access, mkdir, writeFile } from 'node:fs/promises';
2
- import { dirname, join } from 'node:path';
3
- import { BRV_CONFIG_VERSION } from '../../../server/constants.js';
4
- import { ensureProjectInitialized } from '../../../server/infra/config/auto-init.js';
5
- import { ProjectConfigStore } from '../../../server/infra/config/file-config-store.js';
6
- import { ensureCurateViewPatched } from '../../../server/infra/connectors/shared/rule-segment-patcher.js';
7
- import { FileContextTreeService } from '../../../server/infra/context-tree/file-context-tree-service.js';
8
- import { FileContextTreeSnapshotService } from '../../../server/infra/context-tree/file-context-tree-snapshot-service.js';
9
- import { syncConfigToXdg } from '../../../server/utils/config-xdg-sync.js';
10
- import { getProjectDataDir } from '../../../server/utils/path-utils.js';
11
- /**
12
- * Commands that should skip auto-init and config version validation.
13
- */
14
- export const SKIP_COMMANDS = new Set(['--help', 'help', 'login', 'logout']);
15
- const getCurateViewMarkerPath = (cwd) => join(getProjectDataDir(cwd), 'patches', 'curate-view.done');
16
- const defaultPatchMarkerDeps = (cwd) => ({
17
- async isPatched() {
18
- try {
19
- await access(getCurateViewMarkerPath(cwd));
20
- return true;
21
- }
22
- catch {
23
- return false;
24
- }
25
- },
26
- async markPatched() {
27
- const markerPath = getCurateViewMarkerPath(cwd);
28
- await mkdir(dirname(markerPath), { recursive: true });
29
- await writeFile(markerPath, '');
30
- },
31
- });
32
- /**
33
- * Core validation logic extracted for testability.
34
- * Auto-initializes .brv/ if it doesn't exist, then migrates config version if needed.
35
- * Also ensures connector files are patched with `brv curate view` docs (once per project).
36
- *
37
- * @param commandId - The command being executed
38
- * @param configStore - The config store to use for reading config
39
- * @param autoInitDeps - Dependencies for auto-init (optional, for testing)
40
- * @param patchMarkerDeps - Dependencies for the curate-view patch marker (optional, for testing)
41
- */
42
- export const validateBrvConfigVersion = async (commandId, configStore, autoInitDeps, patchMarkerDeps) => {
43
- // Skip for commands that don't need config
44
- if (SKIP_COMMANDS.has(commandId)) {
45
- return;
46
- }
47
- const exists = await configStore.exists();
48
- if (!exists) {
49
- // Auto-init: create .brv/ with minimal local config
50
- const deps = autoInitDeps ?? {
51
- contextTreeService: new FileContextTreeService(),
52
- contextTreeSnapshotService: new FileContextTreeSnapshotService(),
53
- projectConfigStore: configStore,
54
- };
55
- await ensureProjectInitialized(deps);
56
- return;
57
- }
58
- // Read existing config — fromJson() preserves original version
59
- const config = await configStore.read();
60
- if (!config)
61
- return;
62
- // ProjectConfigStore checks .brv/ at process.cwd() directly (no walk-up),
63
- // so configStore.exists() returning true means process.cwd() IS the project root.
64
- const cwd = process.cwd();
65
- // Gate the connector-file patch behind a per-project marker file in the XDG data dir.
66
- // This keeps internal bookkeeping out of the user-facing .brv/config.json.
67
- const marker = patchMarkerDeps ?? defaultPatchMarkerDeps(cwd);
68
- const alreadyPatched = await marker.isPatched();
69
- if (!alreadyPatched) {
70
- const patchFn = patchMarkerDeps?.patchFn ?? ensureCurateViewPatched;
71
- await patchFn(cwd).catch(() => { });
72
- await marker.markPatched().catch(() => { });
73
- }
74
- if (config.version !== BRV_CONFIG_VERSION) {
75
- const updated = config.withVersion(BRV_CONFIG_VERSION);
76
- await configStore.write(updated);
77
- await syncConfigToXdg(updated, cwd);
78
- }
79
- };
80
- /**
81
- * Prerun hook that auto-initializes .brv/ if missing, then validates config version.
82
- */
83
- const hook = async function (options) {
84
- await validateBrvConfigVersion(options.Command.id, new ProjectConfigStore());
85
- };
86
- export default hook;
@@ -1,33 +0,0 @@
1
- /**
2
- * Init Component
3
- *
4
- * Reusable component for running the /init command with streaming output
5
- * and inline prompts. Used by InitView and OnboardingFlow.
6
- */
7
- import React from 'react';
8
- import type { StreamingMessage } from '../types/index.js';
9
- /**
10
- * Processed streaming message for rendering
11
- * Includes action state for spinner display
12
- */
13
- export interface ProcessedMessage extends StreamingMessage {
14
- /** For action_start: whether the action is still running (no matching action_stop) */
15
- isActionRunning?: boolean;
16
- /** For action_start: the completion message from action_stop */
17
- stopMessage?: string;
18
- }
19
- export interface InitProps {
20
- /** Whether the component should be interactive (for EnterPrompt activation) */
21
- active?: boolean;
22
- /** Auto-start init without waiting for Enter key in idle state */
23
- autoStart?: boolean;
24
- /** Custom idle state message (optional) */
25
- idleMessage?: string;
26
- /** Maximum lines available for streaming output */
27
- maxOutputLines: number;
28
- /** Optional callback when init completes successfully */
29
- onInitComplete?: () => void;
30
- /** Show idle state message? (default: true for InitView, false for OnboardingFlow) */
31
- showIdleMessage?: boolean;
32
- }
33
- export declare const Init: React.FC<InitProps>;
@@ -1,234 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * Init Component
4
- *
5
- * Reusable component for running the /init command with streaming output
6
- * and inline prompts. Used by InitView and OnboardingFlow.
7
- */
8
- import { Box, Text } from 'ink';
9
- import Spinner from 'ink-spinner';
10
- import { useCallback, useEffect, useMemo, useState } from 'react';
11
- import { useCommands, useTheme } from '../hooks/index.js';
12
- import { EnterPrompt } from './enter-prompt.js';
13
- import { InlineConfirm, InlineInput, InlineSearch, InlineSelect } from './inline-prompts/index.js';
14
- /**
15
- * Count the total number of lines in streaming messages (simple newline count)
16
- *
17
- * @param messages - Array of streaming messages
18
- * @returns Total number of lines across all messages
19
- */
20
- function countOutputLines(messages) {
21
- let total = 0;
22
- for (const msg of messages) {
23
- total += msg.content.split('\n').length;
24
- }
25
- return total;
26
- }
27
- /**
28
- * Get messages from the end that fit within maxLines, truncating from the beginning
29
- *
30
- * @param messages - Array of streaming messages
31
- * @param maxLines - Maximum number of lines to display
32
- * @returns Object containing display messages, skipped lines count, and total lines
33
- */
34
- function getMessagesFromEnd(messages, maxLines) {
35
- const totalLines = countOutputLines(messages);
36
- if (totalLines <= maxLines) {
37
- return { displayMessages: messages, skippedLines: 0, totalLines };
38
- }
39
- const displayMessages = [];
40
- let lineCount = 0;
41
- // Iterate from the end (newest messages first)
42
- for (let i = messages.length - 1; i >= 0; i--) {
43
- const msg = messages[i];
44
- const msgLineArray = msg.content.split('\n');
45
- const msgLineCount = msgLineArray.length;
46
- if (lineCount + msgLineCount <= maxLines) {
47
- displayMessages.unshift(msg);
48
- lineCount += msgLineCount;
49
- }
50
- else {
51
- const remainingSpace = maxLines - lineCount;
52
- if (remainingSpace > 0) {
53
- const truncatedContent = msgLineArray.slice(-remainingSpace).join('\n');
54
- displayMessages.unshift({
55
- ...msg,
56
- content: truncatedContent,
57
- });
58
- lineCount += remainingSpace;
59
- }
60
- break;
61
- }
62
- }
63
- return {
64
- displayMessages,
65
- skippedLines: totalLines - lineCount,
66
- totalLines,
67
- };
68
- }
69
- /**
70
- * Process streaming messages to handle action_start/action_stop pairs
71
- * Matches action_start messages with their corresponding action_stop messages
72
- *
73
- * @param messages - Array of streaming messages
74
- * @returns Processed messages with action state included
75
- */
76
- function processMessagesForActions(messages) {
77
- const stopMessages = new Map();
78
- for (const msg of messages) {
79
- if (msg.type === 'action_stop' && msg.actionId) {
80
- stopMessages.set(msg.actionId, msg.content);
81
- }
82
- }
83
- const result = [];
84
- for (const msg of messages) {
85
- if (msg.type === 'action_stop') {
86
- continue;
87
- }
88
- if (msg.type === 'action_start' && msg.actionId) {
89
- const stopMessage = stopMessages.get(msg.actionId);
90
- result.push({
91
- ...msg,
92
- isActionRunning: stopMessage === undefined,
93
- stopMessage,
94
- });
95
- }
96
- else {
97
- result.push(msg);
98
- }
99
- }
100
- return result;
101
- }
102
- /** Minimum visible items for inline search */
103
- const MIN_SEARCH_ITEMS = 3;
104
- /** Reserved lines for inline search (message + input + margins) */
105
- const INLINE_SEARCH_OVERHEAD = 3;
106
- export const Init = ({ active = true, autoStart = false, idleMessage = 'Your project needs initializing.', maxOutputLines, onInitComplete, showIdleMessage = true, }) => {
107
- const { theme: { colors }, } = useTheme();
108
- const { commands, handleSlashCommand } = useCommands();
109
- const maxSearchItems = Math.max(MIN_SEARCH_ITEMS, maxOutputLines - INLINE_SEARCH_OVERHEAD);
110
- // Streaming state for init command
111
- const [isRunningInit, setIsRunningInit] = useState(false);
112
- const [streamingMessages, setStreamingMessages] = useState([]);
113
- const [activePrompt, setActivePrompt] = useState(null);
114
- const [activeDialog, setActiveDialog] = useState(null);
115
- const [initError, setInitError] = useState(null);
116
- // Handle init command execution
117
- const runInit = useCallback(async () => {
118
- if (isRunningInit)
119
- return;
120
- setIsRunningInit(true);
121
- setStreamingMessages([]);
122
- setInitError(null);
123
- const result = await handleSlashCommand('/init');
124
- if (result && 'render' in result) {
125
- // The InitFlow component handles everything, we just need to track when it completes
126
- setActiveDialog(result.render({
127
- onCancel() {
128
- setActiveDialog(null);
129
- setIsRunningInit(false);
130
- },
131
- onComplete(message) {
132
- setActiveDialog(null);
133
- setIsRunningInit(false);
134
- if (message) {
135
- setStreamingMessages((prev) => [...prev, { content: message, id: `result-${Date.now()}`, type: 'output' }]);
136
- }
137
- // Call completion callback if provided
138
- if (onInitComplete) {
139
- onInitComplete();
140
- }
141
- },
142
- }));
143
- }
144
- else if (result && 'type' in result && result.type === 'message') {
145
- setInitError(result.content);
146
- setIsRunningInit(false);
147
- }
148
- }, [handleSlashCommand, isRunningInit, onInitComplete]);
149
- // Auto-start init if autoStart is true and component is in idle state
150
- useEffect(() => {
151
- if (autoStart && commands.length > 0 && !isRunningInit && !initError) {
152
- runInit();
153
- }
154
- }, [autoStart, commands, isRunningInit, initError, runInit]);
155
- // Process streaming messages to handle action_start/action_stop pairs
156
- const processedStreamingMessages = useMemo(() => processMessagesForActions(streamingMessages), [streamingMessages]);
157
- // Render streaming message with proper styling
158
- const renderStreamingMessage = useCallback((msg) => {
159
- // Handle action messages with spinner
160
- if (msg.type === 'action_start') {
161
- if (msg.isActionRunning) {
162
- return (_jsxs(Text, { color: colors.text, children: [_jsx(Spinner, { type: "dots" }), " ", msg.content] }, msg.id));
163
- }
164
- return (_jsx(Text, { color: colors.text, children: msg.stopMessage ? `... ${msg.stopMessage}` : '' }, msg.id));
165
- }
166
- // Regular messages
167
- let color = colors.text;
168
- if (msg.type === 'error')
169
- color = colors.errorText;
170
- if (msg.type === 'warning')
171
- color = colors.warning;
172
- return (_jsx(Text, { color: color, children: msg.content }, msg.id));
173
- }, [colors]);
174
- // Prompt response handlers
175
- const handleSearchResponse = useCallback((value) => {
176
- if (activePrompt?.type === 'search') {
177
- activePrompt.onResponse(value);
178
- setActivePrompt(null);
179
- }
180
- }, [activePrompt]);
181
- const handleConfirmResponse = useCallback((value) => {
182
- if (activePrompt?.type === 'confirm') {
183
- activePrompt.onResponse(value);
184
- setActivePrompt(null);
185
- }
186
- }, [activePrompt]);
187
- const handleSelectResponse = useCallback((value) => {
188
- if (activePrompt?.type === 'select') {
189
- activePrompt.onResponse(value);
190
- setActivePrompt(null);
191
- }
192
- }, [activePrompt]);
193
- const handleInputResponse = useCallback((value) => {
194
- if (activePrompt?.type === 'input') {
195
- activePrompt.onResponse(value);
196
- setActivePrompt(null);
197
- }
198
- }, [activePrompt]);
199
- // Render active prompt
200
- const renderActivePrompt = useCallback(() => {
201
- if (!activePrompt)
202
- return null;
203
- switch (activePrompt.type) {
204
- case 'confirm': {
205
- return (_jsx(InlineConfirm, { default: activePrompt.default, message: activePrompt.message, onConfirm: handleConfirmResponse }));
206
- }
207
- case 'input': {
208
- return (_jsx(InlineInput, { message: activePrompt.message, onSubmit: handleInputResponse, placeholder: activePrompt.placeholder, validate: activePrompt.validate }));
209
- }
210
- case 'search': {
211
- return (_jsx(InlineSearch, { maxVisibleItems: maxSearchItems, message: activePrompt.message, onSelect: handleSearchResponse, source: activePrompt.source }));
212
- }
213
- case 'select': {
214
- return (_jsx(InlineSelect, { choices: activePrompt.choices, message: activePrompt.message, onSelect: handleSelectResponse }));
215
- }
216
- default: {
217
- return null;
218
- }
219
- }
220
- }, [
221
- activePrompt,
222
- handleConfirmResponse,
223
- handleInputResponse,
224
- handleSearchResponse,
225
- handleSelectResponse,
226
- maxSearchItems,
227
- ]);
228
- // Error state - show error with retry
229
- if (initError) {
230
- return (_jsxs(Box, { flexDirection: "column", rowGap: 1, children: [_jsxs(Text, { color: colors.errorText, children: ["Error: ", initError] }), _jsx(EnterPrompt, { action: "try again", active: active && !isRunningInit && !activePrompt, onEnter: runInit })] }));
231
- }
232
- const { displayMessages } = getMessagesFromEnd(processedStreamingMessages, maxOutputLines);
233
- return (_jsxs(Box, { flexDirection: "column", rowGap: 1, children: [showIdleMessage && !activeDialog && _jsx(Text, { color: colors.text, children: idleMessage }), activeDialog, !activeDialog && displayMessages.length > 0 && (_jsxs(Box, { borderColor: colors.border, borderStyle: "single", flexDirection: "column", paddingX: 1, paddingY: 0, width: "100%", children: [displayMessages.map((streamMsg) => renderStreamingMessage(streamMsg)), renderActivePrompt()] })), !isRunningInit && !activeDialog && displayMessages.length === 0 && (_jsx(EnterPrompt, { action: "initialize your project", active: active && !isRunningInit && !activePrompt, onEnter: runInit }))] }));
234
- };
@@ -1,16 +0,0 @@
1
- import type { QueryConfig } from '../../../lib/react-query.js';
2
- import { type SpaceListResponse } from '../../../../shared/transport/events/index.js';
3
- export declare const getSpaces: () => Promise<SpaceListResponse>;
4
- export declare const getSpacesQueryOptions: () => import("@tanstack/react-query").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<SpaceListResponse, Error, SpaceListResponse, string[]>, "queryFn"> & {
5
- queryFn?: import("@tanstack/react-query").QueryFunction<SpaceListResponse, string[], never> | undefined;
6
- } & {
7
- queryKey: string[] & {
8
- [dataTagSymbol]: SpaceListResponse;
9
- [dataTagErrorSymbol]: Error;
10
- };
11
- };
12
- type UseGetSpacesOptions = {
13
- queryConfig?: QueryConfig<typeof getSpacesQueryOptions>;
14
- };
15
- export declare const useGetSpaces: ({ queryConfig }?: UseGetSpacesOptions) => import("@tanstack/react-query").UseQueryResult<SpaceListResponse, Error>;
16
- export {};
@@ -1,17 +0,0 @@
1
- import { queryOptions, useQuery } from '@tanstack/react-query';
2
- import { SpaceEvents } from '../../../../shared/transport/events/index.js';
3
- import { useTransportStore } from '../../../stores/transport-store.js';
4
- export const getSpaces = () => {
5
- const { apiClient } = useTransportStore.getState();
6
- if (!apiClient)
7
- return Promise.reject(new Error('Not connected'));
8
- return apiClient.request(SpaceEvents.LIST);
9
- };
10
- export const getSpacesQueryOptions = () => queryOptions({
11
- queryFn: getSpaces,
12
- queryKey: ['space', 'list'],
13
- });
14
- export const useGetSpaces = ({ queryConfig } = {}) => useQuery({
15
- ...getSpacesQueryOptions(),
16
- ...queryConfig,
17
- });
@@ -1,11 +0,0 @@
1
- import type { MutationConfig } from '../../../lib/react-query.js';
2
- import { type SpaceSwitchResponse } from '../../../../shared/transport/events/index.js';
3
- export type SwitchSpaceDTO = {
4
- spaceId: string;
5
- };
6
- export declare const switchSpace: ({ spaceId }: SwitchSpaceDTO) => Promise<SpaceSwitchResponse>;
7
- type UseSwitchSpaceOptions = {
8
- mutationConfig?: MutationConfig<typeof switchSpace>;
9
- };
10
- export declare const useSwitchSpace: ({ mutationConfig }?: UseSwitchSpaceOptions) => import("@tanstack/react-query").UseMutationResult<SpaceSwitchResponse, Error, SwitchSpaceDTO, unknown>;
11
- export {};
@@ -1,24 +0,0 @@
1
- import { useMutation, useQueryClient } from '@tanstack/react-query';
2
- import { SpaceEvents } from '../../../../shared/transport/events/index.js';
3
- import { useTransportStore } from '../../../stores/transport-store.js';
4
- import { getSpacesQueryOptions } from './get-spaces.js';
5
- export const switchSpace = ({ spaceId }) => {
6
- const { apiClient } = useTransportStore.getState();
7
- if (!apiClient)
8
- return Promise.reject(new Error('Not connected'));
9
- return apiClient.request(SpaceEvents.SWITCH, { spaceId });
10
- };
11
- export const useSwitchSpace = ({ mutationConfig } = {}) => {
12
- const queryClient = useQueryClient();
13
- const { onSuccess, ...restConfig } = mutationConfig ?? {};
14
- return useMutation({
15
- onSuccess(...args) {
16
- queryClient.invalidateQueries({
17
- queryKey: getSpacesQueryOptions().queryKey,
18
- });
19
- onSuccess?.(...args);
20
- },
21
- ...restConfig,
22
- mutationFn: switchSpace,
23
- });
24
- };
@@ -1,12 +0,0 @@
1
- /**
2
- * SpaceListView Component
3
- *
4
- * Fetches and displays all spaces for the current team.
5
- */
6
- import React from 'react';
7
- import type { CustomDialogCallbacks } from '../../../types/commands.js';
8
- interface SpaceListViewProps extends CustomDialogCallbacks {
9
- json?: boolean;
10
- }
11
- export declare function SpaceListView({ json, onComplete }: SpaceListViewProps): React.ReactNode;
12
- export {};
@@ -1,56 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * SpaceListView Component
4
- *
5
- * Fetches and displays all spaces for the current team.
6
- */
7
- import { Text } from 'ink';
8
- import Spinner from 'ink-spinner';
9
- import { useEffect, useMemo } from 'react';
10
- import { useGetSpaces } from '../api/get-spaces.js';
11
- export function SpaceListView({ json, onComplete }) {
12
- const { data, error, isLoading } = useGetSpaces();
13
- const result = useMemo(() => {
14
- if (!data)
15
- return null;
16
- const { teams } = data;
17
- if (teams.length === 0)
18
- return 'No teams found.';
19
- if (json) {
20
- return JSON.stringify(teams.map((t) => ({
21
- teamId: t.teamId,
22
- teamName: t.teamName,
23
- // eslint-disable-next-line perfectionist/sort-objects
24
- spaces: t.spaces.map((s) => ({
25
- isDefault: s.isDefault,
26
- spaceId: s.id,
27
- spaceName: s.name,
28
- })),
29
- })), undefined, 2);
30
- }
31
- const lines = [];
32
- for (const [index, team] of teams.entries()) {
33
- lines.push(`${index + 1}. ${team.teamName} (team)`);
34
- if (team.spaces.length === 0) {
35
- lines.push(' No spaces');
36
- }
37
- else {
38
- for (const space of team.spaces) {
39
- const defaultMarker = space.isDefault ? ' (default)' : '';
40
- lines.push(` - ${space.name}${defaultMarker} (space)`);
41
- }
42
- }
43
- }
44
- return lines.join('\n');
45
- }, [data, json]);
46
- useEffect(() => {
47
- if (result)
48
- onComplete(result);
49
- if (error)
50
- onComplete(`Failed to list spaces: ${error.message}`);
51
- }, [error, onComplete, result]);
52
- if (isLoading) {
53
- return (_jsxs(Text, { children: [_jsx(Spinner, { type: "dots" }), " Fetching spaces..."] }));
54
- }
55
- return null;
56
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * SpaceSwitchFlow Component
3
- *
4
- * React flow for the /space switch command.
5
- * Fetches spaces → renders selection → switches config → pulls context from new space.
6
- */
7
- import React from 'react';
8
- export interface SpaceSwitchFlowProps {
9
- isActive?: boolean;
10
- onCancel: () => void;
11
- onComplete: (message: string) => void;
12
- }
13
- export declare const SpaceSwitchFlow: React.FC<SpaceSwitchFlowProps>;