@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,226 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { resolveBindingsPath } from '@actrun_ai/tastekit-core/utils';
|
|
7
|
+
import { getGlobalOptions, header, detail, hint, table, handleError, jsonOutput, verbose } from '../ui.js';
|
|
8
|
+
function getRegistryPath() {
|
|
9
|
+
return join(process.cwd(), '.tastekit', 'mcp', 'servers.json');
|
|
10
|
+
}
|
|
11
|
+
function loadRegistry() {
|
|
12
|
+
const path = getRegistryPath();
|
|
13
|
+
if (!existsSync(path)) {
|
|
14
|
+
return { servers: {} };
|
|
15
|
+
}
|
|
16
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
17
|
+
}
|
|
18
|
+
function saveRegistry(registry) {
|
|
19
|
+
const path = getRegistryPath();
|
|
20
|
+
mkdirSync(join(path, '..'), { recursive: true });
|
|
21
|
+
writeFileSync(path, JSON.stringify(registry, null, 2), 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
const mcpAddCommand = new Command('add')
|
|
24
|
+
.description('Add an MCP server')
|
|
25
|
+
.argument('<server_ref>', 'Server command or URL')
|
|
26
|
+
.option('--name <name>', 'Server name')
|
|
27
|
+
.option('--args <args>', 'Command arguments (comma-separated)')
|
|
28
|
+
.option('--pin', 'Pin server fingerprint after adding')
|
|
29
|
+
.action(async (serverRef, options, cmd) => {
|
|
30
|
+
const globals = getGlobalOptions(cmd);
|
|
31
|
+
const spinner = ora(`Adding MCP server: ${serverRef}`).start();
|
|
32
|
+
try {
|
|
33
|
+
const registry = loadRegistry();
|
|
34
|
+
const name = options.name || serverRef.split('/').pop()?.replace(/[^a-zA-Z0-9-]/g, '') || 'server';
|
|
35
|
+
// Determine if this is a command (stdio) or URL (http)
|
|
36
|
+
const isUrl = serverRef.startsWith('http://') || serverRef.startsWith('https://');
|
|
37
|
+
registry.servers[name] = {
|
|
38
|
+
name,
|
|
39
|
+
...(isUrl ? { url: serverRef, transport: 'streamable-http' } : {
|
|
40
|
+
command: serverRef,
|
|
41
|
+
args: options.args ? options.args.split(',') : [],
|
|
42
|
+
transport: 'stdio',
|
|
43
|
+
}),
|
|
44
|
+
pinned: false,
|
|
45
|
+
added_at: new Date().toISOString(),
|
|
46
|
+
};
|
|
47
|
+
saveRegistry(registry);
|
|
48
|
+
spinner.succeed(chalk.green(`MCP server added: ${name}`));
|
|
49
|
+
if (globals.json) {
|
|
50
|
+
jsonOutput({ name, transport: isUrl ? 'streamable-http' : 'stdio', ref: serverRef });
|
|
51
|
+
}
|
|
52
|
+
detail('Transport', isUrl ? 'streamable-http' : 'stdio');
|
|
53
|
+
detail('Ref', serverRef);
|
|
54
|
+
console.log('');
|
|
55
|
+
hint(`tastekit mcp inspect ${name}`, 'discover tools');
|
|
56
|
+
hint('tastekit mcp bind', 'select and bind tools');
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
handleError(error, spinner);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const mcpListCommand = new Command('list')
|
|
63
|
+
.description('List configured MCP servers')
|
|
64
|
+
.action(async (_options, cmd) => {
|
|
65
|
+
const globals = getGlobalOptions(cmd);
|
|
66
|
+
const registry = loadRegistry();
|
|
67
|
+
const servers = Object.values(registry.servers);
|
|
68
|
+
if (servers.length === 0) {
|
|
69
|
+
if (globals.json)
|
|
70
|
+
jsonOutput({ servers: [] });
|
|
71
|
+
console.log(chalk.gray('No MCP servers configured.'));
|
|
72
|
+
hint('tastekit mcp add <command_or_url>', 'add a server');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (globals.json) {
|
|
76
|
+
jsonOutput({ servers });
|
|
77
|
+
}
|
|
78
|
+
header('MCP Servers');
|
|
79
|
+
table([
|
|
80
|
+
{ label: 'Name', width: 20 },
|
|
81
|
+
{ label: 'Transport', width: 16 },
|
|
82
|
+
{ label: 'Ref', width: 30 },
|
|
83
|
+
{ label: 'Pinned', width: 10 },
|
|
84
|
+
{ label: 'Added', width: 20 },
|
|
85
|
+
], servers.map(s => [
|
|
86
|
+
chalk.bold(s.name),
|
|
87
|
+
s.transport || 'stdio',
|
|
88
|
+
s.url || s.command || '',
|
|
89
|
+
s.pinned ? chalk.green('yes') : chalk.gray('no'),
|
|
90
|
+
s.added_at.split('T')[0],
|
|
91
|
+
]));
|
|
92
|
+
console.log(chalk.gray(`\n ${servers.length} server(s) configured.`));
|
|
93
|
+
});
|
|
94
|
+
const mcpInspectCommand = new Command('inspect')
|
|
95
|
+
.description('Inspect an MCP server (discover tools, resources, prompts)')
|
|
96
|
+
.argument('<server>', 'Server name from registry')
|
|
97
|
+
.action(async (serverName, _options, cmd) => {
|
|
98
|
+
const globals = getGlobalOptions(cmd);
|
|
99
|
+
const registry = loadRegistry();
|
|
100
|
+
const serverConfig = registry.servers[serverName];
|
|
101
|
+
if (!serverConfig) {
|
|
102
|
+
console.error(chalk.red(`Server not found: ${serverName}`));
|
|
103
|
+
hint('tastekit mcp list', 'see configured servers');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const spinner = ora(`Connecting to ${serverName}...`).start();
|
|
107
|
+
try {
|
|
108
|
+
const { MCPClient } = await import('@actrun_ai/tastekit-core/mcp');
|
|
109
|
+
const client = new MCPClient(serverConfig);
|
|
110
|
+
await client.connect();
|
|
111
|
+
verbose(`Connected to ${serverName}`, globals);
|
|
112
|
+
spinner.text = `Discovering capabilities of ${serverName}...`;
|
|
113
|
+
const tools = await client.listTools();
|
|
114
|
+
const resources = await client.listResources();
|
|
115
|
+
const prompts = await client.listPrompts();
|
|
116
|
+
const fingerprint = await client.getFingerprint();
|
|
117
|
+
await client.disconnect();
|
|
118
|
+
spinner.succeed(chalk.green(`Inspected: ${serverName}`));
|
|
119
|
+
if (globals.json) {
|
|
120
|
+
jsonOutput({ server: serverName, fingerprint, tools, resources, prompts });
|
|
121
|
+
}
|
|
122
|
+
detail('Fingerprint', fingerprint);
|
|
123
|
+
console.log('');
|
|
124
|
+
if (tools.length > 0) {
|
|
125
|
+
console.log(chalk.bold(' Tools:'));
|
|
126
|
+
table([
|
|
127
|
+
{ label: 'Name', width: 24 },
|
|
128
|
+
{ label: 'Risk', width: 14 },
|
|
129
|
+
{ label: 'Description', width: 40 },
|
|
130
|
+
], tools.map((tool) => [
|
|
131
|
+
tool.name,
|
|
132
|
+
tool.annotations?.destructive ? chalk.red('destructive')
|
|
133
|
+
: tool.annotations?.risk === 'high' ? chalk.yellow('high')
|
|
134
|
+
: chalk.green('low'),
|
|
135
|
+
tool.description || '',
|
|
136
|
+
]));
|
|
137
|
+
console.log('');
|
|
138
|
+
}
|
|
139
|
+
if (resources.length > 0) {
|
|
140
|
+
console.log(chalk.bold(' Resources:'));
|
|
141
|
+
for (const r of resources) {
|
|
142
|
+
console.log(` ${r.uri} ${r.name ? chalk.gray(`(${r.name})`) : ''}`);
|
|
143
|
+
}
|
|
144
|
+
console.log('');
|
|
145
|
+
}
|
|
146
|
+
if (prompts.length > 0) {
|
|
147
|
+
console.log(chalk.bold(' Prompts:'));
|
|
148
|
+
for (const p of prompts) {
|
|
149
|
+
console.log(` ${p.name} ${p.description ? chalk.gray(`- ${p.description}`) : ''}`);
|
|
150
|
+
}
|
|
151
|
+
console.log('');
|
|
152
|
+
}
|
|
153
|
+
if (tools.length === 0 && resources.length === 0 && prompts.length === 0) {
|
|
154
|
+
console.log(chalk.yellow(' No tools, resources, or prompts discovered.'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
handleError(error, spinner);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
const mcpBindCommand = new Command('bind')
|
|
162
|
+
.description('Select and bind tools from MCP servers')
|
|
163
|
+
.option('--server <name>', 'Bind tools from specific server')
|
|
164
|
+
.option('--all', 'Bind all tools from all servers')
|
|
165
|
+
.action(async (options, cmd) => {
|
|
166
|
+
const globals = getGlobalOptions(cmd);
|
|
167
|
+
const spinner = ora('Binding MCP tools...').start();
|
|
168
|
+
try {
|
|
169
|
+
const registry = loadRegistry();
|
|
170
|
+
const servers = options.server
|
|
171
|
+
? [registry.servers[options.server]].filter(Boolean)
|
|
172
|
+
: Object.values(registry.servers);
|
|
173
|
+
if (servers.length === 0) {
|
|
174
|
+
spinner.info(chalk.yellow('No servers to bind. Add servers with `tastekit mcp add`.'));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const { MCPClient, MCPBinder } = await import('@actrun_ai/tastekit-core/mcp');
|
|
178
|
+
const binder = new MCPBinder();
|
|
179
|
+
const allBindings = [];
|
|
180
|
+
const allGuardrails = [];
|
|
181
|
+
for (const serverConfig of servers) {
|
|
182
|
+
const client = new MCPClient(serverConfig);
|
|
183
|
+
try {
|
|
184
|
+
await client.connect();
|
|
185
|
+
verbose(`Binding tools from ${serverConfig.name}`, globals);
|
|
186
|
+
const { bindings, guardrails } = await binder.bindServer(client, serverConfig.name, serverConfig.url || serverConfig.command || '', { autoApproveRead: true });
|
|
187
|
+
allBindings.push(bindings);
|
|
188
|
+
allGuardrails.push(...guardrails);
|
|
189
|
+
await client.disconnect();
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
193
|
+
console.error(chalk.yellow(` Skipping ${serverConfig.name}: ${msg}`));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Save bindings
|
|
197
|
+
const bindingsArtifact = {
|
|
198
|
+
schema_version: 'bindings.v1',
|
|
199
|
+
servers: allBindings,
|
|
200
|
+
};
|
|
201
|
+
const workspacePath = join(process.cwd(), '.tastekit');
|
|
202
|
+
const bindingsPath = join(workspacePath, 'bindings.v1.json');
|
|
203
|
+
const priorBindingsPath = resolveBindingsPath(workspacePath);
|
|
204
|
+
mkdirSync(workspacePath, { recursive: true });
|
|
205
|
+
writeFileSync(bindingsPath, JSON.stringify(bindingsArtifact, null, 2), 'utf-8');
|
|
206
|
+
const totalTools = allBindings.reduce((sum, b) => sum + (b.tools?.length || 0), 0);
|
|
207
|
+
spinner.succeed(chalk.green(`Bound ${totalTools} tool(s) from ${allBindings.length} server(s)`));
|
|
208
|
+
if (globals.json) {
|
|
209
|
+
jsonOutput(bindingsArtifact);
|
|
210
|
+
}
|
|
211
|
+
detail('Bindings saved to', '.tastekit/bindings.v1.json');
|
|
212
|
+
if (priorBindingsPath !== bindingsPath && existsSync(priorBindingsPath)) {
|
|
213
|
+
detail('Legacy bindings detected', priorBindingsPath);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
handleError(error, spinner);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
export const mcpCommand = new Command('mcp')
|
|
221
|
+
.description('Manage MCP server bindings')
|
|
222
|
+
.addCommand(mcpAddCommand)
|
|
223
|
+
.addCommand(mcpListCommand)
|
|
224
|
+
.addCommand(mcpInspectCommand)
|
|
225
|
+
.addCommand(mcpBindCommand);
|
|
226
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type LLMProviderConfig } from '@actrun_ai/tastekit-core/llm';
|
|
3
|
+
import { WorkspaceConfig } from '@actrun_ai/tastekit-core/schemas';
|
|
4
|
+
export declare function resolveOnboardProviderConfig(configured: WorkspaceConfig['llm_provider'], providerOverride?: string): LLMProviderConfig | undefined;
|
|
5
|
+
export declare const onboardCommand: Command;
|
|
6
|
+
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAQlD,OAAO,EAAuC,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAE3G,OAAO,EAAE,eAAe,EAAkB,MAAM,kCAAkC,CAAC;AAWnF,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,eAAe,CAAC,cAAc,CAAC,EAC3C,gBAAgB,CAAC,EAAE,MAAM,GACxB,iBAAiB,GAAG,SAAS,CAmB/B;AAED,eAAO,MAAM,cAAc,SAsKvB,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Command, createOption } from 'commander';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync } from 'fs';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import YAML from 'yaml';
|
|
8
|
+
import { createSession, loadSession, saveSession, Interviewer } from '@actrun_ai/tastekit-core/interview';
|
|
9
|
+
import { resolveProvider, autoDetectProvider } from '@actrun_ai/tastekit-core/llm';
|
|
10
|
+
import { getDomainRubric } from '@actrun_ai/tastekit-core/domains';
|
|
11
|
+
import { resolveSessionPath } from '@actrun_ai/tastekit-core/utils';
|
|
12
|
+
import { detail, hint, handleError } from '../ui.js';
|
|
13
|
+
export function resolveOnboardProviderConfig(configured, providerOverride) {
|
|
14
|
+
if (!providerOverride) {
|
|
15
|
+
return configured;
|
|
16
|
+
}
|
|
17
|
+
const overrideProvider = providerOverride;
|
|
18
|
+
// Preserve configured provider settings when the override only reaffirms provider choice.
|
|
19
|
+
if (configured?.provider === overrideProvider) {
|
|
20
|
+
return {
|
|
21
|
+
provider: overrideProvider,
|
|
22
|
+
...(configured.model ? { model: configured.model } : {}),
|
|
23
|
+
...(configured.base_url ? { base_url: configured.base_url } : {}),
|
|
24
|
+
...(configured.api_key_env ? { api_key_env: configured.api_key_env } : {}),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// Cross-provider override should not leak stale provider-specific settings.
|
|
28
|
+
return { provider: overrideProvider };
|
|
29
|
+
}
|
|
30
|
+
export const onboardCommand = new Command('onboard')
|
|
31
|
+
.description('Run the LLM-driven onboarding interview')
|
|
32
|
+
.addOption(createOption('--depth <type>', 'Override depth').choices(['quick', 'guided', 'operator']))
|
|
33
|
+
.option('--resume', 'Resume from previous session')
|
|
34
|
+
.option('--provider <name>', 'Override LLM provider: anthropic, openai, ollama')
|
|
35
|
+
.option('--voice', 'Enable voice mode (requires @actrun_ai/tastekit-voice and sox)')
|
|
36
|
+
.action(async (options) => {
|
|
37
|
+
const workspacePath = join(process.cwd(), '.tastekit');
|
|
38
|
+
const configPath = join(workspacePath, 'tastekit.yaml');
|
|
39
|
+
const sessionPath = resolveSessionPath(workspacePath);
|
|
40
|
+
if (!existsSync(workspacePath)) {
|
|
41
|
+
console.error(chalk.red('No TasteKit workspace found. Run'), chalk.bold('tastekit init'), chalk.red('first.'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
if (!existsSync(configPath)) {
|
|
45
|
+
console.error(chalk.red('No tastekit.yaml found. Run'), chalk.bold('tastekit init'), chalk.red('first.'));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
mkdirSync(dirname(sessionPath), { recursive: true });
|
|
49
|
+
// Load config
|
|
50
|
+
const config = YAML.parse(readFileSync(configPath, 'utf-8'));
|
|
51
|
+
const depth = (options.depth ?? config.onboarding?.depth ?? 'guided');
|
|
52
|
+
const domainId = config.domain_id;
|
|
53
|
+
if (!domainId) {
|
|
54
|
+
console.error(chalk.red('No domain selected. Run'), chalk.bold('tastekit init'), chalk.red('to set up your workspace.'));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
// Resolve LLM provider
|
|
58
|
+
const spinner = ora('Connecting to LLM...').start();
|
|
59
|
+
let voiceIO = null;
|
|
60
|
+
try {
|
|
61
|
+
const providerConfig = resolveOnboardProviderConfig(config.llm_provider, options.provider)
|
|
62
|
+
?? await autoDetectProvider();
|
|
63
|
+
const llm = await resolveProvider(providerConfig);
|
|
64
|
+
spinner.succeed(`Connected to ${chalk.bold(llm.name)}`);
|
|
65
|
+
// Load domain rubric (fall back to universal-only if no domain rubric)
|
|
66
|
+
const rubric = getDomainRubric(domainId) ?? {
|
|
67
|
+
domain_id: domainId,
|
|
68
|
+
version: '0.1.0',
|
|
69
|
+
interview_goal: `Configure a ${domainId} agent based on your preferences and principles.`,
|
|
70
|
+
dimensions: [],
|
|
71
|
+
includes_universal: true,
|
|
72
|
+
};
|
|
73
|
+
// Create or resume session
|
|
74
|
+
let session;
|
|
75
|
+
let resumeState;
|
|
76
|
+
if (options.resume && existsSync(sessionPath)) {
|
|
77
|
+
session = loadSession(sessionPath);
|
|
78
|
+
resumeState = session.interview;
|
|
79
|
+
if (resumeState?.is_complete) {
|
|
80
|
+
console.log(chalk.yellow('Previous session is already complete. Starting fresh.'));
|
|
81
|
+
session = createSession(depth);
|
|
82
|
+
resumeState = undefined;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log(chalk.green('Resuming previous session...'));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
session = createSession(depth);
|
|
90
|
+
}
|
|
91
|
+
session.domain_id = domainId;
|
|
92
|
+
session.llm_provider = { name: llm.name };
|
|
93
|
+
// Set up voice mode if requested
|
|
94
|
+
if (options.voice) {
|
|
95
|
+
try {
|
|
96
|
+
const { createVoiceIO } = await import('@actrun_ai/tastekit-voice');
|
|
97
|
+
voiceIO = await createVoiceIO(config.voice);
|
|
98
|
+
console.log(chalk.green('Voice mode enabled. Speak into your microphone.'));
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
102
|
+
console.warn(chalk.yellow(`Voice mode unavailable: ${msg}`));
|
|
103
|
+
console.warn(chalk.yellow('Falling back to text input.\n'));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
console.log(chalk.bold.cyan('\nTasteKit Onboarding Interview\n'));
|
|
107
|
+
console.log(chalk.gray(`Domain: ${domainId} | Depth: ${depth} | LLM: ${llm.name}${voiceIO ? ' | Voice: ON' : ''}`));
|
|
108
|
+
if (!voiceIO) {
|
|
109
|
+
console.log(chalk.gray('Type /save to save and quit, /skip to skip a topic\n'));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.log(chalk.gray('Say "save" to save and quit, "skip" to skip a topic\n'));
|
|
113
|
+
}
|
|
114
|
+
// Run interviewer
|
|
115
|
+
const interviewer = new Interviewer({
|
|
116
|
+
llm,
|
|
117
|
+
rubric,
|
|
118
|
+
depth,
|
|
119
|
+
resumeFrom: resumeState,
|
|
120
|
+
onInterviewerMessage: voiceIO
|
|
121
|
+
? (msg) => voiceIO.onInterviewerMessage(msg)
|
|
122
|
+
: (msg) => {
|
|
123
|
+
console.log(chalk.cyan('\n ') + msg + '\n');
|
|
124
|
+
},
|
|
125
|
+
getUserInput: voiceIO
|
|
126
|
+
? async () => {
|
|
127
|
+
try {
|
|
128
|
+
return await voiceIO.getUserInput();
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Turn-level fallback to text input
|
|
132
|
+
console.warn(chalk.yellow(' Voice input failed. Type your response:'));
|
|
133
|
+
const { answer } = await inquirer.prompt([{
|
|
134
|
+
type: 'input',
|
|
135
|
+
name: 'answer',
|
|
136
|
+
message: chalk.green('You:'),
|
|
137
|
+
validate: (input) => input.length > 0 || 'Please type a response',
|
|
138
|
+
}]);
|
|
139
|
+
return answer;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
: async () => {
|
|
143
|
+
const { answer } = await inquirer.prompt([{
|
|
144
|
+
type: 'input',
|
|
145
|
+
name: 'answer',
|
|
146
|
+
message: chalk.green('You:'),
|
|
147
|
+
validate: (input) => input.length > 0 || 'Please type a response (or /save to save and quit)',
|
|
148
|
+
}]);
|
|
149
|
+
return answer;
|
|
150
|
+
},
|
|
151
|
+
onStateChange: (state) => {
|
|
152
|
+
session.interview = state;
|
|
153
|
+
session.current_step = 'interview';
|
|
154
|
+
saveSession(sessionPath, session);
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
const structuredAnswers = await interviewer.run();
|
|
158
|
+
// Save final session
|
|
159
|
+
session.structured_answers = structuredAnswers;
|
|
160
|
+
session.completed_steps = ['welcome', 'interview'];
|
|
161
|
+
session.current_step = 'complete';
|
|
162
|
+
session.interview = interviewer.getState();
|
|
163
|
+
saveSession(sessionPath, session);
|
|
164
|
+
// Show coverage summary
|
|
165
|
+
const state = interviewer.getState();
|
|
166
|
+
const covered = state.dimension_coverage.filter(d => d.status === 'covered').length;
|
|
167
|
+
const total = state.dimension_coverage.length;
|
|
168
|
+
const skipped = state.dimension_coverage.filter(d => d.status === 'skipped').length;
|
|
169
|
+
console.log(chalk.bold.green('\nOnboarding complete!'));
|
|
170
|
+
detail('Dimensions covered', `${covered}/${total}${skipped > 0 ? ` (${skipped} skipped)` : ''}`);
|
|
171
|
+
detail('Principles extracted', String(structuredAnswers.principles?.length ?? 0));
|
|
172
|
+
detail('Session saved to', '.tastekit/session.json');
|
|
173
|
+
console.log('');
|
|
174
|
+
hint('tastekit compile', 'generate your taste artifacts');
|
|
175
|
+
// Clean up voice resources
|
|
176
|
+
if (voiceIO) {
|
|
177
|
+
await voiceIO.dispose();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (voiceIO)
|
|
182
|
+
await voiceIO.dispose().catch(() => { });
|
|
183
|
+
handleError(error, spinner);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=onboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate.d.ts","sourceRoot":"","sources":["../../src/commands/simulate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,eAAe,SAYxB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export const simulateCommand = new Command('simulate')
|
|
4
|
+
.description('Dry-run a skill or playbook against your taste profile (planned for v1.1)')
|
|
5
|
+
.option('--skill <id>', 'Skill to simulate')
|
|
6
|
+
.option('--playbook <id>', 'Playbook to simulate')
|
|
7
|
+
.option('--no-side-effects', 'Disable side effects')
|
|
8
|
+
.action(async () => {
|
|
9
|
+
console.log(chalk.cyan('Simulation is planned for TasteKit v1.1.') + '\n\n' +
|
|
10
|
+
'This feature will let you dry-run skills and playbooks against your\n' +
|
|
11
|
+
'taste profile to preview outputs without side effects.\n\n' +
|
|
12
|
+
chalk.dim('Track progress: https://github.com/tastekit/tastekit/issues'));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=simulate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../src/commands/simulate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,GAAG,MAAM;QAC/D,uEAAuE;QACvE,4DAA4D;QAC5D,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CACzE,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAydpC,eAAO,MAAM,aAAa,SASU,CAAC"}
|