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,106 +0,0 @@
1
- /**
2
- * Event types for structured logging and daily statistics.
3
- */
4
- /**
5
- * Creates an empty daily stats object.
6
- */
7
- export function createEmptyDailyStats(date) {
8
- const now = new Date().toISOString();
9
- return {
10
- date,
11
- createdAt: now,
12
- updatedAt: now,
13
- tools: {
14
- total: 0,
15
- success: 0,
16
- failure: 0,
17
- },
18
- toolCalls: {
19
- total: 0,
20
- success: 0,
21
- failure: 0,
22
- byTool: {},
23
- },
24
- errors: {
25
- total: 0,
26
- byType: {},
27
- byTool: {},
28
- },
29
- pain: {
30
- signalsDetected: 0,
31
- signalsBySource: {},
32
- rulesMatched: {},
33
- candidatesPromoted: 0,
34
- avgScore: 0,
35
- maxScore: 0,
36
- },
37
- empathy: {
38
- totalEvents: 0,
39
- dedupedCount: 0,
40
- dedupeHitRate: 0,
41
- totalPenaltyScore: 0,
42
- rolledBackScore: 0,
43
- rollbackCount: 0,
44
- bySeverity: {
45
- mild: 0,
46
- moderate: 0,
47
- severe: 0,
48
- },
49
- scoreBySeverity: {
50
- mild: 0,
51
- moderate: 0,
52
- severe: 0,
53
- },
54
- byDetectionMode: {
55
- structured: 0,
56
- legacy_tag: 0,
57
- },
58
- byOrigin: {
59
- assistant_self_report: 0,
60
- user_manual: 0,
61
- system_infer: 0,
62
- },
63
- confidenceDistribution: {
64
- high: 0,
65
- medium: 0,
66
- low: 0,
67
- },
68
- dailyTrend: [],
69
- },
70
- gfi: {
71
- peak: 0,
72
- samples: 0,
73
- total: 0,
74
- resetCount: 0,
75
- hourlyDistribution: new Array(24).fill(0),
76
- },
77
- evolution: {
78
- tasksEnqueued: 0,
79
- tasksCompleted: 0,
80
- rulesPromoted: 0,
81
- },
82
- hooks: {
83
- byType: {},
84
- errors: 0,
85
- totalDurationMs: 0,
86
- },
87
- deepReflection: {
88
- totalCalls: 0,
89
- passedCount: 0,
90
- issuesFoundCount: 0,
91
- timeoutCount: 0,
92
- errorCount: 0,
93
- bySelectionMode: {
94
- manual: { count: 0, avgDurationMs: 0, passedCount: 0 },
95
- auto: { count: 0, avgDurationMs: 0, passedCount: 0 },
96
- },
97
- byModel: {},
98
- byDepth: {},
99
- totalDurationMs: 0,
100
- avgDurationMs: 0,
101
- totalBlindSpots: 0,
102
- totalRisks: 0,
103
- confidenceDistribution: { LOW: 0, MEDIUM: 0, HIGH: 0 },
104
- },
105
- };
106
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * Hygiene Tracking Types
3
- */
4
- export interface PersistenceAction {
5
- ts: string;
6
- tool: string;
7
- path: string;
8
- type: 'memory' | 'plan' | 'other';
9
- contentLength: number;
10
- }
11
- export interface HygieneStats {
12
- date: string;
13
- persistenceCount: number;
14
- persistenceByFile: Record<string, number>;
15
- lastPersistenceTime?: string;
16
- totalCharsPersisted: number;
17
- groomingExecutedCount: number;
18
- lastGroomingTime?: string;
19
- }
20
- export declare function createEmptyHygieneStats(date: string): HygieneStats;
@@ -1,12 +0,0 @@
1
- /**
2
- * Hygiene Tracking Types
3
- */
4
- export function createEmptyHygieneStats(date) {
5
- return {
6
- date,
7
- persistenceCount: 0,
8
- persistenceByFile: {},
9
- totalCharsPersisted: 0,
10
- groomingExecutedCount: 0,
11
- };
12
- }
@@ -1,47 +0,0 @@
1
- /**
2
- * Runtime truth represents the current state of the system.
3
- * Used for control decisions, Phase 3 eligibility, and real-time operations.
4
- * Sources: queue state, active session registry
5
- */
6
- export interface RuntimeTruth {
7
- queueState: {
8
- total: number;
9
- pending: number;
10
- inProgress: number;
11
- completed: number;
12
- lastUpdated: string;
13
- };
14
- activeSessions: string[];
15
- }
16
- /**
17
- * Analytics truth represents historical data and aggregated metrics.
18
- * Used for insights, trends, and supporting evidence (where explicitly allowed).
19
- * NOT used for control decisions or Phase 3 eligibility.
20
- * Sources: trajectory.db, daily-stats.json, control-ui DB
21
- */
22
- export interface AnalyticsTruth {
23
- trajectoryData: {
24
- totalTasks: number;
25
- successRate: number;
26
- timeoutRate: number;
27
- lastUpdated: string;
28
- };
29
- dailyStats: {
30
- toolCalls: number;
31
- painSignals: number;
32
- evolutionTasks: number;
33
- lastUpdated: string;
34
- };
35
- trends: {
36
- sevenDay: TrendMetrics;
37
- thirtyDay: TrendMetrics;
38
- };
39
- }
40
- /**
41
- * Trend metrics for analytics aggregation.
42
- */
43
- export interface TrendMetrics {
44
- successRateChange: number;
45
- toolCallVolumeChange: number;
46
- painSignalRateChange: number;
47
- }
@@ -1 +0,0 @@
1
- export {};
package/dist/types.d.ts DELETED
@@ -1,50 +0,0 @@
1
- export type { PluginCommandContext, PluginCommandResult } from './openclaw-sdk.js';
2
- /**
3
- * Context Injection Configuration
4
- * Controls what content gets injected into the LLM prompt.
5
- *
6
- * NOTE: Core Principles (PRINCIPLES.md) are ALWAYS injected and cannot be disabled.
7
- * This is by design - principles are the foundation of the agent's behavior.
8
- */
9
- export type ProjectFocusMode = 'full' | 'summary' | 'off';
10
- export interface EvolutionContextConfig {
11
- /** Enable conversation context in evolution task (default: true) */
12
- enabled: boolean;
13
- /** Max recent messages included in evolution task (default: 4) */
14
- maxMessages: number;
15
- /** Max chars per message snippet (default: 200) */
16
- maxCharsPerMessage: number;
17
- }
18
- export interface ContextInjectionConfig {
19
- /** Thinking OS (mental models) - can be toggled */
20
- thinkingOs: boolean;
21
- /** Project context (CURRENT_FOCUS.md) mode */
22
- projectFocus: ProjectFocusMode;
23
- /** Reflection log - can be toggled */
24
- reflectionLog: boolean;
25
- /** Evolution task context injection settings */
26
- evolutionContext: EvolutionContextConfig;
27
- }
28
- /**
29
- * Default context injection configuration
30
- * Based on user requirements:
31
- * - principles: always on (not configurable)
32
- * - thinkingOs: true (can be turned off)
33
- * - projectFocus: 'off' (default closed, user can enable)
34
- * - reflectionLog: true (default on)
35
- */
36
- export declare const defaultContextConfig: ContextInjectionConfig;
37
- /**
38
- * Reflection log entry structure
39
- */
40
- export interface ReflectionLogEntry {
41
- timestamp: string;
42
- context: string;
43
- insights: string;
44
- modelId?: string;
45
- depth?: number;
46
- }
47
- /**
48
- * Reflection log retention configuration
49
- */
50
- export declare const reflectionLogRetentionDays = 7;
package/dist/types.js DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * Default context injection configuration
3
- * Based on user requirements:
4
- * - principles: always on (not configurable)
5
- * - thinkingOs: true (can be turned off)
6
- * - projectFocus: 'off' (default closed, user can enable)
7
- * - reflectionLog: true (default on)
8
- */
9
- export const defaultContextConfig = {
10
- thinkingOs: true,
11
- projectFocus: 'off',
12
- reflectionLog: true,
13
- evolutionContext: {
14
- enabled: true,
15
- maxMessages: 4,
16
- maxCharsPerMessage: 200,
17
- },
18
- };
19
- /**
20
- * Reflection log retention configuration
21
- */
22
- export const reflectionLogRetentionDays = 7;
@@ -1,71 +0,0 @@
1
- /**
2
- * Reliable File Lock - 可靠的文件锁实现
3
- *
4
- * 设计原则:
5
- * 1. 使用 O_EXCL | O_CREAT 实现真正的原子锁获取
6
- * 2. PID 存活检测避免死锁
7
- * 3. 带退避的重试机制
8
- * 4. 锁获取后二次验证
9
- * 5. 数据不丢失:失败时抛出异常而非静默返回
10
- */
11
- export interface LockOptions {
12
- /** 最大重试次数,默认 50 */
13
- maxRetries?: number;
14
- /** 基础重试延迟(ms),默认 10 */
15
- baseRetryDelayMs?: number;
16
- /** 最大重试延迟(ms),默认 500 */
17
- maxRetryDelayMs?: number;
18
- /** 锁过期时间(ms),默认 10000 (10秒) */
19
- lockStaleMs?: number;
20
- /** 锁文件后缀,默认 '.lock' */
21
- lockSuffix?: string;
22
- }
23
- export interface LockContext {
24
- /** 锁文件路径 */
25
- lockPath: string;
26
- /** 持有锁的 PID */
27
- pid: number;
28
- /** 获取锁的时间 */
29
- acquiredAt: number;
30
- }
31
- export declare class LockAcquisitionError extends Error {
32
- readonly filePath: string;
33
- readonly lockPath: string;
34
- constructor(message: string, filePath: string, lockPath: string);
35
- }
36
- /**
37
- * 获取文件锁
38
- *
39
- * @param filePath 要锁定的文件路径
40
- * @param options 锁选项
41
- * @returns 锁上下文(用于后续释放)
42
- * @throws Error 如果无法获取锁
43
- */
44
- export declare function acquireLock(filePath: string, options?: LockOptions): LockContext;
45
- export declare function acquireLockAsync(filePath: string, options?: LockOptions): Promise<LockContext>;
46
- /**
47
- * 释放文件锁
48
- *
49
- * @param ctx 锁上下文(由 acquireLock 返回)
50
- */
51
- export declare function releaseLock(ctx: LockContext): void;
52
- /**
53
- * 使用锁执行操作(自动获取和释放)
54
- *
55
- * @param filePath 要锁定的文件路径
56
- * @param fn 要执行的操作
57
- * @param options 锁选项
58
- * @returns 操作的返回值
59
- */
60
- export declare function withLock<T>(filePath: string, fn: () => T, options?: LockOptions): T;
61
- export declare function withLockAsync<T>(filePath: string, fn: () => Promise<T>, options?: LockOptions): Promise<T>;
62
- export declare function withAsyncLock<T>(filePath: string, fn: () => Promise<T>): Promise<T>;
63
- /**
64
- * 检查锁状态(用于调试)
65
- */
66
- export declare function getLockStatus(filePath: string, options?: LockOptions): {
67
- locked: boolean;
68
- holderPid: number | null;
69
- holderAlive: boolean;
70
- lockAge: number | null;
71
- };
@@ -1,309 +0,0 @@
1
- /**
2
- * Reliable File Lock - 可靠的文件锁实现
3
- *
4
- * 设计原则:
5
- * 1. 使用 O_EXCL | O_CREAT 实现真正的原子锁获取
6
- * 2. PID 存活检测避免死锁
7
- * 3. 带退避的重试机制
8
- * 4. 锁获取后二次验证
9
- * 5. 数据不丢失:失败时抛出异常而非静默返回
10
- */
11
- import * as fs from 'fs';
12
- import * as path from 'path';
13
- export class LockAcquisitionError extends Error {
14
- filePath;
15
- lockPath;
16
- constructor(message, filePath, lockPath) {
17
- super(message);
18
- this.name = 'LockAcquisitionError';
19
- this.filePath = filePath;
20
- this.lockPath = lockPath;
21
- }
22
- }
23
- /** 默认锁选项 */
24
- const DEFAULT_OPTIONS = {
25
- maxRetries: 50,
26
- baseRetryDelayMs: 10,
27
- maxRetryDelayMs: 500,
28
- lockStaleMs: 10000,
29
- lockSuffix: '.lock',
30
- };
31
- /**
32
- * 检查进程是否存活
33
- */
34
- function isProcessAlive(pid) {
35
- try {
36
- // 发送信号 0 不会真正发送信号,只检查进程是否存在
37
- process.kill(pid, 0);
38
- return true;
39
- }
40
- catch {
41
- return false;
42
- }
43
- }
44
- /**
45
- * 原子创建锁文件
46
- * 使用 O_EXCL | O_CREAT 确保原子性
47
- *
48
- * @returns true 表示成功获取锁,false 表示锁被占用
49
- */
50
- function tryAcquireLock(lockPath, pid) {
51
- try {
52
- // 确保锁文件的目录存在
53
- const lockDir = path.dirname(lockPath);
54
- if (!fs.existsSync(lockDir)) {
55
- fs.mkdirSync(lockDir, { recursive: true });
56
- }
57
- // 使用 fs.constants 获取正确的 flag 值
58
- // O_EXCL: 排他创建 - 与 O_CREAT 一起使用时,如果文件存在则失败
59
- // O_CREAT: 文件不存在时创建
60
- // O_WRONLY: 只写模式
61
- const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL;
62
- // 使用底层的 openSync 实现真正的原子操作
63
- // 如果文件已存在,会抛出 EEXIST 错误
64
- const fd = fs.openSync(lockPath, flags);
65
- // 写入 PID
66
- fs.writeSync(fd, String(pid));
67
- fs.fsyncSync(fd); // 确保数据落盘
68
- fs.closeSync(fd);
69
- return true;
70
- }
71
- catch (err) {
72
- if (err.code === 'EEXIST') {
73
- return false; // 锁已被占用
74
- }
75
- // 其他错误(权限、磁盘满等)向上抛出
76
- throw err;
77
- }
78
- }
79
- /**
80
- * 读取锁文件中的 PID
81
- * @returns PID 或 null(如果文件不存在或无法解析)
82
- */
83
- function readLockPid(lockPath) {
84
- try {
85
- const content = fs.readFileSync(lockPath, 'utf8');
86
- const pid = parseInt(content.trim(), 10);
87
- return Number.isNaN(pid) ? null : pid;
88
- }
89
- catch {
90
- return null;
91
- }
92
- }
93
- /**
94
- * 安全删除锁文件
95
- * 只有当锁文件包含当前进程的 PID 时才删除
96
- */
97
- function safeReleaseLock(lockPath, expectedPid) {
98
- try {
99
- const pid = readLockPid(lockPath);
100
- if (pid === expectedPid) {
101
- fs.unlinkSync(lockPath);
102
- }
103
- // 如果 PID 不匹配,说明锁已被其他进程重新获取,不删除
104
- }
105
- catch {
106
- // 忽略删除错误
107
- }
108
- }
109
- /**
110
- * 检查并清理过期锁
111
- */
112
- function cleanupStaleLock(lockPath, staleMs) {
113
- try {
114
- const stat = fs.statSync(lockPath);
115
- const pid = readLockPid(lockPath);
116
- // 检查是否过期
117
- const isStale = Date.now() - stat.mtimeMs > staleMs;
118
- // 检查持有者是否已死亡
119
- // PID 为 null 表示锁文件损坏,应视为无效锁
120
- const isDead = pid === null || !isProcessAlive(pid);
121
- // 满足任一条件即可清理:过期、持有者死亡、PID 无效
122
- if (isStale || isDead) {
123
- try {
124
- fs.unlinkSync(lockPath);
125
- return true;
126
- }
127
- catch {
128
- return false;
129
- }
130
- }
131
- return false;
132
- }
133
- catch {
134
- return false;
135
- }
136
- }
137
- /**
138
- * 计算退避延迟(指数退避 + 抖动)
139
- */
140
- function calculateBackoff(attempt, baseMs, maxMs) {
141
- // 指数退避:10, 20, 40, 80, 160, 320, 500, 500, ...
142
- const exponentialDelay = Math.min(baseMs * Math.pow(2, attempt), maxMs);
143
- // 添加 20% 的随机抖动,避免多个进程同时重试
144
- const jitter = exponentialDelay * 0.2 * Math.random();
145
- return Math.floor(exponentialDelay + jitter);
146
- }
147
- function sleep(ms) {
148
- return new Promise((resolve) => setTimeout(resolve, ms));
149
- }
150
- function sleepSync(ms) {
151
- const end = Date.now() + ms;
152
- while (Date.now() < end) {
153
- // busy wait for synchronous retry
154
- }
155
- }
156
- function buildLockError(filePath, lockPath) {
157
- const holderPid = readLockPid(lockPath);
158
- const holderStatus = holderPid !== null
159
- ? (isProcessAlive(holderPid) ? `alive (PID ${holderPid})` : `dead (PID ${holderPid})`)
160
- : 'unknown';
161
- return new LockAcquisitionError(`Failed to acquire lock for ${filePath}. Lock holder: ${holderStatus}.`, filePath, lockPath);
162
- }
163
- function tryAcquireWithStaleCleanup(filePath, opts, pid) {
164
- const lockPath = filePath + opts.lockSuffix;
165
- if (tryAcquireLock(lockPath, pid)) {
166
- const actualPid = readLockPid(lockPath);
167
- if (actualPid === pid) {
168
- return { lockPath, pid, acquiredAt: Date.now() };
169
- }
170
- }
171
- cleanupStaleLock(lockPath, opts.lockStaleMs);
172
- if (tryAcquireLock(lockPath, pid)) {
173
- const actualPid = readLockPid(lockPath);
174
- if (actualPid === pid) {
175
- return { lockPath, pid, acquiredAt: Date.now() };
176
- }
177
- }
178
- return null;
179
- }
180
- /**
181
- * 获取文件锁
182
- *
183
- * @param filePath 要锁定的文件路径
184
- * @param options 锁选项
185
- * @returns 锁上下文(用于后续释放)
186
- * @throws Error 如果无法获取锁
187
- */
188
- export function acquireLock(filePath, options = {}) {
189
- const opts = { ...DEFAULT_OPTIONS, ...options };
190
- const pid = process.pid;
191
- for (let attempt = 0; attempt < opts.maxRetries; attempt++) {
192
- const ctx = tryAcquireWithStaleCleanup(filePath, opts, pid);
193
- if (ctx) {
194
- return ctx;
195
- }
196
- if (attempt < opts.maxRetries - 1) {
197
- const delay = calculateBackoff(attempt, opts.baseRetryDelayMs, opts.maxRetryDelayMs);
198
- sleepSync(delay);
199
- }
200
- }
201
- throw buildLockError(filePath, filePath + opts.lockSuffix);
202
- }
203
- export async function acquireLockAsync(filePath, options = {}) {
204
- const opts = { ...DEFAULT_OPTIONS, ...options };
205
- const pid = process.pid;
206
- for (let attempt = 0; attempt < opts.maxRetries; attempt++) {
207
- const ctx = tryAcquireWithStaleCleanup(filePath, opts, pid);
208
- if (ctx) {
209
- return ctx;
210
- }
211
- if (attempt < opts.maxRetries - 1) {
212
- const delay = calculateBackoff(attempt, opts.baseRetryDelayMs, opts.maxRetryDelayMs);
213
- await sleep(delay);
214
- }
215
- }
216
- throw buildLockError(filePath, filePath + opts.lockSuffix);
217
- }
218
- /**
219
- * 释放文件锁
220
- *
221
- * @param ctx 锁上下文(由 acquireLock 返回)
222
- */
223
- export function releaseLock(ctx) {
224
- safeReleaseLock(ctx.lockPath, ctx.pid);
225
- }
226
- /**
227
- * 使用锁执行操作(自动获取和释放)
228
- *
229
- * @param filePath 要锁定的文件路径
230
- * @param fn 要执行的操作
231
- * @param options 锁选项
232
- * @returns 操作的返回值
233
- */
234
- export function withLock(filePath, fn, options = {}) {
235
- const ctx = acquireLock(filePath, options);
236
- try {
237
- return fn();
238
- }
239
- finally {
240
- releaseLock(ctx);
241
- }
242
- }
243
- export async function withLockAsync(filePath, fn, options = {}) {
244
- const ctx = await acquireLockAsync(filePath, options);
245
- try {
246
- return await fn();
247
- }
248
- finally {
249
- releaseLock(ctx);
250
- }
251
- }
252
- /**
253
- * 异步版本的文件锁(使用 Promise 链)
254
- *
255
- * 注意:这是一个简化的实现,适用于单进程内的异步并发控制
256
- * 对于多进程场景,应使用同步版本的 acquireLock
257
- */
258
- const asyncLockQueues = new Map();
259
- export async function withAsyncLock(filePath, fn) {
260
- const lockPath = filePath + '.async';
261
- // 获取或创建该文件的任务队列
262
- let queue = asyncLockQueues.get(lockPath);
263
- // 创建新的 Promise 链
264
- let resolveRelease;
265
- const releasePromise = new Promise(resolve => {
266
- resolveRelease = resolve;
267
- });
268
- // 将当前任务加入队列
269
- const previousQueue = queue || Promise.resolve();
270
- const currentQueue = previousQueue.then(() => releasePromise);
271
- asyncLockQueues.set(lockPath, currentQueue);
272
- // 等待前面的任务完成
273
- await previousQueue;
274
- try {
275
- return await fn();
276
- }
277
- finally {
278
- resolveRelease();
279
- // 清理已完成的队列
280
- if (asyncLockQueues.get(lockPath) === currentQueue) {
281
- asyncLockQueues.delete(lockPath);
282
- }
283
- }
284
- }
285
- /**
286
- * 检查锁状态(用于调试)
287
- */
288
- export function getLockStatus(filePath, options = {}) {
289
- const opts = { ...DEFAULT_OPTIONS, ...options };
290
- const lockPath = filePath + opts.lockSuffix;
291
- try {
292
- const stat = fs.statSync(lockPath);
293
- const pid = readLockPid(lockPath);
294
- return {
295
- locked: true,
296
- holderPid: pid,
297
- holderAlive: pid !== null && isProcessAlive(pid),
298
- lockAge: Date.now() - stat.mtimeMs,
299
- };
300
- }
301
- catch {
302
- return {
303
- locked: false,
304
- holderPid: null,
305
- holderAlive: false,
306
- lockAge: null,
307
- };
308
- }
309
- }
@@ -1,28 +0,0 @@
1
- /**
2
- * Glob pattern matching utilities using micromatch.
3
- * Provides lightweight file path pattern matching for whitelist/blacklist operations.
4
- */
5
- /**
6
- * Checks if a file path matches any of the provided glob patterns.
7
- *
8
- * @param filePath - The file path to check (relative or absolute)
9
- * @param patterns - Array of glob patterns (supports *, **, ?, etc.)
10
- * @returns true if the path matches any pattern, false otherwise
11
- */
12
- export declare function matchesAnyPattern(filePath: string, patterns: string[]): boolean;
13
- /**
14
- * Filters an array of file paths to only those that match any pattern.
15
- *
16
- * @param filePaths - Array of file paths to filter
17
- * @param patterns - Array of glob patterns (supports *, **, ?, !)
18
- * @returns Array of matching file paths
19
- */
20
- export declare function filterMatchingPaths(filePaths: string[], patterns: string[]): string[];
21
- /**
22
- * Returns all patterns that match the given file path.
23
- *
24
- * @param filePath - The file path to check
25
- * @param patterns - Array of glob patterns
26
- * @returns Array of patterns that matched the path
27
- */
28
- export declare function getMatchingPatterns(filePath: string, patterns: string[]): string[];
@@ -1,9 +0,0 @@
1
- /**
2
- * Strips timestamps, UUIDs, and hex memory addresses from error messages
3
- * to allow for consistent loop detection even if the raw text varies slightly.
4
- */
5
- export declare function denoiseError(text: string): string;
6
- /**
7
- * Computes a simple SHA-256 hash of the given string.
8
- */
9
- export declare function computeHash(text: string): string;
@@ -1,6 +0,0 @@
1
- export declare function normalizePath(filePath: string, projectDir: string): string;
2
- export declare function normalizeRiskPath(p: string): string;
3
- export declare function isRisky(relPath: string, riskPaths: string[]): boolean;
4
- export declare function parseKvLines(text: string): Record<string, string>;
5
- export declare function serializeKvLines(data: Record<string, any>): string;
6
- export declare function planStatus(projectDir: string): string;