micro-models-agent 2.16.1 → 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.
- package/CHANGELOG.md +28 -0
- package/dist/assets/app.js +1 -314
- package/dist/assets/hljs.js +5 -1244
- package/dist/assets/index.html +11 -0
- package/dist/assets/js/api.js +1 -28
- package/dist/assets/js/core/menus.js +1 -0
- package/dist/assets/js/core/store/feed.js +1 -0
- package/dist/assets/js/core/store/index.js +1 -0
- package/dist/assets/js/core/store/session.js +1 -0
- package/dist/assets/js/core/store/settings.js +1 -0
- package/dist/assets/js/core/store/tabs.js +1 -0
- package/dist/assets/js/dialog.js +1 -105
- package/dist/assets/js/dom.js +1 -178
- package/dist/assets/js/feed/core.js +1 -0
- package/dist/assets/js/feed/history.js +1 -0
- package/dist/assets/js/feed/plan.js +1 -0
- package/dist/assets/js/feed/question.js +3 -0
- package/dist/assets/js/feed/sidebar.js +1 -0
- package/dist/assets/js/feed/stream.js +1 -0
- package/dist/assets/js/feed/turn.js +5 -0
- package/dist/assets/js/feed.js +1 -1250
- package/dist/assets/js/format.js +2 -122
- package/dist/assets/js/i18n.js +1 -46
- package/dist/assets/js/rail.js +1 -114
- package/dist/assets/js/session/cmdk.js +1 -0
- package/dist/assets/js/session/composer.js +1 -0
- package/dist/assets/js/session/sessions-menu.js +1 -0
- package/dist/assets/js/session/tabs.js +1 -0
- package/dist/assets/js/settings/controls.js +1 -0
- package/dist/assets/js/settings/editors.js +1 -0
- package/dist/assets/js/settings/form.js +1 -0
- package/dist/assets/js/settings/modal.js +1 -0
- package/dist/assets/js/settings/panels.js +1 -0
- package/dist/assets/js/settings/providers.js +1 -0
- package/dist/assets/js/settings/search.js +1 -0
- package/dist/assets/js/settings/subdialog.js +1 -0
- package/dist/assets/js/settings/write.js +1 -0
- package/dist/assets/js/settings.js +1 -1914
- package/dist/assets/js/sidebar/core.js +1 -0
- package/dist/assets/js/sidebar/lsp.js +2 -0
- package/dist/assets/js/sidebar/map.js +1 -0
- package/dist/assets/js/sidebar/state.js +1 -0
- package/dist/assets/js/sidebar/trace.js +5 -0
- package/dist/assets/js/sidebar.js +1 -705
- package/dist/assets/js/store.js +1 -82
- package/dist/assets/js/subdialog.js +1 -0
- package/dist/assets/md.js +1 -291
- package/dist/assets/setup.js +3 -816
- package/dist/assets/smd.js +29 -1665
- package/dist/assets/styles.css +1 -1598
- package/dist/certification/certifications.json +1 -494
- package/dist/i18n/en.json +1 -1851
- package/dist/i18n/ru.json +1 -1854
- package/dist/main.js +815 -55797
- package/dist/modules/browser/bridge-server.mjs +2 -252
- package/package.json +10 -5
- package/dist/assets/js/settings-controls.js +0 -452
- package/dist/assets/js/tabs.js +0 -867
- package/dist/cli/cache-line.js +0 -31
- package/dist/cli/command-suggest.js +0 -39
- package/dist/cli/commands.js +0 -781
- package/dist/cli/completer.js +0 -268
- package/dist/cli/index.js +0 -3
- package/dist/cli/json-payload.js +0 -32
- package/dist/cli/main.js +0 -346
- package/dist/cli/onboarding-commands.js +0 -126
- package/dist/cli/plugin-commands.js +0 -38
- package/dist/cli/relaunch.js +0 -40
- package/dist/cli/repl-commands-lsp.js +0 -75
- package/dist/cli/repl-commands-skills.js +0 -105
- package/dist/cli/repl-commands.js +0 -1218
- package/dist/cli/repl.js +0 -1238
- package/dist/cli/run-result.js +0 -38
- package/dist/cli/security-commands.js +0 -177
- package/dist/cli/setup-order.js +0 -6
- package/dist/cli/setup-prompt.js +0 -50
- package/dist/cli/setup.js +0 -161
- package/dist/cli/web-command.js +0 -98
- package/dist/config/budget.js +0 -48
- package/dist/config/config.js +0 -345
- package/dist/config/defaults.js +0 -197
- package/dist/config/domains.js +0 -135
- package/dist/config/env.js +0 -46
- package/dist/config/experts.js +0 -17
- package/dist/config/index.js +0 -5
- package/dist/config/paths.js +0 -56
- package/dist/config/redact.js +0 -44
- package/dist/config/registry-extra.js +0 -334
- package/dist/config/registry.js +0 -584
- package/dist/config/security.js +0 -212
- package/dist/config/timeouts.js +0 -74
- package/dist/config/types.js +0 -1
- package/dist/config/utils.js +0 -57
- package/dist/core/agent/artifact-progress.js +0 -59
- package/dist/core/agent/artifact-resolve.js +0 -79
- package/dist/core/agent/audit-gate.js +0 -53
- package/dist/core/agent/compaction.js +0 -89
- package/dist/core/agent/constants.js +0 -90
- package/dist/core/agent/context-log.js +0 -454
- package/dist/core/agent/context-renderer.js +0 -45
- package/dist/core/agent/critic-gate.js +0 -132
- package/dist/core/agent/hallucination-gate.js +0 -197
- package/dist/core/agent/loop-state.js +0 -68
- package/dist/core/agent/prefix-monitor.js +0 -101
- package/dist/core/agent/reasoning-resolver.js +0 -65
- package/dist/core/agent/token-tracker.js +0 -99
- package/dist/core/agent/tool-batch.js +0 -312
- package/dist/core/agent/tool-images.js +0 -18
- package/dist/core/agent/tool-output.js +0 -116
- package/dist/core/agent/tool-pairing.js +0 -60
- package/dist/core/agent-moe.js +0 -248
- package/dist/core/agent.js +0 -1299
- package/dist/core/bootstrap/agent-phase.js +0 -66
- package/dist/core/bootstrap/config-phase.js +0 -86
- package/dist/core/bootstrap/modules-phase.js +0 -269
- package/dist/core/bootstrap/provider-phase.js +0 -183
- package/dist/core/bootstrap/session-phase.js +0 -204
- package/dist/core/bootstrap/state.js +0 -94
- package/dist/core/bootstrap/workspace-phase.js +0 -115
- package/dist/core/bootstrap.js +0 -112
- package/dist/core/crash-handler.js +0 -62
- package/dist/core/environment.js +0 -224
- package/dist/core/host-plan.js +0 -43
- package/dist/core/host.js +0 -23
- package/dist/core/index.js +0 -3
- package/dist/core/prompt-builder.js +0 -95
- package/dist/core/prompt-overflow.js +0 -306
- package/dist/core/session-logger.js +0 -375
- package/dist/core/system-prompt.js +0 -117
- package/dist/core/types.js +0 -1
- package/dist/core/version.js +0 -28
- package/dist/core/web-host.js +0 -34
- package/dist/core/workspace.js +0 -80
- package/dist/i18n/index.js +0 -80
- package/dist/index.js +0 -30
- package/dist/llm/cache-usage.js +0 -76
- package/dist/llm/image-utils.js +0 -138
- package/dist/llm/index.js +0 -4
- package/dist/llm/llm-errors.js +0 -50
- package/dist/llm/model-loader.js +0 -86
- package/dist/llm/models-dev.js +0 -121
- package/dist/llm/openai-compat.js +0 -756
- package/dist/llm/orchestrator.js +0 -294
- package/dist/llm/provider-budget.js +0 -68
- package/dist/llm/provider-context.js +0 -233
- package/dist/llm/provider.js +0 -9
- package/dist/llm/response.js +0 -44
- package/dist/llm/stream-state.js +0 -26
- package/dist/llm/token-counter.js +0 -83
- package/dist/llm/types.js +0 -1
- package/dist/logger/app-logger.js +0 -212
- package/dist/logger/file-log.js +0 -160
- package/dist/logger/index.js +0 -2
- package/dist/migration/backup.js +0 -56
- package/dist/migration/detect.js +0 -61
- package/dist/migration/index.js +0 -3
- package/dist/modules/artifacts/store.js +0 -62
- package/dist/modules/browser/actions.js +0 -79
- package/dist/modules/browser/bridge-client.js +0 -203
- package/dist/modules/browser/bridge-path.js +0 -10
- package/dist/modules/browser/console-buffer.js +0 -37
- package/dist/modules/browser/cookie-store.js +0 -29
- package/dist/modules/browser/driver-types.js +0 -1
- package/dist/modules/browser/driver.js +0 -186
- package/dist/modules/browser/index.js +0 -9
- package/dist/modules/browser/module.js +0 -30
- package/dist/modules/browser/session.js +0 -322
- package/dist/modules/browser/snapshot.js +0 -154
- package/dist/modules/browser/types.js +0 -13
- package/dist/modules/certification/cli.js +0 -264
- package/dist/modules/certification/fact-checker.js +0 -90
- package/dist/modules/certification/loader.js +0 -127
- package/dist/modules/certification/manifest.js +0 -231
- package/dist/modules/certification/runner.js +0 -233
- package/dist/modules/certification/scenarios.js +0 -586
- package/dist/modules/certification/syntax-scenarios.js +0 -50
- package/dist/modules/certification/types.js +0 -1
- package/dist/modules/context/chunk-query.js +0 -122
- package/dist/modules/context/fact-extractor.js +0 -170
- package/dist/modules/context/history.js +0 -15
- package/dist/modules/context/index.js +0 -2
- package/dist/modules/context/manager.js +0 -482
- package/dist/modules/critic/client.js +0 -176
- package/dist/modules/critic/evidence.js +0 -81
- package/dist/modules/critic/provider.js +0 -45
- package/dist/modules/critic/tools.js +0 -78
- package/dist/modules/critic/types.js +0 -1
- package/dist/modules/execution/audit-runners.js +0 -206
- package/dist/modules/execution/auditor.js +0 -222
- package/dist/modules/execution/execution-plugin.js +0 -478
- package/dist/modules/execution/index.js +0 -8
- package/dist/modules/execution/input-from.js +0 -70
- package/dist/modules/execution/module.js +0 -891
- package/dist/modules/execution/moe-executor.js +0 -443
- package/dist/modules/execution/plan-actions.js +0 -642
- package/dist/modules/execution/plan-checks.js +0 -35
- package/dist/modules/execution/plan-coverage.js +0 -71
- package/dist/modules/execution/plan-persister.js +0 -46
- package/dist/modules/execution/plan-steps.js +0 -31
- package/dist/modules/execution/plan-store.js +0 -274
- package/dist/modules/execution/plan-tool.js +0 -249
- package/dist/modules/execution/plan-validator.js +0 -197
- package/dist/modules/execution/planner.js +0 -103
- package/dist/modules/execution/stuck-detector.js +0 -834
- package/dist/modules/execution/tracker.js +0 -92
- package/dist/modules/execution/transient-error.js +0 -30
- package/dist/modules/execution/types.js +0 -1
- package/dist/modules/execution/verifier.js +0 -343
- package/dist/modules/execution/windows-commands.js +0 -52
- package/dist/modules/hallucination/artifact-claim.js +0 -93
- package/dist/modules/hallucination/confidence.js +0 -81
- package/dist/modules/hallucination/consistency.js +0 -37
- package/dist/modules/hallucination/detector.js +0 -57
- package/dist/modules/hallucination/factual.js +0 -205
- package/dist/modules/hallucination/index.js +0 -6
- package/dist/modules/hallucination/js-identifiers.js +0 -261
- package/dist/modules/hallucination/llm-judge.js +0 -116
- package/dist/modules/hallucination/success-claim.js +0 -59
- package/dist/modules/index.js +0 -5
- package/dist/modules/indexer/cache.js +0 -88
- package/dist/modules/indexer/index.js +0 -4
- package/dist/modules/indexer/map-command.js +0 -33
- package/dist/modules/indexer/map-select.js +0 -87
- package/dist/modules/indexer/module.js +0 -293
- package/dist/modules/indexer/project-profile.js +0 -184
- package/dist/modules/indexer/symbols.js +0 -189
- package/dist/modules/indexer/walker.js +0 -285
- package/dist/modules/lsp/check-tool.js +0 -61
- package/dist/modules/lsp/client.js +0 -406
- package/dist/modules/lsp/command.js +0 -53
- package/dist/modules/lsp/config.js +0 -189
- package/dist/modules/lsp/index.js +0 -4
- package/dist/modules/lsp/module.js +0 -295
- package/dist/modules/lsp/probe.js +0 -86
- package/dist/modules/lsp/project-root.js +0 -69
- package/dist/modules/lsp/startup-check.js +0 -154
- package/dist/modules/lsp/types.js +0 -1
- package/dist/modules/mcp/client.js +0 -445
- package/dist/modules/mcp/index.js +0 -4
- package/dist/modules/mcp/module.js +0 -295
- package/dist/modules/mcp/registry.js +0 -20
- package/dist/modules/memory/index.js +0 -2
- package/dist/modules/memory/module.js +0 -101
- package/dist/modules/memory/search.js +0 -45
- package/dist/modules/memory/store.js +0 -107
- package/dist/modules/onboarding/init.js +0 -47
- package/dist/modules/onboarding/meet.js +0 -30
- package/dist/modules/onboarding/mode.js +0 -30
- package/dist/modules/onboarding/prompts.js +0 -43
- package/dist/modules/pipelines/engine.js +0 -70
- package/dist/modules/pipelines/index.js +0 -4
- package/dist/modules/pipelines/parser.js +0 -59
- package/dist/modules/pipelines/template.js +0 -18
- package/dist/modules/plugins/builtin/lint-on-write.js +0 -377
- package/dist/modules/plugins/builtin/notify.js +0 -11
- package/dist/modules/plugins/index.js +0 -2
- package/dist/modules/plugins/loader.js +0 -85
- package/dist/modules/plugins/manager.js +0 -244
- package/dist/modules/plugins/types.js +0 -1
- package/dist/modules/pricing/index.js +0 -70
- package/dist/modules/pricing/prices.js +0 -147
- package/dist/modules/processes/detect.js +0 -34
- package/dist/modules/processes/index.js +0 -4
- package/dist/modules/processes/kill-tree.js +0 -52
- package/dist/modules/processes/registry.js +0 -294
- package/dist/modules/processes/runner.js +0 -23
- package/dist/modules/providers/cache.js +0 -23
- package/dist/modules/providers/capabilities.js +0 -28
- package/dist/modules/providers/create.js +0 -21
- package/dist/modules/providers/factory.js +0 -28
- package/dist/modules/providers/fallback.js +0 -81
- package/dist/modules/providers/health.js +0 -47
- package/dist/modules/providers/index.js +0 -6
- package/dist/modules/providers/manager.js +0 -207
- package/dist/modules/providers/naming.js +0 -15
- package/dist/modules/providers/preflight.js +0 -71
- package/dist/modules/providers/presets.js +0 -232
- package/dist/modules/providers/registry.js +0 -27
- package/dist/modules/providers/types.js +0 -1
- package/dist/modules/reasoning/policy.js +0 -42
- package/dist/modules/reasoning/probe.js +0 -116
- package/dist/modules/registry.js +0 -48
- package/dist/modules/security/audit-log.js +0 -119
- package/dist/modules/security/audit-notifier.js +0 -267
- package/dist/modules/security/command-validator.js +0 -272
- package/dist/modules/security/content-scanner.js +0 -53
- package/dist/modules/security/data-sanitizer.js +0 -82
- package/dist/modules/security/encryption.js +0 -216
- package/dist/modules/security/index.js +0 -15
- package/dist/modules/security/network-validator.js +0 -236
- package/dist/modules/security/path-validator.js +0 -261
- package/dist/modules/security/protected-paths.js +0 -73
- package/dist/modules/security/rate-limiter.js +0 -98
- package/dist/modules/security/security-policies.js +0 -499
- package/dist/modules/security/session-encryption.js +0 -182
- package/dist/modules/security/session-isolation.js +0 -75
- package/dist/modules/session/auto-name.js +0 -63
- package/dist/modules/session/export.js +0 -98
- package/dist/modules/session/index.js +0 -4
- package/dist/modules/session/manager.js +0 -234
- package/dist/modules/session/module.js +0 -33
- package/dist/modules/session/store.js +0 -295
- package/dist/modules/session/types.js +0 -1
- package/dist/modules/setup/answers.js +0 -35
- package/dist/modules/setup/apply.js +0 -79
- package/dist/modules/setup/discovery.js +0 -72
- package/dist/modules/skills/index.js +0 -3
- package/dist/modules/skills/loader.js +0 -86
- package/dist/modules/skills/matcher.js +0 -27
- package/dist/modules/skills/module.js +0 -141
- package/dist/modules/types.js +0 -1
- package/dist/modules/updater/changelog-reader.js +0 -93
- package/dist/modules/updater/checker.js +0 -101
- package/dist/modules/updater/dev-detect.js +0 -18
- package/dist/modules/updater/index.js +0 -4
- package/dist/modules/updater/module.js +0 -129
- package/dist/modules/user-profile/compressor.js +0 -18
- package/dist/modules/user-profile/index.js +0 -2
- package/dist/modules/user-profile/profile.js +0 -77
- package/dist/modules/webui/answer-api.js +0 -29
- package/dist/modules/webui/assets.js +0 -50
- package/dist/modules/webui/body.js +0 -21
- package/dist/modules/webui/commands-settings.js +0 -209
- package/dist/modules/webui/commands-shared.js +0 -60
- package/dist/modules/webui/commands.js +0 -174
- package/dist/modules/webui/config-api.js +0 -134
- package/dist/modules/webui/file-api.js +0 -202
- package/dist/modules/webui/forward.js +0 -159
- package/dist/modules/webui/history-api.js +0 -112
- package/dist/modules/webui/host-state.js +0 -60
- package/dist/modules/webui/i18n-api.js +0 -9
- package/dist/modules/webui/limits.js +0 -6
- package/dist/modules/webui/log-forward.js +0 -20
- package/dist/modules/webui/memory-commands.js +0 -64
- package/dist/modules/webui/model-cache.js +0 -18
- package/dist/modules/webui/module.js +0 -148
- package/dist/modules/webui/persist.js +0 -24
- package/dist/modules/webui/prompt-io.js +0 -97
- package/dist/modules/webui/providers-api.js +0 -337
- package/dist/modules/webui/providers-view.js +0 -56
- package/dist/modules/webui/reasoning-view.js +0 -15
- package/dist/modules/webui/run-agent.js +0 -81
- package/dist/modules/webui/server.js +0 -284
- package/dist/modules/webui/sessions-api.js +0 -178
- package/dist/modules/webui/settings-api.js +0 -561
- package/dist/modules/webui/setup-api.js +0 -201
- package/dist/modules/webui/state.js +0 -74
- package/dist/modules/webui/util.js +0 -261
- package/dist/output/bus.js +0 -37
- package/dist/output/channel.js +0 -285
- package/dist/output/format.js +0 -15
- package/dist/output/index.js +0 -8
- package/dist/output/json-sink.js +0 -24
- package/dist/output/machine.js +0 -9
- package/dist/output/session-sink.js +0 -27
- package/dist/output/types.js +0 -1
- package/dist/tools/approve.js +0 -41
- package/dist/tools/attach-image.js +0 -102
- package/dist/tools/auto-fixer.js +0 -180
- package/dist/tools/auto-tags.js +0 -83
- package/dist/tools/bash.js +0 -649
- package/dist/tools/browser.js +0 -160
- package/dist/tools/chunk-query.js +0 -112
- package/dist/tools/create-dir.js +0 -60
- package/dist/tools/delete-file.js +0 -67
- package/dist/tools/download-file.js +0 -142
- package/dist/tools/edit-file.js +0 -136
- package/dist/tools/enable-tools.js +0 -59
- package/dist/tools/executor.js +0 -304
- package/dist/tools/file-info.js +0 -49
- package/dist/tools/filter-tools.js +0 -17
- package/dist/tools/glob-tool.js +0 -37
- package/dist/tools/grep-tool.js +0 -142
- package/dist/tools/hidden-tools-block.js +0 -37
- package/dist/tools/index.js +0 -88
- package/dist/tools/list-dir.js +0 -53
- package/dist/tools/load-skill.js +0 -51
- package/dist/tools/mcp-call.js +0 -80
- package/dist/tools/meet-done.js +0 -14
- package/dist/tools/move-file.js +0 -94
- package/dist/tools/path-utils.js +0 -108
- package/dist/tools/pipeline-run.js +0 -167
- package/dist/tools/preview.js +0 -2
- package/dist/tools/process-ids.js +0 -31
- package/dist/tools/process-kill.js +0 -33
- package/dist/tools/process-list.js +0 -38
- package/dist/tools/process-log.js +0 -49
- package/dist/tools/process-wait.js +0 -63
- package/dist/tools/prompt-io.js +0 -29
- package/dist/tools/question.js +0 -288
- package/dist/tools/read-file.js +0 -200
- package/dist/tools/recall.js +0 -124
- package/dist/tools/registry.js +0 -48
- package/dist/tools/remember.js +0 -72
- package/dist/tools/scope-check.js +0 -32
- package/dist/tools/scope-request.js +0 -96
- package/dist/tools/search-history.js +0 -88
- package/dist/tools/session-info.js +0 -46
- package/dist/tools/set-thinking.js +0 -75
- package/dist/tools/subagent.js +0 -257
- package/dist/tools/syntax-validator.js +0 -379
- package/dist/tools/types.js +0 -1
- package/dist/tools/user-input.js +0 -134
- package/dist/tools/web-browse.js +0 -93
- package/dist/tools/web-fetch.js +0 -108
- package/dist/tools/web-search.js +0 -107
- package/dist/tools/write-file.js +0 -128
- package/dist/ui/action-log.js +0 -13
- package/dist/ui/box.js +0 -78
- package/dist/ui/colors.js +0 -6
- package/dist/ui/diff.js +0 -189
- package/dist/ui/index.js +0 -7
- package/dist/ui/line-editor.js +0 -1083
- package/dist/ui/line-math.js +0 -98
- package/dist/ui/md-formatter.js +0 -322
- package/dist/ui/output.js +0 -19
- package/dist/ui/plan-view.js +0 -109
- package/dist/ui/renderer.js +0 -589
- package/dist/ui/spinner.js +0 -91
- package/dist/ui/table.js +0 -142
- package/dist/ui/theme.js +0 -143
- package/dist/utils/child-run.js +0 -20
- package/dist/utils/error.js +0 -4
- package/dist/utils/index.js +0 -6
- package/dist/utils/retry.js +0 -17
- package/dist/utils/sleep.js +0 -23
- 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
|
-
}
|
package/dist/core/bootstrap.js
DELETED
|
@@ -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
|
-
}
|