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,194 @@
1
+ /**
2
+ * Promote Implementation Command — CLI `/pd-promote-impl`
3
+ * ========================================================
4
+ *
5
+ * PURPOSE: Manually promote a candidate implementation to active status
6
+ * after replay evaluation review.
7
+ *
8
+ * FLOW:
9
+ * 1. List candidates with replay reports
10
+ * 2. Show replay report summary for selected candidate
11
+ * 3. Ask for confirmation
12
+ * 4. On confirm: transition candidate->active, demote previous active->disabled
13
+ *
14
+ * VALIDATION:
15
+ * - Candidate must have at least one replay report with 'pass' decision
16
+ * - Only candidate -> active is valid for promotion
17
+ * - NOTE (PRI-230): The legacy replay generation path has been retired.
18
+ * This command is temporarily unavailable for implementations without
19
+ * pre-existing replay reports until a Runtime V2 replay entry is wired.
20
+ */
21
+ import * as fs from 'fs';
22
+ import * as path from 'path';
23
+ import { ReplayEngine, formatReplayReport } from '../core/replay-engine.js';
24
+ import { refreshPrincipleLifecycle } from '../core/principle-internalization/lifecycle-refresh.js';
25
+ import { findActiveImplementation, loadLedger, transitionImplementationState, updateImplementation, } from '../core/principle-tree-ledger.js';
26
+ import { WorkspaceContext } from '../core/workspace-context.js';
27
+ import { normalizeCommandArgs } from '../utils/io.js';
28
+ import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
29
+ import { withLock } from '../utils/file-lock.js';
30
+ import { atomicWriteFileSync } from '../utils/io.js';
31
+ function getAllImplementations(stateDir) {
32
+ const ledger = loadLedger(stateDir);
33
+ return Object.values(ledger.tree.implementations);
34
+ }
35
+ /**
36
+ * Type predicate: true if impl has lifecycleState of 'candidate' or 'disabled'.
37
+ * The ledger adds lifecycleState at runtime beyond what's in the manifest interface.
38
+ */
39
+ function isCandidateOrDisabled(impl) {
40
+ return impl.lifecycleState === 'candidate' || impl.lifecycleState === 'disabled';
41
+ }
42
+ function _handleListCandidates(stateDir, isZh) {
43
+ const engine = new ReplayEngine('', stateDir);
44
+ const allImpls = getAllImplementations(stateDir);
45
+ const candidates = allImpls.filter(isCandidateOrDisabled);
46
+ if (candidates.length === 0) {
47
+ return {
48
+ text: isZh
49
+ ? '\nℹ️ 未找到候选实现。\n\n用法: /pd-promote-impl list'
50
+ : '\nℹ️ No candidate implementations found.\n\nUsage: /pd-promote-impl list',
51
+ };
52
+ }
53
+ let output = isZh ? '\n📋 候选实现列表\n' : '\n📋 Candidate Implementations\n';
54
+ output += `${'='.repeat(50)}\n`;
55
+ for (const impl of candidates) {
56
+ const hasPass = engine.hasPassingReport(impl.id);
57
+ const passBadge = hasPass
58
+ ? isZh ? '✅ 有通过报告' : '✅ Has pass report'
59
+ : isZh ? '❌ 无通过报告' : '❌ No pass report';
60
+ output += ` ${impl.id}\n`;
61
+ output += ` Rule: ${impl.ruleId} | Version: ${impl.version}\n`;
62
+ output += ` Replay: ${passBadge}\n\n`;
63
+ }
64
+ return { text: output };
65
+ }
66
+ function _handleShowReport(stateDir, implId, isZh) {
67
+ const engine = new ReplayEngine('', stateDir);
68
+ const report = engine.getLatestReport(implId);
69
+ if (!report) {
70
+ return {
71
+ text: isZh
72
+ ? `❌ 实现 ${implId} 没有回放报告。`
73
+ : `❌ No replay report found for implementation ${implId}.`,
74
+ };
75
+ }
76
+ return { text: formatReplayReport(report) };
77
+ }
78
+ function _handlePromoteImpl(options) {
79
+ const { workspaceDir, stateDir, implId, isZh } = options;
80
+ const engine = new ReplayEngine('', stateDir);
81
+ const allImpls = getAllImplementations(stateDir);
82
+ const candidate = allImpls.find((i) => i.id === implId);
83
+ if (!candidate) {
84
+ return {
85
+ text: isZh
86
+ ? `❌ 未找到实现: ${implId}`
87
+ : `❌ Implementation not found: ${implId}`,
88
+ };
89
+ }
90
+ const currentState = candidate.lifecycleState || 'candidate';
91
+ if (currentState !== 'candidate' && currentState !== 'disabled') {
92
+ return {
93
+ text: isZh
94
+ ? `❌ 只能晋升 candidate 或 disabled 状态的实现。当前: ${currentState}`
95
+ : `❌ Can only promote 'candidate' or 'disabled' implementations. Current: ${currentState}`,
96
+ };
97
+ }
98
+ if (!engine.hasPassingReport(implId)) {
99
+ return {
100
+ text: isZh
101
+ ? `❌ 实现 ${implId} 没有通过的回放报告,晋升被拒绝。\n\nLegacy replay 生成路径已在 PRI-230 退役,当前无可用的 replay 证据生成入口。该命令暂不可用于没有既有 replay 报告的实现。`
102
+ : `❌ Implementation ${implId} has no passing replay report. Promotion rejected.\n\nThe legacy replay generation path was retired in PRI-230; no replay evidence generation entry is currently available. This command is temporarily unavailable for implementations without pre-existing replay reports.`,
103
+ };
104
+ }
105
+ const report = engine.getLatestReport(implId);
106
+ let output = '';
107
+ if (report) {
108
+ output = `${formatReplayReport(report)}\n`;
109
+ }
110
+ if (currentState === 'disabled') {
111
+ transitionImplementationState(stateDir, implId, 'active');
112
+ updateImplementation(stateDir, implId, {
113
+ disabledAt: undefined,
114
+ disabledBy: undefined,
115
+ disabledReason: undefined,
116
+ });
117
+ try {
118
+ refreshPrincipleLifecycle(workspaceDir, stateDir);
119
+ }
120
+ catch (err) {
121
+ console.warn('[promote-impl] Lifecycle refresh failed (re-enable):', err instanceof Error ? err.stack : err);
122
+ }
123
+ output += isZh
124
+ ? `\n✅ 实现已重新启用: ${implId}\n 状态: disabled -> active`
125
+ : `\n✅ Implementation re-enabled: ${implId}\n State: disabled -> active`;
126
+ return { text: output };
127
+ }
128
+ const activeForRule = findActiveImplementation(stateDir, candidate.ruleId);
129
+ if (activeForRule) {
130
+ updateImplementation(stateDir, implId, {
131
+ previousActive: activeForRule.id,
132
+ });
133
+ }
134
+ transitionImplementationState(stateDir, implId, 'active');
135
+ if (activeForRule) {
136
+ transitionImplementationState(stateDir, activeForRule.id, 'disabled');
137
+ output += isZh
138
+ ? `\n上一个活跃实现已禁用: ${activeForRule.id}\n 状态: active -> disabled`
139
+ : `\nPrevious active implementation disabled: ${activeForRule.id}\n State: active -> disabled`;
140
+ }
141
+ const eventsDir = path.join(stateDir, 'principles', 'implementations', implId, 'events');
142
+ if (!fs.existsSync(eventsDir)) {
143
+ fs.mkdirSync(eventsDir, { recursive: true });
144
+ }
145
+ const eventPath = path.join(eventsDir, 'promotion.json');
146
+ const promotionEvent = {
147
+ eventType: 'promotion',
148
+ implementationId: implId,
149
+ ruleId: candidate.ruleId,
150
+ fromState: 'candidate',
151
+ toState: 'active',
152
+ previousActive: activeForRule?.id ?? null,
153
+ replayReportId: report
154
+ ? report.generatedAt.replace(/[:.]/g, '-')
155
+ : null,
156
+ promotedAt: new Date().toISOString(),
157
+ };
158
+ withLock(eventPath, () => {
159
+ atomicWriteFileSync(eventPath, JSON.stringify(promotionEvent, null, 2));
160
+ });
161
+ try {
162
+ refreshPrincipleLifecycle(workspaceDir, stateDir);
163
+ }
164
+ catch (err) {
165
+ console.warn('[promote-impl] Lifecycle refresh failed (promotion):', err instanceof Error ? err.stack : err);
166
+ }
167
+ output += isZh
168
+ ? `\n\n✅ 实现已晋升: ${implId}\n 状态: candidate -> active`
169
+ : `\n\n✅ Implementation promoted: ${implId}\n State: candidate -> active`;
170
+ return { text: output };
171
+ }
172
+ export function handlePromoteImplCommand(ctx) {
173
+ const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'promote-impl');
174
+ const { stateDir } = WorkspaceContext.fromHookContext({ ...ctx, workspaceDir });
175
+ const lang = ctx.config?.language || 'en';
176
+ const isZh = lang === 'zh';
177
+ const args = normalizeCommandArgs(ctx.args).trim().split(/\s+/);
178
+ const subcommand = args[0] || '';
179
+ const implId = args[1] || '';
180
+ if (subcommand === 'list' || subcommand === '') {
181
+ return _handleListCandidates(stateDir, isZh);
182
+ }
183
+ if (subcommand === 'show') {
184
+ if (!implId) {
185
+ return {
186
+ text: isZh
187
+ ? '请指定要查看的实现ID: /pd-promote-impl show <implId>'
188
+ : 'Please specify an implementation ID: /pd-promote-impl show <implId>',
189
+ };
190
+ }
191
+ return _handleShowReport(stateDir, implId, isZh);
192
+ }
193
+ return _handlePromoteImpl({ workspaceDir, stateDir, implId: subcommand, isZh });
194
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Rollback Implementation Command — CLI `/pd-rollback-impl`
3
+ * ==========================================================
4
+ *
5
+ * PURPOSE: Revert the current active implementation and restore the previous one.
6
+ *
7
+ * FLOW:
8
+ * 1. List active implementations
9
+ * 2. On confirm: current -> disabled, previous -> active
10
+ *
11
+ * SAFETY:
12
+ * - If no previous active: current -> disabled (degrades to hard-boundary gates)
13
+ * - Rollback records persisted with full audit trail
14
+ */
15
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
16
+ /**
17
+ * Handle the /pd-rollback-impl command.
18
+ *
19
+ * Usage:
20
+ * /pd-rollback-impl list - List active implementations
21
+ * /pd-rollback-impl <implId> - Rollback current active
22
+ * /pd-rollback-impl <implId> --reason "<reason>" - Rollback with reason
23
+ */
24
+ export declare function handleRollbackImplCommand(ctx: PluginCommandContext): PluginCommandResult;
25
+ /**
26
+ * Handle natural language rollback request.
27
+ * Detects phrases like "回滚这个规则实现", "rollback this implementation".
28
+ */
29
+ export declare function handleNaturalLanguageRollbackImpl(workspaceDir: string, sessionId: string | undefined, reason: string): {
30
+ success: boolean;
31
+ message: string;
32
+ };
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Rollback Implementation Command — CLI `/pd-rollback-impl`
3
+ * ==========================================================
4
+ *
5
+ * PURPOSE: Revert the current active implementation and restore the previous one.
6
+ *
7
+ * FLOW:
8
+ * 1. List active implementations
9
+ * 2. On confirm: current -> disabled, previous -> active
10
+ *
11
+ * SAFETY:
12
+ * - If no previous active: current -> disabled (degrades to hard-boundary gates)
13
+ * - Rollback records persisted with full audit trail
14
+ */
15
+ import * as fs from 'fs';
16
+ import * as path from 'path';
17
+ import { withLock } from '../utils/file-lock.js';
18
+ import { atomicWriteFileSync } from '../utils/io.js';
19
+ import { WorkspaceContext } from '../core/workspace-context.js';
20
+ import { refreshPrincipleLifecycle } from '../core/principle-internalization/lifecycle-refresh.js';
21
+ import { loadLedger, transitionImplementationState, } from '../core/principle-tree-ledger.js';
22
+ import { normalizeCommandArgs } from '../utils/io.js';
23
+ import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
24
+ /**
25
+ * Get all implementations from the ledger.
26
+ */
27
+ function getAllImplementations(stateDir) {
28
+ const ledger = loadLedger(stateDir);
29
+ return Object.values(ledger.tree.implementations);
30
+ }
31
+ /**
32
+ * Handle the /pd-rollback-impl command.
33
+ *
34
+ * Usage:
35
+ * /pd-rollback-impl list - List active implementations
36
+ * /pd-rollback-impl <implId> - Rollback current active
37
+ * /pd-rollback-impl <implId> --reason "<reason>" - Rollback with reason
38
+ */
39
+ export function handleRollbackImplCommand(ctx) {
40
+ const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'rollback-impl');
41
+ const { stateDir } = WorkspaceContext.fromHookContext({ ...ctx, workspaceDir });
42
+ const lang = ctx.config?.language || 'en';
43
+ const isZh = lang === 'zh';
44
+ const args = normalizeCommandArgs(ctx.args).trim();
45
+ // Parse args
46
+ const subcommand = args.split(/\s+/)[0] || '';
47
+ const implId = subcommand === 'list' ? '' : subcommand;
48
+ const reasonMatch = (/--reason\s+"([^"]+)"/.exec(args)) || (/--reason\s+(\S+)/.exec(args));
49
+ const reason = reasonMatch ? reasonMatch[1] : null;
50
+ // List active
51
+ if (subcommand === 'list' || subcommand === '') {
52
+ return _handleListActiveRollback(stateDir, isZh);
53
+ }
54
+ return _handleRollbackImpl(workspaceDir, stateDir, implId, reason, isZh, ctx.sessionId);
55
+ }
56
+ function _handleListActiveRollback(stateDir, isZh) {
57
+ const allImpls = getAllImplementations(stateDir);
58
+ const activeImpls = allImpls.filter((impl) => impl.lifecycleState === 'active');
59
+ if (activeImpls.length === 0) {
60
+ return {
61
+ text: isZh
62
+ ? '\n\u2139\ufe0f \u6ca1\u6709\u6d3b\u8dc3\u5b9e\u73b0\u53ef\u56de\u6eda\u3002'
63
+ : '\n\u2139\ufe0f No active implementations to rollback.',
64
+ };
65
+ }
66
+ let output = isZh ? '\n\ud83d\udccb \u53ef\u56de\u6eda\u6d3b\u8dc3\u5b9e\u73b0\n' : '\n\ud83d\udccb Active Implementations Available for Rollback\n';
67
+ output += `${'='.repeat(50)}\n`;
68
+ for (const impl of activeImpls) {
69
+ const hasPrevious = impl.previousActive ? '\u2705' : '\u26a0\ufe0f \u65e0\u524d\u4e00\u4e2a';
70
+ output += ` ${impl.id}\n`;
71
+ output += ` Rule: ${impl.ruleId} | Version: ${impl.version}\n`;
72
+ output += ` Has previous: ${hasPrevious}\n`;
73
+ if (impl.previousActive) {
74
+ output += ` Previous: ${impl.previousActive}\n`;
75
+ }
76
+ output += '\n';
77
+ }
78
+ output += isZh
79
+ ? '\u7528\u6cd5: /pd-rollback-impl <implId> --reason "\u539f\u56e0"'
80
+ : 'Usage: /pd-rollback-impl <implId> --reason "reason"';
81
+ return { text: output };
82
+ }
83
+ function _handleRollbackImpl(workspaceDir, stateDir, implId, reason, isZh, sessionId) {
84
+ const allImpls = getAllImplementations(stateDir);
85
+ const currentActive = allImpls.find((i) => i.id === implId);
86
+ if (!currentActive) {
87
+ return {
88
+ text: isZh
89
+ ? `\u274c \u672a\u627e\u5230\u5b9e\u73b0: ${implId}`
90
+ : `\u274c Implementation not found: ${implId}`,
91
+ };
92
+ }
93
+ const currentState = currentActive.lifecycleState;
94
+ if (currentState !== 'active') {
95
+ return {
96
+ text: isZh
97
+ ? `\u274c \u5b9e\u73b0 ${implId} \u5f53\u524d\u72b6\u6001: ${currentState}\n\u53ea\u80fd\u56de\u6eda\u6d3b\u8dc3\u5b9e\u73b0\u3002`
98
+ : `\u274c Implementation ${implId} is in state: ${currentState}\nCan only rollback active implementations.`,
99
+ };
100
+ }
101
+ const previousActiveId = currentActive.previousActive;
102
+ const reasonText = reason || (isZh ? '\u7528\u6237\u624b\u52a8\u56de\u6eda' : 'User manual rollback');
103
+ // Step 1: Current active -> disabled
104
+ transitionImplementationState(stateDir, implId, 'disabled');
105
+ let restoredMessage;
106
+ if (previousActiveId && allImpls.some((i) => i.id === previousActiveId)) {
107
+ // Step 2: Restore previous active -> active
108
+ transitionImplementationState(stateDir, previousActiveId, 'active');
109
+ restoredMessage = isZh
110
+ ? `\n \u5df2\u6062\u590d\u524d\u4e00\u4e2a\u6d3b\u8dc3\u5b9e\u73b0: ${previousActiveId}\n \u72b6\u6001: disabled -> active`
111
+ : `\n Restored previous active implementation: ${previousActiveId}\n State: disabled -> active`;
112
+ }
113
+ else {
114
+ // No previous active — degrade to hard-boundary gates (per Phase 12 D-08)
115
+ restoredMessage = isZh
116
+ ? `\n \u26a0\ufe0f \u6ca1\u6709\u524d\u4e00\u4e2a\u6d3b\u8dc3\u5b9e\u73b0\uff0c\u8be5\u89c4\u5219\u6ca1\u6709\u6d3b\u8dc3\u5b9e\u73b0\u3002`
117
+ + `\n GFI\u3001Progressive Gate\u7b49\u786c\u56fa\u62b1\u95e8\u4ecd\u7136\u6b63\u5e38\u8fd0\u884c\u3002`
118
+ : `\n \u26a0\ufe0f No previous active implementation. Rule has no active code implementation.`
119
+ + ` Existing hard-boundary gates (GFI, Progressive Gate) continue functioning normally.`;
120
+ }
121
+ // Store rollback record
122
+ const rollbackDir = path.join(stateDir, 'principles', 'implementations', implId, 'rollbacks');
123
+ if (!fs.existsSync(rollbackDir)) {
124
+ fs.mkdirSync(rollbackDir, { recursive: true });
125
+ }
126
+ const rollbackRecord = {
127
+ rolledBackBy: sessionId || 'manual',
128
+ rolledBackAt: new Date().toISOString(),
129
+ reason: reasonText,
130
+ previousImplementationId: previousActiveId || null,
131
+ restoredImplementationId: previousActiveId && allImpls.some((i) => i.id === previousActiveId)
132
+ ? previousActiveId
133
+ : null,
134
+ rolledBackImplId: implId,
135
+ };
136
+ const rollbackTimestamp = new Date().toISOString().replace(/[:.]/g, '-');
137
+ const rollbackPath = path.join(rollbackDir, `${rollbackTimestamp}.json`);
138
+ withLock(rollbackPath, () => {
139
+ atomicWriteFileSync(rollbackPath, JSON.stringify(rollbackRecord, null, 2));
140
+ });
141
+ try {
142
+ refreshPrincipleLifecycle(workspaceDir, stateDir);
143
+ }
144
+ catch (err) {
145
+ console.warn('[rollback-impl] Lifecycle refresh failed:', err instanceof Error ? err.stack : err);
146
+ }
147
+ let output = isZh
148
+ ? `\n\u2705 \u56de\u6eda\u5b8c\u6210: ${implId}\n \u72b6\u6001: active -> disabled\n \u539f\u56e0: ${reasonText}`
149
+ : `\n\u2705 Rollback complete: ${implId}\n State: active -> disabled\n Reason: ${reasonText}`;
150
+ output += restoredMessage;
151
+ return { text: output };
152
+ }
153
+ /**
154
+ * Handle natural language rollback request.
155
+ * Detects phrases like "回滚这个规则实现", "rollback this implementation".
156
+ */
157
+ export function handleNaturalLanguageRollbackImpl(workspaceDir, sessionId, reason) {
158
+ const isZh = (/[\u4e00-\u9fff]/.exec(reason)) || false;
159
+ const { stateDir } = WorkspaceContext.fromHookContext({ workspaceDir });
160
+ if (!sessionId) {
161
+ return {
162
+ success: false,
163
+ message: isZh ? '\u65e0\u6cd5\u8bc6\u522b\u5f53\u524d\u4f1a\u8bdd' : 'Session not found',
164
+ };
165
+ }
166
+ // Natural language entry: get last active implementation
167
+ const allImpls = getAllImplementations(stateDir);
168
+ const lastActive = allImpls.find((i) => i.lifecycleState === 'active');
169
+ if (!lastActive) {
170
+ return {
171
+ success: false,
172
+ message: isZh ? '\u5f53\u524d\u6ca1\u6709\u6d3b\u8dc3\u5b9e\u73b0' : 'No active implementations',
173
+ };
174
+ }
175
+ // Would be called via the hook — return the impl ID for the hook to route
176
+ return {
177
+ success: true,
178
+ message: `${lastActive.id}|${reason}`,
179
+ };
180
+ }
@@ -0,0 +1,19 @@
1
+ import { WorkspaceContext } from '../core/workspace-context.js';
2
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
3
+ /**
4
+ * Handles the /pd-rollback command
5
+ *
6
+ * Usage:
7
+ * /pd-rollback <event-id> - Rollback a specific empathy event by ID
8
+ * /pd-rollback last - Rollback the last empathy event in current session
9
+ */
10
+ export declare function handleRollbackCommand(ctx: PluginCommandContext): PluginCommandResult;
11
+ /**
12
+ * Handle natural language rollback request
13
+ * Called from prompt hook when user says things like "撤销刚才的惩罚"
14
+ */
15
+ export declare function handleNaturalLanguageRollback(wctx: WorkspaceContext, sessionId: string | undefined, reason: string): {
16
+ success: boolean;
17
+ score: number;
18
+ message: string;
19
+ };
@@ -1,34 +1,21 @@
1
1
  import { WorkspaceContext } from '../core/workspace-context.js';
