principles-disciple 1.8.1 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/ADVANCED_CONFIG_ZH.md +97 -0
  2. package/AGENT_INSTALL.md +173 -0
  3. package/AGENT_INSTALL_EN.md +173 -0
  4. package/INSTALL.md +256 -0
  5. package/SKILL.md +63 -0
  6. package/docs/COMMAND_REFERENCE.md +76 -0
  7. package/docs/COMMAND_REFERENCE_EN.md +79 -0
  8. package/esbuild.config.js +75 -0
  9. package/openclaw.plugin.json +4 -4
  10. package/package.json +11 -13
  11. package/scripts/build-web.mjs +46 -0
  12. package/scripts/install-dependencies.cjs +47 -0
  13. package/scripts/sync-plugin.mjs +802 -0
  14. package/scripts/verify-build.mjs +109 -0
  15. package/src/agents/nocturnal-dreamer.md +152 -0
  16. package/src/agents/nocturnal-philosopher.md +138 -0
  17. package/src/agents/nocturnal-reflector.md +126 -0
  18. package/src/agents/nocturnal-scribe.md +164 -0
  19. package/src/commands/capabilities.ts +85 -0
  20. package/{dist/commands/context.js → src/commands/context.ts} +78 -38
  21. package/src/commands/evolution-status.ts +146 -0
  22. package/src/commands/export.ts +111 -0
  23. package/src/commands/focus.ts +533 -0
  24. package/src/commands/nocturnal-review.ts +311 -0
  25. package/src/commands/nocturnal-rollout.ts +763 -0
  26. package/src/commands/nocturnal-train.ts +1002 -0
  27. package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
  28. package/src/commands/principle-rollback.ts +27 -0
  29. package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
  30. package/src/commands/samples.ts +60 -0
  31. package/src/commands/strategy.ts +38 -0
  32. package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
  33. package/src/commands/workflow-debug.ts +128 -0
  34. package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
  35. package/src/config/errors.ts +163 -0
  36. package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
  37. package/src/constants/diagnostician.ts +66 -0
  38. package/src/constants/tools.ts +62 -0
  39. package/src/core/adaptive-thresholds.ts +476 -0
  40. package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
  41. package/{dist/core/config.js → src/core/config.ts} +158 -46
  42. package/src/core/control-ui-db.ts +435 -0
  43. package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
  44. package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
  45. package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
  46. package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
  47. package/src/core/empathy-keyword-matcher.ts +327 -0
  48. package/src/core/empathy-types.ts +218 -0
  49. package/src/core/event-log.ts +544 -0
  50. package/src/core/evolution-engine.ts +612 -0
  51. package/src/core/evolution-logger.ts +353 -0
  52. package/src/core/evolution-migration.ts +77 -0
  53. package/src/core/evolution-reducer.ts +731 -0
  54. package/src/core/evolution-types.ts +456 -0
  55. package/src/core/external-training-contract.ts +527 -0
  56. package/src/core/focus-history.ts +1458 -0
  57. package/src/core/hygiene/tracker.ts +117 -0
  58. package/{dist/core/init.js → src/core/init.ts} +39 -26
  59. package/src/core/local-worker-routing.ts +617 -0
  60. package/{dist/core/migration.js → src/core/migration.ts} +18 -11
  61. package/src/core/model-deployment-registry.ts +722 -0
  62. package/src/core/model-training-registry.ts +813 -0
  63. package/src/core/nocturnal-arbiter.ts +706 -0
  64. package/src/core/nocturnal-candidate-scoring.ts +392 -0
  65. package/src/core/nocturnal-compliance.ts +1075 -0
  66. package/src/core/nocturnal-dataset.ts +668 -0
  67. package/src/core/nocturnal-executability.ts +428 -0
  68. package/src/core/nocturnal-export.ts +390 -0
  69. package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
  70. package/src/core/nocturnal-trajectory-extractor.ts +484 -0
  71. package/src/core/nocturnal-trinity.ts +1384 -0
  72. package/src/core/pain.ts +122 -0
  73. package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
  74. package/{dist/core/paths.js → src/core/paths.ts} +13 -4
  75. package/src/core/principle-training-state.ts +450 -0
  76. package/src/core/profile.ts +226 -0
  77. package/src/core/promotion-gate.ts +822 -0
  78. package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
  79. package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +175 -62
  80. package/src/core/shadow-observation-registry.ts +534 -0
  81. package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
  82. package/src/core/thinking-models.ts +217 -0
  83. package/src/core/training-program.ts +630 -0
  84. package/src/core/trajectory-types.ts +243 -0
  85. package/src/core/trajectory.ts +1673 -0
  86. package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
  87. package/src/hooks/bash-risk.ts +171 -0
  88. package/src/hooks/edit-verification.ts +295 -0
  89. package/src/hooks/gate-block-helper.ts +160 -0
  90. package/src/hooks/gate.ts +210 -0
  91. package/src/hooks/gfi-gate.ts +177 -0
  92. package/src/hooks/lifecycle.ts +326 -0
  93. package/{dist/hooks/llm.js → src/hooks/llm.ts} +160 -80
  94. package/src/hooks/message-sanitize.ts +45 -0
  95. package/src/hooks/pain.ts +384 -0
  96. package/src/hooks/progressive-trust-gate.ts +174 -0
  97. package/src/hooks/prompt.ts +920 -0
  98. package/src/hooks/subagent.ts +207 -0
  99. package/src/hooks/thinking-checkpoint.ts +73 -0
  100. package/src/hooks/trajectory-collector.ts +290 -0
  101. package/src/http/principles-console-route.ts +716 -0
  102. package/src/i18n/commands.ts +117 -0
  103. package/src/index.ts +694 -0
  104. package/src/service/central-database.ts +831 -0
  105. package/src/service/control-ui-query-service.ts +888 -0
  106. package/src/service/evolution-query-service.ts +405 -0
  107. package/src/service/evolution-worker.ts +1646 -0
  108. package/src/service/health-query-service.ts +836 -0
  109. package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +235 -79
  110. package/src/service/nocturnal-service.ts +1015 -0
  111. package/src/service/nocturnal-target-selector.ts +532 -0
  112. package/src/service/phase3-input-filter.ts +237 -0
  113. package/src/service/runtime-summary-service.ts +757 -0
  114. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
  115. package/{dist/service/subagent-workflow/empathy-observer-workflow-manager.js → src/service/subagent-workflow/empathy-observer-workflow-manager.ts} +240 -117
  116. package/src/service/subagent-workflow/index.ts +51 -0
  117. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
  118. package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
  119. package/{dist/service/subagent-workflow/types.d.ts → src/service/subagent-workflow/types.ts} +137 -18
  120. package/src/service/subagent-workflow/workflow-store.ts +328 -0
  121. package/src/service/trajectory-service.ts +15 -0
  122. package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
  123. package/src/tools/deep-reflect.ts +349 -0
  124. package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
  125. package/src/types/event-types.ts +453 -0
  126. package/src/types/hygiene-types.ts +31 -0
  127. package/src/types/principle-tree-schema.ts +244 -0
  128. package/src/types/runtime-summary.ts +49 -0
  129. package/src/types.ts +74 -0
  130. package/src/utils/file-lock.ts +391 -0
  131. package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
  132. package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
  133. package/src/utils/io.ts +110 -0
  134. package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
  135. package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
  136. package/src/utils/subagent-probe.ts +94 -0
  137. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
  138. package/templates/pain_settings.json +2 -1
  139. package/tests/README.md +120 -0
  140. package/tests/build-artifacts.test.ts +111 -0
  141. package/tests/commands/evolution-status.test.ts +222 -0
  142. package/tests/commands/evolver.test.ts +22 -0
  143. package/tests/commands/export.test.ts +78 -0
  144. package/tests/commands/nocturnal-review.test.ts +448 -0
  145. package/tests/commands/nocturnal-train.test.ts +97 -0
  146. package/tests/commands/pain.test.ts +108 -0
  147. package/tests/commands/samples.test.ts +65 -0
  148. package/tests/commands/strategy.test.ts +34 -0
  149. package/tests/commands/thinking-os.test.ts +88 -0
  150. package/tests/core/adaptive-thresholds.test.ts +261 -0
  151. package/tests/core/config-service.test.ts +89 -0
  152. package/tests/core/config.test.ts +90 -0
  153. package/tests/core/control-ui-db.test.ts +75 -0
  154. package/tests/core/core-template-guidance.test.ts +21 -0
  155. package/tests/core/detection-funnel.test.ts +63 -0
  156. package/tests/core/detection-service.test.ts +50 -0
  157. package/tests/core/dictionary-service.test.ts +116 -0
  158. package/tests/core/dictionary.test.ts +168 -0
  159. package/tests/core/empathy-keyword-matcher.test.ts +209 -0
  160. package/tests/core/event-log.test.ts +181 -0
  161. package/tests/core/evolution-e2e.test.ts +58 -0
  162. package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
  163. package/tests/core/evolution-engine.test.ts +562 -0
  164. package/tests/core/evolution-logger.test.ts +148 -0
  165. package/tests/core/evolution-migration.test.ts +50 -0
  166. package/tests/core/evolution-paths.test.ts +21 -0
  167. package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
  168. package/tests/core/evolution-reducer.test.ts +180 -0
  169. package/tests/core/evolution-types-loop.test.ts +48 -0
  170. package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
  171. package/tests/core/external-training-contract.test.ts +463 -0
  172. package/tests/core/focus-history.test.ts +682 -0
  173. package/tests/core/init-flatten.test.ts +69 -0
  174. package/tests/core/init-refactor.test.ts +87 -0
  175. package/tests/core/init-v1.3.test.ts +46 -0
  176. package/tests/core/init.test.ts +190 -0
  177. package/tests/core/local-worker-routing.test.ts +757 -0
  178. package/tests/core/migration.test.ts +84 -0
  179. package/tests/core/model-deployment-registry.test.ts +845 -0
  180. package/tests/core/model-training-registry.test.ts +889 -0
  181. package/tests/core/nocturnal-arbiter.test.ts +494 -0
  182. package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
  183. package/tests/core/nocturnal-compliance.test.ts +646 -0
  184. package/tests/core/nocturnal-dataset.test.ts +892 -0
  185. package/tests/core/nocturnal-executability.test.ts +357 -0
  186. package/tests/core/nocturnal-export.test.ts +462 -0
  187. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
  188. package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
  189. package/tests/core/nocturnal-trinity.test.ts +953 -0
  190. package/tests/core/pain.test.ts +33 -0
  191. package/tests/core/path-resolver.test.ts +57 -0
  192. package/tests/core/paths-refactor.test.ts +42 -0
  193. package/tests/core/phase7-rollout-integration.test.ts +477 -0
  194. package/tests/core/principle-training-state.test.ts +712 -0
  195. package/tests/core/profile.test.ts +56 -0
  196. package/tests/core/promotion-gate.test.ts +556 -0
  197. package/tests/core/risk-calculator.test.ts +168 -0
  198. package/tests/core/session-tracker.test.ts +191 -0
  199. package/tests/core/training-program.test.ts +472 -0
  200. package/tests/core/trajectory.test.ts +265 -0
  201. package/tests/core/workspace-context-factory.test.ts +18 -0
  202. package/tests/core/workspace-context.test.ts +134 -0
  203. package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
  204. package/tests/fixtures/production-compatibility.test.ts +147 -0
  205. package/tests/fixtures/production-mock-generator.ts +282 -0
  206. package/tests/hooks/bash-risk-integration.test.ts +137 -0
  207. package/tests/hooks/bash-risk.test.ts +81 -0
  208. package/tests/hooks/edit-verification.test.ts +678 -0
  209. package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
  210. package/tests/hooks/gate-edit-verification.test.ts +435 -0
  211. package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
  212. package/tests/hooks/gate.test.ts +271 -0
  213. package/tests/hooks/gfi-gate-unit.test.ts +422 -0
  214. package/tests/hooks/gfi-gate.test.ts +669 -0
  215. package/tests/hooks/lifecycle.test.ts +248 -0
  216. package/tests/hooks/llm.test.ts +308 -0
  217. package/tests/hooks/message-sanitize.test.ts +36 -0
  218. package/tests/hooks/pain.test.ts +141 -0
  219. package/tests/hooks/progressive-trust-gate.test.ts +277 -0
  220. package/tests/hooks/prompt.test.ts +1411 -0
  221. package/tests/hooks/subagent.test.ts +467 -0
  222. package/tests/hooks/thinking-gate.test.ts +313 -0
  223. package/tests/http/principles-console-route.test.ts +140 -0
  224. package/tests/hygiene-tracker.test.ts +77 -0
  225. package/tests/index.integration.test.ts +179 -0
  226. package/tests/index.shadow-routing.integration.test.ts +140 -0
  227. package/tests/index.test.ts +9 -0
  228. package/tests/integration/empathy-workflow-integration.test.ts +627 -0
  229. package/tests/service/control-ui-query-service.test.ts +121 -0
  230. package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
  231. package/tests/service/evolution-worker.test.ts +585 -0
  232. package/tests/service/nocturnal-runtime.test.ts +470 -0
  233. package/tests/service/nocturnal-service.test.ts +577 -0
  234. package/tests/service/nocturnal-target-selector.test.ts +615 -0
  235. package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
  236. package/tests/service/phase3-input-filter.test.ts +289 -0
  237. package/tests/service/runtime-summary-service.test.ts +919 -0
  238. package/tests/task-compliance.test.ts +166 -0
  239. package/tests/test-utils.ts +48 -0
  240. package/tests/tools/critique-prompt.test.ts +260 -0
  241. package/tests/tools/deep-reflect.test.ts +232 -0
  242. package/tests/tools/model-index.test.ts +246 -0
  243. package/tests/ui/app.test.tsx +114 -0
  244. package/tests/utils/file-lock.test.ts +407 -0
  245. package/tests/utils/hashing.test.ts +32 -0
  246. package/tests/utils/io.test.ts +39 -0
  247. package/tests/utils/nlp.test.ts +53 -0
  248. package/tests/utils/plugin-logger.test.ts +156 -0
  249. package/tsconfig.json +16 -0
  250. package/tsconfig.tsbuildinfo +1 -0
  251. package/ui/src/App.tsx +45 -0
  252. package/ui/src/api.ts +216 -0
  253. package/ui/src/charts.tsx +586 -0
  254. package/ui/src/components/ErrorState.tsx +6 -0
  255. package/ui/src/components/Loading.tsx +13 -0
  256. package/ui/src/components/ProtectedRoute.tsx +12 -0
  257. package/ui/src/components/Shell.tsx +91 -0
  258. package/ui/src/components/WorkspaceConfig.tsx +146 -0
  259. package/ui/src/components/index.ts +5 -0
  260. package/ui/src/context/auth.tsx +80 -0
  261. package/ui/src/context/theme.tsx +66 -0
  262. package/ui/src/hooks/useAutoRefresh.ts +39 -0
  263. package/ui/src/i18n/ui.ts +363 -0
  264. package/ui/src/main.tsx +16 -0
  265. package/ui/src/pages/EvolutionPage.tsx +352 -0
  266. package/ui/src/pages/FeedbackPage.tsx +140 -0
  267. package/ui/src/pages/GateMonitorPage.tsx +136 -0
  268. package/ui/src/pages/LoginPage.tsx +88 -0
  269. package/ui/src/pages/OverviewPage.tsx +238 -0
  270. package/ui/src/pages/SamplesPage.tsx +174 -0
  271. package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
  272. package/ui/src/styles.css +1661 -0
  273. package/ui/src/types.ts +368 -0
  274. package/ui/src/utils/format.ts +15 -0
  275. package/vitest.config.ts +23 -0
  276. package/dist/commands/capabilities.d.ts +0 -3
  277. package/dist/commands/capabilities.js +0 -73
  278. package/dist/commands/context.d.ts +0 -5
  279. package/dist/commands/evolution-status.d.ts +0 -4
  280. package/dist/commands/evolution-status.js +0 -117
  281. package/dist/commands/evolver.d.ts +0 -9
  282. package/dist/commands/evolver.js +0 -26
  283. package/dist/commands/export.d.ts +0 -2
  284. package/dist/commands/export.js +0 -98
  285. package/dist/commands/focus.d.ts +0 -14
  286. package/dist/commands/focus.js +0 -457
  287. package/dist/commands/nocturnal-review.d.ts +0 -24
  288. package/dist/commands/nocturnal-review.js +0 -265
  289. package/dist/commands/nocturnal-rollout.d.ts +0 -27
  290. package/dist/commands/nocturnal-rollout.js +0 -671
  291. package/dist/commands/nocturnal-train.d.ts +0 -25
  292. package/dist/commands/nocturnal-train.js +0 -919
  293. package/dist/commands/pain.d.ts +0 -5
  294. package/dist/commands/principle-rollback.d.ts +0 -4
  295. package/dist/commands/principle-rollback.js +0 -22
  296. package/dist/commands/rollback.d.ts +0 -19
  297. package/dist/commands/samples.d.ts +0 -2
  298. package/dist/commands/samples.js +0 -55
  299. package/dist/commands/strategy.d.ts +0 -3
  300. package/dist/commands/strategy.js +0 -29
  301. package/dist/commands/thinking-os.d.ts +0 -2
  302. package/dist/config/defaults/runtime.d.ts +0 -40
  303. package/dist/config/errors.d.ts +0 -84
  304. package/dist/config/errors.js +0 -94
  305. package/dist/config/index.js +0 -7
  306. package/dist/constants/diagnostician.d.ts +0 -12
  307. package/dist/constants/diagnostician.js +0 -56
  308. package/dist/constants/tools.d.ts +0 -17
  309. package/dist/constants/tools.js +0 -54
  310. package/dist/core/adaptive-thresholds.d.ts +0 -186
  311. package/dist/core/adaptive-thresholds.js +0 -300
  312. package/dist/core/config-service.d.ts +0 -15
  313. package/dist/core/config.d.ts +0 -129
  314. package/dist/core/control-ui-db.d.ts +0 -95
  315. package/dist/core/control-ui-db.js +0 -292
  316. package/dist/core/detection-funnel.d.ts +0 -33
  317. package/dist/core/detection-service.d.ts +0 -15
  318. package/dist/core/dictionary-service.d.ts +0 -15
  319. package/dist/core/dictionary.d.ts +0 -38
  320. package/dist/core/event-log.d.ts +0 -82
  321. package/dist/core/event-log.js +0 -463
  322. package/dist/core/evolution-engine.d.ts +0 -118
  323. package/dist/core/evolution-engine.js +0 -464
  324. package/dist/core/evolution-logger.d.ts +0 -137
  325. package/dist/core/evolution-logger.js +0 -256
  326. package/dist/core/evolution-migration.d.ts +0 -5
  327. package/dist/core/evolution-migration.js +0 -65
  328. package/dist/core/evolution-reducer.d.ts +0 -98
  329. package/dist/core/evolution-reducer.js +0 -465
  330. package/dist/core/evolution-types.d.ts +0 -287
  331. package/dist/core/evolution-types.js +0 -78
  332. package/dist/core/external-training-contract.d.ts +0 -276
  333. package/dist/core/external-training-contract.js +0 -269
  334. package/dist/core/focus-history.d.ts +0 -210
  335. package/dist/core/focus-history.js +0 -1185
  336. package/dist/core/hygiene/tracker.d.ts +0 -22
  337. package/dist/core/hygiene/tracker.js +0 -106
  338. package/dist/core/init.d.ts +0 -12
  339. package/dist/core/local-worker-routing.d.ts +0 -175
  340. package/dist/core/local-worker-routing.js +0 -525
  341. package/dist/core/migration.d.ts +0 -6
  342. package/dist/core/model-deployment-registry.d.ts +0 -218
  343. package/dist/core/model-deployment-registry.js +0 -503
  344. package/dist/core/model-training-registry.d.ts +0 -295
  345. package/dist/core/model-training-registry.js +0 -475
  346. package/dist/core/nocturnal-arbiter.d.ts +0 -159
  347. package/dist/core/nocturnal-arbiter.js +0 -534
  348. package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
  349. package/dist/core/nocturnal-candidate-scoring.js +0 -266
  350. package/dist/core/nocturnal-compliance.d.ts +0 -175
  351. package/dist/core/nocturnal-compliance.js +0 -824
  352. package/dist/core/nocturnal-dataset.d.ts +0 -224
  353. package/dist/core/nocturnal-dataset.js +0 -443
  354. package/dist/core/nocturnal-executability.d.ts +0 -85
  355. package/dist/core/nocturnal-executability.js +0 -331
  356. package/dist/core/nocturnal-export.d.ts +0 -124
  357. package/dist/core/nocturnal-export.js +0 -275
  358. package/dist/core/nocturnal-paths.d.ts +0 -124
  359. package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
  360. package/dist/core/nocturnal-trajectory-extractor.js +0 -307
  361. package/dist/core/nocturnal-trinity.d.ts +0 -311
  362. package/dist/core/nocturnal-trinity.js +0 -880
  363. package/dist/core/pain.d.ts +0 -4
  364. package/dist/core/pain.js +0 -70
  365. package/dist/core/path-resolver.d.ts +0 -46
  366. package/dist/core/paths.d.ts +0 -65
  367. package/dist/core/principle-training-state.d.ts +0 -121
  368. package/dist/core/principle-training-state.js +0 -321
  369. package/dist/core/profile.d.ts +0 -62
  370. package/dist/core/profile.js +0 -210
  371. package/dist/core/promotion-gate.d.ts +0 -238
  372. package/dist/core/promotion-gate.js +0 -529
  373. package/dist/core/risk-calculator.d.ts +0 -22
  374. package/dist/core/session-tracker.d.ts +0 -101
  375. package/dist/core/shadow-observation-registry.d.ts +0 -217
  376. package/dist/core/shadow-observation-registry.js +0 -308
  377. package/dist/core/system-logger.d.ts +0 -8
  378. package/dist/core/thinking-models.d.ts +0 -38
  379. package/dist/core/thinking-models.js +0 -170
  380. package/dist/core/training-program.d.ts +0 -233
  381. package/dist/core/training-program.js +0 -433
  382. package/dist/core/trajectory.d.ts +0 -411
  383. package/dist/core/trajectory.js +0 -1307
  384. package/dist/core/workspace-context.d.ts +0 -71
  385. package/dist/hooks/bash-risk.d.ts +0 -57
  386. package/dist/hooks/bash-risk.js +0 -137
  387. package/dist/hooks/edit-verification.d.ts +0 -62
  388. package/dist/hooks/edit-verification.js +0 -256
  389. package/dist/hooks/gate-block-helper.d.ts +0 -44
  390. package/dist/hooks/gate-block-helper.js +0 -119
  391. package/dist/hooks/gate.d.ts +0 -24
  392. package/dist/hooks/gate.js +0 -173
  393. package/dist/hooks/gfi-gate.d.ts +0 -40
  394. package/dist/hooks/gfi-gate.js +0 -113
  395. package/dist/hooks/lifecycle.d.ts +0 -5
  396. package/dist/hooks/lifecycle.js +0 -284
  397. package/dist/hooks/llm.d.ts +0 -13
  398. package/dist/hooks/message-sanitize.d.ts +0 -3
  399. package/dist/hooks/message-sanitize.js +0 -37
  400. package/dist/hooks/pain.d.ts +0 -5
  401. package/dist/hooks/pain.js +0 -301
  402. package/dist/hooks/progressive-trust-gate.d.ts +0 -52
  403. package/dist/hooks/progressive-trust-gate.js +0 -134
  404. package/dist/hooks/prompt.d.ts +0 -49
  405. package/dist/hooks/prompt.js +0 -905
  406. package/dist/hooks/subagent.d.ts +0 -10
  407. package/dist/hooks/subagent.js +0 -387
  408. package/dist/hooks/thinking-checkpoint.d.ts +0 -37
  409. package/dist/hooks/thinking-checkpoint.js +0 -51
  410. package/dist/hooks/trajectory-collector.d.ts +0 -32
  411. package/dist/hooks/trajectory-collector.js +0 -256
  412. package/dist/http/principles-console-route.d.ts +0 -9
  413. package/dist/http/principles-console-route.js +0 -681
  414. package/dist/i18n/commands.d.ts +0 -26
  415. package/dist/i18n/commands.js +0 -116
  416. package/dist/index.d.ts +0 -7
  417. package/dist/index.js +0 -581
  418. package/dist/service/central-database.d.ts +0 -104
  419. package/dist/service/central-database.js +0 -649
  420. package/dist/service/control-ui-query-service.d.ts +0 -221
  421. package/dist/service/control-ui-query-service.js +0 -543
  422. package/dist/service/empathy-observer-manager.d.ts +0 -88
  423. package/dist/service/empathy-observer-manager.js +0 -414
  424. package/dist/service/evolution-query-service.d.ts +0 -155
  425. package/dist/service/evolution-query-service.js +0 -258
  426. package/dist/service/evolution-worker.d.ts +0 -101
  427. package/dist/service/evolution-worker.js +0 -975
  428. package/dist/service/health-query-service.d.ts +0 -170
  429. package/dist/service/health-query-service.js +0 -662
  430. package/dist/service/nocturnal-runtime.d.ts +0 -183
  431. package/dist/service/nocturnal-service.d.ts +0 -163
  432. package/dist/service/nocturnal-service.js +0 -787
  433. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  434. package/dist/service/nocturnal-target-selector.js +0 -315
  435. package/dist/service/phase3-input-filter.d.ts +0 -73
  436. package/dist/service/phase3-input-filter.js +0 -172
  437. package/dist/service/runtime-summary-service.d.ts +0 -122
  438. package/dist/service/runtime-summary-service.js +0 -485
  439. package/dist/service/subagent-workflow/empathy-observer-workflow-manager.d.ts +0 -48
  440. package/dist/service/subagent-workflow/index.d.ts +0 -4
  441. package/dist/service/subagent-workflow/index.js +0 -3
  442. package/dist/service/subagent-workflow/runtime-direct-driver.d.ts +0 -77
  443. package/dist/service/subagent-workflow/runtime-direct-driver.js +0 -75
  444. package/dist/service/subagent-workflow/types.js +0 -11
  445. package/dist/service/subagent-workflow/workflow-store.d.ts +0 -26
  446. package/dist/service/subagent-workflow/workflow-store.js +0 -165
  447. package/dist/service/trajectory-service.d.ts +0 -2
  448. package/dist/service/trajectory-service.js +0 -15
  449. package/dist/tools/critique-prompt.d.ts +0 -14
  450. package/dist/tools/deep-reflect.d.ts +0 -39
  451. package/dist/tools/deep-reflect.js +0 -350
  452. package/dist/tools/model-index.d.ts +0 -9
  453. package/dist/types/event-types.d.ts +0 -306
  454. package/dist/types/event-types.js +0 -106
  455. package/dist/types/hygiene-types.d.ts +0 -20
  456. package/dist/types/hygiene-types.js +0 -12
  457. package/dist/types/runtime-summary.d.ts +0 -47
  458. package/dist/types/runtime-summary.js +0 -1
  459. package/dist/types.d.ts +0 -50
  460. package/dist/types.js +0 -22
  461. package/dist/utils/file-lock.d.ts +0 -71
  462. package/dist/utils/file-lock.js +0 -309
  463. package/dist/utils/glob-match.d.ts +0 -28
  464. package/dist/utils/hashing.d.ts +0 -9
  465. package/dist/utils/io.d.ts +0 -6
  466. package/dist/utils/io.js +0 -106
  467. package/dist/utils/nlp.d.ts +0 -9
  468. package/dist/utils/plugin-logger.d.ts +0 -39
  469. package/dist/utils/subagent-probe.d.ts +0 -34
  470. package/dist/utils/subagent-probe.js +0 -81
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Task Compliance Tests
3
+ *
4
+ * Tests the validateTaskCompliance function added in P0 improvement (Pain #671cfd17)
5
+ */
6
+
7
+ import { describe, it, expect } from 'vitest';
8
+
9
+ // Note: The validateTaskCompliance logic was originally in agent-spawn.ts
10
+ // but has been removed. We test the compliance validation logic here.
11
+
12
+ function validateTaskCompliance(task: string): {
13
+ valid: boolean;
14
+ violations: string[];
15
+ warnings: string[];
16
+ } {
17
+ const violations: string[] = [];
18
+ const warnings: string[] = [];
19
+ const taskLower = task.toLowerCase();
20
+
21
+ // 检测"代劳"行为 - 违反"指导优于代劳"原则
22
+ if (taskLower.includes('为他') || taskLower.includes('代替') || taskLower.includes('帮他')) {
23
+ if (!taskLower.includes('指导') && !taskLower.includes('让他自己') && !taskLower.includes('指示')) {
24
+ violations.push(
25
+ '⚠️ 可能违反"指导优于代劳"原则:任务包含"为他/代替/帮他",但没有"指导/让他自己/指示"的表述。' +
26
+ '\n协议要求:优先指导目标智能体自己完成,而非代替执行。'
27
+ );
28
+ }
29
+ }
30
+
31
+ // 检测技能安装/修改操作 - 要求包含验证步骤
32
+ if (taskLower.includes('安装') || taskLower.includes('install') ||
33
+ taskLower.includes('删除') || taskLower.includes('delete') ||
34
+ taskLower.includes('修改') || taskLower.includes('edit') ||
35
+ taskLower.includes('创建') || taskLower.includes('create')) {
36
+ if (!taskLower.includes('验证') && !taskLower.includes('检查') &&
37
+ !taskLower.includes('确认') && !taskLower.includes('verify')) {
38
+ warnings.push(
39
+ '⚠️ 可能缺少"完成性思维":安装/修改操作应该包含"验证/检查/确认"步骤。' +
40
+ '\n协议要求:任务完成 = 执行 + 验证 + 确认'
41
+ );
42
+ }
43
+ }
44
+
45
+ return {
46
+ valid: violations.length === 0,
47
+ violations,
48
+ warnings
49
+ };
50
+ }
51
+
52
+ describe('Task Compliance Validation', () => {
53
+ describe('代劳违规检测', () => {
54
+ it('should detect "代替" without guidance', () => {
55
+ const result = validateTaskCompliance('代替Bridge安装技能X');
56
+ expect(result.valid).toBe(false);
57
+ expect(result.violations.length).toBeGreaterThan(0);
58
+ expect(result.violations[0]).toContain('指导优于代劳');
59
+ });
60
+
61
+ it('should detect "为他" without guidance', () => {
62
+ const result = validateTaskCompliance('为他安装技能X');
63
+ expect(result.valid).toBe(false);
64
+ expect(result.violations.length).toBeGreaterThan(0);
65
+ expect(result.violations[0]).toContain('指导优于代劳');
66
+ });
67
+
68
+ it('should detect "帮他" without guidance', () => {
69
+ const result = validateTaskCompliance('帮他安装技能X');
70
+ expect(result.valid).toBe(false);
71
+ expect(result.violations.length).toBeGreaterThan(0);
72
+ expect(result.violations[0]).toContain('指导优于代劳');
73
+ });
74
+
75
+ it('should allow "代替" with guidance', () => {
76
+ const result = validateTaskCompliance('指导Bridge自己安装技能X,并验证他能正常使用');
77
+ expect(result.valid).toBe(true);
78
+ expect(result.violations.length).toBe(0);
79
+ });
80
+
81
+ it('should allow "让他自己" phrasing', () => {
82
+ const result = validateTaskCompliance('指示他让他自己完成安装');
83
+ expect(result.valid).toBe(true);
84
+ expect(result.violations.length).toBe(0);
85
+ });
86
+ });
87
+
88
+ describe('验证缺失检测', () => {
89
+ it('should warn about "安装" without verification', () => {
90
+ const result = validateTaskCompliance('安装技能X');
91
+ expect(result.warnings.length).toBeGreaterThan(0);
92
+ expect(result.warnings[0]).toContain('完成性思维');
93
+ });
94
+
95
+ it('should warn about "install" without verification', () => {
96
+ const result = validateTaskCompliance('install skill X');
97
+ expect(result.warnings.length).toBeGreaterThan(0);
98
+ expect(result.warnings[0]).toContain('完成性思维');
99
+ });
100
+
101
+ it('should warn about "修改" without verification', () => {
102
+ const result = validateTaskCompliance('修改配置文件');
103
+ expect(result.warnings.length).toBeGreaterThan(0);
104
+ expect(result.warnings[0]).toContain('完成性思维');
105
+ });
106
+
107
+ it('should allow "安装" with verification', () => {
108
+ const result = validateTaskCompliance('安装技能X并验证功能');
109
+ expect(result.warnings.length).toBe(0);
110
+ });
111
+
112
+ it('should allow "修改" with check', () => {
113
+ const result = validateTaskCompliance('修改配置文件并检查结果');
114
+ expect(result.warnings.length).toBe(0);
115
+ });
116
+
117
+ it('should allow "创建" with confirm', () => {
118
+ const result = validateTaskCompliance('创建新文件并确认写入成功');
119
+ expect(result.warnings.length).toBe(0);
120
+ });
121
+ });
122
+
123
+ describe('复合场景', () => {
124
+ it('should detect both violation and warning', () => {
125
+ const result = validateTaskCompliance('代替他安装技能X');
126
+ expect(result.valid).toBe(false);
127
+ expect(result.violations.length).toBeGreaterThan(0);
128
+ expect(result.warnings.length).toBeGreaterThan(0);
129
+ });
130
+
131
+ it('should allow valid guidance task', () => {
132
+ const result = validateTaskCompliance('指导Bridge自己安装技能X,并验证安装成功');
133
+ expect(result.valid).toBe(true);
134
+ expect(result.violations.length).toBe(0);
135
+ expect(result.warnings.length).toBe(0);
136
+ });
137
+
138
+ it('should be valid for non-modification tasks', () => {
139
+ const result = validateTaskCompliance('分析代码结构,找出性能瓶颈');
140
+ expect(result.valid).toBe(true);
141
+ expect(result.violations.length).toBe(0);
142
+ expect(result.warnings.length).toBe(0);
143
+ });
144
+ });
145
+
146
+ describe('边界情况', () => {
147
+ it('should handle empty task', () => {
148
+ const result = validateTaskCompliance('');
149
+ expect(result.valid).toBe(true);
150
+ expect(result.violations.length).toBe(0);
151
+ expect(result.warnings.length).toBe(0);
152
+ });
153
+
154
+ it('should handle case-insensitive detection', () => {
155
+ const result1 = validateTaskCompliance('代替他安装');
156
+ const result2 = validateTaskCompliance('代替他安装');
157
+ expect(result1.valid).toBe(result2.valid);
158
+ });
159
+
160
+ it('should detect mixed language violations', () => {
161
+ const result = validateTaskCompliance('Help him install the skill');
162
+ // English "help him" should not trigger since we only check Chinese keywords
163
+ expect(result.valid).toBe(true); // or adjust if needed
164
+ });
165
+ });
166
+ });
@@ -0,0 +1,48 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { WorkspaceContext } from '../src/core/workspace-context.js';
5
+
6
+ /**
7
+ * Creates a WorkspaceContext for testing purposes.
8
+ * If no workspaceDir is provided, a temporary directory is created.
9
+ */
10
+ export function createTestContext(overrides: { workspaceDir?: string, stateDir?: string } = {}): WorkspaceContext {
11
+ let workspaceDir = overrides.workspaceDir;
12
+
13
+ if (!workspaceDir) {
14
+ workspaceDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-test-'));
15
+ }
16
+
17
+ // Ensure it's absolute
18
+ workspaceDir = path.resolve(workspaceDir);
19
+
20
+ const mockCtx = {
21
+ workspaceDir,
22
+ stateDir: overrides.stateDir
23
+ };
24
+
25
+ // We use fromHookContext but bypass the cache for tests to ensure isolation
26
+ // Actually, clearCache might be better
27
+ WorkspaceContext.clearCache();
28
+ return WorkspaceContext.fromHookContext(mockCtx);
29
+ }
30
+
31
+ /**
32
+ * Safely removes a directory, ignoring Windows EPERM/ENOTEMPTY errors.
33
+ * Windows file locks can cause these errors when file handles are still held.
34
+ * The OS will eventually clean up temp directories, so it's safe to ignore.
35
+ */
36
+ export function safeRmDir(dir: string): void {
37
+ try {
38
+ if (fs.existsSync(dir)) {
39
+ fs.rmSync(dir, { recursive: true, force: true });
40
+ }
41
+ } catch (err: any) {
42
+ // On Windows, ignore EPERM/ENOTEMPTY errors (file handle still held)
43
+ // The OS will clean up temp directories eventually
44
+ if (process.platform !== 'win32' || (err?.code !== 'EPERM' && err?.code !== 'ENOTEMPTY')) {
45
+ throw err;
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,260 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import * as os from 'os';
5
+
6
+ // 导入待测试的函数
7
+ import { buildCritiquePromptV2 } from '../../src/tools/critique-prompt.js';
8
+ import type { OpenClawPluginApi } from '../../src/openclaw-sdk.js';
9
+
10
+ describe('buildCritiquePromptV2', () => {
11
+ let tempDir: string;
12
+ let mockApi: OpenClawPluginApi;
13
+
14
+ beforeEach(() => {
15
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'critique-prompt-test-'));
16
+
17
+ mockApi = {
18
+ id: "test-plugin",
19
+ name: "Test Plugin",
20
+ source: "local",
21
+ config: {},
22
+ runtime: {} as any,
23
+ logger: {
24
+ info: vi.fn(),
25
+ error: vi.fn(),
26
+ warn: vi.fn(),
27
+ debug: vi.fn(),
28
+ },
29
+ registerTool: vi.fn(),
30
+ registerHook: vi.fn(),
31
+ registerHttpRoute: vi.fn(),
32
+ registerChannel: vi.fn(),
33
+ registerGatewayMethod: vi.fn(),
34
+ registerCli: vi.fn(),
35
+ registerService: vi.fn(),
36
+ registerProvider: vi.fn(),
37
+ registerCommand: vi.fn(),
38
+ resolvePath: vi.fn(),
39
+ on: vi.fn(),
40
+ } as unknown as OpenClawPluginApi;
41
+ });
42
+
43
+ afterEach(() => {
44
+ fs.rmSync(tempDir, { recursive: true, force: true });
45
+ });
46
+
47
+ describe('基本结构', () => {
48
+ it('应包含 "Critical Analysis Engine" 标识', () => {
49
+ const result = buildCritiquePromptV2({
50
+ context: '测试上下文',
51
+ workspaceDir: tempDir,
52
+ });
53
+
54
+ expect(result).toContain('Critical Analysis Engine');
55
+ });
56
+
57
+ it('应包含用户上下文', () => {
58
+ const result = buildCritiquePromptV2({
59
+ context: '这是一个关于营销策略的计划',
60
+ workspaceDir: tempDir,
61
+ });
62
+
63
+ expect(result).toContain('这是一个关于营销策略的计划');
64
+ });
65
+ });
66
+
67
+ describe('元认知模型说明', () => {
68
+ it('应说明元认知模型已继承,不应重复列出 T-01 到 T-09', () => {
69
+ const result = buildCritiquePromptV2({
70
+ context: '测试',
71
+ workspaceDir: tempDir,
72
+ });
73
+
74
+ // 应包含继承说明
75
+ expect(result).toContain('Meta-Cognitive Models');
76
+ expect(result).toContain('inherited');
77
+ expect(result).toContain('thinking_os');
78
+
79
+ // 不应重复列出具体的元认知模型
80
+ expect(result).not.toContain('T-01: Map Before Territory');
81
+ expect(result).not.toContain('T-02: Constraints as Lighthouses');
82
+ expect(result).not.toContain('T-09: Divide and Conquer');
83
+ });
84
+ });
85
+
86
+ describe('模型选择指南', () => {
87
+ it('应包含 Step 1/2/3 选择指南', () => {
88
+ const result = buildCritiquePromptV2({
89
+ context: '测试',
90
+ workspaceDir: tempDir,
91
+ });
92
+
93
+ expect(result).toContain('Model Selection Guidelines');
94
+ expect(result).toContain('Step 1');
95
+ expect(result).toContain('Step 2');
96
+ expect(result).toContain('Step 3');
97
+ });
98
+
99
+ it('Step 1 应包含任务类型判断指导', () => {
100
+ const result = buildCritiquePromptV2({
101
+ context: '测试',
102
+ workspaceDir: tempDir,
103
+ });
104
+
105
+ expect(result).toContain('general planning');
106
+ expect(result).toContain('domain-specific');
107
+ });
108
+
109
+ it('Step 3 应包含 Fallback 说明', () => {
110
+ const result = buildCritiquePromptV2({
111
+ context: '测试',
112
+ workspaceDir: tempDir,
113
+ });
114
+
115
+ expect(result).toContain('Fallback');
116
+ expect(result).toContain('Meta-Cognitive Models');
117
+ });
118
+ });
119
+
120
+ describe('模型索引注入', () => {
121
+ it('当有索引文件时,应注入索引内容', () => {
122
+ const modelsDir = path.join(tempDir, '.principles', 'models');
123
+ fs.mkdirSync(modelsDir, { recursive: true });
124
+
125
+ const indexContent = `# 扩展思维模型索引
126
+
127
+ | ID | 名称 | 适用场景 |
128
+ |----|------|----------|
129
+ | MARKETING_4P | 营销4P | 营销策略 |
130
+ `;
131
+ fs.writeFileSync(path.join(modelsDir, '_INDEX.md'), indexContent);
132
+
133
+ const result = buildCritiquePromptV2({
134
+ context: '测试',
135
+ workspaceDir: tempDir,
136
+ });
137
+
138
+ expect(result).toContain('Domain-Specific Models');
139
+ expect(result).toContain('MARKETING_4P');
140
+ });
141
+
142
+ it('当无索引文件时,应显示默认消息', () => {
143
+ const result = buildCritiquePromptV2({
144
+ context: '测试',
145
+ workspaceDir: tempDir,
146
+ });
147
+
148
+ expect(result).toContain('暂无扩展思维模型');
149
+ });
150
+ });
151
+
152
+ describe('深度指令', () => {
153
+ it('depth=1 时应使用轻量分析指令', () => {
154
+ const result = buildCritiquePromptV2({
155
+ context: '测试',
156
+ workspaceDir: tempDir,
157
+ depth: 1,
158
+ });
159
+
160
+ expect(result).toContain('quick');
161
+ });
162
+
163
+ it('depth=2 时应使用平衡分析指令', () => {
164
+ const result = buildCritiquePromptV2({
165
+ context: '测试',
166
+ workspaceDir: tempDir,
167
+ depth: 2,
168
+ });
169
+
170
+ expect(result).toContain('balanced');
171
+ });
172
+
173
+ it('depth=3 时应使用详尽分析指令', () => {
174
+ const result = buildCritiquePromptV2({
175
+ context: '测试',
176
+ workspaceDir: tempDir,
177
+ depth: 3,
178
+ });
179
+
180
+ expect(result).toContain('thorough');
181
+ });
182
+
183
+ it('默认 depth 应为 2', () => {
184
+ const result = buildCritiquePromptV2({
185
+ context: '测试',
186
+ workspaceDir: tempDir,
187
+ // 不指定 depth
188
+ });
189
+
190
+ expect(result).toContain('balanced');
191
+ });
192
+ });
193
+
194
+ describe('深度边界值验证', () => {
195
+ it('depth=0 时应 fallback 到 2 并输出警告', () => {
196
+ const result = buildCritiquePromptV2({
197
+ context: '测试',
198
+ workspaceDir: tempDir,
199
+ depth: 0,
200
+ api: mockApi,
201
+ });
202
+
203
+ expect(result).toContain('balanced');
204
+ expect(mockApi.logger!.warn).toHaveBeenCalledWith(
205
+ expect.stringContaining('Invalid depth value 0')
206
+ );
207
+ });
208
+
209
+ it('depth=4 时应 fallback 到 2 并输出警告', () => {
210
+ const result = buildCritiquePromptV2({
211
+ context: '测试',
212
+ workspaceDir: tempDir,
213
+ depth: 4,
214
+ api: mockApi,
215
+ });
216
+
217
+ expect(result).toContain('balanced');
218
+ expect(mockApi.logger!.warn).toHaveBeenCalledWith(
219
+ expect.stringContaining('Invalid depth value 4')
220
+ );
221
+ });
222
+
223
+ it('depth=-1 时应 fallback 到 2', () => {
224
+ const result = buildCritiquePromptV2({
225
+ context: '测试',
226
+ workspaceDir: tempDir,
227
+ depth: -1,
228
+ api: mockApi,
229
+ });
230
+
231
+ expect(result).toContain('balanced');
232
+ });
233
+
234
+ it('depth=999 时应 fallback 到 2', () => {
235
+ const result = buildCritiquePromptV2({
236
+ context: '测试',
237
+ workspaceDir: tempDir,
238
+ depth: 999,
239
+ api: mockApi,
240
+ });
241
+
242
+ expect(result).toContain('balanced');
243
+ });
244
+ });
245
+
246
+ describe('输出结构', () => {
247
+ it('应包含要求的输出结构', () => {
248
+ const result = buildCritiquePromptV2({
249
+ context: '测试',
250
+ workspaceDir: tempDir,
251
+ });
252
+
253
+ expect(result).toContain('Blind Spots');
254
+ expect(result).toContain('Risk Warnings');
255
+ expect(result).toContain('Alternative Approaches');
256
+ expect(result).toContain('Recommendations');
257
+ expect(result).toContain('Confidence Level');
258
+ });
259
+ });
260
+ });