@lumenflow/cli 5.2.2 → 5.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/approval-request.js +137 -6
- package/dist/approval-request.js.map +1 -1
- package/dist/approval-review.js +147 -8
- package/dist/approval-review.js.map +1 -1
- package/dist/file-delete.js +8 -1
- package/dist/file-delete.js.map +1 -1
- package/dist/file-edit.js +8 -1
- package/dist/file-edit.js.map +1 -1
- package/dist/file-read.js +3 -0
- package/dist/file-read.js.map +1 -1
- package/dist/file-write.js +8 -1
- package/dist/file-write.js.map +1 -1
- package/dist/git-branch.js +3 -0
- package/dist/git-branch.js.map +1 -1
- package/dist/git-diff.js +3 -0
- package/dist/git-diff.js.map +1 -1
- package/dist/git-log.js +3 -0
- package/dist/git-log.js.map +1 -1
- package/dist/git-status.js +3 -0
- package/dist/git-status.js.map +1 -1
- package/dist/hooks/generators/enforce-worktree.js +60 -2
- package/dist/hooks/generators/enforce-worktree.js.map +1 -1
- package/dist/init-safety-scripts.js +8 -1
- package/dist/init-safety-scripts.js.map +1 -1
- package/dist/init-scaffolding.js +17 -8
- package/dist/init-scaffolding.js.map +1 -1
- package/dist/lumenflow-upgrade.js +19 -10
- package/dist/lumenflow-upgrade.js.map +1 -1
- package/dist/merge-block.js +95 -31
- package/dist/merge-block.js.map +1 -1
- package/dist/release.js +9 -2
- package/dist/release.js.map +1 -1
- package/dist/wrapper-banner.js +64 -0
- package/dist/wrapper-banner.js.map +1 -0
- package/dist/wu-prune.js +152 -3
- package/dist/wu-prune.js.map +1 -1
- package/dist/wu-spawn-prompt-builders.js +50 -2
- package/dist/wu-spawn-prompt-builders.js.map +1 -1
- package/dist/wu-spawn.js +1 -1
- package/dist/wu-spawn.js.map +1 -1
- package/package.json +11 -11
- package/packs/agent-runtime/package.json +1 -1
- package/packs/sidekick/package.json +1 -1
- package/packs/software-delivery/package.json +1 -1
package/dist/approval-request.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Copyright (c) 2026 Hellmai Ltd
|
|
3
3
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import { createHttpControlPlaneSyncPort, parseWorkspaceControlPlaneConfig, } from '@lumenflow/control-plane-sdk';
|
|
@@ -12,6 +12,13 @@ const LOG_PREFIX = '[approval:request]';
|
|
|
12
12
|
const WORKSPACE_PATH = CONFIG_FILES.WORKSPACE_CONFIG;
|
|
13
13
|
const DEFAULT_REQUESTER_TYPE = 'agent';
|
|
14
14
|
const REQUESTER_TYPE_VALUES = new Set(['agent', 'user']);
|
|
15
|
+
/**
|
|
16
|
+
* WU-2874: Approval type constant for worker-agent human-escalation handoff.
|
|
17
|
+
* Workers emit this instead of prose-dumping wu:escalate/wu:done commands.
|
|
18
|
+
*/
|
|
19
|
+
export const HUMAN_ESCALATION_APPROVAL_TYPE = 'human-escalation';
|
|
20
|
+
/** WU-2874: Local sidecar directory for structured escalation context. */
|
|
21
|
+
export const ESCALATION_SIDECAR_DIR = join('.lumenflow', 'state', 'approvals');
|
|
15
22
|
function asRecord(value) {
|
|
16
23
|
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
17
24
|
throw new Error('Expected a JSON object payload');
|
|
@@ -32,13 +39,20 @@ function parseOptions(argv = process.argv) {
|
|
|
32
39
|
.name('approval-request')
|
|
33
40
|
.description('Request an approval from the configured control-plane')
|
|
34
41
|
.requiredOption('--type <type>', 'Approval type (for example: wu_assignment)')
|
|
35
|
-
.
|
|
42
|
+
.option('--subject <json>', 'JSON object describing the approval subject')
|
|
36
43
|
.option('--context <json>', 'Optional JSON object with additional context')
|
|
37
44
|
.option('--requester-id <id>', 'Requester identifier')
|
|
38
45
|
.option('--requester-type <type>', 'Requester type: agent or user', DEFAULT_REQUESTER_TYPE)
|
|
39
46
|
.option('--expires-at <iso>', 'Optional expiry timestamp (ISO-8601)')
|
|
40
47
|
.option('--workspace-id <id>', 'Override workspace_id from workspace.yaml')
|
|
41
48
|
.option('--json', 'Output JSON response', false)
|
|
49
|
+
// WU-2874: Structured flags for --type human-escalation
|
|
50
|
+
.option('--wu <id>', 'WU id (human-escalation: required)')
|
|
51
|
+
.option('--triggers <csv>', 'Comma-separated escalation_triggers that fired (human-escalation)')
|
|
52
|
+
.option('--summary <text>', 'Summary of worker changes (human-escalation: required)')
|
|
53
|
+
.option('--skip-gates-reason <text>', 'If approval should chain --skip-gates, the reason')
|
|
54
|
+
.option('--fix-wu <id>', 'Paired fix-WU id when skip-gates-reason is set')
|
|
55
|
+
.option('--resolver-command <cmd>', 'Exact wu:done command the approver will run on approve (override)')
|
|
42
56
|
.exitOverride();
|
|
43
57
|
try {
|
|
44
58
|
program.parse(argv);
|
|
@@ -65,8 +79,84 @@ function parseOptions(argv = process.argv) {
|
|
|
65
79
|
expiresAt: parsed.expiresAt?.trim(),
|
|
66
80
|
workspaceId: parsed.workspaceId?.trim(),
|
|
67
81
|
json: parsed.json ?? false,
|
|
82
|
+
wu: parsed.wu?.trim(),
|
|
83
|
+
triggers: parsed.triggers,
|
|
84
|
+
summary: parsed.summary,
|
|
85
|
+
skipGatesReason: parsed.skipGatesReason,
|
|
86
|
+
fixWu: parsed.fixWu?.trim(),
|
|
87
|
+
resolverCommand: parsed.resolverCommand,
|
|
68
88
|
};
|
|
69
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* WU-2874: Build the default resolver command a reviewer would chain on approve.
|
|
92
|
+
* Includes skip-gates fields when present so the reviewer doesn't have to recompose.
|
|
93
|
+
*/
|
|
94
|
+
export function buildDefaultResolverCommand(wu, skipGatesReason, fixWu) {
|
|
95
|
+
const parts = ['pnpm', 'wu:done', '--id', wu];
|
|
96
|
+
if (skipGatesReason) {
|
|
97
|
+
parts.push('--skip-gates', '--reason', JSON.stringify(skipGatesReason));
|
|
98
|
+
if (fixWu)
|
|
99
|
+
parts.push('--fix-wu', fixWu);
|
|
100
|
+
}
|
|
101
|
+
return parts.join(' ');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* WU-2874: Validate + assemble structured subject/context from human-escalation flags.
|
|
105
|
+
* Keeps the original free-form --subject/--context path untouched for other types.
|
|
106
|
+
*/
|
|
107
|
+
export function buildHumanEscalationPayload(options) {
|
|
108
|
+
if (!options.wu) {
|
|
109
|
+
throw new Error('--wu is required when --type human-escalation');
|
|
110
|
+
}
|
|
111
|
+
if (!options.summary) {
|
|
112
|
+
throw new Error('--summary is required when --type human-escalation');
|
|
113
|
+
}
|
|
114
|
+
const triggers = (options.triggers ?? '')
|
|
115
|
+
.split(',')
|
|
116
|
+
.map((t) => t.trim())
|
|
117
|
+
.filter((t) => t.length > 0);
|
|
118
|
+
const resolverCommand = options.resolverCommand ??
|
|
119
|
+
buildDefaultResolverCommand(options.wu, options.skipGatesReason, options.fixWu);
|
|
120
|
+
const payload = {
|
|
121
|
+
wu: options.wu,
|
|
122
|
+
triggers,
|
|
123
|
+
summary: options.summary,
|
|
124
|
+
resolverCommand,
|
|
125
|
+
};
|
|
126
|
+
if (options.skipGatesReason)
|
|
127
|
+
payload.skipGatesReason = options.skipGatesReason;
|
|
128
|
+
if (options.fixWu)
|
|
129
|
+
payload.fixWu = options.fixWu;
|
|
130
|
+
return payload;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* WU-2874: Write sidecar file so approval:review --approve can chain the
|
|
134
|
+
* resolver without a list/fetch roundtrip. Idempotent — overwrites on re-run.
|
|
135
|
+
*/
|
|
136
|
+
export function writeEscalationSidecar(approvalId, payload, rootDir = process.cwd()) {
|
|
137
|
+
const dir = join(rootDir, ESCALATION_SIDECAR_DIR);
|
|
138
|
+
if (!existsSync(dir)) {
|
|
139
|
+
mkdirSync(dir, { recursive: true });
|
|
140
|
+
}
|
|
141
|
+
const path = join(dir, `${approvalId}.json`);
|
|
142
|
+
writeFileSync(path, JSON.stringify(payload, null, 2) + '\n', 'utf8');
|
|
143
|
+
return path;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* WU-2874: Read sidecar written by writeEscalationSidecar. Returns undefined
|
|
147
|
+
* when missing (e.g. approval was not a human-escalation type).
|
|
148
|
+
*/
|
|
149
|
+
export function readEscalationSidecar(approvalId, rootDir = process.cwd()) {
|
|
150
|
+
const path = join(rootDir, ESCALATION_SIDECAR_DIR, `${approvalId}.json`);
|
|
151
|
+
if (!existsSync(path))
|
|
152
|
+
return undefined;
|
|
153
|
+
const raw = readFileSync(path, 'utf8');
|
|
154
|
+
return JSON.parse(raw);
|
|
155
|
+
}
|
|
156
|
+
/** WU-2874: Return the absolute sidecar path for a given approval id. */
|
|
157
|
+
export function getEscalationSidecarPath(approvalId, rootDir = process.cwd()) {
|
|
158
|
+
return join(rootDir, ESCALATION_SIDECAR_DIR, `${approvalId}.json`);
|
|
159
|
+
}
|
|
70
160
|
function resolveApprovalContext(workspaceRoot, environment, workspaceIdOverride) {
|
|
71
161
|
const workspaceFilePath = join(workspaceRoot, WORKSPACE_PATH);
|
|
72
162
|
if (!existsSync(workspaceFilePath)) {
|
|
@@ -89,8 +179,37 @@ function formatResultLine(result) {
|
|
|
89
179
|
return `${LOG_PREFIX} Created ${result.approval_id} (${result.status}) for type ${result.type}`;
|
|
90
180
|
}
|
|
91
181
|
export async function runApprovalRequest(options, input = {}) {
|
|
92
|
-
|
|
93
|
-
|
|
182
|
+
// WU-2874: human-escalation synthesises subject+context from structured flags
|
|
183
|
+
// so the worker does not have to hand-craft JSON. The existing free-form
|
|
184
|
+
// API (--subject/--context) remains untouched for every other type.
|
|
185
|
+
let subject;
|
|
186
|
+
let context;
|
|
187
|
+
let escalationPayload;
|
|
188
|
+
if (options.type === HUMAN_ESCALATION_APPROVAL_TYPE) {
|
|
189
|
+
escalationPayload = buildHumanEscalationPayload(options);
|
|
190
|
+
subject = { wu: escalationPayload.wu };
|
|
191
|
+
context = {
|
|
192
|
+
triggers: escalationPayload.triggers,
|
|
193
|
+
summary: escalationPayload.summary,
|
|
194
|
+
resolver_command: escalationPayload.resolverCommand,
|
|
195
|
+
...(escalationPayload.skipGatesReason
|
|
196
|
+
? { skip_gates_reason: escalationPayload.skipGatesReason }
|
|
197
|
+
: {}),
|
|
198
|
+
...(escalationPayload.fixWu ? { fix_wu: escalationPayload.fixWu } : {}),
|
|
199
|
+
};
|
|
200
|
+
// Free-form --context from the caller is merged on top so operators can
|
|
201
|
+
// add trace metadata without losing the structured fields.
|
|
202
|
+
if (options.context) {
|
|
203
|
+
context = { ...context, ...parseJsonRecord(options.context, '--context') };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
if (!options.subject) {
|
|
208
|
+
throw new Error('--subject is required (unless --type human-escalation)');
|
|
209
|
+
}
|
|
210
|
+
subject = parseJsonRecord(options.subject, '--subject');
|
|
211
|
+
context = options.context ? parseJsonRecord(options.context, '--context') : undefined;
|
|
212
|
+
}
|
|
94
213
|
const { workspaceId, syncPort } = resolveApprovalContext(input.workspaceRoot ?? process.cwd(), input.environment ?? process.env, options.workspaceId);
|
|
95
214
|
if (!syncPort.requestApproval) {
|
|
96
215
|
throw new Error('Control-plane adapter does not support requestApproval');
|
|
@@ -104,16 +223,28 @@ export async function runApprovalRequest(options, input = {}) {
|
|
|
104
223
|
...(options.expiresAt ? { expires_at: options.expiresAt } : {}),
|
|
105
224
|
...(context ? { context } : {}),
|
|
106
225
|
};
|
|
107
|
-
|
|
226
|
+
const record = await syncPort.requestApproval(payload);
|
|
227
|
+
// WU-2874: write sidecar after the control-plane acknowledges so the
|
|
228
|
+
// reviewer's approval:review --approve path can chain the resolver locally
|
|
229
|
+
// without a lookup. Sidecar-write is side-effect only; we never auto-run
|
|
230
|
+
// wu:escalate/wu:done on the worker's behalf (Acceptance criterion: no
|
|
231
|
+
// auto-run on creation).
|
|
232
|
+
if (escalationPayload) {
|
|
233
|
+
writeEscalationSidecar(record.approval_id, escalationPayload, input.workspaceRoot);
|
|
234
|
+
}
|
|
235
|
+
return record;
|
|
108
236
|
}
|
|
109
237
|
export async function main(argv = process.argv) {
|
|
110
238
|
const options = parseOptions(argv);
|
|
111
|
-
const result =
|
|
239
|
+
const result = await runApprovalRequest(options);
|
|
112
240
|
if (options.json) {
|
|
113
241
|
console.log(JSON.stringify(result, null, 2));
|
|
114
242
|
return;
|
|
115
243
|
}
|
|
116
244
|
console.log(formatResultLine(result));
|
|
245
|
+
if (options.type === HUMAN_ESCALATION_APPROVAL_TYPE) {
|
|
246
|
+
console.log(`${LOG_PREFIX} Reviewer resolves via: pnpm approval:review --approve ${result.approval_id}`);
|
|
247
|
+
}
|
|
117
248
|
}
|
|
118
249
|
if (import.meta.main) {
|
|
119
250
|
void runCLI(main);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-request.js","sourceRoot":"","sources":["../src/approval-request.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AAEzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"approval-request.js","sourceRoot":"","sources":["../src/approval-request.ts"],"names":[],"mappings":"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"}
|
package/dist/approval-review.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Copyright (c) 2026 Hellmai Ltd
|
|
3
3
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
4
|
-
import {
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { existsSync, readFileSync, unlinkSync } from 'node:fs';
|
|
5
6
|
import { join } from 'node:path';
|
|
6
7
|
import { Command } from 'commander';
|
|
7
8
|
import { createHttpControlPlaneSyncPort, parseWorkspaceControlPlaneConfig, } from '@lumenflow/control-plane-sdk';
|
|
8
9
|
import { CONFIG_FILES } from '@lumenflow/core/wu-constants';
|
|
10
|
+
import { getGitForCwd } from '@lumenflow/core/git-adapter';
|
|
9
11
|
import { parseYAML } from '@lumenflow/core/wu-yaml';
|
|
10
12
|
import { runCLI } from './cli-entry-point.js';
|
|
13
|
+
import { HUMAN_ESCALATION_APPROVAL_TYPE, getEscalationSidecarPath, readEscalationSidecar, } from './approval-request.js';
|
|
11
14
|
const LOG_PREFIX = '[approval:review]';
|
|
12
15
|
const WORKSPACE_PATH = CONFIG_FILES.WORKSPACE_CONFIG;
|
|
13
16
|
const DEFAULT_REVIEWER_TYPE = 'user';
|
|
@@ -17,13 +20,18 @@ function parseOptions(argv = process.argv) {
|
|
|
17
20
|
const program = new Command()
|
|
18
21
|
.name('approval-review')
|
|
19
22
|
.description('Resolve a pending approval in the configured control-plane')
|
|
20
|
-
|
|
21
|
-
.
|
|
23
|
+
// WU-2874: `--id` accepted as option, positional, or via --approve/--deny <id>
|
|
24
|
+
.option('--id <approvalId>', 'Approval identifier')
|
|
25
|
+
.option('--decision <decision>', 'Decision: approved, rejected, or expired')
|
|
26
|
+
.option('--approve [approvalId]', 'Convenience for --decision approved')
|
|
27
|
+
.option('--deny [approvalId]', 'Convenience for --decision rejected')
|
|
22
28
|
.option('--reason <reason>', 'Optional decision reason')
|
|
23
29
|
.option('--reviewer-id <id>', 'Reviewer identifier')
|
|
24
30
|
.option('--reviewer-type <type>', 'Reviewer type: agent or user', DEFAULT_REVIEWER_TYPE)
|
|
31
|
+
.option('--reviewer <email>', 'Reviewer email (used as --resolver for human-escalation chains); defaults to git user.email')
|
|
25
32
|
.option('--workspace-id <id>', 'Override workspace_id from workspace.yaml')
|
|
26
33
|
.option('--json', 'Output JSON response', false)
|
|
34
|
+
.argument('[approvalId]', 'Approval identifier (positional alternative to --id)')
|
|
27
35
|
.exitOverride();
|
|
28
36
|
try {
|
|
29
37
|
program.parse(argv);
|
|
@@ -37,20 +45,42 @@ function parseOptions(argv = process.argv) {
|
|
|
37
45
|
throw error;
|
|
38
46
|
}
|
|
39
47
|
const parsed = program.opts();
|
|
40
|
-
const
|
|
48
|
+
const positional = program.args[0];
|
|
49
|
+
// WU-2874: derive approval id from --id | --approve <id> | --deny <id> | positional
|
|
50
|
+
const approvalIdRaw = parsed.id ??
|
|
51
|
+
(typeof parsed.approve === 'string' ? parsed.approve : undefined) ??
|
|
52
|
+
(typeof parsed.deny === 'string' ? parsed.deny : undefined) ??
|
|
53
|
+
positional;
|
|
54
|
+
if (!approvalIdRaw) {
|
|
55
|
+
throw new Error('Missing approval id. Pass --id <approvalId> or --approve <approvalId>.');
|
|
56
|
+
}
|
|
57
|
+
// WU-2874: derive decision from --decision or the convenience flags.
|
|
58
|
+
let decisionRaw = parsed.decision;
|
|
59
|
+
if (!decisionRaw && parsed.approve !== undefined)
|
|
60
|
+
decisionRaw = 'approved';
|
|
61
|
+
if (!decisionRaw && parsed.deny !== undefined)
|
|
62
|
+
decisionRaw = 'rejected';
|
|
63
|
+
if (parsed.approve !== undefined && parsed.deny !== undefined) {
|
|
64
|
+
throw new Error('--approve and --deny are mutually exclusive');
|
|
65
|
+
}
|
|
66
|
+
if (!decisionRaw) {
|
|
67
|
+
throw new Error('Missing decision. Use --approve, --deny, or --decision <value>.');
|
|
68
|
+
}
|
|
69
|
+
const decision = decisionRaw.trim();
|
|
41
70
|
if (!DECISION_VALUES.has(decision)) {
|
|
42
|
-
throw new Error(`Invalid --decision: ${
|
|
71
|
+
throw new Error(`Invalid --decision: ${decisionRaw}`);
|
|
43
72
|
}
|
|
44
73
|
const reviewerTypeRaw = (parsed.reviewerType ?? DEFAULT_REVIEWER_TYPE).trim();
|
|
45
74
|
if (!REVIEWER_TYPE_VALUES.has(reviewerTypeRaw)) {
|
|
46
75
|
throw new Error(`Invalid --reviewer-type: ${reviewerTypeRaw}`);
|
|
47
76
|
}
|
|
48
77
|
return {
|
|
49
|
-
approvalId:
|
|
78
|
+
approvalId: approvalIdRaw.trim(),
|
|
50
79
|
decision,
|
|
51
80
|
reason: parsed.reason?.trim(),
|
|
52
81
|
reviewerId: parsed.reviewerId?.trim(),
|
|
53
82
|
reviewerType: reviewerTypeRaw,
|
|
83
|
+
reviewer: parsed.reviewer?.trim(),
|
|
54
84
|
workspaceId: parsed.workspaceId?.trim(),
|
|
55
85
|
json: parsed.json ?? false,
|
|
56
86
|
};
|
|
@@ -77,11 +107,118 @@ function formatResultLine(result) {
|
|
|
77
107
|
const reasonSuffix = result.decision_reason ? ` (${result.decision_reason})` : '';
|
|
78
108
|
return `${LOG_PREFIX} Updated ${result.approval_id} -> ${result.status}${reasonSuffix}`;
|
|
79
109
|
}
|
|
110
|
+
const defaultRunner = (command, args, options) => {
|
|
111
|
+
const result = spawnSync(command, args, {
|
|
112
|
+
cwd: options.cwd,
|
|
113
|
+
encoding: 'utf8',
|
|
114
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
status: result.status,
|
|
118
|
+
stdout: typeof result.stdout === 'string' ? result.stdout : undefined,
|
|
119
|
+
stderr: typeof result.stderr === 'string' ? result.stderr : undefined,
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* WU-2874: Chain wu:escalate --resolve + wu:done for an approved human-escalation.
|
|
124
|
+
*
|
|
125
|
+
* Pure-ish: accepts a runner so tests can assert call ordering without spawning
|
|
126
|
+
* real processes. Stops at the first non-zero exit and surfaces the failing step.
|
|
127
|
+
* The approval record is only marked resolved when every step returns status 0.
|
|
128
|
+
*/
|
|
129
|
+
export function runEscalationChain(input) {
|
|
130
|
+
const runner = input.runner ?? defaultRunner;
|
|
131
|
+
const cwd = input.cwd;
|
|
132
|
+
const steps = [];
|
|
133
|
+
const escalateArgs = [
|
|
134
|
+
'wu:escalate',
|
|
135
|
+
'--resolve',
|
|
136
|
+
'--id',
|
|
137
|
+
input.payload.wu,
|
|
138
|
+
'--resolver',
|
|
139
|
+
input.reviewerEmail,
|
|
140
|
+
];
|
|
141
|
+
const escalate = runner('pnpm', escalateArgs, { cwd });
|
|
142
|
+
const escalateStep = {
|
|
143
|
+
command: 'pnpm',
|
|
144
|
+
args: escalateArgs,
|
|
145
|
+
status: escalate.status,
|
|
146
|
+
};
|
|
147
|
+
steps.push(escalateStep);
|
|
148
|
+
if (escalate.status !== 0) {
|
|
149
|
+
return { steps, success: false, failedStep: escalateStep };
|
|
150
|
+
}
|
|
151
|
+
const doneArgs = ['wu:done', '--id', input.payload.wu];
|
|
152
|
+
if (input.payload.skipGatesReason) {
|
|
153
|
+
doneArgs.push('--skip-gates', '--reason', input.payload.skipGatesReason);
|
|
154
|
+
if (input.payload.fixWu) {
|
|
155
|
+
doneArgs.push('--fix-wu', input.payload.fixWu);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const done = runner('pnpm', doneArgs, { cwd });
|
|
159
|
+
const doneStep = {
|
|
160
|
+
command: 'pnpm',
|
|
161
|
+
args: doneArgs,
|
|
162
|
+
status: done.status,
|
|
163
|
+
};
|
|
164
|
+
steps.push(doneStep);
|
|
165
|
+
if (done.status !== 0) {
|
|
166
|
+
return { steps, success: false, failedStep: doneStep };
|
|
167
|
+
}
|
|
168
|
+
return { steps, success: true };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* WU-2874: Resolve the reviewer's email. Explicit --reviewer wins; otherwise
|
|
172
|
+
* fall back to git user.email so the approver identity is never the approval
|
|
173
|
+
* creator (per acceptance criteria).
|
|
174
|
+
*/
|
|
175
|
+
async function resolveReviewerEmail(override) {
|
|
176
|
+
if (override)
|
|
177
|
+
return override;
|
|
178
|
+
const email = await getGitForCwd().getConfigValue('user.email');
|
|
179
|
+
if (!email) {
|
|
180
|
+
throw new Error('Cannot determine reviewer email. Pass --reviewer <email> or configure git user.email.');
|
|
181
|
+
}
|
|
182
|
+
return email;
|
|
183
|
+
}
|
|
80
184
|
export async function runApprovalReview(options, input = {}) {
|
|
81
|
-
const
|
|
185
|
+
const rootDir = input.workspaceRoot ?? process.cwd();
|
|
186
|
+
const { workspaceId, syncPort } = resolveApprovalContext(rootDir, input.environment ?? process.env, options.workspaceId);
|
|
82
187
|
if (!syncPort.resolveApproval) {
|
|
83
188
|
throw new Error('Control-plane adapter does not support resolveApproval');
|
|
84
189
|
}
|
|
190
|
+
// WU-2874: Human-escalation approve-chain runs BEFORE marking the approval
|
|
191
|
+
// resolved. If either wu:escalate or wu:done fails, the approval stays
|
|
192
|
+
// pending so the reviewer can re-approve after fixes (replayable).
|
|
193
|
+
const sidecar = options.decision === 'approved'
|
|
194
|
+
? readEscalationSidecar(options.approvalId, rootDir)
|
|
195
|
+
: undefined;
|
|
196
|
+
if (sidecar) {
|
|
197
|
+
const reviewerEmail = await resolveReviewerEmail(options.reviewer);
|
|
198
|
+
const chainResult = runEscalationChain({
|
|
199
|
+
approvalId: options.approvalId,
|
|
200
|
+
payload: sidecar,
|
|
201
|
+
reviewerEmail,
|
|
202
|
+
runner: input.runner,
|
|
203
|
+
cwd: rootDir,
|
|
204
|
+
});
|
|
205
|
+
if (!chainResult.success) {
|
|
206
|
+
const step = chainResult.failedStep;
|
|
207
|
+
const joined = step ? `${step.command} ${step.args.join(' ')}` : 'unknown step';
|
|
208
|
+
throw new Error(`${LOG_PREFIX} Resolver chain failed at: ${joined} (exit ${step?.status ?? 'null'}). ` +
|
|
209
|
+
`Approval ${options.approvalId} left pending — fix the underlying issue and re-run ` +
|
|
210
|
+
`pnpm approval:review --approve ${options.approvalId}.`);
|
|
211
|
+
}
|
|
212
|
+
// Successful chain → remove the sidecar so re-approval is a no-op.
|
|
213
|
+
try {
|
|
214
|
+
const sidecarPath = getEscalationSidecarPath(options.approvalId, rootDir);
|
|
215
|
+
if (existsSync(sidecarPath))
|
|
216
|
+
unlinkSync(sidecarPath);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Non-fatal — resolver already succeeded.
|
|
220
|
+
}
|
|
221
|
+
}
|
|
85
222
|
const payload = {
|
|
86
223
|
workspace_id: workspaceId,
|
|
87
224
|
approval_id: options.approvalId,
|
|
@@ -92,9 +229,11 @@ export async function runApprovalReview(options, input = {}) {
|
|
|
92
229
|
};
|
|
93
230
|
return syncPort.resolveApproval(payload);
|
|
94
231
|
}
|
|
232
|
+
/** WU-2874: Exported for integration tests that assert on approval type guards. */
|
|
233
|
+
export { HUMAN_ESCALATION_APPROVAL_TYPE };
|
|
95
234
|
export async function main(argv = process.argv) {
|
|
96
235
|
const options = parseOptions(argv);
|
|
97
|
-
const result =
|
|
236
|
+
const result = await runApprovalReview(options);
|
|
98
237
|
if (options.json) {
|
|
99
238
|
console.log(JSON.stringify(result, null, 2));
|
|
100
239
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-review.js","sourceRoot":"","sources":["../src/approval-review.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AAEzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"approval-review.js","sourceRoot":"","sources":["../src/approval-review.ts"],"names":[],"mappings":"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"}
|
package/dist/file-delete.js
CHANGED
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { rm, stat, readdir } from 'node:fs/promises';
|
|
19
19
|
import { resolve, join } from 'node:path';
|
|
20
|
-
import { createError, ErrorCodes } from '@lumenflow/core';
|
|
20
|
+
import { createError, ErrorCodes, matchProtectedPath, formatProtectedPathError, rawYamlEditOverrideEnabled, } from '@lumenflow/core';
|
|
21
|
+
import { emitWrapperBannerOnce } from './wrapper-banner.js';
|
|
21
22
|
/**
|
|
22
23
|
* Default configuration for file delete operations
|
|
23
24
|
*/
|
|
@@ -108,6 +109,12 @@ export async function deleteFileWithAudit(args) {
|
|
|
108
109
|
if (!targetPath) {
|
|
109
110
|
throw createError(ErrorCodes.INVALID_ARGUMENT, 'Path is required');
|
|
110
111
|
}
|
|
112
|
+
// WU-2866: Deprecation banner + CLI-managed-path guard.
|
|
113
|
+
emitWrapperBannerOnce();
|
|
114
|
+
const protectedMatch = matchProtectedPath(args.path ?? targetPath);
|
|
115
|
+
if (protectedMatch && !rawYamlEditOverrideEnabled()) {
|
|
116
|
+
throw createError(ErrorCodes.INVALID_ARGUMENT, formatProtectedPathError('delete', args.path ?? targetPath, protectedMatch));
|
|
117
|
+
}
|
|
111
118
|
// Check if path exists
|
|
112
119
|
const pathInfo = await getPathInfo(targetPath);
|
|
113
120
|
if (!pathInfo.exists) {
|
package/dist/file-delete.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-delete.js","sourceRoot":"","sources":["../src/file-delete.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AACzC;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"file-delete.js","sourceRoot":"","sources":["../src/file-delete.ts"],"names":[],"mappings":"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"}
|
package/dist/file-edit.js
CHANGED
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
* WU-1108: INIT-003 Phase 4a - Migrate file operations
|
|
18
18
|
*/
|
|
19
19
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
20
|
-
import { createError, ErrorCodes } from '@lumenflow/core';
|
|
20
|
+
import { createError, ErrorCodes, matchProtectedPath, formatProtectedPathError, rawYamlEditOverrideEnabled, } from '@lumenflow/core';
|
|
21
21
|
import { resolve } from 'node:path';
|
|
22
|
+
import { emitWrapperBannerOnce } from './wrapper-banner.js';
|
|
22
23
|
/**
|
|
23
24
|
* Default configuration for file edit operations
|
|
24
25
|
*/
|
|
@@ -126,6 +127,12 @@ export async function editFileWithAudit(args) {
|
|
|
126
127
|
if (!oldString) {
|
|
127
128
|
throw createError(ErrorCodes.INVALID_ARGUMENT, 'old-string is required');
|
|
128
129
|
}
|
|
130
|
+
// WU-2866: Deprecation banner + CLI-managed-path guard.
|
|
131
|
+
emitWrapperBannerOnce();
|
|
132
|
+
const protectedMatch = matchProtectedPath(args.path ?? filePath);
|
|
133
|
+
if (protectedMatch && !rawYamlEditOverrideEnabled()) {
|
|
134
|
+
throw createError(ErrorCodes.INVALID_ARGUMENT, formatProtectedPathError('edit', args.path ?? filePath, protectedMatch));
|
|
135
|
+
}
|
|
129
136
|
// WU-2655: Worktree-root containment guard. See file-write.ts for full rationale.
|
|
130
137
|
if (args.worktreeRoot) {
|
|
131
138
|
const declaredRoot = resolve(args.worktreeRoot);
|
package/dist/file-edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-edit.js","sourceRoot":"","sources":["../src/file-edit.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,yCAAyC;AACzC;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"file-edit.js","sourceRoot":"","sources":["../src/file-edit.ts"],"names":[],"mappings":"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"}
|
package/dist/file-read.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import { readFile, stat } from 'node:fs/promises';
|
|
19
19
|
import { resolve } from 'node:path';
|
|
20
20
|
import { createError, ErrorCodes } from '@lumenflow/core';
|
|
21
|
+
import { emitWrapperBannerOnce } from './wrapper-banner.js';
|
|
21
22
|
/**
|
|
22
23
|
* Default configuration for file read operations
|
|
23
24
|
*/
|
|
@@ -178,6 +179,8 @@ export async function main() {
|
|
|
178
179
|
printHelp();
|
|
179
180
|
process.exit(0);
|
|
180
181
|
}
|
|
182
|
+
// WU-2866: Deprecation banner — suggests native tools for local agents.
|
|
183
|
+
emitWrapperBannerOnce();
|
|
181
184
|
if (!args.path) {
|
|
182
185
|
console.error('Error: path is required');
|
|
183
186
|
printHelp();
|