principles-disciple 1.8.1 → 1.8.2

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 (470) 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/zh/skills/pd-diagnostician/SKILL.md +70 -1
  138. package/templates/pain_settings.json +2 -1
  139. package/tests/README.md +120 -0
  140. package/tests/build-artifacts.test.ts +111 -0
  141. package/tests/commands/evolution-status.test.ts +222 -0
  142. package/tests/commands/evolver.test.ts +22 -0
  143. package/tests/commands/export.test.ts +78 -0
  144. package/tests/commands/nocturnal-review.test.ts +448 -0
  145. package/tests/commands/nocturnal-train.test.ts +97 -0
  146. package/tests/commands/pain.test.ts +108 -0
  147. package/tests/commands/samples.test.ts +65 -0
  148. package/tests/commands/strategy.test.ts +34 -0
  149. package/tests/commands/thinking-os.test.ts +88 -0
  150. package/tests/core/adaptive-thresholds.test.ts +261 -0
  151. package/tests/core/config-service.test.ts +89 -0
  152. package/tests/core/config.test.ts +90 -0
  153. package/tests/core/control-ui-db.test.ts +75 -0
  154. package/tests/core/core-template-guidance.test.ts +21 -0
  155. package/tests/core/detection-funnel.test.ts +63 -0
  156. package/tests/core/detection-service.test.ts +50 -0
  157. package/tests/core/dictionary-service.test.ts +116 -0
  158. package/tests/core/dictionary.test.ts +168 -0
  159. package/tests/core/empathy-keyword-matcher.test.ts +209 -0
  160. package/tests/core/event-log.test.ts +181 -0
  161. package/tests/core/evolution-e2e.test.ts +58 -0
  162. package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
  163. package/tests/core/evolution-engine.test.ts +562 -0
  164. package/tests/core/evolution-logger.test.ts +148 -0
  165. package/tests/core/evolution-migration.test.ts +50 -0
  166. package/tests/core/evolution-paths.test.ts +21 -0
  167. package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
  168. package/tests/core/evolution-reducer.test.ts +180 -0
  169. package/tests/core/evolution-types-loop.test.ts +48 -0
  170. package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
  171. package/tests/core/external-training-contract.test.ts +463 -0
  172. package/tests/core/focus-history.test.ts +682 -0
  173. package/tests/core/init-flatten.test.ts +69 -0
  174. package/tests/core/init-refactor.test.ts +87 -0
  175. package/tests/core/init-v1.3.test.ts +46 -0
  176. package/tests/core/init.test.ts +190 -0
  177. package/tests/core/local-worker-routing.test.ts +757 -0
  178. package/tests/core/migration.test.ts +84 -0
  179. package/tests/core/model-deployment-registry.test.ts +845 -0
  180. package/tests/core/model-training-registry.test.ts +889 -0
  181. package/tests/core/nocturnal-arbiter.test.ts +494 -0
  182. package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
  183. package/tests/core/nocturnal-compliance.test.ts +646 -0
  184. package/tests/core/nocturnal-dataset.test.ts +892 -0
  185. package/tests/core/nocturnal-executability.test.ts +357 -0
  186. package/tests/core/nocturnal-export.test.ts +462 -0
  187. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
  188. package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
  189. package/tests/core/nocturnal-trinity.test.ts +953 -0
  190. package/tests/core/pain.test.ts +33 -0
  191. package/tests/core/path-resolver.test.ts +57 -0
  192. package/tests/core/paths-refactor.test.ts +42 -0
  193. package/tests/core/phase7-rollout-integration.test.ts +477 -0
  194. package/tests/core/principle-training-state.test.ts +712 -0
  195. package/tests/core/profile.test.ts +56 -0
  196. package/tests/core/promotion-gate.test.ts +556 -0
  197. package/tests/core/risk-calculator.test.ts +168 -0
  198. package/tests/core/session-tracker.test.ts +191 -0
  199. package/tests/core/training-program.test.ts +472 -0
  200. package/tests/core/trajectory.test.ts +265 -0
  201. package/tests/core/workspace-context-factory.test.ts +18 -0
  202. package/tests/core/workspace-context.test.ts +134 -0
  203. package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
  204. package/tests/fixtures/production-compatibility.test.ts +147 -0
  205. package/tests/fixtures/production-mock-generator.ts +282 -0
  206. package/tests/hooks/bash-risk-integration.test.ts +137 -0
  207. package/tests/hooks/bash-risk.test.ts +81 -0
  208. package/tests/hooks/edit-verification.test.ts +678 -0
  209. package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
  210. package/tests/hooks/gate-edit-verification.test.ts +435 -0
  211. package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
  212. package/tests/hooks/gate.test.ts +271 -0
  213. package/tests/hooks/gfi-gate-unit.test.ts +422 -0
  214. package/tests/hooks/gfi-gate.test.ts +669 -0
  215. package/tests/hooks/lifecycle.test.ts +248 -0
  216. package/tests/hooks/llm.test.ts +308 -0
  217. package/tests/hooks/message-sanitize.test.ts +36 -0
  218. package/tests/hooks/pain.test.ts +141 -0
  219. package/tests/hooks/progressive-trust-gate.test.ts +277 -0
  220. package/tests/hooks/prompt.test.ts +1411 -0
  221. package/tests/hooks/subagent.test.ts +467 -0
  222. package/tests/hooks/thinking-gate.test.ts +313 -0
  223. package/tests/http/principles-console-route.test.ts +140 -0
  224. package/tests/hygiene-tracker.test.ts +77 -0
  225. package/tests/index.integration.test.ts +179 -0
  226. package/tests/index.shadow-routing.integration.test.ts +140 -0
  227. package/tests/index.test.ts +9 -0
  228. package/tests/integration/empathy-workflow-integration.test.ts +627 -0
  229. package/tests/service/control-ui-query-service.test.ts +121 -0
  230. package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
  231. package/tests/service/evolution-worker.test.ts +585 -0
  232. package/tests/service/nocturnal-runtime.test.ts +470 -0
  233. package/tests/service/nocturnal-service.test.ts +577 -0
  234. package/tests/service/nocturnal-target-selector.test.ts +615 -0
  235. package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
  236. package/tests/service/phase3-input-filter.test.ts +289 -0
  237. package/tests/service/runtime-summary-service.test.ts +919 -0
  238. package/tests/task-compliance.test.ts +166 -0
  239. package/tests/test-utils.ts +48 -0
  240. package/tests/tools/critique-prompt.test.ts +260 -0
  241. package/tests/tools/deep-reflect.test.ts +232 -0
  242. package/tests/tools/model-index.test.ts +246 -0
  243. package/tests/ui/app.test.tsx +114 -0
  244. package/tests/utils/file-lock.test.ts +407 -0
  245. package/tests/utils/hashing.test.ts +32 -0
  246. package/tests/utils/io.test.ts +39 -0
  247. package/tests/utils/nlp.test.ts +53 -0
  248. package/tests/utils/plugin-logger.test.ts +156 -0
  249. package/tsconfig.json +16 -0
  250. package/tsconfig.tsbuildinfo +1 -0
  251. package/ui/src/App.tsx +45 -0
  252. package/ui/src/api.ts +216 -0
  253. package/ui/src/charts.tsx +586 -0
  254. package/ui/src/components/ErrorState.tsx +6 -0
  255. package/ui/src/components/Loading.tsx +13 -0
  256. package/ui/src/components/ProtectedRoute.tsx +12 -0
  257. package/ui/src/components/Shell.tsx +91 -0
  258. package/ui/src/components/WorkspaceConfig.tsx +146 -0
  259. package/ui/src/components/index.ts +5 -0
  260. package/ui/src/context/auth.tsx +80 -0
  261. package/ui/src/context/theme.tsx +66 -0
  262. package/ui/src/hooks/useAutoRefresh.ts +39 -0
  263. package/ui/src/i18n/ui.ts +363 -0
  264. package/ui/src/main.tsx +16 -0
  265. package/ui/src/pages/EvolutionPage.tsx +352 -0
  266. package/ui/src/pages/FeedbackPage.tsx +140 -0
  267. package/ui/src/pages/GateMonitorPage.tsx +136 -0
  268. package/ui/src/pages/LoginPage.tsx +88 -0
  269. package/ui/src/pages/OverviewPage.tsx +238 -0
  270. package/ui/src/pages/SamplesPage.tsx +174 -0
  271. package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
  272. package/ui/src/styles.css +1661 -0
  273. package/ui/src/types.ts +368 -0
  274. package/ui/src/utils/format.ts +15 -0
  275. package/vitest.config.ts +23 -0
  276. package/dist/commands/capabilities.d.ts +0 -3
  277. package/dist/commands/capabilities.js +0 -73
  278. package/dist/commands/context.d.ts +0 -5
  279. package/dist/commands/evolution-status.d.ts +0 -4
  280. package/dist/commands/evolution-status.js +0 -117
  281. package/dist/commands/evolver.d.ts +0 -9
  282. package/dist/commands/evolver.js +0 -26
  283. package/dist/commands/export.d.ts +0 -2
  284. package/dist/commands/export.js +0 -98
  285. package/dist/commands/focus.d.ts +0 -14
  286. package/dist/commands/focus.js +0 -457
  287. package/dist/commands/nocturnal-review.d.ts +0 -24
  288. package/dist/commands/nocturnal-review.js +0 -265
  289. package/dist/commands/nocturnal-rollout.d.ts +0 -27
  290. package/dist/commands/nocturnal-rollout.js +0 -671
  291. package/dist/commands/nocturnal-train.d.ts +0 -25
  292. package/dist/commands/nocturnal-train.js +0 -919
  293. package/dist/commands/pain.d.ts +0 -5
  294. package/dist/commands/principle-rollback.d.ts +0 -4
  295. package/dist/commands/principle-rollback.js +0 -22
  296. package/dist/commands/rollback.d.ts +0 -19
  297. package/dist/commands/samples.d.ts +0 -2
  298. package/dist/commands/samples.js +0 -55
  299. package/dist/commands/strategy.d.ts +0 -3
  300. package/dist/commands/strategy.js +0 -29
  301. package/dist/commands/thinking-os.d.ts +0 -2
  302. package/dist/config/defaults/runtime.d.ts +0 -40
  303. package/dist/config/errors.d.ts +0 -84
  304. package/dist/config/errors.js +0 -94
  305. package/dist/config/index.js +0 -7
  306. package/dist/constants/diagnostician.d.ts +0 -12
  307. package/dist/constants/diagnostician.js +0 -56
  308. package/dist/constants/tools.d.ts +0 -17
  309. package/dist/constants/tools.js +0 -54
  310. package/dist/core/adaptive-thresholds.d.ts +0 -186
  311. package/dist/core/adaptive-thresholds.js +0 -300
  312. package/dist/core/config-service.d.ts +0 -15
  313. package/dist/core/config.d.ts +0 -129
  314. package/dist/core/control-ui-db.d.ts +0 -95
  315. package/dist/core/control-ui-db.js +0 -292
  316. package/dist/core/detection-funnel.d.ts +0 -33
  317. package/dist/core/detection-service.d.ts +0 -15
  318. package/dist/core/dictionary-service.d.ts +0 -15
  319. package/dist/core/dictionary.d.ts +0 -38
  320. package/dist/core/event-log.d.ts +0 -82
  321. package/dist/core/event-log.js +0 -463
  322. package/dist/core/evolution-engine.d.ts +0 -118
  323. package/dist/core/evolution-engine.js +0 -464
  324. package/dist/core/evolution-logger.d.ts +0 -137
  325. package/dist/core/evolution-logger.js +0 -256
  326. package/dist/core/evolution-migration.d.ts +0 -5
  327. package/dist/core/evolution-migration.js +0 -65
  328. package/dist/core/evolution-reducer.d.ts +0 -98
  329. package/dist/core/evolution-reducer.js +0 -465
  330. package/dist/core/evolution-types.d.ts +0 -287
  331. package/dist/core/evolution-types.js +0 -78
  332. package/dist/core/external-training-contract.d.ts +0 -276
  333. package/dist/core/external-training-contract.js +0 -269
  334. package/dist/core/focus-history.d.ts +0 -210
  335. package/dist/core/focus-history.js +0 -1185
  336. package/dist/core/hygiene/tracker.d.ts +0 -22
  337. package/dist/core/hygiene/tracker.js +0 -106
  338. package/dist/core/init.d.ts +0 -12
  339. package/dist/core/local-worker-routing.d.ts +0 -175
  340. package/dist/core/local-worker-routing.js +0 -525
  341. package/dist/core/migration.d.ts +0 -6
  342. package/dist/core/model-deployment-registry.d.ts +0 -218
  343. package/dist/core/model-deployment-registry.js +0 -503
  344. package/dist/core/model-training-registry.d.ts +0 -295
  345. package/dist/core/model-training-registry.js +0 -475
  346. package/dist/core/nocturnal-arbiter.d.ts +0 -159
  347. package/dist/core/nocturnal-arbiter.js +0 -534
  348. package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
  349. package/dist/core/nocturnal-candidate-scoring.js +0 -266
  350. package/dist/core/nocturnal-compliance.d.ts +0 -175
  351. package/dist/core/nocturnal-compliance.js +0 -824
  352. package/dist/core/nocturnal-dataset.d.ts +0 -224
  353. package/dist/core/nocturnal-dataset.js +0 -443
  354. package/dist/core/nocturnal-executability.d.ts +0 -85
  355. package/dist/core/nocturnal-executability.js +0 -331
  356. package/dist/core/nocturnal-export.d.ts +0 -124
  357. package/dist/core/nocturnal-export.js +0 -275
  358. package/dist/core/nocturnal-paths.d.ts +0 -124
  359. package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
  360. package/dist/core/nocturnal-trajectory-extractor.js +0 -307
  361. package/dist/core/nocturnal-trinity.d.ts +0 -311
  362. package/dist/core/nocturnal-trinity.js +0 -880
  363. package/dist/core/pain.d.ts +0 -4
  364. package/dist/core/pain.js +0 -70
  365. package/dist/core/path-resolver.d.ts +0 -46
  366. package/dist/core/paths.d.ts +0 -65
  367. package/dist/core/principle-training-state.d.ts +0 -121
  368. package/dist/core/principle-training-state.js +0 -321
  369. package/dist/core/profile.d.ts +0 -62
  370. package/dist/core/profile.js +0 -210
  371. package/dist/core/promotion-gate.d.ts +0 -238
  372. package/dist/core/promotion-gate.js +0 -529
  373. package/dist/core/risk-calculator.d.ts +0 -22
  374. package/dist/core/session-tracker.d.ts +0 -101
  375. package/dist/core/shadow-observation-registry.d.ts +0 -217
  376. package/dist/core/shadow-observation-registry.js +0 -308
  377. package/dist/core/system-logger.d.ts +0 -8
  378. package/dist/core/thinking-models.d.ts +0 -38
  379. package/dist/core/thinking-models.js +0 -170
  380. package/dist/core/training-program.d.ts +0 -233
  381. package/dist/core/training-program.js +0 -433
  382. package/dist/core/trajectory.d.ts +0 -411
  383. package/dist/core/trajectory.js +0 -1307
  384. package/dist/core/workspace-context.d.ts +0 -71
  385. package/dist/hooks/bash-risk.d.ts +0 -57
  386. package/dist/hooks/bash-risk.js +0 -137
  387. package/dist/hooks/edit-verification.d.ts +0 -62
  388. package/dist/hooks/edit-verification.js +0 -256
  389. package/dist/hooks/gate-block-helper.d.ts +0 -44
  390. package/dist/hooks/gate-block-helper.js +0 -119
  391. package/dist/hooks/gate.d.ts +0 -24
  392. package/dist/hooks/gate.js +0 -173
  393. package/dist/hooks/gfi-gate.d.ts +0 -40
  394. package/dist/hooks/gfi-gate.js +0 -113
  395. package/dist/hooks/lifecycle.d.ts +0 -5
  396. package/dist/hooks/lifecycle.js +0 -284
  397. package/dist/hooks/llm.d.ts +0 -13
  398. package/dist/hooks/message-sanitize.d.ts +0 -3
  399. package/dist/hooks/message-sanitize.js +0 -37
  400. package/dist/hooks/pain.d.ts +0 -5
  401. package/dist/hooks/pain.js +0 -301
  402. package/dist/hooks/progressive-trust-gate.d.ts +0 -52
  403. package/dist/hooks/progressive-trust-gate.js +0 -134
  404. package/dist/hooks/prompt.d.ts +0 -49
  405. package/dist/hooks/prompt.js +0 -905
  406. package/dist/hooks/subagent.d.ts +0 -10
  407. package/dist/hooks/subagent.js +0 -387
  408. package/dist/hooks/thinking-checkpoint.d.ts +0 -37
  409. package/dist/hooks/thinking-checkpoint.js +0 -51
  410. package/dist/hooks/trajectory-collector.d.ts +0 -32
  411. package/dist/hooks/trajectory-collector.js +0 -256
  412. package/dist/http/principles-console-route.d.ts +0 -9
  413. package/dist/http/principles-console-route.js +0 -681
  414. package/dist/i18n/commands.d.ts +0 -26
  415. package/dist/i18n/commands.js +0 -116
  416. package/dist/index.d.ts +0 -7
  417. package/dist/index.js +0 -581
  418. package/dist/service/central-database.d.ts +0 -104
  419. package/dist/service/central-database.js +0 -649
  420. package/dist/service/control-ui-query-service.d.ts +0 -221
  421. package/dist/service/control-ui-query-service.js +0 -543
  422. package/dist/service/empathy-observer-manager.d.ts +0 -88
  423. package/dist/service/empathy-observer-manager.js +0 -414
  424. package/dist/service/evolution-query-service.d.ts +0 -155
  425. package/dist/service/evolution-query-service.js +0 -258
  426. package/dist/service/evolution-worker.d.ts +0 -101
  427. package/dist/service/evolution-worker.js +0 -975
  428. package/dist/service/health-query-service.d.ts +0 -170
  429. package/dist/service/health-query-service.js +0 -662
  430. package/dist/service/nocturnal-runtime.d.ts +0 -183
  431. package/dist/service/nocturnal-service.d.ts +0 -163
  432. package/dist/service/nocturnal-service.js +0 -787
  433. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  434. package/dist/service/nocturnal-target-selector.js +0 -315
  435. package/dist/service/phase3-input-filter.d.ts +0 -73
  436. package/dist/service/phase3-input-filter.js +0 -172
  437. package/dist/service/runtime-summary-service.d.ts +0 -122
  438. package/dist/service/runtime-summary-service.js +0 -485
  439. package/dist/service/subagent-workflow/empathy-observer-workflow-manager.d.ts +0 -48
  440. package/dist/service/subagent-workflow/index.d.ts +0 -4
  441. package/dist/service/subagent-workflow/index.js +0 -3
  442. package/dist/service/subagent-workflow/runtime-direct-driver.d.ts +0 -77
  443. package/dist/service/subagent-workflow/runtime-direct-driver.js +0 -75
  444. package/dist/service/subagent-workflow/types.js +0 -11
  445. package/dist/service/subagent-workflow/workflow-store.d.ts +0 -26
  446. package/dist/service/subagent-workflow/workflow-store.js +0 -165
  447. package/dist/service/trajectory-service.d.ts +0 -2
  448. package/dist/service/trajectory-service.js +0 -15
  449. package/dist/tools/critique-prompt.d.ts +0 -14
  450. package/dist/tools/deep-reflect.d.ts +0 -39
  451. package/dist/tools/deep-reflect.js +0 -350
  452. package/dist/tools/model-index.d.ts +0 -9
  453. package/dist/types/event-types.d.ts +0 -306
  454. package/dist/types/event-types.js +0 -106
  455. package/dist/types/hygiene-types.d.ts +0 -20
  456. package/dist/types/hygiene-types.js +0 -12
  457. package/dist/types/runtime-summary.d.ts +0 -47
  458. package/dist/types/runtime-summary.js +0 -1
  459. package/dist/types.d.ts +0 -50
  460. package/dist/types.js +0 -22
  461. package/dist/utils/file-lock.d.ts +0 -71
  462. package/dist/utils/file-lock.js +0 -309
  463. package/dist/utils/glob-match.d.ts +0 -28
  464. package/dist/utils/hashing.d.ts +0 -9
  465. package/dist/utils/io.d.ts +0 -6
  466. package/dist/utils/io.js +0 -106
  467. package/dist/utils/nlp.d.ts +0 -9
  468. package/dist/utils/plugin-logger.d.ts +0 -39
  469. package/dist/utils/subagent-probe.d.ts +0 -34
  470. package/dist/utils/subagent-probe.js +0 -81
