@proletariat/cli 0.3.71 → 0.3.72

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 (91) hide show
  1. package/dist/commands/action/create.d.ts +6 -2
  2. package/dist/commands/action/create.js +107 -40
  3. package/dist/commands/action/create.js.map +1 -1
  4. package/dist/commands/action/list.d.ts +1 -1
  5. package/dist/commands/action/list.js +12 -10
  6. package/dist/commands/action/list.js.map +1 -1
  7. package/dist/commands/action/run.js +2 -2
  8. package/dist/commands/action/run.js.map +1 -1
  9. package/dist/commands/action/show.js +24 -4
  10. package/dist/commands/action/show.js.map +1 -1
  11. package/dist/commands/action/update.d.ts +6 -2
  12. package/dist/commands/action/update.js +130 -52
  13. package/dist/commands/action/update.js.map +1 -1
  14. package/dist/commands/work/ready.js +4 -2
  15. package/dist/commands/work/ready.js.map +1 -1
  16. package/dist/commands/work/spawn.js +2 -2
  17. package/dist/commands/work/spawn.js.map +1 -1
  18. package/dist/commands/work/start.js +67 -23
  19. package/dist/commands/work/start.js.map +1 -1
  20. package/dist/commands/workflow/setup.d.ts +24 -0
  21. package/dist/commands/workflow/setup.js +346 -0
  22. package/dist/commands/workflow/setup.js.map +1 -0
  23. package/dist/commands/workflow-rule/create.d.ts +19 -0
  24. package/dist/commands/workflow-rule/create.js +140 -0
  25. package/dist/commands/workflow-rule/create.js.map +1 -0
  26. package/dist/commands/workflow-rule/delete.d.ts +18 -0
  27. package/dist/commands/workflow-rule/delete.js +72 -0
  28. package/dist/commands/workflow-rule/delete.js.map +1 -0
  29. package/dist/commands/workflow-rule/index.d.ts +16 -0
  30. package/dist/commands/workflow-rule/index.js +83 -0
  31. package/dist/commands/workflow-rule/index.js.map +1 -0
  32. package/dist/commands/workflow-rule/list.d.ts +17 -0
  33. package/dist/commands/workflow-rule/list.js +72 -0
  34. package/dist/commands/workflow-rule/list.js.map +1 -0
  35. package/dist/commands/workflow-rule/update.d.ts +22 -0
  36. package/dist/commands/workflow-rule/update.js +84 -0
  37. package/dist/commands/workflow-rule/update.js.map +1 -0
  38. package/dist/hooks/init.js +2 -4
  39. package/dist/hooks/init.js.map +1 -1
  40. package/dist/lib/database/drizzle-schema.d.ts +269 -4
  41. package/dist/lib/database/drizzle-schema.js +22 -2
  42. package/dist/lib/database/drizzle-schema.js.map +1 -1
  43. package/dist/lib/database/migrations/0003_actions_redesign.d.ts +15 -0
  44. package/dist/lib/database/migrations/0003_actions_redesign.js +105 -0
  45. package/dist/lib/database/migrations/0003_actions_redesign.js.map +1 -0
  46. package/dist/lib/database/migrations/0004_workflow_rules.d.ts +2 -0
  47. package/dist/lib/database/migrations/0004_workflow_rules.js +25 -0
  48. package/dist/lib/database/migrations/0004_workflow_rules.js.map +1 -0
  49. package/dist/lib/database/migrations/index.js +4 -0
  50. package/dist/lib/database/migrations/index.js.map +1 -1
  51. package/dist/lib/events/events.d.ts +13 -1
  52. package/dist/lib/execution/storage.d.ts +7 -1
  53. package/dist/lib/execution/storage.js +14 -6
  54. package/dist/lib/execution/storage.js.map +1 -1
  55. package/dist/lib/pmo/schema.d.ts +3 -1
  56. package/dist/lib/pmo/schema.js +25 -3
  57. package/dist/lib/pmo/schema.js.map +1 -1
  58. package/dist/lib/pmo/storage/actions.d.ts +5 -3
  59. package/dist/lib/pmo/storage/actions.js +89 -23
  60. package/dist/lib/pmo/storage/actions.js.map +1 -1
  61. package/dist/lib/pmo/storage/base.d.ts +5 -0
  62. package/dist/lib/pmo/storage/base.js +203 -20
  63. package/dist/lib/pmo/storage/base.js.map +1 -1
  64. package/dist/lib/pmo/storage/index.d.ts +9 -2
  65. package/dist/lib/pmo/storage/index.js +28 -3
  66. package/dist/lib/pmo/storage/index.js.map +1 -1
  67. package/dist/lib/pmo/storage/types.d.ts +19 -2
  68. package/dist/lib/pmo/storage/workflow-rules.d.ts +35 -0
  69. package/dist/lib/pmo/storage/workflow-rules.js +183 -0
  70. package/dist/lib/pmo/storage/workflow-rules.js.map +1 -0
  71. package/dist/lib/pmo/sync-manager.js +6 -0
  72. package/dist/lib/pmo/sync-manager.js.map +1 -1
  73. package/dist/lib/pmo/types.d.ts +59 -4
  74. package/dist/lib/pmo/types.js.map +1 -1
  75. package/dist/lib/telemetry/analytics.d.ts +25 -7
  76. package/dist/lib/telemetry/analytics.js +123 -58
  77. package/dist/lib/telemetry/analytics.js.map +1 -1
  78. package/dist/lib/work-lifecycle/action-chaining.d.ts +61 -0
  79. package/dist/lib/work-lifecycle/action-chaining.js +211 -0
  80. package/dist/lib/work-lifecycle/action-chaining.js.map +1 -0
  81. package/dist/lib/work-lifecycle/index.d.ts +3 -0
  82. package/dist/lib/work-lifecycle/index.js +3 -0
  83. package/dist/lib/work-lifecycle/index.js.map +1 -1
  84. package/dist/lib/work-lifecycle/post-execution.d.ts +54 -0
  85. package/dist/lib/work-lifecycle/post-execution.js +68 -0
  86. package/dist/lib/work-lifecycle/post-execution.js.map +1 -0
  87. package/dist/lib/work-lifecycle/rule-evaluator.d.ts +38 -0
  88. package/dist/lib/work-lifecycle/rule-evaluator.js +102 -0
  89. package/dist/lib/work-lifecycle/rule-evaluator.js.map +1 -0
  90. package/oclif.manifest.json +3198 -2707
  91. package/package.json +1 -1
