create-principles-disciple 1.144.26 → 1.145.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.
Files changed (343) hide show
  1. package/_release/product-identity.json +2 -2
  2. package/codex-adapter/dist/codex-evidence-recorder.js +8 -2
  3. package/codex-adapter/dist/index.d.ts +2 -2
  4. package/codex-adapter/dist/index.js +1 -1
  5. package/codex-adapter/dist/ingestion/admission.js +16 -0
  6. package/codex-adapter/dist/ingestion/codex-version.d.ts +10 -4
  7. package/codex-adapter/dist/ingestion/codex-version.js +10 -4
  8. package/codex-adapter/dist/ingestion/explicit-owner-statement.d.ts +48 -0
  9. package/codex-adapter/dist/ingestion/explicit-owner-statement.js +123 -0
  10. package/codex-adapter/dist/ingestion/ingestion.js +50 -1
  11. package/codex-adapter/dist/pd-hook.js +66 -3
  12. package/codex-adapter/dist/worker/workspace-worker.d.ts +14 -0
  13. package/codex-adapter/dist/worker/workspace-worker.js +194 -11
  14. package/codex-adapter/package.json +2 -2
  15. package/console/dist/server/models/ApprovalsConsoleModel.d.ts +2 -2
  16. package/console/dist/server/models/ApprovalsConsoleModel.js +1 -1
  17. package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +1 -1
  18. package/console/dist/server/models/PrinciplesConsoleModel.d.ts +26 -1
  19. package/console/dist/server/models/PrinciplesConsoleModel.js +18 -1
  20. package/console/dist/server/routes/activations.js +4 -4
  21. package/console/dist/server/routes/approvals.js +2 -2
  22. package/console/dist/server/routes/failed-tasks.d.ts +9 -0
  23. package/console/dist/server/routes/failed-tasks.js +116 -7
  24. package/console/dist/server/routes/principles.js +73 -1
  25. package/console/dist/shared/prompt-injection-contract.d.ts +1 -1
  26. package/console/dist/ui/api.d.ts +5 -5
  27. package/console/dist/ui/i18n/en.json +13 -2
  28. package/console/dist/ui/i18n/zh-CN.json +13 -2
  29. package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
  30. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +42 -4
  31. package/console/dist/ui/pages/focus/FocusPage.js +3 -3
  32. package/console/dist/ui/pages/principles/PrinciplesPage.js +7 -2
  33. package/console/dist/ui/utils/validators.d.ts +6 -2
  34. package/console/dist/ui/utils/validators.js +19 -4
  35. package/console/dist/web/assets/app.css +26 -0
  36. package/console/dist/web/assets/app.js +24 -24
  37. package/console/package.json +4 -4
  38. package/core/dist/host/host-installer.d.ts +3 -1
  39. package/core/dist/host/host-installer.d.ts.map +1 -1
  40. package/core/dist/host/host-installer.js.map +1 -1
  41. package/core/dist/runtime-v2/admission-gate.d.ts +8 -0
  42. package/core/dist/runtime-v2/admission-gate.d.ts.map +1 -1
  43. package/core/dist/runtime-v2/admission-gate.js +3 -2
  44. package/core/dist/runtime-v2/admission-gate.js.map +1 -1
  45. package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
  46. package/core/dist/runtime-v2/config/pd-config-defaults.js +16 -1
  47. package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  48. package/core/dist/runtime-v2/context-payload.d.ts +43 -3
  49. package/core/dist/runtime-v2/context-payload.d.ts.map +1 -1
  50. package/core/dist/runtime-v2/context-payload.js +15 -1
  51. package/core/dist/runtime-v2/context-payload.js.map +1 -1
  52. package/core/dist/runtime-v2/evidence-guards.d.ts +6 -0
  53. package/core/dist/runtime-v2/evidence-guards.d.ts.map +1 -1
  54. package/core/dist/runtime-v2/evidence-guards.js +11 -0
  55. package/core/dist/runtime-v2/evidence-guards.js.map +1 -1
  56. package/core/dist/runtime-v2/evolution/evolution-types.d.ts +4 -4
  57. package/core/dist/runtime-v2/evolution/evolution-types.d.ts.map +1 -1
  58. package/core/dist/runtime-v2/evolution/evolution-types.js +1 -1
  59. package/core/dist/runtime-v2/evolution/evolution-types.js.map +1 -1
  60. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  61. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +6 -0
  62. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  63. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.d.ts.map +1 -1
  64. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js +8 -0
  65. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js.map +1 -1
  66. package/core/dist/runtime-v2/index.d.ts +5 -2
  67. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  68. package/core/dist/runtime-v2/index.js +3 -1
  69. package/core/dist/runtime-v2/index.js.map +1 -1
  70. package/core/dist/runtime-v2/internalization/adversarial-feedback.d.ts +3 -1
  71. package/core/dist/runtime-v2/internalization/adversarial-feedback.d.ts.map +1 -1
  72. package/core/dist/runtime-v2/internalization/adversarial-feedback.js +10 -1
  73. package/core/dist/runtime-v2/internalization/adversarial-feedback.js.map +1 -1
  74. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +11 -0
  75. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
  76. package/core/dist/runtime-v2/internalization/evaluator-output.js +10 -0
  77. package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
  78. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +3 -3
  79. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
  80. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js +49 -5
  81. package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
  82. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  83. package/core/dist/runtime-v2/internalization/evaluator-runner.js +13 -16
  84. package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  85. package/core/dist/runtime-v2/internalization/owner-decision-review.d.ts.map +1 -1
  86. package/core/dist/runtime-v2/internalization/owner-decision-review.js +5 -1
  87. package/core/dist/runtime-v2/internalization/owner-decision-review.js.map +1 -1
  88. package/core/dist/runtime-v2/internalization/owner-review.d.ts +2 -2
  89. package/core/dist/runtime-v2/internalization/owner-review.js +2 -2
  90. package/core/dist/runtime-v2/internalization/scribe-output.d.ts +12 -0
  91. package/core/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
  92. package/core/dist/runtime-v2/internalization/scribe-output.js +20 -0
  93. package/core/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
  94. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +32 -1
  95. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  96. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +38 -1
  97. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  98. package/core/dist/runtime-v2/internalization-queue-read-model.d.ts +6 -0
  99. package/core/dist/runtime-v2/internalization-queue-read-model.d.ts.map +1 -1
  100. package/core/dist/runtime-v2/internalization-queue-read-model.js +8 -1
  101. package/core/dist/runtime-v2/internalization-queue-read-model.js.map +1 -1
  102. package/core/dist/runtime-v2/intervention-evidence-normalizer.d.ts.map +1 -1
  103. package/core/dist/runtime-v2/intervention-evidence-normalizer.js +10 -3
  104. package/core/dist/runtime-v2/intervention-evidence-normalizer.js.map +1 -1
  105. package/core/dist/runtime-v2/pain-ingress.d.ts +1 -1
  106. package/core/dist/runtime-v2/pain-ingress.d.ts.map +1 -1
  107. package/core/dist/runtime-v2/pain-signal-bridge.d.ts +68 -2
  108. package/core/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
  109. package/core/dist/runtime-v2/pain-signal-bridge.js +541 -18
  110. package/core/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
  111. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  112. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +4 -0
  113. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  114. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.d.ts +2 -2
  115. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.d.ts.map +1 -1
  116. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.js +2 -2
  117. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.js.map +1 -1
  118. package/core/dist/runtime-v2/store/candidate/admission-document.d.ts +90 -0
  119. package/core/dist/runtime-v2/store/candidate/admission-document.d.ts.map +1 -0
  120. package/core/dist/runtime-v2/store/candidate/admission-document.js +142 -0
  121. package/core/dist/runtime-v2/store/candidate/admission-document.js.map +1 -0
  122. package/core/dist/runtime-v2/store/candidate/candidate-store.d.ts +53 -0
  123. package/core/dist/runtime-v2/store/candidate/candidate-store.d.ts.map +1 -1
  124. package/core/dist/runtime-v2/store/candidate/memory-candidate-store.d.ts +35 -0
  125. package/core/dist/runtime-v2/store/candidate/memory-candidate-store.d.ts.map +1 -1
  126. package/core/dist/runtime-v2/store/candidate/memory-candidate-store.js +48 -0
  127. package/core/dist/runtime-v2/store/candidate/memory-candidate-store.js.map +1 -1
  128. package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.d.ts +44 -0
  129. package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.d.ts.map +1 -1
  130. package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.js +136 -0
  131. package/core/dist/runtime-v2/store/candidate/sqlite-candidate-store.js.map +1 -1
  132. package/core/dist/runtime-v2/store/context/sqlite-context-assembler.js.map +1 -1
  133. package/core/dist/runtime-v2/store/intervention-evidence-schema.js +1 -1
  134. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts +65 -0
  135. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  136. package/core/dist/runtime-v2/store/runtime-state-manager.js +46 -0
  137. package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  138. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  139. package/core/dist/runtime-v2/store/sqlite-connection.js +42 -0
  140. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  141. package/core/dist/runtime-v2/store/sqlite-intervention-evidence-store.d.ts +1 -1
  142. package/core/dist/runtime-v2/store/sqlite-intervention-evidence-store.d.ts.map +1 -1
  143. package/core/dist/runtime-v2/store/sqlite-intervention-evidence-store.js.map +1 -1
  144. package/core/dist/runtime-v2/store/task/sqlite-family-reopen.d.ts +19 -0
  145. package/core/dist/runtime-v2/store/task/sqlite-family-reopen.d.ts.map +1 -0
  146. package/core/dist/runtime-v2/store/task/sqlite-family-reopen.js +36 -0
  147. package/core/dist/runtime-v2/store/task/sqlite-family-reopen.js.map +1 -0
  148. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts +23 -0
  149. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
  150. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +50 -0
  151. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  152. package/core/dist/runtime-v2/task-status.d.ts +3 -1
  153. package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
  154. package/core/dist/runtime-v2/task-status.js +1 -1
  155. package/core/dist/runtime-v2/task-status.js.map +1 -1
  156. package/core/dist/runtime-v2/trajectory-schema.d.ts.map +1 -1
  157. package/core/dist/runtime-v2/trajectory-schema.js +11 -0
  158. package/core/dist/runtime-v2/trajectory-schema.js.map +1 -1
  159. package/core/dist/runtime-v2/types/event-types.d.ts +2 -2
  160. package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  161. package/core/dist/runtime-v2/types/event-types.js +1 -1
  162. package/core/dist/runtime-v2/types/event-types.js.map +1 -1
  163. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +1 -1
  164. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
  165. package/core/dist/runtime-v2/types/evidence-chain-contract.js +2 -2
  166. package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
  167. package/core/dist/runtime-v2/types/intervention-evidence-contract.d.ts +3 -3
  168. package/core/dist/runtime-v2/types/intervention-evidence-contract.d.ts.map +1 -1
  169. package/core/dist/runtime-v2/types/intervention-evidence-contract.js +1 -0
  170. package/core/dist/runtime-v2/types/intervention-evidence-contract.js.map +1 -1
  171. package/core/dist/telemetry-event.d.ts +2 -2
  172. package/core/dist/telemetry-event.d.ts.map +1 -1
  173. package/core/dist/telemetry-event.js +4 -0
  174. package/core/dist/telemetry-event.js.map +1 -1
  175. package/core/dist/trajectory-types.d.ts +2 -2
  176. package/core/dist/trajectory-types.d.ts.map +1 -1
  177. package/core/package.json +3 -3
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +84 -8
  180. package/dist/index.js.map +1 -1
  181. package/dist/installer.d.ts +42 -11
  182. package/dist/installer.d.ts.map +1 -1
  183. package/dist/installer.js +140 -36
  184. package/dist/installer.js.map +1 -1
  185. package/dist/installers/index.d.ts +18 -7
  186. package/dist/installers/index.d.ts.map +1 -1
  187. package/dist/installers/index.js +13 -4
  188. package/dist/installers/index.js.map +1 -1
  189. package/dist/installers/workbuddy-host-installer.d.ts +246 -0
  190. package/dist/installers/workbuddy-host-installer.d.ts.map +1 -0
  191. package/dist/installers/workbuddy-host-installer.js +1419 -0
  192. package/dist/installers/workbuddy-host-installer.js.map +1 -0
  193. package/dist/mvp-config.d.ts +24 -0
  194. package/dist/mvp-config.d.ts.map +1 -1
  195. package/dist/mvp-config.js +36 -0
  196. package/dist/mvp-config.js.map +1 -1
  197. package/dist/prompts.d.ts +13 -0
  198. package/dist/prompts.d.ts.map +1 -1
  199. package/dist/prompts.js +45 -8
  200. package/dist/prompts.js.map +1 -1
  201. package/dist/uninstaller.d.ts +1 -1
  202. package/dist/uninstaller.d.ts.map +1 -1
  203. package/dist/uninstaller.js +29 -4
  204. package/dist/uninstaller.js.map +1 -1
  205. package/host-runtime/dist/governance-signal-admission.d.ts +63 -0
  206. package/host-runtime/dist/governance-signal-admission.js +322 -53
  207. package/host-runtime/dist/host-liveness-contract.js +7 -1
  208. package/host-runtime/dist/index.d.ts +1 -0
  209. package/host-runtime/dist/index.js +5 -1
  210. package/host-runtime/dist/internalization-consumer-cycle.d.ts +12 -0
  211. package/host-runtime/dist/internalization-consumer-cycle.js +43 -1
  212. package/host-runtime/dist/intervention-evidence-ingress.d.ts +1 -1
  213. package/host-runtime/dist/product-telemetry/service.js +1 -1
  214. package/host-runtime/dist/production-pain-evidence.d.ts +59 -1
  215. package/host-runtime/dist/production-pain-evidence.js +200 -17
  216. package/host-runtime/dist/prompt-activation-deliverability.js +5 -4
  217. package/host-runtime/dist/prompt-injection-event-evidence.d.ts +1 -1
  218. package/host-runtime/dist/prompt-injection-event-evidence.js +5 -1
  219. package/host-runtime/dist/prompt-injection-projection.d.ts +14 -5
  220. package/host-runtime/dist/prompt-injection-projection.js +30 -16
  221. package/host-runtime/dist/workbuddy-worker-status.d.ts +24 -0
  222. package/host-runtime/dist/workbuddy-worker-status.js +52 -0
  223. package/host-runtime/package.json +3 -3
  224. package/install-layout/dist/index.d.ts +18 -1
  225. package/install-layout/dist/index.js +15 -2
  226. package/install-layout/package.json +1 -1
  227. package/package.json +6 -5
  228. package/pd-cli/dist/commands/candidate.d.ts.map +1 -1
  229. package/pd-cli/dist/commands/candidate.js +44 -4
  230. package/pd-cli/dist/commands/candidate.js.map +1 -1
  231. package/pd-cli/dist/commands/codex-worker.d.ts.map +1 -1
  232. package/pd-cli/dist/commands/codex-worker.js +30 -1
  233. package/pd-cli/dist/commands/codex-worker.js.map +1 -1
  234. package/pd-cli/dist/commands/config-doctor.d.ts.map +1 -1
  235. package/pd-cli/dist/commands/config-doctor.js +19 -4
  236. package/pd-cli/dist/commands/config-doctor.js.map +1 -1
  237. package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
  238. package/pd-cli/dist/commands/diagnose.js +4 -1
  239. package/pd-cli/dist/commands/diagnose.js.map +1 -1
  240. package/pd-cli/dist/commands/health-codex-install.d.ts +85 -0
  241. package/pd-cli/dist/commands/health-codex-install.d.ts.map +1 -0
  242. package/pd-cli/dist/commands/health-codex-install.js +207 -0
  243. package/pd-cli/dist/commands/health-codex-install.js.map +1 -0
  244. package/pd-cli/dist/commands/health-codex.d.ts.map +1 -1
  245. package/pd-cli/dist/commands/health-codex.js +78 -0
  246. package/pd-cli/dist/commands/health-codex.js.map +1 -1
  247. package/pd-cli/dist/commands/pain-list.d.ts +3 -2
  248. package/pd-cli/dist/commands/pain-list.d.ts.map +1 -1
  249. package/pd-cli/dist/commands/pain-list.js +10 -10
  250. package/pd-cli/dist/commands/pain-list.js.map +1 -1
  251. package/pd-cli/dist/commands/pain-record.d.ts +2 -0
  252. package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
  253. package/pd-cli/dist/commands/pain-record.js +36 -0
  254. package/pd-cli/dist/commands/pain-record.js.map +1 -1
  255. package/pd-cli/dist/commands/pain-retry.d.ts +6 -0
  256. package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -1
  257. package/pd-cli/dist/commands/pain-retry.js +152 -5
  258. package/pd-cli/dist/commands/pain-retry.js.map +1 -1
  259. package/pd-cli/dist/commands/runtime-activation.d.ts +1 -1
  260. package/pd-cli/dist/commands/runtime-activation.d.ts.map +1 -1
  261. package/pd-cli/dist/commands/runtime-activation.js +3 -3
  262. package/pd-cli/dist/commands/runtime-activation.js.map +1 -1
  263. package/pd-cli/dist/commands/workbuddy-worker.d.ts +19 -0
  264. package/pd-cli/dist/commands/workbuddy-worker.d.ts.map +1 -0
  265. package/pd-cli/dist/commands/workbuddy-worker.js +168 -0
  266. package/pd-cli/dist/commands/workbuddy-worker.js.map +1 -0
  267. package/pd-cli/dist/index.js +29 -1
  268. package/pd-cli/dist/index.js.map +1 -1
  269. package/pd-cli/dist/resolve-workspace.d.ts +14 -2
  270. package/pd-cli/dist/resolve-workspace.d.ts.map +1 -1
  271. package/pd-cli/dist/resolve-workspace.js +88 -21
  272. package/pd-cli/dist/resolve-workspace.js.map +1 -1
  273. package/pd-cli/dist/services/admission-write-gate.d.ts +24 -0
  274. package/pd-cli/dist/services/admission-write-gate.d.ts.map +1 -0
  275. package/pd-cli/dist/services/admission-write-gate.js +41 -0
  276. package/pd-cli/dist/services/admission-write-gate.js.map +1 -0
  277. package/pd-cli/dist/services/pd-config-loader.d.ts +39 -7
  278. package/pd-cli/dist/services/pd-config-loader.d.ts.map +1 -1
  279. package/pd-cli/dist/services/pd-config-loader.js +111 -18
  280. package/pd-cli/dist/services/pd-config-loader.js.map +1 -1
  281. package/pd-cli/dist/services/rulehost-pipeline-runner.d.ts +10 -0
  282. package/pd-cli/dist/services/rulehost-pipeline-runner.d.ts.map +1 -1
  283. package/pd-cli/dist/services/rulehost-pipeline-runner.js +59 -4
  284. package/pd-cli/dist/services/rulehost-pipeline-runner.js.map +1 -1
  285. package/pd-cli/package.json +4 -3
  286. package/plugin/dist/bundle.js +564 -509
  287. package/plugin/dist/governance-audit.js +1 -1
  288. package/plugin/dist/openclaw.plugin.json +1 -1
  289. package/plugin/dist/rulehost-evidence.js +1 -1
  290. package/plugin/openclaw.plugin.json +1 -1
  291. package/plugin/package.json +3 -3
  292. package/release-manager/dist/index.d.ts.map +1 -1
  293. package/release-manager/dist/index.js +84 -8
  294. package/release-manager/dist/index.js.map +1 -1
  295. package/release-manager/dist/installer.d.ts +42 -11
  296. package/release-manager/dist/installer.d.ts.map +1 -1
  297. package/release-manager/dist/installer.js +140 -36
  298. package/release-manager/dist/installer.js.map +1 -1
  299. package/release-manager/dist/installers/index.d.ts +18 -7
  300. package/release-manager/dist/installers/index.d.ts.map +1 -1
  301. package/release-manager/dist/installers/index.js +13 -4
  302. package/release-manager/dist/installers/index.js.map +1 -1
  303. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +246 -0
  304. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +1 -0
  305. package/release-manager/dist/installers/workbuddy-host-installer.js +1419 -0
  306. package/release-manager/dist/installers/workbuddy-host-installer.js.map +1 -0
  307. package/release-manager/dist/mvp-config.d.ts +24 -0
  308. package/release-manager/dist/mvp-config.d.ts.map +1 -1
  309. package/release-manager/dist/mvp-config.js +36 -0
  310. package/release-manager/dist/mvp-config.js.map +1 -1
  311. package/release-manager/dist/prompts.d.ts +13 -0
  312. package/release-manager/dist/prompts.d.ts.map +1 -1
  313. package/release-manager/dist/prompts.js +45 -8
  314. package/release-manager/dist/prompts.js.map +1 -1
  315. package/release-manager/dist/uninstaller.d.ts +1 -1
  316. package/release-manager/dist/uninstaller.d.ts.map +1 -1
  317. package/release-manager/dist/uninstaller.js +29 -4
  318. package/release-manager/dist/uninstaller.js.map +1 -1
  319. package/release-manager/package.json +5 -4
  320. package/workbuddy-adapter/dist/codec/index.d.ts +2 -0
  321. package/workbuddy-adapter/dist/codec/index.js +2 -0
  322. package/workbuddy-adapter/dist/codec/input-decoder.d.ts +30 -0
  323. package/workbuddy-adapter/dist/codec/input-decoder.js +232 -0
  324. package/workbuddy-adapter/dist/codec/output-encoder.d.ts +62 -0
  325. package/workbuddy-adapter/dist/codec/output-encoder.js +75 -0
  326. package/workbuddy-adapter/dist/host-adapter.d.ts +33 -0
  327. package/workbuddy-adapter/dist/host-adapter.js +23 -0
  328. package/workbuddy-adapter/dist/index.d.ts +16 -0
  329. package/workbuddy-adapter/dist/index.js +16 -0
  330. package/workbuddy-adapter/dist/pd-hook.d.ts +17 -0
  331. package/workbuddy-adapter/dist/pd-hook.js +505 -0
  332. package/workbuddy-adapter/dist/tool-semantics.d.ts +22 -0
  333. package/workbuddy-adapter/dist/tool-semantics.js +33 -0
  334. package/workbuddy-adapter/dist/workbuddy-evidence-recorder.d.ts +50 -0
  335. package/workbuddy-adapter/dist/workbuddy-evidence-recorder.js +238 -0
  336. package/workbuddy-adapter/dist/worker/workspace-worker.d.ts +41 -0
  337. package/workbuddy-adapter/dist/worker/workspace-worker.js +219 -0
  338. package/workbuddy-adapter/dist/workspace-resolution.d.ts +15 -0
  339. package/workbuddy-adapter/dist/workspace-resolution.js +53 -0
  340. package/workbuddy-adapter/package.json +62 -0
  341. package/workbuddy-adapter/plugin/.codebuddy-plugin/plugin.json +6 -0
  342. package/workbuddy-adapter/plugin/hooks/hooks.json +62 -0
  343. package/workbuddy-adapter/plugin/scripts/wrapper.cjs +79 -0
