@actrun_ai/tastekit-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/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +67 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +61 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/completion.d.ts +9 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +191 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/drift.d.ts +3 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +175 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/eval.d.ts +3 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +147 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +279 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +315 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +213 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +226 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/onboard.d.ts +6 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +186 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/simulate.d.ts +3 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +14 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +419 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/trust.d.ts +3 -0
- package/dist/commands/trust.d.ts.map +1 -0
- package/dist/commands/trust.js +183 -0
- package/dist/commands/trust.js.map +1 -0
- package/dist/ui.d.ts +70 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +144 -0
- package/dist/ui.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { Command, createOption } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { detail, hint, handleError } from '../ui.js';
|
|
7
|
+
export const importCommand = new Command('import')
|
|
8
|
+
.description('Import from runtime format, SOUL.md, or Agent File (.af)')
|
|
9
|
+
.addOption(createOption('--target <adapter>', 'Source format').choices(['claude-code', 'manus', 'openclaw', 'autopilots', 'soul-md', 'agent-file']))
|
|
10
|
+
.option('--source <path>', 'Source path or directory')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
if (!options.target) {
|
|
13
|
+
console.error(chalk.red('Please specify a source format with --target'));
|
|
14
|
+
console.log(chalk.gray('Available: claude-code, manus, openclaw, autopilots, soul-md, agent-file'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
if (!options.source) {
|
|
18
|
+
console.error(chalk.red('Please specify a source path with --source'));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
if (options.target === 'soul-md') {
|
|
22
|
+
await importSoulMd(options.source);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (options.target === 'agent-file') {
|
|
26
|
+
await importAgentFile(options.source);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
console.error(chalk.yellow(`Import from ${options.target} adapter format not yet implemented.`));
|
|
30
|
+
console.log(chalk.cyan('Use --target soul-md or --target agent-file to import.'));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Import from OpenClaw SOUL.md and IDENTITY.md files into TasteKit constitution.
|
|
35
|
+
*/
|
|
36
|
+
async function importSoulMd(sourcePath) {
|
|
37
|
+
const spinner = ora('Importing from SOUL.md...').start();
|
|
38
|
+
try {
|
|
39
|
+
// Try to find SOUL.md and IDENTITY.md
|
|
40
|
+
const soulPath = existsSync(join(sourcePath, 'SOUL.md'))
|
|
41
|
+
? join(sourcePath, 'SOUL.md')
|
|
42
|
+
: existsSync(sourcePath) && sourcePath.endsWith('.md')
|
|
43
|
+
? sourcePath
|
|
44
|
+
: null;
|
|
45
|
+
if (!soulPath) {
|
|
46
|
+
spinner.fail(chalk.red(`SOUL.md not found at ${sourcePath}`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
const soulContent = readFileSync(soulPath, 'utf-8');
|
|
50
|
+
// Try to read IDENTITY.md from same directory
|
|
51
|
+
const identityPath = join(soulPath, '..', 'IDENTITY.md');
|
|
52
|
+
const identityContent = existsSync(identityPath)
|
|
53
|
+
? readFileSync(identityPath, 'utf-8')
|
|
54
|
+
: null;
|
|
55
|
+
// Parse SOUL.md sections
|
|
56
|
+
const sections = parseMdSections(soulContent);
|
|
57
|
+
const identitySections = identityContent ? parseMdSections(identityContent) : {};
|
|
58
|
+
// Build constitution from parsed content
|
|
59
|
+
const constitution = buildConstitutionFromSoul(sections, identitySections);
|
|
60
|
+
// Write to .tastekit/
|
|
61
|
+
const tastekitDir = join(process.cwd(), '.tastekit');
|
|
62
|
+
const constitutionPath = join(tastekitDir, 'constitution.v1.json');
|
|
63
|
+
mkdirSync(tastekitDir, { recursive: true });
|
|
64
|
+
writeFileSync(constitutionPath, JSON.stringify(constitution, null, 2), 'utf-8');
|
|
65
|
+
spinner.succeed(chalk.green('Imported SOUL.md into TasteKit constitution'));
|
|
66
|
+
console.log('');
|
|
67
|
+
detail('SOUL.md', soulPath);
|
|
68
|
+
if (identityContent) {
|
|
69
|
+
detail('IDENTITY.md', identityPath);
|
|
70
|
+
}
|
|
71
|
+
detail('Artifact', constitutionPath);
|
|
72
|
+
console.log('');
|
|
73
|
+
hint('tastekit compile', 'generate remaining artifacts');
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
handleError(error, spinner);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function parseMdSections(content) {
|
|
80
|
+
const sections = {};
|
|
81
|
+
const lines = content.split('\n');
|
|
82
|
+
let currentSection = '_preamble';
|
|
83
|
+
let currentContent = [];
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
const headingMatch = line.match(/^#{1,3}\s+(.+)/);
|
|
86
|
+
if (headingMatch) {
|
|
87
|
+
if (currentContent.length > 0) {
|
|
88
|
+
sections[currentSection] = currentContent.join('\n').trim();
|
|
89
|
+
}
|
|
90
|
+
currentSection = headingMatch[1].trim().toLowerCase();
|
|
91
|
+
currentContent = [];
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
currentContent.push(line);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (currentContent.length > 0) {
|
|
98
|
+
sections[currentSection] = currentContent.join('\n').trim();
|
|
99
|
+
}
|
|
100
|
+
return sections;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Import from Letta Agent File (.af) format into TasteKit constitution.
|
|
104
|
+
*
|
|
105
|
+
* Extracts persona/soul/preferences blocks and agent system prompt.
|
|
106
|
+
* Ignores runtime state (messages, llm_config, tools).
|
|
107
|
+
*/
|
|
108
|
+
async function importAgentFile(sourcePath) {
|
|
109
|
+
const spinner = ora('Importing from Agent File (.af)...').start();
|
|
110
|
+
try {
|
|
111
|
+
if (!existsSync(sourcePath)) {
|
|
112
|
+
spinner.fail(chalk.red(`File not found: ${sourcePath}`));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const raw = readFileSync(sourcePath, 'utf-8');
|
|
116
|
+
const af = JSON.parse(raw);
|
|
117
|
+
// Support both v2 (top-level arrays) and v1 (flat agent) formats
|
|
118
|
+
const agents = af.agents || (af.agent_type ? [af] : []);
|
|
119
|
+
const blocks = af.blocks || [];
|
|
120
|
+
if (agents.length === 0) {
|
|
121
|
+
spinner.fail(chalk.red('No agents found in the .af file'));
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
const agent = agents[0];
|
|
125
|
+
// Resolve blocks referenced by the agent
|
|
126
|
+
const agentBlockIds = new Set(agent.block_ids || []);
|
|
127
|
+
const agentBlocks = blocks.filter((b) => agentBlockIds.has(b.id));
|
|
128
|
+
// If no block_ids, try inline blocks or use all blocks
|
|
129
|
+
if (agentBlocks.length === 0 && blocks.length > 0) {
|
|
130
|
+
agentBlocks.push(...blocks);
|
|
131
|
+
}
|
|
132
|
+
const constitution = buildConstitutionFromAgentFile(agent, agentBlocks);
|
|
133
|
+
// Write to .tastekit/
|
|
134
|
+
const tastekitDir = join(process.cwd(), '.tastekit');
|
|
135
|
+
const constitutionPath = join(tastekitDir, 'constitution.v1.json');
|
|
136
|
+
mkdirSync(tastekitDir, { recursive: true });
|
|
137
|
+
writeFileSync(constitutionPath, JSON.stringify(constitution, null, 2), 'utf-8');
|
|
138
|
+
spinner.succeed(chalk.green('Imported Agent File (.af) into TasteKit constitution'));
|
|
139
|
+
console.log('');
|
|
140
|
+
detail('Agent File', sourcePath);
|
|
141
|
+
detail('Agent', agent.name || 'unnamed');
|
|
142
|
+
detail('Blocks found', String(agentBlocks.length));
|
|
143
|
+
detail('Artifact', constitutionPath);
|
|
144
|
+
console.log('');
|
|
145
|
+
hint('tastekit compile', 'generate remaining artifacts');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
handleError(error, spinner);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function buildConstitutionFromAgentFile(agent, blocks) {
|
|
152
|
+
const principles = [];
|
|
153
|
+
let priority = 1;
|
|
154
|
+
// Extract personality from persona/soul blocks
|
|
155
|
+
const personalityBlocks = ['persona', 'soul', 'custom_instructions'];
|
|
156
|
+
for (const block of blocks) {
|
|
157
|
+
if (personalityBlocks.includes(block.label)) {
|
|
158
|
+
const bullets = block.value.split('\n')
|
|
159
|
+
.filter(l => l.trim().startsWith('-') || l.trim().startsWith('*'))
|
|
160
|
+
.map(l => l.replace(/^[\s*-]+/, '').trim())
|
|
161
|
+
.filter(l => l.length > 0);
|
|
162
|
+
if (bullets.length > 0) {
|
|
163
|
+
for (const bullet of bullets) {
|
|
164
|
+
principles.push({
|
|
165
|
+
id: `af_${block.label}_${priority}`,
|
|
166
|
+
statement: bullet,
|
|
167
|
+
priority: priority++,
|
|
168
|
+
applies_to: ['*'],
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else if (block.value.trim().length > 0) {
|
|
173
|
+
// Treat the whole block as a principle
|
|
174
|
+
for (const line of block.value.split('\n').filter(l => l.trim().length > 0)) {
|
|
175
|
+
principles.push({
|
|
176
|
+
id: `af_${block.label}_${priority}`,
|
|
177
|
+
statement: line.trim(),
|
|
178
|
+
priority: priority++,
|
|
179
|
+
applies_to: ['*'],
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Extract from system prompt if no blocks yielded principles
|
|
186
|
+
if (principles.length === 0 && agent.system) {
|
|
187
|
+
const lines = agent.system.split('\n')
|
|
188
|
+
.filter((l) => l.trim().length > 10)
|
|
189
|
+
.slice(0, 10);
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
principles.push({
|
|
192
|
+
id: `af_system_${priority}`,
|
|
193
|
+
statement: line.trim(),
|
|
194
|
+
priority: priority++,
|
|
195
|
+
applies_to: ['*'],
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Extract voice keywords from personality-related blocks
|
|
200
|
+
const voiceKeywords = [];
|
|
201
|
+
const preferenceBlocks = ['preferences', 'conversation_patterns'];
|
|
202
|
+
for (const block of blocks) {
|
|
203
|
+
if (preferenceBlocks.includes(block.label)) {
|
|
204
|
+
const words = block.value.split(/[,\n]/)
|
|
205
|
+
.map(w => w.replace(/^[\s*-]+/, '').trim())
|
|
206
|
+
.filter(w => w.length > 0 && w.length < 30);
|
|
207
|
+
voiceKeywords.push(...words.slice(0, 5));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Check for read-only blocks that might be constraints
|
|
211
|
+
const forbiddenPhrases = [];
|
|
212
|
+
for (const block of blocks) {
|
|
213
|
+
if (block.read_only && block.label !== 'persona') {
|
|
214
|
+
const lines = block.value.split('\n')
|
|
215
|
+
.filter(l => l.trim().startsWith('-') || l.trim().startsWith('*'))
|
|
216
|
+
.map(l => l.replace(/^[\s*-]+/, '').trim())
|
|
217
|
+
.filter(l => l.length > 0 && (l.toLowerCase().includes('never') || l.toLowerCase().includes('avoid') || l.toLowerCase().includes("don't")));
|
|
218
|
+
forbiddenPhrases.push(...lines.slice(0, 5));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
schema_version: 'constitution.v1',
|
|
223
|
+
generator_version: '0.5.0',
|
|
224
|
+
principles: principles.slice(0, 20),
|
|
225
|
+
tone: {
|
|
226
|
+
voice_keywords: voiceKeywords.slice(0, 10),
|
|
227
|
+
forbidden_phrases: forbiddenPhrases.slice(0, 10),
|
|
228
|
+
},
|
|
229
|
+
tradeoffs: {
|
|
230
|
+
autonomy_level: 'medium',
|
|
231
|
+
},
|
|
232
|
+
evidence_policy: {
|
|
233
|
+
require_citations_for: [],
|
|
234
|
+
},
|
|
235
|
+
taboos: forbiddenPhrases.slice(0, 5),
|
|
236
|
+
imported_from: 'agent-file',
|
|
237
|
+
imported_at: new Date().toISOString(),
|
|
238
|
+
agent_name: agent.name || undefined,
|
|
239
|
+
agent_description: agent.description || undefined,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function buildConstitutionFromSoul(soul, identity) {
|
|
243
|
+
// Extract principles from SOUL.md sections
|
|
244
|
+
const principles = [];
|
|
245
|
+
let priority = 1;
|
|
246
|
+
for (const [section, content] of Object.entries(soul)) {
|
|
247
|
+
if (section === '_preamble')
|
|
248
|
+
continue;
|
|
249
|
+
// Extract bullet points as principles
|
|
250
|
+
const bullets = content.split('\n')
|
|
251
|
+
.filter(l => l.trim().startsWith('-') || l.trim().startsWith('*'))
|
|
252
|
+
.map(l => l.replace(/^[\s*-]+/, '').trim())
|
|
253
|
+
.filter(l => l.length > 0);
|
|
254
|
+
if (bullets.length > 0) {
|
|
255
|
+
for (const bullet of bullets) {
|
|
256
|
+
principles.push({
|
|
257
|
+
id: `soul_${section.replace(/\s+/g, '_')}_${priority}`,
|
|
258
|
+
statement: bullet,
|
|
259
|
+
priority: priority++,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else if (content.trim().length > 0) {
|
|
264
|
+
principles.push({
|
|
265
|
+
id: `soul_${section.replace(/\s+/g, '_')}`,
|
|
266
|
+
statement: content.trim().split('\n')[0],
|
|
267
|
+
priority: priority++,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Extract voice keywords from identity or soul
|
|
272
|
+
const voiceKeywords = [];
|
|
273
|
+
const voiceSections = ['voice', 'tone', 'personality', 'communication style'];
|
|
274
|
+
for (const key of voiceSections) {
|
|
275
|
+
const content = soul[key] || identity[key];
|
|
276
|
+
if (content) {
|
|
277
|
+
const words = content.split(/[,\n]/)
|
|
278
|
+
.map(w => w.replace(/^[\s*-]+/, '').trim())
|
|
279
|
+
.filter(w => w.length > 0 && w.length < 30);
|
|
280
|
+
voiceKeywords.push(...words);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Extract forbidden phrases
|
|
284
|
+
const forbiddenPhrases = [];
|
|
285
|
+
const avoidSections = ['avoid', 'don\'t', 'never', 'restrictions', 'taboos'];
|
|
286
|
+
for (const key of avoidSections) {
|
|
287
|
+
const content = soul[key];
|
|
288
|
+
if (content) {
|
|
289
|
+
const phrases = content.split('\n')
|
|
290
|
+
.filter(l => l.trim().startsWith('-') || l.trim().startsWith('*'))
|
|
291
|
+
.map(l => l.replace(/^[\s*-]+/, '').trim())
|
|
292
|
+
.filter(l => l.length > 0);
|
|
293
|
+
forbiddenPhrases.push(...phrases);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
schema_version: 'constitution.v1',
|
|
298
|
+
generator_version: '0.5.0',
|
|
299
|
+
principles: principles.slice(0, 20), // Cap at 20 for readability
|
|
300
|
+
tone: {
|
|
301
|
+
voice_keywords: voiceKeywords.slice(0, 10),
|
|
302
|
+
forbidden_phrases: forbiddenPhrases.slice(0, 10),
|
|
303
|
+
},
|
|
304
|
+
tradeoffs: {
|
|
305
|
+
autonomy_level: 'medium',
|
|
306
|
+
},
|
|
307
|
+
evidence_policy: {
|
|
308
|
+
require_citations_for: [],
|
|
309
|
+
},
|
|
310
|
+
taboos: forbiddenPhrases.slice(0, 5),
|
|
311
|
+
imported_from: 'soul-md',
|
|
312
|
+
imported_at: new Date().toISOString(),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare const initCommand: Command;
|
|
3
|
+
export declare function detectInstalledOllamaModel(baseUrl?: string): Promise<string | undefined>;
|
|
4
|
+
export declare function resolvePreferredOllamaModel(baseUrl?: string): Promise<string | undefined>;
|
|
5
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAgBlD,eAAO,MAAM,WAAW,SAyJpB,CAAC;AAqCL,wBAAsB,0BAA0B,CAAC,OAAO,SAA2B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgBhH;AAED,wBAAsB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM/F"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { Command, createOption } from 'commander';
|
|
2
|
+
import { existsSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import inquirer from 'inquirer';
|
|
7
|
+
import YAML from 'yaml';
|
|
8
|
+
import { listDomains, getDomainRubric } from '@actrun_ai/tastekit-core/domains';
|
|
9
|
+
import { autoDetectProvider } from '@actrun_ai/tastekit-core/llm';
|
|
10
|
+
import { ensureDir } from '@actrun_ai/tastekit-core/utils';
|
|
11
|
+
import { detail, hint, handleError } from '../ui.js';
|
|
12
|
+
export const initCommand = new Command('init')
|
|
13
|
+
.description('Initialize a new TasteKit workspace')
|
|
14
|
+
.argument('[path]', 'Path to initialize workspace', '.')
|
|
15
|
+
.option('--domain <id>', 'Domain ID (skip interactive selection)')
|
|
16
|
+
.addOption(createOption('--depth <type>', 'Onboarding depth').choices(['quick', 'guided', 'operator']))
|
|
17
|
+
.action(async (path, options) => {
|
|
18
|
+
try {
|
|
19
|
+
const workspacePath = join(process.cwd(), path, '.tastekit');
|
|
20
|
+
// Check if workspace already exists
|
|
21
|
+
if (existsSync(workspacePath)) {
|
|
22
|
+
console.error(chalk.red('TasteKit workspace already exists at this location.'));
|
|
23
|
+
console.log(chalk.gray('To reinitialize, delete .tastekit/ first.'));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
console.log(chalk.bold.cyan('\nTasteKit Workspace Setup\n'));
|
|
27
|
+
// Domain selection
|
|
28
|
+
let domainId;
|
|
29
|
+
if (options.domain) {
|
|
30
|
+
domainId = options.domain;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const domains = listDomains();
|
|
34
|
+
const { selectedDomain } = await inquirer.prompt([{
|
|
35
|
+
type: 'list',
|
|
36
|
+
name: 'selectedDomain',
|
|
37
|
+
message: 'What type of agent are you building?',
|
|
38
|
+
choices: domains.map(d => ({
|
|
39
|
+
name: `${d.name}${d.is_stub ? chalk.gray(' (coming soon)') : ''}`,
|
|
40
|
+
value: d.id,
|
|
41
|
+
disabled: d.is_stub ? 'Not yet available' : false,
|
|
42
|
+
})),
|
|
43
|
+
}]);
|
|
44
|
+
domainId = selectedDomain;
|
|
45
|
+
}
|
|
46
|
+
// Check if domain has a rubric
|
|
47
|
+
const rubric = getDomainRubric(domainId);
|
|
48
|
+
if (!rubric) {
|
|
49
|
+
console.log(chalk.yellow(`Note: Domain "${domainId}" doesn't have an interview rubric yet.`));
|
|
50
|
+
console.log(chalk.yellow('The onboarding will use universal dimensions only.'));
|
|
51
|
+
}
|
|
52
|
+
// Depth selection
|
|
53
|
+
let depth;
|
|
54
|
+
if (options.depth) {
|
|
55
|
+
depth = options.depth;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const { selectedDepth } = await inquirer.prompt([{
|
|
59
|
+
type: 'list',
|
|
60
|
+
name: 'selectedDepth',
|
|
61
|
+
message: 'How deep should the onboarding interview go?',
|
|
62
|
+
choices: [
|
|
63
|
+
{ name: 'Quick (~5 min) - Essential preferences only', value: 'quick' },
|
|
64
|
+
{ name: 'Guided (~15 min) - Thorough profile', value: 'guided' },
|
|
65
|
+
{ name: 'Operator (~30 min) - Deep exploration with examples', value: 'operator' },
|
|
66
|
+
],
|
|
67
|
+
default: 'guided',
|
|
68
|
+
}]);
|
|
69
|
+
depth = selectedDepth;
|
|
70
|
+
}
|
|
71
|
+
// LLM provider detection
|
|
72
|
+
let llmConfig;
|
|
73
|
+
const envOllamaModel = process.env.OLLAMA_MODEL?.trim();
|
|
74
|
+
if (envOllamaModel) {
|
|
75
|
+
llmConfig = {
|
|
76
|
+
provider: 'ollama',
|
|
77
|
+
model: envOllamaModel,
|
|
78
|
+
...(process.env.OLLAMA_HOST?.trim() ? { base_url: process.env.OLLAMA_HOST.trim() } : {}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const detectSpinner = ora('Detecting LLM provider...').start();
|
|
83
|
+
try {
|
|
84
|
+
const detected = await autoDetectProvider();
|
|
85
|
+
detectSpinner.succeed(`Detected LLM provider: ${chalk.bold(detected.provider)}`);
|
|
86
|
+
const { useDetected } = await inquirer.prompt([{
|
|
87
|
+
type: 'confirm',
|
|
88
|
+
name: 'useDetected',
|
|
89
|
+
message: `Use ${detected.provider} for onboarding interview?`,
|
|
90
|
+
default: true,
|
|
91
|
+
}]);
|
|
92
|
+
if (useDetected) {
|
|
93
|
+
if (detected.provider === 'ollama') {
|
|
94
|
+
const model = await resolvePreferredOllamaModel(detected.base_url);
|
|
95
|
+
if (model) {
|
|
96
|
+
llmConfig = { ...detected, model };
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const { selectedModel } = await inquirer.prompt([{
|
|
100
|
+
type: 'input',
|
|
101
|
+
name: 'selectedModel',
|
|
102
|
+
message: 'Ollama model name:',
|
|
103
|
+
default: 'llama3.1',
|
|
104
|
+
}]);
|
|
105
|
+
llmConfig = { ...detected, model: selectedModel };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
llmConfig = detected;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
llmConfig = await promptForProvider();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
detectSpinner.warn('No LLM provider auto-detected');
|
|
118
|
+
llmConfig = await promptForProvider();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Create workspace structure
|
|
122
|
+
const createSpinner = ora('Creating workspace...').start();
|
|
123
|
+
ensureDir(workspacePath);
|
|
124
|
+
ensureDir(join(workspacePath, 'skills'));
|
|
125
|
+
ensureDir(join(workspacePath, 'traces'));
|
|
126
|
+
ensureDir(join(workspacePath, 'drift'));
|
|
127
|
+
// Create tastekit.yaml with domain and LLM config
|
|
128
|
+
const config = {
|
|
129
|
+
version: '1.0.0',
|
|
130
|
+
project_name: 'my-taste-profile',
|
|
131
|
+
created_at: new Date().toISOString(),
|
|
132
|
+
domain_id: domainId,
|
|
133
|
+
onboarding: {
|
|
134
|
+
depth,
|
|
135
|
+
completed: false,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
if (llmConfig) {
|
|
139
|
+
config.llm_provider = llmConfig;
|
|
140
|
+
}
|
|
141
|
+
writeFileSync(join(workspacePath, 'tastekit.yaml'), YAML.stringify(config));
|
|
142
|
+
createSpinner.succeed(chalk.green('TasteKit workspace initialized'));
|
|
143
|
+
console.log('');
|
|
144
|
+
detail('Domain', domainId);
|
|
145
|
+
detail('Depth', depth);
|
|
146
|
+
if (llmConfig) {
|
|
147
|
+
detail('LLM', `${llmConfig.provider}${llmConfig.model ? ` (${llmConfig.model})` : ''}`);
|
|
148
|
+
}
|
|
149
|
+
console.log('');
|
|
150
|
+
hint('tastekit onboard', 'start the interview');
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
handleError(error);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
async function promptForProvider() {
|
|
157
|
+
const preferredFromEnv = process.env.OLLAMA_MODEL?.trim();
|
|
158
|
+
const { provider } = await inquirer.prompt([{
|
|
159
|
+
type: 'list',
|
|
160
|
+
name: 'provider',
|
|
161
|
+
message: 'Select your LLM provider:',
|
|
162
|
+
default: preferredFromEnv ? 'ollama' : undefined,
|
|
163
|
+
choices: [
|
|
164
|
+
{ name: 'Anthropic (Claude)', value: 'anthropic' },
|
|
165
|
+
{ name: 'OpenAI (GPT-4)', value: 'openai' },
|
|
166
|
+
{ name: 'Ollama (local)', value: 'ollama' },
|
|
167
|
+
],
|
|
168
|
+
}]);
|
|
169
|
+
const config = { provider };
|
|
170
|
+
if (provider === 'ollama') {
|
|
171
|
+
const suggestedModel = await resolvePreferredOllamaModel();
|
|
172
|
+
const { model } = await inquirer.prompt([{
|
|
173
|
+
type: 'input',
|
|
174
|
+
name: 'model',
|
|
175
|
+
message: 'Ollama model name:',
|
|
176
|
+
default: suggestedModel ?? 'llama3.1',
|
|
177
|
+
}]);
|
|
178
|
+
if (model)
|
|
179
|
+
config.model = model;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const envVar = provider === 'anthropic' ? 'ANTHROPIC_API_KEY' : 'OPENAI_API_KEY';
|
|
183
|
+
if (!process.env[envVar]) {
|
|
184
|
+
console.log(chalk.yellow(`\nNote: Set ${chalk.bold(envVar)} before running onboard.`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return config;
|
|
188
|
+
}
|
|
189
|
+
export async function detectInstalledOllamaModel(baseUrl = 'http://localhost:11434') {
|
|
190
|
+
try {
|
|
191
|
+
const response = await fetch(`${baseUrl}/api/tags`, {
|
|
192
|
+
signal: AbortSignal.timeout(2000),
|
|
193
|
+
});
|
|
194
|
+
if (!response.ok) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
const data = await response.json();
|
|
198
|
+
const model = data.models?.find((entry) => entry.name || entry.model);
|
|
199
|
+
const resolved = (model?.name ?? model?.model)?.trim();
|
|
200
|
+
return resolved && resolved.length > 0 ? resolved : undefined;
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
export async function resolvePreferredOllamaModel(baseUrl) {
|
|
207
|
+
const fromEnv = process.env.OLLAMA_MODEL?.trim();
|
|
208
|
+
if (fromEnv) {
|
|
209
|
+
return fromEnv;
|
|
210
|
+
}
|
|
211
|
+
return await detectInstalledOllamaModel(baseUrl);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4RpC,eAAO,MAAM,UAAU,SAKM,CAAC"}
|