@compilr-dev/cli 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +254 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +134 -4
- package/dist/agent.js +345 -166
- package/dist/anchors/index.d.ts +9 -0
- package/dist/anchors/index.js +9 -0
- package/dist/anchors/project-anchors.d.ts +79 -0
- package/dist/anchors/project-anchors.js +202 -0
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +533 -0
- package/dist/commands-v2/handlers/core.d.ts +14 -0
- package/dist/commands-v2/handlers/core.js +290 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +177 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +25 -0
- package/dist/commands-v2/handlers/index.js +63 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +1035 -0
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +17 -0
- package/dist/commands-v2/handlers/settings.js +417 -0
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +14 -0
- package/dist/commands-v2/index.js +18 -0
- package/dist/commands-v2/registry.d.ts +52 -0
- package/dist/commands-v2/registry.js +114 -0
- package/dist/commands-v2/types.d.ts +153 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +123 -7
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +615 -179
- package/dist/input-handlers/index.d.ts +7 -0
- package/dist/input-handlers/index.js +7 -0
- package/dist/input-handlers/memory-handler.d.ts +26 -0
- package/dist/input-handlers/memory-handler.js +69 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.d.ts +63 -0
- package/dist/repl-helpers.js +319 -0
- package/dist/repl-v2.d.ts +554 -0
- package/dist/repl-v2.js +3286 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +156 -13
- package/dist/settings/index.js +377 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +114 -0
- package/dist/settings/paths.js +270 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -58
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +35 -75
- package/dist/themes/colors.js +3 -1
- package/dist/themes/registry.d.ts +5 -36
- package/dist/themes/registry.js +11 -95
- package/dist/themes/types.d.ts +3 -38
- package/dist/themes/types.js +2 -2
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +56 -0
- package/dist/tools/backlog-wrappers.js +353 -0
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +2 -2
- package/dist/tools/db-tools.d.ts +12 -0
- package/dist/tools/db-tools.js +14 -0
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +43 -0
- package/dist/tools/document-db.js +220 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +34 -0
- package/dist/tools/project-db.js +39 -0
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +135 -0
- package/dist/tools/workitem-db.js +730 -0
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +238 -38
- package/dist/ui/ask-user-overlay.d.ts +2 -2
- package/dist/ui/ask-user-overlay.js +443 -535
- package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +26 -0
- package/dist/ui/base/index.js +33 -0
- package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
- package/dist/ui/base/inline-overlay-utils.js +320 -0
- package/dist/ui/base/inline-overlay.d.ts +159 -0
- package/dist/ui/base/inline-overlay.js +257 -0
- package/dist/ui/base/key-utils.d.ts +15 -0
- package/dist/ui/base/key-utils.js +30 -0
- package/dist/ui/base/overlay-base-v2.d.ts +203 -0
- package/dist/ui/base/overlay-base-v2.js +260 -0
- package/dist/ui/base/overlay-base.d.ts +156 -0
- package/dist/ui/base/overlay-base.js +238 -0
- package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
- package/dist/ui/base/overlay-lifecycle.js +159 -0
- package/dist/ui/base/overlay-types.d.ts +185 -0
- package/dist/ui/base/overlay-types.js +7 -0
- package/dist/ui/base/render-utils.d.ts +27 -0
- package/dist/ui/base/render-utils.js +36 -0
- package/dist/ui/base/screen-stack.d.ts +148 -0
- package/dist/ui/base/screen-stack.js +184 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
- package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
- package/dist/ui/base/tabbed-list-overlay.js +369 -0
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.d.ts +75 -4
- package/dist/ui/conversation.js +376 -165
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +4 -10
- package/dist/ui/features/index.d.ts +34 -0
- package/dist/ui/features/index.js +34 -0
- package/dist/ui/features/input-feature.d.ts +85 -0
- package/dist/ui/features/input-feature.js +238 -0
- package/dist/ui/features/list-feature.d.ts +155 -0
- package/dist/ui/features/list-feature.js +244 -0
- package/dist/ui/features/pagination-feature.d.ts +154 -0
- package/dist/ui/features/pagination-feature.js +238 -0
- package/dist/ui/features/search-feature.d.ts +148 -0
- package/dist/ui/features/search-feature.js +185 -0
- package/dist/ui/features/tab-feature.d.ts +194 -0
- package/dist/ui/features/tab-feature.js +307 -0
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +181 -7
- package/dist/ui/footer.js +523 -74
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +135 -33
- package/dist/ui/input-prompt.js +728 -337
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/keys-overlay.d.ts +1 -0
- package/dist/ui/keys-overlay.js +203 -141
- package/dist/ui/line-utils.d.ts +88 -0
- package/dist/ui/line-utils.js +150 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +157 -0
- package/dist/ui/live-region.js +379 -0
- package/dist/ui/mascot/expressions.d.ts +32 -0
- package/dist/ui/mascot/expressions.js +213 -0
- package/dist/ui/mascot/index.d.ts +8 -0
- package/dist/ui/mascot/index.js +8 -0
- package/dist/ui/mascot/renderer.d.ts +19 -0
- package/dist/ui/mascot/renderer.js +132 -0
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
- package/dist/ui/overlay/index.d.ts +52 -0
- package/dist/ui/overlay/index.js +54 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/types.d.ts +140 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +4 -460
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +189 -300
- package/dist/ui/providers/types.d.ts +178 -0
- package/dist/ui/providers/types.js +9 -0
- package/dist/ui/render-modes.d.ts +36 -0
- package/dist/ui/render-modes.js +44 -0
- package/dist/ui/startup-menu.d.ts +36 -0
- package/dist/ui/startup-menu.js +236 -0
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +318 -0
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +220 -0
- package/dist/ui/terminal-renderer.js +750 -0
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +331 -0
- package/dist/ui/terminal-ui.js +819 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +124 -38
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +1027 -0
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +39 -17
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +240 -0
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/dist/workflow/guided-mode-injector.d.ts +42 -0
- package/dist/workflow/guided-mode-injector.js +191 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/step-criteria.d.ts +62 -0
- package/dist/workflow/step-criteria.js +150 -0
- package/dist/workflow/step-tracker.d.ts +92 -0
- package/dist/workflow/step-tracker.js +141 -0
- package/package.json +32 -12
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -121
- package/dist/repl.js +0 -1878
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -501
- package/dist/ui/arch-type-overlay.d.ts +0 -20
- package/dist/ui/arch-type-overlay.js +0 -229
- package/dist/ui/backlog-overlay.d.ts +0 -17
- package/dist/ui/backlog-overlay.js +0 -786
- package/dist/ui/commands-overlay.d.ts +0 -11
- package/dist/ui/commands-overlay.js +0 -410
- package/dist/ui/config-overlay.d.ts +0 -34
- package/dist/ui/config-overlay.js +0 -977
- package/dist/ui/init-overlay.d.ts +0 -24
- package/dist/ui/init-overlay.js +0 -525
- package/dist/ui/input-prompt-v2.d.ts +0 -179
- package/dist/ui/input-prompt-v2.js +0 -991
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -171
- package/dist/ui/tools-overlay.d.ts +0 -26
- package/dist/ui/tools-overlay.js +0 -278
- package/dist/ui/tutorial-overlay.d.ts +0 -10
- package/dist/ui/tutorial-overlay.js +0 -936
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Repository
|
|
3
|
+
*
|
|
4
|
+
* Handles all database operations for plans.
|
|
5
|
+
* Plans are stored in project_documents with doc_type='plan'.
|
|
6
|
+
*/
|
|
7
|
+
import type { PlanStatus } from '../schema.js';
|
|
8
|
+
export interface CreatePlanInput {
|
|
9
|
+
project_id: number;
|
|
10
|
+
name: string;
|
|
11
|
+
content: string;
|
|
12
|
+
work_item_id?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface UpdatePlanInput {
|
|
15
|
+
content?: string;
|
|
16
|
+
status?: PlanStatus;
|
|
17
|
+
work_item_id?: number | null;
|
|
18
|
+
}
|
|
19
|
+
export interface ListPlansOptions {
|
|
20
|
+
status?: PlanStatus | PlanStatus[];
|
|
21
|
+
work_item_id?: number;
|
|
22
|
+
limit?: number;
|
|
23
|
+
order_by?: 'updated_desc' | 'updated_asc' | 'created_desc' | 'name_asc';
|
|
24
|
+
}
|
|
25
|
+
export interface Plan {
|
|
26
|
+
id: number;
|
|
27
|
+
projectId: number;
|
|
28
|
+
name: string;
|
|
29
|
+
content: string;
|
|
30
|
+
status: PlanStatus;
|
|
31
|
+
workItemId: number | null;
|
|
32
|
+
createdAt: Date;
|
|
33
|
+
updatedAt: Date;
|
|
34
|
+
}
|
|
35
|
+
export interface PlanSummary {
|
|
36
|
+
id: number;
|
|
37
|
+
name: string;
|
|
38
|
+
status: PlanStatus;
|
|
39
|
+
workItemId: number | null;
|
|
40
|
+
workItemTitle?: string;
|
|
41
|
+
workItemItemId?: string;
|
|
42
|
+
updatedAt: Date;
|
|
43
|
+
}
|
|
44
|
+
export interface PlanWithWorkItem extends Plan {
|
|
45
|
+
workItem?: {
|
|
46
|
+
id: number;
|
|
47
|
+
itemId: string;
|
|
48
|
+
title: string;
|
|
49
|
+
status: string;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export declare const planRepository: {
|
|
53
|
+
/**
|
|
54
|
+
* Create a new plan
|
|
55
|
+
*/
|
|
56
|
+
create(input: CreatePlanInput): Plan;
|
|
57
|
+
/**
|
|
58
|
+
* Get plan by ID
|
|
59
|
+
*/
|
|
60
|
+
getById(id: number): Plan | null;
|
|
61
|
+
/**
|
|
62
|
+
* Get plan by name for a project
|
|
63
|
+
*/
|
|
64
|
+
getByName(projectId: number, name: string): Plan | null;
|
|
65
|
+
/**
|
|
66
|
+
* Get plan with linked work item details
|
|
67
|
+
*/
|
|
68
|
+
getWithWorkItem(id: number): PlanWithWorkItem | null;
|
|
69
|
+
/**
|
|
70
|
+
* Update a plan
|
|
71
|
+
*/
|
|
72
|
+
update(id: number, input: UpdatePlanInput): Plan | null;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a plan
|
|
75
|
+
*/
|
|
76
|
+
delete(id: number): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* List plans for a project
|
|
79
|
+
*/
|
|
80
|
+
list(projectId: number, options?: ListPlansOptions): PlanSummary[];
|
|
81
|
+
/**
|
|
82
|
+
* Count plans by status for a project
|
|
83
|
+
*/
|
|
84
|
+
countByStatus(projectId: number): Record<PlanStatus, number>;
|
|
85
|
+
/**
|
|
86
|
+
* Get plans with status 'in_progress' for a project
|
|
87
|
+
*/
|
|
88
|
+
getInProgress(projectId: number): PlanSummary[];
|
|
89
|
+
/**
|
|
90
|
+
* Check if there are any in_progress plans for a project
|
|
91
|
+
*/
|
|
92
|
+
hasInProgress(projectId: number): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Link a plan to a work item
|
|
95
|
+
*/
|
|
96
|
+
linkWorkItem(planId: number, workItemId: number): Plan | null;
|
|
97
|
+
/**
|
|
98
|
+
* Unlink a plan from its work item
|
|
99
|
+
*/
|
|
100
|
+
unlinkWorkItem(planId: number): Plan | null;
|
|
101
|
+
};
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Repository
|
|
3
|
+
*
|
|
4
|
+
* Handles all database operations for plans.
|
|
5
|
+
* Plans are stored in project_documents with doc_type='plan'.
|
|
6
|
+
*/
|
|
7
|
+
import { getDb } from '../index.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Status Transition Rules
|
|
10
|
+
// =============================================================================
|
|
11
|
+
const VALID_TRANSITIONS = {
|
|
12
|
+
draft: ['approved', 'abandoned'],
|
|
13
|
+
approved: ['in_progress', 'abandoned'],
|
|
14
|
+
in_progress: ['completed', 'abandoned'],
|
|
15
|
+
completed: [], // Terminal state
|
|
16
|
+
abandoned: ['draft'], // Can re-open
|
|
17
|
+
};
|
|
18
|
+
function isValidTransition(from, to) {
|
|
19
|
+
return VALID_TRANSITIONS[from].includes(to);
|
|
20
|
+
}
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Helpers
|
|
23
|
+
// =============================================================================
|
|
24
|
+
function recordToPlan(record) {
|
|
25
|
+
return {
|
|
26
|
+
id: record.id,
|
|
27
|
+
projectId: record.project_id,
|
|
28
|
+
name: record.title,
|
|
29
|
+
content: record.content,
|
|
30
|
+
status: record.status ?? 'draft',
|
|
31
|
+
workItemId: record.work_item_id,
|
|
32
|
+
createdAt: new Date(record.created_at),
|
|
33
|
+
updatedAt: new Date(record.updated_at),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function recordToPlanSummary(record) {
|
|
37
|
+
return {
|
|
38
|
+
id: record.id,
|
|
39
|
+
name: record.title,
|
|
40
|
+
status: record.status ?? 'draft',
|
|
41
|
+
workItemId: record.work_item_id,
|
|
42
|
+
workItemTitle: record.work_item_title,
|
|
43
|
+
workItemItemId: record.work_item_item_id,
|
|
44
|
+
updatedAt: new Date(record.updated_at),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// =============================================================================
|
|
48
|
+
// Repository
|
|
49
|
+
// =============================================================================
|
|
50
|
+
export const planRepository = {
|
|
51
|
+
/**
|
|
52
|
+
* Create a new plan
|
|
53
|
+
*/
|
|
54
|
+
create(input) {
|
|
55
|
+
const db = getDb();
|
|
56
|
+
const now = new Date().toISOString();
|
|
57
|
+
const result = db
|
|
58
|
+
.prepare(`
|
|
59
|
+
INSERT INTO project_documents (
|
|
60
|
+
project_id, doc_type, title, content, status, work_item_id,
|
|
61
|
+
created_at, updated_at
|
|
62
|
+
) VALUES (?, 'plan', ?, ?, 'draft', ?, ?, ?)
|
|
63
|
+
`)
|
|
64
|
+
.run(input.project_id, input.name, input.content, input.work_item_id ?? null, now, now);
|
|
65
|
+
const plan = this.getById(Number(result.lastInsertRowid));
|
|
66
|
+
if (!plan)
|
|
67
|
+
throw new Error('Failed to create plan');
|
|
68
|
+
return plan;
|
|
69
|
+
},
|
|
70
|
+
/**
|
|
71
|
+
* Get plan by ID
|
|
72
|
+
*/
|
|
73
|
+
getById(id) {
|
|
74
|
+
const db = getDb();
|
|
75
|
+
const record = db
|
|
76
|
+
.prepare(`SELECT * FROM project_documents WHERE id = ? AND doc_type = 'plan'`)
|
|
77
|
+
.get(id);
|
|
78
|
+
return record ? recordToPlan(record) : null;
|
|
79
|
+
},
|
|
80
|
+
/**
|
|
81
|
+
* Get plan by name for a project
|
|
82
|
+
*/
|
|
83
|
+
getByName(projectId, name) {
|
|
84
|
+
const db = getDb();
|
|
85
|
+
const record = db
|
|
86
|
+
.prepare(`SELECT * FROM project_documents
|
|
87
|
+
WHERE project_id = ? AND doc_type = 'plan' AND title = ?`)
|
|
88
|
+
.get(projectId, name);
|
|
89
|
+
return record ? recordToPlan(record) : null;
|
|
90
|
+
},
|
|
91
|
+
/**
|
|
92
|
+
* Get plan with linked work item details
|
|
93
|
+
*/
|
|
94
|
+
getWithWorkItem(id) {
|
|
95
|
+
const db = getDb();
|
|
96
|
+
const record = db
|
|
97
|
+
.prepare(`
|
|
98
|
+
SELECT pd.*, wi.item_id as wi_item_id, wi.title as wi_title, wi.status as wi_status
|
|
99
|
+
FROM project_documents pd
|
|
100
|
+
LEFT JOIN work_items wi ON pd.work_item_id = wi.id
|
|
101
|
+
WHERE pd.id = ? AND pd.doc_type = 'plan'
|
|
102
|
+
`)
|
|
103
|
+
.get(id);
|
|
104
|
+
if (!record)
|
|
105
|
+
return null;
|
|
106
|
+
const plan = recordToPlan(record);
|
|
107
|
+
if (record.wi_item_id && record.work_item_id !== null) {
|
|
108
|
+
plan.workItem = {
|
|
109
|
+
id: record.work_item_id,
|
|
110
|
+
itemId: record.wi_item_id,
|
|
111
|
+
title: record.wi_title ?? '',
|
|
112
|
+
status: record.wi_status ?? '',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return plan;
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Update a plan
|
|
119
|
+
*/
|
|
120
|
+
update(id, input) {
|
|
121
|
+
const db = getDb();
|
|
122
|
+
// Get current plan for status validation
|
|
123
|
+
const current = this.getById(id);
|
|
124
|
+
if (!current)
|
|
125
|
+
return null;
|
|
126
|
+
// Validate status transition if changing status
|
|
127
|
+
if (input.status && input.status !== current.status) {
|
|
128
|
+
if (!isValidTransition(current.status, input.status)) {
|
|
129
|
+
throw new Error(`Invalid status transition: ${current.status} → ${input.status}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const updates = [];
|
|
133
|
+
const params = [];
|
|
134
|
+
if (input.content !== undefined) {
|
|
135
|
+
updates.push('content = ?');
|
|
136
|
+
params.push(input.content);
|
|
137
|
+
}
|
|
138
|
+
if (input.status !== undefined) {
|
|
139
|
+
updates.push('status = ?');
|
|
140
|
+
params.push(input.status);
|
|
141
|
+
}
|
|
142
|
+
if (input.work_item_id !== undefined) {
|
|
143
|
+
updates.push('work_item_id = ?');
|
|
144
|
+
params.push(input.work_item_id);
|
|
145
|
+
}
|
|
146
|
+
if (updates.length === 0) {
|
|
147
|
+
return current;
|
|
148
|
+
}
|
|
149
|
+
updates.push('updated_at = ?');
|
|
150
|
+
params.push(new Date().toISOString());
|
|
151
|
+
params.push(id);
|
|
152
|
+
const query = `UPDATE project_documents SET ${updates.join(', ')} WHERE id = ? AND doc_type = 'plan'`;
|
|
153
|
+
db.prepare(query).run(...params);
|
|
154
|
+
return this.getById(id);
|
|
155
|
+
},
|
|
156
|
+
/**
|
|
157
|
+
* Delete a plan
|
|
158
|
+
*/
|
|
159
|
+
delete(id) {
|
|
160
|
+
const db = getDb();
|
|
161
|
+
const result = db
|
|
162
|
+
.prepare(`DELETE FROM project_documents WHERE id = ? AND doc_type = 'plan'`)
|
|
163
|
+
.run(id);
|
|
164
|
+
return result.changes > 0;
|
|
165
|
+
},
|
|
166
|
+
/**
|
|
167
|
+
* List plans for a project
|
|
168
|
+
*/
|
|
169
|
+
list(projectId, options = {}) {
|
|
170
|
+
const db = getDb();
|
|
171
|
+
const conditions = ["pd.project_id = ?", "pd.doc_type = 'plan'"];
|
|
172
|
+
const params = [projectId];
|
|
173
|
+
// Filter by status
|
|
174
|
+
if (options.status) {
|
|
175
|
+
if (Array.isArray(options.status)) {
|
|
176
|
+
const placeholders = options.status.map(() => '?').join(', ');
|
|
177
|
+
conditions.push(`pd.status IN (${placeholders})`);
|
|
178
|
+
params.push(...options.status);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
conditions.push('pd.status = ?');
|
|
182
|
+
params.push(options.status);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Filter by work item
|
|
186
|
+
if (options.work_item_id !== undefined) {
|
|
187
|
+
conditions.push('pd.work_item_id = ?');
|
|
188
|
+
params.push(options.work_item_id);
|
|
189
|
+
}
|
|
190
|
+
// Order by
|
|
191
|
+
let orderBy = 'pd.updated_at DESC';
|
|
192
|
+
switch (options.order_by) {
|
|
193
|
+
case 'updated_asc':
|
|
194
|
+
orderBy = 'pd.updated_at ASC';
|
|
195
|
+
break;
|
|
196
|
+
case 'created_desc':
|
|
197
|
+
orderBy = 'pd.created_at DESC';
|
|
198
|
+
break;
|
|
199
|
+
case 'name_asc':
|
|
200
|
+
orderBy = 'pd.title ASC';
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
// Limit
|
|
204
|
+
const limit = options.limit ?? 20;
|
|
205
|
+
const query = `
|
|
206
|
+
SELECT pd.*, wi.title as work_item_title, wi.item_id as work_item_item_id
|
|
207
|
+
FROM project_documents pd
|
|
208
|
+
LEFT JOIN work_items wi ON pd.work_item_id = wi.id
|
|
209
|
+
WHERE ${conditions.join(' AND ')}
|
|
210
|
+
ORDER BY ${orderBy}
|
|
211
|
+
LIMIT ?
|
|
212
|
+
`;
|
|
213
|
+
params.push(limit);
|
|
214
|
+
const records = db.prepare(query).all(...params);
|
|
215
|
+
return records.map(recordToPlanSummary);
|
|
216
|
+
},
|
|
217
|
+
/**
|
|
218
|
+
* Count plans by status for a project
|
|
219
|
+
*/
|
|
220
|
+
countByStatus(projectId) {
|
|
221
|
+
const db = getDb();
|
|
222
|
+
const results = db
|
|
223
|
+
.prepare(`
|
|
224
|
+
SELECT status, COUNT(*) as count
|
|
225
|
+
FROM project_documents
|
|
226
|
+
WHERE project_id = ? AND doc_type = 'plan'
|
|
227
|
+
GROUP BY status
|
|
228
|
+
`)
|
|
229
|
+
.all(projectId);
|
|
230
|
+
const counts = {
|
|
231
|
+
draft: 0,
|
|
232
|
+
approved: 0,
|
|
233
|
+
in_progress: 0,
|
|
234
|
+
completed: 0,
|
|
235
|
+
abandoned: 0,
|
|
236
|
+
};
|
|
237
|
+
for (const row of results) {
|
|
238
|
+
if (row.status && row.status in counts) {
|
|
239
|
+
counts[row.status] = row.count;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return counts;
|
|
243
|
+
},
|
|
244
|
+
/**
|
|
245
|
+
* Get plans with status 'in_progress' for a project
|
|
246
|
+
*/
|
|
247
|
+
getInProgress(projectId) {
|
|
248
|
+
return this.list(projectId, { status: 'in_progress' });
|
|
249
|
+
},
|
|
250
|
+
/**
|
|
251
|
+
* Check if there are any in_progress plans for a project
|
|
252
|
+
*/
|
|
253
|
+
hasInProgress(projectId) {
|
|
254
|
+
const db = getDb();
|
|
255
|
+
const result = db
|
|
256
|
+
.prepare(`
|
|
257
|
+
SELECT COUNT(*) as count FROM project_documents
|
|
258
|
+
WHERE project_id = ? AND doc_type = 'plan' AND status = 'in_progress'
|
|
259
|
+
`)
|
|
260
|
+
.get(projectId);
|
|
261
|
+
return result.count > 0;
|
|
262
|
+
},
|
|
263
|
+
/**
|
|
264
|
+
* Link a plan to a work item
|
|
265
|
+
*/
|
|
266
|
+
linkWorkItem(planId, workItemId) {
|
|
267
|
+
return this.update(planId, { work_item_id: workItemId });
|
|
268
|
+
},
|
|
269
|
+
/**
|
|
270
|
+
* Unlink a plan from its work item
|
|
271
|
+
*/
|
|
272
|
+
unlinkWorkItem(planId) {
|
|
273
|
+
return this.update(planId, { work_item_id: null });
|
|
274
|
+
},
|
|
275
|
+
};
|
|
@@ -115,6 +115,12 @@ export declare const projectRepository: {
|
|
|
115
115
|
touch(id: number): void;
|
|
116
116
|
/**
|
|
117
117
|
* Delete a project (cascades to work_items, documents, history)
|
|
118
|
+
* Also cleans up session files and team data from disk.
|
|
119
|
+
*
|
|
120
|
+
* IMPORTANT: Project must be archived before deletion.
|
|
121
|
+
* Use archive() first, then delete().
|
|
122
|
+
*
|
|
123
|
+
* @throws Error if project is not archived
|
|
118
124
|
*/
|
|
119
125
|
delete(id: number): boolean;
|
|
120
126
|
/**
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Handles all database operations for projects.
|
|
5
5
|
*/
|
|
6
6
|
import { getDb } from '../index.js';
|
|
7
|
+
import { getSessionsPath } from '../../settings/paths.js';
|
|
8
|
+
import { rmSync, existsSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
7
10
|
/**
|
|
8
11
|
* Convert database record to Project object
|
|
9
12
|
*/
|
|
@@ -287,10 +290,48 @@ export const projectRepository = {
|
|
|
287
290
|
},
|
|
288
291
|
/**
|
|
289
292
|
* Delete a project (cascades to work_items, documents, history)
|
|
293
|
+
* Also cleans up session files and team data from disk.
|
|
294
|
+
*
|
|
295
|
+
* IMPORTANT: Project must be archived before deletion.
|
|
296
|
+
* Use archive() first, then delete().
|
|
297
|
+
*
|
|
298
|
+
* @throws Error if project is not archived
|
|
290
299
|
*/
|
|
291
300
|
delete(id) {
|
|
292
301
|
const db = getDb();
|
|
302
|
+
// Check if project is archived first
|
|
303
|
+
const project = db.prepare('SELECT status FROM projects WHERE id = ?').get(id);
|
|
304
|
+
if (!project) {
|
|
305
|
+
return false; // Project doesn't exist
|
|
306
|
+
}
|
|
307
|
+
if (project.status !== 'archived') {
|
|
308
|
+
throw new Error('Project must be archived before deletion. Use archive() first.');
|
|
309
|
+
}
|
|
293
310
|
const result = db.prepare('DELETE FROM projects WHERE id = ?').run(id);
|
|
311
|
+
if (result.changes > 0) {
|
|
312
|
+
// Clean up session files for this project
|
|
313
|
+
try {
|
|
314
|
+
const sessionsPath = getSessionsPath();
|
|
315
|
+
const projectSessionPath = join(sessionsPath, `project-${String(id)}`);
|
|
316
|
+
if (existsSync(projectSessionPath)) {
|
|
317
|
+
rmSync(projectSessionPath, { recursive: true, force: true });
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// Session cleanup is best-effort - don't fail delete if cleanup fails
|
|
322
|
+
}
|
|
323
|
+
// Clean up anchor files for this project
|
|
324
|
+
try {
|
|
325
|
+
const anchorsPath = join(getSessionsPath(), '..', 'anchors');
|
|
326
|
+
const projectAnchorsPath = join(anchorsPath, `project-${String(id)}.json`);
|
|
327
|
+
if (existsSync(projectAnchorsPath)) {
|
|
328
|
+
rmSync(projectAnchorsPath, { force: true });
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// Anchor cleanup is best-effort
|
|
333
|
+
}
|
|
334
|
+
}
|
|
294
335
|
return result.changes > 0;
|
|
295
336
|
},
|
|
296
337
|
/**
|
|
@@ -11,12 +11,14 @@ export interface CreateWorkItemInput {
|
|
|
11
11
|
description?: string;
|
|
12
12
|
priority?: WorkItemPriority;
|
|
13
13
|
estimated_effort?: 'low' | 'medium' | 'high';
|
|
14
|
+
owner?: string;
|
|
14
15
|
}
|
|
15
16
|
export interface UpdateWorkItemInput {
|
|
16
17
|
type?: WorkItemType;
|
|
17
18
|
status?: WorkItemStatus;
|
|
18
19
|
priority?: WorkItemPriority;
|
|
19
20
|
guided_step?: GuidedStep | null;
|
|
21
|
+
owner?: string | null;
|
|
20
22
|
title?: string;
|
|
21
23
|
description?: string;
|
|
22
24
|
estimated_effort?: 'low' | 'medium' | 'high';
|
|
@@ -28,6 +30,8 @@ export interface QueryWorkItemsInput {
|
|
|
28
30
|
status?: WorkItemStatus | 'all';
|
|
29
31
|
type?: WorkItemType | 'all';
|
|
30
32
|
priority?: WorkItemPriority | 'all';
|
|
33
|
+
/** Filter by owner: agent ID, 'unassigned', or 'all' */
|
|
34
|
+
owner?: string;
|
|
31
35
|
search?: string;
|
|
32
36
|
limit?: number;
|
|
33
37
|
offset?: number;
|
|
@@ -41,6 +45,7 @@ export interface WorkItem {
|
|
|
41
45
|
status: WorkItemStatus;
|
|
42
46
|
priority: WorkItemPriority;
|
|
43
47
|
guidedStep: GuidedStep | null;
|
|
48
|
+
owner: string | null;
|
|
44
49
|
title: string;
|
|
45
50
|
description: string | null;
|
|
46
51
|
estimatedEffort: string | null;
|
|
@@ -88,6 +93,15 @@ export declare const workItemRepository: {
|
|
|
88
93
|
* Delete a work item
|
|
89
94
|
*/
|
|
90
95
|
delete(id: number): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Get work items by owner
|
|
98
|
+
* @param owner - Agent ID or 'unassigned' for items without owner
|
|
99
|
+
*/
|
|
100
|
+
getByOwner(projectId: number, owner: string, status?: WorkItemStatus): WorkItem[];
|
|
101
|
+
/**
|
|
102
|
+
* Get work item counts by owner for a project
|
|
103
|
+
*/
|
|
104
|
+
getOwnerCounts(projectId: number): Record<string, number>;
|
|
91
105
|
/**
|
|
92
106
|
* Get work item counts by status for a project
|
|
93
107
|
*/
|
|
@@ -111,5 +125,6 @@ export declare const workItemRepository: {
|
|
|
111
125
|
title: string;
|
|
112
126
|
description?: string;
|
|
113
127
|
priority?: WorkItemPriority;
|
|
128
|
+
owner?: string;
|
|
114
129
|
}>): WorkItem[];
|
|
115
130
|
};
|
|
@@ -17,6 +17,7 @@ function recordToWorkItem(record) {
|
|
|
17
17
|
status: record.status,
|
|
18
18
|
priority: record.priority,
|
|
19
19
|
guidedStep: record.guided_step,
|
|
20
|
+
owner: record.owner,
|
|
20
21
|
title: record.title,
|
|
21
22
|
description: record.description,
|
|
22
23
|
estimatedEffort: record.estimated_effort,
|
|
@@ -57,11 +58,11 @@ export const workItemRepository = {
|
|
|
57
58
|
.prepare(`
|
|
58
59
|
INSERT INTO work_items (
|
|
59
60
|
project_id, item_number, item_id, type, status, priority,
|
|
60
|
-
title, description, estimated_effort,
|
|
61
|
+
owner, title, description, estimated_effort,
|
|
61
62
|
created_at, updated_at
|
|
62
63
|
) VALUES (
|
|
63
64
|
@project_id, @item_number, @item_id, @type, @status, @priority,
|
|
64
|
-
@title, @description, @estimated_effort,
|
|
65
|
+
@owner, @title, @description, @estimated_effort,
|
|
65
66
|
@created_at, @updated_at
|
|
66
67
|
)
|
|
67
68
|
`)
|
|
@@ -72,6 +73,7 @@ export const workItemRepository = {
|
|
|
72
73
|
type: input.type,
|
|
73
74
|
status: 'backlog',
|
|
74
75
|
priority: input.priority ?? 'medium',
|
|
76
|
+
owner: input.owner ?? null,
|
|
75
77
|
title: input.title,
|
|
76
78
|
description: input.description ?? null,
|
|
77
79
|
estimated_effort: input.estimated_effort ?? null,
|
|
@@ -126,6 +128,15 @@ export const workItemRepository = {
|
|
|
126
128
|
conditions.push('priority = @priority');
|
|
127
129
|
params.priority = input.priority;
|
|
128
130
|
}
|
|
131
|
+
if (input.owner && input.owner !== 'all') {
|
|
132
|
+
if (input.owner === 'unassigned') {
|
|
133
|
+
conditions.push('owner IS NULL');
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
conditions.push('owner = @owner');
|
|
137
|
+
params.owner = input.owner;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
129
140
|
if (input.search) {
|
|
130
141
|
conditions.push('(title LIKE @search OR description LIKE @search)');
|
|
131
142
|
params.search = `%${input.search}%`;
|
|
@@ -226,6 +237,10 @@ export const workItemRepository = {
|
|
|
226
237
|
updates.push('guided_step = @guided_step');
|
|
227
238
|
params.guided_step = input.guided_step;
|
|
228
239
|
}
|
|
240
|
+
if (input.owner !== undefined) {
|
|
241
|
+
updates.push('owner = @owner');
|
|
242
|
+
params.owner = input.owner;
|
|
243
|
+
}
|
|
229
244
|
if (input.title !== undefined) {
|
|
230
245
|
updates.push('title = @title');
|
|
231
246
|
params.title = input.title;
|
|
@@ -285,6 +300,13 @@ export const workItemRepository = {
|
|
|
285
300
|
VALUES (?, ?, 'step_advance', ?, ?, 'agent', ?)
|
|
286
301
|
`).run(workItemId, projectId, oldItem.guidedStep ?? 'none', changes.guided_step ?? 'none', now);
|
|
287
302
|
}
|
|
303
|
+
// Record owner changes
|
|
304
|
+
if (changes.owner !== undefined && changes.owner !== oldItem.owner) {
|
|
305
|
+
db.prepare(`
|
|
306
|
+
INSERT INTO work_item_history (work_item_id, project_id, action, old_value, new_value, changed_by, changed_at)
|
|
307
|
+
VALUES (?, ?, 'owner_change', ?, ?, 'agent', ?)
|
|
308
|
+
`).run(workItemId, projectId, oldItem.owner ?? 'unassigned', changes.owner ?? 'unassigned', now);
|
|
309
|
+
}
|
|
288
310
|
},
|
|
289
311
|
/**
|
|
290
312
|
* Delete a work item
|
|
@@ -294,6 +316,48 @@ export const workItemRepository = {
|
|
|
294
316
|
const result = db.prepare('DELETE FROM work_items WHERE id = ?').run(id);
|
|
295
317
|
return result.changes > 0;
|
|
296
318
|
},
|
|
319
|
+
/**
|
|
320
|
+
* Get work items by owner
|
|
321
|
+
* @param owner - Agent ID or 'unassigned' for items without owner
|
|
322
|
+
*/
|
|
323
|
+
getByOwner(projectId, owner, status) {
|
|
324
|
+
const db = getDb();
|
|
325
|
+
let query = 'SELECT * FROM work_items WHERE project_id = ?';
|
|
326
|
+
const params = [projectId];
|
|
327
|
+
if (owner === 'unassigned') {
|
|
328
|
+
query += ' AND owner IS NULL';
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
query += ' AND owner = ?';
|
|
332
|
+
params.push(owner);
|
|
333
|
+
}
|
|
334
|
+
if (status) {
|
|
335
|
+
query += ' AND status = ?';
|
|
336
|
+
params.push(status);
|
|
337
|
+
}
|
|
338
|
+
query += ' ORDER BY priority, created_at ASC';
|
|
339
|
+
const records = db.prepare(query).all(...params);
|
|
340
|
+
return records.map(recordToWorkItem);
|
|
341
|
+
},
|
|
342
|
+
/**
|
|
343
|
+
* Get work item counts by owner for a project
|
|
344
|
+
*/
|
|
345
|
+
getOwnerCounts(projectId) {
|
|
346
|
+
const db = getDb();
|
|
347
|
+
const results = db
|
|
348
|
+
.prepare(`
|
|
349
|
+
SELECT COALESCE(owner, 'unassigned') as owner, COUNT(*) as count
|
|
350
|
+
FROM work_items
|
|
351
|
+
WHERE project_id = ? AND status != 'completed' AND status != 'skipped'
|
|
352
|
+
GROUP BY owner
|
|
353
|
+
`)
|
|
354
|
+
.all(projectId);
|
|
355
|
+
const counts = {};
|
|
356
|
+
for (const row of results) {
|
|
357
|
+
counts[row.owner] = row.count;
|
|
358
|
+
}
|
|
359
|
+
return counts;
|
|
360
|
+
},
|
|
297
361
|
/**
|
|
298
362
|
* Get work item counts by status for a project
|
|
299
363
|
*/
|
|
@@ -354,10 +418,10 @@ export const workItemRepository = {
|
|
|
354
418
|
const insertStmt = db.prepare(`
|
|
355
419
|
INSERT INTO work_items (
|
|
356
420
|
project_id, item_number, item_id, type, status, priority,
|
|
357
|
-
title, description, created_at, updated_at
|
|
421
|
+
owner, title, description, created_at, updated_at
|
|
358
422
|
) VALUES (
|
|
359
423
|
@project_id, @item_number, @item_id, @type, @status, @priority,
|
|
360
|
-
@title, @description, @created_at, @updated_at
|
|
424
|
+
@owner, @title, @description, @created_at, @updated_at
|
|
361
425
|
)
|
|
362
426
|
`);
|
|
363
427
|
// Use transaction for atomicity
|
|
@@ -371,6 +435,7 @@ export const workItemRepository = {
|
|
|
371
435
|
type: item.type,
|
|
372
436
|
status: 'backlog',
|
|
373
437
|
priority: item.priority ?? 'medium',
|
|
438
|
+
owner: item.owner ?? null,
|
|
374
439
|
title: item.title,
|
|
375
440
|
description: item.description ?? null,
|
|
376
441
|
created_at: now,
|