@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,452 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Subcommand Handlers
4
+ *
5
+ * Handlers for: cdoing config, cdoing init, cdoing doctor
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.handleConfigCommand = handleConfigCommand;
45
+ exports.handleInit = handleInit;
46
+ exports.handleCompletions = handleCompletions;
47
+ exports.handleDoctor = handleDoctor;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const os = __importStar(require("os"));
51
+ const chalk_1 = __importDefault(require("chalk"));
52
+ const figlet_1 = __importDefault(require("figlet"));
53
+ const config_1 = require("./config");
54
+ const ai_1 = require("@cdoing/ai");
55
+ const CONFIG_DIR = path.join(os.homedir(), ".cdoing");
56
+ const PROJECT_CONFIG_DIR = ".cdoing";
57
+ const PROJECT_CONFIG_FILE = "config.md";
58
+ /**
59
+ * Handle `cdoing config <action> [key] [value]`
60
+ */
61
+ function handleConfigCommand(action, key, value) {
62
+ switch (action) {
63
+ case "list":
64
+ console.log();
65
+ console.log(chalk_1.default.hex("#4FC3F7").bold(" ⚙️ Stored Config"));
66
+ console.log(chalk_1.default.hex("#78909C")(" ─────────────────────────────────────"));
67
+ for (const line of (0, config_1.getStoredConfigDisplay)()) {
68
+ console.log(chalk_1.default.hex("#B0BEC5")(` ${line}`));
69
+ }
70
+ console.log();
71
+ break;
72
+ case "get":
73
+ if (!key) {
74
+ console.log(chalk_1.default.hex("#EF5350")("\n ❌ Usage: cdoing config get <key>"));
75
+ console.log(chalk_1.default.hex("#78909C")(" Keys: provider, model, mode, api-key, base-url\n"));
76
+ return;
77
+ }
78
+ const config = (0, config_1.loadConfig)();
79
+ let val;
80
+ switch (key) {
81
+ case "provider":
82
+ val = config.provider;
83
+ break;
84
+ case "model":
85
+ val = config.model;
86
+ break;
87
+ case "mode":
88
+ val = config.mode;
89
+ break;
90
+ case "base-url":
91
+ val = config.baseUrl;
92
+ break;
93
+ case "api-key":
94
+ const provider = config.provider || "anthropic";
95
+ val = config.apiKeys?.[provider];
96
+ if (val)
97
+ val = val.slice(0, 8) + "..." + val.slice(-4);
98
+ break;
99
+ default:
100
+ console.log(chalk_1.default.hex("#EF5350")(`\n ❌ Unknown key: ${key}\n`));
101
+ return;
102
+ }
103
+ console.log(val ? chalk_1.default.hex("#81C784")(val) : chalk_1.default.hex("#78909C")("(not set)"));
104
+ break;
105
+ case "set":
106
+ if (!key || value === undefined) {
107
+ console.log(chalk_1.default.hex("#EF5350")("\n ❌ Usage: cdoing config set <key> <value>"));
108
+ console.log(chalk_1.default.hex("#78909C")(" Keys: provider, model, mode, api-key, base-url\n"));
109
+ return;
110
+ }
111
+ const result = (0, config_1.updateStoredConfig)(key, value);
112
+ if (result.success) {
113
+ const display = key === "api-key" ? value.slice(0, 8) + "..." : value;
114
+ console.log();
115
+ console.log(chalk_1.default.hex("#81C784")(" ✓ Saved: ") + chalk_1.default.hex("#4FC3F7")(key) + chalk_1.default.hex("#78909C")(" = ") + chalk_1.default.hex("#FFFFFF")(display));
116
+ console.log();
117
+ }
118
+ else {
119
+ console.log(chalk_1.default.hex("#EF5350")(`\n ❌ ${result.error}\n`));
120
+ }
121
+ break;
122
+ default:
123
+ console.log(chalk_1.default.hex("#EF5350")(`\n ❌ Unknown action: ${action}`));
124
+ console.log(chalk_1.default.hex("#78909C")(" Usage: cdoing config <list|get|set> [key] [value]\n"));
125
+ }
126
+ }
127
+ /**
128
+ * Handle `cdoing init` - create .cdoing/ directory and config.md template
129
+ */
130
+ function handleInit() {
131
+ const cwd = process.cwd();
132
+ const configDir = path.join(cwd, PROJECT_CONFIG_DIR);
133
+ const configFile = path.join(configDir, PROJECT_CONFIG_FILE);
134
+ if (fs.existsSync(configFile)) {
135
+ console.log();
136
+ console.log(chalk_1.default.hex("#FFB74D")(" ⚠️ Project already initialized"));
137
+ console.log(chalk_1.default.hex("#90A4AE")(" .cdoing/config.md exists"));
138
+ console.log();
139
+ return;
140
+ }
141
+ if (!fs.existsSync(configDir)) {
142
+ fs.mkdirSync(configDir, { recursive: true });
143
+ }
144
+ const template = `# Project Configuration
145
+
146
+ This file configures cdoing for this project.
147
+
148
+ ## Instructions
149
+
150
+ Add project-specific instructions here. The agent will follow these guidelines.
151
+
152
+ \`\`\`
153
+ - Use TypeScript for all new code
154
+ - Follow existing code patterns
155
+ - Write tests for new features
156
+ \`\`\`
157
+
158
+ ## Context
159
+
160
+ Describe your project here:
161
+ - What does this project do?
162
+ - What technologies does it use?
163
+ - Any special conventions?
164
+
165
+ ## Files to Ignore
166
+
167
+ Files the agent should not modify:
168
+ - node_modules/
169
+ - dist/
170
+ - .env
171
+
172
+ ## Preferred Tools
173
+
174
+ - Use npm for package management
175
+ - Use vitest for testing
176
+ `;
177
+ fs.writeFileSync(configFile, template, "utf-8");
178
+ console.log();
179
+ console.log(chalk_1.default.hex("#6BCB77")(figlet_1.default.textSync("Init!", { font: "Small" })));
180
+ console.log(chalk_1.default.hex("#81C784")(" ✨ Project initialized!"));
181
+ console.log(chalk_1.default.hex("#90A4AE")(" Created: ") + chalk_1.default.hex("#4FC3F7")(".cdoing/config.md"));
182
+ console.log();
183
+ console.log(chalk_1.default.hex("#78909C")(" Edit this file to customize agent behavior for your project."));
184
+ console.log();
185
+ }
186
+ // ── Shell completion scripts ──────────────────────────────────────────────────
187
+ const ZSH_COMPLETION = `#compdef cdoing
188
+ # Zsh completion for cdoing — install with: cdoing completions zsh > ~/.zsh/completions/_cdoing
189
+ # Then add to ~/.zshrc: fpath=(~/.zsh/completions $fpath) && autoload -Uz compinit && compinit
190
+
191
+ _cdoing() {
192
+ local context state line
193
+ typeset -A opt_args
194
+
195
+ _arguments -C \\
196
+ '(-m --model)'{-m,--model}'[Model to use]:model:->models' \\
197
+ '(-p --provider)'{-p,--provider}'[AI provider]:provider:(anthropic openai google ollama custom)' \\
198
+ '--base-url[Base URL for custom providers]:url:' \\
199
+ '--api-key[API key]:key:' \\
200
+ '--mode[Permission mode]:mode:(ask auto-edit auto)' \\
201
+ '(-d --dir)'{-d,--dir}'[Working directory]:directory:_directories' \\
202
+ '--login[Login with Claude via OAuth]' \\
203
+ '--logout[Clear stored OAuth tokens]' \\
204
+ '--print[Print output only]' \\
205
+ '(-r --resume)'{-r,--resume}'[Resume conversation by ID]:id:' \\
206
+ '(-c --continue)'{-c,--continue}'[Continue most recent conversation]' \\
207
+ '--max-turns[Maximum agent turns]:turns:' \\
208
+ '--output-format[Output format]:format:(text json stream-json)' \\
209
+ '--verbose[Enable verbose logging]' \\
210
+ '--system-prompt[Custom system prompt]:prompt:' \\
211
+ '--allowed-tools[Comma-separated allowed tools]:tools:' \\
212
+ '--disallowed-tools[Comma-separated disallowed tools]:tools:' \\
213
+ '(-h --help)'{-h,--help}'[Show help]' \\
214
+ '(-V --version)'{-V,--version}'[Show version]' \\
215
+ '1: :->subcmd' \\
216
+ '*:: :->args'
217
+
218
+ case $state in
219
+ subcmd)
220
+ local -a cmds
221
+ cmds=(
222
+ 'config:Manage configuration'
223
+ 'init:Initialize project with .cdoing/config.md'
224
+ 'doctor:Diagnose setup and configuration'
225
+ 'completions:Generate shell completion script'
226
+ )
227
+ _describe 'subcommand' cmds
228
+ ;;
229
+ models)
230
+ local -a models
231
+ models=(
232
+ 'claude-sonnet-4-6:Anthropic Sonnet 4.6'
233
+ 'claude-opus-4-6:Anthropic Opus 4.6'
234
+ 'claude-haiku-4-5:Anthropic Haiku 4.5'
235
+ 'gpt-4o:OpenAI GPT-4o'
236
+ 'gpt-4o-mini:OpenAI GPT-4o Mini'
237
+ 'o3-mini:OpenAI o3 Mini'
238
+ 'gemini-2.0-flash:Google Gemini 2.0 Flash'
239
+ 'gemini-1.5-pro:Google Gemini 1.5 Pro'
240
+ 'llama3.1:Ollama LLaMA 3.1'
241
+ 'mistral:Ollama Mistral'
242
+ 'codellama:Ollama CodeLlama'
243
+ )
244
+ _describe 'model' models
245
+ ;;
246
+ args)
247
+ case $words[1] in
248
+ config)
249
+ _arguments \\
250
+ '1:action:(get set list)' \\
251
+ '2:key:(provider model mode api-key base-url)' \\
252
+ '3:value:'
253
+ ;;
254
+ completions)
255
+ _arguments '1:shell:(zsh bash)'
256
+ ;;
257
+ esac
258
+ ;;
259
+ esac
260
+ }
261
+
262
+ _cdoing "$@"
263
+ `;
264
+ const BASH_COMPLETION = `# Bash completion for cdoing — install with: cdoing completions bash > ~/.bash_completion.d/cdoing
265
+ # Then add to ~/.bashrc: source ~/.bash_completion.d/cdoing
266
+
267
+ _cdoing_completion() {
268
+ local cur prev words cword
269
+ _init_completion 2>/dev/null || {
270
+ COMPREPLY=()
271
+ cur="\${COMP_WORDS[COMP_CWORD]}"
272
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
273
+ }
274
+
275
+ local subcommands="config init doctor completions"
276
+ local flags="--model --provider --base-url --api-key --mode --dir --login --logout --print --resume --continue --max-turns --output-format --verbose --system-prompt --allowed-tools --disallowed-tools --help --version"
277
+ local models="claude-sonnet-4-6 claude-opus-4-6 claude-haiku-4-5 gpt-4o gpt-4o-mini o3-mini gemini-2.0-flash gemini-1.5-pro llama3.1 mistral codellama"
278
+
279
+ case "\${prev}" in
280
+ --model|-m)
281
+ COMPREPLY=( \$(compgen -W "\${models}" -- "\${cur}") )
282
+ return ;;
283
+ --provider|-p)
284
+ COMPREPLY=( \$(compgen -W "anthropic openai google ollama custom" -- "\${cur}") )
285
+ return ;;
286
+ --mode)
287
+ COMPREPLY=( \$(compgen -W "ask auto-edit auto" -- "\${cur}") )
288
+ return ;;
289
+ --output-format)
290
+ COMPREPLY=( \$(compgen -W "text json stream-json" -- "\${cur}") )
291
+ return ;;
292
+ --dir|-d)
293
+ COMPREPLY=( \$(compgen -d -- "\${cur}") )
294
+ return ;;
295
+ config)
296
+ COMPREPLY=( \$(compgen -W "get set list" -- "\${cur}") )
297
+ return ;;
298
+ get|set)
299
+ COMPREPLY=( \$(compgen -W "provider model mode api-key base-url" -- "\${cur}") )
300
+ return ;;
301
+ completions)
302
+ COMPREPLY=( \$(compgen -W "zsh bash" -- "\${cur}") )
303
+ return ;;
304
+ esac
305
+
306
+ if [[ "\${cur}" == -* ]]; then
307
+ COMPREPLY=( \$(compgen -W "\${flags}" -- "\${cur}") )
308
+ return
309
+ fi
310
+
311
+ if [[ \${COMP_CWORD} -eq 1 ]]; then
312
+ COMPREPLY=( \$(compgen -W "\${subcommands}" -- "\${cur}") )
313
+ return
314
+ fi
315
+ }
316
+
317
+ complete -F _cdoing_completion cdoing
318
+ `;
319
+ /**
320
+ * Handle `cdoing completions <shell>` - print shell completion script
321
+ */
322
+ function handleCompletions(shell) {
323
+ const s = (shell || "").toLowerCase();
324
+ if (s === "zsh") {
325
+ process.stdout.write(ZSH_COMPLETION);
326
+ return;
327
+ }
328
+ if (s === "bash") {
329
+ process.stdout.write(BASH_COMPLETION);
330
+ return;
331
+ }
332
+ // No shell arg — print install instructions
333
+ console.log();
334
+ console.log(chalk_1.default.hex("#4FC3F7").bold(" 🐚 Shell Completions"));
335
+ console.log(chalk_1.default.hex("#78909C")(" ─────────────────────────────────────"));
336
+ console.log();
337
+ console.log(chalk_1.default.hex("#B0BEC5")(" Usage: cdoing completions <shell>"));
338
+ console.log(chalk_1.default.hex("#78909C")(" Shells: zsh bash"));
339
+ console.log();
340
+ console.log(chalk_1.default.hex("#FFB74D").bold(" Zsh:"));
341
+ console.log(chalk_1.default.hex("#90A4AE")(" mkdir -p ~/.zsh/completions"));
342
+ console.log(chalk_1.default.hex("#81C784")(" cdoing completions zsh > ~/.zsh/completions/_cdoing"));
343
+ console.log(chalk_1.default.hex("#90A4AE")(" # Add to ~/.zshrc if not already present:"));
344
+ console.log(chalk_1.default.hex("#90A4AE")(' echo \'fpath=(~/.zsh/completions $fpath)\' >> ~/.zshrc'));
345
+ console.log(chalk_1.default.hex("#90A4AE")(' echo "autoload -Uz compinit && compinit" >> ~/.zshrc'));
346
+ console.log(chalk_1.default.hex("#90A4AE")(" source ~/.zshrc"));
347
+ console.log();
348
+ console.log(chalk_1.default.hex("#FFB74D").bold(" Bash:"));
349
+ console.log(chalk_1.default.hex("#90A4AE")(" mkdir -p ~/.bash_completion.d"));
350
+ console.log(chalk_1.default.hex("#81C784")(" cdoing completions bash > ~/.bash_completion.d/cdoing"));
351
+ console.log(chalk_1.default.hex("#90A4AE")(' echo "source ~/.bash_completion.d/cdoing" >> ~/.bashrc'));
352
+ console.log(chalk_1.default.hex("#90A4AE")(" source ~/.bashrc"));
353
+ console.log();
354
+ }
355
+ /**
356
+ * Handle `cdoing doctor` - diagnose setup and configuration issues
357
+ */
358
+ function handleDoctor() {
359
+ console.log();
360
+ console.log(chalk_1.default.hex("#4FC3F7").bold(" 🏥 System Diagnostics"));
361
+ console.log(chalk_1.default.hex("#78909C")(" ─────────────────────────────────────"));
362
+ console.log();
363
+ let issues = 0;
364
+ let passed = 0;
365
+ const ok = (msg) => {
366
+ passed++;
367
+ console.log(chalk_1.default.hex("#81C784")(" ✓ ") + chalk_1.default.hex("#B0BEC5")(msg));
368
+ };
369
+ const skip = (msg) => {
370
+ console.log(chalk_1.default.hex("#78909C")(" ○ ") + chalk_1.default.hex("#78909C")(msg));
371
+ };
372
+ const fail = (msg) => {
373
+ issues++;
374
+ console.log(chalk_1.default.hex("#EF5350")(" ✗ ") + chalk_1.default.hex("#FFCDD2")(msg));
375
+ };
376
+ // Check global config directory
377
+ if (fs.existsSync(CONFIG_DIR)) {
378
+ ok("Global config: ~/.cdoing/");
379
+ }
380
+ else {
381
+ skip("Global config: not created yet");
382
+ }
383
+ // Check API keys
384
+ const config = (0, config_1.loadConfig)();
385
+ const providers = ["anthropic", "openai", "google"];
386
+ const providerIcons = {
387
+ anthropic: "🤖",
388
+ openai: "🧠",
389
+ google: "🌐",
390
+ };
391
+ for (const provider of providers) {
392
+ const envVar = (0, ai_1.getApiKeyEnvVar)(provider);
393
+ const hasEnv = !!process.env[envVar];
394
+ const hasStored = !!config.apiKeys?.[provider];
395
+ const icon = providerIcons[provider] || "🔑";
396
+ if (hasEnv) {
397
+ ok(`${icon} ${provider}: API key in ${envVar}`);
398
+ }
399
+ else if (hasStored) {
400
+ ok(`${icon} ${provider}: API key in config`);
401
+ }
402
+ else {
403
+ skip(`${icon} ${provider}: no API key configured`);
404
+ }
405
+ }
406
+ // Check project config
407
+ const projectConfig = path.join(process.cwd(), PROJECT_CONFIG_DIR, PROJECT_CONFIG_FILE);
408
+ if (fs.existsSync(projectConfig)) {
409
+ ok("📁 Project config: .cdoing/config.md");
410
+ }
411
+ else {
412
+ skip("📁 Project config: not initialized (run: cdoing init)");
413
+ }
414
+ // Check hooks
415
+ const globalHooks = path.join(CONFIG_DIR, "hooks.json");
416
+ const projectHooks = path.join(process.cwd(), PROJECT_CONFIG_DIR, "hooks.json");
417
+ if (fs.existsSync(globalHooks)) {
418
+ ok("🪝 Global hooks: ~/.cdoing/hooks.json");
419
+ }
420
+ if (fs.existsSync(projectHooks)) {
421
+ ok("🪝 Project hooks: .cdoing/hooks.json");
422
+ }
423
+ // Check permissions
424
+ const globalPerms = path.join(CONFIG_DIR, "permissions.json");
425
+ const projectPerms = path.join(process.cwd(), PROJECT_CONFIG_DIR, "permissions.json");
426
+ if (fs.existsSync(globalPerms)) {
427
+ ok("🔐 Global permissions: ~/.cdoing/permissions.json");
428
+ }
429
+ if (fs.existsSync(projectPerms)) {
430
+ ok("🔐 Project permissions: .cdoing/permissions.json");
431
+ }
432
+ // Check Node.js version
433
+ const nodeVersion = process.version;
434
+ const major = parseInt(nodeVersion.slice(1).split(".")[0], 10);
435
+ if (major >= 18) {
436
+ ok(`📦 Node.js: ${nodeVersion}`);
437
+ }
438
+ else {
439
+ fail(`📦 Node.js: ${nodeVersion} (requires 18+)`);
440
+ }
441
+ // Summary
442
+ console.log();
443
+ console.log(chalk_1.default.hex("#78909C")(" ─────────────────────────────────────"));
444
+ if (issues === 0) {
445
+ console.log(chalk_1.default.hex("#81C784").bold(` ✨ All ${passed} checks passed!`));
446
+ }
447
+ else {
448
+ console.log(chalk_1.default.hex("#FFB74D")(` ⚠️ ${passed} passed, ${issues} issue(s) found`));
449
+ }
450
+ console.log();
451
+ }
452
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBH,kDA0DC;AAKD,gCA2DC;AA6ID,8CAmCC;AAKD,oCAoGC;AAlaD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,kDAA0B;AAC1B,oDAA4B;AAC5B,qCAA8F;AAC9F,mCAA6C;AAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAExC;;GAEG;AACH,SAAgB,mBAAmB,CAAC,MAAc,EAAE,GAAY,EAAE,KAAc;IAC9E,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAC7E,KAAK,MAAM,IAAI,IAAI,IAAA,+BAAsB,GAAE,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM;QAER,KAAK,KAAK;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC;gBAC3F,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;YAC5B,IAAI,GAAuB,CAAC;YAC5B,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,UAAU;oBAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAAC,MAAM;gBAC9C,KAAK,OAAO;oBAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;oBAAC,MAAM;gBACxC,KAAK,MAAM;oBAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;oBAAC,MAAM;gBACtC,KAAK,UAAU;oBAAE,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;oBAAC,MAAM;gBAC7C,KAAK,SAAS;oBACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC;oBAChD,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;oBACjC,IAAI,GAAG;wBAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvD,MAAM;gBACR;oBACE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC,CAAC;oBACjE,OAAO;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjF,MAAM;QAER,KAAK,KAAK;YACR,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBAClF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC;gBAC3F,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,2BAAkB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtE,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC3I,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM;QAER;YACE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,0DAA0D,CAAC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAE7D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClB,CAAC;IAEA,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,gBAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,iFAAiF;AAEjF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDvB,CAAC;AAEF;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,0DAA0D,CAAC,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,EAAE;QACzB,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,gCAAgC;IAChC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,2BAA2B,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB;IACjB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,aAAa,GAA2B;QAC5C,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,oBAAe,EAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QAE7C,IAAI,MAAM,EAAE,CAAC;YACX,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,gBAAgB,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,qBAAqB,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,yBAAyB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;IACxF,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,sCAAsC,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAChE,CAAC;IAED,cAAc;IACd,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAEhF,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,uCAAuC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,sCAAsC,CAAC,CAAC;IAC7C,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAEtF,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,mDAAmD,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,kDAAkD,CAAC,CAAC;IACzD,CAAC;IAED,wBAAwB;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,EAAE,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,WAAW,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAC7E,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,MAAM,iBAAiB,CAAC,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,YAAY,MAAM,iBAAiB,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * CLI Configuration — parses options, validates API key,
3
+ * interactive setup wizard on first run.
4
+ */
5
+ import { PermissionManager, PermissionMode, SandboxManager } from "@cdoing/core";
6
+ import { type ModelConfig } from "@cdoing/ai";
7
+ export interface StoredConfig {
8
+ provider?: string;
9
+ model?: string;
10
+ apiKeys?: Record<string, string>;
11
+ mode?: string;
12
+ baseUrl?: string;
13
+ apiKeyHelper?: string;
14
+ /** UI theme: "dark", "light", or "auto" (default) */
15
+ theme?: string;
16
+ /** Indexer configuration */
17
+ indexer?: {
18
+ /** Embedding model ID (e.g. "text-embedding-3-small", "nomic-embed-text") */
19
+ embeddingModel?: string;
20
+ /** Embedding provider: "openai", "ollama", or "none" (FTS only) */
21
+ embeddingProvider?: string;
22
+ /** Base URL for embedding API (e.g. "http://localhost:11434" for Ollama) */
23
+ embeddingBaseUrl?: string;
24
+ /** API key for embedding provider (uses main provider key if not set) */
25
+ embeddingApiKey?: string;
26
+ /** Auto-index on startup. Default: true */
27
+ autoIndex?: boolean;
28
+ };
29
+ }
30
+ export interface CLIOptions {
31
+ model?: string;
32
+ provider: string;
33
+ baseUrl?: string;
34
+ apiKey?: string;
35
+ oauthToken?: string;
36
+ mode: string;
37
+ dir: string;
38
+ login?: boolean;
39
+ logout?: boolean;
40
+ print?: boolean;
41
+ resume?: string;
42
+ continue?: boolean;
43
+ maxTurns?: string;
44
+ outputFormat?: string;
45
+ verbose?: boolean;
46
+ systemPrompt?: string;
47
+ allowedTools?: string;
48
+ disallowedTools?: string;
49
+ }
50
+ export declare function parsePermissionMode(mode: string): PermissionMode;
51
+ export declare function buildModelConfig(options: CLIOptions): Partial<ModelConfig>;
52
+ export declare function createPermissionManager(options: CLIOptions): PermissionManager;
53
+ export declare function createSandboxManager(options: CLIOptions): SandboxManager;
54
+ export declare function loadConfig(): StoredConfig;
55
+ export declare function saveConfig(config: StoredConfig): void;
56
+ /**
57
+ * Update a stored config value. Returns true on success.
58
+ */
59
+ export declare function updateStoredConfig(key: string, value: string): {
60
+ success: boolean;
61
+ error?: string;
62
+ };
63
+ /**
64
+ * Show all stored config values.
65
+ */
66
+ export declare function getStoredConfigDisplay(): string[];
67
+ /**
68
+ * Check if an API key exists for the provider (env var or stored config).
69
+ * If missing, prompt the user to enter one and optionally save it.
70
+ * Returns the key, or undefined if skipped.
71
+ */
72
+ export declare function promptApiKeyIfMissing(provider: string): Promise<string | undefined>;
73
+ export interface SelectOption {
74
+ label: string;
75
+ hint?: string;
76
+ value: string;
77
+ }
78
+ export declare function selectMenu(title: string, options: SelectOption[], defaultIndex?: number): Promise<string>;
79
+ /**
80
+ * Resolve API key from: flag → apiKeyHelper → env → stored config → OAuth token → interactive setup.
81
+ * Mutates options.apiKey so downstream code can use it.
82
+ */
83
+ export declare function resolveApiKey(options: CLIOptions): Promise<void>;
84
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAM/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE;QACR,6EAA6E;QAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mEAAmE;QACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,4EAA4E;QAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,yEAAyE;QACzE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,2CAA2C;QAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAWhE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAQ1E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB,CAG9E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CAGxE;AAID,wBAAgB,UAAU,IAAI,YAAY,CAMzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGrD;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyCnG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAqBjD;AASD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8BzF;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,YAAY,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA+CpG;AA4CD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkItE"}