@compilr-dev/cli 0.5.0 → 0.5.2
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/LICENSE +108 -0
- package/README.md +237 -69
- 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 +286 -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 +295 -31
- 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 +6 -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 +5 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2588 -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 +113 -0
- package/dist/tool-names.js +239 -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.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +13 -61
- package/dist/tools/db-tools.js +12 -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/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/platform-adapter.d.ts +35 -0
- package/dist/tools/platform-adapter.js +404 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +240 -48
- 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 +52 -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.d.ts +1 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
- 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 +696 -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 +27 -13
- 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/tools/anchor-tools.d.ts +0 -31
- package/dist/tools/anchor-tools.js +0 -255
- package/dist/tools/backlog-wrappers.d.ts +0 -54
- package/dist/tools/backlog-wrappers.js +0 -338
- package/dist/tools/document-db.d.ts +0 -43
- package/dist/tools/document-db.js +0 -220
- package/dist/tools/workitem-db.d.ts +0 -103
- package/dist/tools/workitem-db.js +0 -549
- 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
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Client for CLI Authentication
|
|
3
|
+
*
|
|
4
|
+
* All backend communication goes through Netlify Functions.
|
|
5
|
+
* No direct Supabase SDK dependency — the server handles Supabase calls.
|
|
6
|
+
*
|
|
7
|
+
* Note: This is for USER authentication only — users still bring their own LLM API keys.
|
|
8
|
+
*/
|
|
9
|
+
export interface RefreshTokenResponse {
|
|
10
|
+
success: boolean;
|
|
11
|
+
access_token?: string;
|
|
12
|
+
refresh_token?: string;
|
|
13
|
+
expires_in?: number;
|
|
14
|
+
user?: {
|
|
15
|
+
id: string;
|
|
16
|
+
email: string;
|
|
17
|
+
};
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ProfileData {
|
|
21
|
+
user_id: string;
|
|
22
|
+
email: string;
|
|
23
|
+
account_type: 'free' | 'pro' | 'team' | 'enterprise';
|
|
24
|
+
telemetry_enabled: boolean;
|
|
25
|
+
default_provider: string;
|
|
26
|
+
default_model: string;
|
|
27
|
+
default_tier: string;
|
|
28
|
+
theme: string;
|
|
29
|
+
total_sessions: number;
|
|
30
|
+
total_messages: number;
|
|
31
|
+
first_session_at: string | null;
|
|
32
|
+
last_session_at: string | null;
|
|
33
|
+
created_at: string;
|
|
34
|
+
}
|
|
35
|
+
export interface HeartbeatData {
|
|
36
|
+
session_id: string;
|
|
37
|
+
cli_version: string;
|
|
38
|
+
os: string;
|
|
39
|
+
node_version: string;
|
|
40
|
+
project_id?: number;
|
|
41
|
+
total_messages?: number;
|
|
42
|
+
total_tokens_in?: number;
|
|
43
|
+
total_tokens_out?: number;
|
|
44
|
+
commands_used?: Record<string, number>;
|
|
45
|
+
agents_used?: string[];
|
|
46
|
+
tools_used?: string[];
|
|
47
|
+
llm_provider?: string;
|
|
48
|
+
llm_model?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface DeviceCodeResponse {
|
|
51
|
+
device_code: string;
|
|
52
|
+
user_code: string;
|
|
53
|
+
verification_uri: string;
|
|
54
|
+
verification_uri_complete: string;
|
|
55
|
+
expires_in: number;
|
|
56
|
+
interval: number;
|
|
57
|
+
}
|
|
58
|
+
export interface DeviceTokenResponse {
|
|
59
|
+
access_token: string;
|
|
60
|
+
refresh_token: string;
|
|
61
|
+
token_type: string;
|
|
62
|
+
expires_in: number;
|
|
63
|
+
api_token?: string;
|
|
64
|
+
user: {
|
|
65
|
+
id: string;
|
|
66
|
+
email: string;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface DeviceTokenError {
|
|
70
|
+
error: 'authorization_pending' | 'slow_down' | 'expired_token' | 'access_denied' | 'invalid_grant' | 'server_error';
|
|
71
|
+
error_description: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Refresh an access token using a refresh token.
|
|
75
|
+
* Calls the server-side Netlify function which handles Supabase internally.
|
|
76
|
+
*/
|
|
77
|
+
export declare function refreshToken(refreshTokenValue: string): Promise<RefreshTokenResponse>;
|
|
78
|
+
/**
|
|
79
|
+
* Send heartbeat to record session.
|
|
80
|
+
*/
|
|
81
|
+
export declare function sendHeartbeat(accessToken: string, data: HeartbeatData): Promise<{
|
|
82
|
+
success: boolean;
|
|
83
|
+
telemetry_enabled?: boolean;
|
|
84
|
+
error?: string;
|
|
85
|
+
}>;
|
|
86
|
+
/**
|
|
87
|
+
* Get user profile from CLI API.
|
|
88
|
+
*/
|
|
89
|
+
export declare function getProfile(accessToken: string): Promise<{
|
|
90
|
+
success: boolean;
|
|
91
|
+
profile?: ProfileData;
|
|
92
|
+
error?: string;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Update user profile via CLI API.
|
|
96
|
+
*/
|
|
97
|
+
export declare function updateProfile(accessToken: string, updates: Partial<Pick<ProfileData, 'telemetry_enabled' | 'default_provider' | 'default_model' | 'default_tier' | 'theme'>>): Promise<{
|
|
98
|
+
success: boolean;
|
|
99
|
+
profile?: ProfileData;
|
|
100
|
+
error?: string;
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Request a device code for CLI authentication.
|
|
104
|
+
* Returns codes and URLs for the user to authorize.
|
|
105
|
+
*/
|
|
106
|
+
export declare function requestDeviceCode(): Promise<{
|
|
107
|
+
success: boolean;
|
|
108
|
+
data?: DeviceCodeResponse;
|
|
109
|
+
error?: string;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* Poll for device token after user authorizes.
|
|
113
|
+
* Returns tokens on success, or error status if still pending.
|
|
114
|
+
*/
|
|
115
|
+
export declare function pollDeviceToken(deviceCode: string): Promise<{
|
|
116
|
+
success: boolean;
|
|
117
|
+
data?: DeviceTokenResponse;
|
|
118
|
+
error?: DeviceTokenError;
|
|
119
|
+
networkError?: string;
|
|
120
|
+
}>;
|
|
121
|
+
/**
|
|
122
|
+
* Get the authorization URL for the device flow.
|
|
123
|
+
*/
|
|
124
|
+
export declare function getAuthorizationUrl(userCode?: string): string;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Client for CLI Authentication
|
|
3
|
+
*
|
|
4
|
+
* All backend communication goes through Netlify Functions.
|
|
5
|
+
* No direct Supabase SDK dependency — the server handles Supabase calls.
|
|
6
|
+
*
|
|
7
|
+
* Note: This is for USER authentication only — users still bring their own LLM API keys.
|
|
8
|
+
*/
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Configuration
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// API endpoint for CLI-specific operations
|
|
14
|
+
// Use COMPILR_API_URL env var for testing against branch previews
|
|
15
|
+
const API_BASE_URL = process.env.COMPILR_API_URL || 'https://compilr.dev/.netlify/functions';
|
|
16
|
+
// Device flow authorization URL
|
|
17
|
+
// Use COMPILR_WEB_URL env var for testing against branch previews
|
|
18
|
+
const WEB_BASE_URL = process.env.COMPILR_WEB_URL || 'https://compilr.dev';
|
|
19
|
+
const AUTHORIZATION_URL = `${WEB_BASE_URL}/cli/authorize`;
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// Token Refresh (via Netlify Function)
|
|
22
|
+
// =============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Refresh an access token using a refresh token.
|
|
25
|
+
* Calls the server-side Netlify function which handles Supabase internally.
|
|
26
|
+
*/
|
|
27
|
+
export async function refreshToken(refreshTokenValue) {
|
|
28
|
+
try {
|
|
29
|
+
const response = await fetch(`${API_BASE_URL}/cli-refresh-token`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({ refresh_token: refreshTokenValue }),
|
|
35
|
+
});
|
|
36
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
37
|
+
if (!contentType.includes('application/json')) {
|
|
38
|
+
return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
|
|
39
|
+
}
|
|
40
|
+
const result = await response.json();
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
error: result.error ?? `HTTP ${String(response.status)}`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
success: true,
|
|
49
|
+
access_token: result.access_token,
|
|
50
|
+
refresh_token: result.refresh_token,
|
|
51
|
+
expires_in: result.expires_in,
|
|
52
|
+
user: result.user,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
error: error instanceof Error ? error.message : 'Network error',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// CLI API Operations (against our Netlify Functions)
|
|
64
|
+
// =============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Send heartbeat to record session.
|
|
67
|
+
*/
|
|
68
|
+
export async function sendHeartbeat(accessToken, data) {
|
|
69
|
+
try {
|
|
70
|
+
const response = await fetch(`${API_BASE_URL}/cli-heartbeat`, {
|
|
71
|
+
method: 'POST',
|
|
72
|
+
headers: {
|
|
73
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
74
|
+
'Content-Type': 'application/json',
|
|
75
|
+
},
|
|
76
|
+
body: JSON.stringify(data),
|
|
77
|
+
});
|
|
78
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
79
|
+
if (!contentType.includes('application/json')) {
|
|
80
|
+
return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
|
|
81
|
+
}
|
|
82
|
+
const result = await response.json();
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
error: result.error ?? `HTTP ${String(response.status)}`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
success: result.success ?? true,
|
|
91
|
+
telemetry_enabled: result.telemetry_enabled,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
error: error instanceof Error ? error.message : 'Network error',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get user profile from CLI API.
|
|
103
|
+
*/
|
|
104
|
+
export async function getProfile(accessToken) {
|
|
105
|
+
try {
|
|
106
|
+
const response = await fetch(`${API_BASE_URL}/cli-profile`, {
|
|
107
|
+
method: 'GET',
|
|
108
|
+
headers: {
|
|
109
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
113
|
+
if (!contentType.includes('application/json')) {
|
|
114
|
+
return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
|
|
115
|
+
}
|
|
116
|
+
const result = await response.json();
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: result.error ?? `HTTP ${String(response.status)}`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
profile: result,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
return {
|
|
130
|
+
success: false,
|
|
131
|
+
error: error instanceof Error ? error.message : 'Network error',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Update user profile via CLI API.
|
|
137
|
+
*/
|
|
138
|
+
export async function updateProfile(accessToken, updates) {
|
|
139
|
+
try {
|
|
140
|
+
const response = await fetch(`${API_BASE_URL}/cli-profile`, {
|
|
141
|
+
method: 'PATCH',
|
|
142
|
+
headers: {
|
|
143
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
144
|
+
'Content-Type': 'application/json',
|
|
145
|
+
},
|
|
146
|
+
body: JSON.stringify(updates),
|
|
147
|
+
});
|
|
148
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
149
|
+
if (!contentType.includes('application/json')) {
|
|
150
|
+
return { success: false, error: `Server returned non-JSON response (${String(response.status)})` };
|
|
151
|
+
}
|
|
152
|
+
const result = await response.json();
|
|
153
|
+
if (!response.ok) {
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
error: result.error ?? `HTTP ${String(response.status)}`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
success: result.success ?? true,
|
|
161
|
+
profile: result.profile,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
error: error instanceof Error ? error.message : 'Network error',
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Device Flow Authentication
|
|
173
|
+
// =============================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Request a device code for CLI authentication.
|
|
176
|
+
* Returns codes and URLs for the user to authorize.
|
|
177
|
+
*/
|
|
178
|
+
export async function requestDeviceCode() {
|
|
179
|
+
try {
|
|
180
|
+
const url = `${API_BASE_URL}/cli-device-code`;
|
|
181
|
+
const response = await fetch(url, {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
headers: {
|
|
184
|
+
'Content-Type': 'application/json',
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
188
|
+
if (!contentType.includes('application/json')) {
|
|
189
|
+
return {
|
|
190
|
+
success: false,
|
|
191
|
+
error: `Non-JSON response (${String(response.status)}) from: ${url}`,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (!response.ok) {
|
|
195
|
+
const result = await response.json();
|
|
196
|
+
return {
|
|
197
|
+
success: false,
|
|
198
|
+
error: result.error ?? `HTTP ${String(response.status)}`,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const data = await response.json();
|
|
202
|
+
return { success: true, data };
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
return {
|
|
206
|
+
success: false,
|
|
207
|
+
error: error instanceof Error ? error.message : 'Network error',
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Poll for device token after user authorizes.
|
|
213
|
+
* Returns tokens on success, or error status if still pending.
|
|
214
|
+
*/
|
|
215
|
+
export async function pollDeviceToken(deviceCode) {
|
|
216
|
+
try {
|
|
217
|
+
const response = await fetch(`${API_BASE_URL}/cli-device-token`, {
|
|
218
|
+
method: 'POST',
|
|
219
|
+
headers: {
|
|
220
|
+
'Content-Type': 'application/json',
|
|
221
|
+
},
|
|
222
|
+
body: JSON.stringify({
|
|
223
|
+
device_code: deviceCode,
|
|
224
|
+
hostname: os.hostname(),
|
|
225
|
+
}),
|
|
226
|
+
});
|
|
227
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
228
|
+
if (!contentType.includes('application/json')) {
|
|
229
|
+
return {
|
|
230
|
+
success: false,
|
|
231
|
+
networkError: `Server returned non-JSON response (${String(response.status)})`,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const result = await response.json();
|
|
235
|
+
if (!response.ok) {
|
|
236
|
+
return {
|
|
237
|
+
success: false,
|
|
238
|
+
error: result,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
success: true,
|
|
243
|
+
data: result,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return {
|
|
248
|
+
success: false,
|
|
249
|
+
networkError: error instanceof Error ? error.message : 'Network error',
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get the authorization URL for the device flow.
|
|
255
|
+
*/
|
|
256
|
+
export function getAuthorizationUrl(userCode) {
|
|
257
|
+
if (userCode) {
|
|
258
|
+
return `${AUTHORIZATION_URL}?code=${userCode}`;
|
|
259
|
+
}
|
|
260
|
+
return AUTHORIZATION_URL;
|
|
261
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Manager Module
|
|
3
|
+
*
|
|
4
|
+
* Singleton authentication manager for the CLI.
|
|
5
|
+
* Handles login, logout, token refresh, and session management.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const auth = getAuthManager();
|
|
9
|
+
* if (!await auth.isAuthenticated()) {
|
|
10
|
+
* // Show login prompt
|
|
11
|
+
* }
|
|
12
|
+
*/
|
|
13
|
+
import { type ProfileData } from './api-client.js';
|
|
14
|
+
export interface User {
|
|
15
|
+
id: string;
|
|
16
|
+
email: string;
|
|
17
|
+
accountType: 'free' | 'pro' | 'team' | 'enterprise';
|
|
18
|
+
createdAt: Date;
|
|
19
|
+
}
|
|
20
|
+
export interface LoginResult {
|
|
21
|
+
success: boolean;
|
|
22
|
+
user?: User;
|
|
23
|
+
error?: string;
|
|
24
|
+
needsConfirmation?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DeviceFlowCallbacks {
|
|
27
|
+
/** Called when device code is ready - display the user code and URL */
|
|
28
|
+
onCodeReady: (userCode: string, verificationUrl: string) => void;
|
|
29
|
+
/** Called to update status during polling */
|
|
30
|
+
onStatusUpdate?: (status: 'polling' | 'authorized' | 'expired' | 'denied') => void;
|
|
31
|
+
/** Called to open the browser (return false to skip) */
|
|
32
|
+
onOpenBrowser?: (url: string) => Promise<boolean>;
|
|
33
|
+
}
|
|
34
|
+
export interface SessionInfo {
|
|
35
|
+
sessionId: string;
|
|
36
|
+
startedAt: Date;
|
|
37
|
+
projectId?: number;
|
|
38
|
+
messageCount: number;
|
|
39
|
+
tokensIn: number;
|
|
40
|
+
tokensOut: number;
|
|
41
|
+
commandsUsed: Record<string, number>;
|
|
42
|
+
agentsUsed: Set<string>;
|
|
43
|
+
toolsUsed: Set<string>;
|
|
44
|
+
llmProvider?: string;
|
|
45
|
+
llmModel?: string;
|
|
46
|
+
}
|
|
47
|
+
declare class AuthManager {
|
|
48
|
+
private authData;
|
|
49
|
+
private profileData;
|
|
50
|
+
private sessionInfo;
|
|
51
|
+
private heartbeatInterval;
|
|
52
|
+
constructor();
|
|
53
|
+
/**
|
|
54
|
+
* Check if user is authenticated with a valid session.
|
|
55
|
+
*
|
|
56
|
+
* If an API token (tok_xxx) is present, authentication is immediate —
|
|
57
|
+
* no expiry check or refresh needed (server validates on each call).
|
|
58
|
+
*
|
|
59
|
+
* Falls back to JWT refresh for pre-v2 users who don't have an API token yet.
|
|
60
|
+
*/
|
|
61
|
+
isAuthenticated(): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Check if any auth data exists (quick check without validation).
|
|
64
|
+
*/
|
|
65
|
+
hasStoredAuth(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Get cached email from local auth data (no network call).
|
|
68
|
+
* Returns null if not authenticated.
|
|
69
|
+
*/
|
|
70
|
+
getEmail(): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Get the current user.
|
|
73
|
+
* Throws if not authenticated.
|
|
74
|
+
*/
|
|
75
|
+
getUser(): Promise<User>;
|
|
76
|
+
/**
|
|
77
|
+
* Get the access token (auto-refreshes if needed).
|
|
78
|
+
* Prefers API token (tok_xxx) over JWT when available.
|
|
79
|
+
*/
|
|
80
|
+
getAccessToken(): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* Login using device flow (browser-based authentication).
|
|
83
|
+
* This is the recommended way to authenticate the CLI.
|
|
84
|
+
*
|
|
85
|
+
* @param callbacks - Callbacks for progress updates
|
|
86
|
+
* @param signal - AbortSignal for cancellation
|
|
87
|
+
*/
|
|
88
|
+
loginWithDeviceFlow(callbacks: DeviceFlowCallbacks, signal?: AbortSignal): Promise<LoginResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Logout (clear local session).
|
|
91
|
+
* Tokens expire naturally (1 hour). No server call needed.
|
|
92
|
+
*/
|
|
93
|
+
logout(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Refresh the access token using the refresh token.
|
|
96
|
+
* Calls the server-side Netlify function (no direct Supabase SDK).
|
|
97
|
+
*/
|
|
98
|
+
private refreshToken;
|
|
99
|
+
/**
|
|
100
|
+
* Get the best available token for API calls.
|
|
101
|
+
* Prefers API token (tok_xxx) over short-lived JWT.
|
|
102
|
+
*/
|
|
103
|
+
private getBestToken;
|
|
104
|
+
/**
|
|
105
|
+
* Fetch user profile from server.
|
|
106
|
+
*/
|
|
107
|
+
private fetchProfile;
|
|
108
|
+
/**
|
|
109
|
+
* Get cached profile data.
|
|
110
|
+
*/
|
|
111
|
+
getProfile(): ProfileData | null;
|
|
112
|
+
/**
|
|
113
|
+
* Update profile settings on server.
|
|
114
|
+
*/
|
|
115
|
+
updateProfileSettings(updates: {
|
|
116
|
+
telemetry_enabled?: boolean;
|
|
117
|
+
default_provider?: string;
|
|
118
|
+
default_model?: string;
|
|
119
|
+
default_tier?: string;
|
|
120
|
+
theme?: string;
|
|
121
|
+
}): Promise<boolean>;
|
|
122
|
+
/**
|
|
123
|
+
* Start a new CLI session and begin heartbeat.
|
|
124
|
+
*/
|
|
125
|
+
startSession(projectId?: number): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Stop the current session.
|
|
128
|
+
*/
|
|
129
|
+
stopHeartbeat(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Record a message in the current session.
|
|
132
|
+
*/
|
|
133
|
+
recordMessage(tokensIn: number, tokensOut: number): void;
|
|
134
|
+
/**
|
|
135
|
+
* Record command usage.
|
|
136
|
+
*/
|
|
137
|
+
recordCommand(command: string): void;
|
|
138
|
+
/**
|
|
139
|
+
* Record agent usage.
|
|
140
|
+
*/
|
|
141
|
+
recordAgent(agentId: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Record tool usage.
|
|
144
|
+
*/
|
|
145
|
+
recordTool(toolName: string): void;
|
|
146
|
+
/**
|
|
147
|
+
* Set LLM provider/model for session.
|
|
148
|
+
*/
|
|
149
|
+
setLLMInfo(provider: string, model: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Send a single heartbeat regardless of telemetry setting.
|
|
152
|
+
* Called once at login to register the CLI connection with the server
|
|
153
|
+
* (sets first_session_at on cli_users_extended). This is account metadata,
|
|
154
|
+
* not telemetry data.
|
|
155
|
+
*/
|
|
156
|
+
sendForcedHeartbeat(): Promise<void>;
|
|
157
|
+
/**
|
|
158
|
+
* Send heartbeat to server (if telemetry enabled).
|
|
159
|
+
*/
|
|
160
|
+
private sendHeartbeat;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get the AuthManager singleton instance.
|
|
164
|
+
*/
|
|
165
|
+
export declare function getAuthManager(): AuthManager;
|
|
166
|
+
/**
|
|
167
|
+
* Reset AuthManager (for testing).
|
|
168
|
+
*/
|
|
169
|
+
export declare function resetAuthManager(): void;
|
|
170
|
+
export type { AuthData, AuthSession } from './storage.js';
|
|
171
|
+
export type { ProfileData, HeartbeatData, DeviceCodeResponse } from './api-client.js';
|
|
172
|
+
export { getAuthorizationUrl } from './api-client.js';
|