@compilr-dev/cli 0.5.0 → 0.5.2
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/LICENSE +108 -0
- package/README.md +237 -69
- 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 +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- 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-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.js +286 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -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 +13 -0
- package/dist/commands-v2/handlers/index.js +39 -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.js +295 -31
- 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 +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- 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 +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- 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 +6 -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 +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- 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.js +5 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2588 -65
- 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 +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -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 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +113 -0
- package/dist/tool-names.js +239 -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.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +13 -61
- package/dist/tools/db-tools.js +12 -13
- 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/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/platform-adapter.d.ts +35 -0
- package/dist/tools/platform-adapter.js +404 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +240 -48
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +52 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- 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 +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -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 +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- 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.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- 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.js +2 -5
- 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 +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- 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.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- 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 +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- 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.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- 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/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- 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/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 +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- 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.js +5 -5
- 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 +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- 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/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -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 +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +696 -1
- 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/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 +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- 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/package.json +27 -13
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- 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/tools/anchor-tools.d.ts +0 -31
- package/dist/tools/anchor-tools.js +0 -255
- package/dist/tools/backlog-wrappers.d.ts +0 -54
- package/dist/tools/backlog-wrappers.js +0 -338
- package/dist/tools/document-db.d.ts +0 -43
- package/dist/tools/document-db.js +0 -220
- package/dist/tools/workitem-db.d.ts +0 -103
- package/dist/tools/workitem-db.js +0 -549
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TeamCheckpointer - Persistence for multi-agent teams
|
|
3
|
+
*
|
|
4
|
+
* Stores team state alongside project sessions:
|
|
5
|
+
* ~/.compilr-dev/sessions/{project-id}/
|
|
6
|
+
* ├── current.json # Single-agent session (existing)
|
|
7
|
+
* ├── team.json # Team metadata
|
|
8
|
+
* ├── agent-default.json # Per-agent state
|
|
9
|
+
* ├── agent-pm.json
|
|
10
|
+
* ├── agent-arch.json
|
|
11
|
+
* ├── shared-context.json # Shared context (Phase 2)
|
|
12
|
+
* └── artifacts/ # Team artifacts (Phase 2)
|
|
13
|
+
* ├── index.json
|
|
14
|
+
* └── {id}.json
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'node:fs';
|
|
17
|
+
import * as path from 'node:path';
|
|
18
|
+
import { AgentTeam } from './team.js';
|
|
19
|
+
import { SharedContextManager } from './shared-context.js';
|
|
20
|
+
import { ArtifactStore } from './artifacts.js';
|
|
21
|
+
import { getActiveTerminalSessionId } from './session-registry.js';
|
|
22
|
+
const ARTIFACTS_DIR = 'artifacts';
|
|
23
|
+
/**
|
|
24
|
+
* Get terminal-scoped team filename, or shared 'team.json' if no session active.
|
|
25
|
+
*/
|
|
26
|
+
function getTeamFilename() {
|
|
27
|
+
const sessionId = getActiveTerminalSessionId();
|
|
28
|
+
if (sessionId)
|
|
29
|
+
return `team-${sessionId.slice(0, 8)}.json`;
|
|
30
|
+
return 'team.json';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get terminal-scoped agent file prefix, or shared 'agent-' if no session active.
|
|
34
|
+
*/
|
|
35
|
+
function getAgentFilePrefix() {
|
|
36
|
+
const sessionId = getActiveTerminalSessionId();
|
|
37
|
+
if (sessionId)
|
|
38
|
+
return `agent-${sessionId.slice(0, 8)}-`;
|
|
39
|
+
return 'agent-';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get terminal-scoped shared context filename, or shared 'shared-context.json' if no session active.
|
|
43
|
+
*/
|
|
44
|
+
function getSharedContextFilename() {
|
|
45
|
+
const sessionId = getActiveTerminalSessionId();
|
|
46
|
+
if (sessionId)
|
|
47
|
+
return `shared-context-${sessionId.slice(0, 8)}.json`;
|
|
48
|
+
return 'shared-context.json';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* TeamCheckpointer handles persistence for multi-agent teams
|
|
52
|
+
*/
|
|
53
|
+
export class TeamCheckpointer {
|
|
54
|
+
sessionsPath;
|
|
55
|
+
constructor(sessionsPath) {
|
|
56
|
+
this.sessionsPath = sessionsPath;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the session directory for a project
|
|
60
|
+
*/
|
|
61
|
+
getProjectDir(projectId) {
|
|
62
|
+
if (projectId === null) {
|
|
63
|
+
return path.join(this.sessionsPath, 'global');
|
|
64
|
+
}
|
|
65
|
+
return path.join(this.sessionsPath, `project-${String(projectId)}`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the team metadata file path (terminal-scoped when multi-terminal active)
|
|
69
|
+
*/
|
|
70
|
+
getTeamFilePath(projectId) {
|
|
71
|
+
return path.join(this.getProjectDir(projectId), getTeamFilename());
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get the agent state file path (terminal-scoped when multi-terminal active)
|
|
75
|
+
*/
|
|
76
|
+
getAgentFilePath(projectId, agentId) {
|
|
77
|
+
return path.join(this.getProjectDir(projectId), `${getAgentFilePrefix()}${agentId}.json`);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the shared context file path (terminal-scoped when multi-terminal active)
|
|
81
|
+
*/
|
|
82
|
+
getSharedContextPath(projectId) {
|
|
83
|
+
return path.join(this.getProjectDir(projectId), getSharedContextFilename());
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the artifacts directory path
|
|
87
|
+
*/
|
|
88
|
+
getArtifactsPath(projectId) {
|
|
89
|
+
return path.join(this.getProjectDir(projectId), ARTIFACTS_DIR);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a team exists for THIS terminal's project.
|
|
93
|
+
* Only checks this terminal's scoped file — never cross-terminal.
|
|
94
|
+
*/
|
|
95
|
+
hasTeam(projectId) {
|
|
96
|
+
return fs.existsSync(this.getTeamFilePath(projectId));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Save team state
|
|
100
|
+
*/
|
|
101
|
+
saveTeam(projectId, team) {
|
|
102
|
+
const projectDir = this.getProjectDir(projectId);
|
|
103
|
+
// Ensure directory exists
|
|
104
|
+
if (!fs.existsSync(projectDir)) {
|
|
105
|
+
fs.mkdirSync(projectDir, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
const serialized = team.serialize();
|
|
108
|
+
// Save team metadata
|
|
109
|
+
const teamPath = this.getTeamFilePath(projectId);
|
|
110
|
+
fs.writeFileSync(teamPath, JSON.stringify(serialized.metadata, null, 2), 'utf-8');
|
|
111
|
+
// Save each agent's state separately
|
|
112
|
+
for (const agent of serialized.agents) {
|
|
113
|
+
const agentPath = this.getAgentFilePath(projectId, agent.id);
|
|
114
|
+
fs.writeFileSync(agentPath, JSON.stringify(agent, null, 2), 'utf-8');
|
|
115
|
+
}
|
|
116
|
+
// Clean up old agent files that are no longer in the team
|
|
117
|
+
this.cleanupOldAgentFiles(projectId, serialized.metadata.agentIds);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Load team state for THIS terminal.
|
|
121
|
+
* Only loads this terminal's scoped files. Never cross-terminal.
|
|
122
|
+
* For cross-terminal loading, use loadTeamByPrefix().
|
|
123
|
+
*/
|
|
124
|
+
loadTeam(projectId, agentFactory, onEvent) {
|
|
125
|
+
const teamPath = this.getTeamFilePath(projectId);
|
|
126
|
+
if (!fs.existsSync(teamPath))
|
|
127
|
+
return null;
|
|
128
|
+
return this.loadTeamFromPath(projectId, teamPath, null, agentFactory, onEvent);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Load team state for a SPECIFIC terminal prefix (cross-terminal resume).
|
|
132
|
+
* Used when the user explicitly picks another terminal's session to resume.
|
|
133
|
+
*/
|
|
134
|
+
loadTeamByPrefix(projectId, terminalPrefix, agentFactory, onEvent) {
|
|
135
|
+
const projectDir = this.getProjectDir(projectId);
|
|
136
|
+
const teamPath = path.join(projectDir, `team-${terminalPrefix}.json`);
|
|
137
|
+
if (!fs.existsSync(teamPath)) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return this.loadTeamFromPath(projectId, teamPath, terminalPrefix, agentFactory, onEvent);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get the agent count from a team file for a specific terminal prefix.
|
|
144
|
+
* Lightweight — reads only metadata, doesn't load agents.
|
|
145
|
+
* Returns 0 if no team file exists (default agent only).
|
|
146
|
+
*/
|
|
147
|
+
getTeamAgentCountByPrefix(projectId, terminalPrefix) {
|
|
148
|
+
const projectDir = this.getProjectDir(projectId);
|
|
149
|
+
const teamPath = path.join(projectDir, `team-${terminalPrefix}.json`);
|
|
150
|
+
if (!fs.existsSync(teamPath))
|
|
151
|
+
return 0;
|
|
152
|
+
try {
|
|
153
|
+
const content = fs.readFileSync(teamPath, 'utf-8');
|
|
154
|
+
const metadata = JSON.parse(content);
|
|
155
|
+
return metadata.agentIds.length;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Internal: load team from a specific file path with optional terminal prefix for agent files.
|
|
163
|
+
*/
|
|
164
|
+
loadTeamFromPath(projectId, teamPath, terminalPrefix, agentFactory, onEvent) {
|
|
165
|
+
try {
|
|
166
|
+
// Load team metadata
|
|
167
|
+
const metadataContent = fs.readFileSync(teamPath, 'utf-8');
|
|
168
|
+
const metadata = JSON.parse(metadataContent);
|
|
169
|
+
// Load each agent's state
|
|
170
|
+
const agents = [];
|
|
171
|
+
const projectDir = this.getProjectDir(projectId);
|
|
172
|
+
for (const agentId of metadata.agentIds) {
|
|
173
|
+
// Try paths in order: explicit prefix → this terminal
|
|
174
|
+
const explicitPath = terminalPrefix
|
|
175
|
+
? path.join(projectDir, `agent-${terminalPrefix}-${agentId}.json`)
|
|
176
|
+
: null;
|
|
177
|
+
const ownPath = this.getAgentFilePath(projectId, agentId);
|
|
178
|
+
let loadedPath = null;
|
|
179
|
+
if (explicitPath && fs.existsSync(explicitPath)) {
|
|
180
|
+
loadedPath = explicitPath;
|
|
181
|
+
}
|
|
182
|
+
else if (fs.existsSync(ownPath)) {
|
|
183
|
+
loadedPath = ownPath;
|
|
184
|
+
}
|
|
185
|
+
if (loadedPath) {
|
|
186
|
+
const agentContent = fs.readFileSync(loadedPath, 'utf-8');
|
|
187
|
+
const agentData = JSON.parse(agentContent);
|
|
188
|
+
agents.push(agentData);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const serialized = { metadata, agents };
|
|
192
|
+
// Load shared context if it exists
|
|
193
|
+
const sharedContext = this.loadSharedContext(projectId) ?? undefined;
|
|
194
|
+
// Load artifact store
|
|
195
|
+
const artifactStore = this.getArtifactStore(projectId);
|
|
196
|
+
// Restore the team with shared context and artifact store
|
|
197
|
+
return AgentTeam.restore(serialized, agentFactory, onEvent, {
|
|
198
|
+
sharedContext,
|
|
199
|
+
artifactStore,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// If loading fails, return null
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Save a single agent's state (for incremental updates)
|
|
209
|
+
*/
|
|
210
|
+
saveAgent(projectId, agentId, agent) {
|
|
211
|
+
const projectDir = this.getProjectDir(projectId);
|
|
212
|
+
// Ensure directory exists
|
|
213
|
+
if (!fs.existsSync(projectDir)) {
|
|
214
|
+
fs.mkdirSync(projectDir, { recursive: true });
|
|
215
|
+
}
|
|
216
|
+
const agentPath = this.getAgentFilePath(projectId, agentId);
|
|
217
|
+
fs.writeFileSync(agentPath, JSON.stringify(agent, null, 2), 'utf-8');
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Delete team data for a project
|
|
221
|
+
*/
|
|
222
|
+
deleteTeam(projectId) {
|
|
223
|
+
const teamPath = this.getTeamFilePath(projectId);
|
|
224
|
+
if (!fs.existsSync(teamPath)) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
// Load metadata to get agent IDs
|
|
229
|
+
const metadataContent = fs.readFileSync(teamPath, 'utf-8');
|
|
230
|
+
const metadata = JSON.parse(metadataContent);
|
|
231
|
+
// Delete agent files
|
|
232
|
+
for (const agentId of metadata.agentIds) {
|
|
233
|
+
const agentPath = this.getAgentFilePath(projectId, agentId);
|
|
234
|
+
if (fs.existsSync(agentPath)) {
|
|
235
|
+
fs.unlinkSync(agentPath);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Delete team file
|
|
239
|
+
fs.unlinkSync(teamPath);
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Claim team files from another terminal by renaming them to this terminal's prefix.
|
|
248
|
+
* Renames: team-{from}.json, agent-{from}-*.json, shared-context-{from}.json
|
|
249
|
+
*/
|
|
250
|
+
claimTeamFiles(projectId, fromPrefix, toPrefix) {
|
|
251
|
+
const projectDir = this.getProjectDir(projectId);
|
|
252
|
+
if (!fs.existsSync(projectDir))
|
|
253
|
+
return false;
|
|
254
|
+
try {
|
|
255
|
+
const files = fs.readdirSync(projectDir);
|
|
256
|
+
for (const file of files) {
|
|
257
|
+
// team-{from}.json → team-{to}.json
|
|
258
|
+
if (file === `team-${fromPrefix}.json`) {
|
|
259
|
+
fs.renameSync(path.join(projectDir, file), path.join(projectDir, `team-${toPrefix}.json`));
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
// agent-{from}-{id}.json → agent-{to}-{id}.json
|
|
263
|
+
if (file.startsWith(`agent-${fromPrefix}-`) && file.endsWith('.json')) {
|
|
264
|
+
const agentId = file.slice(`agent-${fromPrefix}-`.length, -'.json'.length);
|
|
265
|
+
fs.renameSync(path.join(projectDir, file), path.join(projectDir, `agent-${toPrefix}-${agentId}.json`));
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
// shared-context-{from}.json → shared-context-{to}.json
|
|
269
|
+
if (file === `shared-context-${fromPrefix}.json`) {
|
|
270
|
+
fs.renameSync(path.join(projectDir, file), path.join(projectDir, `shared-context-${toPrefix}.json`));
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// ---------------------------------------------------------------------------
|
|
281
|
+
// Shared Context Persistence
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
/**
|
|
284
|
+
* Check if shared context exists for this project
|
|
285
|
+
*/
|
|
286
|
+
hasSharedContext(projectId) {
|
|
287
|
+
const contextPath = this.getSharedContextPath(projectId);
|
|
288
|
+
return fs.existsSync(contextPath);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Save shared context
|
|
292
|
+
*/
|
|
293
|
+
saveSharedContext(projectId, context) {
|
|
294
|
+
const projectDir = this.getProjectDir(projectId);
|
|
295
|
+
// Ensure directory exists
|
|
296
|
+
if (!fs.existsSync(projectDir)) {
|
|
297
|
+
fs.mkdirSync(projectDir, { recursive: true });
|
|
298
|
+
}
|
|
299
|
+
const serialized = context.serialize();
|
|
300
|
+
const contextPath = this.getSharedContextPath(projectId);
|
|
301
|
+
fs.writeFileSync(contextPath, JSON.stringify(serialized, null, 2), 'utf-8');
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Load shared context
|
|
305
|
+
*/
|
|
306
|
+
loadSharedContext(projectId) {
|
|
307
|
+
const contextPath = this.getSharedContextPath(projectId);
|
|
308
|
+
if (!fs.existsSync(contextPath)) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
try {
|
|
312
|
+
const content = fs.readFileSync(contextPath, 'utf-8');
|
|
313
|
+
const serialized = JSON.parse(content);
|
|
314
|
+
return SharedContextManager.fromSerialized(serialized);
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Delete shared context
|
|
322
|
+
*/
|
|
323
|
+
deleteSharedContext(projectId) {
|
|
324
|
+
const contextPath = this.getSharedContextPath(projectId);
|
|
325
|
+
if (!fs.existsSync(contextPath)) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
try {
|
|
329
|
+
fs.unlinkSync(contextPath);
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// ---------------------------------------------------------------------------
|
|
337
|
+
// Artifact Store Management
|
|
338
|
+
// ---------------------------------------------------------------------------
|
|
339
|
+
/**
|
|
340
|
+
* Get artifact store for a project
|
|
341
|
+
* The ArtifactStore handles its own persistence
|
|
342
|
+
*/
|
|
343
|
+
getArtifactStore(projectId) {
|
|
344
|
+
const artifactsPath = this.getArtifactsPath(projectId);
|
|
345
|
+
const store = new ArtifactStore(artifactsPath);
|
|
346
|
+
store.load(); // Load existing artifacts
|
|
347
|
+
return store;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Check if artifacts exist for this project
|
|
351
|
+
*/
|
|
352
|
+
hasArtifacts(projectId) {
|
|
353
|
+
const artifactsPath = this.getArtifactsPath(projectId);
|
|
354
|
+
return fs.existsSync(artifactsPath);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Delete all artifacts for a project
|
|
358
|
+
*/
|
|
359
|
+
deleteArtifacts(projectId) {
|
|
360
|
+
const artifactsPath = this.getArtifactsPath(projectId);
|
|
361
|
+
if (!fs.existsSync(artifactsPath)) {
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
364
|
+
try {
|
|
365
|
+
// Delete all files in artifacts directory
|
|
366
|
+
const files = fs.readdirSync(artifactsPath);
|
|
367
|
+
for (const file of files) {
|
|
368
|
+
fs.unlinkSync(path.join(artifactsPath, file));
|
|
369
|
+
}
|
|
370
|
+
// Delete the directory
|
|
371
|
+
fs.rmdirSync(artifactsPath);
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// ---------------------------------------------------------------------------
|
|
379
|
+
// Cleanup Helpers
|
|
380
|
+
// ---------------------------------------------------------------------------
|
|
381
|
+
/**
|
|
382
|
+
* Clean up agent files that are no longer in the team
|
|
383
|
+
*/
|
|
384
|
+
cleanupOldAgentFiles(projectId, currentAgentIds) {
|
|
385
|
+
const projectDir = this.getProjectDir(projectId);
|
|
386
|
+
if (!fs.existsSync(projectDir)) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const prefix = getAgentFilePrefix();
|
|
390
|
+
try {
|
|
391
|
+
const files = fs.readdirSync(projectDir);
|
|
392
|
+
for (const file of files) {
|
|
393
|
+
if (file.startsWith(prefix) && file.endsWith('.json')) {
|
|
394
|
+
const agentId = file.slice(prefix.length, -5); // Remove prefix and .json
|
|
395
|
+
if (!currentAgentIds.includes(agentId)) {
|
|
396
|
+
fs.unlinkSync(path.join(projectDir, file));
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
// Ignore cleanup errors
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* List all projects that have team data.
|
|
407
|
+
*/
|
|
408
|
+
listProjectsWithTeams() {
|
|
409
|
+
const projectIds = [];
|
|
410
|
+
if (!fs.existsSync(this.sessionsPath)) {
|
|
411
|
+
return projectIds;
|
|
412
|
+
}
|
|
413
|
+
try {
|
|
414
|
+
const entries = fs.readdirSync(this.sessionsPath);
|
|
415
|
+
for (const entry of entries) {
|
|
416
|
+
if (entry.startsWith('project-')) {
|
|
417
|
+
const idStr = entry.slice('project-'.length);
|
|
418
|
+
const id = parseInt(idStr, 10);
|
|
419
|
+
if (isNaN(id))
|
|
420
|
+
continue;
|
|
421
|
+
// Check for any team file (terminal-scoped or legacy)
|
|
422
|
+
const dirPath = path.join(this.sessionsPath, entry);
|
|
423
|
+
const files = fs.readdirSync(dirPath);
|
|
424
|
+
const hasTeamFile = files.some(f => f.startsWith('team') && f.endsWith('.json'));
|
|
425
|
+
if (hasTeamFile) {
|
|
426
|
+
projectIds.push(id);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
// Ignore errors
|
|
433
|
+
}
|
|
434
|
+
return projectIds;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Get team metadata without loading the full team.
|
|
438
|
+
*/
|
|
439
|
+
getTeamMetadata(projectId) {
|
|
440
|
+
const teamPath = this.getTeamFilePath(projectId);
|
|
441
|
+
if (!fs.existsSync(teamPath))
|
|
442
|
+
return null;
|
|
443
|
+
try {
|
|
444
|
+
const content = fs.readFileSync(teamPath, 'utf-8');
|
|
445
|
+
return JSON.parse(content);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
return null;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Get the default sessions path
|
|
454
|
+
*/
|
|
455
|
+
export function getSessionsPath() {
|
|
456
|
+
const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? '.';
|
|
457
|
+
return path.join(homeDir, '.compilr-dev', 'sessions');
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Singleton instance
|
|
461
|
+
*/
|
|
462
|
+
let checkpointerInstance = null;
|
|
463
|
+
/**
|
|
464
|
+
* Get the shared TeamCheckpointer instance
|
|
465
|
+
*/
|
|
466
|
+
export function getTeamCheckpointer() {
|
|
467
|
+
if (!checkpointerInstance) {
|
|
468
|
+
checkpointerInstance = new TeamCheckpointer(getSessionsPath());
|
|
469
|
+
}
|
|
470
|
+
return checkpointerInstance;
|
|
471
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent ID Collision Prevention
|
|
3
|
+
*
|
|
4
|
+
* When multiple terminals work on the same project, they may try to add
|
|
5
|
+
* agents with the same ID (e.g., both run `/add pm`). This module detects
|
|
6
|
+
* and resolves such collisions by querying the session registry for agent
|
|
7
|
+
* IDs already in use by other terminals.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Check if an agent ID is in use by another terminal and resolve collisions.
|
|
11
|
+
* Returns the original ID if available, or a suffixed variant (e.g., "pm_2").
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveAgentIdCollision(requestedId: string, localTeamIds: string[], globalAgentIds: string[]): {
|
|
14
|
+
id: string;
|
|
15
|
+
wasCollision: boolean;
|
|
16
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent ID Collision Prevention
|
|
3
|
+
*
|
|
4
|
+
* When multiple terminals work on the same project, they may try to add
|
|
5
|
+
* agents with the same ID (e.g., both run `/add pm`). This module detects
|
|
6
|
+
* and resolves such collisions by querying the session registry for agent
|
|
7
|
+
* IDs already in use by other terminals.
|
|
8
|
+
*/
|
|
9
|
+
import * as crypto from 'node:crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Check if an agent ID is in use by another terminal and resolve collisions.
|
|
12
|
+
* Returns the original ID if available, or a suffixed variant (e.g., "pm_2").
|
|
13
|
+
*/
|
|
14
|
+
export function resolveAgentIdCollision(requestedId, localTeamIds, globalAgentIds) {
|
|
15
|
+
if (!globalAgentIds.includes(requestedId)) {
|
|
16
|
+
return { id: requestedId, wasCollision: false };
|
|
17
|
+
}
|
|
18
|
+
// Try suffixes: pm_2, pm_3, etc.
|
|
19
|
+
for (let i = 2; i <= 10; i++) {
|
|
20
|
+
const candidate = `${requestedId}_${String(i)}`;
|
|
21
|
+
if (!localTeamIds.includes(candidate) && !globalAgentIds.includes(candidate)) {
|
|
22
|
+
return { id: candidate, wasCollision: true };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Fallback: UUID suffix
|
|
26
|
+
const fallback = `${requestedId}_${crypto.randomUUID().slice(0, 4)}`;
|
|
27
|
+
return { id: fallback, wasCollision: true };
|
|
28
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextResolver - Resolve $agent mentions to actual content
|
|
3
|
+
*
|
|
4
|
+
* Resolution strategy:
|
|
5
|
+
* 1. Check for explicit artifact reference in context hint
|
|
6
|
+
* 2. Search artifacts by name/content matching context hint
|
|
7
|
+
* 3. Fall back to recent conversation history
|
|
8
|
+
*
|
|
9
|
+
* Token budgets:
|
|
10
|
+
* - Single mention: 2000 tokens max
|
|
11
|
+
* - Multiple mentions: 3000 tokens total, split among mentions
|
|
12
|
+
*/
|
|
13
|
+
import type { AgentTeam } from './team.js';
|
|
14
|
+
import type { ArtifactStore } from './artifacts.js';
|
|
15
|
+
import type { ParsedMention } from './mention-parser.js';
|
|
16
|
+
/**
|
|
17
|
+
* Resolution source type
|
|
18
|
+
*/
|
|
19
|
+
export type ResolutionSource = 'artifact' | 'history' | 'decision' | 'not_found';
|
|
20
|
+
/**
|
|
21
|
+
* Resolved mention with content
|
|
22
|
+
*/
|
|
23
|
+
export interface ResolvedMention {
|
|
24
|
+
/** Original mention */
|
|
25
|
+
mention: ParsedMention;
|
|
26
|
+
/** Resolution status */
|
|
27
|
+
resolved: boolean;
|
|
28
|
+
/** Source of resolution */
|
|
29
|
+
source: ResolutionSource;
|
|
30
|
+
/** Source name (artifact name, "recent history", etc.) */
|
|
31
|
+
sourceName: string;
|
|
32
|
+
/** Resolved content to inject */
|
|
33
|
+
content: string;
|
|
34
|
+
/** Approximate token count */
|
|
35
|
+
tokenCount: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Options for resolution
|
|
39
|
+
*/
|
|
40
|
+
export interface ResolveOptions {
|
|
41
|
+
/** Max tokens per mention (default: 2000) */
|
|
42
|
+
maxTokensPerMention?: number;
|
|
43
|
+
/** Max total tokens for all mentions (default: 3000) */
|
|
44
|
+
maxTotalTokens?: number;
|
|
45
|
+
/** Include artifact content (not just summary) */
|
|
46
|
+
includeFullArtifact?: boolean;
|
|
47
|
+
/** Max history messages to search */
|
|
48
|
+
maxHistoryMessages?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve mentions to actual content
|
|
52
|
+
*/
|
|
53
|
+
export declare class ContextResolver {
|
|
54
|
+
private readonly team;
|
|
55
|
+
private readonly artifactStore;
|
|
56
|
+
constructor(team: AgentTeam, artifactStore: ArtifactStore);
|
|
57
|
+
/**
|
|
58
|
+
* Resolve multiple mentions
|
|
59
|
+
*/
|
|
60
|
+
resolveAll(mentions: ParsedMention[], options?: ResolveOptions): Map<string, ResolvedMention>;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve a single mention
|
|
63
|
+
*/
|
|
64
|
+
resolveMention(mention: ParsedMention, options?: ResolveOptions): ResolvedMention;
|
|
65
|
+
/**
|
|
66
|
+
* Resolve from artifacts
|
|
67
|
+
*/
|
|
68
|
+
private resolveFromArtifacts;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve from conversation history
|
|
71
|
+
*/
|
|
72
|
+
private resolveFromHistory;
|
|
73
|
+
/**
|
|
74
|
+
* Extract relevant content from messages based on context hint
|
|
75
|
+
*/
|
|
76
|
+
private extractRelevantContent;
|
|
77
|
+
/**
|
|
78
|
+
* Format a message for injection
|
|
79
|
+
*/
|
|
80
|
+
private formatMessage;
|
|
81
|
+
/**
|
|
82
|
+
* Format artifact with full content
|
|
83
|
+
*/
|
|
84
|
+
private formatArtifactFull;
|
|
85
|
+
/**
|
|
86
|
+
* Format artifact with summary only
|
|
87
|
+
*/
|
|
88
|
+
private formatArtifactSummary;
|
|
89
|
+
/**
|
|
90
|
+
* Truncate content to approximate token count
|
|
91
|
+
*/
|
|
92
|
+
private truncateToTokens;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build a context map from resolved mentions
|
|
96
|
+
*/
|
|
97
|
+
export declare function buildContextMap(resolved: Map<string, ResolvedMention>): Map<string, string>;
|