create-principles-disciple 1.92.0 → 1.94.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 (335) hide show
  1. package/console/dist/server/config/AuthConfig.js +6 -0
  2. package/console/dist/server/config/pd-config-store.d.ts +7 -1
  3. package/console/dist/server/config/pd-config-store.js +11 -1
  4. package/console/dist/server/index.js +41 -22
  5. package/console/dist/server/models/ApprovalsConsoleModel.js +4 -12
  6. package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +6 -3
  7. package/console/dist/server/models/ConsoleLifecycleDatasource.js +1 -1
  8. package/console/dist/server/routes/activations.js +4 -0
  9. package/console/dist/server/routes/approvals.js +24 -4
  10. package/console/dist/server/routes/feedback-reports.js +7 -5
  11. package/console/dist/server/routes/lifecycle.js +6 -1
  12. package/console/dist/server/routes/principles.js +10 -2
  13. package/console/dist/server/routes/workspaces.js +4 -0
  14. package/console/dist/ui/components/ui/charts.js +4 -1
  15. package/console/dist/ui/components/ui/markdown.js +9 -5
  16. package/console/dist/ui/utils/enum-labels.js +4 -1
  17. package/console/dist/web/assets/app.js +5 -2
  18. package/core/dist/index.d.ts +2 -3
  19. package/core/dist/index.d.ts.map +1 -1
  20. package/core/dist/index.js +1 -3
  21. package/core/dist/index.js.map +1 -1
  22. package/core/dist/pain-signal.d.ts +11 -71
  23. package/core/dist/pain-signal.d.ts.map +1 -1
  24. package/core/dist/pain-signal.js +10 -120
  25. package/core/dist/pain-signal.js.map +1 -1
  26. package/core/dist/principle-tree-ledger.d.ts +4 -87
  27. package/core/dist/principle-tree-ledger.d.ts.map +1 -1
  28. package/core/dist/principle-tree-ledger.js +51 -148
  29. package/core/dist/principle-tree-ledger.js.map +1 -1
  30. package/core/dist/prompt-builder/__tests__/model-config.test.d.ts +2 -0
  31. package/core/dist/prompt-builder/__tests__/model-config.test.d.ts.map +1 -0
  32. package/core/dist/prompt-builder/__tests__/model-config.test.js +158 -0
  33. package/core/dist/prompt-builder/__tests__/model-config.test.js.map +1 -0
  34. package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts +2 -0
  35. package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts.map +1 -0
  36. package/core/dist/prompt-builder/__tests__/xml-escape.test.js +42 -0
  37. package/core/dist/prompt-builder/__tests__/xml-escape.test.js.map +1 -0
  38. package/core/dist/prompt-builder/index.d.ts +3 -0
  39. package/core/dist/prompt-builder/index.d.ts.map +1 -1
  40. package/core/dist/prompt-builder/index.js +2 -0
  41. package/core/dist/prompt-builder/index.js.map +1 -1
  42. package/core/dist/prompt-builder/model-config.d.ts +42 -0
  43. package/core/dist/prompt-builder/model-config.d.ts.map +1 -0
  44. package/core/dist/prompt-builder/model-config.js +84 -0
  45. package/core/dist/prompt-builder/model-config.js.map +1 -0
  46. package/core/dist/prompt-builder/xml-escape.d.ts +12 -0
  47. package/core/dist/prompt-builder/xml-escape.d.ts.map +1 -0
  48. package/core/dist/prompt-builder/xml-escape.js +19 -0
  49. package/core/dist/prompt-builder/xml-escape.js.map +1 -0
  50. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +265 -20
  51. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  52. package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts +12 -0
  53. package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.d.ts.map +1 -0
  54. package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js +46 -0
  55. package/core/dist/runtime-v2/__tests__/barrel-io-cleanup.test.js.map +1 -0
  56. package/core/dist/runtime-v2/__tests__/io-deletion.test.d.ts +12 -0
  57. package/core/dist/runtime-v2/__tests__/io-deletion.test.d.ts.map +1 -0
  58. package/core/dist/runtime-v2/__tests__/io-deletion.test.js +92 -0
  59. package/core/dist/runtime-v2/__tests__/io-deletion.test.js.map +1 -0
  60. package/core/dist/runtime-v2/__tests__/ledger-codec.test.d.ts +2 -0
  61. package/core/dist/runtime-v2/__tests__/ledger-codec.test.d.ts.map +1 -0
  62. package/core/dist/runtime-v2/__tests__/ledger-codec.test.js +429 -0
  63. package/core/dist/runtime-v2/__tests__/ledger-codec.test.js.map +1 -0
  64. package/core/dist/runtime-v2/__tests__/ledger-store.test.d.ts +2 -0
  65. package/core/dist/runtime-v2/__tests__/ledger-store.test.d.ts.map +1 -0
  66. package/core/dist/runtime-v2/__tests__/ledger-store.test.js +65 -0
  67. package/core/dist/runtime-v2/__tests__/ledger-store.test.js.map +1 -0
  68. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts +2 -0
  69. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts.map +1 -0
  70. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js +395 -0
  71. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -0
  72. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +146 -0
  73. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  74. package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts +2 -0
  75. package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.d.ts.map +1 -0
  76. package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.js +150 -0
  77. package/core/dist/runtime-v2/__tests__/pain-signal-unification.test.js.map +1 -0
  78. package/core/dist/runtime-v2/adapter/__tests__/test-double-runtime-adapter.test.js +199 -0
  79. package/core/dist/runtime-v2/adapter/__tests__/test-double-runtime-adapter.test.js.map +1 -1
  80. package/core/dist/runtime-v2/bridge-result-shaper.d.ts +53 -0
  81. package/core/dist/runtime-v2/bridge-result-shaper.d.ts.map +1 -0
  82. package/core/dist/runtime-v2/bridge-result-shaper.js +117 -0
  83. package/core/dist/runtime-v2/bridge-result-shaper.js.map +1 -0
  84. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts +13 -0
  85. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts.map +1 -0
  86. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js +111 -0
  87. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js.map +1 -0
  88. package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts +103 -0
  89. package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts.map +1 -0
  90. package/core/dist/runtime-v2/detection/detection-funnel-policy.js +135 -0
  91. package/core/dist/runtime-v2/detection/detection-funnel-policy.js.map +1 -0
  92. package/core/dist/runtime-v2/detection/index.d.ts +10 -0
  93. package/core/dist/runtime-v2/detection/index.d.ts.map +1 -0
  94. package/core/dist/runtime-v2/detection/index.js +9 -0
  95. package/core/dist/runtime-v2/detection/index.js.map +1 -0
  96. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +156 -0
  97. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
  98. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts +12 -0
  99. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts.map +1 -0
  100. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js +181 -0
  101. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js.map +1 -0
  102. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +104 -1
  103. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -1
  104. package/core/dist/runtime-v2/evidence-triage/index.d.ts +3 -0
  105. package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -1
  106. package/core/dist/runtime-v2/evidence-triage/index.js +3 -0
  107. package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -1
  108. package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +128 -0
  109. package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -0
  110. package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +203 -0
  111. package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -0
  112. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +4 -0
  113. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -1
  114. package/core/dist/runtime-v2/evidence-triage/triage-policy.js +66 -9
  115. package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -1
  116. package/core/dist/runtime-v2/evidence-triage/types.d.ts +14 -0
  117. package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -1
  118. package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -1
  119. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +33 -4
  120. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  121. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  122. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +9 -2
  123. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  124. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts +15 -0
  125. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts.map +1 -0
  126. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js +450 -0
  127. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js.map +1 -0
  128. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts +13 -0
  129. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts.map +1 -0
  130. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js +243 -0
  131. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js.map +1 -0
  132. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts +12 -0
  133. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts.map +1 -0
  134. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js +172 -0
  135. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js.map +1 -0
  136. package/core/dist/runtime-v2/index.d.ts +9 -6
  137. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  138. package/core/dist/runtime-v2/index.js +8 -4
  139. package/core/dist/runtime-v2/index.js.map +1 -1
  140. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts +2 -0
  141. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts.map +1 -0
  142. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js +306 -0
  143. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js.map +1 -0
  144. package/core/dist/runtime-v2/internalization/index.d.ts +0 -16
  145. package/core/dist/runtime-v2/internalization/index.d.ts.map +1 -1
  146. package/core/dist/runtime-v2/internalization/index.js +0 -8
  147. package/core/dist/runtime-v2/internalization/index.js.map +1 -1
  148. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts +15 -0
  149. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts.map +1 -0
  150. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js +179 -0
  151. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js.map +1 -0
  152. package/core/dist/runtime-v2/pain-gate/index.d.ts +10 -0
  153. package/core/dist/runtime-v2/pain-gate/index.d.ts.map +1 -0
  154. package/core/dist/runtime-v2/pain-gate/index.js +9 -0
  155. package/core/dist/runtime-v2/pain-gate/index.js.map +1 -0
  156. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts +121 -0
  157. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts.map +1 -0
  158. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js +157 -0
  159. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js.map +1 -0
  160. package/core/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
  161. package/core/dist/runtime-v2/pain-signal-bridge.js +14 -88
  162. package/core/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
  163. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  164. package/core/dist/runtime-v2/pain-signal-observability.js +15 -5
  165. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  166. package/core/dist/runtime-v2/principle-tree/ledger-codec.d.ts +30 -0
  167. package/core/dist/runtime-v2/principle-tree/ledger-codec.d.ts.map +1 -0
  168. package/core/dist/runtime-v2/principle-tree/ledger-codec.js +154 -0
  169. package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -0
  170. package/core/dist/runtime-v2/types/event-types.d.ts +0 -27
  171. package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  172. package/core/dist/runtime-v2/types/event-types.js +2 -17
  173. package/core/dist/runtime-v2/types/event-types.js.map +1 -1
  174. package/core/dist/runtime-v2/types/index.d.ts +4 -2
  175. package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
  176. package/core/dist/runtime-v2/types/index.js +4 -1
  177. package/core/dist/runtime-v2/types/index.js.map +1 -1
  178. package/core/dist/runtime-v2/types/ledger-store.d.ts +101 -0
  179. package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -0
  180. package/core/dist/runtime-v2/types/ledger-store.js +15 -0
  181. package/core/dist/runtime-v2/types/ledger-store.js.map +1 -0
  182. package/core/dist/runtime-v2/types/pain-signal.d.ts +7 -5
  183. package/core/dist/runtime-v2/types/pain-signal.d.ts.map +1 -1
  184. package/core/dist/runtime-v2/types/pain-signal.js +25 -5
  185. package/core/dist/runtime-v2/types/pain-signal.js.map +1 -1
  186. package/core/package.json +3 -3
  187. package/dist/installer.d.ts.map +1 -1
  188. package/dist/installer.js +9 -3
  189. package/dist/installer.js.map +1 -1
  190. package/dist/mvp-config.d.ts +0 -10
  191. package/dist/mvp-config.d.ts.map +1 -1
  192. package/dist/mvp-config.js +0 -64
  193. package/dist/mvp-config.js.map +1 -1
  194. package/dist/utils/env.d.ts.map +1 -1
  195. package/dist/utils/env.js +10 -4
  196. package/dist/utils/env.js.map +1 -1
  197. package/package.json +1 -1
  198. package/pd-cli/dist/commands/__tests__/legacy-cleanup.test.js +11 -3
  199. package/pd-cli/dist/commands/__tests__/legacy-cleanup.test.js.map +1 -1
  200. package/pd-cli/dist/commands/candidate.d.ts.map +1 -1
  201. package/pd-cli/dist/commands/candidate.js +2 -1
  202. package/pd-cli/dist/commands/candidate.js.map +1 -1
  203. package/pd-cli/dist/commands/health.d.ts.map +1 -1
  204. package/pd-cli/dist/commands/health.js +2 -1
  205. package/pd-cli/dist/commands/health.js.map +1 -1
  206. package/pd-cli/dist/commands/mvp-smoke.js +1 -1
  207. package/pd-cli/dist/commands/mvp-smoke.js.map +1 -1
  208. package/pd-cli/dist/commands/rulecode.js +1 -1
  209. package/pd-cli/dist/commands/rulecode.js.map +1 -1
  210. package/pd-cli/dist/commands/runtime-canary.d.ts.map +1 -1
  211. package/pd-cli/dist/commands/runtime-canary.js +10 -11
  212. package/pd-cli/dist/commands/runtime-canary.js.map +1 -1
  213. package/pd-cli/dist/commands/runtime-internalization-integrity.d.ts.map +1 -1
  214. package/pd-cli/dist/commands/runtime-internalization-integrity.js +3 -1
  215. package/pd-cli/dist/commands/runtime-internalization-integrity.js.map +1 -1
  216. package/pd-cli/dist/commands/runtime-internalization-queue.d.ts.map +1 -1
  217. package/pd-cli/dist/commands/runtime-internalization-queue.js +13 -16
  218. package/pd-cli/dist/commands/runtime-internalization-queue.js.map +1 -1
  219. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  220. package/pd-cli/dist/commands/runtime-internalization-run-once.js +3 -0
  221. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  222. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.d.ts.map +1 -1
  223. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js +61 -7
  224. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js.map +1 -1
  225. package/pd-cli/dist/commands/runtime-uat.d.ts.map +1 -1
  226. package/pd-cli/dist/commands/runtime-uat.js +4 -1
  227. package/pd-cli/dist/commands/runtime-uat.js.map +1 -1
  228. package/pd-cli/dist/commands/runtime.js +1 -1
  229. package/pd-cli/dist/commands/runtime.js.map +1 -1
  230. package/pd-cli/dist/index.js +67 -34
  231. package/pd-cli/dist/index.js.map +1 -1
  232. package/pd-cli/dist/legacy/session-history-import.js +7 -5
  233. package/pd-cli/dist/legacy/session-history-import.js.map +1 -1
  234. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts +2 -0
  235. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts.map +1 -0
  236. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js +314 -0
  237. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js.map +1 -0
  238. package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js +33 -14
  239. package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js.map +1 -1
  240. package/pd-cli/dist/services/pain-flood-simulation-runner.d.ts.map +1 -1
  241. package/pd-cli/dist/services/pain-flood-simulation-runner.js +6 -2
  242. package/pd-cli/dist/services/pain-flood-simulation-runner.js.map +1 -1
  243. package/pd-cli/dist/services/rulehost-readiness.d.ts +62 -0
  244. package/pd-cli/dist/services/rulehost-readiness.d.ts.map +1 -0
  245. package/pd-cli/dist/services/rulehost-readiness.js +214 -0
  246. package/pd-cli/dist/services/rulehost-readiness.js.map +1 -0
  247. package/pd-cli/dist/services/runtime-adapter-resolver.d.ts +1 -1
  248. package/pd-cli/dist/services/runtime-adapter-resolver.d.ts.map +1 -1
  249. package/pd-cli/dist/services/runtime-adapter-resolver.js +9 -7
  250. package/pd-cli/dist/services/runtime-adapter-resolver.js.map +1 -1
  251. package/plugin/dist/commands/capabilities.js +3 -2
  252. package/plugin/dist/commands/disable-impl.js +1 -1
  253. package/plugin/dist/commands/evolution-status.js +0 -2
  254. package/plugin/dist/commands/focus.js +10 -2
  255. package/plugin/dist/commands/rollback-impl.js +1 -1
  256. package/plugin/dist/commands/thinking-os.js +5 -1
  257. package/plugin/dist/core/correction-cue-learner.js +2 -0
  258. package/plugin/dist/core/detection-funnel.d.ts +25 -11
  259. package/plugin/dist/core/detection-funnel.js +32 -80
  260. package/plugin/dist/core/event-log.d.ts +1 -3
  261. package/plugin/dist/core/event-log.js +27 -31
  262. package/plugin/dist/core/evolution-reducer.d.ts +0 -8
  263. package/plugin/dist/core/evolution-reducer.js +9 -19
  264. package/plugin/dist/core/focus-history.js +1 -1
  265. package/plugin/dist/core/hygiene/tracker.js +3 -3
  266. package/plugin/dist/core/pain-diagnostic-gate.d.ts +37 -28
  267. package/plugin/dist/core/pain-diagnostic-gate.js +53 -89
  268. package/plugin/dist/core/pain.d.ts +0 -63
  269. package/plugin/dist/core/pain.js +0 -167
  270. package/plugin/dist/core/paths.d.ts +0 -1
  271. package/plugin/dist/core/paths.js +2 -1
  272. package/plugin/dist/core/principle-compiler/compiler.js +2 -0
  273. package/plugin/dist/core/replay-engine.js +1 -1
  274. package/plugin/dist/core/rule-host.js +3 -1
  275. package/plugin/dist/core/schema/migrations/001-init-trajectory.js +3 -6
  276. package/plugin/dist/core/schema/schema-definitions.js +4 -9
  277. package/plugin/dist/core/thinking-os-parser.js +13 -4
  278. package/plugin/dist/core/trajectory.d.ts +0 -16
  279. package/plugin/dist/core/trajectory.js +9 -60
  280. package/plugin/dist/hooks/after-tool-call-helpers.d.ts +4 -1
  281. package/plugin/dist/hooks/after-tool-call-helpers.js +13 -17
  282. package/plugin/dist/hooks/gate-block-helper.js +57 -17
  283. package/plugin/dist/hooks/lifecycle.js +3 -6
  284. package/plugin/dist/hooks/llm.js +66 -26
  285. package/plugin/dist/hooks/pain.d.ts +3 -1
  286. package/plugin/dist/hooks/pain.js +119 -49
  287. package/plugin/dist/hooks/prompt-helpers.d.ts +87 -0
  288. package/plugin/dist/hooks/prompt-helpers.js +251 -0
  289. package/plugin/dist/hooks/prompt-types.d.ts +66 -0
  290. package/plugin/dist/hooks/prompt-types.js +12 -0
  291. package/plugin/dist/hooks/prompt.d.ts +7 -38
  292. package/plugin/dist/hooks/prompt.js +361 -325
  293. package/plugin/dist/hooks/raw-observation-adapter.d.ts +9 -50
  294. package/plugin/dist/hooks/raw-observation-adapter.js +9 -164
  295. package/plugin/dist/hooks/raw-observation-types.d.ts +6 -57
  296. package/plugin/dist/hooks/raw-observation-types.js +5 -9
  297. package/plugin/dist/hooks/trajectory-collector.d.ts +20 -4
  298. package/plugin/dist/hooks/trajectory-collector.js +95 -156
  299. package/plugin/dist/hooks/triage-adapter.js +6 -26
  300. package/plugin/dist/hooks/trigger-cooldown-tracker.d.ts +12 -0
  301. package/plugin/dist/hooks/trigger-cooldown-tracker.js +25 -0
  302. package/plugin/dist/index.js +7 -2
  303. package/plugin/dist/openclaw-sdk.d.ts +4 -1
  304. package/plugin/dist/service/evolution-worker.js +8 -62
  305. package/plugin/dist/service/internalization-auto-consumer-service.js +2 -1
  306. package/plugin/dist/service/runtime-summary-service.d.ts +0 -2
  307. package/plugin/dist/service/runtime-summary-service.js +8 -5
  308. package/plugin/dist/service/workflow-watchdog.js +2 -1
  309. package/plugin/dist/types/event-types.d.ts +1 -1
  310. package/plugin/dist/utils/retry.js +7 -2
  311. package/plugin/dist/utils/session-key.js +4 -1
  312. package/plugin/scripts/sync-plugin.mjs +33 -22
  313. package/plugin/scripts/validate-live-path.ts +0 -18
  314. package/plugin/templates/langs/en/skills/pd-cli-operator/SKILL.md +20 -11
  315. package/plugin/templates/langs/en/skills/pd-runtime-v2/SKILL.md +10 -0
  316. package/plugin/templates/langs/zh/skills/pd-cli-operator/SKILL.md +20 -11
  317. package/plugin/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +10 -0
  318. package/console/dist/server/config/feature-flags.d.ts +0 -25
  319. package/console/dist/server/config/feature-flags.js +0 -101
  320. package/core/dist/io.d.ts +0 -35
  321. package/core/dist/io.d.ts.map +0 -1
  322. package/core/dist/io.js +0 -95
  323. package/core/dist/io.js.map +0 -1
  324. package/pd-cli/dist/commands/central-sync.d.ts +0 -10
  325. package/pd-cli/dist/commands/central-sync.d.ts.map +0 -1
  326. package/pd-cli/dist/commands/central-sync.js +0 -32
  327. package/pd-cli/dist/commands/central-sync.js.map +0 -1
  328. package/pd-cli/dist/services/feature-flag-loader.d.ts +0 -6
  329. package/pd-cli/dist/services/feature-flag-loader.d.ts.map +0 -1
  330. package/pd-cli/dist/services/feature-flag-loader.js +0 -53
  331. package/pd-cli/dist/services/feature-flag-loader.js.map +0 -1
  332. package/plugin/dist/core/observability.d.ts +0 -40
  333. package/plugin/dist/core/observability.js +0 -164
  334. package/plugin/dist/hooks/subagent.d.ts +0 -9
  335. package/plugin/dist/hooks/subagent.js +0 -122
