principles-disciple 1.127.0 → 1.129.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. package/dist/commands/archive-impl.d.ts +18 -0
  2. package/dist/commands/archive-impl.js +105 -0
  3. package/dist/commands/capabilities.d.ts +3 -0
  4. package/dist/commands/capabilities.js +76 -0
  5. package/dist/commands/context.d.ts +5 -0
  6. package/{src/commands/context.ts → dist/commands/context.js} +34 -83
  7. package/dist/commands/disable-impl.d.ts +22 -0
  8. package/dist/commands/disable-impl.js +118 -0
  9. package/dist/commands/evolution-status.d.ts +4 -0
  10. package/dist/commands/evolution-status.js +187 -0
  11. package/dist/commands/export.d.ts +2 -0
  12. package/dist/commands/export.js +53 -0
  13. package/dist/commands/focus.d.ts +14 -0
  14. package/dist/commands/focus.js +443 -0
  15. package/dist/commands/pain.d.ts +6 -0
  16. package/{src/commands/pain.ts → dist/commands/pain.js} +137 -188
  17. package/dist/commands/principle-rollback.d.ts +4 -0
  18. package/dist/commands/principle-rollback.js +26 -0
  19. package/dist/commands/promote-impl.d.ts +22 -0
  20. package/dist/commands/promote-impl.js +194 -0
  21. package/dist/commands/rollback-impl.d.ts +32 -0
  22. package/dist/commands/rollback-impl.js +180 -0
  23. package/dist/commands/rollback.d.ts +19 -0
  24. package/{src/commands/rollback.ts → dist/commands/rollback.js} +10 -53
  25. package/dist/commands/samples.d.ts +2 -0
  26. package/dist/commands/samples.js +58 -0
  27. package/dist/commands/strategy.d.ts +2 -0
  28. package/dist/commands/strategy.js +16 -0
  29. package/dist/commands/thinking-os.d.ts +2 -0
  30. package/{src/commands/thinking-os.ts → dist/commands/thinking-os.js} +35 -58
  31. package/dist/commands/workflow-debug.d.ts +6 -0
  32. package/{src/commands/workflow-debug.ts → dist/commands/workflow-debug.js} +13 -33
  33. package/dist/config/defaults/runtime.d.ts +58 -0
  34. package/{src/config/defaults/runtime.ts → dist/config/defaults/runtime.js} +4 -41
  35. package/dist/config/errors.d.ts +86 -0
  36. package/dist/config/errors.js +107 -0
  37. package/{src/config/index.ts → dist/config/index.d.ts} +1 -2
  38. package/dist/config/index.js +7 -0
  39. package/dist/constants/diagnostician.d.ts +12 -0
  40. package/{src/constants/diagnostician.ts → dist/constants/diagnostician.js} +0 -1
  41. package/dist/constants/tools.d.ts +17 -0
  42. package/dist/constants/tools.js +53 -0
  43. package/dist/core/__tests__/focus-history.test.d.ts +1 -0
  44. package/dist/core/__tests__/focus-history.test.js +160 -0
  45. package/dist/core/bootstrap-rules.d.ts +50 -0
  46. package/dist/core/bootstrap-rules.js +187 -0
  47. package/dist/core/code-implementation-storage.d.ts +71 -0
  48. package/dist/core/code-implementation-storage.js +139 -0
  49. package/dist/core/config-health.d.ts +27 -0
  50. package/dist/core/config-health.js +60 -0
  51. package/dist/core/config-service.d.ts +15 -0
  52. package/{src/core/config-service.ts → dist/core/config-service.js} +4 -7
  53. package/dist/core/config.d.ts +111 -0
  54. package/{src/core/config.ts → dist/core/config.js} +46 -146
  55. package/dist/core/control-ui-db.d.ts +106 -0
  56. package/dist/core/control-ui-db.js +309 -0
  57. package/dist/core/correction-cue-learner.d.ts +33 -0
  58. package/dist/core/correction-cue-learner.js +184 -0
  59. package/dist/core/correction-types.d.ts +3 -0
  60. package/dist/core/correction-types.js +1 -0
  61. package/dist/core/detection-funnel.d.ts +33 -0
  62. package/{src/core/detection-funnel.ts → dist/core/detection-funnel.js} +17 -37
  63. package/dist/core/detection-service.d.ts +15 -0
  64. package/{src/core/detection-service.ts → dist/core/detection-service.js} +4 -7
  65. package/dist/core/dictionary-service.d.ts +15 -0
  66. package/{src/core/dictionary-service.ts → dist/core/dictionary-service.js} +4 -7
  67. package/dist/core/dictionary.d.ts +38 -0
  68. package/{src/core/dictionary.ts → dist/core/dictionary.js} +33 -59
  69. package/dist/core/empathy-keyword-matcher.d.ts +5 -0
  70. package/dist/core/empathy-keyword-matcher.js +40 -0
  71. package/dist/core/empathy-types.d.ts +2 -0
  72. package/dist/core/empathy-types.js +1 -0
  73. package/dist/core/event-log.d.ts +90 -0
  74. package/dist/core/event-log.js +702 -0
  75. package/dist/core/evolution-engine.d.ts +119 -0
  76. package/dist/core/evolution-engine.js +460 -0
  77. package/dist/core/evolution-logger.d.ts +137 -0
  78. package/dist/core/evolution-logger.js +261 -0
  79. package/dist/core/evolution-migration.d.ts +5 -0
  80. package/dist/core/evolution-migration.js +65 -0
  81. package/dist/core/evolution-reducer.d.ts +124 -0
  82. package/dist/core/evolution-reducer.js +730 -0
  83. package/dist/core/evolution-types.d.ts +50 -0
  84. package/dist/core/evolution-types.js +11 -0
  85. package/dist/core/external-training-contract.d.ts +276 -0
  86. package/dist/core/external-training-contract.js +269 -0
  87. package/dist/core/file-store.d.ts +41 -0
  88. package/dist/core/file-store.js +46 -0
  89. package/dist/core/focus-history.d.ts +50 -0
  90. package/dist/core/focus-history.js +574 -0
  91. package/dist/core/hygiene/tracker.d.ts +22 -0
  92. package/dist/core/hygiene/tracker.js +110 -0
  93. package/dist/core/init.d.ts +30 -0
  94. package/{src/core/init.ts → dist/core/init.js} +87 -118
  95. package/dist/core/local-worker-routing.d.ts +124 -0
  96. package/dist/core/local-worker-routing.js +216 -0
  97. package/dist/core/migration.d.ts +6 -0
  98. package/{src/core/migration.ts → dist/core/migration.js} +10 -18
  99. package/dist/core/model-deployment-registry.d.ts +218 -0
  100. package/dist/core/model-deployment-registry.js +502 -0
  101. package/dist/core/model-training-registry.d.ts +295 -0
  102. package/dist/core/model-training-registry.js +474 -0
  103. package/dist/core/observability.d.ts +40 -0
  104. package/dist/core/observability.js +164 -0
  105. package/dist/core/pain-diagnostic-gate.d.ts +36 -0
  106. package/dist/core/pain-diagnostic-gate.js +105 -0
  107. package/dist/core/pain.d.ts +87 -0
  108. package/dist/core/pain.js +223 -0
  109. package/dist/core/path-resolver.d.ts +60 -0
  110. package/{src/core/path-resolver.ts → dist/core/path-resolver.js} +41 -131
  111. package/dist/core/paths.d.ts +60 -0
  112. package/{src/core/paths.ts → dist/core/paths.js} +4 -13
  113. package/dist/core/pd-config-loader.d.ts +96 -0
  114. package/dist/core/pd-config-loader.js +307 -0
  115. package/dist/core/pd-task-reconciler.d.ts +89 -0
  116. package/dist/core/pd-task-reconciler.js +262 -0
  117. package/dist/core/pd-task-service.d.ts +2 -0
  118. package/dist/core/pd-task-service.js +32 -0
  119. package/dist/core/pd-task-store.d.ts +5 -0
  120. package/dist/core/pd-task-store.js +62 -0
  121. package/dist/core/pd-task-types.d.ts +8 -0
  122. package/dist/core/pd-task-types.js +2 -0
  123. package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.d.ts +1 -0
  124. package/dist/core/principle-compiler/__tests__/compiler-replay-gate.test.js +132 -0
  125. package/dist/core/principle-compiler/code-validator.d.ts +14 -0
  126. package/dist/core/principle-compiler/code-validator.js +86 -0
  127. package/dist/core/principle-compiler/compiler.d.ts +45 -0
  128. package/dist/core/principle-compiler/compiler.js +287 -0
  129. package/{src/core/principle-compiler/index.ts → dist/core/principle-compiler/index.d.ts} +0 -1
  130. package/dist/core/principle-compiler/index.js +10 -0
  131. package/dist/core/principle-compiler/ledger-registrar.d.ts +28 -0
  132. package/dist/core/principle-compiler/ledger-registrar.js +95 -0
  133. package/{src/core/principle-compiler/template-generator.ts → dist/core/principle-compiler/template-generator.d.ts} +0 -1
  134. package/dist/core/principle-compiler/template-generator.js +7 -0
  135. package/{src/core/principle-injection.ts → dist/core/principle-injection.d.ts} +1 -7
  136. package/dist/core/principle-injection.js +10 -0
  137. package/dist/core/principle-internalization/filesystem-lifecycle-datasource.d.ts +15 -0
  138. package/dist/core/principle-internalization/filesystem-lifecycle-datasource.js +34 -0
  139. package/dist/core/principle-internalization/lifecycle-read-model.d.ts +17 -0
  140. package/{src/core/principle-internalization/lifecycle-read-model.ts → dist/core/principle-internalization/lifecycle-read-model.js} +2 -21
  141. package/dist/core/principle-internalization/lifecycle-refresh.d.ts +2 -0
  142. package/dist/core/principle-internalization/lifecycle-refresh.js +4 -0
  143. package/dist/core/principle-internalization/principle-lifecycle-service.d.ts +28 -0
  144. package/dist/core/principle-internalization/principle-lifecycle-service.js +89 -0
  145. package/dist/core/principle-training-state.d.ts +47 -0
  146. package/dist/core/principle-training-state.js +113 -0
  147. package/dist/core/principle-tree-ledger-adapter.d.ts +32 -0
  148. package/dist/core/principle-tree-ledger-adapter.js +125 -0
  149. package/dist/core/principle-tree-ledger.d.ts +82 -0
  150. package/dist/core/principle-tree-ledger.js +527 -0
  151. package/dist/core/profile.d.ts +62 -0
  152. package/dist/core/profile.js +211 -0
  153. package/dist/core/promotion-gate.d.ts +243 -0
  154. package/dist/core/promotion-gate.js +554 -0
  155. package/dist/core/reflection/reflection-context.d.ts +31 -0
  156. package/dist/core/reflection/reflection-context.js +91 -0
  157. package/dist/core/replay-engine.d.ts +12 -0
  158. package/dist/core/replay-engine.js +82 -0
  159. package/dist/core/risk-calculator.d.ts +22 -0
  160. package/{src/core/risk-calculator.ts → dist/core/risk-calculator.js} +19 -49
  161. package/{src/core/rule-host-helpers.ts → dist/core/rule-host-helpers.d.ts} +0 -1
  162. package/dist/core/rule-host-helpers.js +7 -0
  163. package/{src/core/rule-host-types.ts → dist/core/rule-host-types.d.ts} +1 -8
  164. package/dist/core/rule-host-types.js +7 -0
  165. package/dist/core/rule-host.d.ts +86 -0
  166. package/dist/core/rule-host.js +311 -0
  167. package/dist/core/rule-implementation-runtime.d.ts +18 -0
  168. package/dist/core/rule-implementation-runtime.js +112 -0
  169. package/dist/core/runtime-v2-prompt-activation-reader.d.ts +22 -0
  170. package/dist/core/runtime-v2-prompt-activation-reader.js +99 -0
  171. package/{src/core/schema/db-types.ts → dist/core/schema/db-types.d.ts} +4 -9
  172. package/dist/core/schema/db-types.js +5 -0
  173. package/{src/core/schema/index.ts → dist/core/schema/index.d.ts} +1 -10
  174. package/dist/core/schema/index.js +15 -0
  175. package/dist/core/schema/migration-runner.d.ts +53 -0
  176. package/dist/core/schema/migration-runner.js +170 -0
  177. package/dist/core/schema/migrations/001-init-trajectory.d.ts +6 -0
  178. package/{src/core/schema/migrations/001-init-trajectory.ts → dist/core/schema/migrations/001-init-trajectory.js} +38 -56
  179. package/dist/core/schema/migrations/002-init-central.d.ts +5 -0
  180. package/{src/core/schema/migrations/002-init-central.ts → dist/core/schema/migrations/002-init-central.js} +27 -41
  181. package/dist/core/schema/migrations/003-init-workflow.d.ts +5 -0
  182. package/{src/core/schema/migrations/003-init-workflow.ts → dist/core/schema/migrations/003-init-workflow.js} +16 -21
  183. package/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +8 -0
  184. package/{src/core/schema/migrations/004-add-thinking-and-gfi.ts → dist/core/schema/migrations/004-add-thinking-and-gfi.js} +19 -27
  185. package/{src/core/schema/migrations/index.ts → dist/core/schema/migrations/index.d.ts} +1 -16
  186. package/dist/core/schema/migrations/index.js +27 -0
  187. package/dist/core/schema/schema-definitions.d.ts +46 -0
  188. package/{src/core/schema/schema-definitions.ts → dist/core/schema/schema-definitions.js} +242 -291
  189. package/dist/core/session-tracker.d.ts +119 -0
  190. package/{src/core/session-tracker.ts → dist/core/session-tracker.js} +96 -239
  191. package/dist/core/shadow-observation-registry.d.ts +217 -0
  192. package/dist/core/shadow-observation-registry.js +280 -0
  193. package/dist/core/surface-guard.d.ts +31 -0
  194. package/dist/core/surface-guard.js +131 -0
  195. package/dist/core/system-logger.d.ts +8 -0
  196. package/{src/core/system-logger.ts → dist/core/system-logger.js} +20 -34
  197. package/dist/core/thinking-models.d.ts +70 -0
  198. package/dist/core/thinking-models.js +300 -0
  199. package/dist/core/thinking-os-parser.d.ts +35 -0
  200. package/dist/core/thinking-os-parser.js +123 -0
  201. package/dist/core/trajectory-types.d.ts +220 -0
  202. package/dist/core/trajectory-types.js +8 -0
  203. package/dist/core/trajectory.d.ts +242 -0
  204. package/dist/core/trajectory.js +1500 -0
  205. package/dist/core/workflow-funnel-loader.d.ts +72 -0
  206. package/dist/core/workflow-funnel-loader.js +135 -0
  207. package/dist/core/workspace-context.d.ts +111 -0
  208. package/{src/core/workspace-context.ts → dist/core/workspace-context.js} +50 -105
  209. package/dist/core/workspace-dir-validation.d.ts +11 -0
  210. package/dist/core/workspace-dir-validation.js +37 -0
  211. package/dist/core/workspace-guidance-migrator.d.ts +12 -0
  212. package/{src/core/workspace-guidance-migrator.ts → dist/core/workspace-guidance-migrator.js} +21 -59
  213. package/dist/hooks/after-tool-call-helpers.d.ts +89 -0
  214. package/dist/hooks/after-tool-call-helpers.js +475 -0
  215. package/dist/hooks/after-tool-call-types.d.ts +86 -0
  216. package/dist/hooks/after-tool-call-types.js +13 -0
  217. package/dist/hooks/gate-block-helper.d.ts +44 -0
  218. package/dist/hooks/gate-block-helper.js +209 -0
  219. package/dist/hooks/gate.d.ts +16 -0
  220. package/dist/hooks/gate.js +381 -0
  221. package/dist/hooks/lifecycle.d.ts +5 -0
  222. package/dist/hooks/lifecycle.js +287 -0
  223. package/dist/hooks/llm.d.ts +13 -0
  224. package/{src/hooks/llm.ts → dist/hooks/llm.js} +63 -117
  225. package/dist/hooks/message-sanitize.d.ts +24 -0
  226. package/dist/hooks/message-sanitize.js +77 -0
  227. package/dist/hooks/pain.d.ts +33 -0
  228. package/dist/hooks/pain.js +294 -0
  229. package/dist/hooks/prompt.d.ts +52 -0
  230. package/dist/hooks/prompt.js +930 -0
  231. package/dist/hooks/raw-observation-adapter.d.ts +57 -0
  232. package/dist/hooks/raw-observation-adapter.js +170 -0
  233. package/dist/hooks/raw-observation-types.d.ts +62 -0
  234. package/dist/hooks/raw-observation-types.js +15 -0
  235. package/dist/hooks/subagent.d.ts +9 -0
  236. package/{src/hooks/subagent.ts → dist/hooks/subagent.js} +20 -60
  237. package/dist/hooks/trajectory-collector.d.ts +25 -0
  238. package/dist/hooks/trajectory-collector.js +225 -0
  239. package/dist/hooks/trajectory-evidence.d.ts +11 -0
  240. package/dist/hooks/trajectory-evidence.js +88 -0
  241. package/dist/hooks/triage-adapter.d.ts +58 -0
  242. package/{src/hooks/triage-adapter.ts → dist/hooks/triage-adapter.js} +36 -68
  243. package/dist/hooks/trigger-cooldown-tracker.d.ts +30 -0
  244. package/dist/hooks/trigger-cooldown-tracker.js +55 -0
  245. package/dist/i18n/commands.d.ts +26 -0
  246. package/dist/i18n/commands.js +96 -0
  247. package/dist/index.d.ts +50 -0
  248. package/dist/index.js +829 -0
  249. package/dist/openclaw-sdk.d.ts +293 -0
  250. package/dist/openclaw-sdk.js +4 -0
  251. package/dist/service/central-database.d.ts +138 -0
  252. package/dist/service/central-database.js +731 -0
  253. package/dist/service/central-sync-service.d.ts +8 -0
  254. package/dist/service/central-sync-service.js +71 -0
  255. package/dist/service/correction-observer-service.d.ts +19 -0
  256. package/{src/service/correction-observer-service.ts → dist/service/correction-observer-service.js} +36 -76
  257. package/dist/service/evolution-dedup.d.ts +27 -0
  258. package/{src/service/evolution-dedup.ts → dist/service/evolution-dedup.js} +11 -31
  259. package/{src/service/evolution-queue-migration.ts → dist/service/evolution-queue-migration.d.ts} +15 -62
  260. package/dist/service/evolution-queue-migration.js +53 -0
  261. package/dist/service/evolution-worker.d.ts +103 -0
  262. package/{src/service/evolution-worker.ts → dist/service/evolution-worker.js} +169 -331
  263. package/dist/service/internalization-auto-consumer-service.d.ts +8 -0
  264. package/dist/service/internalization-auto-consumer-service.js +322 -0
  265. package/dist/service/keyword-optimization-service.d.ts +44 -0
  266. package/dist/service/keyword-optimization-service.js +137 -0
  267. package/dist/service/phase3-input-filter.d.ts +73 -0
  268. package/dist/service/phase3-input-filter.js +172 -0
  269. package/dist/service/queue-io.d.ts +30 -0
  270. package/dist/service/queue-io.js +79 -0
  271. package/{src/service/queue-migration.ts → dist/service/queue-migration.d.ts} +6 -45
  272. package/dist/service/queue-migration.js +56 -0
  273. package/dist/service/runtime-summary-service.d.ts +158 -0
  274. package/dist/service/runtime-summary-service.js +636 -0
  275. package/dist/service/subagent-workflow/subagent-error-utils.d.ts +8 -0
  276. package/{src/service/subagent-workflow/subagent-error-utils.ts → dist/service/subagent-workflow/subagent-error-utils.js} +3 -6
  277. package/{src/service/subagent-workflow/types.ts → dist/service/subagent-workflow/types.d.ts} +17 -80
  278. package/dist/service/subagent-workflow/types.js +11 -0
  279. package/dist/service/subagent-workflow/workflow-store.d.ts +30 -0
  280. package/{src/service/subagent-workflow/workflow-store.ts → dist/service/subagent-workflow/workflow-store.js} +43 -108
  281. package/dist/service/trajectory-service.d.ts +2 -0
  282. package/dist/service/trajectory-service.js +16 -0
  283. package/dist/service/workflow-watchdog.d.ts +23 -0
  284. package/dist/service/workflow-watchdog.js +103 -0
  285. package/dist/types/event-types.d.ts +2 -0
  286. package/dist/types/event-types.js +1 -0
  287. package/dist/types/hygiene-types.d.ts +2 -0
  288. package/dist/types/hygiene-types.js +1 -0
  289. package/{src/types/principle-tree-schema.ts → dist/types/principle-tree-schema.d.ts} +2 -25
  290. package/dist/types/principle-tree-schema.js +24 -0
  291. package/dist/types/queue.d.ts +2 -0
  292. package/dist/types/queue.js +1 -0
  293. package/dist/types/runtime-summary.d.ts +1 -0
  294. package/dist/types/runtime-summary.js +1 -0
  295. package/dist/types.d.ts +33 -0
  296. package/dist/types.js +16 -0
  297. package/dist/utils/file-lock.d.ts +68 -0
  298. package/dist/utils/file-lock.js +310 -0
  299. package/dist/utils/hashing.d.ts +9 -0
  300. package/{src/utils/hashing.ts → dist/utils/hashing.js} +4 -6
  301. package/dist/utils/io.d.ts +11 -0
  302. package/dist/utils/io.js +174 -0
  303. package/dist/utils/node-vm-polyfill.d.ts +9 -0
  304. package/{src/utils/node-vm-polyfill.ts → dist/utils/node-vm-polyfill.js} +0 -2
  305. package/dist/utils/retry.d.ts +210 -0
  306. package/dist/utils/retry.js +375 -0
  307. package/dist/utils/session-key.d.ts +10 -0
  308. package/{src/utils/session-key.ts → dist/utils/session-key.js} +5 -4
  309. package/dist/utils/shadow-fingerprint.d.ts +16 -0
  310. package/dist/utils/shadow-fingerprint.js +34 -0
  311. package/dist/utils/workspace-resolver.d.ts +82 -0
  312. package/dist/utils/workspace-resolver.js +288 -0
  313. package/openclaw.plugin.json +1 -1
  314. package/package.json +8 -2
  315. package/templates/workspace/.principles/DECISION_POLICY.json +44 -0
  316. package/templates/workspace/.principles/PRINCIPLES.md +20 -0
  317. package/templates/workspace/.principles/PROFILE.json +54 -0
  318. package/templates/workspace/.principles/PROFILE.schema.json +56 -0
  319. package/templates/workspace/.principles/THINKING_OS.md +65 -0
  320. package/templates/workspace/.principles/THINKING_OS_ARCHIVE.md +7 -0
  321. package/templates/workspace/.principles/THINKING_OS_CANDIDATES.md +9 -0
  322. package/templates/workspace/.principles/models/_INDEX.md +27 -0
  323. package/templates/workspace/.principles/models/first_principles.md +62 -0
  324. package/templates/workspace/.principles/models/marketing_4p.md +52 -0
  325. package/templates/workspace/.principles/models/porter_five.md +63 -0
  326. package/templates/workspace/.principles/models/swot.md +60 -0
  327. package/templates/workspace/.principles/models/user_story_map.md +63 -0
  328. package/templates/workspace/.state/WORKBOARD.json +4 -0
  329. package/.dependency-cruiser.json +0 -19
  330. package/ADVANCED_CONFIG_ZH.md +0 -93
  331. package/AGENT_INSTALL.md +0 -173
  332. package/AGENT_INSTALL_EN.md +0 -173
  333. package/CHANGELOG.md +0 -26
  334. package/INSTALL.md +0 -254
  335. package/SKILL.md +0 -63
  336. package/esbuild.config.js +0 -104
  337. package/src/commands/archive-impl.ts +0 -147
  338. package/src/commands/capabilities.ts +0 -89
  339. package/src/commands/disable-impl.ts +0 -159
  340. package/src/commands/evolution-status.ts +0 -247
  341. package/src/commands/export.ts +0 -59
  342. package/src/commands/focus.ts +0 -523
  343. package/src/commands/principle-rollback.ts +0 -32
  344. package/src/commands/promote-impl.ts +0 -254
  345. package/src/commands/rollback-impl.ts +0 -246
  346. package/src/commands/samples.ts +0 -65
  347. package/src/commands/strategy.ts +0 -21
  348. package/src/config/errors.ts +0 -180
  349. package/src/constants/tools.ts +0 -62
  350. package/src/core/AGENTS.md +0 -34
  351. package/src/core/__tests__/focus-history.test.ts +0 -210
  352. package/src/core/bootstrap-rules.ts +0 -216
  353. package/src/core/code-implementation-storage.ts +0 -213
  354. package/src/core/config-health.ts +0 -72
  355. package/src/core/control-ui-db.ts +0 -454
  356. package/src/core/correction-cue-learner.ts +0 -239
  357. package/src/core/correction-types.ts +0 -16
  358. package/src/core/empathy-keyword-matcher.ts +0 -64
  359. package/src/core/empathy-types.ts +0 -18
  360. package/src/core/event-log.ts +0 -787
  361. package/src/core/evolution-engine.ts +0 -613
  362. package/src/core/evolution-logger.ts +0 -357
  363. package/src/core/evolution-migration.ts +0 -77
  364. package/src/core/evolution-reducer.ts +0 -891
  365. package/src/core/evolution-types.ts +0 -110
  366. package/src/core/external-training-contract.ts +0 -530
  367. package/src/core/file-store.ts +0 -80
  368. package/src/core/focus-history.ts +0 -763
  369. package/src/core/hygiene/tracker.ts +0 -122
  370. package/src/core/local-worker-routing.ts +0 -337
  371. package/src/core/model-deployment-registry.ts +0 -724
  372. package/src/core/model-training-registry.ts +0 -815
  373. package/src/core/observability.ts +0 -242
  374. package/src/core/pain-diagnostic-gate.ts +0 -169
  375. package/src/core/pain.ts +0 -309
  376. package/src/core/pd-config-loader.ts +0 -400
  377. package/src/core/pd-task-reconciler.ts +0 -380
  378. package/src/core/pd-task-service.ts +0 -43
  379. package/src/core/pd-task-store.ts +0 -78
  380. package/src/core/pd-task-types.ts +0 -24
  381. package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +0 -174
  382. package/src/core/principle-compiler/code-validator.ts +0 -96
  383. package/src/core/principle-compiler/compiler.ts +0 -327
  384. package/src/core/principle-compiler/ledger-registrar.ts +0 -116
  385. package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +0 -42
  386. package/src/core/principle-internalization/lifecycle-refresh.ts +0 -11
  387. package/src/core/principle-internalization/principle-lifecycle-service.ts +0 -170
  388. package/src/core/principle-training-state.ts +0 -177
  389. package/src/core/principle-tree-ledger-adapter.ts +0 -145
  390. package/src/core/principle-tree-ledger.ts +0 -725
  391. package/src/core/profile.ts +0 -228
  392. package/src/core/promotion-gate.ts +0 -854
  393. package/src/core/reflection/reflection-context.ts +0 -133
  394. package/src/core/replay-engine.ts +0 -106
  395. package/src/core/rule-host.ts +0 -386
  396. package/src/core/rule-implementation-runtime.ts +0 -145
  397. package/src/core/runtime-v2-prompt-activation-reader.ts +0 -114
  398. package/src/core/schema/migration-runner.ts +0 -207
  399. package/src/core/shadow-observation-registry.ts +0 -508
  400. package/src/core/surface-guard.ts +0 -188
  401. package/src/core/thinking-models.ts +0 -377
  402. package/src/core/thinking-os-parser.ts +0 -165
  403. package/src/core/trajectory-types.ts +0 -247
  404. package/src/core/trajectory.ts +0 -1831
  405. package/src/core/workflow-funnel-loader.ts +0 -195
  406. package/src/core/workspace-dir-validation.ts +0 -52
  407. package/src/hooks/AGENTS.md +0 -31
  408. package/src/hooks/after-tool-call-helpers.ts +0 -601
  409. package/src/hooks/after-tool-call-types.ts +0 -99
  410. package/src/hooks/gate-block-helper.ts +0 -265
  411. package/src/hooks/gate.ts +0 -394
  412. package/src/hooks/lifecycle.ts +0 -334
  413. package/src/hooks/message-sanitize.ts +0 -102
  414. package/src/hooks/pain.ts +0 -358
  415. package/src/hooks/prompt.ts +0 -1102
  416. package/src/hooks/raw-observation-adapter.ts +0 -215
  417. package/src/hooks/raw-observation-types.ts +0 -77
  418. package/src/hooks/trajectory-collector.ts +0 -253
  419. package/src/hooks/trajectory-evidence.ts +0 -97
  420. package/src/hooks/trigger-cooldown-tracker.ts +0 -82
  421. package/src/i18n/commands.ts +0 -101
  422. package/src/index.ts +0 -939
  423. package/src/openclaw-sdk.ts +0 -312
  424. package/src/service/central-database.ts +0 -936
  425. package/src/service/central-sync-service.ts +0 -85
  426. package/src/service/internalization-auto-consumer-service.ts +0 -397
  427. package/src/service/keyword-optimization-service.ts +0 -169
  428. package/src/service/phase3-input-filter.ts +0 -237
  429. package/src/service/queue-io.ts +0 -108
  430. package/src/service/runtime-summary-service.ts +0 -990
  431. package/src/service/trajectory-service.ts +0 -16
  432. package/src/service/workflow-watchdog.ts +0 -125
  433. package/src/types/event-types.ts +0 -39
  434. package/src/types/hygiene-types.ts +0 -8
  435. package/src/types/queue.ts +0 -15
  436. package/src/types/runtime-summary.ts +0 -5
  437. package/src/types.ts +0 -53
  438. package/src/utils/file-lock.ts +0 -394
  439. package/src/utils/io.ts +0 -176
  440. package/src/utils/retry.ts +0 -573
  441. package/src/utils/shadow-fingerprint.ts +0 -42
  442. package/src/utils/workspace-resolver.ts +0 -393
  443. package/tests/README.md +0 -120
  444. package/tests/build-artifacts.test.ts +0 -55
  445. package/tests/commands/evolution-status.test.ts +0 -511
  446. package/tests/commands/export.test.ts +0 -78
  447. package/tests/commands/pain.test.ts +0 -287
  448. package/tests/commands/samples.test.ts +0 -65
  449. package/tests/commands/strategy.test.ts +0 -19
  450. package/tests/commands/thinking-os.test.ts +0 -88
  451. package/tests/core/bootstrap-rules.test.ts +0 -596
  452. package/tests/core/code-implementation-storage.test.ts +0 -300
  453. package/tests/core/code-validator.test.ts +0 -197
  454. package/tests/core/config-service.test.ts +0 -89
  455. package/tests/core/config.test.ts +0 -90
  456. package/tests/core/control-ui-db.test.ts +0 -75
  457. package/tests/core/core-principle-registry-drift.test.ts +0 -39
  458. package/tests/core/core-template-guidance.test.ts +0 -21
  459. package/tests/core/correction-cue-learner.test.ts +0 -345
  460. package/tests/core/detection-service.test.ts +0 -50
  461. package/tests/core/dictionary-service.test.ts +0 -116
  462. package/tests/core/dictionary.test.ts +0 -171
  463. package/tests/core/empathy-keyword-matcher.test.ts +0 -209
  464. package/tests/core/event-log.test.ts +0 -484
  465. package/tests/core/evolution-engine.test.ts +0 -610
  466. package/tests/core/evolution-logger.test.ts +0 -148
  467. package/tests/core/evolution-migration.test.ts +0 -374
  468. package/tests/core/evolution-paths.test.ts +0 -21
  469. package/tests/core/evolution-reducer.compilation-retry.test.ts +0 -189
  470. package/tests/core/evolution-reducer.detector-metadata.test.ts +0 -602
  471. package/tests/core/evolution-types-loop.test.ts +0 -48
  472. package/tests/core/external-training-contract.test.ts +0 -463
  473. package/tests/core/file-store.test.ts +0 -102
  474. package/tests/core/focus-history.test.ts +0 -874
  475. package/tests/core/init-flatten.test.ts +0 -69
  476. package/tests/core/init-refactor.test.ts +0 -87
  477. package/tests/core/init-v1.3.test.ts +0 -46
  478. package/tests/core/init.test.ts +0 -190
  479. package/tests/core/ledger-registrar.test.ts +0 -235
  480. package/tests/core/migration.test.ts +0 -84
  481. package/tests/core/model-deployment-registry.test.ts +0 -858
  482. package/tests/core/model-training-registry.test.ts +0 -908
  483. package/tests/core/observability.test.ts +0 -382
  484. package/tests/core/pain-diagnostic-gate.test.ts +0 -614
  485. package/tests/core/pain-score.property.test.ts +0 -19
  486. package/tests/core/pain.test.ts +0 -132
  487. package/tests/core/path-resolver.test.ts +0 -57
  488. package/tests/core/paths-refactor.test.ts +0 -20
  489. package/tests/core/pd-config-loader.test.ts +0 -407
  490. package/tests/core/pd-task-store.test.ts +0 -126
  491. package/tests/core/phase7-rollout-integration.test.ts +0 -477
  492. package/tests/core/principle-compiler.test.ts +0 -350
  493. package/tests/core/principle-injection.test.ts +0 -223
  494. package/tests/core/principle-internalization/deprecated-readiness.test.ts +0 -193
  495. package/tests/core/principle-internalization/lifecycle-metrics.test.ts +0 -350
  496. package/tests/core/principle-internalization/lifecycle-routing-policy.test.ts +0 -212
  497. package/tests/core/principle-internalization/lineage-source-retired.test.ts +0 -56
  498. package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +0 -189
  499. package/tests/core/principle-training-state.test.ts +0 -939
  500. package/tests/core/principle-tree-ledger-adapter.test.ts +0 -253
  501. package/tests/core/principle-tree-ledger.test.ts +0 -423
  502. package/tests/core/profile.test.ts +0 -56
  503. package/tests/core/promotion-gate.test.ts +0 -561
  504. package/tests/core/queue-purge.test.ts +0 -337
  505. package/tests/core/reflection-context.test.ts +0 -342
  506. package/tests/core/regression-v1-9-1.test.ts +0 -266
  507. package/tests/core/replay-engine.test.ts +0 -165
  508. package/tests/core/risk-calculator.test.ts +0 -168
  509. package/tests/core/rule-host-adversarial-output.test.ts +0 -242
  510. package/tests/core/rule-host-autocorrect-vm.test.ts +0 -163
  511. package/tests/core/rule-host-helpers.test.ts +0 -120
  512. package/tests/core/rule-host-resource-bounds.test.ts +0 -231
  513. package/tests/core/rule-host-sqlite-source.test.ts +0 -720
  514. package/tests/core/rule-host-unhealthy-visibility.test.ts +0 -261
  515. package/tests/core/rule-host-validation.test.ts +0 -315
  516. package/tests/core/rule-implementation-runtime.test.ts +0 -49
  517. package/tests/core/session-tracker.test.ts +0 -191
  518. package/tests/core/surface-guard.test.ts +0 -338
  519. package/tests/core/template-generator.test.ts +0 -101
  520. package/tests/core/trajectory.test.ts +0 -427
  521. package/tests/core/workflow-funnel-loader.test.ts +0 -1028
  522. package/tests/core/workspace-context-factory.test.ts +0 -18
  523. package/tests/core/workspace-context.test.ts +0 -187
  524. package/tests/core/workspace-guidance-migrator.test.ts +0 -248
  525. package/tests/core-anti-growth.test.ts +0 -182
  526. package/tests/evolution-worker-quarantine.test.ts +0 -400
  527. package/tests/evolution-worker-slimming.test.ts +0 -380
  528. package/tests/fixtures/legacy-queue-v1.json +0 -74
  529. package/tests/fixtures/production-compatibility.test.ts +0 -147
  530. package/tests/fixtures/production-mock-generator.ts +0 -282
  531. package/tests/globalSetup.ts +0 -38
  532. package/tests/hook-workspace-nextaction-contract.test.ts +0 -50
  533. package/tests/hooks/confirm-first-removal.test.ts +0 -188
  534. package/tests/hooks/gate-auto-correct-shadow.test.ts +0 -309
  535. package/tests/hooks/gate-auto-correct.test.ts +0 -664
  536. package/tests/hooks/gate-block-helper-profile.test.ts +0 -186
  537. package/tests/hooks/gate-no-path-write-tool.test.ts +0 -171
  538. package/tests/hooks/gate-rule-host-pipeline.test.ts +0 -230
  539. package/tests/hooks/gate-rule-host-real-pipeline.test.ts +0 -190
  540. package/tests/hooks/lifecycle.test.ts +0 -248
  541. package/tests/hooks/message-sanitize.test.ts +0 -244
  542. package/tests/hooks/pain-emission-characterization.test.ts +0 -420
  543. package/tests/hooks/pain.test.ts +0 -795
  544. package/tests/hooks/prompt-characterization.test.ts +0 -476
  545. package/tests/hooks/prompt-diet.test.ts +0 -335
  546. package/tests/hooks/prompt-size-guard.test.ts +0 -319
  547. package/tests/hooks/raw-observation-adapter.test.ts +0 -312
  548. package/tests/hooks/runtime-v2-prompt-activation.test.ts +0 -895
  549. package/tests/hooks/single-gate-pain-admission.test.ts +0 -258
  550. package/tests/hooks/subagent.test.ts +0 -469
  551. package/tests/hooks/trajectory-collector.test.ts +0 -269
  552. package/tests/hooks/trajectory-evidence.test.ts +0 -280
  553. package/tests/hooks/triage-adapter.test.ts +0 -331
  554. package/tests/hygiene-tracker.test.ts +0 -77
  555. package/tests/index.test.ts +0 -142
  556. package/tests/integration/auto-entry-gate.test.ts +0 -256
  557. package/tests/integration/gate-real-io.e2e.test.ts +0 -248
  558. package/tests/integration/m8-legacy-paths.test.ts +0 -63
  559. package/tests/integration/mvp-surface-registry-guard.test.ts +0 -536
  560. package/tests/integration/pain-id-chain-e2e.test.ts +0 -313
  561. package/tests/integration/principle-compiler-e2e.test.ts +0 -403
  562. package/tests/integration/principle-lifecycle.e2e.test.ts +0 -198
  563. package/tests/integration/runtime-v2-pain-guard.test.ts +0 -125
  564. package/tests/integration/trajectory-lifecycle.e2e.test.ts +0 -523
  565. package/tests/internalization-auto-consumer-gate.test.ts +0 -158
  566. package/tests/internalization-auto-consumer-service.test.ts +0 -219
  567. package/tests/plugin-config-resolution-cutover.test.ts +0 -359
  568. package/tests/queue/async-lock.test.ts +0 -200
  569. package/tests/runtime-v2-discovery-guard.test.ts +0 -153
  570. package/tests/scripts/validate-live-path.test.ts +0 -286
  571. package/tests/service/central-database.test.ts +0 -457
  572. package/tests/service/correction-observer-service.test.ts +0 -505
  573. package/tests/service/evolution-worker.compilation-backfill.test.ts +0 -203
  574. package/tests/service/evolution-worker.correction-observer.test.ts +0 -50
  575. package/tests/service/evolution-worker.queue.test.ts +0 -296
  576. package/tests/service/evolution-worker.timeout.test.ts +0 -233
  577. package/tests/service/keyword-optimization-service.test.ts +0 -121
  578. package/tests/service/phase3-input-filter.test.ts +0 -289
  579. package/tests/service/queue-io.test.ts +0 -168
  580. package/tests/service/queue-migration.test.ts +0 -147
  581. package/tests/service/runtime-summary-service.test.ts +0 -1100
  582. package/tests/service/workflow-watchdog.test.ts +0 -281
  583. package/tests/task-compliance.test.ts +0 -166
  584. package/tests/test-utils.ts +0 -48
  585. package/tests/utils/file-lock.test.ts +0 -409
  586. package/tests/utils/hashing.test.ts +0 -32
  587. package/tests/utils/hook-workspace-resolver.test.ts +0 -524
  588. package/tests/utils/io.test.ts +0 -39
  589. package/tests/utils/retry.test.ts +0 -327
  590. package/tests/utils/session-key.test.ts +0 -52
  591. package/tsconfig.json +0 -16
  592. package/vitest.config.ts +0 -61
  593. package/vitest.unit.config.ts +0 -12
