@principles/pd-cli 1.152.12 → 1.152.13
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/package.json +13 -7
- package/CHANGELOG.md +0 -23
- package/dist/commands/__tests__/intent-flag-wiring.test.d.ts +0 -9
- package/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +0 -1
- package/dist/commands/__tests__/intent-flag-wiring.test.js +0 -237
- package/dist/commands/__tests__/intent-flag-wiring.test.js.map +0 -1
- package/dist/commands/__tests__/legacy-cleanup.test.d.ts +0 -18
- package/dist/commands/__tests__/legacy-cleanup.test.d.ts.map +0 -1
- package/dist/commands/__tests__/legacy-cleanup.test.js +0 -467
- package/dist/commands/__tests__/legacy-cleanup.test.js.map +0 -1
- package/dist/commands/__tests__/mvp-smoke.test.d.ts +0 -15
- package/dist/commands/__tests__/mvp-smoke.test.d.ts.map +0 -1
- package/dist/commands/__tests__/mvp-smoke.test.js +0 -262
- package/dist/commands/__tests__/mvp-smoke.test.js.map +0 -1
- package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.d.ts +0 -2
- package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.d.ts.map +0 -1
- package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.js +0 -60
- package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.js.map +0 -1
- package/dist/commands/__tests__/rulecode-flag-wiring.test.d.ts +0 -21
- package/dist/commands/__tests__/rulecode-flag-wiring.test.d.ts.map +0 -1
- package/dist/commands/__tests__/rulecode-flag-wiring.test.js +0 -186
- package/dist/commands/__tests__/rulecode-flag-wiring.test.js.map +0 -1
- package/dist/commands/__tests__/rulecode-handler.test.d.ts +0 -16
- package/dist/commands/__tests__/rulecode-handler.test.d.ts.map +0 -1
- package/dist/commands/__tests__/rulecode-handler.test.js +0 -285
- package/dist/commands/__tests__/rulecode-handler.test.js.map +0 -1
- package/dist/commands/__tests__/run-rulehost-flag-wiring.test.d.ts +0 -24
- package/dist/commands/__tests__/run-rulehost-flag-wiring.test.d.ts.map +0 -1
- package/dist/commands/__tests__/run-rulehost-flag-wiring.test.js +0 -232
- package/dist/commands/__tests__/run-rulehost-flag-wiring.test.js.map +0 -1
- package/dist/commands/__tests__/runtime-activation-nextaction.test.d.ts +0 -15
- package/dist/commands/__tests__/runtime-activation-nextaction.test.d.ts.map +0 -1
- package/dist/commands/__tests__/runtime-activation-nextaction.test.js +0 -73
- package/dist/commands/__tests__/runtime-activation-nextaction.test.js.map +0 -1
- package/dist/commands/__tests__/runtime-probe-config.test.d.ts +0 -20
- package/dist/commands/__tests__/runtime-probe-config.test.d.ts.map +0 -1
- package/dist/commands/__tests__/runtime-probe-config.test.js +0 -389
- package/dist/commands/__tests__/runtime-probe-config.test.js.map +0 -1
- package/dist/commands/__tests__/telemetry-flag-wiring.test.d.ts +0 -9
- package/dist/commands/__tests__/telemetry-flag-wiring.test.d.ts.map +0 -1
- package/dist/commands/__tests__/telemetry-flag-wiring.test.js +0 -76
- package/dist/commands/__tests__/telemetry-flag-wiring.test.js.map +0 -1
- package/dist/commands/__tests__/version.test.d.ts +0 -2
- package/dist/commands/__tests__/version.test.d.ts.map +0 -1
- package/dist/commands/__tests__/version.test.js +0 -238
- package/dist/commands/__tests__/version.test.js.map +0 -1
- package/dist/commands/runtime-uat.guard.test.d.ts +0 -2
- package/dist/commands/runtime-uat.guard.test.d.ts.map +0 -1
- package/dist/commands/runtime-uat.guard.test.js +0 -153
- package/dist/commands/runtime-uat.guard.test.js.map +0 -1
- package/dist/services/__tests__/cli-output.test.d.ts +0 -18
- package/dist/services/__tests__/cli-output.test.d.ts.map +0 -1
- package/dist/services/__tests__/cli-output.test.js +0 -103
- package/dist/services/__tests__/cli-output.test.js.map +0 -1
- package/dist/services/__tests__/evaluator-runner-deps.test.d.ts +0 -2
- package/dist/services/__tests__/evaluator-runner-deps.test.d.ts.map +0 -1
- package/dist/services/__tests__/evaluator-runner-deps.test.js +0 -343
- package/dist/services/__tests__/evaluator-runner-deps.test.js.map +0 -1
- package/dist/services/__tests__/rulehost-readiness.test.d.ts +0 -2
- package/dist/services/__tests__/rulehost-readiness.test.d.ts.map +0 -1
- package/dist/services/__tests__/rulehost-readiness.test.js +0 -311
- package/dist/services/__tests__/rulehost-readiness.test.js.map +0 -1
- package/dist/services/__tests__/runtime-adapter-resolver.test.d.ts +0 -18
- package/dist/services/__tests__/runtime-adapter-resolver.test.d.ts.map +0 -1
- package/dist/services/__tests__/runtime-adapter-resolver.test.js +0 -673
- package/dist/services/__tests__/runtime-adapter-resolver.test.js.map +0 -1
- package/dist/utils/production-workspace-guard.test.d.ts +0 -2
- package/dist/utils/production-workspace-guard.test.d.ts.map +0 -1
- package/dist/utils/production-workspace-guard.test.js +0 -137
- package/dist/utils/production-workspace-guard.test.js.map +0 -1
- package/scripts/llm-dogfood.ts +0 -456
- package/scripts/migrate-illegal-expected-decision.ts +0 -252
- package/src/commands/__tests__/intent-flag-wiring.test.ts +0 -282
- package/src/commands/__tests__/legacy-cleanup.test.ts +0 -602
- package/src/commands/__tests__/mvp-smoke.test.ts +0 -300
- package/src/commands/__tests__/pain-retry-maxTokens-flag.test.ts +0 -73
- package/src/commands/__tests__/rulecode-flag-wiring.test.ts +0 -237
- package/src/commands/__tests__/rulecode-handler.test.ts +0 -369
- package/src/commands/__tests__/run-rulehost-flag-wiring.test.ts +0 -292
- package/src/commands/__tests__/runtime-activation-nextaction.test.ts +0 -81
- package/src/commands/__tests__/runtime-probe-config.test.ts +0 -432
- package/src/commands/__tests__/telemetry-flag-wiring.test.ts +0 -84
- package/src/commands/__tests__/version.test.ts +0 -251
- package/src/commands/admission-gate.ts +0 -30
- package/src/commands/artifact.ts +0 -82
- package/src/commands/build-trajectory-evidence.ts +0 -298
- package/src/commands/candidate.ts +0 -1250
- package/src/commands/codex-ingest-catchup.ts +0 -114
- package/src/commands/codex-ingest-quarantine.ts +0 -127
- package/src/commands/codex-reconcile.ts +0 -84
- package/src/commands/codex-setup.ts +0 -476
- package/src/commands/codex-worker.ts +0 -185
- package/src/commands/command-helpers.ts +0 -24
- package/src/commands/config-doctor.ts +0 -193
- package/src/commands/console.ts +0 -797
- package/src/commands/context.ts +0 -72
- package/src/commands/demo-story-a.ts +0 -241
- package/src/commands/diagnose.ts +0 -756
- package/src/commands/errors-list.ts +0 -441
- package/src/commands/evolution-tasks-list.ts +0 -48
- package/src/commands/evolution-tasks-show.ts +0 -62
- package/src/commands/flow.ts +0 -60
- package/src/commands/health-codex.ts +0 -576
- package/src/commands/health.ts +0 -315
- package/src/commands/history.ts +0 -63
- package/src/commands/intent.ts +0 -457
- package/src/commands/legacy-cleanup.ts +0 -531
- package/src/commands/legacy-import.ts +0 -104
- package/src/commands/mvp-smoke.ts +0 -160
- package/src/commands/pain-evidence.ts +0 -226
- package/src/commands/pain-list.ts +0 -239
- package/src/commands/pain-record.ts +0 -612
- package/src/commands/pain-retry.ts +0 -916
- package/src/commands/principles-stats.ts +0 -700
- package/src/commands/proven-channel-baseline.ts +0 -115
- package/src/commands/quality-scorecard.ts +0 -272
- package/src/commands/remediation-output.ts +0 -66
- package/src/commands/rulecode.ts +0 -465
- package/src/commands/run.ts +0 -89
- package/src/commands/runtime-activation.ts +0 -1629
- package/src/commands/runtime-artifact-repair.ts +0 -524
- package/src/commands/runtime-canary.ts +0 -395
- package/src/commands/runtime-compatibility-scan.ts +0 -105
- package/src/commands/runtime-diagnostics-export.ts +0 -229
- package/src/commands/runtime-features.ts +0 -153
- package/src/commands/runtime-gfi-snapshot.ts +0 -135
- package/src/commands/runtime-health-snapshot.ts +0 -108
- package/src/commands/runtime-init.ts +0 -429
- package/src/commands/runtime-internalization-enqueue-successors.ts +0 -530
- package/src/commands/runtime-internalization-integrity-repair.ts +0 -79
- package/src/commands/runtime-internalization-integrity.ts +0 -107
- package/src/commands/runtime-internalization-queue.ts +0 -135
- package/src/commands/runtime-internalization-retry.ts +0 -191
- package/src/commands/runtime-internalization-run-once.ts +0 -791
- package/src/commands/runtime-internalization-run-rulehost.ts +0 -749
- package/src/commands/runtime-internalization-wake-once.ts +0 -87
- package/src/commands/runtime-pain-flood-simulation.ts +0 -121
- package/src/commands/runtime-pruning.ts +0 -438
- package/src/commands/runtime-recovery-failed-tasks.ts +0 -258
- package/src/commands/runtime-recovery.ts +0 -109
- package/src/commands/runtime-synthetic-baseline.ts +0 -70
- package/src/commands/runtime-uat.guard.test.ts +0 -175
- package/src/commands/runtime-uat.ts +0 -380
- package/src/commands/runtime.ts +0 -473
- package/src/commands/samples-list.ts +0 -39
- package/src/commands/samples-review.ts +0 -36
- package/src/commands/task.ts +0 -271
- package/src/commands/telemetry.ts +0 -349
- package/src/commands/trace.ts +0 -174
- package/src/commands/trajectory-db-unavailable.ts +0 -19
- package/src/commands/trajectory.ts +0 -64
- package/src/commands/version.ts +0 -49
- package/src/config-reader.ts +0 -122
- package/src/index.ts +0 -1276
- package/src/legacy/legacy-import.ts +0 -179
- package/src/legacy/session-history-import.ts +0 -203
- package/src/resolve-workspace.ts +0 -106
- package/src/services/__tests__/cli-output.test.ts +0 -130
- package/src/services/__tests__/evaluator-runner-deps.test.ts +0 -382
- package/src/services/__tests__/rulehost-readiness.test.ts +0 -363
- package/src/services/__tests__/runtime-adapter-resolver.test.ts +0 -793
- package/src/services/cli-output.ts +0 -95
- package/src/services/config-doctor.ts +0 -697
- package/src/services/console-launcher.ts +0 -537
- package/src/services/demo-rule-compiler.ts +0 -40
- package/src/services/demo-story-a-runner.ts +0 -471
- package/src/services/mainline-snapshot-assembler.ts +0 -579
- package/src/services/pain-flood-simulation-runner.ts +0 -462
- package/src/services/pd-config-loader.ts +0 -433
- package/src/services/proven-channel-baseline-runner.ts +0 -157
- package/src/services/quality-scorecard/data-extractor.ts +0 -150
- package/src/services/quality-scorecard/local-evaluator.ts +0 -142
- package/src/services/quality-scorecard/strong-model-gate.ts +0 -202
- package/src/services/resolve-runtime-from-pd-config.ts +0 -230
- package/src/services/rulehost-pipeline-runner.ts +0 -1214
- package/src/services/rulehost-readiness.ts +0 -326
- package/src/services/runtime-adapter-resolver.ts +0 -364
- package/src/services/synthetic-baseline-runner.ts +0 -400
- package/src/services/version-report.ts +0 -253
- package/src/services/workspace-tool-semantics.ts +0 -26
- package/src/utils/path-security.ts +0 -96
- package/src/utils/production-workspace-guard.test.ts +0 -157
- package/src/utils/production-workspace-guard.ts +0 -210
- package/tests/bdd/cli-contract.steps.ts +0 -346
- package/tests/bdd/principles-stats.steps.ts +0 -211
- package/tests/bdd/support/gherkin-loader.ts +0 -147
- package/tests/bdd/support/repo-root.ts +0 -62
- package/tests/bdd/support/vitest-bdd.ts +0 -179
- package/tests/commands/admission-gate-coverage.test.ts +0 -79
- package/tests/commands/build-trajectory-evidence.test.ts +0 -508
- package/tests/commands/candidate-audit-repair.test.ts +0 -421
- package/tests/commands/candidate-intake.test.ts +0 -732
- package/tests/commands/candidate-internalization-backfill.test.ts +0 -548
- package/tests/commands/candidate-internalize-lineage.test.ts +0 -628
- package/tests/commands/candidate-internalize.test.ts +0 -299
- package/tests/commands/candidate-route.test.ts +0 -329
- package/tests/commands/candidate-show.test.ts +0 -95
- package/tests/commands/cli-command-tree.test.ts +0 -144
- package/tests/commands/cli-help-snapshot.test.ts +0 -155
- package/tests/commands/cli-skill-contract.test.ts +0 -121
- package/tests/commands/codex-consent-reversibility.steps.test.ts +0 -299
- package/tests/commands/codex-ingest-quarantine.test.ts +0 -136
- package/tests/commands/codex-setup.test.ts +0 -297
- package/tests/commands/codex-worker-daemon.test.ts +0 -95
- package/tests/commands/codex-worker-registration.test.ts +0 -207
- package/tests/commands/config-doctor.test.ts +0 -336
- package/tests/commands/console-launcher-edge-cases.test.ts +0 -388
- package/tests/commands/console-open.test.ts +0 -1381
- package/tests/commands/context.test.ts +0 -114
- package/tests/commands/demo-story-a.test.ts +0 -318
- package/tests/commands/diagnose.test.ts +0 -1803
- package/tests/commands/errors-list.test.ts +0 -679
- package/tests/commands/evolution-tasks-list.test.ts +0 -41
- package/tests/commands/evolution-tasks-show.test.ts +0 -46
- package/tests/commands/health-codex.test.ts +0 -349
- package/tests/commands/health-host-wiring.test.ts +0 -76
- package/tests/commands/health-reliability.test.ts +0 -99
- package/tests/commands/health.test.ts +0 -413
- package/tests/commands/intent.test.ts +0 -321
- package/tests/commands/legacy-cleanup.test.ts +0 -148
- package/tests/commands/pain-evidence.test.ts +0 -518
- package/tests/commands/pain-list.test.ts +0 -219
- package/tests/commands/pain-record-async.test.ts +0 -335
- package/tests/commands/pain-record-session-parser.test.ts +0 -228
- package/tests/commands/pain-record.test.ts +0 -851
- package/tests/commands/pain-retry.test.ts +0 -1121
- package/tests/commands/plugin-config-resolution-cutover.test.ts +0 -229
- package/tests/commands/pri-393-runtime-config-unification.test.ts +0 -443
- package/tests/commands/principles-stats-wiring.test.ts +0 -135
- package/tests/commands/principles-stats.test.ts +0 -274
- package/tests/commands/product-path-regression.test.ts +0 -86
- package/tests/commands/proven-channel-baseline.test.ts +0 -441
- package/tests/commands/rulecode.test.ts +0 -177
- package/tests/commands/run-rulehost-handler.test.ts +0 -908
- package/tests/commands/runtime-activation-approve-flag-wiring.test.ts +0 -227
- package/tests/commands/runtime-activation-deactivate-flag-wiring.test.ts +0 -167
- package/tests/commands/runtime-activation-dispatch-flag-wiring.test.ts +0 -262
- package/tests/commands/runtime-activation-governance-audit.test.ts +0 -95
- package/tests/commands/runtime-activation-list-flag-wiring.test.ts +0 -193
- package/tests/commands/runtime-activation-promote-flag-wiring.test.ts +0 -248
- package/tests/commands/runtime-activation-shadow-telemetry.test.ts +0 -130
- package/tests/commands/runtime-activation.test.ts +0 -2052
- package/tests/commands/runtime-artifact-repair-registration.test.ts +0 -74
- package/tests/commands/runtime-artifact-repair.test.ts +0 -404
- package/tests/commands/runtime-canary.test.ts +0 -430
- package/tests/commands/runtime-compatibility-scan.test.ts +0 -146
- package/tests/commands/runtime-diagnostics-export.test.ts +0 -175
- package/tests/commands/runtime-features.test.ts +0 -249
- package/tests/commands/runtime-health-snapshot.test.ts +0 -358
- package/tests/commands/runtime-init-empty-workspace.test.ts +0 -252
- package/tests/commands/runtime-init.test.ts +0 -420
- package/tests/commands/runtime-internalization-enqueue-successors.test.ts +0 -782
- package/tests/commands/runtime-internalization-integrity-repair.test.ts +0 -239
- package/tests/commands/runtime-internalization-integrity.test.ts +0 -140
- package/tests/commands/runtime-internalization-queue.test.ts +0 -380
- package/tests/commands/runtime-internalization-retry-owner-authority.test.ts +0 -431
- package/tests/commands/runtime-internalization-run-once-evaluator-parity.test.ts +0 -269
- package/tests/commands/runtime-internalization-run-once-language.test.ts +0 -303
- package/tests/commands/runtime-internalization-run-once-real-config.test.ts +0 -237
- package/tests/commands/runtime-internalization-run-once-rollout-parity.test.ts +0 -706
- package/tests/commands/runtime-internalization-run-once.test.ts +0 -1791
- package/tests/commands/runtime-internalization-wake-once.test.ts +0 -171
- package/tests/commands/runtime-internalization.test.ts +0 -53
- package/tests/commands/runtime-pain-flood-simulation.test.ts +0 -418
- package/tests/commands/runtime-pruning.test.ts +0 -694
- package/tests/commands/runtime-recovery-failed-tasks.test.ts +0 -328
- package/tests/commands/runtime-recovery.test.ts +0 -120
- package/tests/commands/runtime-synthetic-baseline.test.ts +0 -249
- package/tests/commands/runtime-uat.test.ts +0 -397
- package/tests/commands/runtime.test.ts +0 -392
- package/tests/commands/samples-list.test.ts +0 -43
- package/tests/commands/samples-review.test.ts +0 -41
- package/tests/commands/task.test.ts +0 -153
- package/tests/commands/telemetry.test.ts +0 -190
- package/tests/commands/trace.test.ts +0 -316
- package/tests/config-reader.test.ts +0 -143
- package/tests/e2e/candidate-intake-e2e.test.ts +0 -338
- package/tests/e2e/cli-full-flow.test.ts +0 -233
- package/tests/e2e/cross-package-acceptance.test.ts +0 -635
- package/tests/helpers/pd-cli-path.ts +0 -5
- package/tests/pd-cli-smoke.test.ts +0 -13
- package/tests/resolve-workspace.test.ts +0 -196
- package/tests/services/config-doctor-signal-health.test.ts +0 -109
- package/tests/services/console-launcher.test.ts +0 -114
- package/tests/services/demo-rule-compiler.test.ts +0 -242
- package/tests/services/mainline-snapshot-assembler.test.ts +0 -572
- package/tests/services/pd-config-loader.test.ts +0 -505
- package/tests/services/proven-channel-baseline-runner.test.ts +0 -30
- package/tests/services/quality-scorecard/strong-model-gate.test.ts +0 -133
- package/tests/services/resolve-runtime-from-pd-config.test.ts +0 -485
- package/tests/services/rulehost-pipeline-e2e.test.ts +0 -538
- package/tests/services/rulehost-pipeline-runner.test.ts +0 -1242
- package/tests/services/workspace-tool-semantics.test.ts +0 -76
- package/tests/utils/path-security.test.ts +0 -180
- package/tsconfig.json +0 -26
- package/vitest.config.ts +0 -10
package/src/commands/context.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* pd context build — Assemble diagnostician context payload for a task.
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* pd context build <taskId>
|
|
6
|
-
*/
|
|
7
|
-
import {
|
|
8
|
-
SqliteConnection,
|
|
9
|
-
SqliteTaskStore,
|
|
10
|
-
SqliteRunStore,
|
|
11
|
-
SqliteHistoryQuery,
|
|
12
|
-
SqliteContextAssembler,
|
|
13
|
-
SqliteTrajectoryLocator,
|
|
14
|
-
SqliteSourceTraceLocator,
|
|
15
|
-
} from '@principles/core';
|
|
16
|
-
import { resolveWorkspaceDir } from '../resolve-workspace.js';
|
|
17
|
-
|
|
18
|
-
interface ContextBuildOptions {
|
|
19
|
-
json?: boolean;
|
|
20
|
-
workspace?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export async function handleContextBuild(taskId: string, opts: ContextBuildOptions): Promise<void> {
|
|
24
|
-
const workspaceDir = resolveWorkspaceDir(opts.workspace);
|
|
25
|
-
const connection = new SqliteConnection(workspaceDir);
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
const taskStore = new SqliteTaskStore(connection);
|
|
29
|
-
const runStore = new SqliteRunStore(connection);
|
|
30
|
-
const historyQuery = new SqliteHistoryQuery(connection);
|
|
31
|
-
const trajectoryLocator = new SqliteTrajectoryLocator(connection);
|
|
32
|
-
const sourceTraceLocator = new SqliteSourceTraceLocator(taskStore, trajectoryLocator);
|
|
33
|
-
const assembler = new SqliteContextAssembler(taskStore, historyQuery, runStore, { sourceTraceLocator });
|
|
34
|
-
|
|
35
|
-
const payload = await assembler.assemble(taskId);
|
|
36
|
-
|
|
37
|
-
if (opts.json) {
|
|
38
|
-
console.log(JSON.stringify(payload, null, 2));
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
console.log(`\nContext for ${taskId}:\n`);
|
|
43
|
-
console.log(` contextId: ${payload.contextId}`);
|
|
44
|
-
console.log(` contextHash: ${payload.contextHash.substring(0, 16)}...`);
|
|
45
|
-
console.log(` workspaceDir: ${payload.workspaceDir}`);
|
|
46
|
-
console.log(` sourceRefs: ${payload.sourceRefs.join(', ')}`);
|
|
47
|
-
console.log(` entries: ${payload.conversationWindow.length}`);
|
|
48
|
-
|
|
49
|
-
if (payload.ambiguityNotes && payload.ambiguityNotes.length > 0) {
|
|
50
|
-
console.log(` ambiguityNotes:`);
|
|
51
|
-
for (const note of payload.ambiguityNotes) {
|
|
52
|
-
console.log(` - ${note}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const target = payload.diagnosisTarget;
|
|
57
|
-
const targetFields = Object.entries(target).filter(([, v]) => v !== undefined);
|
|
58
|
-
if (targetFields.length > 0) {
|
|
59
|
-
console.log(` diagnosisTarget:`);
|
|
60
|
-
for (const [key, value] of targetFields) {
|
|
61
|
-
console.log(` ${key}: ${value}`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
console.log('');
|
|
65
|
-
} catch (error) {
|
|
66
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
67
|
-
console.error(`Error: ${message}`);
|
|
68
|
-
process.exit(1);
|
|
69
|
-
} finally {
|
|
70
|
-
connection.close();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
import * as os from 'os';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
import { runStoryADemo } from '../services/demo-story-a-runner.js';
|
|
5
|
-
import type { MvpChannel } from '@principles/core/runtime-v2';
|
|
6
|
-
|
|
7
|
-
interface DemoStoryAOptions {
|
|
8
|
-
workspace?: string;
|
|
9
|
-
json?: boolean;
|
|
10
|
-
channels?: string;
|
|
11
|
-
/** Developer override for the demo-isolation guard (default false). */
|
|
12
|
-
allowDemoWriteToExistingWorkspace?: boolean;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Demo isolation guard (2026-08-19): a demo run writes task/artifact/approval/
|
|
17
|
-
* activation rows into its target workspace. Refuse by default when the target
|
|
18
|
-
* already contains real PD state so demo data can never masquerade as
|
|
19
|
-
* owner-generated history. Detection = any marker of initialized PD state.
|
|
20
|
-
*/
|
|
21
|
-
function workspaceHasPdState(workspaceDir: string): boolean {
|
|
22
|
-
return fs.existsSync(path.join(workspaceDir, '.pd', 'state.db'))
|
|
23
|
-
|| fs.existsSync(path.join(workspaceDir, '.pd', 'config.yaml'))
|
|
24
|
-
|| fs.existsSync(path.join(workspaceDir, '.principles', 'PROFILE.json'));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function formatStage(stage: { name: string; status: string; reason?: string; evidenceRef?: string }): string {
|
|
28
|
-
const icon = stage.status === 'passed' ? '✓' : stage.status === 'degraded' ? '⚠' : '✗';
|
|
29
|
-
let line = ` ${icon} ${stage.name}: ${stage.status}`;
|
|
30
|
-
if (stage.evidenceRef) line += ` (ref: ${stage.evidenceRef})`;
|
|
31
|
-
if (stage.reason) line += `\n reason: ${stage.reason}`;
|
|
32
|
-
return line;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function formatChannelOutcome(ch: { channel: string; status: string; failureReason?: string; evidenceSource: string }): string {
|
|
36
|
-
const icon = ch.status === 'passed' ? '✓' : ch.status === 'degraded' ? '⚠' : '✗';
|
|
37
|
-
const lines: string[] = [];
|
|
38
|
-
lines.push(` ${icon} ${ch.channel}: ${ch.status}`);
|
|
39
|
-
lines.push(` source: ${ch.evidenceSource}`);
|
|
40
|
-
if (ch.failureReason) {
|
|
41
|
-
lines.push(` reason: ${ch.failureReason}`);
|
|
42
|
-
}
|
|
43
|
-
return lines.join('\n');
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function formatTextOutput(result: Record<string, unknown>): string {
|
|
47
|
-
const lines: string[] = [];
|
|
48
|
-
const status = result.status as string;
|
|
49
|
-
const icon = status === 'passed' ? '✓' : status === 'degraded' ? '⚠' : '✗';
|
|
50
|
-
|
|
51
|
-
lines.push('PD Story A\' Demo (PRI-246)');
|
|
52
|
-
lines.push(`generatedAt: ${result.generatedAt as string}`);
|
|
53
|
-
lines.push(`OVERALL: ${icon} ${status.toUpperCase()}`);
|
|
54
|
-
lines.push('');
|
|
55
|
-
|
|
56
|
-
if (result.inputValidationFailure) {
|
|
57
|
-
const ivf = result.inputValidationFailure as Record<string, unknown>;
|
|
58
|
-
lines.push('Input Validation Failure:');
|
|
59
|
-
lines.push(` reason: ${ivf.reason as string}`);
|
|
60
|
-
lines.push(` message: ${ivf.message as string}`);
|
|
61
|
-
lines.push(` nextAction: ${ivf.nextAction as string}`);
|
|
62
|
-
lines.push('');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
lines.push('Stages:');
|
|
66
|
-
for (const stage of result.stages as Record<string, unknown>[]) {
|
|
67
|
-
lines.push(formatStage(stage as { name: string; status: string; reason?: string; evidenceRef?: string }));
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
lines.push('');
|
|
71
|
-
lines.push('Channel Outcomes:');
|
|
72
|
-
for (const ch of result.channelOutcomes as Record<string, unknown>[]) {
|
|
73
|
-
lines.push(formatChannelOutcome(ch as { channel: string; status: string; failureReason?: string; evidenceSource: string }));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
lines.push('');
|
|
77
|
-
lines.push(`Runtime V2 Exclusive: ${result.isRuntimeV2Exclusive ? 'Yes' : 'No'}`);
|
|
78
|
-
|
|
79
|
-
lines.push('');
|
|
80
|
-
lines.push('--- Narrative ---');
|
|
81
|
-
lines.push(result.narrative as string);
|
|
82
|
-
|
|
83
|
-
return lines.join('\n');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export function cleanupTempWorkspace(workspaceDir: string, rmSyncImpl: (dir: string, opts: { recursive: boolean; force: boolean }) => void = fs.rmSync.bind(fs)): void {
|
|
87
|
-
try {
|
|
88
|
-
rmSyncImpl(workspaceDir, { recursive: true, force: true });
|
|
89
|
-
} catch (cleanupErr) {
|
|
90
|
-
const cleanupMsg = cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr);
|
|
91
|
-
console.error(`[pd-cli] cleanup warning: failed to remove temp workspace ${workspaceDir}: ${cleanupMsg}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
interface ParseChannelResult {
|
|
96
|
-
channels: MvpChannel[] | undefined;
|
|
97
|
-
unknowns: string[];
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function parseChannelList(raw: string | undefined): ParseChannelResult {
|
|
101
|
-
if (!raw || raw.trim().length === 0) {
|
|
102
|
-
// Empty string means user explicitly passed --channels "" → treat as empty request
|
|
103
|
-
if (raw !== undefined) return { channels: [], unknowns: [] };
|
|
104
|
-
return { channels: undefined, unknowns: [] };
|
|
105
|
-
}
|
|
106
|
-
const parts = raw.split(',').map(p => p.trim()).filter(p => p.length > 0);
|
|
107
|
-
if (parts.length === 0) return { channels: [], unknowns: [] };
|
|
108
|
-
const valid: MvpChannel[] = [];
|
|
109
|
-
const unknowns: string[] = [];
|
|
110
|
-
const mvpSet = new Set<string>(['prompt', 'code_tool_hook', 'defer_archive']);
|
|
111
|
-
for (const part of parts) {
|
|
112
|
-
if (mvpSet.has(part)) {
|
|
113
|
-
valid.push(part as MvpChannel);
|
|
114
|
-
} else {
|
|
115
|
-
unknowns.push(part);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return { channels: valid.length > 0 ? valid : undefined, unknowns };
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export async function handleDemoStoryA(opts: DemoStoryAOptions): Promise<void> {
|
|
122
|
-
const workspaceDir = opts.workspace
|
|
123
|
-
? path.resolve(opts.workspace)
|
|
124
|
-
: fs.mkdtempSync(path.join(os.tmpdir(), 'pd-story-a-'));
|
|
125
|
-
|
|
126
|
-
// Demo isolation (cli-5: failure must not mutate): refuse BEFORE creating
|
|
127
|
-
// the RuntimeStateManager or writing anything when the target workspace
|
|
128
|
-
// already carries PD state and the developer override was not passed.
|
|
129
|
-
if (opts.workspace && !opts.allowDemoWriteToExistingWorkspace && workspaceHasPdState(workspaceDir)) {
|
|
130
|
-
const errorResult = {
|
|
131
|
-
status: 'refused' as const,
|
|
132
|
-
generatedAt: new Date().toISOString(),
|
|
133
|
-
narrative: 'Refused: demo would write into an existing PD workspace.',
|
|
134
|
-
storyDescription: 'Demo isolation guard',
|
|
135
|
-
stages: [],
|
|
136
|
-
channelOutcomes: [],
|
|
137
|
-
isRuntimeV2Exclusive: true,
|
|
138
|
-
refusal: {
|
|
139
|
-
reason: 'demo_write_to_existing_workspace',
|
|
140
|
-
message: 'This command would write demo artifacts into an existing PD workspace.',
|
|
141
|
-
nextAction: 'Use a temporary workspace (omit --workspace), or pass --allow-demo-write-to-existing-workspace to explicitly opt in (developer only).',
|
|
142
|
-
targetWorkspace: workspaceDir,
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
if (opts.json) {
|
|
146
|
-
console.log(JSON.stringify(errorResult, null, 2));
|
|
147
|
-
} else {
|
|
148
|
-
console.error('Refused: this command would write demo artifacts into an existing PD workspace.');
|
|
149
|
-
console.error(`Target: ${workspaceDir}`);
|
|
150
|
-
console.error('Use a temporary workspace (omit --workspace), or pass --allow-demo-write-to-existing-workspace to explicitly opt in (developer only).');
|
|
151
|
-
}
|
|
152
|
-
process.exitCode = 1;
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const parsed = parseChannelList(opts.channels);
|
|
157
|
-
|
|
158
|
-
// Fail loud on empty channels before workspace creation (ERR-029)
|
|
159
|
-
if (parsed.channels?.length === 0) {
|
|
160
|
-
const errorResult = {
|
|
161
|
-
status: 'failed' as const,
|
|
162
|
-
generatedAt: new Date().toISOString(),
|
|
163
|
-
narrative: 'No channels specified.',
|
|
164
|
-
storyDescription: 'Input validation failed',
|
|
165
|
-
stages: [],
|
|
166
|
-
channelOutcomes: [],
|
|
167
|
-
isRuntimeV2Exclusive: true,
|
|
168
|
-
inputValidationFailure: {
|
|
169
|
-
reason: 'empty_channels',
|
|
170
|
-
message: 'No channels specified. At least one MVP channel required.',
|
|
171
|
-
nextAction: 'Provide channels: prompt, code_tool_hook, defer_archive',
|
|
172
|
-
},
|
|
173
|
-
};
|
|
174
|
-
if (opts.json) {
|
|
175
|
-
console.log(JSON.stringify(errorResult, null, 2));
|
|
176
|
-
} else {
|
|
177
|
-
console.error('Error: No channels specified. At least one MVP channel required.');
|
|
178
|
-
console.error('Valid channels: prompt, code_tool_hook, defer_archive');
|
|
179
|
-
}
|
|
180
|
-
process.exitCode = 1;
|
|
181
|
-
if (!opts.workspace) {
|
|
182
|
-
cleanupTempWorkspace(workspaceDir);
|
|
183
|
-
}
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Fail loud on unknown channels (ERR-029)
|
|
188
|
-
if (parsed.unknowns.length > 0) {
|
|
189
|
-
const errorResult = {
|
|
190
|
-
status: 'failed' as const,
|
|
191
|
-
generatedAt: new Date().toISOString(),
|
|
192
|
-
narrative: `Unknown channels: ${parsed.unknowns.join(', ')}`,
|
|
193
|
-
storyDescription: 'Input validation failed',
|
|
194
|
-
stages: [],
|
|
195
|
-
channelOutcomes: [],
|
|
196
|
-
isRuntimeV2Exclusive: true,
|
|
197
|
-
inputValidationFailure: {
|
|
198
|
-
reason: 'unknown_channels',
|
|
199
|
-
message: `Unknown channels: ${parsed.unknowns.join(', ')}. Valid: prompt, code_tool_hook, defer_archive`,
|
|
200
|
-
nextAction: 'Use only valid MVP channels: prompt, code_tool_hook, defer_archive',
|
|
201
|
-
unknownChannels: parsed.unknowns,
|
|
202
|
-
},
|
|
203
|
-
};
|
|
204
|
-
if (opts.json) {
|
|
205
|
-
console.log(JSON.stringify(errorResult, null, 2));
|
|
206
|
-
} else {
|
|
207
|
-
console.error(`Error: Unknown channels: ${parsed.unknowns.join(', ')}`);
|
|
208
|
-
console.error('Valid channels: prompt, code_tool_hook, defer_archive');
|
|
209
|
-
}
|
|
210
|
-
process.exitCode = 1;
|
|
211
|
-
if (!opts.workspace) {
|
|
212
|
-
cleanupTempWorkspace(workspaceDir);
|
|
213
|
-
}
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
try {
|
|
218
|
-
const result = await runStoryADemo({
|
|
219
|
-
channels: parsed.channels,
|
|
220
|
-
workspaceDir,
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
if (opts.json) {
|
|
224
|
-
console.log(JSON.stringify(result, null, 2));
|
|
225
|
-
} else {
|
|
226
|
-
console.log(formatTextOutput(result as unknown as Record<string, unknown>));
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (result.status !== 'passed') {
|
|
230
|
-
if (!opts.json) {
|
|
231
|
-
console.error('');
|
|
232
|
-
console.error(`FAIL: status=${result.status}`);
|
|
233
|
-
}
|
|
234
|
-
process.exitCode = 1;
|
|
235
|
-
}
|
|
236
|
-
} finally {
|
|
237
|
-
if (!opts.workspace) {
|
|
238
|
-
cleanupTempWorkspace(workspaceDir);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|