vigthoria-cli 1.6.8 → 1.6.13

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 (74) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/auth.d.ts +0 -1
  3. package/dist/commands/auth.js +34 -2
  4. package/dist/commands/bridge.d.ts +7 -0
  5. package/dist/commands/bridge.js +31 -0
  6. package/dist/commands/chat.d.ts +50 -3
  7. package/dist/commands/chat.js +1033 -70
  8. package/dist/commands/config.d.ts +0 -1
  9. package/dist/commands/config.js +0 -1
  10. package/dist/commands/deploy.d.ts +0 -1
  11. package/dist/commands/deploy.js +0 -1
  12. package/dist/commands/edit.d.ts +0 -1
  13. package/dist/commands/edit.js +0 -1
  14. package/dist/commands/explain.d.ts +0 -1
  15. package/dist/commands/explain.js +0 -1
  16. package/dist/commands/generate.d.ts +0 -1
  17. package/dist/commands/generate.js +0 -1
  18. package/dist/commands/hub.d.ts +0 -1
  19. package/dist/commands/hub.js +0 -1
  20. package/dist/commands/repo.d.ts +0 -1
  21. package/dist/commands/repo.js +0 -1
  22. package/dist/commands/review.d.ts +0 -1
  23. package/dist/commands/review.js +0 -1
  24. package/dist/commands/workflow.d.ts +31 -0
  25. package/dist/commands/workflow.js +140 -0
  26. package/dist/index.d.ts +2 -1
  27. package/dist/index.js +137 -17
  28. package/dist/utils/api.d.ts +172 -2
  29. package/dist/utils/api.js +2046 -69
  30. package/dist/utils/config.d.ts +14 -7
  31. package/dist/utils/config.js +27 -12
  32. package/dist/utils/files.d.ts +0 -1
  33. package/dist/utils/files.js +0 -1
  34. package/dist/utils/logger.d.ts +0 -1
  35. package/dist/utils/logger.js +0 -1
  36. package/dist/utils/session.d.ts +2 -2
  37. package/dist/utils/session.js +2 -2
  38. package/dist/utils/tools.d.ts +0 -1
  39. package/dist/utils/tools.js +33 -7
  40. package/package.json +21 -3
  41. package/dist/commands/auth.d.ts.map +0 -1
  42. package/dist/commands/auth.js.map +0 -1
  43. package/dist/commands/chat.d.ts.map +0 -1
  44. package/dist/commands/chat.js.map +0 -1
  45. package/dist/commands/config.d.ts.map +0 -1
  46. package/dist/commands/config.js.map +0 -1
  47. package/dist/commands/deploy.d.ts.map +0 -1
  48. package/dist/commands/deploy.js.map +0 -1
  49. package/dist/commands/edit.d.ts.map +0 -1
  50. package/dist/commands/edit.js.map +0 -1
  51. package/dist/commands/explain.d.ts.map +0 -1
  52. package/dist/commands/explain.js.map +0 -1
  53. package/dist/commands/generate.d.ts.map +0 -1
  54. package/dist/commands/generate.js.map +0 -1
  55. package/dist/commands/hub.d.ts.map +0 -1
  56. package/dist/commands/hub.js.map +0 -1
  57. package/dist/commands/repo.d.ts.map +0 -1
  58. package/dist/commands/repo.js.map +0 -1
  59. package/dist/commands/review.d.ts.map +0 -1
  60. package/dist/commands/review.js.map +0 -1
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/index.js.map +0 -1
  63. package/dist/utils/api.d.ts.map +0 -1
  64. package/dist/utils/api.js.map +0 -1
  65. package/dist/utils/config.d.ts.map +0 -1
  66. package/dist/utils/config.js.map +0 -1
  67. package/dist/utils/files.d.ts.map +0 -1
  68. package/dist/utils/files.js.map +0 -1
  69. package/dist/utils/logger.d.ts.map +0 -1
  70. package/dist/utils/logger.js.map +0 -1
  71. package/dist/utils/session.d.ts.map +0 -1
  72. package/dist/utils/session.js.map +0 -1
  73. package/dist/utils/tools.d.ts.map +0 -1
  74. package/dist/utils/tools.js.map +0 -1
