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
@@ -1,414 +0,0 @@
1
- import { WorkspaceContext } from '../core/workspace-context.js';
2
- import { trackFriction } from '../core/session-tracker.js';
3
- import { isSubagentRuntimeAvailable } from '../utils/subagent-probe.js';
4
- const OBSERVER_SESSION_PREFIX = 'agent:main:subagent:empathy-obs-';
5
- // Default timeout for waitForRun (30 seconds)
6
- const DEFAULT_WAIT_TIMEOUT_MS = 30_000;
7
- export class EmpathyObserverManager {
8
- static instance;
9
- sessionLocks = new Map();
10
- activeRuns = new Map();
11
- completedSessions = new Map();
12
- constructor() { }
13
- static getInstance() {
14
- if (!EmpathyObserverManager.instance) {
15
- EmpathyObserverManager.instance = new EmpathyObserverManager();
16
- }
17
- return EmpathyObserverManager.instance;
18
- }
19
- /**
20
- * Build a safe session key for empathy observer
21
- * Format: agent:main:subagent:empathy-obs-{safeParentSessionId}-{timestamp}
22
- */
23
- buildEmpathyObserverSessionKey(parentSessionId) {
24
- const safeParentSessionId = parentSessionId
25
- .replace(/[^a-zA-Z0-9_-]/g, '_')
26
- .substring(0, 64);
27
- const timestamp = Date.now();
28
- return `${OBSERVER_SESSION_PREFIX}${safeParentSessionId}-${timestamp}`;
29
- }
30
- /**
31
- * Check if a session key is an empathy observer session
32
- */
33
- isObserverSession(sessionKey) {
34
- return isEmpathyObserverSession(sessionKey);
35
- }
36
- markCompleted(observerSessionKey) {
37
- this.completedSessions.set(observerSessionKey, Date.now());
38
- }
39
- isCompleted(observerSessionKey) {
40
- const timestamp = this.completedSessions.get(observerSessionKey);
41
- if (!timestamp)
42
- return false;
43
- if (Date.now() - timestamp > 5 * 60 * 1000) {
44
- this.completedSessions.delete(observerSessionKey);
45
- return false;
46
- }
47
- return true;
48
- }
49
- isActive(parentSessionId) {
50
- const metadata = this.activeRuns.get(parentSessionId);
51
- if (!metadata)
52
- return false;
53
- if (metadata.timedOutAt || metadata.erroredAt) {
54
- if (!metadata.observedAt)
55
- return true;
56
- // TTL-based cleanup of orphaned timed-out/error entries:
57
- // if fallback never fired, expire the block so parent session recovers
58
- if (Date.now() - metadata.observedAt > 5 * 60 * 1000) {
59
- this.activeRuns.delete(parentSessionId);
60
- if (this.sessionLocks.get(parentSessionId) === metadata.observerSessionKey) {
61
- this.sessionLocks.delete(parentSessionId);
62
- }
63
- return false;
64
- }
65
- return true;
66
- }
67
- if (Date.now() - metadata.startedAt > 5 * 60 * 1000) {
68
- this.activeRuns.delete(parentSessionId);
69
- if (this.sessionLocks.get(parentSessionId) === metadata.observerSessionKey) {
70
- this.sessionLocks.delete(parentSessionId);
71
- }
72
- return false;
73
- }
74
- return true;
75
- }
76
- getActiveMetadata(parentSessionId) {
77
- return this.activeRuns.get(parentSessionId);
78
- }
79
- shouldTrigger(api, sessionId) {
80
- if (!api || !sessionId) {
81
- api?.logger?.warn?.('[PD:EmpathyObserver] shouldTrigger=false: api or sessionId null');
82
- return false;
83
- }
84
- const enabled = api.config?.empathy_engine?.enabled !== false;
85
- if (!enabled) {
86
- api.logger?.warn?.('[PD:EmpathyObserver] shouldTrigger=false: empathy_engine disabled');
87
- return false;
88
- }
89
- // Skip BOOT sessions - they run outside "gateway request" context where subagent.run() is unavailable
90
- if (sessionId.startsWith('boot-')) {
91
- api.logger?.warn?.('[PD:EmpathyObserver] shouldTrigger=false: boot session (gateway request context unavailable)');
92
- return false;
93
- }
94
- const subagentOk = isSubagentRuntimeAvailable(api.runtime?.subagent);
95
- if (!subagentOk) {
96
- api.logger?.warn?.('[PD:EmpathyObserver] shouldTrigger=false: subagent runtime unavailable');
97
- return false;
98
- }
99
- if (this.isActive(sessionId)) {
100
- api.logger?.warn?.(`[PD:EmpathyObserver] shouldTrigger=false: session ${sessionId} has active run`);
101
- return false;
102
- }
103
- api.logger?.info?.(`[PD:EmpathyObserver] shouldTrigger=true for session ${sessionId}`);
104
- return true;
105
- }
106
- async spawn(api, sessionId, userMessage, workspaceDir) {
107
- if (!api)
108
- return null;
109
- if (!this.shouldTrigger(api, sessionId)) {
110
- api?.logger?.warn?.(`[PD:EmpathyObserver] spawn skipped: shouldTrigger=false for session ${sessionId}`);
111
- return null;
112
- }
113
- if (!userMessage?.trim()) {
114
- api?.logger?.warn?.('[PD:EmpathyObserver] spawn skipped: empty userMessage');
115
- return null;
116
- }
117
- const sessionKey = this.buildEmpathyObserverSessionKey(sessionId);
118
- this.sessionLocks.set(sessionId, sessionKey);
119
- api.logger.info(`[PD:EmpathyObserver] Spawn starting for session ${sessionId}, key=${sessionKey}`);
120
- const prompt = [
121
- 'You are an empathy observer.',
122
- 'Analyze ONLY the user message and return strict JSON (no markdown):',
123
- '{"damageDetected": boolean, "severity": "mild|moderate|severe", "confidence": number, "reason": string}',
124
- `User message: ${JSON.stringify(userMessage.trim())}`,
125
- ].join('\n');
126
- let runId;
127
- try {
128
- const result = await api.runtime.subagent.run({
129
- sessionKey,
130
- message: prompt,
131
- lane: 'subagent',
132
- deliver: false,
133
- idempotencyKey: `${sessionId}:${Date.now()}`,
134
- expectsCompletionMessage: true,
135
- });
136
- runId = result.runId;
137
- api.logger.info(`[PD:EmpathyObserver] Spawn succeeded for ${sessionKey}, runId=${runId}`);
138
- }
139
- catch (error) {
140
- this.sessionLocks.delete(sessionId);
141
- api.logger.warn(`[PD:EmpathyObserver] Spawn failed for ${sessionId}: ${String(error)}`);
142
- return null;
143
- }
144
- this.activeRuns.set(sessionId, {
145
- runId,
146
- parentSessionId: sessionId,
147
- observerSessionKey: sessionKey,
148
- workspaceDir,
149
- startedAt: Date.now(),
150
- });
151
- this.finalizeRun(api, sessionId, sessionKey, workspaceDir).catch(async (err) => {
152
- api.logger.warn(`[PD:EmpathyObserver] finalizeRun failed (will retry once): ${String(err)}`);
153
- await new Promise((r) => setTimeout(r, 2000));
154
- try {
155
- await this.finalizeRun(api, sessionId, sessionKey, workspaceDir);
156
- }
157
- catch (retryErr) {
158
- api.logger.warn(`[PD:EmpathyObserver] finalizeRun retry also failed: ${String(retryErr)}`);
159
- }
160
- });
161
- return sessionKey;
162
- }
163
- /**
164
- * Main回收链路: 使用 waitForRun 驱动回收
165
- * 仅在 ok 时回收; timeout/exception 保留 session 由 fallback 处理
166
- */
167
- async finalizeRun(api, parentSessionId, observerSessionKey, workspaceDir) {
168
- const metadata = this.activeRuns.get(parentSessionId);
169
- const runId = metadata?.runId;
170
- if (!runId) {
171
- api.logger.warn(`[PD:EmpathyObserver] finalizeRun: no runId for ${observerSessionKey}`);
172
- this.cleanupState(parentSessionId, observerSessionKey);
173
- return;
174
- }
175
- api.logger.info(`[PD:EmpathyObserver] finalizeRun: waiting for runId=${runId}`);
176
- let waitResult;
177
- try {
178
- waitResult = await api.runtime.subagent.waitForRun({
179
- runId,
180
- timeoutMs: DEFAULT_WAIT_TIMEOUT_MS,
181
- });
182
- api.logger.info(`[PD:EmpathyObserver] finalizeRun: wait completed status=${waitResult.status}`);
183
- }
184
- catch (error) {
185
- api.logger.warn(`[PD:EmpathyObserver] finalizeRun: waitForRun threw for ${runId}: ${String(error)}`);
186
- const updatedMetadata = this.activeRuns.get(parentSessionId);
187
- if (updatedMetadata) {
188
- updatedMetadata.erroredAt = Date.now();
189
- updatedMetadata.observedAt = Date.now();
190
- }
191
- this.cleanupState(parentSessionId, observerSessionKey, false);
192
- return;
193
- }
194
- if (waitResult.status === 'timeout') {
195
- api.logger.warn(`[PD:EmpathyObserver] finalizeRun: observer wait timed out; deferring cleanup for ${observerSessionKey}`);
196
- const updatedMetadata = this.activeRuns.get(parentSessionId);
197
- if (updatedMetadata) {
198
- updatedMetadata.timedOutAt = Date.now();
199
- updatedMetadata.observedAt = Date.now();
200
- }
201
- this.cleanupState(parentSessionId, observerSessionKey, false);
202
- return;
203
- }
204
- if (waitResult.status === 'error') {
205
- api.logger.warn(`[PD:EmpathyObserver] finalizeRun: observer run errored: ${waitResult.error}; deferring cleanup for ${observerSessionKey}`);
206
- const updatedMetadata = this.activeRuns.get(parentSessionId);
207
- if (updatedMetadata) {
208
- updatedMetadata.erroredAt = Date.now();
209
- updatedMetadata.observedAt = Date.now();
210
- }
211
- this.cleanupState(parentSessionId, observerSessionKey, false);
212
- return;
213
- }
214
- // Set observedAt before reapBySession so TTL cleanup works even if reapBySession fails
215
- const updatedMetadata = this.activeRuns.get(parentSessionId);
216
- if (updatedMetadata) {
217
- updatedMetadata.observedAt = Date.now();
218
- }
219
- await this.reapBySession(api, observerSessionKey, parentSessionId, workspaceDir);
220
- }
221
- /**
222
- * 统一回收入口: reap + deleteSession + 清理状态
223
- */
224
- async reapBySession(api, observerSessionKey, parentSessionId, workspaceDir) {
225
- if (this.isCompleted(observerSessionKey)) {
226
- api.logger.info(`[PD:EmpathyObserver] reapBySession: already processed ${observerSessionKey}, skipping`);
227
- this.cleanupState(parentSessionId, observerSessionKey);
228
- return;
229
- }
230
- api.logger.info(`[PD:EmpathyObserver] reapBySession starting for ${observerSessionKey}`);
231
- const storedMetadata = this.activeRuns.get(parentSessionId);
232
- // Use original parentSessionId from metadata, NOT extracted from session key
233
- // (session key may have been sanitized/truncated and doesn't match original)
234
- const sessionId = storedMetadata?.parentSessionId || this.extractParentSessionId(observerSessionKey) || parentSessionId;
235
- let finalized = false;
236
- try {
237
- const messages = await api.runtime.subagent.getSessionMessages({
238
- sessionKey: observerSessionKey,
239
- limit: 20,
240
- });
241
- api.logger.info(`[PD:EmpathyObserver] Retrieved messages for ${observerSessionKey}`);
242
- const rawText = this.extractAssistantText(messages.messages, messages.assistantTexts);
243
- api.logger?.debug?.(`[PD:EmpathyObserver] Raw observer output for ${observerSessionKey}: ${JSON.stringify(rawText)}`);
244
- const parsed = this.parseJsonPayload(rawText, api.logger);
245
- api.logger.info(`[PD:EmpathyObserver] Payload parsed: ${JSON.stringify(parsed)}`);
246
- if (parsed?.damageDetected && sessionId) {
247
- const wctx = WorkspaceContext.fromHookContext({ workspaceDir: workspaceDir || '' });
248
- const score = this.scoreFromSeverity(parsed.severity, wctx.config);
249
- trackFriction(sessionId, score, `observer_empathy_${parsed.severity || 'mild'}`, workspaceDir || '', { source: 'user_empathy' });
250
- const eventId = `emp_obs_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
251
- wctx.eventLog.recordPainSignal(sessionId, {
252
- score,
253
- source: 'user_empathy',
254
- reason: parsed.reason || 'Empathy observer detected likely user frustration.',
255
- isRisky: false,
256
- origin: 'system_infer',
257
- severity: this.normalizeSeverity(parsed.severity),
258
- confidence: this.normalizeConfidence(parsed.confidence),
259
- detection_mode: 'structured',
260
- deduped: false,
261
- trigger_text_excerpt: rawText.substring(0, 120),
262
- raw_score: score,
263
- calibrated_score: score,
264
- eventId,
265
- });
266
- try {
267
- wctx.trajectory?.recordPainEvent?.({
268
- sessionId,
269
- source: 'user_empathy',
270
- score,
271
- reason: parsed.reason || 'Empathy observer detected likely user frustration.',
272
- severity: this.normalizeSeverity(parsed.severity),
273
- origin: 'system_infer',
274
- confidence: this.normalizeConfidence(parsed.confidence),
275
- });
276
- }
277
- catch (error) {
278
- api.logger.warn(`[PD:EmpathyObserver] Failed to persist observer pain event for ${sessionId}: ${String(error)}`);
279
- }
280
- api.logger.info(`[PD:EmpathyObserver] Applied GFI +${score} for ${sessionId}`);
281
- }
282
- else {
283
- api.logger.info(`[PD:EmpathyObserver] No damage detected or no sessionId for ${observerSessionKey}`);
284
- }
285
- finalized = true;
286
- }
287
- catch (error) {
288
- api.logger.warn(`[PD:EmpathyObserver] reapBySession failed to read messages for ${observerSessionKey}: ${String(error)}`);
289
- }
290
- // Only delete the session if we successfully read messages (finalized=true).
291
- // When finalized=false (getSessionMessages failed), preserve the session so
292
- // the subagent_ended fallback can retry or the TTL expiry can unblock the parent.
293
- if (finalized) {
294
- try {
295
- await api.runtime.subagent.deleteSession({ sessionKey: observerSessionKey });
296
- api.logger.info(`[PD:EmpathyObserver] deleteSession succeeded for ${observerSessionKey}`);
297
- }
298
- catch (error) {
299
- api.logger.warn(`[PD:EmpathyObserver] deleteSession failed for ${observerSessionKey}: ${String(error)}`);
300
- }
301
- this.markCompleted(observerSessionKey);
302
- }
303
- // Only delete from activeRuns if finalized; otherwise preserve entry for subagent_ended fallback
304
- this.cleanupState(parentSessionId, observerSessionKey, finalized);
305
- }
306
- /**
307
- * Fallback回收: 由 subagent_ended 触发
308
- * 仅在主链路未处理时执行补救回收
309
- */
310
- async reap(api, targetSessionKey, workspaceDir) {
311
- if (!api || !this.isObserverSession(targetSessionKey))
312
- return;
313
- if (this.isCompleted(targetSessionKey)) {
314
- api.logger.info(`[PD:EmpathyObserver] reap fallback: already processed ${targetSessionKey}, skipping`);
315
- return;
316
- }
317
- // Find the original parentSessionId by matching observerSessionKey in activeRuns
318
- // (the session key may have been sanitized, so we can't rely on extraction alone)
319
- let parentSessionId = '';
320
- for (const [key, metadata] of this.activeRuns) {
321
- if (metadata.observerSessionKey === targetSessionKey) {
322
- parentSessionId = key;
323
- break;
324
- }
325
- }
326
- // Fallback: extract from session key (may be truncated but better than nothing for logging)
327
- if (!parentSessionId) {
328
- parentSessionId = this.extractParentSessionId(targetSessionKey) || '';
329
- }
330
- await this.reapBySession(api, targetSessionKey, parentSessionId, workspaceDir);
331
- }
332
- cleanupState(parentSessionId, observerSessionKey, deleteFromActiveRuns = true) {
333
- if (deleteFromActiveRuns) {
334
- this.activeRuns.delete(parentSessionId);
335
- }
336
- if (this.sessionLocks.get(parentSessionId) === observerSessionKey) {
337
- this.sessionLocks.delete(parentSessionId);
338
- }
339
- }
340
- /**
341
- * Extract parent session ID from observer session key
342
- */
343
- extractParentSessionId(sessionKey) {
344
- if (!this.isObserverSession(sessionKey))
345
- return null;
346
- const match = sessionKey.match(/empathy-obs-(.+)-(\d+)$/);
347
- return match ? match[1] : null;
348
- }
349
- parseJsonPayload(rawText, logger) {
350
- if (!rawText?.trim())
351
- return null;
352
- try {
353
- return JSON.parse(rawText.trim());
354
- }
355
- catch {
356
- const match = rawText.match(/\{[\s\S]*\}/);
357
- if (!match) {
358
- logger?.warn('[PD:EmpathyObserver] Observer payload is not valid JSON, skipping.');
359
- return null;
360
- }
361
- try {
362
- return JSON.parse(match[0]);
363
- }
364
- catch {
365
- logger?.warn('[PD:EmpathyObserver] Failed to parse observer JSON payload, skipping.');
366
- return null;
367
- }
368
- }
369
- }
370
- extractAssistantText(messages, assistantTexts) {
371
- if (assistantTexts && assistantTexts.length > 0) {
372
- return assistantTexts[assistantTexts.length - 1] || '';
373
- }
374
- for (let i = messages.length - 1; i >= 0; i--) {
375
- const msg = messages[i];
376
- if (msg?.role !== 'assistant')
377
- continue;
378
- if (typeof msg.content === 'string')
379
- return msg.content;
380
- if (Array.isArray(msg.content)) {
381
- const txt = msg.content
382
- .filter((part) => part?.type === 'text' && typeof part.text === 'string')
383
- .map((part) => part.text)
384
- .join('\n');
385
- if (txt)
386
- return txt;
387
- }
388
- }
389
- return '';
390
- }
391
- scoreFromSeverity(severity, config) {
392
- if (severity === 'severe')
393
- return Number(config.get('empathy_engine.penalties.severe') ?? 40);
394
- if (severity === 'moderate')
395
- return Number(config.get('empathy_engine.penalties.moderate') ?? 25);
396
- return Number(config.get('empathy_engine.penalties.mild') ?? 10);
397
- }
398
- normalizeSeverity(severity) {
399
- if (severity === 'severe')
400
- return 'severe';
401
- if (severity === 'moderate')
402
- return 'moderate';
403
- return 'mild';
404
- }
405
- normalizeConfidence(value) {
406
- if (!Number.isFinite(value))
407
- return 1;
408
- return Math.max(0, Math.min(1, Number(value)));
409
- }
410
- }
411
- export const empathyObserverManager = EmpathyObserverManager.getInstance();
412
- export function isEmpathyObserverSession(sessionKey) {
413
- return typeof sessionKey === 'string' && sessionKey.startsWith(OBSERVER_SESSION_PREFIX);
414
- }
@@ -1,155 +0,0 @@
1
- /**
2
- * EvolutionQueryService - 进化流程查询服务
3
- *
4
- * 提供 WebUI 所需的查询 API:
5
- * - getTasks() - 获取任务列表
6
- * - getEvents() - 获取事件流
7
- * - getTrace() - 获取完整追踪
8
- * - getStats() - 获取统计数据
9
- */
10
- import type { TrajectoryDatabase } from '../core/trajectory.js';
11
- export interface TaskListFilters {
12
- status?: string;
13
- dateFrom?: string;
14
- dateTo?: string;
15
- page?: number;
16
- pageSize?: number;
17
- }
18
- export interface EventFilters {
19
- traceId?: string;
20
- stage?: string;
21
- limit?: number;
22
- offset?: number;
23
- }
24
- export interface TasksResponse {
25
- items: Array<{
26
- taskId: string;
27
- traceId: string;
28
- source: string;
29
- reason: string | null;
30
- score: number;
31
- status: string;
32
- enqueuedAt: string | null;
33
- startedAt: string | null;
34
- completedAt: string | null;
35
- duration: number | null;
36
- resolution: string | null;
37
- eventCount: number;
38
- createdAt: string;
39
- }>;
40
- pagination: {
41
- page: number;
42
- pageSize: number;
43
- total: number;
44
- totalPages: number;
45
- };
46
- }
47
- export interface EventsResponse {
48
- items: Array<{
49
- id: number;
50
- traceId: string;
51
- taskId: string | null;
52
- stage: string;
53
- stageLabel: string;
54
- stageColor: string;
55
- level: string;
56
- message: string;
57
- summary: string | null;
58
- metadata: Record<string, unknown>;
59
- createdAt: string;
60
- }>;
61
- pagination: {
62
- limit: number;
63
- offset: number;
64
- hasMore: boolean;
65
- };
66
- }
67
- export interface TraceDetailResponse {
68
- traceId: string;
69
- task: {
70
- taskId: string;
71
- traceId: string;
72
- source: string;
73
- reason: string | null;
74
- score: number;
75
- status: string;
76
- enqueuedAt: string | null;
77
- startedAt: string | null;
78
- completedAt: string | null;
79
- duration: number | null;
80
- resolution: string | null;
81
- createdAt: string;
82
- updatedAt: string;
83
- };
84
- events: Array<{
85
- id: number;
86
- traceId: string;
87
- taskId: string | null;
88
- stage: string;
89
- stageLabel: string;
90
- stageColor: string;
91
- level: string;
92
- message: string;
93
- summary: string | null;
94
- metadata: Record<string, unknown>;
95
- createdAt: string;
96
- }>;
97
- timeline: Array<{
98
- stage: string;
99
- stageLabel: string;
100
- stageColor: string;
101
- timestamp: string;
102
- message: string;
103
- summary: string | null;
104
- }>;
105
- }
106
- export interface EvolutionStatsResponse {
107
- total: number;
108
- pending: number;
109
- inProgress: number;
110
- completed: number;
111
- failed: number;
112
- recentActivity: Array<{
113
- day: string;
114
- created: number;
115
- completed: number;
116
- }>;
117
- stageDistribution: Array<{
118
- stage: string;
119
- stageLabel: string;
120
- count: number;
121
- }>;
122
- }
123
- /**
124
- * EvolutionQueryService 类
125
- * 封装进化流程的查询逻辑
126
- */
127
- export declare class EvolutionQueryService {
128
- private readonly trajectory;
129
- constructor(trajectory: TrajectoryDatabase);
130
- /**
131
- * 释放资源
132
- * 注意:不关闭 trajectory,因为它是单例由 TrajectoryRegistry 管理
133
- */
134
- dispose(): void;
135
- /**
136
- * 获取任务列表(带分页、筛选)
137
- */
138
- getTasks(filters?: TaskListFilters): TasksResponse;
139
- /**
140
- * 获取事件流
141
- */
142
- getEvents(filters?: EventFilters): EventsResponse;
143
- /**
144
- * 获取完整追踪(单个 trace 的所有事件)
145
- */
146
- getTrace(traceId: string): TraceDetailResponse | null;
147
- /**
148
- * 获取统计数据
149
- */
150
- getStats(days?: number): EvolutionStatsResponse;
151
- }
152
- /**
153
- * 获取 EvolutionQueryService 实例(单例)
154
- */
155
- export declare function getEvolutionQueryService(trajectory: TrajectoryDatabase): EvolutionQueryService;