@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,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileLockManager - Multi-terminal file lock awareness
|
|
3
|
+
*
|
|
4
|
+
* Manages advisory file locks to prevent two terminals from editing
|
|
5
|
+
* the same file simultaneously. Locks are stored in the shared projects.db
|
|
6
|
+
* and auto-cleaned when sessions are removed (via ON DELETE CASCADE).
|
|
7
|
+
*
|
|
8
|
+
* Locks are advisory — the before-tool hook blocks writes with an error
|
|
9
|
+
* message that the LLM can relay to the user.
|
|
10
|
+
*/
|
|
11
|
+
import { getDb } from '../db/index.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Module-level singleton
|
|
14
|
+
// =============================================================================
|
|
15
|
+
let _fileLockManager = null;
|
|
16
|
+
/**
|
|
17
|
+
* Get the current FileLockManager instance (null if not initialized)
|
|
18
|
+
*/
|
|
19
|
+
export function getFileLockManager() {
|
|
20
|
+
return _fileLockManager;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize and return the FileLockManager singleton.
|
|
24
|
+
*/
|
|
25
|
+
export function initFileLockManager() {
|
|
26
|
+
if (!_fileLockManager) {
|
|
27
|
+
_fileLockManager = new FileLockManager(getDb());
|
|
28
|
+
}
|
|
29
|
+
return _fileLockManager;
|
|
30
|
+
}
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// FileLockManager
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Lock TTL in seconds. A lock older than this is considered expired and can be
|
|
36
|
+
* overwritten by another session. This allows multi-terminal workflows where
|
|
37
|
+
* terminals take turns editing different files — once a terminal moves on to
|
|
38
|
+
* another file, the lock on the previous file expires after this period.
|
|
39
|
+
*
|
|
40
|
+
* The lock is refreshed (locked_at updated) on every successful write to the
|
|
41
|
+
* same file, so sequential edits within a session keep the lock alive.
|
|
42
|
+
*/
|
|
43
|
+
const LOCK_TTL_SECONDS = 60;
|
|
44
|
+
export class FileLockManager {
|
|
45
|
+
db;
|
|
46
|
+
constructor(db) {
|
|
47
|
+
this.db = db;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Acquire a lock on a file. Returns true if lock acquired, false if held by another session.
|
|
51
|
+
* Uses INSERT OR REPLACE — if same session re-locks, just updates timestamp.
|
|
52
|
+
* If another active (non-expired) session holds the lock, returns false.
|
|
53
|
+
* Expired locks (older than LOCK_TTL_SECONDS) are overwritten.
|
|
54
|
+
*/
|
|
55
|
+
acquireLock(filePath, projectId, sessionId, agentId) {
|
|
56
|
+
try {
|
|
57
|
+
// Check if another session holds the lock
|
|
58
|
+
const existing = this.db.prepare(`SELECT session_id, locked_at FROM file_locks WHERE path = ? AND project_id = ?`).get(filePath, projectId);
|
|
59
|
+
if (existing && existing.session_id !== sessionId) {
|
|
60
|
+
// Another session holds the lock — check if it's expired
|
|
61
|
+
if (!isLockExpired(existing.locked_at)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
// Lock expired — safe to overwrite
|
|
65
|
+
}
|
|
66
|
+
// Acquire or refresh the lock (INSERT OR REPLACE for idempotent re-lock)
|
|
67
|
+
this.db.prepare(`
|
|
68
|
+
INSERT OR REPLACE INTO file_locks (path, project_id, session_id, agent_id, locked_at)
|
|
69
|
+
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
70
|
+
`).run(filePath, projectId, sessionId, agentId);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Best effort — if DB errors, allow the write
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Release a specific file lock.
|
|
80
|
+
*/
|
|
81
|
+
releaseLock(filePath, projectId) {
|
|
82
|
+
try {
|
|
83
|
+
this.db.prepare('DELETE FROM file_locks WHERE path = ? AND project_id = ?')
|
|
84
|
+
.run(filePath, projectId);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Best effort
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Release all locks held by a session.
|
|
92
|
+
* Called on unregister or project switch.
|
|
93
|
+
*/
|
|
94
|
+
releaseSessionLocks(sessionId) {
|
|
95
|
+
try {
|
|
96
|
+
this.db.prepare('DELETE FROM file_locks WHERE session_id = ?')
|
|
97
|
+
.run(sessionId);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Best effort
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if a file is locked by another active session.
|
|
105
|
+
* Returns lock info if locked by someone else (and not expired), null otherwise.
|
|
106
|
+
* Expired locks (older than LOCK_TTL_SECONDS) are treated as free.
|
|
107
|
+
*/
|
|
108
|
+
checkLock(filePath, projectId, selfSessionId) {
|
|
109
|
+
try {
|
|
110
|
+
const row = this.db.prepare(`
|
|
111
|
+
SELECT
|
|
112
|
+
fl.path,
|
|
113
|
+
fl.session_id,
|
|
114
|
+
fl.agent_id,
|
|
115
|
+
fl.locked_at,
|
|
116
|
+
ts.label,
|
|
117
|
+
ts.last_heartbeat
|
|
118
|
+
FROM file_locks fl
|
|
119
|
+
JOIN terminal_sessions ts ON fl.session_id = ts.id
|
|
120
|
+
WHERE fl.path = ? AND fl.project_id = ?
|
|
121
|
+
AND fl.session_id != ?
|
|
122
|
+
AND ts.status = 'active'
|
|
123
|
+
`).get(filePath, projectId, selfSessionId);
|
|
124
|
+
if (!row)
|
|
125
|
+
return null;
|
|
126
|
+
// Check if the lock has expired (file not recently written to)
|
|
127
|
+
if (isLockExpired(row.locked_at)) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
path: row.path,
|
|
132
|
+
sessionId: row.session_id,
|
|
133
|
+
sessionLabel: row.label ?? `Terminal ${row.session_id.slice(0, 8)}`,
|
|
134
|
+
agentId: row.agent_id,
|
|
135
|
+
lockedAt: row.locked_at,
|
|
136
|
+
lockedAgo: formatRelativeTime(row.locked_at),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Best effort — if DB errors, allow the write
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Clean up locks from stale/dead sessions (heartbeat expired).
|
|
146
|
+
* Called opportunistically during stale session cleanup.
|
|
147
|
+
*/
|
|
148
|
+
cleanupStaleLocks(staleThresholdMs) {
|
|
149
|
+
try {
|
|
150
|
+
// Delete locks whose owning session has expired heartbeat
|
|
151
|
+
const thresholdSec = Math.floor(staleThresholdMs / 1000);
|
|
152
|
+
const result = this.db.prepare(`
|
|
153
|
+
DELETE FROM file_locks
|
|
154
|
+
WHERE session_id IN (
|
|
155
|
+
SELECT id FROM terminal_sessions
|
|
156
|
+
WHERE (julianday('now') - julianday(last_heartbeat)) * 86400 > ?
|
|
157
|
+
)
|
|
158
|
+
`).run(thresholdSec);
|
|
159
|
+
return result.changes;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return 0;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// =============================================================================
|
|
167
|
+
// Helpers
|
|
168
|
+
// =============================================================================
|
|
169
|
+
/**
|
|
170
|
+
* Check if a lock's locked_at timestamp is older than LOCK_TTL_SECONDS.
|
|
171
|
+
*/
|
|
172
|
+
function isLockExpired(lockedAt) {
|
|
173
|
+
const utcStr = lockedAt.endsWith('Z') ? lockedAt : lockedAt + 'Z';
|
|
174
|
+
const lockTime = new Date(utcStr).getTime();
|
|
175
|
+
const ageMs = Date.now() - lockTime;
|
|
176
|
+
return ageMs > LOCK_TTL_SECONDS * 1000;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Format a relative time string from a SQLite CURRENT_TIMESTAMP datetime.
|
|
180
|
+
*/
|
|
181
|
+
function formatRelativeTime(sqliteDatetime) {
|
|
182
|
+
const now = Date.now();
|
|
183
|
+
const utcStr = sqliteDatetime.endsWith('Z') ? sqliteDatetime : sqliteDatetime + 'Z';
|
|
184
|
+
const then = new Date(utcStr).getTime();
|
|
185
|
+
const diffMs = now - then;
|
|
186
|
+
const diffSec = Math.floor(diffMs / 1000);
|
|
187
|
+
if (diffSec < 60)
|
|
188
|
+
return `${String(diffSec)}s ago`;
|
|
189
|
+
const diffMin = Math.floor(diffSec / 60);
|
|
190
|
+
if (diffMin < 60)
|
|
191
|
+
return `${String(diffMin)}m ago`;
|
|
192
|
+
const diffHr = Math.floor(diffMin / 60);
|
|
193
|
+
return `${String(diffHr)}h ${String(diffMin % 60)}m ago`;
|
|
194
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Agent Module
|
|
3
|
+
*
|
|
4
|
+
* Provides multi-agent team functionality:
|
|
5
|
+
* - AgentTeam: Orchestrates multiple persistent agents
|
|
6
|
+
* - TeamAgent: Wrapper for individual team agents
|
|
7
|
+
* - Checkpointing: Persistence for team state
|
|
8
|
+
* - SharedContextManager: Shared context across agents
|
|
9
|
+
* - ArtifactStore: Storage for team artifacts
|
|
10
|
+
*/
|
|
11
|
+
export type { MascotExpression, AgentRole, RoleMetadata, TeamAgentConfig, SerializedTeamAgent, TeamMetadata, SerializedTeam, TeamEventType, TeamEvent, TeamEventHandler, } from './types.js';
|
|
12
|
+
export { ROLE_METADATA, ROLE_EXPERTISE, PREDEFINED_ROLE_IDS } from './types.js';
|
|
13
|
+
export { TeamAgent } from './team-agent.js';
|
|
14
|
+
export { AgentTeam, type AgentTeamConfig } from './team.js';
|
|
15
|
+
export { TeamCheckpointer, getTeamCheckpointer, getSessionsPath } from './checkpointer.js';
|
|
16
|
+
export { SharedContextManager, type SharedContext, type SharedProjectInfo, type SharedTeamInfo, type TeamRosterEntry, type TeamActivity, type TeamActivityType, type SharedDecision, type TokenBudget, type SerializedSharedContext, } from './shared-context.js';
|
|
17
|
+
export { ArtifactStore, type Artifact, type ArtifactType, type ArtifactSummary, type CreateArtifactOptions, type UpdateArtifactOptions, } from './artifacts.js';
|
|
18
|
+
export { parseInputForMentions, getReferencedAgents, hasReferences, buildMessageWithContext, type ParsedMention, type ParsedInput, } from './mention-parser.js';
|
|
19
|
+
export { ContextResolver, buildContextMap, type ResolvedMention, type ResolutionSource, type ResolveOptions, } from './context-resolver.js';
|
|
20
|
+
export { setActiveSharedContext, getActiveSharedContext, recordTeamActivity, } from './activity.js';
|
|
21
|
+
export { findAgentForRole, findAgentById, getAvailableSpecialists, getSpecialistsSummary, hasSpecialists, } from './agent-selection.js';
|
|
22
|
+
export { suggestOwner, suggestOwners, matchesAgentExpertise, } from './task-suggestion.js';
|
|
23
|
+
export { wouldCreateLoop, recordAssignment, getAssignmentHistory, clearAssignmentHistory, clearAllAssignmentHistory, canReassign, } from './task-assignment.js';
|
|
24
|
+
export { PendingRequestsManager, getPendingRequestsManager, resetPendingRequestsManager, type PendingRequest, type PendingRequestResponse, type PendingRequestType, type EnqueueOptions, type PendingRequestsEvents, } from './pending-requests.js';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Agent Module
|
|
3
|
+
*
|
|
4
|
+
* Provides multi-agent team functionality:
|
|
5
|
+
* - AgentTeam: Orchestrates multiple persistent agents
|
|
6
|
+
* - TeamAgent: Wrapper for individual team agents
|
|
7
|
+
* - Checkpointing: Persistence for team state
|
|
8
|
+
* - SharedContextManager: Shared context across agents
|
|
9
|
+
* - ArtifactStore: Storage for team artifacts
|
|
10
|
+
*/
|
|
11
|
+
export { ROLE_METADATA, ROLE_EXPERTISE, PREDEFINED_ROLE_IDS } from './types.js';
|
|
12
|
+
// Classes
|
|
13
|
+
export { TeamAgent } from './team-agent.js';
|
|
14
|
+
export { AgentTeam } from './team.js';
|
|
15
|
+
export { TeamCheckpointer, getTeamCheckpointer, getSessionsPath } from './checkpointer.js';
|
|
16
|
+
// Phase 2: Shared Context
|
|
17
|
+
export { SharedContextManager, } from './shared-context.js';
|
|
18
|
+
export { ArtifactStore, } from './artifacts.js';
|
|
19
|
+
// Phase 2c: Mention References
|
|
20
|
+
export { parseInputForMentions, getReferencedAgents, hasReferences, buildMessageWithContext, } from './mention-parser.js';
|
|
21
|
+
export { ContextResolver, buildContextMap, } from './context-resolver.js';
|
|
22
|
+
// Phase 2c: Activity Recording
|
|
23
|
+
export { setActiveSharedContext, getActiveSharedContext, recordTeamActivity, } from './activity.js';
|
|
24
|
+
// Phase 3: Agent Selection (for delegation)
|
|
25
|
+
export { findAgentForRole, findAgentById, getAvailableSpecialists, getSpecialistsSummary, hasSpecialists, } from './agent-selection.js';
|
|
26
|
+
// Task Ownership: Suggestion and Assignment
|
|
27
|
+
export { suggestOwner, suggestOwners, matchesAgentExpertise, } from './task-suggestion.js';
|
|
28
|
+
export { wouldCreateLoop, recordAssignment, getAssignmentHistory, clearAssignmentHistory, clearAllAssignmentHistory, canReassign, } from './task-assignment.js';
|
|
29
|
+
// Phase 3b: Background Agents - Pending Requests
|
|
30
|
+
export { PendingRequestsManager, getPendingRequestsManager, resetPendingRequestsManager, } from './pending-requests.js';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentionParser - Parse $agent references in user input
|
|
3
|
+
*
|
|
4
|
+
* Two types of $agent usage:
|
|
5
|
+
* 1. Switch: "$arch message" at start of input → switch to arch, send message
|
|
6
|
+
* 2. Reference: "what did $arch propose" mid-sentence → inject arch's context
|
|
7
|
+
*
|
|
8
|
+
* Detection rule: $name at START of trimmed input = switch. Otherwise = reference.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* A parsed mention in the input
|
|
12
|
+
*/
|
|
13
|
+
export interface ParsedMention {
|
|
14
|
+
/** Agent ID without $ prefix */
|
|
15
|
+
agentId: string;
|
|
16
|
+
/** Position in original input */
|
|
17
|
+
startIndex: number;
|
|
18
|
+
endIndex: number;
|
|
19
|
+
/** The full match including $ prefix */
|
|
20
|
+
raw: string;
|
|
21
|
+
/** Optional query/context after the agent name */
|
|
22
|
+
context?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Result of parsing user input for mentions
|
|
26
|
+
*/
|
|
27
|
+
export interface ParsedInput {
|
|
28
|
+
/** Original input text */
|
|
29
|
+
original: string;
|
|
30
|
+
/** Whether the input starts with a switch ($agent at beginning) */
|
|
31
|
+
hasSwitch: boolean;
|
|
32
|
+
/** The switch target agent (if hasSwitch is true) */
|
|
33
|
+
switchTarget?: string;
|
|
34
|
+
/** Message to send after switching (if hasSwitch is true) */
|
|
35
|
+
messageAfterSwitch?: string;
|
|
36
|
+
/** All reference mentions (mid-sentence $agent) */
|
|
37
|
+
references: ParsedMention[];
|
|
38
|
+
/** Input with mentions replaced by placeholders for context injection */
|
|
39
|
+
normalizedInput: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse user input for $agent mentions
|
|
43
|
+
*
|
|
44
|
+
* @param input - User input string
|
|
45
|
+
* @param validAgents - Set of valid agent IDs (for validation)
|
|
46
|
+
* @returns Parsed input with mentions identified
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseInputForMentions(input: string, validAgents?: Set<string>): ParsedInput;
|
|
49
|
+
/**
|
|
50
|
+
* Get unique agent IDs from references
|
|
51
|
+
*/
|
|
52
|
+
export declare function getReferencedAgents(parsed: ParsedInput): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Check if input contains any references (not just switch)
|
|
55
|
+
*/
|
|
56
|
+
export declare function hasReferences(parsed: ParsedInput): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Build a message with context injected for mentions
|
|
59
|
+
*
|
|
60
|
+
* @param parsed - Parsed input
|
|
61
|
+
* @param contextMap - Map of agentId → resolved context string
|
|
62
|
+
* @returns Message with context prepended or injected
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildMessageWithContext(parsed: ParsedInput, contextMap: Map<string, string>): string;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentionParser - Parse $agent references in user input
|
|
3
|
+
*
|
|
4
|
+
* Two types of $agent usage:
|
|
5
|
+
* 1. Switch: "$arch message" at start of input → switch to arch, send message
|
|
6
|
+
* 2. Reference: "what did $arch propose" mid-sentence → inject arch's context
|
|
7
|
+
*
|
|
8
|
+
* Detection rule: $name at START of trimmed input = switch. Otherwise = reference.
|
|
9
|
+
*/
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Constants
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Match $agentname pattern - alphanumeric and underscore/hyphen
|
|
14
|
+
const MENTION_PATTERN = /\$([a-zA-Z][a-zA-Z0-9_-]*)/g;
|
|
15
|
+
// Match $agent at start of input (for switch detection)
|
|
16
|
+
const SWITCH_PATTERN = /^\$([a-zA-Z][a-zA-Z0-9_-]*)\s*/;
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Parser
|
|
19
|
+
// =============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Parse user input for $agent mentions
|
|
22
|
+
*
|
|
23
|
+
* @param input - User input string
|
|
24
|
+
* @param validAgents - Set of valid agent IDs (for validation)
|
|
25
|
+
* @returns Parsed input with mentions identified
|
|
26
|
+
*/
|
|
27
|
+
export function parseInputForMentions(input, validAgents) {
|
|
28
|
+
const trimmed = input.trim();
|
|
29
|
+
// Check for switch pattern at start
|
|
30
|
+
const switchMatch = trimmed.match(SWITCH_PATTERN);
|
|
31
|
+
let hasSwitch = false;
|
|
32
|
+
let switchTarget;
|
|
33
|
+
let messageAfterSwitch;
|
|
34
|
+
let searchStart = 0;
|
|
35
|
+
if (switchMatch) {
|
|
36
|
+
const agentId = switchMatch[1].toLowerCase();
|
|
37
|
+
// Only treat as switch if it's a valid agent
|
|
38
|
+
if (!validAgents || validAgents.has(agentId)) {
|
|
39
|
+
hasSwitch = true;
|
|
40
|
+
switchTarget = agentId;
|
|
41
|
+
messageAfterSwitch = trimmed.slice(switchMatch[0].length).trim();
|
|
42
|
+
searchStart = switchMatch[0].length; // Skip switch when looking for references
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Find all reference mentions (excluding the switch)
|
|
46
|
+
const references = [];
|
|
47
|
+
MENTION_PATTERN.lastIndex = searchStart;
|
|
48
|
+
let match;
|
|
49
|
+
while ((match = MENTION_PATTERN.exec(trimmed)) !== null) {
|
|
50
|
+
const agentId = match[1].toLowerCase();
|
|
51
|
+
// Skip if not a valid agent (if validation set provided)
|
|
52
|
+
if (validAgents && !validAgents.has(agentId)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// Skip if this is the switch mention
|
|
56
|
+
if (hasSwitch && match.index === 0) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
references.push({
|
|
60
|
+
agentId,
|
|
61
|
+
startIndex: match.index,
|
|
62
|
+
endIndex: match.index + match[0].length,
|
|
63
|
+
raw: match[0],
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Extract context hints for each reference
|
|
67
|
+
for (const ref of references) {
|
|
68
|
+
ref.context = extractContextHint(trimmed, ref.endIndex);
|
|
69
|
+
}
|
|
70
|
+
// Build normalized input (with mention placeholders)
|
|
71
|
+
const normalizedInput = hasSwitch ? messageAfterSwitch ?? '' : trimmed;
|
|
72
|
+
// For normalized input, we keep mentions as-is but could replace with markers
|
|
73
|
+
// This is useful for the resolver to know where to inject context
|
|
74
|
+
return {
|
|
75
|
+
original: input,
|
|
76
|
+
hasSwitch,
|
|
77
|
+
switchTarget,
|
|
78
|
+
messageAfterSwitch,
|
|
79
|
+
references,
|
|
80
|
+
normalizedInput,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract a context hint following a mention
|
|
85
|
+
*
|
|
86
|
+
* Examples:
|
|
87
|
+
* - "what did $arch propose for the API" → "propose for the API"
|
|
88
|
+
* - "review $qa's feedback on the PR" → "'s feedback on the PR"
|
|
89
|
+
* - "based on $arch" → undefined
|
|
90
|
+
*/
|
|
91
|
+
function extractContextHint(text, afterIndex) {
|
|
92
|
+
const remaining = text.slice(afterIndex);
|
|
93
|
+
// Common patterns that provide context:
|
|
94
|
+
// - "'s <noun>" (possessive)
|
|
95
|
+
// - " <verb> <object>" (action)
|
|
96
|
+
// - " about <topic>"
|
|
97
|
+
// - " for <topic>"
|
|
98
|
+
// - " on <topic>"
|
|
99
|
+
// Get up to end of sentence or 50 chars
|
|
100
|
+
const endMatch = remaining.match(/^[^.!?\n]{0,50}/);
|
|
101
|
+
if (!endMatch || endMatch[0].trim().length < 3) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return endMatch[0].trim();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get unique agent IDs from references
|
|
108
|
+
*/
|
|
109
|
+
export function getReferencedAgents(parsed) {
|
|
110
|
+
const agents = new Set();
|
|
111
|
+
for (const ref of parsed.references) {
|
|
112
|
+
agents.add(ref.agentId);
|
|
113
|
+
}
|
|
114
|
+
return Array.from(agents);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if input contains any references (not just switch)
|
|
118
|
+
*/
|
|
119
|
+
export function hasReferences(parsed) {
|
|
120
|
+
return parsed.references.length > 0;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build a message with context injected for mentions
|
|
124
|
+
*
|
|
125
|
+
* @param parsed - Parsed input
|
|
126
|
+
* @param contextMap - Map of agentId → resolved context string
|
|
127
|
+
* @returns Message with context prepended or injected
|
|
128
|
+
*/
|
|
129
|
+
export function buildMessageWithContext(parsed, contextMap) {
|
|
130
|
+
if (parsed.references.length === 0) {
|
|
131
|
+
return parsed.normalizedInput;
|
|
132
|
+
}
|
|
133
|
+
// Collect context blocks
|
|
134
|
+
const contextBlocks = [];
|
|
135
|
+
for (const ref of parsed.references) {
|
|
136
|
+
const context = contextMap.get(ref.agentId);
|
|
137
|
+
if (context) {
|
|
138
|
+
contextBlocks.push(`[Context from $${ref.agentId}:\n${context}\n]`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (contextBlocks.length === 0) {
|
|
142
|
+
return parsed.normalizedInput;
|
|
143
|
+
}
|
|
144
|
+
// Prepend context blocks to the message
|
|
145
|
+
return `${contextBlocks.join('\n\n')}\n\n${parsed.normalizedInput}`;
|
|
146
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NotificationManager - Cross-session notifications
|
|
3
|
+
*
|
|
4
|
+
* Polls the shared session_notifications table so that events in one terminal
|
|
5
|
+
* (e.g. a background agent finishing, a pending approval request) are surfaced
|
|
6
|
+
* to other terminals working on the same project.
|
|
7
|
+
*
|
|
8
|
+
* Singleton pattern — same as SessionRegistry and FileLockManager.
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
import type Database from 'better-sqlite3';
|
|
12
|
+
import { type SessionNotificationRecord } from '../db/index.js';
|
|
13
|
+
export interface NotificationInsertOptions {
|
|
14
|
+
projectId: number;
|
|
15
|
+
fromSessionId: string;
|
|
16
|
+
toSessionId?: string | null;
|
|
17
|
+
type: 'pending_request' | 'agent_finished';
|
|
18
|
+
title: string;
|
|
19
|
+
message?: string | null;
|
|
20
|
+
payload?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export interface SessionNotification extends SessionNotificationRecord {
|
|
23
|
+
/** Label of the sending session (joined from terminal_sessions) */
|
|
24
|
+
from_label: string | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the current NotificationManager instance (null if not initialized)
|
|
28
|
+
*/
|
|
29
|
+
export declare function getNotificationManager(): NotificationManager | null;
|
|
30
|
+
/**
|
|
31
|
+
* Initialize and return the NotificationManager singleton.
|
|
32
|
+
*/
|
|
33
|
+
export declare function initNotificationManager(): NotificationManager;
|
|
34
|
+
export declare class NotificationManager extends EventEmitter {
|
|
35
|
+
private readonly db;
|
|
36
|
+
private pollInterval;
|
|
37
|
+
private lastKnownCount;
|
|
38
|
+
constructor(db: Database.Database);
|
|
39
|
+
/**
|
|
40
|
+
* Start polling for new notifications (5s interval, .unref()).
|
|
41
|
+
*/
|
|
42
|
+
startPolling(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Stop polling.
|
|
45
|
+
*/
|
|
46
|
+
stopPolling(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Insert a new notification into the shared DB.
|
|
49
|
+
* Returns the notification ID, or null on failure.
|
|
50
|
+
*/
|
|
51
|
+
insert(options: NotificationInsertOptions): string | null;
|
|
52
|
+
/**
|
|
53
|
+
* Get the count of unread notifications for this session.
|
|
54
|
+
* Lightweight COUNT(*) — used by the status bar poll.
|
|
55
|
+
*/
|
|
56
|
+
getUnreadCount(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Get all unread notifications for this session (with sender label).
|
|
59
|
+
* Used by the overlay for full display.
|
|
60
|
+
*/
|
|
61
|
+
getUnread(): SessionNotification[];
|
|
62
|
+
/**
|
|
63
|
+
* Mark a single notification as read.
|
|
64
|
+
*/
|
|
65
|
+
markRead(notificationId: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Mark all unread notifications for this session as read.
|
|
68
|
+
*/
|
|
69
|
+
markAllRead(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Clean up old notifications:
|
|
72
|
+
* - Delete read notifications older than 1 hour
|
|
73
|
+
* - Delete orphaned notifications (sender session gone, CASCADE missed)
|
|
74
|
+
*/
|
|
75
|
+
cleanup(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Poll for new notifications and emit 'count-changed' on delta.
|
|
78
|
+
*/
|
|
79
|
+
private checkForNewNotifications;
|
|
80
|
+
/**
|
|
81
|
+
* Re-check count and emit if changed (after mark operations).
|
|
82
|
+
*/
|
|
83
|
+
private emitCountChange;
|
|
84
|
+
}
|