micro-models-agent 2.16.0 → 2.17.1

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 (427) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/assets/app.js +1 -314
  3. package/dist/assets/hljs.js +5 -1244
  4. package/dist/assets/index.html +11 -0
  5. package/dist/assets/js/api.js +1 -28
  6. package/dist/assets/js/core/menus.js +1 -0
  7. package/dist/assets/js/core/store/feed.js +1 -0
  8. package/dist/assets/js/core/store/index.js +1 -0
  9. package/dist/assets/js/core/store/session.js +1 -0
  10. package/dist/assets/js/core/store/settings.js +1 -0
  11. package/dist/assets/js/core/store/tabs.js +1 -0
  12. package/dist/assets/js/dialog.js +1 -105
  13. package/dist/assets/js/dom.js +1 -178
  14. package/dist/assets/js/feed/core.js +1 -0
  15. package/dist/assets/js/feed/history.js +1 -0
  16. package/dist/assets/js/feed/plan.js +1 -0
  17. package/dist/assets/js/feed/question.js +3 -0
  18. package/dist/assets/js/feed/sidebar.js +1 -0
  19. package/dist/assets/js/feed/stream.js +1 -0
  20. package/dist/assets/js/feed/turn.js +5 -0
  21. package/dist/assets/js/feed.js +1 -1211
  22. package/dist/assets/js/format.js +2 -122
  23. package/dist/assets/js/i18n.js +1 -46
  24. package/dist/assets/js/rail.js +1 -114
  25. package/dist/assets/js/session/cmdk.js +1 -0
  26. package/dist/assets/js/session/composer.js +1 -0
  27. package/dist/assets/js/session/sessions-menu.js +1 -0
  28. package/dist/assets/js/session/tabs.js +1 -0
  29. package/dist/assets/js/settings/controls.js +1 -0
  30. package/dist/assets/js/settings/editors.js +1 -0
  31. package/dist/assets/js/settings/form.js +1 -0
  32. package/dist/assets/js/settings/modal.js +1 -0
  33. package/dist/assets/js/settings/panels.js +1 -0
  34. package/dist/assets/js/settings/providers.js +1 -0
  35. package/dist/assets/js/settings/search.js +1 -0
  36. package/dist/assets/js/settings/subdialog.js +1 -0
  37. package/dist/assets/js/settings/write.js +1 -0
  38. package/dist/assets/js/settings.js +1 -1914
  39. package/dist/assets/js/sidebar/core.js +1 -0
  40. package/dist/assets/js/sidebar/lsp.js +2 -0
  41. package/dist/assets/js/sidebar/map.js +1 -0
  42. package/dist/assets/js/sidebar/state.js +1 -0
  43. package/dist/assets/js/sidebar/trace.js +5 -0
  44. package/dist/assets/js/sidebar.js +1 -705
  45. package/dist/assets/js/store.js +1 -82
  46. package/dist/assets/js/subdialog.js +1 -0
  47. package/dist/assets/md.js +1 -277
  48. package/dist/assets/setup.js +3 -816
  49. package/dist/assets/smd.js +29 -1665
  50. package/dist/assets/styles.css +1 -1592
  51. package/dist/certification/certifications.json +1 -494
  52. package/dist/i18n/en.json +1 -1851
  53. package/dist/i18n/ru.json +1 -1854
  54. package/dist/main.js +815 -55797
  55. package/dist/modules/browser/bridge-server.mjs +2 -252
  56. package/package.json +10 -5
  57. package/dist/assets/js/settings-controls.js +0 -452
  58. package/dist/assets/js/tabs.js +0 -867
  59. package/dist/cli/cache-line.js +0 -31
  60. package/dist/cli/command-suggest.js +0 -39
  61. package/dist/cli/commands.js +0 -781
  62. package/dist/cli/completer.js +0 -268
  63. package/dist/cli/index.js +0 -3
  64. package/dist/cli/json-payload.js +0 -32
  65. package/dist/cli/main.js +0 -346
  66. package/dist/cli/onboarding-commands.js +0 -126
  67. package/dist/cli/plugin-commands.js +0 -38
  68. package/dist/cli/relaunch.js +0 -40
  69. package/dist/cli/repl-commands-lsp.js +0 -75
  70. package/dist/cli/repl-commands-skills.js +0 -105
  71. package/dist/cli/repl-commands.js +0 -1218
  72. package/dist/cli/repl.js +0 -1238
  73. package/dist/cli/run-result.js +0 -38
  74. package/dist/cli/security-commands.js +0 -177
  75. package/dist/cli/setup-order.js +0 -6
  76. package/dist/cli/setup-prompt.js +0 -50
  77. package/dist/cli/setup.js +0 -161
  78. package/dist/cli/web-command.js +0 -98
  79. package/dist/config/budget.js +0 -48
  80. package/dist/config/config.js +0 -345
  81. package/dist/config/defaults.js +0 -197
  82. package/dist/config/domains.js +0 -135
  83. package/dist/config/env.js +0 -46
  84. package/dist/config/experts.js +0 -17
  85. package/dist/config/index.js +0 -5
  86. package/dist/config/paths.js +0 -56
  87. package/dist/config/redact.js +0 -44
  88. package/dist/config/registry-extra.js +0 -334
  89. package/dist/config/registry.js +0 -584
  90. package/dist/config/security.js +0 -212
  91. package/dist/config/timeouts.js +0 -74
  92. package/dist/config/types.js +0 -1
  93. package/dist/config/utils.js +0 -57
  94. package/dist/core/agent/artifact-progress.js +0 -59
  95. package/dist/core/agent/artifact-resolve.js +0 -79
  96. package/dist/core/agent/audit-gate.js +0 -53
  97. package/dist/core/agent/compaction.js +0 -89
  98. package/dist/core/agent/constants.js +0 -90
  99. package/dist/core/agent/context-log.js +0 -454
  100. package/dist/core/agent/context-renderer.js +0 -45
  101. package/dist/core/agent/critic-gate.js +0 -132
  102. package/dist/core/agent/hallucination-gate.js +0 -197
  103. package/dist/core/agent/loop-state.js +0 -68
  104. package/dist/core/agent/prefix-monitor.js +0 -101
  105. package/dist/core/agent/reasoning-resolver.js +0 -65
  106. package/dist/core/agent/token-tracker.js +0 -99
  107. package/dist/core/agent/tool-batch.js +0 -312
  108. package/dist/core/agent/tool-images.js +0 -18
  109. package/dist/core/agent/tool-output.js +0 -116
  110. package/dist/core/agent/tool-pairing.js +0 -60
  111. package/dist/core/agent-moe.js +0 -248
  112. package/dist/core/agent.js +0 -1299
  113. package/dist/core/bootstrap/agent-phase.js +0 -66
  114. package/dist/core/bootstrap/config-phase.js +0 -86
  115. package/dist/core/bootstrap/modules-phase.js +0 -269
  116. package/dist/core/bootstrap/provider-phase.js +0 -183
  117. package/dist/core/bootstrap/session-phase.js +0 -204
  118. package/dist/core/bootstrap/state.js +0 -94
  119. package/dist/core/bootstrap/workspace-phase.js +0 -115
  120. package/dist/core/bootstrap.js +0 -112
  121. package/dist/core/crash-handler.js +0 -62
  122. package/dist/core/environment.js +0 -224
  123. package/dist/core/host-plan.js +0 -43
  124. package/dist/core/host.js +0 -23
  125. package/dist/core/index.js +0 -3
  126. package/dist/core/prompt-builder.js +0 -95
  127. package/dist/core/prompt-overflow.js +0 -306
  128. package/dist/core/session-logger.js +0 -375
  129. package/dist/core/system-prompt.js +0 -117
  130. package/dist/core/types.js +0 -1
  131. package/dist/core/version.js +0 -28
  132. package/dist/core/web-host.js +0 -34
  133. package/dist/core/workspace.js +0 -80
  134. package/dist/i18n/index.js +0 -80
  135. package/dist/index.js +0 -30
  136. package/dist/llm/cache-usage.js +0 -76
  137. package/dist/llm/image-utils.js +0 -138
  138. package/dist/llm/index.js +0 -4
  139. package/dist/llm/llm-errors.js +0 -50
  140. package/dist/llm/model-loader.js +0 -86
  141. package/dist/llm/models-dev.js +0 -121
  142. package/dist/llm/openai-compat.js +0 -756
  143. package/dist/llm/orchestrator.js +0 -294
  144. package/dist/llm/provider-budget.js +0 -68
  145. package/dist/llm/provider-context.js +0 -233
  146. package/dist/llm/provider.js +0 -9
  147. package/dist/llm/response.js +0 -44
  148. package/dist/llm/stream-state.js +0 -26
  149. package/dist/llm/token-counter.js +0 -83
  150. package/dist/llm/types.js +0 -1
  151. package/dist/logger/app-logger.js +0 -212
  152. package/dist/logger/file-log.js +0 -160
  153. package/dist/logger/index.js +0 -2
  154. package/dist/migration/backup.js +0 -56
  155. package/dist/migration/detect.js +0 -61
  156. package/dist/migration/index.js +0 -3
  157. package/dist/modules/artifacts/store.js +0 -62
  158. package/dist/modules/browser/actions.js +0 -79
  159. package/dist/modules/browser/bridge-client.js +0 -203
  160. package/dist/modules/browser/bridge-path.js +0 -10
  161. package/dist/modules/browser/console-buffer.js +0 -37
  162. package/dist/modules/browser/cookie-store.js +0 -29
  163. package/dist/modules/browser/driver-types.js +0 -1
  164. package/dist/modules/browser/driver.js +0 -186
  165. package/dist/modules/browser/index.js +0 -9
  166. package/dist/modules/browser/module.js +0 -30
  167. package/dist/modules/browser/session.js +0 -322
  168. package/dist/modules/browser/snapshot.js +0 -154
  169. package/dist/modules/browser/types.js +0 -13
  170. package/dist/modules/certification/cli.js +0 -264
  171. package/dist/modules/certification/fact-checker.js +0 -90
  172. package/dist/modules/certification/loader.js +0 -127
  173. package/dist/modules/certification/manifest.js +0 -231
  174. package/dist/modules/certification/runner.js +0 -233
  175. package/dist/modules/certification/scenarios.js +0 -586
  176. package/dist/modules/certification/syntax-scenarios.js +0 -50
  177. package/dist/modules/certification/types.js +0 -1
  178. package/dist/modules/context/chunk-query.js +0 -122
  179. package/dist/modules/context/fact-extractor.js +0 -170
  180. package/dist/modules/context/history.js +0 -15
  181. package/dist/modules/context/index.js +0 -2
  182. package/dist/modules/context/manager.js +0 -482
  183. package/dist/modules/critic/client.js +0 -176
  184. package/dist/modules/critic/evidence.js +0 -81
  185. package/dist/modules/critic/provider.js +0 -45
  186. package/dist/modules/critic/tools.js +0 -78
  187. package/dist/modules/critic/types.js +0 -1
  188. package/dist/modules/execution/audit-runners.js +0 -206
  189. package/dist/modules/execution/auditor.js +0 -222
  190. package/dist/modules/execution/execution-plugin.js +0 -478
  191. package/dist/modules/execution/index.js +0 -8
  192. package/dist/modules/execution/input-from.js +0 -70
  193. package/dist/modules/execution/module.js +0 -891
  194. package/dist/modules/execution/moe-executor.js +0 -443
  195. package/dist/modules/execution/plan-actions.js +0 -642
  196. package/dist/modules/execution/plan-checks.js +0 -35
  197. package/dist/modules/execution/plan-coverage.js +0 -71
  198. package/dist/modules/execution/plan-persister.js +0 -46
  199. package/dist/modules/execution/plan-steps.js +0 -31
  200. package/dist/modules/execution/plan-store.js +0 -274
  201. package/dist/modules/execution/plan-tool.js +0 -249
  202. package/dist/modules/execution/plan-validator.js +0 -197
  203. package/dist/modules/execution/planner.js +0 -103
  204. package/dist/modules/execution/stuck-detector.js +0 -834
  205. package/dist/modules/execution/tracker.js +0 -92
  206. package/dist/modules/execution/transient-error.js +0 -30
  207. package/dist/modules/execution/types.js +0 -1
  208. package/dist/modules/execution/verifier.js +0 -343
  209. package/dist/modules/execution/windows-commands.js +0 -52
  210. package/dist/modules/hallucination/artifact-claim.js +0 -93
  211. package/dist/modules/hallucination/confidence.js +0 -81
  212. package/dist/modules/hallucination/consistency.js +0 -37
  213. package/dist/modules/hallucination/detector.js +0 -57
  214. package/dist/modules/hallucination/factual.js +0 -205
  215. package/dist/modules/hallucination/index.js +0 -6
  216. package/dist/modules/hallucination/js-identifiers.js +0 -261
  217. package/dist/modules/hallucination/llm-judge.js +0 -116
  218. package/dist/modules/hallucination/success-claim.js +0 -59
  219. package/dist/modules/index.js +0 -5
  220. package/dist/modules/indexer/cache.js +0 -88
  221. package/dist/modules/indexer/index.js +0 -4
  222. package/dist/modules/indexer/map-command.js +0 -33
  223. package/dist/modules/indexer/map-select.js +0 -87
  224. package/dist/modules/indexer/module.js +0 -293
  225. package/dist/modules/indexer/project-profile.js +0 -184
  226. package/dist/modules/indexer/symbols.js +0 -189
  227. package/dist/modules/indexer/walker.js +0 -285
  228. package/dist/modules/lsp/check-tool.js +0 -61
  229. package/dist/modules/lsp/client.js +0 -406
  230. package/dist/modules/lsp/command.js +0 -53
  231. package/dist/modules/lsp/config.js +0 -189
  232. package/dist/modules/lsp/index.js +0 -4
  233. package/dist/modules/lsp/module.js +0 -295
  234. package/dist/modules/lsp/probe.js +0 -86
  235. package/dist/modules/lsp/project-root.js +0 -69
  236. package/dist/modules/lsp/startup-check.js +0 -154
  237. package/dist/modules/lsp/types.js +0 -1
  238. package/dist/modules/mcp/client.js +0 -445
  239. package/dist/modules/mcp/index.js +0 -4
  240. package/dist/modules/mcp/module.js +0 -295
  241. package/dist/modules/mcp/registry.js +0 -20
  242. package/dist/modules/memory/index.js +0 -2
  243. package/dist/modules/memory/module.js +0 -101
  244. package/dist/modules/memory/search.js +0 -45
  245. package/dist/modules/memory/store.js +0 -107
  246. package/dist/modules/onboarding/init.js +0 -47
  247. package/dist/modules/onboarding/meet.js +0 -30
  248. package/dist/modules/onboarding/mode.js +0 -30
  249. package/dist/modules/onboarding/prompts.js +0 -43
  250. package/dist/modules/pipelines/engine.js +0 -70
  251. package/dist/modules/pipelines/index.js +0 -4
  252. package/dist/modules/pipelines/parser.js +0 -59
  253. package/dist/modules/pipelines/template.js +0 -18
  254. package/dist/modules/plugins/builtin/lint-on-write.js +0 -377
  255. package/dist/modules/plugins/builtin/notify.js +0 -11
  256. package/dist/modules/plugins/index.js +0 -2
  257. package/dist/modules/plugins/loader.js +0 -85
  258. package/dist/modules/plugins/manager.js +0 -244
  259. package/dist/modules/plugins/types.js +0 -1
  260. package/dist/modules/pricing/index.js +0 -70
  261. package/dist/modules/pricing/prices.js +0 -147
  262. package/dist/modules/processes/detect.js +0 -34
  263. package/dist/modules/processes/index.js +0 -4
  264. package/dist/modules/processes/kill-tree.js +0 -52
  265. package/dist/modules/processes/registry.js +0 -294
  266. package/dist/modules/processes/runner.js +0 -23
  267. package/dist/modules/providers/cache.js +0 -23
  268. package/dist/modules/providers/capabilities.js +0 -28
  269. package/dist/modules/providers/create.js +0 -21
  270. package/dist/modules/providers/factory.js +0 -28
  271. package/dist/modules/providers/fallback.js +0 -81
  272. package/dist/modules/providers/health.js +0 -47
  273. package/dist/modules/providers/index.js +0 -6
  274. package/dist/modules/providers/manager.js +0 -207
  275. package/dist/modules/providers/naming.js +0 -15
  276. package/dist/modules/providers/preflight.js +0 -71
  277. package/dist/modules/providers/presets.js +0 -232
  278. package/dist/modules/providers/registry.js +0 -27
  279. package/dist/modules/providers/types.js +0 -1
  280. package/dist/modules/reasoning/policy.js +0 -42
  281. package/dist/modules/reasoning/probe.js +0 -116
  282. package/dist/modules/registry.js +0 -48
  283. package/dist/modules/security/audit-log.js +0 -119
  284. package/dist/modules/security/audit-notifier.js +0 -267
  285. package/dist/modules/security/command-validator.js +0 -272
  286. package/dist/modules/security/content-scanner.js +0 -53
  287. package/dist/modules/security/data-sanitizer.js +0 -82
  288. package/dist/modules/security/encryption.js +0 -216
  289. package/dist/modules/security/index.js +0 -15
  290. package/dist/modules/security/network-validator.js +0 -236
  291. package/dist/modules/security/path-validator.js +0 -261
  292. package/dist/modules/security/protected-paths.js +0 -73
  293. package/dist/modules/security/rate-limiter.js +0 -98
  294. package/dist/modules/security/security-policies.js +0 -499
  295. package/dist/modules/security/session-encryption.js +0 -182
  296. package/dist/modules/security/session-isolation.js +0 -75
  297. package/dist/modules/session/auto-name.js +0 -63
  298. package/dist/modules/session/export.js +0 -98
  299. package/dist/modules/session/index.js +0 -4
  300. package/dist/modules/session/manager.js +0 -234
  301. package/dist/modules/session/module.js +0 -33
  302. package/dist/modules/session/store.js +0 -295
  303. package/dist/modules/session/types.js +0 -1
  304. package/dist/modules/setup/answers.js +0 -35
  305. package/dist/modules/setup/apply.js +0 -79
  306. package/dist/modules/setup/discovery.js +0 -72
  307. package/dist/modules/skills/index.js +0 -3
  308. package/dist/modules/skills/loader.js +0 -86
  309. package/dist/modules/skills/matcher.js +0 -27
  310. package/dist/modules/skills/module.js +0 -141
  311. package/dist/modules/types.js +0 -1
  312. package/dist/modules/updater/changelog-reader.js +0 -93
  313. package/dist/modules/updater/checker.js +0 -101
  314. package/dist/modules/updater/dev-detect.js +0 -18
  315. package/dist/modules/updater/index.js +0 -4
  316. package/dist/modules/updater/module.js +0 -129
  317. package/dist/modules/user-profile/compressor.js +0 -18
  318. package/dist/modules/user-profile/index.js +0 -2
  319. package/dist/modules/user-profile/profile.js +0 -77
  320. package/dist/modules/webui/answer-api.js +0 -29
  321. package/dist/modules/webui/assets.js +0 -50
  322. package/dist/modules/webui/body.js +0 -21
  323. package/dist/modules/webui/commands-settings.js +0 -209
  324. package/dist/modules/webui/commands-shared.js +0 -60
  325. package/dist/modules/webui/commands.js +0 -174
  326. package/dist/modules/webui/config-api.js +0 -134
  327. package/dist/modules/webui/file-api.js +0 -202
  328. package/dist/modules/webui/forward.js +0 -159
  329. package/dist/modules/webui/history-api.js +0 -112
  330. package/dist/modules/webui/host-state.js +0 -60
  331. package/dist/modules/webui/i18n-api.js +0 -9
  332. package/dist/modules/webui/limits.js +0 -6
  333. package/dist/modules/webui/log-forward.js +0 -20
  334. package/dist/modules/webui/memory-commands.js +0 -64
  335. package/dist/modules/webui/model-cache.js +0 -18
  336. package/dist/modules/webui/module.js +0 -148
  337. package/dist/modules/webui/persist.js +0 -24
  338. package/dist/modules/webui/prompt-io.js +0 -97
  339. package/dist/modules/webui/providers-api.js +0 -337
  340. package/dist/modules/webui/providers-view.js +0 -56
  341. package/dist/modules/webui/reasoning-view.js +0 -15
  342. package/dist/modules/webui/run-agent.js +0 -81
  343. package/dist/modules/webui/server.js +0 -284
  344. package/dist/modules/webui/sessions-api.js +0 -178
  345. package/dist/modules/webui/settings-api.js +0 -561
  346. package/dist/modules/webui/setup-api.js +0 -201
  347. package/dist/modules/webui/state.js +0 -74
  348. package/dist/modules/webui/util.js +0 -261
  349. package/dist/output/bus.js +0 -37
  350. package/dist/output/channel.js +0 -285
  351. package/dist/output/format.js +0 -15
  352. package/dist/output/index.js +0 -8
  353. package/dist/output/json-sink.js +0 -24
  354. package/dist/output/machine.js +0 -9
  355. package/dist/output/session-sink.js +0 -27
  356. package/dist/output/types.js +0 -1
  357. package/dist/tools/approve.js +0 -41
  358. package/dist/tools/attach-image.js +0 -102
  359. package/dist/tools/auto-fixer.js +0 -180
  360. package/dist/tools/auto-tags.js +0 -83
  361. package/dist/tools/bash.js +0 -649
  362. package/dist/tools/browser.js +0 -160
  363. package/dist/tools/chunk-query.js +0 -112
  364. package/dist/tools/create-dir.js +0 -60
  365. package/dist/tools/delete-file.js +0 -67
  366. package/dist/tools/download-file.js +0 -142
  367. package/dist/tools/edit-file.js +0 -136
  368. package/dist/tools/enable-tools.js +0 -59
  369. package/dist/tools/executor.js +0 -304
  370. package/dist/tools/file-info.js +0 -49
  371. package/dist/tools/filter-tools.js +0 -17
  372. package/dist/tools/glob-tool.js +0 -37
  373. package/dist/tools/grep-tool.js +0 -142
  374. package/dist/tools/hidden-tools-block.js +0 -37
  375. package/dist/tools/index.js +0 -88
  376. package/dist/tools/list-dir.js +0 -53
  377. package/dist/tools/load-skill.js +0 -51
  378. package/dist/tools/mcp-call.js +0 -80
  379. package/dist/tools/meet-done.js +0 -14
  380. package/dist/tools/move-file.js +0 -94
  381. package/dist/tools/path-utils.js +0 -108
  382. package/dist/tools/pipeline-run.js +0 -167
  383. package/dist/tools/preview.js +0 -2
  384. package/dist/tools/process-ids.js +0 -31
  385. package/dist/tools/process-kill.js +0 -33
  386. package/dist/tools/process-list.js +0 -38
  387. package/dist/tools/process-log.js +0 -49
  388. package/dist/tools/process-wait.js +0 -63
  389. package/dist/tools/prompt-io.js +0 -29
  390. package/dist/tools/question.js +0 -288
  391. package/dist/tools/read-file.js +0 -200
  392. package/dist/tools/recall.js +0 -124
  393. package/dist/tools/registry.js +0 -48
  394. package/dist/tools/remember.js +0 -72
  395. package/dist/tools/scope-check.js +0 -32
  396. package/dist/tools/scope-request.js +0 -96
  397. package/dist/tools/search-history.js +0 -88
  398. package/dist/tools/session-info.js +0 -46
  399. package/dist/tools/set-thinking.js +0 -75
  400. package/dist/tools/subagent.js +0 -257
  401. package/dist/tools/syntax-validator.js +0 -379
  402. package/dist/tools/types.js +0 -1
  403. package/dist/tools/user-input.js +0 -134
  404. package/dist/tools/web-browse.js +0 -93
  405. package/dist/tools/web-fetch.js +0 -108
  406. package/dist/tools/web-search.js +0 -107
  407. package/dist/tools/write-file.js +0 -128
  408. package/dist/ui/action-log.js +0 -13
  409. package/dist/ui/box.js +0 -78
  410. package/dist/ui/colors.js +0 -6
  411. package/dist/ui/diff.js +0 -189
  412. package/dist/ui/index.js +0 -7
  413. package/dist/ui/line-editor.js +0 -1083
  414. package/dist/ui/line-math.js +0 -98
  415. package/dist/ui/md-formatter.js +0 -322
  416. package/dist/ui/output.js +0 -19
  417. package/dist/ui/plan-view.js +0 -109
  418. package/dist/ui/renderer.js +0 -589
  419. package/dist/ui/spinner.js +0 -91
  420. package/dist/ui/table.js +0 -142
  421. package/dist/ui/theme.js +0 -143
  422. package/dist/utils/child-run.js +0 -20
  423. package/dist/utils/error.js +0 -4
  424. package/dist/utils/index.js +0 -6
  425. package/dist/utils/retry.js +0 -17
  426. package/dist/utils/sleep.js +0 -23
  427. package/dist/utils/truncate.js +0 -9
