@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,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn token and tool call tracking.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — a standalone data container with zero
|
|
5
|
+
* coupling to other subsystems.
|
|
6
|
+
*/
|
|
7
|
+
export interface TurnMetricsSnapshot {
|
|
8
|
+
inputTokens: number;
|
|
9
|
+
outputTokens: number;
|
|
10
|
+
thinkingTokens: number;
|
|
11
|
+
cacheReadTokens: number;
|
|
12
|
+
durationMs: number;
|
|
13
|
+
toolCalls: number;
|
|
14
|
+
apiCalls: number;
|
|
15
|
+
debugPayload?: {
|
|
16
|
+
systemChars: number;
|
|
17
|
+
contentsChars: number;
|
|
18
|
+
toolsChars: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare class TurnMetrics {
|
|
22
|
+
inputTokens: number;
|
|
23
|
+
outputTokens: number;
|
|
24
|
+
thinkingTokens: number;
|
|
25
|
+
cacheReadTokens: number;
|
|
26
|
+
debugPayload?: {
|
|
27
|
+
systemChars: number;
|
|
28
|
+
contentsChars: number;
|
|
29
|
+
toolsChars: number;
|
|
30
|
+
};
|
|
31
|
+
startTime: number;
|
|
32
|
+
toolCalls: number;
|
|
33
|
+
apiCalls: number;
|
|
34
|
+
isThinking: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Add input/output tokens for live display.
|
|
37
|
+
* @param thinkingTokens - Optional thinking tokens (Gemini 2.5+ models)
|
|
38
|
+
* @param cacheReadTokens - Optional cache read tokens (Anthropic/Gemini)
|
|
39
|
+
* @param debugPayload - Optional debug payload sizes (char counts)
|
|
40
|
+
*/
|
|
41
|
+
addTokens(inputTokens: number, outputTokens: number, thinkingTokens?: number, cacheReadTokens?: number, debugPayload?: {
|
|
42
|
+
systemChars: number;
|
|
43
|
+
contentsChars: number;
|
|
44
|
+
toolsChars: number;
|
|
45
|
+
}): void;
|
|
46
|
+
incrementToolCalls(): void;
|
|
47
|
+
incrementApiCalls(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Reset all metrics (call when agent starts a new turn).
|
|
50
|
+
*/
|
|
51
|
+
reset(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get a snapshot of current metrics.
|
|
54
|
+
*/
|
|
55
|
+
getSnapshot(): TurnMetricsSnapshot;
|
|
56
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn token and tool call tracking.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — a standalone data container with zero
|
|
5
|
+
* coupling to other subsystems.
|
|
6
|
+
*/
|
|
7
|
+
export class TurnMetrics {
|
|
8
|
+
inputTokens = 0;
|
|
9
|
+
outputTokens = 0;
|
|
10
|
+
thinkingTokens = 0;
|
|
11
|
+
cacheReadTokens = 0;
|
|
12
|
+
debugPayload;
|
|
13
|
+
startTime = 0;
|
|
14
|
+
toolCalls = 0;
|
|
15
|
+
apiCalls = 0;
|
|
16
|
+
isThinking = false;
|
|
17
|
+
/**
|
|
18
|
+
* Add input/output tokens for live display.
|
|
19
|
+
* @param thinkingTokens - Optional thinking tokens (Gemini 2.5+ models)
|
|
20
|
+
* @param cacheReadTokens - Optional cache read tokens (Anthropic/Gemini)
|
|
21
|
+
* @param debugPayload - Optional debug payload sizes (char counts)
|
|
22
|
+
*/
|
|
23
|
+
addTokens(inputTokens, outputTokens, thinkingTokens, cacheReadTokens, debugPayload) {
|
|
24
|
+
this.inputTokens += inputTokens;
|
|
25
|
+
this.outputTokens += outputTokens;
|
|
26
|
+
if (thinkingTokens) {
|
|
27
|
+
this.thinkingTokens += thinkingTokens;
|
|
28
|
+
}
|
|
29
|
+
if (cacheReadTokens) {
|
|
30
|
+
this.cacheReadTokens += cacheReadTokens;
|
|
31
|
+
}
|
|
32
|
+
if (debugPayload) {
|
|
33
|
+
if (!this.debugPayload) {
|
|
34
|
+
this.debugPayload = { systemChars: 0, contentsChars: 0, toolsChars: 0 };
|
|
35
|
+
}
|
|
36
|
+
this.debugPayload.systemChars += debugPayload.systemChars;
|
|
37
|
+
this.debugPayload.contentsChars += debugPayload.contentsChars;
|
|
38
|
+
this.debugPayload.toolsChars += debugPayload.toolsChars;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
incrementToolCalls() {
|
|
42
|
+
this.toolCalls++;
|
|
43
|
+
}
|
|
44
|
+
incrementApiCalls() {
|
|
45
|
+
this.apiCalls++;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Reset all metrics (call when agent starts a new turn).
|
|
49
|
+
*/
|
|
50
|
+
reset() {
|
|
51
|
+
this.inputTokens = 0;
|
|
52
|
+
this.outputTokens = 0;
|
|
53
|
+
this.thinkingTokens = 0;
|
|
54
|
+
this.cacheReadTokens = 0;
|
|
55
|
+
this.debugPayload = undefined;
|
|
56
|
+
this.startTime = Date.now();
|
|
57
|
+
this.toolCalls = 0;
|
|
58
|
+
this.apiCalls = 0;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get a snapshot of current metrics.
|
|
62
|
+
*/
|
|
63
|
+
getSnapshot() {
|
|
64
|
+
return {
|
|
65
|
+
inputTokens: this.inputTokens,
|
|
66
|
+
outputTokens: this.outputTokens,
|
|
67
|
+
thinkingTokens: this.thinkingTokens,
|
|
68
|
+
cacheReadTokens: this.cacheReadTokens,
|
|
69
|
+
durationMs: this.startTime > 0 ? Date.now() - this.startTime : 0,
|
|
70
|
+
toolCalls: this.toolCalls,
|
|
71
|
+
apiCalls: this.apiCalls,
|
|
72
|
+
debugPayload: this.debugPayload,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
package/dist/ui/types.d.ts
CHANGED
|
@@ -25,12 +25,40 @@ export interface TodoItem {
|
|
|
25
25
|
content: string;
|
|
26
26
|
status: 'pending' | 'in_progress' | 'completed';
|
|
27
27
|
activeForm?: string;
|
|
28
|
+
owner?: string;
|
|
29
|
+
blockedBy?: number[];
|
|
28
30
|
}
|
|
31
|
+
import type { TokenBreakdown as _TokenBreakdown } from '../utils/token-types.js';
|
|
32
|
+
export type { TokenBreakdown } from '../utils/token-types.js';
|
|
33
|
+
export { emptyTokenBreakdown } from '../utils/token-types.js';
|
|
34
|
+
type TokenBreakdown = _TokenBreakdown;
|
|
29
35
|
export interface SpinnerState {
|
|
30
36
|
text: string;
|
|
31
37
|
tool?: string;
|
|
32
38
|
tokens: number;
|
|
39
|
+
inputTokens: number;
|
|
40
|
+
outputTokens: number;
|
|
33
41
|
startTime: number;
|
|
42
|
+
breakdown?: TokenBreakdown;
|
|
43
|
+
}
|
|
44
|
+
export interface TurnMetrics {
|
|
45
|
+
turnNumber: number;
|
|
46
|
+
inputTokens: number;
|
|
47
|
+
outputTokens: number;
|
|
48
|
+
/** Thinking tokens (Gemini 2.5+ models) */
|
|
49
|
+
thinkingTokens: number;
|
|
50
|
+
/** Cache read tokens (Anthropic/Gemini) */
|
|
51
|
+
cacheReadTokens: number;
|
|
52
|
+
subagentInputTokens: number;
|
|
53
|
+
subagentOutputTokens: number;
|
|
54
|
+
toolCalls: number;
|
|
55
|
+
durationMs: number;
|
|
56
|
+
/** Debug payload info - char counts sent to provider (for debugging token discrepancies) */
|
|
57
|
+
debugPayload?: {
|
|
58
|
+
systemChars: number;
|
|
59
|
+
contentsChars: number;
|
|
60
|
+
toolsChars: number;
|
|
61
|
+
};
|
|
34
62
|
}
|
|
35
63
|
export interface CommandOption {
|
|
36
64
|
command: string;
|
package/dist/ui/types.js
CHANGED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VS Code Diff IPC
|
|
3
|
+
*
|
|
4
|
+
* File-based IPC protocol for communicating diff requests/responses between
|
|
5
|
+
* the CLI and the compilr-diff-companion VS Code extension.
|
|
6
|
+
*
|
|
7
|
+
* Directory structure:
|
|
8
|
+
* ~/.compilr-dev/diff-ipc/
|
|
9
|
+
* requests/ - CLI writes request JSON files
|
|
10
|
+
* responses/ - Extension writes response JSON files
|
|
11
|
+
*
|
|
12
|
+
* Temp files for original/modified content in os.tmpdir()/compilr-diff/
|
|
13
|
+
*
|
|
14
|
+
* Domain layer — imports from foundation layer only.
|
|
15
|
+
*/
|
|
16
|
+
export interface VSDiffRequest {
|
|
17
|
+
id: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
agentId: string;
|
|
20
|
+
sessionLabel: string;
|
|
21
|
+
originalPath: string;
|
|
22
|
+
modifiedPath: string;
|
|
23
|
+
targetPath: string;
|
|
24
|
+
toolName: string;
|
|
25
|
+
title: string;
|
|
26
|
+
timestamp: number;
|
|
27
|
+
}
|
|
28
|
+
export interface VSDiffResponse {
|
|
29
|
+
id: string;
|
|
30
|
+
accepted: boolean;
|
|
31
|
+
cancelled?: boolean;
|
|
32
|
+
timestamp: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate a unique diff request ID.
|
|
36
|
+
* Format: diff-{sessionPrefix}-{timestamp}
|
|
37
|
+
*/
|
|
38
|
+
export declare function generateDiffRequestId(sessionPrefix: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Write original and modified content to temp files for VS Code's diff view.
|
|
41
|
+
* Returns { originalPath, modifiedPath }.
|
|
42
|
+
*/
|
|
43
|
+
export declare function writeTempDiffFiles(requestId: string, originalContent: string, modifiedContent: string, targetPath: string): {
|
|
44
|
+
originalPath: string;
|
|
45
|
+
modifiedPath: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Send a diff request to the VS Code extension.
|
|
49
|
+
* Writes the request JSON to diff-ipc/requests/.
|
|
50
|
+
*/
|
|
51
|
+
export declare function sendDiffRequest(request: VSDiffRequest): void;
|
|
52
|
+
/**
|
|
53
|
+
* Result of waitForDiffResponse — includes an abort function to stop the poll.
|
|
54
|
+
* Abort MUST be called when the terminal wins the Promise.race, BEFORE calling
|
|
55
|
+
* cancelDiffRequest, to prevent the CLI poll from eating the cancel response
|
|
56
|
+
* before the VS Code extension can read it.
|
|
57
|
+
*/
|
|
58
|
+
export interface DiffResponseWaiter {
|
|
59
|
+
promise: Promise<VSDiffResponse | null>;
|
|
60
|
+
abort: () => void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Poll for a diff response from the VS Code extension.
|
|
64
|
+
* Checks diff-ipc/responses/ at 200ms intervals for a matching response file.
|
|
65
|
+
* Returns { promise, abort } — call abort() to stop the poll early.
|
|
66
|
+
*/
|
|
67
|
+
export declare function waitForDiffResponse(requestId: string, timeoutMs: number): DiffResponseWaiter;
|
|
68
|
+
/**
|
|
69
|
+
* Cancel a diff request.
|
|
70
|
+
* Writes a cancel response so the extension closes the diff tab.
|
|
71
|
+
* Temp file cleanup is deferred (2s) to give the extension time to
|
|
72
|
+
* read the cancel response and close the tab before the files disappear.
|
|
73
|
+
*/
|
|
74
|
+
export declare function cancelDiffRequest(requestId: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* Clean up all IPC files for a specific session prefix.
|
|
77
|
+
* Called when a terminal session unregisters.
|
|
78
|
+
*/
|
|
79
|
+
export declare function cleanupSessionDiffs(sessionPrefix: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Clean up stale IPC files older than the given threshold.
|
|
82
|
+
* Called on CLI startup to prevent accumulation from crashed sessions.
|
|
83
|
+
*/
|
|
84
|
+
export declare function cleanupStaleDiffs(maxAgeMs: number): void;
|
|
85
|
+
/**
|
|
86
|
+
* Open a VS Code diff tab for a tool permission request.
|
|
87
|
+
*
|
|
88
|
+
* Computes original/modified content from the tool input, writes temp files,
|
|
89
|
+
* and sends the IPC request for the compilr-diff-companion extension.
|
|
90
|
+
*
|
|
91
|
+
* Caller is responsible for checking isVSDiffAvailable() / vsDiffEnabled
|
|
92
|
+
* before calling this function.
|
|
93
|
+
*
|
|
94
|
+
* @returns The diff request ID (for use with waitForDiffResponse/cancelDiffRequest),
|
|
95
|
+
* or null if content could not be computed.
|
|
96
|
+
*/
|
|
97
|
+
export declare function openVSCodeDiffForTool(options: {
|
|
98
|
+
toolName: string;
|
|
99
|
+
input: Record<string, unknown>;
|
|
100
|
+
agentId?: string;
|
|
101
|
+
sessionId?: string;
|
|
102
|
+
}): string | null;
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VS Code Diff IPC
|
|
3
|
+
*
|
|
4
|
+
* File-based IPC protocol for communicating diff requests/responses between
|
|
5
|
+
* the CLI and the compilr-diff-companion VS Code extension.
|
|
6
|
+
*
|
|
7
|
+
* Directory structure:
|
|
8
|
+
* ~/.compilr-dev/diff-ipc/
|
|
9
|
+
* requests/ - CLI writes request JSON files
|
|
10
|
+
* responses/ - Extension writes response JSON files
|
|
11
|
+
*
|
|
12
|
+
* Temp files for original/modified content in os.tmpdir()/compilr-diff/
|
|
13
|
+
*
|
|
14
|
+
* Domain layer — imports from foundation layer only.
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from 'fs';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
import * as os from 'os';
|
|
19
|
+
import { getDataPath } from '../settings/paths.js';
|
|
20
|
+
import { computeModifiedContent } from './diff.js';
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Paths
|
|
23
|
+
// =============================================================================
|
|
24
|
+
function getIpcBasePath() {
|
|
25
|
+
return path.join(getDataPath(), 'diff-ipc');
|
|
26
|
+
}
|
|
27
|
+
function getRequestsDir() {
|
|
28
|
+
return path.join(getIpcBasePath(), 'requests');
|
|
29
|
+
}
|
|
30
|
+
function getResponsesDir() {
|
|
31
|
+
return path.join(getIpcBasePath(), 'responses');
|
|
32
|
+
}
|
|
33
|
+
function getTempDir() {
|
|
34
|
+
return path.join(os.tmpdir(), 'compilr-diff');
|
|
35
|
+
}
|
|
36
|
+
function ensureDir(dir) {
|
|
37
|
+
if (!fs.existsSync(dir)) {
|
|
38
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// =============================================================================
|
|
42
|
+
// Request ID Generation
|
|
43
|
+
// =============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Generate a unique diff request ID.
|
|
46
|
+
* Format: diff-{sessionPrefix}-{timestamp}
|
|
47
|
+
*/
|
|
48
|
+
export function generateDiffRequestId(sessionPrefix) {
|
|
49
|
+
return `diff-${sessionPrefix}-${String(Date.now())}`;
|
|
50
|
+
}
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// Temp File Management
|
|
53
|
+
// =============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Write original and modified content to temp files for VS Code's diff view.
|
|
56
|
+
* Returns { originalPath, modifiedPath }.
|
|
57
|
+
*/
|
|
58
|
+
export function writeTempDiffFiles(requestId, originalContent, modifiedContent, targetPath) {
|
|
59
|
+
const tmpDir = getTempDir();
|
|
60
|
+
ensureDir(tmpDir);
|
|
61
|
+
const ext = path.extname(targetPath) || '.txt';
|
|
62
|
+
const basename = path.basename(targetPath, ext);
|
|
63
|
+
const originalPath = path.join(tmpDir, `${basename}.original-${requestId}${ext}`);
|
|
64
|
+
const modifiedPath = path.join(tmpDir, `${basename}.modified-${requestId}${ext}`);
|
|
65
|
+
fs.writeFileSync(originalPath, originalContent, 'utf-8');
|
|
66
|
+
fs.writeFileSync(modifiedPath, modifiedContent, 'utf-8');
|
|
67
|
+
return { originalPath, modifiedPath };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clean up temp files for a specific request.
|
|
71
|
+
*/
|
|
72
|
+
function cleanupTempFiles(requestId) {
|
|
73
|
+
const tmpDir = getTempDir();
|
|
74
|
+
if (!fs.existsSync(tmpDir))
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
const files = fs.readdirSync(tmpDir);
|
|
78
|
+
for (const file of files) {
|
|
79
|
+
if (file.includes(requestId)) {
|
|
80
|
+
try {
|
|
81
|
+
fs.unlinkSync(path.join(tmpDir, file));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Best effort
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Best effort
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// =============================================================================
|
|
94
|
+
// IPC API
|
|
95
|
+
// =============================================================================
|
|
96
|
+
/**
|
|
97
|
+
* Send a diff request to the VS Code extension.
|
|
98
|
+
* Writes the request JSON to diff-ipc/requests/.
|
|
99
|
+
*/
|
|
100
|
+
export function sendDiffRequest(request) {
|
|
101
|
+
const requestsDir = getRequestsDir();
|
|
102
|
+
ensureDir(requestsDir);
|
|
103
|
+
const filePath = path.join(requestsDir, `${request.id}.json`);
|
|
104
|
+
fs.writeFileSync(filePath, JSON.stringify(request, null, 2), 'utf-8');
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Poll for a diff response from the VS Code extension.
|
|
108
|
+
* Checks diff-ipc/responses/ at 200ms intervals for a matching response file.
|
|
109
|
+
* Returns { promise, abort } — call abort() to stop the poll early.
|
|
110
|
+
*/
|
|
111
|
+
export function waitForDiffResponse(requestId, timeoutMs) {
|
|
112
|
+
const responsesDir = getResponsesDir();
|
|
113
|
+
ensureDir(responsesDir);
|
|
114
|
+
const responsePath = path.join(responsesDir, `${requestId}.json`);
|
|
115
|
+
let aborted = false;
|
|
116
|
+
const promise = new Promise((resolve) => {
|
|
117
|
+
const startTime = Date.now();
|
|
118
|
+
const poll = setInterval(() => {
|
|
119
|
+
// If aborted (terminal won the race), stop immediately
|
|
120
|
+
if (aborted) {
|
|
121
|
+
clearInterval(poll);
|
|
122
|
+
resolve(null);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Check for timeout
|
|
126
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
127
|
+
clearInterval(poll);
|
|
128
|
+
resolve(null);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Check for response file
|
|
132
|
+
try {
|
|
133
|
+
if (fs.existsSync(responsePath)) {
|
|
134
|
+
const content = fs.readFileSync(responsePath, 'utf-8');
|
|
135
|
+
const response = JSON.parse(content);
|
|
136
|
+
// Clean up response file (only if this is a real response from the extension,
|
|
137
|
+
// not a cancel response written by the CLI)
|
|
138
|
+
if (!response.cancelled) {
|
|
139
|
+
try {
|
|
140
|
+
fs.unlinkSync(responsePath);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Best effort
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
clearInterval(poll);
|
|
147
|
+
resolve(response);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// File may be partially written, retry next tick
|
|
152
|
+
}
|
|
153
|
+
}, 200);
|
|
154
|
+
// Don't let the poll interval keep the process alive
|
|
155
|
+
poll.unref();
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
promise,
|
|
159
|
+
abort: () => { aborted = true; },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Cancel a diff request.
|
|
164
|
+
* Writes a cancel response so the extension closes the diff tab.
|
|
165
|
+
* Temp file cleanup is deferred (2s) to give the extension time to
|
|
166
|
+
* read the cancel response and close the tab before the files disappear.
|
|
167
|
+
*/
|
|
168
|
+
export function cancelDiffRequest(requestId) {
|
|
169
|
+
// Write a cancel response so the extension can close the tab
|
|
170
|
+
const responsesDir = getResponsesDir();
|
|
171
|
+
ensureDir(responsesDir);
|
|
172
|
+
const response = {
|
|
173
|
+
id: requestId,
|
|
174
|
+
accepted: false,
|
|
175
|
+
cancelled: true,
|
|
176
|
+
timestamp: Date.now(),
|
|
177
|
+
};
|
|
178
|
+
try {
|
|
179
|
+
fs.writeFileSync(path.join(responsesDir, `${requestId}.json`), JSON.stringify(response, null, 2), 'utf-8');
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Best effort
|
|
183
|
+
}
|
|
184
|
+
// Remove the request file (if it still exists)
|
|
185
|
+
try {
|
|
186
|
+
const requestPath = path.join(getRequestsDir(), `${requestId}.json`);
|
|
187
|
+
if (fs.existsSync(requestPath)) {
|
|
188
|
+
fs.unlinkSync(requestPath);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// Best effort
|
|
193
|
+
}
|
|
194
|
+
// Defer temp file cleanup — the extension needs the files to match/close the tab.
|
|
195
|
+
// The extension polls at 500ms; 2s gives it plenty of time.
|
|
196
|
+
const timer = setTimeout(() => { cleanupTempFiles(requestId); }, 2000);
|
|
197
|
+
timer.unref();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Clean up all IPC files for a specific session prefix.
|
|
201
|
+
* Called when a terminal session unregisters.
|
|
202
|
+
*/
|
|
203
|
+
export function cleanupSessionDiffs(sessionPrefix) {
|
|
204
|
+
const pattern = `diff-${sessionPrefix}-`;
|
|
205
|
+
// Clean up request files
|
|
206
|
+
cleanupDirByPrefix(getRequestsDir(), pattern);
|
|
207
|
+
// Clean up response files
|
|
208
|
+
cleanupDirByPrefix(getResponsesDir(), pattern);
|
|
209
|
+
// Clean up temp files
|
|
210
|
+
const tmpDir = getTempDir();
|
|
211
|
+
if (fs.existsSync(tmpDir)) {
|
|
212
|
+
try {
|
|
213
|
+
const files = fs.readdirSync(tmpDir);
|
|
214
|
+
for (const file of files) {
|
|
215
|
+
if (file.includes(sessionPrefix)) {
|
|
216
|
+
try {
|
|
217
|
+
fs.unlinkSync(path.join(tmpDir, file));
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Best effort
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Best effort
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Clean up stale IPC files older than the given threshold.
|
|
232
|
+
* Called on CLI startup to prevent accumulation from crashed sessions.
|
|
233
|
+
*/
|
|
234
|
+
export function cleanupStaleDiffs(maxAgeMs) {
|
|
235
|
+
const now = Date.now();
|
|
236
|
+
cleanupStaleInDir(getRequestsDir(), now, maxAgeMs);
|
|
237
|
+
cleanupStaleInDir(getResponsesDir(), now, maxAgeMs);
|
|
238
|
+
// Also clean stale temp files
|
|
239
|
+
const tmpDir = getTempDir();
|
|
240
|
+
if (fs.existsSync(tmpDir)) {
|
|
241
|
+
try {
|
|
242
|
+
const files = fs.readdirSync(tmpDir);
|
|
243
|
+
for (const file of files) {
|
|
244
|
+
try {
|
|
245
|
+
const filePath = path.join(tmpDir, file);
|
|
246
|
+
const stat = fs.statSync(filePath);
|
|
247
|
+
if (now - stat.mtimeMs > maxAgeMs) {
|
|
248
|
+
fs.unlinkSync(filePath);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
// Best effort
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
// Best effort
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// =============================================================================
|
|
262
|
+
// Helpers
|
|
263
|
+
// =============================================================================
|
|
264
|
+
function cleanupDirByPrefix(dir, prefix) {
|
|
265
|
+
if (!fs.existsSync(dir))
|
|
266
|
+
return;
|
|
267
|
+
try {
|
|
268
|
+
const files = fs.readdirSync(dir);
|
|
269
|
+
for (const file of files) {
|
|
270
|
+
if (file.startsWith(prefix)) {
|
|
271
|
+
try {
|
|
272
|
+
fs.unlinkSync(path.join(dir, file));
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
// Best effort
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// Best effort
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
function cleanupStaleInDir(dir, now, maxAgeMs) {
|
|
285
|
+
if (!fs.existsSync(dir))
|
|
286
|
+
return;
|
|
287
|
+
try {
|
|
288
|
+
const files = fs.readdirSync(dir);
|
|
289
|
+
for (const file of files) {
|
|
290
|
+
try {
|
|
291
|
+
const filePath = path.join(dir, file);
|
|
292
|
+
const stat = fs.statSync(filePath);
|
|
293
|
+
if (now - stat.mtimeMs > maxAgeMs) {
|
|
294
|
+
fs.unlinkSync(filePath);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// Best effort
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
// Best effort
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function extractStringParam(input, ...keys) {
|
|
307
|
+
for (const key of keys) {
|
|
308
|
+
if (typeof input[key] === 'string')
|
|
309
|
+
return input[key];
|
|
310
|
+
}
|
|
311
|
+
return '';
|
|
312
|
+
}
|
|
313
|
+
// =============================================================================
|
|
314
|
+
// High-Level API
|
|
315
|
+
// =============================================================================
|
|
316
|
+
/**
|
|
317
|
+
* Open a VS Code diff tab for a tool permission request.
|
|
318
|
+
*
|
|
319
|
+
* Computes original/modified content from the tool input, writes temp files,
|
|
320
|
+
* and sends the IPC request for the compilr-diff-companion extension.
|
|
321
|
+
*
|
|
322
|
+
* Caller is responsible for checking isVSDiffAvailable() / vsDiffEnabled
|
|
323
|
+
* before calling this function.
|
|
324
|
+
*
|
|
325
|
+
* @returns The diff request ID (for use with waitForDiffResponse/cancelDiffRequest),
|
|
326
|
+
* or null if content could not be computed.
|
|
327
|
+
*/
|
|
328
|
+
export function openVSCodeDiffForTool(options) {
|
|
329
|
+
const { toolName, input, agentId = 'default', sessionId = 'pending' } = options;
|
|
330
|
+
let originalContent = '';
|
|
331
|
+
let modifiedContent = '';
|
|
332
|
+
let targetPath = '';
|
|
333
|
+
if (toolName === 'edit') {
|
|
334
|
+
const filePath = extractStringParam(input, 'filePath', 'file_path', 'path');
|
|
335
|
+
const oldText = extractStringParam(input, 'oldString', 'old_string', 'old_text');
|
|
336
|
+
const newText = extractStringParam(input, 'newString', 'new_string', 'new_text');
|
|
337
|
+
const replaceAll = Boolean(input.replaceAll ?? input.replace_all);
|
|
338
|
+
if (!filePath || !oldText)
|
|
339
|
+
return null;
|
|
340
|
+
try {
|
|
341
|
+
originalContent = fs.readFileSync(filePath, 'utf-8');
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
originalContent = '';
|
|
345
|
+
}
|
|
346
|
+
modifiedContent = computeModifiedContent(filePath, oldText, newText, replaceAll) ?? originalContent;
|
|
347
|
+
targetPath = filePath;
|
|
348
|
+
}
|
|
349
|
+
else if (toolName === 'write_file' || toolName === 'write') {
|
|
350
|
+
const writePath = extractStringParam(input, 'path', 'file_path', 'filePath');
|
|
351
|
+
const writeContent = extractStringParam(input, 'content');
|
|
352
|
+
if (!writePath || !writeContent)
|
|
353
|
+
return null;
|
|
354
|
+
try {
|
|
355
|
+
originalContent = fs.readFileSync(writePath, 'utf-8');
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
originalContent = '';
|
|
359
|
+
}
|
|
360
|
+
modifiedContent = writeContent;
|
|
361
|
+
targetPath = writePath;
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
if (!targetPath || !modifiedContent)
|
|
367
|
+
return null;
|
|
368
|
+
const requestId = generateDiffRequestId(sessionId);
|
|
369
|
+
const { originalPath, modifiedPath } = writeTempDiffFiles(requestId, originalContent, modifiedContent, targetPath);
|
|
370
|
+
const fileName = targetPath.split('/').pop() ?? 'unknown';
|
|
371
|
+
const vsDiffReq = {
|
|
372
|
+
id: requestId,
|
|
373
|
+
sessionId,
|
|
374
|
+
agentId,
|
|
375
|
+
sessionLabel: '',
|
|
376
|
+
originalPath,
|
|
377
|
+
modifiedPath,
|
|
378
|
+
targetPath,
|
|
379
|
+
toolName,
|
|
380
|
+
title: `Review: ${fileName}`,
|
|
381
|
+
timestamp: Date.now(),
|
|
382
|
+
};
|
|
383
|
+
sendDiffRequest(vsDiffReq);
|
|
384
|
+
return requestId;
|
|
385
|
+
}
|