@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.
- package/.cdoing/permissions.json +8 -0
- package/dist/callbacks.d.ts +17 -0
- package/dist/callbacks.d.ts.map +1 -0
- package/dist/callbacks.js +265 -0
- package/dist/callbacks.js.map +1 -0
- package/dist/chat.d.ts +27 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +57 -0
- package/dist/chat.js.map +1 -0
- package/dist/commands.d.ts +22 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +452 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +84 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +427 -0
- package/dist/config.js.map +1 -0
- package/dist/help.d.ts +9 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +167 -0
- package/dist/help.js.map +1 -0
- package/dist/history.d.ts +51 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +207 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +220 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +182 -0
- package/dist/oauth.js.map +1 -0
- package/dist/review.d.ts +26 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +198 -0
- package/dist/review.js.map +1 -0
- package/dist/serve.d.ts +23 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +293 -0
- package/dist/serve.js.map +1 -0
- package/dist/tools.d.ts +14 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +57 -0
- package/dist/tools.js.map +1 -0
- package/dist/ui/App.d.ts +24 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +321 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/MessageList.d.ts +14 -0
- package/dist/ui/MessageList.d.ts.map +1 -0
- package/dist/ui/MessageList.js +147 -0
- package/dist/ui/MessageList.js.map +1 -0
- package/dist/ui/SessionBrowser.d.ts +18 -0
- package/dist/ui/SessionBrowser.d.ts.map +1 -0
- package/dist/ui/SessionBrowser.js +149 -0
- package/dist/ui/SessionBrowser.js.map +1 -0
- package/dist/ui/SetupWizard.d.ts +23 -0
- package/dist/ui/SetupWizard.d.ts.map +1 -0
- package/dist/ui/SetupWizard.js +402 -0
- package/dist/ui/SetupWizard.js.map +1 -0
- package/dist/ui/Spinner.d.ts +15 -0
- package/dist/ui/Spinner.d.ts.map +1 -0
- package/dist/ui/Spinner.js +111 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/StatusBar.d.ts +16 -0
- package/dist/ui/StatusBar.d.ts.map +1 -0
- package/dist/ui/StatusBar.js +56 -0
- package/dist/ui/StatusBar.js.map +1 -0
- package/dist/ui/UserInput.d.ts +13 -0
- package/dist/ui/UserInput.d.ts.map +1 -0
- package/dist/ui/UserInput.js +872 -0
- package/dist/ui/UserInput.js.map +1 -0
- package/dist/ui/hooks/helpers.d.ts +55 -0
- package/dist/ui/hooks/helpers.d.ts.map +1 -0
- package/dist/ui/hooks/helpers.js +304 -0
- package/dist/ui/hooks/helpers.js.map +1 -0
- package/dist/ui/hooks/useAgent.d.ts +60 -0
- package/dist/ui/hooks/useAgent.d.ts.map +1 -0
- package/dist/ui/hooks/useAgent.js +213 -0
- package/dist/ui/hooks/useAgent.js.map +1 -0
- package/dist/ui/hooks/useChat.d.ts +74 -0
- package/dist/ui/hooks/useChat.d.ts.map +1 -0
- package/dist/ui/hooks/useChat.js +819 -0
- package/dist/ui/hooks/useChat.js.map +1 -0
- package/dist/ui/theme.d.ts +73 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +214 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/types.d.ts +37 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +33 -0
- package/src/callbacks.ts +294 -0
- package/src/chat.ts +72 -0
- package/src/commands.ts +425 -0
- package/src/config.ts +462 -0
- package/src/help.ts +182 -0
- package/src/history.ts +205 -0
- package/src/index.ts +248 -0
- package/src/oauth.ts +164 -0
- package/src/review.ts +233 -0
- package/src/serve.ts +290 -0
- package/src/tools.ts +104 -0
- package/src/ui/App.tsx +426 -0
- package/src/ui/MessageList.tsx +222 -0
- package/src/ui/SessionBrowser.tsx +161 -0
- package/src/ui/SetupWizard.tsx +412 -0
- package/src/ui/Spinner.tsx +103 -0
- package/src/ui/StatusBar.tsx +106 -0
- package/src/ui/UserInput.tsx +954 -0
- package/src/ui/hooks/helpers.ts +271 -0
- package/src/ui/hooks/useAgent.ts +270 -0
- package/src/ui/hooks/useChat.ts +943 -0
- package/src/ui/theme.ts +326 -0
- package/src/ui/types.ts +41 -0
- 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"}
|