@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.
Files changed (57) hide show
  1. package/dist/cli.d.ts +8 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +67 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/compile.d.ts +3 -0
  6. package/dist/commands/compile.d.ts.map +1 -0
  7. package/dist/commands/compile.js +61 -0
  8. package/dist/commands/compile.js.map +1 -0
  9. package/dist/commands/completion.d.ts +9 -0
  10. package/dist/commands/completion.d.ts.map +1 -0
  11. package/dist/commands/completion.js +191 -0
  12. package/dist/commands/completion.js.map +1 -0
  13. package/dist/commands/drift.d.ts +3 -0
  14. package/dist/commands/drift.d.ts.map +1 -0
  15. package/dist/commands/drift.js +175 -0
  16. package/dist/commands/drift.js.map +1 -0
  17. package/dist/commands/eval.d.ts +3 -0
  18. package/dist/commands/eval.d.ts.map +1 -0
  19. package/dist/commands/eval.js +147 -0
  20. package/dist/commands/eval.js.map +1 -0
  21. package/dist/commands/export.d.ts +3 -0
  22. package/dist/commands/export.d.ts.map +1 -0
  23. package/dist/commands/export.js +279 -0
  24. package/dist/commands/export.js.map +1 -0
  25. package/dist/commands/import.d.ts +3 -0
  26. package/dist/commands/import.d.ts.map +1 -0
  27. package/dist/commands/import.js +315 -0
  28. package/dist/commands/import.js.map +1 -0
  29. package/dist/commands/init.d.ts +5 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +213 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/mcp.d.ts +3 -0
  34. package/dist/commands/mcp.d.ts.map +1 -0
  35. package/dist/commands/mcp.js +226 -0
  36. package/dist/commands/mcp.js.map +1 -0
  37. package/dist/commands/onboard.d.ts +6 -0
  38. package/dist/commands/onboard.d.ts.map +1 -0
  39. package/dist/commands/onboard.js +186 -0
  40. package/dist/commands/onboard.js.map +1 -0
  41. package/dist/commands/simulate.d.ts +3 -0
  42. package/dist/commands/simulate.d.ts.map +1 -0
  43. package/dist/commands/simulate.js +14 -0
  44. package/dist/commands/simulate.js.map +1 -0
  45. package/dist/commands/skills.d.ts +3 -0
  46. package/dist/commands/skills.d.ts.map +1 -0
  47. package/dist/commands/skills.js +419 -0
  48. package/dist/commands/skills.js.map +1 -0
  49. package/dist/commands/trust.d.ts +3 -0
  50. package/dist/commands/trust.d.ts.map +1 -0
  51. package/dist/commands/trust.js +183 -0
  52. package/dist/commands/trust.js.map +1 -0
  53. package/dist/ui.d.ts +70 -0
  54. package/dist/ui.d.ts.map +1 -0
  55. package/dist/ui.js +144 -0
  56. package/dist/ui.js.map +1 -0
  57. 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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const simulateCommand: Command;
3
+ //# sourceMappingURL=simulate.d.ts.map
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const skillsCommand: Command;
3
+ //# sourceMappingURL=skills.d.ts.map
@@ -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"}