principles-disciple 1.8.1 → 1.8.3

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 (508) hide show
  1. package/ADVANCED_CONFIG_ZH.md +97 -0
  2. package/AGENT_INSTALL.md +173 -0
  3. package/AGENT_INSTALL_EN.md +173 -0
  4. package/INSTALL.md +256 -0
  5. package/SKILL.md +63 -0
  6. package/docs/COMMAND_REFERENCE.md +76 -0
  7. package/docs/COMMAND_REFERENCE_EN.md +79 -0
  8. package/esbuild.config.js +75 -0
  9. package/openclaw.plugin.json +4 -4
  10. package/package.json +11 -13
  11. package/scripts/build-web.mjs +46 -0
  12. package/scripts/install-dependencies.cjs +47 -0
  13. package/scripts/sync-plugin.mjs +802 -0
  14. package/scripts/verify-build.mjs +109 -0
  15. package/src/agents/nocturnal-dreamer.md +152 -0
  16. package/src/agents/nocturnal-philosopher.md +138 -0
  17. package/src/agents/nocturnal-reflector.md +126 -0
  18. package/src/agents/nocturnal-scribe.md +164 -0
  19. package/src/commands/capabilities.ts +85 -0
  20. package/{dist/commands/context.js → src/commands/context.ts} +78 -38
  21. package/src/commands/evolution-status.ts +146 -0
  22. package/src/commands/export.ts +111 -0
  23. package/src/commands/focus.ts +533 -0
  24. package/src/commands/nocturnal-review.ts +311 -0
  25. package/src/commands/nocturnal-rollout.ts +763 -0
  26. package/src/commands/nocturnal-train.ts +1002 -0
  27. package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
  28. package/src/commands/principle-rollback.ts +27 -0
  29. package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
  30. package/src/commands/samples.ts +60 -0
  31. package/src/commands/strategy.ts +38 -0
  32. package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
  33. package/src/commands/workflow-debug.ts +128 -0
  34. package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
  35. package/src/config/errors.ts +163 -0
  36. package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
  37. package/src/constants/diagnostician.ts +66 -0
  38. package/src/constants/tools.ts +62 -0
  39. package/src/core/adaptive-thresholds.ts +476 -0
  40. package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
  41. package/{dist/core/config.js → src/core/config.ts} +158 -46
  42. package/src/core/control-ui-db.ts +435 -0
  43. package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
  44. package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
  45. package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
  46. package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
  47. package/src/core/empathy-keyword-matcher.ts +327 -0
  48. package/src/core/empathy-types.ts +218 -0
  49. package/src/core/event-log.ts +544 -0
  50. package/src/core/evolution-engine.ts +612 -0
  51. package/src/core/evolution-logger.ts +353 -0
  52. package/src/core/evolution-migration.ts +77 -0
  53. package/src/core/evolution-reducer.ts +731 -0
  54. package/src/core/evolution-types.ts +456 -0
  55. package/src/core/external-training-contract.ts +527 -0
  56. package/src/core/focus-history.ts +1458 -0
  57. package/src/core/hygiene/tracker.ts +117 -0
  58. package/{dist/core/init.js → src/core/init.ts} +39 -26
  59. package/src/core/local-worker-routing.ts +617 -0
  60. package/{dist/core/migration.js → src/core/migration.ts} +18 -11
  61. package/src/core/model-deployment-registry.ts +722 -0
  62. package/src/core/model-training-registry.ts +813 -0
  63. package/src/core/nocturnal-arbiter.ts +706 -0
  64. package/src/core/nocturnal-candidate-scoring.ts +392 -0
  65. package/src/core/nocturnal-compliance.ts +1075 -0
  66. package/src/core/nocturnal-dataset.ts +668 -0
  67. package/src/core/nocturnal-executability.ts +428 -0
  68. package/src/core/nocturnal-export.ts +390 -0
  69. package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
  70. package/src/core/nocturnal-trajectory-extractor.ts +484 -0
  71. package/src/core/nocturnal-trinity.ts +1384 -0
  72. package/src/core/pain.ts +122 -0
  73. package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
  74. package/{dist/core/paths.js → src/core/paths.ts} +13 -4
  75. package/src/core/principle-training-state.ts +450 -0
  76. package/src/core/profile.ts +226 -0
  77. package/src/core/promotion-gate.ts +822 -0
  78. package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
  79. package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +175 -62
  80. package/src/core/shadow-observation-registry.ts +534 -0
  81. package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
  82. package/src/core/thinking-models.ts +217 -0
  83. package/src/core/training-program.ts +630 -0
  84. package/src/core/trajectory-types.ts +243 -0
  85. package/src/core/trajectory.ts +1673 -0
  86. package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
  87. package/src/hooks/bash-risk.ts +171 -0
  88. package/src/hooks/edit-verification.ts +295 -0
  89. package/src/hooks/gate-block-helper.ts +160 -0
  90. package/src/hooks/gate.ts +210 -0
  91. package/src/hooks/gfi-gate.ts +177 -0
  92. package/src/hooks/lifecycle.ts +326 -0
  93. package/{dist/hooks/llm.js → src/hooks/llm.ts} +160 -80
  94. package/src/hooks/message-sanitize.ts +45 -0
  95. package/src/hooks/pain.ts +384 -0
  96. package/src/hooks/progressive-trust-gate.ts +174 -0
  97. package/src/hooks/prompt.ts +920 -0
  98. package/src/hooks/subagent.ts +207 -0
  99. package/src/hooks/thinking-checkpoint.ts +73 -0
  100. package/src/hooks/trajectory-collector.ts +290 -0
  101. package/src/http/principles-console-route.ts +716 -0
  102. package/src/i18n/commands.ts +117 -0
  103. package/src/index.ts +694 -0
  104. package/src/service/central-database.ts +831 -0
  105. package/src/service/control-ui-query-service.ts +888 -0
  106. package/src/service/evolution-query-service.ts +405 -0
  107. package/src/service/evolution-worker.ts +1646 -0
  108. package/src/service/health-query-service.ts +836 -0
  109. package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +235 -79
  110. package/src/service/nocturnal-service.ts +1015 -0
  111. package/src/service/nocturnal-target-selector.ts +532 -0
  112. package/src/service/phase3-input-filter.ts +237 -0
  113. package/src/service/runtime-summary-service.ts +757 -0
  114. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
  115. package/{dist/service/subagent-workflow/empathy-observer-workflow-manager.js → src/service/subagent-workflow/empathy-observer-workflow-manager.ts} +240 -117
  116. package/src/service/subagent-workflow/index.ts +51 -0
  117. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
  118. package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
  119. package/{dist/service/subagent-workflow/types.d.ts → src/service/subagent-workflow/types.ts} +137 -18
  120. package/src/service/subagent-workflow/workflow-store.ts +328 -0
  121. package/src/service/trajectory-service.ts +15 -0
  122. package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
  123. package/src/tools/deep-reflect.ts +349 -0
  124. package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
  125. package/src/types/event-types.ts +453 -0
  126. package/src/types/hygiene-types.ts +31 -0
  127. package/src/types/principle-tree-schema.ts +244 -0
  128. package/src/types/runtime-summary.ts +49 -0
  129. package/src/types.ts +74 -0
  130. package/src/utils/file-lock.ts +391 -0
  131. package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
  132. package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
  133. package/src/utils/io.ts +110 -0
  134. package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
  135. package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
  136. package/src/utils/subagent-probe.ts +94 -0
  137. package/templates/langs/en/skills/ai-sprint-orchestration/EXAMPLES.md +63 -0
  138. package/templates/langs/en/skills/ai-sprint-orchestration/REFERENCE.md +136 -0
  139. package/templates/langs/en/skills/ai-sprint-orchestration/SKILL.md +67 -0
  140. package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +214 -0
  141. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +107 -0
  142. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +107 -0
  143. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +105 -0
  144. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +108 -0
  145. package/templates/langs/en/skills/ai-sprint-orchestration/references/workflow-v1-acceptance-checklist.md +58 -0
  146. package/templates/langs/en/skills/ai-sprint-orchestration/references/workflow-v1.4-work-unit-handoff.md +190 -0
  147. package/templates/langs/en/skills/ai-sprint-orchestration/runtime/.gitignore +2 -0
  148. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/archive.mjs +310 -0
  149. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/contract-enforcement.mjs +683 -0
  150. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/decision.mjs +604 -0
  151. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/state-store.mjs +32 -0
  152. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/task-specs.mjs +707 -0
  153. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +3419 -0
  154. package/templates/langs/zh/skills/ai-sprint-orchestration/EXAMPLES.md +63 -0
  155. package/templates/langs/zh/skills/ai-sprint-orchestration/REFERENCE.md +136 -0
  156. package/templates/langs/zh/skills/ai-sprint-orchestration/SKILL.md +67 -0
  157. package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +214 -0
  158. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +107 -0
  159. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +107 -0
  160. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +105 -0
  161. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +108 -0
  162. package/templates/langs/zh/skills/ai-sprint-orchestration/references/workflow-v1-acceptance-checklist.md +58 -0
  163. package/templates/langs/zh/skills/ai-sprint-orchestration/references/workflow-v1.4-work-unit-handoff.md +190 -0
  164. package/templates/langs/zh/skills/ai-sprint-orchestration/runtime/.gitignore +2 -0
  165. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/archive.mjs +310 -0
  166. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/contract-enforcement.mjs +683 -0
  167. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/decision.mjs +604 -0
  168. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/state-store.mjs +32 -0
  169. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/task-specs.mjs +707 -0
  170. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +3419 -0
  171. package/templates/langs/zh/skills/ai-sprint-orchestration/test/archive.test.mjs +230 -0
  172. package/templates/langs/zh/skills/ai-sprint-orchestration/test/contract-enforcement.test.mjs +672 -0
  173. package/templates/langs/zh/skills/ai-sprint-orchestration/test/decision.test.mjs +1321 -0
  174. package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +1419 -0
  175. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
  176. package/templates/pain_settings.json +2 -1
  177. package/tests/README.md +120 -0
  178. package/tests/build-artifacts.test.ts +111 -0
  179. package/tests/commands/evolution-status.test.ts +222 -0
  180. package/tests/commands/evolver.test.ts +22 -0
  181. package/tests/commands/export.test.ts +78 -0
  182. package/tests/commands/nocturnal-review.test.ts +448 -0
  183. package/tests/commands/nocturnal-train.test.ts +97 -0
  184. package/tests/commands/pain.test.ts +108 -0
  185. package/tests/commands/samples.test.ts +65 -0
  186. package/tests/commands/strategy.test.ts +34 -0
  187. package/tests/commands/thinking-os.test.ts +88 -0
  188. package/tests/core/adaptive-thresholds.test.ts +261 -0
  189. package/tests/core/config-service.test.ts +89 -0
  190. package/tests/core/config.test.ts +90 -0
  191. package/tests/core/control-ui-db.test.ts +75 -0
  192. package/tests/core/core-template-guidance.test.ts +21 -0
  193. package/tests/core/detection-funnel.test.ts +63 -0
  194. package/tests/core/detection-service.test.ts +50 -0
  195. package/tests/core/dictionary-service.test.ts +116 -0
  196. package/tests/core/dictionary.test.ts +168 -0
  197. package/tests/core/empathy-keyword-matcher.test.ts +209 -0
  198. package/tests/core/event-log.test.ts +181 -0
  199. package/tests/core/evolution-e2e.test.ts +58 -0
  200. package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
  201. package/tests/core/evolution-engine.test.ts +562 -0
  202. package/tests/core/evolution-logger.test.ts +148 -0
  203. package/tests/core/evolution-migration.test.ts +50 -0
  204. package/tests/core/evolution-paths.test.ts +21 -0
  205. package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
  206. package/tests/core/evolution-reducer.test.ts +180 -0
  207. package/tests/core/evolution-types-loop.test.ts +48 -0
  208. package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
  209. package/tests/core/external-training-contract.test.ts +463 -0
  210. package/tests/core/focus-history.test.ts +682 -0
  211. package/tests/core/init-flatten.test.ts +69 -0
  212. package/tests/core/init-refactor.test.ts +87 -0
  213. package/tests/core/init-v1.3.test.ts +46 -0
  214. package/tests/core/init.test.ts +190 -0
  215. package/tests/core/local-worker-routing.test.ts +757 -0
  216. package/tests/core/migration.test.ts +84 -0
  217. package/tests/core/model-deployment-registry.test.ts +845 -0
  218. package/tests/core/model-training-registry.test.ts +889 -0
  219. package/tests/core/nocturnal-arbiter.test.ts +494 -0
  220. package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
  221. package/tests/core/nocturnal-compliance.test.ts +646 -0
  222. package/tests/core/nocturnal-dataset.test.ts +892 -0
  223. package/tests/core/nocturnal-executability.test.ts +357 -0
  224. package/tests/core/nocturnal-export.test.ts +462 -0
  225. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
  226. package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
  227. package/tests/core/nocturnal-trinity.test.ts +953 -0
  228. package/tests/core/pain.test.ts +33 -0
  229. package/tests/core/path-resolver.test.ts +57 -0
  230. package/tests/core/paths-refactor.test.ts +42 -0
  231. package/tests/core/phase7-rollout-integration.test.ts +477 -0
  232. package/tests/core/principle-training-state.test.ts +712 -0
  233. package/tests/core/profile.test.ts +56 -0
  234. package/tests/core/promotion-gate.test.ts +556 -0
  235. package/tests/core/risk-calculator.test.ts +168 -0
  236. package/tests/core/session-tracker.test.ts +191 -0
  237. package/tests/core/training-program.test.ts +472 -0
  238. package/tests/core/trajectory.test.ts +265 -0
  239. package/tests/core/workspace-context-factory.test.ts +18 -0
  240. package/tests/core/workspace-context.test.ts +134 -0
  241. package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
  242. package/tests/fixtures/production-compatibility.test.ts +147 -0
  243. package/tests/fixtures/production-mock-generator.ts +282 -0
  244. package/tests/hooks/bash-risk-integration.test.ts +137 -0
  245. package/tests/hooks/bash-risk.test.ts +81 -0
  246. package/tests/hooks/edit-verification.test.ts +678 -0
  247. package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
  248. package/tests/hooks/gate-edit-verification.test.ts +435 -0
  249. package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
  250. package/tests/hooks/gate.test.ts +271 -0
  251. package/tests/hooks/gfi-gate-unit.test.ts +422 -0
  252. package/tests/hooks/gfi-gate.test.ts +669 -0
  253. package/tests/hooks/lifecycle.test.ts +248 -0
  254. package/tests/hooks/llm.test.ts +308 -0
  255. package/tests/hooks/message-sanitize.test.ts +36 -0
  256. package/tests/hooks/pain.test.ts +141 -0
  257. package/tests/hooks/progressive-trust-gate.test.ts +277 -0
  258. package/tests/hooks/prompt.test.ts +1411 -0
  259. package/tests/hooks/subagent.test.ts +467 -0
  260. package/tests/hooks/thinking-gate.test.ts +313 -0
  261. package/tests/http/principles-console-route.test.ts +140 -0
  262. package/tests/hygiene-tracker.test.ts +77 -0
  263. package/tests/index.integration.test.ts +179 -0
  264. package/tests/index.shadow-routing.integration.test.ts +140 -0
  265. package/tests/index.test.ts +9 -0
  266. package/tests/integration/empathy-workflow-integration.test.ts +627 -0
  267. package/tests/service/control-ui-query-service.test.ts +121 -0
  268. package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
  269. package/tests/service/evolution-worker.test.ts +585 -0
  270. package/tests/service/nocturnal-runtime.test.ts +470 -0
  271. package/tests/service/nocturnal-service.test.ts +577 -0
  272. package/tests/service/nocturnal-target-selector.test.ts +615 -0
  273. package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
  274. package/tests/service/phase3-input-filter.test.ts +289 -0
  275. package/tests/service/runtime-summary-service.test.ts +919 -0
  276. package/tests/task-compliance.test.ts +166 -0
  277. package/tests/test-utils.ts +48 -0
  278. package/tests/tools/critique-prompt.test.ts +260 -0
  279. package/tests/tools/deep-reflect.test.ts +232 -0
  280. package/tests/tools/model-index.test.ts +246 -0
  281. package/tests/ui/app.test.tsx +114 -0
  282. package/tests/utils/file-lock.test.ts +407 -0
  283. package/tests/utils/hashing.test.ts +32 -0
  284. package/tests/utils/io.test.ts +39 -0
  285. package/tests/utils/nlp.test.ts +53 -0
  286. package/tests/utils/plugin-logger.test.ts +156 -0
  287. package/tsconfig.json +16 -0
  288. package/tsconfig.tsbuildinfo +1 -0
  289. package/ui/src/App.tsx +45 -0
  290. package/ui/src/api.ts +216 -0
  291. package/ui/src/charts.tsx +586 -0
  292. package/ui/src/components/ErrorState.tsx +6 -0
  293. package/ui/src/components/Loading.tsx +13 -0
  294. package/ui/src/components/ProtectedRoute.tsx +12 -0
  295. package/ui/src/components/Shell.tsx +91 -0
  296. package/ui/src/components/WorkspaceConfig.tsx +146 -0
  297. package/ui/src/components/index.ts +5 -0
  298. package/ui/src/context/auth.tsx +80 -0
  299. package/ui/src/context/theme.tsx +66 -0
  300. package/ui/src/hooks/useAutoRefresh.ts +39 -0
  301. package/ui/src/i18n/ui.ts +363 -0
  302. package/ui/src/main.tsx +16 -0
  303. package/ui/src/pages/EvolutionPage.tsx +352 -0
  304. package/ui/src/pages/FeedbackPage.tsx +140 -0
  305. package/ui/src/pages/GateMonitorPage.tsx +136 -0
  306. package/ui/src/pages/LoginPage.tsx +88 -0
  307. package/ui/src/pages/OverviewPage.tsx +238 -0
  308. package/ui/src/pages/SamplesPage.tsx +174 -0
  309. package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
  310. package/ui/src/styles.css +1661 -0
  311. package/ui/src/types.ts +368 -0
  312. package/ui/src/utils/format.ts +15 -0
  313. package/vitest.config.ts +23 -0
  314. package/dist/commands/capabilities.d.ts +0 -3
  315. package/dist/commands/capabilities.js +0 -73
  316. package/dist/commands/context.d.ts +0 -5
  317. package/dist/commands/evolution-status.d.ts +0 -4
  318. package/dist/commands/evolution-status.js +0 -117
  319. package/dist/commands/evolver.d.ts +0 -9
  320. package/dist/commands/evolver.js +0 -26
  321. package/dist/commands/export.d.ts +0 -2
  322. package/dist/commands/export.js +0 -98
  323. package/dist/commands/focus.d.ts +0 -14
  324. package/dist/commands/focus.js +0 -457
  325. package/dist/commands/nocturnal-review.d.ts +0 -24
  326. package/dist/commands/nocturnal-review.js +0 -265
  327. package/dist/commands/nocturnal-rollout.d.ts +0 -27
  328. package/dist/commands/nocturnal-rollout.js +0 -671
  329. package/dist/commands/nocturnal-train.d.ts +0 -25
  330. package/dist/commands/nocturnal-train.js +0 -919
  331. package/dist/commands/pain.d.ts +0 -5
  332. package/dist/commands/principle-rollback.d.ts +0 -4
  333. package/dist/commands/principle-rollback.js +0 -22
  334. package/dist/commands/rollback.d.ts +0 -19
  335. package/dist/commands/samples.d.ts +0 -2
  336. package/dist/commands/samples.js +0 -55
  337. package/dist/commands/strategy.d.ts +0 -3
  338. package/dist/commands/strategy.js +0 -29
  339. package/dist/commands/thinking-os.d.ts +0 -2
  340. package/dist/config/defaults/runtime.d.ts +0 -40
  341. package/dist/config/errors.d.ts +0 -84
  342. package/dist/config/errors.js +0 -94
  343. package/dist/config/index.js +0 -7
  344. package/dist/constants/diagnostician.d.ts +0 -12
  345. package/dist/constants/diagnostician.js +0 -56
  346. package/dist/constants/tools.d.ts +0 -17
  347. package/dist/constants/tools.js +0 -54
  348. package/dist/core/adaptive-thresholds.d.ts +0 -186
  349. package/dist/core/adaptive-thresholds.js +0 -300
  350. package/dist/core/config-service.d.ts +0 -15
  351. package/dist/core/config.d.ts +0 -129
  352. package/dist/core/control-ui-db.d.ts +0 -95
  353. package/dist/core/control-ui-db.js +0 -292
  354. package/dist/core/detection-funnel.d.ts +0 -33
  355. package/dist/core/detection-service.d.ts +0 -15
  356. package/dist/core/dictionary-service.d.ts +0 -15
  357. package/dist/core/dictionary.d.ts +0 -38
  358. package/dist/core/event-log.d.ts +0 -82
  359. package/dist/core/event-log.js +0 -463
  360. package/dist/core/evolution-engine.d.ts +0 -118
  361. package/dist/core/evolution-engine.js +0 -464
  362. package/dist/core/evolution-logger.d.ts +0 -137
  363. package/dist/core/evolution-logger.js +0 -256
  364. package/dist/core/evolution-migration.d.ts +0 -5
  365. package/dist/core/evolution-migration.js +0 -65
  366. package/dist/core/evolution-reducer.d.ts +0 -98
  367. package/dist/core/evolution-reducer.js +0 -465
  368. package/dist/core/evolution-types.d.ts +0 -287
  369. package/dist/core/evolution-types.js +0 -78
  370. package/dist/core/external-training-contract.d.ts +0 -276
  371. package/dist/core/external-training-contract.js +0 -269
  372. package/dist/core/focus-history.d.ts +0 -210
  373. package/dist/core/focus-history.js +0 -1185
  374. package/dist/core/hygiene/tracker.d.ts +0 -22
  375. package/dist/core/hygiene/tracker.js +0 -106
  376. package/dist/core/init.d.ts +0 -12
  377. package/dist/core/local-worker-routing.d.ts +0 -175
  378. package/dist/core/local-worker-routing.js +0 -525
  379. package/dist/core/migration.d.ts +0 -6
  380. package/dist/core/model-deployment-registry.d.ts +0 -218
  381. package/dist/core/model-deployment-registry.js +0 -503
  382. package/dist/core/model-training-registry.d.ts +0 -295
  383. package/dist/core/model-training-registry.js +0 -475
  384. package/dist/core/nocturnal-arbiter.d.ts +0 -159
  385. package/dist/core/nocturnal-arbiter.js +0 -534
  386. package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
  387. package/dist/core/nocturnal-candidate-scoring.js +0 -266
  388. package/dist/core/nocturnal-compliance.d.ts +0 -175
  389. package/dist/core/nocturnal-compliance.js +0 -824
  390. package/dist/core/nocturnal-dataset.d.ts +0 -224
  391. package/dist/core/nocturnal-dataset.js +0 -443
  392. package/dist/core/nocturnal-executability.d.ts +0 -85
  393. package/dist/core/nocturnal-executability.js +0 -331
  394. package/dist/core/nocturnal-export.d.ts +0 -124
  395. package/dist/core/nocturnal-export.js +0 -275
  396. package/dist/core/nocturnal-paths.d.ts +0 -124
  397. package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
  398. package/dist/core/nocturnal-trajectory-extractor.js +0 -307
  399. package/dist/core/nocturnal-trinity.d.ts +0 -311
  400. package/dist/core/nocturnal-trinity.js +0 -880
  401. package/dist/core/pain.d.ts +0 -4
  402. package/dist/core/pain.js +0 -70
  403. package/dist/core/path-resolver.d.ts +0 -46
  404. package/dist/core/paths.d.ts +0 -65
  405. package/dist/core/principle-training-state.d.ts +0 -121
  406. package/dist/core/principle-training-state.js +0 -321
  407. package/dist/core/profile.d.ts +0 -62
  408. package/dist/core/profile.js +0 -210
  409. package/dist/core/promotion-gate.d.ts +0 -238
  410. package/dist/core/promotion-gate.js +0 -529
  411. package/dist/core/risk-calculator.d.ts +0 -22
  412. package/dist/core/session-tracker.d.ts +0 -101
  413. package/dist/core/shadow-observation-registry.d.ts +0 -217
  414. package/dist/core/shadow-observation-registry.js +0 -308
  415. package/dist/core/system-logger.d.ts +0 -8
  416. package/dist/core/thinking-models.d.ts +0 -38
  417. package/dist/core/thinking-models.js +0 -170
  418. package/dist/core/training-program.d.ts +0 -233
  419. package/dist/core/training-program.js +0 -433
  420. package/dist/core/trajectory.d.ts +0 -411
  421. package/dist/core/trajectory.js +0 -1307
  422. package/dist/core/workspace-context.d.ts +0 -71
  423. package/dist/hooks/bash-risk.d.ts +0 -57
  424. package/dist/hooks/bash-risk.js +0 -137
  425. package/dist/hooks/edit-verification.d.ts +0 -62
  426. package/dist/hooks/edit-verification.js +0 -256
  427. package/dist/hooks/gate-block-helper.d.ts +0 -44
  428. package/dist/hooks/gate-block-helper.js +0 -119
  429. package/dist/hooks/gate.d.ts +0 -24
  430. package/dist/hooks/gate.js +0 -173
  431. package/dist/hooks/gfi-gate.d.ts +0 -40
  432. package/dist/hooks/gfi-gate.js +0 -113
  433. package/dist/hooks/lifecycle.d.ts +0 -5
  434. package/dist/hooks/lifecycle.js +0 -284
  435. package/dist/hooks/llm.d.ts +0 -13
  436. package/dist/hooks/message-sanitize.d.ts +0 -3
  437. package/dist/hooks/message-sanitize.js +0 -37
  438. package/dist/hooks/pain.d.ts +0 -5
  439. package/dist/hooks/pain.js +0 -301
  440. package/dist/hooks/progressive-trust-gate.d.ts +0 -52
  441. package/dist/hooks/progressive-trust-gate.js +0 -134
  442. package/dist/hooks/prompt.d.ts +0 -49
  443. package/dist/hooks/prompt.js +0 -905
  444. package/dist/hooks/subagent.d.ts +0 -10
  445. package/dist/hooks/subagent.js +0 -387
  446. package/dist/hooks/thinking-checkpoint.d.ts +0 -37
  447. package/dist/hooks/thinking-checkpoint.js +0 -51
  448. package/dist/hooks/trajectory-collector.d.ts +0 -32
  449. package/dist/hooks/trajectory-collector.js +0 -256
  450. package/dist/http/principles-console-route.d.ts +0 -9
  451. package/dist/http/principles-console-route.js +0 -681
  452. package/dist/i18n/commands.d.ts +0 -26
  453. package/dist/i18n/commands.js +0 -116
  454. package/dist/index.d.ts +0 -7
  455. package/dist/index.js +0 -581
  456. package/dist/service/central-database.d.ts +0 -104
  457. package/dist/service/central-database.js +0 -649
  458. package/dist/service/control-ui-query-service.d.ts +0 -221
  459. package/dist/service/control-ui-query-service.js +0 -543
  460. package/dist/service/empathy-observer-manager.d.ts +0 -88
  461. package/dist/service/empathy-observer-manager.js +0 -414
  462. package/dist/service/evolution-query-service.d.ts +0 -155
  463. package/dist/service/evolution-query-service.js +0 -258
  464. package/dist/service/evolution-worker.d.ts +0 -101
  465. package/dist/service/evolution-worker.js +0 -975
  466. package/dist/service/health-query-service.d.ts +0 -170
  467. package/dist/service/health-query-service.js +0 -662
  468. package/dist/service/nocturnal-runtime.d.ts +0 -183
  469. package/dist/service/nocturnal-service.d.ts +0 -163
  470. package/dist/service/nocturnal-service.js +0 -787
  471. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  472. package/dist/service/nocturnal-target-selector.js +0 -315
  473. package/dist/service/phase3-input-filter.d.ts +0 -73
  474. package/dist/service/phase3-input-filter.js +0 -172
  475. package/dist/service/runtime-summary-service.d.ts +0 -122
  476. package/dist/service/runtime-summary-service.js +0 -485
  477. package/dist/service/subagent-workflow/empathy-observer-workflow-manager.d.ts +0 -48
  478. package/dist/service/subagent-workflow/index.d.ts +0 -4
  479. package/dist/service/subagent-workflow/index.js +0 -3
  480. package/dist/service/subagent-workflow/runtime-direct-driver.d.ts +0 -77
  481. package/dist/service/subagent-workflow/runtime-direct-driver.js +0 -75
  482. package/dist/service/subagent-workflow/types.js +0 -11
  483. package/dist/service/subagent-workflow/workflow-store.d.ts +0 -26
  484. package/dist/service/subagent-workflow/workflow-store.js +0 -165
  485. package/dist/service/trajectory-service.d.ts +0 -2
  486. package/dist/service/trajectory-service.js +0 -15
  487. package/dist/tools/critique-prompt.d.ts +0 -14
  488. package/dist/tools/deep-reflect.d.ts +0 -39
  489. package/dist/tools/deep-reflect.js +0 -350
  490. package/dist/tools/model-index.d.ts +0 -9
  491. package/dist/types/event-types.d.ts +0 -306
  492. package/dist/types/event-types.js +0 -106
  493. package/dist/types/hygiene-types.d.ts +0 -20
  494. package/dist/types/hygiene-types.js +0 -12
  495. package/dist/types/runtime-summary.d.ts +0 -47
  496. package/dist/types/runtime-summary.js +0 -1
  497. package/dist/types.d.ts +0 -50
  498. package/dist/types.js +0 -22
  499. package/dist/utils/file-lock.d.ts +0 -71
  500. package/dist/utils/file-lock.js +0 -309
  501. package/dist/utils/glob-match.d.ts +0 -28
  502. package/dist/utils/hashing.d.ts +0 -9
  503. package/dist/utils/io.d.ts +0 -6
  504. package/dist/utils/io.js +0 -106
  505. package/dist/utils/nlp.d.ts +0 -9
  506. package/dist/utils/plugin-logger.d.ts +0 -39
  507. package/dist/utils/subagent-probe.d.ts +0 -34
  508. package/dist/utils/subagent-probe.js +0 -81