@@ -245,11 +245,13 @@ export function percentile(values, p) {
245
245
  const n = sorted.length;
246
246
  // For small samples, use median to avoid overfitting
247
247
  if (n < 10) {
248
- return sorted[Math.floor(n / 2)];
248
+ const median = sorted[Math.floor(n / 2)];
249
+ return median ?? 0;
249
250
  }
250
251
  // Standard percentile calculation (nearest-rank method)
251
252
  const rank = Math.ceil((p / 100) * n);
252
- return sorted[Math.min(rank, n) - 1];
253
+ const result = sorted[Math.min(rank, n) - 1];
254
+ return result ?? 0;
253
255
  }
254
256
  /**
255
257
  * Clamp timeout to safe bounds.
@@ -317,6 +319,9 @@ export function computeAdaptiveTimeout(history, fallbackMs, options = {}) {
317
319
  const sorted = [...history].sort((a, b) => a - b);
318
320
  const rank = Math.ceil((p / 100) * sorted.length);
319
321
  const pValue = sorted[Math.min(rank, sorted.length) - 1];
322
+ if (pValue === undefined) {
323
+ return Math.max(minTimeoutMs, Math.min(maxTimeoutMs, fallbackMs));
324
+ }
320
325
  const adaptive = pValue * safetyMultiplier;
321
326
  return Math.max(minTimeoutMs, Math.min(maxTimeoutMs, Math.round(adaptive)));
322
327
  }
@@ -13,6 +13,9 @@ export function extractAgentIdFromSessionKey(sessionKey) {
13
13
  const match = /^agent:([^:]+):/.exec(sessionKey);
14
14
  if (!match)
15
15
  return undefined;
16
- const agentId = match[1].trim();
16
+ const raw = match[1];
17
+ if (!raw)
18
+ return undefined;
19
+ const agentId = raw.trim();
17
20
  return agentId || undefined;
18
21
  }
@@ -871,9 +871,9 @@ function copyDir(src, dest) {
871
871
  }
872
872
 
873
873
  /**
874
- * Inject local workspace packages (monorepo) into node_modules before npm install.
875
- * @principles/core is a workspace package, not published to npm — we must copy it
876
- * from the monorepo's node_modules so npm install --production doesn't 404 it.
874
+ * Inject local workspace packages (monorepo) into node_modules after npm install.
875
+ * @principles/core from the local monorepo is authoritative because the
876
+ * npm-published package line lacks exports required by the current pd-cli.
877
877
  */
