principles-disciple 1.126.0 → 1.128.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 -93
  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,103 @@
1
+ /**
2
+ * Workflow Watchdog - Extracted from evolution-worker.ts (lines 79-223)
3
+ *
4
+ * Detects stale/orphaned workflows, invalid results, and cleanup failures.
5
+ * Runs every heartbeat cycle, catching bugs like:
6
+ * #185 — orphaned active workflows
7
+ * #181 — structurally invalid results (all zeros)
8
+ * #180/#183 — expired workflows not swept
9
+ * #182 — unhandled rejections leaving workflows in limbo
10
+ *
11
+ * BUG-01: isExpectedSubagentError guard prevents marking daemon-mode stale
12
+ * workflows as terminal_error (line 122)
13
+ * BUG-02: Gateway fallback cleans up child sessions via agentSession when
14
+ * subagentRuntime unavailable (lines 148-156)
15
+ */
16
+ import { WorkflowStore } from './subagent-workflow/workflow-store.js';
17
+ import { isExpectedSubagentError } from './subagent-workflow/subagent-error-utils.js';
18
+ import { WORKFLOW_TTL_MS } from '../config/defaults/runtime.js';
19
+ export async function runWorkflowWatchdog(wctx, api, logger) {
20
+ const details = [];
21
+ const now = Date.now();
22
+ const subagentRuntime = api?.runtime?.subagent;
23
+ const agentSession = api?.runtime?.agent?.session;
24
+ try {
25
+ const store = new WorkflowStore({ workspaceDir: wctx.workspaceDir });
26
+ try {
27
+ const allWorkflows = store.listWorkflows();
28
+ const staleThreshold = WORKFLOW_TTL_MS * 2;
29
+ const staleActive = allWorkflows.filter((wf) => wf.state === 'active' && (now - wf.created_at) > staleThreshold);
30
+ if (staleActive.length > 0) {
31
+ for (const wf of staleActive) {
32
+ const ageMin = Math.round((now - wf.created_at) / 60000);
33
+ details.push(`stale_active: ${wf.workflow_id} (${wf.workflow_type}, ${ageMin}min old)`);
34
+ const events = store.getEvents(wf.workflow_id);
35
+ const lastEventReason = events.length > 0 ? events[events.length - 1].reason : 'unknown';
36
+ if (isExpectedSubagentError(lastEventReason)) {
37
+ logger?.debug?.(`[PD:Watchdog] Skipping stale active workflow ${wf.workflow_id}: expected subagent error (${lastEventReason})`);
38
+ continue;
39
+ }
40
+ store.updateWorkflowState(wf.workflow_id, 'terminal_error');
41
+ store.recordEvent(wf.workflow_id, 'watchdog_timeout', 'active', 'terminal_error', `Stale active > ${staleThreshold / 60000}s`, { ageMs: now - wf.created_at });
42
+ if (wf.child_session_key) {
43
+ try {
44
+ if (subagentRuntime) {
45
+ await subagentRuntime.deleteSession({ sessionKey: wf.child_session_key, deleteTranscript: true });
46
+ logger?.info?.(`[PD:Watchdog] Cleaned up stale session: ${wf.child_session_key}`);
47
+ }
48
+ else if (agentSession) {
49
+ const storePath = agentSession.resolveStorePath();
50
+ const sessionStore = agentSession.loadSessionStore(storePath, { skipCache: true });
51
+ const normalizedKey = wf.child_session_key.toLowerCase();
52
+ if (sessionStore[normalizedKey]) {
53
+ delete sessionStore[normalizedKey];
54
+ await agentSession.saveSessionStore(storePath, sessionStore);
55
+ logger?.info?.(`[PD:Watchdog] Cleaned up stale session via agentSession fallback: ${wf.child_session_key}`);
56
+ }
57
+ }
58
+ }
59
+ catch (cleanupErr) {
60
+ const errMsg = String(cleanupErr);
61
+ if (errMsg.includes('gateway request') && agentSession) {
62
+ const storePath = agentSession.resolveStorePath();
63
+ const sessionStore = agentSession.loadSessionStore(storePath, { skipCache: true });
64
+ const normalizedKey = wf.child_session_key.toLowerCase();
65
+ if (sessionStore[normalizedKey]) {
66
+ delete sessionStore[normalizedKey];
67
+ await agentSession.saveSessionStore(storePath, sessionStore);
68
+ logger?.info?.(`[PD:Watchdog] Cleaned up stale session via agentSession fallback after gateway error: ${wf.child_session_key}`);
69
+ }
70
+ }
71
+ else {
72
+ logger?.warn?.(`[PD:Watchdog] Failed to cleanup session ${wf.child_session_key}: ${errMsg}`);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ const unclearedTerminal = allWorkflows.filter((wf) => (wf.state === 'terminal_error' || wf.state === 'expired') && wf.cleanup_state === 'pending');
79
+ if (unclearedTerminal.length > 0) {
80
+ details.push(`uncleared_terminal: ${unclearedTerminal.length} workflows (will be swept next cycle)`);
81
+ }
82
+ const stateCounts = {};
83
+ for (const wf of allWorkflows) {
84
+ stateCounts[wf.state] = (stateCounts[wf.state] || 0) + 1;
85
+ }
86
+ const stateSummary = Object.entries(stateCounts).map(([s, c]) => `${s}=${c}`).join(', ');
87
+ if (details.length === 0) {
88
+ logger?.debug?.(`[PD:Watchdog] OK — ${allWorkflows.length} workflows (${stateSummary})`);
89
+ }
90
+ else {
91
+ logger?.info?.(`[PD:Watchdog] ${details.length} anomalies — ${allWorkflows.length} workflows (${stateSummary})`);
92
+ }
93
+ }
94
+ finally {
95
+ store.dispose();
96
+ }
97
+ }
98
+ catch (err) {
99
+ logger?.warn?.(`[PD:Watchdog] Failed to scan workflows: ${String(err)}`);
100
+ return { anomalies: -1, details: [], scanError: String(err) };
101
+ }
102
+ return { anomalies: details.length, details };
103
+ }
@@ -0,0 +1,2 @@
1
+ export type { EventType, EventCategory, EventLogEntry, ToolCallEventData, PainSignalEventData, RuleMatchEventData, RulePromotionEventData, HookExecutionEventData, GateBlockEventData, GateBypassEventData, PlanApprovalEventData, EvolutionTaskEventData, EmpathyRollbackEventData, HeartbeatDiagnosisEventData, DiagnosisTaskEventData, DiagnosticianReportEventData, PrincipleCandidateEventData, RuleEnforcedEventData, RuleHostEvaluatedEventData, RuleHostBlockedEventData, RuleHostRequireApprovalEventData, RuleHostAutoCorrectProposedEventData, RuleHostAutoCorrectAppliedEventData, RuntimeV2PromptActivationsInjectedEventData, RuleHostUnhealthyEventData, ToolCallStats, ErrorStats, PainStats, EmpathyEventStats, GfiStats, EvolutionStats as EventEvolutionStats, HookStats, DailyStats, } from '@principles/core/runtime-v2';
2
+ export { createEmptyDailyStats, } from '@principles/core/runtime-v2';
@@ -0,0 +1 @@
1
+ export { createEmptyDailyStats, } from '@principles/core/runtime-v2';
@@ -0,0 +1,2 @@
1
+ export type { PersistenceAction, HygieneStats, } from '@principles/core/runtime-v2';
2
+ export { createEmptyHygieneStats, } from '@principles/core/runtime-v2';
@@ -0,0 +1 @@
1
+ export { createEmptyHygieneStats, } from '@principles/core/runtime-v2';
@@ -21,32 +21,9 @@
21
21
  * - Monitor principles deprecated (solidified into code/weights)
22
22
  * - Track principle value ranking (pain prevented, adherence rate)
23
23
  */
24
-
25
24
  import type { Principle as CorePrinciple } from '@principles/core/runtime-v2';
26
25
  import type { PrincipleDetectorSpec } from '../core/evolution-types.js';
27
-
28
- // Re-exported from core (PRI-51) for plugin consumers
29
- export type {
30
- PrinciplePriority,
31
- PrincipleScope,
32
- PrincipleEvaluability,
33
- RuleStatus,
34
- RuleType,
35
- ImplementationLifecycleState,
36
- ImplementationType,
37
- Rule,
38
- Implementation,
39
- PrincipleDependency,
40
- PrincipleValueMetrics,
41
- PrincipleEventType,
42
- PrincipleLifecycleEvent,
43
- PrincipleTreeStore,
44
- } from '@principles/core/runtime-v2';
45
-
46
- // =========================================================================
47
- // 1. PRINCIPLE (Tree Root) — Highly abstract, cross-scenario, value-driven
48
- // =========================================================================
49
-
26
+ export type { PrinciplePriority, PrincipleScope, PrincipleEvaluability, RuleStatus, RuleType, ImplementationLifecycleState, ImplementationType, Rule, Implementation, PrincipleDependency, PrincipleValueMetrics, PrincipleEventType, PrincipleLifecycleEvent, PrincipleTreeStore, } from '@principles/core/runtime-v2';
50
27
  export interface Principle extends CorePrinciple {
51
- detectorMetadata?: PrincipleDetectorSpec;
28
+ detectorMetadata?: PrincipleDetectorSpec;
52
29
  }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Principle-Tree Schema Design
3
+ *
4
+ * Concept: Principles are the root of a tree that branches into Rules
5
+ * and eventually into concrete Implementations (code, skills, LoRA weights).
6
+ *
7
+ * A principle without supporting rules is an empty concept — LLM may ignore it.
8
+ * A rule without a parent principle lacks strategic direction.
9
+ *
10
+ * Lifecycle:
11
+ * Pain Signal → Diagnosis → Principle (root)
12
+ * ↓
13
+ * Rule (trunk)
14
+ * ↓
15
+ * Implementation (leaf)
16
+ * ↓
17
+ * Rule 100% covered → Principle deprecated
18
+ *
19
+ * User Focus:
20
+ * - Monitor new principles added by diagnostician
21
+ * - Monitor principles deprecated (solidified into code/weights)
22
+ * - Track principle value ranking (pain prevented, adherence rate)
23
+ */
24
+ export {};
@@ -0,0 +1,2 @@
1
+ export type { Brand, QueueItemId, WorkflowId, SessionKey, } from '@principles/core/runtime-v2';
2
+ export { toQueueItemId, toWorkflowId, toSessionKey, isQueueItemId, isWorkflowId, isSessionKey, } from '@principles/core/runtime-v2';
@@ -0,0 +1 @@
1
+ export { toQueueItemId, toWorkflowId, toSessionKey, isQueueItemId, isWorkflowId, isSessionKey, } from '@principles/core/runtime-v2';
@@ -0,0 +1 @@
1
+ export type { RuntimeTruth, AnalyticsTruth, TrendMetrics, } from '@principles/core/runtime-v2';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ export type { PluginCommandContext, PluginCommandResult } from './openclaw-sdk.js';
2
+ /**
3
+ * Context Injection Configuration
4
+ * Controls what content gets injected into the LLM prompt.
5
+ *
6
+ * NOTE: Core Principles (PRINCIPLES.md) are ALWAYS injected and cannot be disabled.
7
+ * This is by design - principles are the foundation of the agent's behavior.
8
+ */
9
+ export type ProjectFocusMode = 'full' | 'summary' | 'off';
10
+ export interface EvolutionContextConfig {
11
+ /** Enable conversation context in evolution task (default: true) */
12
+ enabled: boolean;
13
+ /** Max recent messages included in evolution task (default: 4) */
14
+ maxMessages: number;
15
+ /** Max chars per message snippet (default: 200) */
16
+ maxCharsPerMessage: number;
17
+ }
18
+ export interface ContextInjectionConfig {
19
+ /** Thinking OS (mental models) - can be toggled */
20
+ thinkingOs: boolean;
21
+ /** Project context (CURRENT_FOCUS.md) mode */
22
+ projectFocus: ProjectFocusMode;
23
+ /** Evolution task context injection settings */
24
+ evolutionContext: EvolutionContextConfig;
25
+ }
26
+ /**
27
+ * Default context injection configuration
28
+ * Based on MVP-first strategy (ADR-0014):
29
+ * - principles: always on (not configurable)
30
+ * - thinkingOs: false by default (MVP-Quiet, user can opt-in via /pd-context)
31
+ * - projectFocus: 'off' (default closed, user can enable)
32
+ */
33
+ export declare const defaultContextConfig: ContextInjectionConfig;
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Default context injection configuration
3
+ * Based on MVP-first strategy (ADR-0014):
4
+ * - principles: always on (not configurable)
5
+ * - thinkingOs: false by default (MVP-Quiet, user can opt-in via /pd-context)
6
+ * - projectFocus: 'off' (default closed, user can enable)
7
+ */
8
+ export const defaultContextConfig = {
9
+ thinkingOs: false,
10
+ projectFocus: 'off',
11
+ evolutionContext: {
12
+ enabled: true,
13
+ maxMessages: 4,
14
+ maxCharsPerMessage: 200,
15
+ },
16
+ };
@@ -0,0 +1,68 @@
1
+ export interface LockOptions {
2
+ /** 最大重试次数,默认 50 */
3
+ maxRetries?: number;
4
+ /** 基础重试延迟(ms),默认 10 */
5
+ baseRetryDelayMs?: number;
6
+ /** 最大重试延迟(ms),默认 500 */
7
+ maxRetryDelayMs?: number;
8
+ /** 锁过期时间(ms),默认 10000 (10秒) */
9
+ lockStaleMs?: number;
10
+ /** 锁文件后缀,默认 '.lock' */
11
+ lockSuffix?: string;
12
+ }
13
+ export interface LockContext {
14
+ /** 锁文件路径 */
15
+ lockPath: string;
16
+ /** 持有锁的 PID */
17
+ pid: number;
18
+ /** 获取锁的时间 */
19
+ acquiredAt: number;
20
+ }
21
+ export declare class LockAcquisitionError extends Error {
22
+ readonly filePath: string;
23
+ readonly lockPath: string;
24
+ constructor(message: string, filePath: string, lockPath: string);
25
+ }
26
+ /**
27
+ * 获取文件锁
28
+ *
29
+ * @param filePath 要锁定的文件路径
30
+ * @param options 锁选项
31
+ * @returns 锁上下文(用于后续释放)
32
+ * @throws Error 如果无法获取锁
33
+ */
34
+ export declare function acquireLock(filePath: string, options?: LockOptions): LockContext;
35
+ export declare function acquireLockAsync(filePath: string, options?: LockOptions): Promise<LockContext>;
36
+ /**
37
+ * 释放文件锁
38
+ *
39
+ * @param ctx 锁上下文(由 acquireLock 返回)
40
+ */
41
+ export declare function releaseLock(ctx: LockContext): void;
42
+ /**
43
+ * 使用锁执行操作(自动获取和释放)
44
+ *
45
+ * @param filePath 要锁定的文件路径
46
+ * @param fn 要执行的操作
47
+ * @param options 锁选项
48
+ * @returns 操作的返回值
49
+ */
50
+ export declare function withLock<T>(filePath: string, fn: () => T, options?: LockOptions): T;
51
+ export declare function withLockAsync<T>(filePath: string, fn: () => Promise<T>, options?: LockOptions): Promise<T>;
52
+ /**
53
+ * 异步版本的文件锁(使用 Promise 链)
54
+ *
55
+ * 注意:这是一个简化的实现,适用于单进程内的异步并发控制
56
+ * 对于多进程场景,应使用同步版本的 acquireLock
57
+ */
58
+ export declare const asyncLockQueues: Map<string, Promise<void>>;
59
+ export declare function withAsyncLock<T>(filePath: string, fn: () => Promise<T>): Promise<T>;
60
+ /**
61
+ * 检查锁状态(用于调试)
62
+ */
63
+ export declare function getLockStatus(filePath: string, options?: LockOptions): {
64
+ locked: boolean;
65
+ holderPid: number | null;
66
+ holderAlive: boolean;
67
+ lockAge: number | null;
68
+ };
@@ -0,0 +1,310 @@
1
+ /**
2
+ * Reliable File Lock - 可靠的文件锁实现
3
+ *
4
+ * 设计原则:
5
+ * 1. 使用 O_EXCL | O_CREAT 实现真正的原子锁获取
6
+ * 2. PID 存活检测避免死锁
7
+ * 3. 带退避的重试机制
8
+ * 4. 锁获取后二次验证
9
+ * 5. 数据不丢失:失败时抛出异常而非静默返回
10
+ */
11
+ /* global NodeJS */
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ export class LockAcquisitionError extends Error {
15
+ filePath;
16
+ lockPath;
17
+ constructor(message, filePath, lockPath) {
18
+ super(message);
19
+ this.name = 'LockAcquisitionError';
20
+ this.filePath = filePath;
21
+ this.lockPath = lockPath;
22
+ }
23
+ }
24
+ /** 默认锁选项 */
25
+ const DEFAULT_OPTIONS = {
26
+ maxRetries: 50,
27
+ baseRetryDelayMs: 10,
28
+ maxRetryDelayMs: 500,
29
+ lockStaleMs: 10000,
30
+ lockSuffix: '.lock',
31
+ };
32
+ /**
33
+ * 检查进程是否存活
34
+ */
35
+ function isProcessAlive(pid) {
36
+ try {
37
+ // 发送信号 0 不会真正发送信号,只检查进程是否存在
38
+ process.kill(pid, 0);
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /**
46
+ * 原子创建锁文件
47
+ * 使用 O_EXCL | O_CREAT 确保原子性
48
+ *
49
+ * @returns true 表示成功获取锁,false 表示锁被占用
50
+ */
51
+ function tryAcquireLock(lockPath, pid) {
52
+ try {
53
+ // 确保锁文件的目录存在
54
+ const lockDir = path.dirname(lockPath);
55
+ if (!fs.existsSync(lockDir)) {
56
+ fs.mkdirSync(lockDir, { recursive: true });
57
+ }
58
+ // 使用 fs.constants 获取正确的 flag 值
59
+ // O_EXCL: 排他创建 - 与 O_CREAT 一起使用时,如果文件存在则失败
60
+ // O_CREAT: 文件不存在时创建
61
+ // O_WRONLY: 只写模式
62
+ const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL;
63
+ // 使用底层的 openSync 实现真正的原子操作
64
+ // 如果文件已存在,会抛出 EEXIST 错误
65
+ const fd = fs.openSync(lockPath, flags);
66
+ // 写入 PID
67
+ fs.writeSync(fd, String(pid));
68
+ fs.fsyncSync(fd); // 确保数据落盘
69
+ fs.closeSync(fd);
70
+ return true;
71
+ }
72
+ catch (err) {
73
+ if (err.code === 'EEXIST') {
74
+ return false; // 锁已被占用
75
+ }
76
+ // 其他错误(权限、磁盘满等)向上抛出
77
+ throw err;
78
+ }
79
+ }
80
+ /**
81
+ * 读取锁文件中的 PID
82
+ * @returns PID 或 null(如果文件不存在或无法解析)
83
+ */
84
+ function readLockPid(lockPath) {
85
+ try {
86
+ const content = fs.readFileSync(lockPath, 'utf8');
87
+ const pid = parseInt(content.trim(), 10);
88
+ return Number.isNaN(pid) ? null : pid;
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ /**
95
+ * 安全删除锁文件
96
+ * 只有当锁文件包含当前进程的 PID 时才删除
97
+ */
98
+ function safeReleaseLock(lockPath, expectedPid) {
99
+ try {
100
+ const pid = readLockPid(lockPath);
101
+ if (pid === expectedPid) {
102
+ fs.unlinkSync(lockPath);
103
+ }
104
+ // 如果 PID 不匹配,说明锁已被其他进程重新获取,不删除
105
+ }
106
+ catch {
107
+ // 忽略删除错误
108
+ }
109
+ }
110
+ /**
111
+ * 检查并清理过期锁
112
+ */
113
+ function cleanupStaleLock(lockPath, staleMs) {
114
+ try {
115
+ const stat = fs.statSync(lockPath);
116
+ const pid = readLockPid(lockPath);
117
+ // 检查是否过期
118
+ const isStale = Date.now() - stat.mtimeMs > staleMs;
119
+ // 检查持有者是否已死亡
120
+ // PID 为 null 表示锁文件损坏,应视为无效锁
121
+ const isDead = pid === null || !isProcessAlive(pid);
122
+ // 满足任一条件即可清理:过期、持有者死亡、PID 无效
123
+ if (isStale || isDead) {
124
+ try {
125
+ fs.unlinkSync(lockPath);
126
+ return true;
127
+ }
128
+ catch {
129
+ return false;
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ catch {
135
+ return false;
136
+ }
137
+ }
138
+ /**
139
+ * 计算退避延迟(指数退避 + 抖动)
140
+ */
141
+ function calculateBackoff(attempt, baseMs, maxMs) {
142
+ // 指数退避:10, 20, 40, 80, 160, 320, 500, 500, ...
143
+ const exponentialDelay = Math.min(baseMs * Math.pow(2, attempt), maxMs);
144
+ // 添加 20% 的随机抖动,避免多个进程同时重试
145
+ const jitter = exponentialDelay * 0.2 * Math.random();
146
+ return Math.floor(exponentialDelay + jitter);
147
+ }
148
+ function sleep(ms) {
149
+ return new Promise((resolve) => setTimeout(resolve, ms));
150
+ }
151
+ function sleepSync(ms) {
152
+ const end = Date.now() + ms;
153
+ while (Date.now() < end) {
154
+ // busy wait for synchronous retry
155
+ }
156
+ }
157
+ function buildLockError(filePath, lockPath) {
158
+ const holderPid = readLockPid(lockPath);
159
+ const holderStatus = holderPid !== null
160
+ ? (isProcessAlive(holderPid) ? `alive (PID ${holderPid})` : `dead (PID ${holderPid})`)
161
+ : 'unknown';
162
+ return new LockAcquisitionError(`Failed to acquire lock for ${filePath}. Lock holder: ${holderStatus}.`, filePath, lockPath);
163
+ }
164
+ function tryAcquireWithStaleCleanup(filePath, opts, pid) {
165
+ const lockPath = filePath + opts.lockSuffix;
166
+ if (tryAcquireLock(lockPath, pid)) {
167
+ const actualPid = readLockPid(lockPath);
168
+ if (actualPid === pid) {
169
+ return { lockPath, pid, acquiredAt: Date.now() };
170
+ }
171
+ }
172
+ cleanupStaleLock(lockPath, opts.lockStaleMs);
173
+ if (tryAcquireLock(lockPath, pid)) {
174
+ const actualPid = readLockPid(lockPath);
175
+ if (actualPid === pid) {
176
+ return { lockPath, pid, acquiredAt: Date.now() };
177
+ }
178
+ }
179
+ return null;
180
+ }
181
+ /**
182
+ * 获取文件锁
183
+ *
184
+ * @param filePath 要锁定的文件路径
185
+ * @param options 锁选项
186
+ * @returns 锁上下文(用于后续释放)
187
+ * @throws Error 如果无法获取锁
188
+ */
189
+ export function acquireLock(filePath, options = {}) {
190
+ const opts = { ...DEFAULT_OPTIONS, ...options };
191
+ const { pid } = process;
192
+ for (let attempt = 0; attempt < opts.maxRetries; attempt++) {
193
+ const ctx = tryAcquireWithStaleCleanup(filePath, opts, pid);
194
+ if (ctx) {
195
+ return ctx;
196
+ }
197
+ if (attempt < opts.maxRetries - 1) {
198
+ const delay = calculateBackoff(attempt, opts.baseRetryDelayMs, opts.maxRetryDelayMs);
199
+ sleepSync(delay);
200
+ }
201
+ }
202
+ throw buildLockError(filePath, filePath + opts.lockSuffix);
203
+ }
204
+ export async function acquireLockAsync(filePath, options = {}) {
205
+ const opts = { ...DEFAULT_OPTIONS, ...options };
206
+ const { pid } = process;
207
+ for (let attempt = 0; attempt < opts.maxRetries; attempt++) {
208
+ const ctx = tryAcquireWithStaleCleanup(filePath, opts, pid);
209
+ if (ctx) {
210
+ return ctx;
211
+ }
212
+ if (attempt < opts.maxRetries - 1) {
213
+ const delay = calculateBackoff(attempt, opts.baseRetryDelayMs, opts.maxRetryDelayMs);
214
+ await sleep(delay);
215
+ }
216
+ }
217
+ throw buildLockError(filePath, filePath + opts.lockSuffix);
218
+ }
219
+ /**
220
+ * 释放文件锁
221
+ *
222
+ * @param ctx 锁上下文(由 acquireLock 返回)
223
+ */
224
+ export function releaseLock(ctx) {
225
+ safeReleaseLock(ctx.lockPath, ctx.pid);
226
+ }
227
+ /**
228
+ * 使用锁执行操作(自动获取和释放)
229
+ *
230
+ * @param filePath 要锁定的文件路径
231
+ * @param fn 要执行的操作
232
+ * @param options 锁选项
233
+ * @returns 操作的返回值
234
+ */
235
+ export function withLock(filePath, fn, options = {}) {
236
+ const ctx = acquireLock(filePath, options);
237
+ try {
238
+ return fn();
239
+ }
240
+ finally {
241
+ releaseLock(ctx);
242
+ }
243
+ }
244
+ export async function withLockAsync(filePath, fn, options = {}) {
245
+ const ctx = await acquireLockAsync(filePath, options);
246
+ try {
247
+ return await fn();
248
+ }
249
+ finally {
250
+ releaseLock(ctx);
251
+ }
252
+ }
253
+ /**
254
+ * 异步版本的文件锁(使用 Promise 链)
255
+ *
256
+ * 注意:这是一个简化的实现,适用于单进程内的异步并发控制
257
+ * 对于多进程场景,应使用同步版本的 acquireLock
258
+ */
259
+ export const asyncLockQueues = new Map();
260
+ export async function withAsyncLock(filePath, fn) {
261
+ const lockPath = filePath + '.async';
262
+ // 获取或创建该文件的任务队列
263
+ let queue = asyncLockQueues.get(lockPath);
264
+ // 创建新的 Promise 链
265
+ let resolveRelease;
266
+ const releasePromise = new Promise(resolve => {
267
+ resolveRelease = resolve;
268
+ });
269
+ // 将当前任务加入队列
270
+ const previousQueue = queue || Promise.resolve();
271
+ const currentQueue = previousQueue.then(() => releasePromise);
272
+ asyncLockQueues.set(lockPath, currentQueue);
273
+ // 等待前面的任务完成
274
+ await previousQueue;
275
+ try {
276
+ return await fn();
277
+ }
278
+ finally {
279
+ resolveRelease();
280
+ // 清理已完成的队列
281
+ if (asyncLockQueues.get(lockPath) === currentQueue) {
282
+ asyncLockQueues.delete(lockPath);
283
+ }
284
+ }
285
+ }
286
+ /**
287
+ * 检查锁状态(用于调试)
288
+ */
289
+ export function getLockStatus(filePath, options = {}) {
290
+ const opts = { ...DEFAULT_OPTIONS, ...options };
291
+ const lockPath = filePath + opts.lockSuffix;
292
+ try {
293
+ const stat = fs.statSync(lockPath);
294
+ const pid = readLockPid(lockPath);
295
+ return {
296
+ locked: true,
297
+ holderPid: pid,
298
+ holderAlive: pid !== null && isProcessAlive(pid),
299
+ lockAge: Date.now() - stat.mtimeMs,
300
+ };
301
+ }
302
+ catch {
303
+ return {
304
+ locked: false,
305
+ holderPid: null,
306
+ holderAlive: false,
307
+ lockAge: null,
308
+ };
309
+ }
310
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Strips timestamps, UUIDs, and hex memory addresses from error messages
3
+ * to allow for consistent loop detection even if the raw text varies slightly.
4
+ */
5
+ export declare function denoiseError(text: string): string;
6
+ /**
7
+ * Computes a simple SHA-256 hash of the given string.
8
+ */
9
+ export declare function computeHash(text: string): string;
@@ -1,12 +1,11 @@
1
1
  import { createHash } from 'crypto';
2
-
3
2
  /**
4
3
  * Strips timestamps, UUIDs, and hex memory addresses from error messages
5
4
  * to allow for consistent loop detection even if the raw text varies slightly.
6
5
  */
7
- export function denoiseError(text: string): string {
8
- if (!text) return '';
9
-
6
+ export function denoiseError(text) {
7
+ if (!text)
8
+ return '';
10
9
  return text
11
10
  // Strip ISO timestamps and common date formats
12
11
  .replace(/\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}:\d{2}(\.\d+)?Z?/g, '[TIME]')
@@ -18,10 +17,9 @@ export function denoiseError(text: string): string {
18
17
  .replace(/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/g, '[UUID]')
19
18
  .trim();
20
19
  }
21
-
22
20
  /**
23
21
  * Computes a simple SHA-256 hash of the given string.
24
22
  */
25
- export function computeHash(text: string): string {
23
+ export function computeHash(text) {
26
24
  return createHash('sha256').update(text).digest('hex');
27
25
  }
@@ -0,0 +1,11 @@
1
+ export declare function atomicWriteFileSync(filePath: string, data: string): void;
2
+ export declare function normalizePath(filePath: string, projectDir: string): string;
3
+ export declare function normalizeRiskPath(p: string): string;
4
+ export declare function isRisky(relPath: string, riskPaths: string[]): boolean;
5
+ export declare function parseKvLines(text: string): Record<string, string>;
6
+ export declare function serializeKvLines(data: Record<string, any>): string;
7
+ /**
8
+ * Normalize command arguments from PluginCommandContext.args.
9
+ * Handles string | string[] | undefined union by joining arrays with spaces.
10
+ */
11
+ export declare function normalizeCommandArgs(args: string | string[] | undefined): string;