@cdoing/cli 0.1.0

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.
Files changed (118) hide show
  1. package/.cdoing/permissions.json +8 -0
  2. package/dist/callbacks.d.ts +17 -0
  3. package/dist/callbacks.d.ts.map +1 -0
  4. package/dist/callbacks.js +265 -0
  5. package/dist/callbacks.js.map +1 -0
  6. package/dist/chat.d.ts +27 -0
  7. package/dist/chat.d.ts.map +1 -0
  8. package/dist/chat.js +57 -0
  9. package/dist/chat.js.map +1 -0
  10. package/dist/commands.d.ts +22 -0
  11. package/dist/commands.d.ts.map +1 -0
  12. package/dist/commands.js +452 -0
  13. package/dist/commands.js.map +1 -0
  14. package/dist/config.d.ts +84 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +427 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/help.d.ts +9 -0
  19. package/dist/help.d.ts.map +1 -0
  20. package/dist/help.js +167 -0
  21. package/dist/help.js.map +1 -0
  22. package/dist/history.d.ts +51 -0
  23. package/dist/history.d.ts.map +1 -0
  24. package/dist/history.js +207 -0
  25. package/dist/history.js.map +1 -0
  26. package/dist/index.d.ts +7 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +220 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/oauth.d.ts +13 -0
  31. package/dist/oauth.d.ts.map +1 -0
  32. package/dist/oauth.js +182 -0
  33. package/dist/oauth.js.map +1 -0
  34. package/dist/review.d.ts +26 -0
  35. package/dist/review.d.ts.map +1 -0
  36. package/dist/review.js +198 -0
  37. package/dist/review.js.map +1 -0
  38. package/dist/serve.d.ts +23 -0
  39. package/dist/serve.d.ts.map +1 -0
  40. package/dist/serve.js +293 -0
  41. package/dist/serve.js.map +1 -0
  42. package/dist/tools.d.ts +14 -0
  43. package/dist/tools.d.ts.map +1 -0
  44. package/dist/tools.js +57 -0
  45. package/dist/tools.js.map +1 -0
  46. package/dist/ui/App.d.ts +24 -0
  47. package/dist/ui/App.d.ts.map +1 -0
  48. package/dist/ui/App.js +321 -0
  49. package/dist/ui/App.js.map +1 -0
  50. package/dist/ui/MessageList.d.ts +14 -0
  51. package/dist/ui/MessageList.d.ts.map +1 -0
  52. package/dist/ui/MessageList.js +147 -0
  53. package/dist/ui/MessageList.js.map +1 -0
  54. package/dist/ui/SessionBrowser.d.ts +18 -0
  55. package/dist/ui/SessionBrowser.d.ts.map +1 -0
  56. package/dist/ui/SessionBrowser.js +149 -0
  57. package/dist/ui/SessionBrowser.js.map +1 -0
  58. package/dist/ui/SetupWizard.d.ts +23 -0
  59. package/dist/ui/SetupWizard.d.ts.map +1 -0
  60. package/dist/ui/SetupWizard.js +402 -0
  61. package/dist/ui/SetupWizard.js.map +1 -0
  62. package/dist/ui/Spinner.d.ts +15 -0
  63. package/dist/ui/Spinner.d.ts.map +1 -0
  64. package/dist/ui/Spinner.js +111 -0
  65. package/dist/ui/Spinner.js.map +1 -0
  66. package/dist/ui/StatusBar.d.ts +16 -0
  67. package/dist/ui/StatusBar.d.ts.map +1 -0
  68. package/dist/ui/StatusBar.js +56 -0
  69. package/dist/ui/StatusBar.js.map +1 -0
  70. package/dist/ui/UserInput.d.ts +13 -0
  71. package/dist/ui/UserInput.d.ts.map +1 -0
  72. package/dist/ui/UserInput.js +872 -0
  73. package/dist/ui/UserInput.js.map +1 -0
  74. package/dist/ui/hooks/helpers.d.ts +55 -0
  75. package/dist/ui/hooks/helpers.d.ts.map +1 -0
  76. package/dist/ui/hooks/helpers.js +304 -0
  77. package/dist/ui/hooks/helpers.js.map +1 -0
  78. package/dist/ui/hooks/useAgent.d.ts +60 -0
  79. package/dist/ui/hooks/useAgent.d.ts.map +1 -0
  80. package/dist/ui/hooks/useAgent.js +213 -0
  81. package/dist/ui/hooks/useAgent.js.map +1 -0
  82. package/dist/ui/hooks/useChat.d.ts +74 -0
  83. package/dist/ui/hooks/useChat.d.ts.map +1 -0
  84. package/dist/ui/hooks/useChat.js +819 -0
  85. package/dist/ui/hooks/useChat.js.map +1 -0
  86. package/dist/ui/theme.d.ts +73 -0
  87. package/dist/ui/theme.d.ts.map +1 -0
  88. package/dist/ui/theme.js +214 -0
  89. package/dist/ui/theme.js.map +1 -0
  90. package/dist/ui/types.d.ts +37 -0
  91. package/dist/ui/types.d.ts.map +1 -0
  92. package/dist/ui/types.js +3 -0
  93. package/dist/ui/types.js.map +1 -0
  94. package/package.json +33 -0
  95. package/src/callbacks.ts +294 -0
  96. package/src/chat.ts +72 -0
  97. package/src/commands.ts +425 -0
  98. package/src/config.ts +462 -0
  99. package/src/help.ts +182 -0
  100. package/src/history.ts +205 -0
  101. package/src/index.ts +248 -0
  102. package/src/oauth.ts +164 -0
  103. package/src/review.ts +233 -0
  104. package/src/serve.ts +290 -0
  105. package/src/tools.ts +104 -0
  106. package/src/ui/App.tsx +426 -0
  107. package/src/ui/MessageList.tsx +222 -0
  108. package/src/ui/SessionBrowser.tsx +161 -0
  109. package/src/ui/SetupWizard.tsx +412 -0
  110. package/src/ui/Spinner.tsx +103 -0
  111. package/src/ui/StatusBar.tsx +106 -0
  112. package/src/ui/UserInput.tsx +954 -0
  113. package/src/ui/hooks/helpers.ts +271 -0
  114. package/src/ui/hooks/useAgent.ts +270 -0
  115. package/src/ui/hooks/useChat.ts +943 -0
  116. package/src/ui/theme.ts +326 -0
  117. package/src/ui/types.ts +41 -0
  118. package/tsconfig.json +18 -0
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * SessionBrowser — Interactive TUI for browsing and selecting conversations.
4
+ *
5
+ * Triggered by /ls in chat or `cdoing ls` CLI command.
6
+ * Arrow keys to navigate, Enter to load, d to delete, f to fork, Esc to close.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.SessionBrowser = void 0;
43
+ const react_1 = __importStar(require("react"));
44
+ const ink_1 = require("ink");
45
+ const theme_1 = require("./theme");
46
+ function formatDate(ts) {
47
+ const d = new Date(ts);
48
+ const now = new Date();
49
+ const diffMs = now.getTime() - d.getTime();
50
+ const diffMins = Math.floor(diffMs / 60000);
51
+ const diffHours = Math.floor(diffMs / 3600000);
52
+ const diffDays = Math.floor(diffMs / 86400000);
53
+ if (diffMins < 1)
54
+ return "just now";
55
+ if (diffMins < 60)
56
+ return `${diffMins}m ago`;
57
+ if (diffHours < 24)
58
+ return `${diffHours}h ago`;
59
+ if (diffDays < 7)
60
+ return `${diffDays}d ago`;
61
+ return d.toLocaleDateString("en-US", { month: "short", day: "numeric" });
62
+ }
63
+ const SessionBrowser = ({ conversations, onSelect, onDelete, onFork, onClose, }) => {
64
+ const [selectedIdx, setSelectedIdx] = (0, react_1.useState)(0);
65
+ const [confirmDelete, setConfirmDelete] = (0, react_1.useState)(null);
66
+ const termHeight = (process.stdout.rows || 24) - 8;
67
+ const maxVisible = Math.max(5, termHeight);
68
+ // Scroll window
69
+ const scrollOffset = Math.max(0, selectedIdx - Math.floor(maxVisible / 2));
70
+ const visible = conversations.slice(scrollOffset, scrollOffset + maxVisible);
71
+ (0, ink_1.useInput)((0, react_1.useCallback)((char, key) => {
72
+ if (confirmDelete) {
73
+ if (char === "y" || char === "Y") {
74
+ onDelete(confirmDelete);
75
+ setConfirmDelete(null);
76
+ setSelectedIdx((i) => Math.min(i, Math.max(0, conversations.length - 2)));
77
+ }
78
+ else {
79
+ setConfirmDelete(null);
80
+ }
81
+ return;
82
+ }
83
+ if (key.escape) {
84
+ onClose();
85
+ return;
86
+ }
87
+ if (key.upArrow || (key.ctrl && char === "p")) {
88
+ setSelectedIdx((i) => Math.max(0, i - 1));
89
+ return;
90
+ }
91
+ if (key.downArrow || (key.ctrl && char === "n")) {
92
+ setSelectedIdx((i) => Math.min(conversations.length - 1, i + 1));
93
+ return;
94
+ }
95
+ if (key.return && conversations[selectedIdx]) {
96
+ onSelect(conversations[selectedIdx].id);
97
+ return;
98
+ }
99
+ if (char === "d" && conversations[selectedIdx]) {
100
+ setConfirmDelete(conversations[selectedIdx].id);
101
+ return;
102
+ }
103
+ if (char === "f" && conversations[selectedIdx]) {
104
+ onFork(conversations[selectedIdx].id);
105
+ return;
106
+ }
107
+ }, [confirmDelete, conversations, selectedIdx, onSelect, onDelete, onFork, onClose]));
108
+ const t = (0, theme_1.getTheme)();
109
+ if (conversations.length === 0) {
110
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
111
+ react_1.default.createElement(ink_1.Text, { color: t.accent, bold: true }, " \uD83D\uDCDA Session Browser"),
112
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, " No saved conversations."),
113
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, " Press Esc to close.")));
114
+ }
115
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
116
+ react_1.default.createElement(ink_1.Box, null,
117
+ react_1.default.createElement(ink_1.Text, { color: t.accent, bold: true }, " \uD83D\uDCDA Sessions "),
118
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, `(${conversations.length} total)`)),
119
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim },
120
+ " ",
121
+ "─".repeat(60)),
122
+ confirmDelete ? (react_1.default.createElement(ink_1.Box, { paddingLeft: 2 },
123
+ react_1.default.createElement(ink_1.Text, { color: t.error }, "Delete this session? "),
124
+ react_1.default.createElement(ink_1.Text, { color: t.warning }, "[y/N] "))) : null,
125
+ visible.map((conv, i) => {
126
+ const globalIdx = scrollOffset + i;
127
+ const isSelected = globalIdx === selectedIdx;
128
+ const msgCount = conv.messages.filter((m) => m.role === "user").length;
129
+ const date = formatDate(conv.updatedAt);
130
+ const title = conv.title.length > 42 ? conv.title.substring(0, 39) + "…" : conv.title;
131
+ return (react_1.default.createElement(ink_1.Box, { key: conv.id, paddingLeft: 2 }, isSelected ? (react_1.default.createElement(ink_1.Box, null,
132
+ react_1.default.createElement(ink_1.Text, { color: t.accent, bold: true }, "▶ "),
133
+ react_1.default.createElement(ink_1.Text, { backgroundColor: t.selectedBg, color: t.selected === "white" ? "black" : t.selected }, ` ${title.padEnd(42)} `),
134
+ react_1.default.createElement(ink_1.Text, { color: t.sessionDate }, ` ${date.padEnd(8)} `),
135
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, `${msgCount}msg`))) : (react_1.default.createElement(ink_1.Box, null,
136
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, " "),
137
+ react_1.default.createElement(ink_1.Text, { color: t.sessionTitle }, ` ${title.padEnd(42)} `),
138
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, ` ${date.padEnd(8)} `),
139
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, `${msgCount}msg`)))));
140
+ }),
141
+ conversations.length > maxVisible ? (react_1.default.createElement(ink_1.Box, { paddingLeft: 2 },
142
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, ` ${scrollOffset + 1}–${Math.min(scrollOffset + maxVisible, conversations.length)} of ${conversations.length}`))) : null,
143
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim },
144
+ " ",
145
+ "─".repeat(60)),
146
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, " ↑/↓ navigate Enter=load f=fork d=delete Esc=close")));
147
+ };
148
+ exports.SessionBrowser = SessionBrowser;
149
+ //# sourceMappingURL=SessionBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionBrowser.js","sourceRoot":"","sources":["../../src/ui/SessionBrowser.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SetupWizard — interactive in-TUI wizard for provider / model / API key / OAuth.
3
+ * Triggered by /setup. Arrow keys navigate, Enter selects, Esc cancels.
4
+ *
5
+ * Flow:
6
+ * Anthropic → 1. Provider 2. Auth method 3. Model (filtered) 4. API key or OAuth
7
+ * Others → 1. Provider 2. Model 3. API key
8
+ * Ollama → 1. Provider 2. Model (no key needed)
9
+ */
10
+ import React from "react";
11
+ export interface SetupWizardProps {
12
+ currentProvider: string;
13
+ currentModel: string;
14
+ onDone: (result: {
15
+ provider: string;
16
+ model: string;
17
+ apiKey?: string;
18
+ oauthToken?: string;
19
+ }) => void;
20
+ onCancel: () => void;
21
+ }
22
+ export declare const SetupWizard: React.FC<SetupWizardProps>;
23
+ //# sourceMappingURL=SetupWizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupWizard.d.ts","sourceRoot":"","sources":["../../src/ui/SetupWizard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AA2GxE,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACpG,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAkQlD,CAAC"}
@@ -0,0 +1,402 @@
1
+ "use strict";
2
+ /**
3
+ * SetupWizard — interactive in-TUI wizard for provider / model / API key / OAuth.
4
+ * Triggered by /setup. Arrow keys navigate, Enter selects, Esc cancels.
5
+ *
6
+ * Flow:
7
+ * Anthropic → 1. Provider 2. Auth method 3. Model (filtered) 4. API key or OAuth
8
+ * Others → 1. Provider 2. Model 3. API key
9
+ * Ollama → 1. Provider 2. Model (no key needed)
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.SetupWizard = void 0;
46
+ const react_1 = __importStar(require("react"));
47
+ const ink_1 = require("ink");
48
+ const config_1 = require("../config");
49
+ const oauth_1 = require("../oauth");
50
+ const theme_1 = require("./theme");
51
+ // ── Static data ───────────────────────────────────────────────────────────────
52
+ const PROVIDERS = [
53
+ { value: "anthropic", label: "Anthropic (Claude)", hint: "claude-sonnet-4-6, claude-opus-4-6" },
54
+ { value: "openai", label: "OpenAI (GPT)", hint: "gpt-4o, gpt-4o-mini" },
55
+ { value: "google", label: "Google (Gemini)", hint: "gemini-2.0-flash, gemini-1.5-pro" },
56
+ { value: "ollama", label: "Ollama (local)", hint: "llama3.1, mistral, codellama" },
57
+ ];
58
+ const AUTH_METHODS = [
59
+ { value: "apikey", label: "API key", hint: "all models available · console.anthropic.com" },
60
+ { value: "oauth", label: "OAuth", hint: "Claude Pro/Max · opens browser" },
61
+ ];
62
+ // All models per provider
63
+ const ALL_MODELS = {
64
+ anthropic: [
65
+ { value: "claude-sonnet-4-6", label: "Claude Sonnet 4.6", hint: "recommended · fast & smart" },
66
+ { value: "claude-opus-4-6", label: "Claude Opus 4.6", hint: "most capable" },
67
+ { value: "claude-haiku-4-5", label: "Claude Haiku 4.5", hint: "fastest" },
68
+ ],
69
+ openai: [
70
+ { value: "gpt-4o", label: "GPT-4o", hint: "recommended" },
71
+ { value: "gpt-4o-mini", label: "GPT-4o mini", hint: "fastest · cheapest" },
72
+ { value: "o3-mini", label: "o3-mini", hint: "reasoning" },
73
+ ],
74
+ google: [
75
+ { value: "gemini-2.0-flash", label: "Gemini 2.0 Flash", hint: "recommended · fast" },
76
+ { value: "gemini-1.5-pro", label: "Gemini 1.5 Pro", hint: "most capable" },
77
+ { value: "gemini-1.5-flash", label: "Gemini 1.5 Flash", hint: "fastest" },
78
+ ],
79
+ ollama: [
80
+ { value: "llama3.1", label: "LLaMA 3.1", hint: "general purpose" },
81
+ { value: "mistral", label: "Mistral", hint: "fast & capable" },
82
+ { value: "codellama", label: "CodeLlama", hint: "code-focused" },
83
+ { value: "phi3", label: "Phi-3", hint: "small & fast" },
84
+ ],
85
+ };
86
+ // OAuth only supports Haiku currently
87
+ const OAUTH_MODELS = [
88
+ { value: "claude-haiku-4-5", label: "Claude Haiku 4.5", hint: "only model supported with OAuth" },
89
+ ];
90
+ const KEY_URLS = {
91
+ anthropic: "https://console.anthropic.com/settings/keys",
92
+ openai: "https://platform.openai.com/api-keys",
93
+ google: "https://aistudio.google.com/apikey",
94
+ };
95
+ function Menu({ title, items, selectedIdx, }) {
96
+ const t = (0, theme_1.getTheme)();
97
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingLeft: 2 },
98
+ react_1.default.createElement(ink_1.Text, { color: t.accent, bold: true }, title),
99
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, "─".repeat(50)),
100
+ items.map((item, i) => {
101
+ const isSelected = i === selectedIdx;
102
+ return (react_1.default.createElement(ink_1.Box, { key: item.value },
103
+ isSelected
104
+ ? react_1.default.createElement(ink_1.Text, { color: t.accent, bold: true }, " ❯ ")
105
+ : react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, " "),
106
+ isSelected
107
+ ? react_1.default.createElement(ink_1.Text, { color: t.text, bold: true }, item.label)
108
+ : react_1.default.createElement(ink_1.Text, { color: t.text }, item.label),
109
+ item.hint
110
+ ? react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, ` ${item.hint}`)
111
+ : null));
112
+ }),
113
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, "─".repeat(50)),
114
+ react_1.default.createElement(ink_1.Text, { dimColor: t.useDim, color: t.textDim }, "↑/↓ navigate Enter select Esc cancel")));
115
+ }
116
+ const SetupWizard = ({ currentProvider, currentModel, onDone, onCancel, }) => {
117
+ const initProviderIdx = Math.max(0, PROVIDERS.findIndex(p => p.value === currentProvider));
118
+ const [step, setStep] = (0, react_1.useState)("provider");
119
+ const [providerIdx, setProviderIdx] = (0, react_1.useState)(initProviderIdx);
120
+ const [authIdx, setAuthIdx] = (0, react_1.useState)(0);
121
+ const [modelIdx, setModelIdx] = (0, react_1.useState)(0);
122
+ const [chosenProvider, setChosenProvider] = (0, react_1.useState)(currentProvider);
123
+ const [chosenAuthMethod, setChosenAuthMethod] = (0, react_1.useState)("apikey");
124
+ const [chosenModel, setChosenModel] = (0, react_1.useState)(currentModel);
125
+ // API key step
126
+ const [apiKeyInput, setApiKeyInput] = (0, react_1.useState)("");
127
+ const [showKey, setShowKey] = (0, react_1.useState)(false);
128
+ // OAuth paste step
129
+ const [oauthUrl, setOauthUrl] = (0, react_1.useState)("");
130
+ const [oauthVerifier, setOauthVerifier] = (0, react_1.useState)("");
131
+ const [oauthCodeInput, setOauthCodeInput] = (0, react_1.useState)("");
132
+ const [showCode, setShowCode] = (0, react_1.useState)(false);
133
+ const [oauthError, setOauthError] = (0, react_1.useState)("");
134
+ const exchangingRef = (0, react_1.useRef)(false);
135
+ // Generate OAuth URL and open browser when entering oauth-paste step
136
+ (0, react_1.useEffect)(() => {
137
+ if (step !== "oauth-paste")
138
+ return;
139
+ const { url, codeVerifier } = (0, oauth_1.generateOAuthUrl)();
140
+ setOauthUrl(url);
141
+ setOauthVerifier(codeVerifier);
142
+ setOauthCodeInput("");
143
+ setOauthError("");
144
+ openBrowser(url);
145
+ // eslint-disable-next-line react-hooks/exhaustive-deps
146
+ }, [step]);
147
+ // Returns the model list for the current provider + auth selection
148
+ const getModels = (0, react_1.useCallback)((provider, authMethod) => {
149
+ if (provider === "anthropic" && authMethod === "oauth")
150
+ return OAUTH_MODELS;
151
+ return ALL_MODELS[provider] || [];
152
+ }, []);
153
+ (0, ink_1.useInput)((0, react_1.useCallback)((char, key) => {
154
+ if (key.escape) {
155
+ onCancel();
156
+ return;
157
+ }
158
+ // ── 1. Provider ───────────────────────────────────────────────────────
159
+ if (step === "provider") {
160
+ if (key.upArrow) {
161
+ setProviderIdx(i => Math.max(0, i - 1));
162
+ return;
163
+ }
164
+ if (key.downArrow) {
165
+ setProviderIdx(i => Math.min(PROVIDERS.length - 1, i + 1));
166
+ return;
167
+ }
168
+ if (key.return) {
169
+ const p = PROVIDERS[providerIdx].value;
170
+ setChosenProvider(p);
171
+ setAuthIdx(0);
172
+ if (p === "anthropic") {
173
+ setStep("auth-method");
174
+ }
175
+ else {
176
+ // Non-Anthropic: skip auth-method, go straight to model
177
+ const models = ALL_MODELS[p] || [];
178
+ setModelIdx(Math.max(0, models.findIndex(m => m.value === currentModel)));
179
+ setStep("model");
180
+ }
181
+ return;
182
+ }
183
+ }
184
+ // ── 2. Auth method (Anthropic only) ───────────────────────────────────
185
+ if (step === "auth-method") {
186
+ if (key.upArrow) {
187
+ setAuthIdx(i => Math.max(0, i - 1));
188
+ return;
189
+ }
190
+ if (key.downArrow) {
191
+ setAuthIdx(i => Math.min(AUTH_METHODS.length - 1, i + 1));
192
+ return;
193
+ }
194
+ if (key.return) {
195
+ const auth = AUTH_METHODS[authIdx].value;
196
+ setChosenAuthMethod(auth);
197
+ const models = getModels("anthropic", auth);
198
+ // Pre-select current model if available, else 0
199
+ setModelIdx(Math.max(0, models.findIndex(m => m.value === currentModel)));
200
+ setStep("model");
201
+ return;
202
+ }
203
+ }
204
+ // ── 3. Model ──────────────────────────────────────────────────────────
205
+ if (step === "model") {
206
+ const models = getModels(chosenProvider, chosenAuthMethod);
207
+ if (key.upArrow) {
208
+ setModelIdx(i => Math.max(0, i - 1));
209
+ return;
210
+ }
211
+ if (key.downArrow) {
212
+ setModelIdx(i => Math.min(models.length - 1, i + 1));
213
+ return;
214
+ }
215
+ if (key.return) {
216
+ const m = models[modelIdx]?.value || "";
217
+ setChosenModel(m);
218
+ if (chosenProvider === "ollama") {
219
+ _save(chosenProvider, m, undefined);
220
+ onDone({ provider: chosenProvider, model: m });
221
+ setStep("done");
222
+ }
223
+ else if (chosenAuthMethod === "oauth") {
224
+ exchangingRef.current = false;
225
+ setStep("oauth-paste");
226
+ }
227
+ else {
228
+ setStep("apikey");
229
+ }
230
+ return;
231
+ }
232
+ }
233
+ // ── 4a. API key entry ─────────────────────────────────────────────────
234
+ if (step === "apikey") {
235
+ if (key.return) {
236
+ const trimmed = apiKeyInput.trim();
237
+ _save(chosenProvider, chosenModel, trimmed || undefined);
238
+ onDone({ provider: chosenProvider, model: chosenModel, apiKey: trimmed || undefined });
239
+ setStep("done");
240
+ return;
241
+ }
242
+ if (key.backspace || key.delete) {
243
+ setApiKeyInput(k => k.slice(0, -1));
244
+ return;
245
+ }
246
+ if (key.ctrl && char === "s") {
247
+ setShowKey(v => !v);
248
+ return;
249
+ }
250
+ if (char && !key.ctrl && !key.meta) {
251
+ setApiKeyInput(k => k + char);
252
+ return;
253
+ }
254
+ }
255
+ // ── 4b. OAuth paste ───────────────────────────────────────────────────
256
+ if (step === "oauth-paste") {
257
+ if (key.return) {
258
+ const code = oauthCodeInput.trim();
259
+ if (!code || exchangingRef.current)
260
+ return;
261
+ exchangingRef.current = true;
262
+ setStep("oauth-exchanging");
263
+ (0, oauth_1.exchangeOAuthCode)(code, oauthVerifier)
264
+ .then((tokens) => {
265
+ _saveOAuth(chosenProvider, chosenModel);
266
+ setTimeout(() => {
267
+ onDone({ provider: chosenProvider, model: chosenModel, oauthToken: tokens.access_token });
268
+ }, 600);
269
+ })
270
+ .catch((err) => {
271
+ exchangingRef.current = false;
272
+ setOauthError(err.message);
273
+ setStep("oauth-paste");
274
+ });
275
+ return;
276
+ }
277
+ if (key.backspace || key.delete) {
278
+ setOauthCodeInput(k => k.slice(0, -1));
279
+ return;
280
+ }
281
+ if (key.ctrl && char === "s") {
282
+ setShowCode(v => !v);
283
+ return;
284
+ }
285
+ if (char && !key.ctrl && !key.meta) {
286
+ setOauthCodeInput(k => k + char);
287
+ return;
288
+ }
289
+ }
290
+ }, [step, providerIdx, authIdx, modelIdx, chosenProvider, chosenAuthMethod,
291
+ chosenModel, apiKeyInput, oauthCodeInput, oauthVerifier,
292
+ getModels, onCancel, onDone]));
293
+ // ── Step label helpers ────────────────────────────────────────────────────
294
+ // Total steps: Anthropic=4, Ollama=2, others=3
295
+ const total = chosenProvider === "anthropic" ? 4 : chosenProvider === "ollama" ? 2 : 3;
296
+ // Step number depends on flow
297
+ const stepNum = {
298
+ "provider": `1/${total}`,
299
+ "auth-method": "2/4",
300
+ "model": chosenProvider === "anthropic" ? "3/4" : chosenProvider === "ollama" ? "2/2" : "2/3",
301
+ "apikey": chosenProvider === "anthropic" ? "4/4" : "3/3",
302
+ "oauth-paste": "4/4",
303
+ "oauth-exchanging": "4/4",
304
+ "done": "",
305
+ };
306
+ // ── Renders ───────────────────────────────────────────────────────────────
307
+ if (step === "provider") {
308
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 1 },
309
+ react_1.default.createElement(ink_1.Text, { color: (0, theme_1.getTheme)().accent, bold: true }, ` ⚙ Setup Wizard (${stepNum.provider} — Provider)`),
310
+ react_1.default.createElement(Menu, { title: " Choose a provider", items: PROVIDERS, selectedIdx: providerIdx })));
311
+ }
312
+ if (step === "auth-method") {
313
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 1 },
314
+ react_1.default.createElement(ink_1.Text, { color: (0, theme_1.getTheme)().accent, bold: true }, ` ⚙ Setup Wizard (${stepNum["auth-method"]} — Authentication)`),
315
+ react_1.default.createElement(Menu, { title: " How do you want to authenticate?", items: AUTH_METHODS, selectedIdx: authIdx })));
316
+ }
317
+ if (step === "model") {
318
+ const models = getModels(chosenProvider, chosenAuthMethod);
319
+ const title = chosenProvider === "anthropic" && chosenAuthMethod === "oauth"
320
+ ? " Choose a model (OAuth supports Haiku only)"
321
+ : ` Choose a model for ${chosenProvider}`;
322
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 1 },
323
+ react_1.default.createElement(ink_1.Text, { color: (0, theme_1.getTheme)().accent, bold: true }, ` ⚙ Setup Wizard (${stepNum.model} — Model)`),
324
+ react_1.default.createElement(Menu, { title: title, items: models, selectedIdx: modelIdx })));
325
+ }
326
+ if (step === "apikey") {
327
+ const tt = (0, theme_1.getTheme)();
328
+ const masked = showKey ? apiKeyInput : apiKeyInput.replace(/./g, "●");
329
+ const url = KEY_URLS[chosenProvider];
330
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 1, paddingLeft: 2 },
331
+ react_1.default.createElement(ink_1.Text, { color: tt.accent, bold: true }, ` ⚙ Setup Wizard (${stepNum.apikey} — API Key)`),
332
+ react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, "─".repeat(50)),
333
+ react_1.default.createElement(ink_1.Text, { color: tt.text }, ` Provider: ${chosenProvider} Model: ${chosenModel}`),
334
+ url ? react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, ` Get a key: ${url}`) : null,
335
+ react_1.default.createElement(ink_1.Text, null, " "),
336
+ react_1.default.createElement(ink_1.Box, null,
337
+ react_1.default.createElement(ink_1.Text, { color: tt.prompt }, " API key: "),
338
+ react_1.default.createElement(ink_1.Text, { color: tt.text }, masked || " "),
339
+ react_1.default.createElement(ink_1.Text, { color: tt.cursor }, "▊")),
340
+ react_1.default.createElement(ink_1.Text, null, " "),
341
+ react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, " Paste key then Enter · Ctrl+S toggle visible · Enter alone to skip"),
342
+ react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, " Esc cancel")));
343
+ }
344
+ if (step === "oauth-paste") {
345
+ const tt = (0, theme_1.getTheme)();
346
+ const maskedCode = showCode ? oauthCodeInput : oauthCodeInput.replace(/./g, "●");
347
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 1, paddingLeft: 2 },
348
+ react_1.default.createElement(ink_1.Text, { color: tt.accent, bold: true }, ` ⚙ Setup Wizard (${stepNum["oauth-paste"]} — OAuth)`),
349
+ react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, "─".repeat(50)),
350
+ react_1.default.createElement(ink_1.Text, { color: tt.text }, " 1. Browser opening to Claude login…"),
351
+ oauthUrl
352
+ ? react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, ` If it didn't open: ${oauthUrl.substring(0, 72)}…`)
353
+ : null,
354
+ react_1.default.createElement(ink_1.Text, { color: tt.text }, " 2. Approve → you'll land on a page with a code in the URL"),
355
+ react_1.default.createElement(ink_1.Text, { color: tt.text }, " 3. Copy the code= value from the URL and paste below"),
356
+ oauthError
357
+ ? react_1.default.createElement(ink_1.Text, { color: tt.error }, `\n ✗ ${oauthError}`)
358
+ : null,
359
+ react_1.default.createElement(ink_1.Text, null, " "),
360
+ react_1.default.createElement(ink_1.Box, null,
361
+ react_1.default.createElement(ink_1.Text, { color: tt.prompt }, " Code: "),
362
+ react_1.default.createElement(ink_1.Text, { color: tt.text }, maskedCode || " "),
363
+ react_1.default.createElement(ink_1.Text, { color: tt.cursor }, "▊")),
364
+ react_1.default.createElement(ink_1.Text, null, " "),
365
+ react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, " Paste code then Enter · Ctrl+S toggle visible · Esc cancel")));
366
+ }
367
+ if (step === "oauth-exchanging") {
368
+ const tt = (0, theme_1.getTheme)();
369
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingY: 1, paddingLeft: 2 },
370
+ react_1.default.createElement(ink_1.Text, { color: tt.accent, bold: true }, ` ⚙ Setup Wizard (${stepNum["oauth-exchanging"]} — OAuth)`),
371
+ react_1.default.createElement(ink_1.Text, { dimColor: tt.useDim, color: tt.textDim }, "─".repeat(50)),
372
+ react_1.default.createElement(ink_1.Text, { color: tt.warning }, " Exchanging code for tokens…")));
373
+ }
374
+ return null;
375
+ };
376
+ exports.SetupWizard = SetupWizard;
377
+ // ── Helpers ───────────────────────────────────────────────────────────────────
378
+ function _save(provider, model, apiKey) {
379
+ const config = (0, config_1.loadConfig)();
380
+ config.provider = provider;
381
+ config.model = model || undefined;
382
+ if (apiKey) {
383
+ config.apiKeys = config.apiKeys || {};
384
+ config.apiKeys[provider] = apiKey;
385
+ }
386
+ (0, config_1.saveConfig)(config);
387
+ }
388
+ /** OAuth: save provider/model only — token is already in keychain via exchangeOAuthCode */
389
+ function _saveOAuth(provider, model) {
390
+ const config = (0, config_1.loadConfig)();
391
+ config.provider = provider;
392
+ config.model = model || undefined;
393
+ (0, config_1.saveConfig)(config);
394
+ }
395
+ function openBrowser(url) {
396
+ const { exec } = require("child_process");
397
+ const cmd = process.platform === "darwin" ? `open "${url}"`
398
+ : process.platform === "win32" ? `start "" "${url}"`
399
+ : `xdg-open "${url}"`;
400
+ exec(cmd, () => { });
401
+ }
402
+ //# sourceMappingURL=SetupWizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupWizard.js","sourceRoot":"","sources":["../../src/ui/SetupWizard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ interface SpinnerProps {
3
+ label: string;
4
+ color?: string;
5
+ startTime?: number;
6
+ }
7
+ export declare const Spinner: React.FC<SpinnerProps>;
8
+ interface ToolSpinnerProps {
9
+ name: string;
10
+ preview: string;
11
+ status: "running" | "done" | "error";
12
+ }
13
+ export declare const ToolSpinner: React.FC<ToolSpinnerProps>;
14
+ export {};
15
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../src/ui/Spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAWnD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6B1C,CAAC;AAEF,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AA0BD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAwBlD,CAAC"}