@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.
- package/dist/commands/action/create.d.ts +6 -2
- package/dist/commands/action/create.js +107 -40
- package/dist/commands/action/create.js.map +1 -1
- package/dist/commands/action/list.d.ts +1 -1
- package/dist/commands/action/list.js +12 -10
- package/dist/commands/action/list.js.map +1 -1
- package/dist/commands/action/run.js +2 -2
- package/dist/commands/action/run.js.map +1 -1
- package/dist/commands/action/show.js +24 -4
- package/dist/commands/action/show.js.map +1 -1
- package/dist/commands/action/update.d.ts +6 -2
- package/dist/commands/action/update.js +130 -52
- package/dist/commands/action/update.js.map +1 -1
- package/dist/commands/work/ready.js +4 -2
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/spawn.js +2 -2
- package/dist/commands/work/spawn.js.map +1 -1
- package/dist/commands/work/start.js +67 -23
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/workflow/setup.d.ts +24 -0
- package/dist/commands/workflow/setup.js +346 -0
- package/dist/commands/workflow/setup.js.map +1 -0
- package/dist/commands/workflow-rule/create.d.ts +19 -0
- package/dist/commands/workflow-rule/create.js +140 -0
- package/dist/commands/workflow-rule/create.js.map +1 -0
- package/dist/commands/workflow-rule/delete.d.ts +18 -0
- package/dist/commands/workflow-rule/delete.js +72 -0
- package/dist/commands/workflow-rule/delete.js.map +1 -0
- package/dist/commands/workflow-rule/index.d.ts +16 -0
- package/dist/commands/workflow-rule/index.js +83 -0
- package/dist/commands/workflow-rule/index.js.map +1 -0
- package/dist/commands/workflow-rule/list.d.ts +17 -0
- package/dist/commands/workflow-rule/list.js +72 -0
- package/dist/commands/workflow-rule/list.js.map +1 -0
- package/dist/commands/workflow-rule/update.d.ts +22 -0
- package/dist/commands/workflow-rule/update.js +84 -0
- package/dist/commands/workflow-rule/update.js.map +1 -0
- package/dist/hooks/init.js +2 -4
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +269 -4
- package/dist/lib/database/drizzle-schema.js +22 -2
- package/dist/lib/database/drizzle-schema.js.map +1 -1
- package/dist/lib/database/migrations/0003_actions_redesign.d.ts +15 -0
- package/dist/lib/database/migrations/0003_actions_redesign.js +105 -0
- package/dist/lib/database/migrations/0003_actions_redesign.js.map +1 -0
- package/dist/lib/database/migrations/0004_workflow_rules.d.ts +2 -0
- package/dist/lib/database/migrations/0004_workflow_rules.js +25 -0
- package/dist/lib/database/migrations/0004_workflow_rules.js.map +1 -0
- package/dist/lib/database/migrations/index.js +4 -0
- package/dist/lib/database/migrations/index.js.map +1 -1
- package/dist/lib/events/events.d.ts +13 -1
- package/dist/lib/execution/storage.d.ts +7 -1
- package/dist/lib/execution/storage.js +14 -6
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/pmo/schema.d.ts +3 -1
- package/dist/lib/pmo/schema.js +25 -3
- package/dist/lib/pmo/schema.js.map +1 -1
- package/dist/lib/pmo/storage/actions.d.ts +5 -3
- package/dist/lib/pmo/storage/actions.js +89 -23
- package/dist/lib/pmo/storage/actions.js.map +1 -1
- package/dist/lib/pmo/storage/base.d.ts +5 -0
- package/dist/lib/pmo/storage/base.js +203 -20
- package/dist/lib/pmo/storage/base.js.map +1 -1
- package/dist/lib/pmo/storage/index.d.ts +9 -2
- package/dist/lib/pmo/storage/index.js +28 -3
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/pmo/storage/types.d.ts +19 -2
- package/dist/lib/pmo/storage/workflow-rules.d.ts +35 -0
- package/dist/lib/pmo/storage/workflow-rules.js +183 -0
- package/dist/lib/pmo/storage/workflow-rules.js.map +1 -0
- package/dist/lib/pmo/sync-manager.js +6 -0
- package/dist/lib/pmo/sync-manager.js.map +1 -1
- package/dist/lib/pmo/types.d.ts +59 -4
- package/dist/lib/pmo/types.js.map +1 -1
- package/dist/lib/telemetry/analytics.d.ts +25 -7
- package/dist/lib/telemetry/analytics.js +123 -58
- package/dist/lib/telemetry/analytics.js.map +1 -1
- package/dist/lib/work-lifecycle/action-chaining.d.ts +61 -0
- package/dist/lib/work-lifecycle/action-chaining.js +211 -0
- package/dist/lib/work-lifecycle/action-chaining.js.map +1 -0
- package/dist/lib/work-lifecycle/index.d.ts +3 -0
- package/dist/lib/work-lifecycle/index.js +3 -0
- package/dist/lib/work-lifecycle/index.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.d.ts +54 -0
- package/dist/lib/work-lifecycle/post-execution.js +68 -0
- package/dist/lib/work-lifecycle/post-execution.js.map +1 -0
- package/dist/lib/work-lifecycle/rule-evaluator.d.ts +38 -0
- package/dist/lib/work-lifecycle/rule-evaluator.js +102 -0
- package/dist/lib/work-lifecycle/rule-evaluator.js.map +1 -0
- package/oclif.manifest.json +3198 -2707
- 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
|
+
}
|