@proletariat/cli 0.3.84 → 0.3.86
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/bin/validate-better-sqlite3.cjs +11 -0
- package/dist/commands/session/cleanup.d.ts +2 -0
- package/dist/commands/session/cleanup.js +89 -42
- package/dist/commands/session/cleanup.js.map +1 -1
- package/dist/commands/session/index.js +4 -0
- package/dist/commands/session/index.js.map +1 -1
- package/dist/commands/session/report.d.ts +27 -0
- package/dist/commands/session/report.js +217 -0
- package/dist/commands/session/report.js.map +1 -0
- package/dist/commands/telemetry/disable.js +1 -1
- package/dist/commands/telemetry/disable.js.map +1 -1
- package/dist/commands/telemetry/enable.js +1 -1
- package/dist/commands/telemetry/enable.js.map +1 -1
- package/dist/commands/ticket/create.d.ts +3 -2
- package/dist/commands/ticket/create.js +6 -69
- package/dist/commands/ticket/create.js.map +1 -1
- package/dist/commands/work/groom.d.ts +15 -0
- package/dist/commands/work/groom.js +77 -0
- package/dist/commands/work/groom.js.map +1 -0
- package/dist/commands/work/implement.d.ts +16 -0
- package/dist/commands/work/implement.js +85 -0
- package/dist/commands/work/implement.js.map +1 -0
- package/dist/commands/work/index.js +38 -34
- package/dist/commands/work/index.js.map +1 -1
- package/dist/commands/work/peek.d.ts +18 -0
- package/dist/commands/work/peek.js +78 -0
- package/dist/commands/work/peek.js.map +1 -0
- package/dist/commands/work/poke.d.ts +19 -0
- package/dist/commands/work/poke.js +79 -0
- package/dist/commands/work/poke.js.map +1 -0
- package/dist/commands/work/review.d.ts +1 -31
- package/dist/commands/work/review.js +44 -368
- package/dist/commands/work/review.js.map +1 -1
- package/dist/commands/work/spawn.js +1 -1
- package/dist/commands/work/spawn.js.map +1 -1
- package/dist/commands/work/start.d.ts +2 -0
- package/dist/commands/work/start.js +24 -19
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/stop.d.ts +14 -0
- package/dist/commands/work/stop.js +103 -0
- package/dist/commands/work/stop.js.map +1 -0
- package/dist/hooks/init.d.ts +1 -1
- package/dist/hooks/init.js +1 -1
- package/dist/lib/execution/config.d.ts +17 -1
- package/dist/lib/execution/config.js +38 -0
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/devcontainer.js +0 -1
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners/docker-management.js +20 -0
- package/dist/lib/execution/runners/docker-management.js.map +1 -1
- package/dist/lib/execution/runners/prompt-builder.js +1 -2
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/runners/shared.js +3 -1
- package/dist/lib/execution/runners/shared.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +3 -1
- package/dist/lib/execution/spawner.js +10 -4
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +2 -1
- package/dist/lib/execution/storage.js +4 -3
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/types.d.ts +9 -0
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/mcp/tools/tmux.d.ts +1 -1
- package/dist/lib/mcp/tools/tmux.js +1 -1
- package/dist/lib/mcp/tools/work.js +4 -35
- package/dist/lib/mcp/tools/work.js.map +1 -1
- package/dist/lib/pmo/schema.d.ts +1 -1
- package/dist/lib/pmo/schema.js +1 -0
- package/dist/lib/pmo/schema.js.map +1 -1
- package/dist/lib/pmo/storage/base.js +59 -501
- package/dist/lib/pmo/storage/base.js.map +1 -1
- package/dist/lib/pmo/utils.d.ts +22 -0
- package/dist/lib/pmo/utils.js +31 -0
- package/dist/lib/pmo/utils.js.map +1 -1
- package/dist/lib/telemetry/analytics.d.ts +10 -13
- package/dist/lib/telemetry/analytics.js +36 -126
- package/dist/lib/telemetry/analytics.js.map +1 -1
- package/dist/lib/telemetry/feature-flags.d.ts +12 -37
- package/dist/lib/telemetry/feature-flags.js +15 -63
- package/dist/lib/telemetry/feature-flags.js.map +1 -1
- package/oclif.manifest.json +846 -583
- package/package.json +2 -3
- package/dist/commands/work/revise.d.ts +0 -20
- package/dist/commands/work/revise.js +0 -377
- 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.
|
|
4
|
+
"version": "0.3.86",
|
|
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",
|
|
@@ -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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"}
|