2
2
  import { resetFriction } from '../core/session-tracker.js';
3
- import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
4
3
  import { normalizeCommandArgs } from '../utils/io.js';
5
4
  import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
6
-
7
- /**
8
- * Extended context interface that includes sessionId injected by the plugin framework.
9
- * PluginCommandContext does not include sessionId in its type definition.
10
- */
11
- interface SessionAwareCommandContext extends PluginCommandContext {
12
- sessionId: string;
13
- }
14
-
15
5
  /**
16
6
  * Handles the /pd-rollback command
17
- *
7
+ *
18
8
  * Usage:
19
9
  * /pd-rollback <event-id> - Rollback a specific empathy event by ID
20
10
  * /pd-rollback last - Rollback the last empathy event in current session
21
11
  */
22
- export function handleRollbackCommand(ctx: PluginCommandContext): PluginCommandResult {
12
+ export function handleRollbackCommand(ctx) {
23
13
  const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'rollback');
24
-
25
14
  const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
26
- const lang = (ctx.config?.language as string) || 'en';
15
+ const lang = ctx.config?.language || 'en';
27
16
  const isZh = lang === 'zh';
28
- const { sessionId } = ctx as SessionAwareCommandContext;
29
-
17
+ const { sessionId } = ctx;
30
18
  const args = normalizeCommandArgs(ctx.args).trim();
31
-
32
19
  if (!args) {
33
20
  return {
34
21
  text: isZh
@@ -44,7 +31,6 @@ Usage:
44
31
  /pd-rollback last - Rollback the last event in current session`
45
32
  };
46
33
  }
47
-
48
34
  if (!sessionId) {
49
35
  return {
50
36
  text: isZh
@@ -52,12 +38,7 @@ Usage:
52
38
  : `❌ Session ID not found. Use this command in a chat session.`
53
39
  };
54
40
  }
55
-
56
-
57
-
58
- let eventId: string | null;
59
-
60
-
41
+ let eventId;
61
42
  if (args === 'last') {
62
43
  // Find the last empathy event in current session
63
44
  eventId = wctx.eventLog.getLastEmpathyEventId(sessionId);
@@ -68,19 +49,13 @@ Usage:
68
49
  : `❌ No empathy events found in current session to rollback.`
69
50
  };
70
51
  }
71
- } else {
52
+ }
53
+ else {
72
54
  // Use the provided event ID
73
55
  eventId = args;
74
56
  }
75
-
76
57
  // Perform rollback
77
- const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(
78
- eventId,
79
- sessionId,
80
- isZh ? '用户手动回滚' : 'User manual rollback',
81
- 'user_command'
82
- );
83
-
58
+ const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(eventId, sessionId, isZh ? '用户手动回滚' : 'User manual rollback', 'user_command');
84
59
  if (rolledBackScore === 0) {
85
60
  return {
86
61
  text: isZh
@@ -88,13 +63,11 @@ Usage:
88
63
  : `❌ Failed to rollback event "${eventId}". Event may not exist or was deduped.`
89
64
  };
90
65
  }
91
-
92
66
  // Reduce the GFI by the rolled back score
93
67
  resetFriction(sessionId, workspaceDir, {
94
68
  source: 'user_empathy',
95
69
  amount: rolledBackScore,
96
70
  });
97
-
98
71
  return {
99
72
  text: isZh
100
73
  ? `✅ 已回滚情绪事件
@@ -109,18 +82,12 @@ Usage:
109
82
  💡 Hint: Session friction has been reset.`
110
83
  };
111
84
  }
112
-
113
85
  /**
114
86
  * Handle natural language rollback request
115
87
  * Called from prompt hook when user says things like "撤销刚才的惩罚"
116
88
  */
117
- export function handleNaturalLanguageRollback(
118
- wctx: WorkspaceContext,
119
- sessionId: string | undefined,
120
- reason: string
121
- ): { success: boolean; score: number; message: string } {
89
+ export function handleNaturalLanguageRollback(wctx, sessionId, reason) {
122
90
  const isZh = wctx.config.get('language') === 'zh';
123
-
124
91
  if (!sessionId) {
125
92
  return {
126
93
  success: false,
@@ -128,7 +95,6 @@ export function handleNaturalLanguageRollback(
128
95
  message: isZh ? '无法识别当前会话' : 'Session not found'
129
96
  };
130
97
  }
131
-
132
98
  const eventId = wctx.eventLog.getLastEmpathyEventId(sessionId);
133
99
  if (!eventId) {
134
100
  return {
@@ -137,14 +103,7 @@ export function handleNaturalLanguageRollback(
137
103
  message: isZh ? '当前会话没有可回滚的情绪事件' : 'No empathy events to rollback'
138
104
  };
139
105
  }
140
-
141
- const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(
142
- eventId,
143
- sessionId,
144
- reason,
145
- 'natural_language'
146
- );
147
-
106
+ const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(eventId, sessionId, reason, 'natural_language');
148
107
  if (rolledBackScore === 0) {
149
108
  return {
150
109
  success: false,
@@ -152,13 +111,11 @@ export function handleNaturalLanguageRollback(
152
111
  message: isZh ? '回滚失败,事件可能不存在' : 'Rollback failed, event may not exist'
153
112
  };
154
113
  }
155
-
156
114
  // Reduce only the empathy slice instead of wiping the whole session GFI.
157
115
  resetFriction(sessionId, wctx.workspaceDir, {
158
116
  source: 'user_empathy',
159
117
  amount: rolledBackScore,
160
118
  });
161
-
162
119
  return {
163
120
  success: true,
164
121
  score: rolledBackScore,
@@ -0,0 +1,2 @@
1
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
2
+ export declare function handleSamplesCommand(ctx: PluginCommandContext): PluginCommandResult;
@@ -0,0 +1,58 @@
1
+ import { WorkspaceContext } from '../core/workspace-context.js';
2
+ import { normalizeCommandArgs } from '../utils/io.js';
3
+ import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
4
+ function isZh(ctx) {
5
+ return String(ctx.config?.language || 'en').startsWith('zh');
6
+ }
7
+ export function handleSamplesCommand(ctx) {
8
+ const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'samples');
9
+ const zh = isZh(ctx);
10
+ const args = normalizeCommandArgs(ctx.args).trim();
11
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
12
+ if (args.startsWith('review ')) {
13
+ const [, decision = '', sampleId = '', ...noteParts] = args.split(/\s+/);
14
+ if (decision !== 'approve' && decision !== 'reject') {
15
+ return {
16
+ text: zh
17
+ ? '无效的审核动作。请使用 `review approve <sample-id> [note]` 或 `review reject <sample-id> [note]`。'
18
+ : 'Invalid review action. Use `review approve <sample-id> [note]` or `review reject <sample-id> [note]`.',
19
+ };
20
+ }
21
+ if (!sampleId) {
22
+ return {
23
+ text: zh
24
+ ? '缺少 sample-id。'
25
+ : 'Missing sample-id.',
26
+ };
27
+ }
28
+ const normalizedDecision = decision === 'approve' ? 'approved' : 'rejected';
29
+ const note = noteParts.join(' ').trim();
30
+ let record;
31
+ try {
32
+ record = wctx.trajectory.reviewCorrectionSample(sampleId, normalizedDecision, note);
33
+ /* eslint-disable @typescript-eslint/no-unused-vars -- Reason: error handling only - returning failure response */
34
+ }
35
+ catch (error) {
36
+ return {
37
+ text: zh
38
+ ? `审核样本失败:${sampleId}`
39
+ : `Failed to review sample: ${sampleId}`,
40
+ };
41
+ }
42
+ return {
43
+ text: zh
44
+ ? `样本 ${record.sampleId} 已标记为 ${record.reviewStatus}。`
45
+ : `Sample ${record.sampleId} marked as ${record.reviewStatus}.`,
46
+ };
47
+ }
48
+ const samples = wctx.trajectory.listCorrectionSamples('pending');
49
+ if (samples.length === 0) {
50
+ return { text: zh ? '当前没有待审核纠错样本。' : 'No pending correction samples.' };
51
+ }
52
+ const lines = samples.map((sample) => `- ${sample.sampleId} | session=${sample.sessionId} | score=${sample.qualityScore}`);
53
+ return {
54
+ text: zh
55
+ ? `待审核纠错样本:\n${lines.join('\n')}`
56
+ : `Pending correction samples:\n${lines.join('\n')}`,
57
+ };
58
+ }
@@ -0,0 +1,2 @@
1
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
2
+ export declare function handleInitStrategy(ctx: PluginCommandContext): PluginCommandResult;
@@ -0,0 +1,16 @@
1
+ import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
2
+ import { WorkspaceContext } from '../core/workspace-context.js';
3
+ export function handleInitStrategy(ctx) {
4
+ const workspaceDir = resolvePluginCommandWorkspaceDir(ctx, 'strategy');
5
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
6
+ const okrDir = wctx.resolve('OKR_DIR').replace(workspaceDir, '').replace(/^\/+/, '');
7
+ const focusPath = wctx.resolve('CURRENT_FOCUS').replace(workspaceDir, '').replace(/^\/+/, '');
8
+ const userContextPath = wctx.resolve('USER_CONTEXT').replace(workspaceDir, '').replace(/^\/+/, '');
9
+ return {
10
+ text: `🎯 **Strategy Initialization**\n\n` +
11
+ `The Agent will now conduct a deep interview to establish your project's vision and strategic OKRs.\n\n` +
12
+ `**Instructions for Agent:** Read \`${okrDir}/\` for existing context. ` +
13
+ `Generate \`${focusPath}\` with the top 1-3 strategic focus areas based on the user interview. ` +
14
+ `Then update \`${userContextPath}\` with key user preferences discovered.`,
15
+ };
16
+ }
@@ -0,0 +1,2 @@
1
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
2
+ export declare function handleThinkingOs(ctx: PluginCommandContext): PluginCommandResult;