micro-models-agent 2.16.1 → 2.17.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 (428) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +8 -3
  3. package/dist/assets/app.js +1 -314
  4. package/dist/assets/hljs.js +5 -1244
  5. package/dist/assets/index.html +11 -0
  6. package/dist/assets/js/api.js +1 -28
  7. package/dist/assets/js/core/menus.js +1 -0
  8. package/dist/assets/js/core/store/feed.js +1 -0
  9. package/dist/assets/js/core/store/index.js +1 -0
  10. package/dist/assets/js/core/store/session.js +1 -0
  11. package/dist/assets/js/core/store/settings.js +1 -0
  12. package/dist/assets/js/core/store/tabs.js +1 -0
  13. package/dist/assets/js/dialog.js +1 -105
  14. package/dist/assets/js/dom.js +1 -178
  15. package/dist/assets/js/feed/core.js +1 -0
  16. package/dist/assets/js/feed/history.js +1 -0
  17. package/dist/assets/js/feed/plan.js +1 -0
  18. package/dist/assets/js/feed/question.js +3 -0
  19. package/dist/assets/js/feed/sidebar.js +1 -0
  20. package/dist/assets/js/feed/stream.js +1 -0
  21. package/dist/assets/js/feed/turn.js +5 -0
  22. package/dist/assets/js/feed.js +1 -1250
  23. package/dist/assets/js/format.js +2 -122
  24. package/dist/assets/js/i18n.js +1 -46
  25. package/dist/assets/js/rail.js +1 -114
  26. package/dist/assets/js/session/cmdk.js +1 -0
  27. package/dist/assets/js/session/composer.js +1 -0
  28. package/dist/assets/js/session/sessions-menu.js +1 -0
  29. package/dist/assets/js/session/tabs.js +1 -0
  30. package/dist/assets/js/settings/controls.js +1 -0
  31. package/dist/assets/js/settings/editors.js +1 -0
  32. package/dist/assets/js/settings/form.js +1 -0
  33. package/dist/assets/js/settings/modal.js +1 -0
  34. package/dist/assets/js/settings/panels.js +1 -0
  35. package/dist/assets/js/settings/providers.js +1 -0
  36. package/dist/assets/js/settings/search.js +1 -0
  37. package/dist/assets/js/settings/subdialog.js +1 -0
  38. package/dist/assets/js/settings/write.js +1 -0
  39. package/dist/assets/js/settings.js +1 -1914
  40. package/dist/assets/js/sidebar/core.js +1 -0
  41. package/dist/assets/js/sidebar/lsp.js +2 -0
  42. package/dist/assets/js/sidebar/map.js +1 -0
  43. package/dist/assets/js/sidebar/state.js +1 -0
  44. package/dist/assets/js/sidebar/trace.js +5 -0
  45. package/dist/assets/js/sidebar.js +1 -705
  46. package/dist/assets/js/store.js +1 -82
  47. package/dist/assets/js/subdialog.js +1 -0
  48. package/dist/assets/md.js +1 -291
  49. package/dist/assets/setup.js +3 -816
  50. package/dist/assets/smd.js +29 -1665
  51. package/dist/assets/styles.css +1 -1598
  52. package/dist/certification/certifications.json +1 -494
  53. package/dist/i18n/en.json +1 -1851
  54. package/dist/i18n/ru.json +1 -1854
  55. package/dist/main.js +815 -55797
  56. package/dist/modules/browser/bridge-server.mjs +2 -252
  57. package/package.json +10 -5
  58. package/dist/assets/js/settings-controls.js +0 -452
  59. package/dist/assets/js/tabs.js +0 -867
  60. package/dist/cli/cache-line.js +0 -31
  61. package/dist/cli/command-suggest.js +0 -39
  62. package/dist/cli/commands.js +0 -781
  63. package/dist/cli/completer.js +0 -268
  64. package/dist/cli/index.js +0 -3
  65. package/dist/cli/json-payload.js +0 -32
  66. package/dist/cli/main.js +0 -346
  67. package/dist/cli/onboarding-commands.js +0 -126
  68. package/dist/cli/plugin-commands.js +0 -38
  69. package/dist/cli/relaunch.js +0 -40
  70. package/dist/cli/repl-commands-lsp.js +0 -75
  71. package/dist/cli/repl-commands-skills.js +0 -105
  72. package/dist/cli/repl-commands.js +0 -1218
  73. package/dist/cli/repl.js +0 -1238
  74. package/dist/cli/run-result.js +0 -38
  75. package/dist/cli/security-commands.js +0 -177
  76. package/dist/cli/setup-order.js +0 -6
  77. package/dist/cli/setup-prompt.js +0 -50
  78. package/dist/cli/setup.js +0 -161
  79. package/dist/cli/web-command.js +0 -98
  80. package/dist/config/budget.js +0 -48
  81. package/dist/config/config.js +0 -345
  82. package/dist/config/defaults.js +0 -197
  83. package/dist/config/domains.js +0 -135
  84. package/dist/config/env.js +0 -46
  85. package/dist/config/experts.js +0 -17
  86. package/dist/config/index.js +0 -5
  87. package/dist/config/paths.js +0 -56
  88. package/dist/config/redact.js +0 -44
  89. package/dist/config/registry-extra.js +0 -334
  90. package/dist/config/registry.js +0 -584
  91. package/dist/config/security.js +0 -212
  92. package/dist/config/timeouts.js +0 -74
  93. package/dist/config/types.js +0 -1
  94. package/dist/config/utils.js +0 -57
  95. package/dist/core/agent/artifact-progress.js +0 -59
  96. package/dist/core/agent/artifact-resolve.js +0 -79
  97. package/dist/core/agent/audit-gate.js +0 -53
  98. package/dist/core/agent/compaction.js +0 -89
  99. package/dist/core/agent/constants.js +0 -90
  100. package/dist/core/agent/context-log.js +0 -454
  101. package/dist/core/agent/context-renderer.js +0 -45
  102. package/dist/core/agent/critic-gate.js +0 -132
  103. package/dist/core/agent/hallucination-gate.js +0 -197
  104. package/dist/core/agent/loop-state.js +0 -68
  105. package/dist/core/agent/prefix-monitor.js +0 -101
  106. package/dist/core/agent/reasoning-resolver.js +0 -65
  107. package/dist/core/agent/token-tracker.js +0 -99
  108. package/dist/core/agent/tool-batch.js +0 -312
  109. package/dist/core/agent/tool-images.js +0 -18
  110. package/dist/core/agent/tool-output.js +0 -116
  111. package/dist/core/agent/tool-pairing.js +0 -60
  112. package/dist/core/agent-moe.js +0 -248
  113. package/dist/core/agent.js +0 -1299
  114. package/dist/core/bootstrap/agent-phase.js +0 -66
  115. package/dist/core/bootstrap/config-phase.js +0 -86
  116. package/dist/core/bootstrap/modules-phase.js +0 -269
  117. package/dist/core/bootstrap/provider-phase.js +0 -183
  118. package/dist/core/bootstrap/session-phase.js +0 -204
  119. package/dist/core/bootstrap/state.js +0 -94
  120. package/dist/core/bootstrap/workspace-phase.js +0 -115
  121. package/dist/core/bootstrap.js +0 -112
  122. package/dist/core/crash-handler.js +0 -62
  123. package/dist/core/environment.js +0 -224
  124. package/dist/core/host-plan.js +0 -43
  125. package/dist/core/host.js +0 -23
  126. package/dist/core/index.js +0 -3
  127. package/dist/core/prompt-builder.js +0 -95
  128. package/dist/core/prompt-overflow.js +0 -306
  129. package/dist/core/session-logger.js +0 -375
  130. package/dist/core/system-prompt.js +0 -117
  131. package/dist/core/types.js +0 -1
  132. package/dist/core/version.js +0 -28
  133. package/dist/core/web-host.js +0 -34
  134. package/dist/core/workspace.js +0 -80
  135. package/dist/i18n/index.js +0 -80
  136. package/dist/index.js +0 -30
  137. package/dist/llm/cache-usage.js +0 -76
  138. package/dist/llm/image-utils.js +0 -138
  139. package/dist/llm/index.js +0 -4
  140. package/dist/llm/llm-errors.js +0 -50
  141. package/dist/llm/model-loader.js +0 -86
  142. package/dist/llm/models-dev.js +0 -121
  143. package/dist/llm/openai-compat.js +0 -756
  144. package/dist/llm/orchestrator.js +0 -294
  145. package/dist/llm/provider-budget.js +0 -68
  146. package/dist/llm/provider-context.js +0 -233
  147. package/dist/llm/provider.js +0 -9
  148. package/dist/llm/response.js +0 -44
  149. package/dist/llm/stream-state.js +0 -26
  150. package/dist/llm/token-counter.js +0 -83
  151. package/dist/llm/types.js +0 -1
  152. package/dist/logger/app-logger.js +0 -212
  153. package/dist/logger/file-log.js +0 -160
  154. package/dist/logger/index.js +0 -2
  155. package/dist/migration/backup.js +0 -56
  156. package/dist/migration/detect.js +0 -61
  157. package/dist/migration/index.js +0 -3
  158. package/dist/modules/artifacts/store.js +0 -62
  159. package/dist/modules/browser/actions.js +0 -79
  160. package/dist/modules/browser/bridge-client.js +0 -203
  161. package/dist/modules/browser/bridge-path.js +0 -10
  162. package/dist/modules/browser/console-buffer.js +0 -37
  163. package/dist/modules/browser/cookie-store.js +0 -29
  164. package/dist/modules/browser/driver-types.js +0 -1
  165. package/dist/modules/browser/driver.js +0 -186
  166. package/dist/modules/browser/index.js +0 -9
  167. package/dist/modules/browser/module.js +0 -30
  168. package/dist/modules/browser/session.js +0 -322
  169. package/dist/modules/browser/snapshot.js +0 -154
  170. package/dist/modules/browser/types.js +0 -13
  171. package/dist/modules/certification/cli.js +0 -264
  172. package/dist/modules/certification/fact-checker.js +0 -90
  173. package/dist/modules/certification/loader.js +0 -127
  174. package/dist/modules/certification/manifest.js +0 -231
  175. package/dist/modules/certification/runner.js +0 -233
  176. package/dist/modules/certification/scenarios.js +0 -586
  177. package/dist/modules/certification/syntax-scenarios.js +0 -50
  178. package/dist/modules/certification/types.js +0 -1
  179. package/dist/modules/context/chunk-query.js +0 -122
  180. package/dist/modules/context/fact-extractor.js +0 -170
  181. package/dist/modules/context/history.js +0 -15
  182. package/dist/modules/context/index.js +0 -2
  183. package/dist/modules/context/manager.js +0 -482
  184. package/dist/modules/critic/client.js +0 -176
  185. package/dist/modules/critic/evidence.js +0 -81
  186. package/dist/modules/critic/provider.js +0 -45
  187. package/dist/modules/critic/tools.js +0 -78
  188. package/dist/modules/critic/types.js +0 -1
  189. package/dist/modules/execution/audit-runners.js +0 -206
  190. package/dist/modules/execution/auditor.js +0 -222
  191. package/dist/modules/execution/execution-plugin.js +0 -478
  192. package/dist/modules/execution/index.js +0 -8
  193. package/dist/modules/execution/input-from.js +0 -70
  194. package/dist/modules/execution/module.js +0 -891
  195. package/dist/modules/execution/moe-executor.js +0 -443
  196. package/dist/modules/execution/plan-actions.js +0 -642
  197. package/dist/modules/execution/plan-checks.js +0 -35
  198. package/dist/modules/execution/plan-coverage.js +0 -71
  199. package/dist/modules/execution/plan-persister.js +0 -46
  200. package/dist/modules/execution/plan-steps.js +0 -31
  201. package/dist/modules/execution/plan-store.js +0 -274
  202. package/dist/modules/execution/plan-tool.js +0 -249
  203. package/dist/modules/execution/plan-validator.js +0 -197
  204. package/dist/modules/execution/planner.js +0 -103
  205. package/dist/modules/execution/stuck-detector.js +0 -834
  206. package/dist/modules/execution/tracker.js +0 -92
  207. package/dist/modules/execution/transient-error.js +0 -30
  208. package/dist/modules/execution/types.js +0 -1
  209. package/dist/modules/execution/verifier.js +0 -343
  210. package/dist/modules/execution/windows-commands.js +0 -52
  211. package/dist/modules/hallucination/artifact-claim.js +0 -93
  212. package/dist/modules/hallucination/confidence.js +0 -81
  213. package/dist/modules/hallucination/consistency.js +0 -37
  214. package/dist/modules/hallucination/detector.js +0 -57
  215. package/dist/modules/hallucination/factual.js +0 -205
  216. package/dist/modules/hallucination/index.js +0 -6
  217. package/dist/modules/hallucination/js-identifiers.js +0 -261
  218. package/dist/modules/hallucination/llm-judge.js +0 -116
  219. package/dist/modules/hallucination/success-claim.js +0 -59
  220. package/dist/modules/index.js +0 -5
  221. package/dist/modules/indexer/cache.js +0 -88
  222. package/dist/modules/indexer/index.js +0 -4
  223. package/dist/modules/indexer/map-command.js +0 -33
  224. package/dist/modules/indexer/map-select.js +0 -87
  225. package/dist/modules/indexer/module.js +0 -293
  226. package/dist/modules/indexer/project-profile.js +0 -184
  227. package/dist/modules/indexer/symbols.js +0 -189
  228. package/dist/modules/indexer/walker.js +0 -285
  229. package/dist/modules/lsp/check-tool.js +0 -61
  230. package/dist/modules/lsp/client.js +0 -406
  231. package/dist/modules/lsp/command.js +0 -53
  232. package/dist/modules/lsp/config.js +0 -189
  233. package/dist/modules/lsp/index.js +0 -4
  234. package/dist/modules/lsp/module.js +0 -295
  235. package/dist/modules/lsp/probe.js +0 -86
  236. package/dist/modules/lsp/project-root.js +0 -69
  237. package/dist/modules/lsp/startup-check.js +0 -154
  238. package/dist/modules/lsp/types.js +0 -1
  239. package/dist/modules/mcp/client.js +0 -445
  240. package/dist/modules/mcp/index.js +0 -4
  241. package/dist/modules/mcp/module.js +0 -295
  242. package/dist/modules/mcp/registry.js +0 -20
  243. package/dist/modules/memory/index.js +0 -2
  244. package/dist/modules/memory/module.js +0 -101
  245. package/dist/modules/memory/search.js +0 -45
  246. package/dist/modules/memory/store.js +0 -107
  247. package/dist/modules/onboarding/init.js +0 -47
  248. package/dist/modules/onboarding/meet.js +0 -30
  249. package/dist/modules/onboarding/mode.js +0 -30
  250. package/dist/modules/onboarding/prompts.js +0 -43
  251. package/dist/modules/pipelines/engine.js +0 -70
  252. package/dist/modules/pipelines/index.js +0 -4
  253. package/dist/modules/pipelines/parser.js +0 -59
  254. package/dist/modules/pipelines/template.js +0 -18
  255. package/dist/modules/plugins/builtin/lint-on-write.js +0 -377
  256. package/dist/modules/plugins/builtin/notify.js +0 -11
  257. package/dist/modules/plugins/index.js +0 -2
  258. package/dist/modules/plugins/loader.js +0 -85
  259. package/dist/modules/plugins/manager.js +0 -244
  260. package/dist/modules/plugins/types.js +0 -1
  261. package/dist/modules/pricing/index.js +0 -70
  262. package/dist/modules/pricing/prices.js +0 -147
  263. package/dist/modules/processes/detect.js +0 -34
  264. package/dist/modules/processes/index.js +0 -4
  265. package/dist/modules/processes/kill-tree.js +0 -52
  266. package/dist/modules/processes/registry.js +0 -294
  267. package/dist/modules/processes/runner.js +0 -23
  268. package/dist/modules/providers/cache.js +0 -23
  269. package/dist/modules/providers/capabilities.js +0 -28
  270. package/dist/modules/providers/create.js +0 -21
  271. package/dist/modules/providers/factory.js +0 -28
  272. package/dist/modules/providers/fallback.js +0 -81
  273. package/dist/modules/providers/health.js +0 -47
  274. package/dist/modules/providers/index.js +0 -6
  275. package/dist/modules/providers/manager.js +0 -207
  276. package/dist/modules/providers/naming.js +0 -15
  277. package/dist/modules/providers/preflight.js +0 -71
  278. package/dist/modules/providers/presets.js +0 -232
  279. package/dist/modules/providers/registry.js +0 -27
  280. package/dist/modules/providers/types.js +0 -1
  281. package/dist/modules/reasoning/policy.js +0 -42
  282. package/dist/modules/reasoning/probe.js +0 -116
  283. package/dist/modules/registry.js +0 -48
  284. package/dist/modules/security/audit-log.js +0 -119
  285. package/dist/modules/security/audit-notifier.js +0 -267
  286. package/dist/modules/security/command-validator.js +0 -272
  287. package/dist/modules/security/content-scanner.js +0 -53
  288. package/dist/modules/security/data-sanitizer.js +0 -82
  289. package/dist/modules/security/encryption.js +0 -216
  290. package/dist/modules/security/index.js +0 -15
  291. package/dist/modules/security/network-validator.js +0 -236
  292. package/dist/modules/security/path-validator.js +0 -261
  293. package/dist/modules/security/protected-paths.js +0 -73
  294. package/dist/modules/security/rate-limiter.js +0 -98
  295. package/dist/modules/security/security-policies.js +0 -499
  296. package/dist/modules/security/session-encryption.js +0 -182
  297. package/dist/modules/security/session-isolation.js +0 -75
  298. package/dist/modules/session/auto-name.js +0 -63
  299. package/dist/modules/session/export.js +0 -98
  300. package/dist/modules/session/index.js +0 -4
  301. package/dist/modules/session/manager.js +0 -234
  302. package/dist/modules/session/module.js +0 -33
  303. package/dist/modules/session/store.js +0 -295
  304. package/dist/modules/session/types.js +0 -1
  305. package/dist/modules/setup/answers.js +0 -35
  306. package/dist/modules/setup/apply.js +0 -79
  307. package/dist/modules/setup/discovery.js +0 -72
  308. package/dist/modules/skills/index.js +0 -3
  309. package/dist/modules/skills/loader.js +0 -86
  310. package/dist/modules/skills/matcher.js +0 -27
  311. package/dist/modules/skills/module.js +0 -141
  312. package/dist/modules/types.js +0 -1
  313. package/dist/modules/updater/changelog-reader.js +0 -93
  314. package/dist/modules/updater/checker.js +0 -101
  315. package/dist/modules/updater/dev-detect.js +0 -18
  316. package/dist/modules/updater/index.js +0 -4
  317. package/dist/modules/updater/module.js +0 -129
  318. package/dist/modules/user-profile/compressor.js +0 -18
  319. package/dist/modules/user-profile/index.js +0 -2
  320. package/dist/modules/user-profile/profile.js +0 -77
  321. package/dist/modules/webui/answer-api.js +0 -29
  322. package/dist/modules/webui/assets.js +0 -50
  323. package/dist/modules/webui/body.js +0 -21
  324. package/dist/modules/webui/commands-settings.js +0 -209
  325. package/dist/modules/webui/commands-shared.js +0 -60
  326. package/dist/modules/webui/commands.js +0 -174
  327. package/dist/modules/webui/config-api.js +0 -134
  328. package/dist/modules/webui/file-api.js +0 -202
  329. package/dist/modules/webui/forward.js +0 -159
  330. package/dist/modules/webui/history-api.js +0 -112
  331. package/dist/modules/webui/host-state.js +0 -60
  332. package/dist/modules/webui/i18n-api.js +0 -9
  333. package/dist/modules/webui/limits.js +0 -6
  334. package/dist/modules/webui/log-forward.js +0 -20
  335. package/dist/modules/webui/memory-commands.js +0 -64
  336. package/dist/modules/webui/model-cache.js +0 -18
  337. package/dist/modules/webui/module.js +0 -148
  338. package/dist/modules/webui/persist.js +0 -24
  339. package/dist/modules/webui/prompt-io.js +0 -97
  340. package/dist/modules/webui/providers-api.js +0 -337
  341. package/dist/modules/webui/providers-view.js +0 -56
  342. package/dist/modules/webui/reasoning-view.js +0 -15
  343. package/dist/modules/webui/run-agent.js +0 -81
  344. package/dist/modules/webui/server.js +0 -284
  345. package/dist/modules/webui/sessions-api.js +0 -178
  346. package/dist/modules/webui/settings-api.js +0 -561
  347. package/dist/modules/webui/setup-api.js +0 -201
  348. package/dist/modules/webui/state.js +0 -74
  349. package/dist/modules/webui/util.js +0 -261
  350. package/dist/output/bus.js +0 -37
  351. package/dist/output/channel.js +0 -285
  352. package/dist/output/format.js +0 -15
  353. package/dist/output/index.js +0 -8
  354. package/dist/output/json-sink.js +0 -24
  355. package/dist/output/machine.js +0 -9
  356. package/dist/output/session-sink.js +0 -27
  357. package/dist/output/types.js +0 -1
  358. package/dist/tools/approve.js +0 -41
  359. package/dist/tools/attach-image.js +0 -102
  360. package/dist/tools/auto-fixer.js +0 -180
  361. package/dist/tools/auto-tags.js +0 -83
  362. package/dist/tools/bash.js +0 -649
  363. package/dist/tools/browser.js +0 -160
  364. package/dist/tools/chunk-query.js +0 -112
  365. package/dist/tools/create-dir.js +0 -60
  366. package/dist/tools/delete-file.js +0 -67
  367. package/dist/tools/download-file.js +0 -142
  368. package/dist/tools/edit-file.js +0 -136
  369. package/dist/tools/enable-tools.js +0 -59
  370. package/dist/tools/executor.js +0 -304
  371. package/dist/tools/file-info.js +0 -49
  372. package/dist/tools/filter-tools.js +0 -17
  373. package/dist/tools/glob-tool.js +0 -37
  374. package/dist/tools/grep-tool.js +0 -142
  375. package/dist/tools/hidden-tools-block.js +0 -37
  376. package/dist/tools/index.js +0 -88
  377. package/dist/tools/list-dir.js +0 -53
  378. package/dist/tools/load-skill.js +0 -51
  379. package/dist/tools/mcp-call.js +0 -80
  380. package/dist/tools/meet-done.js +0 -14
  381. package/dist/tools/move-file.js +0 -94
  382. package/dist/tools/path-utils.js +0 -108
  383. package/dist/tools/pipeline-run.js +0 -167
  384. package/dist/tools/preview.js +0 -2
  385. package/dist/tools/process-ids.js +0 -31
  386. package/dist/tools/process-kill.js +0 -33
  387. package/dist/tools/process-list.js +0 -38
  388. package/dist/tools/process-log.js +0 -49
  389. package/dist/tools/process-wait.js +0 -63
  390. package/dist/tools/prompt-io.js +0 -29
  391. package/dist/tools/question.js +0 -288
  392. package/dist/tools/read-file.js +0 -200
  393. package/dist/tools/recall.js +0 -124
  394. package/dist/tools/registry.js +0 -48
  395. package/dist/tools/remember.js +0 -72
  396. package/dist/tools/scope-check.js +0 -32
  397. package/dist/tools/scope-request.js +0 -96
  398. package/dist/tools/search-history.js +0 -88
  399. package/dist/tools/session-info.js +0 -46
  400. package/dist/tools/set-thinking.js +0 -75
  401. package/dist/tools/subagent.js +0 -257
  402. package/dist/tools/syntax-validator.js +0 -379
  403. package/dist/tools/types.js +0 -1
  404. package/dist/tools/user-input.js +0 -134
  405. package/dist/tools/web-browse.js +0 -93
  406. package/dist/tools/web-fetch.js +0 -108
  407. package/dist/tools/web-search.js +0 -107
  408. package/dist/tools/write-file.js +0 -128
  409. package/dist/ui/action-log.js +0 -13
  410. package/dist/ui/box.js +0 -78
  411. package/dist/ui/colors.js +0 -6
  412. package/dist/ui/diff.js +0 -189
  413. package/dist/ui/index.js +0 -7
  414. package/dist/ui/line-editor.js +0 -1083
  415. package/dist/ui/line-math.js +0 -98
  416. package/dist/ui/md-formatter.js +0 -322
  417. package/dist/ui/output.js +0 -19
  418. package/dist/ui/plan-view.js +0 -109
  419. package/dist/ui/renderer.js +0 -589
  420. package/dist/ui/spinner.js +0 -91
  421. package/dist/ui/table.js +0 -142
  422. package/dist/ui/theme.js +0 -143
  423. package/dist/utils/child-run.js +0 -20
  424. package/dist/utils/error.js +0 -4
  425. package/dist/utils/index.js +0 -6
  426. package/dist/utils/retry.js +0 -17
  427. package/dist/utils/sleep.js +0 -23
  428. 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
- }