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.
- package/.env.production +1 -0
- package/README.md +240 -14
- package/dist/agent/core/domain/knowledge/conflict-detector.d.ts +38 -0
- package/dist/agent/core/domain/knowledge/conflict-detector.js +71 -0
- package/dist/agent/core/domain/knowledge/conflict-resolver.d.ts +17 -0
- package/dist/agent/core/domain/knowledge/conflict-resolver.js +118 -0
- package/dist/agent/core/domain/knowledge/utils.d.ts +4 -0
- package/dist/agent/core/domain/knowledge/utils.js +6 -0
- package/dist/agent/core/interfaces/i-curate-service.d.ts +6 -0
- package/dist/agent/infra/tools/implementations/curate-tool.d.ts +67 -34
- package/dist/agent/infra/tools/implementations/curate-tool.js +294 -47
- package/dist/agent/resources/prompts/system-prompt.yml +15 -8
- package/dist/agent/resources/tools/code_exec.txt +3 -0
- package/dist/agent/resources/tools/curate.txt +12 -3
- package/dist/oclif/commands/connectors/install.d.ts +2 -1
- package/dist/oclif/commands/connectors/install.js +38 -3
- package/dist/oclif/commands/curate/index.d.ts +18 -0
- package/dist/oclif/commands/curate/index.js +78 -1
- package/dist/oclif/commands/init.d.ts +12 -0
- package/dist/oclif/commands/init.js +75 -0
- package/dist/oclif/commands/locations.js +1 -1
- package/dist/oclif/commands/providers/connect.d.ts +31 -1
- package/dist/oclif/commands/providers/connect.js +307 -27
- package/dist/oclif/commands/pull.d.ts +1 -0
- package/dist/oclif/commands/pull.js +7 -0
- package/dist/oclif/commands/push.d.ts +1 -0
- package/dist/oclif/commands/push.js +8 -0
- package/dist/oclif/commands/review/approve.d.ts +17 -0
- package/dist/oclif/commands/review/approve.js +37 -0
- package/dist/oclif/commands/review/base-review-decision.d.ts +18 -0
- package/dist/oclif/commands/review/base-review-decision.js +71 -0
- package/dist/oclif/commands/review/pending.d.ts +13 -0
- package/dist/oclif/commands/review/pending.js +94 -0
- package/dist/oclif/commands/review/reject.d.ts +17 -0
- package/dist/oclif/commands/review/reject.js +38 -0
- package/dist/oclif/commands/space/list.d.ts +2 -2
- package/dist/oclif/commands/space/list.js +13 -35
- package/dist/oclif/commands/space/switch.d.ts +2 -7
- package/dist/oclif/commands/space/switch.js +13 -56
- package/dist/oclif/commands/status.d.ts +1 -0
- package/dist/oclif/commands/status.js +11 -1
- package/dist/oclif/commands/vc/add.d.ts +7 -0
- package/dist/oclif/commands/vc/add.js +29 -0
- package/dist/oclif/commands/vc/branch.d.ts +15 -0
- package/dist/oclif/commands/vc/branch.js +70 -0
- package/dist/oclif/commands/vc/checkout.d.ts +14 -0
- package/dist/oclif/commands/vc/checkout.js +47 -0
- package/dist/oclif/commands/vc/clone.d.ts +9 -0
- package/dist/oclif/commands/vc/clone.js +61 -0
- package/dist/oclif/commands/vc/commit.d.ts +10 -0
- package/dist/oclif/commands/vc/commit.js +32 -0
- package/dist/oclif/commands/vc/config.d.ts +10 -0
- package/dist/oclif/commands/vc/config.js +30 -0
- package/dist/oclif/commands/vc/fetch.d.ts +10 -0
- package/dist/oclif/commands/vc/fetch.js +42 -0
- package/dist/oclif/commands/vc/index.d.ts +6 -0
- package/dist/oclif/commands/vc/index.js +8 -0
- package/dist/oclif/commands/vc/init.d.ts +6 -0
- package/dist/oclif/commands/vc/init.js +25 -0
- package/dist/oclif/commands/vc/log.d.ts +13 -0
- package/dist/oclif/commands/vc/log.js +48 -0
- package/dist/oclif/commands/vc/merge.d.ts +19 -0
- package/dist/oclif/commands/vc/merge.js +130 -0
- package/dist/oclif/commands/vc/pull.d.ts +13 -0
- package/dist/oclif/commands/vc/pull.js +60 -0
- package/dist/oclif/commands/vc/push.d.ts +13 -0
- package/dist/oclif/commands/vc/push.js +60 -0
- package/dist/oclif/commands/vc/remote/add.d.ts +10 -0
- package/dist/oclif/commands/vc/remote/add.js +30 -0
- package/dist/oclif/commands/vc/remote/index.d.ts +6 -0
- package/dist/oclif/commands/vc/remote/index.js +16 -0
- package/dist/oclif/commands/vc/remote/set-url.d.ts +10 -0
- package/dist/oclif/commands/vc/remote/set-url.js +30 -0
- package/dist/oclif/commands/vc/reset.d.ts +13 -0
- package/dist/oclif/commands/vc/reset.js +62 -0
- package/dist/oclif/commands/vc/status.d.ts +8 -0
- package/dist/oclif/commands/vc/status.js +106 -0
- package/dist/oclif/hooks/init/validate-brv-config.d.ts +26 -0
- package/dist/oclif/hooks/init/validate-brv-config.js +62 -0
- package/dist/oclif/lib/daemon-client.d.ts +2 -0
- package/dist/oclif/lib/daemon-client.js +36 -10
- package/dist/oclif/lib/prompt-utils.d.ts +43 -0
- package/dist/oclif/lib/prompt-utils.js +84 -0
- package/dist/oclif/lib/spinner.d.ts +8 -0
- package/dist/oclif/lib/spinner.js +23 -0
- package/dist/oclif/lib/task-client.d.ts +5 -0
- package/dist/oclif/lib/task-client.js +15 -2
- package/dist/server/config/environment.d.ts +2 -0
- package/dist/server/config/environment.js +2 -0
- package/dist/server/constants.d.ts +3 -0
- package/dist/server/constants.js +9 -0
- package/dist/server/core/domain/entities/auth-token.d.ts +2 -0
- package/dist/server/core/domain/entities/auth-token.js +7 -1
- package/dist/server/core/domain/entities/curate-log-entry.d.ts +11 -0
- package/dist/server/core/domain/entities/space.d.ts +4 -0
- package/dist/server/core/domain/entities/space.js +8 -0
- package/dist/server/core/domain/entities/team.d.ts +2 -0
- package/dist/server/core/domain/entities/team.js +4 -0
- package/dist/server/core/domain/errors/git-error.d.ts +6 -0
- package/dist/server/core/domain/errors/git-error.js +12 -0
- package/dist/server/core/domain/errors/task-error.d.ts +4 -0
- package/dist/server/core/domain/errors/task-error.js +8 -0
- package/dist/server/core/domain/errors/vc-error.d.ts +5 -0
- package/dist/server/core/domain/errors/vc-error.js +8 -0
- package/dist/server/core/domain/knowledge/markdown-writer.d.ts +4 -1
- package/dist/server/core/domain/knowledge/markdown-writer.js +37 -7
- package/dist/server/core/domain/transport/schemas.d.ts +6 -6
- package/dist/server/core/interfaces/context-tree/i-context-tree-service.d.ts +11 -0
- package/dist/server/core/interfaces/process/i-task-lifecycle-hook.d.ts +6 -0
- package/dist/server/core/interfaces/services/i-git-service.d.ts +234 -0
- package/dist/server/core/interfaces/services/i-git-service.js +1 -0
- package/dist/server/core/interfaces/storage/i-curate-log-store.d.ts +5 -0
- package/dist/server/core/interfaces/storage/i-review-backup-store.d.ts +19 -0
- package/dist/server/core/interfaces/storage/i-review-backup-store.js +1 -0
- package/dist/server/core/interfaces/vc/i-vc-git-config-store.d.ts +8 -0
- package/dist/server/core/interfaces/vc/i-vc-git-config-store.js +1 -0
- package/dist/server/infra/config/auto-init.d.ts +0 -2
- package/dist/server/infra/config/auto-init.js +0 -1
- package/dist/server/infra/context-tree/file-context-tree-service.d.ts +2 -0
- package/dist/server/infra/context-tree/file-context-tree-service.js +13 -0
- package/dist/server/infra/daemon/brv-server.js +23 -3
- package/dist/server/infra/git/cogit-url.d.ts +17 -0
- package/dist/server/infra/git/cogit-url.js +39 -0
- package/dist/server/infra/git/git-http-wrapper.d.ts +20 -0
- package/dist/server/infra/git/git-http-wrapper.js +334 -0
- package/dist/server/infra/git/isomorphic-git-service.d.ts +78 -0
- package/dist/server/infra/git/isomorphic-git-service.js +983 -0
- package/dist/server/infra/http/review-api-handler.d.ts +13 -0
- package/dist/server/infra/http/review-api-handler.js +286 -0
- package/dist/server/infra/http/review-ui.d.ts +7 -0
- package/dist/server/infra/http/review-ui.js +606 -0
- package/dist/server/infra/mcp/tools/brv-curate-tool.d.ts +2 -2
- package/dist/server/infra/process/curate-log-handler.d.ts +18 -2
- package/dist/server/infra/process/curate-log-handler.js +50 -13
- package/dist/server/infra/process/feature-handlers.js +41 -1
- package/dist/server/infra/process/task-router.js +16 -0
- package/dist/server/infra/space/http-space-service.js +2 -0
- package/dist/server/infra/storage/file-curate-log-store.d.ts +10 -0
- package/dist/server/infra/storage/file-curate-log-store.js +35 -0
- package/dist/server/infra/storage/file-review-backup-store.d.ts +29 -0
- package/dist/server/infra/storage/file-review-backup-store.js +121 -0
- package/dist/server/infra/transport/handlers/auth-handler.js +9 -5
- package/dist/server/infra/transport/handlers/handler-types.d.ts +9 -0
- package/dist/server/infra/transport/handlers/handler-types.js +11 -0
- package/dist/server/infra/transport/handlers/index.d.ts +4 -0
- package/dist/server/infra/transport/handlers/index.js +2 -0
- package/dist/server/infra/transport/handlers/init-handler.d.ts +1 -0
- package/dist/server/infra/transport/handlers/init-handler.js +13 -1
- package/dist/server/infra/transport/handlers/pull-handler.d.ts +3 -0
- package/dist/server/infra/transport/handlers/pull-handler.js +5 -1
- package/dist/server/infra/transport/handlers/push-handler.d.ts +20 -0
- package/dist/server/infra/transport/handlers/push-handler.js +116 -14
- package/dist/server/infra/transport/handlers/reset-handler.d.ts +11 -0
- package/dist/server/infra/transport/handlers/reset-handler.js +37 -1
- package/dist/server/infra/transport/handlers/review-handler.d.ts +35 -0
- package/dist/server/infra/transport/handlers/review-handler.js +162 -0
- package/dist/server/infra/transport/handlers/space-handler.d.ts +3 -0
- package/dist/server/infra/transport/handlers/space-handler.js +4 -1
- package/dist/server/infra/transport/handlers/status-handler.d.ts +5 -0
- package/dist/server/infra/transport/handlers/status-handler.js +51 -16
- package/dist/server/infra/transport/handlers/vc-handler.d.ts +100 -0
- package/dist/server/infra/transport/handlers/vc-handler.js +1050 -0
- package/dist/server/infra/transport/socket-io-transport-server.d.ts +7 -0
- package/dist/server/infra/transport/socket-io-transport-server.js +12 -1
- package/dist/server/infra/transport/transport-connector.d.ts +1 -1
- package/dist/server/infra/transport/transport-connector.js +2 -1
- package/dist/server/infra/vc/file-vc-git-config-store.d.ts +11 -0
- package/dist/server/infra/vc/file-vc-git-config-store.js +43 -0
- package/dist/server/templates/skill/SKILL.md +167 -33
- package/dist/server/utils/curate-result-parser.d.ts +64 -0
- package/dist/server/utils/curate-result-parser.js +8 -0
- package/dist/server/utils/gitignore.d.ts +9 -0
- package/dist/server/utils/gitignore.js +47 -0
- package/dist/shared/transport/events/index.d.ts +6 -0
- package/dist/shared/transport/events/index.js +3 -0
- package/dist/shared/transport/events/init-events.d.ts +8 -0
- package/dist/shared/transport/events/init-events.js +1 -0
- package/dist/shared/transport/events/push-events.d.ts +6 -0
- package/dist/shared/transport/events/review-events.d.ts +41 -0
- package/dist/shared/transport/events/review-events.js +5 -0
- package/dist/shared/transport/events/vc-events.d.ts +257 -0
- package/dist/shared/transport/events/vc-events.js +67 -0
- package/dist/shared/transport/types/dto.d.ts +6 -1
- package/dist/tui/app/pages/init-project-page.d.ts +9 -0
- package/dist/tui/app/pages/init-project-page.js +54 -0
- package/dist/tui/app/pages/protected-routes.js +14 -6
- package/dist/tui/components/index.d.ts +0 -2
- package/dist/tui/components/index.js +0 -1
- package/dist/tui/features/activity/hooks/use-activity-logs.js +7 -1
- package/dist/tui/features/commands/definitions/index.js +3 -0
- package/dist/tui/features/commands/definitions/space-list.js +9 -18
- package/dist/tui/features/commands/definitions/space-switch.js +10 -6
- package/dist/tui/features/commands/definitions/vc-add.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-add.js +15 -0
- package/dist/tui/features/commands/definitions/vc-branch.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-branch.js +33 -0
- package/dist/tui/features/commands/definitions/vc-checkout.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-checkout.js +32 -0
- package/dist/tui/features/commands/definitions/vc-clone.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-clone.js +18 -0
- package/dist/tui/features/commands/definitions/vc-commit.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-commit.js +32 -0
- package/dist/tui/features/commands/definitions/vc-config.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-config.js +40 -0
- package/dist/tui/features/commands/definitions/vc-fetch.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-fetch.js +37 -0
- package/dist/tui/features/commands/definitions/vc-init.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-init.js +11 -0
- package/dist/tui/features/commands/definitions/vc-log.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-log.js +25 -0
- package/dist/tui/features/commands/definitions/vc-merge.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-merge.js +48 -0
- package/dist/tui/features/commands/definitions/vc-pull.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-pull.js +42 -0
- package/dist/tui/features/commands/definitions/vc-push.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-push.js +38 -0
- package/dist/tui/features/commands/definitions/vc-remote.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-remote.js +57 -0
- package/dist/tui/features/commands/definitions/vc-reset.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-reset.js +35 -0
- package/dist/tui/features/commands/definitions/vc-status.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc-status.js +11 -0
- package/dist/tui/features/commands/definitions/vc.d.ts +2 -0
- package/dist/tui/features/commands/definitions/vc.js +36 -0
- package/dist/tui/features/commands/hooks/use-slash-command-processor.js +5 -5
- package/dist/tui/features/log/api/execute-log.d.ts +8 -0
- package/dist/tui/features/log/api/execute-log.js +13 -0
- package/dist/tui/features/log/components/log-flow.d.ts +14 -0
- package/dist/tui/features/log/components/log-flow.js +29 -0
- package/dist/tui/features/log/utils/format-log.d.ts +3 -0
- package/dist/tui/features/log/utils/format-log.js +42 -0
- package/dist/tui/features/onboarding/hooks/use-app-view-mode.d.ts +9 -5
- package/dist/tui/features/onboarding/hooks/use-app-view-mode.js +12 -5
- package/dist/tui/features/push/components/push-flow.js +9 -2
- package/dist/tui/features/reset/components/reset-flow.js +2 -1
- package/dist/tui/features/status/components/status-view.js +2 -1
- package/dist/tui/features/status/utils/format-status.js +9 -0
- package/dist/tui/features/tasks/hooks/use-task-subscriptions.js +11 -0
- package/dist/tui/features/tasks/stores/tasks-store.d.ts +10 -0
- package/dist/tui/features/tasks/stores/tasks-store.js +16 -0
- package/dist/tui/features/vc/add/api/execute-vc-add.d.ts +8 -0
- package/dist/tui/features/vc/add/api/execute-vc-add.js +13 -0
- package/dist/tui/features/vc/add/components/vc-add-flow.d.ts +7 -0
- package/dist/tui/features/vc/add/components/vc-add-flow.js +35 -0
- package/dist/tui/features/vc/branch/api/execute-vc-branch.d.ts +8 -0
- package/dist/tui/features/vc/branch/api/execute-vc-branch.js +13 -0
- package/dist/tui/features/vc/branch/components/vc-branch-flow.d.ts +8 -0
- package/dist/tui/features/vc/branch/components/vc-branch-flow.js +53 -0
- package/dist/tui/features/vc/branch/utils/format-branch.d.ts +4 -0
- package/dist/tui/features/vc/branch/utils/format-branch.js +12 -0
- package/dist/tui/features/vc/checkout/api/execute-vc-checkout.d.ts +8 -0
- package/dist/tui/features/vc/checkout/api/execute-vc-checkout.js +13 -0
- package/dist/tui/features/vc/checkout/components/vc-checkout-flow.d.ts +8 -0
- package/dist/tui/features/vc/checkout/components/vc-checkout-flow.js +33 -0
- package/dist/tui/features/vc/clone/api/execute-vc-clone.d.ts +8 -0
- package/dist/tui/features/vc/clone/api/execute-vc-clone.js +13 -0
- package/dist/tui/features/vc/clone/components/vc-clone-flow.d.ts +7 -0
- package/dist/tui/features/vc/clone/components/vc-clone-flow.js +79 -0
- package/dist/tui/features/vc/commit/api/execute-vc-commit.d.ts +8 -0
- package/dist/tui/features/vc/commit/api/execute-vc-commit.js +13 -0
- package/dist/tui/features/vc/commit/components/vc-commit-flow.d.ts +7 -0
- package/dist/tui/features/vc/commit/components/vc-commit-flow.js +29 -0
- package/dist/tui/features/vc/config/api/execute-vc-config.d.ts +8 -0
- package/dist/tui/features/vc/config/api/execute-vc-config.js +13 -0
- package/dist/tui/features/vc/config/components/vc-config-flow.d.ts +9 -0
- package/dist/tui/features/vc/config/components/vc-config-flow.js +30 -0
- package/dist/tui/features/vc/fetch/api/execute-vc-fetch.d.ts +8 -0
- package/dist/tui/features/vc/fetch/api/execute-vc-fetch.js +13 -0
- package/dist/tui/features/vc/fetch/components/vc-fetch-flow.d.ts +8 -0
- package/dist/tui/features/vc/fetch/components/vc-fetch-flow.js +75 -0
- package/dist/tui/features/vc/init/api/execute-vc-init.d.ts +8 -0
- package/dist/tui/features/vc/init/api/execute-vc-init.js +13 -0
- package/dist/tui/features/vc/init/components/vc-init-flow.d.ts +10 -0
- package/dist/tui/features/vc/init/components/vc-init-flow.js +37 -0
- package/dist/tui/features/vc/merge/api/execute-vc-merge.d.ts +8 -0
- package/dist/tui/features/vc/merge/api/execute-vc-merge.js +13 -0
- package/dist/tui/features/vc/merge/components/vc-merge-flow.d.ts +11 -0
- package/dist/tui/features/vc/merge/components/vc-merge-flow.js +72 -0
- package/dist/tui/features/vc/pull/api/execute-vc-pull.d.ts +8 -0
- package/dist/tui/features/vc/pull/api/execute-vc-pull.js +13 -0
- package/dist/tui/features/vc/pull/components/vc-pull-flow.d.ts +9 -0
- package/dist/tui/features/vc/pull/components/vc-pull-flow.js +83 -0
- package/dist/tui/features/vc/push/api/execute-vc-push.d.ts +8 -0
- package/dist/tui/features/vc/push/api/execute-vc-push.js +13 -0
- package/dist/tui/features/vc/push/components/vc-push-flow.d.ts +8 -0
- package/dist/tui/features/vc/push/components/vc-push-flow.js +83 -0
- package/dist/tui/features/vc/remote/api/execute-vc-remote.d.ts +8 -0
- package/dist/tui/features/vc/remote/api/execute-vc-remote.js +13 -0
- package/dist/tui/features/vc/remote/components/vc-remote-flow.d.ts +9 -0
- package/dist/tui/features/vc/remote/components/vc-remote-flow.js +42 -0
- package/dist/tui/features/vc/reset/api/execute-vc-reset.d.ts +8 -0
- package/dist/tui/features/vc/reset/api/execute-vc-reset.js +13 -0
- package/dist/tui/features/vc/reset/components/vc-reset-flow.d.ts +10 -0
- package/dist/tui/features/vc/reset/components/vc-reset-flow.js +63 -0
- package/dist/tui/features/vc/status/api/execute-vc-status.d.ts +8 -0
- package/dist/tui/features/vc/status/api/execute-vc-status.js +13 -0
- package/dist/tui/features/vc/status/components/vc-status-flow.d.ts +10 -0
- package/dist/tui/features/vc/status/components/vc-status-flow.js +133 -0
- package/dist/tui/lib/environment.d.ts +8 -0
- package/dist/tui/lib/environment.js +8 -0
- package/dist/tui/utils/error-messages.d.ts +5 -1
- package/dist/tui/utils/error-messages.js +32 -3
- package/oclif.manifest.json +1018 -98
- package/package.json +9 -3
- package/dist/oclif/hooks/prerun/validate-brv-config-version.d.ts +0 -33
- package/dist/oclif/hooks/prerun/validate-brv-config-version.js +0 -86
- package/dist/tui/components/init.d.ts +0 -33
- package/dist/tui/components/init.js +0 -234
- package/dist/tui/features/space/api/get-spaces.d.ts +0 -16
- package/dist/tui/features/space/api/get-spaces.js +0 -17
- package/dist/tui/features/space/api/switch-space.d.ts +0 -11
- package/dist/tui/features/space/api/switch-space.js +0 -24
- package/dist/tui/features/space/components/space-list-view.d.ts +0 -12
- package/dist/tui/features/space/components/space-list-view.js +0 -56
- package/dist/tui/features/space/components/space-switch-flow.d.ts +0 -13
- 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
|
-
"
|
|
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>;
|