vigthoria-cli 1.6.5 → 1.6.9

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 +9 -1
  2. package/dist/commands/auth.d.ts +0 -1
  3. package/dist/commands/auth.js +57 -6
  4. package/dist/commands/bridge.d.ts +7 -0
  5. package/dist/commands/bridge.js +31 -0
  6. package/dist/commands/chat.d.ts +27 -1
  7. package/dist/commands/chat.js +508 -14
  8. package/dist/commands/config.d.ts +0 -1
  9. package/dist/commands/config.js +10 -3
  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 +135 -11
  28. package/dist/utils/api.d.ts +210 -1
  29. package/dist/utils/api.js +1789 -47
  30. package/dist/utils/config.d.ts +14 -7
  31. package/dist/utils/config.js +22 -11
  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 +14 -2
  37. package/dist/utils/session.js +105 -4
  38. package/dist/utils/tools.d.ts +0 -1
  39. package/dist/utils/tools.js +0 -1
  40. package/package.json +23 -4
  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
@@ -148,7 +148,7 @@ class ConfigCommand {
148
148
  }
149
149
  }
150
150
  console.log();
151
- console.log(chalk_1.default.gray('Project initialized! Run `vigthoria chat` to start.'));
151
+ console.log(chalk_1.default.gray('Project initialized! Run `vigthoria chat` or `npx vigthoria-chat` to start.'));
152
152
  console.log();
153
153
  }
