@compilr-dev/cli 0.5.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 +236 -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 +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.js +266 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +13 -0
- package/dist/commands-v2/handlers/index.js +39 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.js +244 -23
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +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 +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.js +3 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2577 -65
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +4 -4
- package/dist/tools/anchor-tools.js +1 -1
- 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 +5 -3
- package/dist/tools/backlog-wrappers.js +16 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +8 -61
- package/dist/tools/db-tools.js +8 -13
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +5 -5
- package/dist/tools/document-db.js +1 -1
- 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 +5 -73
- package/dist/tools/project-db.js +5 -336
- 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 +43 -11
- package/dist/tools/workitem-db.js +186 -5
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +237 -47
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +512 -1
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/package.json +25 -12
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -18,6 +18,8 @@ const SETTINGS_FILE = path.join(CONFIG_DIR, 'settings.json');
|
|
|
18
18
|
const CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.enc');
|
|
19
19
|
const ALGORITHM = 'aes-256-gcm';
|
|
20
20
|
const SALT = 'compilr-dev-v1';
|
|
21
|
+
// Cache for loaded credentials (avoids repeated disk reads)
|
|
22
|
+
let credentialsCache = null;
|
|
21
23
|
// =============================================================================
|
|
22
24
|
// Master Key Management
|
|
23
25
|
// =============================================================================
|
|
@@ -98,29 +100,38 @@ function decrypt(encryptedData) {
|
|
|
98
100
|
// Credentials Storage
|
|
99
101
|
// =============================================================================
|
|
100
102
|
/**
|
|
101
|
-
* Load all stored credentials
|
|
103
|
+
* Load all stored credentials (cached to avoid repeated disk reads)
|
|
102
104
|
*/
|
|
103
105
|
function loadCredentials() {
|
|
106
|
+
// Return cached credentials if available
|
|
107
|
+
if (credentialsCache !== null) {
|
|
108
|
+
return credentialsCache;
|
|
109
|
+
}
|
|
104
110
|
try {
|
|
105
111
|
if (!fs.existsSync(CREDENTIALS_FILE)) {
|
|
106
|
-
|
|
112
|
+
credentialsCache = {};
|
|
113
|
+
return credentialsCache;
|
|
107
114
|
}
|
|
108
115
|
const encryptedData = fs.readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
109
116
|
const decrypted = decrypt(encryptedData);
|
|
110
|
-
|
|
117
|
+
credentialsCache = JSON.parse(decrypted);
|
|
118
|
+
return credentialsCache;
|
|
111
119
|
}
|
|
112
120
|
catch {
|
|
113
121
|
// If decryption fails (e.g., key changed), return empty
|
|
114
|
-
|
|
122
|
+
credentialsCache = {};
|
|
123
|
+
return credentialsCache;
|
|
115
124
|
}
|
|
116
125
|
}
|
|
117
126
|
/**
|
|
118
|
-
* Save all credentials
|
|
127
|
+
* Save all credentials (invalidates cache)
|
|
119
128
|
*/
|
|
120
129
|
function saveCredentials(credentials) {
|
|
121
130
|
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
122
131
|
const encrypted = encrypt(JSON.stringify(credentials));
|
|
123
132
|
fs.writeFileSync(CREDENTIALS_FILE, encrypted, 'utf-8');
|
|
133
|
+
// Update cache with new credentials
|
|
134
|
+
credentialsCache = credentials;
|
|
124
135
|
}
|
|
125
136
|
// =============================================================================
|
|
126
137
|
// Public API
|
|
@@ -136,6 +147,11 @@ export function getApiKey(provider) {
|
|
|
136
147
|
openai: 'OPENAI_API_KEY',
|
|
137
148
|
google: 'GOOGLE_API_KEY',
|
|
138
149
|
ollama: '', // No key needed
|
|
150
|
+
together: 'TOGETHER_API_KEY',
|
|
151
|
+
groq: 'GROQ_API_KEY',
|
|
152
|
+
fireworks: 'FIREWORKS_API_KEY',
|
|
153
|
+
perplexity: 'PERPLEXITY_API_KEY',
|
|
154
|
+
openrouter: 'OPENROUTER_API_KEY',
|
|
139
155
|
};
|
|
140
156
|
const envVar = envVarMap[provider];
|
|
141
157
|
if (envVar && process.env[envVar]) {
|
|
@@ -164,16 +180,33 @@ export function setApiKey(provider, key) {
|
|
|
164
180
|
*/
|
|
165
181
|
export function deleteApiKey(provider) {
|
|
166
182
|
const credentials = loadCredentials();
|
|
167
|
-
// Remove the key by setting to undefined
|
|
183
|
+
// Remove the key by setting to undefined
|
|
184
|
+
// Ollama doesn't have a key to delete
|
|
168
185
|
if (provider === 'anthropic') {
|
|
169
|
-
|
|
186
|
+
credentials.anthropic = undefined;
|
|
170
187
|
}
|
|
171
188
|
else if (provider === 'openai') {
|
|
172
|
-
|
|
189
|
+
credentials.openai = undefined;
|
|
173
190
|
}
|
|
174
191
|
else if (provider === 'google') {
|
|
175
|
-
|
|
192
|
+
credentials.google = undefined;
|
|
193
|
+
}
|
|
194
|
+
else if (provider === 'together') {
|
|
195
|
+
credentials.together = undefined;
|
|
196
|
+
}
|
|
197
|
+
else if (provider === 'groq') {
|
|
198
|
+
credentials.groq = undefined;
|
|
199
|
+
}
|
|
200
|
+
else if (provider === 'fireworks') {
|
|
201
|
+
credentials.fireworks = undefined;
|
|
202
|
+
}
|
|
203
|
+
else if (provider === 'perplexity') {
|
|
204
|
+
credentials.perplexity = undefined;
|
|
176
205
|
}
|
|
206
|
+
else if (provider === 'openrouter') {
|
|
207
|
+
credentials.openrouter = undefined;
|
|
208
|
+
}
|
|
209
|
+
// Note: ollama doesn't have a key to delete
|
|
177
210
|
saveCredentials(credentials);
|
|
178
211
|
}
|
|
179
212
|
/**
|
|
@@ -205,6 +238,11 @@ export function isKeyFromEnv(provider) {
|
|
|
205
238
|
openai: 'OPENAI_API_KEY',
|
|
206
239
|
google: 'GOOGLE_API_KEY',
|
|
207
240
|
ollama: '',
|
|
241
|
+
together: 'TOGETHER_API_KEY',
|
|
242
|
+
groq: 'GROQ_API_KEY',
|
|
243
|
+
fireworks: 'FIREWORKS_API_KEY',
|
|
244
|
+
perplexity: 'PERPLEXITY_API_KEY',
|
|
245
|
+
openrouter: 'OPENROUTER_API_KEY',
|
|
208
246
|
};
|
|
209
247
|
const envVar = envVarMap[provider];
|
|
210
248
|
return !!(envVar && process.env[envVar]);
|
|
@@ -214,6 +252,7 @@ export function isKeyFromEnv(provider) {
|
|
|
214
252
|
*/
|
|
215
253
|
export function getAllProviderStatuses() {
|
|
216
254
|
return [
|
|
255
|
+
// Primary providers (main tabs)
|
|
217
256
|
{
|
|
218
257
|
provider: 'anthropic',
|
|
219
258
|
name: 'Anthropic (Claude)',
|
|
@@ -221,6 +260,7 @@ export function getAllProviderStatuses() {
|
|
|
221
260
|
masked: getMaskedKey('anthropic'),
|
|
222
261
|
fromEnv: isKeyFromEnv('anthropic'),
|
|
223
262
|
keyUrl: 'https://console.anthropic.com/settings/keys',
|
|
263
|
+
category: 'primary',
|
|
224
264
|
},
|
|
225
265
|
{
|
|
226
266
|
provider: 'openai',
|
|
@@ -229,6 +269,7 @@ export function getAllProviderStatuses() {
|
|
|
229
269
|
masked: getMaskedKey('openai'),
|
|
230
270
|
fromEnv: isKeyFromEnv('openai'),
|
|
231
271
|
keyUrl: 'https://platform.openai.com/api-keys',
|
|
272
|
+
category: 'primary',
|
|
232
273
|
},
|
|
233
274
|
{
|
|
234
275
|
provider: 'google',
|
|
@@ -237,7 +278,9 @@ export function getAllProviderStatuses() {
|
|
|
237
278
|
masked: getMaskedKey('google'),
|
|
238
279
|
fromEnv: isKeyFromEnv('google'),
|
|
239
280
|
keyUrl: 'https://aistudio.google.com/apikey',
|
|
281
|
+
category: 'primary',
|
|
240
282
|
},
|
|
283
|
+
// Local provider
|
|
241
284
|
{
|
|
242
285
|
provider: 'ollama',
|
|
243
286
|
name: 'Ollama (Local)',
|
|
@@ -245,9 +288,67 @@ export function getAllProviderStatuses() {
|
|
|
245
288
|
masked: 'local',
|
|
246
289
|
fromEnv: false,
|
|
247
290
|
keyUrl: 'https://ollama.ai',
|
|
291
|
+
category: 'local',
|
|
292
|
+
},
|
|
293
|
+
// "Others" providers (OpenAI-compatible cloud APIs)
|
|
294
|
+
{
|
|
295
|
+
provider: 'together',
|
|
296
|
+
name: 'Together AI',
|
|
297
|
+
hasKey: hasApiKey('together'),
|
|
298
|
+
masked: getMaskedKey('together'),
|
|
299
|
+
fromEnv: isKeyFromEnv('together'),
|
|
300
|
+
keyUrl: 'https://api.together.xyz/settings/api-keys',
|
|
301
|
+
category: 'others',
|
|
302
|
+
endpoint: 'https://api.together.xyz/v1',
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
provider: 'groq',
|
|
306
|
+
name: 'Groq',
|
|
307
|
+
hasKey: hasApiKey('groq'),
|
|
308
|
+
masked: getMaskedKey('groq'),
|
|
309
|
+
fromEnv: isKeyFromEnv('groq'),
|
|
310
|
+
keyUrl: 'https://console.groq.com/keys',
|
|
311
|
+
category: 'others',
|
|
312
|
+
endpoint: 'https://api.groq.com/openai/v1',
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
provider: 'fireworks',
|
|
316
|
+
name: 'Fireworks AI',
|
|
317
|
+
hasKey: hasApiKey('fireworks'),
|
|
318
|
+
masked: getMaskedKey('fireworks'),
|
|
319
|
+
fromEnv: isKeyFromEnv('fireworks'),
|
|
320
|
+
keyUrl: 'https://fireworks.ai/account/api-keys',
|
|
321
|
+
category: 'others',
|
|
322
|
+
endpoint: 'https://api.fireworks.ai/inference/v1',
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
provider: 'perplexity',
|
|
326
|
+
name: 'Perplexity',
|
|
327
|
+
hasKey: hasApiKey('perplexity'),
|
|
328
|
+
masked: getMaskedKey('perplexity'),
|
|
329
|
+
fromEnv: isKeyFromEnv('perplexity'),
|
|
330
|
+
keyUrl: 'https://www.perplexity.ai/settings/api',
|
|
331
|
+
category: 'others',
|
|
332
|
+
endpoint: 'https://api.perplexity.ai',
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
provider: 'openrouter',
|
|
336
|
+
name: 'OpenRouter',
|
|
337
|
+
hasKey: hasApiKey('openrouter'),
|
|
338
|
+
masked: getMaskedKey('openrouter'),
|
|
339
|
+
fromEnv: isKeyFromEnv('openrouter'),
|
|
340
|
+
keyUrl: 'https://openrouter.ai/keys',
|
|
341
|
+
category: 'others',
|
|
342
|
+
endpoint: 'https://openrouter.ai/api/v1',
|
|
248
343
|
},
|
|
249
344
|
];
|
|
250
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Get provider statuses filtered by category
|
|
348
|
+
*/
|
|
349
|
+
export function getProvidersByCategory(category) {
|
|
350
|
+
return getAllProviderStatuses().filter(p => p.category === category);
|
|
351
|
+
}
|
|
251
352
|
/**
|
|
252
353
|
* Map provider type from settings to credential provider key
|
|
253
354
|
*/
|
|
@@ -261,6 +362,19 @@ export function settingsProviderToCredentialKey(provider) {
|
|
|
261
362
|
return 'openai';
|
|
262
363
|
case 'ollama':
|
|
263
364
|
return 'ollama';
|
|
365
|
+
case 'together':
|
|
366
|
+
return 'together';
|
|
367
|
+
case 'groq':
|
|
368
|
+
return 'groq';
|
|
369
|
+
case 'fireworks':
|
|
370
|
+
return 'fireworks';
|
|
371
|
+
case 'perplexity':
|
|
372
|
+
return 'perplexity';
|
|
373
|
+
case 'openrouter':
|
|
374
|
+
return 'openrouter';
|
|
375
|
+
case 'custom':
|
|
376
|
+
// Custom provider might use any key; default to openai (most common format)
|
|
377
|
+
return 'openai';
|
|
264
378
|
case 'auto':
|
|
265
379
|
default:
|
|
266
380
|
return 'anthropic'; // Default to anthropic for auto
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format Tokens Utility
|
|
3
|
+
*
|
|
4
|
+
* Extracted from ui/base/render-utils.ts so foundation-layer code
|
|
5
|
+
* (token-tracker) can use it without importing from the domain layer.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Format a token count in a human-readable way.
|
|
9
|
+
*
|
|
10
|
+
* @param tokens - Number of tokens
|
|
11
|
+
* @returns Formatted string (e.g., "1.5k" for 1500)
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatTokens(tokens: number): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format Tokens Utility
|
|
3
|
+
*
|
|
4
|
+
* Extracted from ui/base/render-utils.ts so foundation-layer code
|
|
5
|
+
* (token-tracker) can use it without importing from the domain layer.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Format a token count in a human-readable way.
|
|
9
|
+
*
|
|
10
|
+
* @param tokens - Number of tokens
|
|
11
|
+
* @returns Formatted string (e.g., "1.5k" for 1500)
|
|
12
|
+
*/
|
|
13
|
+
export function formatTokens(tokens) {
|
|
14
|
+
if (tokens >= 1000) {
|
|
15
|
+
return `${(tokens / 1000).toFixed(1)}k`;
|
|
16
|
+
}
|
|
17
|
+
return String(tokens);
|
|
18
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Config Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for reading/writing git global config values.
|
|
5
|
+
* Used by onboarding wizard and new project overlay.
|
|
6
|
+
*/
|
|
7
|
+
export interface GitConfig {
|
|
8
|
+
userName: string | null;
|
|
9
|
+
userEmail: string | null;
|
|
10
|
+
hasName: boolean;
|
|
11
|
+
hasEmail: boolean;
|
|
12
|
+
/** True when both user.name and user.email are set */
|
|
13
|
+
isConfigured: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get a single git global config value, returns null if not set.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getGitConfigValue(key: string): string | null;
|
|
19
|
+
/**
|
|
20
|
+
* Set a git global config value. Returns true on success.
|
|
21
|
+
*/
|
|
22
|
+
export declare function setGitConfigValue(key: string, value: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Check git user.name and user.email configuration status.
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkGitConfig(): GitConfig;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Config Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared helpers for reading/writing git global config values.
|
|
5
|
+
* Used by onboarding wizard and new project overlay.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Functions
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Get a single git global config value, returns null if not set.
|
|
13
|
+
*/
|
|
14
|
+
export function getGitConfigValue(key) {
|
|
15
|
+
try {
|
|
16
|
+
const value = execSync(`git config --global ${key}`, {
|
|
17
|
+
encoding: 'utf-8',
|
|
18
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
19
|
+
}).trim();
|
|
20
|
+
return value || null;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Set a git global config value. Returns true on success.
|
|
28
|
+
*/
|
|
29
|
+
export function setGitConfigValue(key, value) {
|
|
30
|
+
try {
|
|
31
|
+
execSync(`git config --global ${key} "${value.replace(/"/g, '\\"')}"`, {
|
|
32
|
+
encoding: 'utf-8',
|
|
33
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check git user.name and user.email configuration status.
|
|
43
|
+
*/
|
|
44
|
+
export function checkGitConfig() {
|
|
45
|
+
const userName = getGitConfigValue('user.name');
|
|
46
|
+
const userEmail = getGitConfigValue('user.email');
|
|
47
|
+
return {
|
|
48
|
+
userName,
|
|
49
|
+
userEmail,
|
|
50
|
+
hasName: Boolean(userName),
|
|
51
|
+
hasEmail: Boolean(userEmail),
|
|
52
|
+
isConfigured: Boolean(userName && userEmail),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for message manipulation across the codebase.
|
|
5
|
+
* This is the single source of truth for message transformation functions.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Minimal interface for content blocks with a type property.
|
|
9
|
+
* This is structurally compatible with any type that has a 'type' field.
|
|
10
|
+
*/
|
|
11
|
+
interface TypedBlock {
|
|
12
|
+
type: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Strip thinking blocks from messages.
|
|
16
|
+
*
|
|
17
|
+
* Thinking blocks contain provider-specific signatures (e.g., Gemini's thought_signature)
|
|
18
|
+
* that don't transfer between sessions or when switching projects/models.
|
|
19
|
+
* This function removes them while preserving all other content blocks.
|
|
20
|
+
*
|
|
21
|
+
* Uses structural typing - works with any message that has a 'content' property
|
|
22
|
+
* that is either a string or an array of objects with 'type' fields.
|
|
23
|
+
*
|
|
24
|
+
* @param messages - Array of messages to process
|
|
25
|
+
* @returns New array with thinking blocks removed from each message
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const cleanedMessages = stripThinkingBlocks(session.messages);
|
|
30
|
+
* await agent.setHistory(cleanedMessages);
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function stripThinkingBlocks<T extends {
|
|
34
|
+
content: string | TypedBlock[];
|
|
35
|
+
}>(messages: T[]): T[];
|
|
36
|
+
/**
|
|
37
|
+
* Message interface for text extraction functions.
|
|
38
|
+
*/
|
|
39
|
+
interface MessageForTextExtraction {
|
|
40
|
+
content: string | (TypedBlock & {
|
|
41
|
+
text?: string;
|
|
42
|
+
})[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extract text content from a message.
|
|
46
|
+
*
|
|
47
|
+
* Handles both string content and array content with text blocks.
|
|
48
|
+
*
|
|
49
|
+
* @param msg - Message to extract text from
|
|
50
|
+
* @returns The text content, or empty string if not found
|
|
51
|
+
*/
|
|
52
|
+
export declare function getMessageText(msg: MessageForTextExtraction): string;
|
|
53
|
+
/**
|
|
54
|
+
* Create a truncated preview of message text.
|
|
55
|
+
*
|
|
56
|
+
* @param msg - Message to preview
|
|
57
|
+
* @param maxLength - Maximum length of preview (default: 60)
|
|
58
|
+
* @returns Truncated text with ellipsis if needed
|
|
59
|
+
*/
|
|
60
|
+
export declare function getMessagePreview(msg: MessageForTextExtraction, maxLength?: number): string;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for message manipulation across the codebase.
|
|
5
|
+
* This is the single source of truth for message transformation functions.
|
|
6
|
+
*/
|
|
7
|
+
import { truncatePlain as truncate } from '@compilr-dev/ui-core/utils';
|
|
8
|
+
/**
|
|
9
|
+
* Strip thinking blocks from messages.
|
|
10
|
+
*
|
|
11
|
+
* Thinking blocks contain provider-specific signatures (e.g., Gemini's thought_signature)
|
|
12
|
+
* that don't transfer between sessions or when switching projects/models.
|
|
13
|
+
* This function removes them while preserving all other content blocks.
|
|
14
|
+
*
|
|
15
|
+
* Uses structural typing - works with any message that has a 'content' property
|
|
16
|
+
* that is either a string or an array of objects with 'type' fields.
|
|
17
|
+
*
|
|
18
|
+
* @param messages - Array of messages to process
|
|
19
|
+
* @returns New array with thinking blocks removed from each message
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const cleanedMessages = stripThinkingBlocks(session.messages);
|
|
24
|
+
* await agent.setHistory(cleanedMessages);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function stripThinkingBlocks(messages) {
|
|
28
|
+
return messages.map((msg) => {
|
|
29
|
+
// String content - no thinking blocks to strip
|
|
30
|
+
if (typeof msg.content === 'string') {
|
|
31
|
+
return msg;
|
|
32
|
+
}
|
|
33
|
+
// Array content - filter out thinking blocks
|
|
34
|
+
return {
|
|
35
|
+
...msg,
|
|
36
|
+
content: msg.content.filter((block) => block.type !== 'thinking'),
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract text content from a message.
|
|
42
|
+
*
|
|
43
|
+
* Handles both string content and array content with text blocks.
|
|
44
|
+
*
|
|
45
|
+
* @param msg - Message to extract text from
|
|
46
|
+
* @returns The text content, or empty string if not found
|
|
47
|
+
*/
|
|
48
|
+
export function getMessageText(msg) {
|
|
49
|
+
if (typeof msg.content === 'string') {
|
|
50
|
+
return msg.content;
|
|
51
|
+
}
|
|
52
|
+
// Find the first text block
|
|
53
|
+
const textBlock = msg.content.find((b) => b.type === 'text');
|
|
54
|
+
if (textBlock && typeof textBlock.text === 'string') {
|
|
55
|
+
return textBlock.text;
|
|
56
|
+
}
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a truncated preview of message text.
|
|
61
|
+
*
|
|
62
|
+
* @param msg - Message to preview
|
|
63
|
+
* @param maxLength - Maximum length of preview (default: 60)
|
|
64
|
+
* @returns Truncated text with ellipsis if needed
|
|
65
|
+
*/
|
|
66
|
+
export function getMessagePreview(msg, maxLength = 60) {
|
|
67
|
+
const text = getMessageText(msg);
|
|
68
|
+
if (text.length <= maxLength) {
|
|
69
|
+
return text;
|
|
70
|
+
}
|
|
71
|
+
return truncate(text, maxLength);
|
|
72
|
+
}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Model Tier Detection
|
|
2
|
+
* Model Tier Detection (Capability Tiers)
|
|
3
3
|
*
|
|
4
4
|
* Categorizes LLM models by capability tier (small/medium/large)
|
|
5
5
|
* and provides upgrade suggestions within the same provider.
|
|
6
6
|
*
|
|
7
7
|
* Used by commands like /design to warn users about model limitations
|
|
8
8
|
* and suggest alternatives.
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This is SEPARATE from the model registry in src/models/model-registry.ts.
|
|
11
|
+
* - Registry: Model metadata, selection UI, speed tiers (fast/balanced/powerful)
|
|
12
|
+
* - This file: Command capability requirements (small/medium/large)
|
|
13
|
+
*
|
|
14
|
+
* When adding new models to the registry, also update this file if the model
|
|
15
|
+
* should be recognized for capability tier detection.
|
|
9
16
|
*/
|
|
10
17
|
export type TierLevel = 'small' | 'medium' | 'large';
|
|
11
18
|
export interface ModelTier {
|
|
@@ -1,48 +1,69 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Model Tier Detection
|
|
2
|
+
* Model Tier Detection (Capability Tiers)
|
|
3
3
|
*
|
|
4
4
|
* Categorizes LLM models by capability tier (small/medium/large)
|
|
5
5
|
* and provides upgrade suggestions within the same provider.
|
|
6
6
|
*
|
|
7
7
|
* Used by commands like /design to warn users about model limitations
|
|
8
8
|
* and suggest alternatives.
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This is SEPARATE from the model registry in src/models/model-registry.ts.
|
|
11
|
+
* - Registry: Model metadata, selection UI, speed tiers (fast/balanced/powerful)
|
|
12
|
+
* - This file: Command capability requirements (small/medium/large)
|
|
13
|
+
*
|
|
14
|
+
* When adding new models to the registry, also update this file if the model
|
|
15
|
+
* should be recognized for capability tier detection.
|
|
9
16
|
*/
|
|
10
17
|
// =============================================================================
|
|
11
18
|
// Model Tier Mappings
|
|
12
19
|
// =============================================================================
|
|
13
20
|
const MODEL_TIERS = {
|
|
14
|
-
// Claude (Anthropic)
|
|
21
|
+
// Claude (Anthropic) - 4.5 series (current)
|
|
22
|
+
'claude-opus-4-5': { tier: 'large', provider: 'anthropic' },
|
|
23
|
+
'claude-sonnet-4-5': { tier: 'large', provider: 'anthropic' },
|
|
24
|
+
'claude-haiku-4-5': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
|
|
25
|
+
// Claude legacy (for backward compatibility)
|
|
15
26
|
'claude-3-opus': { tier: 'large', provider: 'anthropic' },
|
|
16
27
|
'claude-opus-4': { tier: 'large', provider: 'anthropic' },
|
|
17
28
|
'claude-sonnet-4': { tier: 'large', provider: 'anthropic' },
|
|
18
29
|
'claude-3-5-sonnet': { tier: 'large', provider: 'anthropic' },
|
|
19
|
-
'claude-3-
|
|
20
|
-
'claude-3-
|
|
21
|
-
|
|
22
|
-
|
|
30
|
+
'claude-3-5-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
|
|
31
|
+
'claude-3-haiku': { tier: 'medium', provider: 'anthropic', suggestedUpgrade: 'claude-sonnet-4-5-20250929' },
|
|
32
|
+
// OpenAI - GPT-5 series (current)
|
|
33
|
+
'gpt-5.2': { tier: 'large', provider: 'openai' },
|
|
34
|
+
'gpt-5-mini': { tier: 'large', provider: 'openai' },
|
|
35
|
+
'gpt-5-nano': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'gpt-5-mini-2025-08-07' },
|
|
36
|
+
// OpenAI legacy (for backward compatibility)
|
|
23
37
|
'gpt-4o': { tier: 'large', provider: 'openai' },
|
|
24
38
|
'gpt-4-turbo': { tier: 'large', provider: 'openai' },
|
|
25
39
|
'gpt-4': { tier: 'large', provider: 'openai' },
|
|
26
|
-
'gpt-4o-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'gpt-
|
|
27
|
-
'gpt-3.5-turbo': { tier: 'small', provider: 'openai', suggestedUpgrade: 'gpt-
|
|
40
|
+
'gpt-4o-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'gpt-5-mini-2025-08-07' },
|
|
41
|
+
'gpt-3.5-turbo': { tier: 'small', provider: 'openai', suggestedUpgrade: 'gpt-5-nano-2025-08-07' },
|
|
28
42
|
'o1': { tier: 'large', provider: 'openai' },
|
|
29
43
|
'o1-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'o1' },
|
|
30
|
-
'
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
'gemini-
|
|
44
|
+
'o3': { tier: 'large', provider: 'openai' },
|
|
45
|
+
'o4-mini': { tier: 'medium', provider: 'openai', suggestedUpgrade: 'o3' },
|
|
46
|
+
// Google (Gemini) - 3.x series (current)
|
|
47
|
+
'gemini-3-pro': { tier: 'large', provider: 'google' },
|
|
48
|
+
'gemini-3-flash': { tier: 'large', provider: 'google' },
|
|
49
|
+
'gemini-2.5-flash-lite': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-3-flash-preview' },
|
|
50
|
+
// Gemini legacy (for backward compatibility)
|
|
34
51
|
'gemini-2.5-pro': { tier: 'large', provider: 'google' },
|
|
35
|
-
'gemini-2.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-
|
|
36
|
-
'gemini-
|
|
37
|
-
'gemini-
|
|
52
|
+
'gemini-2.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-3-flash-preview' },
|
|
53
|
+
'gemini-2.0-flash': { tier: 'large', provider: 'google' },
|
|
54
|
+
'gemini-1.5-pro': { tier: 'large', provider: 'google' },
|
|
55
|
+
'gemini-1.5-flash': { tier: 'medium', provider: 'google', suggestedUpgrade: 'gemini-3-flash-preview' },
|
|
38
56
|
// Ollama / Local models (common ones)
|
|
39
|
-
'llama3.2': { tier: 'small', provider: 'ollama', suggestedUpgrade: 'llama3.
|
|
57
|
+
'llama3.2:8b': { tier: 'small', provider: 'ollama', suggestedUpgrade: 'llama3.2:70b' },
|
|
58
|
+
'llama3.2:70b': { tier: 'large', provider: 'ollama' },
|
|
59
|
+
'llama3.2': { tier: 'small', provider: 'ollama', suggestedUpgrade: 'llama3.2:70b' },
|
|
40
60
|
'llama3.1': { tier: 'medium', provider: 'ollama', suggestedUpgrade: 'llama3.1:70b' },
|
|
41
61
|
'llama3.1:70b': { tier: 'large', provider: 'ollama' },
|
|
42
62
|
'mistral': { tier: 'small', provider: 'ollama' },
|
|
43
63
|
'mixtral': { tier: 'medium', provider: 'ollama' },
|
|
44
64
|
'codellama': { tier: 'medium', provider: 'ollama' },
|
|
45
65
|
'deepseek-coder': { tier: 'medium', provider: 'ollama' },
|
|
66
|
+
'deepseek-coder:33b': { tier: 'large', provider: 'ollama' },
|
|
46
67
|
'qwen2.5-coder': { tier: 'medium', provider: 'ollama' },
|
|
47
68
|
};
|
|
48
69
|
// =============================================================================
|
|
@@ -78,6 +99,7 @@ export function getCommandMinTier(command) {
|
|
|
78
99
|
'/design': 'large',
|
|
79
100
|
'/refine': 'large',
|
|
80
101
|
'/arch': 'large',
|
|
102
|
+
'/scaffold': 'large',
|
|
81
103
|
'/build': 'medium',
|
|
82
104
|
'/prd': 'medium',
|
|
83
105
|
'/sketch': 'small', // Simplified version - works with any model
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open a URL in the default browser.
|
|
3
|
+
* Returns true if browser was opened successfully.
|
|
4
|
+
*/
|
|
5
|
+
import { exec } from 'child_process';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
export function openBrowser(url) {
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
const platform = os.platform();
|
|
10
|
+
let cmd;
|
|
11
|
+
switch (platform) {
|
|
12
|
+
case 'darwin':
|
|
13
|
+
cmd = `open "${url}"`;
|
|
14
|
+
break;
|
|
15
|
+
case 'win32':
|
|
16
|
+
cmd = `start "" "${url}"`;
|
|
17
|
+
break;
|
|
18
|
+
default:
|
|
19
|
+
// Linux and others
|
|
20
|
+
cmd = `xdg-open "${url}"`;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
exec(cmd, (error) => {
|
|
24
|
+
if (error) {
|
|
25
|
+
resolve(false);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
resolve(true);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
@@ -8,6 +8,7 @@ import * as fs from 'fs';
|
|
|
8
8
|
import * as path from 'path';
|
|
9
9
|
import * as os from 'os';
|
|
10
10
|
import { getAllowedDeletePaths, isDeleteProtectionEnabled, isProjectMatchRequired } from '../settings/paths.js';
|
|
11
|
+
import { truncatePlain as truncate } from '@compilr-dev/ui-core/utils';
|
|
11
12
|
// =============================================================================
|
|
12
13
|
// Dangerous Paths
|
|
13
14
|
// =============================================================================
|
|
@@ -227,7 +228,7 @@ export function getSafeDisplayPath(targetPath, maxLength = 50) {
|
|
|
227
228
|
}
|
|
228
229
|
const parts = targetPath.split(path.sep);
|
|
229
230
|
if (parts.length <= 2) {
|
|
230
|
-
return targetPath
|
|
231
|
+
return truncate(targetPath, maxLength);
|
|
231
232
|
}
|
|
232
233
|
// Show first and last parts with ellipsis
|
|
233
234
|
const first = parts.slice(0, 2).join(path.sep);
|
|
@@ -235,5 +236,5 @@ export function getSafeDisplayPath(targetPath, maxLength = 50) {
|
|
|
235
236
|
if (first.length + last.length + 4 <= maxLength) {
|
|
236
237
|
return first + '/.../' + last;
|
|
237
238
|
}
|
|
238
|
-
return targetPath
|
|
239
|
+
return truncate(targetPath, maxLength);
|
|
239
240
|
}
|