package/dist/installer.js CHANGED
@@ -11,9 +11,9 @@ import { select } from '@inquirer/prompts';
11
11
  import { logger } from './utils/logger.js';
12
12
  import { checkOpenClawGateway, stopOpenClawGateway, restartOpenClawGateway } from './utils/env.js';
13
13
  import { t } from './i18n.js';
14
- import { generateConfigYamlContent, ExistingConfigVerifyInfraError, validateExistingConfigYamlForPreserve, getConfigYamlPath, readEnabledChannelsFromConfigYaml, getOpenClawDir, getPdDir, getPdRuntimeDir, getInstallManifestPath, getPdRuntimeBackupsDir, getPluginExtDir, getInstalledPluginDir, getInstalledLayoutPackageDir, getPdBackupsDir, getInstalledPdCliDir, getInstalledBinDir, getInstalledConsoleDir, isWindows, } from './mvp-config.js';
14
+ import { generateConfigYamlContent, ExistingConfigVerifyInfraError, validateExistingConfigYamlForPreserve, getConfigYamlPath, readEnabledChannelsFromConfigYaml, getOpenClawDir, getPdDir, getPdRuntimeDir, getInstallManifestPath, getPdRuntimeBackupsDir, getPluginExtDir, getInstalledPluginDir, getInstalledLayoutPackageDir, getPdBackupsDir, getInstalledPdCliDir, getInstalledBinDir, getInstalledConsoleDir, getHomeDir, isWindows, } from './mvp-config.js';
15
15
  import { getHostInstallers } from './installers/index.js';