@@ -22,4 +22,3 @@ export declare class ConfigCommand {
22
22
  private interactiveConfig;
23
23
  }
24
24
  export {};
25
- //# sourceMappingURL=config.d.ts.map
@@ -305,4 +305,3 @@ class ConfigCommand {
305
305
  }
306
306
  }
307
307
  exports.ConfigCommand = ConfigCommand;
308
- //# sourceMappingURL=config.js.map
@@ -77,4 +77,3 @@ export declare class DeployCommand {
77
77
  private detectProjectInfo;
78
78
  }
79
79
  export {};
80
- //# sourceMappingURL=deploy.d.ts.map
@@ -511,4 +511,3 @@ class DeployCommand {
511
511
  }
512
512
  }
513
513
  exports.DeployCommand = DeployCommand;
514
- //# sourceMappingURL=deploy.js.map
@@ -25,4 +25,3 @@ export declare class EditCommand {
25
25
  private applyFix;
26
26
  }
27
27
  export {};
28
- //# sourceMappingURL=edit.d.ts.map
@@ -254,4 +254,3 @@ Return the complete modified code:`,
254
254
  }
255
255
  }
256
256
  exports.EditCommand = EditCommand;
257
- //# sourceMappingURL=edit.js.map
@@ -18,4 +18,3 @@ export declare class ExplainCommand {
18
18
  private formatExplanation;
19
19
  }
20
20
  export {};
21
- //# sourceMappingURL=explain.d.ts.map
@@ -95,4 +95,3 @@ class ExplainCommand {
95
95
  }
96
96
  }
97
97
  exports.ExplainCommand = ExplainCommand;
98
- //# sourceMappingURL=explain.js.map
@@ -25,4 +25,3 @@ export declare class GenerateCommand {
25
25
  private suggestFilename;
26
26
  }
27
27
  export {};
28
- //# sourceMappingURL=generate.d.ts.map
@@ -193,4 +193,3 @@ class GenerateCommand {
193
193
  }
194
194
  }
195
195
  exports.GenerateCommand = GenerateCommand;
196
- //# sourceMappingURL=generate.js.map
@@ -37,4 +37,3 @@ export declare class HubCommand {
37
37
  */
38
38
  discover(): Promise<void>;
39
39
  }
40
- //# sourceMappingURL=hub.d.ts.map
@@ -286,4 +286,3 @@ class HubCommand {
286
286
  }
287
287
  }
288
288
  exports.HubCommand = HubCommand;
289
- //# sourceMappingURL=hub.js.map
@@ -87,4 +87,3 @@ export declare class RepoCommand {
87
87
  clone(projectUrl: string, options?: PullOptions): Promise<void>;
88
88
  }
89
89
  export {};
90
- //# sourceMappingURL=repo.d.ts.map
@@ -735,4 +735,3 @@ class RepoCommand {
735
735
  }
736
736
  }
737
737
  exports.RepoCommand = RepoCommand;
738
- //# sourceMappingURL=repo.js.map
@@ -21,4 +21,3 @@ export declare class ReviewCommand {
21
21
  private getSeverityColor;
22
22
  }
23
23
  export {};
24
- //# sourceMappingURL=review.d.ts.map
@@ -150,4 +150,3 @@ class ReviewCommand {
150
150
  }
151
151
  }
152
152
  exports.ReviewCommand = ReviewCommand;
153
- //# sourceMappingURL=review.js.map
@@ -0,0 +1,31 @@
1
+ import { Config } from '../utils/config.js';
2
+ import { Logger } from '../utils/logger.js';
3
+ interface WorkflowOutputOptions {
4
+ json?: boolean;
5
+ }
6
+ interface WorkflowTemplateOptions extends WorkflowOutputOptions {
7
+ category?: string;
8
+ search?: string;
9
+ }
10
+ interface WorkflowUseOptions extends WorkflowOutputOptions {
11
+ name?: string;
12
+ variables?: string;
13
+ }
14
+ interface WorkflowRunOptions extends WorkflowOutputOptions {
15
+ data?: string;
16
+ }
17
+ export declare class WorkflowCommand {
18
+ private config;
19
+ private logger;
20
+ private api;
21
+ constructor(config: Config, logger: Logger);
22
+ private ensureAuthenticated;
23
+ private parseJsonOption;
24
+ private printJson;
25
+ templates(options: WorkflowTemplateOptions): Promise<void>;
26
+ list(options: WorkflowOutputOptions): Promise<void>;
27
+ useTemplate(templateId: string, options: WorkflowUseOptions): Promise<void>;
28
+ run(workflowId: string, options: WorkflowRunOptions): Promise<void>;
29
+ status(executionId: string, options: WorkflowOutputOptions): Promise<void>;
30
+ }
31
+ export {};
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WorkflowCommand = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const api_js_1 = require("../utils/api.js");
9
+ class WorkflowCommand {
10
+ config;
11
+ logger;
12
+ api;
13
+ constructor(config, logger) {
14
+ this.config = config;
15
+ this.logger = logger;
16
+ this.api = new api_js_1.APIClient(config, logger);
17
+ }
18
+ ensureAuthenticated(json = false) {
19
+ if (this.config.isAuthenticated()) {
20
+ return;
21
+ }
22
+ const message = 'Not authenticated. Run vigthoria login first.';
23
+ if (json) {
24
+ console.log(JSON.stringify({ success: false, error: message }, null, 2));
25
+ }
26
+ else {
27
+ this.logger.error(message);
28
+ }
29
+ throw new Error(message);
30
+ }
31
+ parseJsonOption(rawValue, fieldName) {
32
+ if (!rawValue) {
33
+ return {};
34
+ }
35
+ try {
36
+ const parsed = JSON.parse(rawValue);
37
+ if (!parsed || Array.isArray(parsed) || typeof parsed !== 'object') {
38
+ throw new Error(`${fieldName} must be a JSON object.`);
39
+ }
40
+ return parsed;
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Invalid ${fieldName} JSON: ${error.message}`);
44
+ }
45
+ }
46
+ printJson(payload) {
47
+ console.log(JSON.stringify(payload, null, 2));
48
+ }
49
+ async templates(options) {
50
+ this.ensureAuthenticated(Boolean(options.json));
51
+ const templates = await this.api.listVigFlowTemplates({
52
+ category: options.category,
53
+ search: options.search,
54
+ });
55
+ if (options.json) {
56
+ this.printJson({ success: true, templates });
57
+ return;
58
+ }
59
+ this.logger.section('Workflow Templates');
60
+ if (templates.length === 0) {
61
+ console.log(chalk_1.default.yellow('No templates matched your filters.'));
62
+ return;
63
+ }
64
+ this.logger.table(['ID', 'Name', 'Category', 'Tags'], templates.map((template) => [
65
+ template.id,
66
+ template.name,
67
+ template.category,
68
+ (template.tags || []).slice(0, 3).join(', '),
69
+ ]));
70
+ }
71
+ async list(options) {
72
+ this.ensureAuthenticated(Boolean(options.json));
73
+ const workflows = await this.api.listVigFlowWorkflows();
74
+ if (options.json) {
75
+ this.printJson({ success: true, workflows });
76
+ return;
77
+ }
78
+ this.logger.section('Workflows');
79
+ if (workflows.length === 0) {
80
+ console.log(chalk_1.default.yellow('No workflows found for this account.'));
81
+ return;
82
+ }
83
+ this.logger.table(['ID', 'Name', 'Nodes', 'Runs', 'Updated'], workflows.map((workflow) => [
84
+ workflow.id,
85
+ workflow.name,
86
+ String(workflow.nodeCount),
87
+ String(workflow.executionCount),
88
+ workflow.updatedAt ? new Date(workflow.updatedAt).toLocaleString() : '-',
89
+ ]));
90
+ }
91
+ async useTemplate(templateId, options) {
92
+ this.ensureAuthenticated(Boolean(options.json));
93
+ const variables = this.parseJsonOption(options.variables, 'variables');
94
+ const workflow = await this.api.useVigFlowTemplate(templateId, {
95
+ name: options.name,
96
+ variables,
97
+ });
98
+ if (options.json) {
99
+ this.printJson({ success: true, workflow });
100
+ return;
101
+ }
102
+ this.logger.success(`Created workflow ${workflow.name}`);
103
+ console.log(chalk_1.default.gray(`Workflow ID: ${workflow.id}`));
104
+ if (workflow.fromTemplate) {
105
+ console.log(chalk_1.default.gray(`Template: ${workflow.fromTemplate}`));
106
+ }
107
+ }
108
+ async run(workflowId, options) {
109
+ this.ensureAuthenticated(Boolean(options.json));
110
+ const data = this.parseJsonOption(options.data, 'data');
111
+ const execution = await this.api.runVigFlowWorkflow(workflowId, { data });
112
+ if (options.json) {
113
+ this.printJson({ success: true, execution });
114
+ return;
115
+ }
116
+ this.logger.success(`Workflow execution ${execution.status}`);
117
+ console.log(chalk_1.default.gray(`Execution ID: ${execution.executionId}`));
118
+ console.log(chalk_1.default.gray(`Nodes executed: ${execution.nodesExecuted ?? 0}`));
119
+ if (execution.error) {
120
+ console.log(chalk_1.default.red(execution.error));
121
+ }
122
+ }
123
+ async status(executionId, options) {
124
+ this.ensureAuthenticated(Boolean(options.json));
125
+ const execution = await this.api.getVigFlowExecutionStatus(executionId);
126
+ if (options.json) {
127
+ this.printJson({ success: true, execution });
128
+ return;
129
+ }
130
+ this.logger.box([
131
+ `Execution: ${execution.id}`,
132
+ `Workflow: ${execution.workflowId}`,
133
+ `Status: ${execution.status}`,
134
+ `Nodes: ${execution.nodesExecuted ?? 0}/${execution.totalNodes ?? '-'}`,
135
+ `Started: ${execution.startedAt || '-'}`,
136
+ `Completed: ${execution.completedAt || '-'}`,
137
+ ].join('\n'), 'Workflow Status');
138
+ }
139
+ }
140
+ exports.WorkflowCommand = WorkflowCommand;
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@
12
12
  * vigthoria login - Authenticate with Vigthoria
