principles-disciple 1.8.0 → 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 (460) 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 +6 -1
  10. package/package.json +13 -15
  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} +185 -63
  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} +166 -139
  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} +263 -36
  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/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
  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/src/service/subagent-workflow/types.ts +378 -0
  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 -127
  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 -99
  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 -12
  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 -51
  403. package/dist/hooks/progressive-trust-gate.js +0 -89
  404. package/dist/hooks/prompt.d.ts +0 -47
  405. package/dist/hooks/prompt.js +0 -884
  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 -567
  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 -52
  423. package/dist/service/empathy-observer-manager.js +0 -229
  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 -974
  428. package/dist/service/nocturnal-runtime.d.ts +0 -183
  429. package/dist/service/nocturnal-service.d.ts +0 -163
  430. package/dist/service/nocturnal-service.js +0 -787
  431. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  432. package/dist/service/nocturnal-target-selector.js +0 -315
  433. package/dist/service/phase3-input-filter.d.ts +0 -73
  434. package/dist/service/phase3-input-filter.js +0 -172
  435. package/dist/service/runtime-summary-service.d.ts +0 -122
  436. package/dist/service/runtime-summary-service.js +0 -485
  437. package/dist/service/trajectory-service.d.ts +0 -2
  438. package/dist/service/trajectory-service.js +0 -15
  439. package/dist/tools/critique-prompt.d.ts +0 -14
  440. package/dist/tools/deep-reflect.d.ts +0 -39
  441. package/dist/tools/deep-reflect.js +0 -350
  442. package/dist/tools/model-index.d.ts +0 -9
  443. package/dist/types/event-types.d.ts +0 -306
  444. package/dist/types/event-types.js +0 -106
  445. package/dist/types/hygiene-types.d.ts +0 -20
  446. package/dist/types/hygiene-types.js +0 -12
  447. package/dist/types/runtime-summary.d.ts +0 -47
  448. package/dist/types/runtime-summary.js +0 -1
  449. package/dist/types.d.ts +0 -50
  450. package/dist/types.js +0 -22
  451. package/dist/utils/file-lock.d.ts +0 -71
  452. package/dist/utils/file-lock.js +0 -309
  453. package/dist/utils/glob-match.d.ts +0 -28
  454. package/dist/utils/hashing.d.ts +0 -9
  455. package/dist/utils/io.d.ts +0 -6
  456. package/dist/utils/io.js +0 -106
  457. package/dist/utils/nlp.d.ts +0 -9
  458. package/dist/utils/plugin-logger.d.ts +0 -39
  459. package/dist/utils/subagent-probe.d.ts +0 -34
  460. package/dist/utils/subagent-probe.js +0 -81
