@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
package/dist/db/schema.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Based on: db-workflow-architecture.md
|
|
5
5
|
* Database: SQLite via better-sqlite3
|
|
6
6
|
*/
|
|
7
|
-
export declare const SCHEMA_VERSION =
|
|
8
|
-
export declare const SCHEMA_SQL = "\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- Projects table\nCREATE TABLE IF NOT EXISTS projects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT UNIQUE NOT NULL,\n display_name TEXT NOT NULL,\n description TEXT,\n\n -- Project type and status\n type TEXT DEFAULT 'general',\n status TEXT DEFAULT 'active',\n\n -- Paths\n path TEXT NOT NULL,\n docs_path TEXT,\n repo_pattern TEXT DEFAULT 'single',\n\n -- Tech stack (auto-detected)\n language TEXT,\n framework TEXT,\n package_manager TEXT,\n runtime_version TEXT,\n\n -- Commands (JSON)\n commands TEXT,\n\n -- Git info\n git_remote TEXT,\n git_branch TEXT DEFAULT 'main',\n\n -- Workflow\n workflow_mode TEXT DEFAULT 'flexible',\n lifecycle_state TEXT DEFAULT 'setup',\n current_item_id TEXT,\n\n -- Context & Metadata (JSON)\n last_context TEXT,\n metadata TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n last_activity_at DATETIME\n);\n\n-- Work items (backlog items, tasks, bugs)\nCREATE TABLE IF NOT EXISTS work_items (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n -- Identity\n item_number INTEGER NOT NULL,\n item_id TEXT NOT NULL,\n\n -- Classification\n type TEXT NOT NULL,\n status TEXT DEFAULT 'backlog',\n priority TEXT DEFAULT 'medium',\n\n -- Guided mode: current step in work item cycle\n guided_step TEXT,\n\n -- Content\n title TEXT NOT NULL,\n description TEXT,\n\n -- Effort tracking\n estimated_effort TEXT,\n actual_minutes INTEGER,\n\n -- Completion\n completed_at DATETIME,\n completed_by TEXT,\n commit_hash TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n UNIQUE (project_id, item_id)\n);\n\n-- Project documents (PRD, architecture, etc.)\nCREATE TABLE IF NOT EXISTS project_documents (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n doc_type TEXT NOT NULL,\n title TEXT NOT NULL,\n content TEXT NOT NULL,\n\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\n-- Work item history (audit trail)\nCREATE TABLE IF NOT EXISTS work_item_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n work_item_id INTEGER NOT NULL,\n project_id INTEGER NOT NULL,\n\n action TEXT NOT NULL,\n old_value TEXT,\n new_value TEXT,\n notes TEXT,\n\n changed_by TEXT,\n changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_projects_path ON projects(path);\nCREATE INDEX IF NOT EXISTS idx_projects_docs_path ON projects(docs_path);\nCREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);\n\nCREATE INDEX IF NOT EXISTS idx_work_items_project ON work_items(project_id);\nCREATE INDEX IF NOT EXISTS idx_work_items_status ON work_items(status);\nCREATE INDEX IF NOT EXISTS idx_work_items_priority ON work_items(priority);\n\nCREATE INDEX IF NOT EXISTS idx_project_documents_project ON project_documents(project_id);\nCREATE INDEX IF NOT EXISTS idx_project_documents_type ON project_documents(doc_type);\n\nCREATE INDEX IF NOT EXISTS idx_work_item_history_item ON work_item_history(work_item_id);\n";
|
|
7
|
+
export declare const SCHEMA_VERSION = 6;
|
|
8
|
+
export declare const SCHEMA_SQL = "\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- Projects table\nCREATE TABLE IF NOT EXISTS projects (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT UNIQUE NOT NULL,\n display_name TEXT NOT NULL,\n description TEXT,\n\n -- Project type and status\n type TEXT DEFAULT 'general',\n status TEXT DEFAULT 'active',\n\n -- Paths\n path TEXT NOT NULL,\n docs_path TEXT,\n repo_pattern TEXT DEFAULT 'single',\n\n -- Tech stack (auto-detected)\n language TEXT,\n framework TEXT,\n package_manager TEXT,\n runtime_version TEXT,\n\n -- Commands (JSON)\n commands TEXT,\n\n -- Git info\n git_remote TEXT,\n git_branch TEXT DEFAULT 'main',\n\n -- Workflow\n workflow_mode TEXT DEFAULT 'flexible',\n lifecycle_state TEXT DEFAULT 'setup',\n current_item_id TEXT,\n\n -- Context & Metadata (JSON)\n last_context TEXT,\n metadata TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n last_activity_at DATETIME\n);\n\n-- Work items (backlog items, tasks, bugs)\nCREATE TABLE IF NOT EXISTS work_items (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n -- Identity\n item_number INTEGER NOT NULL,\n item_id TEXT NOT NULL,\n\n -- Classification\n type TEXT NOT NULL,\n status TEXT DEFAULT 'backlog',\n priority TEXT DEFAULT 'medium',\n\n -- Guided mode: current step in work item cycle\n guided_step TEXT,\n\n -- Ownership (for multi-agent teams)\n owner TEXT,\n\n -- Content\n title TEXT NOT NULL,\n description TEXT,\n\n -- Effort tracking\n estimated_effort TEXT,\n actual_minutes INTEGER,\n\n -- Completion\n completed_at DATETIME,\n completed_by TEXT,\n commit_hash TEXT,\n\n -- Timestamps\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n UNIQUE (project_id, item_id)\n);\n\n-- Project documents (PRD, architecture, plans, etc.)\nCREATE TABLE IF NOT EXISTS project_documents (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id INTEGER NOT NULL,\n\n doc_type TEXT NOT NULL,\n title TEXT NOT NULL,\n content TEXT NOT NULL,\n\n -- Plan-specific fields (NULL for non-plan documents)\n status TEXT,\n work_item_id INTEGER,\n\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE SET NULL\n);\n\n-- Work item history (audit trail)\nCREATE TABLE IF NOT EXISTS work_item_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n work_item_id INTEGER NOT NULL,\n project_id INTEGER NOT NULL,\n\n action TEXT NOT NULL,\n old_value TEXT,\n new_value TEXT,\n notes TEXT,\n\n changed_by TEXT,\n changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_projects_path ON projects(path);\nCREATE INDEX IF NOT EXISTS idx_projects_docs_path ON projects(docs_path);\nCREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);\n\nCREATE INDEX IF NOT EXISTS idx_work_items_project ON work_items(project_id);\nCREATE INDEX IF NOT EXISTS idx_work_items_status ON work_items(status);\nCREATE INDEX IF NOT EXISTS idx_work_items_priority ON work_items(priority);\nCREATE INDEX IF NOT EXISTS idx_work_items_owner ON work_items(owner);\n\nCREATE INDEX IF NOT EXISTS idx_project_documents_project ON project_documents(project_id);\nCREATE INDEX IF NOT EXISTS idx_project_documents_type ON project_documents(doc_type);\nCREATE INDEX IF NOT EXISTS idx_project_documents_status ON project_documents(status);\nCREATE INDEX IF NOT EXISTS idx_project_documents_work_item ON project_documents(work_item_id);\n\nCREATE INDEX IF NOT EXISTS idx_work_item_history_item ON work_item_history(work_item_id);\n\n-- Terminal sessions (multi-terminal awareness)\nCREATE TABLE IF NOT EXISTS terminal_sessions (\n id TEXT PRIMARY KEY,\n project_id INTEGER,\n pid INTEGER NOT NULL,\n tty_path TEXT,\n label TEXT,\n started_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n last_heartbeat DATETIME DEFAULT CURRENT_TIMESTAMP,\n active_agent TEXT DEFAULT 'default',\n agents_json TEXT DEFAULT '[]',\n status TEXT DEFAULT 'active',\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_terminal_sessions_project ON terminal_sessions(project_id);\nCREATE INDEX IF NOT EXISTS idx_terminal_sessions_status ON terminal_sessions(status);\n\n-- File locks (multi-terminal file lock awareness)\nCREATE TABLE IF NOT EXISTS file_locks (\n path TEXT NOT NULL,\n project_id INTEGER NOT NULL,\n session_id TEXT NOT NULL,\n agent_id TEXT NOT NULL,\n locked_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (path, project_id),\n FOREIGN KEY (session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS idx_file_locks_session ON file_locks(session_id);\n\n-- Session notifications (cross-session notifications)\nCREATE TABLE IF NOT EXISTS session_notifications (\n id TEXT PRIMARY KEY,\n project_id INTEGER NOT NULL,\n from_session_id TEXT NOT NULL,\n to_session_id TEXT,\n type TEXT NOT NULL,\n title TEXT NOT NULL,\n message TEXT,\n payload_json TEXT,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n read_at DATETIME,\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n FOREIGN KEY (from_session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS idx_session_notifications_project ON session_notifications(project_id);\nCREATE INDEX IF NOT EXISTS idx_session_notifications_to_session ON session_notifications(to_session_id);\nCREATE INDEX IF NOT EXISTS idx_session_notifications_unread ON session_notifications(read_at);\n";
|
|
9
9
|
export interface ProjectRecord {
|
|
10
10
|
id: number;
|
|
11
11
|
name: string;
|
|
@@ -41,6 +41,7 @@ export interface WorkItemRecord {
|
|
|
41
41
|
status: string;
|
|
42
42
|
priority: string;
|
|
43
43
|
guided_step: string | null;
|
|
44
|
+
owner: string | null;
|
|
44
45
|
title: string;
|
|
45
46
|
description: string | null;
|
|
46
47
|
estimated_effort: string | null;
|
|
@@ -57,6 +58,8 @@ export interface ProjectDocumentRecord {
|
|
|
57
58
|
doc_type: string;
|
|
58
59
|
title: string;
|
|
59
60
|
content: string;
|
|
61
|
+
status: string | null;
|
|
62
|
+
work_item_id: number | null;
|
|
60
63
|
created_at: string;
|
|
61
64
|
updated_at: string;
|
|
62
65
|
}
|
|
@@ -80,4 +83,38 @@ export type WorkItemType = 'feature' | 'bug' | 'tech-debt' | 'chore';
|
|
|
80
83
|
export type WorkItemStatus = 'backlog' | 'in_progress' | 'completed' | 'skipped';
|
|
81
84
|
export type WorkItemPriority = 'critical' | 'high' | 'medium' | 'low';
|
|
82
85
|
export type GuidedStep = 'plan' | 'implement' | 'test' | 'commit' | 'review';
|
|
83
|
-
export type DocumentType = 'prd' | 'architecture' | 'design' | 'notes';
|
|
86
|
+
export type DocumentType = 'prd' | 'architecture' | 'design' | 'notes' | 'plan';
|
|
87
|
+
export type PlanStatus = 'draft' | 'approved' | 'in_progress' | 'completed' | 'abandoned';
|
|
88
|
+
export type TerminalSessionStatus = 'active' | 'stale' | 'dead';
|
|
89
|
+
export interface TerminalSessionRecord {
|
|
90
|
+
id: string;
|
|
91
|
+
project_id: number | null;
|
|
92
|
+
pid: number;
|
|
93
|
+
tty_path: string | null;
|
|
94
|
+
label: string | null;
|
|
95
|
+
started_at: string;
|
|
96
|
+
last_heartbeat: string;
|
|
97
|
+
active_agent: string;
|
|
98
|
+
agents_json: string;
|
|
99
|
+
status: TerminalSessionStatus;
|
|
100
|
+
}
|
|
101
|
+
export interface FileLockRecord {
|
|
102
|
+
path: string;
|
|
103
|
+
project_id: number;
|
|
104
|
+
session_id: string;
|
|
105
|
+
agent_id: string;
|
|
106
|
+
locked_at: string;
|
|
107
|
+
}
|
|
108
|
+
export type SessionNotificationType = 'pending_request' | 'agent_finished';
|
|
109
|
+
export interface SessionNotificationRecord {
|
|
110
|
+
id: string;
|
|
111
|
+
project_id: number;
|
|
112
|
+
from_session_id: string;
|
|
113
|
+
to_session_id: string | null;
|
|
114
|
+
type: SessionNotificationType;
|
|
115
|
+
title: string;
|
|
116
|
+
message: string | null;
|
|
117
|
+
payload_json: string | null;
|
|
118
|
+
created_at: string;
|
|
119
|
+
read_at: string | null;
|
|
120
|
+
}
|
package/dist/db/schema.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Based on: db-workflow-architecture.md
|
|
5
5
|
* Database: SQLite via better-sqlite3
|
|
6
6
|
*/
|
|
7
|
-
export const SCHEMA_VERSION =
|
|
7
|
+
export const SCHEMA_VERSION = 6;
|
|
8
8
|
export const SCHEMA_SQL = `
|
|
9
9
|
-- Schema version tracking
|
|
10
10
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
@@ -73,6 +73,9 @@ CREATE TABLE IF NOT EXISTS work_items (
|
|
|
73
73
|
-- Guided mode: current step in work item cycle
|
|
74
74
|
guided_step TEXT,
|
|
75
75
|
|
|
76
|
+
-- Ownership (for multi-agent teams)
|
|
77
|
+
owner TEXT,
|
|
78
|
+
|
|
76
79
|
-- Content
|
|
77
80
|
title TEXT NOT NULL,
|
|
78
81
|
description TEXT,
|
|
@@ -94,7 +97,7 @@ CREATE TABLE IF NOT EXISTS work_items (
|
|
|
94
97
|
UNIQUE (project_id, item_id)
|
|
95
98
|
);
|
|
96
99
|
|
|
97
|
-
-- Project documents (PRD, architecture, etc.)
|
|
100
|
+
-- Project documents (PRD, architecture, plans, etc.)
|
|
98
101
|
CREATE TABLE IF NOT EXISTS project_documents (
|
|
99
102
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
100
103
|
project_id INTEGER NOT NULL,
|
|
@@ -103,10 +106,15 @@ CREATE TABLE IF NOT EXISTS project_documents (
|
|
|
103
106
|
title TEXT NOT NULL,
|
|
104
107
|
content TEXT NOT NULL,
|
|
105
108
|
|
|
109
|
+
-- Plan-specific fields (NULL for non-plan documents)
|
|
110
|
+
status TEXT,
|
|
111
|
+
work_item_id INTEGER,
|
|
112
|
+
|
|
106
113
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
107
114
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
108
115
|
|
|
109
|
-
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
|
116
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
|
117
|
+
FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE SET NULL
|
|
110
118
|
);
|
|
111
119
|
|
|
112
120
|
-- Work item history (audit trail)
|
|
@@ -135,9 +143,64 @@ CREATE INDEX IF NOT EXISTS idx_projects_status ON projects(status);
|
|
|
135
143
|
CREATE INDEX IF NOT EXISTS idx_work_items_project ON work_items(project_id);
|
|
136
144
|
CREATE INDEX IF NOT EXISTS idx_work_items_status ON work_items(status);
|
|
137
145
|
CREATE INDEX IF NOT EXISTS idx_work_items_priority ON work_items(priority);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_work_items_owner ON work_items(owner);
|
|
138
147
|
|
|
139
148
|
CREATE INDEX IF NOT EXISTS idx_project_documents_project ON project_documents(project_id);
|
|
140
149
|
CREATE INDEX IF NOT EXISTS idx_project_documents_type ON project_documents(doc_type);
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_project_documents_status ON project_documents(status);
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_project_documents_work_item ON project_documents(work_item_id);
|
|
141
152
|
|
|
142
153
|
CREATE INDEX IF NOT EXISTS idx_work_item_history_item ON work_item_history(work_item_id);
|
|
154
|
+
|
|
155
|
+
-- Terminal sessions (multi-terminal awareness)
|
|
156
|
+
CREATE TABLE IF NOT EXISTS terminal_sessions (
|
|
157
|
+
id TEXT PRIMARY KEY,
|
|
158
|
+
project_id INTEGER,
|
|
159
|
+
pid INTEGER NOT NULL,
|
|
160
|
+
tty_path TEXT,
|
|
161
|
+
label TEXT,
|
|
162
|
+
started_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
163
|
+
last_heartbeat DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
164
|
+
active_agent TEXT DEFAULT 'default',
|
|
165
|
+
agents_json TEXT DEFAULT '[]',
|
|
166
|
+
status TEXT DEFAULT 'active',
|
|
167
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
CREATE INDEX IF NOT EXISTS idx_terminal_sessions_project ON terminal_sessions(project_id);
|
|
171
|
+
CREATE INDEX IF NOT EXISTS idx_terminal_sessions_status ON terminal_sessions(status);
|
|
172
|
+
|
|
173
|
+
-- File locks (multi-terminal file lock awareness)
|
|
174
|
+
CREATE TABLE IF NOT EXISTS file_locks (
|
|
175
|
+
path TEXT NOT NULL,
|
|
176
|
+
project_id INTEGER NOT NULL,
|
|
177
|
+
session_id TEXT NOT NULL,
|
|
178
|
+
agent_id TEXT NOT NULL,
|
|
179
|
+
locked_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
180
|
+
PRIMARY KEY (path, project_id),
|
|
181
|
+
FOREIGN KEY (session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE,
|
|
182
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
CREATE INDEX IF NOT EXISTS idx_file_locks_session ON file_locks(session_id);
|
|
186
|
+
|
|
187
|
+
-- Session notifications (cross-session notifications)
|
|
188
|
+
CREATE TABLE IF NOT EXISTS session_notifications (
|
|
189
|
+
id TEXT PRIMARY KEY,
|
|
190
|
+
project_id INTEGER NOT NULL,
|
|
191
|
+
from_session_id TEXT NOT NULL,
|
|
192
|
+
to_session_id TEXT,
|
|
193
|
+
type TEXT NOT NULL,
|
|
194
|
+
title TEXT NOT NULL,
|
|
195
|
+
message TEXT,
|
|
196
|
+
payload_json TEXT,
|
|
197
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
198
|
+
read_at DATETIME,
|
|
199
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
|
200
|
+
FOREIGN KEY (from_session_id) REFERENCES terminal_sessions(id) ON DELETE CASCADE
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_project ON session_notifications(project_id);
|
|
204
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_to_session ON session_notifications(to_session_id);
|
|
205
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_unread ON session_notifications(read_at);
|
|
143
206
|
`;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Episodes Module (CLI)
|
|
3
|
+
*
|
|
4
|
+
* Work history tracking with file-based persistence and automatic recording.
|
|
5
|
+
*/
|
|
6
|
+
import type { EpisodeStore } from '@compilr-dev/agents';
|
|
7
|
+
export { FileEpisodeStore } from './store.js';
|
|
8
|
+
export type { FileEpisodeStoreOptions } from './store.js';
|
|
9
|
+
export { EpisodeRecorder } from './recorder.js';
|
|
10
|
+
export type { EpisodeRecorderConfig } from './recorder.js';
|
|
11
|
+
export { isSignificantWork, extractAffectedFiles, extractLinesChanged } from './significant-work.js';
|
|
12
|
+
export { queryWorkAtRisk } from './work-at-risk.js';
|
|
13
|
+
export { buildWorkSummaryContent, updateWorkSummaryAnchor } from './work-summary-anchor.js';
|
|
14
|
+
export type { WorkSummaryAnchorConfig } from './work-summary-anchor.js';
|
|
15
|
+
export type { PendingToolSignal, EpisodeFile } from './types.js';
|
|
16
|
+
export type { Effort, WorkEpisode, EffortSignals, EffortWeights, EffortSummary, ProjectWorkSummary, WorkAtRisk, EpisodeStore, } from './types.js';
|
|
17
|
+
/** Set the global episode store (called during startup) */
|
|
18
|
+
export declare function setGlobalEpisodeStore(store: EpisodeStore): void;
|
|
19
|
+
/** Get the global episode store (used by recall_work tool) */
|
|
20
|
+
export declare function getGlobalEpisodeStore(): EpisodeStore | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Episodes Module (CLI)
|
|
3
|
+
*
|
|
4
|
+
* Work history tracking with file-based persistence and automatic recording.
|
|
5
|
+
*/
|
|
6
|
+
// Store
|
|
7
|
+
export { FileEpisodeStore } from './store.js';
|
|
8
|
+
// Recorder
|
|
9
|
+
export { EpisodeRecorder } from './recorder.js';
|
|
10
|
+
// Significant work detection
|
|
11
|
+
export { isSignificantWork, extractAffectedFiles, extractLinesChanged } from './significant-work.js';
|
|
12
|
+
// Work at risk
|
|
13
|
+
export { queryWorkAtRisk } from './work-at-risk.js';
|
|
14
|
+
// Work summary anchor
|
|
15
|
+
export { buildWorkSummaryContent, updateWorkSummaryAnchor } from './work-summary-anchor.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Global Episode Store
|
|
18
|
+
// =============================================================================
|
|
19
|
+
let _globalStore = null;
|
|
20
|
+
/** Set the global episode store (called during startup) */
|
|
21
|
+
export function setGlobalEpisodeStore(store) {
|
|
22
|
+
_globalStore = store;
|
|
23
|
+
}
|
|
24
|
+
/** Get the global episode store (used by recall_work tool) */
|
|
25
|
+
export function getGlobalEpisodeStore() {
|
|
26
|
+
return _globalStore;
|
|
27
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Episode Recorder
|
|
3
|
+
*
|
|
4
|
+
* Collects tool call signals via an AfterToolHook, batches them within
|
|
5
|
+
* a time window, and persists as WorkEpisode records.
|
|
6
|
+
*/
|
|
7
|
+
import type { AfterToolHook, Effort, EpisodeStore } from '@compilr-dev/agents';
|
|
8
|
+
export interface EpisodeRecorderConfig {
|
|
9
|
+
/** Episode store for persistence */
|
|
10
|
+
store: EpisodeStore;
|
|
11
|
+
/** Agent ID (e.g., 'default', 'backend') */
|
|
12
|
+
agentId: string;
|
|
13
|
+
/** Terminal session prefix (first 8 chars) */
|
|
14
|
+
terminalPrefix: string;
|
|
15
|
+
/** Session ID for grouping */
|
|
16
|
+
sessionId: string;
|
|
17
|
+
/** Enable automatic recording via hook (default: true) */
|
|
18
|
+
autoRecord?: boolean;
|
|
19
|
+
/** Minimum effort level to record (default: 'low') */
|
|
20
|
+
minEffortToRecord?: Effort;
|
|
21
|
+
/** Batch window in milliseconds (default: 5000) */
|
|
22
|
+
batchWindowMs?: number;
|
|
23
|
+
/** Called after each batch is flushed as a WorkEpisode */
|
|
24
|
+
onBatchFlushed?: () => void;
|
|
25
|
+
}
|
|
26
|
+
export declare class EpisodeRecorder {
|
|
27
|
+
private readonly store;
|
|
28
|
+
private readonly agentId;
|
|
29
|
+
private readonly terminalPrefix;
|
|
30
|
+
private readonly sessionId;
|
|
31
|
+
private readonly autoRecord;
|
|
32
|
+
private readonly minEffortToRecord;
|
|
33
|
+
private readonly batchWindowMs;
|
|
34
|
+
private readonly onBatchFlushed?;
|
|
35
|
+
private pendingSignals;
|
|
36
|
+
private batchTimer;
|
|
37
|
+
private batchStartTime;
|
|
38
|
+
constructor(config: EpisodeRecorderConfig);
|
|
39
|
+
/**
|
|
40
|
+
* Create an AfterToolHook for observing tool calls.
|
|
41
|
+
* Always returns undefined (observation only — never modifies results).
|
|
42
|
+
*/
|
|
43
|
+
createHook(): AfterToolHook;
|
|
44
|
+
/**
|
|
45
|
+
* Force-flush all pending signals as a WorkEpisode.
|
|
46
|
+
* Called on shutdown to avoid losing data.
|
|
47
|
+
*/
|
|
48
|
+
flush(): void;
|
|
49
|
+
private scheduleBatch;
|
|
50
|
+
private buildAndSaveEpisode;
|
|
51
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Episode Recorder
|
|
3
|
+
*
|
|
4
|
+
* Collects tool call signals via an AfterToolHook, batches them within
|
|
5
|
+
* a time window, and persists as WorkEpisode records.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
import { estimateEffort, EFFORT_ORDER } from '@compilr-dev/agents';
|
|
9
|
+
import { isSignificantWork, extractAffectedFiles, extractLinesChanged } from './significant-work.js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Constants
|
|
12
|
+
// =============================================================================
|
|
13
|
+
const DEFAULT_BATCH_WINDOW_MS = 5000;
|
|
14
|
+
const DEFAULT_MIN_EFFORT = 'low';
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Implementation
|
|
17
|
+
// =============================================================================
|
|
18
|
+
export class EpisodeRecorder {
|
|
19
|
+
store;
|
|
20
|
+
agentId;
|
|
21
|
+
terminalPrefix;
|
|
22
|
+
sessionId;
|
|
23
|
+
autoRecord;
|
|
24
|
+
minEffortToRecord;
|
|
25
|
+
batchWindowMs;
|
|
26
|
+
onBatchFlushed;
|
|
27
|
+
pendingSignals = [];
|
|
28
|
+
batchTimer = null;
|
|
29
|
+
batchStartTime = null;
|
|
30
|
+
constructor(config) {
|
|
31
|
+
this.store = config.store;
|
|
32
|
+
this.agentId = config.agentId;
|
|
33
|
+
this.terminalPrefix = config.terminalPrefix;
|
|
34
|
+
this.sessionId = config.sessionId;
|
|
35
|
+
this.autoRecord = config.autoRecord ?? true;
|
|
36
|
+
this.minEffortToRecord = config.minEffortToRecord ?? DEFAULT_MIN_EFFORT;
|
|
37
|
+
this.batchWindowMs = config.batchWindowMs ?? DEFAULT_BATCH_WINDOW_MS;
|
|
38
|
+
this.onBatchFlushed = config.onBatchFlushed;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create an AfterToolHook for observing tool calls.
|
|
42
|
+
* Always returns undefined (observation only — never modifies results).
|
|
43
|
+
*/
|
|
44
|
+
createHook() {
|
|
45
|
+
return (context) => {
|
|
46
|
+
if (!this.autoRecord)
|
|
47
|
+
return undefined;
|
|
48
|
+
const success = context.result.success;
|
|
49
|
+
if (!isSignificantWork(context.toolName, context.input, success)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const signal = {
|
|
53
|
+
toolName: context.toolName,
|
|
54
|
+
files: extractAffectedFiles(context.toolName, context.input),
|
|
55
|
+
linesChanged: extractLinesChanged(context.result),
|
|
56
|
+
durationMs: context.durationMs,
|
|
57
|
+
success,
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
};
|
|
60
|
+
this.pendingSignals.push(signal);
|
|
61
|
+
this.scheduleBatch();
|
|
62
|
+
return undefined;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Force-flush all pending signals as a WorkEpisode.
|
|
67
|
+
* Called on shutdown to avoid losing data.
|
|
68
|
+
*/
|
|
69
|
+
flush() {
|
|
70
|
+
if (this.batchTimer) {
|
|
71
|
+
clearTimeout(this.batchTimer);
|
|
72
|
+
this.batchTimer = null;
|
|
73
|
+
}
|
|
74
|
+
this.buildAndSaveEpisode();
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Internal
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
scheduleBatch() {
|
|
80
|
+
if (!this.batchStartTime) {
|
|
81
|
+
this.batchStartTime = Date.now();
|
|
82
|
+
}
|
|
83
|
+
// Clear existing timer and set a new one
|
|
84
|
+
if (this.batchTimer) {
|
|
85
|
+
clearTimeout(this.batchTimer);
|
|
86
|
+
}
|
|
87
|
+
this.batchTimer = setTimeout(() => {
|
|
88
|
+
this.batchTimer = null;
|
|
89
|
+
this.buildAndSaveEpisode();
|
|
90
|
+
}, this.batchWindowMs);
|
|
91
|
+
}
|
|
92
|
+
buildAndSaveEpisode() {
|
|
93
|
+
if (this.pendingSignals.length === 0) {
|
|
94
|
+
this.batchStartTime = null;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const signals = [...this.pendingSignals];
|
|
98
|
+
this.pendingSignals = [];
|
|
99
|
+
const startTime = this.batchStartTime;
|
|
100
|
+
this.batchStartTime = null;
|
|
101
|
+
// Collect unique files, tool names, total lines
|
|
102
|
+
const allFiles = new Set();
|
|
103
|
+
const toolNames = new Set();
|
|
104
|
+
let totalLines = 0;
|
|
105
|
+
let totalDurationMs = 0;
|
|
106
|
+
for (const s of signals) {
|
|
107
|
+
for (const f of s.files)
|
|
108
|
+
allFiles.add(f);
|
|
109
|
+
toolNames.add(s.toolName);
|
|
110
|
+
totalLines += s.linesChanged;
|
|
111
|
+
totalDurationMs += s.durationMs;
|
|
112
|
+
}
|
|
113
|
+
const files = [...allFiles];
|
|
114
|
+
// Build effort signals
|
|
115
|
+
const effortSignals = {
|
|
116
|
+
fileCount: files.length,
|
|
117
|
+
linesChanged: totalLines,
|
|
118
|
+
toolCallCount: signals.length,
|
|
119
|
+
durationMs: totalDurationMs,
|
|
120
|
+
iterationCount: signals.length,
|
|
121
|
+
complexityIndicators: {
|
|
122
|
+
newFiles: toolNames.has('write_file'),
|
|
123
|
+
multiLanguage: hasMultipleLanguages(files),
|
|
124
|
+
tests: files.some(isTestFile),
|
|
125
|
+
configChanges: files.some(isConfigFile),
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
const effort = estimateEffort(effortSignals);
|
|
129
|
+
// Skip if below minimum effort threshold
|
|
130
|
+
if (EFFORT_ORDER.indexOf(effort) < EFFORT_ORDER.indexOf(this.minEffortToRecord)) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const episode = {
|
|
134
|
+
id: randomUUID(),
|
|
135
|
+
agentId: this.agentId,
|
|
136
|
+
terminalPrefix: this.terminalPrefix,
|
|
137
|
+
action: inferAction([...toolNames]),
|
|
138
|
+
summary: buildSummary([...toolNames], files, totalLines),
|
|
139
|
+
files,
|
|
140
|
+
linesChanged: totalLines > 0 ? totalLines : undefined,
|
|
141
|
+
timestamp: signals[0].timestamp,
|
|
142
|
+
sessionId: this.sessionId,
|
|
143
|
+
effort,
|
|
144
|
+
durationMs: startTime ? Date.now() - startTime : totalDurationMs,
|
|
145
|
+
toolCalls: signals.length,
|
|
146
|
+
};
|
|
147
|
+
void this.store.save(episode);
|
|
148
|
+
this.onBatchFlushed?.();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// =============================================================================
|
|
152
|
+
// Helpers (module-private)
|
|
153
|
+
// =============================================================================
|
|
154
|
+
function inferAction(toolNames) {
|
|
155
|
+
if (toolNames.includes('git_commit'))
|
|
156
|
+
return 'commit';
|
|
157
|
+
if (toolNames.includes('run_tests'))
|
|
158
|
+
return 'test';
|
|
159
|
+
if (toolNames.includes('run_lint'))
|
|
160
|
+
return 'lint';
|
|
161
|
+
if (toolNames.includes('run_build'))
|
|
162
|
+
return 'build';
|
|
163
|
+
if (toolNames.includes('write_file') && !toolNames.includes('edit'))
|
|
164
|
+
return 'create';
|
|
165
|
+
if (toolNames.includes('edit'))
|
|
166
|
+
return 'edit';
|
|
167
|
+
return 'modify';
|
|
168
|
+
}
|
|
169
|
+
function buildSummary(toolNames, files, totalLines) {
|
|
170
|
+
const action = inferAction(toolNames);
|
|
171
|
+
const fileStr = files.length === 1 ? files[0] : `${String(files.length)} files`;
|
|
172
|
+
const lineStr = totalLines > 0 ? ` (${String(totalLines)} lines)` : '';
|
|
173
|
+
return `${action}: ${fileStr}${lineStr}`;
|
|
174
|
+
}
|
|
175
|
+
function hasMultipleLanguages(files) {
|
|
176
|
+
const extensions = new Set();
|
|
177
|
+
for (const f of files) {
|
|
178
|
+
const ext = f.split('.').pop();
|
|
179
|
+
if (ext)
|
|
180
|
+
extensions.add(ext);
|
|
181
|
+
}
|
|
182
|
+
return extensions.size > 1;
|
|
183
|
+
}
|
|
184
|
+
function isTestFile(file) {
|
|
185
|
+
return /\.(test|spec)\.[a-z]+$/i.test(file) || file.includes('__tests__');
|
|
186
|
+
}
|
|
187
|
+
function isConfigFile(file) {
|
|
188
|
+
const base = file.split('/').pop() ?? '';
|
|
189
|
+
return (base.startsWith('.') ||
|
|
190
|
+
base === 'package.json' ||
|
|
191
|
+
base === 'tsconfig.json' ||
|
|
192
|
+
base.endsWith('.config.ts') ||
|
|
193
|
+
base.endsWith('.config.js') ||
|
|
194
|
+
base.endsWith('.config.mjs'));
|
|
195
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Significant Work Detection
|
|
3
|
+
*
|
|
4
|
+
* Determines which tool calls represent meaningful work (writes, edits, commits)
|
|
5
|
+
* versus read-only exploration (reads, greps, globs).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if a tool call represents significant work worth recording.
|
|
9
|
+
* Returns false for failed tool calls (fail-closed: don't record broken work).
|
|
10
|
+
*/
|
|
11
|
+
export declare function isSignificantWork(toolName: string, _input: Record<string, unknown>, success: boolean): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Extract affected file paths from a tool call's input.
|
|
14
|
+
* Returns an empty array if no files can be extracted.
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractAffectedFiles(toolName: string, input: Record<string, unknown>): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Extract lines changed from a tool result, best-effort.
|
|
19
|
+
* Returns 0 if the information is not available.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractLinesChanged(result: Record<string, unknown>): number;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Significant Work Detection
|
|
3
|
+
*
|
|
4
|
+
* Determines which tool calls represent meaningful work (writes, edits, commits)
|
|
5
|
+
* versus read-only exploration (reads, greps, globs).
|
|
6
|
+
*/
|
|
7
|
+
import { TOOL_NAMES } from '../tool-names.js';
|
|
8
|
+
/** Tool names that represent significant (mutating) work */
|
|
9
|
+
const SIGNIFICANT_TOOLS = new Set([
|
|
10
|
+
TOOL_NAMES.WRITE_FILE,
|
|
11
|
+
TOOL_NAMES.EDIT,
|
|
12
|
+
TOOL_NAMES.GIT_COMMIT,
|
|
13
|
+
TOOL_NAMES.GIT_STASH,
|
|
14
|
+
TOOL_NAMES.RUN_TESTS,
|
|
15
|
+
TOOL_NAMES.RUN_LINT,
|
|
16
|
+
TOOL_NAMES.RUN_BUILD,
|
|
17
|
+
]);
|
|
18
|
+
/**
|
|
19
|
+
* Check if a tool call represents significant work worth recording.
|
|
20
|
+
* Returns false for failed tool calls (fail-closed: don't record broken work).
|
|
21
|
+
*/
|
|
22
|
+
export function isSignificantWork(toolName, _input, success) {
|
|
23
|
+
if (!success)
|
|
24
|
+
return false;
|
|
25
|
+
return SIGNIFICANT_TOOLS.has(toolName);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extract affected file paths from a tool call's input.
|
|
29
|
+
* Returns an empty array if no files can be extracted.
|
|
30
|
+
*/
|
|
31
|
+
export function extractAffectedFiles(toolName, input) {
|
|
32
|
+
if (toolName === TOOL_NAMES.WRITE_FILE && typeof input.path === 'string') {
|
|
33
|
+
return [input.path];
|
|
34
|
+
}
|
|
35
|
+
if (toolName === TOOL_NAMES.EDIT && typeof input.filePath === 'string') {
|
|
36
|
+
return [input.filePath];
|
|
37
|
+
}
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract lines changed from a tool result, best-effort.
|
|
42
|
+
* Returns 0 if the information is not available.
|
|
43
|
+
*/
|
|
44
|
+
export function extractLinesChanged(result) {
|
|
45
|
+
// Some tools report linesWritten directly
|
|
46
|
+
if (typeof result.linesWritten === 'number') {
|
|
47
|
+
return result.linesWritten;
|
|
48
|
+
}
|
|
49
|
+
// Edit results may have linesAdded + linesRemoved
|
|
50
|
+
const added = typeof result.linesAdded === 'number' ? result.linesAdded : 0;
|
|
51
|
+
const removed = typeof result.linesRemoved === 'number' ? result.linesRemoved : 0;
|
|
52
|
+
if (added > 0 || removed > 0) {
|
|
53
|
+
return added + removed;
|
|
54
|
+
}
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-Based Episode Store
|
|
3
|
+
*
|
|
4
|
+
* Persists work episodes to a JSON file per project.
|
|
5
|
+
* Uses an in-memory cache — all reads are synchronous, writes are async (fire-and-forget).
|
|
6
|
+
*/
|
|
7
|
+
import type { WorkEpisode, ProjectWorkSummary, Effort, EpisodeStore } from '@compilr-dev/agents';
|
|
8
|
+
export interface FileEpisodeStoreOptions {
|
|
9
|
+
/** Path to the episodes JSON file */
|
|
10
|
+
filePath: string;
|
|
11
|
+
/** Maximum episodes to keep (oldest pruned on flush). Default: 1000 */
|
|
12
|
+
maxEpisodes?: number;
|
|
13
|
+
/** Maximum age in milliseconds for cleanup. Default: 30 days */
|
|
14
|
+
maxAgeMs?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class FileEpisodeStore implements EpisodeStore {
|
|
17
|
+
private readonly filePath;
|
|
18
|
+
private readonly maxEpisodes;
|
|
19
|
+
private readonly maxAgeMs;
|
|
20
|
+
private _episodes;
|
|
21
|
+
private flushPromise;
|
|
22
|
+
constructor(options: FileEpisodeStoreOptions);
|
|
23
|
+
/** Lazy-load and return the in-memory episode cache */
|
|
24
|
+
private get episodes();
|
|
25
|
+
save(episode: WorkEpisode): void;
|
|
26
|
+
saveBatch(episodes: WorkEpisode[]): void;
|
|
27
|
+
getAll(): WorkEpisode[];
|
|
28
|
+
getByFiles(files: string[]): WorkEpisode[];
|
|
29
|
+
getByAgent(agentId: string): WorkEpisode[];
|
|
30
|
+
getBySession(sessionId: string): WorkEpisode[];
|
|
31
|
+
getByTimeRange(start: string, end: string): WorkEpisode[];
|
|
32
|
+
getRecent(count: number): WorkEpisode[];
|
|
33
|
+
getWorkSummary(): ProjectWorkSummary;
|
|
34
|
+
getTotalEffort(episodes?: WorkEpisode[]): Effort;
|
|
35
|
+
cleanup(maxAgeMs?: number): number;
|
|
36
|
+
private loadFromDisk;
|
|
37
|
+
private flush;
|
|
38
|
+
}
|