154
154
  setConfig(keyValue) {
@@ -165,6 +165,9 @@ class ConfigCommand {
165
165
  'showDiffs': (v) => this.config.set('preferences', { ...this.config.get('preferences'), showDiffs: v === 'true' }),
166
166
  'maxTokens': (v) => this.config.set('preferences', { ...this.config.get('preferences'), maxTokens: parseInt(v, 10) }),
167
167
  'apiUrl': (v) => this.config.set('apiUrl', v),
168
+ 'modelsApiUrl': (v) => this.config.set('modelsApiUrl', v),
169
+ 'wsUrl': (v) => this.config.set('wsUrl', v),
170
+ 'selfHostedModelsApiUrl': (v) => this.config.set('selfHostedModelsApiUrl', v === 'null' || v === 'off' ? null : v),
168
171
  };
169
172
  if (configMap[key]) {
170
173
  configMap[key](value);
@@ -172,13 +175,16 @@ class ConfigCommand {
172
175
  }
173
176
  else {
174
177
  this.logger.error(`Unknown config key: ${key}`);
175
- console.log(chalk_1.default.gray('Available keys: model, theme, autoApply, showDiffs, maxTokens, apiUrl'));
178
+ console.log(chalk_1.default.gray('Available keys: model, theme, autoApply, showDiffs, maxTokens, apiUrl, modelsApiUrl, wsUrl, selfHostedModelsApiUrl'));
176
179
  }
177
180
  }
178
181
  getConfig(key) {
179
182
  const all = this.config.getAll();
180
183
  const flatConfig = {
181
184
  apiUrl: all.apiUrl,
185
+ modelsApiUrl: all.modelsApiUrl,
186
+ wsUrl: all.wsUrl,
187
+ selfHostedModelsApiUrl: all.selfHostedModelsApiUrl,
182
188
  model: all.preferences.defaultModel,
183
189
  theme: all.preferences.theme,
184
190
  autoApply: all.preferences.autoApplyFixes,
@@ -201,7 +207,9 @@ class ConfigCommand {
201
207
  console.log();
202
208
  console.log(chalk_1.default.white('API:'));
203
209
  console.log(chalk_1.default.gray(' URL: ') + chalk_1.default.cyan(all.apiUrl));
210
+ console.log(chalk_1.default.gray(' Models API: ') + chalk_1.default.cyan(all.modelsApiUrl));
204
211
  console.log(chalk_1.default.gray(' WebSocket: ') + chalk_1.default.cyan(all.wsUrl));
212
+ console.log(chalk_1.default.gray(' Self-hosted Models: ') + chalk_1.default.cyan(all.selfHostedModelsApiUrl || 'disabled'));
205
213
  console.log();
206
214
  console.log(chalk_1.default.white('Preferences:'));
207
215
  console.log(chalk_1.default.gray(' Default Model: ') + chalk_1.default.cyan(all.preferences.defaultModel));
@@ -297,4 +305,3 @@ class ConfigCommand {
297
305
  }
298
306
  }
299
307
  exports.ConfigCommand = ConfigCommand;
300
- //# 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,11 +64,17 @@ 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"));
68
72
  const fs = __importStar(require("fs"));
69
73
  const path = __importStar(require("path"));
74
+ function getInvokedBinaryName() {
75
+ const executable = process.argv[1] || 'vigthoria';
76
+ return path.basename(executable, path.extname(executable)).toLowerCase();
77
+ }
70
78
  // Get version from package.json dynamically
71
79
  function getVersion() {
72
80
  try {
@@ -90,7 +98,7 @@ function getVersion() {
90
98
  catch (e) {
91
99
  // Fallback to hardcoded version
92
100
  }
93
- return '1.6.5';
101
+ return '1.6.9';
94
102
  }
95
103
  const VERSION = getVersion();
96
104
  /**
@@ -144,6 +152,19 @@ async function main() {
144
152
  const program = new commander_1.Command();
145
153
  const config = new config_js_2.Config();
146
154
  const logger = new logger_js_1.Logger();
155
+ const invokedBinaryName = getInvokedBinaryName();
156
+ const firstArg = process.argv[2];
157
+ const jsonOutputRequested = process.argv.includes('--json');
158
+ if (invokedBinaryName === 'vigthoria-chat') {
159
+ const knownCommands = new Set([
160
+ 'chat', 'chat-resume', 'agent', 'edit', 'generate', 'explain', 'fix', 'review',
161
+ 'hub', 'repo', 'deploy', 'operator', 'workflow', 'flow', 'login', 'logout', 'status', 'config', 'update',
162
+ '--help', '-h', '--version', '-V', 'help', 'version',
163
+ ]);
164
+ if (!firstArg || firstArg.startsWith('-') || !knownCommands.has(firstArg)) {
165
+ process.argv.splice(2, 0, 'chat');
166
+ }
167
+ }
147
168
  // Banner - Fixed alignment with proper padding
148
169
  const boxWidth = 61; // Inner content width
149
170
  const titleText = 'VIGTHORIA CLI - AI-Powered Coding Assistant';
@@ -151,17 +172,21 @@ async function main() {
151
172
  // Calculate padding for centering
152
173
  const titlePad = Math.floor((boxWidth - 4 - titleText.length) / 2);
153
174
  const versionPad = Math.floor((boxWidth - 4 - versionText.length) / 2);
154
- console.log(chalk_1.default.cyan('╔' + ''.repeat(boxWidth) + '╗'));
155
- console.log(chalk_1.default.cyan('' + ' '.repeat(boxWidth) + ''));
156
- 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('║'));
157
- console.log(chalk_1.default.cyan('║') + ' '.repeat(versionPad) + chalk_1.default.gray(versionText) + ' '.repeat(boxWidth - versionPad - versionText.length) + chalk_1.default.cyan('║'));
158
- console.log(chalk_1.default.cyan('║' + ' '.repeat(boxWidth) + '║'));
159
- console.log(chalk_1.default.cyan('' + ''.repeat(boxWidth) + ''));
160
- 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
+ }
161
184
  // Check for updates in background (don't wait)
162
- checkForUpdatesQuietly();
185
+ if (process.env.VIGTHORIA_NO_UPDATE_CHECK !== '1' && !jsonOutputRequested) {
186
+ checkForUpdatesQuietly();
187
+ }
163
188
  program
164
- .name('vigthoria')
189
+ .name(invokedBinaryName === 'vigthoria-chat' ? 'vigthoria-chat' : 'vigthoria')
165
190
  .description('AI-powered terminal coding assistant for Vigthoria Coder subscribers')
166
191
  .version(VERSION);
167
192
  // Chat command - Interactive mode (Agent mode is default for best results)
@@ -175,6 +200,8 @@ async function main() {
175
200
  .option('--no-agent', 'Disable agentic mode (simple chat only)')
176
201
  .option('-r, --resume', 'Resume last session for this project', false)
177
202
  .option('--prompt <text>', 'Run a single prompt directly and exit')
203
+ .option('-w, --workflow <selector>', 'Route prompts through a named or explicit VigFlow workflow target')
204
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
178
205
  .option('--auto-approve', 'Auto-approve agent actions (dangerous!)', false)
179
206
  .action(async (options) => {
180
207
  const chat = new chat_js_1.ChatCommand(config, logger);
@@ -182,6 +209,8 @@ async function main() {
182
209
  model: options.model,
183
210
  project: options.project,
184
211
  agent: options.agent,
212
+ workflow: options.workflow,
213
+ json: options.json,
185
214
  autoApprove: options.autoApprove,
186
215
  resume: options.resume,
187
216
  prompt: options.prompt,
@@ -195,6 +224,8 @@ async function main() {
195
224
  .option('-a, --agent', 'Enable agentic mode (default: true for best quality)', true)
196
225
  .option('--no-agent', 'Disable agentic mode (simple chat only)')
197
226
  .option('--prompt <text>', 'Run a single prompt directly and exit after resuming context')
227
+ .option('-w, --workflow <selector>', 'Route prompts through a named or explicit VigFlow workflow target')
228
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
198
229
  .option('--auto-approve', 'Auto-approve agent actions (dangerous!)', false)
199
230
  .action(async (options) => {
200
231
  const chat = new chat_js_1.ChatCommand(config, logger);
@@ -202,6 +233,8 @@ async function main() {
202
233
  model: options.model,
203
234
  project: options.project,
204
235
  agent: options.agent,
236
+ workflow: options.workflow,
237
+ json: options.json,
205
238
  autoApprove: options.autoApprove,
206
239
  resume: true,
207
240
  prompt: options.prompt,
@@ -216,6 +249,8 @@ async function main() {
216
249
  .option('-m, --model <model>', 'Select AI model (agent, code, cloud, ultra)', 'agent')
217
250
  .option('-p, --project <path>', 'Set project context path', process.cwd())
218
251
  .option('--prompt <text>', 'Run a single agent prompt directly and exit')
252
+ .option('-w, --workflow <selector>', 'Run the prompt through a named or explicit VigFlow workflow target')
253
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
219
254
  .option('--auto-approve', 'Auto-approve all actions (dangerous!)', false)
220
255
  .action(async (options) => {
221
256
  const chat = new chat_js_1.ChatCommand(config, logger);
@@ -223,10 +258,45 @@ async function main() {
223
258
  model: options.model,
224
259
  project: options.project,
225
260
  agent: true,
261
+ operator: false,
262
+ workflow: options.workflow,
263
+ json: options.json,
226
264
  autoApprove: options.autoApprove,
227
265
  prompt: options.prompt,
228
266
  });
229
267
  });
268
+ program
269
+ .command('operator')
270
+ .alias('op')
271
+ .description('Start BMAD operator mode for infrastructure and system workflows')
272
+ .option('-m, --model <model>', 'Select operator model (code-8b, code, agent)', 'code-8b')
273
+ .option('-p, --project <path>', 'Set project context path', process.cwd())
274
+ .option('--prompt <text>', 'Run a single operator prompt directly and exit')
275
+ .option('-w, --workflow <selector>', 'Run the prompt through a named or explicit VigFlow workflow target')
276
+ .option('--save-plan', 'Save the completed BMAD plan into VigFlow for rerun and audit', false)
277
+ .option('--json', 'Emit machine-readable JSON output for direct prompt runs', false)
278
+ .action(async (options) => {
279
+ const chat = new chat_js_1.ChatCommand(config, logger);
280
+ await chat.run({
281
+ model: options.model,
282
+ project: options.project,
283
+ agent: false,
284
+ operator: true,
285
+ workflow: options.workflow,
286
+ savePlan: options.savePlan,
287
+ json: options.json,
288
+ prompt: options.prompt,
289
+ });
290
+ });
291
+ program
292
+ .command('bridge')
293
+ .description('Inspect local DevTools Bridge availability for browser debugging tasks')
294
+ .command('status')
295
+ .description('Show live DevTools Bridge status')
296
+ .action(async () => {
297
+ const bridge = new bridge_js_1.BridgeCommand(config, logger);
298
+ await bridge.status();
299
+ });
230
300
  // Edit command - Edit files with AI
231
301
  program
232
302
  .command('edit <file>')
@@ -283,6 +353,61 @@ async function main() {
283
353
  const review = new review_js_1.ReviewCommand(config, logger);
284
354
  await review.run(file, options);
285
355
  });
356
+ const workflowCommand = program
357
+ .command('workflow')
358
+ .alias('flow')
359
+ .description('List, instantiate, and run repeatable VigFlow workflows');
360
+ workflowCommand
361
+ .command('templates')
362
+ .alias('catalog')
363
+ .description('List available VigFlow templates')
364
+ .option('-c, --category <category>', 'Filter templates by category')
365
+ .option('-s, --search <query>', 'Search template names, descriptions, and tags')
366
+ .option('--json', 'Emit machine-readable JSON output', false)
367
+ .action(async (options) => {
368
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
369
+ await workflow.templates(options);
370
+ });
371
+ workflowCommand
372
+ .command('list')
373
+ .alias('ls')
374
+ .description('List workflows created for the current account')
375
+ .option('--json', 'Emit machine-readable JSON output', false)
376
+ .action(async (options) => {
377
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
378
+ await workflow.list(options);
379
+ });
380
+ workflowCommand
381
+ .command('use-template <templateId>')
382
+ .description('Create a workflow from a built-in or saved template')
383
+ .option('-n, --name <name>', 'Override the workflow name')
384
+ .option('-v, --variables <json>', 'Template variables as a JSON object')
385
+ .option('--json', 'Emit machine-readable JSON output', false)
386
+ .action(async (templateId, options) => {
387
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
388
+ await workflow.useTemplate(templateId, options);
389
+ });
390
+ workflowCommand
391
+ .command('run <workflowId>')
392
+ .description('Run a workflow immediately')
393
+ .option('-d, --data <json>', 'Execution input data as a JSON object')
394
+ .option('--json', 'Emit machine-readable JSON output', false)
395
+ .action(async (workflowId, options) => {
396
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
397
+ await workflow.run(workflowId, options);
398
+ });
399
+ workflowCommand
400
+ .command('status <executionId>')
401
+ .description('Get the current or final status of a workflow execution')
402
+ .option('--json', 'Emit machine-readable JSON output', false)
403
+ .action(async (executionId, options) => {
404
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
405
+ await workflow.status(executionId, options);
406
+ });
407
+ workflowCommand.action(async () => {
408
+ const workflow = new workflow_js_1.WorkflowCommand(config, logger);
409
+ await workflow.templates({});
410
+ });
286
411
  // ==================== HUB / MARKETPLACE COMMANDS ====================
287
412
  // Hub command - Discover and activate API modules
288
413
  const hubCommand = program
@@ -604,4 +729,3 @@ main().catch((err) => {
604
729
  console.error(chalk_1.default.red('Error:'), err.message);
605
730
  process.exit(1);
606
731
  });
607
- //# sourceMappingURL=index.js.map