principles-disciple 1.127.0 → 1.129.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 (593) hide show
  1. package/dist/commands/archive-impl.d.ts +18 -0
  2. package/dist/commands/archive-impl.js +105 -0
  3. package/dist/commands/capabilities.d.ts +3 -0
  4. package/dist/commands/capabilities.js +76 -0
  5. package/dist/commands/context.d.ts +5 -0
  6. package/{src/commands/context.ts → dist/commands/context.js} +34 -83
  7. package/dist/commands/disable-impl.d.ts +22 -0
  8. package/dist/commands/disable-impl.js +118 -0
  9. package/dist/commands/evolution-status.d.ts +4 -0
  10. package/dist/commands/evolution-status.js +187 -0
  11. package/dist/commands/export.d.ts +2 -0
  12. package/dist/commands/export.js +53 -0
  13. package/dist/commands/focus.d.ts +14 -0
  14. package/dist/commands/focus.js +443 -0
  15. package/dist/commands/pain.d.ts +6 -0
  16. package/{src/commands/pain.ts → dist/commands/pain.js} +137 -188
  17. package/dist/commands/principle-rollback.d.ts +4 -0
  18. package/dist/commands/principle-rollback.js +26 -0
  19. package/dist/commands/promote-impl.d.ts +22 -0
  20. package/dist/commands/promote-impl.js +194 -0
  21. package/dist/commands/rollback-impl.d.ts +32 -0
  22. package/dist/commands/rollback-impl.js +180 -0
  23. package/dist/commands/rollback.d.ts +19 -0
  24. package/{src/commands/rollback.ts → dist/commands/rollback.js} +10 -53
  25. package/dist/commands/samples.d.ts +2 -0
  26. package/dist/commands/samples.js +58 -0
  27. package/dist/commands/strategy.d.ts +2 -0
  28. package/dist/commands/strategy.js +16 -0
  29. package/dist/commands/thinking-os.d.ts +2 -0
  30. package/{src/commands/thinking-os.ts → dist/commands/thinking-os.js} +35 -58
  31. package/dist/commands/workflow-debug.d.ts +6 -0
  32. package/{src/commands/workflow-debug.ts → dist/commands/workflow-debug.js} +13 -33
  33. package/dist/config/defaults/runtime.d.ts +58 -0
  34. package/{src/config/defaults/runtime.ts → dist/config/defaults/runtime.js} +4 -41
  35. package/dist/config/errors.d.ts +86 -0
  36. package/dist/config/errors.js +107 -0
  37. package/{src/config/index.ts → dist/config/index.d.ts} +1 -2
  38. package/dist/config/index.js +7 -0
  39. package/dist/constants/diagnostician.d.ts +12 -0
  40. package/{src/constants/diagnostician.ts → dist/constants/diagnostician.js} +0 -1
  41. package/dist/constants/tools.d.ts +17 -0
  42. package/dist/constants/tools.js +53 -0
  43. package/dist/core/__tests__/focus-history.test.d.ts +1 -0
  44. package/dist/core/__tests__/focus-history.test.js +160 -0
  45. package/dist/core/bootstrap-rules.d.ts +50 -0
  46. package/dist/core/bootstrap-rules.js +187 -0
  47. package/dist/core/code-implementation-storage.d.ts +71 -0
  48. package/dist/core/code-implementation-storage.js +139 -0
  49. package/dist/core/config-health.d.ts +27 -0
  50. package/dist/core/config-health.js +60 -0
  51. package/dist/core/config-service.d.ts +15 -0
  52. package/{src/core/config-service.ts → dist/core/config-service.js} +4 -7
  53. package/dist/core/config.d.ts +111 -0
  54. package/{src/core/config.ts → dist/core/config.js} +46 -146
  55. package/dist/core/control-ui-db.d.ts +106 -0
  56. package/dist/core/control-ui-db.js +309 -0
  57. package/dist/core/correction-cue-learner.d.ts +33 -0
  58. package/dist/core/correction-cue-learner.js +184 -0
  59. package/dist/core/correction-types.d.ts +3 -0
  60. package/dist/core/correction-types.js +1 -0
  61. package/dist/core/detection-funnel.d.ts +33 -0
  62. package/{src/core/detection-funnel.ts → dist/core/detection-funnel.js} +17 -37
  63. package/dist/core/detection-service.d.ts +15 -0
  64. package/{src/core/detection-service.ts → dist/core/detection-service.js} +4 -7
  65. package/dist/core/dictionary-service.d.ts +15 -0
  66. package/{src/core/dictionary-service.ts → dist/core/dictionary-service.js} +4 -7
  67. package/dist/core/dictionary.d.ts +38 -0
  68. package/{src/core/dictionary.ts → dist/core/dictionary.js} +33 -59
  69. package/dist/core/empathy-keyword-matcher.d.ts +5 -0
  70. package/dist/core/empathy-keyword-matcher.js +40 -0
  71. package/dist/core/empathy-types.d.ts +2 -0
  72. package/dist/core/empathy-types.js +1 -0
  73. package/dist/core/event-log.d.ts +90 -0
  74. package/dist/core/event-log.js +702 -0
  75. package/dist/core/evolution-engine.d.ts +119 -0
  76. package/dist/core/evolution-engine.js +460 -0
  77. package/dist/core/evolution-logger.d.ts +137 -0
  78. package/dist/core/evolution-logger.js +261 -0
  79. package/dist/core/evolution-migration.d.ts +5 -0
  80. package/dist/core/evolution-migration.js +65 -0
  81. package/dist/core/evolution-reducer.d.ts +124 -0
  82. package/dist/core/evolution-reducer.js +730 -0
  83. package/dist/core/evolution-types.d.ts +50 -0
  84. package/dist/core/evolution-types.js +11 -0
  85. package/dist/core/external-training-contract.d.ts +276 -0
  86. package/dist/core/external-training-contract.js +269 -0
  87. package/dist/core/file-store.d.ts +41 -0
  88. package/dist/core/file-store.js +46 -0
  89. package/dist/core/focus-history.d.ts +50 -0
  90. package/dist/core/focus-history.js +574 -0
  91. package/dist/core/hygiene/tracker.d.ts +22 -0
  92. package/dist/core/hygiene/tracker.js +110 -0
  93. package/dist/core/init.d.ts +30 -0
  94. package/{src/core/init.ts → dist/core/init.js} +87 -118
  95. package/dist/core/local-worker-routing.d.ts +124 -0
  96. package/dist/core/local-worker-routing.js +216 -0
  97. package/dist/core/migration.d.ts +6 -0
  98. package/{src/core/migration.ts → dist/core/migration.js} +10 -18
  99. package/dist/core/model-deployment-registry.d.ts +218 -0
  100. package/dist/core/model-deployment-registry.js +502 -0
  101. package/dist/core/model-training-registry.d.ts +295 -0
  102. package/dist/core/model-training-registry.js +474 -0
  103. package/dist/core/observability.d.ts +40 -0
  104. package/dist/core/observability.js +164 -0
  105. package/dist/core/pain-diagnostic-gate.d.ts +36 -0
  106. package/dist/core/pain-diagnostic-gate.js +105 -0
  107. package/dist/core/pain.d.ts +87 -0
  108. package/dist/core/pain.js +223 -0
  109. package/dist/core/path-resolver.d.ts +60 -0
  110. package/{src/core/path-resolver.ts → dist/core/path-resolver.js} +41 -131
  111. package/dist/core/paths.d.ts +60 -0
  112. package/{src/core/paths.ts → dist/core/paths.js} +4 -13
  113. package/dist/core/pd-config-loader.d.ts +96 -0
  114. package/dist/core/pd-config-loader.js +307 -0
  115. package/dist/core/pd-task-reconciler.d.ts +89 -0
  116. package/dist/core/pd-task-reconciler.js +262 -0
  117. package/dist/core/pd-task-service.d.ts +2 -0
  118. package/dist/core/pd-task-service.js +32 -0
  119. package/dist/core/pd-task-store.d.ts +5 -0
  120. package/dist/core/pd-task-store.js +62 -0
  121. package/dist/core/pd-task-types.d.ts +8 -0
  122. package/dist/core/pd-task-types.js +2 -0
  123. package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.d.ts +1 -0
  124. package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.js +132 -0
  125. package/dist/core/principle-compiler/code-validator.d.ts +14 -0
  126. package/dist/core/principle-compiler/code-validator.js +86 -0
  127. package/dist/core/principle-compiler/compiler.d.ts +45 -0
  128. package/dist/core/principle-compiler/compiler.js +287 -0
  129. package/{src/core/principle-compiler/index.ts → dist/core/principle-compiler/index.d.ts} +0 -1
  130. package/dist/core/principle-compiler/index.js +10 -0
  131. package/dist/core/principle-compiler/ledger-registrar.d.ts +28 -0
  132. package/dist/core/principle-compiler/ledger-registrar.js +95 -0
  133. package/{src/core/principle-compiler/template-generator.ts → dist/core/principle-compiler/template-generator.d.ts} +0 -1
  134. package/dist/core/principle-compiler/template-generator.js +7 -0
  135. package/{src/core/principle-injection.ts → dist/core/principle-injection.d.ts} +1 -7
  136. package/dist/core/principle-injection.js +10 -0
  137. package/dist/core/principle-internalization/filesystem-lifecycle-datasource.d.ts +15 -0
  138. package/dist/core/principle-internalization/filesystem-lifecycle-datasource.js +34 -0
  139. package/dist/core/principle-internalization/lifecycle-read-model.d.ts +17 -0
  140. package/{src/core/principle-internalization/lifecycle-read-model.ts → dist/core/principle-internalization/lifecycle-read-model.js} +2 -21
  141. package/dist/core/principle-internalization/lifecycle-refresh.d.ts +2 -0
  142. package/dist/core/principle-internalization/lifecycle-refresh.js +4 -0
  143. package/dist/core/principle-internalization/principle-lifecycle-service.d.ts +28 -0
  144. package/dist/core/principle-internalization/principle-lifecycle-service.js +89 -0
  145. package/dist/core/principle-training-state.d.ts +47 -0
  146. package/dist/core/principle-training-state.js +113 -0
  147. package/dist/core/principle-tree-ledger-adapter.d.ts +32 -0
  148. package/dist/core/principle-tree-ledger-adapter.js +125 -0
  149. package/dist/core/principle-tree-ledger.d.ts +82 -0
  150. package/dist/core/principle-tree-ledger.js +527 -0
  151. package/dist/core/profile.d.ts +62 -0
  152. package/dist/core/profile.js +211 -0
  153. package/dist/core/promotion-gate.d.ts +243 -0
  154. package/dist/core/promotion-gate.js +554 -0
  155. package/dist/core/reflection/reflection-context.d.ts +31 -0
  156. package/dist/core/reflection/reflection-context.js +91 -0
  157. package/dist/core/replay-engine.d.ts +12 -0
  158. package/dist/core/replay-engine.js +82 -0
  159. package/dist/core/risk-calculator.d.ts +22 -0
  160. package/{src/core/risk-calculator.ts → dist/core/risk-calculator.js} +19 -49
  161. package/{src/core/rule-host-helpers.ts → dist/core/rule-host-helpers.d.ts} +0 -1
  162. package/dist/core/rule-host-helpers.js +7 -0
  163. package/{src/core/rule-host-types.ts → dist/core/rule-host-types.d.ts} +1 -8
  164. package/dist/core/rule-host-types.js +7 -0
  165. package/dist/core/rule-host.d.ts +86 -0
  166. package/dist/core/rule-host.js +311 -0
  167. package/dist/core/rule-implementation-runtime.d.ts +18 -0
  168. package/dist/core/rule-implementation-runtime.js +112 -0
  169. package/dist/core/runtime-v2-prompt-activation-reader.d.ts +22 -0
  170. package/dist/core/runtime-v2-prompt-activation-reader.js +99 -0
  171. package/{src/core/schema/db-types.ts → dist/core/schema/db-types.d.ts} +4 -9
  172. package/dist/core/schema/db-types.js +5 -0
  173. package/{src/core/schema/index.ts → dist/core/schema/index.d.ts} +1 -10
  174. package/dist/core/schema/index.js +15 -0
  175. package/dist/core/schema/migration-runner.d.ts +53 -0
  176. package/dist/core/schema/migration-runner.js +170 -0
  177. package/dist/core/schema/migrations/001-init-trajectory.d.ts +6 -0
  178. package/{src/core/schema/migrations/001-init-trajectory.ts → dist/core/schema/migrations/001-init-trajectory.js} +38 -56
  179. package/dist/core/schema/migrations/002-init-central.d.ts +5 -0
  180. package/{src/core/schema/migrations/002-init-central.ts → dist/core/schema/migrations/002-init-central.js} +27 -41
  181. package/dist/core/schema/migrations/003-init-workflow.d.ts +5 -0
  182. package/{src/core/schema/migrations/003-init-workflow.ts → dist/core/schema/migrations/003-init-workflow.js} +16 -21
  183. package/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +8 -0
  184. package/{src/core/schema/migrations/004-add-thinking-and-gfi.ts → dist/core/schema/migrations/004-add-thinking-and-gfi.js} +19 -27
  185. package/{src/core/schema/migrations/index.ts → dist/core/schema/migrations/index.d.ts} +1 -16
  186. package/dist/core/schema/migrations/index.js +27 -0
  187. package/dist/core/schema/schema-definitions.d.ts +46 -0
  188. package/{src/core/schema/schema-definitions.ts → dist/core/schema/schema-definitions.js} +242 -291
  189. package/dist/core/session-tracker.d.ts +119 -0
  190. package/{src/core/session-tracker.ts → dist/core/session-tracker.js} +96 -239
  191. package/dist/core/shadow-observation-registry.d.ts +217 -0
  192. package/dist/core/shadow-observation-registry.js +280 -0
  193. package/dist/core/surface-guard.d.ts +31 -0
  194. package/dist/core/surface-guard.js +131 -0
  195. package/dist/core/system-logger.d.ts +8 -0
  196. package/{src/core/system-logger.ts → dist/core/system-logger.js} +20 -34
  197. package/dist/core/thinking-models.d.ts +70 -0
  198. package/dist/core/thinking-models.js +300 -0
  199. package/dist/core/thinking-os-parser.d.ts +35 -0
  200. package/dist/core/thinking-os-parser.js +123 -0
  201. package/dist/core/trajectory-types.d.ts +220 -0
  202. package/dist/core/trajectory-types.js +8 -0
  203. package/dist/core/trajectory.d.ts +242 -0
  204. package/dist/core/trajectory.js +1500 -0
  205. package/dist/core/workflow-funnel-loader.d.ts +72 -0
  206. package/dist/core/workflow-funnel-loader.js +135 -0
  207. package/dist/core/workspace-context.d.ts +111 -0
  208. package/{src/core/workspace-context.ts → dist/core/workspace-context.js} +50 -105
  209. package/dist/core/workspace-dir-validation.d.ts +11 -0
  210. package/dist/core/workspace-dir-validation.js +37 -0
  211. package/dist/core/workspace-guidance-migrator.d.ts +12 -0
  212. package/{src/core/workspace-guidance-migrator.ts → dist/core/workspace-guidance-migrator.js} +21 -59
  213. package/dist/hooks/after-tool-call-helpers.d.ts +89 -0
  214. package/dist/hooks/after-tool-call-helpers.js +475 -0
  215. package/dist/hooks/after-tool-call-types.d.ts +86 -0
  216. package/dist/hooks/after-tool-call-types.js +13 -0
  217. package/dist/hooks/gate-block-helper.d.ts +44 -0
  218. package/dist/hooks/gate-block-helper.js +209 -0
  219. package/dist/hooks/gate.d.ts +16 -0
  220. package/dist/hooks/gate.js +381 -0
  221. package/dist/hooks/lifecycle.d.ts +5 -0
  222. package/dist/hooks/lifecycle.js +287 -0
  223. package/dist/hooks/llm.d.ts +13 -0
  224. package/{src/hooks/llm.ts → dist/hooks/llm.js} +63 -117
  225. package/dist/hooks/message-sanitize.d.ts +24 -0
  226. package/dist/hooks/message-sanitize.js +77 -0
  227. package/dist/hooks/pain.d.ts +33 -0
  228. package/dist/hooks/pain.js +294 -0
  229. package/dist/hooks/prompt.d.ts +52 -0
  230. package/dist/hooks/prompt.js +930 -0
  231. package/dist/hooks/raw-observation-adapter.d.ts +57 -0
  232. package/dist/hooks/raw-observation-adapter.js +170 -0
  233. package/dist/hooks/raw-observation-types.d.ts +62 -0
  234. package/dist/hooks/raw-observation-types.js +15 -0
  235. package/dist/hooks/subagent.d.ts +9 -0
  236. package/{src/hooks/subagent.ts → dist/hooks/subagent.js} +20 -60
  237. package/dist/hooks/trajectory-collector.d.ts +25 -0
  238. package/dist/hooks/trajectory-collector.js +225 -0
  239. package/dist/hooks/trajectory-evidence.d.ts +11 -0
  240. package/dist/hooks/trajectory-evidence.js +88 -0
  241. package/dist/hooks/triage-adapter.d.ts +58 -0
  242. package/{src/hooks/triage-adapter.ts → dist/hooks/triage-adapter.js} +36 -68
  243. package/dist/hooks/trigger-cooldown-tracker.d.ts +30 -0
  244. package/dist/hooks/trigger-cooldown-tracker.js +55 -0
  245. package/dist/i18n/commands.d.ts +26 -0
  246. package/dist/i18n/commands.js +96 -0
  247. package/dist/index.d.ts +50 -0
  248. package/dist/index.js +829 -0
  249. package/dist/openclaw-sdk.d.ts +293 -0
  250. package/dist/openclaw-sdk.js +4 -0
  251. package/dist/service/central-database.d.ts +138 -0
  252. package/dist/service/central-database.js +731 -0
  253. package/dist/service/central-sync-service.d.ts +8 -0
  254. package/dist/service/central-sync-service.js +71 -0
  255. package/dist/service/correction-observer-service.d.ts +19 -0
  256. package/{src/service/correction-observer-service.ts → dist/service/correction-observer-service.js} +36 -76
  257. package/dist/service/evolution-dedup.d.ts +27 -0
  258. package/{src/service/evolution-dedup.ts → dist/service/evolution-dedup.js} +11 -31
  259. package/{src/service/evolution-queue-migration.ts → dist/service/evolution-queue-migration.d.ts} +15 -62
  260. package/dist/service/evolution-queue-migration.js +53 -0
  261. package/dist/service/evolution-worker.d.ts +103 -0
  262. package/{src/service/evolution-worker.ts → dist/service/evolution-worker.js} +169 -331
  263. package/dist/service/internalization-auto-consumer-service.d.ts +8 -0
  264. package/dist/service/internalization-auto-consumer-service.js +322 -0
  265. package/dist/service/keyword-optimization-service.d.ts +44 -0
  266. package/dist/service/keyword-optimization-service.js +137 -0
  267. package/dist/service/phase3-input-filter.d.ts +73 -0
  268. package/dist/service/phase3-input-filter.js +172 -0
  269. package/dist/service/queue-io.d.ts +30 -0
  270. package/dist/service/queue-io.js +79 -0
  271. package/{src/service/queue-migration.ts → dist/service/queue-migration.d.ts} +6 -45
  272. package/dist/service/queue-migration.js +56 -0
  273. package/dist/service/runtime-summary-service.d.ts +158 -0
  274. package/dist/service/runtime-summary-service.js +636 -0
  275. package/dist/service/subagent-workflow/subagent-error-utils.d.ts +8 -0
  276. package/{src/service/subagent-workflow/subagent-error-utils.ts → dist/service/subagent-workflow/subagent-error-utils.js} +3 -6
  277. package/{src/service/subagent-workflow/types.ts → dist/service/subagent-workflow/types.d.ts} +17 -80
  278. package/dist/service/subagent-workflow/types.js +11 -0
  279. package/dist/service/subagent-workflow/workflow-store.d.ts +30 -0
  280. package/{src/service/subagent-workflow/workflow-store.ts → dist/service/subagent-workflow/workflow-store.js} +43 -108
  281. package/dist/service/trajectory-service.d.ts +2 -0
  282. package/dist/service/trajectory-service.js +16 -0
  283. package/dist/service/workflow-watchdog.d.ts +23 -0
  284. package/dist/service/workflow-watchdog.js +103 -0
  285. package/dist/types/event-types.d.ts +2 -0
  286. package/dist/types/event-types.js +1 -0
  287. package/dist/types/hygiene-types.d.ts +2 -0
  288. package/dist/types/hygiene-types.js +1 -0
  289. package/{src/types/principle-tree-schema.ts → dist/types/principle-tree-schema.d.ts} +2 -25
  290. package/dist/types/principle-tree-schema.js +24 -0
  291. package/dist/types/queue.d.ts +2 -0
  292. package/dist/types/queue.js +1 -0
  293. package/dist/types/runtime-summary.d.ts +1 -0
  294. package/dist/types/runtime-summary.js +1 -0
  295. package/dist/types.d.ts +33 -0
  296. package/dist/types.js +16 -0
  297. package/dist/utils/file-lock.d.ts +68 -0
  298. package/dist/utils/file-lock.js +310 -0
  299. package/dist/utils/hashing.d.ts +9 -0
  300. package/{src/utils/hashing.ts → dist/utils/hashing.js} +4 -6
  301. package/dist/utils/io.d.ts +11 -0
  302. package/dist/utils/io.js +174 -0
  303. package/dist/utils/node-vm-polyfill.d.ts +9 -0
  304. package/{src/utils/node-vm-polyfill.ts → dist/utils/node-vm-polyfill.js} +0 -2
  305. package/dist/utils/retry.d.ts +210 -0
  306. package/dist/utils/retry.js +375 -0
  307. package/dist/utils/session-key.d.ts +10 -0
  308. package/{src/utils/session-key.ts → dist/utils/session-key.js} +5 -4
  309. package/dist/utils/shadow-fingerprint.d.ts +16 -0
  310. package/dist/utils/shadow-fingerprint.js +34 -0
  311. package/dist/utils/workspace-resolver.d.ts +82 -0
  312. package/dist/utils/workspace-resolver.js +288 -0
  313. package/openclaw.plugin.json +1 -1
  314. package/package.json +8 -2
  315. package/templates/workspace/.principles/DECISION_POLICY.json +44 -0
  316. package/templates/workspace/.principles/PRINCIPLES.md +20 -0
  317. package/templates/workspace/.principles/PROFILE.json +54 -0
  318. package/templates/workspace/.principles/PROFILE.schema.json +56 -0
  319. package/templates/workspace/.principles/THINKING_OS.md +65 -0
  320. package/templates/workspace/.principles/THINKING_OS_ARCHIVE.md +7 -0
  321. package/templates/workspace/.principles/THINKING_OS_CANDIDATES.md +9 -0
  322. package/templates/workspace/.principles/models/_INDEX.md +27 -0
  323. package/templates/workspace/.principles/models/first_principles.md +62 -0
  324. package/templates/workspace/.principles/models/marketing_4p.md +52 -0
  325. package/templates/workspace/.principles/models/porter_five.md +63 -0
  326. package/templates/workspace/.principles/models/swot.md +60 -0
  327. package/templates/workspace/.principles/models/user_story_map.md +63 -0
  328. package/templates/workspace/.state/WORKBOARD.json +4 -0
  329. package/.dependency-cruiser.json +0 -19
  330. package/ADVANCED_CONFIG_ZH.md +0 -93
  331. package/AGENT_INSTALL.md +0 -173
  332. package/AGENT_INSTALL_EN.md +0 -173
  333. package/CHANGELOG.md +0 -26
  334. package/INSTALL.md +0 -254
  335. package/SKILL.md +0 -63
  336. package/esbuild.config.js +0 -104
  337. package/src/commands/archive-impl.ts +0 -147
  338. package/src/commands/capabilities.ts +0 -89
  339. package/src/commands/disable-impl.ts +0 -159
  340. package/src/commands/evolution-status.ts +0 -247
  341. package/src/commands/export.ts +0 -59
  342. package/src/commands/focus.ts +0 -523
  343. package/src/commands/principle-rollback.ts +0 -32
  344. package/src/commands/promote-impl.ts +0 -254
  345. package/src/commands/rollback-impl.ts +0 -246
  346. package/src/commands/samples.ts +0 -65
  347. package/src/commands/strategy.ts +0 -21
  348. package/src/config/errors.ts +0 -180
  349. package/src/constants/tools.ts +0 -62
  350. package/src/core/AGENTS.md +0 -34
  351. package/src/core/__tests__/focus-history.test.ts +0 -210
  352. package/src/core/bootstrap-rules.ts +0 -216
  353. package/src/core/code-implementation-storage.ts +0 -213
  354. package/src/core/config-health.ts +0 -72
  355. package/src/core/control-ui-db.ts +0 -454
  356. package/src/core/correction-cue-learner.ts +0 -239
  357. package/src/core/correction-types.ts +0 -16
  358. package/src/core/empathy-keyword-matcher.ts +0 -64
  359. package/src/core/empathy-types.ts +0 -18
  360. package/src/core/event-log.ts +0 -787
  361. package/src/core/evolution-engine.ts +0 -613
  362. package/src/core/evolution-logger.ts +0 -357
  363. package/src/core/evolution-migration.ts +0 -77
  364. package/src/core/evolution-reducer.ts +0 -891
  365. package/src/core/evolution-types.ts +0 -110
  366. package/src/core/external-training-contract.ts +0 -530
  367. package/src/core/file-store.ts +0 -80
  368. package/src/core/focus-history.ts +0 -763
  369. package/src/core/hygiene/tracker.ts +0 -122
  370. package/src/core/local-worker-routing.ts +0 -337
  371. package/src/core/model-deployment-registry.ts +0 -724
  372. package/src/core/model-training-registry.ts +0 -815
  373. package/src/core/observability.ts +0 -242
  374. package/src/core/pain-diagnostic-gate.ts +0 -169
  375. package/src/core/pain.ts +0 -309
  376. package/src/core/pd-config-loader.ts +0 -400
  377. package/src/core/pd-task-reconciler.ts +0 -380
  378. package/src/core/pd-task-service.ts +0 -43
  379. package/src/core/pd-task-store.ts +0 -78
  380. package/src/core/pd-task-types.ts +0 -24
  381. package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +0 -174
  382. package/src/core/principle-compiler/code-validator.ts +0 -96
  383. package/src/core/principle-compiler/compiler.ts +0 -327
  384. package/src/core/principle-compiler/ledger-registrar.ts +0 -116
  385. package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +0 -42
  386. package/src/core/principle-internalization/lifecycle-refresh.ts +0 -11
  387. package/src/core/principle-internalization/principle-lifecycle-service.ts +0 -170
  388. package/src/core/principle-training-state.ts +0 -177
  389. package/src/core/principle-tree-ledger-adapter.ts +0 -145
  390. package/src/core/principle-tree-ledger.ts +0 -725
  391. package/src/core/profile.ts +0 -228
  392. package/src/core/promotion-gate.ts +0 -854
  393. package/src/core/reflection/reflection-context.ts +0 -133
  394. package/src/core/replay-engine.ts +0 -106
  395. package/src/core/rule-host.ts +0 -386
  396. package/src/core/rule-implementation-runtime.ts +0 -145
  397. package/src/core/runtime-v2-prompt-activation-reader.ts +0 -114
  398. package/src/core/schema/migration-runner.ts +0 -207
  399. package/src/core/shadow-observation-registry.ts +0 -508
  400. package/src/core/surface-guard.ts +0 -188
  401. package/src/core/thinking-models.ts +0 -377
  402. package/src/core/thinking-os-parser.ts +0 -165
  403. package/src/core/trajectory-types.ts +0 -247
  404. package/src/core/trajectory.ts +0 -1831
  405. package/src/core/workflow-funnel-loader.ts +0 -195
  406. package/src/core/workspace-dir-validation.ts +0 -52
  407. package/src/hooks/AGENTS.md +0 -31
  408. package/src/hooks/after-tool-call-helpers.ts +0 -601
  409. package/src/hooks/after-tool-call-types.ts +0 -99
  410. package/src/hooks/gate-block-helper.ts +0 -265
  411. package/src/hooks/gate.ts +0 -394
  412. package/src/hooks/lifecycle.ts +0 -334
  413. package/src/hooks/message-sanitize.ts +0 -102
  414. package/src/hooks/pain.ts +0 -358
  415. package/src/hooks/prompt.ts +0 -1102
  416. package/src/hooks/raw-observation-adapter.ts +0 -215
  417. package/src/hooks/raw-observation-types.ts +0 -77
  418. package/src/hooks/trajectory-collector.ts +0 -253
  419. package/src/hooks/trajectory-evidence.ts +0 -97
  420. package/src/hooks/trigger-cooldown-tracker.ts +0 -82
  421. package/src/i18n/commands.ts +0 -101
  422. package/src/index.ts +0 -939
  423. package/src/openclaw-sdk.ts +0 -312
  424. package/src/service/central-database.ts +0 -936
  425. package/src/service/central-sync-service.ts +0 -85
  426. package/src/service/internalization-auto-consumer-service.ts +0 -397
  427. package/src/service/keyword-optimization-service.ts +0 -169
  428. package/src/service/phase3-input-filter.ts +0 -237
  429. package/src/service/queue-io.ts +0 -108
  430. package/src/service/runtime-summary-service.ts +0 -990
  431. package/src/service/trajectory-service.ts +0 -16
  432. package/src/service/workflow-watchdog.ts +0 -125
  433. package/src/types/event-types.ts +0 -39
  434. package/src/types/hygiene-types.ts +0 -8
  435. package/src/types/queue.ts +0 -15
  436. package/src/types/runtime-summary.ts +0 -5
  437. package/src/types.ts +0 -53
  438. package/src/utils/file-lock.ts +0 -394
  439. package/src/utils/io.ts +0 -176
  440. package/src/utils/retry.ts +0 -573
  441. package/src/utils/shadow-fingerprint.ts +0 -42
  442. package/src/utils/workspace-resolver.ts +0 -393
  443. package/tests/README.md +0 -120
  444. package/tests/build-artifacts.test.ts +0 -55
  445. package/tests/commands/evolution-status.test.ts +0 -511
  446. package/tests/commands/export.test.ts +0 -78
  447. package/tests/commands/pain.test.ts +0 -287
  448. package/tests/commands/samples.test.ts +0 -65
  449. package/tests/commands/strategy.test.ts +0 -19
  450. package/tests/commands/thinking-os.test.ts +0 -88
  451. package/tests/core/bootstrap-rules.test.ts +0 -596
  452. package/tests/core/code-implementation-storage.test.ts +0 -300
  453. package/tests/core/code-validator.test.ts +0 -197
  454. package/tests/core/config-service.test.ts +0 -89
  455. package/tests/core/config.test.ts +0 -90
  456. package/tests/core/control-ui-db.test.ts +0 -75
  457. package/tests/core/core-principle-registry-drift.test.ts +0 -39
  458. package/tests/core/core-template-guidance.test.ts +0 -21
  459. package/tests/core/correction-cue-learner.test.ts +0 -345
  460. package/tests/core/detection-service.test.ts +0 -50
  461. package/tests/core/dictionary-service.test.ts +0 -116
  462. package/tests/core/dictionary.test.ts +0 -171
  463. package/tests/core/empathy-keyword-matcher.test.ts +0 -209
  464. package/tests/core/event-log.test.ts +0 -484
  465. package/tests/core/evolution-engine.test.ts +0 -610
  466. package/tests/core/evolution-logger.test.ts +0 -148
  467. package/tests/core/evolution-migration.test.ts +0 -374
  468. package/tests/core/evolution-paths.test.ts +0 -21
  469. package/tests/core/evolution-reducer.compilation-retry.test.ts +0 -189
  470. package/tests/core/evolution-reducer.detector-metadata.test.ts +0 -602
  471. package/tests/core/evolution-types-loop.test.ts +0 -48
  472. package/tests/core/external-training-contract.test.ts +0 -463
  473. package/tests/core/file-store.test.ts +0 -102
  474. package/tests/core/focus-history.test.ts +0 -874
  475. package/tests/core/init-flatten.test.ts +0 -69
  476. package/tests/core/init-refactor.test.ts +0 -87
  477. package/tests/core/init-v1.3.test.ts +0 -46
  478. package/tests/core/init.test.ts +0 -190
  479. package/tests/core/ledger-registrar.test.ts +0 -235
  480. package/tests/core/migration.test.ts +0 -84
  481. package/tests/core/model-deployment-registry.test.ts +0 -858
  482. package/tests/core/model-training-registry.test.ts +0 -908
  483. package/tests/core/observability.test.ts +0 -382
  484. package/tests/core/pain-diagnostic-gate.test.ts +0 -614
  485. package/tests/core/pain-score.property.test.ts +0 -19
  486. package/tests/core/pain.test.ts +0 -132
  487. package/tests/core/path-resolver.test.ts +0 -57
  488. package/tests/core/paths-refactor.test.ts +0 -20
  489. package/tests/core/pd-config-loader.test.ts +0 -407
  490. package/tests/core/pd-task-store.test.ts +0 -126
  491. package/tests/core/phase7-rollout-integration.test.ts +0 -477
  492. package/tests/core/principle-compiler.test.ts +0 -350
  493. package/tests/core/principle-injection.test.ts +0 -223
  494. package/tests/core/principle-internalization/deprecated-readiness.test.ts +0 -193
  495. package/tests/core/principle-internalization/lifecycle-metrics.test.ts +0 -350
  496. package/tests/core/principle-internalization/lifecycle-routing-policy.test.ts +0 -212
  497. package/tests/core/principle-internalization/lineage-source-retired.test.ts +0 -56
  498. package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +0 -189
  499. package/tests/core/principle-training-state.test.ts +0 -939
  500. package/tests/core/principle-tree-ledger-adapter.test.ts +0 -253
  501. package/tests/core/principle-tree-ledger.test.ts +0 -423
  502. package/tests/core/profile.test.ts +0 -56
  503. package/tests/core/promotion-gate.test.ts +0 -561
  504. package/tests/core/queue-purge.test.ts +0 -337
  505. package/tests/core/reflection-context.test.ts +0 -342
  506. package/tests/core/regression-v1-9-1.test.ts +0 -266
  507. package/tests/core/replay-engine.test.ts +0 -165
  508. package/tests/core/risk-calculator.test.ts +0 -168
  509. package/tests/core/rule-host-adversarial-output.test.ts +0 -242
  510. package/tests/core/rule-host-autocorrect-vm.test.ts +0 -163
  511. package/tests/core/rule-host-helpers.test.ts +0 -120
  512. package/tests/core/rule-host-resource-bounds.test.ts +0 -231
  513. package/tests/core/rule-host-sqlite-source.test.ts +0 -720
  514. package/tests/core/rule-host-unhealthy-visibility.test.ts +0 -261
  515. package/tests/core/rule-host-validation.test.ts +0 -315
  516. package/tests/core/rule-implementation-runtime.test.ts +0 -49
  517. package/tests/core/session-tracker.test.ts +0 -191
  518. package/tests/core/surface-guard.test.ts +0 -338
  519. package/tests/core/template-generator.test.ts +0 -101
  520. package/tests/core/trajectory.test.ts +0 -427
  521. package/tests/core/workflow-funnel-loader.test.ts +0 -1028
  522. package/tests/core/workspace-context-factory.test.ts +0 -18
  523. package/tests/core/workspace-context.test.ts +0 -187
  524. package/tests/core/workspace-guidance-migrator.test.ts +0 -248
  525. package/tests/core-anti-growth.test.ts +0 -182
  526. package/tests/evolution-worker-quarantine.test.ts +0 -400
  527. package/tests/evolution-worker-slimming.test.ts +0 -380
  528. package/tests/fixtures/legacy-queue-v1.json +0 -74
  529. package/tests/fixtures/production-compatibility.test.ts +0 -147
  530. package/tests/fixtures/production-mock-generator.ts +0 -282
  531. package/tests/globalSetup.ts +0 -38
  532. package/tests/hook-workspace-nextaction-contract.test.ts +0 -50
  533. package/tests/hooks/confirm-first-removal.test.ts +0 -188
  534. package/tests/hooks/gate-auto-correct-shadow.test.ts +0 -309
  535. package/tests/hooks/gate-auto-correct.test.ts +0 -664
  536. package/tests/hooks/gate-block-helper-profile.test.ts +0 -186
  537. package/tests/hooks/gate-no-path-write-tool.test.ts +0 -171
  538. package/tests/hooks/gate-rule-host-pipeline.test.ts +0 -230
  539. package/tests/hooks/gate-rule-host-real-pipeline.test.ts +0 -190
  540. package/tests/hooks/lifecycle.test.ts +0 -248
  541. package/tests/hooks/message-sanitize.test.ts +0 -244
  542. package/tests/hooks/pain-emission-characterization.test.ts +0 -420
  543. package/tests/hooks/pain.test.ts +0 -795
  544. package/tests/hooks/prompt-characterization.test.ts +0 -476
  545. package/tests/hooks/prompt-diet.test.ts +0 -335
  546. package/tests/hooks/prompt-size-guard.test.ts +0 -319
  547. package/tests/hooks/raw-observation-adapter.test.ts +0 -312
  548. package/tests/hooks/runtime-v2-prompt-activation.test.ts +0 -895
  549. package/tests/hooks/single-gate-pain-admission.test.ts +0 -258
  550. package/tests/hooks/subagent.test.ts +0 -469
  551. package/tests/hooks/trajectory-collector.test.ts +0 -269
  552. package/tests/hooks/trajectory-evidence.test.ts +0 -280
  553. package/tests/hooks/triage-adapter.test.ts +0 -331
  554. package/tests/hygiene-tracker.test.ts +0 -77
  555. package/tests/index.test.ts +0 -142
  556. package/tests/integration/auto-entry-gate.test.ts +0 -256
  557. package/tests/integration/gate-real-io.e2e.test.ts +0 -248
  558. package/tests/integration/m8-legacy-paths.test.ts +0 -63
  559. package/tests/integration/mvp-surface-registry-guard.test.ts +0 -536
  560. package/tests/integration/pain-id-chain-e2e.test.ts +0 -313
  561. package/tests/integration/principle-compiler-e2e.test.ts +0 -403
  562. package/tests/integration/principle-lifecycle.e2e.test.ts +0 -198
  563. package/tests/integration/runtime-v2-pain-guard.test.ts +0 -125
  564. package/tests/integration/trajectory-lifecycle.e2e.test.ts +0 -523
  565. package/tests/internalization-auto-consumer-gate.test.ts +0 -158
  566. package/tests/internalization-auto-consumer-service.test.ts +0 -219
  567. package/tests/plugin-config-resolution-cutover.test.ts +0 -359
  568. package/tests/queue/async-lock.test.ts +0 -200
  569. package/tests/runtime-v2-discovery-guard.test.ts +0 -153
  570. package/tests/scripts/validate-live-path.test.ts +0 -286
  571. package/tests/service/central-database.test.ts +0 -457
  572. package/tests/service/correction-observer-service.test.ts +0 -505
  573. package/tests/service/evolution-worker.compilation-backfill.test.ts +0 -203
  574. package/tests/service/evolution-worker.correction-observer.test.ts +0 -50
  575. package/tests/service/evolution-worker.queue.test.ts +0 -296
  576. package/tests/service/evolution-worker.timeout.test.ts +0 -233
  577. package/tests/service/keyword-optimization-service.test.ts +0 -121
  578. package/tests/service/phase3-input-filter.test.ts +0 -289
  579. package/tests/service/queue-io.test.ts +0 -168
  580. package/tests/service/queue-migration.test.ts +0 -147
  581. package/tests/service/runtime-summary-service.test.ts +0 -1100
  582. package/tests/service/workflow-watchdog.test.ts +0 -281
  583. package/tests/task-compliance.test.ts +0 -166
  584. package/tests/test-utils.ts +0 -48
  585. package/tests/utils/file-lock.test.ts +0 -409
  586. package/tests/utils/hashing.test.ts +0 -32
  587. package/tests/utils/hook-workspace-resolver.test.ts +0 -524
  588. package/tests/utils/io.test.ts +0 -39
  589. package/tests/utils/retry.test.ts +0 -327
  590. package/tests/utils/session-key.test.ts +0 -52
  591. package/tsconfig.json +0 -16
  592. package/vitest.config.ts +0 -61
  593. package/vitest.unit.config.ts +0 -12