@@ -1,32 +1,39 @@
1
- import { resetFriction, getSession } from '../core/session-tracker.js';
1
+ import { trackFriction, resetFriction, getSession } from '../core/session-tracker.js';
2
2
  import { WorkspaceContext } from '../core/workspace-context.js';
3
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
4
+ import type { EmpathyEventStats } from '../types/event-types.js';
5
+
3
6
  /**
4
7
  * Creates a visual progress bar (e.g., [██████░░░░])
5
8
  */
6
- function createProgressBar(value, max, length = 10) {
9
+ function createProgressBar(value: number, max: number, length: number = 10): string {
7
10
  const filledLength = Math.round((value / max) * length);
8
11
  const emptyLength = length - filledLength;
9
12
  return `[${'█'.repeat(filledLength)}${'░'.repeat(emptyLength)}]`;
10
13
  }
14
+
11
15
  /**
12
16
  * Creates a mini bar for daily trends
13
17
  */
14
- function createMiniBar(count, max, length = 6) {
18
+ function createMiniBar(count: number, max: number, length: number = 6): string {
15
19
  const filledLength = Math.round((count / max) * length);
16
20
  return '█'.repeat(filledLength) + '░'.repeat(length - filledLength);
17
21
  }
22
+
18
23
  /**
19
24
  * Format empathy stats for display
20
25
  */
21
- function formatEmpathyCard(stats, range, isZh) {
26
+ function formatEmpathyCard(stats: EmpathyEventStats, range: string, isZh: boolean): string {
22
27
  if (stats.totalEvents === 0 && stats.dedupedCount === 0) {
23
28
  return isZh
24
29
  ? `🫀 **情绪事件统计** (${range})\n 暂无数据`
25
30
  : `🫀 **Empathy Events** (${range})\n No data available`;
26
31
  }
27
- const lines = [];
32
+
33
+ const lines: string[] = [];
28
34
  lines.push(isZh ? `🫀 **情绪事件统计** (${range})` : `🫀 **Empathy Events** (${range})`);
29
35
  lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
36
+
30
37
  // Total events
31
38
  const totalLabel = isZh ? '📊 总事件' : '📊 Total Events';
32
39
  lines.push(`${totalLabel}: ${stats.totalEvents} 次`);
@@ -34,6 +41,7 @@ function formatEmpathyCard(stats, range, isZh) {
34
41
  lines.push(` ├─ 😠 moderate: ${stats.bySeverity.moderate} 次 (${stats.scoreBySeverity.moderate}分)`);
35
42
  lines.push(` └─ 😡 severe: ${stats.bySeverity.severe} 次 (${stats.scoreBySeverity.severe}分)`);
36
43
  lines.push('');
44
+
37
45
  // Dedupe hit rate
38
46
  const dedupeRate = (stats.dedupeHitRate * 100).toFixed(0);
39
47
  const dedupeLabel = isZh ? '🔄 去重命中率' : '🔄 Dedupe Hit Rate';
@@ -42,12 +50,14 @@ function formatEmpathyCard(stats, range, isZh) {
42
50
  lines.push(isZh ? ' ↳ 避免了重复惩罚' : ' ↳ Prevented duplicate penalties');
43
51
  }
44
52
  lines.push('');
53
+
45
54
  // Rollback info
46
55
  if (stats.rollbackCount > 0) {
47
56
  const rollbackLabel = isZh ? '↩️ 已回滚' : '↩️ Rolled Back';
48
57
  lines.push(`${rollbackLabel}: ${stats.rollbackCount} 次 (${stats.rolledBackScore}分)`);
49
58
  lines.push('');
50
59
  }
60
+
51
61
  // Daily trend
52
62
  if (stats.dailyTrend.length > 1) {
53
63
  const trendLabel = isZh ? '📈 趋势 (按天)' : '📈 Trend (by day)';
@@ -59,28 +69,35 @@ function formatEmpathyCard(stats, range, isZh) {
59
69
  lines.push(` ${dateStr}: ${bar} ${day.count}次`);
60
70
  }
61
71
  }
72
+
62
73
  // Detection mode distribution
63
74
  if (stats.byDetectionMode.structured > 0 || stats.byDetectionMode.legacy_tag > 0) {
64
75
  lines.push('');
65
76
  const modeLabel = isZh ? '🔍 检测模式' : '🔍 Detection Mode';
66
77
  lines.push(`${modeLabel}: 结构化 ${stats.byDetectionMode.structured} | 标签 ${stats.byDetectionMode.legacy_tag}`);
67
78
  }
79
+
68
80
  return lines.join('\n');
69
81
  }
82
+
70
83
  /**
71
84
  * Handles the /pd-status command
72
85
  */
73
- export function handlePainCommand(ctx) {
74
- const workspaceDir = ctx.config?.workspaceDir || process.cwd();
86
+ export function handlePainCommand(ctx: PluginCommandContext): PluginCommandResult {
87
+ const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
88
+
75
89
  const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
76
- const lang = ctx.config?.language || 'en';
90
+ const lang = (ctx.config?.language as string) || 'en';
77
91
  const isZh = lang === 'zh';
78
- const sessionId = ctx.sessionId;
92
+ const sessionId = (ctx as any).sessionId;
93
+
79
94
  const args = (ctx.args || '').trim();
95
+
80
96
  // Handle empathy subcommand
81
97
  if (args.startsWith('empathy')) {
82
98
  return handleEmpathySubcommand(wctx, args, sessionId, isZh);
83
99
  }
100
+
84
101
  if (args === 'reset') {
85
102
  if (sessionId) {
86
103
  resetFriction(sessionId);
@@ -88,6 +105,7 @@ export function handlePainCommand(ctx) {
88
105
  }
89
106
  return { text: isZh ? `❌ 无法识别当前会话。` : `❌ Session ID not found. Use /pd-status reset in a chat session.` };
90
107
  }
108
+
91
109
  if (args === 'data') {
92
110
  const stats = wctx.trajectory.getDataStats();
93
111
  return {
@@ -96,33 +114,31 @@ export function handlePainCommand(ctx) {
96
114
  : `Trajectory Data Status\n- DB: ${stats.dbPath}\n- assistant turns: ${stats.assistantTurns}\n- user turns: ${stats.userTurns}\n- tool calls: ${stats.toolCalls}\n- pain events: ${stats.painEvents}\n- pending samples: ${stats.pendingSamples}\n- approved samples: ${stats.approvedSamples}\n- blob bytes: ${stats.blobBytes}\n- last ingest: ${stats.lastIngestAt ?? 'none'}`
97
115
  };
98
116
  }
117
+
99
118
  // Default: Show status
100
119
  const session = sessionId ? getSession(sessionId) : undefined;
101
120
  const gfi = session ? session.currentGfi : 0;
102
121
  const dictionary = wctx.dictionary;
103
122
  const stats = dictionary.getStats();
123
+
104
124
  const gfiBar = createProgressBar(gfi, 100, 15);
125
+
105
126
  // Determine Mental Mode (aligned with prompt.ts logic)
106
127
  let mentalMode = '';
107
128
  if (isZh) {
108
- if (gfi >= 70)
109
- mentalMode = '🚑 救赎模式 (HUMBLE_RECOVERY)';
110
- else if (gfi >= 40)
111
- mentalMode = '🤝 安抚模式 (CONCILIATORY)';
112
- else
113
- mentalMode = ' 高效模式 (EFFICIENT)';
114
- }
115
- else {
116
- if (gfi >= 70)
117
- mentalMode = '🚑 HUMBLE_RECOVERY';
118
- else if (gfi >= 40)
119
- mentalMode = '🤝 CONCILIATORY';
120
- else
121
- mentalMode = '⚡ EFFICIENT';
129
+ if (gfi >= 70) mentalMode = '🚑 救赎模式 (HUMBLE_RECOVERY)';
130
+ else if (gfi >= 40) mentalMode = '🤝 安抚模式 (CONCILIATORY)';
131
+ else mentalMode = '⚡ 高效模式 (EFFICIENT)';
132
+ } else {
133
+ if (gfi >= 70) mentalMode = '🚑 HUMBLE_RECOVERY';
134
+ else if (gfi >= 40) mentalMode = '🤝 CONCILIATORY';
135
+ else mentalMode = '⚡ EFFICIENT';
122
136
  }
137
+
123
138
  // Determine health status based on GFI
124
139
  let healthLabel = 'Healthy';
125
140
  let suggestionText = '';
141
+
126
142
  if (isZh) {
127
143
  if (gfi > 80) {
128
144
  healthLabel = '极度疲劳 🔴';
@@ -132,14 +148,10 @@ export function handlePainCommand(ctx) {
132
148
  2. 让 AI 调用 \`deep_reflect\` 工具进行深度反思。
133
149
  3. 如果当前上下文太乱,考虑使用 \`/clear\` 开启新会话。`;
134
150
  }
135
- else if (gfi > 50)
136
- healthLabel = '遇到阻力 🟡';
137
- else if (gfi > 20)
138
- healthLabel = '轻微受挫 🟢';
139
- else
140
- healthLabel = '运转良好 🟢';
141
- }
142
- else {
151
+ else if (gfi > 50) healthLabel = '遇到阻力 🟡';
152
+ else if (gfi > 20) healthLabel = '轻微受挫 🟢';
153
+ else healthLabel = '运转良好 🟢';
154
+ } else {
143
155
  if (gfi > 80) {
144
156
  healthLabel = 'Critical 🔴';
145
157
  suggestionText = `
@@ -148,13 +160,11 @@ export function handlePainCommand(ctx) {
148
160
  2. Ask the AI to use the \`deep_reflect\` tool.
149
161
  4. Consider starting a new session with \`/clear\`.`;
150
162
  }
151
- else if (gfi > 50)
152
- healthLabel = 'High Friction 🟡';
153
- else if (gfi > 20)
154
- healthLabel = 'Minor Issues 🟢';
155
- else
156
- healthLabel = 'Healthy 🟢';
163
+ else if (gfi > 50) healthLabel = 'High Friction 🟡';
164
+ else if (gfi > 20) healthLabel = 'Minor Issues 🟢';
165
+ else healthLabel = 'Healthy 🟢';
157
166
  }
167
+
158
168
  // Get session empathy stats for inline display
159
169
  const sessionEmpathy = sessionId ? wctx.eventLog.getEmpathyStats('session', sessionId) : null;
160
170
  let empathyInline = '';
@@ -163,6 +173,7 @@ export function handlePainCommand(ctx) {
163
173
  ? `\n🫀 **情绪事件 (当前会话)**: ${sessionEmpathy.totalEvents} 次 (${sessionEmpathy.totalPenaltyScore}分)`
164
174
  : `\n🫀 **Empathy Events (Session)**: ${sessionEmpathy.totalEvents} (${sessionEmpathy.totalPenaltyScore}pts)`;
165
175
  }
176
+
166
177
  if (isZh) {
167
178
  let text = `📊 **Principles Disciple - 系统健康度监控**\n`;
168
179
  text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
@@ -173,15 +184,14 @@ export function handlePainCommand(ctx) {
173
184
  text += `\n\n🧠 **痛苦进化词典**: 已吸收 ${stats.totalRules} 条规则\n`;
174
185
  text += ` ↳ 累计帮您拦截了 ${stats.totalHits} 次无效操作\n`;
175
186
  text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
187
+
176
188
  if (suggestionText) {
177
189
  text += suggestionText;
178
- }
179
- else {
190
+ } else {
180
191
  text += `*💡 提示: 使用 \`/pd-status empathy\` 查看详细情绪事件统计。*`;
181
192
  }
182
193
  return { text };
183
- }
184
- else {
194
+ } else {
185
195
  let text = `📊 **Principles Disciple - System Health Monitor**\n`;
186
196
  text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
187
197
  text += `💊 **Current Friction (GFI)**: ${gfiBar} ${gfi}/100\n`;
@@ -191,30 +201,35 @@ export function handlePainCommand(ctx) {
191
201
  text += `\n\n🧠 **Evolution Dictionary**: ${stats.totalRules} active rules\n`;
192
202
  text += ` ↳ Successfully blocked ${stats.totalHits} invalid operations\n`;
193
203
  text += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
204
+
194
205
  if (suggestionText) {
195
206
  text += suggestionText;
196
- }
197
- else {
207
+ } else {
198
208
  text += `*💡 Hint: Use \`/pd-status empathy\` to view detailed empathy event statistics.*`;
199
209
  }
200
210
  return { text };
201
211
  }
202
212
  }
213
+
203
214
  /**
204
215
  * Handle /pd-status empathy subcommand
205
216
  */
206
- function handleEmpathySubcommand(wctx, args, sessionId, isZh) {
217
+ function handleEmpathySubcommand(
218
+ wctx: WorkspaceContext,
219
+ args: string,
220
+ sessionId: string | undefined,
221
+ isZh: boolean
222
+ ): PluginCommandResult {
207
223
  // Parse range argument
208
- let range = 'today';
224
+ let range: 'today' | 'week' | 'session' = 'today';
209
225
  if (args.includes('--week') || args.includes('-w')) {
210
226
  range = 'week';
211
- }
212
- else if (args.includes('--session') || args.includes('-s')) {
227
+ } else if (args.includes('--session') || args.includes('-s')) {
213
228
  range = 'session';
214
- }
215
- else if (args.includes('--today') || args.includes('-t')) {
229
+ } else if (args.includes('--today') || args.includes('-t')) {
216
230
  range = 'today';
217
231
  }
232
+
218
233
  // Validate session range
219
234
  if (range === 'session' && !sessionId) {
220
235
  return {
@@ -223,16 +238,20 @@ function handleEmpathySubcommand(wctx, args, sessionId, isZh) {
223
238
  : `❌ Session not found. Use this command in a chat session.`
224
239
  };
225
240
  }
241
+
226
242
  const stats = wctx.eventLog.getEmpathyStats(range, sessionId);
227
243
  const rangeLabel = isZh
228
244
  ? { today: '今天', week: '最近 7 天', session: '当前会话' }[range]
229
245
  : { today: 'Today', week: 'Last 7 Days', session: 'Current Session' }[range];
246
+
230
247
  let text = formatEmpathyCard(stats, rangeLabel, isZh);
248
+
231
249
  // Add usage hint
232
250
  if (range === 'today') {
233
251
  text += isZh
234
252
  ? `\n\n*💡 使用 \`/pd-status empathy --week\` 查看周统计,\`--session\` 查看会话统计。*`
235
253
  : `\n\n*💡 Use \`/pd-status empathy --week\` for weekly stats, \`--session\` for session stats.*`;
236
254
  }
255
+
237
256
  return { text };
238
257
  }
@@ -0,0 +1,27 @@
1
+ import { EvolutionReducerImpl } from '../core/evolution-reducer.js';
2
+ import type { PluginCommandContext } from '../openclaw-sdk.js';
3
+
4
+ export function handlePrincipleRollbackCommand(ctx: PluginCommandContext): { text: string } {
5
+ const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
6
+ const argText = (ctx.args || '').trim();
7
+ const [principleId = '', ...reasonParts] = argText.split(/\s+/);
8
+ const reason = (reasonParts.join(' ') || 'manual rollback').trim();
9
+ const isZh = (ctx.config?.language as string)?.startsWith('zh');
10
+
11
+ if (!principleId) {
12
+ return { text: isZh ? '用法: /pd-principle-rollback <principleId> [reason]' : 'Usage: /pd-principle-rollback <principleId> [reason]' };
13
+ }
14
+
15
+ const reducer = new EvolutionReducerImpl({ workspaceDir });
16
+ const principle = reducer.getPrincipleById(principleId);
17
+ if (!principle) {
18
+ return { text: isZh ? `未找到原则: ${principleId}` : `Principle not found: ${principleId}` };
19
+ }
20
+
21
+ reducer.rollbackPrinciple(principleId, reason);
22
+ return {
23
+ text: isZh
24
+ ? `✅ 已回滚原则 ${principleId}\n原因: ${reason}`
25
+ : `✅ Rolled back principle ${principleId}\nReason: ${reason}`,
26
+ };
27
+ }
@@ -1,19 +1,24 @@
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
5
  /**
4
6
  * Handles the /pd-rollback command
5
- *
7
+ *
6
8
  * Usage:
7
9
  * /pd-rollback <event-id> - Rollback a specific empathy event by ID
8
10
  * /pd-rollback last - Rollback the last empathy event in current session
9
11
  */
10
- export function handleRollbackCommand(ctx) {
11
- const workspaceDir = ctx.config?.workspaceDir || process.cwd();
12
+ export function handleRollbackCommand(ctx: PluginCommandContext): PluginCommandResult {
13
+ const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
14
+
12
15
  const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
13
- const lang = ctx.config?.language || 'en';
16
+ const lang = (ctx.config?.language as string) || 'en';
14
17
  const isZh = lang === 'zh';
15
- const sessionId = ctx.sessionId;
18
+ const sessionId = (ctx as any).sessionId;
19
+
16
20
  const args = (ctx.args || '').trim();
21
+
17
22
  if (!args) {
18
23
  return {
19
24
  text: isZh
@@ -29,6 +34,7 @@ Usage:
29
34
  /pd-rollback last - Rollback the last event in current session`
30
35
  };
31
36
  }
37
+
32
38
  if (!sessionId) {
33
39
  return {
34
40
  text: isZh
@@ -36,8 +42,10 @@ Usage:
36
42
  : `❌ Session ID not found. Use this command in a chat session.`
37
43
  };
38
44
  }
39
- let eventId = null;
40
- let triggerMethod = 'user_command';
45
+
46
+ let eventId: string | null = null;
47
+ let triggerMethod: 'user_command' = 'user_command';
48
+
41
49
  if (args === 'last') {
42
50
  // Find the last empathy event in current session
43
51
  eventId = wctx.eventLog.getLastEmpathyEventId(sessionId);
@@ -48,13 +56,19 @@ Usage:
48
56
  : `❌ No empathy events found in current session to rollback.`
49
57
  };
50
58
  }
51
- }
52
- else {
59
+ } else {
53
60
  // Use the provided event ID
54
61
  eventId = args;
55
62
  }
63
+
56
64
  // Perform rollback
57
- const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(eventId, sessionId, isZh ? '用户手动回滚' : 'User manual rollback', 'user_command');
65
+ const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(
66
+ eventId,
67
+ sessionId,
68
+ isZh ? '用户手动回滚' : 'User manual rollback',
69
+ 'user_command'
70
+ );
71
+
58
72
  if (rolledBackScore === 0) {
59
73
  return {
60
74
  text: isZh
@@ -62,11 +76,13 @@ Usage:
62
76
  : `❌ Failed to rollback event "${eventId}". Event may not exist or was deduped.`
63
77
  };
64
78
  }
79
+
65
80
  // Reduce the GFI by the rolled back score
66
81
  resetFriction(sessionId, workspaceDir, {
67
82
  source: 'user_empathy',
68
83
  amount: rolledBackScore,
69
84
  });
85
+
70
86
  return {
71
87
  text: isZh
72
88
  ? `✅ 已回滚情绪事件
@@ -81,12 +97,18 @@ Usage:
81
97
  💡 Hint: Session friction has been reset.`
82
98
  };
83
99
  }
100
+
84
101
  /**
85
102
  * Handle natural language rollback request
86
103
  * Called from prompt hook when user says things like "撤销刚才的惩罚"
87
104
  */
88
- export function handleNaturalLanguageRollback(wctx, sessionId, reason) {
105
+ export function handleNaturalLanguageRollback(
106
+ wctx: WorkspaceContext,
107
+ sessionId: string | undefined,
108
+ reason: string
109
+ ): { success: boolean; score: number; message: string } {
89
110
  const isZh = wctx.config.get('language') === 'zh';
111
+
90
112
  if (!sessionId) {
91
113
  return {
92
114
  success: false,
@@ -94,6 +116,7 @@ export function handleNaturalLanguageRollback(wctx, sessionId, reason) {
94
116
  message: isZh ? '无法识别当前会话' : 'Session not found'
95
117
  };
96
118
  }
119
+
97
120
  const eventId = wctx.eventLog.getLastEmpathyEventId(sessionId);
98
121
  if (!eventId) {
99
122
  return {
@@ -102,7 +125,14 @@ export function handleNaturalLanguageRollback(wctx, sessionId, reason) {
102
125
  message: isZh ? '当前会话没有可回滚的情绪事件' : 'No empathy events to rollback'
103
126
  };
104
127
  }
105
- const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(eventId, sessionId, reason, 'natural_language');
128
+
129
+ const rolledBackScore = wctx.eventLog.rollbackEmpathyEvent(
130
+ eventId,
131
+ sessionId,
132
+ reason,
133
+ 'natural_language'
134
+ );
135
+
106
136
  if (rolledBackScore === 0) {
107
137
  return {
108
138
  success: false,
@@ -110,11 +140,13 @@ export function handleNaturalLanguageRollback(wctx, sessionId, reason) {
110
140
  message: isZh ? '回滚失败,事件可能不存在' : 'Rollback failed, event may not exist'
111
141
  };
112
142
  }
143
+
113
144
  // Reduce only the empathy slice instead of wiping the whole session GFI.
114
145
  resetFriction(sessionId, wctx.workspaceDir, {
115
146
  source: 'user_empathy',
116
147
  amount: rolledBackScore,
117
148
  });
149
+
118
150
  return {
119
151
  success: true,
120
152
  score: rolledBackScore,
@@ -0,0 +1,60 @@
1
+ import { WorkspaceContext } from '../core/workspace-context.js';
2
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
3
+
4
+ function isZh(ctx: PluginCommandContext): boolean {
5
+ return String(ctx.config?.language || 'en').startsWith('zh');
6
+ }
7
+
8
+ export function handleSamplesCommand(ctx: PluginCommandContext): PluginCommandResult {
9
+ const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
10
+ const zh = isZh(ctx);
11
+ const args = (ctx.args || '').trim();
12
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
13
+
14
+ if (args.startsWith('review ')) {
15
+ const [, decision = '', sampleId = '', ...noteParts] = args.split(/\s+/);
16
+ if (decision !== 'approve' && decision !== 'reject') {
17
+ return {
18
+ text: zh
19
+ ? '无效的审核动作。请使用 `review approve <sample-id> [note]` 或 `review reject <sample-id> [note]`。'
20
+ : 'Invalid review action. Use `review approve <sample-id> [note]` or `review reject <sample-id> [note]`.',
21
+ };
22
+ }
23
+ if (!sampleId) {
24
+ return {
25
+ text: zh
26
+ ? '缺少 sample-id。'
27
+ : 'Missing sample-id.',
28
+ };
29
+ }
30
+ const normalizedDecision = decision === 'approve' ? 'approved' : 'rejected';
31
+ const note = noteParts.join(' ').trim();
32
+ let record;
33
+ try {
34
+ record = wctx.trajectory.reviewCorrectionSample(sampleId, normalizedDecision, note);
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
+
49
+ const samples = wctx.trajectory.listCorrectionSamples('pending');
50
+ if (samples.length === 0) {
51
+ return { text: zh ? '当前没有待审核纠错样本。' : 'No pending correction samples.' };
52
+ }
53
+
54
+ const lines = samples.map((sample) => `- ${sample.sampleId} | session=${sample.sessionId} | score=${sample.qualityScore}`);
55
+ return {
56
+ text: zh
57
+ ? `待审核纠错样本:\n${lines.join('\n')}`
58
+ : `Pending correction samples:\n${lines.join('\n')}`,
59
+ };
60
+ }
@@ -0,0 +1,38 @@
1
+ import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
2
+ import { WorkspaceContext } from '../core/workspace-context.js';
3
+
4
+ export function handleInitStrategy(ctx: PluginCommandContext): PluginCommandResult {
5
+ const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
6
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
7
+
8
+ const okrDir = wctx.resolve('OKR_DIR').replace(workspaceDir, '').replace(/^\/+/, '');
9
+ const focusPath = wctx.resolve('CURRENT_FOCUS').replace(workspaceDir, '').replace(/^\/+/, '');
10
+ const userContextPath = wctx.resolve('USER_CONTEXT').replace(workspaceDir, '').replace(/^\/+/, '');
11
+
12
+ return {
13
+ text:
14
+ `🎯 **Strategy Initialization**\n\n` +
15
+ `The Agent will now conduct a deep interview to establish your project's vision and strategic OKRs.\n\n` +
16
+ `**Instructions for Agent:** Read \`${okrDir}/\` for existing context. ` +
17
+ `Generate \`${focusPath}\` with the top 1-3 strategic focus areas based on the user interview. ` +
18
+ `Then update \`${userContextPath}\` with key user preferences discovered.`,
19
+ };
20
+ }
21
+
22
+ export function handleManageOkr(ctx: PluginCommandContext): PluginCommandResult {
23
+ const workspaceDir = (ctx.config?.workspaceDir as string) || process.cwd();
24
+ const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
25
+
26
+ const focusPath = wctx.resolve('CURRENT_FOCUS').replace(workspaceDir, '').replace(/^\/+/, '');
27
+ const weekStatePath = wctx.resolve('WEEK_STATE').replace(workspaceDir, '').replace(/^\/+/, '');
28
+
29
+ return {
30
+ text:
31
+ `📊 **OKR Management**\n\n` +
32
+ `The Agent will analyze recent work and align sub-agent objectives.\n\n` +
33
+ `**Instructions for Agent:** Read \`${focusPath}\` and \`${weekStatePath}\`. ` +
34
+ `Compare them against recent session history. ` +
35
+ `Update OKRs as needed and output a brief alignment report. ` +
36
+ `If OKRs are stale (>7 days), prompt the user for a re-alignment conversation.`,
37
+ };
38
+ }