koneck 1.0.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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/astValidator.d.ts +6 -0
  4. package/dist/astValidator.d.ts.map +1 -0
  5. package/dist/astValidator.js +57 -0
  6. package/dist/astValidator.js.map +1 -0
  7. package/dist/chat.d.ts +3 -0
  8. package/dist/chat.d.ts.map +1 -0
  9. package/dist/chat.js +205 -0
  10. package/dist/chat.js.map +1 -0
  11. package/dist/completion.d.ts +2 -0
  12. package/dist/completion.d.ts.map +1 -0
  13. package/dist/completion.js +137 -0
  14. package/dist/completion.js.map +1 -0
  15. package/dist/compressor.d.ts +9 -0
  16. package/dist/compressor.d.ts.map +1 -0
  17. package/dist/compressor.js +71 -0
  18. package/dist/compressor.js.map +1 -0
  19. package/dist/config.d.ts +14 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +40 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/doctor.d.ts +2 -0
  24. package/dist/doctor.d.ts.map +1 -0
  25. package/dist/doctor.js +99 -0
  26. package/dist/doctor.js.map +1 -0
  27. package/dist/engine.d.ts +11 -0
  28. package/dist/engine.d.ts.map +1 -0
  29. package/dist/engine.js +510 -0
  30. package/dist/engine.js.map +1 -0
  31. package/dist/generate-koneck-md.d.ts +3 -0
  32. package/dist/generate-koneck-md.d.ts.map +1 -0
  33. package/dist/generate-koneck-md.js +69 -0
  34. package/dist/generate-koneck-md.js.map +1 -0
  35. package/dist/git-tools.d.ts +4 -0
  36. package/dist/git-tools.d.ts.map +1 -0
  37. package/dist/git-tools.js +206 -0
  38. package/dist/git-tools.js.map +1 -0
  39. package/dist/highlight.d.ts +3 -0
  40. package/dist/highlight.d.ts.map +1 -0
  41. package/dist/highlight.js +139 -0
  42. package/dist/highlight.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +448 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/init.d.ts +9 -0
  48. package/dist/init.d.ts.map +1 -0
  49. package/dist/init.js +93 -0
  50. package/dist/init.js.map +1 -0
  51. package/dist/mcp.d.ts +24 -0
  52. package/dist/mcp.d.ts.map +1 -0
  53. package/dist/mcp.js +75 -0
  54. package/dist/mcp.js.map +1 -0
  55. package/dist/memory.d.ts +3 -0
  56. package/dist/memory.d.ts.map +1 -0
  57. package/dist/memory.js +18 -0
  58. package/dist/memory.js.map +1 -0
  59. package/dist/plugins.d.ts +9 -0
  60. package/dist/plugins.d.ts.map +1 -0
  61. package/dist/plugins.js +60 -0
  62. package/dist/plugins.js.map +1 -0
  63. package/dist/pricing.d.ts +9 -0
  64. package/dist/pricing.d.ts.map +1 -0
  65. package/dist/pricing.js +84 -0
  66. package/dist/pricing.js.map +1 -0
  67. package/dist/project.d.ts +14 -0
  68. package/dist/project.d.ts.map +1 -0
  69. package/dist/project.js +151 -0
  70. package/dist/project.js.map +1 -0
  71. package/dist/providers.d.ts +13 -0
  72. package/dist/providers.d.ts.map +1 -0
  73. package/dist/providers.js +130 -0
  74. package/dist/providers.js.map +1 -0
  75. package/dist/session.d.ts +19 -0
  76. package/dist/session.d.ts.map +1 -0
  77. package/dist/session.js +71 -0
  78. package/dist/session.js.map +1 -0
  79. package/dist/setup.d.ts +4 -0
  80. package/dist/setup.d.ts.map +1 -0
  81. package/dist/setup.js +63 -0
  82. package/dist/setup.js.map +1 -0
  83. package/dist/stats.d.ts +2 -0
  84. package/dist/stats.d.ts.map +1 -0
  85. package/dist/stats.js +81 -0
  86. package/dist/stats.js.map +1 -0
  87. package/dist/tools.d.ts +17 -0
  88. package/dist/tools.d.ts.map +1 -0
  89. package/dist/tools.js +713 -0
  90. package/dist/tools.js.map +1 -0
  91. package/dist/tui.d.ts +38 -0
  92. package/dist/tui.d.ts.map +1 -0
  93. package/dist/tui.js +364 -0
  94. package/dist/tui.js.map +1 -0
  95. package/dist/types.d.ts +158 -0
  96. package/dist/types.d.ts.map +1 -0
  97. package/dist/types.js +2 -0
  98. package/dist/types.js.map +1 -0
  99. package/dist/watch.d.ts +3 -0
  100. package/dist/watch.d.ts.map +1 -0
  101. package/dist/watch.js +68 -0
  102. package/dist/watch.js.map +1 -0
  103. package/dist/worktree.d.ts +8 -0
  104. package/dist/worktree.d.ts.map +1 -0
  105. package/dist/worktree.js +94 -0
  106. package/dist/worktree.js.map +1 -0
  107. package/package.json +67 -0