package/src/index.ts ADDED
@@ -0,0 +1,694 @@
1
+ import type {
2
+ OpenClawPluginApi,
3
+ PluginHookBeforePromptBuildEvent,
4
+ PluginHookAgentContext,
5
+ PluginHookBeforePromptBuildResult,
6
+ PluginHookBeforeToolCallEvent,
7
+ PluginHookToolContext,
8
+ PluginHookBeforeToolCallResult,
9
+ PluginHookAfterToolCallEvent,
10
+ PluginHookBeforeResetEvent,
11
+ PluginHookBeforeCompactionEvent,
12
+ PluginHookAfterCompactionEvent,
13
+ PluginHookSubagentEndedEvent,
14
+ PluginHookLlmOutputEvent,
15
+ PluginHookSubagentSpawningEvent,
16
+ PluginHookSubagentSpawningResult,
17
+ PluginHookSubagentContext,
18
+ PluginHookBeforeMessageWriteEvent,
19
+ PluginHookBeforeMessageWriteResult,
20
+ } from './openclaw-sdk.js';
21
+ import * as crypto from 'crypto';
22
+ import type { WorkerProfile } from './core/model-deployment-registry.js';
23
+ import { classifyTask } from './core/local-worker-routing.js';
24
+ import { completeShadowObservation, recordShadowRouting } from './core/shadow-observation-registry.js';
25
+ import { getCommandDescription } from './i18n/commands.js';
26
+ import { WorkspaceContext } from './core/workspace-context.js';
27
+ import { handleBeforePromptBuild } from './hooks/prompt.js';
28
+ import { handleBeforeToolCall } from './hooks/gate.js';
29
+ import { handleAfterToolCall } from './hooks/pain.js';
30
+ import { handleBeforeReset, handleBeforeCompaction, handleAfterCompaction } from './hooks/lifecycle.js';
31
+ import { handleLlmOutput } from './hooks/llm.js';
32
+ import { handleSubagentEnded } from './hooks/subagent.js';
33
+ import { handleBeforeMessageWrite } from './hooks/message-sanitize.js';
34
+ import * as TrajectoryCollector from './hooks/trajectory-collector.js';
35
+ import { handleInitStrategy, handleManageOkr } from './commands/strategy.js';
36
+ import { handleBootstrapTools, handleResearchTools } from './commands/capabilities.js';
37
+ import { handleThinkingOs } from './commands/thinking-os.js';
38
+ import { handlePainCommand } from './commands/pain.js';
39
+ import { handleContextCommand } from './commands/context.js';
40
+ import { handleFocusCommand } from './commands/focus.js';
41
+ import { handleRollbackCommand } from './commands/rollback.js';
42
+ import { handleEvolutionStatusCommand } from './commands/evolution-status.js';
43
+ import { handlePrincipleRollbackCommand } from './commands/principle-rollback.js';
44
+ import { handleExportCommand } from './commands/export.js';
45
+ import { handleSamplesCommand } from './commands/samples.js';
46
+ import { handleNocturnalReviewCommand } from './commands/nocturnal-review.js';
47
+ import { handleNocturnalTrainCommand } from './commands/nocturnal-train.js';
48
+ import { handleNocturnalRolloutCommand } from './commands/nocturnal-rollout.js';
49
+ import { handleWorkflowDebugCommand } from './commands/workflow-debug.js';
50
+ import { EvolutionWorkerService } from './service/evolution-worker.js';
51
+ import { TrajectoryService } from './service/trajectory-service.js';
52
+ import { ensureWorkspaceTemplates } from './core/init.js';
53
+ import { migrateDirectoryStructure } from './core/migration.js';
54
+ import { SystemLogger } from './core/system-logger.js';
55
+ import { createDeepReflectTool } from './tools/deep-reflect.js';
56
+ import { PathResolver, resolveWorkspaceDirFromApi } from './core/path-resolver.js';
57
+ import { createPrinciplesConsoleRoute } from './http/principles-console-route.js';
58
+
59
+ // Track initialization to avoid repeated calls
60
+ let workspaceInitialized = false;
61
+
62
+ // Map from childSessionKey → shadowObservationId
63
+ // Used to complete shadow observations when subagent ends
64
+ const pendingShadowObservations = new Map<string, string>();
65
+
66
+ // PD local worker profiles that are managed by the shadow routing policy
67
+ const PD_LOCAL_PROFILES = new Set<WorkerProfile>(['local-reader', 'local-editor']);
68
+
69
+ function computeRuntimeShadowTaskFingerprint(event: PluginHookSubagentSpawningEvent): string {
70
+ const payload = {
71
+ childSessionKey: event.childSessionKey,
72
+ agentId: event.agentId,
73
+ label: event.label ?? '',
74
+ mode: event.mode,
75
+ threadRequested: event.threadRequested,
76
+ requesterChannel: event.requester?.channel ?? '',
77
+ requesterThreadId: event.requester?.threadId ?? '',
78
+ };
79
+ return crypto.createHash('sha256').update(JSON.stringify(payload)).digest('hex').slice(0, 16);
80
+ }
81
+
82
+ const plugin = {
83
+ name: "Principles Disciple",
84
+ description: "Evolutionary programming agent framework with strategic guardrails and reflection loops.",
85
+
86
+ register(api: OpenClawPluginApi) {
87
+ api.logger.info(`Principles Disciple Plugin registered. (Path: ${api.rootDir ?? '(unknown)'})`);
88
+ PathResolver.setExtensionRoot(api.rootDir ?? '.');
89
+ api.registerHttpRoute(createPrinciplesConsoleRoute(api));
90
+
91
+ const language = (api.pluginConfig?.language as string) || 'en';
92
+
93
+ // ── Hook: Prompt Building ──
94
+ api.on(
95
+ 'before_prompt_build',
96
+ async (event: PluginHookBeforePromptBuildEvent, ctx: PluginHookAgentContext): Promise<PluginHookBeforePromptBuildResult | void> => {
97
+ try {
98
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
99
+ if (!workspaceInitialized && workspaceDir) {
100
+ migrateDirectoryStructure(api, workspaceDir);
101
+ ensureWorkspaceTemplates(api, workspaceDir, language);
102
+ SystemLogger.log(workspaceDir, 'SYSTEM_BOOT', `Principles Disciple online. Language: ${language}`);
103
+ workspaceInitialized = true;
104
+ }
105
+ const result = await handleBeforePromptBuild(event, { ...ctx, api, workspaceDir });
106
+
107
+ // Record success
108
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
109
+ hook: 'before_prompt_build',
110
+ sessionId: ctx.sessionId
111
+ });
112
+
113
+ return result;
114
+ } catch (err) {
115
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
116
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
117
+ hook: 'before_prompt_build',
118
+ sessionId: ctx.sessionId,
119
+ error: String(err)
120
+ });
121
+ api.logger.error(`[PD] Error in before_prompt_build: ${String(err)}`);
122
+ }
123
+ }
124
+ );
125
+
126
+ // ── Hook: Security Gate ──
127
+ api.on(
128
+ 'before_tool_call',
129
+ (event: PluginHookBeforeToolCallEvent, ctx: PluginHookToolContext): PluginHookBeforeToolCallResult | void => {
130
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
131
+ try {
132
+ const pluginConfig = api.pluginConfig ?? {};
133
+ const logger = api.logger;
134
+ const result = handleBeforeToolCall(event, { ...ctx, workspaceDir, pluginConfig, logger });
135
+
136
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
137
+ hook: 'before_tool_call'
138
+ });
139
+
140
+ return result;
141
+ } catch (err) {
142
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
143
+ hook: 'before_tool_call',
144
+ error: String(err)
145
+ });
146
+ api.logger.error(`[PD] Error in before_tool_call: ${String(err)}`);
147
+ }
148
+ }
149
+ );
150
+
151
+ // ── Hook: Pain & Trust ──
152
+ api.on(
153
+ 'after_tool_call',
154
+ (event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void => {
155
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
156
+ try {
157
+ const pluginConfig = api.pluginConfig ?? {};
158
+ // Pass api separately to handleAfterToolCall to maintain type safety
159
+ handleAfterToolCall(event, { ...ctx, workspaceDir, pluginConfig }, api);
160
+
161
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
162
+ hook: 'after_tool_call'
163
+ });
164
+ } catch (err) {
165
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
166
+ hook: 'after_tool_call',
167
+ error: String(err)
168
+ });
169
+ api.logger.error(`[PD:EmpathyObserver] Error in after_tool_call: ${String(err)}`);
170
+ }
171
+ }
172
+ );
173
+
174
+ // ── Hook: LLM Analysis ──
175
+ api.on(
176
+ 'llm_output',
177
+ (event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void => {
178
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
179
+ try {
180
+ handleLlmOutput(event, { ...ctx, workspaceDir });
181
+
182
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
183
+ hook: 'llm_output',
184
+ sessionId: ctx.sessionId
185
+ });
186
+ } catch (err) {
187
+ WorkspaceContext.fromHookContext({ workspaceDir }).eventLog.recordHookExecution({
188
+ hook: 'llm_output',
189
+ sessionId: ctx.sessionId,
190
+ error: String(err)
191
+ });
192
+ api.logger.error(`[PD] Error in llm_output: ${String(err)}`);
193
+ }
194
+ }
195
+ );
196
+
197
+ // ── Hook: Message Sanitization ──
198
+ api.on(
199
+ 'before_message_write',
200
+ (event: PluginHookBeforeMessageWriteEvent): PluginHookBeforeMessageWriteResult | void => {
201
+ try {
202
+ return handleBeforeMessageWrite(event);
203
+ } catch (err) {
204
+ api.logger.error(`[PD] Error in before_message_write: ${String(err)}`);
205
+ }
206
+ }
207
+ );
208
+
209
+ // ── Hook: Trajectory Collection (Behavior Evolution Phase 0) ──
210
+ // Note: after_tool_call and llm_output are safe to collect
211
+ // before_message_write conflicts with message-sanitize, skipping for now
212
+ api.on(
213
+ 'after_tool_call',
214
+ (event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext): void => {
215
+ try {
216
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
217
+ TrajectoryCollector.handleAfterToolCall(event, { ...ctx, workspaceDir });
218
+ } catch (err) {
219
+ // Non-critical: don't log, just skip
220
+ }
221
+ }
222
+ );
223
+
224
+ api.on(
225
+ 'llm_output',
226
+ (event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext): void => {
227
+ try {
228
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
229
+ TrajectoryCollector.handleLlmOutput(event, { ...ctx, workspaceDir });
230
+ } catch (err) {
231
+ // Non-critical: don't log, just skip
232
+ }
233
+ }
234
+ );
235
+
236
+ // ── Hook: Subagent Loop Closure ──
237
+ api.on(
238
+ 'subagent_spawning',
239
+ (event: PluginHookSubagentSpawningEvent, ctx: PluginHookSubagentContext): void | PluginHookSubagentSpawningResult => {
240
+ try {
241
+ // Resolve workspace via official API, falling back to PathResolver
242
+ const workspaceDir = resolveWorkspaceDirFromApi(api, event.agentId) || '.';
243
+ api.logger?.debug?.(`[PD] workspaceDir resolved for subagent_spawning: ${workspaceDir}`);
244
+ const { agentId, childSessionKey } = event;
245
+ // Only handle PD local worker profiles
246
+ if (!PD_LOCAL_PROFILES.has(agentId as WorkerProfile)) {
247
+ return { status: 'ok' };
248
+ }
249
+ // Use the real runtime hook to record shadow evidence. We still consult the
250
+ // routing/deployment state here, but the observation itself must originate
251
+ // from actual subagent execution rather than an operator command path.
252
+ const routingInput = { targetProfile: agentId as WorkerProfile };
253
+ const decision = classifyTask(routingInput, workspaceDir);
254
+ const shouldRecordShadow =
255
+ decision.activeCheckpointState === 'shadow_ready' &&
256
+ !!decision.activeCheckpointId &&
257
+ decision.deploymentCheck.routingEnabled &&
258
+ decision.deploymentCheck.checkpointDeployable;
259
+
260
+ if (shouldRecordShadow) {
261
+ const observation = recordShadowRouting(workspaceDir, {
262
+ checkpointId: decision.activeCheckpointId!,
263
+ workerProfile: agentId as WorkerProfile,
264
+ taskFingerprint: computeRuntimeShadowTaskFingerprint(event),
265
+ });
266
+ pendingShadowObservations.set(childSessionKey, observation.observationId);
267
+ }
268
+ return { status: 'ok' };
269
+ } catch (err) {
270
+ api.logger.error(`[PD] Error in subagent_spawning shadow routing: ${String(err)}`);
271
+ return { status: 'ok' }; // Don't block spawn on shadow observation errors
272
+ }
273
+ }
274
+ );
275
+
276
+ api.on(
277
+ 'subagent_ended',
278
+ (event: PluginHookSubagentEndedEvent, ctx: PluginHookSubagentContext): void => {
279
+ try {
280
+ // Resolve workspace via official API, falling back to PathResolver
281
+ const workspaceDir = resolveWorkspaceDirFromApi(api, undefined) || '.';
282
+ api.logger?.debug?.(`[PD] workspaceDir resolved for subagent_ended: ${workspaceDir}`);
283
+ // Complete any pending shadow observation for this subagent session
284
+ const shadowObsId = pendingShadowObservations.get(event.targetSessionKey);
285
+ if (shadowObsId && workspaceDir) {
286
+ try {
287
+ const outcome = event.outcome === 'ok'
288
+ ? 'accepted'
289
+ : event.outcome === 'error'
290
+ ? 'rejected'
291
+ : 'escalated';
292
+ completeShadowObservation(workspaceDir, {
293
+ observationId: shadowObsId,
294
+ outcome,
295
+ failureSignals: event.outcome === 'error' ? { threwException: true, timedOut: false, invalidOutput: false, profileRejected: false, extra: {} } : undefined,
296
+ });
297
+ pendingShadowObservations.delete(event.targetSessionKey);
298
+ } catch (err) {
299
+ api.logger.error(`[PD] Failed to complete shadow observation: ${String(err)}`);
300
+ }
301
+ }
302
+ handleSubagentEnded(event, { ...ctx, workspaceDir, api });
303
+ } catch (err) {
304
+ api.logger.error(`[PD] Error in subagent_ended: ${String(err)}`);
305
+ }
306
+ }
307
+ );
308
+
309
+ // ── Hook: Lifecycle ──
310
+ api.on('before_reset', (event: PluginHookBeforeResetEvent, ctx: PluginHookAgentContext) => {
311
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
312
+ return handleBeforeReset(event, { ...ctx, workspaceDir });
313
+ });
314
+
315
+ api.on('before_compaction', (event: PluginHookBeforeCompactionEvent, ctx: PluginHookAgentContext) => {
316
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
317
+ return handleBeforeCompaction(event, { ...ctx, workspaceDir });
318
+ });
319
+
320
+ api.on('after_compaction', (event: PluginHookAfterCompactionEvent, ctx: PluginHookAgentContext) => {
321
+ const workspaceDir = ctx.workspaceDir || api.resolvePath('.');
322
+ return handleAfterCompaction(event, { ...ctx, workspaceDir });
323
+ });
324
+
325
+ // ── Service: Background Evolution Worker ──
326
+ try {
327
+ EvolutionWorkerService.api = api;
328
+ api.registerService(EvolutionWorkerService);
329
+ api.registerService(TrajectoryService);
330
+ } catch (err) {
331
+ api.logger.error(`[PD] Failed to register EvolutionWorkerService: ${String(err)}`);
332
+ }
333
+
334
+ // ── Slash Commands ──
335
+ api.registerCommand({
336
+ name: "pd-init",
337
+ description: getCommandDescription('pd-init', language),
338
+ handler: (ctx) => handleInitStrategy(ctx)
339
+ });
340
+
341
+ api.registerCommand({
342
+ name: "pd-okr",
343
+ description: getCommandDescription('pd-okr', language),
344
+ handler: (ctx) => handleManageOkr(ctx)
345
+ });
346
+
347
+ api.registerCommand({
348
+ name: "pd-bootstrap",
349
+ description: getCommandDescription('pd-bootstrap', language),
350
+ handler: (ctx) => handleBootstrapTools(ctx)
351
+ });
352
+
353
+ api.registerCommand({
354
+ name: "pd-research",
355
+ description: getCommandDescription('pd-research', language),
356
+ handler: (ctx) => handleResearchTools(ctx)
357
+ });
358
+
359
+ api.registerCommand({
360
+ name: "pd-thinking",
361
+ description: getCommandDescription('pd-thinking', language),
362
+ acceptsArgs: true,
363
+ handler: (ctx) => handleThinkingOs(ctx)
364
+ });
365
+
366
+ api.registerCommand({
367
+ name: "pd-daily",
368
+ description: getCommandDescription('pd-daily', language),
369
+ handler: (_ctx) => {
370
+ return { text: language === 'zh'
371
+ ? "请执行 pd-daily 技能来配置并发送进化日报。系统将引导你完成配置流程,包括发送时间、渠道和报告风格偏好。"
372
+ : "Please execute the pd-daily skill to configure and send your daily evolution report. The system will guide you through the configuration process." };
373
+ }
374
+ });
375
+
376
+ api.registerCommand({
377
+ name: "pd-grooming",
378
+ description: getCommandDescription('pd-grooming', language),
379
+ handler: (_ctx) => {
380
+ return { text: language === 'zh'
381
+ ? "请执行 pd-grooming 技能来执行大扫除。例如输入: '执行 pd-grooming 技能'"
382
+ : "Please execute the pd-grooming skill to clean up. For example: 'Execute pd-grooming skill'" };
383
+ }
384
+ });
385
+
386
+ api.registerCommand({
387
+ name: "pd-help",
388
+ description: getCommandDescription('pd-help', language),
389
+ handler: (_ctx) => {
390
+ if (language === 'zh') {
391
+ return { text: `
392
+ 📖 **Principles Disciple 命令大全**
393
+
394
+ ## 🚀 快速开始
395
+ | 命令 | 用途 | 使用时机 |
396
+ |------|------|----------|
397
+ | \`/pd-init\` | 初始化工作区 | 新项目开始时 |
398
+ | \`/pd-bootstrap\` | 环境工具扫描 | 缺少开发工具时 |
399
+
400
+ ## 📊 状态查询
401
+ | 命令 | 用途 | 使用时机 |
402
+ |------|------|----------|
403
+ | \`/pd-status\` | 查看进化状态 | 想了解当前 GFI 和 Pain 情况 |
404
+ | \`/pd-focus\` | 焦点文件管理 | 查看/压缩/回滚历史版本 |
405
+ | \`/pd-export\` | 导出数据 | 导出 analytics/corrections/orpo |
406
+ | \`/pd-samples\` | 审核纠错样本 | 查看待审核样本并批准/拒绝 |
407
+ | \`/pd-nocturnal-review\` | 审核 nocturnal 样本 | 审核 nocturnal 训练样本并导出 ORPO |
408
+
409
+ ## ⚙️ 配置管理
410
+ | 命令 | 用途 | 使用时机 |
411
+ |------|------|----------|
412
+ | \`/pd-context\` | 控制上下文注入 | 想减少/增加注入内容 |
413
+ | \`/pd-okr\` | OKR 目标管理 | 设置战略目标 |
414
+
415
+ ## 🧠 进化相关
416
+ | 命令 | 用途 | 使用时机 |
417
+ |------|------|----------|
418
+ | \`/pd-thinking\` | 思维模型管理 | 更新 Thinking OS |
419
+ | \`/pd-daily\` | 进化日报 | 每日回顾时 |
420
+ | \`/pd-grooming\` | 工作区大扫除 | 定期清理 |
421
+
422
+ ## 💡 常用命令示例
423
+
424
+ **减少 token 消耗:**
425
+ \`\`\`
426
+ /pd-context minimal
427
+ \`\`\`
428
+
429
+ **恢复完整上下文:**
430
+ \`\`\`
431
+ /pd-context full
432
+ \`\`\`
433
+
434
+ **查看当前配置:**
435
+ \`\`\`
436
+ /pd-context status
437
+ \`\`\`
438
+
439
+ 🔍 输入任意命令后加 \`help\` 可查看详细帮助,如 \`/pd-context help\`
440
+ `.trim() };
441
+ } else {
442
+ return { text: `
443
+ 📖 **Principles Disciple Command Reference**
444
+
445
+ ## 🚀 Quick Start
446
+ | Command | Purpose | When to Use |
447
+ |---------|---------|-------------|
448
+ | \`/pd-init\` | Initialize workspace | Starting a new project |
449
+ | \`/pd-bootstrap\` | Scan environment tools | Missing dev tools |
450
+
451
+ ## 📊 Status Query
452
+ | Command | Purpose | When to Use |
453
+ |---------|---------|-------------|
454
+ | \`/pd-status\` | View evolution status | Check GFI and Pain status |
455
+ | \`/pd-focus\` | Focus file management | View/compress/rollback history |
456
+ | \`/pd-export\` | Export data | Export analytics/corrections/orpo |
457
+ | \`/pd-samples\` | Review correction samples | Review pending correction samples |
458
+ | \`/pd-nocturnal-review\` | Review nocturnal samples | Review nocturnal training samples and export ORPO |
459
+
460
+ ## ⚙️ Configuration
461
+ | Command | Purpose | When to Use |
462
+ |---------|---------|-------------|
463
+ | \`/pd-context\` | Control context injection | Reduce/increase injected content |
464
+ | \`/pd-okr\` | OKR goal management | Set strategic goals |
465
+
466
+ ## 🧠 Evolution
467
+ | Command | Purpose | When to Use |
468
+ |---------|---------|-------------|
469
+ | \`/pd-thinking\` | Mental model management | Update Thinking OS |
470
+ | \`/pd-daily\` | Evolution report | Daily review |
471
+ | \`/pd-grooming\` | Workspace cleanup | Periodic cleanup |
472
+
473
+ ## 💡 Common Examples
474
+
475
+ **Reduce token usage:**
476
+ \`\`\`
477
+ /pd-context minimal
478
+ \`\`\`
479
+
480
+ **Restore full context:**
481
+ \`\`\`
482
+ /pd-context full
483
+ \`\`\`
484
+
485
+ **View current config:**
486
+ \`\`\`
487
+ /pd-context status
488
+ \`\`\`
489
+
490
+ 🔍 Add \`help\` after any command for details, e.g., \`/pd-context help\`
491
+ `.trim() };
492
+ }
493
+ }
494
+ });
495
+
496
+ api.registerCommand({
497
+ name: "pd-status",
498
+ description: getCommandDescription('pd-status', language),
499
+ acceptsArgs: true,
500
+ handler: (ctx) => {
501
+ try {
502
+ const workspaceDir = api.resolvePath('.');
503
+ // Ensure workspaceDir is in config for handlePainCommand
504
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
505
+ return handlePainCommand(ctx);
506
+ } catch (err) {
507
+ api.logger.error(`[PD] Command /pd-status failed: ${String(err)}`);
508
+ return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
509
+ }
510
+ }
511
+ });
512
+
513
+ api.registerCommand({
514
+ name: "pd-context",
515
+ description: getCommandDescription('pd-context', language),
516
+ acceptsArgs: true,
517
+ handler: (ctx) => {
518
+ try {
519
+ const workspaceDir = api.resolvePath('.');
520
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
521
+ return handleContextCommand(ctx);
522
+ } catch (err) {
523
+ api.logger.error(`[PD] Command /pd-context failed: ${String(err)}`);
524
+ return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
525
+ }
526
+ }
527
+ });
528
+
529
+ api.registerCommand({
530
+ name: "pd-focus",
531
+ description: getCommandDescription('pd-focus', language),
532
+ acceptsArgs: true,
533
+ handler: (ctx) => {
534
+ try {
535
+ const workspaceDir = api.resolvePath('.');
536
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
537
+ return handleFocusCommand(ctx, api);
538
+ } catch (err) {
539
+ api.logger.error(`[PD] Command /pd-focus failed: ${String(err)}`);
540
+ return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
541
+ }
542
+ }
543
+ });
544
+
545
+
546
+ api.registerCommand({
547
+ name: "pd-evolution-status",
548
+ description: getCommandDescription('pd-evolution-status', language),
549
+ handler: (ctx) => {
550
+ try {
551
+ const workspaceDir = api.resolvePath('.');
552
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
553
+ return handleEvolutionStatusCommand(ctx);
554
+ } catch (err) {
555
+ api.logger.error(`[PD] Command /pd-evolution-status failed: ${String(err)}`);
556
+ return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
557
+ }
558
+ }
559
+ });
560
+
561
+ api.registerCommand({
562
+ name: "pd-principle-rollback",
563
+ description: getCommandDescription('pd-principle-rollback', language),
564
+ acceptsArgs: true,
565
+ handler: (ctx) => {
566
+ try {
567
+ const workspaceDir = api.resolvePath('.');
568
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
569
+ return handlePrincipleRollbackCommand(ctx);
570
+ } catch (err) {
571
+ api.logger.error(`[PD] Command /pd-principle-rollback failed: ${String(err)}`);
572
+ return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
573
+ }
574
+ }
575
+ });
576
+
577
+ api.registerCommand({
578
+ name: "pd-rollback",
579
+ description: getCommandDescription('pd-rollback', language),
580
+ acceptsArgs: true,
581
+ handler: (ctx) => {
582
+ try {
583
+ const workspaceDir = api.resolvePath('.');
584
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
585
+ return handleRollbackCommand(ctx);
586
+ } catch (err) {
587
+ api.logger.error(`[PD] Command /pd-rollback failed: ${String(err)}`);
588
+ return { text: language === 'zh' ? "命令执行失败,请检查日志。" : "Command failed. Check logs." };
589
+ }
590
+ }
591
+ });
592
+
593
+ // ── Tools ──
594
+ api.registerCommand({
595
+ name: "pd-export",
596
+ description: getCommandDescription('pd-export', language),
597
+ acceptsArgs: true,
598
+ handler: (ctx) => {
599
+ try {
600
+ const workspaceDir = api.resolvePath('.');
601
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
602
+ return handleExportCommand(ctx);
603
+ } catch (err) {
604
+ api.logger.error(`[PD] Command /pd-export failed: ${String(err)}`);
605
+ return { text: language === 'zh' ? "导出失败,请检查日志。" : "Export failed. Check logs." };
606
+ }
607
+ }
608
+ });
609
+
610
+ api.registerCommand({
611
+ name: "pd-samples",
612
+ description: getCommandDescription('pd-samples', language),
613
+ acceptsArgs: true,
614
+ handler: (ctx) => {
615
+ try {
616
+ const workspaceDir = api.resolvePath('.');
617
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
618
+ return handleSamplesCommand(ctx);
619
+ } catch (err) {
620
+ api.logger.error(`[PD] Command /pd-samples failed: ${String(err)}`);
621
+ return { text: language === 'zh' ? "样本命令执行失败,请检查日志。" : "Samples command failed. Check logs." };
622
+ }
623
+ }
624
+ });
625
+
626
+ api.registerCommand({
627
+ name: "pd-nocturnal-review",
628
+ description: 'Review nocturnal dataset samples [list|show|approve|reject|set-family|stats]',
629
+ acceptsArgs: true,
630
+ handler: (ctx) => {
631
+ try {
632
+ const workspaceDir = api.resolvePath('.');
633
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
634
+ return handleNocturnalReviewCommand(ctx);
635
+ } catch (err) {
636
+ api.logger.error(`[PD] Command /pd-nocturnal-review failed: ${String(err)}`);
637
+ return { text: language === 'zh' ? "Nocturnal review 命令执行失败,请检查日志。" : "Nocturnal review command failed. Check logs." };
638
+ }
639
+ }
640
+ });
641
+
642
+ api.registerCommand({
643
+ name: "nocturnal-train",
644
+ description: 'Nocturnal training operations [create-experiment|show-experiment|import-result|attach-eval|show-lineage|list-experiments|list-checkpoints|stats]',
645
+ acceptsArgs: true,
646
+ handler: (ctx) => {
647
+ try {
648
+ const workspaceDir = api.resolvePath('.');
649
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
650
+ return handleNocturnalTrainCommand(ctx);
651
+ } catch (err) {
652
+ api.logger.error(`[PD] Command /nocturnal-train failed: ${String(err)}`);
653
+ return { text: language === 'zh' ? "Nocturnal train 命令执行失败,请检查日志。" : "Nocturnal train command failed. Check logs." };
654
+ }
655
+ }
656
+ });
657
+
658
+ api.registerCommand({
659
+ name: "nocturnal-rollout",
660
+ description: 'Nocturnal rollout and promotion [evaluate-promotion|advance-promotion|bind|enable-routing|disable-routing|rollback|status|show-promotion]',
661
+ acceptsArgs: true,
662
+ handler: (ctx) => {
663
+ try {
664
+ const workspaceDir = api.resolvePath('.');
665
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
666
+ return handleNocturnalRolloutCommand(ctx);
667
+ } catch (err) {
668
+ api.logger.error(`[PD] Command /nocturnal-rollout failed: ${String(err)}`);
669
+ return { text: language === 'zh' ? "Nocturnal rollout 命令执行失败,请检查日志。" : "Nocturnal rollout command failed. Check logs." };
670
+ }
671
+ }
672
+ });
673
+
674
+ api.registerCommand({
675
+ name: "pd-workflow-debug",
676
+ description: 'Debug helper workflow state and events [workflowId]',
677
+ acceptsArgs: true,
678
+ handler: (ctx) => {
679
+ try {
680
+ const workspaceDir = api.resolvePath('.');
681
+ if (ctx.config) ctx.config.workspaceDir = workspaceDir;
682
+ return handleWorkflowDebugCommand(ctx);
683
+ } catch (err) {
684
+ api.logger.error(`[PD] Command /pd-workflow-debug failed: ${String(err)}`);
685
+ return { text: `Workflow debug command failed: ${String(err)}` };
686
+ }
687
+ }
688
+ });
689
+
690
+ api.registerTool(createDeepReflectTool(api));
691
+ }
692
+ };
693
+
694
+ export default plugin;