13
13
  * vigthoria config - Configure settings
14
14
  * vigthoria hub - Discover & activate API modules
15
+ * vigthoria workflow - Manage repeatable VigFlow workflows
16
+ * vigthoria operator - Start BMAD operator mode
15
17
  */
16
18
  export {};
17
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -13,6 +13,8 @@
13
13
  * vigthoria login - Authenticate with Vigthoria
14
14
  * vigthoria config - Configure settings
15
15
  * vigthoria hub - Discover & activate API modules
16
+ * vigthoria workflow - Manage repeatable VigFlow workflows
17
+ * vigthoria operator - Start BMAD operator mode
16
18
  */
17
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
20
  if (k2 === undefined) k2 = k;
@@ -62,6 +64,8 @@ const review_js_1 = require("./commands/review.js");
62
64
  const hub_js_1 = require("./commands/hub.js");
63
65
  const repo_js_1 = require("./commands/repo.js");
64
66
  const deploy_js_1 = require("./commands/deploy.js");
67
+ const bridge_js_1 = require("./commands/bridge.js");
68
+ const workflow_js_1 = require("./commands/workflow.js");
65
69
  const config_js_2 = require("./utils/config.js");
66
70
  const logger_js_1 = require("./utils/logger.js");
67
71
  const chalk_1 = __importDefault(require("chalk"));