@@ -0,0 +1,72 @@
1
+ /**
2
+ * WorkflowFunnelLoader — Loads and watches workflows.yaml as the SSOT
3
+ * for WORKFLOW_FUNNELS definition table.
4
+ *
5
+ * D-01: workflows.yaml is the single source of truth (SSOT).
6
+ * D-02: workflows.yaml lives in .state/ directory per workspace.
7
+ * D-03: Developers manually maintain workflows.yaml (no auto-registration).
8
+ * D-04: Code only reads YAML, never writes it.
9
+ */
10
+ /**
11
+ * A single stage in a workflow funnel.
12
+ * Policy fields are optional — existing stages without policy fields remain valid.
13
+ */
14
+ export interface WorkflowStage {
15
+ name: string;
16
+ eventType: string;
17
+ eventCategory: string;
18
+ statsField: string;
19
+ timeoutMs?: number;
20
+ successCriteria?: string;
21
+ legacyDisabled?: boolean;
22
+ observability?: {
23
+ enabled?: boolean;
24
+ emitEvents?: string[];
25
+ };
26
+ }
27
+ /**
28
+ * Funnel-level policy that applies to all stages unless overridden per-stage.
29
+ */
30
+ export interface FunnelPolicy {
31
+ timeoutMs?: number;
32
+ stageOrder?: 'strict' | 'relaxed';
33
+ legacyDisabled?: boolean;
34
+ observability?: {
35
+ enabled?: boolean;
36
+ emitEvents?: string[];
37
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
38
+ };
39
+ }
40
+ /**
41
+ * A workflow funnel definition.
42
+ */
43
+ export interface WorkflowFunnel {
44
+ workflowId: string;
45
+ stages: WorkflowStage[];
46
+ policy?: FunnelPolicy;
47
+ }
48
+ /**
49
+ * Root of workflows.yaml schema.
50
+ */
51
+ export interface WorkflowFunnelConfig {
52
+ version: string;
53
+ funnels: WorkflowFunnel[];
54
+ }
55
+ export declare class WorkflowFunnelLoader {
56
+ private readonly funnels;
57
+ private readonly fullFunnels;
58
+ private readonly configPath;
59
+ private watchHandle?;
60
+ private readonly warnings;
61
+ constructor(stateDir: string);
62
+ load(): void;
63
+ watch(): void;
64
+ dispose(): void;
65
+ getStages(workflowId: string): WorkflowStage[];
66
+ getFunnel(workflowId: string): WorkflowFunnel | undefined;
67
+ getAllFunnels(): Map<string, WorkflowStage[]>;
68
+ getAllFunnelsWithPolicy(): Map<string, WorkflowFunnel>;
69
+ getWarnings(): string[];
70
+ getConfigPath(): string;
71
+ private cloneFunnel;
72
+ }
@@ -0,0 +1,135 @@
1
+ /**
2
+ * WorkflowFunnelLoader — Loads and watches workflows.yaml as the SSOT
3
+ * for WORKFLOW_FUNNELS definition table.
4
+ *
5
+ * D-01: workflows.yaml is the single source of truth (SSOT).
6
+ * D-02: workflows.yaml lives in .state/ directory per workspace.
7
+ * D-03: Developers manually maintain workflows.yaml (no auto-registration).
8
+ * D-04: Code only reads YAML, never writes it.
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import yaml from 'js-yaml';
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ // WorkflowFunnelLoader
15
+ // ─────────────────────────────────────────────────────────────────────────────
16
+ export class WorkflowFunnelLoader {
17
+ funnels = new Map();
18
+ fullFunnels = new Map();
19
+ configPath;
20
+ watchHandle;
21
+ warnings = [];
22
+ constructor(stateDir) {
23
+ this.configPath = path.join(stateDir, 'workflows.yaml');
24
+ this.load();
25
+ }
26
+ load() {
27
+ this.warnings.length = 0;
28
+ if (!fs.existsSync(this.configPath)) {
29
+ this.warnings.push('workflows.yaml file not found.');
30
+ this.funnels.clear();
31
+ this.fullFunnels.clear();
32
+ return;
33
+ }
34
+ try {
35
+ const content = fs.readFileSync(this.configPath, 'utf-8');
36
+ const config = yaml.load(content, { schema: yaml.DEFAULT_SCHEMA });
37
+ if (!config || typeof config.version !== 'string' || !Array.isArray(config.funnels)) {
38
+ const msg = 'workflows.yaml validation failed: missing version or funnels array. Preserving last valid config.';
39
+ console.warn(`[WorkflowFunnelLoader] ${msg}`);
40
+ this.warnings.push(msg);
41
+ return;
42
+ }
43
+ const newFunnels = new Map();
44
+ const newFullFunnels = new Map();
45
+ for (const funnel of config.funnels) {
46
+ if (funnel?.workflowId && typeof funnel.workflowId === 'string' && Array.isArray(funnel.stages)) {
47
+ newFunnels.set(funnel.workflowId, funnel.stages);
48
+ newFullFunnels.set(funnel.workflowId, funnel);
49
+ }
50
+ else {
51
+ const msg = 'Skipping invalid funnel entry: missing workflowId or stages.';
52
+ console.warn(`[WorkflowFunnelLoader] ${msg}`);
53
+ this.warnings.push(msg);
54
+ }
55
+ }
56
+ this.funnels.clear();
57
+ this.fullFunnels.clear();
58
+ for (const [k, v] of newFunnels) {
59
+ this.funnels.set(k, v);
60
+ }
61
+ for (const [k, v] of newFullFunnels) {
62
+ this.fullFunnels.set(k, v);
63
+ }
64
+ }
65
+ catch (err) {
66
+ const msg = `Failed to parse workflows.yaml: ${String(err)}. Preserving last valid config.`;
67
+ console.warn(`[WorkflowFunnelLoader] ${msg}`);
68
+ this.warnings.push(msg);
69
+ }
70
+ }
71
+ watch() {
72
+ if (this.watchHandle)
73
+ return;
74
+ if (!fs.existsSync(this.configPath))
75
+ return;
76
+ let debounceTimer;
77
+ this.watchHandle = fs.watch(this.configPath, (eventType) => {
78
+ if (eventType !== 'change' && eventType !== 'rename')
79
+ return;
80
+ if (debounceTimer)
81
+ clearTimeout(debounceTimer);
82
+ debounceTimer = setTimeout(() => this.load(), 100);
83
+ });
84
+ }
85
+ dispose() {
86
+ if (this.watchHandle) {
87
+ this.watchHandle.close();
88
+ this.watchHandle = undefined;
89
+ }
90
+ }
91
+ getStages(workflowId) {
92
+ return this.funnels.get(workflowId) ?? [];
93
+ }
94
+ getFunnel(workflowId) {
95
+ const funnel = this.fullFunnels.get(workflowId);
96
+ if (!funnel)
97
+ return undefined;
98
+ return this.cloneFunnel(funnel);
99
+ }
100
+ getAllFunnels() {
101
+ const result = new Map();
102
+ for (const [k, v] of this.funnels) {
103
+ result.set(k, v.map(stage => ({ ...stage })));
104
+ }
105
+ return result;
106
+ }
107
+ getAllFunnelsWithPolicy() {
108
+ const result = new Map();
109
+ for (const [k, v] of this.fullFunnels) {
110
+ result.set(k, this.cloneFunnel(v));
111
+ }
112
+ return result;
113
+ }
114
+ getWarnings() {
115
+ return [...this.warnings];
116
+ }
117
+ getConfigPath() {
118
+ return this.configPath;
119
+ }
120
+ cloneFunnel(funnel) {
121
+ return {
122
+ ...funnel,
123
+ stages: funnel.stages.map(stage => ({ ...stage })),
124
+ policy: funnel.policy ? {
125
+ ...funnel.policy,
126
+ observability: funnel.policy.observability ? {
127
+ ...funnel.policy.observability,
128
+ emitEvents: funnel.policy.observability.emitEvents
129
+ ? [...funnel.policy.observability.emitEvents]
130
+ : undefined,
131
+ } : undefined,
132
+ } : undefined,
133
+ };
134
+ }
135
+ }
@@ -0,0 +1,111 @@
1
+ import type { PD_FILES } from './paths.js';
2
+ import type { PainConfig } from './config.js';
3
+ import type { EventLog } from './event-log.js';
4
+ import type { PainDictionary } from './dictionary.js';
5
+ import { HygieneTracker } from './hygiene/tracker.js';
6
+ import { EvolutionReducerImpl } from './evolution-reducer.js';
7
+ import type { TrajectoryDatabase } from './trajectory.js';
8
+ import { PrincipleLifecycleService } from './principle-internalization/principle-lifecycle-service.js';
9
+ import { type PrincipleSubtree } from './principle-tree-ledger.js';
10
+ import type { Principle, PrincipleValueMetrics } from '../types/principle-tree-schema.js';
11
+ import type { Principle as ActivePrinciple } from './evolution-types.js';
12
+ interface PrincipleTreeLedgerAccessor {
13
+ getPrincipleSubtree(_principleId: string): PrincipleSubtree | undefined;
14
+ updatePrinciple(_principleId: string, updates: Partial<Principle>): Principle;
15
+ updatePrincipleValueMetrics(principleId: string, _metrics: PrincipleValueMetrics): PrincipleValueMetrics;
16
+ }
17
+ /**
18
+ * WorkspaceContext - Centralized management of workspace-specific paths and services.
19
+ * Implements a cached singleton pattern per workspace directory.
20
+ */
21
+ export declare class WorkspaceContext {
22
+ private static readonly instances;
23
+ private static readonly pathResolver;
24
+ readonly workspaceDir: string;
25
+ readonly stateDir: string;
26
+ private _config?;
27
+ private _eventLog?;
28
+ private _dictionary?;
29
+ private _hygiene?;
30
+ private _evolutionReducer?;
31
+ private _trajectory?;
32
+ private _principleTreeLedger?;
33
+ private _principleLifecycle?;
34
+ private constructor();
35
+ /**
36
+ * Governance configuration for this workspace.
37
+ */
38
+ get config(): PainConfig;
39
+ /**
40
+ * Event logging service for this workspace.
41
+ */
42
+ get eventLog(): EventLog;
43
+ /**
44
+ * Pain dictionary service for this workspace.
45
+ */
46
+ get dictionary(): PainDictionary;
47
+ /**
48
+ * Hygiene tracking service for this workspace.
49
+ */
50
+ get hygiene(): HygieneTracker;
51
+ /**
52
+ * Evolution reducer singleton for this workspace.
53
+ */
54
+ get evolutionReducer(): EvolutionReducerImpl;
55
+ /**
56
+ * Trajectory database for analytics and sample curation.
57
+ */
58
+ get trajectory(): TrajectoryDatabase;
59
+ /**
60
+ * Locked ledger access for principle tree reads and metric writes in this workspace.
61
+ */
62
+ get principleTreeLedger(): PrincipleTreeLedgerAccessor;
63
+ /**
64
+ * Phase 15 lifecycle/read-model surface for metrics, assessments, and route recommendations.
65
+ */
66
+ get principleLifecycle(): PrincipleLifecycleService;
67
+ /**
68
+ * Retrieve active Principle -> Rule -> Implementation subtrees without bypassing reducer authority.
69
+ */
70
+ getActivePrincipleSubtrees(): {
71
+ principle: ActivePrinciple;
72
+ subtree: PrincipleSubtree;
73
+ }[];
74
+ private getTrajectoryOptions;
75
+ /**
76
+ * Creates or retrieves a WorkspaceContext instance from an OpenClaw hook context.
77
+ * Uses PathResolver to handle path normalization and fallback logic.
78
+ * @throws Error if workspaceDir is missing and no fallback available.
79
+ */
80
+ static fromHookContext(ctx: any): WorkspaceContext;
81
+ /**
82
+ * Creates a WorkspaceContext requiring explicit workspaceDir.
83
+ * For Runtime V2 entrypoints where implicit PathResolver fallback is unacceptable.
84
+ * @throws Error if workspaceDir is not provided in the context.
85
+ */
86
+ static fromHookContextExplicit(ctx: {
87
+ workspaceDir?: string;
88
+ logger?: {
89
+ error?: (...args: unknown[]) => void;
90
+ warn?: (...args: unknown[]) => void;
91
+ info?: (...args: unknown[]) => void;
92
+ };
93
+ }): WorkspaceContext;
94
+ /**
95
+ * Resolves a PD file path within the workspace.
96
+ */
97
+ resolve(fileKey: keyof typeof PD_FILES): string;
98
+ /**
99
+ * Resets internal caches for services and paths.
100
+ */
101
+ invalidate(): void;
102
+ /**
103
+ * Removes a workspace from the cache.
104
+ */
105
+ static dispose(workspaceDir: string): void;
106
+ /**
107
+ * Clears the instance cache (primarily for testing).
108
+ */
109
+ static clearCache(): void;
110
+ }
111
+ export {};
@@ -1,235 +1,184 @@
1
- import type { PD_FILES } from './paths.js';
2
1
  import { resolvePdPath } from './paths.js';
