micro-models-agent 2.10.0 → 2.12.0
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 +33 -0
- package/dist/assets/app.js +22 -4
- package/dist/assets/index.html +29 -0
- package/dist/assets/js/dom.js +2 -1
- package/dist/assets/js/feed.js +38 -26
- package/dist/assets/js/format.js +1 -1
- package/dist/assets/js/rail.js +114 -0
- package/dist/assets/js/settings-controls.js +2 -2
- package/dist/assets/js/settings.js +246 -51
- package/dist/assets/js/store.js +3 -0
- package/dist/assets/js/tabs.js +104 -2
- package/dist/assets/styles.css +215 -66
- 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 +106 -21
- package/dist/i18n/index.js +37 -3
- package/dist/i18n/ru.json +109 -21
- 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 +24285 -22447
- 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
package/dist/assets/styles.css
CHANGED
|
@@ -1,65 +1,64 @@
|
|
|
1
1
|
/* ---- theme tokens (dark default; light override further below) ---- */
|
|
2
2
|
:root {
|
|
3
|
-
--bg: #
|
|
3
|
+
--bg: #141414;
|
|
4
4
|
--fg: #e6edf3;
|
|
5
|
-
--panel: #
|
|
6
|
-
--sb-bg: #
|
|
7
|
-
--stab-bg: #
|
|
8
|
-
--
|
|
9
|
-
--surface: #
|
|
10
|
-
--
|
|
11
|
-
--inp-
|
|
12
|
-
--inp-
|
|
13
|
-
--
|
|
14
|
-
--
|
|
15
|
-
--border: #
|
|
16
|
-
--border-
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--dim-
|
|
20
|
-
--dim-
|
|
21
|
-
--
|
|
22
|
-
--accent: #
|
|
23
|
-
--
|
|
24
|
-
--green: #
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
--
|
|
32
|
-
--
|
|
33
|
-
--
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--hover-bg: #
|
|
37
|
-
--hover-bg
|
|
38
|
-
--
|
|
39
|
-
--u-
|
|
40
|
-
--u-
|
|
41
|
-
--u-border: #388bfd;
|
|
5
|
+
--panel: #191919;
|
|
6
|
+
--sb-bg: #181818;
|
|
7
|
+
--stab-bg: #181818;
|
|
8
|
+
--surface: #1f1f1f;
|
|
9
|
+
--input-surface: #1f1f1f;
|
|
10
|
+
--inp-bg: #1d1d1d;
|
|
11
|
+
--inp-border: #c4a8ec44;
|
|
12
|
+
--inp-focus: #c4a8ec;
|
|
13
|
+
--input-shadow: #c4a8ec33;
|
|
14
|
+
--border: #262626;
|
|
15
|
+
--border-2: #2e2e2e;
|
|
16
|
+
--border-3: #262626;
|
|
17
|
+
--muted: #d4d4d4;
|
|
18
|
+
--dim-a: #a3a3a3;
|
|
19
|
+
--dim-b: #737373;
|
|
20
|
+
--dim-c: #737373;
|
|
21
|
+
--accent: #c4a8ec;
|
|
22
|
+
--accent-bg: #241e30;
|
|
23
|
+
--green: #c9c5bd;
|
|
24
|
+
--green-fill: #8a8781;
|
|
25
|
+
--red: #e08080;
|
|
26
|
+
--err: #e08080;
|
|
27
|
+
--red-strong: #e08080;
|
|
28
|
+
--yellow: #d9a45b;
|
|
29
|
+
--purple: #b8b0a6;
|
|
30
|
+
--cyan: #a8a29e;
|
|
31
|
+
--think: #9c9c9c;
|
|
32
|
+
--cmdout: #d4d4d4;
|
|
33
|
+
--meta: #a3a3a3;
|
|
34
|
+
--args: #a3a3a3;
|
|
35
|
+
--hover-bg: #262626;
|
|
36
|
+
--hover-bg-2: #222222;
|
|
37
|
+
--x-hover-bg: #2e2e2e;
|
|
38
|
+
--u-fg: #d3bdf2;
|
|
39
|
+
--u-bg: #221c2e;
|
|
40
|
+
--u-border: #c4a8ec;
|
|
42
41
|
--ans: #a5adb6;
|
|
43
|
-
--toggle-off: #
|
|
44
|
-
--toggle-knob: #
|
|
42
|
+
--toggle-off: #2e2e2e;
|
|
43
|
+
--toggle-knob: #a3a3a3;
|
|
45
44
|
--toggle-knob-on: #fff;
|
|
46
|
-
--scroll-thumb: #
|
|
47
|
-
--scroll-thumb-hover: #
|
|
48
|
-
--stab-thumb: #
|
|
49
|
-
--stab-thumb-hover: #
|
|
50
|
-
--pipe: #
|
|
51
|
-
--rule: #
|
|
52
|
-
--checker-a: #
|
|
53
|
-
--checker-b: #
|
|
54
|
-
--checker-base: #
|
|
55
|
-
--checker-border: #
|
|
45
|
+
--scroll-thumb: #2e2e2e;
|
|
46
|
+
--scroll-thumb-hover: #737373;
|
|
47
|
+
--stab-thumb: #2e2e2e;
|
|
48
|
+
--stab-thumb-hover: #737373;
|
|
49
|
+
--pipe: #2e2e2e;
|
|
50
|
+
--rule: #2e2e2e;
|
|
51
|
+
--checker-a: #222222;
|
|
52
|
+
--checker-b: #2e2e2e;
|
|
53
|
+
--checker-base: #191919;
|
|
54
|
+
--checker-border: #2e2e2e;
|
|
56
55
|
--ph-light: #eaeef2;
|
|
57
|
-
--track: #
|
|
58
|
-
--plan-line: #
|
|
59
|
-
--plan-bar-fg: #
|
|
60
|
-
--sec-h: #
|
|
61
|
-
--sec-h-hover: #
|
|
62
|
-
--stab-fg: #
|
|
56
|
+
--track: #262626;
|
|
57
|
+
--plan-line: #2e2e2e;
|
|
58
|
+
--plan-bar-fg: #a3a3a3;
|
|
59
|
+
--sec-h: #a3a3a3;
|
|
60
|
+
--sec-h-hover: #d4d4d4;
|
|
61
|
+
--stab-fg: #a3a3a3;
|
|
63
62
|
--overlay: rgba(0,0,0,.55);
|
|
64
63
|
--shadow-menu: 0 8px 24px rgba(0,0,0,.5);
|
|
65
64
|
--shadow-dd: 0 12px 32px rgba(0,0,0,.55);
|
|
@@ -76,7 +75,6 @@ body.light {
|
|
|
76
75
|
--panel: #ffffff;
|
|
77
76
|
--sb-bg: #ffffff;
|
|
78
77
|
--stab-bg: #f6f8fa;
|
|
79
|
-
--stab-on-bg: #ffffff;
|
|
80
78
|
--surface: #f6f8fa;
|
|
81
79
|
--input-surface: #ffffff;
|
|
82
80
|
--inp-bg: #ffffff;
|
|
@@ -142,8 +140,12 @@ html, body { height: 100%; }
|
|
|
142
140
|
body {
|
|
143
141
|
background: var(--bg); color: var(--fg);
|
|
144
142
|
font-family: ui-monospace, "Cascadia Code", "JetBrains Mono", Consolas, monospace;
|
|
145
|
-
font-size:
|
|
143
|
+
font-size: 15px; display: flex; flex-direction: column; overflow: hidden;
|
|
146
144
|
}
|
|
145
|
+
/* Chat font size (`ui.fontSize`): the base above is `comfortable` (default).
|
|
146
|
+
`compact` restores the old 13px, `large` steps up to 17px. */
|
|
147
|
+
body[data-font="compact"] { font-size: 13px; }
|
|
148
|
+
body[data-font="large"] { font-size: 17px; }
|
|
147
149
|
|
|
148
150
|
/* ---- topbar: new chat, sessions dropdown, tabstrip, settings ---- */
|
|
149
151
|
.bar-top {
|
|
@@ -157,6 +159,11 @@ body {
|
|
|
157
159
|
}
|
|
158
160
|
.icon-btn:hover { background: var(--hover-bg); color: var(--fg); }
|
|
159
161
|
.icon-btn.primary { color: var(--accent); }
|
|
162
|
+
.icon-btn:disabled { opacity: .35; cursor: default; }
|
|
163
|
+
.icon-btn:disabled:hover { background: none; color: var(--muted); }
|
|
164
|
+
/* Mobile session sub-header (see #sessBar): hidden on desktop, flex ≤760px.
|
|
165
|
+
The + / list tools relocate into #sessTools (placeTopTools in tabs.js). */
|
|
166
|
+
.bar-sub { display: none; }
|
|
160
167
|
#openSettings { margin-left: auto; margin-right: 6px; }
|
|
161
168
|
#toggleSidebar { display: none; }
|
|
162
169
|
.conn { color: var(--dim-a); font-size: 11.5px; white-space: nowrap; }
|
|
@@ -172,12 +179,12 @@ body {
|
|
|
172
179
|
.tabstrip::-webkit-scrollbar-thumb:hover { background: var(--stab-thumb-hover); }
|
|
173
180
|
.stab {
|
|
174
181
|
display: flex; gap: 7px; align-items: center; white-space: nowrap;
|
|
175
|
-
height: 24px; padding: 0 6px 0 10px; border-radius:
|
|
182
|
+
height: 24px; padding: 0 6px 0 10px; border-radius: 7px; cursor: pointer;
|
|
176
183
|
color: var(--stab-fg); font-size: 12.5px; background: var(--stab-bg);
|
|
177
|
-
border: 1px solid transparent;
|
|
184
|
+
border: 1px solid transparent; max-width: 220px;
|
|
178
185
|
}
|
|
179
186
|
.stab:hover { color: var(--fg); }
|
|
180
|
-
.stab.on { background: var(--
|
|
187
|
+
.stab.on { background: var(--accent-bg); color: var(--accent); border-color: transparent; }
|
|
181
188
|
.stab .name { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
|
|
182
189
|
.stab .stab-x {
|
|
183
190
|
flex: 0 0 auto; width: 18px; height: 18px; padding: 0; justify-content: center;
|
|
@@ -392,6 +399,9 @@ body.light .imgcard .ph { background: var(--ph-light); }
|
|
|
392
399
|
}
|
|
393
400
|
.filecard .fc-open:hover { border-color: var(--accent); text-decoration: none; }
|
|
394
401
|
.filecard .fc-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
402
|
+
.filecard button.fc-open { font: inherit; }
|
|
403
|
+
.filecard .fc-actions { display: flex; gap: 6px; align-items: center; margin-left: auto; flex: 0 0 auto; }
|
|
404
|
+
.filecard .fc-hint { color: var(--dim-a); font-size: 12px; }
|
|
395
405
|
.linkline { margin-left: 26px; min-width: 0; overflow-wrap: anywhere; }
|
|
396
406
|
.linkline a { color: var(--accent); text-decoration: none; overflow-wrap: anywhere; word-break: break-word; }
|
|
397
407
|
.linkline a:hover { text-decoration: underline; }
|
|
@@ -444,16 +454,25 @@ body.light .imgcard .ph { background: var(--ph-light); }
|
|
|
444
454
|
|
|
445
455
|
/* ---- composer: selectors, attachments, input, autocomplete ---- */
|
|
446
456
|
.input-area { margin: 14px 22px 16px; position: relative; }
|
|
447
|
-
.selectors { display: flex; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
|
|
448
|
-
.sel { position: relative; }
|
|
457
|
+
.selectors { display: flex; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; min-width: 0; }
|
|
458
|
+
.sel { position: relative; min-width: 0; max-width: 100%; }
|
|
449
459
|
.sel > button {
|
|
450
460
|
font: inherit; font-size: 12.5px; cursor: pointer;
|
|
451
461
|
background: var(--surface); color: var(--muted); border: none; border-radius: 4px;
|
|
452
462
|
padding: 4px 10px; display: inline-flex; align-items: center; gap: 6px;
|
|
463
|
+
min-width: 0; max-width: 100%;
|
|
453
464
|
}
|
|
454
465
|
body.light .sel > button { border: 1px solid var(--border); }
|
|
455
|
-
.sel > button b { font-weight: 400; color: var(--purple); }
|
|
466
|
+
.sel > button b { font-weight: 400; color: var(--purple); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
456
467
|
.sel > button .svg-icon { width: 13px; height: 13px; color: var(--dim-a); }
|
|
468
|
+
/* Selector switch pending (boot + provider/model/context/reasoning writes):
|
|
469
|
+
buttons and menus go inert while the `⋯` mark shows. The mark is a static
|
|
470
|
+
glyph via `::after` — no animation, so `prefers-reduced-motion` needs no
|
|
471
|
+
special case and no label rewrites desync the DOM. */
|
|
472
|
+
.selectors[data-pending] .sel > button,
|
|
473
|
+
.selectors[data-pending] .menu { pointer-events: none; }
|
|
474
|
+
.sel > button.pending { cursor: wait; }
|
|
475
|
+
.sel > button.pending b::after { content: " ⋯"; color: var(--dim-b); }
|
|
457
476
|
.menu {
|
|
458
477
|
display: none; position: absolute; bottom: calc(100% + 4px); left: 0; z-index: 30;
|
|
459
478
|
background: var(--panel); border: 1px solid var(--border-2); border-radius: 6px;
|
|
@@ -571,9 +590,79 @@ body.light .sel > button { border: 1px solid var(--border); }
|
|
|
571
590
|
.input-area.dragover .composer { border-color: var(--accent); box-shadow: 0 0 0 2px var(--input-shadow); }
|
|
572
591
|
@keyframes blink { 50% { opacity: 0; } }
|
|
573
592
|
|
|
593
|
+
/* ---- activity rail — indicator above the composer while a turn runs ----
|
|
594
|
+
Reproduces docs/design/ui/demo-activity-rail-chat.html (variant №12).
|
|
595
|
+
`l-line` (default) = compact one-liner, `l-meta` = inside the hint row,
|
|
596
|
+
`l-full` = full width; `off` hides the node entirely. */
|
|
597
|
+
.rail-wrap { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; }
|
|
598
|
+
.rail-wrap[hidden] { display: none; }
|
|
599
|
+
.rail-wrap.l-line, .rail-wrap.l-meta {
|
|
600
|
+
flex-direction: row; align-items: center; gap: 6px 10px; margin-bottom: 8px;
|
|
601
|
+
flex-wrap: wrap;
|
|
602
|
+
}
|
|
603
|
+
.rail-wrap.l-line .rl-track { order: -1; flex: 1 1 120px; min-width: 80px; max-width: 180px; }
|
|
604
|
+
.rail-wrap.l-meta .rl-track { order: -1; flex: 1 1 90px; min-width: 64px; max-width: 110px; }
|
|
605
|
+
.rail-wrap.l-line .rail-l1, .rail-wrap.l-line .rail-l2 { flex: 1 1 auto; min-width: 0; }
|
|
606
|
+
.rail-wrap.l-line .rail-l1 .right { display: none; } /* Esc уже есть в .inp-meta */
|
|
607
|
+
.rail-wrap.l-line .rail-l2::before { content: '·'; color: var(--dim-a); margin-right: -2px; }
|
|
608
|
+
.rail-wrap.l-meta { margin-bottom: 0; }
|
|
609
|
+
.rail-wrap.l-meta .rail-l1 { font-size: 11.5px; }
|
|
610
|
+
.rail-wrap.l-meta .rail-l1 .st, .rail-wrap.l-meta .rail-l1 .s, .rail-wrap.l-meta .rail-l1 .right { display: none; }
|
|
611
|
+
.rail-wrap.l-meta .rail-l2 { display: none; } /* в строке подсказок только самое важное */
|
|
612
|
+
.rail-wrap.l-full .rl-track { flex: 1 1 auto; }
|
|
613
|
+
.rail-l1 {
|
|
614
|
+
display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap;
|
|
615
|
+
font-size: 13px; color: var(--think);
|
|
616
|
+
}
|
|
617
|
+
.rail-l1 .s, .rail-l1 .right { color: var(--dim-a); }
|
|
618
|
+
.rail-l1 .right { margin-left: auto; font-size: 11.5px; }
|
|
619
|
+
.rail-l2 { display: flex; gap: 8px; align-items: baseline; font-size: 11.5px; color: var(--dim-a); flex-wrap: wrap; min-width: 0; }
|
|
620
|
+
.rail-l2 .last { color: var(--args); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
|
|
621
|
+
|
|
622
|
+
.rl-track {
|
|
623
|
+
position: relative; height: 12px; border-radius: 6px;
|
|
624
|
+
background: var(--border); overflow: hidden;
|
|
625
|
+
}
|
|
626
|
+
.rl-fill {
|
|
627
|
+
position: absolute; left: 0; top: 0; bottom: 0; width: calc(var(--prog, 0) * 1%);
|
|
628
|
+
background: linear-gradient(90deg, var(--think), var(--accent));
|
|
629
|
+
transition: width .2s linear;
|
|
630
|
+
}
|
|
631
|
+
.rl-fill::after {
|
|
632
|
+
content: ''; position: absolute; inset: 0;
|
|
633
|
+
background: linear-gradient(90deg, transparent, rgba(255,255,255,.45), transparent);
|
|
634
|
+
transform: translateX(-100%); animation: rlSweep 1.5s linear infinite;
|
|
635
|
+
}
|
|
636
|
+
@keyframes rlSweep { to { transform: translateX(100%); } }
|
|
637
|
+
/* Засечки шагов плана — только в режиме plan */
|
|
638
|
+
.rl-track[data-mode="plan"]::after {
|
|
639
|
+
content: ''; position: absolute; inset: 0; pointer-events: none;
|
|
640
|
+
background: repeating-linear-gradient(90deg,
|
|
641
|
+
transparent 0, transparent calc(33.333% - 1.5px),
|
|
642
|
+
var(--bg) calc(33.333% - 1.5px), var(--bg) 33.333%);
|
|
643
|
+
}
|
|
644
|
+
/* indeterminate: бегущий сканер по всей длине */
|
|
645
|
+
.rl-track[data-mode="scan"] .rl-fill { display: none; }
|
|
646
|
+
.rl-scan {
|
|
647
|
+
display: none; position: absolute; top: 0; bottom: 0; width: 30%; left: -30%;
|
|
648
|
+
background: linear-gradient(90deg, transparent, var(--think) 40%, var(--accent) 72%, transparent);
|
|
649
|
+
}
|
|
650
|
+
.rl-track[data-mode="scan"] .rl-scan {
|
|
651
|
+
display: block; animation: rlScan 1.7s cubic-bezier(.4, .1, .6, .9) infinite;
|
|
652
|
+
}
|
|
653
|
+
@keyframes rlScan { to { left: 100%; } }
|
|
654
|
+
.rail-wrap.phase-tool .rl-track[data-mode="scan"] .rl-scan { animation-duration: 1s; }
|
|
655
|
+
.rail-wrap.phase-compose .rl-track[data-mode="scan"] .rl-scan { animation-duration: 1.3s; }
|
|
656
|
+
/* Вспышка на реальное событие (tool_start / tool_end / text / plan) */
|
|
657
|
+
.rl-track.flash {
|
|
658
|
+
box-shadow: 0 0 0 1px var(--accent), 0 0 14px rgba(196,168,236,.35);
|
|
659
|
+
animation: rlFlash .45s ease-out;
|
|
660
|
+
}
|
|
661
|
+
@keyframes rlFlash { 0% { filter: brightness(1.9); } 100% { filter: brightness(1); } }
|
|
662
|
+
|
|
574
663
|
/* ---- sidebar — plan / usage / environment sections ---- */
|
|
575
664
|
.sb {
|
|
576
|
-
width:
|
|
665
|
+
width: 340px; min-width: 340px; display: flex; flex-direction: column;
|
|
577
666
|
border-left: 1px solid var(--border); background: var(--sb-bg); min-height: 0;
|
|
578
667
|
}
|
|
579
668
|
.sec {
|
|
@@ -879,12 +968,30 @@ body.light .toggle { background: var(--toggle-off); }
|
|
|
879
968
|
background: var(--input-surface); border: 1px solid var(--border-2); border-radius: 4px;
|
|
880
969
|
color: var(--fg); font: inherit; font-size: 12.5px; padding: 6px 8px; width: 100%; min-width: 0;
|
|
881
970
|
}
|
|
971
|
+
/* base-URL field: the free-text input sits under the dropdown when "custom" */
|
|
972
|
+
.pform-base { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
|
|
882
973
|
/* preset row sits above the field grid — keep it off the fields */
|
|
883
974
|
.provider-body .pform > .pform-field { margin-bottom: 16px; }
|
|
884
975
|
.pform-adv { margin-top: 18px; }
|
|
885
976
|
.pform-adv summary { cursor: pointer; font-size: 11.5px; color: var(--dim-a); text-transform: uppercase; letter-spacing: .04em; }
|
|
886
977
|
.pform-adv .pform-grid { margin-top: 12px; }
|
|
887
978
|
|
|
979
|
+
/* titled groups inside "advanced" (retry numbers / cache flags) */
|
|
980
|
+
.pform-checks { display: flex; flex-direction: column; gap: 10px; margin-top: 16px; }
|
|
981
|
+
.pform-checks-title {
|
|
982
|
+
font-size: 11.5px; color: var(--dim-a); text-transform: uppercase; letter-spacing: .04em;
|
|
983
|
+
}
|
|
984
|
+
/* the group gap already separates the title from its grid */
|
|
985
|
+
.pform-checks .pform-grid { margin-top: 0; }
|
|
986
|
+
.pform-checks-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 6px 16px; }
|
|
987
|
+
.pform-check {
|
|
988
|
+
display: inline-flex; align-items: center; gap: 7px; min-width: 0;
|
|
989
|
+
font-size: 12.5px; color: var(--muted); cursor: pointer;
|
|
990
|
+
}
|
|
991
|
+
.pform-check input[type="checkbox"] { width: auto; flex: 0 0 auto; margin: 0; accent-color: var(--accent); }
|
|
992
|
+
.pform-check span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
993
|
+
.pform-check:hover { color: var(--fg); }
|
|
994
|
+
|
|
888
995
|
.sec-desc { color: var(--dim-a); font-size: 11.5px; line-height: 1.4; padding: 6px 0 0; max-width: 70ch; }
|
|
889
996
|
|
|
890
997
|
/* structured editors (tags / checkboxes / table) own the full row width */
|
|
@@ -1078,6 +1185,25 @@ button.toggle:disabled { opacity: .5; cursor: default; }
|
|
|
1078
1185
|
/* ---- responsive layout ---- */
|
|
1079
1186
|
@media (max-width: 760px) {
|
|
1080
1187
|
.bar-top { gap: 8px; padding: 8px 10px; }
|
|
1188
|
+
.bar-sub {
|
|
1189
|
+
display: flex; gap: 2px; align-items: center;
|
|
1190
|
+
padding: 5px 10px; background: var(--panel); border-bottom: 1px solid var(--border);
|
|
1191
|
+
color: var(--muted); font-size: 12.5px;
|
|
1192
|
+
}
|
|
1193
|
+
.bar-sub .icon-btn { height: 28px; min-width: 28px; }
|
|
1194
|
+
.sess-name {
|
|
1195
|
+
flex: 1 1 auto; min-width: 0; display: flex; cursor: pointer;
|
|
1196
|
+
background: none; border: none; font: inherit; color: var(--fg);
|
|
1197
|
+
padding: 5px 6px; border-radius: 4px; text-align: left;
|
|
1198
|
+
}
|
|
1199
|
+
.sess-name:hover { background: var(--hover-bg); }
|
|
1200
|
+
.sess-name:disabled { cursor: default; }
|
|
1201
|
+
.sess-name:disabled:hover { background: none; }
|
|
1202
|
+
.sess-name span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1203
|
+
/* + / list tools live here on phones; the dropdown opens below the bar. */
|
|
1204
|
+
.sess-tools { display: flex; gap: 2px; align-items: center; margin-left: auto; }
|
|
1205
|
+
.sess-tools .dd-menu { left: auto; right: 0; }
|
|
1206
|
+
#sessClose:hover { color: var(--red-strong); }
|
|
1081
1207
|
.conn { display: none; }
|
|
1082
1208
|
/* Sidebar toggle lives next to settings; settings keeps the right edge. */
|
|
1083
1209
|
#toggleSidebar { display: inline-flex; }
|
|
@@ -1088,7 +1214,7 @@ button.toggle:disabled { opacity: .5; cursor: default; }
|
|
|
1088
1214
|
.sb { display: none; }
|
|
1089
1215
|
body.sb-open .sb {
|
|
1090
1216
|
display: flex; position: fixed; top: 41px; right: 0; bottom: 0; z-index: 45;
|
|
1091
|
-
width: min(
|
|
1217
|
+
width: min(360px, 85vw); min-width: 0; max-height: none;
|
|
1092
1218
|
border-left: 1px solid var(--border); border-top: none;
|
|
1093
1219
|
box-shadow: var(--shadow-dd);
|
|
1094
1220
|
}
|
|
@@ -1116,6 +1242,29 @@ button.toggle:disabled { opacity: .5; cursor: default; }
|
|
|
1116
1242
|
.row { font-size: 12.5px; }
|
|
1117
1243
|
.input-area { margin: 8px 10px 10px; }
|
|
1118
1244
|
.msgs { padding: 12px 10px; }
|
|
1245
|
+
/* narrow phones: rail stacks vertically, track takes the full row */
|
|
1246
|
+
.rail-wrap.l-line, .rail-wrap.l-meta {
|
|
1247
|
+
flex-direction: column; align-items: stretch; gap: 6px;
|
|
1248
|
+
}
|
|
1249
|
+
.rail-wrap.l-line .rl-track, .rail-wrap.l-meta .rl-track {
|
|
1250
|
+
order: -1; flex: none; width: 100%; max-width: none;
|
|
1251
|
+
}
|
|
1252
|
+
.rail-wrap.l-line .rail-l1, .rail-wrap.l-line .rail-l2 { flex: none; }
|
|
1253
|
+
.rail-wrap.l-meta { width: 100%; flex-basis: 100%; }
|
|
1254
|
+
.selectors { gap: 6px; }
|
|
1255
|
+
.composer-main { gap: 4px; }
|
|
1256
|
+
/* phones have no Enter/Shift+Enter/Esc/Ctrl+V — hints only take up space.
|
|
1257
|
+
Spans only (not the whole row): the `meta` rail layout lives inside
|
|
1258
|
+
.inp-meta and must stay visible. */
|
|
1259
|
+
.inp-meta > span { display: none; }
|
|
1260
|
+
.inp-meta { gap: 0; margin-top: 0; padding: 0 2px; }
|
|
1261
|
+
.inp-meta:empty { display: none; }
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
/* touch devices at any width: keyboard hints don't apply */
|
|
1265
|
+
@media (pointer: coarse) {
|
|
1266
|
+
.inp-meta > span { display: none; }
|
|
1267
|
+
.inp-meta { gap: 0; }
|
|
1119
1268
|
}
|
|
1120
1269
|
|
|
1121
1270
|
/* --- First-run setup gate ---------------------------------------------------
|
package/dist/cli/cache-line.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// Подсказки при опечатках в командах: расстояние Левенштейна.
|
|
2
|
+
/** Редакционное расстояние Левенштейна между строками (без учёта регистра). */
|
|
2
3
|
export function levenshtein(a, b) {
|
|
3
4
|
const s = a.toLowerCase();
|
|
4
5
|
const t = b.toLowerCase();
|
|
@@ -20,9 +21,9 @@ export function levenshtein(a, b) {
|
|
|
20
21
|
return prev[t.length];
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
-
* `undefined
|
|
25
|
-
* (`mma sesion list`)
|
|
24
|
+
* Известная команда, чьё имя в пределах `maxDistance` от `input`, или
|
|
25
|
+
* `undefined`, если близких нет. Ловит опечатки в субкомандах
|
|
26
|
+
* (`mma sesion list`), которые иначе молча ушли бы в LLM.
|
|
26
27
|
*/
|
|
27
28
|
export function closestCommand(input, known, maxDistance = 2) {
|
|
28
29
|
let best;
|