@proletariat/cli 0.3.95 → 0.3.97

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 (260) hide show
  1. package/dist/commands/config/index.js +1 -1
  2. package/dist/commands/config/index.js.map +1 -1
  3. package/dist/commands/db/repair.js +160 -35
  4. package/dist/commands/db/repair.js.map +1 -1
  5. package/dist/commands/gc.d.ts +14 -0
  6. package/dist/commands/gc.js +208 -0
  7. package/dist/commands/gc.js.map +1 -0
  8. package/dist/commands/linear/connect.d.ts +5 -0
  9. package/dist/commands/linear/connect.js +84 -0
  10. package/dist/commands/linear/connect.js.map +1 -1
  11. package/dist/commands/pr/merge.js +1 -1
  12. package/dist/commands/pr/merge.js.map +1 -1
  13. package/dist/commands/session/attach.d.ts +3 -3
  14. package/dist/commands/session/attach.js +37 -79
  15. package/dist/commands/session/attach.js.map +1 -1
  16. package/dist/commands/session/exec.js +1 -1
  17. package/dist/commands/session/exec.js.map +1 -1
  18. package/dist/commands/session/health.js +1 -1
  19. package/dist/commands/session/health.js.map +1 -1
  20. package/dist/commands/session/inspect.js +1 -1
  21. package/dist/commands/session/inspect.js.map +1 -1
  22. package/dist/commands/session/list.d.ts +1 -0
  23. package/dist/commands/session/list.js +111 -78
  24. package/dist/commands/session/list.js.map +1 -1
  25. package/dist/commands/session/peek.js +1 -1
  26. package/dist/commands/session/peek.js.map +1 -1
  27. package/dist/commands/session/poke.js +1 -1
  28. package/dist/commands/session/poke.js.map +1 -1
  29. package/dist/commands/session/prune.js +50 -11
  30. package/dist/commands/session/prune.js.map +1 -1
  31. package/dist/commands/session/restart.js +1 -1
  32. package/dist/commands/session/restart.js.map +1 -1
  33. package/dist/commands/session/watch.d.ts +1 -0
  34. package/dist/commands/session/watch.js +46 -2
  35. package/dist/commands/session/watch.js.map +1 -1
  36. package/dist/commands/{action → sync}/index.d.ts +2 -6
  37. package/dist/commands/sync/index.js +68 -0
  38. package/dist/commands/sync/index.js.map +1 -0
  39. package/dist/commands/sync/pause.d.ts +10 -0
  40. package/dist/commands/sync/pause.js +35 -0
  41. package/dist/commands/sync/pause.js.map +1 -0
  42. package/dist/commands/sync/queue.d.ts +10 -0
  43. package/dist/commands/sync/queue.js +106 -0
  44. package/dist/commands/sync/queue.js.map +1 -0
  45. package/dist/commands/sync/resume.d.ts +10 -0
  46. package/dist/commands/sync/resume.js +34 -0
  47. package/dist/commands/sync/resume.js.map +1 -0
  48. package/dist/commands/sync/start.d.ts +11 -0
  49. package/dist/commands/sync/start.js +73 -0
  50. package/dist/commands/sync/start.js.map +1 -0
  51. package/dist/commands/sync/status.d.ts +10 -0
  52. package/dist/commands/sync/status.js +40 -0
  53. package/dist/commands/sync/status.js.map +1 -0
  54. package/dist/commands/sync/stop.d.ts +10 -0
  55. package/dist/commands/sync/stop.js +39 -0
  56. package/dist/commands/sync/stop.js.map +1 -0
  57. package/dist/commands/ticket/create.js +1 -1
  58. package/dist/commands/ticket/create.js.map +1 -1
  59. package/dist/commands/ticket/edit.js +1 -1
  60. package/dist/commands/ticket/edit.js.map +1 -1
  61. package/dist/commands/ticket/list.js +1 -1
  62. package/dist/commands/ticket/list.js.map +1 -1
  63. package/dist/commands/ticket/update.js +1 -1
  64. package/dist/commands/ticket/update.js.map +1 -1
  65. package/dist/commands/work/complete.d.ts +1 -0
  66. package/dist/commands/work/complete.js +27 -25
  67. package/dist/commands/work/complete.js.map +1 -1
  68. package/dist/commands/work/drop.d.ts +14 -0
  69. package/dist/commands/work/drop.js +215 -0
  70. package/dist/commands/work/drop.js.map +1 -0
  71. package/dist/commands/work/ready.d.ts +1 -0
  72. package/dist/commands/work/ready.js +26 -25
  73. package/dist/commands/work/ready.js.map +1 -1
  74. package/dist/commands/work/resolve.js +1 -1
  75. package/dist/commands/work/resolve.js.map +1 -1
  76. package/dist/commands/work/ship.d.ts +1 -0
  77. package/dist/commands/work/ship.js +33 -32
  78. package/dist/commands/work/ship.js.map +1 -1
  79. package/dist/commands/work/start.d.ts +2 -0
  80. package/dist/commands/work/start.js +172 -125
  81. package/dist/commands/work/start.js.map +1 -1
  82. package/dist/commands/work/stop.d.ts +1 -0
  83. package/dist/commands/work/stop.js +40 -0
  84. package/dist/commands/work/stop.js.map +1 -1
  85. package/dist/lib/agents/commands.js +7 -5
  86. package/dist/lib/agents/commands.js.map +1 -1
  87. package/dist/lib/dashboard/data.js +1 -1
  88. package/dist/lib/dashboard/data.js.map +1 -1
  89. package/dist/lib/database/db-safety.d.ts +22 -0
  90. package/dist/lib/database/db-safety.js +91 -4
  91. package/dist/lib/database/db-safety.js.map +1 -1
  92. package/dist/lib/database/drizzle-schema.d.ts +17 -0
  93. package/dist/lib/database/drizzle-schema.js +1 -0
  94. package/dist/lib/database/drizzle-schema.js.map +1 -1
  95. package/dist/lib/database/index.d.ts +1 -1
  96. package/dist/lib/database/index.js +1 -1
  97. package/dist/lib/database/index.js.map +1 -1
  98. package/dist/lib/database/migrations/0017_drop_agent_work_fk.d.ts +13 -0
  99. package/dist/lib/database/migrations/0017_drop_agent_work_fk.js +85 -0
  100. package/dist/lib/database/migrations/0017_drop_agent_work_fk.js.map +1 -0
  101. package/dist/lib/database/migrations/0018_create_ticket_refs.d.ts +11 -0
  102. package/dist/lib/database/migrations/0018_create_ticket_refs.js +40 -0
  103. package/dist/lib/database/migrations/0018_create_ticket_refs.js.map +1 -0
  104. package/dist/lib/database/migrations/0019_gc_artifact_cleanup.d.ts +9 -0
  105. package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js +23 -0
  106. package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js.map +1 -0
  107. package/dist/lib/database/migrations/0020_transition_map.d.ts +2 -0
  108. package/dist/lib/database/migrations/0020_transition_map.js +27 -0
  109. package/dist/lib/database/migrations/0020_transition_map.js.map +1 -0
  110. package/dist/lib/database/migrations/index.js +8 -0
  111. package/dist/lib/database/migrations/index.js.map +1 -1
  112. package/dist/lib/execution/config.d.ts +10 -0
  113. package/dist/lib/execution/config.js +24 -0
  114. package/dist/lib/execution/config.js.map +1 -1
  115. package/dist/lib/execution/devcontainer.js +1 -1
  116. package/dist/lib/execution/devcontainer.js.map +1 -1
  117. package/dist/lib/execution/preflight.d.ts +51 -0
  118. package/dist/lib/execution/preflight.js +278 -0
  119. package/dist/lib/execution/preflight.js.map +1 -0
  120. package/dist/lib/execution/runners/docker-management.d.ts +9 -0
  121. package/dist/lib/execution/runners/docker-management.js +14 -3
  122. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  123. package/dist/lib/execution/runners/prompt-builder.d.ts +6 -0
  124. package/dist/lib/execution/runners/prompt-builder.js +53 -10
  125. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  126. package/dist/lib/execution/runners/shared.d.ts +1 -1
  127. package/dist/lib/execution/runners/shared.js +1 -1
  128. package/dist/lib/execution/runners/shared.js.map +1 -1
  129. package/dist/lib/execution/session-utils.d.ts +39 -0
  130. package/dist/lib/execution/session-utils.js +111 -0
  131. package/dist/lib/execution/session-utils.js.map +1 -1
  132. package/dist/lib/execution/spawner.d.ts +11 -1
  133. package/dist/lib/execution/spawner.js +46 -17
  134. package/dist/lib/execution/spawner.js.map +1 -1
  135. package/dist/lib/execution/storage.js +2 -1
  136. package/dist/lib/execution/storage.js.map +1 -1
  137. package/dist/lib/execution/ticket-refs.d.ts +71 -0
  138. package/dist/lib/execution/ticket-refs.js +125 -0
  139. package/dist/lib/execution/ticket-refs.js.map +1 -0
  140. package/dist/lib/execution/types.d.ts +7 -2
  141. package/dist/lib/execution/types.js +5 -3
  142. package/dist/lib/execution/types.js.map +1 -1
  143. package/dist/lib/external-issues/utils.d.ts +25 -0
  144. package/dist/lib/external-issues/utils.js +32 -0
  145. package/dist/lib/external-issues/utils.js.map +1 -0
  146. package/dist/lib/gc/index.d.ts +179 -0
  147. package/dist/lib/gc/index.js +655 -0
  148. package/dist/lib/gc/index.js.map +1 -0
  149. package/dist/lib/mcp/tools/action.js +1 -1
  150. package/dist/lib/mcp/tools/action.js.map +1 -1
  151. package/dist/lib/mcp/tools/ticket.js +1 -1
  152. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  153. package/dist/lib/orchestrate/actions.js +30 -0
  154. package/dist/lib/orchestrate/actions.js.map +1 -1
  155. package/dist/lib/orchestrate/poller.js +3 -3
  156. package/dist/lib/orchestrate/poller.js.map +1 -1
  157. package/dist/lib/orchestrate/presets.js +2 -1
  158. package/dist/lib/orchestrate/presets.js.map +1 -1
  159. package/dist/lib/orchestrate/types.d.ts +1 -1
  160. package/dist/lib/orchestrate/types.js +1 -0
  161. package/dist/lib/orchestrate/types.js.map +1 -1
  162. package/dist/lib/pmo/index.js +1 -1
  163. package/dist/lib/pmo/index.js.map +1 -1
  164. package/dist/lib/pmo/markdown.js +1 -1
  165. package/dist/lib/pmo/markdown.js.map +1 -1
  166. package/dist/lib/pmo/schema.d.ts +3 -1
  167. package/dist/lib/pmo/schema.js +26 -2
  168. package/dist/lib/pmo/schema.js.map +1 -1
  169. package/dist/lib/pmo/storage/actions.js +1 -1
  170. package/dist/lib/pmo/storage/actions.js.map +1 -1
  171. package/dist/lib/pmo/storage/base.js +37 -15
  172. package/dist/lib/pmo/storage/base.js.map +1 -1
  173. package/dist/lib/pmo/storage/projects.js +2 -1
  174. package/dist/lib/pmo/storage/projects.js.map +1 -1
  175. package/dist/lib/pmo/storage/statuses.js +1 -1
  176. package/dist/lib/pmo/storage/statuses.js.map +1 -1
  177. package/dist/lib/pmo/storage/subtasks.js +1 -1
  178. package/dist/lib/pmo/storage/subtasks.js.map +1 -1
  179. package/dist/lib/pmo/storage/templates.js +1 -1
  180. package/dist/lib/pmo/storage/templates.js.map +1 -1
  181. package/dist/lib/pmo/storage/tickets.js +2 -1
  182. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  183. package/dist/lib/pmo/storage/workflow-rules.js +1 -1
  184. package/dist/lib/pmo/storage/workflow-rules.js.map +1 -1
  185. package/dist/lib/pmo/utils.d.ts +6 -189
  186. package/dist/lib/pmo/utils.js +6 -306
  187. package/dist/lib/pmo/utils.js.map +1 -1
  188. package/dist/lib/prompt-json.d.ts +31 -0
  189. package/dist/lib/prompt-json.js.map +1 -1
  190. package/dist/lib/providers/auto-mapper.d.ts +45 -0
  191. package/dist/lib/providers/auto-mapper.js +115 -0
  192. package/dist/lib/providers/auto-mapper.js.map +1 -0
  193. package/dist/lib/providers/state-intents.d.ts +20 -0
  194. package/dist/lib/providers/state-intents.js +61 -7
  195. package/dist/lib/providers/state-intents.js.map +1 -1
  196. package/dist/lib/providers/state-resolution.d.ts +15 -11
  197. package/dist/lib/providers/state-resolution.js +54 -48
  198. package/dist/lib/providers/state-resolution.js.map +1 -1
  199. package/dist/lib/providers/transition-map.d.ts +59 -0
  200. package/dist/lib/providers/transition-map.js +113 -0
  201. package/dist/lib/providers/transition-map.js.map +1 -0
  202. package/dist/lib/session/heartbeat.js +1 -1
  203. package/dist/lib/session/heartbeat.js.map +1 -1
  204. package/dist/lib/session/index.d.ts +3 -1
  205. package/dist/lib/session/index.js +3 -1
  206. package/dist/lib/session/index.js.map +1 -1
  207. package/dist/lib/session/tmux-watchdog.d.ts +157 -0
  208. package/dist/lib/session/tmux-watchdog.js +424 -0
  209. package/dist/lib/session/tmux-watchdog.js.map +1 -0
  210. package/dist/lib/session/watcher.d.ts +22 -4
  211. package/dist/lib/session/watcher.js +66 -8
  212. package/dist/lib/session/watcher.js.map +1 -1
  213. package/dist/lib/sync/daemon-process.d.ts +9 -0
  214. package/dist/lib/sync/daemon-process.js +184 -0
  215. package/dist/lib/sync/daemon-process.js.map +1 -0
  216. package/dist/lib/sync/daemon.d.ts +39 -0
  217. package/dist/lib/sync/daemon.js +91 -0
  218. package/dist/lib/sync/daemon.js.map +1 -0
  219. package/dist/lib/sync/engine.d.ts +38 -0
  220. package/dist/lib/sync/engine.js +145 -0
  221. package/dist/lib/sync/engine.js.map +1 -0
  222. package/dist/lib/sync/merge-queue.d.ts +116 -0
  223. package/dist/lib/sync/merge-queue.js +321 -0
  224. package/dist/lib/sync/merge-queue.js.map +1 -0
  225. package/dist/lib/sync/reconciler.d.ts +44 -0
  226. package/dist/lib/sync/reconciler.js +88 -0
  227. package/dist/lib/sync/reconciler.js.map +1 -0
  228. package/dist/lib/utils/text.d.ts +44 -0
  229. package/dist/lib/utils/text.js +72 -0
  230. package/dist/lib/utils/text.js.map +1 -0
  231. package/dist/lib/work-lifecycle/post-execution.js +1 -1
  232. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  233. package/dist/lib/work-lifecycle/settings.d.ts +138 -0
  234. package/dist/lib/work-lifecycle/settings.js +213 -0
  235. package/dist/lib/work-lifecycle/settings.js.map +1 -0
  236. package/dist/lib/work-lifecycle/transition.d.ts +73 -0
  237. package/dist/lib/work-lifecycle/transition.js +124 -0
  238. package/dist/lib/work-lifecycle/transition.js.map +1 -0
  239. package/oclif.manifest.json +3235 -3380
  240. package/package.json +1 -1
  241. package/dist/commands/action/create.d.ts +0 -26
  242. package/dist/commands/action/create.js +0 -245
  243. package/dist/commands/action/create.js.map +0 -1
  244. package/dist/commands/action/delete.d.ts +0 -18
  245. package/dist/commands/action/delete.js +0 -78
  246. package/dist/commands/action/delete.js.map +0 -1
  247. package/dist/commands/action/index.js +0 -103
  248. package/dist/commands/action/index.js.map +0 -1
  249. package/dist/commands/action/list.d.ts +0 -15
  250. package/dist/commands/action/list.js +0 -90
  251. package/dist/commands/action/list.js.map +0 -1
  252. package/dist/commands/action/run.d.ts +0 -20
  253. package/dist/commands/action/run.js +0 -188
  254. package/dist/commands/action/run.js.map +0 -1
  255. package/dist/commands/action/show.d.ts +0 -17
  256. package/dist/commands/action/show.js +0 -78
  257. package/dist/commands/action/show.js.map +0 -1
  258. package/dist/commands/action/update.d.ts +0 -27
  259. package/dist/commands/action/update.js +0 -288
  260. package/dist/commands/action/update.js.map +0 -1