package/dist/index.js ADDED
@@ -0,0 +1,448 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'fs';
3
+ import { config } from 'dotenv';
4
+ import path from 'path';
5
+ import chalk from 'chalk';
6
+ import { tui } from './tui.js';
7
+ import { runAgent } from './engine.js';
8
+ import { listProviders, PROVIDERS } from './providers.js';
9
+ import { loadConfig } from './config.js';
10
+ import { loadSession, listSessions } from './session.js';
11
+ import { runChatMode } from './chat.js';
12
+ import { runInit } from './init.js';
13
+ import { getCompletionScript } from './completion.js';
14
+ import { estimateCost, formatCost } from './pricing.js';
15
+ import { needsSetup, runSetup } from './setup.js';
16
+ import { runDoctor } from './doctor.js';
17
+ import { runStats } from './stats.js';
18
+ import { runWatch } from './watch.js';
19
+ import { runGenerateKoneckMd } from './generate-koneck-md.js';
20
+ config();
21
+ // package.json sits one level above the script (dist/index.js or src/index.ts)
22
+ const VERSION = JSON.parse(readFileSync(path.resolve(path.dirname(process.argv[1] ?? '.'), '..', 'package.json'), 'utf-8')).version;
23
+ const HELP = `
24
+ Usage:
25
+ koneck [OPTIONS] <task> Run a single task
26
+ koneck chat [OPTIONS] Interactive chat session
27
+ koneck --resume <id> [task] Continue a saved session
28
+ koneck --sessions List recent sessions
29
+
30
+ Options:
31
+ -p, --provider <name> LLM provider (default: omni). See --list-providers.
32
+ --base-url <url> Override provider base URL
33
+ -m, --model <id> Model name (defaults to provider's recommended model)
34
+ -t, --max-turns <n> Max agent turns per message (default: 30)
35
+ -a, --approve Require approval before file writes and commands
36
+ -w, --worktree Isolate changes in a git worktree branch
37
+ -C, --cwd <path> Working directory (default: current directory)
38
+ -v, --verbose Print stack traces on errors
39
+ --ci CI mode: no banner, no spinners, auto-approve, output to stderr
40
+ --json Print a JSON result summary to stdout (implies --ci)
41
+ --list-providers Show all supported providers
42
+ -V, --version Print the version and exit
43
+ -h, --help Show this help
44
+
45
+ Config file (.koneckrc / .koneckrc.json / koneck.config.json):
46
+ Placed in project root or any parent directory. CLI flags override it.
47
+ Fields: provider, model, maxTurns, requireApproval, useWorktree, baseURL
48
+ Example: { "provider": "anthropic", "model": "claude-opus-4-5" }
49
+
50
+ MCP servers (.koneck/mcp.json):
51
+ Connect external tool servers (GitHub, databases, browsers, Slack).
52
+ Example: { "servers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] } } }
53
+
54
+ Project memory (.koneck/MEMORY.md):
55
+ The agent reads this at startup. Use the "remember" tool to persist facts across sessions.
56
+
57
+ Environment:
58
+ OPENAI_API_KEY ANTHROPIC_API_KEY DEEPSEEK_API_KEY
59
+ GROQ_API_KEY TOGETHER_API_KEY GOOGLE_API_KEY
60
+ MOONSHOT_API_KEY MISTRAL_API_KEY COHERE_API_KEY
61
+ XAI_API_KEY PERPLEXITY_API_KEY OMNI_ROUTE_API_KEY
62
+ KONECK_API_KEY Universal fallback for any provider
63
+ KONECK_PROVIDER Default provider
64
+ KONECK_MODEL Default model
65
+
66
+ Exit codes (--ci mode):
67
+ 0 Task completed naturally
68
+ 1 Fatal error
69
+ 2 Max turns reached without completion
70
+
71
+ Sessions are saved to .koneck/sessions/<id>.jsonl in the working directory.
72
+
73
+ Examples:
74
+ koneck "add input validation to src/handlers/user.ts"
75
+ koneck -p openai -m gpt-4o "refactor the auth module"
76
+ koneck -p anthropic -a "migrate DB schema to v2"
77
+ koneck chat -p groq -m llama-3.3-70b-versatile
78
+ koneck --resume 20250805-163924-ab12 "now add JSDoc comments too"
79
+ koneck --sessions
80
+ koneck --ci --json "run tests and fix failures" > result.json
81
+ koneck init
82
+ koneck doctor
83
+ koneck stats
84
+ koneck setup
85
+ koneck watch [pattern]
86
+ koneck --pr "add rate limiting to API routes"
87
+ koneck completion bash >> ~/.bashrc
88
+ koneck completion zsh > ~/.zsh/completions/_koneck
89
+ koneck completion fish > ~/.config/fish/completions/koneck.fish
90
+ `;
91
+ function parseArgs(argv) {
92
+ const args = {
93
+ provider: undefined,
94
+ baseURL: undefined,
95
+ model: undefined,
96
+ maxTurns: 30,
97
+ requireApproval: false,
98
+ useWorktree: false,
99
+ verbose: false,
100
+ cwd: process.cwd(),
101
+ help: false,
102
+ showVersion: false,
103
+ listProviders: false,
104
+ chatMode: false,
105
+ resume: undefined,
106
+ listSessions: false,
107
+ ci: false,
108
+ json: false,
109
+ budget: undefined,
110
+ initMode: false,
111
+ completionShell: undefined,
112
+ doctorMode: false,
113
+ statsMode: false,
114
+ watchMode: false,
115
+ watchPattern: undefined,
116
+ setupMode: false,
117
+ prMode: false,
118
+ };
119
+ const positional = [];
120
+ for (let i = 2; i < argv.length; i++) {
121
+ const arg = argv[i];
122
+ switch (arg) {
123
+ case 'chat':
124
+ args.chatMode = true;
125
+ break;
126
+ case 'init':
127
+ args.initMode = true;
128
+ break;
129
+ case 'doctor':
130
+ args.doctorMode = true;
131
+ break;
132
+ case 'stats':
133
+ args.statsMode = true;
134
+ break;
135
+ case 'setup':
136
+ args.setupMode = true;
137
+ break;
138
+ case 'watch': {
139
+ args.watchMode = true;
140
+ const next = argv[i + 1];
141
+ if (next && !next.startsWith('-')) {
142
+ args.watchPattern = next;
143
+ i++;
144
+ }
145
+ break;
146
+ }
147
+ case '--pr':
148
+ args.prMode = true;
149
+ break;
150
+ case 'completion': {
151
+ const next = argv[i + 1];
152
+ if (next && !next.startsWith('-')) {
153
+ args.completionShell = next;
154
+ i++;
155
+ }
156
+ else {
157
+ args.completionShell = 'bash';
158
+ }
159
+ break;
160
+ }
161
+ case '-h':
162
+ case '--help':
163
+ args.help = true;
164
+ break;
165
+ case '-V':
166
+ case '--version':
167
+ args.showVersion = true;
168
+ break;
169
+ case '--list-providers':
170
+ args.listProviders = true;
171
+ break;
172
+ case '--sessions':
173
+ args.listSessions = true;
174
+ break;
175
+ case '--resume':
176
+ args.resume = argv[++i];
177
+ break;
178
+ case '-p':
179
+ case '--provider':
180
+ args.provider = argv[++i];
181
+ break;
182
+ case '--base-url':
183
+ args.baseURL = argv[++i];
184
+ break;
185
+ case '-m':
186
+ case '--model':
187
+ args.model = argv[++i];
188
+ break;
189
+ case '-t':
190
+ case '--max-turns':
191
+ args.maxTurns = Math.max(1, parseInt(argv[++i] ?? '30', 10));
192
+ break;
193
+ case '-a':
194
+ case '--approve':
195
+ args.requireApproval = true;
196
+ break;
197
+ case '-w':
198
+ case '--worktree':
199
+ args.useWorktree = true;
200
+ break;
201
+ case '-C':
202
+ case '--cwd':
203
+ args.cwd = path.resolve(argv[++i] ?? '.');
204
+ break;
205
+ case '-v':
206
+ case '--verbose':
207
+ args.verbose = true;
208
+ break;
209
+ case '--ci':
210
+ args.ci = true;
211
+ break;
212
+ case '--json':
213
+ args.json = true;
214
+ break;
215
+ case '--budget': {
216
+ const raw = (argv[++i] ?? '0').replace('$', '');
217
+ const val = parseFloat(raw);
218
+ if (!isNaN(val) && val > 0)
219
+ args.budget = val;
220
+ break;
221
+ }
222
+ default:
223
+ if (!arg.startsWith('-'))
224
+ positional.push(arg);
225
+ else
226
+ tui.printWarning(`Unknown option: ${arg} (ignored)`);
227
+ }
228
+ }
229
+ if (positional.length > 0)
230
+ args.task = positional.join(' ');
231
+ return args;
232
+ }
233
+ async function readStdin(timeoutMs = 2000) {
234
+ if (process.stdin.isTTY)
235
+ return '';
236
+ return new Promise((resolve) => {
237
+ let data = '';
238
+ const timer = setTimeout(() => resolve(data.trim()), timeoutMs);
239
+ process.stdin.setEncoding('utf-8');
240
+ process.stdin.on('data', chunk => { data += chunk; });
241
+ process.stdin.on('end', () => { clearTimeout(timer); resolve(data.trim()); });
242
+ });
243
+ }
244
+ async function resolveConfig(args) {
245
+ // loadConfig walks up from cwd then falls back to ~/.koneckrc
246
+ const fileConfig = await loadConfig(args.cwd);
247
+ const provider = args.provider ?? fileConfig.provider ?? process.env['KONECK_PROVIDER'] ?? 'omni';
248
+ const model = args.model ?? fileConfig.model ?? process.env['KONECK_MODEL'] ??
249
+ PROVIDERS[provider.toLowerCase()]?.defaultModel ?? 'auto';
250
+ const maxTurns = args.maxTurns !== 30 ? args.maxTurns : (fileConfig.maxTurns ?? 30);
251
+ const requireApproval = args.requireApproval || (fileConfig.requireApproval ?? false);
252
+ const useWorktree = args.useWorktree || (fileConfig.useWorktree ?? false);
253
+ const baseURL = args.baseURL ?? fileConfig.baseURL;
254
+ const apiKey = fileConfig.apiKey;
255
+ return { provider, model, maxTurns, requireApproval, useWorktree, baseURL, apiKey };
256
+ }
257
+ async function main() {
258
+ const args = parseArgs(process.argv);
259
+ // Apply CI / JSON mode before any output
260
+ if (args.json || args.ci)
261
+ tui.setCiMode(true);
262
+ if (args.help) {
263
+ console.log(HELP);
264
+ process.exit(0);
265
+ }
266
+ if (args.showVersion) {
267
+ console.log(VERSION);
268
+ process.exit(0);
269
+ }
270
+ // ── First-run setup ────────────────────────────────────────────────────────
271
+ if (!args.ci && !args.json && !args.initMode && !args.completionShell && !args.listProviders) {
272
+ if (await needsSetup()) {
273
+ tui.printBanner();
274
+ await runSetup();
275
+ }
276
+ }
277
+ // ── Init mode ──────────────────────────────────────────────────────────────
278
+ if (args.initMode) {
279
+ await runInit(args.cwd);
280
+ process.exit(0);
281
+ }
282
+ // ── Doctor mode ────────────────────────────────────────────────────────────
283
+ if (args.doctorMode) {
284
+ await runDoctor(args.cwd);
285
+ process.exit(0);
286
+ }
287
+ // ── Stats mode ─────────────────────────────────────────────────────────────
288
+ if (args.statsMode) {
289
+ await runStats(args.cwd);
290
+ process.exit(0);
291
+ }
292
+ // ── Completion mode ────────────────────────────────────────────────────────
293
+ if (args.completionShell) {
294
+ try {
295
+ process.stdout.write(getCompletionScript(args.completionShell));
296
+ }
297
+ catch (err) {
298
+ tui.printError(err instanceof Error ? err.message : String(err));
299
+ process.exit(1);
300
+ }
301
+ process.exit(0);
302
+ }
303
+ if (args.listProviders) {
304
+ console.log('\nSupported providers:\n');
305
+ console.log(listProviders());
306
+ console.log('\nUse: koneck -p <provider> [-m <model>] "your task"\n');
307
+ process.exit(0);
308
+ }
309
+ if (args.listSessions) {
310
+ const sessions = await listSessions(args.cwd);
311
+ if (sessions.length === 0) {
312
+ console.log(chalk.dim('\n No sessions found in .koneck/sessions/\n'));
313
+ process.exit(0);
314
+ }
315
+ console.log('\n ID Task Turns Cost');
316
+ console.log(chalk.dim(' ' + '─'.repeat(88)));
317
+ for (const s of sessions) {
318
+ const cost = estimateCost(s.model, Math.round(s.totalTokens * 0.75), Math.round(s.totalTokens * 0.25));
319
+ const costStr = cost.known ? formatCost(cost.total) : '?';
320
+ console.log(` ${chalk.dim(s.id)} ` +
321
+ chalk.white(s.task.padEnd(44).slice(0, 44)) +
322
+ ` ${String(s.turns).padStart(5)} ${costStr}`);
323
+ }
324
+ console.log();
325
+ process.exit(0);
326
+ }
327
+ const resolved = await resolveConfig(args);
328
+ const agentConfig = {
329
+ provider: resolved.provider,
330
+ baseURL: resolved.baseURL,
331
+ model: resolved.model,
332
+ maxTurns: resolved.maxTurns,
333
+ requireApproval: resolved.requireApproval,
334
+ useWorktree: resolved.useWorktree,
335
+ verbose: args.verbose,
336
+ cwd: args.cwd,
337
+ ci: args.ci || args.json,
338
+ budget: args.budget,
339
+ apiKey: resolved.apiKey,
340
+ };
341
+ // ── Setup mode (KONECK.md generator) ──────────────────────────────────────
342
+ if (args.setupMode) {
343
+ await runGenerateKoneckMd(agentConfig);
344
+ process.exit(0);
345
+ }
346
+ // ── Watch mode ─────────────────────────────────────────────────────────────
347
+ if (args.watchMode) {
348
+ await runWatch(agentConfig, args.watchPattern);
349
+ return;
350
+ }
351
+ // ── Chat mode (explicit flag or no args at all) ────────────────────────────
352
+ if (args.chatMode || (!args.task && !args.resume && !args.listSessions)) {
353
+ await runChatMode(agentConfig);
354
+ return;
355
+ }
356
+ // ── Resume mode ────────────────────────────────────────────────────────────
357
+ if (args.resume) {
358
+ tui.printBanner();
359
+ tui.printThinking(`Loading session ${args.resume}…`);
360
+ let initialMessages;
361
+ let prevMeta;
362
+ try {
363
+ const loaded = await loadSession(args.cwd, args.resume);
364
+ initialMessages = loaded.messages;
365
+ prevMeta = loaded.meta;
366
+ }
367
+ catch (err) {
368
+ tui.printError(`Cannot load session: ${err instanceof Error ? err.message : String(err)}`);
369
+ process.exit(1);
370
+ }
371
+ tui.printThinking(`Resumed : ${prevMeta.task.slice(0, 80)}`);
372
+ tui.printThinking(`Provider : ${prevMeta.provider} / ${prevMeta.model}`);
373
+ tui.printThinking(`History : ${prevMeta.turns} turns, ${prevMeta.totalTokens} tokens`);
374
+ let task = args.task;
375
+ if (!task)
376
+ task = await readStdin();
377
+ if (!task) {
378
+ tui.printError('Provide a follow-up task: koneck --resume <id> "your follow-up"');
379
+ process.exit(1);
380
+ }
381
+ let session;
382
+ try {
383
+ session = await runAgent(task, agentConfig, initialMessages);
384
+ }
385
+ catch (err) {
386
+ tui.printError(`Fatal: ${err instanceof Error ? err.message : String(err)}`);
387
+ if (args.verbose && err instanceof Error)
388
+ console.error(err.stack);
389
+ process.exit(1);
390
+ }
391
+ if (args.json)
392
+ emitJson(session, resolved, agentConfig.cwd);
393
+ if ((args.ci || args.json) && !session.completed)
394
+ process.exit(2);
395
+ return;
396
+ }
397
+ // ── Single-task mode ───────────────────────────────────────────────────────
398
+ tui.printBanner();
399
+ let task = args.task ?? await readStdin();
400
+ if (task.length > 8000) {
401
+ tui.printWarning('Task truncated to 8000 characters.');
402
+ task = task.slice(0, 8000);
403
+ }
404
+ tui.printThinking(`Task : ${task.slice(0, 120)}${task.length > 120 ? '…' : ''}`);
405
+ tui.printThinking(`Provider : ${resolved.provider}${resolved.baseURL ? ` (${resolved.baseURL})` : ''}`);
406
+ tui.printThinking(`Model : ${resolved.model}`);
407
+ tui.printThinking(`CWD : ${args.cwd}`);
408
+ const budgetStr = args.budget ? ` budget=$${args.budget.toFixed(2)}` : '';
409
+ tui.printThinking(`Flags : turns=${resolved.maxTurns} approval=${resolved.requireApproval} worktree=${resolved.useWorktree} ci=${agentConfig.ci ?? false}${budgetStr}`);
410
+ tui.printThinking('');
411
+ let session;
412
+ try {
413
+ session = await runAgent(task, agentConfig);
414
+ }
415
+ catch (err) {
416
+ tui.printError(`Fatal: ${err instanceof Error ? err.message : String(err)}`);
417
+ if (args.verbose && err instanceof Error)
418
+ console.error(err.stack);
419
+ process.exit(1);
420
+ }
421
+ if (args.json)
422
+ emitJson(session, resolved, agentConfig.cwd);
423
+ if ((args.ci || args.json) && !session.completed)
424
+ process.exit(2);
425
+ }
426
+ function emitJson(session, resolved, cwd) {
427
+ const cost = estimateCost(resolved.model, session.stats.promptTokens, session.stats.completionTokens);
428
+ process.stdout.write(JSON.stringify({
429
+ success: session.completed,
430
+ sessionId: session.id,
431
+ sessionFile: `.koneck/sessions/${session.id}.jsonl`,
432
+ cwd,
433
+ provider: resolved.provider,
434
+ model: resolved.model,
435
+ turns: session.stats.turns,
436
+ promptTokens: session.stats.promptTokens,
437
+ completionTokens: session.stats.completionTokens,
438
+ totalTokens: session.stats.totalTokens,
439
+ cost: cost.known
440
+ ? { total: cost.total, input: cost.inputCost, output: cost.outputCost, known: true }
441
+ : null,
442
+ }, null, 2) + '\n');
443
+ }
444
+ main().catch(err => {
445
+ console.error('Unhandled error:', err instanceof Error ? err.message : err);
446
+ process.exit(1);
447
+ });
448
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export interface InitConfig {
2
+ provider: string;
3
+ model?: string;
4
+ requireApproval: boolean;
5
+ useWorktree: boolean;
6
+ }
7
+ export declare function createProjectFiles(cwd: string, cfg: InitConfig): Promise<string[]>;
8
+ export declare function runInit(cwd: string): Promise<void>;
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsDxF;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CxD"}
package/dist/init.js ADDED
@@ -0,0 +1,93 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import { select, input, confirm } from '@inquirer/prompts';
5
+ import { PROVIDERS } from './providers.js';
6
+ export async function createProjectFiles(cwd, cfg) {
7
+ const created = [];
8
+ // .koneckrc
9
+ const rc = { provider: cfg.provider };
10
+ if (cfg.model)
11
+ rc.model = cfg.model;
12
+ if (cfg.requireApproval)
13
+ rc.requireApproval = true;
14
+ if (cfg.useWorktree)
15
+ rc.useWorktree = true;
16
+ const rcPath = path.join(cwd, '.koneckrc');
17
+ await fs.writeFile(rcPath, JSON.stringify(rc, null, 2) + '\n');
18
+ created.push(rcPath);
19
+ // .koneck/
20
+ await fs.mkdir(path.join(cwd, '.koneck'), { recursive: true });
21
+ // .koneck/MEMORY.md — only if it doesn't already exist
22
+ const memPath = path.join(cwd, '.koneck', 'MEMORY.md');
23
+ let memExists = false;
24
+ try {
25
+ await fs.access(memPath);
26
+ memExists = true;
27
+ }
28
+ catch { /* create it */ }
29
+ if (!memExists) {
30
+ await fs.writeFile(memPath, '# KONECK Project Memory\n\n' +
31
+ 'Facts remembered by the agent across sessions.\n' +
32
+ 'Edit freely — KONECK reads this at startup.\n' +
33
+ 'Use the `remember` tool during a session to append entries.\n');
34
+ created.push(memPath);
35
+ }
36
+ // .koneck/mcp.json — only if it doesn't already exist
37
+ const mcpPath = path.join(cwd, '.koneck', 'mcp.json');
38
+ let mcpExists = false;
39
+ try {
40
+ await fs.access(mcpPath);
41
+ mcpExists = true;
42
+ }
43
+ catch { /* create it */ }
44
+ if (!mcpExists) {
45
+ await fs.writeFile(mcpPath, JSON.stringify({ servers: {} }, null, 2) + '\n');
46
+ created.push(mcpPath);
47
+ }
48
+ // .koneck/plugins/
49
+ const pluginsDir = path.join(cwd, '.koneck', 'plugins');
50
+ await fs.mkdir(pluginsDir, { recursive: true });
51
+ created.push(pluginsDir);
52
+ return created;
53
+ }
54
+ export async function runInit(cwd) {
55
+ console.log(chalk.cyan.bold('\n koneck init — set up your project\n'));
56
+ const providerChoices = Object.entries(PROVIDERS).map(([key, def]) => ({
57
+ value: key,
58
+ name: `${key}${def.defaultModel ? chalk.dim(' (' + def.defaultModel + ')') : ''}`,
59
+ }));
60
+ const provider = await select({
61
+ message: 'Default provider:',
62
+ choices: providerChoices,
63
+ });
64
+ const modelInput = await input({
65
+ message: 'Default model (blank = provider default):',
66
+ default: '',
67
+ });
68
+ const requireApproval = await confirm({
69
+ message: 'Require approval before file writes and commands?',
70
+ default: false,
71
+ });
72
+ const useWorktree = await confirm({
73
+ message: 'Isolate tasks in git worktrees?',
74
+ default: false,
75
+ });
76
+ const cfg = {
77
+ provider,
78
+ model: modelInput.trim() || undefined,
79
+ requireApproval,
80
+ useWorktree,
81
+ };
82
+ const created = await createProjectFiles(cwd, cfg);
83
+ console.log('\n Created:');
84
+ for (const f of created) {
85
+ console.log(chalk.green(' ' + path.relative(cwd, f)));
86
+ }
87
+ console.log();
88
+ console.log(chalk.dim(' Run: koneck "your first task"'));
89
+ console.log(chalk.dim(' MCP servers: edit .koneck/mcp.json'));
90
+ console.log(chalk.dim(' Plugins: add .koneck/plugins/<name>.js'));
91
+ console.log();
92
+ }
93
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ export interface MCPServerConfig {
3
+ command: string;
4
+ args?: string[];
5
+ env?: Record<string, string>;
6
+ }
7
+ export interface MCPConfig {
8
+ servers: Record<string, MCPServerConfig>;
9
+ }
10
+ export interface MCPToolDef {
11
+ name: string;
12
+ description?: string;
13
+ inputSchema?: Record<string, unknown>;
14
+ }
15
+ export interface MCPClientEntry {
16
+ serverName: string;
17
+ client: Client;
18
+ tools: MCPToolDef[];
19
+ }
20
+ export declare function loadMCPConfig(cwd: string): Promise<MCPConfig | null>;
21
+ export declare function connectMCPServers(mcpConfig: MCPConfig): Promise<MCPClientEntry[]>;
22
+ export declare function callMCPTool(serverName: string, toolName: string, args: Record<string, unknown>, clients: MCPClientEntry[]): Promise<string>;
23
+ export declare function disconnectMCPServers(clients: MCPClientEntry[]): Promise<void>;
24
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAO1E;AAUD,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAuCvF;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,cAAc,EAAE,GACxB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF"}