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
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;