@@ -1,543 +0,0 @@
1
- import { ControlUiDatabase } from '../core/control-ui-db.js';
2
- import { getThinkingModel, listThinkingModels } from '../core/thinking-models.js';
3
- import { WorkspaceContext } from '../core/workspace-context.js';
4
- /** Time window (in minutes) for querying principle events related to a sample */
5
- const PRINCIPLE_EVENT_WINDOW_MINUTES = 10;
6
- function parseJson(raw, fallback) {
7
- if (!raw)
8
- return fallback;
9
- try {
10
- return JSON.parse(raw);
11
- }
12
- catch {
13
- return fallback;
14
- }
15
- }
16
- function roundRate(numerator, denominator) {
17
- if (!denominator)
18
- return 0;
19
- return Number((numerator / denominator).toFixed(4));
20
- }
21
- function clampPageSize(input) {
22
- if (!Number.isFinite(input))
23
- return 20;
24
- return Math.min(100, Math.max(1, Number(input)));
25
- }
26
- function summarizeRecommendation(model) {
27
- if (model.hits === 0)
28
- return 'archive';
29
- if (model.failureRate > model.successRate || model.correctionRate >= 0.35 || model.painRate >= 0.3) {
30
- return 'rework';
31
- }
32
- return 'reinforce';
33
- }
34
- export class ControlUiQueryService {
35
- workspaceDir;
36
- trajectory;
37
- uiDb;
38
- constructor(workspaceDir) {
39
- this.workspaceDir = workspaceDir;
40
- this.trajectory = WorkspaceContext.fromHookContext({ workspaceDir }).trajectory;
41
- this.uiDb = new ControlUiDatabase({ workspaceDir });
42
- }
43
- dispose() {
44
- this.uiDb.dispose();
45
- }
46
- getOverview(days = 30) {
47
- const stats = this.trajectory.getDataStats();
48
- const regressionRows = this.uiDb.all('SELECT tool_name, error_type, occurrences FROM v_error_clusters ORDER BY occurrences DESC LIMIT 5');
49
- const failureStats = this.uiDb.get(`
50
- SELECT
51
- COALESCE(SUM(occurrences), 0) AS total_failures,
52
- COALESCE(SUM(CASE WHEN occurrences > 1 THEN occurrences ELSE 0 END), 0) AS repeated_failures
53
- FROM v_error_clusters
54
- `) ?? { total_failures: 0, repeated_failures: 0 };
55
- const correctionTotal = this.uiDb.get('SELECT COUNT(*) AS count FROM user_turns WHERE correction_detected = 1')?.count ?? 0;
56
- const principleEventCount = this.uiDb.get('SELECT COUNT(*) AS count FROM principle_events')?.count ?? 0;
57
- const gateBlockCount = this.uiDb.get('SELECT COUNT(*) AS count FROM gate_blocks')?.count ?? 0;
58
- const taskOutcomeCount = this.uiDb.get('SELECT COUNT(*) AS count FROM task_outcomes')?.count ?? 0;
59
- const sampleCounters = this.uiDb.all('SELECT review_status, total FROM v_sample_queue');
60
- const samplePreview = this.uiDb.all(`
61
- SELECT sample_id, session_id, quality_score, review_status, created_at
62
- FROM correction_samples
63
- ORDER BY created_at DESC
64
- LIMIT 5
65
- `);
66
- const coverageRow = this.uiDb.get(`
67
- SELECT
68
- COUNT(DISTINCT assistant_turn_id) AS thinking_turns,
69
- (SELECT COUNT(*) FROM assistant_turns) AS assistant_turns
70
- FROM thinking_model_events
71
- `) ?? { thinking_turns: 0, assistant_turns: 0 };
72
- const effectiveCount = this.uiDb.all('SELECT events, success_windows, failure_windows, pain_windows, correction_windows FROM v_thinking_model_effectiveness')
73
- .filter((row) => summarizeRecommendation({
74
- hits: Number(row.events),
75
- successRate: roundRate(Number(row.success_windows), Number(row.events)),
76
- failureRate: roundRate(Number(row.failure_windows), Number(row.events)),
77
- painRate: roundRate(Number(row.pain_windows), Number(row.events)),
78
- correctionRate: roundRate(Number(row.correction_windows), Number(row.events)),
79
- }) === 'reinforce').length;
80
- const dailyTrend = this.uiDb.all(`
81
- WITH thinking_daily AS (
82
- SELECT substr(created_at, 1, 10) AS day, COUNT(DISTINCT assistant_turn_id) AS thinking_turns
83
- FROM thinking_model_events
84
- GROUP BY substr(created_at, 1, 10)
85
- )
86
- SELECT
87
- dm.day AS day,
88
- dm.tool_calls AS tool_calls,
89
- dm.failures AS failures,
90
- dm.user_corrections AS user_corrections,
91
- COALESCE(td.thinking_turns, 0) AS thinking_turns
92
- FROM v_daily_metrics dm
93
- LEFT JOIN thinking_daily td ON td.day = dm.day
94
- ORDER BY dm.day DESC
95
- LIMIT ?
96
- `, days).reverse();
97
- const counters = Object.fromEntries(sampleCounters.map((row) => [row.review_status, Number(row.total)]));
98
- const activeModels = this.uiDb.get('SELECT COUNT(DISTINCT model_id) AS count FROM thinking_model_events')?.count ?? 0;
99
- return {
100
- workspaceDir: this.workspaceDir,
101
- generatedAt: new Date().toISOString(),
102
- dataFreshness: stats.lastIngestAt,
103
- dataSource: 'trajectory_db_analytics',
104
- runtimeControlPlaneSource: 'pd_evolution_status',
105
- summary: {
106
- repeatErrorRate: roundRate(Number(failureStats.repeated_failures), Number(failureStats.total_failures)),
107
- userCorrectionRate: roundRate(correctionTotal, stats.userTurns),
108
- pendingSamples: stats.pendingSamples,
109
- approvedSamples: stats.approvedSamples,
110
- thinkingCoverageRate: roundRate(coverageRow.thinking_turns, coverageRow.assistant_turns),
111
- painEvents: stats.painEvents,
112
- principleEventCount,
113
- gateBlocks: Number(gateBlockCount),
114
- taskOutcomes: Number(taskOutcomeCount),
115
- },
116
- dailyTrend: dailyTrend.map((row) => ({
117
- day: row.day,
118
- toolCalls: Number(row.tool_calls),
119
- failures: Number(row.failures),
120
- userCorrections: Number(row.user_corrections),
121
- thinkingTurns: Number(row.thinking_turns),
122
- })),
123
- topRegressions: regressionRows.map((row) => ({
124
- toolName: row.tool_name,
125
- errorType: row.error_type,
126
- occurrences: Number(row.occurrences),
127
- })),
128
- sampleQueue: {
129
- counters,
130
- preview: samplePreview.map((row) => ({
131
- sampleId: row.sample_id,
132
- sessionId: row.session_id,
133
- qualityScore: Number(row.quality_score),
134
- reviewStatus: row.review_status,
135
- createdAt: row.created_at,
136
- })),
137
- },
138
- thinkingSummary: {
139
- activeModels,
140
- dormantModels: Math.max(0, listThinkingModels().length - activeModels),
141
- effectiveModels: effectiveCount,
142
- coverageRate: roundRate(coverageRow.thinking_turns, coverageRow.assistant_turns),
143
- },
144
- };
145
- }
146
- listSamples(filters = {}) {
147
- const page = Math.max(1, Number(filters.page ?? 1));
148
- const pageSize = clampPageSize(filters.pageSize);
149
- const offset = (page - 1) * pageSize;
150
- const where = [];
151
- const params = [];
152
- if (filters.status && filters.status !== 'all') {
153
- where.push('cs.review_status = ?');
154
- params.push(filters.status);
155
- }
156
- if (Number.isFinite(filters.qualityMin)) {
157
- where.push('cs.quality_score >= ?');
158
- params.push(Number(filters.qualityMin));
159
- }
160
- if (filters.dateFrom) {
161
- where.push('cs.created_at >= ?');
162
- params.push(filters.dateFrom);
163
- }
164
- if (filters.dateTo) {
165
- where.push('cs.created_at <= ?');
166
- params.push(filters.dateTo);
167
- }
168
- if (filters.failureMode) {
169
- where.push(`
170
- COALESCE(
171
- (
172
- SELECT COALESCE(tc.error_type, tc.tool_name)
173
- FROM tool_calls tc
174
- WHERE tc.session_id = cs.session_id
175
- AND tc.outcome = 'failure'
176
- AND tc.created_at <= ut.created_at
177
- ORDER BY tc.created_at DESC
178
- LIMIT 1
179
- ),
180
- 'unknown'
181
- ) = ?
182
- `);
183
- params.push(filters.failureMode);
184
- }
185
- const whereClause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
186
- const total = Number(this.uiDb.get(`
187
- SELECT COUNT(*) AS count
188
- FROM correction_samples cs
189
- JOIN user_turns ut ON ut.id = cs.user_correction_turn_id
190
- ${whereClause}
191
- `, ...params)?.count ?? 0);
192
- const items = this.uiDb.all(`
193
- SELECT
194
- cs.sample_id,
195
- cs.session_id,
196
- cs.review_status,
197
- cs.quality_score,
198
- cs.created_at,
199
- cs.updated_at,
200
- cs.diff_excerpt,
201
- COALESCE(
202
- (
203
- SELECT COALESCE(tc.error_type, tc.tool_name)
204
- FROM tool_calls tc
205
- WHERE tc.session_id = cs.session_id
206
- AND tc.outcome = 'failure'
207
- AND tc.created_at <= ut.created_at
208
- ORDER BY tc.created_at DESC
209
- LIMIT 1
210
- ),
211
- 'unknown'
212
- ) AS failure_mode,
213
- (
214
- SELECT COUNT(*)
215
- FROM thinking_model_events tme
216
- JOIN assistant_turns at2 ON at2.id = cs.bad_assistant_turn_id
217
- WHERE tme.session_id = cs.session_id
218
- AND tme.created_at >= at2.created_at
219
- AND tme.created_at <= ut.created_at
220
- ) AS related_thinking_count
221
- FROM correction_samples cs
222
- JOIN user_turns ut ON ut.id = cs.user_correction_turn_id
223
- ${whereClause}
224
- ORDER BY cs.created_at DESC
225
- LIMIT ? OFFSET ?
226
- `, ...params, pageSize, offset);
227
- const counters = this.uiDb.all(`
228
- SELECT review_status, COUNT(*) AS count
229
- FROM correction_samples
230
- GROUP BY review_status
231
- `);
232
- return {
233
- counters: Object.fromEntries(counters.map((row) => [row.review_status, Number(row.count)])),
234
- items: items.map((row) => ({
235
- sampleId: row.sample_id,
236
- sessionId: row.session_id,
237
- reviewStatus: row.review_status,
238
- qualityScore: Number(row.quality_score),
239
- failureMode: row.failure_mode,
240
- relatedThinkingCount: Number(row.related_thinking_count),
241
- createdAt: row.created_at,
242
- updatedAt: row.updated_at,
243
- diffExcerpt: row.diff_excerpt,
244
- })),
245
- pagination: {
246
- page,
247
- pageSize,
248
- total,
249
- totalPages: total === 0 ? 0 : Math.ceil(total / pageSize),
250
- },
251
- };
252
- }
253
- getSampleDetail(sampleId) {
254
- const row = this.uiDb.get(`
255
- SELECT
256
- cs.sample_id,
257
- cs.session_id,
258
- cs.review_status,
259
- cs.quality_score,
260
- cs.created_at,
261
- cs.updated_at,
262
- cs.recovery_tool_span_json,
263
- cs.principle_ids_json,
264
- at.id AS bad_turn_id,
265
- at.raw_text AS bad_raw_text,
266
- at.blob_ref AS bad_blob_ref,
267
- at.sanitized_text AS bad_sanitized_text,
268
- at.created_at AS bad_created_at,
269
- ut.id AS user_turn_id,
270
- ut.raw_text AS user_raw_text,
271
- ut.blob_ref AS user_blob_ref,
272
- ut.correction_cue AS user_correction_cue,
273
- ut.created_at AS user_created_at
274
- FROM correction_samples cs
275
- JOIN assistant_turns at ON at.id = cs.bad_assistant_turn_id
276
- JOIN user_turns ut ON ut.id = cs.user_correction_turn_id
277
- WHERE cs.sample_id = ?
278
- `, sampleId);
279
- if (!row)
280
- return null;
281
- const reviewHistory = this.uiDb.all(`
282
- SELECT review_status, note, created_at
283
- FROM sample_reviews
284
- WHERE sample_id = ?
285
- ORDER BY created_at DESC
286
- `, sampleId);
287
- const relatedThinkingHits = this.uiDb.all(`
288
- SELECT id, model_id, matched_pattern, scenario_json, created_at, trigger_excerpt
289
- FROM thinking_model_events
290
- WHERE session_id = ?
291
- AND created_at >= ?
292
- AND created_at <= ?
293
- ORDER BY created_at DESC
294
- LIMIT 20
295
- `, row.session_id, row.bad_created_at, row.user_created_at);
296
- const relatedPrinciples = this.uiDb.all(`
297
- SELECT principle_id, event_type, created_at
298
- FROM principle_events
299
- WHERE created_at >= ?
300
- AND created_at <= datetime(?, '+' || ? || ' minutes')
301
- ORDER BY created_at DESC
302
- LIMIT 20
303
- `, row.bad_created_at, row.user_created_at, PRINCIPLE_EVENT_WINDOW_MINUTES);
304
- const seededPrincipleIds = parseJson(row.principle_ids_json, []).map((principleId) => ({
305
- principleId,
306
- eventType: 'seeded_from_sample',
307
- createdAt: row.created_at,
308
- }));
309
- return {
310
- sampleId: row.sample_id,
311
- sessionId: row.session_id,
312
- reviewStatus: row.review_status,
313
- qualityScore: Number(row.quality_score),
314
- createdAt: row.created_at,
315
- updatedAt: row.updated_at,
316
- badAttempt: {
317
- assistantTurnId: Number(row.bad_turn_id),
318
- rawText: this.uiDb.restoreRawText(row.bad_raw_text, row.bad_blob_ref),
319
- sanitizedText: row.bad_sanitized_text,
320
- createdAt: row.bad_created_at,
321
- },
322
- userCorrection: {
323
- userTurnId: Number(row.user_turn_id),
324
- rawText: this.uiDb.restoreRawText(row.user_raw_text, row.user_blob_ref),
325
- correctionCue: row.user_correction_cue,
326
- createdAt: row.user_created_at,
327
- },
328
- recoveryToolSpan: parseJson(row.recovery_tool_span_json, []),
329
- relatedPrinciples: [
330
- ...seededPrincipleIds,
331
- ...relatedPrinciples.map((item) => ({
332
- principleId: item.principle_id,
333
- eventType: item.event_type,
334
- createdAt: item.created_at,
335
- })),
336
- ],
337
- relatedThinkingHits: relatedThinkingHits.map((item) => ({
338
- id: Number(item.id),
339
- modelId: item.model_id,
340
- modelName: getThinkingModel(item.model_id)?.name ?? item.model_id,
341
- matchedPattern: item.matched_pattern,
342
- scenarios: parseJson(item.scenario_json, []),
343
- createdAt: item.created_at,
344
- triggerExcerpt: item.trigger_excerpt,
345
- })),
346
- reviewHistory: reviewHistory.map((item) => ({
347
- reviewStatus: item.review_status,
348
- note: item.note,
349
- createdAt: item.created_at,
350
- })),
351
- };
352
- }
353
- reviewSample(sampleId, decision, note) {
354
- return this.trajectory.reviewCorrectionSample(sampleId, decision, note);
355
- }
356
- exportCorrections(mode) {
357
- return this.trajectory.exportCorrections({ mode, approvedOnly: true });
358
- }
359
- getThinkingOverview() {
360
- const topModels = this.loadThinkingModelSummaries();
361
- const knownModels = listThinkingModels();
362
- const activeIds = new Set(topModels.filter((model) => model.hits > 0).map((model) => model.modelId));
363
- const dormantModels = knownModels
364
- .filter((model) => !activeIds.has(model.id))
365
- .map((model) => ({
366
- modelId: model.id,
367
- name: model.name,
368
- description: model.description,
369
- }));
370
- const coverageRow = this.uiDb.get(`
371
- SELECT
372
- COUNT(DISTINCT assistant_turn_id) AS thinking_turns,
373
- (SELECT COUNT(*) FROM assistant_turns) AS assistant_turns
374
- FROM thinking_model_events
375
- `) ?? { thinking_turns: 0, assistant_turns: 0 };
376
- const coverageTrend = this.uiDb.all(`
377
- WITH assistant_daily AS (
378
- SELECT substr(created_at, 1, 10) AS day, COUNT(*) AS assistant_turns
379
- FROM assistant_turns
380
- GROUP BY substr(created_at, 1, 10)
381
- ),
382
- thinking_daily AS (
383
- SELECT substr(created_at, 1, 10) AS day, COUNT(DISTINCT assistant_turn_id) AS thinking_turns
384
- FROM thinking_model_events
385
- GROUP BY substr(created_at, 1, 10)
386
- )
387
- SELECT
388
- assistant_daily.day AS day,
389
- assistant_daily.assistant_turns AS assistant_turns,
390
- COALESCE(thinking_daily.thinking_turns, 0) AS thinking_turns
391
- FROM assistant_daily
392
- LEFT JOIN thinking_daily ON thinking_daily.day = assistant_daily.day
393
- ORDER BY assistant_daily.day ASC
394
- `);
395
- const scenarioMatrix = this.uiDb.all('SELECT model_id, scenario, hits FROM v_thinking_model_scenarios ORDER BY hits DESC, model_id ASC');
396
- return {
397
- summary: {
398
- totalModels: knownModels.length,
399
- activeModels: activeIds.size,
400
- dormantModels: dormantModels.length,
401
- effectiveModels: topModels.filter((model) => model.recommendation === 'reinforce').length,
402
- coverageRate: roundRate(coverageRow.thinking_turns, coverageRow.assistant_turns),
403
- },
404
- topModels,
405
- dormantModels,
406
- effectiveModels: topModels.filter((model) => model.recommendation === 'reinforce'),
407
- scenarioMatrix: scenarioMatrix.map((row) => ({
408
- modelId: row.model_id,
409
- modelName: getThinkingModel(row.model_id)?.name ?? row.model_id,
410
- scenario: row.scenario,
411
- hits: Number(row.hits),
412
- })),
413
- coverageTrend: coverageTrend.map((row) => ({
414
- day: row.day,
415
- assistantTurns: Number(row.assistant_turns),
416
- thinkingTurns: Number(row.thinking_turns),
417
- coverageRate: roundRate(Number(row.thinking_turns), Number(row.assistant_turns)),
418
- })),
419
- };
420
- }
421
- getThinkingModelDetail(modelId) {
422
- if (!getThinkingModel(modelId)) {
423
- return null;
424
- }
425
- const summary = this.loadThinkingModelSummaries().find((item) => item.modelId === modelId) ?? {
426
- modelId,
427
- name: getThinkingModel(modelId)?.name ?? modelId,
428
- description: getThinkingModel(modelId)?.description ?? 'Unknown thinking model.',
429
- hits: 0,
430
- coverageRate: 0,
431
- successRate: 0,
432
- failureRate: 0,
433
- painRate: 0,
434
- correctionRate: 0,
435
- correctionSampleRate: 0,
436
- commonScenarios: [],
437
- recommendation: 'archive',
438
- };
439
- const usageTrend = this.uiDb.all(`
440
- SELECT day, hits
441
- FROM v_thinking_model_daily_trend
442
- WHERE model_id = ?
443
- ORDER BY day ASC
444
- `, modelId);
445
- const scenarioDistribution = this.uiDb.all(`
446
- SELECT scenario, hits
447
- FROM v_thinking_model_scenarios
448
- WHERE model_id = ?
449
- ORDER BY hits DESC, scenario ASC
450
- `, modelId);
451
- const effect = this.uiDb.get('SELECT * FROM v_thinking_model_effectiveness WHERE model_id = ?', modelId) ?? {
452
- events: 0,
453
- success_windows: 0,
454
- failure_windows: 0,
455
- pain_windows: 0,
456
- correction_windows: 0,
457
- correction_sample_windows: 0,
458
- };
459
- const recentEvents = this.uiDb.all(`
460
- SELECT id, created_at, matched_pattern, scenario_json, trigger_excerpt,
461
- tool_context_json, pain_context_json, principle_context_json
462
- FROM thinking_model_events
463
- WHERE model_id = ?
464
- ORDER BY created_at DESC
465
- LIMIT 20
466
- `, modelId);
467
- return {
468
- modelMeta: {
469
- modelId: summary.modelId,
470
- name: summary.name,
471
- description: summary.description,
472
- hits: summary.hits,
473
- coverageRate: summary.coverageRate,
474
- recommendation: summary.recommendation,
475
- },
476
- usageTrend: usageTrend.map((row) => ({
477
- day: row.day,
478
- hits: Number(row.hits),
479
- })),
480
- scenarioDistribution: scenarioDistribution.map((row) => ({
481
- scenario: row.scenario,
482
- hits: Number(row.hits),
483
- })),
484
- outcomeStats: {
485
- events: Number(effect.events),
486
- successRate: roundRate(Number(effect.success_windows), Number(effect.events)),
487
- failureRate: roundRate(Number(effect.failure_windows), Number(effect.events)),
488
- painRate: roundRate(Number(effect.pain_windows), Number(effect.events)),
489
- correctionRate: roundRate(Number(effect.correction_windows), Number(effect.events)),
490
- correctionSampleRate: roundRate(Number(effect.correction_sample_windows), Number(effect.events)),
491
- },
492
- recentEvents: recentEvents.map((row) => ({
493
- id: Number(row.id),
494
- createdAt: row.created_at,
495
- matchedPattern: row.matched_pattern,
496
- scenarios: parseJson(row.scenario_json, []),
497
- triggerExcerpt: row.trigger_excerpt,
498
- toolContext: parseJson(row.tool_context_json, []),
499
- painContext: parseJson(row.pain_context_json, []),
500
- principleContext: parseJson(row.principle_context_json, []),
501
- })),
502
- };
503
- }
504
- loadThinkingModelSummaries() {
505
- const knownModels = listThinkingModels();
506
- const usageRows = new Map(this.uiDb.all('SELECT model_id, hits, coverage_rate FROM v_thinking_model_usage').map((row) => [row.model_id, row]));
507
- const effectRows = new Map(this.uiDb.all('SELECT * FROM v_thinking_model_effectiveness').map((row) => [row.model_id, row]));
508
- const scenarioRows = this.uiDb.all('SELECT model_id, scenario, hits FROM v_thinking_model_scenarios ORDER BY hits DESC');
509
- return knownModels.map((model) => {
510
- const usage = usageRows.get(model.id);
511
- const effect = effectRows.get(model.id);
512
- const events = Number(effect?.events ?? usage?.hits ?? 0);
513
- const successRate = roundRate(Number(effect?.success_windows ?? 0), events);
514
- const failureRate = roundRate(Number(effect?.failure_windows ?? 0), events);
515
- const painRate = roundRate(Number(effect?.pain_windows ?? 0), events);
516
- const correctionRate = roundRate(Number(effect?.correction_windows ?? 0), events);
517
- const correctionSampleRate = roundRate(Number(effect?.correction_sample_windows ?? 0), events);
518
- return {
519
- modelId: model.id,
520
- name: model.name,
521
- description: model.description,
522
- hits: Number(usage?.hits ?? 0),
523
- coverageRate: Number(usage?.coverage_rate ?? 0),
524
- successRate,
525
- failureRate,
526
- painRate,
527
- correctionRate,
528
- correctionSampleRate,
529
- commonScenarios: scenarioRows
530
- .filter((row) => row.model_id === model.id)
531
- .slice(0, 3)
532
- .map((row) => row.scenario),
533
- recommendation: summarizeRecommendation({
534
- hits: Number(usage?.hits ?? 0),
535
- successRate,
536
- failureRate,
537
- painRate,
538
- correctionRate,
539
- }),
540
- };
541
- }).sort((left, right) => right.hits - left.hits || left.modelId.localeCompare(right.modelId));
542
- }
543
- }
@@ -1,52 +0,0 @@
1
- import type { PluginLogger } from '../openclaw-sdk.js';
2
- export interface EmpathyObserverApi {
3
- config?: {
4
- empathy_engine?: {
5
- enabled?: boolean;
6
- };
7
- };
8
- runtime: {
9
- subagent: {
10
- run: (params: {
11
- sessionKey: string;
12
- message: string;
13
- lane?: string;
14
- deliver?: boolean;
15
- idempotencyKey?: string;
16
- }) => Promise<unknown>;
17
- getSessionMessages: (params: {
18
- sessionKey: string;
19
- limit?: number;
20
- }) => Promise<{
21
- messages: unknown[];
22
- assistantTexts?: string[];
23
- }>;
24
- };
25
- };
26
- logger: PluginLogger;
27
- }
28
- export declare class EmpathyObserverManager {
29
- private static instance;
30
- private sessionLocks;
31
- private constructor();
32
- static getInstance(): EmpathyObserverManager;
33
- /**
34
- * Probe whether the subagent runtime is actually functional.
35
- * api.runtime.subagent always exists (it's a Proxy), but in embedded mode
36
- * every method throws "only available during a gateway request".
37
- * We cache the result to avoid repeated probing.
38
- */
39
- private subagentAvailableCache;
40
- private isSubagentAvailable;
41
- shouldTrigger(api: EmpathyObserverApi | null | undefined, sessionId: string): boolean;
42
- spawn(api: EmpathyObserverApi | null | undefined, sessionId: string, userMessage: string): Promise<string | null>;
43
- reap(api: EmpathyObserverApi | null | undefined, targetSessionKey: string, workspaceDir: string): Promise<void>;
44
- private isObserverSession;
45
- private extractParentSessionId;
46
- private parseJsonPayload;
47
- private extractAssistantText;
48
- private scoreFromSeverity;
49
- private normalizeSeverity;
50
- private normalizeConfidence;
51
- }
52
- export declare const empathyObserverManager: EmpathyObserverManager;