@@ -1,20 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class ActionRun extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static strict: boolean;
6
- static args: {
7
- ticketIds: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
- static flags: {
10
- action: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
- all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
- };
19
- execute(): Promise<void>;
20
- }
@@ -1,188 +0,0 @@
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 ActionRun extends PMOCommand {
7
- static description = 'Run an action on one or more tickets (bulk action support)';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> TKT-001 --action implement',
10
- '<%= config.bin %> <%= command.id %> TKT-001 TKT-002 TKT-003 --action groom',
11
- '<%= config.bin %> <%= command.id %> --all --action groom # All backlog tickets',
12
- '<%= config.bin %> <%= command.id %> --category started --action review',
13
- ];
14
- static strict = false; // Allow multiple ticket IDs
15
- static args = {
16
- ticketIds: Args.string({
17
- description: 'Ticket ID(s) to run action on',
18
- required: false,
19
- }),
20
- };
21
- static flags = {
22
- ...pmoBaseFlags,
23
- action: Flags.string({
24
- char: 'A',
25
- description: 'Action to run (e.g., groom, implement, review)',
26
- required: true,
27
- }),
28
- all: Flags.boolean({
29
- char: 'a',
30
- description: 'Run on all tickets in backlog',
31
- default: false,
32
- }),
33
- category: Flags.string({
34
- char: 'c',
35
- description: 'Filter tickets by status category',
36
- options: ['backlog', 'unstarted', 'started', 'completed', 'canceled'],
37
- }),
38
- 'dry-run': Flags.boolean({
39
- description: 'Show what would be done without executing',
40
- default: false,
41
- }),
42
- force: Flags.boolean({
43
- char: 'f',
44
- description: 'Skip confirmation prompt',
45
- default: false,
46
- }),
47
- };
48
- async execute() {
49
- const { argv, flags } = await this.parse(ActionRun);
50
- const ticketIds = argv;
51
- // Check if JSON output mode is active
52
- const jsonMode = shouldOutputJson(flags);
53
- // Helper to handle errors in JSON mode
54
- const handleError = (code, message) => {
55
- if (jsonMode) {
56
- outputErrorAsJson(code, message, createMetadata('action run', flags));
57
- return;
58
- }
59
- this.error(message);
60
- };
61
- // Get the action
62
- const action = await this.storage.getAction(flags.action);
63
- if (!action) {
64
- return handleError('ACTION_NOT_FOUND', `Action not found: ${flags.action}\nRun 'prlt action list' to see available actions.`);
65
- }
66
- // Get tickets to operate on
67
- // Use -P flag to filter by project, or undefined to show all projects
68
- const projectId = flags.project;
69
- let tickets = [];
70
- if (flags.all || flags.category) {
71
- // Get tickets by filter
72
- const allTickets = await this.storage.listTickets(projectId);
73
- if (flags.category) {
74
- tickets = allTickets.filter(t => t.statusCategory === flags.category);
75
- }
76
- else if (flags.all) {
77
- // Default to backlog for --all
78
- tickets = allTickets.filter(t => t.statusCategory === 'backlog' || !t.statusCategory);
79
- }
80
- }
81
- else if (ticketIds.length > 0) {
82
- // Get specific tickets in parallel
83
- const results = await Promise.all(ticketIds.map(async (id) => {
84
- const ticket = await this.storage.getTicket(id);
85
- if (!ticket) {
86
- this.warn(`Ticket not found: ${id}`);
87
- }
88
- return ticket;
89
- }));
90
- tickets = results.filter((t) => t !== null);
91
- }
92
- else {
93
- // Interactive: show list of tickets to select using FlagResolver
94
- const allTickets = await this.storage.listTickets(projectId);
95
- if (allTickets.length === 0) {
96
- return handleError('NO_TICKETS', 'No tickets found.');
97
- }
98
- // Use FlagResolver for ticket selection - works in both JSON and interactive modes
99
- const resolver = new FlagResolver({
100
- commandName: 'action run',
101
- baseCommand: `prlt action run --action ${flags.action}`,
102
- jsonMode,
103
- flags: {},
104
- });
105
- resolver.addPrompt({
106
- flagName: 'ticketIds',
107
- type: 'checkbox',
108
- message: `Select tickets for "${action.name}" action:`,
109
- choices: () => allTickets.map(t => ({
110
- name: `${t.id} - ${t.title} [${t.statusName || t.statusCategory || 'unknown'}]`,
111
- value: t.id,
112
- })),
113
- validate: (value) => value.length > 0 || 'Select at least one ticket',
114
- getCommand: (value) => `prlt action run ${value.join(' ')} --action ${flags.action} --json`,
115
- });
116
- const resolved = await resolver.resolve();
117
- if (!resolved.ticketIds || resolved.ticketIds.length === 0) {
118
- this.error('No tickets selected.');
119
- }
120
- const selectedResults = await Promise.all(resolved.ticketIds.map((id) => this.storage.getTicket(id)));
121
- tickets = selectedResults.filter((t) => t !== null);
122
- }
123
- if (tickets.length === 0) {
124
- this.error('No tickets matched the criteria.');
125
- }
126
- // Show what will be done
127
- this.log('');
128
- this.log(styles.header(`🎬 Action: ${action.name}`));
129
- if (action.description) {
130
- this.log(styles.muted(` ${action.description}`));
131
- }
132
- this.log('');
133
- this.log(styles.emphasis(`Tickets (${tickets.length}):`));
134
- for (const ticket of tickets) {
135
- const status = ticket.statusName || ticket.statusCategory || 'unknown';
136
- this.log(styles.muted(` • ${ticket.id}: ${ticket.title} [${status}]`));
137
- }
138
- this.log('');
139
- if (action.toState) {
140
- this.log(styles.muted(`After action: tickets will move to "${action.toState}"`));
141
- this.log('');
142
- }
143
- if (flags['dry-run']) {
144
- this.log(styles.warning('DRY RUN - no changes made'));
145
- return;
146
- }
147
- // Confirm unless --force
148
- if (!flags.force && tickets.length > 1) {
149
- // Use FlagResolver for confirmation prompt - works in both JSON and interactive modes
150
- const resolver = new FlagResolver({
151
- commandName: 'action run',
152
- baseCommand: `prlt action run ${tickets.map(t => t.id).join(' ')} --action ${flags.action}`,
153
- jsonMode,
154
- flags: {},
155
- });
156
- resolver.addPrompt({
157
- flagName: 'confirmed',
158
- type: 'list',
159
- message: `Run "${action.name}" on ${tickets.length} tickets?`,
160
- choices: () => [
161
- { name: 'Yes', value: true },
162
- { name: 'No', value: false },
163
- ],
164
- getCommand: (value) => value
165
- ? `prlt action run ${tickets.map(t => t.id).join(' ')} --action ${flags.action} --force --json`
166
- : '',
167
- });
168
- const resolved = await resolver.resolve();
169
- if (!resolved.confirmed) {
170
- this.log(styles.muted('Cancelled.'));
171
- return;
172
- }
173
- }
174
- // Queue the action for each ticket
175
- // For now, this just outputs what would be done
176
- // Full implementation would integrate with work/start
177
- this.log('');
178
- this.log(styles.muted('To execute, run for each ticket:'));
179
- for (const ticket of tickets) {
180
- this.log(styles.muted(` prlt work start ${ticket.id} --action ${action.id}`));
181
- }
182
- this.log('');
183
- this.log(styles.muted('Or use spawn --all to distribute to agents:'));
184
- this.log(styles.muted(` prlt work spawn --all --action ${action.id}`));
185
- this.log('');
186
- }
187
- }
188
- //# sourceMappingURL=run.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/action/run.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class ActionShow 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
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- };
13
- protected getPMOOptions(): {
14
- promptIfMultiple: boolean;
15
- };
16
- execute(): Promise<void>;
17
- }
@@ -1,78 +0,0 @@
1
- import { Args } 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
- export default class ActionShow extends PMOCommand {
6
- static description = 'Show details of a work action';
7
- static examples = [
8
- '<%= config.bin %> <%= command.id %> groom',
9
- '<%= config.bin %> <%= command.id %> implement',
10
- ];
11
- static args = {
12
- id: Args.string({
13
- description: 'Action ID to show',
14
- required: true,
15
- }),
16
- };
17
- static flags = {
18
- ...pmoBaseFlags,
19
- };
20
- getPMOOptions() {
21
- return { promptIfMultiple: false };
22
- }
23
- async execute() {
24
- const { args, flags } = await this.parse(ActionShow);
25
- const jsonMode = shouldOutputJson(flags);
26
- const action = await this.storage.getAction(args.id);
27
- if (!action) {
28
- if (jsonMode) {
29
- outputErrorAsJson('ACTION_NOT_FOUND', `Action not found: ${args.id}`, createMetadata('action show', flags));
30
- return;
31
- }
32
- this.error(`Action not found: ${args.id}`);
33
- }
34
- if (jsonMode) {
35
- outputSuccessAsJson({ ...action }, createMetadata('action show', flags));
36
- return;
37
- }
38
- this.log(`\n${styles.emphasis(`Action: ${action.name}`)} ${styles.muted(`(${action.id})`)}`);
39
- this.log('');
40
- if (action.description) {
41
- this.log(`${styles.muted('Description:')} ${action.description}`);
42
- }
43
- if (action.fromState) {
44
- this.log(`${styles.muted('From state:')} ${action.fromState}`);
45
- }
46
- else {
47
- this.log(`${styles.muted('From state:')} (any)`);
48
- }
49
- if (action.toState) {
50
- this.log(`${styles.muted('To state:')} ${action.toState}`);
51
- }
52
- if (action.executor) {
53
- this.log(`${styles.muted('Executor:')} ${action.executor}`);
54
- }
55
- if (action.environment) {
56
- this.log(`${styles.muted('Environment:')} ${action.environment}`);
57
- }
58
- if (action.permissionMode) {
59
- this.log(`${styles.muted('Permission mode:')} ${action.permissionMode}`);
60
- }
61
- if (action.model) {
62
- this.log(`${styles.muted('Model:')} ${action.model}`);
63
- }
64
- if (action.timeout) {
65
- this.log(`${styles.muted('Timeout:')} ${action.timeout}s`);
66
- }
67
- this.log(`${styles.muted('Modifies code:')} ${action.modifiesCode ? 'Yes' : 'No'}`);
68
- this.log(`${styles.muted('Default:')} ${action.isDefault ? 'Yes' : 'No'}`);
69
- this.log(`${styles.muted('Built-in:')} ${action.isBuiltin ? 'Yes' : 'No'}`);
70
- this.log('');
71
- this.log(styles.muted('Prompt:'));
72
- this.log('─'.repeat(40));
73
- this.log(action.prompt);
74
- this.log('─'.repeat(40));
75
- this.log('');
76
- }
77
- }
78
- //# sourceMappingURL=show.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/action/show.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class ActionUpdate 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
- name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- prompt: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
- 'from-state': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- 'to-state': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
- executor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
- environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
- 'permission-mode': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
- model: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
- interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
- };
23
- protected getPMOOptions(): {
24
- promptIfMultiple: boolean;
25
- };
26
- execute(): Promise<void>;
27
- }
@@ -1,288 +0,0 @@
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 ActionUpdate extends PMOCommand {
7
- static description = 'Update a work action';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> my-action --name "New Name"',
10
- '<%= config.bin %> <%= command.id %> my-action --prompt "Updated prompt..."',
11
- '<%= config.bin %> <%= command.id %> my-action --from-state "In Progress" --to-state "Done"',
12
- '<%= config.bin %> <%= command.id %> my-action # Interactive mode',
13
- ];
14
- static args = {
15
- id: Args.string({
16
- description: 'Action ID to update',
17
- required: true,
18
- }),
19
- };
20
- static flags = {
21
- ...pmoBaseFlags,
22
- name: Flags.string({
23
- char: 'n',
24
- description: 'New action name',
25
- }),
26
- prompt: Flags.string({
27
- char: 'p',
28
- description: 'New prompt text',
29
- }),
30
- description: Flags.string({
31
- char: 'd',
32
- description: 'New description',
33
- }),
34
- 'from-state': Flags.string({
35
- description: 'State name this action is suggested for (empty = any state)',
36
- }),
37
- 'to-state': Flags.string({
38
- description: 'State name to move ticket to after action completes (empty = no move)',
39
- }),
40
- executor: Flags.string({
41
- description: 'Executor to use',
42
- options: ['claude', 'codex', 'opencode', 'custom'],
43
- }),
44
- environment: Flags.string({
45
- description: 'Execution environment',
46
- options: ['devcontainer', 'docker', 'host', 'vm'],
47
- }),
48
- 'permission-mode': Flags.string({
49
- description: 'Permission mode for the executor',
50
- options: ['full', 'readonly', 'bypassPermissions'],
51
- }),
52
- model: Flags.string({
53
- description: 'Model override (empty = let executor pick default)',
54
- }),
55
- interactive: Flags.boolean({
56
- char: 'i',
57
- description: 'Interactive mode - prompt for all fields',
58
- default: false,
59
- }),
60
- };
61
- getPMOOptions() {
62
- return { promptIfMultiple: false };
63
- }
64
- async execute() {
65
- const { args, flags } = await this.parse(ActionUpdate);
66
- // Check if JSON output mode is active
67
- const jsonMode = shouldOutputJson(flags);
68
- // Helper to handle errors in JSON mode
69
- const handleError = (code, message) => {
70
- if (jsonMode) {
71
- outputErrorAsJson(code, message, createMetadata('action update', flags));
72
- return;
73
- }
74
- this.error(message);
75
- };
76
- // Get current action
77
- const existingAction = await this.storage.getAction(args.id);
78
- if (!existingAction) {
79
- return handleError('ACTION_NOT_FOUND', `Action not found: ${args.id}`);
80
- }
81
- if (existingAction.isBuiltin) {
82
- return handleError('CANNOT_UPDATE_BUILTIN', 'Cannot update built-in actions. Create a custom action instead.');
83
- }
84
- const hasFlags = flags.name || flags.prompt || flags.description !== undefined ||
85
- flags['from-state'] !== undefined || flags['to-state'] !== undefined ||
86
- flags.executor || flags.environment || flags['permission-mode'] || flags.model !== undefined;
87
- const changes = {};
88
- // Interactive mode if no flags provided or --interactive flag
89
- if (!hasFlags || flags.interactive) {
90
- const executorChoices = [
91
- { name: 'claude', value: 'claude' },
92
- { name: 'codex', value: 'codex' },
93
- { name: 'opencode', value: 'opencode' },
94
- { name: 'custom', value: 'custom' },
95
- ];
96
- const environmentChoices = [
97
- { name: 'host', value: 'host' },
98
- { name: 'devcontainer', value: 'devcontainer' },
99
- { name: 'docker', value: 'docker' },
100
- { name: 'vm', value: 'vm' },
101
- ];
102
- const permissionModeChoices = [
103
- { name: 'full', value: 'full' },
104
- { name: 'readonly', value: 'readonly' },
105
- { name: 'bypassPermissions', value: 'bypassPermissions' },
106
- ];
107
- // Use FlagResolver for prompts - works in both JSON and interactive modes
108
- const resolver = new FlagResolver({
109
- commandName: 'action update',
110
- baseCommand: `prlt action update ${args.id}`,
111
- jsonMode,
112
- flags: {
113
- name: flags.name,
114
- description: flags.description,
115
- prompt: flags.prompt,
116
- fromState: flags['from-state'],
117
- toState: flags['to-state'],
118
- executor: flags.executor,
119
- environment: flags.environment,
120
- permissionMode: flags['permission-mode'],
121
- model: flags.model,
122
- },
123
- });
124
- // Name input
125
- resolver.addPrompt({
126
- flagName: 'name',
127
- type: 'input',
128
- message: 'Name:',
129
- default: existingAction.name,
130
- context: {
131
- hint: `Provide with: prlt action update ${args.id} --name "New Name"`,
132
- currentValue: existingAction.name,
133
- },
134
- });
135
- // Description input
136
- resolver.addPrompt({
137
- flagName: 'description',
138
- type: 'input',
139
- message: 'Description:',
140
- default: existingAction.description || '',
141
- when: (ctx) => ctx.flags.name !== undefined,
142
- context: {
143
- currentValue: existingAction.description || '',
144
- },
145
- });
146
- // Prompt input (multiline)
147
- resolver.addPrompt({
148
- flagName: 'prompt',
149
- type: 'multiline',
150
- message: 'Prompt (agent instructions):',
151
- default: existingAction.prompt,
152
- when: (ctx) => ctx.flags.name !== undefined && ctx.flags.description !== undefined,
153
- context: {
154
- hint: `Current prompt length: ${existingAction.prompt.length} chars`,
155
- },
156
- });
157
- // From-state input
158
- resolver.addPrompt({
159
- flagName: 'fromState',
160
- type: 'input',
161
- message: 'From state (state name to match, empty = any state):',
162
- default: existingAction.fromState || '',
163
- when: (ctx) => ctx.flags.prompt !== undefined && ctx.flags.fromState === undefined,
164
- });
165
- // To-state input
166
- resolver.addPrompt({
167
- flagName: 'toState',
168
- type: 'input',
169
- message: 'To state (state name to move ticket to, empty = no move):',
170
- default: existingAction.toState || '',
171
- when: (ctx) => ctx.flags.fromState !== undefined && ctx.flags.toState === undefined,
172
- });
173
- // Executor list
174
- resolver.addPrompt({
175
- flagName: 'executor',
176
- type: 'list',
177
- message: 'Executor:',
178
- choices: () => executorChoices,
179
- default: existingAction.executor || 'claude',
180
- when: (ctx) => ctx.flags.toState !== undefined && ctx.flags.executor === undefined,
181
- });
182
- // Environment list
183
- resolver.addPrompt({
184
- flagName: 'environment',
185
- type: 'list',
186
- message: 'Environment:',
187
- choices: () => environmentChoices,
188
- default: existingAction.environment || 'host',
189
- when: (ctx) => ctx.flags.executor !== undefined && ctx.flags.environment === undefined,
190
- });
191
- // Permission mode list
192
- resolver.addPrompt({
193
- flagName: 'permissionMode',
194
- type: 'list',
195
- message: 'Permission mode:',
196
- choices: () => permissionModeChoices,
197
- default: existingAction.permissionMode || 'full',
198
- when: (ctx) => ctx.flags.environment !== undefined && ctx.flags.permissionMode === undefined,
199
- });
200
- this.log('');
201
- this.log(styles.header(`Updating action: ${existingAction.name}`));
202
- this.log(styles.muted('Press Enter to keep current value, or enter new value.'));
203
- this.log('');
204
- const resolved = await resolver.resolve();
205
- if (resolved.name !== existingAction.name)
206
- changes.name = resolved.name;
207
- if (resolved.description !== (existingAction.description || ''))
208
- changes.description = resolved.description;
209
- if (resolved.prompt !== existingAction.prompt)
210
- changes.prompt = resolved.prompt;
211
- const currentFromState = existingAction.fromState || '';
212
- if ((resolved.fromState || '') !== currentFromState) {
213
- changes.fromState = resolved.fromState || null;
214
- }
215
- const currentToState = existingAction.toState || '';
216
- if ((resolved.toState || '') !== currentToState) {
217
- changes.toState = resolved.toState || null;
218
- }
219
- if (resolved.executor && resolved.executor !== existingAction.executor) {
220
- changes.executor = resolved.executor;
221
- }
222
- if (resolved.environment && resolved.environment !== existingAction.environment) {
223
- changes.environment = resolved.environment;
224
- }
225
- if (resolved.permissionMode && resolved.permissionMode !== existingAction.permissionMode) {
226
- changes.permissionMode = resolved.permissionMode;
227
- }
228
- }
229
- else {
230
- // Flag-based update
231
- if (flags.name)
232
- changes.name = flags.name;
233
- if (flags.prompt)
234
- changes.prompt = flags.prompt;
235
- if (flags.description !== undefined)
236
- changes.description = flags.description;
237
- if (flags['from-state'] !== undefined) {
238
- changes.fromState = flags['from-state'] || null;
239
- }
240
- if (flags['to-state'] !== undefined) {
241
- changes.toState = flags['to-state'] || null;
242
- }
243
- if (flags.executor) {
244
- changes.executor = flags.executor;
245
- }
246
- if (flags.environment) {
247
- changes.environment = flags.environment;
248
- }
249
- if (flags['permission-mode']) {
250
- changes.permissionMode = flags['permission-mode'];
251
- }
252
- if (flags.model !== undefined) {
253
- changes.model = flags.model || null;
254
- }
255
- }
256
- // Check if any changes
257
- if (Object.keys(changes).length === 0) {
258
- this.log(styles.muted('No changes made.'));
259
- return;
260
- }
261
- // Convert null values to undefined for storage layer compatibility
262
- const updatePayload = { ...changes };
263
- for (const [key, value] of Object.entries(updatePayload)) {
264
- if (value === null) {
265
- updatePayload[key] = undefined;
266
- }
267
- }
268
- const action = await this.storage.updateAction(args.id, updatePayload);
269
- this.log(styles.success(`\nUpdated action "${styles.emphasis(action.name)}"`));
270
- if (changes.name)
271
- this.log(styles.muted(` Name: ${action.name}`));
272
- if (changes.description !== undefined)
273
- this.log(styles.muted(` Description: ${action.description || '(none)'}`));
274
- if (changes.prompt)
275
- this.log(styles.muted(` Prompt: (updated)`));
276
- if (changes.fromState !== undefined)
277
- this.log(styles.muted(` From state: ${action.fromState || '(any)'}`));
278
- if (changes.toState !== undefined)
279
- this.log(styles.muted(` To state: ${action.toState || '(none)'}`));
280
- if (changes.executor !== undefined)
281
- this.log(styles.muted(` Executor: ${action.executor || '(default)'}`));
282
- if (changes.environment !== undefined)
283
- this.log(styles.muted(` Environment: ${action.environment || '(default)'}`));
284
- if (changes.permissionMode !== undefined)
285
- this.log(styles.muted(` Permission mode: ${action.permissionMode || '(default)'}`));
286
- }
287
- }
288
- //# sourceMappingURL=update.js.map