@@ -0,0 +1,346 @@
1
+ import { Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
+ import { styles } from '../../lib/styles.js';
5
+ import { shouldOutputJson, outputPromptAsJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
6
+ import { loadDefaultWorkSource, getRegisteredWorkSources, } from '../../lib/work-source/config.js';
7
+ import { LinearClient, isLinearConfigured, loadLinearConfig, getLinearApiKey, } from '../../lib/linear/index.js';
8
+ /**
9
+ * Map Linear state type → PMO StateCategory
10
+ */
11
+ const LINEAR_TYPE_TO_CATEGORY = {
12
+ triage: 'triage',
13
+ backlog: 'backlog',
14
+ unstarted: 'unstarted',
15
+ started: 'started',
16
+ completed: 'completed',
17
+ canceled: 'canceled',
18
+ };
19
+ /**
20
+ * Suggest a default action for a state based on its category.
21
+ * Returns action ID or null for "no action".
22
+ */
23
+ function suggestDefaultAction(category, stateName) {
24
+ // Review doesn't need an on_enter action — the implement lifecycle hook
25
+ // moves tickets there when a PR is created
26
+ const lowerName = stateName.toLowerCase();
27
+ if (lowerName === 'review' || lowerName === 'in review') {
28
+ return { actionId: null, label: 'No auto-action (implement moves here on PR)' };
29
+ }
30
+ switch (category) {
31
+ case 'triage':
32
+ return { actionId: null, label: 'No action (manual triage)' };
33
+ case 'backlog':
34
+ return { actionId: 'groom', label: 'groom (Recommended)' };
35
+ case 'unstarted':
36
+ return { actionId: null, label: 'No action' };
37
+ case 'started':
38
+ return { actionId: 'implement', label: 'implement (Recommended)' };
39
+ case 'completed':
40
+ return { actionId: 'merge', label: 'merge (Recommended)' };
41
+ case 'canceled':
42
+ return { actionId: null, label: 'No action' };
43
+ default:
44
+ return { actionId: null, label: 'No action' };
45
+ }
46
+ }
47
+ export default class WorkflowSetup extends PMOCommand {
48
+ static description = 'Pull board states from provider and wire actions to state transitions';
49
+ static examples = [
50
+ '<%= config.bin %> <%= command.id %>',
51
+ '<%= config.bin %> <%= command.id %> --accept-defaults',
52
+ '<%= config.bin %> <%= command.id %> --machine',
53
+ ];
54
+ static flags = {
55
+ ...pmoBaseFlags,
56
+ 'accept-defaults': Flags.boolean({
57
+ description: 'Accept all default action suggestions without prompting',
58
+ default: false,
59
+ }),
60
+ };
61
+ getPMOOptions() {
62
+ return { promptIfMultiple: false };
63
+ }
64
+ async execute() {
65
+ const { flags } = await this.parse(WorkflowSetup);
66
+ const jsonMode = shouldOutputJson(flags);
67
+ const db = this.storage.getDatabase();
68
+ // 1. Determine connected provider
69
+ const defaultSource = loadDefaultWorkSource(db);
70
+ let provider = defaultSource?.provider ?? null;
71
+ if (!provider || provider === 'pmo') {
72
+ // Try to find any registered external source
73
+ const sources = getRegisteredWorkSources(db);
74
+ const external = sources.filter(s => s.provider !== 'pmo');
75
+ if (external.length === 1) {
76
+ provider = external[0].provider;
77
+ }
78
+ else if (external.length > 1) {
79
+ // In JSON mode, output choices
80
+ if (jsonMode) {
81
+ const choices = external.map(s => ({
82
+ name: `${s.provider}${s.context ? ` (${s.context})` : ''}`,
83
+ value: s.provider,
84
+ }));
85
+ outputPromptAsJson(buildPromptConfig('list', 'provider', 'Select provider to pull states from:', choices), createMetadata('workflow setup', flags));
86
+ return;
87
+ }
88
+ const { selectedProvider } = await inquirer.prompt([{
89
+ type: 'list',
90
+ name: 'selectedProvider',
91
+ message: 'Select provider to pull states from:',
92
+ choices: external.map(s => ({
93
+ name: `${s.provider}${s.context ? ` (${s.context})` : ''}`,
94
+ value: s.provider,
95
+ })),
96
+ }]);
97
+ provider = selectedProvider;
98
+ }
99
+ else {
100
+ const msg = 'No external provider connected. Run "prlt linear connect" (or jira/asana) first.';
101
+ if (jsonMode) {
102
+ outputErrorAsJson('NO_PROVIDER', msg, createMetadata('workflow setup', flags));
103
+ }
104
+ this.error(msg);
105
+ }
106
+ }
107
+ // 2. Fetch workflow states from provider
108
+ let providerStates = [];
109
+ let providerLabel = '';
110
+ if (provider === 'linear') {
111
+ const linearApiKey = getLinearApiKey(db);
112
+ if (!linearApiKey || !isLinearConfigured(db)) {
113
+ const msg = 'Linear is not configured. Run "prlt linear connect" first.';
114
+ if (jsonMode) {
115
+ outputErrorAsJson('LINEAR_NOT_CONFIGURED', msg, createMetadata('workflow setup', flags));
116
+ }
117
+ this.error(msg);
118
+ }
119
+ const linearConfig = loadLinearConfig(db);
120
+ const client = new LinearClient(linearApiKey);
121
+ // Get team ID
122
+ let teamId = linearConfig.defaultTeamId;
123
+ if (!teamId) {
124
+ const teams = await client.listTeams();
125
+ if (teams.length === 0) {
126
+ const msg = 'No Linear teams found.';
127
+ if (jsonMode) {
128
+ outputErrorAsJson('NO_TEAMS', msg, createMetadata('workflow setup', flags));
129
+ }
130
+ this.error(msg);
131
+ }
132
+ teamId = teams[0].id;
133
+ providerLabel = `Linear (${teams[0].name} team)`;
134
+ }
135
+ else {
136
+ providerLabel = `Linear (${linearConfig.defaultTeamKey ?? 'default'} team)`;
137
+ }
138
+ const states = await client.listStates(teamId);
139
+ // Sort by position
140
+ states.sort((a, b) => a.position - b.position);
141
+ providerStates = states.map(s => ({
142
+ name: s.name,
143
+ category: LINEAR_TYPE_TO_CATEGORY[s.type] || 'backlog',
144
+ position: s.position,
145
+ }));
146
+ }
147
+ else {
148
+ // For now, only Linear is fully supported for state fetching.
149
+ // Other providers can be added later.
150
+ const msg = `Provider "${provider}" is not yet supported for workflow setup. Currently supported: linear`;
151
+ if (jsonMode) {
152
+ outputErrorAsJson('UNSUPPORTED_PROVIDER', msg, createMetadata('workflow setup', flags));
153
+ }
154
+ this.error(msg);
155
+ }
156
+ if (providerStates.length === 0) {
157
+ const msg = 'No workflow states found from provider.';
158
+ if (jsonMode) {
159
+ outputErrorAsJson('NO_STATES', msg, createMetadata('workflow setup', flags));
160
+ }
161
+ this.error(msg);
162
+ }
163
+ // 3. Get available actions for building choices
164
+ const allActions = await this.storage.listActions();
165
+ // 4. Build default wiring based on category
166
+ const wirings = providerStates.map(state => {
167
+ const suggestion = suggestDefaultAction(state.category, state.name);
168
+ return {
169
+ stateName: state.name,
170
+ category: state.category,
171
+ actionId: suggestion.actionId,
172
+ trigger: suggestion.actionId ? 'manual' : 'manual',
173
+ };
174
+ });
175
+ // 5. Display states and defaults
176
+ if (!jsonMode) {
177
+ this.log('');
178
+ this.log(styles.emphasis(`Connected to: ${providerLabel}`));
179
+ this.log('');
180
+ this.log(styles.emphasis('Your board states:'));
181
+ for (const wiring of wirings) {
182
+ const suggestion = suggestDefaultAction(wiring.category, wiring.stateName);
183
+ const arrow = '\u2190';
184
+ this.log(` ${styles.emphasis(wiring.stateName)} ${styles.muted(`(${wiring.category})`)} ${arrow} ${styles.muted(suggestion.label)}`);
185
+ }
186
+ this.log('');
187
+ }
188
+ // 6. Accept defaults or customize
189
+ if (jsonMode && !flags['accept-defaults']) {
190
+ // In JSON mode without --accept-defaults, output the plan for review
191
+ const plan = wirings.map(w => ({
192
+ state: w.stateName,
193
+ category: w.category,
194
+ action: w.actionId ?? 'none',
195
+ trigger: w.trigger,
196
+ }));
197
+ outputSuccessAsJson({
198
+ provider: provider,
199
+ providerLabel,
200
+ states: plan,
201
+ message: 'Default wiring plan. Re-run with --accept-defaults to apply, or run interactively to customize.',
202
+ }, createMetadata('workflow setup', flags));
203
+ return;
204
+ }
205
+ if (!flags['accept-defaults'] && !jsonMode) {
206
+ const { action } = await inquirer.prompt([{
207
+ type: 'list',
208
+ name: 'action',
209
+ message: 'How would you like to proceed?',
210
+ choices: [
211
+ { name: 'Accept defaults', value: 'accept' },
212
+ { name: 'Customize each state', value: 'customize' },
213
+ ],
214
+ }]);
215
+ if (action === 'customize') {
216
+ await this.customizeWirings(wirings, allActions);
217
+ }
218
+ }
219
+ // 7. Save wiring to workflow_rules table (re-runnable: delete existing rules first)
220
+ await this.saveWirings(wirings);
221
+ if (jsonMode) {
222
+ const savedRules = wirings
223
+ .filter(w => w.actionId)
224
+ .map(w => ({
225
+ state: w.stateName,
226
+ category: w.category,
227
+ action: w.actionId,
228
+ trigger: w.trigger,
229
+ }));
230
+ outputSuccessAsJson({
231
+ provider: provider,
232
+ providerLabel,
233
+ rulesCreated: savedRules.length,
234
+ rules: savedRules,
235
+ }, createMetadata('workflow setup', flags));
236
+ return;
237
+ }
238
+ this.log('');
239
+ this.log(styles.success('Workflow rules saved successfully!'));
240
+ this.log('');
241
+ // Show summary
242
+ const activeRules = wirings.filter(w => w.actionId);
243
+ if (activeRules.length > 0) {
244
+ this.log(styles.emphasis('Active rules:'));
245
+ for (const rule of activeRules) {
246
+ this.log(` ${styles.muted(`${rule.stateName} \u2192 ${rule.actionId} (${rule.trigger})`)}`);
247
+ }
248
+ }
249
+ const skippedStates = wirings.filter(w => !w.actionId);
250
+ if (skippedStates.length > 0) {
251
+ this.log('');
252
+ this.log(styles.muted(`States with no action: ${skippedStates.map(s => s.stateName).join(', ')}`));
253
+ }
254
+ this.log('');
255
+ this.log(styles.muted('View rules: prlt workflow rules'));
256
+ this.log(styles.muted('Re-run setup: prlt workflow setup'));
257
+ }
258
+ /**
259
+ * Let user customize the action for each state.
260
+ */
261
+ async customizeWirings(wirings, allActions) {
262
+ for (const wiring of wirings) {
263
+ const suggestion = suggestDefaultAction(wiring.category, wiring.stateName);
264
+ const choices = [
265
+ { name: 'No action', value: '__none__' },
266
+ ...allActions.map(a => ({
267
+ name: `${a.id}${a.id === suggestion.actionId ? ' (Recommended)' : ''} — ${a.description || a.name}`,
268
+ value: a.id,
269
+ })),
270
+ ];
271
+ // Set default to recommended action or 'No action'
272
+ const defaultValue = suggestion.actionId ?? '__none__';
273
+ // eslint-disable-next-line no-await-in-loop
274
+ const { selectedAction } = await inquirer.prompt([{
275
+ type: 'list',
276
+ name: 'selectedAction',
277
+ message: `Action for "${wiring.stateName}" (${wiring.category}):`,
278
+ choices,
279
+ default: defaultValue,
280
+ }]);
281
+ wiring.actionId = selectedAction === '__none__' ? null : selectedAction;
282
+ // If an action was selected, ask for trigger type
283
+ if (wiring.actionId) {
284
+ // eslint-disable-next-line no-await-in-loop
285
+ const { selectedTrigger } = await inquirer.prompt([{
286
+ type: 'list',
287
+ name: 'selectedTrigger',
288
+ message: `Trigger for "${wiring.stateName}" \u2192 ${wiring.actionId}:`,
289
+ choices: [
290
+ { name: 'Manual — agent picks up work when assigned', value: 'manual' },
291
+ { name: 'On enter — fires automatically when ticket enters this state', value: 'on_enter' },
292
+ ],
293
+ default: 'manual',
294
+ }]);
295
+ wiring.trigger = selectedTrigger;
296
+ }
297
+ }
298
+ }
299
+ /**
300
+ * Save wirings to the workflow_rules table.
301
+ * Re-runnable: deletes all existing rules with matching IDs before creating new ones.
302
+ */
303
+ async saveWirings(wirings) {
304
+ // Delete existing setup-generated rules (those with 'setup-' prefix)
305
+ const existingRules = await this.storage.listWorkflowRules();
306
+ for (const rule of existingRules) {
307
+ if (rule.id.startsWith('setup-')) {
308
+ // eslint-disable-next-line no-await-in-loop
309
+ await this.storage.deleteWorkflowRule(rule.id);
310
+ }
311
+ }
312
+ // Create new rules for states with actions
313
+ for (const wiring of wirings) {
314
+ if (!wiring.actionId)
315
+ continue;
316
+ const ruleId = `setup-${wiring.stateName.toLowerCase().replace(/\s+/g, '-')}-${wiring.actionId}`;
317
+ try {
318
+ // eslint-disable-next-line no-await-in-loop
319
+ await this.storage.createWorkflowRule({
320
+ id: ruleId,
321
+ fromState: undefined, // any source state
322
+ toState: wiring.stateName,
323
+ actionId: wiring.actionId,
324
+ trigger: wiring.trigger,
325
+ enabled: true,
326
+ });
327
+ }
328
+ catch (error) {
329
+ // If a rule with this ID already exists (e.g. from a re-run race), update it
330
+ if (error instanceof Error && error.message.includes('already exists')) {
331
+ // eslint-disable-next-line no-await-in-loop
332
+ await this.storage.updateWorkflowRule(ruleId, {
333
+ toState: wiring.stateName,
334
+ actionId: wiring.actionId,
335
+ trigger: wiring.trigger,
336
+ enabled: true,
337
+ });
338
+ }
339
+ else {
340
+ throw error;
341
+ }
342
+ }
343
+ }
344
+ }
345
+ }
346
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/workflow/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkflowRuleCreate extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ 'from-state': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ 'to-state': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'action-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ trigger: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ enabled: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ protected getPMOOptions(): {
16
+ promptIfMultiple: boolean;
17
+ };
18
+ execute(): Promise<void>;
19
+ }
@@ -0,0 +1,140 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata } from '../../lib/prompt-json.js';
5
+ import { FlagResolver } from '../../lib/flags/index.js';
6
+ export default class WorkflowRuleCreate extends PMOCommand {
7
+ static description = 'Create a new workflow rule';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> --to-state "In Progress" --action-id implement --trigger on_enter',
10
+ '<%= config.bin %> <%= command.id %> --from-state "Backlog" --to-state "Todo" --action-id groom',
11
+ '<%= config.bin %> <%= command.id %> # Interactive mode',
12
+ ];
13
+ static flags = {
14
+ ...pmoBaseFlags,
15
+ 'from-state': Flags.string({
16
+ description: 'Source state (empty = any source state)',
17
+ }),
18
+ 'to-state': Flags.string({
19
+ description: 'Target state that triggers the rule [required]',
20
+ }),
21
+ 'action-id': Flags.string({
22
+ description: 'Action to fire when rule matches [required]',
23
+ }),
24
+ trigger: Flags.string({
25
+ description: 'Trigger type',
26
+ options: ['manual', 'on_enter'],
27
+ default: 'manual',
28
+ }),
29
+ enabled: Flags.boolean({
30
+ description: 'Whether the rule is enabled',
31
+ default: true,
32
+ allowNo: true,
33
+ }),
34
+ };
35
+ getPMOOptions() {
36
+ return { promptIfMultiple: false };
37
+ }
38
+ async execute() {
39
+ const { flags } = await this.parse(WorkflowRuleCreate);
40
+ const jsonMode = shouldOutputJson(flags);
41
+ let toState = flags['to-state'];
42
+ let actionId = flags['action-id'];
43
+ let fromState = flags['from-state'];
44
+ let trigger = flags.trigger || 'manual';
45
+ // Interactive mode if required fields are missing
46
+ if (!toState || !actionId) {
47
+ // Get available actions for choices
48
+ const actions = await this.storage.listActions();
49
+ const actionChoices = actions.map(a => ({
50
+ name: `${a.name} (${a.id})`,
51
+ value: a.id,
52
+ }));
53
+ const triggerChoices = [
54
+ { name: 'manual — suggested but not auto-fired', value: 'manual' },
55
+ { name: 'on_enter — auto-fires when ticket enters state', value: 'on_enter' },
56
+ ];
57
+ const resolver = new FlagResolver({
58
+ commandName: 'workflow-rule create',
59
+ baseCommand: 'prlt workflow-rule create',
60
+ jsonMode,
61
+ flags: {
62
+ toState,
63
+ actionId,
64
+ fromState,
65
+ trigger,
66
+ },
67
+ });
68
+ resolver.addPrompt({
69
+ flagName: 'toState',
70
+ type: 'input',
71
+ message: 'Target state (triggers when ticket enters this state):',
72
+ when: (ctx) => !ctx.flags.toState,
73
+ validate: (value) => value.trim() ? true : 'Target state is required',
74
+ context: {
75
+ hint: 'Provide with: prlt workflow-rule create --to-state "State" --action-id "action"',
76
+ requiredFields: ['--to-state', '--action-id'],
77
+ },
78
+ });
79
+ resolver.addPrompt({
80
+ flagName: 'actionId',
81
+ type: 'list',
82
+ message: 'Action to fire:',
83
+ choices: () => actionChoices,
84
+ when: (ctx) => !ctx.flags.actionId && ctx.flags.toState !== undefined,
85
+ context: (ctx) => ({
86
+ hint: `Provide with: prlt workflow-rule create --to-state "${ctx.flags.toState}" --action-id "action-id"`,
87
+ requiredFields: ['--action-id'],
88
+ optionalFields: ['--from-state', '--trigger'],
89
+ }),
90
+ });
91
+ resolver.addPrompt({
92
+ flagName: 'fromState',
93
+ type: 'input',
94
+ message: 'Source state (empty = any source state):',
95
+ default: fromState || '',
96
+ when: (ctx) => ctx.flags.toState !== undefined && ctx.flags.actionId !== undefined,
97
+ });
98
+ resolver.addPrompt({
99
+ flagName: 'trigger',
100
+ type: 'list',
101
+ message: 'Trigger type:',
102
+ choices: () => triggerChoices,
103
+ default: trigger,
104
+ when: (ctx) => ctx.flags.toState !== undefined && ctx.flags.actionId !== undefined,
105
+ });
106
+ const resolved = await resolver.resolve();
107
+ toState = resolved.toState || toState;
108
+ actionId = resolved.actionId || actionId;
109
+ fromState = resolved.fromState || fromState;
110
+ trigger = (resolved.trigger || trigger);
111
+ }
112
+ if (!toState || !actionId) {
113
+ if (jsonMode) {
114
+ outputErrorAsJson('MISSING_REQUIRED', 'to-state and action-id are required.', createMetadata('workflow-rule create', flags));
115
+ }
116
+ this.error('to-state and action-id are required.');
117
+ }
118
+ const rule = await this.storage.createWorkflowRule({
119
+ fromState: fromState || undefined,
120
+ toState,
121
+ actionId,
122
+ trigger,
123
+ enabled: flags.enabled,
124
+ });
125
+ if (jsonMode) {
126
+ outputSuccessAsJson({
127
+ ...rule,
128
+ message: `Created workflow rule "${rule.id}"`,
129
+ }, createMetadata('workflow-rule create', flags));
130
+ return;
131
+ }
132
+ this.log(styles.success(`\nCreated workflow rule "${styles.emphasis(rule.id)}"`));
133
+ this.log(` ${styles.muted('From:')} ${rule.fromState || '(any)'} ${styles.muted('→')} ${styles.muted('To:')} ${rule.toState}`);
134
+ this.log(` ${styles.muted('Action:')} ${rule.actionId}`);
135
+ this.log(` ${styles.muted('Trigger:')} ${rule.trigger}`);
136
+ this.log(` ${styles.muted('Enabled:')} ${rule.enabled ? 'Yes' : 'No'}`);
137
+ this.log('');
138
+ }
139
+ }
140
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/workflow-rule/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkflowRuleDelete extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ protected getPMOOptions(): {
15
+ promptIfMultiple: boolean;
16
+ };
17
+ execute(): Promise<void>;
18
+ }
@@ -0,0 +1,72 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
+ import { FlagResolver } from '../../lib/flags/index.js';
6
+ export default class WorkflowRuleDelete extends PMOCommand {
7
+ static description = 'Delete a workflow rule';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> todo-implement',
10
+ '<%= config.bin %> <%= command.id %> todo-implement --force',
11
+ ];
12
+ static args = {
13
+ id: Args.string({
14
+ description: 'Rule ID to delete',
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...pmoBaseFlags,
20
+ force: Flags.boolean({
21
+ char: 'f',
22
+ description: 'Skip confirmation',
23
+ default: false,
24
+ }),
25
+ };
26
+ getPMOOptions() {
27
+ return { promptIfMultiple: false };
28
+ }
29
+ async execute() {
30
+ const { args, flags } = await this.parse(WorkflowRuleDelete);
31
+ const jsonMode = shouldOutputJson(flags);
32
+ const handleError = (code, message) => {
33
+ if (jsonMode) {
34
+ outputErrorAsJson(code, message, createMetadata('workflow-rule delete', flags));
35
+ this.exit(1);
36
+ }
37
+ this.error(message);
38
+ };
39
+ const rule = await this.storage.getWorkflowRule(args.id);
40
+ if (!rule) {
41
+ return handleError('RULE_NOT_FOUND', `Workflow rule not found: ${args.id}`);
42
+ }
43
+ if (!flags.force) {
44
+ const resolver = new FlagResolver({
45
+ commandName: 'workflow-rule delete',
46
+ baseCommand: `prlt workflow-rule delete ${args.id}`,
47
+ jsonMode,
48
+ flags: {},
49
+ });
50
+ resolver.addPrompt({
51
+ flagName: 'confirmed',
52
+ type: 'list',
53
+ message: `Delete workflow rule "${rule.id}" (${rule.fromState || 'any'} → ${rule.toState} → ${rule.actionId})?`,
54
+ choices: () => [
55
+ { name: 'No', value: false },
56
+ { name: 'Yes', value: true },
57
+ ],
58
+ getCommand: (value) => value
59
+ ? `prlt workflow-rule delete ${args.id} --force --json`
60
+ : '',
61
+ });
62
+ const resolved = await resolver.resolve();
63
+ if (!resolved.confirmed) {
64
+ this.log(styles.muted('Cancelled'));
65
+ return;
66
+ }
67
+ }
68
+ await this.storage.deleteWorkflowRule(args.id);
69
+ this.log(styles.success(`\nDeleted workflow rule "${rule.id}"`));
70
+ }
71
+ }
72
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/workflow-rule/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkflowRuleIndex extends PMOCommand {
3
+ static description: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static flags: {
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ protected getPMOOptions(): {
12
+ promptIfMultiple: boolean;
13
+ };
14
+ execute(): Promise<void>;
15
+ private selectRule;
16
+ }