878
878
  function injectLocalWorkspacePackages() {
879
879
  const monorepoModules = join(SOURCE_DIR, '..', '..', 'node_modules', '@principles', 'core');
@@ -885,24 +885,25 @@ function injectLocalWorkspacePackages() {
885
885
  }
886
886
 
887
887
  console.log(' 📦 Injecting local workspace packages (@principles/core)...');
888
+
889
+ // Remove the target FIRST, because cp -rL on Windows copies the source
890
+ // directory INTO the existing target, creating a nested core/core/ that
891
+ // leaves the original npm-version package.json untouched. We must start
892
+ // with a clean slate so the local version is authoritative.
893
+ if (existsSync(targetModules)) {
894
+ rmSync(targetModules, { recursive: true, force: true });
895
+ }
896
+
888
897
  mkdirSync(dirname(targetModules), { recursive: true });
889
- // cpSync creates symlinks on Windows for symlinked dirs — use cp -rL (dereference) via exec
890
- let injected = false;
898
+ // Use copyDir (Node-based, no cp -rL semantics trap) for reliable
899
+ // cross-platform overwrite. cpSync creates symlinks on Windows for
900
+ // symlinked dirs — copyDir dereferences by reading file contents.
891
901
  try {
892
- execSync(`cp -rL "${monorepoModules}" "${targetModules}"`, { stdio: 'ignore' });
893
- injected = true;
894
- } catch {
895
- // Fallback: manual copy via node (Windows-compatible)
896
- try {
897
- copyDir(monorepoModules, targetModules);
898
- injected = true;
899
- } catch (copyErr) {
900
- console.warn(' ⚠️ Failed to inject @principles/core from monorepo: ' + copyErr.message);
901
- console.warn(' ⚠️ npm install --production may fail if @principles/core is not published');
902
- }
903
- }
904
- if (injected && !existsSync(targetModules)) {
905
- console.warn(' ⚠️ Injection reported success but target not found: ' + targetModules);
902
+ copyDir(monorepoModules, targetModules);
903
+ console.log(' ✅ @principles/core local build injected');
904
+ } catch (copyErr) {
905
+ console.warn(' ⚠️ Failed to inject @principles/core from monorepo: ' + copyErr.message);
906
+ console.warn(' ⚠️ npm version remains in place — pd-cli may fail if exports differ');
906
907
  }
907
908
  }
