@principles/pd-cli 1.113.0 → 1.114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/runtime-activation.d.ts +37 -0
- package/dist/commands/runtime-activation.d.ts.map +1 -1
- package/dist/commands/runtime-activation.js +416 -2
- package/dist/commands/runtime-activation.js.map +1 -1
- package/dist/index.js +54 -1
- package/dist/index.js.map +1 -1
- package/dist/services/rulehost-pipeline-runner.d.ts +8 -0
- package/dist/services/rulehost-pipeline-runner.d.ts.map +1 -1
- package/dist/services/rulehost-pipeline-runner.js +43 -1
- package/dist/services/rulehost-pipeline-runner.js.map +1 -1
- package/package.json +1 -1
- package/scripts/llm-dogfood.ts +419 -0
- package/src/commands/runtime-activation.ts +459 -1
- package/src/index.ts +57 -1
- package/src/services/rulehost-pipeline-runner.ts +53 -0
- package/tests/commands/cli-command-tree.test.ts +14 -0
- package/tests/commands/runtime-activation.test.ts +553 -1
- package/tests/e2e/cross-package-acceptance.test.ts +549 -0
- package/tests/services/rulehost-pipeline-runner.test.ts +6 -0
|
@@ -7,5 +7,42 @@ interface ActivationDispatchOptions {
|
|
|
7
7
|
json?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare function handleRuntimeActivationDispatch(opts: ActivationDispatchOptions): Promise<void>;
|
|
10
|
+
interface ActivationDeactivateOptions {
|
|
11
|
+
workspace?: string;
|
|
12
|
+
activationId?: string;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface DeactivateResult {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
activationId: string;
|
|
18
|
+
deactivatedAt?: string;
|
|
19
|
+
reason?: string;
|
|
20
|
+
nextAction?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function handleRuntimeActivationDeactivate(opts: ActivationDeactivateOptions): Promise<void>;
|
|
23
|
+
interface ActivationListOptions {
|
|
24
|
+
workspace?: string;
|
|
25
|
+
channel?: string;
|
|
26
|
+
includeDeactivated?: boolean;
|
|
27
|
+
json?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare function handleRuntimeActivationList(opts: ActivationListOptions): Promise<void>;
|
|
30
|
+
interface ActivationEditOptions {
|
|
31
|
+
workspace?: string;
|
|
32
|
+
approvalId?: string;
|
|
33
|
+
newArtifactId?: string;
|
|
34
|
+
editReason?: string;
|
|
35
|
+
json?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface EditApprovalResult {
|
|
38
|
+
ok: boolean;
|
|
39
|
+
approvalId?: string;
|
|
40
|
+
newArtifactId?: string;
|
|
41
|
+
previousArtifactId?: string;
|
|
42
|
+
editedAt?: string;
|
|
43
|
+
reason?: string;
|
|
44
|
+
nextAction?: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function handleRuntimeActivationEdit(opts: ActivationEditOptions): Promise<void>;
|
|
10
47
|
export {};
|
|
11
48
|
//# sourceMappingURL=runtime-activation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-activation.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-activation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-activation.d.ts","sourceRoot":"","sources":["../../src/commands/runtime-activation.ts"],"names":[],"mappings":"AAiBA,UAAU,yBAAyB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAkFD,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFpG;AAID,UAAU,2BAA2B;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,iCAAiC,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ExG;AAID,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF5F;AAID,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6O5F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
|
-
import { RuntimeStateManager, ActivationDispatcher, PromptWriter, DeferArchiveWriter, SqliteActivationStateStore, SqliteApprovalQueueStore, } from '@principles/core/runtime-v2';
|
|
2
|
+
import { RuntimeStateManager, ActivationDispatcher, PromptWriter, DeferArchiveWriter, RuleHostWriter, createProductionGateDeps, SqliteActivationStateStore, SqliteApprovalQueueStore, SqlitePIArtifactStore, isArtifactRevisionOf, } from '@principles/core/runtime-v2';
|
|
3
3
|
import { resolveWorkspaceDir } from '../resolve-workspace.js';
|
|
4
4
|
function mapRolloutDecision(reviewDecision) {
|
|
5
5
|
if (!reviewDecision)
|
|
@@ -124,7 +124,16 @@ export async function handleRuntimeActivationDispatch(opts) {
|
|
|
124
124
|
};
|
|
125
125
|
const activationStateStore = new SqliteActivationStateStore(stateManager.connection);
|
|
126
126
|
const approvalQueueStore = new SqliteApprovalQueueStore(stateManager.connection);
|
|
127
|
-
|
|
127
|
+
// Wire all three MVP-Core writers, including RuleHostWriter for code_tool_hook.
|
|
128
|
+
// PRI-408: fixes P0 breakpoint where code_tool_hook channel could not activate.
|
|
129
|
+
const dispatcher = new ActivationDispatcher(artifactReadModel, activationStateStore, {
|
|
130
|
+
writers: [
|
|
131
|
+
new PromptWriter(),
|
|
132
|
+
new RuleHostWriter({ gateDeps: createProductionGateDeps() }),
|
|
133
|
+
new DeferArchiveWriter(),
|
|
134
|
+
],
|
|
135
|
+
approvalQueueStore,
|
|
136
|
+
});
|
|
128
137
|
const result = await dispatcher.dispatch({
|
|
129
138
|
artifactId: opts.artifactId,
|
|
130
139
|
channel,
|
|
@@ -147,4 +156,409 @@ export async function handleRuntimeActivationDispatch(opts) {
|
|
|
147
156
|
await stateManager.close();
|
|
148
157
|
}
|
|
149
158
|
}
|
|
159
|
+
export async function handleRuntimeActivationDeactivate(opts) {
|
|
160
|
+
if (!opts.activationId) {
|
|
161
|
+
const result = {
|
|
162
|
+
ok: false,
|
|
163
|
+
activationId: '',
|
|
164
|
+
reason: 'activation_id_required',
|
|
165
|
+
nextAction: 'Provide --activation-id <id> from `pd runtime activation list`',
|
|
166
|
+
};
|
|
167
|
+
if (opts.json) {
|
|
168
|
+
console.log(JSON.stringify(result, null, 2));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
console.error(`Error: --activation-id is required`);
|
|
172
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
173
|
+
}
|
|
174
|
+
process.exitCode = 1;
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const workspaceDir = opts.workspace ? path.resolve(opts.workspace) : resolveWorkspaceDir();
|
|
178
|
+
const stateManager = new RuntimeStateManager({ workspaceDir });
|
|
179
|
+
try {
|
|
180
|
+
await stateManager.initialize();
|
|
181
|
+
const activationStateStore = new SqliteActivationStateStore(stateManager.connection);
|
|
182
|
+
const deactivatedAt = new Date().toISOString();
|
|
183
|
+
// Idempotent deactivate: returns false if already deactivated or not found.
|
|
184
|
+
// Both cases are safe to call repeatedly (Contract E: rollback must be idempotent).
|
|
185
|
+
const success = await activationStateStore.deactivateActivation(opts.activationId, deactivatedAt);
|
|
186
|
+
const result = success
|
|
187
|
+
? { ok: true, activationId: opts.activationId, deactivatedAt }
|
|
188
|
+
: {
|
|
189
|
+
ok: false,
|
|
190
|
+
activationId: opts.activationId,
|
|
191
|
+
reason: 'not_found_or_already_deactivated',
|
|
192
|
+
nextAction: 'Check activation ID with `pd runtime activation list`, or it may already be deactivated',
|
|
193
|
+
};
|
|
194
|
+
if (opts.json) {
|
|
195
|
+
// Strict JSON mode: exactly one parseable JSON object on stdout
|
|
196
|
+
console.log(JSON.stringify(result, null, 2));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
if (success) {
|
|
200
|
+
console.log(`Deactivated: ${opts.activationId}`);
|
|
201
|
+
console.log(` deactivatedAt: ${deactivatedAt}`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
console.log(`Not deactivated: ${opts.activationId}`);
|
|
205
|
+
console.log(` reason: ${result.reason}`);
|
|
206
|
+
console.log(` nextAction: ${result.nextAction}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (!success) {
|
|
210
|
+
process.exitCode = 1;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
// P2 #5: initialize/DB exceptions must not break --json contract.
|
|
215
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
216
|
+
const result = {
|
|
217
|
+
ok: false,
|
|
218
|
+
activationId: opts.activationId,
|
|
219
|
+
reason: `initialize_failed: ${errMsg}`,
|
|
220
|
+
nextAction: 'Check workspace directory and DB integrity. Try `pd runtime diagnostics`.',
|
|
221
|
+
};
|
|
222
|
+
if (opts.json) {
|
|
223
|
+
console.log(JSON.stringify(result, null, 2));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
console.error(`Error: ${result.reason}`);
|
|
227
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
228
|
+
}
|
|
229
|
+
process.exitCode = 1;
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
await stateManager.close();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
export async function handleRuntimeActivationList(opts) {
|
|
236
|
+
// P2 #5 fix: fail loud on invalid channel instead of silently listing all.
|
|
237
|
+
const VALID_CHANNELS = new Set(['prompt', 'code_tool_hook', undefined]);
|
|
238
|
+
if (opts.channel !== undefined && !VALID_CHANNELS.has(opts.channel)) {
|
|
239
|
+
const result = {
|
|
240
|
+
ok: false,
|
|
241
|
+
reason: `invalid_channel: ${opts.channel}`,
|
|
242
|
+
nextAction: 'Use one of: prompt, code_tool_hook, or omit --channel to list all',
|
|
243
|
+
};
|
|
244
|
+
if (opts.json) {
|
|
245
|
+
console.log(JSON.stringify(result, null, 2));
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
console.error(`Error: invalid channel "${opts.channel}"`);
|
|
249
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
250
|
+
}
|
|
251
|
+
process.exitCode = 1;
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const workspaceDir = opts.workspace ? path.resolve(opts.workspace) : resolveWorkspaceDir();
|
|
255
|
+
const stateManager = new RuntimeStateManager({ workspaceDir });
|
|
256
|
+
try {
|
|
257
|
+
await stateManager.initialize();
|
|
258
|
+
const activationStateStore = new SqliteActivationStateStore(stateManager.connection);
|
|
259
|
+
// P2 #5 fix: pass includeDeactivated to the store so channel-specific queries
|
|
260
|
+
// also return deactivated records when requested. Previously the SQL hardcoded
|
|
261
|
+
// `WHERE deactivated_at IS NULL`, making --include-deactivated a no-op for
|
|
262
|
+
// channel-filtered queries.
|
|
263
|
+
let records;
|
|
264
|
+
if (opts.channel === 'prompt') {
|
|
265
|
+
records = await activationStateStore.listPromptActivations(opts.includeDeactivated ?? false);
|
|
266
|
+
}
|
|
267
|
+
else if (opts.channel === 'code_tool_hook') {
|
|
268
|
+
records = await activationStateStore.listCodeToolHookActivations(opts.includeDeactivated ?? false);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
records = await activationStateStore.listAllActivations();
|
|
272
|
+
}
|
|
273
|
+
// For listAllActivations, still apply the includeDeactivated filter at the
|
|
274
|
+
// caller level since listAllActivations() does not take the parameter.
|
|
275
|
+
const filtered = opts.includeDeactivated
|
|
276
|
+
? records
|
|
277
|
+
: records.filter(r => r.deactivatedAt === null);
|
|
278
|
+
if (opts.json) {
|
|
279
|
+
// Strict JSON mode: exactly one parseable JSON object on stdout
|
|
280
|
+
console.log(JSON.stringify({ activations: filtered }, null, 2));
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
if (filtered.length === 0) {
|
|
284
|
+
console.log('No active activations found.');
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
for (const r of filtered) {
|
|
288
|
+
const status = r.deactivatedAt ? `[DEACTIVATED ${r.deactivatedAt}]` : '[ACTIVE]';
|
|
289
|
+
console.log(`${status} ${r.activationId}`);
|
|
290
|
+
console.log(` artifactId: ${r.artifactId}`);
|
|
291
|
+
console.log(` channel: ${r.channel}`);
|
|
292
|
+
console.log(` action: ${r.action}`);
|
|
293
|
+
console.log(` targetRef: ${r.targetRef}`);
|
|
294
|
+
console.log(` activatedAt: ${r.activatedAt}`);
|
|
295
|
+
console.log('');
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
// P2 #5: initialize/DB exceptions must not break --json contract.
|
|
302
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
303
|
+
const result = {
|
|
304
|
+
ok: false,
|
|
305
|
+
reason: `initialize_failed: ${errMsg}`,
|
|
306
|
+
nextAction: 'Check workspace directory and DB integrity. Try `pd runtime diagnostics`.',
|
|
307
|
+
};
|
|
308
|
+
if (opts.json) {
|
|
309
|
+
console.log(JSON.stringify(result, null, 2));
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
console.error(`Error: ${result.reason}`);
|
|
313
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
314
|
+
}
|
|
315
|
+
process.exitCode = 1;
|
|
316
|
+
}
|
|
317
|
+
finally {
|
|
318
|
+
await stateManager.close();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
export async function handleRuntimeActivationEdit(opts) {
|
|
322
|
+
if (!opts.approvalId) {
|
|
323
|
+
const result = {
|
|
324
|
+
ok: false,
|
|
325
|
+
reason: 'approval_id_required',
|
|
326
|
+
nextAction: 'Provide --approval-id <id> from Console approvals page',
|
|
327
|
+
};
|
|
328
|
+
if (opts.json) {
|
|
329
|
+
console.log(JSON.stringify(result, null, 2));
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
console.error('Error: --approval-id is required');
|
|
333
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
334
|
+
}
|
|
335
|
+
process.exitCode = 1;
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (!opts.newArtifactId) {
|
|
339
|
+
const result = {
|
|
340
|
+
ok: false,
|
|
341
|
+
reason: 'new_artifact_id_required',
|
|
342
|
+
nextAction: 'Create a new artifact first (e.g. via pd candidate intake), then pass its ID with --new-artifact-id',
|
|
343
|
+
};
|
|
344
|
+
if (opts.json) {
|
|
345
|
+
console.log(JSON.stringify(result, null, 2));
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
console.error('Error: --new-artifact-id is required');
|
|
349
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
350
|
+
}
|
|
351
|
+
process.exitCode = 1;
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
if (!opts.editReason) {
|
|
355
|
+
const result = {
|
|
356
|
+
ok: false,
|
|
357
|
+
reason: 'edit_reason_required',
|
|
358
|
+
nextAction: 'Provide --edit-reason explaining why the artifact is being revised',
|
|
359
|
+
};
|
|
360
|
+
if (opts.json) {
|
|
361
|
+
console.log(JSON.stringify(result, null, 2));
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
console.error('Error: --edit-reason is required');
|
|
365
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
366
|
+
}
|
|
367
|
+
process.exitCode = 1;
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const workspaceDir = opts.workspace ? path.resolve(opts.workspace) : resolveWorkspaceDir();
|
|
371
|
+
const stateManager = new RuntimeStateManager({ workspaceDir });
|
|
372
|
+
try {
|
|
373
|
+
await stateManager.initialize();
|
|
374
|
+
const approvalStore = new SqliteApprovalQueueStore(stateManager.connection);
|
|
375
|
+
const artifactStore = new SqlitePIArtifactStore(stateManager.connection);
|
|
376
|
+
const now = new Date().toISOString();
|
|
377
|
+
// P1 #2: validate the new artifact before swapping the approval pointer.
|
|
378
|
+
// The new artifact must exist, be validated, and have lineage consistent
|
|
379
|
+
// with the original approval's artifact (same sourceTaskId).
|
|
380
|
+
const existingApproval = await approvalStore.getById(opts.approvalId);
|
|
381
|
+
if (!existingApproval) {
|
|
382
|
+
const result = {
|
|
383
|
+
ok: false,
|
|
384
|
+
approvalId: opts.approvalId,
|
|
385
|
+
reason: 'not_found',
|
|
386
|
+
nextAction: 'Check the approval ID on Console approvals page',
|
|
387
|
+
};
|
|
388
|
+
if (opts.json) {
|
|
389
|
+
console.log(JSON.stringify(result, null, 2));
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
console.error(`Edit refused: ${result.reason}`);
|
|
393
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
394
|
+
}
|
|
395
|
+
process.exitCode = 1;
|
|
396
|
+
await stateManager.close();
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
if (existingApproval.status !== 'pending') {
|
|
400
|
+
const result = {
|
|
401
|
+
ok: false,
|
|
402
|
+
approvalId: opts.approvalId,
|
|
403
|
+
reason: 'already_decided',
|
|
404
|
+
nextAction: `Approval is already decided (status: ${existingApproval.status}). Only pending approvals can be edited.`,
|
|
405
|
+
};
|
|
406
|
+
if (opts.json) {
|
|
407
|
+
console.log(JSON.stringify(result, null, 2));
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
console.error(`Edit refused: ${result.reason}`);
|
|
411
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
412
|
+
}
|
|
413
|
+
process.exitCode = 1;
|
|
414
|
+
await stateManager.close();
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const newArtifact = await artifactStore.getArtifactById(opts.newArtifactId);
|
|
418
|
+
if (!newArtifact) {
|
|
419
|
+
const result = {
|
|
420
|
+
ok: false,
|
|
421
|
+
approvalId: opts.approvalId,
|
|
422
|
+
reason: 'artifact_not_found',
|
|
423
|
+
nextAction: `Artifact ${opts.newArtifactId} does not exist. Create it first via pd candidate intake.`,
|
|
424
|
+
};
|
|
425
|
+
if (opts.json) {
|
|
426
|
+
console.log(JSON.stringify(result, null, 2));
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
console.error(`Edit refused: ${result.reason}`);
|
|
430
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
431
|
+
}
|
|
432
|
+
process.exitCode = 1;
|
|
433
|
+
await stateManager.close();
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (newArtifact.validationStatus !== 'validated') {
|
|
437
|
+
const result = {
|
|
438
|
+
ok: false,
|
|
439
|
+
approvalId: opts.approvalId,
|
|
440
|
+
reason: `artifact_not_validated: ${newArtifact.validationStatus}`,
|
|
441
|
+
nextAction: `Artifact ${opts.newArtifactId} has validationStatus '${newArtifact.validationStatus}'. Run the production gate to validate it first.`,
|
|
442
|
+
};
|
|
443
|
+
if (opts.json) {
|
|
444
|
+
console.log(JSON.stringify(result, null, 2));
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
console.error(`Edit refused: ${result.reason}`);
|
|
448
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
449
|
+
}
|
|
450
|
+
process.exitCode = 1;
|
|
451
|
+
await stateManager.close();
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
const originalArtifact = await artifactStore.getArtifactById(existingApproval.artifactId);
|
|
455
|
+
if (!originalArtifact || !isArtifactRevisionOf(newArtifact, originalArtifact)) {
|
|
456
|
+
const result = {
|
|
457
|
+
ok: false,
|
|
458
|
+
approvalId: opts.approvalId,
|
|
459
|
+
reason: 'artifact_lineage_mismatch',
|
|
460
|
+
nextAction: originalArtifact
|
|
461
|
+
? `Artifact ${opts.newArtifactId} must reference ${originalArtifact.artifactId} or its source principle.`
|
|
462
|
+
: `Original artifact ${existingApproval.artifactId} is missing; restore it before editing this approval.`,
|
|
463
|
+
};
|
|
464
|
+
if (opts.json) {
|
|
465
|
+
console.log(JSON.stringify(result, null, 2));
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
console.error(`Edit refused: ${result.reason}`);
|
|
469
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
470
|
+
}
|
|
471
|
+
process.exitCode = 1;
|
|
472
|
+
await stateManager.close();
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
let editResult;
|
|
476
|
+
try {
|
|
477
|
+
editResult = await approvalStore.edit({
|
|
478
|
+
approvalId: opts.approvalId,
|
|
479
|
+
editedBy: 'operator',
|
|
480
|
+
newArtifactId: opts.newArtifactId,
|
|
481
|
+
editReason: opts.editReason,
|
|
482
|
+
now,
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
catch (err) {
|
|
486
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
487
|
+
const result = {
|
|
488
|
+
ok: false,
|
|
489
|
+
approvalId: opts.approvalId,
|
|
490
|
+
reason: `edit_failed: ${errMsg}`,
|
|
491
|
+
nextAction: 'Check workspace DB integrity and that the approval + new artifact exist',
|
|
492
|
+
};
|
|
493
|
+
if (opts.json) {
|
|
494
|
+
console.log(JSON.stringify(result, null, 2));
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
console.error(`Edit failed: ${result.reason}`);
|
|
498
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
499
|
+
}
|
|
500
|
+
process.exitCode = 1;
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
if (!editResult.ok) {
|
|
504
|
+
const result = {
|
|
505
|
+
ok: false,
|
|
506
|
+
approvalId: opts.approvalId,
|
|
507
|
+
reason: editResult.error,
|
|
508
|
+
nextAction: editResult.error === 'not_found'
|
|
509
|
+
? 'Check the approval ID on Console approvals page'
|
|
510
|
+
: `Approval is already decided (status: ${editResult.status ?? 'unknown'}). Only pending approvals can be edited.`,
|
|
511
|
+
};
|
|
512
|
+
if (opts.json) {
|
|
513
|
+
console.log(JSON.stringify(result, null, 2));
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
console.error(`Edit refused: ${result.reason}`);
|
|
517
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
518
|
+
}
|
|
519
|
+
process.exitCode = 1;
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
const result = {
|
|
523
|
+
ok: true,
|
|
524
|
+
approvalId: editResult.record.approvalId,
|
|
525
|
+
newArtifactId: editResult.record.artifactId,
|
|
526
|
+
previousArtifactId: editResult.record.previousArtifactId ?? undefined,
|
|
527
|
+
editedAt: editResult.record.editedAt ?? now,
|
|
528
|
+
};
|
|
529
|
+
if (opts.json) {
|
|
530
|
+
console.log(JSON.stringify(result, null, 2));
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
console.log(`Approval edited: ${result.approvalId}`);
|
|
534
|
+
console.log(` newArtifactId: ${result.newArtifactId}`);
|
|
535
|
+
if (result.previousArtifactId) {
|
|
536
|
+
console.log(` previousArtifactId: ${result.previousArtifactId}`);
|
|
537
|
+
}
|
|
538
|
+
console.log(` editedAt: ${result.editedAt}`);
|
|
539
|
+
console.log('Next action: review the new artifact, then approve via Console or `pd runtime activation dispatch`');
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
catch (err) {
|
|
543
|
+
// P2 #5: initialize/DB exceptions must not break --json contract.
|
|
544
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
545
|
+
const result = {
|
|
546
|
+
ok: false,
|
|
547
|
+
approvalId: opts.approvalId,
|
|
548
|
+
reason: `initialize_failed: ${errMsg}`,
|
|
549
|
+
nextAction: 'Check workspace directory and DB integrity. Try `pd runtime diagnostics`.',
|
|
550
|
+
};
|
|
551
|
+
if (opts.json) {
|
|
552
|
+
console.log(JSON.stringify(result, null, 2));
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
console.error(`Error: ${result.reason}`);
|
|
556
|
+
console.error(`Next action: ${result.nextAction}`);
|
|
557
|
+
}
|
|
558
|
+
process.exitCode = 1;
|
|
559
|
+
}
|
|
560
|
+
finally {
|
|
561
|
+
await stateManager.close();
|
|
562
|
+
}
|
|
563
|
+
}
|
|
150
564
|
//# sourceMappingURL=runtime-activation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-activation.js","sourceRoot":"","sources":["../../src/commands/runtime-activation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-activation.js","sourceRoot":"","sources":["../../src/commands/runtime-activation.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,7 @@ import { handleRuntimeDiagnosticsExport } from './commands/runtime-diagnostics-e
|
|
|
46
46
|
import { handleRuntimeRecoverySweep } from './commands/runtime-recovery.js';
|
|
47
47
|
import { handleRuntimeRecoveryFailedTasks } from './commands/runtime-recovery-failed-tasks.js';
|
|
48
48
|
import { handleRuntimeActivationDispatch } from './commands/runtime-activation.js';
|
|
49
|
+
import { handleRuntimeActivationDeactivate, handleRuntimeActivationList, handleRuntimeActivationEdit } from './commands/runtime-activation.js';
|
|
49
50
|
import { handleProvenChannelBaseline } from './commands/proven-channel-baseline.js';
|
|
50
51
|
import { handleDemoStoryA } from './commands/demo-story-a.js';
|
|
51
52
|
import { handleRuntimeFeaturesStatus } from './commands/runtime-features.js';
|
|
@@ -505,7 +506,7 @@ const activationCmd = runtimeCmd
|
|
|
505
506
|
activationCmd
|
|
506
507
|
.command('dispatch')
|
|
507
508
|
.description('Dispatch an activation for a rollout-reviewed artifact')
|
|
508
|
-
.
|
|
509
|
+
.option('-a, --artifact-id <id>', 'PIArtifact ID to activate')
|
|
509
510
|
.option('-w, --workspace <path>', 'Workspace directory')
|
|
510
511
|
.option('-c, --channel <channel>', 'Activation channel (prompt|defer_archive)', 'prompt')
|
|
511
512
|
.option('--dry-run', 'Dry-run mode (default, no writes)')
|
|
@@ -521,6 +522,58 @@ activationCmd
|
|
|
521
522
|
json: opts.json,
|
|
522
523
|
});
|
|
523
524
|
});
|
|
525
|
+
// PRI-408 Contract E: Owner-initiated rollback/deactivate of an activation.
|
|
526
|
+
// Idempotent — calling twice on the same ID is safe and returns ok=false with reason.
|
|
527
|
+
activationCmd
|
|
528
|
+
.command('deactivate')
|
|
529
|
+
.description('Deactivate (rollback) an active activation — idempotent (PRI-408 Contract E)')
|
|
530
|
+
.option('-a, --activation-id <id>', 'Activation ID to deactivate')
|
|
531
|
+
.option('-w, --workspace <path>', 'Workspace directory')
|
|
532
|
+
.option('--json', 'Output raw JSON')
|
|
533
|
+
.action(async (opts) => {
|
|
534
|
+
await handleRuntimeActivationDeactivate({
|
|
535
|
+
workspace: opts.workspace,
|
|
536
|
+
activationId: opts.activationId,
|
|
537
|
+
json: opts.json,
|
|
538
|
+
});
|
|
539
|
+
});
|
|
540
|
+
// PRI-408 Contract D: Owner observability — list current activations.
|
|
541
|
+
activationCmd
|
|
542
|
+
.command('list')
|
|
543
|
+
.description('List activations (default: active only) — PRI-408 Contract D observability')
|
|
544
|
+
.option('-w, --workspace <path>', 'Workspace directory')
|
|
545
|
+
.option('-c, --channel <channel>', 'Filter by channel (prompt|code_tool_hook)')
|
|
546
|
+
.option('--include-deactivated', 'Include deactivated records in output')
|
|
547
|
+
.option('--json', 'Output raw JSON')
|
|
548
|
+
.action(async (opts) => {
|
|
549
|
+
await handleRuntimeActivationList({
|
|
550
|
+
workspace: opts.workspace,
|
|
551
|
+
channel: opts.channel,
|
|
552
|
+
includeDeactivated: opts.includeDeactivated,
|
|
553
|
+
json: opts.json,
|
|
554
|
+
});
|
|
555
|
+
});
|
|
556
|
+
// P1 #2 fix: Owner edit entry point — swap a pending approval's artifact.
|
|
557
|
+
// Required because ApprovalQueue.edit() was dead code with no CLI/OpenClaw entry.
|
|
558
|
+
// P2 #5: use .option() instead of .requiredOption() so missing-flag errors
|
|
559
|
+
// produce structured JSON output via the handler, not Commander's pre-handler exit.
|
|
560
|
+
activationCmd
|
|
561
|
+
.command('edit')
|
|
562
|
+
.description('Edit a pending approval to swap its artifact — P1 #2 owner edit entry point')
|
|
563
|
+
.option('-a, --approval-id <id>', 'Approval ID to edit (must be pending)')
|
|
564
|
+
.option('-n, --new-artifact-id <id>', 'New PIArtifact ID to swap to')
|
|
565
|
+
.option('-r, --edit-reason <text>', 'Reason for the edit')
|
|
566
|
+
.option('-w, --workspace <path>', 'Workspace directory')
|
|
567
|
+
.option('--json', 'Output raw JSON')
|
|
568
|
+
.action(async (opts) => {
|
|
569
|
+
await handleRuntimeActivationEdit({
|
|
570
|
+
workspace: opts.workspace,
|
|
571
|
+
approvalId: opts.approvalId,
|
|
572
|
+
newArtifactId: opts.newArtifactId,
|
|
573
|
+
editReason: opts.editReason,
|
|
574
|
+
json: opts.json,
|
|
575
|
+
});
|
|
576
|
+
});
|
|
524
577
|
const diagnosticsCmd = runtimeCmd
|
|
525
578
|
.command('diagnostics')
|
|
526
579
|
.description('Control plane diagnostic bundle operations');
|