@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,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Handlers - Process special input prefixes
|
|
3
|
+
*
|
|
4
|
+
* Handles input that doesn't go to the agent, like:
|
|
5
|
+
* - "#" prefix for memory notes (persistent anchors)
|
|
6
|
+
*/
|
|
7
|
+
export { isMemoryInput, handleMemoryInput, type MemoryHandlerContext } from './memory-handler.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Handler - Process "# note" input prefix
|
|
3
|
+
*
|
|
4
|
+
* Creates persistent anchors from user input prefixed with "#".
|
|
5
|
+
* Auto-detects priority based on keywords in the note.
|
|
6
|
+
*/
|
|
7
|
+
import type { Agent } from '@compilr-dev/sdk';
|
|
8
|
+
import type { Footer } from '../ui/footer.js';
|
|
9
|
+
export interface MemoryHandlerContext {
|
|
10
|
+
agent: Agent;
|
|
11
|
+
footer: Footer;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if input is a memory note (starts with #)
|
|
15
|
+
*/
|
|
16
|
+
export declare function isMemoryInput(input: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Handle memory note input ("# note text")
|
|
19
|
+
*
|
|
20
|
+
* Creates a persistent anchor from the note, stored either globally or
|
|
21
|
+
* in the current project if one is active.
|
|
22
|
+
*
|
|
23
|
+
* @param input - The full input string (including # prefix)
|
|
24
|
+
* @param ctx - Handler context with agent and footer
|
|
25
|
+
*/
|
|
26
|
+
export declare function handleMemoryInput(input: string, ctx: MemoryHandlerContext): void;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Handler - Process "# note" input prefix
|
|
3
|
+
*
|
|
4
|
+
* Creates persistent anchors from user input prefixed with "#".
|
|
5
|
+
* Auto-detects priority based on keywords in the note.
|
|
6
|
+
*/
|
|
7
|
+
import { addAnchor } from '../anchors/index.js';
|
|
8
|
+
import { getActiveProject } from '../tools/project-db.js';
|
|
9
|
+
import * as conversation from '../ui/conversation.js';
|
|
10
|
+
import * as terminal from '../ui/terminal.js';
|
|
11
|
+
import { truncate } from '../ui/base/index.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Handler
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Check if input is a memory note (starts with #)
|
|
17
|
+
*/
|
|
18
|
+
export function isMemoryInput(input) {
|
|
19
|
+
return input.startsWith('#') && input.length > 1 && input.slice(1).trim().length > 0;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Handle memory note input ("# note text")
|
|
23
|
+
*
|
|
24
|
+
* Creates a persistent anchor from the note, stored either globally or
|
|
25
|
+
* in the current project if one is active.
|
|
26
|
+
*
|
|
27
|
+
* @param input - The full input string (including # prefix)
|
|
28
|
+
* @param ctx - Handler context with agent and footer
|
|
29
|
+
*/
|
|
30
|
+
export function handleMemoryInput(input, ctx) {
|
|
31
|
+
const note = input.slice(1).trim();
|
|
32
|
+
// Get active project to determine scope
|
|
33
|
+
const activeProject = getActiveProject();
|
|
34
|
+
const projectId = activeProject?.id;
|
|
35
|
+
// Determine priority based on keywords
|
|
36
|
+
let priority = 'info';
|
|
37
|
+
const lowerNote = note.toLowerCase();
|
|
38
|
+
if (lowerNote.includes('never') || lowerNote.includes('always') || lowerNote.includes('must')) {
|
|
39
|
+
priority = 'safety';
|
|
40
|
+
}
|
|
41
|
+
if (lowerNote.includes('critical') || lowerNote.includes('important')) {
|
|
42
|
+
priority = 'critical';
|
|
43
|
+
}
|
|
44
|
+
// Create the anchor (persisted to file)
|
|
45
|
+
const anchor = addAnchor({
|
|
46
|
+
content: note,
|
|
47
|
+
priority,
|
|
48
|
+
scope: 'persistent',
|
|
49
|
+
projectId: projectId?.toString(),
|
|
50
|
+
tags: ['user-note'],
|
|
51
|
+
});
|
|
52
|
+
// Show confirmation
|
|
53
|
+
ctx.footer.clearForOutput();
|
|
54
|
+
const scope = activeProject ? `project "${activeProject.displayName || activeProject.name}"` : 'global';
|
|
55
|
+
const priorityLabel = priority === 'info' ? '' : ` (${priority})`;
|
|
56
|
+
conversation.printSuccess(`Saved${priorityLabel}: "${truncate(note, 50)}" → ${scope}`);
|
|
57
|
+
terminal.writeLine('');
|
|
58
|
+
ctx.footer.forceRender();
|
|
59
|
+
// Also add to agent's anchor manager if enabled (for current session)
|
|
60
|
+
if (ctx.agent.getAnchorManager()) {
|
|
61
|
+
ctx.agent.addAnchor({
|
|
62
|
+
id: anchor.id,
|
|
63
|
+
content: note,
|
|
64
|
+
priority,
|
|
65
|
+
scope: 'persistent',
|
|
66
|
+
tags: ['user-note'],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Models Module
|
|
3
|
+
*
|
|
4
|
+
* Model-related types and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export { type ModelTier, type TierInfo, type ProviderModelMap, TIER_INFO, MODEL_TIERS, getModelForTier, getTierMappings, getTierDisplayName, getShortModelName, getDefaultTierMappings, isValidTier, setTierOverride, clearTierOverride, } from './model-tiers.js';
|
|
7
|
+
export { type ModelValidationResult, validateModel, checkApiKeyStatus, } from './model-validation.js';
|
|
8
|
+
export { type ThinkingFormat, type ModelStatus, type ModelInfo, type ModelOptionForUI, MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange, getDefaultModelsForUI, getDefaultModelsForProvider, getAllModelsForProviderUI, getModelDisplayName, getModelDescription, getModelContextWindow, } from './model-registry.js';
|
|
9
|
+
export { type ProviderMetadata, type OthersProviderModel, PROVIDER_METADATA, TOGETHER_MODELS, GROQ_MODELS, FIREWORKS_MODELS, PERPLEXITY_MODELS, OPENROUTER_MODELS, getModelsForOthersProvider, getOthersProviders, getProviderMetadata, isOthersProvider, } from './providers.js';
|
|
10
|
+
export { type OllamaModelInfo, type OllamaModelsResult, listOllamaModels, clearOllamaModelsCache, isOllamaModelAvailable, formatModelSize, getOllamaModelDisplayName, getOllamaModelDescription, } from './ollama-models.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Models Module
|
|
3
|
+
*
|
|
4
|
+
* Model-related types and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export { TIER_INFO, MODEL_TIERS, getModelForTier, getTierMappings, getTierDisplayName, getShortModelName, getDefaultTierMappings, isValidTier, setTierOverride, clearTierOverride, } from './model-tiers.js';
|
|
7
|
+
export { validateModel, checkApiKeyStatus, } from './model-validation.js';
|
|
8
|
+
export { MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange,
|
|
9
|
+
// UI helpers
|
|
10
|
+
getDefaultModelsForUI, getDefaultModelsForProvider, getAllModelsForProviderUI, getModelDisplayName, getModelDescription, getModelContextWindow, } from './model-registry.js';
|
|
11
|
+
export { PROVIDER_METADATA, TOGETHER_MODELS, GROQ_MODELS, FIREWORKS_MODELS, PERPLEXITY_MODELS, OPENROUTER_MODELS, getModelsForOthersProvider, getOthersProviders, getProviderMetadata, isOthersProvider, } from './providers.js';
|
|
12
|
+
export { listOllamaModels, clearOllamaModelsCache, isOllamaModelAvailable, formatModelSize, getOllamaModelDisplayName, getOllamaModelDescription, } from './ollama-models.js';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Registry — Re-exported from @compilr-dev/sdk
|
|
3
|
+
*
|
|
4
|
+
* The SDK owns the model registry data and core helpers.
|
|
5
|
+
* This file re-exports those and adds CLI-specific UI helpers.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderType } from './provider-types.js';
|
|
8
|
+
import type { ModelTier } from './types.js';
|
|
9
|
+
export { type ThinkingFormat, type ModelStatus, type ModelInfo, MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange, getModelContextWindow, getModelDisplayName, getModelDescription, } from '@compilr-dev/sdk';
|
|
10
|
+
/**
|
|
11
|
+
* Model option for UI overlays (config, model selector).
|
|
12
|
+
* Simplified interface for overlay display.
|
|
13
|
+
*/
|
|
14
|
+
export interface ModelOptionForUI {
|
|
15
|
+
/** Model ID */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Display name */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Short description */
|
|
20
|
+
description: string;
|
|
21
|
+
/** Provider */
|
|
22
|
+
provider: ProviderType;
|
|
23
|
+
/** Tier (if this is a default model for a tier) */
|
|
24
|
+
tier?: ModelTier;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get default models for each tier, formatted for UI overlays.
|
|
28
|
+
* Returns one model per tier per provider (fast, balanced, powerful).
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDefaultModelsForUI(): ModelOptionForUI[];
|
|
31
|
+
/**
|
|
32
|
+
* Get default models for a specific provider, formatted for UI overlays.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getDefaultModelsForProvider(provider: ProviderType): ModelOptionForUI[];
|
|
35
|
+
/**
|
|
36
|
+
* Get all models for a provider (including non-defaults), formatted for UI overlays.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getAllModelsForProviderUI(provider: ProviderType): ModelOptionForUI[];
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Registry — Re-exported from @compilr-dev/sdk
|
|
3
|
+
*
|
|
4
|
+
* The SDK owns the model registry data and core helpers.
|
|
5
|
+
* This file re-exports those and adds CLI-specific UI helpers.
|
|
6
|
+
*/
|
|
7
|
+
// Re-export everything from SDK
|
|
8
|
+
export { MODEL_REGISTRY, getModelsForProvider, getModelsSortedForDisplay, getModelInfo, isKnownModel, isModelSupported, getThinkingFormat, getStatusIndicator, getStatusLabel, getDefaultModelForTier, areThinkingFormatsCompatible, shouldClearHistoryOnModelChange, getModelContextWindow, getModelDisplayName, getModelDescription, } from '@compilr-dev/sdk';
|
|
9
|
+
// Import for use in CLI-specific helpers below
|
|
10
|
+
import { MODEL_REGISTRY } from '@compilr-dev/sdk';
|
|
11
|
+
/**
|
|
12
|
+
* Get default models for each tier, formatted for UI overlays.
|
|
13
|
+
* Returns one model per tier per provider (fast, balanced, powerful).
|
|
14
|
+
*/
|
|
15
|
+
export function getDefaultModelsForUI() {
|
|
16
|
+
const result = [];
|
|
17
|
+
// Get models with defaultTier set (these are the defaults)
|
|
18
|
+
const defaultModels = MODEL_REGISTRY.filter((m) => m.defaultTier !== undefined && m.status === 'supported');
|
|
19
|
+
// Sort by provider, then by tier order (fast → balanced → powerful)
|
|
20
|
+
const tierOrder = { fast: 0, balanced: 1, powerful: 2 };
|
|
21
|
+
const providerOrder = {
|
|
22
|
+
claude: 0,
|
|
23
|
+
openai: 1,
|
|
24
|
+
gemini: 2,
|
|
25
|
+
ollama: 3,
|
|
26
|
+
together: 4,
|
|
27
|
+
groq: 5,
|
|
28
|
+
fireworks: 6,
|
|
29
|
+
perplexity: 7,
|
|
30
|
+
openrouter: 8,
|
|
31
|
+
custom: 9,
|
|
32
|
+
};
|
|
33
|
+
defaultModels.sort((a, b) => {
|
|
34
|
+
const providerDiff = providerOrder[a.provider] - providerOrder[b.provider];
|
|
35
|
+
if (providerDiff !== 0)
|
|
36
|
+
return providerDiff;
|
|
37
|
+
return tierOrder[a.defaultTier ?? 'balanced'] - tierOrder[b.defaultTier ?? 'balanced'];
|
|
38
|
+
});
|
|
39
|
+
for (const model of defaultModels) {
|
|
40
|
+
result.push({
|
|
41
|
+
id: model.id,
|
|
42
|
+
name: model.displayName,
|
|
43
|
+
description: model.description,
|
|
44
|
+
provider: model.provider,
|
|
45
|
+
tier: model.defaultTier,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get default models for a specific provider, formatted for UI overlays.
|
|
52
|
+
*/
|
|
53
|
+
export function getDefaultModelsForProvider(provider) {
|
|
54
|
+
return getDefaultModelsForUI().filter(m => m.provider === provider);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get all models for a provider (including non-defaults), formatted for UI overlays.
|
|
58
|
+
*/
|
|
59
|
+
export function getAllModelsForProviderUI(provider) {
|
|
60
|
+
return MODEL_REGISTRY
|
|
61
|
+
.filter((m) => m.provider === provider && m.status === 'supported')
|
|
62
|
+
.map((m) => ({
|
|
63
|
+
id: m.id,
|
|
64
|
+
name: m.displayName,
|
|
65
|
+
description: m.description,
|
|
66
|
+
provider: m.provider,
|
|
67
|
+
tier: m.defaultTier,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Tiers — CLI wrapper over SDK's pure tier functions
|
|
3
|
+
*
|
|
4
|
+
* Adds settings integration: reads/writes user overrides from
|
|
5
|
+
* the CLI's settings store.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderType } from './provider-types.js';
|
|
8
|
+
import type { ModelTier, ProviderModelMap } from './types.js';
|
|
9
|
+
export { type ModelTier, type TierInfo, type ProviderModelMap, MODEL_TIERS, TIER_INFO, isValidTier, } from './types.js';
|
|
10
|
+
export { getTierDisplayName, getShortModelName, getDefaultTierMappings } from '@compilr-dev/sdk';
|
|
11
|
+
/**
|
|
12
|
+
* Get the model ID for a given tier and provider.
|
|
13
|
+
* Checks user overrides in settings first, then falls back to registry defaults.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getModelForTier(provider: ProviderType, tier: ModelTier): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get all tier mappings for a provider (with user overrides applied).
|
|
18
|
+
*/
|
|
19
|
+
export declare function getTierMappings(provider: ProviderType): ProviderModelMap;
|
|
20
|
+
/**
|
|
21
|
+
* Set a tier override for a provider.
|
|
22
|
+
* This saves the custom model to settings.
|
|
23
|
+
*/
|
|
24
|
+
export declare function setTierOverride(provider: ProviderType, tier: ModelTier, model: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Clear a tier override for a provider (revert to default).
|
|
27
|
+
*/
|
|
28
|
+
export declare function clearTierOverride(provider: ProviderType, tier: ModelTier): void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Tiers — CLI wrapper over SDK's pure tier functions
|
|
3
|
+
*
|
|
4
|
+
* Adds settings integration: reads/writes user overrides from
|
|
5
|
+
* the CLI's settings store.
|
|
6
|
+
*/
|
|
7
|
+
import { getSetting, setSetting } from '../settings/index.js';
|
|
8
|
+
import { getModelForTier as sdkGetModelForTier, getTierMappings as sdkGetTierMappings, } from '@compilr-dev/sdk';
|
|
9
|
+
// Re-export types and pure functions from SDK (via types.ts)
|
|
10
|
+
export { MODEL_TIERS, TIER_INFO, isValidTier, } from './types.js';
|
|
11
|
+
// Re-export pure functions that don't need settings
|
|
12
|
+
export { getTierDisplayName, getShortModelName, getDefaultTierMappings } from '@compilr-dev/sdk';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// CLI Functions (with settings integration)
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Get user tier overrides from settings.
|
|
18
|
+
*/
|
|
19
|
+
function getUserOverrides() {
|
|
20
|
+
return getSetting('modelTiers');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the model ID for a given tier and provider.
|
|
24
|
+
* Checks user overrides in settings first, then falls back to registry defaults.
|
|
25
|
+
*/
|
|
26
|
+
export function getModelForTier(provider, tier) {
|
|
27
|
+
return sdkGetModelForTier(provider, tier, getUserOverrides());
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get all tier mappings for a provider (with user overrides applied).
|
|
31
|
+
*/
|
|
32
|
+
export function getTierMappings(provider) {
|
|
33
|
+
return sdkGetTierMappings(provider, getUserOverrides());
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set a tier override for a provider.
|
|
37
|
+
* This saves the custom model to settings.
|
|
38
|
+
*/
|
|
39
|
+
export function setTierOverride(provider, tier, model) {
|
|
40
|
+
const current = (getSetting('modelTiers') ?? {});
|
|
41
|
+
// Initialize provider if not exists
|
|
42
|
+
let providerOverrides = current[provider];
|
|
43
|
+
if (providerOverrides === undefined) {
|
|
44
|
+
providerOverrides = {};
|
|
45
|
+
current[provider] = providerOverrides;
|
|
46
|
+
}
|
|
47
|
+
// Set the override
|
|
48
|
+
providerOverrides[tier] = model;
|
|
49
|
+
setSetting('modelTiers', current);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Clear a tier override for a provider (revert to default).
|
|
53
|
+
*/
|
|
54
|
+
export function clearTierOverride(provider, tier) {
|
|
55
|
+
const current = (getSetting('modelTiers') ?? {});
|
|
56
|
+
const providerOverrides = current[provider];
|
|
57
|
+
if (providerOverrides === undefined || !(tier in providerOverrides)) {
|
|
58
|
+
return; // Nothing to clear
|
|
59
|
+
}
|
|
60
|
+
// Remove the tier override
|
|
61
|
+
const { [tier]: _removed, ...remaining } = providerOverrides;
|
|
62
|
+
// Update or remove the provider entry
|
|
63
|
+
if (Object.keys(remaining).length === 0) {
|
|
64
|
+
const { [provider]: _removedProvider, ...remainingProviders } = current;
|
|
65
|
+
setSetting('modelTiers', remainingProviders);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
current[provider] = remaining;
|
|
69
|
+
setSetting('modelTiers', current);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates model names by making lightweight API calls.
|
|
5
|
+
* Uses direct HTTP requests to avoid SDK dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderType } from './provider-types.js';
|
|
8
|
+
export interface ModelValidationResult {
|
|
9
|
+
valid: boolean;
|
|
10
|
+
error?: string;
|
|
11
|
+
errorType?: 'no_api_key' | 'invalid_model' | 'network_error' | 'rate_limit' | 'unknown';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate a model by making a minimal API call.
|
|
15
|
+
* Returns result indicating if model is valid, with error details if not.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateModel(provider: ProviderType, modelId: string): Promise<ModelValidationResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Check if API key is set for a provider.
|
|
20
|
+
* Returns user-friendly hint if not set.
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkApiKeyStatus(provider: ProviderType): {
|
|
23
|
+
hasKey: boolean;
|
|
24
|
+
hint?: string;
|
|
25
|
+
};
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates model names by making lightweight API calls.
|
|
5
|
+
* Uses direct HTTP requests to avoid SDK dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import { getApiKey, hasApiKey } from '../utils/credentials.js';
|
|
8
|
+
import { getSetting } from '../settings/index.js';
|
|
9
|
+
import { PROVIDER_METADATA } from './providers.js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Validation Functions
|
|
12
|
+
// =============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Validate a model by making a minimal API call.
|
|
15
|
+
* Returns result indicating if model is valid, with error details if not.
|
|
16
|
+
*/
|
|
17
|
+
export async function validateModel(provider, modelId) {
|
|
18
|
+
switch (provider) {
|
|
19
|
+
case 'claude':
|
|
20
|
+
return validateAnthropicModel(modelId);
|
|
21
|
+
case 'openai':
|
|
22
|
+
return validateOpenAIModel(modelId);
|
|
23
|
+
case 'gemini':
|
|
24
|
+
return validateGeminiModel(modelId);
|
|
25
|
+
case 'ollama':
|
|
26
|
+
return validateOllamaModel(modelId);
|
|
27
|
+
default:
|
|
28
|
+
return { valid: false, error: 'Unknown provider', errorType: 'unknown' };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate an Anthropic/Claude model via HTTP.
|
|
33
|
+
*/
|
|
34
|
+
async function validateAnthropicModel(modelId) {
|
|
35
|
+
const apiKey = getApiKey('anthropic');
|
|
36
|
+
if (!apiKey) {
|
|
37
|
+
return {
|
|
38
|
+
valid: false,
|
|
39
|
+
error: 'No Anthropic API key set. Run /keys to configure.',
|
|
40
|
+
errorType: 'no_api_key',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: {
|
|
47
|
+
'Content-Type': 'application/json',
|
|
48
|
+
'x-api-key': apiKey,
|
|
49
|
+
'anthropic-version': '2023-06-01',
|
|
50
|
+
},
|
|
51
|
+
body: JSON.stringify({
|
|
52
|
+
model: modelId,
|
|
53
|
+
max_tokens: 1,
|
|
54
|
+
messages: [{ role: 'user', content: 'hi' }],
|
|
55
|
+
}),
|
|
56
|
+
signal: AbortSignal.timeout(15000),
|
|
57
|
+
});
|
|
58
|
+
if (response.ok) {
|
|
59
|
+
return { valid: true };
|
|
60
|
+
}
|
|
61
|
+
const data = await response.json().catch(() => ({}));
|
|
62
|
+
return parseHttpError(response.status, data, 'Anthropic');
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return parseNetworkError(error, 'Anthropic');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate an OpenAI model via HTTP.
|
|
70
|
+
*/
|
|
71
|
+
async function validateOpenAIModel(modelId) {
|
|
72
|
+
const apiKey = getApiKey('openai');
|
|
73
|
+
if (!apiKey) {
|
|
74
|
+
return {
|
|
75
|
+
valid: false,
|
|
76
|
+
error: 'No OpenAI API key set. Run /keys to configure.',
|
|
77
|
+
errorType: 'no_api_key',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const response = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: {
|
|
84
|
+
'Content-Type': 'application/json',
|
|
85
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify({
|
|
88
|
+
model: modelId,
|
|
89
|
+
max_tokens: 1,
|
|
90
|
+
messages: [{ role: 'user', content: 'hi' }],
|
|
91
|
+
}),
|
|
92
|
+
signal: AbortSignal.timeout(15000),
|
|
93
|
+
});
|
|
94
|
+
if (response.ok) {
|
|
95
|
+
return { valid: true };
|
|
96
|
+
}
|
|
97
|
+
const data = await response.json().catch(() => ({}));
|
|
98
|
+
return parseHttpError(response.status, data, 'OpenAI');
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
return parseNetworkError(error, 'OpenAI');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Validate a Gemini model via HTTP (using OpenAI-compatible endpoint).
|
|
106
|
+
*/
|
|
107
|
+
async function validateGeminiModel(modelId) {
|
|
108
|
+
const apiKey = getApiKey('google');
|
|
109
|
+
if (!apiKey) {
|
|
110
|
+
return {
|
|
111
|
+
valid: false,
|
|
112
|
+
error: 'No Google API key set. Run /keys to configure.',
|
|
113
|
+
errorType: 'no_api_key',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
// Use OpenAI-compatible endpoint (same as @compilr-dev/agents)
|
|
118
|
+
const response = await fetch('https://generativelanguage.googleapis.com/v1beta/openai/chat/completions', {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
headers: {
|
|
121
|
+
'Content-Type': 'application/json',
|
|
122
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
123
|
+
},
|
|
124
|
+
body: JSON.stringify({
|
|
125
|
+
model: modelId,
|
|
126
|
+
max_tokens: 1,
|
|
127
|
+
messages: [{ role: 'user', content: 'hi' }],
|
|
128
|
+
}),
|
|
129
|
+
signal: AbortSignal.timeout(15000),
|
|
130
|
+
});
|
|
131
|
+
if (response.ok) {
|
|
132
|
+
return { valid: true };
|
|
133
|
+
}
|
|
134
|
+
const data = await response.json().catch(() => ({}));
|
|
135
|
+
return parseHttpError(response.status, data, 'Google');
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return parseNetworkError(error, 'Google');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Validate an Ollama model by checking if it exists locally.
|
|
143
|
+
* This doesn't make an LLM call - just lists available models.
|
|
144
|
+
*/
|
|
145
|
+
async function validateOllamaModel(modelId) {
|
|
146
|
+
// Get base URL from settings first, then env var, then default
|
|
147
|
+
const settingUrl = getSetting('ollamaBaseUrl');
|
|
148
|
+
const ollamaHost = (typeof settingUrl === 'string' ? settingUrl : null)
|
|
149
|
+
?? process.env.OLLAMA_BASE_URL
|
|
150
|
+
?? process.env.OLLAMA_HOST
|
|
151
|
+
?? 'http://localhost:11434';
|
|
152
|
+
try {
|
|
153
|
+
// List models to check if Ollama is running and model exists
|
|
154
|
+
const response = await fetch(`${ollamaHost}/api/tags`, {
|
|
155
|
+
method: 'GET',
|
|
156
|
+
signal: AbortSignal.timeout(5000),
|
|
157
|
+
});
|
|
158
|
+
if (!response.ok) {
|
|
159
|
+
return {
|
|
160
|
+
valid: false,
|
|
161
|
+
error: 'Cannot connect to Ollama. Is it running?',
|
|
162
|
+
errorType: 'network_error',
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
const data = await response.json();
|
|
166
|
+
const models = data.models || [];
|
|
167
|
+
// Check if the model exists (handle "model:tag" format)
|
|
168
|
+
const normalizedModelId = modelId.toLowerCase();
|
|
169
|
+
const modelExists = models.some(m => {
|
|
170
|
+
const name = m.name.toLowerCase();
|
|
171
|
+
return name === normalizedModelId ||
|
|
172
|
+
name.startsWith(normalizedModelId + ':') ||
|
|
173
|
+
normalizedModelId.startsWith(name.split(':')[0]);
|
|
174
|
+
});
|
|
175
|
+
if (modelExists) {
|
|
176
|
+
return { valid: true };
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
valid: false,
|
|
180
|
+
error: `Model '${modelId}' not found locally. Run: ollama pull ${modelId}`,
|
|
181
|
+
errorType: 'invalid_model',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (error instanceof Error) {
|
|
186
|
+
if (error.name === 'AbortError' || error.message.includes('timeout')) {
|
|
187
|
+
return {
|
|
188
|
+
valid: false,
|
|
189
|
+
error: 'Ollama connection timed out. Is Ollama running?',
|
|
190
|
+
errorType: 'network_error',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
if (error.message.includes('ECONNREFUSED') || error.message.includes('fetch failed')) {
|
|
194
|
+
return {
|
|
195
|
+
valid: false,
|
|
196
|
+
error: 'Cannot connect to Ollama. Start it with: ollama serve',
|
|
197
|
+
errorType: 'network_error',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
valid: false,
|
|
203
|
+
error: `Ollama error: ${error instanceof Error ? error.message : 'Unknown'}`,
|
|
204
|
+
errorType: 'unknown',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function parseHttpError(status, data, provider) {
|
|
209
|
+
const errorMsg = data.error?.message || '';
|
|
210
|
+
const errorType = data.error?.type || data.error?.code || '';
|
|
211
|
+
const lowerMsg = errorMsg.toLowerCase();
|
|
212
|
+
const lowerType = errorType.toLowerCase();
|
|
213
|
+
// Model not found
|
|
214
|
+
if (status === 404 ||
|
|
215
|
+
lowerMsg.includes('model') && (lowerMsg.includes('not found') || lowerMsg.includes('does not exist')) ||
|
|
216
|
+
lowerType.includes('invalid_model') || lowerType.includes('model_not_found')) {
|
|
217
|
+
return {
|
|
218
|
+
valid: false,
|
|
219
|
+
error: `Model not found. Check the model ID is correct for ${provider}.`,
|
|
220
|
+
errorType: 'invalid_model',
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
// Authentication error
|
|
224
|
+
if (status === 401 || status === 403 ||
|
|
225
|
+
lowerMsg.includes('api key') || lowerMsg.includes('authentication') || lowerMsg.includes('unauthorized')) {
|
|
226
|
+
return {
|
|
227
|
+
valid: false,
|
|
228
|
+
error: `${provider} API key is invalid or expired. Run /keys to update.`,
|
|
229
|
+
errorType: 'no_api_key',
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Rate limit
|
|
233
|
+
if (status === 429 || lowerType.includes('rate_limit')) {
|
|
234
|
+
return {
|
|
235
|
+
valid: false,
|
|
236
|
+
error: `${provider} rate limit hit. Model may be valid - try again later.`,
|
|
237
|
+
errorType: 'rate_limit',
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
// Generic error
|
|
241
|
+
return {
|
|
242
|
+
valid: false,
|
|
243
|
+
error: errorMsg || `${provider} returned error ${String(status)}`,
|
|
244
|
+
errorType: 'unknown',
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function parseNetworkError(error, provider) {
|
|
248
|
+
if (error instanceof Error) {
|
|
249
|
+
if (error.name === 'AbortError' || error.message.includes('timeout')) {
|
|
250
|
+
return {
|
|
251
|
+
valid: false,
|
|
252
|
+
error: `${provider} request timed out. Check your connection.`,
|
|
253
|
+
errorType: 'network_error',
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
if (error.message.includes('fetch failed') || error.message.includes('ECONNREFUSED')) {
|
|
257
|
+
return {
|
|
258
|
+
valid: false,
|
|
259
|
+
error: `Cannot connect to ${provider}. Check your internet connection.`,
|
|
260
|
+
errorType: 'network_error',
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
valid: false,
|
|
266
|
+
error: `${provider} error: ${error instanceof Error ? error.message : 'Unknown'}`,
|
|
267
|
+
errorType: 'unknown',
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
// =============================================================================
|
|
271
|
+
// API Key Status Check
|
|
272
|
+
// =============================================================================
|
|
273
|
+
/**
|
|
274
|
+
* Check if API key is set for a provider.
|
|
275
|
+
* Returns user-friendly hint if not set.
|
|
276
|
+
*/
|
|
277
|
+
export function checkApiKeyStatus(provider) {
|
|
278
|
+
// Get provider metadata for correct credential key and env var
|
|
279
|
+
const metadata = PROVIDER_METADATA[provider];
|
|
280
|
+
if (!metadata.requiresKey) {
|
|
281
|
+
return { hasKey: true }; // Ollama and other local providers don't need API key
|
|
282
|
+
}
|
|
283
|
+
const keySet = hasApiKey(metadata.credentialKey);
|
|
284
|
+
if (!keySet) {
|
|
285
|
+
return {
|
|
286
|
+
hasKey: false,
|
|
287
|
+
hint: `Set ${metadata.envVar} or run /keys`,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
return { hasKey: true };
|
|
291
|
+
}
|