@@ -0,0 +1,443 @@
1
+ /**
2
+ * /pd-focus 命令 - 管理 CURRENT_FOCUS.md
3
+ *
4
+ * 功能:
5
+ * - status: 查看当前状态和历史版本
6
+ * - compress: 手动压缩并备份
7
+ * - history: 查看历史版本列表
8
+ * - rollback: 回滚到指定历史版本
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { WorkspaceContext } from '../core/workspace-context.js';
13
+ import { atomicWriteFileSync } from '../utils/io.js';
14
+ import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js';
15
+ import { getHistoryDir, backupToHistory, cleanupHistory, extractVersion, extractDate, extractMilestones, archiveMilestonesToDaily, cleanupStaleInfo, } from '../core/focus-history.js';
16
+ /**
17
+ * 获取工作区目录
18
+ */
19
+ function getWorkspaceDir(ctx) {
20
+ return resolvePluginCommandWorkspaceDir(ctx, 'focus');
21
+ }
22
+ /**
23
+ * 压缩 CURRENT_FOCUS内容
24
+ *
25
+ * 规则:
26
+ * - 保留:标题、元数据、状态快照
27
+ * - 保留:下一步章节(完整)
28
+ * - 保留:当前任务中未完成的项(- [ ])
29
+ * - 移除:当前任务中已完成的项(- [x])超过 3 个时
30
+ * - 移除:P0 章节如果全部完成
31
+ * - 保留:参考章节
32
+ * - 清理:Working Memory 超过 10 条记录时保留最近 10 条
33
+ * - 验证:文件引用指向不存在的文件时移除
34
+ */
35
+ function compressFocusContent(content, workspaceDir) {
36
+ // 首先使用 cleanupStaleInfo 进行基础清理
37
+ let result = cleanupStaleInfo(content, workspaceDir);
38
+ const lines = result.split('\n');
39
+ const output = [];
40
+ let currentSection = '';
41
+ let inP0Section = false;
42
+ let p0AllCompleted = true;
43
+ let p0Lines = [];
44
+ let completedCount = 0;
45
+ // 辅助函数:刷新 P0 章节缓存
46
+ const flushP0Lines = (skipIfCompleted) => {
47
+ if (inP0Section && p0Lines.length > 0) {
48
+ if (!skipIfCompleted || !p0AllCompleted) {
49
+ // P0 有未完成任务,保留 P0 内容
50
+ output.push(...p0Lines);
51
+ }
52
+ // 重置状态
53
+ p0Lines = [];
54
+ inP0Section = false;
55
+ p0AllCompleted = true;
56
+ }
57
+ };
58
+ for (let i = 0; i < lines.length; i++) {
59
+ const line = lines[i];
60
+ const trimmedLine = line.trim();
61
+ // 识别章节
62
+ if (/^#{1,3}\s*.*状态快照|📍/.test(trimmedLine)) {
63
+ flushP0Lines(true); // P0 完成时跳过
64
+ currentSection = 'snapshot';
65
+ }
66
+ else if (/^###\s*P0/i.test(trimmedLine)) {
67
+ currentSection = 'current_p0';
68
+ inP0Section = true;
69
+ p0AllCompleted = true;
70
+ p0Lines = [line];
71
+ continue;
72
+ }
73
+ else if (/^###\s*P[1-9]/i.test(trimmedLine)) {
74
+ // 离开 P0 章节
75
+ flushP0Lines(true); // P0 完成时跳过,未完成时保留
76
+ currentSection = 'current';
77
+ output.push(line);
78
+ continue;
79
+ }
80
+ else if (/^#{1,3}\s*.*当前任务|🔄/.test(trimmedLine)) {
81
+ flushP0Lines(true); // P0 完成时跳过
82
+ currentSection = 'current';
83
+ }
84
+ else if (/^#{1,3}\s*.*下一步|➡️/.test(trimmedLine)) {
85
+ flushP0Lines(false); // 保留未完成的 P0
86
+ currentSection = 'nextSteps';
87
+ }
88
+ else if (/^#{1,3}\s*.*参考|📎/.test(trimmedLine)) {
89
+ flushP0Lines(false); // 保留未完成的 P0
90
+ currentSection = 'reference';
91
+ }
92
+ // 处理P0章节
93
+ if (inP0Section) {
94
+ p0Lines.push(line);
95
+ // 检查是否有未完成任务
96
+ if (/^-\s*\[\s*\]/.test(trimmedLine)) {
97
+ p0AllCompleted = false;
98
+ }
99
+ continue;
100
+ }
101
+ // 处理当前任务章节中已完成的项
102
+ if (currentSection === 'current') {
103
+ if (/^-\s*\[x\]/i.test(trimmedLine)) {
104
+ completedCount++;
105
+ // 如果已完成项超过 3 个,跳过
106
+ if (completedCount > 3) {
107
+ continue;
108
+ }
109
+ }
110
+ }
111
+ output.push(line);
112
+ }
113
+ // 循环结束后,刷新剩余的 P0 章节
114
+ flushP0Lines(false); // 保留未完成的 P0
115
+ return output.join('\n');
116
+ }
117
+ /**
118
+ * 显示 CURRENT_FOCUS 状态
119
+ */
120
+ function showStatus(workspaceDir, isZh) {
121
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
122
+ const focusPath = wctx.resolve('CURRENT_FOCUS');
123
+ const historyDir = getHistoryDir(focusPath);
124
+ if (!fs.existsSync(focusPath)) {
125
+ return isZh
126
+ ? '⚠️ CURRENT_FOCUS.md 不存在\n\n💡 请先运行 `/pd-init` 初始化工作区'
127
+ : '⚠️ CURRENT_FOCUS.md does not exist\n\n💡 Run `/pd-init` to initialize workspace first';
128
+ }
129
+ const content = fs.readFileSync(focusPath, 'utf-8');
130
+ const version = extractVersion(content);
131
+ const date = extractDate(content);
132
+ const lines = content.split('\n').length;
133
+ // 统计历史版本
134
+ let historyCount = 0;
135
+ if (fs.existsSync(historyDir)) {
136
+ historyCount = fs.readdirSync(historyDir).filter(f => f.startsWith('CURRENT_FOCUS.v')).length;
137
+ }
138
+ if (isZh) {
139
+ return `📄 **CURRENT_FOCUS.md 状态**
140
+
141
+ | 属性 | 值 |
142
+ |------|-----|
143
+ | 版本 | v${version} |
144
+ | 更新日期 | ${date} |
145
+ | 行数 | ${lines} 行 |
146
+ | 历史版本 | ${historyCount} 个 |
147
+
148
+ 💡 输入 \`/pd-focus history\` 查看历史版本
149
+ 💡 输入 \`/pd-focus compress\` 手动压缩`;
150
+ }
151
+ return `📄 **CURRENT_FOCUS.md Status**
152
+
153
+ | Property | Value |
154
+ |----------|-------|
155
+ | Version | v${version} |
156
+ | Updated | ${date} |
157
+ | Lines | ${lines} lines |
158
+ | History | ${historyCount} versions |
159
+
160
+ 💡 Type \`/pd-focus history\` to view history
161
+ 💡 Type \`/pd-focus compress\` to compress manually`;
162
+ }
163
+ /**
164
+ * 显示历史版本列表
165
+ */
166
+ function showHistory(workspaceDir, isZh) {
167
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
168
+ const focusPath = wctx.resolve('CURRENT_FOCUS');
169
+ const historyDir = getHistoryDir(focusPath);
170
+ if (!fs.existsSync(historyDir)) {
171
+ return isZh
172
+ ? '📭 暂无历史版本\n\n💡 历史版本在压缩 CURRENT_FOCUS.md 时自动创建'
173
+ : '📭 No history versions yet\n\n💡 History is created when CURRENT_FOCUS.md is compressed';
174
+ }
175
+ const files = fs.readdirSync(historyDir)
176
+ .filter(f => f.startsWith('CURRENT_FOCUS.v') && f.endsWith('.md'))
177
+ .map(f => {
178
+ const filePath = path.join(historyDir, f);
179
+ const stat = fs.statSync(filePath);
180
+ const content = fs.readFileSync(filePath, 'utf-8');
181
+ return {
182
+ name: f,
183
+ version: extractVersion(content),
184
+ date: extractDate(content),
185
+ mtime: stat.mtime,
186
+ lines: content.split('\n').length,
187
+ };
188
+ })
189
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
190
+ if (files.length === 0) {
191
+ return isZh ? '📭 暂无历史版本' : '📭 No history versions';
192
+ }
193
+ const lines = files.slice(0, 10).map((f, i) => {
194
+ const num = i + 1;
195
+ return isZh
196
+ ? `${num}. \`${f.name}\` - v${f.version} (${f.date}, ${f.lines} 行)`
197
+ : `${num}. \`${f.name}\` - v${f.version} (${f.date}, ${f.lines} lines)`;
198
+ });
199
+ const header = isZh
200
+ ? `📚 **历史版本列表** (最近 ${Math.min(files.length, 10)} 个)\n`
201
+ : `📚 **History Versions** (Last ${Math.min(files.length, 10)})\n`;
202
+ const footer = isZh
203
+ ? `\n\n💡 输入 \`/pd-focus rollback <序号>\` 回滚到指定版本`
204
+ : `\n\n💡 Type \`/pd-focus rollback <number>\` to rollback`;
205
+ return header + '\n' + lines.join('\n') + footer;
206
+ }
207
+ /**
208
+ * 手动压缩 CURRENT_FOCUS.md(使用子智能体)
209
+ */
210
+ async function compressFocus(workspaceDir, isZh, api) {
211
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
212
+ const focusPath = wctx.resolve('CURRENT_FOCUS');
213
+ if (!fs.existsSync(focusPath)) {
214
+ return isZh
215
+ ? '❌ CURRENT_FOCUS.md 不存在'
216
+ : '❌ CURRENT_FOCUS.md does not exist';
217
+ }
218
+ const oldContent = fs.readFileSync(focusPath, 'utf-8');
219
+ const oldVersion = extractVersion(oldContent);
220
+ const oldDate = extractDate(oldContent);
221
+ const oldLines = oldContent.split('\n').length;
222
+ // 检查是否需要压缩
223
+ if (oldLines <= 40) {
224
+ return isZh
225
+ ? `✅ 当前文件仅 ${oldLines} 行,无需压缩\n\n💡 文件少于 40 行时不建议压缩`
226
+ : `✅ Current file has only ${oldLines} lines, no need to compress\n\n💡 Compression not recommended for files under 40 lines`;
227
+ }
228
+ // 1. 提取里程碑
229
+ const milestones = extractMilestones(oldContent);
230
+ // 2. 归档里程碑到 daily memory(而非 MEMORY.md)
231
+ const archivePath = archiveMilestonesToDaily(workspaceDir, milestones, oldVersion);
232
+ const milestonesArchived = archivePath !== null;
233
+ // 3. 备份当前版本
234
+ const backupPath = backupToHistory(focusPath, oldContent);
235
+ // 4. 清理过期历史
236
+ cleanupHistory(focusPath);
237
+ // 5. 压缩内容
238
+ let compressedContent;
239
+ try {
240
+ compressedContent = compressFocusContent(oldContent, workspaceDir);
241
+ api.logger?.info?.(`[PD:Focus] Compressed CURRENT_FOCUS from ${oldLines} lines`);
242
+ }
243
+ catch (error) {
244
+ api.logger?.error?.(`[PD:Focus] Compression failed: ${String(error)}`);
245
+ compressedContent = oldContent;
246
+ }
247
+ // 6. 更新版本号和日期
248
+ const [majorVersion] = oldVersion.split('.');
249
+ const newVersion = `${(parseInt(majorVersion, 10) || 1) + 1}`;
250
+ const [today] = new Date().toISOString().split('T');
251
+ const newContent = compressedContent
252
+ .replace(/\*\*版本\*\*:\s*v[\d.]+/i, `**版本**: v${newVersion}`)
253
+ .replace(/\*\*更新\*\*:\s*\d{4}-\d{2}-\d{2}/, `**更新**: ${today}`);
254
+ const newLines = newContent.split('\n').length;
255
+ const savedLines = oldLines - newLines;
256
+ atomicWriteFileSync(focusPath, newContent);
257
+ const milestoneNote = milestonesArchived
258
+ ? isZh
259
+ ? `📝 里程碑已归档到 memory/${today}.md`
260
+ : `📝 Milestones archived to memory/${today}.md`
261
+ : '';
262
+ if (isZh) {
263
+ return `✅ **压缩完成**
264
+
265
+ | 操作 | 详情 |
266
+ |------|------|
267
+ | 旧版本 | v${oldVersion} (${oldDate}) |
268
+ | 新版本 | v${newVersion} (${today}) |
269
+ | 压缩前 | ${oldLines} 行 |
270
+ | 压缩后 | ${newLines} 行 |
271
+ | 节省 | ${savedLines} 行 |
272
+ | 备份文件 | ${backupPath ? path.basename(backupPath) : '已存在'} |
273
+
274
+ ${milestoneNote ? `${milestoneNote}\n` : ''}
275
+ 💡 已压缩版本已备份到历史目录
276
+ 💡 输入 \`/pd-focus history\` 查看所有历史版本`;
277
+ }
278
+ return `✅ **Compression Complete**
279
+
280
+ | Action | Details |
281
+ |--------|---------|
282
+ | Old Version | v${oldVersion} (${oldDate}) |
283
+ | New Version | v${newVersion} (${today}) |
284
+ | Before | ${oldLines} lines |
285
+ | After | ${newLines} lines |
286
+ | Saved | ${savedLines} lines |
287
+ | Backup File | ${backupPath ? path.basename(backupPath) : 'exists'} |
288
+
289
+ ${milestoneNote ? `${milestoneNote}\n` : ''}
290
+ 💡 Compressed version backed up to history
291
+ 💡 Type \`/pd-focus history\` to view all versions`;
292
+ }
293
+ /**
294
+ * 回滚到历史版本
295
+ */
296
+ function rollbackFocus(workspaceDir, index, isZh) {
297
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
298
+ const focusPath = wctx.resolve('CURRENT_FOCUS');
299
+ const historyDir = getHistoryDir(focusPath);
300
+ if (!fs.existsSync(historyDir)) {
301
+ return isZh ? '❌ 暂无历史版本可回滚' : '❌ No history versions to rollback';
302
+ }
303
+ const files = fs.readdirSync(historyDir)
304
+ .filter(f => f.startsWith('CURRENT_FOCUS.v') && f.endsWith('.md'))
305
+ .map(f => ({
306
+ name: f,
307
+ path: path.join(historyDir, f),
308
+ mtime: fs.statSync(path.join(historyDir, f)).mtime.getTime(),
309
+ }))
310
+ .sort((a, b) => b.mtime - a.mtime);
311
+ if (index < 1 || index > files.length) {
312
+ return isZh
313
+ ? `❌ 无效的序号: ${index}\n\n💡 请输入 1-${files.length} 之间的数字`
314
+ : `❌ Invalid index: ${index}\n\n💡 Please enter a number between 1-${files.length}`;
315
+ }
316
+ const targetFile = files[index - 1];
317
+ const historyContent = fs.readFileSync(targetFile.path, 'utf-8');
318
+ // 备份当前版本
319
+ const currentContent = fs.existsSync(focusPath)
320
+ ? fs.readFileSync(focusPath, 'utf-8')
321
+ : '';
322
+ if (currentContent) {
323
+ backupToHistory(focusPath, currentContent);
324
+ }
325
+ // 恢复历史版本
326
+ const restoredVersion = extractVersion(historyContent);
327
+ const restoredDate = extractDate(historyContent);
328
+ const [today] = new Date().toISOString().split('T');
329
+ // 获取最大版本号(从当前文件或历史文件中)
330
+ let maxVersion = parseFloat(restoredVersion) || 1;
331
+ if (currentContent) {
332
+ const currentVersion = parseFloat(extractVersion(currentContent)) || 1;
333
+ if (currentVersion > maxVersion) {
334
+ maxVersion = currentVersion;
335
+ }
336
+ }
337
+ // 正常递增版本号
338
+ const newVersion = `${maxVersion + 1}`;
339
+ // 添加回滚标记到状态字段
340
+ const restoredContent = historyContent
341
+ .replace(/\*\*版本\*\*:\s*v[\d.]+/i, `**版本**: v${newVersion}`)
342
+ .replace(/\*\*更新\*\*:\s*\d{4}-\d{2}-\d{2}/, `**更新**: ${today}`)
343
+ .replace(/\*\*状态\*\*:\s*[A-Z]+/i, `**状态**: ROLLBACK (from v${restoredVersion})`);
344
+ atomicWriteFileSync(focusPath, restoredContent);
345
+ if (isZh) {
346
+ return `✅ **回滚成功**
347
+
348
+ | 操作 | 详情 |
349
+ |------|------|
350
+ | 恢复自 | ${targetFile.name} |
351
+ | 原版本 | v${restoredVersion} (${restoredDate}) |
352
+ | 新版本 | v${newVersion} (${today}) |
353
+
354
+ 💡 当前版本已备份,可再次回滚`;
355
+ }
356
+ return `✅ **Rollback Complete**
357
+
358
+ | Action | Details |
359
+ |--------|---------|
360
+ | Restored From | ${targetFile.name} |
361
+ | Original Version | v${restoredVersion} (${restoredDate}) |
362
+ | New Version | v${newVersion} (${today}) |
363
+
364
+ 💡 Current version backed up, you can rollback again`;
365
+ }
366
+ /**
367
+ * 显示帮助
368
+ */
369
+ function showHelp(isZh) {
370
+ if (isZh) {
371
+ return `📖 **/pd-focus 命令帮助**
372
+
373
+ \`/pd-focus status\` - 查看 CURRENT_FOCUS.md 状态
374
+ \`/pd-focus history\` - 查看历史版本列表
375
+ \`/pd-focus compress\` - 手动压缩并备份
376
+ \`/pd-focus rollback <序号>\` - 回滚到指定历史版本
377
+
378
+ **功能说明:**
379
+ - 历史版本在压缩时自动创建
380
+ - 最多保留 10 个历史版本
381
+ - Full 模式会读取当前版本 + 最近 3 个历史版本`;
382
+ }
383
+ return `📖 **/pd-focus Command Help**
384
+
385
+ \`/pd-focus status\` - Show CURRENT_FOCUS.md status
386
+ \`/pd-focus history\` - View history versions list
387
+ \`/pd-focus compress\` - Manually compress and backup
388
+ \`/pd-focus rollback <number>\` - Rollback to specified version
389
+
390
+ **Features:**
391
+ - History versions created during compression
392
+ - Maximum 10 history versions retained
393
+ - Full mode reads current + last 3 history versions`;
394
+ }
395
+ /**
396
+ * 处理 /pd-focus 命令
397
+ */
398
+ export async function handleFocusCommand(ctx, api) {
399
+ const workspaceDir = getWorkspaceDir(ctx);
400
+ const args = ctx.args || [];
401
+ const subCommand = args[0]?.toLowerCase() || 'status';
402
+ // 检测语言(与 context.ts 保持一致)
403
+ const isZh = ctx.config?.language === 'zh';
404
+ let result;
405
+ switch (subCommand) {
406
+ case 'status':
407
+ result = showStatus(workspaceDir, isZh);
408
+ break;
409
+ case 'history':
410
+ case 'hist':
411
+ result = showHistory(workspaceDir, isZh);
412
+ break;
413
+ case 'compress':
414
+ case 'cp':
415
+ result = await compressFocus(workspaceDir, isZh, api);
416
+ break;
417
+ case 'rollback':
418
+ case 'rb': {
419
+ const index = parseInt(args[1], 10);
420
+ if (isNaN(index)) {
421
+ result = isZh
422
+ ? '❌ 请指定要回滚的版本序号\n\n💡 输入 `/pd-focus history` 查看可用版本'
423
+ : '❌ Please specify version number to rollback\n\n💡 Type `/pd-focus history` to see available versions';
424
+ }
425
+ else {
426
+ result = rollbackFocus(workspaceDir, index, isZh);
427
+ }
428
+ break;
429
+ }
430
+ case 'help':
431
+ case '--help':
432
+ case '-h':
433
+ result = showHelp(isZh);
434
+ break;
435
+ default:
436
+ result = isZh
437
+ ? `❌ 未知命令: ${subCommand}\n\n${showHelp(isZh)}`
438
+ : `❌ Unknown command: ${subCommand}\n\n${showHelp(isZh)}`;
439
+ }
440
+ return {
441
+ text: result,
442
+ };
443
+ }
@@ -0,0 +1,6 @@
1
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
2
+ /**
3
+ * Handles the /pd-status command
4
+ */
5
+ export declare function handlePainCommand(ctx: PluginCommandContext): PluginCommandResult;
6
+ export declare function handlePainReportCommand(ctx: PluginCommandContext): Promise<PluginCommandResult>;