3
2
  import { PathResolver } from './path-resolver.js';
4
3
  import { validateWorkspaceDir } from './workspace-dir-validation.js';
5
4
  import { ConfigService } from './config-service.js';
6
- import type { PainConfig } from './config.js';
7
- import type { EventLog } from './event-log.js';
8
5
  import { EventLogService } from './event-log.js';
9
6
  import { DictionaryService } from './dictionary-service.js';
10
- import type { PainDictionary } from './dictionary.js';
11
7
  import { HygieneTracker } from './hygiene/tracker.js';
12
8
  import { EvolutionReducerImpl } from './evolution-reducer.js';
13
- import type { TrajectoryDatabase, TrajectoryDatabaseOptions } from './trajectory.js';
14
9
  import { TrajectoryRegistry } from './trajectory.js';
15
10
  import { PrincipleLifecycleService } from './principle-internalization/principle-lifecycle-service.js';
16
- import {
17
- getPrincipleSubtree,
18
- updatePrinciple,
19
- updatePrincipleValueMetrics,
20
- type PrincipleSubtree,
21
- } from './principle-tree-ledger.js';
22
- import type { Principle, PrincipleValueMetrics } from '../types/principle-tree-schema.js';
23
- import type { Principle as ActivePrinciple } from './evolution-types.js';
24
-
25
-
26
- interface PrincipleTreeLedgerAccessor {
27
- getPrincipleSubtree(_principleId: string): PrincipleSubtree | undefined;
28
- updatePrinciple(_principleId: string, updates: Partial<Principle>): Principle;
29
- updatePrincipleValueMetrics(principleId: string, _metrics: PrincipleValueMetrics): PrincipleValueMetrics;
30
- }
31
-
32
-
11
+ import { getPrincipleSubtree, updatePrinciple, updatePrincipleValueMetrics, } from './principle-tree-ledger.js';
33
12
  /**
34
13
  * WorkspaceContext - Centralized management of workspace-specific paths and services.
35
14
  * Implements a cached singleton pattern per workspace directory.
36
15
  */
