@principles/pd-cli 1.152.12 → 1.152.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/dist/commands/candidate.d.ts.map +1 -1
  2. package/dist/commands/candidate.js +34 -7
  3. package/dist/commands/candidate.js.map +1 -1
  4. package/dist/commands/diagnose.d.ts.map +1 -1
  5. package/dist/commands/diagnose.js +23 -7
  6. package/dist/commands/diagnose.js.map +1 -1
  7. package/dist/commands/pain-retry.d.ts.map +1 -1
  8. package/dist/commands/pain-retry.js +21 -7
  9. package/dist/commands/pain-retry.js.map +1 -1
  10. package/package.json +13 -7
  11. package/CHANGELOG.md +0 -23
  12. package/dist/commands/__tests__/intent-flag-wiring.test.d.ts +0 -9
  13. package/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +0 -1
  14. package/dist/commands/__tests__/intent-flag-wiring.test.js +0 -237
  15. package/dist/commands/__tests__/intent-flag-wiring.test.js.map +0 -1
  16. package/dist/commands/__tests__/legacy-cleanup.test.d.ts +0 -18
  17. package/dist/commands/__tests__/legacy-cleanup.test.d.ts.map +0 -1
  18. package/dist/commands/__tests__/legacy-cleanup.test.js +0 -467
  19. package/dist/commands/__tests__/legacy-cleanup.test.js.map +0 -1
  20. package/dist/commands/__tests__/mvp-smoke.test.d.ts +0 -15
  21. package/dist/commands/__tests__/mvp-smoke.test.d.ts.map +0 -1
  22. package/dist/commands/__tests__/mvp-smoke.test.js +0 -262
  23. package/dist/commands/__tests__/mvp-smoke.test.js.map +0 -1
  24. package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.d.ts +0 -2
  25. package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.d.ts.map +0 -1
  26. package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.js +0 -60
  27. package/dist/commands/__tests__/pain-retry-maxTokens-flag.test.js.map +0 -1
  28. package/dist/commands/__tests__/rulecode-flag-wiring.test.d.ts +0 -21
  29. package/dist/commands/__tests__/rulecode-flag-wiring.test.d.ts.map +0 -1
  30. package/dist/commands/__tests__/rulecode-flag-wiring.test.js +0 -186
  31. package/dist/commands/__tests__/rulecode-flag-wiring.test.js.map +0 -1
  32. package/dist/commands/__tests__/rulecode-handler.test.d.ts +0 -16
  33. package/dist/commands/__tests__/rulecode-handler.test.d.ts.map +0 -1
  34. package/dist/commands/__tests__/rulecode-handler.test.js +0 -285
  35. package/dist/commands/__tests__/rulecode-handler.test.js.map +0 -1
  36. package/dist/commands/__tests__/run-rulehost-flag-wiring.test.d.ts +0 -24
  37. package/dist/commands/__tests__/run-rulehost-flag-wiring.test.d.ts.map +0 -1
  38. package/dist/commands/__tests__/run-rulehost-flag-wiring.test.js +0 -232
  39. package/dist/commands/__tests__/run-rulehost-flag-wiring.test.js.map +0 -1
  40. package/dist/commands/__tests__/runtime-activation-nextaction.test.d.ts +0 -15
  41. package/dist/commands/__tests__/runtime-activation-nextaction.test.d.ts.map +0 -1
  42. package/dist/commands/__tests__/runtime-activation-nextaction.test.js +0 -73
  43. package/dist/commands/__tests__/runtime-activation-nextaction.test.js.map +0 -1
  44. package/dist/commands/__tests__/runtime-probe-config.test.d.ts +0 -20
  45. package/dist/commands/__tests__/runtime-probe-config.test.d.ts.map +0 -1
  46. package/dist/commands/__tests__/runtime-probe-config.test.js +0 -389
  47. package/dist/commands/__tests__/runtime-probe-config.test.js.map +0 -1
  48. package/dist/commands/__tests__/telemetry-flag-wiring.test.d.ts +0 -9
  49. package/dist/commands/__tests__/telemetry-flag-wiring.test.d.ts.map +0 -1
  50. package/dist/commands/__tests__/telemetry-flag-wiring.test.js +0 -76
  51. package/dist/commands/__tests__/telemetry-flag-wiring.test.js.map +0 -1
  52. package/dist/commands/__tests__/version.test.d.ts +0 -2
  53. package/dist/commands/__tests__/version.test.d.ts.map +0 -1
  54. package/dist/commands/__tests__/version.test.js +0 -238
  55. package/dist/commands/__tests__/version.test.js.map +0 -1
  56. package/dist/commands/runtime-uat.guard.test.d.ts +0 -2
  57. package/dist/commands/runtime-uat.guard.test.d.ts.map +0 -1
  58. package/dist/commands/runtime-uat.guard.test.js +0 -153
  59. package/dist/commands/runtime-uat.guard.test.js.map +0 -1
  60. package/dist/services/__tests__/cli-output.test.d.ts +0 -18
  61. package/dist/services/__tests__/cli-output.test.d.ts.map +0 -1
  62. package/dist/services/__tests__/cli-output.test.js +0 -103
  63. package/dist/services/__tests__/cli-output.test.js.map +0 -1
  64. package/dist/services/__tests__/evaluator-runner-deps.test.d.ts +0 -2
  65. package/dist/services/__tests__/evaluator-runner-deps.test.d.ts.map +0 -1
  66. package/dist/services/__tests__/evaluator-runner-deps.test.js +0 -343
  67. package/dist/services/__tests__/evaluator-runner-deps.test.js.map +0 -1
  68. package/dist/services/__tests__/rulehost-readiness.test.d.ts +0 -2
  69. package/dist/services/__tests__/rulehost-readiness.test.d.ts.map +0 -1
  70. package/dist/services/__tests__/rulehost-readiness.test.js +0 -311
  71. package/dist/services/__tests__/rulehost-readiness.test.js.map +0 -1
  72. package/dist/services/__tests__/runtime-adapter-resolver.test.d.ts +0 -18
  73. package/dist/services/__tests__/runtime-adapter-resolver.test.d.ts.map +0 -1
  74. package/dist/services/__tests__/runtime-adapter-resolver.test.js +0 -673
  75. package/dist/services/__tests__/runtime-adapter-resolver.test.js.map +0 -1
  76. package/dist/utils/production-workspace-guard.test.d.ts +0 -2
  77. package/dist/utils/production-workspace-guard.test.d.ts.map +0 -1
  78. package/dist/utils/production-workspace-guard.test.js +0 -137
  79. package/dist/utils/production-workspace-guard.test.js.map +0 -1
  80. package/scripts/llm-dogfood.ts +0 -456
  81. package/scripts/migrate-illegal-expected-decision.ts +0 -252
  82. package/src/commands/__tests__/intent-flag-wiring.test.ts +0 -282
  83. package/src/commands/__tests__/legacy-cleanup.test.ts +0 -602
  84. package/src/commands/__tests__/mvp-smoke.test.ts +0 -300
  85. package/src/commands/__tests__/pain-retry-maxTokens-flag.test.ts +0 -73
  86. package/src/commands/__tests__/rulecode-flag-wiring.test.ts +0 -237
  87. package/src/commands/__tests__/rulecode-handler.test.ts +0 -369
  88. package/src/commands/__tests__/run-rulehost-flag-wiring.test.ts +0 -292
  89. package/src/commands/__tests__/runtime-activation-nextaction.test.ts +0 -81
  90. package/src/commands/__tests__/runtime-probe-config.test.ts +0 -432
  91. package/src/commands/__tests__/telemetry-flag-wiring.test.ts +0 -84
  92. package/src/commands/__tests__/version.test.ts +0 -251
  93. package/src/commands/admission-gate.ts +0 -30
  94. package/src/commands/artifact.ts +0 -82
  95. package/src/commands/build-trajectory-evidence.ts +0 -298
  96. package/src/commands/candidate.ts +0 -1250
  97. package/src/commands/codex-ingest-catchup.ts +0 -114
  98. package/src/commands/codex-ingest-quarantine.ts +0 -127
  99. package/src/commands/codex-reconcile.ts +0 -84
  100. package/src/commands/codex-setup.ts +0 -476
  101. package/src/commands/codex-worker.ts +0 -185
  102. package/src/commands/command-helpers.ts +0 -24
  103. package/src/commands/config-doctor.ts +0 -193
  104. package/src/commands/console.ts +0 -797
  105. package/src/commands/context.ts +0 -72
  106. package/src/commands/demo-story-a.ts +0 -241
  107. package/src/commands/diagnose.ts +0 -756
  108. package/src/commands/errors-list.ts +0 -441
  109. package/src/commands/evolution-tasks-list.ts +0 -48
  110. package/src/commands/evolution-tasks-show.ts +0 -62
  111. package/src/commands/flow.ts +0 -60
  112. package/src/commands/health-codex.ts +0 -576
  113. package/src/commands/health.ts +0 -315
  114. package/src/commands/history.ts +0 -63
  115. package/src/commands/intent.ts +0 -457
  116. package/src/commands/legacy-cleanup.ts +0 -531
  117. package/src/commands/legacy-import.ts +0 -104
  118. package/src/commands/mvp-smoke.ts +0 -160
  119. package/src/commands/pain-evidence.ts +0 -226
  120. package/src/commands/pain-list.ts +0 -239
  121. package/src/commands/pain-record.ts +0 -612
  122. package/src/commands/pain-retry.ts +0 -916
  123. package/src/commands/principles-stats.ts +0 -700
  124. package/src/commands/proven-channel-baseline.ts +0 -115
  125. package/src/commands/quality-scorecard.ts +0 -272
  126. package/src/commands/remediation-output.ts +0 -66
  127. package/src/commands/rulecode.ts +0 -465
  128. package/src/commands/run.ts +0 -89
  129. package/src/commands/runtime-activation.ts +0 -1629
  130. package/src/commands/runtime-artifact-repair.ts +0 -524
  131. package/src/commands/runtime-canary.ts +0 -395
  132. package/src/commands/runtime-compatibility-scan.ts +0 -105
  133. package/src/commands/runtime-diagnostics-export.ts +0 -229
  134. package/src/commands/runtime-features.ts +0 -153
  135. package/src/commands/runtime-gfi-snapshot.ts +0 -135
  136. package/src/commands/runtime-health-snapshot.ts +0 -108
  137. package/src/commands/runtime-init.ts +0 -429
  138. package/src/commands/runtime-internalization-enqueue-successors.ts +0 -530
  139. package/src/commands/runtime-internalization-integrity-repair.ts +0 -79
  140. package/src/commands/runtime-internalization-integrity.ts +0 -107
  141. package/src/commands/runtime-internalization-queue.ts +0 -135
  142. package/src/commands/runtime-internalization-retry.ts +0 -191
  143. package/src/commands/runtime-internalization-run-once.ts +0 -791
  144. package/src/commands/runtime-internalization-run-rulehost.ts +0 -749
  145. package/src/commands/runtime-internalization-wake-once.ts +0 -87
  146. package/src/commands/runtime-pain-flood-simulation.ts +0 -121
  147. package/src/commands/runtime-pruning.ts +0 -438
  148. package/src/commands/runtime-recovery-failed-tasks.ts +0 -258
  149. package/src/commands/runtime-recovery.ts +0 -109
  150. package/src/commands/runtime-synthetic-baseline.ts +0 -70
  151. package/src/commands/runtime-uat.guard.test.ts +0 -175
  152. package/src/commands/runtime-uat.ts +0 -380
  153. package/src/commands/runtime.ts +0 -473
  154. package/src/commands/samples-list.ts +0 -39
  155. package/src/commands/samples-review.ts +0 -36
  156. package/src/commands/task.ts +0 -271
  157. package/src/commands/telemetry.ts +0 -349
  158. package/src/commands/trace.ts +0 -174
  159. package/src/commands/trajectory-db-unavailable.ts +0 -19
  160. package/src/commands/trajectory.ts +0 -64
  161. package/src/commands/version.ts +0 -49
  162. package/src/config-reader.ts +0 -122
  163. package/src/index.ts +0 -1276
  164. package/src/legacy/legacy-import.ts +0 -179
  165. package/src/legacy/session-history-import.ts +0 -203
  166. package/src/resolve-workspace.ts +0 -106
  167. package/src/services/__tests__/cli-output.test.ts +0 -130
  168. package/src/services/__tests__/evaluator-runner-deps.test.ts +0 -382
  169. package/src/services/__tests__/rulehost-readiness.test.ts +0 -363
  170. package/src/services/__tests__/runtime-adapter-resolver.test.ts +0 -793
  171. package/src/services/cli-output.ts +0 -95
  172. package/src/services/config-doctor.ts +0 -697
  173. package/src/services/console-launcher.ts +0 -537
  174. package/src/services/demo-rule-compiler.ts +0 -40
  175. package/src/services/demo-story-a-runner.ts +0 -471
  176. package/src/services/mainline-snapshot-assembler.ts +0 -579
  177. package/src/services/pain-flood-simulation-runner.ts +0 -462
  178. package/src/services/pd-config-loader.ts +0 -433
  179. package/src/services/proven-channel-baseline-runner.ts +0 -157
  180. package/src/services/quality-scorecard/data-extractor.ts +0 -150
  181. package/src/services/quality-scorecard/local-evaluator.ts +0 -142
  182. package/src/services/quality-scorecard/strong-model-gate.ts +0 -202
  183. package/src/services/resolve-runtime-from-pd-config.ts +0 -230
  184. package/src/services/rulehost-pipeline-runner.ts +0 -1214
  185. package/src/services/rulehost-readiness.ts +0 -326
  186. package/src/services/runtime-adapter-resolver.ts +0 -364
  187. package/src/services/synthetic-baseline-runner.ts +0 -400
  188. package/src/services/version-report.ts +0 -253
  189. package/src/services/workspace-tool-semantics.ts +0 -26
  190. package/src/utils/path-security.ts +0 -96
  191. package/src/utils/production-workspace-guard.test.ts +0 -157
  192. package/src/utils/production-workspace-guard.ts +0 -210
  193. package/tests/bdd/cli-contract.steps.ts +0 -346
  194. package/tests/bdd/principles-stats.steps.ts +0 -211
  195. package/tests/bdd/support/gherkin-loader.ts +0 -147
  196. package/tests/bdd/support/repo-root.ts +0 -62
  197. package/tests/bdd/support/vitest-bdd.ts +0 -179
  198. package/tests/commands/admission-gate-coverage.test.ts +0 -79
  199. package/tests/commands/build-trajectory-evidence.test.ts +0 -508
  200. package/tests/commands/candidate-audit-repair.test.ts +0 -421
  201. package/tests/commands/candidate-intake.test.ts +0 -732
  202. package/tests/commands/candidate-internalization-backfill.test.ts +0 -548
  203. package/tests/commands/candidate-internalize-lineage.test.ts +0 -628
  204. package/tests/commands/candidate-internalize.test.ts +0 -299
  205. package/tests/commands/candidate-route.test.ts +0 -329
  206. package/tests/commands/candidate-show.test.ts +0 -95
  207. package/tests/commands/cli-command-tree.test.ts +0 -144
  208. package/tests/commands/cli-help-snapshot.test.ts +0 -155
  209. package/tests/commands/cli-skill-contract.test.ts +0 -121
  210. package/tests/commands/codex-consent-reversibility.steps.test.ts +0 -299
  211. package/tests/commands/codex-ingest-quarantine.test.ts +0 -136
  212. package/tests/commands/codex-setup.test.ts +0 -297
  213. package/tests/commands/codex-worker-daemon.test.ts +0 -95
  214. package/tests/commands/codex-worker-registration.test.ts +0 -207
  215. package/tests/commands/config-doctor.test.ts +0 -336
  216. package/tests/commands/console-launcher-edge-cases.test.ts +0 -388
  217. package/tests/commands/console-open.test.ts +0 -1381
  218. package/tests/commands/context.test.ts +0 -114
  219. package/tests/commands/demo-story-a.test.ts +0 -318
  220. package/tests/commands/diagnose.test.ts +0 -1803
  221. package/tests/commands/errors-list.test.ts +0 -679
  222. package/tests/commands/evolution-tasks-list.test.ts +0 -41
  223. package/tests/commands/evolution-tasks-show.test.ts +0 -46
  224. package/tests/commands/health-codex.test.ts +0 -349
  225. package/tests/commands/health-host-wiring.test.ts +0 -76
  226. package/tests/commands/health-reliability.test.ts +0 -99
  227. package/tests/commands/health.test.ts +0 -413
  228. package/tests/commands/intent.test.ts +0 -321
  229. package/tests/commands/legacy-cleanup.test.ts +0 -148
  230. package/tests/commands/pain-evidence.test.ts +0 -518
  231. package/tests/commands/pain-list.test.ts +0 -219
  232. package/tests/commands/pain-record-async.test.ts +0 -335
  233. package/tests/commands/pain-record-session-parser.test.ts +0 -228
  234. package/tests/commands/pain-record.test.ts +0 -851
  235. package/tests/commands/pain-retry.test.ts +0 -1121
  236. package/tests/commands/plugin-config-resolution-cutover.test.ts +0 -229
  237. package/tests/commands/pri-393-runtime-config-unification.test.ts +0 -443
  238. package/tests/commands/principles-stats-wiring.test.ts +0 -135
  239. package/tests/commands/principles-stats.test.ts +0 -274
  240. package/tests/commands/product-path-regression.test.ts +0 -86
  241. package/tests/commands/proven-channel-baseline.test.ts +0 -441
  242. package/tests/commands/rulecode.test.ts +0 -177
  243. package/tests/commands/run-rulehost-handler.test.ts +0 -908
  244. package/tests/commands/runtime-activation-approve-flag-wiring.test.ts +0 -227
  245. package/tests/commands/runtime-activation-deactivate-flag-wiring.test.ts +0 -167
  246. package/tests/commands/runtime-activation-dispatch-flag-wiring.test.ts +0 -262
  247. package/tests/commands/runtime-activation-governance-audit.test.ts +0 -95
  248. package/tests/commands/runtime-activation-list-flag-wiring.test.ts +0 -193
  249. package/tests/commands/runtime-activation-promote-flag-wiring.test.ts +0 -248
  250. package/tests/commands/runtime-activation-shadow-telemetry.test.ts +0 -130
  251. package/tests/commands/runtime-activation.test.ts +0 -2052
  252. package/tests/commands/runtime-artifact-repair-registration.test.ts +0 -74
  253. package/tests/commands/runtime-artifact-repair.test.ts +0 -404
  254. package/tests/commands/runtime-canary.test.ts +0 -430
  255. package/tests/commands/runtime-compatibility-scan.test.ts +0 -146
  256. package/tests/commands/runtime-diagnostics-export.test.ts +0 -175
  257. package/tests/commands/runtime-features.test.ts +0 -249
  258. package/tests/commands/runtime-health-snapshot.test.ts +0 -358
  259. package/tests/commands/runtime-init-empty-workspace.test.ts +0 -252
  260. package/tests/commands/runtime-init.test.ts +0 -420
  261. package/tests/commands/runtime-internalization-enqueue-successors.test.ts +0 -782
  262. package/tests/commands/runtime-internalization-integrity-repair.test.ts +0 -239
  263. package/tests/commands/runtime-internalization-integrity.test.ts +0 -140
  264. package/tests/commands/runtime-internalization-queue.test.ts +0 -380
  265. package/tests/commands/runtime-internalization-retry-owner-authority.test.ts +0 -431
  266. package/tests/commands/runtime-internalization-run-once-evaluator-parity.test.ts +0 -269
  267. package/tests/commands/runtime-internalization-run-once-language.test.ts +0 -303
  268. package/tests/commands/runtime-internalization-run-once-real-config.test.ts +0 -237
  269. package/tests/commands/runtime-internalization-run-once-rollout-parity.test.ts +0 -706
  270. package/tests/commands/runtime-internalization-run-once.test.ts +0 -1791
  271. package/tests/commands/runtime-internalization-wake-once.test.ts +0 -171
  272. package/tests/commands/runtime-internalization.test.ts +0 -53
  273. package/tests/commands/runtime-pain-flood-simulation.test.ts +0 -418
  274. package/tests/commands/runtime-pruning.test.ts +0 -694
  275. package/tests/commands/runtime-recovery-failed-tasks.test.ts +0 -328
  276. package/tests/commands/runtime-recovery.test.ts +0 -120
  277. package/tests/commands/runtime-synthetic-baseline.test.ts +0 -249
  278. package/tests/commands/runtime-uat.test.ts +0 -397
  279. package/tests/commands/runtime.test.ts +0 -392
  280. package/tests/commands/samples-list.test.ts +0 -43
  281. package/tests/commands/samples-review.test.ts +0 -41
  282. package/tests/commands/task.test.ts +0 -153
  283. package/tests/commands/telemetry.test.ts +0 -190
  284. package/tests/commands/trace.test.ts +0 -316
  285. package/tests/config-reader.test.ts +0 -143
  286. package/tests/e2e/candidate-intake-e2e.test.ts +0 -338
  287. package/tests/e2e/cli-full-flow.test.ts +0 -233
  288. package/tests/e2e/cross-package-acceptance.test.ts +0 -635
  289. package/tests/helpers/pd-cli-path.ts +0 -5
  290. package/tests/pd-cli-smoke.test.ts +0 -13
  291. package/tests/resolve-workspace.test.ts +0 -196
  292. package/tests/services/config-doctor-signal-health.test.ts +0 -109
  293. package/tests/services/console-launcher.test.ts +0 -114
  294. package/tests/services/demo-rule-compiler.test.ts +0 -242
  295. package/tests/services/mainline-snapshot-assembler.test.ts +0 -572
  296. package/tests/services/pd-config-loader.test.ts +0 -505
  297. package/tests/services/proven-channel-baseline-runner.test.ts +0 -30
  298. package/tests/services/quality-scorecard/strong-model-gate.test.ts +0 -133
  299. package/tests/services/resolve-runtime-from-pd-config.test.ts +0 -485
  300. package/tests/services/rulehost-pipeline-e2e.test.ts +0 -538
  301. package/tests/services/rulehost-pipeline-runner.test.ts +0 -1242
  302. package/tests/services/workspace-tool-semantics.test.ts +0 -76
  303. package/tests/utils/path-security.test.ts +0 -180
  304. package/tsconfig.json +0 -26
  305. package/vitest.config.ts +0 -10
