micro-models-agent 2.11.0 → 2.13.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 +39 -0
- package/dist/assets/app.js +22 -2
- package/dist/assets/index.html +39 -9
- package/dist/assets/js/dom.js +15 -0
- package/dist/assets/js/feed.js +129 -10
- package/dist/assets/js/sidebar.js +512 -0
- package/dist/assets/js/tabs.js +30 -5
- package/dist/assets/setup.js +267 -8
- package/dist/assets/styles.css +168 -3
- package/dist/cli/cache-line.js +1 -0
- package/dist/cli/command-suggest.js +5 -4
- package/dist/cli/commands.js +231 -122
- package/dist/cli/completer.js +132 -31
- package/dist/cli/index.js +1 -0
- package/dist/cli/json-payload.js +4 -4
- package/dist/cli/main.js +166 -61
- package/dist/cli/onboarding-commands.js +126 -0
- package/dist/cli/plugin-commands.js +2 -1
- package/dist/cli/relaunch.js +16 -13
- package/dist/cli/repl-commands-lsp.js +75 -0
- package/dist/cli/repl-commands-skills.js +105 -0
- package/dist/cli/repl-commands.js +589 -266
- package/dist/cli/repl.js +436 -177
- package/dist/cli/run-result.js +5 -6
- package/dist/cli/security-commands.js +37 -28
- package/dist/cli/setup-order.js +4 -55
- package/dist/cli/setup-prompt.js +3 -2
- package/dist/cli/setup.js +27 -107
- package/dist/cli/web-command.js +98 -0
- package/dist/config/budget.js +5 -5
- package/dist/config/config.js +103 -96
- package/dist/config/defaults.js +38 -8
- package/dist/config/domains.js +24 -27
- package/dist/config/env.js +46 -0
- package/dist/config/experts.js +2 -0
- package/dist/config/index.js +1 -0
- package/dist/config/paths.js +56 -0
- package/dist/config/redact.js +44 -0
- package/dist/config/registry-extra.js +334 -0
- package/dist/config/registry.js +584 -0
- package/dist/config/security.js +35 -36
- package/dist/config/timeouts.js +74 -0
- package/dist/config/utils.js +16 -15
- package/dist/core/agent/artifact-progress.js +59 -0
- package/dist/core/agent/artifact-resolve.js +79 -0
- package/dist/core/agent/audit-gate.js +7 -3
- package/dist/core/agent/compaction.js +2 -2
- package/dist/core/agent/constants.js +33 -4
- package/dist/core/agent/context-log.js +454 -0
- package/dist/core/agent/context-renderer.js +5 -0
- package/dist/core/agent/critic-gate.js +132 -0
- package/dist/core/agent/hallucination-gate.js +148 -38
- package/dist/core/agent/loop-state.js +15 -0
- package/dist/core/agent/prefix-monitor.js +1 -1
- package/dist/core/agent/reasoning-resolver.js +10 -1
- package/dist/core/agent/token-tracker.js +7 -4
- package/dist/core/agent/tool-batch.js +93 -18
- package/dist/core/agent/tool-images.js +18 -0
- package/dist/core/agent/tool-output.js +65 -11
- package/dist/core/agent/tool-pairing.js +60 -0
- package/dist/core/agent-moe.js +25 -24
- package/dist/core/agent.js +429 -108
- package/dist/core/bootstrap/agent-phase.js +66 -0
- package/dist/core/bootstrap/config-phase.js +86 -0
- package/dist/core/bootstrap/modules-phase.js +269 -0
- package/dist/core/bootstrap/provider-phase.js +183 -0
- package/dist/core/bootstrap/session-phase.js +204 -0
- package/dist/core/bootstrap/state.js +94 -0
- package/dist/core/bootstrap/workspace-phase.js +115 -0
- package/dist/core/bootstrap.js +92 -660
- package/dist/core/crash-handler.js +17 -7
- package/dist/core/environment.js +37 -12
- package/dist/core/host-plan.js +43 -0
- package/dist/core/host.js +23 -0
- package/dist/core/index.js +1 -0
- package/dist/core/prompt-builder.js +17 -1
- package/dist/core/prompt-overflow.js +42 -43
- package/dist/core/session-logger.js +122 -30
- package/dist/core/system-prompt.js +117 -0
- package/dist/core/version.js +6 -4
- package/dist/core/web-host.js +34 -0
- package/dist/core/workspace.js +19 -15
- package/dist/i18n/en.json +89 -3
- package/dist/i18n/index.js +37 -3
- package/dist/i18n/ru.json +89 -3
- package/dist/index.js +7 -3
- package/dist/llm/image-utils.js +55 -64
- package/dist/llm/llm-errors.js +9 -0
- package/dist/llm/model-loader.js +10 -32
- package/dist/llm/models-dev.js +121 -0
- package/dist/llm/openai-compat.js +146 -73
- package/dist/llm/orchestrator.js +33 -11
- package/dist/llm/provider-budget.js +2 -2
- package/dist/llm/provider-context.js +233 -0
- package/dist/llm/provider.js +1 -1
- package/dist/llm/response.js +5 -0
- package/dist/llm/token-counter.js +27 -11
- package/dist/logger/app-logger.js +48 -22
- package/dist/logger/file-log.js +28 -19
- package/dist/logger/index.js +1 -0
- package/dist/main.js +888 -139
- package/dist/migration/backup.js +14 -3
- package/dist/migration/detect.js +12 -3
- package/dist/migration/index.js +1 -0
- package/dist/modules/artifacts/store.js +9 -8
- package/dist/modules/browser/actions.js +6 -0
- package/dist/modules/browser/bridge-client.js +14 -12
- package/dist/modules/browser/bridge-path.js +4 -4
- package/dist/modules/browser/console-buffer.js +37 -0
- package/dist/modules/browser/cookie-store.js +5 -0
- package/dist/modules/browser/driver-types.js +1 -0
- package/dist/modules/browser/driver.js +19 -11
- package/dist/modules/browser/index.js +3 -1
- package/dist/modules/browser/module.js +2 -1
- package/dist/modules/browser/session.js +10 -30
- package/dist/modules/browser/snapshot.js +19 -13
- package/dist/modules/browser/types.js +1 -0
- package/dist/modules/certification/cli.js +28 -20
- package/dist/modules/certification/fact-checker.js +9 -1
- package/dist/modules/certification/loader.js +9 -2
- package/dist/modules/certification/manifest.js +83 -21
- package/dist/modules/certification/runner.js +23 -13
- package/dist/modules/certification/scenarios.js +20 -20
- package/dist/modules/certification/syntax-scenarios.js +1 -2
- package/dist/modules/context/chunk-query.js +11 -9
- package/dist/modules/context/fact-extractor.js +37 -39
- package/dist/modules/context/index.js +1 -0
- package/dist/modules/context/manager.js +106 -80
- package/dist/modules/critic/client.js +176 -0
- package/dist/modules/critic/evidence.js +81 -0
- package/dist/modules/critic/provider.js +45 -0
- package/dist/modules/critic/tools.js +78 -0
- package/dist/modules/critic/types.js +1 -0
- package/dist/modules/execution/audit-runners.js +28 -34
- package/dist/modules/execution/auditor.js +53 -49
- package/dist/modules/execution/execution-plugin.js +142 -102
- package/dist/modules/execution/index.js +1 -1
- package/dist/modules/execution/input-from.js +37 -13
- package/dist/modules/execution/module.js +368 -191
- package/dist/modules/execution/moe-executor.js +53 -26
- package/dist/modules/execution/plan-actions.js +320 -202
- package/dist/modules/execution/plan-checks.js +35 -0
- package/dist/modules/execution/plan-coverage.js +36 -33
- package/dist/modules/execution/plan-steps.js +11 -3
- package/dist/modules/execution/plan-store.js +83 -17
- package/dist/modules/execution/plan-tool.js +89 -35
- package/dist/modules/execution/plan-validator.js +30 -10
- package/dist/modules/execution/planner.js +22 -13
- package/dist/modules/execution/stuck-detector.js +196 -93
- package/dist/modules/execution/tracker.js +22 -8
- package/dist/modules/execution/verifier.js +69 -48
- package/dist/modules/execution/windows-commands.js +12 -12
- package/dist/modules/hallucination/artifact-claim.js +93 -0
- package/dist/modules/hallucination/confidence.js +13 -11
- package/dist/modules/hallucination/consistency.js +10 -2
- package/dist/modules/hallucination/detector.js +10 -5
- package/dist/modules/hallucination/factual.js +43 -26
- package/dist/modules/hallucination/index.js +1 -0
- package/dist/modules/hallucination/js-identifiers.js +44 -45
- package/dist/modules/hallucination/llm-judge.js +17 -12
- package/dist/modules/hallucination/success-claim.js +59 -0
- package/dist/modules/indexer/cache.js +52 -4
- package/dist/modules/indexer/index.js +1 -0
- package/dist/modules/indexer/map-command.js +2 -4
- package/dist/modules/indexer/map-select.js +16 -16
- package/dist/modules/indexer/module.js +47 -12
- package/dist/modules/indexer/project-profile.js +8 -7
- package/dist/modules/indexer/symbols.js +15 -15
- package/dist/modules/indexer/walker.js +159 -29
- package/dist/modules/lsp/check-tool.js +7 -5
- package/dist/modules/lsp/client.js +39 -39
- package/dist/modules/lsp/command.js +17 -24
- package/dist/modules/lsp/config.js +12 -11
- package/dist/modules/lsp/index.js +1 -0
- package/dist/modules/lsp/module.js +48 -46
- package/dist/modules/lsp/probe.js +13 -14
- package/dist/modules/lsp/project-root.js +14 -17
- package/dist/modules/lsp/startup-check.js +18 -16
- package/dist/modules/mcp/client.js +59 -62
- package/dist/modules/mcp/index.js +1 -0
- package/dist/modules/mcp/module.js +66 -37
- package/dist/modules/mcp/registry.js +5 -0
- package/dist/modules/memory/index.js +1 -0
- package/dist/modules/memory/module.js +12 -8
- package/dist/modules/memory/search.js +4 -1
- package/dist/modules/memory/store.js +40 -2
- package/dist/modules/onboarding/init.js +47 -0
- package/dist/modules/onboarding/meet.js +30 -0
- package/dist/modules/onboarding/mode.js +30 -0
- package/dist/modules/onboarding/prompts.js +43 -0
- package/dist/modules/pipelines/engine.js +10 -0
- package/dist/modules/pipelines/index.js +1 -0
- package/dist/modules/pipelines/parser.js +4 -1
- package/dist/modules/pipelines/template.js +4 -0
- package/dist/modules/plugins/builtin/lint-on-write.js +80 -67
- package/dist/modules/plugins/builtin/notify.js +2 -0
- package/dist/modules/plugins/index.js +1 -0
- package/dist/modules/plugins/loader.js +18 -3
- package/dist/modules/plugins/manager.js +37 -17
- package/dist/modules/pricing/index.js +10 -11
- package/dist/modules/pricing/prices.js +12 -12
- package/dist/modules/processes/index.js +1 -0
- package/dist/modules/processes/kill-tree.js +27 -31
- package/dist/modules/processes/registry.js +44 -25
- package/dist/modules/processes/runner.js +4 -4
- package/dist/modules/providers/capabilities.js +28 -0
- package/dist/modules/providers/create.js +3 -4
- package/dist/modules/providers/factory.js +7 -7
- package/dist/modules/providers/fallback.js +12 -12
- package/dist/modules/providers/health.js +4 -4
- package/dist/modules/providers/manager.js +50 -19
- package/dist/modules/providers/naming.js +15 -0
- package/dist/modules/providers/preflight.js +71 -0
- package/dist/modules/providers/presets.js +39 -8
- package/dist/modules/providers/registry.js +7 -2
- package/dist/modules/reasoning/policy.js +8 -6
- package/dist/modules/reasoning/probe.js +30 -25
- package/dist/modules/security/audit-log.js +19 -36
- package/dist/modules/security/audit-notifier.js +35 -75
- package/dist/modules/security/command-validator.js +99 -51
- package/dist/modules/security/content-scanner.js +8 -8
- package/dist/modules/security/data-sanitizer.js +9 -16
- package/dist/modules/security/encryption.js +32 -52
- package/dist/modules/security/index.js +2 -1
- package/dist/modules/security/network-validator.js +120 -43
- package/dist/modules/security/path-validator.js +61 -46
- package/dist/modules/security/protected-paths.js +73 -0
- package/dist/modules/security/rate-limiter.js +17 -49
- package/dist/modules/security/security-policies.js +25 -57
- package/dist/modules/security/session-encryption.js +32 -71
- package/dist/modules/security/session-isolation.js +15 -28
- package/dist/modules/session/auto-name.js +63 -0
- package/dist/modules/session/export.js +98 -0
- package/dist/modules/session/index.js +1 -0
- package/dist/modules/session/manager.js +79 -28
- package/dist/modules/session/module.js +4 -3
- package/dist/modules/session/store.js +57 -20
- package/dist/modules/setup/answers.js +35 -0
- package/dist/modules/setup/apply.js +79 -0
- package/dist/modules/setup/discovery.js +72 -0
- package/dist/modules/skills/index.js +1 -0
- package/dist/modules/skills/loader.js +9 -1
- package/dist/modules/skills/module.js +11 -0
- package/dist/modules/updater/changelog-reader.js +15 -16
- package/dist/modules/updater/checker.js +9 -4
- package/dist/modules/updater/dev-detect.js +7 -6
- package/dist/modules/updater/index.js +1 -0
- package/dist/modules/updater/module.js +17 -15
- package/dist/modules/user-profile/compressor.js +2 -0
- package/dist/modules/user-profile/index.js +1 -0
- package/dist/modules/user-profile/profile.js +10 -1
- package/dist/modules/webui/answer-api.js +29 -0
- package/dist/modules/webui/assets.js +50 -0
- package/dist/modules/webui/body.js +21 -0
- package/dist/modules/webui/commands-settings.js +209 -0
- package/dist/modules/webui/commands-shared.js +60 -0
- package/dist/modules/webui/commands.js +174 -0
- package/dist/modules/webui/config-api.js +134 -0
- package/dist/modules/webui/file-api.js +202 -0
- package/dist/modules/webui/forward.js +159 -0
- package/dist/modules/webui/history-api.js +112 -0
- package/dist/modules/webui/host-state.js +60 -0
- package/dist/modules/webui/i18n-api.js +9 -0
- package/dist/modules/webui/limits.js +6 -0
- package/dist/modules/webui/log-forward.js +20 -0
- package/dist/modules/webui/memory-commands.js +64 -0
- package/dist/modules/webui/model-cache.js +18 -0
- package/dist/modules/webui/module.js +148 -0
- package/dist/modules/webui/persist.js +24 -0
- package/dist/modules/webui/prompt-io.js +97 -0
- package/dist/modules/webui/providers-api.js +337 -0
- package/dist/modules/webui/providers-view.js +56 -0
- package/dist/modules/webui/reasoning-view.js +15 -0
- package/dist/modules/webui/run-agent.js +81 -0
- package/dist/modules/webui/server.js +284 -0
- package/dist/modules/webui/sessions-api.js +178 -0
- package/dist/modules/webui/settings-api.js +561 -0
- package/dist/modules/webui/setup-api.js +201 -0
- package/dist/modules/webui/state.js +74 -0
- package/dist/modules/webui/util.js +261 -0
- package/dist/output/bus.js +7 -2
- package/dist/output/channel.js +80 -28
- package/dist/output/format.js +2 -1
- package/dist/output/index.js +1 -0
- package/dist/output/json-sink.js +5 -3
- package/dist/output/machine.js +4 -3
- package/dist/output/session-sink.js +4 -4
- package/dist/tools/approve.js +4 -0
- package/dist/tools/attach-image.js +5 -4
- package/dist/tools/auto-fixer.js +26 -44
- package/dist/tools/auto-tags.js +83 -0
- package/dist/tools/bash.js +193 -116
- package/dist/tools/browser.js +76 -31
- package/dist/tools/chunk-query.js +14 -6
- package/dist/tools/create-dir.js +9 -5
- package/dist/tools/delete-file.js +9 -5
- package/dist/tools/download-file.js +32 -7
- package/dist/tools/edit-file.js +52 -14
- package/dist/tools/enable-tools.js +6 -6
- package/dist/tools/executor.js +132 -27
- package/dist/tools/file-info.js +3 -1
- package/dist/tools/filter-tools.js +3 -3
- package/dist/tools/glob-tool.js +4 -1
- package/dist/tools/grep-tool.js +13 -10
- package/dist/tools/hidden-tools-block.js +6 -6
- package/dist/tools/index.js +16 -8
- package/dist/tools/list-dir.js +4 -2
- package/dist/tools/load-skill.js +7 -0
- package/dist/tools/mcp-call.js +15 -4
- package/dist/tools/meet-done.js +14 -0
- package/dist/tools/move-file.js +14 -7
- package/dist/tools/path-utils.js +29 -29
- package/dist/tools/pipeline-run.js +29 -7
- package/dist/tools/preview.js +1 -1
- package/dist/tools/process-ids.js +31 -0
- package/dist/tools/process-kill.js +9 -16
- package/dist/tools/process-list.js +1 -0
- package/dist/tools/process-log.js +11 -16
- package/dist/tools/process-wait.js +63 -0
- package/dist/tools/prompt-io.js +4 -3
- package/dist/tools/question.js +172 -25
- package/dist/tools/read-file.js +55 -34
- package/dist/tools/recall.js +14 -8
- package/dist/tools/registry.js +6 -5
- package/dist/tools/remember.js +8 -4
- package/dist/tools/scope-request.js +11 -6
- package/dist/tools/search-history.js +5 -2
- package/dist/tools/session-info.js +2 -0
- package/dist/tools/set-thinking.js +8 -4
- package/dist/tools/subagent.js +59 -39
- package/dist/tools/syntax-validator.js +292 -90
- package/dist/tools/user-input.js +22 -18
- package/dist/tools/web-browse.js +9 -3
- package/dist/tools/web-fetch.js +12 -23
- package/dist/tools/web-search.js +7 -5
- package/dist/tools/write-file.js +45 -15
- package/dist/ui/action-log.js +13 -0
- package/dist/ui/box.js +4 -3
- package/dist/ui/colors.js +2 -0
- package/dist/ui/diff.js +6 -5
- package/dist/ui/index.js +1 -0
- package/dist/ui/line-editor.js +230 -122
- package/dist/ui/line-math.js +10 -2
- package/dist/ui/md-formatter.js +57 -37
- package/dist/ui/output.js +8 -3
- package/dist/ui/plan-view.js +21 -10
- package/dist/ui/renderer.js +393 -67
- package/dist/ui/spinner.js +16 -5
- package/dist/ui/table.js +15 -17
- package/dist/ui/theme.js +143 -0
- package/dist/utils/child-run.js +20 -0
- package/dist/utils/error.js +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/retry.js +2 -2
- package/dist/utils/truncate.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
/** Тул поиска по истории сессий (JSONL всех сессий, cap результатов). */
|
|
1
2
|
import * as fs from "fs";
|
|
2
3
|
import { join } from "path";
|
|
3
|
-
import { homedir } from "os";
|
|
4
4
|
import { t } from "../i18n/index";
|
|
5
|
+
import { globalSessionsDir } from "../config/paths";
|
|
6
|
+
/** Ищет запрос в одном history.jsonl, складывает ужатые JSON-записи. */
|
|
5
7
|
function searchFile(filePath, query, maxResults, results) {
|
|
6
8
|
if (!fs.existsSync(filePath))
|
|
7
9
|
return;
|
|
@@ -20,6 +22,7 @@ function searchFile(filePath, query, maxResults, results) {
|
|
|
20
22
|
break;
|
|
21
23
|
}
|
|
22
24
|
}
|
|
25
|
+
/** Ищет по прошлым взаимодействиям всех сессий. Параметры: query, maxResults, sessionId. */
|
|
23
26
|
export const searchHistoryTool = {
|
|
24
27
|
name: "search_history",
|
|
25
28
|
icon: "🕵️",
|
|
@@ -44,7 +47,7 @@ export const searchHistoryTool = {
|
|
|
44
47
|
const query = String(args.query || "").toLowerCase();
|
|
45
48
|
const maxResults = Number(args.maxResults) || 5;
|
|
46
49
|
const sessionId = args.sessionId ? String(args.sessionId) : null;
|
|
47
|
-
const sessionDir =
|
|
50
|
+
const sessionDir = globalSessionsDir();
|
|
48
51
|
const results = [];
|
|
49
52
|
try {
|
|
50
53
|
if (!fs.existsSync(sessionDir)) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
/** Тул метаданных текущей сессии (id, модель, бюджет контекста; alwaysOn). */
|
|
1
2
|
import { t } from "../i18n/index";
|
|
3
|
+
/** Показывает сессию и загрузку контекстного бюджета. Без активной — пометка. */
|
|
2
4
|
export const sessionInfoTool = {
|
|
3
5
|
name: "session_info",
|
|
4
6
|
icon: "ℹ️",
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
/** Тул ручной установки reasoning-уровня (транзиентный, с кулдауном). */
|
|
2
2
|
import { t } from "../i18n/index";
|
|
3
|
+
/** Допустимые уровни reasoning. */
|
|
3
4
|
const VALID_LEVELS = ["default", "none", "low", "medium", "high", "max"];
|
|
5
|
+
/**
|
|
6
|
+
* Фабрика тула set_thinking (уровень на следующий LLM-вызов; штатно рулит
|
|
7
|
+
* харнесс). Возврат: определение тула.
|
|
8
|
+
*/
|
|
4
9
|
export function createSetThinkingTool(state, config, getCurrentIteration) {
|
|
5
10
|
return {
|
|
6
11
|
name: "set_thinking",
|
|
@@ -32,7 +37,7 @@ export function createSetThinkingTool(state, config, getCurrentIteration) {
|
|
|
32
37
|
output: t("tool.thinking_invalid_level", { level: requested }),
|
|
33
38
|
};
|
|
34
39
|
}
|
|
35
|
-
//
|
|
40
|
+
// Проверка кулдауна.
|
|
36
41
|
const currentIter = getCurrentIteration();
|
|
37
42
|
const elapsed = currentIter - state.overrideIteration;
|
|
38
43
|
if (elapsed > 0 && elapsed < config.overrideCooldown) {
|
|
@@ -44,7 +49,7 @@ export function createSetThinkingTool(state, config, getCurrentIteration) {
|
|
|
44
49
|
}),
|
|
45
50
|
};
|
|
46
51
|
}
|
|
47
|
-
//
|
|
52
|
+
// Кламп в настроенные границы.
|
|
48
53
|
let level = requested;
|
|
49
54
|
const levelOrder = ["none", "low", "medium", "high", "max"];
|
|
50
55
|
const minIdx = levelOrder.indexOf(config.min);
|
|
@@ -59,7 +64,6 @@ export function createSetThinkingTool(state, config, getCurrentIteration) {
|
|
|
59
64
|
level = config.max;
|
|
60
65
|
clamped = true;
|
|
61
66
|
}
|
|
62
|
-
// Apply
|
|
63
67
|
state.level = level;
|
|
64
68
|
state.overrideIteration = currentIter;
|
|
65
69
|
const msg = clamped
|
package/dist/tools/subagent.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** Тул изолированного субагента (свой контекст, скоуп, теги тулов, MoE-off). */
|
|
1
2
|
import { t } from "../i18n/index";
|
|
2
3
|
import { Agent } from "../core/agent";
|
|
3
4
|
import { ContextManager } from "../modules/context/manager";
|
|
@@ -7,7 +8,7 @@ import { logSecurityBlock } from "../modules/security/audit-log";
|
|
|
7
8
|
import { getSessionSecurityConfig } from "../modules/security/session-isolation";
|
|
8
9
|
import { ArtifactStore } from "../modules/artifacts/store";
|
|
9
10
|
import { ScopeDenialCollector, formatScopeRequest } from "./scope-request";
|
|
10
|
-
/**
|
|
11
|
+
/** Фиксированный системный промпт (KV-cache дружит при stableSystemPrompt). */
|
|
11
12
|
export const SUBAGENT_SYSTEM_PROMPT_TEMPLATE = `You are a sub-agent working on a specific task. You have your own context window and tool set.
|
|
12
13
|
|
|
13
14
|
Workflow rules:
|
|
@@ -15,11 +16,13 @@ Workflow rules:
|
|
|
15
16
|
- For large outputs, write the result to a file with write_file instead of reproducing it in your answer.
|
|
16
17
|
- If the task is big and decomposable, delegate parts to the subagent tool instead of doing everything in one context.
|
|
17
18
|
- When you finish, return a concise final answer; do not repeat file contents verbatim if you already wrote them to disk.`;
|
|
19
|
+
/** Собирает системный промпт субагента (стабильный или с контекстом). */
|
|
18
20
|
function buildSubagentSystemPrompt(context, stable) {
|
|
19
21
|
if (stable)
|
|
20
22
|
return SUBAGENT_SYSTEM_PROMPT_TEMPLATE;
|
|
21
23
|
return `You are a sub-agent working on a specific task. ${context ? `Context: ${context}` : ""}`;
|
|
22
24
|
}
|
|
25
|
+
/** Спавнит изолированного субагента. Параметры: task, scope-файлы, tool_tags, result_mode. */
|
|
23
26
|
export const subagentTool = {
|
|
24
27
|
name: "subagent",
|
|
25
28
|
icon: "🤖",
|
|
@@ -82,14 +85,14 @@ export const subagentTool = {
|
|
|
82
85
|
if (!task) {
|
|
83
86
|
return { success: false, output: t("tool.name_or_task") };
|
|
84
87
|
}
|
|
85
|
-
//
|
|
88
|
+
// Сессионный security-конфиг.
|
|
86
89
|
const securityConfig = ctx.sessionContext
|
|
87
90
|
? getSessionSecurityConfig(ctx.config, ctx.sessionContext)
|
|
88
91
|
: ctx.config.security;
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
//
|
|
92
|
+
// Лимит глубины рекурсии. Глубину читаем из SHARED-контекста исполнителя
|
|
93
|
+
// (его видят вложенные субагенты) — `ctx.recursionDepth` снапшотился раз при
|
|
94
|
+
// bootstrap и не инкрементился, поэтому гард не срабатывал и субагент мог
|
|
95
|
+
// спавнить субагентов безгранично.
|
|
93
96
|
const executor = ctx.toolExecutor;
|
|
94
97
|
const parentDepth = executor?.getRecursionDepth?.() ?? (ctx.recursionDepth ?? 0);
|
|
95
98
|
const maxDepth = securityConfig?.maxRecursionDepth ?? 3;
|
|
@@ -111,14 +114,14 @@ export const subagentTool = {
|
|
|
111
114
|
if (!ctx.llmProvider || !ctx.toolExecutor) {
|
|
112
115
|
return {
|
|
113
116
|
success: false,
|
|
114
|
-
output: "
|
|
117
|
+
output: t("tool.subagent_cannot_run"),
|
|
115
118
|
};
|
|
116
119
|
}
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
120
|
+
// Оборонительный гард: запрошенные tool_tags ни с чем не мэтчатся — у
|
|
121
|
+
// субагента ноль тулов, и он галлюцинирует вместо действий. Предупредить
|
|
122
|
+
// вызывающего для коррекции тегов. Проверка через getByTags (не
|
|
123
|
+
// getAllForLLM): alwaysOn мэтчатся всегда — гард меряет реальное покрытие,
|
|
124
|
+
// а не присутствие в схеме.
|
|
122
125
|
if (toolTags && toolTags.length > 0) {
|
|
123
126
|
const matched = ctx.toolExecutor.getRegistry().getByTags(toolTags);
|
|
124
127
|
if (matched.length === 0) {
|
|
@@ -128,24 +131,34 @@ export const subagentTool = {
|
|
|
128
131
|
};
|
|
129
132
|
}
|
|
130
133
|
}
|
|
134
|
+
// Сейв/рестор shared-скоупа исполнителя, чтобы субагент не мутировал скоуп
|
|
135
|
+
// родителя навсегда. Текущий скоуп — из shared-исполнителя, не `ctx.scope`:
|
|
136
|
+
// MoE зовёт тул с ad-hoc контекстом без scope — снапшот `ctx.scope` ресторил
|
|
137
|
+
// бы "unrestricted" и сносил изоляцию всей волне.
|
|
138
|
+
const parentScope = executor?.getScope?.() ?? ctx.scope;
|
|
139
|
+
const appliedScope = scope || { allowed_files: [], read_only_files: [] };
|
|
140
|
+
// Compare-and-restore: параллельная MoE-волна могла тем временем поставить
|
|
141
|
+
// свой скоуп — чужого свежего владельца не затирать.
|
|
142
|
+
const restoreScope = () => {
|
|
143
|
+
if (ctx.toolExecutor?.getScope?.() === appliedScope) {
|
|
144
|
+
ctx.toolExecutor.setScope(parentScope);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
131
147
|
try {
|
|
132
148
|
const subContextManager = new ContextManager(ctx.config.contextWindow, ctx.config.contextBudget);
|
|
133
149
|
const subPluginManager = new PluginManager();
|
|
134
|
-
//
|
|
135
|
-
//
|
|
136
|
-
//
|
|
150
|
+
// Детерминированный трекинг scope-отказов: блокировки файловых тулов
|
|
151
|
+
// ребёнка скоуп-гардом всплывают машиночитаемым блоком <scope-request>
|
|
152
|
+
// в результате (см. MoE executor / Router).
|
|
137
153
|
const scopeCollector = new ScopeDenialCollector();
|
|
138
154
|
subPluginManager.register(scopeCollector.plugin, "builtin");
|
|
139
155
|
const hallucinationDetector = new HallucinationDetector(ctx.baseDir, ctx.llmProvider);
|
|
140
|
-
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
ctx.
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
ctx.cleanup = () => ctx.toolExecutor?.setScope(parentScope);
|
|
147
|
-
// Increment recursion depth on the shared executor ctx so NESTED
|
|
148
|
-
// sub-agents see the deeper level (and the guard above can fire).
|
|
156
|
+
ctx.toolExecutor.setScope(appliedScope);
|
|
157
|
+
// Cleanup на исполнителе — рестор скоупа при таймауте/аборте, даже если
|
|
158
|
+
// `finally` агента не отработал (брошенный промис).
|
|
159
|
+
ctx.cleanup = restoreScope;
|
|
160
|
+
// Глубину — на shared-контекст исполнителя, чтобы ВЛОЖЕННЫЕ субагенты
|
|
161
|
+
// видели уровень глубже (и гард выше мог сработать).
|
|
149
162
|
ctx.recursionDepth = currentDepth + 1;
|
|
150
163
|
executor?.setRecursionDepth?.(currentDepth + 1);
|
|
151
164
|
const systemPrompt = {
|
|
@@ -154,12 +167,11 @@ export const subagentTool = {
|
|
|
154
167
|
essential: true,
|
|
155
168
|
estimatedTokens: 150,
|
|
156
169
|
};
|
|
157
|
-
// MoE
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
// minutes with zero progress events.
|
|
170
|
+
// MoE — TOP-LEVEL режим оркестрации: субагент от тула subagent всегда идёт
|
|
171
|
+
// plain single-agent циклом. Шаринг родительского конфига заставлял каждого
|
|
172
|
+
// MoE-субагента реентерить runWithMoE — планировать свои сабтаски и рекурсивно
|
|
173
|
+
// спавнить вложенных субагентов (лимит — лишь maxRecursionDepth), что вешало
|
|
174
|
+
// исполнение на минуты без прогресс-событий.
|
|
163
175
|
const subConfig = { ...ctx.config, moe: { ...ctx.config.moe, enabled: false } };
|
|
164
176
|
const subDeps = {
|
|
165
177
|
config: subConfig,
|
|
@@ -186,7 +198,10 @@ export const subagentTool = {
|
|
|
186
198
|
}
|
|
187
199
|
: undefined;
|
|
188
200
|
if (!result.success) {
|
|
189
|
-
let output =
|
|
201
|
+
let output = t("tool.subagent_failed", {
|
|
202
|
+
error: String(result.error),
|
|
203
|
+
text: result.text,
|
|
204
|
+
});
|
|
190
205
|
const scopeReq = scopeCollector.toScopeRequest();
|
|
191
206
|
if (scopeReq)
|
|
192
207
|
output += `\n${formatScopeRequest(scopeReq)}`;
|
|
@@ -209,29 +224,34 @@ export const subagentTool = {
|
|
|
209
224
|
iterations: String(result.iterationCount),
|
|
210
225
|
summary,
|
|
211
226
|
}),
|
|
212
|
-
//
|
|
213
|
-
//
|
|
227
|
+
// Структурированный путь, чтобы вызывающие (MoE executor) не парсили
|
|
228
|
+
// локализованную строку `output`.
|
|
214
229
|
artifactPath: abs,
|
|
215
230
|
usage: pickUsage(),
|
|
216
231
|
};
|
|
217
232
|
}
|
|
218
233
|
return {
|
|
219
234
|
success: true,
|
|
220
|
-
output:
|
|
235
|
+
output: t("tool.subagent_completed", {
|
|
236
|
+
text: result.text,
|
|
237
|
+
iterations: String(result.iterationCount),
|
|
238
|
+
}),
|
|
221
239
|
usage: pickUsage(),
|
|
222
240
|
};
|
|
223
241
|
}
|
|
224
242
|
finally {
|
|
225
|
-
//
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
243
|
+
// Рестор точного скоупа родителя (compare-and-restore — свежий скоуп
|
|
244
|
+
// параллельного сиблинга не затирать). undefined — "без ограничений",
|
|
245
|
+
// пустым скоупом (запрет всего) становиться не должен.
|
|
246
|
+
restoreScope();
|
|
247
|
+
if (ctx.cleanup === restoreScope)
|
|
248
|
+
ctx.cleanup = undefined;
|
|
229
249
|
ctx.recursionDepth = currentDepth;
|
|
230
250
|
executor?.setRecursionDepth?.(currentDepth);
|
|
231
251
|
}
|
|
232
252
|
}
|
|
233
253
|
catch (e) {
|
|
234
|
-
return { success: false, output:
|
|
254
|
+
return { success: false, output: t("tool.subagent_error", { error: e.message }) };
|
|
235
255
|
}
|
|
236
256
|
},
|
|
237
257
|
};
|