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,98 +0,0 @@
1
- import { WorkspaceContext } from '../core/workspace-context.js';
2
- import { exportORPOSamples, listExports } from '../core/nocturnal-export.js';
3
- function isZh(ctx) {
4
- return String(ctx.config?.language || 'en').startsWith('zh');
5
- }
6
- export function handleExportCommand(ctx) {
7
- const workspaceDir = ctx.config?.workspaceDir || process.cwd();
8
- const zh = isZh(ctx);
9
- const args = (ctx.args || '').trim();
10
- const parts = args.split(/\s+/).filter(Boolean);
11
- const [subcommand = 'corrections'] = parts;
12
- const wctx = WorkspaceContext.fromHookContext({ workspaceDir, ...ctx.config });
13
- try {
14
- if (subcommand === 'orpo') {
15
- // Nocturnal ORPO export
16
- // Usage: pd-export orpo [--family=<targetModelFamily>]
17
- const familyArg = parts.find((p) => p.startsWith('--family='));
18
- const targetModelFamily = familyArg ? familyArg.split('=')[1] : undefined;
19
- const result = exportORPOSamples(workspaceDir, targetModelFamily);
20
- if (!result.success) {
21
- const reasonMap = {
22
- no_approved_samples: zh
23
- ? '没有已批准的样本'
24
- : 'No approved samples',
25
- family_mismatch: zh
26
- ? '没有找到指定模型家族的已批准样本'
27
- : 'No approved samples for the specified target model family',
28
- all_samples_missing_artifacts: zh
29
- ? '所有样本的 artifact 文件都缺失'
30
- : 'All sample artifact files are missing',
31
- };
32
- return {
33
- text: zh
34
- ? `ORPO 导出失败: ${reasonMap[result.emptyReason ?? ''] ?? result.error}`
35
- : `ORPO export failed: ${reasonMap[result.emptyReason ?? ''] ?? result.error}`,
36
- };
37
- }
38
- return {
39
- text: zh
40
- ? `已导出 ORPO 决策点样本到 ${result.manifest.exportPath},` +
41
- `共 ${result.manifest.sampleCount} 条,模型家族: ${result.manifest.targetModelFamily},` +
42
- `数据集指纹: ${result.manifest.datasetFingerprint.substring(0, 16)}...`
43
- : `Exported ORPO decision-point samples to ${result.manifest.exportPath}, ` +
44
- `${result.manifest.sampleCount} samples, target: ${result.manifest.targetModelFamily}, ` +
45
- `dataset fingerprint: ${result.manifest.datasetFingerprint.substring(0, 16)}...`,
46
- };
47
- }
48
- if (subcommand === 'orpo-list') {
49
- // List previous ORPO exports
50
- const exports = listExports(workspaceDir);
51
- if (exports.length === 0) {
52
- return {
53
- text: zh
54
- ? '没有找到 ORPO 导出记录。'
55
- : 'No ORPO exports found.',
56
- };
57
- }
58
- const lines = exports.slice(0, 10).map((e) => `- ${e.exportId.substring(0, 8)}... | ${e.sampleCount} samples | ${e.targetModelFamily} | ${new Date(e.createdAt).toLocaleDateString()}`);
59
- return {
60
- text: zh
61
- ? `ORPO 导出记录:\n${lines.join('\n')}`
62
- : `ORPO exports:\n${lines.join('\n')}`,
63
- };
64
- }
65
- if (subcommand !== 'analytics' && subcommand !== 'corrections') {
66
- return {
67
- text: zh
68
- ? '无效的导出类型。请使用 `analytics`、`corrections [--redacted]` 或 `orpo [--family=<target>]`。'
69
- : 'Invalid export target. Use `analytics`, `corrections [--redacted]`, or `orpo [--family=<target>]`',
70
- };
71
- }
72
- if (subcommand === 'analytics') {
73
- const result = wctx.trajectory.exportAnalytics();
74
- return {
75
- text: zh
76
- ? `已导出 analytics 快照到 ${result.filePath},共 ${result.count} 条聚合记录。`
77
- : `Exported analytics snapshot to ${result.filePath} (${result.count} aggregated rows).`,
78
- };
79
- }
80
- const redacted = args.includes('--redacted');
81
- const result = wctx.trajectory.exportCorrections({
82
- mode: redacted ? 'redacted' : 'raw',
83
- approvedOnly: true,
84
- });
85
- return {
86
- text: zh
87
- ? `已导出纠错样本到 ${result.filePath},模式 ${result.mode},共 ${result.count} 条。`
88
- : `Exported correction samples to ${result.filePath} (mode=${result.mode}, count=${result.count}).`,
89
- };
90
- }
91
- catch {
92
- return {
93
- text: zh
94
- ? '导出失败,请检查日志。'
95
- : 'Export failed. Check logs.',
96
- };
97
- }
98
- }
@@ -1,14 +0,0 @@
1
- /**
2
- * /pd-focus 命令 - 管理 CURRENT_FOCUS.md
3
- *
4
- * 功能:
5
- * - status: 查看当前状态和历史版本
6
- * - compress: 手动压缩并备份
7
- * - history: 查看历史版本列表
8
- * - rollback: 回滚到指定历史版本
9
- */
10
- import type { PluginCommandContext, PluginCommandResult, OpenClawPluginApi } from '../openclaw-sdk.js';
11
- /**
12
- * 处理 /pd-focus 命令
13
- */
14
- export declare function handleFocusCommand(ctx: PluginCommandContext, api: OpenClawPluginApi): Promise<PluginCommandResult>;
@@ -1,457 +0,0 @@
1
- /**
2
- * /pd-focus 命令 - 管理 CURRENT_FOCUS.md
3
- *
4
- * 功能:
5
- * - status: 查看当前状态和历史版本
6
- * - compress: 手动压缩并备份
7
- * - history: 查看历史版本列表
8
- * - rollback: 回滚到指定历史版本
9
- */
10
- import * as fs from 'fs';
11
- import * as path from 'path';
12
- import { WorkspaceContext } from '../core/workspace-context.js';
13
- import { getHistoryDir, backupToHistory, cleanupHistory, extractVersion, extractDate, extractMilestones, archiveMilestonesToDaily, cleanupStaleInfo, } from '../core/focus-history.js';
14
- /**
15
- * 清理 Markdown 代码块围栏
16
- * 移除开头的 ```lang 和结尾的 ```
17
- */
18
- function stripMarkdownFence(content) {
19
- let result = content.trim();
20
- // 移除开头的代码块标记(如 ```markdown, ```text 等)
21
- result = result.replace(/^```[\w]*\n?/, '');
22
- // 移除结尾的代码块标记
23
- result = result.replace(/\n?```$/, '');
24
- return result.trim();
25
- }
26
- /**
27
- * 获取工作区目录
28
- */
29
- function getWorkspaceDir(ctx) {
30
- const workspaceDir = ctx.config?.workspaceDir;
31
- if (!workspaceDir) {
32
- throw new Error('[PD:Focus] workspaceDir is required but not provided');
33
- }
34
- return workspaceDir;
35
- }
36
- /**
37
- * 压缩 CURRENT_FOCUS内容
38
- *
39
- * 规则:
40
- * - 保留:标题、元数据、状态快照
41
- * - 保留:下一步章节(完整)
42
- * - 保留:当前任务中未完成的项(- [ ])
43
- * - 移除:当前任务中已完成的项(- [x])超过 3 个时
44
- * - 移除:P0 章节如果全部完成
45
- * - 保留:参考章节
46
- * - 清理:Working Memory 超过 10 条记录时保留最近 10 条
47
- * - 验证:文件引用指向不存在的文件时移除
48
- */
49
- function compressFocusContent(content, workspaceDir) {
50
- // 首先使用 cleanupStaleInfo 进行基础清理
51
- let result = cleanupStaleInfo(content, workspaceDir);
52
- const lines = result.split('\n');
53
- const output = [];
54
- let currentSection = '';
55
- let inP0Section = false;
56
- let p0AllCompleted = true;
57
- let p0Lines = [];
58
- let completedCount = 0;
59
- // 辅助函数:刷新 P0 章节缓存
60
- const flushP0Lines = (skipIfCompleted) => {
61
- if (inP0Section && p0Lines.length > 0) {
62
- if (!skipIfCompleted || !p0AllCompleted) {
63
- // P0 有未完成任务,保留 P0 内容
64
- output.push(...p0Lines);
65
- }
66
- // 重置状态
67
- p0Lines = [];
68
- inP0Section = false;
69
- p0AllCompleted = true;
70
- }
71
- };
72
- for (let i = 0; i < lines.length; i++) {
73
- const line = lines[i];
74
- const trimmedLine = line.trim();
75
- // 识别章节
76
- if (/^#{1,3}\s*.*状态快照|📍/.test(trimmedLine)) {
77
- flushP0Lines(true); // P0 完成时跳过
78
- currentSection = 'snapshot';
79
- }
80
- else if (/^###\s*P0/i.test(trimmedLine)) {
81
- currentSection = 'current_p0';
82
- inP0Section = true;
83
- p0AllCompleted = true;
84
- p0Lines = [line];
85
- continue;
86
- }
87
- else if (/^###\s*P[1-9]/i.test(trimmedLine)) {
88
- // 离开 P0 章节
89
- flushP0Lines(true); // P0 完成时跳过,未完成时保留
90
- currentSection = 'current';
91
- output.push(line);
92
- continue;
93
- }
94
- else if (/^#{1,3}\s*.*当前任务|🔄/.test(trimmedLine)) {
95
- flushP0Lines(true); // P0 完成时跳过
96
- currentSection = 'current';
97
- }
98
- else if (/^#{1,3}\s*.*下一步|➡️/.test(trimmedLine)) {
99
- flushP0Lines(false); // 保留未完成的 P0
100
- currentSection = 'nextSteps';
101
- }
102
- else if (/^#{1,3}\s*.*参考|📎/.test(trimmedLine)) {
103
- flushP0Lines(false); // 保留未完成的 P0
104
- currentSection = 'reference';
105
- }
106
- // 处理P0章节
107
- if (inP0Section) {
108
- p0Lines.push(line);
109
- // 检查是否有未完成任务
110
- if (/^-\s*\[\s*\]/.test(trimmedLine)) {
111
- p0AllCompleted = false;
112
- }
113
- continue;
114
- }
115
- // 处理当前任务章节中已完成的项
116
- if (currentSection === 'current') {
117
- if (/^-\s*\[x\]/i.test(trimmedLine)) {
118
- completedCount++;
119
- // 如果已完成项超过 3 个,跳过
120
- if (completedCount > 3) {
121
- continue;
122
- }
123
- }
124
- }
125
- output.push(line);
126
- }
127
- // 循环结束后,刷新剩余的 P0 章节
128
- flushP0Lines(false); // 保留未完成的 P0
129
- return output.join('\n');
130
- }
131
- /**
132
- * 显示 CURRENT_FOCUS 状态
133
- */
134
- function showStatus(workspaceDir, isZh) {
135
- const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
136
- const focusPath = wctx.resolve('CURRENT_FOCUS');
137
- const historyDir = getHistoryDir(focusPath);
138
- if (!fs.existsSync(focusPath)) {
139
- return isZh
140
- ? '⚠️ CURRENT_FOCUS.md 不存在\n\n💡 请先运行 `/pd-init` 初始化工作区'
141
- : '⚠️ CURRENT_FOCUS.md does not exist\n\n💡 Run `/pd-init` to initialize workspace first';
142
- }
143
- const content = fs.readFileSync(focusPath, 'utf-8');
144
- const version = extractVersion(content);
145
- const date = extractDate(content);
146
- const lines = content.split('\n').length;
147
- // 统计历史版本
148
- let historyCount = 0;
149
- if (fs.existsSync(historyDir)) {
150
- historyCount = fs.readdirSync(historyDir).filter(f => f.startsWith('CURRENT_FOCUS.v')).length;
151
- }
152
- if (isZh) {
153
- return `📄 **CURRENT_FOCUS.md 状态**
154
-
155
- | 属性 | 值 |
156
- |------|-----|
157
- | 版本 | v${version} |
158
- | 更新日期 | ${date} |
159
- | 行数 | ${lines} 行 |
160
- | 历史版本 | ${historyCount} 个 |
161
-
162
- 💡 输入 \`/pd-focus history\` 查看历史版本
163
- 💡 输入 \`/pd-focus compress\` 手动压缩`;
164
- }
165
- return `📄 **CURRENT_FOCUS.md Status**
166
-
167
- | Property | Value |
168
- |----------|-------|
169
- | Version | v${version} |
170
- | Updated | ${date} |
171
- | Lines | ${lines} lines |
172
- | History | ${historyCount} versions |
173
-
174
- 💡 Type \`/pd-focus history\` to view history
175
- 💡 Type \`/pd-focus compress\` to compress manually`;
176
- }
177
- /**
178
- * 显示历史版本列表
179
- */
180
- function showHistory(workspaceDir, isZh) {
181
- const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
182
- const focusPath = wctx.resolve('CURRENT_FOCUS');
183
- const historyDir = getHistoryDir(focusPath);
184
- if (!fs.existsSync(historyDir)) {
185
- return isZh
186
- ? '📭 暂无历史版本\n\n💡 历史版本在压缩 CURRENT_FOCUS.md 时自动创建'
187
- : '📭 No history versions yet\n\n💡 History is created when CURRENT_FOCUS.md is compressed';
188
- }
189
- const files = fs.readdirSync(historyDir)
190
- .filter(f => f.startsWith('CURRENT_FOCUS.v') && f.endsWith('.md'))
191
- .map(f => {
192
- const filePath = path.join(historyDir, f);
193
- const stat = fs.statSync(filePath);
194
- const content = fs.readFileSync(filePath, 'utf-8');
195
- return {
196
- name: f,
197
- version: extractVersion(content),
198
- date: extractDate(content),
199
- mtime: stat.mtime,
200
- lines: content.split('\n').length,
201
- };
202
- })
203
- .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
204
- if (files.length === 0) {
205
- return isZh ? '📭 暂无历史版本' : '📭 No history versions';
206
- }
207
- const lines = files.slice(0, 10).map((f, i) => {
208
- const num = i + 1;
209
- return isZh
210
- ? `${num}. \`${f.name}\` - v${f.version} (${f.date}, ${f.lines} 行)`
211
- : `${num}. \`${f.name}\` - v${f.version} (${f.date}, ${f.lines} lines)`;
212
- });
213
- const header = isZh
214
- ? `📚 **历史版本列表** (最近 ${Math.min(files.length, 10)} 个)\n`
215
- : `📚 **History Versions** (Last ${Math.min(files.length, 10)})\n`;
216
- const footer = isZh
217
- ? `\n\n💡 输入 \`/pd-focus rollback <序号>\` 回滚到指定版本`
218
- : `\n\n💡 Type \`/pd-focus rollback <number>\` to rollback`;
219
- return header + '\n' + lines.join('\n') + footer;
220
- }
221
- /**
222
- * 手动压缩 CURRENT_FOCUS.md(使用子智能体)
223
- */
224
- async function compressFocus(workspaceDir, isZh, api) {
225
- const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
226
- const focusPath = wctx.resolve('CURRENT_FOCUS');
227
- if (!fs.existsSync(focusPath)) {
228
- return isZh
229
- ? '❌ CURRENT_FOCUS.md 不存在'
230
- : '❌ CURRENT_FOCUS.md does not exist';
231
- }
232
- const oldContent = fs.readFileSync(focusPath, 'utf-8');
233
- const oldVersion = extractVersion(oldContent);
234
- const oldDate = extractDate(oldContent);
235
- const oldLines = oldContent.split('\n').length;
236
- // 检查是否需要压缩
237
- if (oldLines <= 40) {
238
- return isZh
239
- ? `✅ 当前文件仅 ${oldLines} 行,无需压缩\n\n💡 文件少于 40 行时不建议压缩`
240
- : `✅ Current file has only ${oldLines} lines, no need to compress\n\n💡 Compression not recommended for files under 40 lines`;
241
- }
242
- // 1. 提取里程碑
243
- const milestones = extractMilestones(oldContent);
244
- // 2. 归档里程碑到 daily memory(而非 MEMORY.md)
245
- const archivePath = archiveMilestonesToDaily(workspaceDir, milestones, oldVersion);
246
- const milestonesArchived = archivePath !== null;
247
- // 3. 备份当前版本
248
- const backupPath = backupToHistory(focusPath, oldContent);
249
- // 4. 清理过期历史
250
- cleanupHistory(focusPath);
251
- // 5. 压缩内容
252
- let compressedContent;
253
- try {
254
- compressedContent = compressFocusContent(oldContent, workspaceDir);
255
- api.logger?.info?.(`[PD:Focus] Compressed CURRENT_FOCUS from ${oldLines} lines`);
256
- }
257
- catch (error) {
258
- api.logger?.error?.(`[PD:Focus] Compression failed: ${String(error)}`);
259
- compressedContent = oldContent;
260
- }
261
- // 6. 更新版本号和日期
262
- const versionParts = oldVersion.split('.');
263
- const majorVersion = parseInt(versionParts[0], 10) || 1;
264
- const newVersion = `${majorVersion + 1}`;
265
- const today = new Date().toISOString().split('T')[0];
266
- const newContent = compressedContent
267
- .replace(/\*\*版本\*\*:\s*v[\d.]+/i, `**版本**: v${newVersion}`)
268
- .replace(/\*\*更新\*\*:\s*\d{4}-\d{2}-\d{2}/, `**更新**: ${today}`);
269
- const newLines = newContent.split('\n').length;
270
- const savedLines = oldLines - newLines;
271
- fs.writeFileSync(focusPath, newContent, 'utf-8');
272
- const milestoneNote = milestonesArchived
273
- ? isZh
274
- ? `📝 里程碑已归档到 memory/${today}.md`
275
- : `📝 Milestones archived to memory/${today}.md`
276
- : '';
277
- if (isZh) {
278
- return `✅ **压缩完成**
279
-
280
- | 操作 | 详情 |
281
- |------|------|
282
- | 旧版本 | v${oldVersion} (${oldDate}) |
283
- | 新版本 | v${newVersion} (${today}) |
284
- | 压缩前 | ${oldLines} 行 |
285
- | 压缩后 | ${newLines} 行 |
286
- | 节省 | ${savedLines} 行 |
287
- | 备份文件 | ${backupPath ? path.basename(backupPath) : '已存在'} |
288
-
289
- ${milestoneNote ? `${milestoneNote}\n` : ''}
290
- 💡 已压缩版本已备份到历史目录
291
- 💡 输入 \`/pd-focus history\` 查看所有历史版本`;
292
- }
293
- return `✅ **Compression Complete**
294
-
295
- | Action | Details |
296
- |--------|---------|
297
- | Old Version | v${oldVersion} (${oldDate}) |
298
- | New Version | v${newVersion} (${today}) |
299
- | Before | ${oldLines} lines |
300
- | After | ${newLines} lines |
301
- | Saved | ${savedLines} lines |
302
- | Backup File | ${backupPath ? path.basename(backupPath) : 'exists'} |
303
-
304
- ${milestoneNote ? `${milestoneNote}\n` : ''}
305
- 💡 Compressed version backed up to history
306
- 💡 Type \`/pd-focus history\` to view all versions`;
307
- }
308
- /**
309
- * 回滚到历史版本
310
- */
311
- function rollbackFocus(workspaceDir, index, isZh) {
312
- const wctx = WorkspaceContext.fromHookContext({ workspaceDir });
313
- const focusPath = wctx.resolve('CURRENT_FOCUS');
314
- const historyDir = getHistoryDir(focusPath);
315
- if (!fs.existsSync(historyDir)) {
316
- return isZh ? '❌ 暂无历史版本可回滚' : '❌ No history versions to rollback';
317
- }
318
- const files = fs.readdirSync(historyDir)
319
- .filter(f => f.startsWith('CURRENT_FOCUS.v') && f.endsWith('.md'))
320
- .map(f => ({
321
- name: f,
322
- path: path.join(historyDir, f),
323
- mtime: fs.statSync(path.join(historyDir, f)).mtime.getTime(),
324
- }))
325
- .sort((a, b) => b.mtime - a.mtime);
326
- if (index < 1 || index > files.length) {
327
- return isZh
328
- ? `❌ 无效的序号: ${index}\n\n💡 请输入 1-${files.length} 之间的数字`
329
- : `❌ Invalid index: ${index}\n\n💡 Please enter a number between 1-${files.length}`;
330
- }
331
- const targetFile = files[index - 1];
332
- const historyContent = fs.readFileSync(targetFile.path, 'utf-8');
333
- // 备份当前版本
334
- const currentContent = fs.existsSync(focusPath)
335
- ? fs.readFileSync(focusPath, 'utf-8')
336
- : '';
337
- if (currentContent) {
338
- backupToHistory(focusPath, currentContent);
339
- }
340
- // 恢复历史版本
341
- const restoredVersion = extractVersion(historyContent);
342
- const restoredDate = extractDate(historyContent);
343
- const today = new Date().toISOString().split('T')[0];
344
- // 获取最大版本号(从当前文件或历史文件中)
345
- let maxVersion = parseFloat(restoredVersion) || 1;
346
- if (currentContent) {
347
- const currentVersion = parseFloat(extractVersion(currentContent)) || 1;
348
- if (currentVersion > maxVersion) {
349
- maxVersion = currentVersion;
350
- }
351
- }
352
- // 正常递增版本号
353
- const newVersion = `${maxVersion + 1}`;
354
- // 添加回滚标记到状态字段
355
- const restoredContent = historyContent
356
- .replace(/\*\*版本\*\*:\s*v[\d.]+/i, `**版本**: v${newVersion}`)
357
- .replace(/\*\*更新\*\*:\s*\d{4}-\d{2}-\d{2}/, `**更新**: ${today}`)
358
- .replace(/\*\*状态\*\*:\s*[A-Z]+/i, `**状态**: ROLLBACK (from v${restoredVersion})`);
359
- fs.writeFileSync(focusPath, restoredContent, 'utf-8');
360
- if (isZh) {
361
- return `✅ **回滚成功**
362
-
363
- | 操作 | 详情 |
364
- |------|------|
365
- | 恢复自 | ${targetFile.name} |
366
- | 原版本 | v${restoredVersion} (${restoredDate}) |
367
- | 新版本 | v${newVersion} (${today}) |
368
-
369
- 💡 当前版本已备份,可再次回滚`;
370
- }
371
- return `✅ **Rollback Complete**
372
-
373
- | Action | Details |
374
- |--------|---------|
375
- | Restored From | ${targetFile.name} |
376
- | Original Version | v${restoredVersion} (${restoredDate}) |
377
- | New Version | v${newVersion} (${today}) |
378
-
379
- 💡 Current version backed up, you can rollback again`;
380
- }
381
- /**
382
- * 显示帮助
383
- */
384
- function showHelp(isZh) {
385
- if (isZh) {
386
- return `📖 **/pd-focus 命令帮助**
387
-
388
- \`/pd-focus status\` - 查看 CURRENT_FOCUS.md 状态
389
- \`/pd-focus history\` - 查看历史版本列表
390
- \`/pd-focus compress\` - 手动压缩并备份
391
- \`/pd-focus rollback <序号>\` - 回滚到指定历史版本
392
-
393
- **功能说明:**
394
- - 历史版本在压缩时自动创建
395
- - 最多保留 10 个历史版本
396
- - Full 模式会读取当前版本 + 最近 3 个历史版本`;
397
- }
398
- return `📖 **/pd-focus Command Help**
399
-
400
- \`/pd-focus status\` - Show CURRENT_FOCUS.md status
401
- \`/pd-focus history\` - View history versions list
402
- \`/pd-focus compress\` - Manually compress and backup
403
- \`/pd-focus rollback <number>\` - Rollback to specified version
404
-
405
- **Features:**
406
- - History versions created during compression
407
- - Maximum 10 history versions retained
408
- - Full mode reads current + last 3 history versions`;
409
- }
410
- /**
411
- * 处理 /pd-focus 命令
412
- */
413
- export async function handleFocusCommand(ctx, api) {
414
- const workspaceDir = getWorkspaceDir(ctx);
415
- const args = ctx.args || [];
416
- const subCommand = args[0]?.toLowerCase() || 'status';
417
- // 检测语言(与 context.ts 保持一致)
418
- const isZh = ctx.config?.language === 'zh';
419
- let result;
420
- switch (subCommand) {
421
- case 'status':
422
- result = showStatus(workspaceDir, isZh);
423
- break;
424
- case 'history':
425
- case 'hist':
426
- result = showHistory(workspaceDir, isZh);
427
- break;
428
- case 'compress':
429
- case 'cp':
430
- result = await compressFocus(workspaceDir, isZh, api);
431
- break;
432
- case 'rollback':
433
- case 'rb':
434
- const index = parseInt(args[1], 10);
435
- if (isNaN(index)) {
436
- result = isZh
437
- ? '❌ 请指定要回滚的版本序号\n\n💡 输入 `/pd-focus history` 查看可用版本'
438
- : '❌ Please specify version number to rollback\n\n💡 Type `/pd-focus history` to see available versions';
439
- }
440
- else {
441
- result = rollbackFocus(workspaceDir, index, isZh);
442
- }
443
- break;
444
- case 'help':
445
- case '--help':
446
- case '-h':
447
- result = showHelp(isZh);
448
- break;
449
- default:
450
- result = isZh
451
- ? `❌ 未知命令: ${subCommand}\n\n${showHelp(isZh)}`
452
- : `❌ Unknown command: ${subCommand}\n\n${showHelp(isZh)}`;
453
- }
454
- return {
455
- text: result,
456
- };
457
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * Nocturnal Review Command — Human Review Queue for Nocturnal Dataset
3
- * =================================================================
4
- *
5
- * PURPOSE: Provide human review gateway before training export.
6
- * Reviews operate on nocturnal dataset records, NOT on artifact files directly.
7
- *
8
- * COMMAND SHAPE:
9
- * pd-nocturnal-review list — list pending review samples
10
- * pd-nocturnal-review approve <fingerprint> [reason] — approve for training
11
- * pd-nocturnal-review reject <fingerprint> [reason] — reject sample
12
- * pd-nocturnal-review show <fingerprint> — show sample lineage summary
13
- * pd-nocturnal-review set-family <fingerprint> <family> — set target model family
14
- * pd-nocturnal-review stats — show dataset statistics
15
- *
16
- * DESIGN CONSTRAINTS:
17
- * - Review state lives in dataset registry, not in artifacts
18
- * - approve/reject require reason (unless default is provided)
19
- * - Rejected samples cannot enter export
20
- * - Superseded samples cannot enter export
21
- * - No Web UI (CLI only)
22
- */
23
- import type { PluginCommandContext, PluginCommandResult } from '../openclaw-sdk.js';
24
- export declare function handleNocturnalReviewCommand(ctx: PluginCommandContext): PluginCommandResult;