@@ -94,7 +98,7 @@ function getVersion() {
94
98
  catch (e) {
95
99
  // Fallback to hardcoded version
96
100
  }
97
- return '1.6.8';
101
+ return '1.6.12';
98
102
  }
99
103
  const VERSION = getVersion();
100
104
  /**
@@ -150,10 +154,11 @@ async function main() {
150
154
  const logger = new logger_js_1.Logger();
151
155
  const invokedBinaryName = getInvokedBinaryName();
152
156
  const firstArg = process.argv[2];
157
+ const jsonOutputRequested = process.argv.includes('--json');
153
158
  if (invokedBinaryName === 'vigthoria-chat') {
154
159
  const knownCommands = new Set([
155
160
  'chat', 'chat-resume', 'agent', 'edit', 'generate', 'explain', 'fix', 'review',
156
- 'hub', 'repo', 'deploy', 'login', 'logout', 'status', 'config', 'update',
161
+ 'hub', 'repo', 'deploy', 'operator', 'workflow', 'flow', 'login', 'logout', 'status', 'config', 'update',
157
162
  '--help', '-h', '--version', '-V', 'help', 'version',
158
163
  ]);
159
164
  if (!firstArg || firstArg.startsWith('-') || !knownCommands.has(firstArg)) {
@@ -167,15 +172,19 @@ async function main() {
167
172
  // Calculate padding for centering
168
173
  const titlePad = Math.floor((boxWidth - 4 - titleText.length) / 2);
169
174
  const versionPad = Math.floor((boxWidth - 4 - versionText.length) / 2);
170
- console.log(chalk_1.default.cyan('╔' + ''.repeat(boxWidth) + '╗'));
171
- console.log(chalk_1.default.cyan('' + ' '.repeat(boxWidth) + ''));
172
- console.log(chalk_1.default.cyan('║') + ' '.repeat(titlePad) + chalk_1.default.bold.white('VIGTHORIA CLI') + chalk_1.default.cyan(' - AI-Powered Coding Assistant') + ' '.repeat(boxWidth - titlePad - titleText.length) + chalk_1.default.cyan('║'));
173
- console.log(chalk_1.default.cyan('║') + ' '.repeat(versionPad) + chalk_1.default.gray(versionText) + ' '.repeat(boxWidth - versionPad - versionText.length) + chalk_1.default.cyan('║'));
174
- console.log(chalk_1.default.cyan('║' + ' '.repeat(boxWidth) + '║'));
175
- console.log(chalk_1.default.cyan('' + ''.repeat(boxWidth) + ''));
176
- console.log();
175
+ if (process.env.VIGTHORIA_NO_BANNER !== '1' && !jsonOutputRequested) {
176
+ console.log(chalk_1.default.cyan('' + ''.repeat(boxWidth) + ''));
177
+ console.log(chalk_1.default.cyan('║' + ' '.repeat(boxWidth) + '║'));
178
+ console.log(chalk_1.default.cyan('║') + ' '.repeat(titlePad) + chalk_1.default.bold.white('VIGTHORIA CLI') + chalk_1.default.cyan(' - AI-Powered Coding Assistant') + ' '.repeat(boxWidth - titlePad - titleText.length) + chalk_1.default.cyan('║'));
179
+ console.log(chalk_1.default.cyan('║') + ' '.repeat(versionPad) + chalk_1.default.gray(versionText) + ' '.repeat(boxWidth - versionPad - versionText.length) + chalk_1.default.cyan('║'));
180
+ console.log(chalk_1.default.cyan('' + ' '.repeat(boxWidth) + ''));
181
+ console.log(chalk_1.default.cyan('╚' + '═'.repeat(boxWidth) + '╝'));
182
+ console.log();
183
+ }
177
184
  // Check for updates in background (don't wait)
178
- checkForUpdatesQuietly();
185
+ if (process.env.VIGTHORIA_NO_UPDATE_CHECK !== '1' && !jsonOutputRequested) {
186
+ checkForUpdatesQuietly();
187
+ }
179
188
  program
180
189
  .name(invokedBinaryName === 'vigthoria-chat' ? 'vigthoria-chat' : 'vigthoria')
181
190
  .description('AI-powered terminal coding assistant for Vigthoria Coder subscribers')
@@ -185,19 +194,26 @@ async function main() {
185
194
  .command('chat')
186
195
  .alias('c')
187
196
  .description('Start interactive chat with Vigthoria AI')
188
- .option('-m, --model <model>', 'Select AI model (fast, balanced, code, creative, cloud, ultra)', 'code')
189
- .option('-p, --project <path>', 'Set project context path', process.cwd())
197
+ .option('-m, --model <model>', 'Select AI model (fast, balanced, code, creative, cloud, ultra)')
198
+ .option('-p, --project <path>', 'Set project context path')
199
+ .option('--new-project [name]', 'Create or use a managed local workspace folder when no --project path is given')
190
200
  .option('-a, --agent', 'Enable agentic mode (default: true for best quality)', true)
191
201
  .option('--no-agent', 'Disable agentic mode (simple chat only)')
192
202
  .option('-r, --resume', 'Resume last session for this project', false)
193
203
  .option('--prompt <text>', 'Run a single prompt directly and exit')
204
+ .option('-w, --workflow <selector>', 'Route prompts through a named or explicit VigFlow workflow target')
205
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
194
206
  .option('--auto-approve', 'Auto-approve agent actions (dangerous!)', false)
195
207
  .action(async (options) => {
196
208
  const chat = new chat_js_1.ChatCommand(config, logger);
197
209
  await chat.run({
198
210
  model: options.model,
199
211
  project: options.project,
212
+ projectProvided: typeof options.project === 'string' && options.project.trim().length > 0,
213
+ newProject: options.newProject,
200
214
  agent: options.agent,
215
+ workflow: options.workflow,
216
+ json: options.json,
201
217
  autoApprove: options.autoApprove,
202
218
  resume: options.resume,
203
219
  prompt: options.prompt,
@@ -206,18 +222,25 @@ async function main() {
206
222
  program
207
223
  .command('chat-resume')
208
224
  .description('Resume the latest chat session for the current or specified project')
209
- .option('-m, --model <model>', 'Select AI model (fast, balanced, code, creative, cloud, ultra)', 'code')
210
- .option('-p, --project <path>', 'Set project context path', process.cwd())
225
+ .option('-m, --model <model>', 'Select AI model (fast, balanced, code, creative, cloud, ultra)')
226
+ .option('-p, --project <path>', 'Set project context path')
227
+ .option('--new-project [name]', 'Create or use a managed local workspace folder when no --project path is given')
211
228
  .option('-a, --agent', 'Enable agentic mode (default: true for best quality)', true)
212
229
  .option('--no-agent', 'Disable agentic mode (simple chat only)')
213
230
  .option('--prompt <text>', 'Run a single prompt directly and exit after resuming context')
231
+ .option('-w, --workflow <selector>', 'Route prompts through a named or explicit VigFlow workflow target')
232
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
214
233
  .option('--auto-approve', 'Auto-approve agent actions (dangerous!)', false)
215
234
  .action(async (options) => {
216
235
  const chat = new chat_js_1.ChatCommand(config, logger);
217
236
  await chat.run({
218
237
  model: options.model,
219
238
  project: options.project,
239
+ projectProvided: typeof options.project === 'string' && options.project.trim().length > 0,
240
+ newProject: options.newProject,
220
241
  agent: options.agent,
242
+ workflow: options.workflow,
243
+ json: options.json,
221
244
  autoApprove: options.autoApprove,
222
245
  resume: true,
223
246
  prompt: options.prompt,
@@ -229,20 +252,63 @@ async function main() {
229
252
  .command('agent')
230
253
  .alias('a')
231
254
  .description('Start agentic mode - AI can read/write files, run commands')
232
- .option('-m, --model <model>', 'Select AI model (agent, code, cloud, ultra)', 'agent')
233
- .option('-p, --project <path>', 'Set project context path', process.cwd())
255
+ .option('-m, --model <model>', 'Select AI model (agent, code, cloud, ultra)')
256
+ .option('-p, --project <path>', 'Set project context path')
257
+ .option('--new-project [name]', 'Create or use a managed local workspace folder when no --project path is given')
234
258
  .option('--prompt <text>', 'Run a single agent prompt directly and exit')
259
+ .option('-w, --workflow <selector>', 'Run the prompt through a named or explicit VigFlow workflow target')
260
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
235
261
  .option('--auto-approve', 'Auto-approve all actions (dangerous!)', false)
236
262
  .action(async (options) => {
237
263
  const chat = new chat_js_1.ChatCommand(config, logger);
238
264
  await chat.run({
239
265
  model: options.model,
240
266
  project: options.project,
267
+ projectProvided: typeof options.project === 'string' && options.project.trim().length > 0,
268
+ newProject: options.newProject,
241
269
  agent: true,
270
+ operator: false,
271
+ workflow: options.workflow,
272
+ json: options.json,
242
273
  autoApprove: options.autoApprove,
243
274
  prompt: options.prompt,
244
275
  });
245
276
  });
277
+ program
278
+ .command('operator')
279
+ .alias('op')
280
+ .description('Start BMAD operator mode for infrastructure and system workflows')
281
+ .option('-m, --model <model>', 'Select operator model (code-8b, code, agent)')
282
+ .option('-p, --project <path>', 'Set project context path')
283
+ .option('--new-project [name]', 'Create or use a managed local workspace folder when no --project path is given')
284
+ .option('--prompt <text>', 'Run a single operator prompt directly and exit')
285
+ .option('-w, --workflow <selector>', 'Run the prompt through a named or explicit VigFlow workflow target')
286
+ .option('--save-plan', 'Save the completed BMAD plan into VigFlow for rerun and audit', false)
287
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
288
+ .action(async (options) => {
289
+ const chat = new chat_js_1.ChatCommand(config, logger);
290
+ await chat.run({
291
+ model: options.model,
292
+ project: options.project,
293
+ projectProvided: typeof options.project === 'string' && options.project.trim().length > 0,
294
+ newProject: options.newProject,
295
+ agent: false,
296
+ operator: true,
297
+ workflow: options.workflow,
298
+ savePlan: options.savePlan,
299
+ json: options.json,
300
+ prompt: options.prompt,
301
+ });
302
+ });
303
+ program
304
+ .command('bridge')
305
+ .description('Inspect local DevTools Bridge availability for browser debugging tasks')
306
+ .command('status')
307
+ .description('Show live DevTools Bridge status')
308
+ .action(async () => {
309
+ const bridge = new bridge_js_1.BridgeCommand(config, logger);
310
+ await bridge.status();
311
+ });
246
312
  // Edit command - Edit files with AI
247
313
  program
248
314
  .command('edit <file>')
@@ -299,6 +365,61 @@ async function main() {
299
365
  const review = new review_js_1.ReviewCommand(config, logger);
300
366
  await review.run(file, options);
301
367
  });
368
+ const workflowCommand = program
369
+ .command('workflow')
370
+ .alias('flow')
371
+ .description('List, instantiate, and run repeatable VigFlow workflows');
372
+ workflowCommand
373
+ .command('templates')
374
+ .alias('catalog')
375
+ .description('List available VigFlow templates')
376
+ .option('-c, --category <category>', 'Filter templates by category')
377
+ .option('-s, --search <query>', 'Search template names, descriptions, and tags')
378
+ .option('--json', 'Emit machine-readable JSON output', false)
379
+ .action(async (options) => {
380
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
381
+ await workflow.templates(options);
382
+ });
383
+ workflowCommand
384
+ .command('list')
385
+ .alias('ls')
386
+ .description('List workflows created for the current account')
387
+ .option('--json', 'Emit machine-readable JSON output', false)
388
+ .action(async (options) => {
389
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
390
+ await workflow.list(options);
391
+ });
392
+ workflowCommand
393
+ .command('use-template <templateId>')
394
+ .description('Create a workflow from a built-in or saved template')
395
+ .option('-n, --name <name>', 'Override the workflow name')
396
+ .option('-v, --variables <json>', 'Template variables as a JSON object')
397
+ .option('--json', 'Emit machine-readable JSON output', false)
398
+ .action(async (templateId, options) => {
399
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
400
+ await workflow.useTemplate(templateId, options);
401
+ });
402
+ workflowCommand
403
+ .command('run <workflowId>')
404
+ .description('Run a workflow immediately')
405
+ .option('-d, --data <json>', 'Execution input data as a JSON object')
406
+ .option('--json', 'Emit machine-readable JSON output', false)
407
+ .action(async (workflowId, options) => {
408
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
409
+ await workflow.run(workflowId, options);
410
+ });
411
+ workflowCommand
412
+ .command('status <executionId>')
413
+ .description('Get the current or final status of a workflow execution')
414
+ .option('--json', 'Emit machine-readable JSON output', false)
415
+ .action(async (executionId, options) => {
416
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
417
+ await workflow.status(executionId, options);
418
+ });
419
+ workflowCommand.action(async () => {
420
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
421
+ await workflow.templates({});
422
+ });
302
423
  // ==================== HUB / MARKETPLACE COMMANDS ====================
303
424
  // Hub command - Discover and activate API modules
304
425
  const hubCommand = program
@@ -620,4 +741,3 @@ main().catch((err) => {
620
741
  console.error(chalk_1.default.red('Error:'), err.message);
621
742
  process.exit(1);
622
743
  });
623
- //# sourceMappingURL=index.js.map