@@ -1,473 +0,0 @@
1
- /**
2
- * pd runtime probe command — Runtime health and capabilities inspection.
3
- *
4
- * Usage:
5
- * pd runtime probe --runtime openclaw-cli [--openclaw-local|--openclaw-gateway] [--json]
6
- * pd runtime probe --runtime pi-ai --provider <name> --model <id> --apiKeyEnv <name> [--baseUrl <url>] [--json]
7
- *
8
- * HG-01 HARD GATE: This command must deliver.
9
- */
10
- import * as path from 'path';
11
- import type { Command } from 'commander';
12
- import { probeRuntime, PDRuntimeError, isRuntimeConfigError } from '@principles/core/runtime-v2';
13
- import { resolveRuntimeFromPdConfig, resolveRuntimeWithOverrides } from '../services/resolve-runtime-from-pd-config.js';
14
-
15
- interface RuntimeProbeOptions {
16
- runtime: string;
17
- openclawLocal?: boolean;
18
- openclawGateway?: boolean;
19
- agent?: string;
20
- provider?: string;
21
- model?: string;
22
- apiKeyEnv?: string;
23
- baseUrl?: string;
24
- maxRetries?: number;
25
- timeoutMs?: number;
26
- workspace?: string;
27
- json?: boolean;
28
- }
29
-
30
- /**
31
- * Format capabilities as a key-value table for console output.
32
- */
33
- function formatCapabilitiesTable(capabilities: Record<string, unknown>): string {
34
- const lines: string[] = [];
35
- for (const [key, value] of Object.entries(capabilities)) {
36
- const displayValue = typeof value === 'boolean' ? (value ? 'yes' : 'no') : String(value);
37
- lines.push(` ${key.padEnd(40)} ${displayValue}`);
38
- }
39
- return lines.join('\n');
40
- }
41
-
42
- /**
43
- * openclaw-cli probe branch (existing behavior, unchanged).
44
- */
45
- async function handleOpenClawProbe(opts: RuntimeProbeOptions): Promise<void> {
46
- // Validate mutually exclusive flags (HG-03)
47
- if (opts.openclawLocal && opts.openclawGateway) {
48
- console.error('error: --openclaw-local and --openclaw-gateway are mutually exclusive');
49
- process.exit(1);
50
- }
51
-
52
- // Require explicit runtime mode (HG-03, DPB-09)
53
- if (!opts.openclawLocal && !opts.openclawGateway) {
54
- console.error('error: --openclaw-local or --openclaw-gateway is required for --runtime openclaw-cli');
55
- process.exit(1);
56
- }
57
-
58
- const runtimeMode = opts.openclawLocal ? 'local' : 'gateway';
59
-
60
- try {
61
- const result = await probeRuntime({
62
- runtimeKind: 'openclaw-cli',
63
- runtimeMode,
64
- agentId: opts.agent,
65
- });
66
-
67
- // Per finding #2: status must reflect actual health
68
- // healthy=false → status=failed, exit 1
69
- // healthy=true + degraded=true → status=degraded
70
- // healthy=true + degraded=false → status=succeeded
71
- let exitCode = 0;
72
- const status = !result.health.healthy ? 'failed'
73
- : result.health.degraded ? 'degraded'
74
- : 'succeeded';
75
- if (!result.health.healthy) exitCode = 1;
76
-
77
- if (opts.json) {
78
- console.log(JSON.stringify({
79
- status,
80
- runtimeKind: result.runtimeKind,
81
- health: result.health,
82
- capabilities: result.capabilities,
83
- }, null, 2));
84
- if (exitCode !== 0) {
85
- process.exit(exitCode);
86
- }
87
- return;
88
- }
89
-
90
- // Human-readable output
91
- console.log(`\nRuntime: ${result.runtimeKind}`);
92
- console.log(`Mode: ${runtimeMode}`);
93
- console.log(`Status: ${status}`);
94
- console.log('');
95
- console.log('Health:');
96
- console.log(` healthy: ${result.health.healthy ? 'yes' : 'no'}`);
97
- console.log(` degraded: ${result.health.degraded ? 'yes' : 'no'}`);
98
- if (result.health.warnings.length > 0) {
99
- console.log(` warnings:`);
100
- for (const w of result.health.warnings) {
101
- console.log(` - ${w}`);
102
- }
103
- }
104
- console.log(` lastCheckedAt: ${result.health.lastCheckedAt}`);
105
- console.log('');
106
- console.log('Capabilities:');
107
- console.log(formatCapabilitiesTable(result.capabilities));
108
- console.log('');
109
-
110
- if (exitCode !== 0) {
111
- process.exit(exitCode);
112
- }
113
- } catch (error: unknown) {
114
- const message = error instanceof Error ? error.message : String(error);
115
- let errorCategory = 'execution_failed';
116
- if (error instanceof PDRuntimeError) {
117
- errorCategory = error.category;
118
- }
119
- if (opts.json) {
120
- console.log(JSON.stringify({
121
- status: 'failed',
122
- errorCategory,
123
- message,
124
- runtimeKind: 'openclaw-cli',
125
- }, null, 2));
126
- } else {
127
- console.error(`error: ${message} (${errorCategory})`);
128
- }
129
- process.exit(1);
130
- }
131
- }
132
-
133
- /**
134
- * pi-ai probe branch — validates flags, calls probeRuntime, formats output.
135
- *
136
- * PRI-402: When --workspace is provided without explicit --provider,
137
- * reads pi-ai config from .pd/config.yaml via resolveRuntimeWithOverrides.
138
- * JSON output includes configSource, runtimeProfileId, runtimeProfileLabel
139
- * for alignment with `pd config doctor`.
140
- */
141
- async function handlePiAiProbe(opts: RuntimeProbeOptions): Promise<void> {
142
- // D-01: flags are required for pi-ai probe unless --workspace is provided (policy fallback)
143
- const workspaceDir = opts.workspace ? path.resolve(opts.workspace) : undefined;
144
- let provider = opts.provider ?? '';
145
- let model = opts.model ?? '';
146
- let apiKeyEnv = opts.apiKeyEnv ?? '';
147
- let baseUrl = opts.baseUrl ?? '';
148
- let { timeoutMs, maxRetries } = opts;
149
-
150
- // PRI-402: Track config source and profile info for JSON output
151
- let configSource: string | null = null;
152
- let runtimeProfileId: string | null = null;
153
- let runtimeProfileLabel: string | null = null;
154
-
155
- // PRI-393: always load workspace policy from .pd/config.yaml (not .state/workflows.yaml)
156
- if (workspaceDir) {
157
- const resolved = resolveRuntimeWithOverrides(workspaceDir, {
158
- provider: opts.provider,
159
- model: opts.model,
160
- apiKeyEnv: opts.apiKeyEnv,
161
- baseUrl: opts.baseUrl,
162
- maxRetries: opts.maxRetries,
163
- timeoutMs: opts.timeoutMs,
164
- });
165
- for (const w of resolved.legacyWarnings) console.warn(`Warning: ${w}`);
166
-
167
- // PRI-402: capture profile info regardless of merge result
168
- ({ configSource, runtimeProfileId, runtimeProfileLabel } = resolved);
169
-
170
- if (resolved.mergedConfig) {
171
- provider = provider || resolved.mergedConfig.provider || '';
172
- model = model || resolved.mergedConfig.model || '';
173
- apiKeyEnv = apiKeyEnv || resolved.mergedConfig.apiKeyEnv || '';
174
- baseUrl = baseUrl || resolved.mergedConfig.baseUrl || '';
175
- timeoutMs = timeoutMs ?? resolved.mergedConfig.timeoutMs;
176
- maxRetries = maxRetries ?? resolved.mergedConfig.maxRetries;
177
- } else if (isRuntimeConfigError(resolved.result)) {
178
- // PRI-402: fail-loud JSON when config.yaml is broken (EP-03, EP-04)
179
- if (opts.json) {
180
- console.log(JSON.stringify({
181
- ok: false,
182
- status: 'failed',
183
- reason: resolved.result.reason,
184
- message: resolved.result.message,
185
- nextAction: resolved.result.nextAction,
186
- configSource: resolved.configSource,
187
- }, null, 2));
188
- } else {
189
- console.error(`error: could not resolve runtime from .pd/config.yaml — ${resolved.result.message}`);
190
- console.error(`nextAction: ${resolved.result.nextAction}`);
191
- }
192
- process.exit(1);
193
- return;
194
- }
195
- }
196
-
197
- if (!provider) {
198
- // PRI-402: fail-loud JSON when provider is missing (EP-03, EP-04)
199
- if (opts.json) {
200
- console.log(JSON.stringify({
201
- ok: false,
202
- status: 'failed',
203
- reason: 'provider_missing',
204
- message: '--provider is required for --runtime pi-ai (or set in .pd/config.yaml)',
205
- nextAction: 'Set provider in .pd/config.yaml runtimeProfiles, or pass --provider explicitly',
206
- configSource,
207
- }, null, 2));
208
- } else {
209
- console.error("error: --provider is required for --runtime pi-ai (or set in .pd/config.yaml)");
210
- console.error(" e.g.: pd runtime probe --runtime pi-ai --provider openrouter --model anthropic/claude-sonnet-4 --apiKeyEnv OPENROUTER_API_KEY");
211
- }
212
- process.exit(1);
213
- return;
214
- }
215
- if (!model) {
216
- if (opts.json) {
217
- console.log(JSON.stringify({
218
- ok: false,
219
- status: 'failed',
220
- reason: 'model_missing',
221
- message: '--model is required for --runtime pi-ai (or set in .pd/config.yaml)',
222
- nextAction: 'Set model in .pd/config.yaml runtimeProfiles, or pass --model explicitly',
223
- configSource,
224
- }, null, 2));
225
- } else {
226
- console.error("error: --model is required for --runtime pi-ai (or set in .pd/config.yaml)");
227
- console.error(" e.g.: pd runtime probe --runtime pi-ai --provider openrouter --model anthropic/claude-sonnet-4 --apiKeyEnv OPENROUTER_API_KEY");
228
- }
229
- process.exit(1);
230
- return;
231
- }
232
- if (!apiKeyEnv) {
233
- if (opts.json) {
234
- console.log(JSON.stringify({
235
- ok: false,
236
- status: 'failed',
237
- reason: 'apiKeyEnv_missing',
238
- message: '--apiKeyEnv is required for --runtime pi-ai (or set in .pd/config.yaml)',
239
- nextAction: 'Set apiKeyEnv in .pd/config.yaml runtimeProfiles, or pass --apiKeyEnv explicitly',
240
- configSource,
241
- }, null, 2));
242
- } else {
243
- console.error("error: --apiKeyEnv is required for --runtime pi-ai (or set in .pd/config.yaml)");
244
- console.error(" e.g.: pd runtime probe --runtime pi-ai --provider openrouter --model anthropic/claude-sonnet-4 --apiKeyEnv OPENROUTER_API_KEY");
245
- }
246
- process.exit(1);
247
- return;
248
- }
249
-
250
- // D-09: check env var exists before calling probeRuntime
251
- if (!process.env[apiKeyEnv]) {
252
- if (opts.json) {
253
- console.log(JSON.stringify({
254
- ok: false,
255
- status: 'failed',
256
- reason: 'api_key_not_set',
257
- message: `Environment variable '${apiKeyEnv}' is not set`,
258
- nextAction: `Set the environment variable '${apiKeyEnv}' with a valid API key`,
259
- configSource,
260
- }, null, 2));
261
- } else {
262
- console.error(`error: environment variable '${apiKeyEnv}' is not set`);
263
- }
264
- process.exit(1);
265
- return;
266
- }
267
-
268
- try {
269
- const result = await probeRuntime({
270
- runtimeKind: 'pi-ai',
271
- provider,
272
- model,
273
- apiKeyEnv,
274
- baseUrl,
275
- maxRetries: maxRetries,
276
- timeoutMs: timeoutMs ?? 120_000, // D-04: probe timeout 120s (matches Runtime defaults)
277
- });
278
-
279
- // Narrow to pi-ai result (TypeScript can't infer from input args alone)
280
- if (result.runtimeKind !== 'pi-ai') {
281
- throw new Error('unexpected: probeRuntime returned non-pi-ai result');
282
- }
283
-
284
- // Determine status from health
285
- let exitCode = 0;
286
- const status = !result.health.healthy ? 'failed'
287
- : result.health.degraded ? 'degraded'
288
- : 'succeeded';
289
- if (!result.health.healthy) exitCode = 1;
290
-
291
- if (opts.json) {
292
- // PRI-402: include configSource, runtimeProfileId, runtimeProfileLabel in JSON output
293
- const jsonOutput: Record<string, unknown> = {
294
- ok: result.health.healthy,
295
- status,
296
- runtimeKind: result.runtimeKind,
297
- provider: result.provider,
298
- model: result.model,
299
- baseUrlPresent: !!baseUrl,
300
- health: result.health,
301
- capabilities: result.capabilities,
302
- };
303
- if (configSource) jsonOutput.configSource = configSource;
304
- if (runtimeProfileId) jsonOutput.runtimeProfileId = runtimeProfileId;
305
- if (runtimeProfileLabel) jsonOutput.runtimeProfileLabel = runtimeProfileLabel;
306
- console.log(JSON.stringify(jsonOutput, null, 2));
307
- if (exitCode !== 0) process.exit(exitCode);
308
- return;
309
- }
310
-
311
- // D-05: human-readable output
312
- console.log(`\nRuntime: ${result.runtimeKind}`);
313
- console.log(`Provider: ${result.provider}`);
314
- console.log(`Model: ${result.model}`);
315
- if (baseUrl) console.log(`BaseUrl: ${baseUrl}`);
316
- if (runtimeProfileLabel) console.log(`Profile: ${runtimeProfileLabel}`);
317
- if (configSource) console.log(`Config: ${configSource}`);
318
- console.log(`Status: ${status}`);
319
- console.log('');
320
- console.log('Health:');
321
- console.log(` healthy: ${result.health.healthy ? 'yes' : 'no'}`);
322
- console.log(` degraded: ${result.health.degraded ? 'yes' : 'no'}`);
323
- if (result.health.warnings.length > 0) {
324
- console.log(' warnings:');
325
- for (const w of result.health.warnings) {
326
- console.log(` - ${w}`);
327
- }
328
- }
329
- console.log(` lastCheckedAt: ${result.health.lastCheckedAt}`);
330
- console.log('');
331
- console.log('Capabilities:');
332
- console.log(formatCapabilitiesTable(result.capabilities));
333
- console.log('');
334
-
335
- if (exitCode !== 0) process.exit(exitCode);
336
- } catch (error: unknown) {
337
- // D-10: test complete failure → error category + raw error
338
- const message = error instanceof Error ? error.message : String(error);
339
- let errorCategory = 'execution_failed';
340
- if (error instanceof PDRuntimeError) {
341
- errorCategory = error.category;
342
- }
343
- if (opts.json) {
344
- console.log(JSON.stringify({
345
- ok: false,
346
- status: 'failed',
347
- errorCategory,
348
- message,
349
- runtimeKind: 'pi-ai',
350
- configSource,
351
- }, null, 2));
352
- } else {
353
- console.error(`error: ${message} (${errorCategory})`);
354
- }
355
- process.exit(1);
356
- }
357
- }
358
-
359
- /**
360
- * --runtime config probe branch — PRI-393
361
- * Resolves runtime from .pd/config.yaml, then dispatches to pi-ai or openclaw-cli probe.
362
- */
363
- async function handleConfigProbe(opts: RuntimeProbeOptions): Promise<void> {
364
- const workspaceDir = opts.workspace ? path.resolve(opts.workspace) : undefined;
365
- if (!workspaceDir) {
366
- if (opts.json) {
367
- console.log(JSON.stringify({
368
- ok: false,
369
- status: 'failed',
370
- reason: 'workspace_missing',
371
- message: '--workspace is required for --runtime config',
372
- nextAction: 'Provide --workspace <path> pointing to a PD workspace directory',
373
- }, null, 2));
374
- } else {
375
- console.error('error: --workspace is required for --runtime config');
376
- }
377
- process.exit(1);
378
- return;
379
- }
380
-
381
- const resolved = resolveRuntimeFromPdConfig(workspaceDir);
382
- for (const w of resolved.legacyWarnings) console.warn(`Warning: ${w}`);
383
-
384
- if (isRuntimeConfigError(resolved.result)) {
385
- if (opts.json) {
386
- console.log(JSON.stringify({
387
- ok: false,
388
- status: 'failed',
389
- errorCategory: 'config_error',
390
- message: resolved.result.message,
391
- reason: resolved.result.reason,
392
- nextAction: resolved.result.nextAction,
393
- configSource: resolved.configSource,
394
- }, null, 2));
395
- } else {
396
- console.error(`error: ${resolved.result.message}`);
397
- console.error(`nextAction: ${resolved.result.nextAction}`);
398
- }
399
- process.exit(1);
400
- return;
401
- }
402
-
403
- const config = resolved.result;
404
- // Dispatch to the appropriate runtime probe
405
- if (config.runtimeKind === 'pi-ai') {
406
- return handlePiAiProbe({
407
- ...opts,
408
- provider: opts.provider ?? config.provider,
409
- model: opts.model ?? config.model,
410
- apiKeyEnv: opts.apiKeyEnv ?? config.apiKeyEnv,
411
- baseUrl: opts.baseUrl ?? config.baseUrl,
412
- timeoutMs: opts.timeoutMs ?? config.timeoutMs,
413
- });
414
- }
415
-
416
- if (config.runtimeKind === 'openclaw-cli') {
417
- return handleOpenClawProbe({
418
- ...opts,
419
- openclawLocal: config.openclawMode === 'local' ? true : opts.openclawLocal,
420
- openclawGateway: config.openclawMode === 'gateway' ? true : opts.openclawGateway,
421
- });
422
- }
423
-
424
- console.error(`error: unsupported runtimeKind '${config.runtimeKind}' from .pd/config.yaml`);
425
- process.exit(1);
426
- return;
427
- }
428
-
429
- /**
430
- * pd runtime probe — dispatches to openclaw-cli, pi-ai, or config branch.
431
- */
432
- export async function handleRuntimeProbe(opts: RuntimeProbeOptions): Promise<void> {
433
- if (opts.runtime === 'openclaw-cli') {
434
- return handleOpenClawProbe(opts);
435
- }
436
-
437
- if (opts.runtime === 'pi-ai') {
438
- return handlePiAiProbe(opts);
439
- }
440
-
441
- if (opts.runtime === 'config') {
442
- return handleConfigProbe(opts);
443
- }
444
-
445
- console.error(`error: unsupported --runtime '${opts.runtime}' (supported: openclaw-cli, pi-ai, config)`);
446
- process.exit(1);
447
- return;
448
- }
449
-
450
- /**
451
- * Register the `pd runtime probe` command on a Commander instance.
452
- * Used by index.ts and tests to ensure real command wiring is verified (EP-04).
453
- */
454
- export function registerRuntimeProbeCommand(runtimeCmd: Command): Command {
455
- return runtimeCmd
456
- .command('probe', { hidden: true })
457
- .description('Probe runtime health and capabilities (HG-01 HARD GATE)')
458
- .requiredOption('-r, --runtime <kind>', "Runtime kind: 'openclaw-cli', 'pi-ai', or 'config'")
459
- .option('--openclaw-local', 'Use local OpenClaw (mutually exclusive with --openclaw-gateway)')
460
- .option('--openclaw-gateway', 'Use gateway OpenClaw (mutually exclusive with --openclaw-local)')
461
- .option('-a, --agent <agentId>', 'Agent ID to probe')
462
- .option('--provider <name>', 'LLM provider (e.g., openrouter) \u2014 for pi-ai, falls back to .pd/config.yaml')
463
- .option('--model <id>', 'Model ID (e.g., anthropic/claude-sonnet-4) \u2014 for pi-ai, falls back to .pd/config.yaml')
464
- .option('--apiKeyEnv <name>', 'Env var name for API key (e.g., OPENROUTER_API_KEY) \u2014 for pi-ai, falls back to .pd/config.yaml')
465
- .option('--baseUrl <url>', 'Custom base URL for OpenAI-compatible providers \u2014 for pi-ai, falls back to .pd/config.yaml')
466
- .option('--maxRetries <n>', 'Max retry attempts for LLM failures', parseInt)
467
- .option('--timeoutMs <ms>', 'Timeout in milliseconds for probe', parseInt)
468
- .option('-w, --workspace <path>', 'Workspace directory \u2014 loads pi-ai config from .pd/config.yaml')
469
- .option('--json', 'Output raw JSON')
470
- .action(async (opts) => {
471
- await handleRuntimeProbe(opts);
472
- });
473
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * pd samples list command implementation.
3
- *
4
- * Usage: pd samples list [--status pending|approved|rejected]
5
- */
6
-
7
- import { listCorrectionSamples, TrajectoryDbUnavailableError } from '@principles/core/trajectory-store';
8
- import { resolveWorkspaceDir } from '../resolve-workspace.js';
9
- import { exitWithTrajectoryDbUnavailable } from './trajectory-db-unavailable.js';
10
-
11
- interface SamplesListOptions {
12
- status?: 'pending' | 'approved' | 'rejected';
13
- }
14
-
15
- export async function handleSamplesList(opts: SamplesListOptions): Promise<void> {
16
- const workspaceDir = resolveWorkspaceDir();
17
- const status = opts.status ?? 'pending';
18
-
19
- let samples;
20
- try {
21
- samples = listCorrectionSamples(workspaceDir, status);
22
- } catch (err) {
23
- if (err instanceof TrajectoryDbUnavailableError) {
24
- return exitWithTrajectoryDbUnavailable(err);
25
- }
26
- throw err;
27
- }
28
-
29
- if (samples.length === 0) {
30
- console.log('No correction samples found.');
31
- return;
32
- }
33
-
34
- console.log(`Correction Samples (${status}):`);
35
- for (const sample of samples) {
36
- console.log(` [${sample.sampleId}] session=${sample.sessionId} score=${sample.qualityScore} created=${sample.createdAt}`);
37
- }
38
- console.log(`${samples.length} sample(s)`);
39
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * pd samples review command implementation.
3
- *
4
- * Usage: pd samples review <sample-id> approve|reject [note]
5
- */
6
-
7
- import { reviewCorrectionSample, TrajectoryDbUnavailableError } from '@principles/core/trajectory-store';
8
- import { resolveWorkspaceDir } from '../resolve-workspace.js';
9
- import { exitWithTrajectoryDbUnavailable } from './trajectory-db-unavailable.js';
10
-
11
- type ReviewDecision = 'approved' | 'rejected';
12
-
13
- interface SamplesReviewOptions {
14
- sampleId: string;
15
- decision: ReviewDecision;
16
- note?: string;
17
- }
18
-
19
- export async function handleSamplesReview(opts: SamplesReviewOptions): Promise<void> {
20
- const workspaceDir = resolveWorkspaceDir();
21
-
22
- try {
23
- reviewCorrectionSample(opts.sampleId, opts.decision, opts.note, workspaceDir);
24
- } catch (err) {
25
- if (err instanceof TrajectoryDbUnavailableError) {
26
- return exitWithTrajectoryDbUnavailable(err);
27
- }
28
- if (err instanceof Error && err.message.includes('Sample not found')) {
29
- console.error(`Error: Sample not found: ${opts.sampleId}`);
30
- process.exit(1);
31
- }
32
- throw err;
33
- }
34
-
35
- console.log(`Sample ${opts.sampleId} marked as ${opts.decision}`);
36
- }