37
16
  export class WorkspaceContext {
38
- private static readonly instances = new Map<string, WorkspaceContext>();
39
- private static readonly pathResolver = new PathResolver();
40
-
41
- public readonly workspaceDir: string;
42
- public readonly stateDir: string;
43
-
44
- private _config?: PainConfig;
45
- private _eventLog?: EventLog;
46
- private _dictionary?: PainDictionary;
47
- private _hygiene?: HygieneTracker;
48
- private _evolutionReducer?: EvolutionReducerImpl;
49
- private _trajectory?: TrajectoryDatabase;
50
- private _principleTreeLedger?: PrincipleTreeLedgerAccessor;
51
- private _principleLifecycle?: PrincipleLifecycleService;
52
-
53
- private constructor(workspaceDir: string, stateDir: string) {
17
+ static instances = new Map();
18
+ static pathResolver = new PathResolver();
19
+ workspaceDir;
20
+ stateDir;
21
+ _config;
22
+ _eventLog;
23
+ _dictionary;
24
+ _hygiene;
25
+ _evolutionReducer;
26
+ _trajectory;
27
+ _principleTreeLedger;
28
+ _principleLifecycle;
29
+ constructor(workspaceDir, stateDir) {
54
30
  this.workspaceDir = workspaceDir;
55
31
  this.stateDir = stateDir;
56
32
  }
57
-
58
33
  /**
59
34
  * Governance configuration for this workspace.
60
35
  */
61
- get config(): PainConfig {
36
+ get config() {
62
37
  if (!this._config) {
63
38
  this._config = ConfigService.get(this.stateDir);
64
39
  }
65
40
  return this._config;
66
41
  }
67
-
68
42
  /**
69
43
  * Event logging service for this workspace.
70
44
  */
71
- get eventLog(): EventLog {
45
+ get eventLog() {
72
46
  if (!this._eventLog) {
73
47
  this._eventLog = EventLogService.get(this.stateDir);
74
48
  }
75
49
  return this._eventLog;
76
50
  }
77
-
78
51
  /**
79
52
  * Pain dictionary service for this workspace.
80
53
  */
81
- get dictionary(): PainDictionary {
54
+ get dictionary() {
82
55
  if (!this._dictionary) {
83
56
  this._dictionary = DictionaryService.get(this.stateDir);
84
57
  }
85
58
  return this._dictionary;
86
59
  }
87
-
88
60
  /**
89
61
  * Hygiene tracking service for this workspace.
90
62
  */
91
- get hygiene(): HygieneTracker {
63
+ get hygiene() {
92
64
  if (!this._hygiene) {
93
65
  this._hygiene = new HygieneTracker(this.stateDir);
94
66
  }
95
67
  return this._hygiene;
96
68
  }
97
-
98
-
99
69
  /**
100
70
  * Evolution reducer singleton for this workspace.
101
71
  */
102
- get evolutionReducer(): EvolutionReducerImpl {
72
+ get evolutionReducer() {
103
73
  if (!this._evolutionReducer) {
104
74
  this._evolutionReducer = new EvolutionReducerImpl({ workspaceDir: this.workspaceDir, stateDir: this.stateDir });
105
75
  }
106
76
  return this._evolutionReducer;
107
77
  }
108
-
109
78
  /**
110
79
  * Trajectory database for analytics and sample curation.
111
80
  */
112
- get trajectory(): TrajectoryDatabase {
81
+ get trajectory() {
113
82
  if (!this._trajectory) {
114
83
  this._trajectory = TrajectoryRegistry.get(this.workspaceDir, this.getTrajectoryOptions());
115
84
  }
116
85
  return this._trajectory;
117
86
  }
118
-
119
87
  /**
120
88
  * Locked ledger access for principle tree reads and metric writes in this workspace.
121
89
  */
122
- get principleTreeLedger(): PrincipleTreeLedgerAccessor {
90
+ get principleTreeLedger() {
123
91
  if (!this._principleTreeLedger) {
124
92
  this._principleTreeLedger = {
125
- getPrincipleSubtree: (principleId: string) => getPrincipleSubtree(this.stateDir, principleId),
126
- updatePrinciple: (principleId: string, updates: Partial<Principle>) =>
127
- updatePrinciple(this.stateDir, principleId, updates),
128
- updatePrincipleValueMetrics: (principleId: string, metrics: PrincipleValueMetrics) =>
129
- updatePrincipleValueMetrics(this.stateDir, principleId, metrics),
93
+ getPrincipleSubtree: (principleId) => getPrincipleSubtree(this.stateDir, principleId),
94
+ updatePrinciple: (principleId, updates) => updatePrinciple(this.stateDir, principleId, updates),
95
+ updatePrincipleValueMetrics: (principleId, metrics) => updatePrincipleValueMetrics(this.stateDir, principleId, metrics),
130
96
  };
131
97
  }
132
98
  return this._principleTreeLedger;
133
99
  }
134
-
135
100
  /**
136
101
  * Phase 15 lifecycle/read-model surface for metrics, assessments, and route recommendations.
137
102
  */
138
- get principleLifecycle(): PrincipleLifecycleService {
103
+ get principleLifecycle() {
139
104
  if (!this._principleLifecycle) {
140
105
  this._principleLifecycle = new PrincipleLifecycleService(this.workspaceDir, this.stateDir);
141
106
  }
142
107
  return this._principleLifecycle;
143
108
  }
144
-
145
109
  /**
146
110
  * Retrieve active Principle -> Rule -> Implementation subtrees without bypassing reducer authority.
147
111
  */
148
- getActivePrincipleSubtrees(): { principle: ActivePrinciple; subtree: PrincipleSubtree }[] {
112
+ getActivePrincipleSubtrees() {
149
113
  return this.evolutionReducer
150
114
  .getActivePrinciples()
151
115
  .map((principle) => {
152
- const subtree = this.principleTreeLedger.getPrincipleSubtree(principle.id);
153
- return subtree ? { principle, subtree } : null;
154
- })
155
- .filter(
156
- (entry): entry is { principle: ActivePrinciple; subtree: PrincipleSubtree } => entry !== null,
157
- );
116
+ const subtree = this.principleTreeLedger.getPrincipleSubtree(principle.id);
117
+ return subtree ? { principle, subtree } : null;
118
+ })
119
+ .filter((entry) => entry !== null);
158
120
  }
159
-
160
- private getTrajectoryOptions(): Omit<TrajectoryDatabaseOptions, 'workspaceDir'> {
121
+ getTrajectoryOptions() {
161
122
  const inlineThreshold = Number(this.config.get('trajectory.blob_inline_threshold_bytes'));
162
123
  const busyTimeoutMs = Number(this.config.get('trajectory.busy_timeout_ms'));
163
124
  const orphanBlobGraceDays = Number(this.config.get('trajectory.orphan_blob_grace_days'));
164
-
165
125
  return {
166
126
  blobInlineThresholdBytes: Number.isFinite(inlineThreshold) && inlineThreshold > 0 ? inlineThreshold : undefined,
167
127
  busyTimeoutMs: Number.isFinite(busyTimeoutMs) && busyTimeoutMs >= 0 ? busyTimeoutMs : undefined,
168
128
  orphanBlobGraceDays: Number.isFinite(orphanBlobGraceDays) && orphanBlobGraceDays >= 0 ? orphanBlobGraceDays : undefined,
169
129
  };
170
130
  }
171
-
172
131
  /**
173
132
  * Creates or retrieves a WorkspaceContext instance from an OpenClaw hook context.
174
133
  * Uses PathResolver to handle path normalization and fallback logic.
175
134
  * @throws Error if workspaceDir is missing and no fallback available.
176
135
  */
177
-
178
- static fromHookContext(ctx: any): WorkspaceContext {
179
- const {logger} = ctx;
180
- const log = (msg: string) => logger?.info?.(msg);
181
- const logWarn = (msg: string) => logger?.warn?.(msg);
182
-
183
- let {workspaceDir} = ctx;
184
-
136
+ static fromHookContext(ctx) {
137
+ const { logger } = ctx;
138
+ const log = (msg) => logger?.info?.(msg);
139
+ const logWarn = (msg) => logger?.warn?.(msg);
140
+ let { workspaceDir } = ctx;
185
141
  if (!workspaceDir) {
186
142
  logWarn('[PD:WorkspaceContext] workspaceDir not provided in context, using PathResolver fallback');
187
143
  workspaceDir = this.pathResolver.getWorkspaceDir();
188
144
  log(`[PD:WorkspaceContext] Resolved workspaceDir to: ${workspaceDir}`);
189
- } else {
145
+ }
146
+ else {
190
147
  const normalized = this.pathResolver.normalizeWorkspacePath(workspaceDir);
191
148
  if (normalized !== workspaceDir) {
192
149
  log(`[PD:WorkspaceContext] Normalized workspaceDir: ${workspaceDir} -> ${normalized}`);
193
150
  workspaceDir = normalized;
194
151
  }
195
152
  }
196
-
197
153
  const validationIssue = validateWorkspaceDir(workspaceDir);
198
154
  if (validationIssue !== null) {
199
- logWarn(
200
- `[PD:WorkspaceContext] LEGACY_PATH_RESOLVER_FALLBACK: ${validationIssue}. ` +
201
- 'This is a legacy discovery path; explicit workspaceDir should be provided in the hook context.',
202
- );
155
+ logWarn(`[PD:WorkspaceContext] LEGACY_PATH_RESOLVER_FALLBACK: ${validationIssue}. ` +
156
+ 'This is a legacy discovery path; explicit workspaceDir should be provided in the hook context.');
203
157
  }
204
-
205
158
  const existing = this.instances.get(workspaceDir);
206
- if (existing) return existing;
207
-
208
- let {stateDir} = ctx;
159
+ if (existing)
160
+ return existing;
161
+ let { stateDir } = ctx;
209
162
  if (!stateDir) {
210
163
  stateDir = resolvePdPath(workspaceDir, 'STATE_DIR');
211
164
  log(`[PD:WorkspaceContext] Computed stateDir: ${stateDir}`);
212
165
  }
213
-
214
166
  const instance = new WorkspaceContext(workspaceDir, stateDir);
215
167
  this.instances.set(workspaceDir, instance);
216
-
217
168
  log(`[PD:WorkspaceContext] Created new context for workspace: ${workspaceDir}`);
218
-
219
169
  return instance;
220
170
  }
221
-
222
171
  /**
223
172
  * Creates a WorkspaceContext requiring explicit workspaceDir.
224
173
  * For Runtime V2 entrypoints where implicit PathResolver fallback is unacceptable.
225
174
  * @throws Error if workspaceDir is not provided in the context.
226
175
  */
227
- static fromHookContextExplicit(ctx: { workspaceDir?: string; logger?: { error?: (...args: unknown[]) => void; warn?: (...args: unknown[]) => void; info?: (...args: unknown[]) => void } }): WorkspaceContext {
176
+ static fromHookContextExplicit(ctx) {
228
177
  const { logger } = ctx;
229
178
  let { workspaceDir } = ctx;
230
179
  if (!workspaceDir || !workspaceDir.trim()) {
231
180
  const error = {
232
- ok: false as const,
181
+ ok: false,
233
182
  reason: 'workspace_dir_missing',
234
183
  message: 'workspaceDir is required for Runtime V2 entrypoints. Provide it explicitly in the hook context.',
235
184
  nextAction: 'Ensure the OpenClaw hook context includes workspaceDir, or use PD_WORKSPACE_DIR env var.',
@@ -245,7 +194,7 @@ export class WorkspaceContext {
245
194
  const validationIssue = validateWorkspaceDir(workspaceDir);
246
195
  if (validationIssue !== null) {
247
196
  const error = {
248
- ok: false as const,
197
+ ok: false,
249
198
  reason: 'workspace_dir_invalid',
250
199
  message: `workspaceDir validation failed for Runtime V2 entrypoint: ${validationIssue}`,
251
200
  nextAction: 'Provide a valid workspaceDir that is not the home directory, root, or empty.',
@@ -255,18 +204,16 @@ export class WorkspaceContext {
255
204
  }
256
205
  return this.fromHookContext({ ...ctx, workspaceDir });
257
206
  }
258
-
259
207
  /**
260
208
  * Resolves a PD file path within the workspace.
261
209
  */
262
- resolve(fileKey: keyof typeof PD_FILES): string {
210
+ resolve(fileKey) {
263
211
  return resolvePdPath(this.workspaceDir, fileKey);
264
212
  }
265
-
266
213
  /**
267
214
  * Resets internal caches for services and paths.
268
215
  */
269
- invalidate(): void {
216
+ invalidate() {
270
217
  this._config = undefined;
271
218
  this._eventLog = undefined;
272
219
  this._dictionary = undefined;
@@ -275,11 +222,10 @@ export class WorkspaceContext {
275
222
  this._principleTreeLedger = undefined;
276
223
  this._principleLifecycle = undefined;
277
224
  }
278
-
279
225
  /**
280
226
  * Removes a workspace from the cache.
281
227
  */
282
- static dispose(workspaceDir: string): void {
228
+ static dispose(workspaceDir) {
283
229
  const normalized = this.pathResolver.normalizeWorkspacePath(workspaceDir);
284
230
  const instance = this.instances.get(normalized);
285
231
  if (instance) {
@@ -288,11 +234,10 @@ export class WorkspaceContext {
288
234
  }
289
235
  TrajectoryRegistry.dispose(normalized);
290
236
  }
291
-
292
237
  /**
293
238
  * Clears the instance cache (primarily for testing).
294
239
  */
295
- static clearCache(): void {
240
+ static clearCache() {
296
241
  for (const instance of this.instances.values()) {
297
242
  instance.invalidate();
298
243
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * WorkspaceDir Validation Utilities
3
+ *
4
+ * This module only validates candidate workspace directories. Runtime hook
5
+ * resolution policy lives at the I/O boundary in utils/workspace-resolver.ts.
6
+ */
7
+ export interface WorkspaceResolutionContext {
8
+ workspaceDir?: string;
9
+ agentId?: string;
10
+ }
11
+ export declare function validateWorkspaceDir(dir: string | undefined): string | null;