@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,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guided Mode System Prompt Injector
|
|
3
|
+
*
|
|
4
|
+
* Injects guided workflow context into the agent's system prompt.
|
|
5
|
+
* Two types of injection:
|
|
6
|
+
* - Static: General rules about guided mode behavior (added to base system prompt)
|
|
7
|
+
* - Dynamic: Current project/item/step state (injected per-session)
|
|
8
|
+
*/
|
|
9
|
+
import { STEP_ORDER, getStepCriteria, formatStepDisplay, getStepDescription } from './step-criteria.js';
|
|
10
|
+
/**
|
|
11
|
+
* Static system prompt addition for guided mode.
|
|
12
|
+
* Added to base system prompt when a project uses guided mode.
|
|
13
|
+
*/
|
|
14
|
+
export const GUIDED_MODE_SYSTEM_PROMPT = `
|
|
15
|
+
## Guided Workflow Mode
|
|
16
|
+
|
|
17
|
+
When a project uses **guided mode**, follow these rules:
|
|
18
|
+
|
|
19
|
+
1. **Work Item Focus**: Always work on the current work item unless the user explicitly requests otherwise
|
|
20
|
+
2. **Step Cycle**: Progress through steps in order: ${STEP_ORDER.join(' → ')}
|
|
21
|
+
3. **Step Transitions**: Use \`workitem_advance_step\` tool when the criteria for the current step are met
|
|
22
|
+
4. **Visibility**: Announce step transitions clearly in conversation so the user sees progress
|
|
23
|
+
5. **Flexibility**: The user can always interrupt - acknowledge and respect their requests
|
|
24
|
+
6. **Test Failures**: After 2 failed test attempts, ask the user how to proceed (skip, retry, switch item)
|
|
25
|
+
|
|
26
|
+
### Step Criteria
|
|
27
|
+
|
|
28
|
+
- **PLAN**: Requirements understood, approach designed, target files identified
|
|
29
|
+
- **IMPLEMENT**: Code written, no placeholder TODOs left, lint passes
|
|
30
|
+
- **TEST**: All tests pass (or user overrides after 2 failures)
|
|
31
|
+
- **COMMIT**: Changes committed with proper message, commit hash captured
|
|
32
|
+
- **REVIEW**: User confirms ready for next item
|
|
33
|
+
|
|
34
|
+
### Detour Handling
|
|
35
|
+
|
|
36
|
+
If the user wants to work on something else mid-cycle:
|
|
37
|
+
1. Acknowledge their request
|
|
38
|
+
2. Optionally suggest finishing the current item (gentle challenge)
|
|
39
|
+
3. If they insist, accommodate gracefully
|
|
40
|
+
4. Options: pause current item, switch to different item, or switch to flexible mode
|
|
41
|
+
`.trim();
|
|
42
|
+
/**
|
|
43
|
+
* Generate dynamic context injection for current workflow state.
|
|
44
|
+
* Injected on startup and when project/step changes.
|
|
45
|
+
*/
|
|
46
|
+
export function generateDynamicContext(options) {
|
|
47
|
+
const { project, currentItem, backlogCount, inProgressCount, completedCount } = options;
|
|
48
|
+
// Base project context
|
|
49
|
+
let context = `
|
|
50
|
+
## Current Workflow State
|
|
51
|
+
|
|
52
|
+
**Project:** ${project.displayName} (Mode: ${project.workflowMode})
|
|
53
|
+
**Lifecycle:** ${project.lifecycleState}
|
|
54
|
+
**Progress:** ${String(completedCount)} completed, ${String(inProgressCount)} in progress, ${String(backlogCount)} in backlog
|
|
55
|
+
`.trim();
|
|
56
|
+
// Add current item context if in guided mode with active item
|
|
57
|
+
if (project.workflowMode === 'guided' && currentItem) {
|
|
58
|
+
context += `
|
|
59
|
+
|
|
60
|
+
### Current Work Item
|
|
61
|
+
|
|
62
|
+
**Item:** ${currentItem.itemId} "${currentItem.title}"
|
|
63
|
+
**Type:** ${currentItem.type}
|
|
64
|
+
**Priority:** ${currentItem.priority}
|
|
65
|
+
**Status:** ${currentItem.status}
|
|
66
|
+
**Step:** ${currentItem.guidedStep ? formatStepDisplay(currentItem.guidedStep) : 'Not started'}
|
|
67
|
+
${currentItem.description ? `\n**Description:**\n${currentItem.description}` : ''}
|
|
68
|
+
|
|
69
|
+
### Instructions
|
|
70
|
+
|
|
71
|
+
${getStepInstructions(currentItem.guidedStep)}`;
|
|
72
|
+
}
|
|
73
|
+
else if (project.workflowMode === 'guided') {
|
|
74
|
+
context += `
|
|
75
|
+
|
|
76
|
+
### No Active Work Item
|
|
77
|
+
|
|
78
|
+
Use \`workitem_next\` to get the highest priority item from the backlog, or ask the user which item to work on.
|
|
79
|
+
Once an item is selected, set its status to 'in_progress' and begin the guided cycle.`;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Flexible mode
|
|
83
|
+
context += `
|
|
84
|
+
|
|
85
|
+
### Flexible Mode
|
|
86
|
+
|
|
87
|
+
Work on tasks as requested by the user. Work items are tracked but the step cycle is not enforced.
|
|
88
|
+
You can still use \`workitem_advance_step\` if you want to track progress through steps.`;
|
|
89
|
+
}
|
|
90
|
+
return context;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get step-specific instructions for the agent
|
|
94
|
+
*/
|
|
95
|
+
function getStepInstructions(step) {
|
|
96
|
+
if (!step) {
|
|
97
|
+
return `No step active. Use \`workitem_advance_step\` to start at PLAN step.`;
|
|
98
|
+
}
|
|
99
|
+
const criteria = getStepCriteria(step);
|
|
100
|
+
const stepDesc = getStepDescription(step);
|
|
101
|
+
let instructions = `You are in **${step.toUpperCase()}** step: ${stepDesc}
|
|
102
|
+
|
|
103
|
+
**Exit Criteria:**
|
|
104
|
+
${criteria.exitCriteria.map((c) => `- ${c}`).join('\n')}
|
|
105
|
+
|
|
106
|
+
**When complete:** Use \`workitem_advance_step\` with a reason explaining why criteria are met.`;
|
|
107
|
+
// Add step-specific hints
|
|
108
|
+
switch (step) {
|
|
109
|
+
case 'plan':
|
|
110
|
+
instructions += `
|
|
111
|
+
|
|
112
|
+
**Actions:**
|
|
113
|
+
1. Read and understand the requirements
|
|
114
|
+
2. Design the approach (what files to create/modify)
|
|
115
|
+
3. Consider edge cases and potential issues
|
|
116
|
+
4. Document the plan in conversation`;
|
|
117
|
+
break;
|
|
118
|
+
case 'implement':
|
|
119
|
+
instructions += `
|
|
120
|
+
|
|
121
|
+
**Actions:**
|
|
122
|
+
1. Create/modify files according to the plan
|
|
123
|
+
2. Ensure code is complete (no TODOs unless intentional)
|
|
124
|
+
3. Run lint if available and fix any issues
|
|
125
|
+
4. Review your changes before advancing`;
|
|
126
|
+
break;
|
|
127
|
+
case 'test':
|
|
128
|
+
instructions += `
|
|
129
|
+
|
|
130
|
+
**Actions:**
|
|
131
|
+
1. Run the test suite
|
|
132
|
+
2. If tests fail, analyze and fix the issues
|
|
133
|
+
3. Re-run tests after fixes
|
|
134
|
+
4. After 2 failed attempts, ask user how to proceed
|
|
135
|
+
|
|
136
|
+
**Note:** Track failed attempts. After 2 failures, offer options:
|
|
137
|
+
- Try again (you'll fix the issue)
|
|
138
|
+
- Skip tests and continue to commit
|
|
139
|
+
- Switch to flexible mode for this item
|
|
140
|
+
- Work on a different item`;
|
|
141
|
+
break;
|
|
142
|
+
case 'commit':
|
|
143
|
+
instructions += `
|
|
144
|
+
|
|
145
|
+
**Actions:**
|
|
146
|
+
1. Stage the relevant changes
|
|
147
|
+
2. Create a descriptive commit message
|
|
148
|
+
3. Run git commit
|
|
149
|
+
4. Capture the commit hash
|
|
150
|
+
5. Use \`workitem_update\` to store the commit_hash on the item`;
|
|
151
|
+
break;
|
|
152
|
+
case 'review':
|
|
153
|
+
instructions += `
|
|
154
|
+
|
|
155
|
+
**Actions:**
|
|
156
|
+
1. Summarize what was accomplished
|
|
157
|
+
2. Ask user if they're ready for the next item
|
|
158
|
+
3. Wait for user confirmation before proceeding
|
|
159
|
+
|
|
160
|
+
**On user confirmation:**
|
|
161
|
+
- Use \`workitem_advance_step\` to complete this item
|
|
162
|
+
- Then use \`workitem_next\` to get the next item`;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
return instructions;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Generate a compact status line for footer display
|
|
169
|
+
*/
|
|
170
|
+
export function generateStatusLine(options) {
|
|
171
|
+
const { project, currentItem } = options;
|
|
172
|
+
if (!currentItem) {
|
|
173
|
+
return `${project.displayName} | ${project.workflowMode} mode | No active item`;
|
|
174
|
+
}
|
|
175
|
+
const stepDisplay = currentItem.guidedStep
|
|
176
|
+
? currentItem.guidedStep.toUpperCase()
|
|
177
|
+
: 'READY';
|
|
178
|
+
return `${project.displayName} | ${currentItem.itemId} | ${stepDisplay}`;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if we should inject guided mode context
|
|
182
|
+
*/
|
|
183
|
+
export function shouldInjectGuidedContext(project) {
|
|
184
|
+
return project !== null && project.workflowMode === 'guided';
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Combine static and dynamic prompts for full guided mode injection
|
|
188
|
+
*/
|
|
189
|
+
export function getFullGuidedPrompt(options) {
|
|
190
|
+
return `${GUIDED_MODE_SYSTEM_PROMPT}\n\n${generateDynamicContext(options)}`;
|
|
191
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guided Workflow Module
|
|
3
|
+
*
|
|
4
|
+
* Provides step-by-step workflow tracking for guided mode.
|
|
5
|
+
*/
|
|
6
|
+
export { type StepCriteria, STEP_ORDER, GUIDED_STEP_CRITERIA, getNextStep, getPreviousStep, getStepNumber, isValidTransition, getStepCriteria, getStepDescription, formatStepDisplay, } from './step-criteria.js';
|
|
7
|
+
export { type StepAttempt, GuidedStepTracker, stepTracker, } from './step-tracker.js';
|
|
8
|
+
export { type DynamicContextOptions, GUIDED_MODE_SYSTEM_PROMPT, generateDynamicContext, generateStatusLine, shouldInjectGuidedContext, getFullGuidedPrompt, } from './guided-mode-injector.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guided Workflow Module
|
|
3
|
+
*
|
|
4
|
+
* Provides step-by-step workflow tracking for guided mode.
|
|
5
|
+
*/
|
|
6
|
+
export { STEP_ORDER, GUIDED_STEP_CRITERIA, getNextStep, getPreviousStep, getStepNumber, isValidTransition, getStepCriteria, getStepDescription, formatStepDisplay, } from './step-criteria.js';
|
|
7
|
+
export { GuidedStepTracker, stepTracker, } from './step-tracker.js';
|
|
8
|
+
export { GUIDED_MODE_SYSTEM_PROMPT, generateDynamicContext, generateStatusLine, shouldInjectGuidedContext, getFullGuidedPrompt, } from './guided-mode-injector.js';
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step Criteria - Defines exit criteria for each guided workflow step
|
|
3
|
+
*
|
|
4
|
+
* Each step has:
|
|
5
|
+
* - Human-readable exit criteria (for system prompt)
|
|
6
|
+
* - Success indicators (what agent looks for)
|
|
7
|
+
* - Configuration (max attempts, auto-advance)
|
|
8
|
+
*/
|
|
9
|
+
import type { GuidedStep } from '../db/schema.js';
|
|
10
|
+
/**
|
|
11
|
+
* Step criteria definition
|
|
12
|
+
*/
|
|
13
|
+
export interface StepCriteria {
|
|
14
|
+
/** The guided step */
|
|
15
|
+
step: GuidedStep;
|
|
16
|
+
/** Human-readable exit criteria for system prompt */
|
|
17
|
+
exitCriteria: string[];
|
|
18
|
+
/** What agent looks for to determine success */
|
|
19
|
+
successIndicators: string[];
|
|
20
|
+
/** Maximum attempts for retryable steps (like test) */
|
|
21
|
+
maxAttempts?: number;
|
|
22
|
+
/** Can agent advance automatically when criteria met? */
|
|
23
|
+
autoAdvance: boolean;
|
|
24
|
+
/** Hint for next action after advancing */
|
|
25
|
+
nextActionHint: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Step order - defines valid step progression
|
|
29
|
+
*/
|
|
30
|
+
export declare const STEP_ORDER: readonly GuidedStep[];
|
|
31
|
+
/**
|
|
32
|
+
* Get the next step in the workflow
|
|
33
|
+
*/
|
|
34
|
+
export declare function getNextStep(current: GuidedStep | null): GuidedStep | 'complete';
|
|
35
|
+
/**
|
|
36
|
+
* Get the previous step in the workflow
|
|
37
|
+
*/
|
|
38
|
+
export declare function getPreviousStep(current: GuidedStep): GuidedStep | null;
|
|
39
|
+
/**
|
|
40
|
+
* Get step number (1-indexed for display)
|
|
41
|
+
*/
|
|
42
|
+
export declare function getStepNumber(step: GuidedStep): number;
|
|
43
|
+
/**
|
|
44
|
+
* Check if step transition is valid (can only advance to next step)
|
|
45
|
+
*/
|
|
46
|
+
export declare function isValidTransition(from: GuidedStep | null, to: GuidedStep | 'complete'): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Guided step criteria definitions
|
|
49
|
+
*/
|
|
50
|
+
export declare const GUIDED_STEP_CRITERIA: readonly StepCriteria[];
|
|
51
|
+
/**
|
|
52
|
+
* Get criteria for a specific step
|
|
53
|
+
*/
|
|
54
|
+
export declare function getStepCriteria(step: GuidedStep): StepCriteria;
|
|
55
|
+
/**
|
|
56
|
+
* Get human-readable step description for messages
|
|
57
|
+
*/
|
|
58
|
+
export declare function getStepDescription(step: GuidedStep): string;
|
|
59
|
+
/**
|
|
60
|
+
* Format step for display (e.g., "IMPLEMENT (2 of 5)")
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatStepDisplay(step: GuidedStep): string;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step Criteria - Defines exit criteria for each guided workflow step
|
|
3
|
+
*
|
|
4
|
+
* Each step has:
|
|
5
|
+
* - Human-readable exit criteria (for system prompt)
|
|
6
|
+
* - Success indicators (what agent looks for)
|
|
7
|
+
* - Configuration (max attempts, auto-advance)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Step order - defines valid step progression
|
|
11
|
+
*/
|
|
12
|
+
export const STEP_ORDER = ['plan', 'implement', 'test', 'commit', 'review'];
|
|
13
|
+
/**
|
|
14
|
+
* Get the next step in the workflow
|
|
15
|
+
*/
|
|
16
|
+
export function getNextStep(current) {
|
|
17
|
+
if (current === null)
|
|
18
|
+
return 'plan';
|
|
19
|
+
const idx = STEP_ORDER.indexOf(current);
|
|
20
|
+
if (idx === -1 || idx >= STEP_ORDER.length - 1)
|
|
21
|
+
return 'complete';
|
|
22
|
+
return STEP_ORDER[idx + 1];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the previous step in the workflow
|
|
26
|
+
*/
|
|
27
|
+
export function getPreviousStep(current) {
|
|
28
|
+
const idx = STEP_ORDER.indexOf(current);
|
|
29
|
+
if (idx <= 0)
|
|
30
|
+
return null;
|
|
31
|
+
return STEP_ORDER[idx - 1];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get step number (1-indexed for display)
|
|
35
|
+
*/
|
|
36
|
+
export function getStepNumber(step) {
|
|
37
|
+
return STEP_ORDER.indexOf(step) + 1;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if step transition is valid (can only advance to next step)
|
|
41
|
+
*/
|
|
42
|
+
export function isValidTransition(from, to) {
|
|
43
|
+
const nextStep = getNextStep(from);
|
|
44
|
+
return nextStep === to;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Guided step criteria definitions
|
|
48
|
+
*/
|
|
49
|
+
export const GUIDED_STEP_CRITERIA = [
|
|
50
|
+
{
|
|
51
|
+
step: 'plan',
|
|
52
|
+
exitCriteria: [
|
|
53
|
+
'Requirements understood and documented',
|
|
54
|
+
'Approach designed (files to create/modify identified)',
|
|
55
|
+
'Edge cases considered',
|
|
56
|
+
],
|
|
57
|
+
successIndicators: [
|
|
58
|
+
'Agent has written a plan in conversation or document',
|
|
59
|
+
'Agent has identified target files',
|
|
60
|
+
'No blocking questions remain',
|
|
61
|
+
],
|
|
62
|
+
autoAdvance: true,
|
|
63
|
+
nextActionHint: 'Start implementing the planned changes',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
step: 'implement',
|
|
67
|
+
exitCriteria: [
|
|
68
|
+
'All planned code changes completed',
|
|
69
|
+
'No placeholder TODOs left',
|
|
70
|
+
'Code compiles/lints cleanly',
|
|
71
|
+
],
|
|
72
|
+
successIndicators: [
|
|
73
|
+
'writeFile/edit tools have been called',
|
|
74
|
+
'Lint command passes (if available)',
|
|
75
|
+
'No obvious errors in code',
|
|
76
|
+
],
|
|
77
|
+
autoAdvance: true,
|
|
78
|
+
nextActionHint: 'Run tests to verify the implementation',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
step: 'test',
|
|
82
|
+
exitCriteria: [
|
|
83
|
+
'All tests pass',
|
|
84
|
+
'OR: User overrides after 2 failed attempts',
|
|
85
|
+
],
|
|
86
|
+
successIndicators: [
|
|
87
|
+
'Test command exits with 0',
|
|
88
|
+
'All test assertions pass',
|
|
89
|
+
],
|
|
90
|
+
maxAttempts: 2,
|
|
91
|
+
autoAdvance: true, // Only if tests pass
|
|
92
|
+
nextActionHint: 'Commit the changes with a proper message',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
step: 'commit',
|
|
96
|
+
exitCriteria: [
|
|
97
|
+
'Changes committed with proper message',
|
|
98
|
+
'Commit hash captured',
|
|
99
|
+
],
|
|
100
|
+
successIndicators: [
|
|
101
|
+
'git commit command succeeded',
|
|
102
|
+
'Commit hash in output',
|
|
103
|
+
],
|
|
104
|
+
autoAdvance: true,
|
|
105
|
+
nextActionHint: 'Review and confirm ready for next item',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
step: 'review',
|
|
109
|
+
exitCriteria: [
|
|
110
|
+
'User confirms ready for next item',
|
|
111
|
+
'OR: User wants to do something else',
|
|
112
|
+
],
|
|
113
|
+
successIndicators: [
|
|
114
|
+
'User says "yes", "next", "continue"',
|
|
115
|
+
'User explicitly approves',
|
|
116
|
+
],
|
|
117
|
+
autoAdvance: false, // Always wait for user
|
|
118
|
+
nextActionHint: 'Pick the next work item from backlog',
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
/**
|
|
122
|
+
* Get criteria for a specific step
|
|
123
|
+
*/
|
|
124
|
+
export function getStepCriteria(step) {
|
|
125
|
+
const criteria = GUIDED_STEP_CRITERIA.find((c) => c.step === step);
|
|
126
|
+
if (!criteria) {
|
|
127
|
+
throw new Error(`No criteria found for step: ${step}`);
|
|
128
|
+
}
|
|
129
|
+
return criteria;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get human-readable step description for messages
|
|
133
|
+
*/
|
|
134
|
+
export function getStepDescription(step) {
|
|
135
|
+
const descriptions = {
|
|
136
|
+
plan: 'Planning - understanding requirements and designing approach',
|
|
137
|
+
implement: 'Implementing - writing code and making changes',
|
|
138
|
+
test: 'Testing - running tests and fixing failures',
|
|
139
|
+
commit: 'Committing - creating git commit with changes',
|
|
140
|
+
review: 'Reviewing - confirming completion and next steps',
|
|
141
|
+
};
|
|
142
|
+
return descriptions[step];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Format step for display (e.g., "IMPLEMENT (2 of 5)")
|
|
146
|
+
*/
|
|
147
|
+
export function formatStepDisplay(step) {
|
|
148
|
+
const num = getStepNumber(step);
|
|
149
|
+
return `${step.toUpperCase()} (${String(num)} of ${String(STEP_ORDER.length)})`;
|
|
150
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step Tracker - In-memory tracking of step attempts
|
|
3
|
+
*
|
|
4
|
+
* Tracks attempts for retryable steps (like test) during a session.
|
|
5
|
+
* This is in-memory only - resets on CLI restart.
|
|
6
|
+
* Can be persisted to history table later if needed.
|
|
7
|
+
*/
|
|
8
|
+
import type { GuidedStep } from '../db/schema.js';
|
|
9
|
+
/**
|
|
10
|
+
* Record of a single step attempt
|
|
11
|
+
*/
|
|
12
|
+
export interface StepAttempt {
|
|
13
|
+
/** When the attempt was made */
|
|
14
|
+
timestamp: Date;
|
|
15
|
+
/** Whether the attempt succeeded */
|
|
16
|
+
success: boolean;
|
|
17
|
+
/** Error message if failed */
|
|
18
|
+
error?: string;
|
|
19
|
+
/** Additional context */
|
|
20
|
+
context?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* In-memory tracker for guided workflow step attempts
|
|
24
|
+
*
|
|
25
|
+
* Tracks attempts per item per step, enabling retry logic
|
|
26
|
+
* (e.g., "tests failed after 2 attempts, ask user").
|
|
27
|
+
*/
|
|
28
|
+
export declare class GuidedStepTracker {
|
|
29
|
+
/**
|
|
30
|
+
* Map: itemId -> step -> attempts[]
|
|
31
|
+
*/
|
|
32
|
+
private readonly attempts;
|
|
33
|
+
/**
|
|
34
|
+
* Record an attempt for a step
|
|
35
|
+
*/
|
|
36
|
+
recordAttempt(itemId: string, step: GuidedStep, success: boolean, error?: string, context?: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get all attempts for a step
|
|
39
|
+
*/
|
|
40
|
+
getAttempts(itemId: string, step: GuidedStep): StepAttempt[];
|
|
41
|
+
/**
|
|
42
|
+
* Get total attempt count for a step
|
|
43
|
+
*/
|
|
44
|
+
getAttemptCount(itemId: string, step: GuidedStep): number;
|
|
45
|
+
/**
|
|
46
|
+
* Get failed attempt count for a step
|
|
47
|
+
*/
|
|
48
|
+
getFailedAttemptCount(itemId: string, step: GuidedStep): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get successful attempt count for a step
|
|
51
|
+
*/
|
|
52
|
+
getSuccessfulAttemptCount(itemId: string, step: GuidedStep): number;
|
|
53
|
+
/**
|
|
54
|
+
* Check if we should escalate to user (max attempts exceeded)
|
|
55
|
+
*/
|
|
56
|
+
shouldAskUser(itemId: string, step: GuidedStep, maxAttempts?: number): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Get remaining attempts before user escalation
|
|
59
|
+
*/
|
|
60
|
+
getRemainingAttempts(itemId: string, step: GuidedStep): number | null;
|
|
61
|
+
/**
|
|
62
|
+
* Check if step has had any successful attempt
|
|
63
|
+
*/
|
|
64
|
+
hasSucceeded(itemId: string, step: GuidedStep): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get the last attempt for a step
|
|
67
|
+
*/
|
|
68
|
+
getLastAttempt(itemId: string, step: GuidedStep): StepAttempt | null;
|
|
69
|
+
/**
|
|
70
|
+
* Reset attempts for a specific item (when starting fresh)
|
|
71
|
+
*/
|
|
72
|
+
resetItem(itemId: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Reset attempts for a specific step (when user wants to retry)
|
|
75
|
+
*/
|
|
76
|
+
resetStep(itemId: string, step: GuidedStep): void;
|
|
77
|
+
/**
|
|
78
|
+
* Clear all tracking data (e.g., on session end)
|
|
79
|
+
*/
|
|
80
|
+
clear(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get a summary of attempts for an item (for display)
|
|
83
|
+
*/
|
|
84
|
+
getItemSummary(itemId: string): Record<GuidedStep, {
|
|
85
|
+
total: number;
|
|
86
|
+
failed: number;
|
|
87
|
+
}> | null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Singleton instance for the current session
|
|
91
|
+
*/
|
|
92
|
+
export declare const stepTracker: GuidedStepTracker;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step Tracker - In-memory tracking of step attempts
|
|
3
|
+
*
|
|
4
|
+
* Tracks attempts for retryable steps (like test) during a session.
|
|
5
|
+
* This is in-memory only - resets on CLI restart.
|
|
6
|
+
* Can be persisted to history table later if needed.
|
|
7
|
+
*/
|
|
8
|
+
import { getStepCriteria } from './step-criteria.js';
|
|
9
|
+
/**
|
|
10
|
+
* In-memory tracker for guided workflow step attempts
|
|
11
|
+
*
|
|
12
|
+
* Tracks attempts per item per step, enabling retry logic
|
|
13
|
+
* (e.g., "tests failed after 2 attempts, ask user").
|
|
14
|
+
*/
|
|
15
|
+
export class GuidedStepTracker {
|
|
16
|
+
/**
|
|
17
|
+
* Map: itemId -> step -> attempts[]
|
|
18
|
+
*/
|
|
19
|
+
attempts = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* Record an attempt for a step
|
|
22
|
+
*/
|
|
23
|
+
recordAttempt(itemId, step, success, error, context) {
|
|
24
|
+
if (!this.attempts.has(itemId)) {
|
|
25
|
+
this.attempts.set(itemId, new Map());
|
|
26
|
+
}
|
|
27
|
+
const itemAttempts = this.attempts.get(itemId);
|
|
28
|
+
if (!itemAttempts)
|
|
29
|
+
return; // Should never happen, just added above
|
|
30
|
+
if (!itemAttempts.has(step)) {
|
|
31
|
+
itemAttempts.set(step, []);
|
|
32
|
+
}
|
|
33
|
+
const stepAttempts = itemAttempts.get(step);
|
|
34
|
+
if (!stepAttempts)
|
|
35
|
+
return; // Should never happen, just added above
|
|
36
|
+
stepAttempts.push({
|
|
37
|
+
timestamp: new Date(),
|
|
38
|
+
success,
|
|
39
|
+
error,
|
|
40
|
+
context,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get all attempts for a step
|
|
45
|
+
*/
|
|
46
|
+
getAttempts(itemId, step) {
|
|
47
|
+
return this.attempts.get(itemId)?.get(step) ?? [];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get total attempt count for a step
|
|
51
|
+
*/
|
|
52
|
+
getAttemptCount(itemId, step) {
|
|
53
|
+
return this.getAttempts(itemId, step).length;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get failed attempt count for a step
|
|
57
|
+
*/
|
|
58
|
+
getFailedAttemptCount(itemId, step) {
|
|
59
|
+
return this.getAttempts(itemId, step).filter((a) => !a.success).length;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get successful attempt count for a step
|
|
63
|
+
*/
|
|
64
|
+
getSuccessfulAttemptCount(itemId, step) {
|
|
65
|
+
return this.getAttempts(itemId, step).filter((a) => a.success).length;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if we should escalate to user (max attempts exceeded)
|
|
69
|
+
*/
|
|
70
|
+
shouldAskUser(itemId, step, maxAttempts) {
|
|
71
|
+
const criteria = getStepCriteria(step);
|
|
72
|
+
const max = maxAttempts ?? criteria.maxAttempts;
|
|
73
|
+
if (max === undefined) {
|
|
74
|
+
// No retry limit defined for this step
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return this.getFailedAttemptCount(itemId, step) >= max;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get remaining attempts before user escalation
|
|
81
|
+
*/
|
|
82
|
+
getRemainingAttempts(itemId, step) {
|
|
83
|
+
const criteria = getStepCriteria(step);
|
|
84
|
+
if (criteria.maxAttempts === undefined) {
|
|
85
|
+
return null; // No limit
|
|
86
|
+
}
|
|
87
|
+
return Math.max(0, criteria.maxAttempts - this.getFailedAttemptCount(itemId, step));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if step has had any successful attempt
|
|
91
|
+
*/
|
|
92
|
+
hasSucceeded(itemId, step) {
|
|
93
|
+
return this.getSuccessfulAttemptCount(itemId, step) > 0;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the last attempt for a step
|
|
97
|
+
*/
|
|
98
|
+
getLastAttempt(itemId, step) {
|
|
99
|
+
const attempts = this.getAttempts(itemId, step);
|
|
100
|
+
return attempts.length > 0 ? attempts[attempts.length - 1] : null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Reset attempts for a specific item (when starting fresh)
|
|
104
|
+
*/
|
|
105
|
+
resetItem(itemId) {
|
|
106
|
+
this.attempts.delete(itemId);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Reset attempts for a specific step (when user wants to retry)
|
|
110
|
+
*/
|
|
111
|
+
resetStep(itemId, step) {
|
|
112
|
+
this.attempts.get(itemId)?.delete(step);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Clear all tracking data (e.g., on session end)
|
|
116
|
+
*/
|
|
117
|
+
clear() {
|
|
118
|
+
this.attempts.clear();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get a summary of attempts for an item (for display)
|
|
122
|
+
*/
|
|
123
|
+
getItemSummary(itemId) {
|
|
124
|
+
const itemAttempts = this.attempts.get(itemId);
|
|
125
|
+
if (!itemAttempts) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const summary = {};
|
|
129
|
+
for (const [step, attempts] of itemAttempts) {
|
|
130
|
+
summary[step] = {
|
|
131
|
+
total: attempts.length,
|
|
132
|
+
failed: attempts.filter((a) => !a.success).length,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return summary;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Singleton instance for the current session
|
|
140
|
+
*/
|
|
141
|
+
export const stepTracker = new GuidedStepTracker();
|