@proletariat/cli 0.3.85 → 0.3.87

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 (142) hide show
  1. package/bin/validate-better-sqlite3.cjs +11 -0
  2. package/dist/commands/config/index.js +42 -0
  3. package/dist/commands/config/index.js.map +1 -1
  4. package/dist/commands/session/cleanup.d.ts +2 -0
  5. package/dist/commands/session/cleanup.js +89 -42
  6. package/dist/commands/session/cleanup.js.map +1 -1
  7. package/dist/commands/session/index.js +4 -0
  8. package/dist/commands/session/index.js.map +1 -1
  9. package/dist/commands/session/poke.d.ts +3 -7
  10. package/dist/commands/session/poke.js +5 -7
  11. package/dist/commands/session/poke.js.map +1 -1
  12. package/dist/commands/session/report.d.ts +27 -0
  13. package/dist/commands/session/report.js +217 -0
  14. package/dist/commands/session/report.js.map +1 -0
  15. package/dist/commands/telemetry/disable.js +1 -1
  16. package/dist/commands/telemetry/disable.js.map +1 -1
  17. package/dist/commands/telemetry/enable.js +1 -1
  18. package/dist/commands/telemetry/enable.js.map +1 -1
  19. package/dist/commands/ticket/cancel.js +2 -0
  20. package/dist/commands/ticket/cancel.js.map +1 -1
  21. package/dist/commands/ticket/complete.js +2 -0
  22. package/dist/commands/ticket/complete.js.map +1 -1
  23. package/dist/commands/ticket/create.d.ts +3 -2
  24. package/dist/commands/ticket/create.js +6 -69
  25. package/dist/commands/ticket/create.js.map +1 -1
  26. package/dist/commands/ticket/delete.js +2 -0
  27. package/dist/commands/ticket/delete.js.map +1 -1
  28. package/dist/commands/ticket/edit.js +5 -0
  29. package/dist/commands/ticket/edit.js.map +1 -1
  30. package/dist/commands/ticket/move.js +2 -0
  31. package/dist/commands/ticket/move.js.map +1 -1
  32. package/dist/commands/ticket/project.js +2 -0
  33. package/dist/commands/ticket/project.js.map +1 -1
  34. package/dist/commands/ticket/reassign.js +2 -0
  35. package/dist/commands/ticket/reassign.js.map +1 -1
  36. package/dist/commands/ticket/resolve.js +2 -0
  37. package/dist/commands/ticket/resolve.js.map +1 -1
  38. package/dist/commands/ticket/update.js +5 -0
  39. package/dist/commands/ticket/update.js.map +1 -1
  40. package/dist/commands/work/complete.js +2 -0
  41. package/dist/commands/work/complete.js.map +1 -1
  42. package/dist/commands/work/groom.d.ts +15 -0
  43. package/dist/commands/work/groom.js +77 -0
  44. package/dist/commands/work/groom.js.map +1 -0
  45. package/dist/commands/work/implement.d.ts +16 -0
  46. package/dist/commands/work/implement.js +85 -0
  47. package/dist/commands/work/implement.js.map +1 -0
  48. package/dist/commands/work/index.js +38 -34
  49. package/dist/commands/work/index.js.map +1 -1
  50. package/dist/commands/work/peek.d.ts +18 -0
  51. package/dist/commands/work/peek.js +82 -0
  52. package/dist/commands/work/peek.js.map +1 -0
  53. package/dist/commands/work/poke.d.ts +18 -0
  54. package/dist/commands/work/poke.js +84 -0
  55. package/dist/commands/work/poke.js.map +1 -0
  56. package/dist/commands/work/ready.js +2 -0
  57. package/dist/commands/work/ready.js.map +1 -1
  58. package/dist/commands/work/review.d.ts +1 -31
  59. package/dist/commands/work/review.js +44 -368
  60. package/dist/commands/work/review.js.map +1 -1
  61. package/dist/commands/work/spawn.js +1 -1
  62. package/dist/commands/work/spawn.js.map +1 -1
  63. package/dist/commands/work/start.d.ts +3 -0
  64. package/dist/commands/work/start.js +69 -20
  65. package/dist/commands/work/start.js.map +1 -1
  66. package/dist/commands/work/stop.d.ts +14 -0
  67. package/dist/commands/work/stop.js +108 -0
  68. package/dist/commands/work/stop.js.map +1 -0
  69. package/dist/hooks/init.d.ts +1 -1
  70. package/dist/hooks/init.js +4 -1
  71. package/dist/hooks/init.js.map +1 -1
  72. package/dist/hooks/postrun.js +3 -0
  73. package/dist/hooks/postrun.js.map +1 -1
  74. package/dist/lib/database/drizzle-schema.d.ts +1 -1
  75. package/dist/lib/database/migrations/0011_add_review_gate.d.ts +8 -0
  76. package/dist/lib/database/migrations/0011_add_review_gate.js +21 -0
  77. package/dist/lib/database/migrations/0011_add_review_gate.js.map +1 -0
  78. package/dist/lib/database/migrations/index.js +2 -0
  79. package/dist/lib/database/migrations/index.js.map +1 -1
  80. package/dist/lib/execution/config.d.ts +17 -1
  81. package/dist/lib/execution/config.js +38 -0
  82. package/dist/lib/execution/config.js.map +1 -1
  83. package/dist/lib/execution/devcontainer.js +0 -1
  84. package/dist/lib/execution/devcontainer.js.map +1 -1
  85. package/dist/lib/execution/runners/docker-management.js +20 -0
  86. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  87. package/dist/lib/execution/runners/prompt-builder.js +50 -17
  88. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  89. package/dist/lib/execution/runners/shared.js +3 -1
  90. package/dist/lib/execution/runners/shared.js.map +1 -1
  91. package/dist/lib/execution/spawner.d.ts +3 -1
  92. package/dist/lib/execution/spawner.js +10 -4
  93. package/dist/lib/execution/spawner.js.map +1 -1
  94. package/dist/lib/execution/storage.d.ts +4 -2
  95. package/dist/lib/execution/storage.js +10 -8
  96. package/dist/lib/execution/storage.js.map +1 -1
  97. package/dist/lib/execution/types.d.ts +10 -0
  98. package/dist/lib/execution/types.js.map +1 -1
  99. package/dist/lib/mcp/tools/action.js +34 -0
  100. package/dist/lib/mcp/tools/action.js.map +1 -1
  101. package/dist/lib/mcp/tools/tmux.d.ts +1 -1
  102. package/dist/lib/mcp/tools/tmux.js +1 -1
  103. package/dist/lib/mcp/tools/work.js +4 -35
  104. package/dist/lib/mcp/tools/work.js.map +1 -1
  105. package/dist/lib/pmo/schema.d.ts +2 -2
  106. package/dist/lib/pmo/schema.js +2 -0
  107. package/dist/lib/pmo/schema.js.map +1 -1
  108. package/dist/lib/pmo/storage/actions.js +9 -3
  109. package/dist/lib/pmo/storage/actions.js.map +1 -1
  110. package/dist/lib/pmo/storage/base.js +59 -501
  111. package/dist/lib/pmo/storage/base.js.map +1 -1
  112. package/dist/lib/pmo/storage/index.d.ts +1 -0
  113. package/dist/lib/pmo/storage/index.js +3 -0
  114. package/dist/lib/pmo/storage/index.js.map +1 -1
  115. package/dist/lib/pmo/storage/tickets.d.ts +7 -0
  116. package/dist/lib/pmo/storage/tickets.js +33 -2
  117. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  118. package/dist/lib/pmo/storage/types.d.ts +1 -0
  119. package/dist/lib/pmo/types.d.ts +10 -0
  120. package/dist/lib/pmo/types.js.map +1 -1
  121. package/dist/lib/pmo/utils.d.ts +60 -0
  122. package/dist/lib/pmo/utils.js +92 -0
  123. package/dist/lib/pmo/utils.js.map +1 -1
  124. package/dist/lib/providers/event-emitting-provider.js +13 -2
  125. package/dist/lib/providers/event-emitting-provider.js.map +1 -1
  126. package/dist/lib/telemetry/analytics.d.ts +57 -13
  127. package/dist/lib/telemetry/analytics.js +87 -125
  128. package/dist/lib/telemetry/analytics.js.map +1 -1
  129. package/dist/lib/telemetry/feature-flags.d.ts +12 -37
  130. package/dist/lib/telemetry/feature-flags.js +15 -63
  131. package/dist/lib/telemetry/feature-flags.js.map +1 -1
  132. package/dist/lib/telemetry/telemetry-bridge.d.ts +35 -0
  133. package/dist/lib/telemetry/telemetry-bridge.js +139 -0
  134. package/dist/lib/telemetry/telemetry-bridge.js.map +1 -0
  135. package/dist/lib/work-lifecycle/post-execution.d.ts +5 -1
  136. package/dist/lib/work-lifecycle/post-execution.js +30 -18
  137. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  138. package/oclif.manifest.json +923 -661
  139. package/package.json +10 -11
  140. package/dist/commands/work/revise.d.ts +0 -20
  141. package/dist/commands/work/revise.js +0 -377
  142. package/dist/commands/work/revise.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@proletariat/cli",
