@prestyj/cli 5.30.0 → 5.30.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/README.md +54 -39
- package/assets/skills/bulletproof/SKILL.md +1 -1
- package/assets/skills/clarify/SKILL.md +1 -1
- package/assets/skills/code-review/SKILL.md +1 -1
- package/assets/skills/compliance-guard/SKILL.md +1 -1
- package/assets/skills/durable/SKILL.md +1 -1
- package/assets/skills/evidence-led-ui/SKILL.md +1 -1
- package/assets/skills/lean/SKILL.md +1 -1
- package/assets/skills/refactoring/SKILL.md +1 -1
- package/assets/skills/root-cause/SKILL.md +1 -1
- package/assets/skills/shared-language/SKILL.md +1 -1
- package/assets/skills/tdd/SKILL.md +1 -1
- package/dist/app-sidecar/app-settings.d.ts +63 -0
- package/dist/app-sidecar/app-settings.js +147 -0
- package/dist/app-sidecar/app-settings.js.map +1 -0
- package/dist/app-sidecar/attachments.d.ts +11 -0
- package/dist/app-sidecar/attachments.js +47 -0
- package/dist/app-sidecar/attachments.js.map +1 -0
- package/dist/app-sidecar/auth-routes.d.ts +3 -0
- package/dist/app-sidecar/auth-routes.js +293 -0
- package/dist/app-sidecar/auth-routes.js.map +1 -0
- package/dist/app-sidecar/autopilot-runner.d.ts +62 -0
- package/dist/app-sidecar/autopilot-runner.js +373 -0
- package/dist/app-sidecar/autopilot-runner.js.map +1 -0
- package/dist/app-sidecar/file-search.d.ts +15 -0
- package/dist/app-sidecar/file-search.js +103 -0
- package/dist/app-sidecar/file-search.js.map +1 -0
- package/dist/app-sidecar/hf-pull-manager.d.ts +20 -0
- package/dist/app-sidecar/hf-pull-manager.js +224 -0
- package/dist/app-sidecar/hf-pull-manager.js.map +1 -0
- package/dist/app-sidecar/history-routes.d.ts +3 -0
- package/dist/app-sidecar/history-routes.js +375 -0
- package/dist/app-sidecar/history-routes.js.map +1 -0
- package/dist/app-sidecar/history.d.ts +67 -0
- package/dist/app-sidecar/history.js +23 -0
- package/dist/app-sidecar/history.js.map +1 -0
- package/dist/app-sidecar/http.d.ts +5 -0
- package/dist/app-sidecar/http.js +27 -0
- package/dist/app-sidecar/http.js.map +1 -0
- package/dist/app-sidecar/integration-routes.d.ts +3 -0
- package/dist/app-sidecar/integration-routes.js +286 -0
- package/dist/app-sidecar/integration-routes.js.map +1 -0
- package/dist/app-sidecar/json-mode.d.ts +10 -0
- package/dist/app-sidecar/json-mode.js +73 -0
- package/dist/app-sidecar/json-mode.js.map +1 -0
- package/dist/app-sidecar/keep-awake.d.ts +4 -0
- package/dist/app-sidecar/keep-awake.js +5 -0
- package/dist/app-sidecar/keep-awake.js.map +1 -0
- package/dist/app-sidecar/mcp-routes.d.ts +3 -0
- package/dist/app-sidecar/mcp-routes.js +185 -0
- package/dist/app-sidecar/mcp-routes.js.map +1 -0
- package/dist/app-sidecar/mcp-rows.d.ts +31 -0
- package/dist/app-sidecar/mcp-rows.js +77 -0
- package/dist/app-sidecar/mcp-rows.js.map +1 -0
- package/dist/app-sidecar/nolan-context.d.ts +20 -0
- package/dist/app-sidecar/nolan-context.js +55 -0
- package/dist/app-sidecar/nolan-context.js.map +1 -0
- package/dist/app-sidecar/progress-manager.d.ts +10 -0
- package/dist/app-sidecar/progress-manager.js +116 -0
- package/dist/app-sidecar/progress-manager.js.map +1 -0
- package/dist/app-sidecar/prompt-routes.d.ts +3 -0
- package/dist/app-sidecar/prompt-routes.js +355 -0
- package/dist/app-sidecar/prompt-routes.js.map +1 -0
- package/dist/app-sidecar/repo-polls.d.ts +18 -0
- package/dist/app-sidecar/repo-polls.js +45 -0
- package/dist/app-sidecar/repo-polls.js.map +1 -0
- package/dist/app-sidecar/route-context.d.ts +147 -0
- package/dist/app-sidecar/route-context.js +2 -0
- package/dist/app-sidecar/route-context.js.map +1 -0
- package/dist/app-sidecar/run-control-routes.d.ts +3 -0
- package/dist/app-sidecar/run-control-routes.js +437 -0
- package/dist/app-sidecar/run-control-routes.js.map +1 -0
- package/dist/app-sidecar/session-routes.d.ts +3 -0
- package/dist/app-sidecar/session-routes.js +115 -0
- package/dist/app-sidecar/session-routes.js.map +1 -0
- package/dist/app-sidecar/session-types.d.ts +39 -0
- package/dist/app-sidecar/session-types.js +5 -0
- package/dist/app-sidecar/session-types.js.map +1 -0
- package/dist/app-sidecar/task-routes.d.ts +3 -0
- package/dist/app-sidecar/task-routes.js +232 -0
- package/dist/app-sidecar/task-routes.js.map +1 -0
- package/dist/app-sidecar/usage.d.ts +19 -0
- package/dist/app-sidecar/usage.js +153 -0
- package/dist/app-sidecar/usage.js.map +1 -0
- package/dist/app-sidecar/workspace-routes.d.ts +3 -0
- package/dist/app-sidecar/workspace-routes.js +374 -0
- package/dist/app-sidecar/workspace-routes.js.map +1 -0
- package/dist/app-sidecar.js +541 -3971
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/jiwa.js +2 -0
- package/dist/chat-agents/jiwa.js.map +1 -1
- package/dist/chat-agents/memory.js +2 -0
- package/dist/chat-agents/memory.js.map +1 -1
- package/dist/cli/auth.js +13 -9
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/core/acceptance-checks.js +3 -9
- package/dist/core/acceptance-checks.js.map +1 -1
- package/dist/core/agent-session/helpers.d.ts +26 -0
- package/dist/core/agent-session/helpers.js +47 -0
- package/dist/core/agent-session/helpers.js.map +1 -0
- package/dist/core/agent-session/mcp-tools.d.ts +68 -0
- package/dist/core/agent-session/mcp-tools.js +195 -0
- package/dist/core/agent-session/mcp-tools.js.map +1 -0
- package/dist/core/agent-session/run-loop-monitor.d.ts +63 -0
- package/dist/core/agent-session/run-loop-monitor.js +164 -0
- package/dist/core/agent-session/run-loop-monitor.js.map +1 -0
- package/dist/core/agent-session/transcript-markers.d.ts +57 -0
- package/dist/core/agent-session/transcript-markers.js +166 -0
- package/dist/core/agent-session/transcript-markers.js.map +1 -0
- package/dist/core/agent-session/verification-tracker.d.ts +50 -0
- package/dist/core/agent-session/verification-tracker.js +269 -0
- package/dist/core/agent-session/verification-tracker.js.map +1 -0
- package/dist/core/agent-session.d.ts +27 -87
- package/dist/core/agent-session.js +166 -713
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.js +3 -3
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/autopilot-cycle.d.ts +8 -2
- package/dist/core/autopilot-cycle.js +22 -3
- package/dist/core/autopilot-cycle.js.map +1 -1
- package/dist/core/bundled-agents.js +6 -6
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/checklist-git.d.ts +19 -0
- package/dist/core/checklist-git.js +54 -0
- package/dist/core/checklist-git.js.map +1 -0
- package/dist/core/checklist-items.d.ts +10 -1
- package/dist/core/checklist-items.js +22 -0
- package/dist/core/checklist-items.js.map +1 -1
- package/dist/core/checklist-prompt.d.ts +14 -3
- package/dist/core/checklist-prompt.js +38 -8
- package/dist/core/checklist-prompt.js.map +1 -1
- package/dist/core/checklist-snapshot.d.ts +5 -1
- package/dist/core/checklist-snapshot.js +20 -3
- package/dist/core/checklist-snapshot.js.map +1 -1
- package/dist/core/checklist-store.d.ts +5 -1
- package/dist/core/checklist-store.js +35 -4
- package/dist/core/checklist-store.js.map +1 -1
- package/dist/core/context-limits.js +1 -1
- package/dist/core/context-limits.js.map +1 -1
- package/dist/core/event-bus.d.ts +1 -1
- package/dist/core/event-bus.js +39 -13
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/extensions/plugin-bundles.js +4 -2
- package/dist/core/extensions/plugin-bundles.js.map +1 -1
- package/dist/core/hashline.d.ts +10 -8
- package/dist/core/hashline.js.map +1 -1
- package/dist/core/mcp/client.js +2 -0
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/loopback.d.ts +2 -2
- package/dist/core/mcp/loopback.js +2 -2
- package/dist/core/mcp/shared-pool.js +4 -3
- package/dist/core/mcp/shared-pool.js.map +1 -1
- package/dist/core/persistent-shell.js +2 -1
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/plan-handoff.d.ts +30 -0
- package/dist/core/plan-handoff.js +10 -0
- package/dist/core/plan-handoff.js.map +1 -0
- package/dist/core/plan-submission-gate.d.ts +28 -0
- package/dist/core/plan-submission-gate.js +27 -0
- package/dist/core/plan-submission-gate.js.map +1 -0
- package/dist/core/process-manager.js +9 -1
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/project-health-scan.d.ts +109 -0
- package/dist/core/project-health-scan.js +673 -0
- package/dist/core/project-health-scan.js.map +1 -0
- package/dist/core/project-health-score.d.ts +41 -0
- package/dist/core/project-health-score.js +257 -0
- package/dist/core/project-health-score.js.map +1 -0
- package/dist/core/prompt-commands.js +44 -6
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-storage.d.ts +1 -0
- package/dist/core/session-storage.js +1 -1
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/skills.js +6 -9
- package/dist/core/skills.js.map +1 -1
- package/dist/core/style-packs/index.js +2 -11
- package/dist/core/style-packs/index.js.map +1 -1
- package/dist/core/style-packs/packs.d.ts +3 -12
- package/dist/core/style-packs/packs.js +132 -173
- package/dist/core/style-packs/packs.js.map +1 -1
- package/dist/core/subagent-manager.js +11 -6
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-receipt.js +3 -4
- package/dist/core/subagent-receipt.js.map +1 -1
- package/dist/core/ui-adoption.js +2 -0
- package/dist/core/ui-adoption.js.map +1 -1
- package/dist/core/ui-registry.js +5 -4
- package/dist/core/ui-registry.js.map +1 -1
- package/dist/core/verification-evidence.d.ts +21 -2
- package/dist/core/verification-evidence.js +283 -8
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/core/verification-gate.js +4 -2
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/verify-commands.js +2 -3
- package/dist/core/verify-commands.js.map +1 -1
- package/dist/modes/agent-home-mode.js +1 -4
- package/dist/modes/agent-home-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.js +13 -8
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.js +70 -87
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/ask-user.js +13 -74
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.js +28 -84
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checklist.d.ts +7 -14
- package/dist/tools/checklist.js +22 -41
- package/dist/tools/checklist.js.map +1 -1
- package/dist/tools/code-nav.js +7 -29
- package/dist/tools/code-nav.js.map +1 -1
- package/dist/tools/edit.d.ts +4 -9
- package/dist/tools/edit.js +175 -65
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/enter-plan.js +2 -7
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/exit-plan.js +2 -3
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/find.js +3 -4
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/grep.js +9 -20
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.js +10 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ls.js +3 -3
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/prompt-hints.js +34 -47
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-only-bash.js +3 -0
- package/dist/tools/read-only-bash.js.map +1 -1
- package/dist/tools/read.js +8 -20
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/search-code.js +4 -12
- package/dist/tools/search-code.js.map +1 -1
- package/dist/tools/skill.js +13 -7
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/subagent-control.js +7 -22
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent.js +1 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/task-output.js +4 -15
- package/dist/tools/task-output.js.map +1 -1
- package/dist/tools/task-send.js +5 -17
- package/dist/tools/task-send.js.map +1 -1
- package/dist/tools/task-stop.js +2 -2
- package/dist/tools/task-stop.js.map +1 -1
- package/dist/tools/tool-search.js +2 -7
- package/dist/tools/tool-search.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +21 -4
- package/dist/tools/tool-tiers.js +44 -17
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/tools/web-fetch.js +7 -33
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/write.js +3 -4
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.js +20 -26
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/Footer.js +1 -2
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.js +0 -2
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ToolExecution.js +4 -3
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +7 -6
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/sessions.js +1 -5
- package/dist/ui/sessions.js.map +1 -1
- package/dist/ui/utils/highlight.d.ts +0 -5
- package/dist/ui/utils/highlight.js +3 -49
- package/dist/ui/utils/highlight.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.d.ts +6 -0
- package/dist/ui/utils/markdown-renderer.js +21 -5
- package/dist/ui/utils/markdown-renderer.js.map +1 -1
- package/dist/utils/process.js +3 -3
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/shared-poll.d.ts +37 -0
- package/dist/utils/shared-poll.js +104 -0
- package/dist/utils/shared-poll.js.map +1 -0
- package/package.json +8 -8
- package/dist/core/api-benchmark.d.ts +0 -63
- package/dist/core/api-benchmark.js +0 -381
- package/dist/core/api-benchmark.js.map +0 -1
- package/dist/core/bash-spawn-benchmark.d.ts +0 -1
- package/dist/core/bash-spawn-benchmark.js +0 -139
- package/dist/core/bash-spawn-benchmark.js.map +0 -1
- package/dist/core/cache-warm-benchmark.d.ts +0 -21
- package/dist/core/cache-warm-benchmark.js +0 -170
- package/dist/core/cache-warm-benchmark.js.map +0 -1
- package/dist/core/fast-apply-benchmark.d.ts +0 -25
- package/dist/core/fast-apply-benchmark.js +0 -284
- package/dist/core/fast-apply-benchmark.js.map +0 -1
- package/dist/core/hashline-edit-benchmark.d.ts +0 -88
- package/dist/core/hashline-edit-benchmark.js +0 -518
- package/dist/core/hashline-edit-benchmark.js.map +0 -1
- package/dist/core/semantic-search-benchmark.d.ts +0 -36
- package/dist/core/semantic-search-benchmark.js +0 -211
- package/dist/core/semantic-search-benchmark.js.map +0 -1
- package/dist/core/speed-benchmark.d.ts +0 -132
- package/dist/core/speed-benchmark.js +0 -410
- package/dist/core/speed-benchmark.js.map +0 -1
- package/dist/ui/activity-phrases.d.ts +0 -10
- package/dist/ui/activity-phrases.js +0 -184
- package/dist/ui/activity-phrases.js.map +0 -1
- package/dist/ui/components/PlanApproval.d.ts +0 -7
- package/dist/ui/components/PlanApproval.js +0 -60
- package/dist/ui/components/PlanApproval.js.map +0 -1
- package/dist/ui/components/PlanBanner.d.ts +0 -5
- package/dist/ui/components/PlanBanner.js +0 -31
- package/dist/ui/components/PlanBanner.js.map +0 -1
- package/dist/ui/components/PlanProgress.d.ts +0 -6
- package/dist/ui/components/PlanProgress.js +0 -30
- package/dist/ui/components/PlanProgress.js.map +0 -1
- package/dist/ui/hooks/useMinDisplayTime.d.ts +0 -10
- package/dist/ui/hooks/useMinDisplayTime.js +0 -34
- package/dist/ui/hooks/useMinDisplayTime.js.map +0 -1
- package/dist/ui/hooks/useSessionManager.d.ts +0 -12
- package/dist/ui/hooks/useSessionManager.js +0 -43
- package/dist/ui/hooks/useSessionManager.js.map +0 -1
- package/dist/ui/hooks/useSlashCommands.d.ts +0 -6
- package/dist/ui/hooks/useSlashCommands.js +0 -11
- package/dist/ui/hooks/useSlashCommands.js.map +0 -1
- package/dist/ui/terminal-history-spacing.d.ts +0 -1
- package/dist/ui/terminal-history-spacing.js +0 -2
- package/dist/ui/terminal-history-spacing.js.map +0 -1
- package/dist/ui/utils/markdown-cache.d.ts +0 -10
- package/dist/ui/utils/markdown-cache.js +0 -58
- package/dist/ui/utils/markdown-cache.js.map +0 -1
- package/dist/ui/utils/token-to-ansi.d.ts +0 -8
- package/dist/ui/utils/token-to-ansi.js +0 -323
- package/dist/ui/utils/token-to-ansi.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/app-sidecar/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAiBrE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,WAA4B;IAE5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,4EAA4E;QAC5E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC;QACnE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,6EAA6E;QAC7E,0EAA0E;QAC1E,6EAA6E;QAC7E,0EAA0E;QAC1E,6EAA6E;QAC7E,2BAA2B;QAC3B,IAAI,QAAQ,GAAuB,EAAE,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChE,QAAQ,GAAG,aAAa;oBACtB,CAAC,CAAC;wBACE,GAAG,CAAC;wBACJ,SAAS,EAAE,aAAa;wBACxB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;qBACxC;oBACH,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { XIAOMI_CREDITS_KEY, dualAuthProvider } from "@prestyj/core";
|
|
2
|
+
import { loginAnthropic } from "../core/oauth/anthropic.js";
|
|
3
|
+
import { loginOpenAI } from "../core/oauth/openai.js";
|
|
4
|
+
import { loginGemini } from "../core/oauth/gemini.js";
|
|
5
|
+
import { loginKimi } from "../core/oauth/kimi.js";
|
|
6
|
+
import { loginXai } from "../core/oauth/xai.js";
|
|
7
|
+
import { AUTH_PROVIDERS } from "../core/auth-providers.js";
|
|
8
|
+
import { readBody, json } from "./http.js";
|
|
9
|
+
export function handleAuthRoutes(ctx, req, res, url, method) {
|
|
10
|
+
// ── Provider auth (login) ───────────────────────────────
|
|
11
|
+
if (method === "GET" && url === "/auth/status") {
|
|
12
|
+
void ctx.authStatusPayload().then((payload) => json(res, 200, payload));
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
if (method === "POST" && url === "/auth/apikey") {
|
|
16
|
+
void readBody(req, res).then(async (raw) => {
|
|
17
|
+
if (raw === null)
|
|
18
|
+
return;
|
|
19
|
+
let provider = "";
|
|
20
|
+
let key;
|
|
21
|
+
let variant;
|
|
22
|
+
try {
|
|
23
|
+
const body = JSON.parse(raw);
|
|
24
|
+
provider = body.provider ?? "";
|
|
25
|
+
key = (body.key ?? "").trim();
|
|
26
|
+
variant = body.variant;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const meta = AUTH_PROVIDERS.find((p) => p.value === provider);
|
|
33
|
+
if (!meta || !meta.methods.includes("apikey")) {
|
|
34
|
+
json(res, 400, { error: "provider does not support API key auth" });
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!key) {
|
|
38
|
+
json(res, 400, { error: "API key is required" });
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Providers with multiple API-key variants (currently only Xiaomi: Token
|
|
42
|
+
// Plan vs. API Credits) store under the chosen variant's key/baseUrl,
|
|
43
|
+
// defaulting to the first variant. Single-variant providers fall back to
|
|
44
|
+
// the legacy provider-id storage key + flat apiKeyBaseUrl.
|
|
45
|
+
const chosenVariant = meta.apiKeyVariants?.find((v) => v.key === variant) ?? meta.apiKeyVariants?.[0];
|
|
46
|
+
const storageKey = chosenVariant?.key ?? provider;
|
|
47
|
+
const baseUrl = chosenVariant?.baseUrl ?? meta.apiKeyBaseUrl;
|
|
48
|
+
const creds = {
|
|
49
|
+
accessToken: key,
|
|
50
|
+
refreshToken: "",
|
|
51
|
+
expiresAt: Date.now() + 365 * 24 * 60 * 60 * 1000 * 100, // ~100y
|
|
52
|
+
...(baseUrl ? { baseUrl } : {}),
|
|
53
|
+
};
|
|
54
|
+
await ctx.auth.setCredentials(storageKey, creds);
|
|
55
|
+
// auth.json is shared by every window, so this is a global change:
|
|
56
|
+
// close their login modals and refresh their provider lists too.
|
|
57
|
+
ctx.broadcastAll("auth_done", { provider });
|
|
58
|
+
// `auth_done` means "a login succeeded" (modals close on it).
|
|
59
|
+
// `auth_change` means "auth.json changed" — which a DISCONNECT also is,
|
|
60
|
+
// so connection state has one signal that covers both directions.
|
|
61
|
+
ctx.broadcastAll("auth_change", { provider });
|
|
62
|
+
// A newly connected provider unlocks its models. `/models` filters on
|
|
63
|
+
// who is logged in, so every window's picker is now stale — without
|
|
64
|
+
// this the new models don't appear until the session is reopened.
|
|
65
|
+
ctx.broadcastAll("models_change", {});
|
|
66
|
+
json(res, 200, { ok: true });
|
|
67
|
+
});
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (method === "POST" && url === "/auth/oauth/start") {
|
|
71
|
+
void readBody(req, res).then((raw) => {
|
|
72
|
+
if (raw === null)
|
|
73
|
+
return;
|
|
74
|
+
let provider = "";
|
|
75
|
+
try {
|
|
76
|
+
provider = JSON.parse(raw).provider ?? "";
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const meta = AUTH_PROVIDERS.find((p) => p.value === provider);
|
|
83
|
+
if (!meta || !meta.methods.includes("oauth")) {
|
|
84
|
+
json(res, 400, { error: "provider does not support OAuth" });
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (ctx.oauthInFlight) {
|
|
88
|
+
json(res, 409, { error: "a login is already in progress" });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// A login writes the shared ~/.ezcoder/auth.json, so two windows racing the
|
|
92
|
+
// same provider means two browser tabs and two token exchanges whose
|
|
93
|
+
// writes clobber each other. The per-session flag above cannot see
|
|
94
|
+
// that — guard the provider daemon-wide as well.
|
|
95
|
+
if (ctx.oauthInFlightProviders.has(provider)) {
|
|
96
|
+
json(res, 409, {
|
|
97
|
+
error: `a ${meta.label} login is already in progress in another window`,
|
|
98
|
+
});
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
ctx.oauthInFlight = true;
|
|
102
|
+
ctx.oauthInFlightProviders.add(provider);
|
|
103
|
+
json(res, 202, { accepted: true });
|
|
104
|
+
void (async () => {
|
|
105
|
+
const cb = ctx.authCallbacks();
|
|
106
|
+
try {
|
|
107
|
+
let creds;
|
|
108
|
+
let storageKey = provider;
|
|
109
|
+
if (provider === "anthropic")
|
|
110
|
+
creds = await loginAnthropic(cb);
|
|
111
|
+
else if (provider === "openai")
|
|
112
|
+
creds = await loginOpenAI(cb);
|
|
113
|
+
else if (provider === "gemini")
|
|
114
|
+
creds = await loginGemini(cb);
|
|
115
|
+
else if (provider === "moonshot" || provider === "xai") {
|
|
116
|
+
// Subscription OAuth (Kimi plan / SuperGrok-X Premium) stores under
|
|
117
|
+
// a distinct key so it can coexist with the provider's API key.
|
|
118
|
+
const dual = dualAuthProvider(provider);
|
|
119
|
+
if (!dual)
|
|
120
|
+
throw new Error(`No subscription storage key for ${provider}`);
|
|
121
|
+
creds = provider === "moonshot" ? await loginKimi(cb) : await loginXai(cb);
|
|
122
|
+
storageKey = dual.oauthKey;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw new Error(`OAuth not implemented for ${provider}`);
|
|
126
|
+
}
|
|
127
|
+
await ctx.auth.setCredentials(storageKey, creds);
|
|
128
|
+
// Terminal outcome of a GLOBAL change: every window's login modal
|
|
129
|
+
// should close and its provider list refresh, not just the one
|
|
130
|
+
// that started the flow.
|
|
131
|
+
ctx.broadcastAll("auth_done", { provider });
|
|
132
|
+
ctx.broadcastAll("auth_change", { provider });
|
|
133
|
+
// The OAuth provider's models just became selectable everywhere.
|
|
134
|
+
ctx.broadcastAll("models_change", {});
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
// Deliberately session-scoped: this is the outcome of ONE window's
|
|
138
|
+
// attempt. Another window that never pressed Connect has nothing to
|
|
139
|
+
// show an error about, and its modal correctly still offers login.
|
|
140
|
+
ctx.broadcast("auth_error", {
|
|
141
|
+
provider,
|
|
142
|
+
message: err instanceof Error ? err.message : String(err),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
ctx.oauthInFlight = false;
|
|
147
|
+
ctx.oauthInFlightProviders.delete(provider);
|
|
148
|
+
ctx.pendingCode = null;
|
|
149
|
+
}
|
|
150
|
+
})();
|
|
151
|
+
});
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
if (method === "POST" && url === "/auth/oauth/code") {
|
|
155
|
+
void readBody(req, res).then((raw) => {
|
|
156
|
+
if (raw === null)
|
|
157
|
+
return;
|
|
158
|
+
let code;
|
|
159
|
+
try {
|
|
160
|
+
code = JSON.parse(raw).code ?? "";
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (!ctx.pendingCode) {
|
|
167
|
+
json(res, 409, { error: "no login is awaiting a code" });
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
ctx.pendingCode(code.trim());
|
|
171
|
+
ctx.pendingCode = null;
|
|
172
|
+
json(res, 200, { ok: true });
|
|
173
|
+
});
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
if (method === "POST" && url.startsWith("/mcp/elicit/")) {
|
|
177
|
+
const id = decodeURIComponent(url.slice("/mcp/elicit/".length));
|
|
178
|
+
void readBody(req, res).then((raw) => {
|
|
179
|
+
if (raw === null)
|
|
180
|
+
return;
|
|
181
|
+
let result;
|
|
182
|
+
try {
|
|
183
|
+
const parsed = JSON.parse(raw);
|
|
184
|
+
if (parsed.action !== "accept" &&
|
|
185
|
+
parsed.action !== "decline" &&
|
|
186
|
+
parsed.action !== "cancel") {
|
|
187
|
+
json(res, 400, { error: "action must be accept, decline, or cancel" });
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
result =
|
|
191
|
+
parsed.action === "accept"
|
|
192
|
+
? { action: "accept", content: parsed.content ?? {} }
|
|
193
|
+
: { action: parsed.action };
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// Unknown id means it already timed out or was cancelled by an abort —
|
|
200
|
+
// the tool call has moved on, so the answer has nowhere to go.
|
|
201
|
+
if (!ctx.elicitations.settle(id, result)) {
|
|
202
|
+
json(res, 409, { error: "no elicitation is awaiting a response" });
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
json(res, 200, { ok: true });
|
|
206
|
+
});
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
// Answer (or dismiss) an `ask_user` question band. The turn is blocked on
|
|
210
|
+
// this, so both paths must land: "answer" carries the picked values,
|
|
211
|
+
// "cancel" releases the tool call with no answer.
|
|
212
|
+
if (method === "POST" && url.startsWith("/ask/")) {
|
|
213
|
+
const id = decodeURIComponent(url.slice("/ask/".length));
|
|
214
|
+
void readBody(req, res).then((raw) => {
|
|
215
|
+
if (raw === null)
|
|
216
|
+
return;
|
|
217
|
+
let result;
|
|
218
|
+
try {
|
|
219
|
+
const parsed = JSON.parse(raw);
|
|
220
|
+
if (parsed.action !== "answer" && parsed.action !== "cancel") {
|
|
221
|
+
json(res, 400, { error: "action must be answer or cancel" });
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (parsed.action === "cancel") {
|
|
225
|
+
result = { action: "cancel" };
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// Only strings and string arrays are answers; anything else is a
|
|
229
|
+
// malformed client, not a value to hand the model.
|
|
230
|
+
const answers = {};
|
|
231
|
+
for (const [key, value] of Object.entries(parsed.answers ?? {})) {
|
|
232
|
+
if (typeof value === "string")
|
|
233
|
+
answers[key] = value;
|
|
234
|
+
else if (Array.isArray(value) && value.every((v) => typeof v === "string")) {
|
|
235
|
+
answers[key] = value;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
result = { action: "answer", answers };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (!ctx.asks.settle(id, result)) {
|
|
246
|
+
json(res, 409, { error: "no question is awaiting an answer" });
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
json(res, 200, { ok: true });
|
|
250
|
+
});
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
if (method === "POST" && url === "/auth/logout") {
|
|
254
|
+
void readBody(req, res).then(async (raw) => {
|
|
255
|
+
if (raw === null)
|
|
256
|
+
return;
|
|
257
|
+
let provider;
|
|
258
|
+
let logoutMethod;
|
|
259
|
+
try {
|
|
260
|
+
const body = JSON.parse(raw);
|
|
261
|
+
provider = body.provider ?? "";
|
|
262
|
+
logoutMethod =
|
|
263
|
+
body.method === "oauth" || body.method === "apikey" ? body.method : undefined;
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
json(res, 400, { error: "invalid JSON body" });
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const dual = dualAuthProvider(provider);
|
|
270
|
+
// A dual-auth provider can be disconnected one method at a time: dropping
|
|
271
|
+
// a spent API key should not sign the user out of their subscription, and
|
|
272
|
+
// vice versa. Omitting `method` still clears everything (the plain
|
|
273
|
+
// "Disconnect" action).
|
|
274
|
+
if (logoutMethod !== "apikey") {
|
|
275
|
+
await ctx.auth.clearCredentials(dual ? dual.oauthKey : provider);
|
|
276
|
+
}
|
|
277
|
+
if (logoutMethod !== "oauth") {
|
|
278
|
+
// Non-dual providers store their only credential under the provider id,
|
|
279
|
+
// so this covers both them and a dual provider's API key.
|
|
280
|
+
await ctx.auth.clearCredentials(provider);
|
|
281
|
+
// Xiaomi's API Credits credential lives under a distinct key — clear it
|
|
282
|
+
// too so "disconnect" fully removes both the Token Plan and Credits keys.
|
|
283
|
+
if (provider === "xiaomi")
|
|
284
|
+
await ctx.auth.clearCredentials(XIAOMI_CREDITS_KEY);
|
|
285
|
+
}
|
|
286
|
+
ctx.broadcast("auth_done", { provider });
|
|
287
|
+
json(res, 200, { ok: true });
|
|
288
|
+
});
|
|
289
|
+
return true;
|
|
290
|
+
}
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=auth-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-routes.js","sourceRoot":"","sources":["../../src/app-sidecar/auth-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Provider } from "@prestyj/ai";
|
|
2
|
+
import type { AgentSession } from "../core/agent-session.js";
|
|
3
|
+
import type { RunLifecycle } from "../core/run-lifecycle.js";
|
|
4
|
+
import { type AutopilotVerdict } from "../core/autopilot-verdict.js";
|
|
5
|
+
import { type WorkflowCommandSpec } from "../core/autopilot-gate.js";
|
|
6
|
+
import type { RunOutcome } from "../core/session-manager.js";
|
|
7
|
+
/** Closure state of one session that the autopilot / stranded-queue / task runners use. */
|
|
8
|
+
export interface AutopilotRunnerContext {
|
|
9
|
+
autopilotReviewing: boolean;
|
|
10
|
+
readonly broadcast: (type: string, data: unknown) => void;
|
|
11
|
+
readonly ensureNolanAutoSession: () => Promise<AgentSession>;
|
|
12
|
+
readonly cwd: string;
|
|
13
|
+
gitBranch: string | null;
|
|
14
|
+
session: AgentSession;
|
|
15
|
+
injectedAutopilotPrompts: string[];
|
|
16
|
+
readonly loadWorkflowCommandSpecs: () => Promise<WorkflowCommandSpec[]>;
|
|
17
|
+
autopilotCancelled: boolean;
|
|
18
|
+
readonly broadcastError: (type: "error" | "nolan_error" | "autopilot_error", logLabel: string, err: unknown) => void;
|
|
19
|
+
pendingNolanAutoModel: {
|
|
20
|
+
provider: Provider;
|
|
21
|
+
model: string;
|
|
22
|
+
} | null;
|
|
23
|
+
readonly syncNolanAutoModel: (provider: Provider, model: string) => Promise<void>;
|
|
24
|
+
pendingPlanPath: string | null;
|
|
25
|
+
planGeneration: number;
|
|
26
|
+
pendingPlanContent: string;
|
|
27
|
+
autopilot: boolean;
|
|
28
|
+
readonly runLifecycle: RunLifecycle;
|
|
29
|
+
readonly abortOwnedWork: () => void;
|
|
30
|
+
pendingCancelDrain: {
|
|
31
|
+
generation: number;
|
|
32
|
+
text: string;
|
|
33
|
+
} | null;
|
|
34
|
+
autopilotActive: boolean;
|
|
35
|
+
readonly MAX_AUTOPILOT_ROUNDS: number;
|
|
36
|
+
readonly activateApprovedPlan: (planPath: string | undefined) => Promise<number>;
|
|
37
|
+
readonly clearPendingPlan: () => void;
|
|
38
|
+
readonly planProgressPayload: () => {
|
|
39
|
+
total: number;
|
|
40
|
+
completed: number[];
|
|
41
|
+
};
|
|
42
|
+
readonly IMPLEMENT_PLAN_PROMPT: string;
|
|
43
|
+
readonly runAgent: (label: string, run: () => Promise<void>, reviewPending?: () => boolean) => Promise<void>;
|
|
44
|
+
nolanAutoSession: AgentSession | null;
|
|
45
|
+
readonly reenterPlanModeForRevision: () => Promise<void>;
|
|
46
|
+
readonly finishOwnedGeneration: (generation: number, emitCancelledFallback: boolean, outcome?: RunOutcome) => boolean;
|
|
47
|
+
drainingStrandedQueue: boolean;
|
|
48
|
+
running: boolean;
|
|
49
|
+
readonly offerPendingPlan: () => void;
|
|
50
|
+
readonly deactivateApprovedPlan: () => void;
|
|
51
|
+
taskRunAll: boolean;
|
|
52
|
+
taskRunActive: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface AutopilotRunnerContextApi {
|
|
55
|
+
runAutopilotReview: (originalRequest: string) => Promise<AutopilotVerdict | null>;
|
|
56
|
+
runAutopilotPlanReview: (originalRequest: string) => Promise<AutopilotVerdict | null>;
|
|
57
|
+
runAutopilotCycle: (originalRequest: string) => Promise<void>;
|
|
58
|
+
runStrandedQueue: () => Promise<void>;
|
|
59
|
+
runTaskById: (taskId: string) => Promise<boolean>;
|
|
60
|
+
runTasks: (startId: string | null, all: boolean) => Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
export declare function createAutopilotRunner(ctx: AutopilotRunnerContext): AutopilotRunnerContextApi;
|