908
909
 
@@ -1082,7 +1083,7 @@ function restartGatewayWindows() {
1082
1083
  execSync(`wmic process where "ProcessId=${pidTrim}" call terminate`, { stdio: 'ignore' });
1083
1084
  } catch { /* ignore individual failures */ }
1084
1085
  }
1085
- execSync('timeout /t 3 /nobreak > nul', { shell: true, stdio: 'ignore' });
1086
+ execSync('timeout /t 3 /nobreak', { shell: true, stdio: 'ignore' });
1086
1087
  }
1087
1088
  } catch { /* no existing processes */ }
1088
1089
 
@@ -1146,7 +1147,7 @@ function restartGatewayWindows() {
1146
1147
  }
1147
1148
  } catch { /* port not listening yet */ }
1148
1149
  try {
1149
- execSync('timeout /t 1 /nobreak > nul', { shell: true, stdio: 'ignore' });
1150
+ execSync('timeout /t 1 /nobreak', { shell: true, stdio: 'ignore' });
1150
1151
  } catch { /* ignore */ }
1151
1152
  }
1152
1153
 
@@ -1309,8 +1310,18 @@ function main() {
1309
1310
  syncFilteredManifest(args.lang);
1310
1311
  syncPdCli();
1311
1312
 
1312
- injectLocalWorkspacePackages();
1313
+ // IMPORTANT: npm install must run FIRST, then injectLocalWorkspacePackages
1314
+ // overwrites @principles/core with the local monorepo version.
1315
+ //
1316
+ // Why: @principles/core on npm (v1.164.0-1.174.0, from a different publish
1317
+ // line) is semantically "^1.74.1"-compatible but its exports field does NOT
1318
+ // include ./principle-tree-ledger that pd-cli/health.js requires. The npm
1319
+ // registry version must never be used — only the local monorepo build has
1320
+ // the correct exports. Injecting BEFORE npm install is useless because npm
1321
+ // overwrites the injected copy. The authoritative source is always the
1322
+ // local monorepo, applied AFTER npm install.
1313
1323
  installTargetDependencies();
1324
+ injectLocalWorkspacePackages();
1314
1325
  verifyInjectedWorkspaceDeps();
1315
1326
  verifyPdCliShim();
1316
1327
 
@@ -37,7 +37,6 @@ const STATE_DIR = path.join(WORKSPACE_DIR, '.state');
37
37
  const QUEUE_PATH = path.join(STATE_DIR, 'EVOLUTION_QUEUE');
38
38
  const LEDGER_PATH = path.join(STATE_DIR, 'principle_training_state.json');
39
39
  const DB_PATH = path.join(STATE_DIR, 'subagent_workflows.db');
40
- const PAIN_FLAG_PATH = path.join(STATE_DIR, '.pain_flag');
41
40
  const SAMPLES_DIR = path.join(STATE_DIR, 'nocturnal', 'samples');
42
41
 
43
42
  // ─── Helpers ─────────────────────────────────────────────────────────────
@@ -310,11 +309,6 @@ async function main() {
310
309
  logStep('BASELINE', 'Capturing current state before validation');
311
310
  const queueBefore = safeReadJson(QUEUE_PATH) as QueueItem[] | null;
312
311
  logData('EVOLUTION_QUEUE (before)', queueBefore?.length ?? 0);
313
- if (fs.existsSync(PAIN_FLAG_PATH)) {
314
- logData('.pain_flag', 'EXISTS — ' + fs.readFileSync(PAIN_FLAG_PATH, 'utf8').slice(0, 100));
315
- } else {
316
- logData('.pain_flag', 'not present');
317
- }
318
312
  if (fs.existsSync(SAMPLES_DIR)) {
319
313
  const samplesBefore = fs.readdirSync(SAMPLES_DIR).length;
320
314
  logData('nocturnal/samples/', `${samplesBefore} files`);
@@ -432,18 +426,6 @@ async function main() {
432
426
  }
433
427
  }
434
428
 
435
- // Check pain_flag cleanup
436
- if (fs.existsSync(PAIN_FLAG_PATH)) {
437
- const flagContent = fs.readFileSync(PAIN_FLAG_PATH, 'utf8');
438
- if (flagContent.includes('[object Object]')) {
439
- logStep('⚠️ WARNING', 'pain_flag is corrupted ([object Object])');
440
- } else {
441
- logData('.pain_flag (after)', `still exists, ${flagContent.length} bytes`);
442
- }
443
- } else {
444
- logData('.pain_flag (after)', 'cleaned up (file removed)');
445
- }
446
-
447
429
  if (result.resolution === 'MISSING' || result.resolution === 'expired') {
448
430
  console.error('FAIL: resolution not explicit');
449
431
  process.exit(1);
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pd-cli-operator
3
- description: Use this skill when operating the Principles Disciple `pd` CLI: probing runtime health, manually recording pain, inspecting tasks/runs/candidates/artifacts, intaking candidates, viewing flow policy, or cleaning legacy state. It routes CLI commands safely and forbids direct `.state/.pain_flag` writes.
3
+ description: Use this skill when operating the Principles Disciple `pd` CLI: probing runtime health, manually recording pain, inspecting tasks/runs/candidates/artifacts, intaking candidates, viewing flow policy, or tracing pain-to-ledger chains. It routes CLI commands safely and forbids direct `.state/.pain_flag` writes.
4
4
  disable-model-invocation: false
5
5
  ---
6
6
 
@@ -36,6 +36,25 @@ Flow policy:
36
36
  pd runtime flow show --workspace "<workspace>" --json
37
37
  ```
38
38
 
39
+ ## Trace Pain-To-Ledger Chain (PRI-455 promoted)
40
+
41
+ Trace the full evidence chain from pain signal to principle ledger:
42
+ ```bash
43
+ pd trace show --pain-id "<painId>" --workspace "<workspace>" --json
44
+ ```
45
+
46
+ ## Activation Management (PRI-455 promoted)
47
+
48
+ List active activations:
49
+ ```bash
50
+ pd activation list --workspace "<workspace>" --json
51
+ ```
52
+
53
+ Deactivate (rollback) an activation:
54
+ ```bash
55
+ pd activation deactivate --activation-id "<activationId>" --workspace "<workspace>" --json
56
+ ```
57
+
39
58
  ## Inspect Runtime V2 Objects
40
59
 
41
60
  Tasks and runs:
@@ -55,13 +74,3 @@ Manual intake:
55
74
  ```bash
56
75
  pd candidate intake --candidate-id "<candidateId>" --workspace "<workspace>" --json
57
76
  ```
58
-
59
- ## Legacy Admin
60
-
61
- Only when explicitly cleaning old state:
62
- ```bash
63
- pd legacy cleanup --workspace "<workspace>" --dry-run
64
- pd legacy cleanup --workspace "<workspace>" --apply
65
- ```
66
-
67
- Never use legacy cleanup as a diagnosis trigger.
@@ -38,6 +38,16 @@ Flow policy:
38
38
  pd runtime flow show --workspace "<workspace>" --json
39
39
  ```
40
40
 
41
+ Trace pain-to-ledger chain (PRI-455 promoted):
42
+ ```bash
43
+ pd trace show --pain-id "<painId>" --workspace "<workspace>" --json
44
+ ```
45
+
46
+ Activation status (PRI-455 promoted):
47
+ ```bash
48
+ pd activation list --workspace "<workspace>" --json
49
+ ```
50
+
41
51
  Candidates:
42
52
  ```bash
43
53
  pd candidate list --workspace "<workspace>" --json
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pd-cli-operator
3
- description: 操作 Principles Disciple `pd` CLI 时使用:运行时健康检查、手动记录痛苦、查看 task/run/candidate/artifact、intake candidate、查看 flow policy、清理 legacy state。本技能提供安全 CLI 路由,并禁止直接写 `.state/.pain_flag`。
3
+ description: 操作 Principles Disciple `pd` CLI 时使用:运行时健康检查、手动记录痛苦、查看 task/run/candidate/artifact、intake candidate、查看 flow policy、追踪痛苦到原则的证据链。本技能提供安全 CLI 路由,并禁止直接写 `.state/.pain_flag`。
4
4
  disable-model-invocation: false
5
5
  ---
6
6
 
@@ -36,6 +36,25 @@ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
36
36
  pd runtime flow show --workspace "<workspace>" --json
37
37
  ```
38
38
 
39
+ ## 追踪痛苦到原则链(PRI-455 提升)
40
+
41
+ 追踪从痛苦信号到原则账本的完整证据链:
42
+ ```bash
43
+ pd trace show --pain-id "<painId>" --workspace "<workspace>" --json
44
+ ```
45
+
46
+ ## 激活管理(PRI-455 提升)
47
+
48
+ 列出当前激活:
49
+ ```bash
50
+ pd activation list --workspace "<workspace>" --json
51
+ ```
52
+
53
+ 停用(回滚)激活:
54
+ ```bash
55
+ pd activation deactivate --activation-id "<activationId>" --workspace "<workspace>" --json
56
+ ```
57
+
39
58
  ## 查看 Runtime V2 对象
40
59
 
41
60
  Tasks 和 runs:
@@ -55,13 +74,3 @@ pd artifact show --artifact-id "<artifactId>" --workspace "<workspace>" --json
55
74
  ```bash
56
75
  pd candidate intake --candidate-id "<candidateId>" --workspace "<workspace>" --json
57
76
  ```
58
-
59
- ## Legacy 管理
60
-
61
- 只有在明确清理旧状态时使用:
62
- ```bash
63
- pd legacy cleanup --workspace "<workspace>" --dry-run
64
- pd legacy cleanup --workspace "<workspace>" --apply
65
- ```
66
-
67
- 不要把 legacy cleanup 当作诊断触发入口。
@@ -38,6 +38,16 @@ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
38
38
  pd runtime flow show --workspace "<workspace>" --json
39
39
  ```
40
40
 
41
+ 追踪痛苦到原则链(PRI-455 提升):
42
+ ```bash
43
+ pd trace show --pain-id "<painId>" --workspace "<workspace>" --json
44
+ ```
45
+
46
+ 激活状态(PRI-455 提升):
47
+ ```bash
48
+ pd activation list --workspace "<workspace>" --json
49
+ ```
50
+
41
51
  候选原则:
42
52
  ```bash
43
53
  pd candidate list --workspace "<workspace>" --json
@@ -1,25 +0,0 @@
1
- import type { EffectiveFeatureFlags } from '@principles/core/runtime-v2';
2
- export interface FeatureFlagLoadResult {
3
- ok: true;
4
- flags: EffectiveFeatureFlags;
5
- }
6
- export interface FeatureFlagLoadError {
7
- ok: false;
8
- reason: string;
9
- nextAction: string;
10
- }
11
- export type LoadFeatureFlagsResult = FeatureFlagLoadResult | FeatureFlagLoadError;
12
- /**
13
- * Load effective feature flags for the given workspace.
14
- *
15
- * Returns ok:false with reason+nextAction on failure (fail-closed).
16
- * Does NOT throw — callers must check .ok.
17
- */
18
- export declare function loadWorkspaceFeatureFlags(workspaceDir: string): LoadFeatureFlagsResult;
19
- /**
20
- * Build the minimal featureFlags object expected by handleFeedbackReportsRoute.
21
- * Fail-closed: if loading fails, returns feedback_channel enabled=false.
22
- */
23
- export declare function buildFeedbackChannelFlags(loadResult: LoadFeatureFlagsResult): Record<string, {
24
- enabled: boolean;
25
- }>;
@@ -1,101 +0,0 @@
1
- /**
2
- * Feature flag loader for pd-console server.
3
- *
4
- * Reads <workspaceDir>/.pd/feature-flags.yaml and merges with
5
- * core defaults via computeEffectiveFlags.
6
- *
7
- * Fail-closed: if loading fails, the returned result indicates failure
8
- * so callers can deny write paths that depend on feature flags.
9
- */
10
- import * as fs from 'fs';
11
- import * as path from 'path';
12
- import * as yaml from 'js-yaml';
13
- import { computeEffectiveFlags, DEFAULT_FEATURE_FLAGS, } from '@principles/core/runtime-v2';
14
- const FEATURE_FLAGS_CONFIG_FILENAME = 'feature-flags.yaml';
15
- const FEATURE_FLAGS_CONFIG_DIR = '.pd';
16
- const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
17
- function isRecord(value) {
18
- return value !== null && typeof value === 'object' && !Array.isArray(value);
19
- }
20
- function readConfigFile(configPath) {
21
- try {
22
- return { ok: true, content: fs.readFileSync(configPath, 'utf8') };
23
- }
24
- catch (err) {
25
- return {
26
- ok: false,
27
- reason: `Failed to read feature flags config: ${err instanceof Error ? err.message : String(err)}`,
28
- nextAction: 'Verify file permissions on .pd/feature-flags.yaml and retry',
29
- };
30
- }
31
- }
32
- function parseYaml(content) {
33
- try {
34
- return { ok: true, value: yaml.load(content, { schema: yaml.JSON_SCHEMA }) };
35
- }
36
- catch {
37
- return {
38
- ok: false,
39
- reason: 'feature-flags.yaml: YAML parse error',
40
- nextAction: 'Fix YAML syntax in .pd/feature-flags.yaml or delete the file to use defaults',
41
- };
42
- }
43
- }
44
- /**
45
- * Load effective feature flags for the given workspace.
46
- *
47
- * Returns ok:false with reason+nextAction on failure (fail-closed).
48
- * Does NOT throw — callers must check .ok.
49
- */
50
- export function loadWorkspaceFeatureFlags(workspaceDir) {
51
- const configPath = path.join(workspaceDir, FEATURE_FLAGS_CONFIG_DIR, FEATURE_FLAGS_CONFIG_FILENAME);
52
- if (!fs.existsSync(configPath)) {
53
- // No config file — use defaults (feedback_channel enabled by default)
54
- return {
55
- ok: true,
56
- flags: computeEffectiveFlags({}, DEFAULT_FEATURE_FLAGS, configPath),
57
- };
58
- }
59
- const readResult = readConfigFile(configPath);
60
- if (!readResult.ok) {
61
- return readResult;
62
- }
63
- const parseResult = parseYaml(readResult.content);
64
- if (!parseResult.ok) {
65
- return parseResult;
66
- }
67
- if (!isRecord(parseResult.value)) {
68
- return {
69
- ok: false,
70
- reason: 'feature-flags.yaml: expected a YAML mapping, got ' + (Array.isArray(parseResult.value) ? 'array' : typeof parseResult.value),
71
- nextAction: 'Replace .pd/feature-flags.yaml content with a valid YAML mapping or delete it',
72
- };
73
- }
74
- const safeRecord = Object.create(null);
75
- for (const key of Object.keys(parseResult.value)) {
76
- if (DANGEROUS_KEYS.has(key)) {
77
- continue;
78
- }
79
- if (Object.hasOwn(parseResult.value, key)) {
80
- safeRecord[key] = parseResult.value[key];
81
- }
82
- }
83
- return {
84
- ok: true,
85
- flags: computeEffectiveFlags(safeRecord, DEFAULT_FEATURE_FLAGS, configPath),
86
- };
87
- }
88
- /**
89
- * Build the minimal featureFlags object expected by handleFeedbackReportsRoute.
90
- * Fail-closed: if loading fails, returns feedback_channel enabled=false.
91
- */
92
- export function buildFeedbackChannelFlags(loadResult) {
93
- if (!loadResult.ok) {
94
- // Fail closed — disable feedback_channel when flags cannot be loaded
95
- return { feedback_channel: { enabled: false } };
96
- }
97
- const feedbackDef = loadResult.flags.flags.feedback_channel;
98
- return {
99
- feedback_channel: { enabled: feedbackDef?.enabled ?? false },
100
- };
101
- }
package/core/dist/io.d.ts DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * I/O utilities for @principles/core SDK.
3
- *
4
- * Provides atomic file write operations that are crash-safe.
5
- * No dependencies on openclaw-plugin — self-contained.
6
- */
7
- /**
8
- * AsyncQueueLock — lightweight in-process async queue lock.
9
- * Serializes async operations on the same key within a single Node.js process.
10
- * NOT a distributed lock — use for CLI-in-process concurrency only.
11
- */
12
- export declare class AsyncQueueLock {
13
- private readonly queues;
14
- /**
15
- * Execute a function while holding an exclusive lock on the given key.
16
- * Uses a promise chain to serialize operations — only one operation runs at a time
17
- * for any given key within this process.
18
- *
19
- * @param key - Lock key (e.g. file path to serialize)
20
- * @param fn - Async function to execute
21
- */
22
- withLock<T>(key: string, fn: () => Promise<T>): Promise<T>;
23
- }
24
- /**
25
- * Atomic file write — write to temp file then rename.
26
- *
27
- * Prevents corruption if process crashes mid-write.
28
- * On Windows, retries with exponential backoff on EPERM/EBUSY/EACCES
29
- * to handle transient file locks.
30
- *
31
- * @param filePath - Target file path
32
- * @param data - Content to write (UTF-8 string)
33
- */
34
- export declare function atomicWriteFileSync(filePath: string, data: string): void;
35
- //# sourceMappingURL=io.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D;;;;;;;OAOG;IACG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAkBjE;AAQD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAiCxE"}
package/core/dist/io.js DELETED
@@ -1,95 +0,0 @@
1
- /**
2
- * I/O utilities for @principles/core SDK.
3
- *
4
- * Provides atomic file write operations that are crash-safe.
5
- * No dependencies on openclaw-plugin — self-contained.
6
- */
7
- import * as fs from 'fs';
8
- /**
9
- * AsyncQueueLock — lightweight in-process async queue lock.
10
- * Serializes async operations on the same key within a single Node.js process.
11
- * NOT a distributed lock — use for CLI-in-process concurrency only.
12
- */
13
- export class AsyncQueueLock {
14
- queues = new Map();
15
- /**
16
- * Execute a function while holding an exclusive lock on the given key.
17
- * Uses a promise chain to serialize operations — only one operation runs at a time
18
- * for any given key within this process.
19
- *
20
- * @param key - Lock key (e.g. file path to serialize)
21
- * @param fn - Async function to execute
22
- */
23
- async withLock(key, fn) {
24
- const lockPath = key;
25
- let resolveRelease;
26
- const releasePromise = new Promise(r => { resolveRelease = r; });
27
- const previousQueue = this.queues.get(lockPath) || Promise.resolve();
28
- const currentQueue = previousQueue.then(() => releasePromise);
29
- this.queues.set(lockPath, currentQueue);
30
- try {
31
- await previousQueue;
32
- return await fn();
33
- }
34
- finally {
35
- resolveRelease?.();
36
- if (this.queues.get(lockPath) === currentQueue) {
37
- this.queues.delete(lockPath);
38
- }
39
- }
40
- }
41
- }
42
- // Sync mutex: promise chain for synchronous code sections that need serialization.
43
- // Use for single-process CLI tools that need atomic file access within the same process.
44
- // NOT a distributed lock — each process gets its own chain on import.
45
- const RENAME_MAX_RETRIES = 3;
46
- const RENAME_BASE_DELAY_MS = 50;
47
- /**
48
- * Atomic file write — write to temp file then rename.
49
- *
50
- * Prevents corruption if process crashes mid-write.
51
- * On Windows, retries with exponential backoff on EPERM/EBUSY/EACCES
52
- * to handle transient file locks.
53
- *
54
- * @param filePath - Target file path
55
- * @param data - Content to write (UTF-8 string)
56
- */
57
- export function atomicWriteFileSync(filePath, data) {
58
- const tmpPath = filePath + '.tmp';
59
- fs.writeFileSync(tmpPath, data, 'utf8');
60
- let lastError;
61
- for (let attempt = 0; attempt < RENAME_MAX_RETRIES; attempt++) {
62
- try {
63
- fs.renameSync(tmpPath, filePath);
64
- return;
65
- }
66
- catch (err) {
67
- lastError = err;
68
- const { code } = /** @type {{ code?: string }} */ err;
69
- // Only retry on Windows transient lock errors
70
- if (code === 'EPERM' || code === 'EBUSY' || code === 'EACCES') {
71
- if (attempt < RENAME_MAX_RETRIES - 1) {
72
- const delay = RENAME_BASE_DELAY_MS * Math.pow(2, attempt);
73
- // Synchronous sleep using a tight spin with accessSync yield
74
- const waitUntil = Date.now() + delay;
75
- while (Date.now() < waitUntil) {
76
- try {
77
- fs.accessSync?.(tmpPath);
78
- }
79
- catch { /* ignore */ }
80
- }
81
- }
82
- continue;
83
- }
84
- // Non-retryable error — throw immediately
85
- break;
86
- }
87
- }
88
- // Clean up temp file on failure
89
- try {
90
- fs.unlinkSync(tmpPath);
91
- }
92
- catch { /* best effort */ }
93
- throw lastError ?? new Error('atomicWriteFileSync: rename failed');
94
- }
95
- //# sourceMappingURL=io.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * pd central sync command implementation.
3
- *
4
- * Usage: pd central sync
5
- *
6
- * Triggers a sync cycle via CentralDatabase.syncAll() and reports
7
- * per-workspace sync results with exit code 0 on success, non-zero on failure.
8
- */
9
- export declare function handleCentralSync(): Promise<void>;
10
- //# sourceMappingURL=central-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"central-sync.d.ts","sourceRoot":"","sources":["../../src/commands/central-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBvD"}
@@ -1,32 +0,0 @@
1
- /**
2
- * pd central sync command implementation.
3
- *
4
- * Usage: pd central sync
5
- *
6
- * Triggers a sync cycle via CentralDatabase.syncAll() and reports
7
- * per-workspace sync results with exit code 0 on success, non-zero on failure.
8
- */
9
- async function loadCentralDatabase() {
10
- const importModule = Function('specifier', 'return import(specifier)');
11
- return importModule('../../../openclaw-plugin/src/service/central-database.js');
12
- }
13
- export async function handleCentralSync() {
14
- try {
15
- const { CentralDatabase } = await loadCentralDatabase();
16
- const centralDb = new CentralDatabase();
17
- const results = centralDb.syncAll();
18
- const totalRecords = Array.from(results.values()).reduce((sum, count) => sum + count, 0);
19
- const workspaceCount = results.size;
20
- console.log(`Sync complete — ${totalRecords} records across ${workspaceCount} workspace(s).`);
21
- for (const [workspaceName, count] of results.entries()) {
22
- console.log(` ${workspaceName}: ${count} records`);
23
- }
24
- centralDb.dispose();
25
- }
26
- catch (err) {
27
- const message = err instanceof Error ? err.message : String(err);
28
- console.error(`Error: Sync failed — ${message}`);
29
- process.exit(1);
30
- }
31
- }
32
- //# sourceMappingURL=central-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"central-sync.js","sourceRoot":"","sources":["../../src/commands/central-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,KAAK,UAAU,mBAAmB;IAIhC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAKnE,CAAC;IACH,OAAO,YAAY,CAAC,0DAA0D,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAEpC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,mBAAmB,cAAc,gBAAgB,CAAC,CAAC;QAE9F,KAAK,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,aAAa,KAAK,KAAK,UAAU,CAAC,CAAC;QACtD,CAAC;QAED,SAAS,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { EffectiveFeatureFlags } from '@principles/core/runtime-v2';
2
- export declare const FEATURE_FLAGS_CONFIG_FILENAME = "feature-flags.yaml";
3
- export declare const FEATURE_FLAGS_CONFIG_DIR = ".pd";
4
- export declare function getFeatureFlagsConfigPath(workspaceDir: string): string;
5
- export declare function loadEffectiveFeatureFlags(workspaceDir: string): EffectiveFeatureFlags;
6
- //# sourceMappingURL=feature-flag-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-flag-loader.d.ts","sourceRoot":"","sources":["../../src/services/feature-flag-loader.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAQ9C,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAkDrF"}