3
3
  "description": "Agent orchestration platform for AI labor - Spin up workers on demand for multi-agent development",
4
- "version": "0.3.85",
4
+ "version": "0.3.87",
5
5
  "author": "Chris McDermut",
6
6
  "mcpName": "io.github.chrismcdermut/proletariat-cli",
7
7
  "publishConfig": {
@@ -20,7 +20,6 @@
20
20
  "@oclif/plugin-help": "^6",
21
21
  "@oclif/plugin-plugins": "^5",
22
22
  "@sentry/node": "^10.42.0",
23
- "statsig-node": "^6.5.1",
24
23
  "better-sqlite3": "^12.6.2",
25
24
  "chalk": "^4.1.2",
26
25
  "chokidar": "^5.0.0",
@@ -113,7 +112,7 @@
113
112
  "directory": "apps/cli"
114
113
  },
115
114
  "scripts": {
116
- "postinstall": "(npm rebuild better-sqlite3 || true) && node ./bin/validate-better-sqlite3.cjs",
115
+ "postinstall": "(npm rebuild better-sqlite3 || npm rebuild better-sqlite3 || true) && node ./bin/validate-better-sqlite3.cjs",
117
116
  "build": "shx rm -rf dist && tsc -b",
118
117
  "rebuild": "pnpm install && pnpm build",
119
118
  "clean": "shx rm -rf dist",
@@ -125,15 +124,15 @@
125
124
  "postpack": "shx rm -f oclif.manifest.json",
126
125
  "posttest": "pnpm run lint",
127
126
  "prepack": "oclif manifest && oclif readme",
128
- "test": "mocha --forbid-only \"test/**/*.test.ts\"",
129
- "test:unit": "mocha --forbid-only \"test/unit/**/*.test.ts\"",
130
- "test:e2e": "mocha --forbid-only \"test/e2e/**/*.test.ts\"",
131
- "test:smoke": "mocha --forbid-only --grep @smoke \"test/**/*.test.ts\"",
132
- "test:smoke:unit": "mocha --forbid-only --grep @smoke \"test/unit/**/*.test.ts\"",
133
- "test:smoke:e2e": "mocha --forbid-only --grep @smoke \"test/e2e/**/*.test.ts\"",
134
- "test:e2e:pmo": "mocha --forbid-only \"test/e2e/pmo-*.test.ts\"",
127
+ "test": "mocha --forbid-only --parallel \"test/**/*.test.ts\"",
128
+ "test:unit": "mocha --forbid-only --parallel \"test/unit/**/*.test.ts\"",
129
+ "test:e2e": "mocha --forbid-only --parallel \"test/e2e/**/*.test.ts\"",
130
+ "test:smoke": "mocha --forbid-only --parallel --grep @smoke \"test/**/*.test.ts\"",
131
+ "test:smoke:unit": "mocha --forbid-only --parallel --grep @smoke \"test/unit/**/*.test.ts\"",
132
+ "test:smoke:e2e": "mocha --forbid-only --parallel --grep @smoke \"test/e2e/**/*.test.ts\"",
133
+ "test:e2e:pmo": "mocha --forbid-only --parallel \"test/e2e/pmo-*.test.ts\"",
135
134
  "test:e2e:interactive": "mocha --forbid-only --timeout 120000 \"test/e2e/interactive-menu.test.ts\"",
136
- "test:commands": "mocha --forbid-only \"test/commands/**/*.test.ts\"",
135
+ "test:commands": "mocha --forbid-only --parallel \"test/commands/**/*.test.ts\"",
137
136
  "version": "oclif readme && git add README.md",
138
137
  "publish:npm": "pnpm build && pnpm publish --access public --no-git-checks && git tag v$(node -p \"require('./package.json').version\") && git push origin v$(node -p \"require('./package.json').version\") && gh release create v$(node -p \"require('./package.json').version\") --generate-notes --title \"v$(node -p \"require('./package.json').version\")\"",
139
138
  "roadmap:generate": "node ./bin/run.js roadmap generate --all",
@@ -1,20 +0,0 @@
1
- import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class WorkRevise extends PMOCommand {
3
- static description: string;
4
- static examples: string[];
5
- static args: {
6
- ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- mode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- executor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- 'run-on-host': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- session: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
- };
18
- execute(): Promise<void>;
19
- private getCurrentBranch;
20
- }
@@ -1,377 +0,0 @@
1
- import { Args, Flags } from '@oclif/core';
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import { execSync } from 'node:child_process';
5
- import Database from 'better-sqlite3';
6
- import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
7
- import { getWorkColumnSetting, findColumnByName } from '../../lib/pmo/utils.js';
8
- import { styles } from '../../lib/styles.js';
9
- import { getWorkspaceInfo, resolveAgentDir } from '../../lib/agents/commands.js';
10
- import { DEFAULT_EXECUTION_CONFIG, } from '../../lib/execution/types.js';
11
- import { runExecution, isDockerRunning, isDevcontainerCliInstalled, getExecutorDisplayName } from '../../lib/execution/runners.js';
12
- import { ExecutionStorage } from '../../lib/execution/storage.js';
13
- import { loadExecutionConfig, getTerminalApp, getShell, hasTerminalPreference, hasShellPreference } from '../../lib/execution/config.js';
14
- import { hasDevcontainerConfig } from '../../lib/execution/devcontainer.js';
15
- import { detectRepoWorktrees, resolveWorktreePath } from '../../lib/execution/context.js';
16
- import { isGHInstalled, isGHAuthenticated, getPRFeedback, hasPendingFeedback, formatPRFeedbackForPrompt, } from '../../lib/pr/index.js';
17
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
18
- export default class WorkRevise extends PMOCommand {
19
- static description = 'Address PR feedback on a ticket (fetches reviews/comments and spawns agent)';
20
- static examples = [
21
- '<%= config.bin %> <%= command.id %> TKT-001',
22
- '<%= config.bin %> <%= command.id %> # Interactive mode',
23
- '<%= config.bin %> <%= command.id %> --json # Output choices as JSON',
24
- ];
25
- static args = {
26
- ticketId: Args.string({
27
- description: 'Ticket ID - prompts with dropdown if not provided',
28
- required: false,
29
- }),
30
- };
31
- static flags = {
32
- ...pmoBaseFlags,
33
- mode: Flags.string({
34
- char: 'd',
35
- description: 'Runtime mode',
36
- options: ['foreground', 'background', 'tmux', 'terminal', 'devcontainer'],
37
- }),
38
- executor: Flags.string({
39
- char: 'e',
40
- description: 'Override executor',
41
- options: ['claude-code', 'codex', 'custom'],
42
- }),
43
- force: Flags.boolean({
44
- char: 'f',
45
- description: 'Start even if no pending feedback',
46
- default: false,
47
- }),
48
- 'run-on-host': Flags.boolean({
49
- description: 'Run on host even if devcontainer exists (bypasses sandbox)',
50
- default: false,
51
- }),
52
- session: Flags.string({
53
- char: 's',
54
- description: 'Session manager inside container (tmux runs agent in tmux inside container)',
55
- options: ['tmux', 'direct'],
56
- default: 'tmux',
57
- }),
58
- };
59
- async execute() {
60
- const { args, flags } = await this.parse(WorkRevise);
61
- const projectId = flags.project;
62
- // Check if JSON output mode is active
63
- const jsonMode = shouldOutputJson(flags);
64
- // Helper to handle errors in JSON mode
65
- const handleError = (code, message) => {
66
- if (jsonMode) {
67
- outputErrorAsJson(code, message, createMetadata('work revise', flags));
68
- return;
69
- }
70
- this.error(message);
71
- };
72
- // Check gh CLI is available
73
- if (!isGHInstalled() || !isGHAuthenticated()) {
74
- return handleError('GH_NOT_AVAILABLE', 'GitHub CLI (gh) is required for fetching PR feedback.\nRun: prlt gh login');
75
- }
76
- // Early Docker check
77
- if (!flags['run-on-host'] && !isDockerRunning()) {
78
- return handleError('DOCKER_NOT_RUNNING', 'Docker is not running.\n\n' +
79
- 'Docker is required for devcontainer execution (recommended for agent isolation).\n' +
80
- 'Please start Docker Desktop and try again.\n\n' +
81
- 'Alternatively, use --run-on-host to run directly on your machine (bypasses sandbox).');
82
- }
83
- // Early devcontainer CLI check
84
- if (!flags['run-on-host'] && !isDevcontainerCliInstalled()) {
85
- return handleError('DEVCONTAINER_CLI_NOT_INSTALLED', 'devcontainer CLI is not installed.\n\n' +
86
- 'Install with: npm install -g @devcontainers/cli\n\n' +
87
- 'Alternatively, use --run-on-host to run directly on your machine (bypasses sandbox).');
88
- }
89
- // Get workspace info
90
- let workspaceInfo;
91
- try {
92
- workspaceInfo = getWorkspaceInfo();
93
- }
94
- catch {
95
- this.error('Not in a workspace. Run "prlt new" first.');
96
- }
97
- // Open database
98
- const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
99
- const db = new Database(dbPath);
100
- const executionStorage = new ExecutionStorage(db);
101
- try {
102
- // Get ticketId - prompt with in-review tickets
103
- let ticketId = args.ticketId;
104
- if (!ticketId) {
105
- const allTickets = await this.storage.listTickets(projectId);
106
- // Filter to done tickets that have a PR (may need revision based on PR feedback)
107
- const reviewTickets = allTickets.filter(t => {
108
- const isDone = t.status === 'done' || (t.statusName && t.statusName.toLowerCase().includes('done'));
109
- const hasPR = t.metadata?.pr_url;
110
- return isDone && hasPR;
111
- });
112
- if (reviewTickets.length === 0) {
113
- db.close();
114
- this.log(styles.info('No done tickets with PRs found.'));
115
- this.log(styles.muted('Use "prlt work start" for new work.'));
116
- return;
117
- }
118
- const jsonModeConfig = jsonMode ? { flags: flags, commandName: 'work revise' } : null;
119
- const { selectedTicketId } = await this.prompt([
120
- {
121
- type: 'list',
122
- name: 'selectedTicketId',
123
- message: 'Select ticket to revise:',
124
- choices: reviewTickets.map((t) => ({
125
- name: `${t.id} - ${t.title}`,
126
- value: t.id,
127
- command: `prlt work revise ${t.id} --json`,
128
- })),
129
- },
130
- ], jsonModeConfig);
131
- ticketId = selectedTicketId;
132
- }
133
- // Get ticket
134
- const ticket = await this.storage.getTicket(ticketId);
135
- if (!ticket) {
136
- db.close();
137
- this.error(`Ticket "${ticketId}" not found.`);
138
- }
139
- // Get PR URL from ticket metadata
140
- const prUrl = ticket.metadata?.pr_url;
141
- if (!prUrl) {
142
- db.close();
143
- this.error(`Ticket "${ticketId}" has no PR linked.\nCreate a PR first with "prlt pr create ${ticketId}".`);
144
- }
145
- // Fetch PR feedback
146
- this.log(styles.muted('Fetching PR feedback...'));
147
- const feedback = getPRFeedback(prUrl);
148
- if (!feedback) {
149
- db.close();
150
- this.error(`Could not fetch PR feedback for ${prUrl}`);
151
- }
152
- // Check if there's actually feedback to address
153
- if (!hasPendingFeedback(feedback) && !flags.force) {
154
- db.close();
155
- this.log(styles.success('No pending feedback to address!'));
156
- this.log(styles.muted(`PR: ${feedback.prUrl}`));
157
- this.log(styles.muted('Use --force to start revision anyway.'));
158
- return;
159
- }
160
- // Format feedback for prompt
161
- const formattedFeedback = formatPRFeedbackForPrompt(feedback);
162
- // Get assignee
163
- const agentName = ticket.assignee;
164
- if (!agentName) {
165
- db.close();
166
- this.error(`Ticket "${ticketId}" has no assignee. Assign an agent first.`);
167
- }
168
- // Check if agent exists
169
- const agentInfo = workspaceInfo.agents.find((a) => a.name === agentName);
170
- if (!agentInfo) {
171
- db.close();
172
- this.error(`Agent "${agentName}" not found in workspace.\n` +
173
- `Add agent first with "prlt agent add ${agentName}"`);
174
- }
175
- // Check for running execution
176
- const runningExecution = executionStorage.getRunningExecution(ticketId);
177
- if (runningExecution) {
178
- db.close();
179
- this.error(`Ticket "${ticketId}" already has work in progress: ${runningExecution.id}\n` +
180
- `Stop it first with "prlt work stop ${runningExecution.id}"`);
181
- }
182
- // Find worktree path (handles staff and temp agents)
183
- const agentDir = resolveAgentDir(workspaceInfo, agentName);
184
- if (!fs.existsSync(agentDir)) {
185
- db.close();
186
- this.error(`Agent directory not found at ${agentDir}.`);
187
- }
188
- // Detect repository worktrees within agent directory
189
- const repoWorktrees = detectRepoWorktrees(agentDir);
190
- const worktreePath = resolveWorktreePath(agentDir, repoWorktrees);
191
- if (repoWorktrees.length > 1) {
192
- this.log(styles.muted(` Repos: ${repoWorktrees.join(', ')}`));
193
- }
194
- else if (repoWorktrees.length === 0) {
195
- this.log(styles.muted(` No git worktree found, using current directory`));
196
- }
197
- // Get branch from ticket metadata or current branch
198
- const branch = ticket.metadata?.pr_branch || this.getCurrentBranch(worktreePath);
199
- // Build execution context
200
- const hqPath = path.dirname(this.pmoPath);
201
- const context = {
202
- ticketId: ticket.id,
203
- ticketTitle: ticket.title,
204
- ticketDescription: ticket.description,
205
- ticketSubtasks: ticket.subtasks?.map(s => ({ title: s.title, done: s.done })),
206
- ticketPriority: ticket.priority,
207
- ticketCategory: ticket.category,
208
- agentName,
209
- agentDir,
210
- worktreePath,
211
- branch,
212
- hqPath,
213
- pmoPath: this.pmoPath,
214
- repoWorktrees,
215
- // Revision-specific context
216
- isRevision: true,
217
- prFeedback: formattedFeedback,
218
- };
219
- // Determine execution environment and display mode
220
- const hasDevcontainer = hasDevcontainerConfig(agentDir);
221
- let environment = 'host';
222
- let displayMode = 'terminal';
223
- let permissionMode = 'danger';
224
- const reviseJsonModeConfig = jsonMode ? { flags: flags, commandName: 'work revise' } : null;
225
- if (hasDevcontainer && !flags['run-on-host']) {
226
- environment = 'devcontainer';
227
- const { selectedDisplay } = await this.prompt([
228
- {
229
- type: 'list',
230
- name: 'selectedDisplay',
231
- message: 'How should the agent output be displayed?',
232
- choices: [
233
- { name: 'terminal - New terminal window', value: 'terminal', command: `prlt work revise ${ticketId} --mode terminal --json` },
234
- { name: 'background - Runs detached, reattach with: prlt session attach', value: 'background', command: `prlt work revise ${ticketId} --mode background --json` },
235
- ],
236
- default: 'terminal',
237
- },
238
- ], reviseJsonModeConfig);
239
- displayMode = selectedDisplay;
240
- }
241
- else if (flags.mode) {
242
- // Host environment: terminal/background are display modes
243
- displayMode = flags.mode;
244
- }
245
- const executor = flags.executor || DEFAULT_EXECUTION_CONFIG.defaultExecutor;
246
- const executorName = getExecutorDisplayName(executor);
247
- // Permission mode
248
- const { permissionMode: selectedPermMode } = await this.prompt([
249
- {
250
- type: 'list',
251
- name: 'permissionMode',
252
- message: `Permission mode for ${executorName}:`,
253
- choices: [
254
- { name: '⚠️ danger - Skip permission checks (faster for revisions)', value: 'danger', command: `prlt work revise ${ticketId} --json` },
255
- { name: '🔒 safe - Requires approval for dangerous operations', value: 'safe', command: `prlt work revise ${ticketId} --json` },
256
- ],
257
- default: 'danger',
258
- },
259
- ], reviseJsonModeConfig);
260
- permissionMode = selectedPermMode;
261
- // Show execution info
262
- this.log('');
263
- this.log(styles.header(`Revising: ${ticket.id}: ${ticket.title}`));
264
- this.log(styles.muted(` Agent: ${agentName}`));
265
- this.log(styles.muted(` PR: ${feedback.prUrl}`));
266
- this.log(styles.muted(` Reviews: ${feedback.reviews.length}`));
267
- this.log(styles.muted(` Comments: ${feedback.comments.length}`));
268
- this.log(styles.muted(` Environment: ${environment}`));
269
- this.log('');
270
- // Checkout branch in worktree(s)
271
- this.log(styles.muted('Checking out branch...'));
272
- const gitRepos = repoWorktrees.length > 0
273
- ? repoWorktrees.map(r => path.join(agentDir, r))
274
- : [worktreePath];
275
- for (const repoPath of gitRepos) {
276
- const repoName = path.basename(repoPath);
277
- try {
278
- execSync(`git checkout ${branch}`, {
279
- cwd: repoPath,
280
- stdio: 'pipe',
281
- });
282
- this.log(styles.muted(` ${repoName}: checked out ${branch}`));
283
- }
284
- catch {
285
- this.warn(`Could not checkout ${branch} in ${repoName}`);
286
- }
287
- }
288
- // Create execution record
289
- const execution = executionStorage.createExecution({
290
- ticketId: ticket.id,
291
- agentName,
292
- executor,
293
- environment,
294
- displayMode,
295
- permissionMode,
296
- branch,
297
- });
298
- this.log(styles.muted(` Work ID: ${execution.id}`));
299
- this.log('');
300
- // Move ticket back to In Progress column
301
- const inProgressColumnName = getWorkColumnSetting(db, 'in_progress');
302
- const board = ticket.projectId ? await this.storage.getProjectBoard(ticket.projectId) : null;
303
- const columnNames = board ? board.columns.map(col => col.name) : [];
304
- const inProgressColumn = findColumnByName(columnNames, inProgressColumnName);
305
- if (inProgressColumn && ticket.statusName !== inProgressColumn) {
306
- await this.storage.moveTicket(ticket.projectId, ticket.id, inProgressColumn);
307
- this.log(styles.muted(` Moved to: ${inProgressColumn}`));
308
- }
309
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
310
- // Load execution config
311
- const executionConfig = loadExecutionConfig(db);
312
- // Configure terminal if needed (for terminal display mode)
313
- if (displayMode === 'terminal') {
314
- const needsTerminal = !hasTerminalPreference(db);
315
- const needsShell = !hasShellPreference(db);
316
- let terminalApp;
317
- let shell;
318
- if (needsTerminal || needsShell) {
319
- terminalApp = await getTerminalApp(db);
320
- shell = await getShell(db);
321
- }
322
- else {
323
- terminalApp = await getTerminalApp(db);
324
- shell = await getShell(db);
325
- }
326
- executionConfig.terminal.app = terminalApp;
327
- executionConfig.shell = shell;
328
- }
329
- executionConfig.outputMode = 'interactive';
330
- executionConfig.permissionMode = permissionMode;
331
- // Run execution
332
- this.log(styles.muted('Starting agent to address feedback...'));
333
- const sessionManager = (flags.session || 'tmux');
334
- const result = await runExecution(environment, context, executor, executionConfig, {
335
- displayMode,
336
- sessionManager: environment === 'devcontainer' ? sessionManager : undefined,
337
- });
338
- if (result.success) {
339
- executionStorage.updateStatus(execution.id, 'running');
340
- executionStorage.updateProcessInfo(execution.id, {
341
- pid: result.pid,
342
- containerId: result.containerId,
343
- sessionId: result.sessionId,
344
- logPath: result.logPath,
345
- });
346
- this.log('');
347
- this.log(styles.success(`Revision started (${execution.id})`));
348
- this.log('');
349
- this.log(styles.muted('Commands:'));
350
- this.log(styles.muted(` prlt work status View work status`));
351
- this.log(styles.muted(` prlt work stop ${execution.id} Stop work`));
352
- }
353
- else {
354
- executionStorage.updateStatus(execution.id, 'failed');
355
- this.error(`Failed to start revision: ${result.error}`);
356
- }
357
- db.close();
358
- }
359
- catch (error) {
360
- db.close();
361
- throw error;
362
- }
363
- }
364
- getCurrentBranch(cwd) {
365
- try {
366
- return execSync('git rev-parse --abbrev-ref HEAD', {
367
- cwd,
368
- encoding: 'utf-8',
369
- stdio: ['pipe', 'pipe', 'pipe'],
370
- }).trim();
371
- }
372
- catch {
373
- return 'main';
374
- }
375
- }
376
- }
377
- //# sourceMappingURL=revise.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"revise.js","sourceRoot":"","sources":["../../../src/commands/work/revise.ts"],"names":[],"mappings":"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"}