@@ -1,204 +0,0 @@
1
- /**
2
- * Фаза 4 bootstrap: сессии, context-лог, менеджер контекста и ToolContext.
3
- *
4
- * Порядок 1:1 с исходником: SessionStore/SessionManager (+ привязка ленивого
5
- * session id фазы провайдера, autoSave) → запись context-probe в сессию фоном
6
- * → ContextLogger (opt-in) → TokenCounter/activeToolTags/ContextManager →
7
- * общий бокс живого конфига → ToolContext с живыми геттерами (config,
8
- * sessionId, sessionContext, sessionManager, capabilities) → ToolExecutor →
9
- * HallucinationDetector.
10
- *
11
- * Shared mutable state вынесен вместе с фазой: `configRef` (живой бокс
12
- * конфига) и сам `toolCtx` возвращаются наружу следующим фазам.
13
- */
14
- import { join } from "path";
15
- import { ContextManager } from "../../modules/context/manager";
16
- import { TokenCounter } from "../../llm/token-counter";
17
- import { ToolExecutor } from "../../tools/executor";
18
- import { HallucinationDetector } from "../../modules/hallucination/detector";
19
- import { SessionStore, SessionManager } from "../../modules/session/index";
20
- import { BUILTIN_PROVIDERS } from "../../modules/providers/presets";
21
- import { resolveModelCapabilities } from "../../modules/providers/capabilities";
22
- import { ContextLogger } from "../agent/context-log";
23
- import { t } from "../../i18n/index";
24
- import { errMsg } from "../../utils";
25
- /**
26
- * Поднимает сессии, контекст и общий ToolContext.
27
- * @param input связный вход фазы (см. SessionPhaseInput).
28
- * @returns менеджер сессий, контекст, toolCtx и исполнители.
29
- */
30
- export async function setupSessionPhase(input) {
31
- const { config, logger, dir, baseDir, exitOnComplete, contextLogFlag, contextProbePromise, capabilitiesRef, llmProvider, bindSessionManager, toolRegistry, pluginManager, } = input;
32
- const sessionDir = join(dir, "sessions");
33
- const sessionStore = new SessionStore(sessionDir, config.security?.sessionEncryption);
34
- sessionStore.init();
35
- // Архивируем сессии старше 30 дней (gzip истории + метка rotated). Был мёртвый
36
- // код — не вызывался, старые сессии не сжимались. Отложено, чтобы синхронное
37
- // сжатие старт не тормозило; сбои не фатальны.
38
- setTimeout(() => {
39
- try {
40
- sessionStore.rotateOldSessions();
41
- }
42
- catch (err) {
43
- logger.warn(`session rotation failed: ${String(err)}`);
44
- }
45
- }, 0);
46
- const sessionManager = new SessionManager(sessionStore, {
47
- model: config.model,
48
- contextWindow: config.contextWindow,
49
- projectDir: baseDir,
50
- maxSessions: config.session.maxSessions,
51
- isolation: config.sessionIsolation,
52
- });
53
- bindSessionManager(() => sessionManager);
54
- if (config.session.autoSave && !sessionManager.getActive()) {
55
- sessionManager.create();
56
- }
57
- // Context-пробу — в сессию сразу по резолву, в ОБОИХ режимах (интерактив и
58
- // one-shot). Раньше писал только REPL, и one-shot терял расхождение
59
- // загруженного vs настроенного контекста целиком (наблюдалось: LM Studio
60
- // держит 86016 при contextWindow 32768 — молча).
61
- void contextProbePromise
62
- .then((probe) => {
63
- if (!probe)
64
- return;
65
- try {
66
- sessionManager.appendLog({
67
- ts: new Date().toISOString(),
68
- type: "context_probe",
69
- content: `model=${probe.model} actual=${probe.actual} configured=${config.contextWindow}`,
70
- });
71
- }
72
- catch {
73
- // best-effort
74
- }
75
- })
76
- .catch(() => { });
77
- // Git-style лог контекста (opt-in через --context-log / конфиг / env). Рядом
78
- // с файлами сессии, чтобы путешествовал с ней. Best-effort: лог не должен
79
- // ломать прогон никогда.
80
- const contextLogEnabled = contextLogFlag === true || config.contextLog?.enabled === true;
81
- let contextLogger;
82
- if (contextLogEnabled) {
83
- const activeMeta = sessionManager.getActiveMeta();
84
- if (activeMeta) {
85
- try {
86
- contextLogger = new ContextLogger({
87
- path: join(sessionStore.getSessionDir(activeMeta.id), "context.diff"),
88
- sessionId: activeMeta.id,
89
- model: config.model,
90
- contextWindow: config.contextWindow,
91
- redact: config.contextLog?.redact !== false,
92
- });
93
- }
94
- catch (err) {
95
- logger.warn(t("error.context_log_init", { error: errMsg(err) }));
96
- contextLogger = undefined;
97
- }
98
- }
99
- }
100
- const tokenCounter = new TokenCounter(config.model);
101
- // Мутабельный набор активных тегов тулов — общий у цикла агента и тула
102
- // `enable_tools`. Цикл перечитывает его каждую итерацию для пересборки
103
- // видимого модели набора; enable_tools дотолкивает теги внутрь. При выключенном
104
- // on-demand набор пуст — легаси «все тулы» (getAllForLLM на пустых отдаёт всё).
105
- const enableOnDemand = config.tools?.enableOnDemand !== false;
106
- const activeToolTags = enableOnDemand
107
- ? config.tools?.defaultTags
108
- ? [...config.tools.defaultTags]
109
- : []
110
- : [];
111
- const contextManager = new ContextManager(config.contextWindow, config.contextBudget, tokenCounter);
112
- // Общий бокс ЖИВОГО конфига. `Agent.reconfigure` меняет и deps.config, и
113
- // этот бокс, чтобы захватившие ссылку при bootstrap — toolCtx.config,
114
- // валидаторы, правила тулов — видели ТЕКУЩИЕ настройки после /model use или
115
- // визарда. Фиксация значения раз означала: тулы весь сеанс enforced
116
- // до-reconfigure security/maxTool.
117
- const configRef = { current: config };
118
- const toolCtx = {
119
- baseDir,
120
- logger,
121
- exitOnComplete,
122
- contextManager,
123
- activeToolTags,
124
- recursionDepth: 0,
125
- fileOperationsCount: 0,
126
- sessionHistory: {
127
- append: async (type, content) => {
128
- const meta = sessionManager.getActiveMeta();
129
- if (!meta)
130
- return;
131
- sessionManager.appendMessage({
132
- role: "tool",
133
- content: typeof content === "string" ? content : JSON.stringify(content),
134
- name: type,
135
- timestamp: new Date().toISOString(),
136
- });
137
- },
138
- },
139
- sessionLog: {
140
- plan: (event, detail, iteration) => {
141
- sessionManager.appendLog({
142
- ts: new Date().toISOString(),
143
- type: "plan",
144
- tool: event,
145
- content: detail,
146
- ...(iteration !== undefined ? { iteration } : {}),
147
- });
148
- },
149
- },
150
- };
151
- // `config` — ЖИВОЙ геттер поверх общего configRef: тулы и валидаторы видят
152
- // ТЕКУЩИЕ настройки после reconfigure.
153
- Object.defineProperty(toolCtx, "config", {
154
- get: () => configRef.current,
155
- configurable: true,
156
- });
157
- // `sessionId`/`sessionContext` — ЖИВЫЕ геттеры поверх менеджера сессий, а не
158
- // снимок при bootstrap. Снимок пинил сессию старта, и после REPL /new или
159
- // /resume записи audit.jsonl новой сессии тегировались id ПРЕДЫДУЩЕЙ
160
- // (наблюдалось: записи ses_msyghz8w с id ses_msyg892p_78kqhc), а sessionHistory
161
- // читал живую мету. Теперь потребители ctx.sessionId — аудит, реестр
162
- // процессов, счётчики файлов — всегда видят реально активную сессию.
163
- Object.defineProperty(toolCtx, "sessionId", {
164
- get: () => sessionManager.getActiveMeta()?.id,
165
- configurable: true,
166
- });
167
- Object.defineProperty(toolCtx, "sessionContext", {
168
- get: () => sessionManager.getSessionContext() ?? undefined,
169
- configurable: true,
170
- });
171
- Object.defineProperty(toolCtx, "sessionManager", {
172
- get: () => sessionManager,
173
- configurable: true,
174
- });
175
- // Возможности активной модели — LIVE: пресет провайдера + native-probe +
176
- // конфиг-оверрайд пересчитываются при каждом обращении тула, поэтому
177
- // инструменты (browser и т.п.) видят актуальный vision/tools после
178
- // смены модели или /provider use.
179
- Object.defineProperty(toolCtx, "capabilities", {
180
- get: () => {
181
- const cfg = configRef.current;
182
- const spec = BUILTIN_PROVIDERS.find((p) => p.type === cfg.provider.type);
183
- return resolveModelCapabilities(spec?.capabilities, capabilitiesRef.probe, cfg.modelCapabilities?.[cfg.model]);
184
- },
185
- configurable: true,
186
- });
187
- const toolExecutor = new ToolExecutor(toolRegistry, toolCtx, pluginManager);
188
- toolCtx.llmProvider = llmProvider;
189
- toolCtx.toolExecutor = toolExecutor;
190
- const hallucinationDetector = new HallucinationDetector(baseDir, llmProvider, {
191
- judgeEnabled: config.hallucination?.judge?.enabled ?? false,
192
- });
193
- return {
194
- sessionManager,
195
- sessionStore,
196
- contextLogger,
197
- contextManager,
198
- configRef,
199
- activeToolTags,
200
- toolCtx,
201
- toolExecutor,
202
- hallucinationDetector,
203
- };
204
- }
@@ -1,94 +0,0 @@
1
- /**
2
- * Общее состояние и мелкие хелперы фаз bootstrap.
3
- *
4
- * Здесь живёт то, что нужно нескольким фазам сразу: флаг one-shot режима,
5
- * регистрация встроенных плагинов, таймаут-обёртка, нормализация уровня
6
- * лога и загрузка AGENTS.md-блоков. Своей логики фаза не несёт — только
7
- * разделяемые примитивы, чтобы фазы не дублировали их друг у друга.
8
- */
9
- import { estimateTokens } from "../../llm/token-counter";
10
- import { existsSync, readFileSync } from "fs";
11
- import { join } from "path";
12
- import { projectMmaDir } from "../../config/paths";
13
- /**
14
- * One-shot CLI-подкоманды (`session show`, `usage`, `config` …) рисуют итог и
15
- * выходят. Фоновый стартовый health-check спавнит дочерний процесс (LSP/tsc),
16
- * который `process.exit` не пожинает — на Windows сирота держит stdout-пайп, и
17
- * пайп команды (`mma session show <id> | cat`) виснет. Подкоманды агента не
18
- * гоняют, поэтому чек там пропускается.
19
- */
20
- let oneShotMode = false;
21
- /**
22
- * Включает one-shot режим (пропуск фонового health-check для подкоманд).
23
- * @param value true — подкоманда без агента.
24
- */
25
- export function setOneShotMode(value) {
26
- oneShotMode = value;
27
- }
28
- /**
29
- * Проверяет one-shot режим (нужен фазе модулей для пропуска health-check).
30
- * @returns true — фоновый стартовый чек пропускается.
31
- */
32
- export function isOneShotMode() {
33
- return oneShotMode;
34
- }
35
- /** Регистрация встроенного плагина модуля: пометка + регистрация. */
36
- export function registerBuiltinPlugin(pm, plugin) {
37
- if (!plugin)
38
- return;
39
- plugin.isBuiltin = true;
40
- pm.register(plugin);
41
- }
42
- /** Отклоняет `promise` через `ms`; таймер победителя снимается. */
43
- export function withTimeout(promise, ms) {
44
- return new Promise((resolve, reject) => {
45
- const timer = setTimeout(() => reject(new Error(`timeout after ${ms}ms`)), ms);
46
- promise.then((v) => {
47
- clearTimeout(timer);
48
- resolve(v);
49
- }, (e) => {
50
- clearTimeout(timer);
51
- reject(e);
52
- });
53
- });
54
- }
55
- const VALID_LOG_LEVELS = ["debug", "info", "warn", "error"];
56
- /** Нормализует строку из конфига в LogLevel (без `as any`); неизвестное → info. */
57
- export function normalizeLogLevel(value) {
58
- return value && VALID_LOG_LEVELS.includes(value) ? value : "info";
59
- }
60
- /** Кандидаты AGENTS.md по приоритету: проект, проектный `.mma`, глобальный. */
61
- export function agentsMdPaths(baseDir, configDir) {
62
- return [
63
- join(baseDir, "AGENTS.md"),
64
- join(projectMmaDir(baseDir), "AGENTS.md"),
65
- join(configDir, "AGENTS.md"),
66
- ];
67
- }
68
- /**
69
- * Грузит AGENTS.md из каталога проекта и конфиг-каталога (по приоритету).
70
- * Каждый найденный непустой файл — prompt-блок высокого приоритета.
71
- * @param baseDir workspace; @param dir каталог конфига; @param skip пропустить загрузку.
72
- * @returns блоки инструкций для системного промпта.
73
- */
74
- export function loadAgentsMdBlocks(baseDir, dir, skip) {
75
- if (skip)
76
- return [];
77
- const blocks = [];
78
- const candidates = agentsMdPaths(baseDir, dir);
79
- for (const p of candidates) {
80
- if (existsSync(p)) {
81
- const content = readFileSync(p, "utf-8").trim();
82
- if (content) {
83
- blocks.push({
84
- content,
85
- priority: "high",
86
- essential: false,
87
- estimatedTokens: estimateTokens(content),
88
- kind: "instructions",
89
- });
90
- }
91
- }
92
- }
93
- return blocks;
94
- }
@@ -1,115 +0,0 @@
1
- /**
2
- * Фаза 3 bootstrap: workspace, окружение, индекс проекта, скиллы и тулы.
3
- *
4
- * Порядок 1:1 с исходником: резолв baseDir (громкий фол на несуществующем
5
- * `-d`) → отчёт окружения → построение индекса проекта → загрузка скиллов →
6
- * реестр тулов → менеджер плагинов → системный systemInfo-блок.
7
- */
8
- import { join, resolve } from "path";
9
- import { statSync } from "fs";
10
- import { buildSystemInfo } from "../system-prompt";
11
- import { collectEnvironment, logEnvironment } from "../environment";
12
- import { IndexerModule } from "../../modules/indexer/index";
13
- import { SkillsLoader, SkillsModule } from "../../modules/skills/index";
14
- import { ToolRegistry, registerAllTools } from "../../tools/index";
15
- import { PluginManager } from "../../modules/plugins/manager";
16
- import { estimateTokens } from "../../llm/token-counter";
17
- import { t } from "../../i18n/index";
18
- import { homedir } from "os";
19
- import { projectMmaDir } from "../../config/paths";
20
- /**
21
- * Резолвит workspace агента. Несуществующий `-d` (классика: шелл режет по
22
- * пробелам, висячий бэкслэш экранирует кавычку) должен упасть ГРОМКО здесь —
23
- * иначе агент молча работает не в том каталоге и уверяет, что всё хорошо.
24
- */
25
- export function resolveBaseDir(projectDir) {
26
- if (!projectDir)
27
- return process.cwd();
28
- const abs = resolve(projectDir);
29
- let isDir = false;
30
- try {
31
- isDir = statSync(abs).isDirectory();
32
- }
33
- catch {
34
- isDir = false;
35
- }
36
- if (!isDir) {
37
- throw new Error(`workspace directory does not exist: ${abs} (received ${JSON.stringify(projectDir)} — ` +
38
- `if the path contains spaces, quote it without a trailing backslash)`);
39
- }
40
- return abs;
41
- }
42
- /**
43
- * Готовит workspace, окружение, индекс, скиллы и реестр тулов.
44
- * @param config живой конфиг; @param logger настроенный логгер;
45
- * @param dir каталог конфига; @param projectDir запрошенный workspace (опционально);
46
- * @param profile загруженный профиль пользователя (из фазы провайдера).
47
- * @returns каталог, отчёт окружения, индекс, скиллы, реестр, system-блок.
48
- */
49
- export async function setupWorkspacePhase(config, logger, dir, projectDir, profile) {
50
- const baseDir = resolveBaseDir(projectDir);
51
- // Кросс-девайс диагностика: полный отчёт окружения (ОС, рантайм, engines,
52
- // PATH-тулы, провайдер/ретраи, playwright) на каждый старт.
53
- const envReport = collectEnvironment({
54
- configDir: dir,
55
- baseDir,
56
- config,
57
- scanTools: process.env.NODE_ENV !== "test",
58
- });
59
- logEnvironment(envReport, logger);
60
- for (const warning of envReport.warnings) {
61
- logger.warn(warning);
62
- }
63
- const projectMapCacheDir = projectMmaDir(baseDir);
64
- const indexerModule = new IndexerModule({
65
- baseDir,
66
- cacheDir: projectMapCacheDir,
67
- });
68
- try {
69
- // Строим (или грузим из кэша) индекс проекта. На большом workspace первый
70
- // обход подвисает старт без вывода — анонсируем оба конца, чтобы тишина
71
- // была объяснена.
72
- logger.info(t("env.indexing"));
73
- const index = await indexerModule.buildIndex();
74
- if (index) {
75
- logger.info(t("env.indexed", { files: String(index.files.length) }));
76
- }
77
- else {
78
- logger.warn(t("env.indexing_failed", { error: "no index produced" }));
79
- }
80
- }
81
- catch (err) {
82
- const msg = err instanceof Error ? err.message : String(err);
83
- logger.warn(t("env.indexing_failed", { error: msg }));
84
- }
85
- const skillsLoader = new SkillsLoader();
86
- const builtinDir = join(import.meta.dirname, "skills", "builtin");
87
- const globalDir = join(homedir(), ".agents", "skills");
88
- const projectSkillsDir = join(projectMmaDir(baseDir), "skills");
89
- const availableSkills = skillsLoader.loadFromAllSources(builtinDir, globalDir, projectSkillsDir);
90
- const skillsBudget = Math.floor(config.contextWindow * config.skills.budget);
91
- const skillsModule = new SkillsModule(availableSkills, skillsBudget);
92
- const toolRegistry = new ToolRegistry();
93
- registerAllTools(toolRegistry, skillsModule, {
94
- enableOnDemand: config.tools?.enableOnDemand,
95
- });
96
- const pluginManager = new PluginManager();
97
- // SystemInfo собирается здесь из готового профиля (в исходнике — сразу
98
- // после создания pluginManager; сайд-эффектов чтения профиля тут уже нет).
99
- const systemInfoContent = buildSystemInfo(config, baseDir, profile.compress());
100
- const systemInfoPrompt = {
101
- content: systemInfoContent,
102
- priority: "critical",
103
- essential: true,
104
- estimatedTokens: estimateTokens(systemInfoContent),
105
- };
106
- return {
107
- baseDir,
108
- envReport,
109
- indexerModule,
110
- skillsModule,
111
- toolRegistry,
112
- pluginManager,
113
- systemInfoPrompt,
114
- };
115
- }
@@ -1,112 +0,0 @@
1
- import { initConfigPhase } from "./bootstrap/config-phase";
2
- import { setupProviderPhase } from "./bootstrap/provider-phase";
3
- import { setupWorkspacePhase } from "./bootstrap/workspace-phase";
4
- import { setupSessionPhase } from "./bootstrap/session-phase";
5
- import { setupModulesPhase } from "./bootstrap/modules-phase";
6
- import { assembleAgent } from "./bootstrap/agent-phase";
7
- // Публичные экспорты 1:1 (сигнатуры и поведение не меняются) — потребители
8
- // (cli/main, web-command, тесты) продолжают импортить из "../core/bootstrap".
9
- export { applyReasoningCliOverride } from "./bootstrap/config-phase";
10
- export { applyProbedContext } from "./bootstrap/provider-phase";
11
- export { resolveBaseDir } from "./bootstrap/workspace-phase";
12
- export { agentsMdPaths, setOneShotMode } from "./bootstrap/state";
13
- export { buildSystemInfo } from "./system-prompt";
14
- /**
15
- * Собирает всё для работы агента: конфиг, окружение, провайдер, пробы,
16
- * тулы, модули, Agent. Тяжёлые старты (health-check, пробы) — фоном.
17
- * Тонкий оркестратор: каждая фаза — в `src/core/bootstrap/*.ts`.
18
- * @param configDir каталог конфига; @param projectDir workspace;
19
- * @param noAgentsMd пропустить AGENTS.md; @param exitOnComplete стоп на первом ответе;
20
- * @param reasoningLevel CLI-override reasoning; @param contextLog git-лог контекста.
21
- * @returns агент и окружение.
22
- */
23
- export async function bootstrap(configDir, projectDir, noAgentsMd, exitOnComplete, reasoningLevel, contextLog) {
24
- // Фаза 1: пути, конфиг, локаль, логгер.
25
- const { dir, config, legacyDetected, logger } = await initConfigPhase(configDir, projectDir, reasoningLevel);
26
- // Фаза 2: провайдер, автозагрузка модели, фоновые пробы, профиль.
27
- const provider = await setupProviderPhase(config, logger, dir);
28
- // Фаза 3: workspace, окружение, индекс, скиллы, реестр тулов, system-блок.
29
- const workspace = await setupWorkspacePhase(config, logger, dir, projectDir, provider.profile);
30
- // Фаза 4: сессии, context-лог, менеджер контекста, живой toolCtx.
31
- const session = await setupSessionPhase({
32
- config,
33
- logger,
34
- dir,
35
- baseDir: workspace.baseDir,
36
- exitOnComplete,
37
- contextLogFlag: contextLog,
38
- contextProbePromise: provider.contextProbePromise,
39
- capabilitiesRef: provider.capabilitiesRef,
40
- llmProvider: provider.llmProvider,
41
- bindSessionManager: provider.bindSessionManager,
42
- toolRegistry: workspace.toolRegistry,
43
- pluginManager: workspace.pluginManager,
44
- });
45
- // Фаза 5: модули, плагины, промпт-блоки, dry-run переполнения.
46
- const modules = await setupModulesPhase({
47
- config,
48
- logger,
49
- dir,
50
- baseDir: workspace.baseDir,
51
- noAgentsMd,
52
- exitOnComplete,
53
- toolRegistry: workspace.toolRegistry,
54
- pluginManager: workspace.pluginManager,
55
- skillsModule: workspace.skillsModule,
56
- indexerModule: workspace.indexerModule,
57
- sessionManager: session.sessionManager,
58
- contextManager: session.contextManager,
59
- toolCtx: session.toolCtx,
60
- activeToolTags: session.activeToolTags,
61
- hallucinationDetector: session.hallucinationDetector,
62
- systemInfoPrompt: workspace.systemInfoPrompt,
63
- });
64
- // Фаза 6: AgentDeps, late-apply пробы, set_thinking.
65
- const agent = await assembleAgent({
66
- config,
67
- configRef: session.configRef,
68
- llmProvider: provider.llmProvider,
69
- providerManager: provider.providerManager,
70
- toolExecutor: session.toolExecutor,
71
- pluginManager: workspace.pluginManager,
72
- contextManager: session.contextManager,
73
- hallucinationDetector: session.hallucinationDetector,
74
- logger,
75
- baseDir: workspace.baseDir,
76
- configDir: dir,
77
- activeToolTags: session.activeToolTags,
78
- promptBlocks: modules.promptBlocks,
79
- envReport: workspace.envReport,
80
- getDynamicPromptBlocks: modules.getDynamicPromptBlocks,
81
- lazyPromptBlocks: modules.lazyPromptBlocks,
82
- sessionManager: session.sessionManager,
83
- memoryStore: modules.memoryStore,
84
- moduleRegistry: modules.moduleRegistry,
85
- exitOnComplete,
86
- contextLogger: session.contextLogger,
87
- reasoningProbePromise: provider.reasoningProbePromise,
88
- reasoningStrategy: provider.reasoningStrategy,
89
- execModule: modules.execModule,
90
- toolCtx: session.toolCtx,
91
- contextProbePromise: provider.contextProbePromise,
92
- }, workspace.toolRegistry);
93
- return {
94
- agent,
95
- config,
96
- logger,
97
- sessionManager: session.sessionManager,
98
- skillsModule: workspace.skillsModule,
99
- pluginManager: workspace.pluginManager,
100
- execModule: modules.execModule,
101
- toolCtx: session.toolCtx,
102
- toolRegistry: workspace.toolRegistry,
103
- configDir: dir,
104
- baseDir: workspace.baseDir,
105
- noAgentsMd: noAgentsMd === true,
106
- envReport: workspace.envReport,
107
- legacyDetected,
108
- contextProbe: provider.contextProbePromise,
109
- memoryStore: modules.memoryStore,
110
- indexerModule: workspace.indexerModule,
111
- };
112
- }
@@ -1,62 +0,0 @@
1
- /** Глобальные обработчики падений: запись краша в ~/.mma/logs/crash.jsonl. */
2
- import { appendFileSync, mkdirSync } from "fs";
3
- import { join } from "path";
4
- import { homedir } from "os";
5
- import { collectEnvironment } from "./environment";
6
- import { sanitizeLogMessage } from "../modules/security/data-sanitizer";
7
- import { t } from "../i18n/index";
8
- import { errMsg } from "../utils";
9
- import { globalLogsDir } from "../config/paths";
10
- /** Каталог краш-логов. */
11
- export const CRASH_LOG_DIR = globalLogsDir();
12
- /** Имя файла краш-лога. */
13
- export const CRASH_LOG_FILE = "crash.jsonl";
14
- /**
15
- * Строит санитизированную запись о падении. Окружение снимается в момент
16
- * краша (без сканирования тулов).
17
- */
18
- export function formatCrashEntry(type, err) {
19
- const message = errMsg(err);
20
- const stack = err instanceof Error && err.stack ? err.stack : message;
21
- return {
22
- ts: new Date().toISOString(),
23
- type,
24
- message: sanitizeLogMessage(message),
25
- stack: sanitizeLogMessage(stack),
26
- environment: collectEnvironment({ configDir: homedir(), scanTools: false }),
27
- };
28
- }
29
- /**
30
- * Дописывает запись в краш-лог. Best-effort: отчёт о краше никогда не роняет процесс.
31
- */
32
- export function writeCrashEntry(dir, entry) {
33
- try {
34
- mkdirSync(dir, { recursive: true });
35
- appendFileSync(join(dir, CRASH_LOG_FILE), `${JSON.stringify(entry)}\n`, "utf-8");
36
- }
37
- catch {
38
- // Best-effort — отчёт о краше не должен ронять процесс
39
- }
40
- }
41
- let installed = false;
42
- /**
43
- * Ставит глобальные обработчики. uncaughtException логируется и завершает
44
- * процесс (exit 1 — продолжение в битом состоянии недопустимо);
45
- * unhandledRejection только логируется (цикл продолжает работу).
46
- */
47
- export function installCrashHandlers() {
48
- if (installed)
49
- return;
50
- installed = true;
51
- process.on("uncaughtException", (err) => {
52
- const entry = formatCrashEntry("uncaughtException", err);
53
- writeCrashEntry(CRASH_LOG_DIR, entry);
54
- process.stderr.write(`${t("env.crash_stderr", { type: entry.type, message: entry.message })}\n`);
55
- process.exit(1);
56
- });
57
- process.on("unhandledRejection", (reason) => {
58
- const entry = formatCrashEntry("unhandledRejection", reason);
59
- writeCrashEntry(CRASH_LOG_DIR, entry);
60
- process.stderr.write(`${t("env.crash_stderr", { type: entry.type, message: entry.message })}\n`);
61
- });
62
- }