@compilr-dev/cli 0.4.0 → 0.5.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/README.md +254 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +134 -4
- package/dist/agent.js +345 -166
- package/dist/anchors/index.d.ts +9 -0
- package/dist/anchors/index.js +9 -0
- package/dist/anchors/project-anchors.d.ts +79 -0
- package/dist/anchors/project-anchors.js +202 -0
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +533 -0
- package/dist/commands-v2/handlers/core.d.ts +14 -0
- package/dist/commands-v2/handlers/core.js +290 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +177 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +25 -0
- package/dist/commands-v2/handlers/index.js +63 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +1035 -0
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +17 -0
- package/dist/commands-v2/handlers/settings.js +417 -0
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +14 -0
- package/dist/commands-v2/index.js +18 -0
- package/dist/commands-v2/registry.d.ts +52 -0
- package/dist/commands-v2/registry.js +114 -0
- package/dist/commands-v2/types.d.ts +153 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +123 -7
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +615 -179
- package/dist/input-handlers/index.d.ts +7 -0
- package/dist/input-handlers/index.js +7 -0
- package/dist/input-handlers/memory-handler.d.ts +26 -0
- package/dist/input-handlers/memory-handler.js +69 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.d.ts +63 -0
- package/dist/repl-helpers.js +319 -0
- package/dist/repl-v2.d.ts +554 -0
- package/dist/repl-v2.js +3286 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +156 -13
- package/dist/settings/index.js +377 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +114 -0
- package/dist/settings/paths.js +270 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -58
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +35 -75
- package/dist/themes/colors.js +3 -1
- package/dist/themes/registry.d.ts +5 -36
- package/dist/themes/registry.js +11 -95
- package/dist/themes/types.d.ts +3 -38
- package/dist/themes/types.js +2 -2
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +56 -0
- package/dist/tools/backlog-wrappers.js +353 -0
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +2 -2
- package/dist/tools/db-tools.d.ts +12 -0
- package/dist/tools/db-tools.js +14 -0
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +43 -0
- package/dist/tools/document-db.js +220 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +34 -0
- package/dist/tools/project-db.js +39 -0
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +135 -0
- package/dist/tools/workitem-db.js +730 -0
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +238 -38
- package/dist/ui/ask-user-overlay.d.ts +2 -2
- package/dist/ui/ask-user-overlay.js +443 -535
- package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +26 -0
- package/dist/ui/base/index.js +33 -0
- package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
- package/dist/ui/base/inline-overlay-utils.js +320 -0
- package/dist/ui/base/inline-overlay.d.ts +159 -0
- package/dist/ui/base/inline-overlay.js +257 -0
- package/dist/ui/base/key-utils.d.ts +15 -0
- package/dist/ui/base/key-utils.js +30 -0
- package/dist/ui/base/overlay-base-v2.d.ts +203 -0
- package/dist/ui/base/overlay-base-v2.js +260 -0
- package/dist/ui/base/overlay-base.d.ts +156 -0
- package/dist/ui/base/overlay-base.js +238 -0
- package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
- package/dist/ui/base/overlay-lifecycle.js +159 -0
- package/dist/ui/base/overlay-types.d.ts +185 -0
- package/dist/ui/base/overlay-types.js +7 -0
- package/dist/ui/base/render-utils.d.ts +27 -0
- package/dist/ui/base/render-utils.js +36 -0
- package/dist/ui/base/screen-stack.d.ts +148 -0
- package/dist/ui/base/screen-stack.js +184 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
- package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
- package/dist/ui/base/tabbed-list-overlay.js +369 -0
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.d.ts +75 -4
- package/dist/ui/conversation.js +376 -165
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +4 -10
- package/dist/ui/features/index.d.ts +34 -0
- package/dist/ui/features/index.js +34 -0
- package/dist/ui/features/input-feature.d.ts +85 -0
- package/dist/ui/features/input-feature.js +238 -0
- package/dist/ui/features/list-feature.d.ts +155 -0
- package/dist/ui/features/list-feature.js +244 -0
- package/dist/ui/features/pagination-feature.d.ts +154 -0
- package/dist/ui/features/pagination-feature.js +238 -0
- package/dist/ui/features/search-feature.d.ts +148 -0
- package/dist/ui/features/search-feature.js +185 -0
- package/dist/ui/features/tab-feature.d.ts +194 -0
- package/dist/ui/features/tab-feature.js +307 -0
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +181 -7
- package/dist/ui/footer.js +523 -74
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +135 -33
- package/dist/ui/input-prompt.js +728 -337
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/keys-overlay.d.ts +1 -0
- package/dist/ui/keys-overlay.js +203 -141
- package/dist/ui/line-utils.d.ts +88 -0
- package/dist/ui/line-utils.js +150 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +157 -0
- package/dist/ui/live-region.js +379 -0
- package/dist/ui/mascot/expressions.d.ts +32 -0
- package/dist/ui/mascot/expressions.js +213 -0
- package/dist/ui/mascot/index.d.ts +8 -0
- package/dist/ui/mascot/index.js +8 -0
- package/dist/ui/mascot/renderer.d.ts +19 -0
- package/dist/ui/mascot/renderer.js +132 -0
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
- package/dist/ui/overlay/index.d.ts +52 -0
- package/dist/ui/overlay/index.js +54 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/types.d.ts +140 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +4 -460
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +189 -300
- package/dist/ui/providers/types.d.ts +178 -0
- package/dist/ui/providers/types.js +9 -0
- package/dist/ui/render-modes.d.ts +36 -0
- package/dist/ui/render-modes.js +44 -0
- package/dist/ui/startup-menu.d.ts +36 -0
- package/dist/ui/startup-menu.js +236 -0
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +318 -0
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +220 -0
- package/dist/ui/terminal-renderer.js +750 -0
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +331 -0
- package/dist/ui/terminal-ui.js +819 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +124 -38
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +1027 -0
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +39 -17
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +240 -0
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/dist/workflow/guided-mode-injector.d.ts +42 -0
- package/dist/workflow/guided-mode-injector.js +191 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/step-criteria.d.ts +62 -0
- package/dist/workflow/step-criteria.js +150 -0
- package/dist/workflow/step-tracker.d.ts +92 -0
- package/dist/workflow/step-tracker.js +141 -0
- package/package.json +32 -12
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -121
- package/dist/repl.js +0 -1878
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -501
- package/dist/ui/arch-type-overlay.d.ts +0 -20
- package/dist/ui/arch-type-overlay.js +0 -229
- package/dist/ui/backlog-overlay.d.ts +0 -17
- package/dist/ui/backlog-overlay.js +0 -786
- package/dist/ui/commands-overlay.d.ts +0 -11
- package/dist/ui/commands-overlay.js +0 -410
- package/dist/ui/config-overlay.d.ts +0 -34
- package/dist/ui/config-overlay.js +0 -977
- package/dist/ui/init-overlay.d.ts +0 -24
- package/dist/ui/init-overlay.js +0 -525
- package/dist/ui/input-prompt-v2.d.ts +0 -179
- package/dist/ui/input-prompt-v2.js +0 -991
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -171
- package/dist/ui/tools-overlay.d.ts +0 -26
- package/dist/ui/tools-overlay.js +0 -278
- package/dist/ui/tutorial-overlay.d.ts +0 -10
- package/dist/ui/tutorial-overlay.js +0 -936
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Commands for REPL V2
|
|
3
|
+
*
|
|
4
|
+
* Commands for managing multi-agent teams.
|
|
5
|
+
*/
|
|
6
|
+
import pc from 'picocolors';
|
|
7
|
+
import { TeamOverlayV2 } from '../../ui/overlay/impl/team-overlay-v2.js';
|
|
8
|
+
import { CustomAgentFormOverlayV2 } from '../../ui/overlay/impl/custom-agent-form-overlay-v2.js';
|
|
9
|
+
import { ArtifactOverlayV2, ArtifactDetailOverlayV2 } from '../../ui/overlay/index.js';
|
|
10
|
+
import { ROLE_METADATA, PREDEFINED_ROLE_IDS } from '../../multi-agent/index.js';
|
|
11
|
+
import { loadCustomAgents, createCustomAgentDefinition, addCustomAgent, removeCustomAgent, } from '../../multi-agent/custom-agents.js';
|
|
12
|
+
import { getCurrentProject } from '../../tools/project-db.js';
|
|
13
|
+
import { getSessionRegistry } from '../../multi-agent/session-registry.js';
|
|
14
|
+
import { saveCurrentTeam, saveCurrentSession } from './session.js';
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Helper: Save team roster + session (ensures session file exists for /resume)
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Save team state and also persist the default agent's session.
|
|
20
|
+
* This ensures a `current-{prefix}.json` file exists even when
|
|
21
|
+
* the only change was an /add or /remove — making the session
|
|
22
|
+
* visible to the startup restore flow and /resume overlay.
|
|
23
|
+
*/
|
|
24
|
+
function saveTeamAndSession(team, ctx) {
|
|
25
|
+
saveCurrentTeam(team);
|
|
26
|
+
// Also save the session so it shows up in /resume
|
|
27
|
+
const defaultAgent = team.get('default')?.agent ?? ctx.agent;
|
|
28
|
+
if (defaultAgent) {
|
|
29
|
+
void saveCurrentSession(defaultAgent.serialize());
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// =============================================================================
|
|
33
|
+
// Helper: Sync team roster to session registry
|
|
34
|
+
// =============================================================================
|
|
35
|
+
function syncTeamRoster(team) {
|
|
36
|
+
try {
|
|
37
|
+
const registry = getSessionRegistry();
|
|
38
|
+
if (registry) {
|
|
39
|
+
const agents = team.getAll();
|
|
40
|
+
registry.updateAgents(agents.map((a) => ({
|
|
41
|
+
id: a.id,
|
|
42
|
+
displayName: a.displayName,
|
|
43
|
+
mascot: a.mascot,
|
|
44
|
+
})));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Best effort
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// Helper: Format Team Status
|
|
53
|
+
// =============================================================================
|
|
54
|
+
function formatTeamStatus(team) {
|
|
55
|
+
const lines = [];
|
|
56
|
+
const agents = team.getAll();
|
|
57
|
+
lines.push(pc.bold(`Team: ${team.name}`));
|
|
58
|
+
lines.push(pc.dim(`─`.repeat(40)));
|
|
59
|
+
for (const agent of agents) {
|
|
60
|
+
const isActive = agent.id === team.activeAgentId;
|
|
61
|
+
const isCoordinator = agent.id === team.coordinatorId;
|
|
62
|
+
const prefix = isActive ? pc.green('▶') : ' ';
|
|
63
|
+
const label = agent.getFullLabel();
|
|
64
|
+
const badges = [];
|
|
65
|
+
if (isActive)
|
|
66
|
+
badges.push(pc.green('active'));
|
|
67
|
+
if (isCoordinator)
|
|
68
|
+
badges.push(pc.yellow('coordinator'));
|
|
69
|
+
const badgeStr = badges.length > 0 ? ` ${pc.dim('[')}${badges.join(pc.dim(', '))}${pc.dim(']')}` : '';
|
|
70
|
+
lines.push(`${prefix} ${label}${badgeStr}`);
|
|
71
|
+
if (agent.description) {
|
|
72
|
+
lines.push(` ${pc.dim(agent.description)}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
lines.push(pc.dim(`─`.repeat(40)));
|
|
76
|
+
lines.push(pc.dim(`${String(agents.length)} agent${agents.length !== 1 ? 's' : ''} in team`));
|
|
77
|
+
return lines;
|
|
78
|
+
}
|
|
79
|
+
// =============================================================================
|
|
80
|
+
// /team Command
|
|
81
|
+
// =============================================================================
|
|
82
|
+
// Generate role list dynamically from PREDEFINED_ROLE_IDS (excluding 'default')
|
|
83
|
+
const AVAILABLE_ROLES = PREDEFINED_ROLE_IDS.filter((r) => r !== 'default').join(', ');
|
|
84
|
+
export const teamCommand = {
|
|
85
|
+
name: 'team',
|
|
86
|
+
description: 'Manage multi-agent team',
|
|
87
|
+
details: `Open team overlay or use subcommands: status, add <role> [id], remove <id>, switch <id>
|
|
88
|
+
Roles: ${AVAILABLE_ROLES}. Switch with $agent prefix (e.g., $arch)`,
|
|
89
|
+
async execute(args, ctx) {
|
|
90
|
+
const team = ctx.team;
|
|
91
|
+
if (!team) {
|
|
92
|
+
ctx.ui.print({ type: 'warning', message: 'Multi-agent team not initialized' });
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
const trimmedArgs = args.trim().toLowerCase();
|
|
96
|
+
const [subcommand, ...rest] = trimmedArgs.split(/\s+/);
|
|
97
|
+
const arg = rest.join(' ');
|
|
98
|
+
// Handle subcommands
|
|
99
|
+
switch (subcommand) {
|
|
100
|
+
case '':
|
|
101
|
+
// No args - open overlay
|
|
102
|
+
return openTeamOverlay(ctx, team);
|
|
103
|
+
case 'status': {
|
|
104
|
+
// Quick status view
|
|
105
|
+
const lines = formatTeamStatus(team);
|
|
106
|
+
for (const line of lines) {
|
|
107
|
+
ctx.ui.print({ type: 'info', message: line });
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
case 'add':
|
|
112
|
+
return handleAddAgent(ctx, team, arg);
|
|
113
|
+
case 'remove':
|
|
114
|
+
case 'rm':
|
|
115
|
+
return handleRemoveAgent(ctx, team, arg);
|
|
116
|
+
case 'switch':
|
|
117
|
+
case 'sw':
|
|
118
|
+
return handleSwitchAgent(ctx, team, arg);
|
|
119
|
+
case 'coordinator':
|
|
120
|
+
case 'coord':
|
|
121
|
+
return handleSetCoordinator(ctx, team, arg);
|
|
122
|
+
default:
|
|
123
|
+
// Unknown subcommand - maybe it's a role to add?
|
|
124
|
+
if (subcommand in ROLE_METADATA && subcommand !== 'default') {
|
|
125
|
+
return handleAddAgent(ctx, team, subcommand);
|
|
126
|
+
}
|
|
127
|
+
ctx.ui.print({ type: 'error', message: `Unknown subcommand: ${subcommand}` });
|
|
128
|
+
ctx.ui.print({ type: 'info', message: 'Use /team for the team management overlay' });
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
// =============================================================================
|
|
134
|
+
// Subcommand Handlers
|
|
135
|
+
// =============================================================================
|
|
136
|
+
async function openTeamOverlay(ctx, team) {
|
|
137
|
+
const overlay = new TeamOverlayV2(team);
|
|
138
|
+
const result = await ctx.ui.showOverlay(overlay);
|
|
139
|
+
if (result?.action === 'switch' && result.agentId) {
|
|
140
|
+
try {
|
|
141
|
+
if (ctx.switchAgent) {
|
|
142
|
+
await ctx.switchAgent(result.agentId);
|
|
143
|
+
}
|
|
144
|
+
const agent = team.get(result.agentId);
|
|
145
|
+
ctx.ui.print({
|
|
146
|
+
type: 'success',
|
|
147
|
+
message: `Switched to ${agent?.getFullLabel() ?? result.agentId}`,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
ctx.ui.print({
|
|
152
|
+
type: 'error',
|
|
153
|
+
message: `Failed to switch: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (result?.action === 'add' && result.role) {
|
|
158
|
+
try {
|
|
159
|
+
const requestedId = result.customId ?? result.role;
|
|
160
|
+
const agent = await team.addAgentFromRole(result.role, result.customId, result.modelTier);
|
|
161
|
+
// Detect cross-terminal collision (agent got a different ID)
|
|
162
|
+
if (agent.id !== requestedId) {
|
|
163
|
+
ctx.ui.print({
|
|
164
|
+
type: 'info',
|
|
165
|
+
message: `Agent '${requestedId}' is active in another terminal. Using '${agent.id}' instead.`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
syncTeamRoster(team);
|
|
169
|
+
saveTeamAndSession(team, ctx);
|
|
170
|
+
ctx.ui.print({
|
|
171
|
+
type: 'success',
|
|
172
|
+
message: `Added ${agent.getFullLabel()} to team`,
|
|
173
|
+
});
|
|
174
|
+
if (result.customId) {
|
|
175
|
+
ctx.ui.print({
|
|
176
|
+
type: 'info',
|
|
177
|
+
message: `Use $${agent.id} to switch to this agent`,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
ctx.ui.print({
|
|
183
|
+
type: 'error',
|
|
184
|
+
message: `Failed to add agent: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (result?.action === 'compact' && result.agentId) {
|
|
189
|
+
// Per-agent compaction
|
|
190
|
+
const teamAgent = team.get(result.agentId);
|
|
191
|
+
if (!teamAgent) {
|
|
192
|
+
ctx.ui.print({
|
|
193
|
+
type: 'error',
|
|
194
|
+
message: `Agent '${result.agentId}' not found`,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
else if (!teamAgent.agent) {
|
|
198
|
+
ctx.ui.print({
|
|
199
|
+
type: 'warning',
|
|
200
|
+
message: `Agent '${result.agentId}' has no context to compact`,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
ctx.ui.print({
|
|
205
|
+
type: 'info',
|
|
206
|
+
message: `Compacting ${teamAgent.getFullLabel()}'s context...`,
|
|
207
|
+
});
|
|
208
|
+
try {
|
|
209
|
+
// Use the agent's compact method
|
|
210
|
+
await teamAgent.agent.compact();
|
|
211
|
+
ctx.ui.print({
|
|
212
|
+
type: 'success',
|
|
213
|
+
message: `Compacted ${teamAgent.getFullLabel()}'s context`,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
ctx.ui.print({
|
|
218
|
+
type: 'error',
|
|
219
|
+
message: `Failed to compact: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else if (result?.action === 'create-custom') {
|
|
225
|
+
// Custom agent creation
|
|
226
|
+
await handleCreateCustomAgent(ctx, team);
|
|
227
|
+
}
|
|
228
|
+
else if (result?.action === 'remove' && result.agentId) {
|
|
229
|
+
// Remove agent from team
|
|
230
|
+
const agentId = result.agentId;
|
|
231
|
+
const agent = team.get(agentId);
|
|
232
|
+
const label = agent?.getFullLabel() ?? agentId;
|
|
233
|
+
const isCustom = result.role === 'custom';
|
|
234
|
+
const wasActive = team.activeAgentId === agentId;
|
|
235
|
+
const removed = team.removeAgent(agentId);
|
|
236
|
+
if (removed) {
|
|
237
|
+
syncTeamRoster(team);
|
|
238
|
+
saveTeamAndSession(team, ctx);
|
|
239
|
+
// If the removed agent was active, team switches to default — update footer
|
|
240
|
+
if (wasActive) {
|
|
241
|
+
ctx.ui.setActiveTeamAgent(null);
|
|
242
|
+
}
|
|
243
|
+
// Also remove from custom-agents.json if it's a custom agent
|
|
244
|
+
if (isCustom) {
|
|
245
|
+
const currentProject = getCurrentProject();
|
|
246
|
+
if (currentProject?.path) {
|
|
247
|
+
removeCustomAgent(currentProject.path, agentId);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
ctx.ui.print({ type: 'success', message: `Removed ${label} from team` });
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
ctx.ui.print({ type: 'error', message: `Failed to remove ${label}` });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else if (result?.action === 'change-tier' && result.agentId && result.modelTier) {
|
|
257
|
+
// Change agent's model tier
|
|
258
|
+
const agentId = result.agentId;
|
|
259
|
+
const newTier = result.modelTier;
|
|
260
|
+
try {
|
|
261
|
+
const agent = await team.changeAgentTier(agentId, newTier);
|
|
262
|
+
ctx.ui.print({
|
|
263
|
+
type: 'success',
|
|
264
|
+
message: `Changed ${agent.getFullLabel()} to ${newTier} model`,
|
|
265
|
+
});
|
|
266
|
+
// If this is the active agent, update the REPL's reference
|
|
267
|
+
if (agentId === team.activeAgentId && agent.agent && ctx.restoreAgent) {
|
|
268
|
+
ctx.restoreAgent(agent.agent);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
ctx.ui.print({
|
|
273
|
+
type: 'error',
|
|
274
|
+
message: `Failed to change tier: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
async function handleCreateCustomAgent(ctx, team) {
|
|
281
|
+
// Check for project context
|
|
282
|
+
const currentProject = getCurrentProject();
|
|
283
|
+
if (!currentProject?.path) {
|
|
284
|
+
ctx.ui.print({
|
|
285
|
+
type: 'warning',
|
|
286
|
+
message: 'Select a project first to create custom agents',
|
|
287
|
+
});
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const projectPath = currentProject.path;
|
|
291
|
+
// Load existing custom agents for duplicate check
|
|
292
|
+
const existingCustomAgents = loadCustomAgents(projectPath);
|
|
293
|
+
const teamAgentIds = team.getAgentIds();
|
|
294
|
+
// Show custom agent form
|
|
295
|
+
const formOverlay = new CustomAgentFormOverlayV2({
|
|
296
|
+
existingCustomAgents,
|
|
297
|
+
teamAgentIds,
|
|
298
|
+
});
|
|
299
|
+
const formResult = await ctx.ui.showOverlay(formOverlay);
|
|
300
|
+
// User cancelled
|
|
301
|
+
if (!formResult || formResult.cancelled || !formResult.agent) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
// Create the custom agent definition
|
|
305
|
+
const agentData = formResult.agent;
|
|
306
|
+
const agentDef = createCustomAgentDefinition(agentData.id, agentData.displayName, agentData.specialty, agentData.personality, existingCustomAgents, agentData.toolConfig, agentData.enabledSkills, agentData.modelTier);
|
|
307
|
+
// Save to project
|
|
308
|
+
try {
|
|
309
|
+
addCustomAgent(projectPath, agentDef);
|
|
310
|
+
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
ctx.ui.print({
|
|
313
|
+
type: 'error',
|
|
314
|
+
message: `Failed to save custom agent: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
315
|
+
});
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
// Add to team
|
|
319
|
+
try {
|
|
320
|
+
const requestedId = agentDef.id;
|
|
321
|
+
const teamAgent = await team.addCustomAgent(agentDef);
|
|
322
|
+
// Detect cross-terminal collision
|
|
323
|
+
if (teamAgent.id !== requestedId) {
|
|
324
|
+
ctx.ui.print({
|
|
325
|
+
type: 'info',
|
|
326
|
+
message: `Agent '${requestedId}' is active in another terminal. Using '${teamAgent.id}' instead.`,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
syncTeamRoster(team);
|
|
330
|
+
saveTeamAndSession(team, ctx);
|
|
331
|
+
ctx.ui.print({
|
|
332
|
+
type: 'success',
|
|
333
|
+
message: `Created ${teamAgent.getFullLabel()}`,
|
|
334
|
+
});
|
|
335
|
+
ctx.ui.print({
|
|
336
|
+
type: 'info',
|
|
337
|
+
message: `Use $${teamAgent.id} to switch to this agent`,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
ctx.ui.print({
|
|
342
|
+
type: 'error',
|
|
343
|
+
message: `Failed to add custom agent to team: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
async function handleAddAgent(ctx, team, args) {
|
|
348
|
+
// Parse: /team add <role> [custom-id]
|
|
349
|
+
const parts = args.trim().split(/\s+/);
|
|
350
|
+
const roleName = parts[0];
|
|
351
|
+
const customId = parts[1]; // Optional custom ID
|
|
352
|
+
if (!roleName) {
|
|
353
|
+
ctx.ui.print({ type: 'error', message: 'Usage: /team add <role> [custom-id]' });
|
|
354
|
+
ctx.ui.print({
|
|
355
|
+
type: 'info',
|
|
356
|
+
message: `Available roles: ${Object.keys(ROLE_METADATA).filter(r => r !== 'default').join(', ')}`,
|
|
357
|
+
});
|
|
358
|
+
ctx.ui.print({
|
|
359
|
+
type: 'info',
|
|
360
|
+
message: 'Example: /team add arch my-architect',
|
|
361
|
+
});
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
if (!(roleName in ROLE_METADATA) || roleName === 'default') {
|
|
365
|
+
ctx.ui.print({ type: 'error', message: `Unknown role: ${roleName}` });
|
|
366
|
+
ctx.ui.print({
|
|
367
|
+
type: 'info',
|
|
368
|
+
message: `Available roles: ${Object.keys(ROLE_METADATA).filter(r => r !== 'default').join(', ')}`,
|
|
369
|
+
});
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
const role = roleName;
|
|
373
|
+
// Check if the agent ID (custom or role name) already exists
|
|
374
|
+
const agentId = customId || role;
|
|
375
|
+
if (team.has(agentId)) {
|
|
376
|
+
ctx.ui.print({ type: 'warning', message: `Agent '${agentId}' already exists in team` });
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
try {
|
|
380
|
+
const requestedId = customId || role;
|
|
381
|
+
const agent = await team.addAgentFromRole(role, customId);
|
|
382
|
+
// Detect cross-terminal collision (agent got a different ID)
|
|
383
|
+
if (agent.id !== requestedId) {
|
|
384
|
+
ctx.ui.print({
|
|
385
|
+
type: 'info',
|
|
386
|
+
message: `Agent '${requestedId}' is active in another terminal. Using '${agent.id}' instead.`,
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
syncTeamRoster(team);
|
|
390
|
+
saveTeamAndSession(team, ctx);
|
|
391
|
+
ctx.ui.print({
|
|
392
|
+
type: 'success',
|
|
393
|
+
message: `Added ${agent.getFullLabel()} to team`,
|
|
394
|
+
});
|
|
395
|
+
if (customId) {
|
|
396
|
+
ctx.ui.print({
|
|
397
|
+
type: 'info',
|
|
398
|
+
message: `Use $${agent.id} to switch to this agent`,
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
catch (err) {
|
|
403
|
+
ctx.ui.print({
|
|
404
|
+
type: 'error',
|
|
405
|
+
message: `Failed to add agent: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
return true;
|
|
409
|
+
}
|
|
410
|
+
function handleRemoveAgent(ctx, team, agentId) {
|
|
411
|
+
if (!agentId) {
|
|
412
|
+
ctx.ui.print({ type: 'error', message: 'Usage: /team remove <agent-id>' });
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
if (agentId === 'default') {
|
|
416
|
+
ctx.ui.print({ type: 'error', message: 'Cannot remove the default agent' });
|
|
417
|
+
return true;
|
|
418
|
+
}
|
|
419
|
+
if (!team.has(agentId)) {
|
|
420
|
+
ctx.ui.print({ type: 'error', message: `Agent '${agentId}' not found in team` });
|
|
421
|
+
return true;
|
|
422
|
+
}
|
|
423
|
+
const agent = team.get(agentId);
|
|
424
|
+
const label = agent?.getFullLabel() ?? agentId;
|
|
425
|
+
const wasActive = team.activeAgentId === agentId;
|
|
426
|
+
const removed = team.removeAgent(agentId);
|
|
427
|
+
if (removed) {
|
|
428
|
+
syncTeamRoster(team);
|
|
429
|
+
saveTeamAndSession(team, ctx);
|
|
430
|
+
// If the removed agent was active, team switches to default — update footer
|
|
431
|
+
if (wasActive) {
|
|
432
|
+
ctx.ui.setActiveTeamAgent(null);
|
|
433
|
+
}
|
|
434
|
+
ctx.ui.print({ type: 'success', message: `Removed ${label} from team` });
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
ctx.ui.print({ type: 'error', message: `Failed to remove ${label}` });
|
|
438
|
+
}
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
async function handleSwitchAgent(ctx, team, agentId) {
|
|
442
|
+
if (!agentId) {
|
|
443
|
+
ctx.ui.print({ type: 'error', message: 'Usage: /team switch <agent-id>' });
|
|
444
|
+
ctx.ui.print({
|
|
445
|
+
type: 'info',
|
|
446
|
+
message: `Available agents: ${team.getAgentIds().join(', ')}`,
|
|
447
|
+
});
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
if (!team.has(agentId)) {
|
|
451
|
+
ctx.ui.print({ type: 'error', message: `Agent '${agentId}' not found in team` });
|
|
452
|
+
ctx.ui.print({
|
|
453
|
+
type: 'info',
|
|
454
|
+
message: `Available agents: ${team.getAgentIds().join(', ')}`,
|
|
455
|
+
});
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
try {
|
|
459
|
+
if (ctx.switchAgent) {
|
|
460
|
+
await ctx.switchAgent(agentId);
|
|
461
|
+
}
|
|
462
|
+
const agent = team.get(agentId);
|
|
463
|
+
ctx.ui.print({
|
|
464
|
+
type: 'success',
|
|
465
|
+
message: `Switched to ${agent?.getFullLabel() ?? agentId}`,
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
catch (err) {
|
|
469
|
+
ctx.ui.print({
|
|
470
|
+
type: 'error',
|
|
471
|
+
message: `Failed to switch: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
return true;
|
|
475
|
+
}
|
|
476
|
+
function handleSetCoordinator(ctx, team, agentId) {
|
|
477
|
+
if (!agentId) {
|
|
478
|
+
// Clear coordinator
|
|
479
|
+
if (team.coordinatorId) {
|
|
480
|
+
team.setCoordinator(undefined);
|
|
481
|
+
ctx.ui.print({ type: 'success', message: 'Cleared coordinator' });
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
ctx.ui.print({ type: 'info', message: 'No coordinator is set' });
|
|
485
|
+
ctx.ui.print({ type: 'info', message: 'Usage: /team coordinator <agent-id>' });
|
|
486
|
+
}
|
|
487
|
+
return true;
|
|
488
|
+
}
|
|
489
|
+
if (agentId === 'none' || agentId === 'clear') {
|
|
490
|
+
team.setCoordinator(undefined);
|
|
491
|
+
ctx.ui.print({ type: 'success', message: 'Cleared coordinator' });
|
|
492
|
+
return true;
|
|
493
|
+
}
|
|
494
|
+
if (!team.has(agentId)) {
|
|
495
|
+
ctx.ui.print({ type: 'error', message: `Agent '${agentId}' not found in team` });
|
|
496
|
+
return true;
|
|
497
|
+
}
|
|
498
|
+
team.setCoordinator(agentId);
|
|
499
|
+
const agent = team.get(agentId);
|
|
500
|
+
ctx.ui.print({
|
|
501
|
+
type: 'success',
|
|
502
|
+
message: `Set ${agent?.getFullLabel() ?? agentId} as coordinator`,
|
|
503
|
+
});
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
// =============================================================================
|
|
507
|
+
// /artifact Command
|
|
508
|
+
// =============================================================================
|
|
509
|
+
export const artifactCommand = {
|
|
510
|
+
name: 'artifact',
|
|
511
|
+
description: 'View team artifacts',
|
|
512
|
+
details: `Browse and view artifacts shared by team agents. Artifacts are named pieces of work
|
|
513
|
+
(designs, plans, reviews, decisions, notes) that agents can publish and reference.`,
|
|
514
|
+
examples: [
|
|
515
|
+
{ code: '/artifact', description: 'Browse all artifacts' },
|
|
516
|
+
],
|
|
517
|
+
interactions: [
|
|
518
|
+
'Tab cycles: All → Design → Plan → Review → Decision → Note',
|
|
519
|
+
'↑/↓ or j/k to navigate',
|
|
520
|
+
'/ to search',
|
|
521
|
+
'Enter to view artifact',
|
|
522
|
+
'Esc to go back or close',
|
|
523
|
+
],
|
|
524
|
+
async execute(_args, ctx) {
|
|
525
|
+
// Loop: show list → detail → back to list (until user cancels list or Ctrl+C from detail)
|
|
526
|
+
let showList = true;
|
|
527
|
+
while (showList) {
|
|
528
|
+
// Show artifact list (inline overlay)
|
|
529
|
+
const listOverlay = new ArtifactOverlayV2();
|
|
530
|
+
const listResult = await ctx.ui.showOverlay(listOverlay);
|
|
531
|
+
// User cancelled the list (Esc/Ctrl+C) - exit
|
|
532
|
+
if (!listResult?.selectedArtifact || listResult.cancelled) {
|
|
533
|
+
showList = false;
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
// Show selected artifact in fullscreen detail overlay
|
|
537
|
+
const detailOverlay = new ArtifactDetailOverlayV2(listResult.selectedArtifact);
|
|
538
|
+
const detailResult = await ctx.ui.showOverlay(detailOverlay);
|
|
539
|
+
// Ctrl+C from detail - exit completely
|
|
540
|
+
// Esc/q from detail (goBack=true) - loop back to show list again
|
|
541
|
+
showList = detailResult?.goBack === true;
|
|
542
|
+
}
|
|
543
|
+
return true;
|
|
544
|
+
},
|
|
545
|
+
};
|
|
546
|
+
// =============================================================================
|
|
547
|
+
// Export
|
|
548
|
+
// =============================================================================
|
|
549
|
+
export const teamCommands = [teamCommand, artifactCommand];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminals Command Handler
|
|
3
|
+
*
|
|
4
|
+
* Shows active terminal sessions for multi-terminal awareness.
|
|
5
|
+
* Opens an interactive overlay when sessions exist, falls back to info message otherwise.
|
|
6
|
+
*/
|
|
7
|
+
import type { CommandHandlerV2 } from '../types.js';
|
|
8
|
+
export declare const terminalsCommand: CommandHandlerV2;
|
|
9
|
+
export declare const terminalsCommands: CommandHandlerV2[];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminals Command Handler
|
|
3
|
+
*
|
|
4
|
+
* Shows active terminal sessions for multi-terminal awareness.
|
|
5
|
+
* Opens an interactive overlay when sessions exist, falls back to info message otherwise.
|
|
6
|
+
*/
|
|
7
|
+
import { getSessionRegistry } from '../../multi-agent/session-registry.js';
|
|
8
|
+
import { TerminalsOverlayV2 } from '../../ui/overlay/impl/terminals-overlay-v2.js';
|
|
9
|
+
export const terminalsCommand = {
|
|
10
|
+
name: 'terminals',
|
|
11
|
+
aliases: ['sessions'],
|
|
12
|
+
description: 'Show active terminal sessions',
|
|
13
|
+
details: 'Lists all CLI instances currently running on this machine. Useful for seeing which terminals are active and what agents they are running.',
|
|
14
|
+
examples: [
|
|
15
|
+
{ code: '/terminals', description: 'List all active terminal sessions' },
|
|
16
|
+
{ code: '/sessions', description: 'Alias for /terminals' },
|
|
17
|
+
],
|
|
18
|
+
async execute(_args, ctx) {
|
|
19
|
+
const registry = getSessionRegistry();
|
|
20
|
+
if (!registry) {
|
|
21
|
+
ctx.ui.print({ type: 'info', message: 'Session registry not available.' });
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
const sessions = registry.getActiveSessions();
|
|
25
|
+
if (sessions.length === 0) {
|
|
26
|
+
ctx.ui.print({ type: 'info', message: 'No active terminal sessions.' });
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
const overlay = new TerminalsOverlayV2();
|
|
30
|
+
await ctx.ui.showOverlay(overlay);
|
|
31
|
+
return true;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
export const terminalsCommands = [terminalsCommand];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commands V2 Module
|
|
3
|
+
*
|
|
4
|
+
* Command system for the new TerminalUI-based REPL.
|
|
5
|
+
*/
|
|
6
|
+
export type { CommandContextV2, CommandHandlerV2, CommandResultV2, CommandExample } from './types.js';
|
|
7
|
+
export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, getAutocompleteCommands, getHelpCommands, } from './registry.js';
|
|
8
|
+
export { allCommands } from './handlers/index.js';
|
|
9
|
+
export { coreCommands } from './handlers/core.js';
|
|
10
|
+
export { settingsCommands } from './handlers/settings.js';
|
|
11
|
+
export { contextCommands } from './handlers/context.js';
|
|
12
|
+
export { projectCommands } from './handlers/project.js';
|
|
13
|
+
export { debugCommands } from './handlers/debug.js';
|
|
14
|
+
export { sessionCommands, saveCurrentSession, loadProjectSession, hasCurrentProjectSession, hasRecentSession, getMostRecentSession, checkpointBeforeSwitch, loadAndRestoreSession, archiveCurrentSession, refreshProjectContext, getProjectAnchors, saveCurrentTeam, loadCurrentTeam, hasCurrentTeam, deleteCurrentTeam, type ProjectContextRefreshResult, convertMessagesToItems, } from './handlers/session.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commands V2 Module
|
|
3
|
+
*
|
|
4
|
+
* Command system for the new TerminalUI-based REPL.
|
|
5
|
+
*/
|
|
6
|
+
// Registry
|
|
7
|
+
export { registerCommand, registerCommands, getCommand, executeCommand, getCommandNames, hasCommand, clearCommands, getAutocompleteCommands, getHelpCommands, } from './registry.js';
|
|
8
|
+
// All handlers
|
|
9
|
+
export { allCommands } from './handlers/index.js';
|
|
10
|
+
// Individual handler modules (for selective imports)
|
|
11
|
+
export { coreCommands } from './handlers/core.js';
|
|
12
|
+
export { settingsCommands } from './handlers/settings.js';
|
|
13
|
+
export { contextCommands } from './handlers/context.js';
|
|
14
|
+
export { projectCommands } from './handlers/project.js';
|
|
15
|
+
export { debugCommands } from './handlers/debug.js';
|
|
16
|
+
export { sessionCommands, saveCurrentSession, loadProjectSession, hasCurrentProjectSession, hasRecentSession, getMostRecentSession, checkpointBeforeSwitch, loadAndRestoreSession, archiveCurrentSession, refreshProjectContext, getProjectAnchors,
|
|
17
|
+
// Team persistence
|
|
18
|
+
saveCurrentTeam, loadCurrentTeam, hasCurrentTeam, deleteCurrentTeam, convertMessagesToItems, } from './handlers/session.js';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Registry for REPL V2
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all V2 command handlers.
|
|
5
|
+
* Handles command resolution (including aliases) and execution.
|
|
6
|
+
*/
|
|
7
|
+
import type { CommandHandlerV2, CommandContextV2, CommandResultV2 } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Register a command handler.
|
|
10
|
+
*/
|
|
11
|
+
export declare function registerCommand(handler: CommandHandlerV2): void;
|
|
12
|
+
/**
|
|
13
|
+
* Register multiple command handlers.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerCommands(handlerList: CommandHandlerV2[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get a command handler by name or alias.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCommand(nameOrAlias: string): CommandHandlerV2 | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Execute a command by name or alias.
|
|
22
|
+
*
|
|
23
|
+
* @returns true to continue, false to exit, null if command not found
|
|
24
|
+
*/
|
|
25
|
+
export declare function executeCommand(nameOrAlias: string, args: string, ctx: CommandContextV2): Promise<CommandResultV2>;
|
|
26
|
+
/**
|
|
27
|
+
* Get all registered command names (excluding aliases).
|
|
28
|
+
*/
|
|
29
|
+
export declare function getCommandNames(): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Check if a command exists (by name or alias).
|
|
32
|
+
*/
|
|
33
|
+
export declare function hasCommand(nameOrAlias: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all registered commands (for testing).
|
|
36
|
+
*/
|
|
37
|
+
export declare function clearCommands(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get all commands formatted for autocomplete.
|
|
40
|
+
* Filters out internal/tool commands (those with underscores or camelCase).
|
|
41
|
+
*/
|
|
42
|
+
export declare function getAutocompleteCommands(): {
|
|
43
|
+
command: string;
|
|
44
|
+
description: string;
|
|
45
|
+
}[];
|
|
46
|
+
/**
|
|
47
|
+
* Get all commands formatted for help display.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getHelpCommands(): {
|
|
50
|
+
name: string;
|
|
51
|
+
description: string;
|
|
52
|
+
}[];
|