16
- import { mergeInstallManifestWorkspaces, parseInstallManifest } from '@principles/install-layout';
16
+ import { INSTALL_LAYOUT_VERSION, getWorkbuddyWorkspaceDir, mergeInstallManifestWorkspaces, parseInstallManifest } from '@principles/install-layout';
17
17
  import { detectOpenClawMainWorkspaceDivergence } from './utils/workspace-divergence.js';
18
18
  import { applySkillLanguageSelection } from './skill-language.js';
19
19
  import { parseReleaseAssetIdentity, parseReleaseAssetManifest, ReleaseAssetManifestError, verifyReleaseAssetManifestAsync, verifyReleaseAssetTarget, } from './update/release-asset-manifest.js';
@@ -142,6 +142,10 @@ export function mergeInstallManifestHosts(current, host) {
142
142
  hosts.add('codex');
143
143
  if (host === 'all' || host === 'openclaw')
144
144
  hosts.add('openclaw');
145
+ // WorkBuddy is its own explicit target — 'all' must not attach a third host
146
+ // the operator never asked for (SPEC workbuddy-host-adapter §6, OD-03).
147
+ if (host === 'workbuddy')
148
+ hosts.add('workbuddy');
145
149
  return [...hosts];
146
150
  }
147
151
  function resolveInstallManifestHosts(host) {
@@ -159,8 +163,13 @@ function resolveInstallManifestHosts(host) {
159
163
  * PRI-624 Slice C: the install manifest records every Workspace this install
160
164
  * serves so the Companion can discover its per-Workspace workers (SPEC §13
161
165
  * "canonical install manifest"). Idempotent by canonical path.
166
+ *
167
+ * WorkBuddy (SPEC workbuddy-host-adapter §6): when the run targets workbuddy,
168
+ * the OD-07 governance workspace (~/.workbuddy/pd-workspace) is registered the
169
+ * same way — derived from install-layout, never hand-joined, never reused from
170
+ * another host's state.
162
171
  */
163
- function resolveInstallManifestWorkspaces(workspaceDir) {
172
+ function resolveInstallManifestWorkspaces(workspaceDir, host) {
164
173
  let current;
165
174
  try {
166
175
  current = JSON.parse(readFileSync(getInstallManifestPath(), 'utf8'));
@@ -173,7 +182,13 @@ function resolveInstallManifestWorkspaces(workspaceDir) {
173
182
  if (current !== undefined && !parsed.manifest) {
174
183
  throw new Error(parsed.error ?? 'install_manifest_malformed');
175
184
  }
176
- return mergeInstallManifestWorkspaces(parsed.manifest, path.resolve(workspaceDir));
185
+ let workspaces = mergeInstallManifestWorkspaces(parsed.manifest, path.resolve(workspaceDir));
186
+ if (host === 'workbuddy') {
187
+ // Set-union via the same authority helper — order of existing entries is
188
+ // preserved, the governance dir is appended when absent (idempotent).
189
+ workspaces = mergeInstallManifestWorkspaces({ layoutVersion: parsed.manifest?.layoutVersion ?? INSTALL_LAYOUT_VERSION, mode: parsed.manifest?.mode ?? 'canonical', hosts: parsed.manifest?.hosts ?? [], workspaces }, getWorkbuddyWorkspaceDir(getHomeDir()));
190
+ }
191
+ return workspaces;
177
192
  }
178
193
  function writeInstallManifest(hosts, workspaces) {
179
194
  mkdirSync(getPdDir(), { recursive: true });
@@ -1844,6 +1859,20 @@ function verifyPdCliShim() {
1844
1859
  }
1845
1860
  localError = detail;
1846
1861
  logger.warn(`PD CLI local verification failed: ${detail}`);
1862
+ // First-install sequencing (WorkBuddy remediation): on a fresh home the
1863
+ // ~/.pd active record is written only at commit (AFTER this verify), and
1864
+ // host targets that deploy no OpenClaw legacy overlay (--host workbuddy)
1865
+ // have no fallback branch in the version report — so the version probe
1866
+ // legitimately reports active_record_missing here. That exact shape
1867
+ // proves the deployed CLI EXECUTES (entry reachable, imports resolved);
1868
+ // activation arrives at commit. Strict behavior is preserved whenever an
1869
+ // active record already exists (upgrades).
1870
+ const activeRecordPath = path.join(getPdDir(), 'active.json');
1871
+ if (!localOk && detail.includes('no active release record') && !existsSync(activeRecordPath)) {
1872
+ localOk = true;
1873
+ localError = undefined;
1874
+ logger.info('PD CLI executed without an activation record (first install); the record is written at commit.');
1875
+ }
1847
1876
  }
1848
1877
  const globalOk = (() => {
1849
1878
  try {
@@ -1976,6 +2005,9 @@ function getInstalledHostRuntimeDir() {
1976
2005
  function getInstalledCodexAdapterDir() {
1977
2006
  return path.join(getPdRuntimeDir(), 'codex-adapter');
1978
2007
  }
2008
+ function getInstalledWorkbuddyAdapterDir() {
2009
+ return path.join(getPdRuntimeDir(), 'workbuddy-adapter');
2010
+ }
1979
2011
  function installBundledCore(pluginDir) {
1980
2012
  const coreSrc = path.join(pluginDir, 'core');
1981
2013
  const coreDest = getInstalledCoreDir();
@@ -2024,40 +2056,30 @@ function installBundledCodexAdapter(pluginDir) {
2024
2056
  cpSync(codexAdapterSrc, codexAdapterDest, { recursive: true });
2025
2057
  }
2026
2058
  /**
2027
- * PRI-711: materialize node_modules links for the INSTALLED codex-adapter so
2028
- * its declared `file:../<component>` dependencies resolve under ESM realpath
2029
- * rules. The adapter's dist imports @principles/host-runtime and
2030
- * @principles/core, and pd-cli's eager import graph (health-codex) statically
2031
- * imports the adapter — without these links every pd command dies with
2032
- * ERR_MODULE_NOT_FOUND at startup (observed 2026-09-09: the 1.231.2 full
2033
- * update swapped in Slice-D pd-cli while the deployed adapter, laid down by
2034
- * older installers, had no node_modules at all).
2035
- *
2036
- * Data-driven from the deployed adapter manifest: every dependency whose ref
2037
- * starts with `file:../` names a sibling runtime component directory. An
2038
- * existing correct link is kept; a stale physical copy (self-contained
2039
- * payloads ship materialized node_modules) or a wrong-target link is
2040
- * replaced with the canonical junction/symlink, mirroring syncPdCli.
2041
- * Idempotent. MUST run after installBundledCodexAdapter AND the
2042
- * core/host-runtime/install-layout installs — the manifest declares all
2043
- * three as file:../ siblings, and a missing sibling means a corrupted
2059
+ * PRI-711 (generalized for ADR-0020 host adapters): materialize node_modules
2060
+ * links for an INSTALLED runtime component so its declared `file:../<component>`
2061
+ * dependencies resolve under ESM realpath rules. Data-driven from the deployed
2062
+ * manifest: every dependency whose ref starts with `file:../` names a sibling
2063
+ * runtime component directory. An existing correct link is kept; a stale
2064
+ * physical copy or a wrong-target link is replaced with the canonical
2065
+ * junction/symlink. Idempotent. MUST run after the component AND all its
2066
+ * file:../ siblings are installed — a missing sibling means a corrupted
2044
2067
  * payload or a call-order regression, which fails the install loudly.
2045
2068
  */
2046
- export function ensureCodexAdapterResolution() {
2047
- const codexAdapterDir = getInstalledCodexAdapterDir();
2048
- const manifestPath = path.join(codexAdapterDir, 'package.json');
2069
+ function ensureComponentFileDependencyLinks(componentDir, componentLabel) {
2070
+ const manifestPath = path.join(componentDir, 'package.json');
2049
2071
  let manifest;
2050
2072
  try {
2051
2073
  manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
2052
2074
  }
2053
2075
  catch (error) {
2054
- throw new Error(`Installed @principles/codex-adapter package.json is missing or malformed (${manifestPath}): ${error instanceof Error ? error.message : String(error)}`, { cause: error });
2076
+ throw new Error(`Installed ${componentLabel} package.json is missing or malformed (${manifestPath}): ${error instanceof Error ? error.message : String(error)}`, { cause: error });
2055
2077
  }
2056
2078
  if (!isRecord(manifest)) {
2057
- throw new Error(`Installed @principles/codex-adapter package.json must contain an object (${manifestPath}).`);
2079
+ throw new Error(`Installed ${componentLabel} package.json must contain an object (${manifestPath}).`);
2058
2080
  }
2059
2081
  if (manifest.dependencies !== undefined && !isRecord(manifest.dependencies)) {
2060
- throw new Error(`Installed @principles/codex-adapter package.json dependencies must be an object (${manifestPath}).`);
2082
+ throw new Error(`Installed ${componentLabel} package.json dependencies must be an object (${manifestPath}).`);
2061
2083
  }
2062
2084
  const runtimeDir = getPdRuntimeDir();
2063
2085
  for (const [name, ref] of Object.entries(manifest.dependencies ?? {})) {
@@ -2067,13 +2089,13 @@ export function ensureCodexAdapterResolution() {
2067
2089
  // rc-1: the manifest is untrusted input — only accept single-path segment
2068
2090
  // siblings so a crafted ref cannot escape the runtime dir.
2069
2091
  if (!/^[A-Za-z0-9._-]+$/.test(siblingName) || siblingName === '.' || siblingName === '..') {
2070
- throw new Error(`Installed @principles/codex-adapter declares an unsupported file dependency ref "${ref}" for ${name}.`);
2092
+ throw new Error(`Installed ${componentLabel} declares an unsupported file dependency ref "${ref}" for ${name}.`);
2071
2093
  }
2072
2094
  const siblingDir = path.join(runtimeDir, siblingName);
2073
2095
  if (!existsSync(siblingDir)) {
2074
- throw new Error(`@principles/codex-adapter depends on ${ref} but the sibling runtime component is missing: ${siblingDir}`);
2096
+ throw new Error(`${componentLabel} depends on ${ref} but the sibling runtime component is missing: ${siblingDir}`);
2075
2097
  }
2076
- const linkPath = path.join(codexAdapterDir, 'node_modules', name);
2098
+ const linkPath = path.join(componentDir, 'node_modules', name);
2077
2099
  let stat;
2078
2100
  try {
2079
2101
  stat = lstatSync(linkPath);
@@ -2102,6 +2124,61 @@ export function ensureCodexAdapterResolution() {
2102
2124
  }
2103
2125
  }
2104
2126
  }
2127
+ /**
2128
+ * PRI-711: materialize node_modules links for the INSTALLED codex-adapter so
2129
+ * its declared `file:../<component>` dependencies resolve under ESM realpath
2130
+ * rules. The adapter's dist imports @principles/host-runtime and
2131
+ * @principles/core, and pd-cli's eager import graph (health-codex) statically
2132
+ * imports the adapter — without these links every pd command dies with
2133
+ * ERR_MODULE_NOT_FOUND at startup (observed 2026-09-09: the 1.231.2 full
2134
+ * update swapped in Slice-D pd-cli while the deployed adapter, laid down by
2135
+ * older installers, had no node_modules at all).
2136
+ */
2137
+ export function ensureCodexAdapterResolution() {
2138
+ ensureComponentFileDependencyLinks(getInstalledCodexAdapterDir(), '@principles/codex-adapter');
2139
+ }
2140
+ /**
2141
+ * SPEC workbuddy-host-adapter §4.1/§5: the bundled @principles/workbuddy-adapter
2142
+ * payload installs as a runtime sibling exactly like codex-adapter, and its
2143
+ * `file:../<component>` dependency links are materialized the same way so the
2144
+ * plugin wrapper resolves core/host-runtime/install-layout under ESM realpath
2145
+ * rules.
2146
+ *
2147
+ * Unlike codex-adapter, the payload's ABSENCE is an observable skip, not a
2148
+ * failure: installer builds published before the adapter component landed (or
2149
+ * cut from a tree where it is not yet bundled) still deploy OpenClaw/Codex
2150
+ * untouched; the WorkBuddy host installer then reports
2151
+ * workbuddy_adapter_payload_missing for --host workbuddy (rc-9).
2152
+ */
2153
+ export function installBundledWorkbuddyAdapter(pluginDir) {
2154
+ const workbuddyAdapterSrc = path.join(pluginDir, 'workbuddy-adapter');
2155
+ const workbuddyAdapterDest = getInstalledWorkbuddyAdapterDir();
2156
+ if (!existsSync(workbuddyAdapterSrc)) {
2157
+ logger.warn(`Bundled @principles/workbuddy-adapter not found in this installer package (${workbuddyAdapterSrc}) — the WorkBuddy host stays unavailable in this deployment. OpenClaw/Codex installation is unaffected.`);
2158
+ return false;
2159
+ }
2160
+ const workbuddyAdapterPkgJson = path.join(workbuddyAdapterSrc, 'package.json');
2161
+ const workbuddyAdapterDist = path.join(workbuddyAdapterSrc, 'dist');
2162
+ if (!existsSync(workbuddyAdapterPkgJson) || !existsSync(workbuddyAdapterDist)) {
2163
+ throw new Error('Bundled @principles/workbuddy-adapter is incomplete (missing package.json or dist). Package may be corrupted.');
2164
+ }
2165
+ rmSync(workbuddyAdapterDest, { recursive: true, force: true });
2166
+ cpSync(workbuddyAdapterSrc, workbuddyAdapterDest, { recursive: true });
2167
+ return true;
2168
+ }
2169
+ /**
2170
+ * Materialize the resolution links for the INSTALLED workbuddy-adapter.
2171
+ * Mirrors ensureCodexAdapterResolution; tolerates the component's absence
2172
+ * (observable skip — see installBundledWorkbuddyAdapter).
2173
+ */
2174
+ export function ensureWorkbuddyAdapterResolution() {
2175
+ const workbuddyAdapterDir = getInstalledWorkbuddyAdapterDir();
2176
+ if (!existsSync(workbuddyAdapterDir)) {
2177
+ return { installed: false, skipReason: 'workbuddy_adapter_not_installed' };
2178
+ }
2179
+ ensureComponentFileDependencyLinks(workbuddyAdapterDir, '@principles/workbuddy-adapter');
2180
+ return { installed: true };
2181
+ }
2105
2182
  const CORE_JUNCTION_PACKAGE = '@principles/core';
2106
2183
  /** Reads a package.json `name` as untrusted input (rc-1); null when absent/malformed. */
2107
2184
  function readPackageJsonName(manifestPath) {
@@ -2547,6 +2624,16 @@ function probeAutolaunchHealth(port, timeoutMs = 1500) {
2547
2624
  * EP-04: detached + unref keeps the console running after the installer exits.
2548
2625
  * EP-06: reuses pd-cli's handleConsoleOpen via the CLI entry — no new launcher.
2549
2626
  */
2627
+ /**
2628
+ * WorkBuddy remediation (review 2026-10-13 §4 P1): the auto-launched Console,
2629
+ * canary and manual-open instructions must manage the directory the host's
2630
+ * hook/worker actually read. For the WorkBuddy host that is the dedicated
2631
+ * governance workspace (SPEC §4.1) — NOT the project directory, which is only
2632
+ * the task project path. Other hosts keep the project workspace.
2633
+ */
2634
+ export function resolveConsoleWorkspaceDir(host, projectWorkspaceDir, homeDir) {
2635
+ return host === 'workbuddy' ? getWorkbuddyWorkspaceDir(homeDir) : projectWorkspaceDir;
2636
+ }
2550
2637
  async function autoLaunchConsole(workspaceDir) {
2551
2638
  // Test/smoke seam (mirrors PD_SKIP_GLOBAL_SHIM): isolated installs (release
2552
2639
  // smoke, upgrade gate) must not spawn a detached console that holds the
@@ -3228,6 +3315,14 @@ transaction) {
3228
3315
  // siblings exist — the manifest declares file:../core, file:../host-runtime
3229
3316
  // AND file:../install-layout, and install-layout lands just above.
3230
3317
  ensureCodexAdapterResolution();
3318
+ // WorkBuddy third host (SPEC workbuddy-host-adapter §5 build/delivery
3319
+ // face): the adapter payload refreshes on every runtime deployment like
3320
+ // its codex sibling — updates rewrite the dir and its resolution links,
3321
+ // while WorkBuddy plugin registration and governance data are owned by
3322
+ // the host installer and preserved. Absence of the payload in older
3323
+ // installer builds is an observable skip, not a failure.
3324
+ installBundledWorkbuddyAdapter(pluginDir);
3325
+ ensureWorkbuddyAdapterResolution();
3231
3326
  if (spinner)
3232
3327
  updateProgress(spinner, stepIndex, 'Installing release-manager authority module...');
3233
3328
  installBundledReleaseManagerPackage(pluginDir);
@@ -3331,7 +3426,12 @@ transaction) {
3331
3426
  stepIndex++;
3332
3427
  if (spinner)
3333
3428
  updateProgress(spinner, stepIndex, 'Generating config.yaml...');
3334
- const configYamlPath = await generateConfigYamlConfig(options.workspaceDir, options.runtimeProfile);
3429
+ // Round-3 remediation P1: for the WorkBuddy host the LLM runtime profile
3430
+ // is GOVERNANCE state — WorkBuddyHostInstaller applies it to the
3431
+ // governance workspace config (the file its worker/console/hook chain
3432
+ // reads). Writing it here too would create a second truth. Other hosts
3433
+ // keep the historical project-dir profile (Fix-4 behavior, unchanged).
3434
+ const configYamlPath = await generateConfigYamlConfig(options.workspaceDir, options.host === 'workbuddy' ? undefined : options.runtimeProfile);
3335
3435
  verification.features = 'passed';
3336
3436
  stepIndex++;
3337
3437
  if (spinner)
@@ -3411,6 +3511,7 @@ transaction) {
3411
3511
  provider: options.runtimeProfile.provider,
3412
3512
  model: options.runtimeProfile.model,
3413
3513
  apiKeyEnv: options.runtimeProfile.apiKeyEnv,
3514
+ baseUrl: options.runtimeProfile.baseUrl,
3414
3515
  }
3415
3516
  : undefined,
3416
3517
  });
@@ -3433,7 +3534,7 @@ transaction) {
3433
3534
  if (hostFailures.length > 0) {
3434
3535
  throw new Error(`Host installation failed: ${hostFailures.join(' | ')}`);
3435
3536
  }
3436
- writeInstallManifest(installManifestHosts, resolveInstallManifestWorkspaces(options.workspaceDir));
3537
+ writeInstallManifest(installManifestHosts, resolveInstallManifestWorkspaces(options.workspaceDir, options.host));
3437
3538
  // PRI-709 P0-1: persist the metadata source after the manifest write, so
3438
3539
  // the durable tier cannot be clobbered by the same install.
3439
3540
  persistReleaseMetadataSource();
@@ -3504,7 +3605,10 @@ transaction) {
3504
3605
  // Task 8: auto-launch console via `pd console open` (reuses PRI-300
3505
3606
  // handleConsoleOpen — no new launcher subsystem). Opens the browser to
3506
3607
  // /welcome for onboarding. Detached so the console survives installer exit.
3507
- const launchResult = await autoLaunchConsole(options.workspaceDir);
3608
+ // WorkBuddy remediation: the console manages the GOVERNANCE workspace for
3609
+ // this host — the directory hook/worker read — never the project dir.
3610
+ const consoleWorkspaceDir = resolveConsoleWorkspaceDir(activeHostTarget, options.workspaceDir, getHomeDir());
3611
+ const launchResult = await autoLaunchConsole(consoleWorkspaceDir);
3508
3612
  // PRI-645: report the ACTUAL effective channels (registry default +
3509
3613
  // sparse override). Never mask an explicit Owner disable with the
3510
3614
  // requested channels — that would re-create ERR-042 (reporting the
@@ -3517,10 +3621,10 @@ transaction) {
3517
3621
  // success=false and be guided to fix the failed host.
3518
3622
  const nextActions = [];
3519
3623
  if (components.cli === 'verified') {
3520
- nextActions.push(`pd runtime canary --workspace "${options.workspaceDir}" --json`);
3624
+ nextActions.push(`pd runtime canary --workspace "${consoleWorkspaceDir}" --json`);
3521
3625
  }
3522
3626
  else if (components.cli === 'verified_local_only' && components.cliLocalPath) {
3523
- nextActions.push(`"${components.cliLocalPath}" runtime canary --workspace "${options.workspaceDir}" --json`);
3627
+ nextActions.push(`"${components.cliLocalPath}" runtime canary --workspace "${consoleWorkspaceDir}" --json`);
3524
3628
  }
3525
3629
  if (components.console === 'configured') {
3526
3630
  if (launchResult.consoleUrl) {
@@ -3529,7 +3633,7 @@ transaction) {
3529
3633
  }
3530
3634
  else {
3531
3635
  // EP-03: auto-launch did not succeed — keep manual start instruction.
3532
- nextActions.push(`pd console --workspace "${options.workspaceDir}" --no-auth (listens on 127.0.0.1 only)`);
3636
+ nextActions.push(`pd console --workspace "${consoleWorkspaceDir}" --no-auth (listens on 127.0.0.1 only)`);
3533
3637
  }
3534
3638
  }
3535
3639
  if (launchResult.fallbackAction) {