@armadra/agent 0.3.0 → 0.5.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 +257 -0
- package/README.md +263 -95
- package/THIRD_PARTY_NOTICES.md +34 -0
- package/dist/acp.d.ts +18 -0
- package/dist/acp.js +19 -0
- package/dist/agent/limits.d.ts +38 -0
- package/dist/agent/limits.js +127 -0
- package/dist/agent/loop-guard.d.ts +38 -0
- package/dist/agent/loop-guard.js +95 -0
- package/dist/agent/loop.d.ts +4 -0
- package/dist/agent/loop.js +7 -0
- package/dist/agent/prompt-rules.d.ts +12 -0
- package/dist/agent/prompt-rules.js +18 -0
- package/dist/agent/reminders.d.ts +59 -0
- package/dist/agent/reminders.js +327 -0
- package/dist/agent/retry.d.ts +1 -1
- package/dist/agent/retry.js +2 -1
- package/dist/agent/session-cache.d.ts +5 -0
- package/dist/agent/session-cache.js +18 -2
- package/dist/agent/session-classifier.d.ts +18 -0
- package/dist/agent/session-classifier.js +105 -0
- package/dist/agent/session-compaction.d.ts +35 -6
- package/dist/agent/session-compaction.js +157 -31
- package/dist/agent/session-core.d.ts +40 -1
- package/dist/agent/session-extensions.d.ts +61 -0
- package/dist/agent/session-extensions.js +129 -0
- package/dist/agent/session-images.d.ts +23 -0
- package/dist/agent/session-images.js +97 -0
- package/dist/agent/session-plan.d.ts +21 -0
- package/dist/agent/session-plan.js +524 -0
- package/dist/agent/session-rewind.d.ts +81 -0
- package/dist/agent/session-rewind.js +354 -0
- package/dist/agent/session-run.d.ts +28 -1
- package/dist/agent/session-run.js +157 -6
- package/dist/agent/session-settings.d.ts +49 -0
- package/dist/agent/session-settings.js +95 -0
- package/dist/agent/session-subagent.d.ts +36 -24
- package/dist/agent/session-subagent.js +259 -129
- package/dist/agent/session-sync.d.ts +10 -3
- package/dist/agent/session-sync.js +37 -8
- package/dist/agent/session-telemetry.d.ts +39 -0
- package/dist/agent/session-telemetry.js +231 -0
- package/dist/agent/session-tools.js +63 -3
- package/dist/agent/session.d.ts +33 -29
- package/dist/agent/session.js +91 -126
- package/dist/agent/subagent-registry.d.ts +91 -0
- package/dist/agent/subagent-registry.js +494 -0
- package/dist/agent/system-prompt.d.ts +6 -3
- package/dist/agent/system-prompt.js +7 -2
- package/dist/agent/tool-runner.d.ts +8 -1
- package/dist/agent/tool-runner.js +72 -6
- package/dist/agent/types-w5.d.ts +192 -0
- package/dist/agent/types-w5.js +10 -0
- package/dist/agent/types.d.ts +55 -4
- package/dist/agent/types.js +2 -0
- package/dist/agent/worktree.d.ts +36 -0
- package/dist/agent/worktree.js +86 -0
- package/dist/agents/builtin.d.ts +14 -0
- package/dist/agents/builtin.js +39 -0
- package/dist/agents/catalog.d.ts +43 -0
- package/dist/agents/catalog.js +82 -0
- package/dist/agents/discover.d.ts +35 -0
- package/dist/agents/discover.js +83 -0
- package/dist/agents/external.d.ts +82 -0
- package/dist/agents/external.js +326 -0
- package/dist/agents/parse.d.ts +18 -0
- package/dist/agents/parse.js +116 -0
- package/dist/agents/result.d.ts +32 -0
- package/dist/agents/result.js +67 -0
- package/dist/agents/task-control.d.ts +17 -0
- package/dist/agents/task-control.js +17 -0
- package/dist/agents/task-record.d.ts +78 -0
- package/dist/agents/task-record.js +141 -0
- package/dist/agents/types.d.ts +46 -0
- package/dist/agents/types.js +8 -0
- package/dist/ai/apis/anthropic-compat.d.ts +36 -0
- package/dist/ai/apis/anthropic-compat.js +92 -0
- package/dist/ai/apis/anthropic-messages.js +3 -2
- package/dist/ai/apis/anthropic-request.d.ts +7 -6
- package/dist/ai/apis/anthropic-request.js +10 -28
- package/dist/ai/apis/cache-params.d.ts +11 -2
- package/dist/ai/apis/cache-params.js +25 -6
- package/dist/ai/apis/google-generative-ai.js +3 -2
- package/dist/ai/apis/openai-compat.d.ts +4 -1
- package/dist/ai/apis/openai-compat.js +8 -1
- package/dist/ai/apis/openai-completions.js +3 -2
- package/dist/ai/apis/openai-responses.js +3 -2
- package/dist/ai/http.d.ts +28 -6
- package/dist/ai/http.js +41 -8
- package/dist/ai/image-limits.d.ts +45 -0
- package/dist/ai/image-limits.js +68 -0
- package/dist/ai/providers/builtin.d.ts +18 -6
- package/dist/ai/providers/builtin.js +135 -6
- package/dist/ai/providers/catalog-data.js +17 -13
- package/dist/ai/providers/catalog.d.ts +60 -7
- package/dist/ai/providers/catalog.js +197 -38
- package/dist/ai/providers/channels.d.ts +33 -3
- package/dist/ai/providers/channels.js +108 -7
- package/dist/ai/providers/enrich.d.ts +6 -3
- package/dist/ai/providers/enrich.js +19 -4
- package/dist/ai/providers/models-dev-cache.d.ts +28 -24
- package/dist/ai/providers/models-dev-cache.js +92 -78
- package/dist/ai/providers/models-dev-data.d.ts +7 -0
- package/dist/ai/providers/models-dev-data.js +32 -0
- package/dist/ai/providers/models-dev-snapshot.d.ts +50 -0
- package/dist/ai/providers/models-dev-snapshot.js +137 -0
- package/dist/ai/providers/models-dev.d.ts +51 -10
- package/dist/ai/providers/models-dev.js +132 -39
- package/dist/ai/providers/registry.d.ts +28 -11
- package/dist/ai/providers/registry.js +112 -65
- package/dist/ai/providers/suggest.d.ts +18 -0
- package/dist/ai/providers/suggest.js +72 -0
- package/dist/ai/sse.d.ts +6 -2
- package/dist/ai/sse.js +22 -2
- package/dist/ai/types.d.ts +37 -4
- package/dist/ai/types.js +5 -0
- package/dist/bundle/ama.cjs +41979 -21147
- package/dist/checkpoints/backend.d.ts +61 -0
- package/dist/checkpoints/backend.js +135 -0
- package/dist/checkpoints/blobs.d.ts +60 -0
- package/dist/checkpoints/blobs.js +203 -0
- package/dist/checkpoints/gc.d.ts +47 -0
- package/dist/checkpoints/gc.js +144 -0
- package/dist/checkpoints/git-head.d.ts +15 -0
- package/dist/checkpoints/git-head.js +89 -0
- package/dist/checkpoints/index.d.ts +17 -0
- package/dist/checkpoints/index.js +17 -0
- package/dist/checkpoints/replay.d.ts +48 -0
- package/dist/checkpoints/replay.js +154 -0
- package/dist/checkpoints/restore.d.ts +86 -0
- package/dist/checkpoints/restore.js +263 -0
- package/dist/checkpoints/settings.d.ts +14 -0
- package/dist/checkpoints/settings.js +23 -0
- package/dist/checkpoints/shadow-git.d.ts +108 -0
- package/dist/checkpoints/shadow-git.js +491 -0
- package/dist/checkpoints/shadow-restore.d.ts +25 -0
- package/dist/checkpoints/shadow-restore.js +128 -0
- package/dist/checkpoints/tracker.d.ts +64 -0
- package/dist/checkpoints/tracker.js +192 -0
- package/dist/checkpoints/types.d.ts +99 -0
- package/dist/checkpoints/types.js +12 -0
- package/dist/cli/args.d.ts +26 -7
- package/dist/cli/args.js +75 -82
- package/dist/cli/bootstrap.js +40 -4
- package/dist/cli/codemode-notice.d.ts +21 -0
- package/dist/cli/codemode-notice.js +56 -0
- package/dist/cli/compose-agents.d.ts +27 -0
- package/dist/cli/compose-agents.js +111 -0
- package/dist/cli/compose-extensions.d.ts +29 -0
- package/dist/cli/compose-extensions.js +44 -0
- package/dist/cli/compose-session.d.ts +8 -0
- package/dist/cli/compose-session.js +76 -2
- package/dist/cli/compose-store.d.ts +1 -1
- package/dist/cli/compose-store.js +3 -1
- package/dist/cli/compose.d.ts +17 -4
- package/dist/cli/compose.js +60 -14
- package/dist/cli/default-model.d.ts +38 -1
- package/dist/cli/default-model.js +96 -9
- package/dist/cli/deps.d.ts +42 -0
- package/dist/cli/exit-codes.d.ts +12 -0
- package/dist/cli/exit-codes.js +15 -0
- package/dist/cli/fake-visibility.d.ts +13 -0
- package/dist/cli/fake-visibility.js +26 -0
- package/dist/cli/from-prompt.d.ts +18 -0
- package/dist/cli/from-prompt.js +49 -0
- package/dist/cli/help-text.d.ts +4 -0
- package/dist/cli/help-text.js +102 -0
- package/dist/cli/main.d.ts +9 -2
- package/dist/cli/main.js +77 -3
- package/dist/cli/proxy.d.ts +51 -0
- package/dist/cli/proxy.js +135 -0
- package/dist/cli/startup-screen.d.ts +29 -0
- package/dist/cli/startup-screen.js +51 -2
- package/dist/cli/startup-steps.d.ts +1 -1
- package/dist/cli/startup-steps.js +21 -13
- package/dist/cli/subcommands/config.d.ts +22 -3
- package/dist/cli/subcommands/config.js +119 -21
- package/dist/cli/subcommands/context.js +4 -1
- package/dist/cli/subcommands/doctor.js +33 -1
- package/dist/cli/subcommands/init.js +2 -1
- package/dist/cli/subcommands/models-discover.d.ts +15 -9
- package/dist/cli/subcommands/models-discover.js +58 -52
- package/dist/cli/subcommands/models.d.ts +2 -0
- package/dist/cli/subcommands/models.js +33 -14
- package/dist/cli/subcommands/probe-runner.d.ts +96 -0
- package/dist/cli/subcommands/probe-runner.js +264 -0
- package/dist/cli/subcommands/providers-probe.d.ts +34 -0
- package/dist/cli/subcommands/providers-probe.js +87 -0
- package/dist/cli/subcommands/providers.d.ts +3 -2
- package/dist/cli/subcommands/providers.js +53 -51
- package/dist/cli/subcommands/sessions-export.d.ts +10 -0
- package/dist/cli/subcommands/sessions-export.js +59 -0
- package/dist/cli/subcommands/sessions-search.d.ts +13 -0
- package/dist/cli/subcommands/sessions-search.js +103 -0
- package/dist/cli/subcommands/sessions.d.ts +6 -3
- package/dist/cli/subcommands/sessions.js +58 -3
- package/dist/cli/subcommands/stats.d.ts +17 -0
- package/dist/cli/subcommands/stats.js +198 -0
- package/dist/cli/system-prompt-arg.d.ts +11 -0
- package/dist/cli/system-prompt-arg.js +34 -0
- package/dist/codemode/capability.d.ts +24 -7
- package/dist/codemode/capability.js +38 -10
- package/dist/codemode/host-side.d.ts +14 -0
- package/dist/codemode/host-side.js +24 -1
- package/dist/codemode/modes.d.ts +4 -11
- package/dist/codemode/modes.js +5 -27
- package/dist/codemode/tool.d.ts +18 -14
- package/dist/codemode/tool.js +76 -31
- package/dist/compaction/breaker.d.ts +25 -9
- package/dist/compaction/breaker.js +47 -17
- package/dist/compaction/estimate.d.ts +11 -3
- package/dist/compaction/estimate.js +64 -22
- package/dist/compaction/image-budget.d.ts +45 -0
- package/dist/compaction/image-budget.js +115 -0
- package/dist/compaction/post-compact.d.ts +38 -0
- package/dist/compaction/post-compact.js +152 -0
- package/dist/compaction/protect.d.ts +27 -0
- package/dist/compaction/protect.js +56 -0
- package/dist/compaction/prune-tier.d.ts +58 -12
- package/dist/compaction/prune-tier.js +120 -54
- package/dist/compaction/summarize-tier.d.ts +23 -4
- package/dist/compaction/summarize-tier.js +100 -29
- package/dist/config/checker.d.ts +28 -0
- package/dist/config/checker.js +97 -0
- package/dist/config/init.d.ts +6 -2
- package/dist/config/init.js +12 -5
- package/dist/config/json-schema.d.ts +1 -0
- package/dist/config/json-schema.js +98 -4
- package/dist/config/key-docs.d.ts +22 -0
- package/dist/config/key-docs.js +174 -0
- package/dist/config/merge.d.ts +12 -9
- package/dist/config/merge.js +102 -13
- package/dist/config/profile.d.ts +2 -0
- package/dist/config/profile.js +2 -0
- package/dist/config/schema-w5.d.ts +18 -0
- package/dist/config/schema-w5.js +109 -0
- package/dist/config/schema.d.ts +5 -9
- package/dist/config/schema.js +91 -118
- package/dist/config/types-w5.d.ts +118 -0
- package/dist/config/types-w5.js +20 -0
- package/dist/config/types.d.ts +84 -7
- package/dist/config/types.js +29 -1
- package/dist/drivers/acp/client.d.ts +57 -0
- package/dist/drivers/acp/client.js +160 -0
- package/dist/drivers/acp/driver.d.ts +31 -0
- package/dist/drivers/acp/driver.js +274 -0
- package/dist/drivers/acp/testing/fake-agent-main.d.ts +5 -0
- package/dist/drivers/acp/testing/fake-agent-main.js +7 -0
- package/dist/drivers/acp/testing/fake-agent.d.ts +27 -0
- package/dist/drivers/acp/testing/fake-agent.js +211 -0
- package/dist/drivers/acp/types.d.ts +285 -0
- package/dist/drivers/acp/types.js +36 -0
- package/dist/drivers/agents.d.ts +58 -0
- package/dist/drivers/agents.js +142 -0
- package/dist/drivers/base.d.ts +35 -0
- package/dist/drivers/base.js +59 -0
- package/dist/drivers/catalog.d.ts +46 -0
- package/dist/drivers/catalog.js +167 -0
- package/dist/drivers/env.d.ts +20 -0
- package/dist/drivers/env.js +46 -0
- package/dist/drivers/host-runners.d.ts +18 -0
- package/dist/drivers/host-runners.js +45 -0
- package/dist/drivers/jsonrpc.d.ts +58 -0
- package/dist/drivers/jsonrpc.js +180 -0
- package/dist/drivers/native/claude-normalize.d.ts +46 -0
- package/dist/drivers/native/claude-normalize.js +106 -0
- package/dist/drivers/native/claude-stream.d.ts +29 -0
- package/dist/drivers/native/claude-stream.js +456 -0
- package/dist/drivers/native/codex-app-server.d.ts +26 -0
- package/dist/drivers/native/codex-app-server.js +407 -0
- package/dist/drivers/native/codex-normalize.d.ts +38 -0
- package/dist/drivers/native/codex-normalize.js +124 -0
- package/dist/drivers/native/oneshot.d.ts +28 -0
- package/dist/drivers/native/oneshot.js +312 -0
- package/dist/drivers/permissions.d.ts +40 -0
- package/dist/drivers/permissions.js +92 -0
- package/dist/drivers/pids.d.ts +32 -0
- package/dist/drivers/pids.js +93 -0
- package/dist/drivers/pool.d.ts +28 -0
- package/dist/drivers/pool.js +96 -0
- package/dist/drivers/probe.d.ts +47 -0
- package/dist/drivers/probe.js +172 -0
- package/dist/drivers/process.d.ts +48 -0
- package/dist/drivers/process.js +100 -0
- package/dist/drivers/runner.d.ts +61 -0
- package/dist/drivers/runner.js +388 -0
- package/dist/drivers/store.d.ts +49 -0
- package/dist/drivers/store.js +91 -0
- package/dist/drivers/turn.d.ts +41 -0
- package/dist/drivers/turn.js +99 -0
- package/dist/drivers/types.d.ts +122 -0
- package/dist/drivers/types.js +11 -0
- package/dist/git/info.d.ts +75 -0
- package/dist/git/info.js +191 -0
- package/dist/hooks/protocol.js +6 -1
- package/dist/hooks/types.d.ts +10 -1
- package/dist/hooks/types.js +2 -0
- package/dist/host/api-impl.d.ts +7 -0
- package/dist/host/api-impl.js +15 -0
- package/dist/host/types.d.ts +24 -2
- package/dist/host/types.js +4 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/modes/acp/acp-events.d.ts +46 -0
- package/dist/modes/acp/acp-events.js +233 -0
- package/dist/modes/acp/acp-mode.d.ts +17 -0
- package/dist/modes/acp/acp-mode.js +47 -0
- package/dist/modes/acp/acp-server.d.ts +79 -0
- package/dist/modes/acp/acp-server.js +315 -0
- package/dist/modes/commands-core.d.ts +7 -1
- package/dist/modes/commands-core.js +61 -5
- package/dist/modes/image-input.d.ts +12 -4
- package/dist/modes/image-input.js +22 -5
- package/dist/modes/interactive/agent-panels.d.ts +14 -0
- package/dist/modes/interactive/agent-panels.js +103 -0
- package/dist/modes/interactive/agent-ui.d.ts +73 -0
- package/dist/modes/interactive/agent-ui.js +234 -0
- package/dist/modes/interactive/approval-dialog.d.ts +40 -7
- package/dist/modes/interactive/approval-dialog.js +192 -35
- package/dist/modes/interactive/approval-merge.d.ts +41 -0
- package/dist/modes/interactive/approval-merge.js +89 -0
- package/dist/modes/interactive/clipboard-paste.d.ts +18 -0
- package/dist/modes/interactive/clipboard-paste.js +28 -0
- package/dist/modes/interactive/commands.d.ts +20 -3
- package/dist/modes/interactive/commands.js +75 -16
- package/dist/modes/interactive/double-esc.d.ts +20 -0
- package/dist/modes/interactive/double-esc.js +34 -0
- package/dist/modes/interactive/event-notices.d.ts +32 -0
- package/dist/modes/interactive/event-notices.js +79 -0
- package/dist/modes/interactive/external-editor.d.ts +16 -0
- package/dist/modes/interactive/external-editor.js +39 -0
- package/dist/modes/interactive/interactive-mode.d.ts +16 -2
- package/dist/modes/interactive/interactive-mode.js +184 -202
- package/dist/modes/interactive/key-dispatch.d.ts +18 -2
- package/dist/modes/interactive/key-dispatch.js +53 -6
- package/dist/modes/interactive/line/line-mode.d.ts +3 -1
- package/dist/modes/interactive/line/line-mode.js +28 -9
- package/dist/modes/interactive/line/line-render.d.ts +6 -1
- package/dist/modes/interactive/line/line-render.js +66 -8
- package/dist/modes/interactive/message-view.d.ts +49 -10
- package/dist/modes/interactive/message-view.js +262 -46
- package/dist/modes/interactive/panels.d.ts +35 -0
- package/dist/modes/interactive/panels.js +157 -0
- package/dist/modes/interactive/pickers.d.ts +23 -2
- package/dist/modes/interactive/pickers.js +48 -15
- package/dist/modes/interactive/plan-command.d.ts +40 -0
- package/dist/modes/interactive/plan-command.js +129 -0
- package/dist/modes/interactive/plan-dialog.d.ts +98 -0
- package/dist/modes/interactive/plan-dialog.js +290 -0
- package/dist/modes/interactive/plan-flow.d.ts +34 -0
- package/dist/modes/interactive/plan-flow.js +98 -0
- package/dist/modes/interactive/rewind-command.d.ts +31 -0
- package/dist/modes/interactive/rewind-command.js +106 -0
- package/dist/modes/interactive/rewind-flow.d.ts +37 -0
- package/dist/modes/interactive/rewind-flow.js +151 -0
- package/dist/modes/interactive/rewind-list.d.ts +36 -0
- package/dist/modes/interactive/rewind-list.js +123 -0
- package/dist/modes/interactive/rewind-panel.d.ts +77 -0
- package/dist/modes/interactive/rewind-panel.js +309 -0
- package/dist/modes/interactive/rewind-text.d.ts +40 -0
- package/dist/modes/interactive/rewind-text.js +139 -0
- package/dist/modes/interactive/run-indicator.d.ts +51 -0
- package/dist/modes/interactive/run-indicator.js +189 -0
- package/dist/modes/interactive/session-events.d.ts +24 -0
- package/dist/modes/interactive/session-events.js +96 -0
- package/dist/modes/interactive/startup-header.d.ts +40 -0
- package/dist/modes/interactive/startup-header.js +169 -0
- package/dist/modes/interactive/status-area.d.ts +73 -0
- package/dist/modes/interactive/status-area.js +190 -0
- package/dist/modes/interactive/status-bar.d.ts +107 -16
- package/dist/modes/interactive/status-bar.js +306 -81
- package/dist/modes/interactive/status-line.d.ts +33 -0
- package/dist/modes/interactive/status-line.js +113 -0
- package/dist/modes/interactive/subagent-view.d.ts +56 -0
- package/dist/modes/interactive/subagent-view.js +154 -0
- package/dist/modes/interactive/tasks-report.d.ts +27 -0
- package/dist/modes/interactive/tasks-report.js +114 -0
- package/dist/modes/interactive/tool-summary.d.ts +46 -0
- package/dist/modes/interactive/tool-summary.js +218 -0
- package/dist/modes/interactive/tool-view.d.ts +58 -15
- package/dist/modes/interactive/tool-view.js +233 -145
- package/dist/modes/print/print-mode.d.ts +40 -4
- package/dist/modes/print/print-mode.js +161 -8
- package/dist/modes/rpc/commands.d.ts +9 -0
- package/dist/modes/rpc/commands.js +49 -0
- package/dist/modes/rpc/rpc-mode.js +7 -1
- package/dist/modes/session-report.d.ts +11 -0
- package/dist/modes/session-report.js +48 -1
- package/dist/permissions/auto-safe.d.ts +65 -0
- package/dist/permissions/auto-safe.js +547 -0
- package/dist/permissions/classifier.d.ts +68 -0
- package/dist/permissions/classifier.js +186 -0
- package/dist/permissions/dangerous.d.ts +5 -0
- package/dist/permissions/dangerous.js +1 -1
- package/dist/permissions/modes.d.ts +30 -0
- package/dist/permissions/modes.js +78 -0
- package/dist/permissions/pipeline.d.ts +72 -6
- package/dist/permissions/pipeline.js +306 -11
- package/dist/permissions/protected.d.ts +19 -0
- package/dist/permissions/protected.js +74 -0
- package/dist/permissions/readonly-bash.d.ts +30 -0
- package/dist/permissions/readonly-bash.js +118 -0
- package/dist/permissions/rules.js +3 -0
- package/dist/permissions/types.d.ts +92 -3
- package/dist/permissions/types.js +3 -0
- package/dist/plan/compose.d.ts +9 -0
- package/dist/plan/compose.js +19 -0
- package/dist/plan/controller.d.ts +71 -0
- package/dist/plan/controller.js +27 -0
- package/dist/plan/done-markers.d.ts +17 -0
- package/dist/plan/done-markers.js +51 -0
- package/dist/plan/extract.d.ts +29 -0
- package/dist/plan/extract.js +160 -0
- package/dist/plan/prompts.d.ts +36 -0
- package/dist/plan/prompts.js +89 -0
- package/dist/plan/store.d.ts +37 -0
- package/dist/plan/store.js +90 -0
- package/dist/rpc.d.ts +58 -2
- package/dist/rpc.js +7 -0
- package/dist/sandbox/bash.d.ts +74 -0
- package/dist/sandbox/bash.js +126 -0
- package/dist/sandbox/detect.d.ts +48 -0
- package/dist/sandbox/detect.js +149 -0
- package/dist/sandbox/index.d.ts +5 -0
- package/dist/sandbox/index.js +5 -0
- package/dist/sandbox/profile.d.ts +33 -0
- package/dist/sandbox/profile.js +76 -0
- package/dist/sandbox/wrap.d.ts +29 -0
- package/dist/sandbox/wrap.js +117 -0
- package/dist/sdk.d.ts +42 -5
- package/dist/sdk.js +34 -4
- package/dist/session/export.d.ts +32 -0
- package/dist/session/export.js +187 -0
- package/dist/session/redact.d.ts +15 -0
- package/dist/session/redact.js +55 -0
- package/dist/session/reuse.d.ts +33 -0
- package/dist/session/reuse.js +86 -0
- package/dist/session/scan.d.ts +34 -0
- package/dist/session/scan.js +140 -0
- package/dist/session/search.d.ts +52 -0
- package/dist/session/search.js +211 -0
- package/dist/session/stats-aggregate.d.ts +63 -0
- package/dist/session/stats-aggregate.js +163 -0
- package/dist/session/stats-index.d.ts +26 -0
- package/dist/session/stats-index.js +91 -0
- package/dist/session/stats-scan.d.ts +54 -0
- package/dist/session/stats-scan.js +236 -0
- package/dist/session/types.d.ts +3 -1
- package/dist/session/types.js +1 -0
- package/dist/skills/builtin.d.ts +31 -0
- package/dist/skills/builtin.js +109 -0
- package/dist/skills/discover.d.ts +2 -1
- package/dist/skills/index-prompt.js +5 -8
- package/dist/tools/background-jobs.d.ts +71 -0
- package/dist/tools/background-jobs.js +198 -0
- package/dist/tools/bash.d.ts +53 -1
- package/dist/tools/bash.js +158 -7
- package/dist/tools/clipboard-image.d.ts +44 -0
- package/dist/tools/clipboard-image.js +148 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.js +18 -3
- package/dist/tools/image-file.d.ts +38 -3
- package/dist/tools/image-file.js +81 -10
- package/dist/tools/image-resize.d.ts +58 -0
- package/dist/tools/image-resize.js +97 -0
- package/dist/tools/presets.d.ts +40 -8
- package/dist/tools/presets.js +65 -19
- package/dist/tools/read.d.ts +5 -2
- package/dist/tools/read.js +13 -10
- package/dist/tools/registry.d.ts +7 -1
- package/dist/tools/registry.js +27 -4
- package/dist/tools/task-ctl.d.ts +22 -0
- package/dist/tools/task-ctl.js +116 -0
- package/dist/tools/task.d.ts +22 -10
- package/dist/tools/task.js +66 -26
- package/dist/tools/todo.d.ts +22 -2
- package/dist/tools/todo.js +58 -14
- package/dist/tools/truncate.d.ts +15 -0
- package/dist/tools/truncate.js +25 -0
- package/dist/tools/types.d.ts +113 -0
- package/dist/tools/types.js +5 -0
- package/dist/tools/write.js +3 -0
- package/dist/tui/component.d.ts +8 -2
- package/dist/tui/component.js +3 -1
- package/dist/tui/components/box.d.ts +6 -1
- package/dist/tui/components/box.js +16 -6
- package/dist/tui/components/card.d.ts +23 -0
- package/dist/tui/components/card.js +37 -0
- package/dist/tui/components/editor-history.d.ts +6 -0
- package/dist/tui/components/editor-history.js +45 -0
- package/dist/tui/components/editor-paste.d.ts +1 -1
- package/dist/tui/components/editor-paste.js +4 -4
- package/dist/tui/components/editor.d.ts +11 -5
- package/dist/tui/components/editor.js +52 -58
- package/dist/tui/components/key-value.d.ts +3 -0
- package/dist/tui/components/key-value.js +16 -6
- package/dist/tui/components/loader.d.ts +37 -7
- package/dist/tui/components/loader.js +84 -21
- package/dist/tui/components/markdown.d.ts +5 -1
- package/dist/tui/components/markdown.js +45 -21
- package/dist/tui/components/meter.d.ts +3 -3
- package/dist/tui/components/meter.js +13 -11
- package/dist/tui/components/select-list.d.ts +23 -1
- package/dist/tui/components/select-list.js +76 -13
- package/dist/tui/glyphs.d.ts +72 -0
- package/dist/tui/glyphs.js +118 -0
- package/dist/tui/keybindings.d.ts +5 -0
- package/dist/tui/keybindings.js +5 -0
- package/dist/tui/theme.d.ts +30 -6
- package/dist/tui/theme.js +103 -17
- package/dist/tui.d.ts +4 -2
- package/dist/tui.js +3 -1
- package/docs/acp.md +78 -0
- package/docs/agents.md +250 -0
- package/docs/codemode.md +28 -10
- package/docs/hooks.md +36 -32
- package/docs/permissions.md +212 -0
- package/docs/plan.md +107 -0
- package/docs/providers.md +261 -62
- package/docs/rewind-plan.md +181 -0
- package/docs/rpc.md +127 -40
- package/docs/sandbox.md +215 -0
- package/docs/session-format.md +43 -22
- package/docs/sessions.md +174 -0
- package/docs/tui-design.md +751 -0
- package/docs/tui.md +260 -64
- package/package.json +15 -2
package/dist/config/schema.js
CHANGED
|
@@ -5,97 +5,17 @@
|
|
|
5
5
|
* 校验结果是诊断列表:`severity: "error"` 拒绝该文件(启动退出码 3),`"warning"` 只提示
|
|
6
6
|
* (未知字段等)。`path` 是 JSON 指针风格的字段路径(`permission.mode`、`hooks.PreToolUse[0]`)。
|
|
7
7
|
*/
|
|
8
|
+
import { isAbsolute } from "node:path";
|
|
9
|
+
import { Checker, THINKING_LEVELS, checkSection, join, } from "./checker.js";
|
|
10
|
+
import { W5_COMPACTION_KEYS, W5_CONFIG_KEYS, W5_UI_KEYS, checkCompactionW5, checkUiW5, validateConfigW5, } from "./schema-w5.js";
|
|
8
11
|
import { HOOK_EVENTS } from "../hooks/types.js";
|
|
9
12
|
import { PERMISSION_MODES_STRICT_FIRST } from "../permissions/types.js";
|
|
10
13
|
import { WARMING_MODES } from "../ai/cache/types.js";
|
|
11
|
-
import {
|
|
14
|
+
import { BUILTIN_PROVIDERS } from "../ai/providers/builtin.js";
|
|
15
|
+
import { CACHE_RETENTIONS, CHANNEL_NAME_PATTERN, CHECKPOINT_MODES, SANDBOX_ENABLED_MODES, SANDBOX_NETWORK_MODES, CODEMODE_MODES, TOOLS_PRESET_INPUTS, } from "./types.js";
|
|
12
16
|
export { CONFIG_FILE_VERSION } from "./types.js";
|
|
13
|
-
export
|
|
17
|
+
export { THINKING_LEVELS } from "./checker.js";
|
|
14
18
|
export const HOOK_TIMEOUT_MAX_MS = 600_000;
|
|
15
|
-
class Checker {
|
|
16
|
-
diagnostics = [];
|
|
17
|
-
error(path, message) {
|
|
18
|
-
this.diagnostics.push({ severity: "error", path, message });
|
|
19
|
-
}
|
|
20
|
-
warn(path, message) {
|
|
21
|
-
this.diagnostics.push({ severity: "warning", path, message });
|
|
22
|
-
}
|
|
23
|
-
object(value, path) {
|
|
24
|
-
if (typeof value === "object" && value !== null && !Array.isArray(value))
|
|
25
|
-
return true;
|
|
26
|
-
this.error(path, "应为对象");
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
/** 未知字段只警告(前向兼容)。 */
|
|
30
|
-
keys(value, path, allowed) {
|
|
31
|
-
for (const key of Object.keys(value)) {
|
|
32
|
-
if (!allowed.includes(key))
|
|
33
|
-
this.warn(join(path, key), "未知字段,已忽略");
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
version(value, path) {
|
|
37
|
-
if (value["version"] !== 1)
|
|
38
|
-
this.error(join(path, "version"), "version 必须为 1");
|
|
39
|
-
}
|
|
40
|
-
string(value, key, path, required = false) {
|
|
41
|
-
const v = value[key];
|
|
42
|
-
if (v === undefined) {
|
|
43
|
-
if (required)
|
|
44
|
-
this.error(join(path, key), "缺少必填字符串");
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (typeof v !== "string")
|
|
48
|
-
this.error(join(path, key), "应为字符串");
|
|
49
|
-
}
|
|
50
|
-
boolean(value, key, path) {
|
|
51
|
-
const v = value[key];
|
|
52
|
-
if (v !== undefined && typeof v !== "boolean")
|
|
53
|
-
this.error(join(path, key), "应为布尔值");
|
|
54
|
-
}
|
|
55
|
-
number(value, key, path, min = 0, max = Number.MAX_SAFE_INTEGER) {
|
|
56
|
-
const v = value[key];
|
|
57
|
-
if (v === undefined)
|
|
58
|
-
return;
|
|
59
|
-
if (typeof v !== "number" || !Number.isFinite(v)) {
|
|
60
|
-
this.error(join(path, key), "应为数字");
|
|
61
|
-
}
|
|
62
|
-
else if (v < min || v > max) {
|
|
63
|
-
this.error(join(path, key), `应在 ${min}–${max} 之间`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
oneOf(value, key, path, choices) {
|
|
67
|
-
const v = value[key];
|
|
68
|
-
if (v === undefined)
|
|
69
|
-
return;
|
|
70
|
-
if (typeof v !== "string" || !choices.includes(v)) {
|
|
71
|
-
this.error(join(path, key), `取值应为 ${choices.join(" | ")}`);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
stringArray(value, key, path) {
|
|
75
|
-
const v = value[key];
|
|
76
|
-
if (v === undefined)
|
|
77
|
-
return;
|
|
78
|
-
if (!Array.isArray(v) || v.some((item) => typeof item !== "string")) {
|
|
79
|
-
this.error(join(path, key), "应为字符串数组");
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
stringRecord(value, key, path) {
|
|
83
|
-
const v = value[key];
|
|
84
|
-
if (v === undefined)
|
|
85
|
-
return;
|
|
86
|
-
if (!this.object(v, join(path, key)))
|
|
87
|
-
return;
|
|
88
|
-
for (const [k, item] of Object.entries(v)) {
|
|
89
|
-
if (typeof item !== "string")
|
|
90
|
-
this.error(join(join(path, key), k), "应为字符串");
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function join(path, key) {
|
|
95
|
-
if (typeof key === "number")
|
|
96
|
-
return `${path}[${key}]`;
|
|
97
|
-
return path === "" ? key : `${path}.${key}`;
|
|
98
|
-
}
|
|
99
19
|
export function hasErrors(diagnostics) {
|
|
100
20
|
return diagnostics.some((d) => d.severity === "error");
|
|
101
21
|
}
|
|
@@ -116,6 +36,10 @@ const CONFIG_KEYS = [
|
|
|
116
36
|
"ui",
|
|
117
37
|
"skills",
|
|
118
38
|
"cache",
|
|
39
|
+
"request",
|
|
40
|
+
"checkpoints",
|
|
41
|
+
"sandbox",
|
|
42
|
+
...W5_CONFIG_KEYS,
|
|
119
43
|
"$schema",
|
|
120
44
|
];
|
|
121
45
|
const PROVIDER_KEYS = [
|
|
@@ -199,15 +123,22 @@ function checkCompat(c, compat, path) {
|
|
|
199
123
|
c.boolean(compat, key, path);
|
|
200
124
|
c.oneOf(compat, "cacheReporting", path, ["auto", "silent", "reported"]);
|
|
201
125
|
}
|
|
202
|
-
/**
|
|
203
|
-
|
|
126
|
+
/**
|
|
127
|
+
* 返回合法的渠道名集合;没有 `channels`(也没有内置渠道)时 undefined。`builtin` 是内置供应商的内置渠道名
|
|
128
|
+
* ([W5-M2]):同名渠道可只写要改的字段,`defaultChannel` 与模型 `channels` 也可引用它们。
|
|
129
|
+
*/
|
|
130
|
+
function checkChannels(c, value, path, builtin) {
|
|
204
131
|
const channels = value["channels"];
|
|
205
|
-
if (channels === undefined)
|
|
206
|
-
|
|
132
|
+
if (channels === undefined) {
|
|
133
|
+
if (builtin.length === 0)
|
|
134
|
+
return undefined;
|
|
135
|
+
checkDefaultChannel(c, value, path, new Set(builtin));
|
|
136
|
+
return new Set(builtin);
|
|
137
|
+
}
|
|
207
138
|
const cp = join(path, "channels");
|
|
208
139
|
if (!c.object(channels, cp))
|
|
209
140
|
return new Set();
|
|
210
|
-
const names = new Set();
|
|
141
|
+
const names = new Set(builtin);
|
|
211
142
|
for (const [name, channel] of Object.entries(channels)) {
|
|
212
143
|
const p = join(cp, name);
|
|
213
144
|
if (!CHANNEL_NAME_PATTERN.test(name)) {
|
|
@@ -218,8 +149,8 @@ function checkChannels(c, value, path) {
|
|
|
218
149
|
if (!c.object(channel, p))
|
|
219
150
|
continue;
|
|
220
151
|
c.keys(channel, p, CHANNEL_KEYS);
|
|
221
|
-
c.string(channel, "api", p,
|
|
222
|
-
c.string(channel, "baseUrl", p,
|
|
152
|
+
c.string(channel, "api", p, !builtin.includes(name));
|
|
153
|
+
c.string(channel, "baseUrl", p, !builtin.includes(name));
|
|
223
154
|
c.string(channel, "apiKey", p);
|
|
224
155
|
c.stringRecord(channel, "headers", p);
|
|
225
156
|
if (channel["authHeader"] !== undefined)
|
|
@@ -228,16 +159,19 @@ function checkChannels(c, value, path) {
|
|
|
228
159
|
}
|
|
229
160
|
if (names.size === 0 && Object.keys(channels).length === 0)
|
|
230
161
|
c.error(cp, "至少要有一个渠道");
|
|
231
|
-
|
|
232
|
-
if (preferred !== undefined) {
|
|
233
|
-
if (typeof preferred !== "string")
|
|
234
|
-
c.error(join(path, "defaultChannel"), "应为字符串");
|
|
235
|
-
else if (!names.has(preferred))
|
|
236
|
-
c.error(join(path, "defaultChannel"), `渠道 "${preferred}" 不存在`);
|
|
237
|
-
}
|
|
162
|
+
checkDefaultChannel(c, value, path, names);
|
|
238
163
|
return names;
|
|
239
164
|
}
|
|
240
|
-
function
|
|
165
|
+
function checkDefaultChannel(c, value, path, names) {
|
|
166
|
+
const preferred = value["defaultChannel"];
|
|
167
|
+
if (preferred === undefined)
|
|
168
|
+
return;
|
|
169
|
+
if (typeof preferred !== "string")
|
|
170
|
+
c.error(join(path, "defaultChannel"), "应为字符串");
|
|
171
|
+
else if (!names.has(preferred))
|
|
172
|
+
c.error(join(path, "defaultChannel"), `渠道 "${preferred}" 不存在`);
|
|
173
|
+
}
|
|
174
|
+
function checkProvider(c, value, path, id) {
|
|
241
175
|
if (!c.object(value, path))
|
|
242
176
|
return;
|
|
243
177
|
c.keys(value, path, PROVIDER_KEYS);
|
|
@@ -249,21 +183,13 @@ function checkProvider(c, value, path) {
|
|
|
249
183
|
checkCompat(c, value["compat"], join(path, "compat"));
|
|
250
184
|
if (value["authHeader"] !== undefined)
|
|
251
185
|
c.object(value["authHeader"], join(path, "authHeader"));
|
|
252
|
-
const
|
|
186
|
+
const builtin = BUILTIN_PROVIDERS.find((p) => p.id === id)?.channels?.map((ch) => ch.name);
|
|
187
|
+
const channels = checkChannels(c, value, path, builtin ?? []);
|
|
253
188
|
if (channels === undefined && value["defaultChannel"] !== undefined)
|
|
254
189
|
c.error(join(path, "defaultChannel"), "没有 channels 时不能设 defaultChannel");
|
|
255
190
|
checkModels(c, value["models"], join(path, "models"), channels);
|
|
256
191
|
checkModels(c, value["modelOverrides"], join(path, "modelOverrides"), channels);
|
|
257
192
|
}
|
|
258
|
-
function checkSection(c, config, key, allowed, body) {
|
|
259
|
-
const section = config[key];
|
|
260
|
-
if (section === undefined)
|
|
261
|
-
return;
|
|
262
|
-
if (!c.object(section, key))
|
|
263
|
-
return;
|
|
264
|
-
c.keys(section, key, allowed);
|
|
265
|
-
body(section, key);
|
|
266
|
-
}
|
|
267
193
|
export function validateConfig(value) {
|
|
268
194
|
const c = new Checker();
|
|
269
195
|
if (!c.object(value, ""))
|
|
@@ -275,13 +201,16 @@ export function validateConfig(value) {
|
|
|
275
201
|
const providers = value["providers"];
|
|
276
202
|
if (providers !== undefined && c.object(providers, "providers")) {
|
|
277
203
|
for (const [id, provider] of Object.entries(providers)) {
|
|
278
|
-
checkProvider(c, provider, join("providers", id));
|
|
204
|
+
checkProvider(c, provider, join("providers", id), id);
|
|
279
205
|
}
|
|
280
206
|
}
|
|
281
|
-
|
|
207
|
+
const permissionKeys = ["mode", "allow", "deny", "builtinDeny", "autoModel", "autoSafeCommands"];
|
|
208
|
+
checkSection(c, value, "permission", permissionKeys, (s, p) => {
|
|
282
209
|
c.oneOf(s, "mode", p, PERMISSION_MODES_STRICT_FIRST);
|
|
283
210
|
c.stringArray(s, "allow", p);
|
|
284
211
|
c.stringArray(s, "deny", p);
|
|
212
|
+
c.string(s, "autoModel", p);
|
|
213
|
+
c.stringArray(s, "autoSafeCommands", p);
|
|
285
214
|
const builtinDeny = s["builtinDeny"];
|
|
286
215
|
if (builtinDeny !== undefined &&
|
|
287
216
|
typeof builtinDeny !== "boolean" &&
|
|
@@ -289,10 +218,12 @@ export function validateConfig(value) {
|
|
|
289
218
|
c.error(join(p, "builtinDeny"), "应为布尔值或字符串数组");
|
|
290
219
|
}
|
|
291
220
|
});
|
|
292
|
-
|
|
221
|
+
const compactionKeys = ["enabled", "reserveTokens", "keepRecentTokens", ...W5_COMPACTION_KEYS];
|
|
222
|
+
checkSection(c, value, "compaction", compactionKeys, (s, p) => {
|
|
293
223
|
c.boolean(s, "enabled", p);
|
|
294
224
|
c.number(s, "reserveTokens", p);
|
|
295
225
|
c.number(s, "keepRecentTokens", p);
|
|
226
|
+
checkCompactionW5(c, s, p);
|
|
296
227
|
});
|
|
297
228
|
checkSection(c, value, "retry", ["enabled", "maxRetries", "baseDelayMs", "maxDelayMs"], (s, p) => {
|
|
298
229
|
c.boolean(s, "enabled", p);
|
|
@@ -301,7 +232,7 @@ export function validateConfig(value) {
|
|
|
301
232
|
c.number(s, "maxDelayMs", p);
|
|
302
233
|
});
|
|
303
234
|
checkSection(c, value, "tools", ["preset", "default", "maxToolResultChars", "bashTimeoutMs", "disabled"], (s, p) => {
|
|
304
|
-
c.oneOf(s, "preset", p,
|
|
235
|
+
c.oneOf(s, "preset", p, TOOLS_PRESET_INPUTS);
|
|
305
236
|
c.stringArray(s, "default", p);
|
|
306
237
|
c.number(s, "maxToolResultChars", p, 1);
|
|
307
238
|
c.number(s, "bashTimeoutMs", p, 1);
|
|
@@ -315,14 +246,50 @@ export function validateConfig(value) {
|
|
|
315
246
|
checkSection(c, value, "hooks", ["timeoutMs"], (s, p) => {
|
|
316
247
|
c.number(s, "timeoutMs", p, 1, HOOK_TIMEOUT_MAX_MS);
|
|
317
248
|
});
|
|
318
|
-
checkSection(c, value, "ui", [
|
|
319
|
-
|
|
249
|
+
checkSection(c, value, "ui", [
|
|
250
|
+
"theme",
|
|
251
|
+
"markdown",
|
|
252
|
+
"showThinking",
|
|
253
|
+
"tuiMode",
|
|
254
|
+
"quietStartup",
|
|
255
|
+
"ascii",
|
|
256
|
+
"compact",
|
|
257
|
+
"animation",
|
|
258
|
+
"restoreOnCancel",
|
|
259
|
+
...W5_UI_KEYS,
|
|
260
|
+
], (s, p) => {
|
|
261
|
+
c.oneOf(s, "theme", p, ["dark", "light", "auto"]);
|
|
320
262
|
c.boolean(s, "markdown", p);
|
|
321
263
|
c.oneOf(s, "showThinking", p, ["full", "collapsed", "hidden"]);
|
|
322
264
|
c.oneOf(s, "tuiMode", p, ["regular"]);
|
|
323
265
|
c.oneOf(s, "quietStartup", p, ["normal", "header", "silent"]);
|
|
266
|
+
c.boolean(s, "ascii", p);
|
|
267
|
+
c.boolean(s, "compact", p);
|
|
268
|
+
c.boolean(s, "animation", p);
|
|
269
|
+
c.boolean(s, "restoreOnCancel", p);
|
|
270
|
+
checkUiW5(c, s, p);
|
|
324
271
|
});
|
|
325
272
|
checkSection(c, value, "skills", ["dirs"], (s, p) => c.stringArray(s, "dirs", p));
|
|
273
|
+
checkSection(c, value, "request", ["idleTimeoutMs"], (s, p) => {
|
|
274
|
+
c.number(s, "idleTimeoutMs", p, 0);
|
|
275
|
+
});
|
|
276
|
+
checkSection(c, value, "checkpoints", ["mode", "maxFileBytes", "keep"], (s, p) => {
|
|
277
|
+
c.oneOf(s, "mode", p, CHECKPOINT_MODES);
|
|
278
|
+
c.number(s, "maxFileBytes", p, 0);
|
|
279
|
+
c.number(s, "keep", p, 1);
|
|
280
|
+
});
|
|
281
|
+
checkSection(c, value, "sandbox", ["enabled", "bash", "network", "writable"], (s, p) => {
|
|
282
|
+
c.oneOf(s, "enabled", p, SANDBOX_ENABLED_MODES);
|
|
283
|
+
c.oneOf(s, "bash", p, SANDBOX_ENABLED_MODES);
|
|
284
|
+
c.oneOf(s, "network", p, SANDBOX_NETWORK_MODES);
|
|
285
|
+
c.stringArray(s, "writable", p);
|
|
286
|
+
const writable = s["writable"];
|
|
287
|
+
if (Array.isArray(writable))
|
|
288
|
+
writable.forEach((item, i) => {
|
|
289
|
+
if (typeof item === "string" && !isAbsolute(item) && item !== "~" && !item.startsWith("~/"))
|
|
290
|
+
c.warn(`${p}.writable[${i}]`, "应为绝对路径或 ~/…,已忽略");
|
|
291
|
+
});
|
|
292
|
+
});
|
|
326
293
|
checkSection(c, value, "cache", ["warming", "retention", "minSavingsUsd", "missNotices", "warmSubagents"], (s, p) => {
|
|
327
294
|
c.oneOf(s, "warming", p, WARMING_MODES);
|
|
328
295
|
c.oneOf(s, "retention", p, CACHE_RETENTIONS);
|
|
@@ -330,6 +297,7 @@ export function validateConfig(value) {
|
|
|
330
297
|
c.boolean(s, "missNotices", p);
|
|
331
298
|
c.boolean(s, "warmSubagents", p);
|
|
332
299
|
});
|
|
300
|
+
validateConfigW5(c, value);
|
|
333
301
|
return c.diagnostics;
|
|
334
302
|
}
|
|
335
303
|
// ---------------------------------------------------------------------------
|
|
@@ -366,7 +334,12 @@ export const PROFILE_PATH_FIELDS = [
|
|
|
366
334
|
"sessionDir",
|
|
367
335
|
"config",
|
|
368
336
|
];
|
|
369
|
-
export const PROFILE_PATH_LIST_FIELDS = [
|
|
337
|
+
export const PROFILE_PATH_LIST_FIELDS = [
|
|
338
|
+
"instructions",
|
|
339
|
+
"skillDirs",
|
|
340
|
+
"promptDirs",
|
|
341
|
+
"agentDirs",
|
|
342
|
+
];
|
|
370
343
|
export function validateProfile(value) {
|
|
371
344
|
const c = new Checker();
|
|
372
345
|
if (!c.object(value, ""))
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 第五波配置键的形状(docs/wave5-plan.md §9)。[W5-C0] 契约文件:C0 只定形状、校验(schema-w5.ts)、
|
|
3
|
+
* 说明与缺省(key-docs.ts)、JSON Schema;行为由各批次实现,未实现前这些键被接受但不起作用。
|
|
4
|
+
*
|
|
5
|
+
* 层级:项目级只接受 `plan.bash`(只能更严)、`reminders`、`ui.statusLine`(随 `ui` 段);其余只认
|
|
6
|
+
* 用户级 / profile(项目级忽略并 warning,merge.ts)。
|
|
7
|
+
*/
|
|
8
|
+
import type { ModelThinkingLevel } from "../ai/types.js";
|
|
9
|
+
import type { PermissionMode } from "../permissions/types.js";
|
|
10
|
+
/** [W5-A] 底部信息行:full 两行(速率行 + 状态行),compact 一行。 */
|
|
11
|
+
export type StatusLineMode = "full" | "compact";
|
|
12
|
+
export declare const STATUS_LINE_MODES: readonly StatusLineMode[];
|
|
13
|
+
/** [W5-I] 图像。 */
|
|
14
|
+
export interface ImagesConfig {
|
|
15
|
+
/** auto:超限时用系统工具(sips / magick)缩放,没有工具按原规则拒绝;off:从不缩放。 */
|
|
16
|
+
resize?: "auto" | "off";
|
|
17
|
+
}
|
|
18
|
+
export declare const IMAGE_RESIZE_MODES: readonly ["auto", "off"];
|
|
19
|
+
/** plan 模式下 bash 的处理,从严到宽。 */
|
|
20
|
+
export type PlanBashMode = "deny" | "readonly" | "ask";
|
|
21
|
+
export declare const PLAN_BASH_MODES_STRICT_FIRST: readonly PlanBashMode[];
|
|
22
|
+
/** [W5-F] Plan。 */
|
|
23
|
+
export interface PlanConfig {
|
|
24
|
+
/** 缺省 readonly:只读命令放行、其余拒绝;ask:其余询问;deny:bash 全拒。项目级只能更严。 */
|
|
25
|
+
bash?: PlanBashMode;
|
|
26
|
+
/** 计划文件目录(必须在项目根之内);缺省 `<dataDir>/plans`。 */
|
|
27
|
+
directory?: string;
|
|
28
|
+
/** 无人值守(`-p`、RPC 未声明 plans 能力)时:stop 落盘后停下(缺省),approve 自动批准执行。 */
|
|
29
|
+
unattended?: "stop" | "approve";
|
|
30
|
+
/** 规划用模型 `provider/model[@channel]`:进入 plan 时切换、批准时切回。 */
|
|
31
|
+
model?: string;
|
|
32
|
+
thinkingLevel?: ModelThinkingLevel;
|
|
33
|
+
}
|
|
34
|
+
export declare const PLAN_UNATTENDED_MODES: readonly ["stop", "approve"];
|
|
35
|
+
/** [W5-E / W5-G] 单个 Agent(外部 CLI 或子 Agent 类型)的设置:`agents.<id>`。 */
|
|
36
|
+
export interface AgentEntryConfig {
|
|
37
|
+
/** 该 Agent 的并发上限(claude 缺省 2)。 */
|
|
38
|
+
maxConcurrent?: number;
|
|
39
|
+
/** 允许比 ama 当前模式更宽的上限(只认用户级)。 */
|
|
40
|
+
maxMode?: PermissionMode;
|
|
41
|
+
/** 该类型 / 外部 Agent 使用的模型。 */
|
|
42
|
+
model?: string;
|
|
43
|
+
env?: {
|
|
44
|
+
/** 子进程环境缺省剥离供应商 key、`*_BASE_URL` 与 `AMA_*`;这里列出要放回的变量名。 */
|
|
45
|
+
passthrough?: string[];
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** `agents` 段里的保留键(其余键都是 Agent id)。 */
|
|
49
|
+
export declare const AGENTS_RESERVED_KEYS: readonly ["maxConcurrent", "sessionBudgetUsd", "dirs"];
|
|
50
|
+
/** [W5-E / W5-G] `agents`:外部 Agent 与子 Agent 定义。 */
|
|
51
|
+
export interface AgentsConfig {
|
|
52
|
+
/** 外部 Agent 总并发,缺省 3。 */
|
|
53
|
+
maxConcurrent?: number;
|
|
54
|
+
/** 本会话外部 Agent 的美元预算;缺省不限。 */
|
|
55
|
+
sessionBudgetUsd?: number;
|
|
56
|
+
/** 追加的子 Agent 定义目录;各层累加。 */
|
|
57
|
+
dirs?: string[];
|
|
58
|
+
[agentId: string]: AgentEntryConfig | number | string[] | undefined;
|
|
59
|
+
}
|
|
60
|
+
/** 取 `agents.<id>`(保留键返回 undefined)。 */
|
|
61
|
+
export declare function agentEntry(agents: AgentsConfig | undefined, agentId: string): AgentEntryConfig | undefined;
|
|
62
|
+
/** [W5-G] ama 自己的子会话。 */
|
|
63
|
+
export interface SubagentsConfig {
|
|
64
|
+
/** 同时运行的子会话,缺省 4。 */
|
|
65
|
+
maxConcurrent?: number;
|
|
66
|
+
/** 排队上限,缺省 16(超出报错)。 */
|
|
67
|
+
maxPending?: number;
|
|
68
|
+
/** 子会话缺省模型;不设继承父会话。 */
|
|
69
|
+
defaultModel?: string;
|
|
70
|
+
}
|
|
71
|
+
/** [W5-G] 模型别名(子 Agent 定义的 `model: fast | strong`)。 */
|
|
72
|
+
export interface ModelsConfig {
|
|
73
|
+
aliases?: {
|
|
74
|
+
fast?: string;
|
|
75
|
+
strong?: string;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** [W5-H1] 档一裁剪参数(其余随窗口缩放的常量不暴露)。 */
|
|
79
|
+
export interface PruneConfig {
|
|
80
|
+
/** 保留最近 N 个工具结果,缺省 5。 */
|
|
81
|
+
keepResults?: number;
|
|
82
|
+
/** 一次至少能省多少 token 才裁:auto = max(20k, 0.1×预算)。 */
|
|
83
|
+
clearAtLeast?: "auto" | number;
|
|
84
|
+
}
|
|
85
|
+
/** [W5-H2] 会话预算(`--max-turns` / `--max-cost` 覆盖)。 */
|
|
86
|
+
export interface LimitsConfig {
|
|
87
|
+
maxTurns?: number;
|
|
88
|
+
maxCostUsd?: number;
|
|
89
|
+
}
|
|
90
|
+
/** [W5-H2] 提醒通道 `ama.reminder` 的各项开关(缺省全开)。 */
|
|
91
|
+
export interface RemindersConfig {
|
|
92
|
+
/** 连续多回合未更新 todo 且有未完成项时复述。 */
|
|
93
|
+
todo?: boolean;
|
|
94
|
+
/** 读过的文件被外部改动时列出。 */
|
|
95
|
+
fileChanges?: boolean;
|
|
96
|
+
/** 上下文用量 70% / 85% 各提醒一次。 */
|
|
97
|
+
contextPressure?: boolean;
|
|
98
|
+
/** 预算剩余 < 20% 时提醒。 */
|
|
99
|
+
budget?: boolean;
|
|
100
|
+
}
|
|
101
|
+
/** [W5-F / W5-H2] todo。 */
|
|
102
|
+
export interface TodoConfig {
|
|
103
|
+
/** 连续 N 回合未更新且有未完成项时提醒复述,缺省 10;0 关闭。 */
|
|
104
|
+
reminder?: number;
|
|
105
|
+
}
|
|
106
|
+
/** 第五波并入 `AmaConfig` 的顶层段。 */
|
|
107
|
+
export interface AmaConfigW5 {
|
|
108
|
+
images?: ImagesConfig;
|
|
109
|
+
plan?: PlanConfig;
|
|
110
|
+
agents?: AgentsConfig;
|
|
111
|
+
subagents?: SubagentsConfig;
|
|
112
|
+
models?: ModelsConfig;
|
|
113
|
+
/** [W5-H2] 回退模型 `provider/model[@channel]`:可重试错误用尽或 overloaded 时切换重试一次。 */
|
|
114
|
+
fallbackModel?: string;
|
|
115
|
+
limits?: LimitsConfig;
|
|
116
|
+
reminders?: RemindersConfig;
|
|
117
|
+
todo?: TodoConfig;
|
|
118
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 第五波配置键的形状(docs/wave5-plan.md §9)。[W5-C0] 契约文件:C0 只定形状、校验(schema-w5.ts)、
|
|
3
|
+
* 说明与缺省(key-docs.ts)、JSON Schema;行为由各批次实现,未实现前这些键被接受但不起作用。
|
|
4
|
+
*
|
|
5
|
+
* 层级:项目级只接受 `plan.bash`(只能更严)、`reminders`、`ui.statusLine`(随 `ui` 段);其余只认
|
|
6
|
+
* 用户级 / profile(项目级忽略并 warning,merge.ts)。
|
|
7
|
+
*/
|
|
8
|
+
export const STATUS_LINE_MODES = ["full", "compact"];
|
|
9
|
+
export const IMAGE_RESIZE_MODES = ["auto", "off"];
|
|
10
|
+
export const PLAN_BASH_MODES_STRICT_FIRST = ["deny", "readonly", "ask"];
|
|
11
|
+
export const PLAN_UNATTENDED_MODES = ["stop", "approve"];
|
|
12
|
+
/** `agents` 段里的保留键(其余键都是 Agent id)。 */
|
|
13
|
+
export const AGENTS_RESERVED_KEYS = ["maxConcurrent", "sessionBudgetUsd", "dirs"];
|
|
14
|
+
/** 取 `agents.<id>`(保留键返回 undefined)。 */
|
|
15
|
+
export function agentEntry(agents, agentId) {
|
|
16
|
+
if (agents === undefined || AGENTS_RESERVED_KEYS.includes(agentId))
|
|
17
|
+
return undefined;
|
|
18
|
+
const entry = agents[agentId];
|
|
19
|
+
return typeof entry === "object" && !Array.isArray(entry) ? entry : undefined;
|
|
20
|
+
}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -7,10 +7,16 @@
|
|
|
7
7
|
* hooks.json 的形状是 `HookConfig`(hooks/types.ts)。
|
|
8
8
|
* (W3-C0)第三波:`cache` 段(§1.12,只认用户级 / profile);`ModelConfig` / `ModelOverride`
|
|
9
9
|
* 允许模型级 `api`(§2.3,同一中转的模型走不同协议),由 W3-B12 在注册表里生效。
|
|
10
|
+
* (W5-C0)第五波配置键(docs/wave5-plan.md §9):新段的形状在 types-w5.ts(`AmaConfigW5` 并入
|
|
11
|
+
* `AmaConfig`),已有段加 `ui.statusLine`、`compaction.prune / pruneExclude`、profile `agentDirs`。
|
|
10
12
|
*/
|
|
11
13
|
import type { WarmingMode } from "../ai/cache/types.js";
|
|
12
14
|
import type { Api, AuthHeader, CacheRetention, Model, ModelThinkingLevel, ProviderCompat } from "../ai/types.js";
|
|
13
15
|
import type { PermissionMode } from "../permissions/types.js";
|
|
16
|
+
import type { CheckpointMode } from "../checkpoints/types.js";
|
|
17
|
+
import type { AmaConfigW5, PruneConfig, StatusLineMode } from "./types-w5.js";
|
|
18
|
+
export type * from "./types-w5.js";
|
|
19
|
+
export { AGENTS_RESERVED_KEYS, IMAGE_RESIZE_MODES, PLAN_BASH_MODES_STRICT_FIRST, PLAN_UNATTENDED_MODES, STATUS_LINE_MODES, agentEntry, } from "./types-w5.js";
|
|
14
20
|
export declare const CONFIG_FILE_VERSION: 1;
|
|
15
21
|
/**
|
|
16
22
|
* 自定义模型条目;缺省 maxTokens 8192、reasoning false、input ["text"],不猜 contextWindow。
|
|
@@ -65,11 +71,19 @@ export interface PermissionConfig {
|
|
|
65
71
|
* 数组 = 要移除的规则原文。放宽项,只认用户级 / profile,项目级忽略并 warning。
|
|
66
72
|
*/
|
|
67
73
|
builtinDeny?: boolean | string[];
|
|
74
|
+
/** auto 模式分类器的模型(`provider/model`);缺省 = 当前会话模型。放宽项,项目级忽略。 */
|
|
75
|
+
autoModel?: string;
|
|
76
|
+
/** auto 模式安全名单追加(词前缀或含 `*` 的通配)。放宽项,项目级忽略;各层累加。 */
|
|
77
|
+
autoSafeCommands?: string[];
|
|
68
78
|
}
|
|
69
79
|
export interface CompactionConfig {
|
|
70
80
|
enabled?: boolean;
|
|
71
81
|
reserveTokens?: number;
|
|
72
82
|
keepRecentTokens?: number;
|
|
83
|
+
/** [W5-C0] 档一裁剪参数(W5-H1);只认用户级。 */
|
|
84
|
+
prune?: PruneConfig;
|
|
85
|
+
/** [W5-C0] 不被档一裁剪的工具名(W5-H1);只认用户级。 */
|
|
86
|
+
pruneExclude?: string[];
|
|
73
87
|
}
|
|
74
88
|
export interface RetryConfig {
|
|
75
89
|
enabled?: boolean;
|
|
@@ -77,13 +91,22 @@ export interface RetryConfig {
|
|
|
77
91
|
baseDelayMs?: number;
|
|
78
92
|
maxDelayMs?: number;
|
|
79
93
|
}
|
|
80
|
-
/** 工具预设(设计 §5.6
|
|
81
|
-
export type ToolsPreset = "default" | "minimal" | "codemode" | "coordinator";
|
|
82
|
-
/**
|
|
94
|
+
/** 工具预设(设计 §5.6):模型直接看到的工具集合(规范名)。 */
|
|
95
|
+
export type ToolsPreset = "default" | "minimal" | "codemode-only" | "coordinator";
|
|
96
|
+
/** 预设别名 → 规范名:`codemode` 是 0.3.0 的旧名(行为同 `codemode-only`)。 */
|
|
97
|
+
export declare const TOOLS_PRESET_ALIASES: Readonly<Record<string, ToolsPreset>>;
|
|
98
|
+
/** 配置文件、命令行、RPC、SDK 接受的写法:规范名或别名。 */
|
|
99
|
+
export type ToolsPresetInput = ToolsPreset | "codemode";
|
|
100
|
+
/** 从严到宽:项目级只能把预设改成不比当前更宽的那个(coordinator 最严,codemode-only 最宽)。 */
|
|
83
101
|
export declare const TOOLS_PRESETS_STRICT_FIRST: readonly ToolsPreset[];
|
|
102
|
+
/** 全部可接受的写法(规范名在前,别名在后;schema 与命令行校验用)。 */
|
|
103
|
+
export declare const TOOLS_PRESET_INPUTS: readonly ToolsPresetInput[];
|
|
104
|
+
/** 规范名;未知名字原样返回(校验由 schema 负责)。 */
|
|
105
|
+
export declare function canonicalPreset(name: ToolsPresetInput): ToolsPreset;
|
|
106
|
+
export declare function canonicalPreset(name: string | undefined): ToolsPreset | undefined;
|
|
84
107
|
export interface ToolsConfig {
|
|
85
|
-
/** 缺省 `default`;命令行 `--tools-preset
|
|
86
|
-
preset?:
|
|
108
|
+
/** 缺省 `default`;命令行 `--tools-preset`;`codemode` 是 `codemode-only` 的别名。 */
|
|
109
|
+
preset?: ToolsPresetInput;
|
|
87
110
|
/**
|
|
88
111
|
* 在预设上微调(设计 §5.6):`+name` 加、`-name` 去;不带前缀的名字整组替换预设的内置工具。
|
|
89
112
|
* 只认用户级 / profile(项目级忽略并 warning)。
|
|
@@ -108,12 +131,23 @@ export interface HooksSettings {
|
|
|
108
131
|
timeoutMs?: number;
|
|
109
132
|
}
|
|
110
133
|
export interface UiConfig {
|
|
111
|
-
|
|
134
|
+
/** auto 按 `COLORFGBG` / `TERM_PROGRAM` 猜(不发查询序列),猜不出用 dark。 */
|
|
135
|
+
theme?: "dark" | "light" | "auto";
|
|
112
136
|
markdown?: boolean;
|
|
113
137
|
showThinking?: "full" | "collapsed" | "hidden";
|
|
114
138
|
/** 第一期只有 regular(§12.10)。 */
|
|
115
139
|
tuiMode?: "regular";
|
|
116
140
|
quietStartup?: "normal" | "header" | "silent";
|
|
141
|
+
/** ASCII 字形(`AMA_ASCII=1` 等价);缺省按区域设置 / TERM 自动检测。 */
|
|
142
|
+
ascii?: boolean;
|
|
143
|
+
/** 消息区块间不空行、启动头无框,缺省 false。 */
|
|
144
|
+
compact?: boolean;
|
|
145
|
+
/** false:运行中 spinner 固定为 `·`,缺省 true。 */
|
|
146
|
+
animation?: boolean;
|
|
147
|
+
/** 运行中 Esc 中断、本回合还没有任何输出时撤回该回合并回填原消息,缺省 true。 */
|
|
148
|
+
restoreOnCancel?: boolean;
|
|
149
|
+
/** [W5-C0] 底部信息行(W5-A):缺省独立终端 full、嵌入宿主(有 profile)compact。 */
|
|
150
|
+
statusLine?: StatusLineMode;
|
|
117
151
|
}
|
|
118
152
|
export interface SkillsConfig {
|
|
119
153
|
dirs?: string[];
|
|
@@ -136,8 +170,46 @@ export interface CacheConfig {
|
|
|
136
170
|
warmSubagents?: boolean;
|
|
137
171
|
}
|
|
138
172
|
export declare const DEFAULT_CACHE_CONFIG: Readonly<Required<CacheConfig>>;
|
|
173
|
+
/**
|
|
174
|
+
* 模型请求(W4-C)。只认用户级 / profile;环境变量 `AMA_IDLE_TIMEOUT_MS` 覆盖 `idleTimeoutMs`。
|
|
175
|
+
*/
|
|
176
|
+
export interface RequestConfig {
|
|
177
|
+
/** 等响应头与流中两块数据之间的最长间隔(毫秒),收到任何字节即重新计时;缺省 300 000,0 关闭。 */
|
|
178
|
+
idleTimeoutMs?: number;
|
|
179
|
+
}
|
|
180
|
+
export declare const CHECKPOINT_MODES: readonly CheckpointMode[];
|
|
181
|
+
/**
|
|
182
|
+
* 检查点(docs/rewind-plan.md §5)。环境变量 `AMA_CHECKPOINTS` 覆盖 `mode`;项目级只接受
|
|
183
|
+
* `mode: "off"` 与调小 `maxFileBytes`(只能收紧)。
|
|
184
|
+
*/
|
|
185
|
+
export interface CheckpointsConfig {
|
|
186
|
+
/** tools(缺省):跟踪 edit / write 改过的文件;shadow-git:影子 git(RW-D);off:关闭。 */
|
|
187
|
+
mode?: CheckpointMode;
|
|
188
|
+
/** 单个文件的备份上限(字节),超出不备份,回滚时报告无法恢复;缺省 5 242 880。 */
|
|
189
|
+
maxFileBytes?: number;
|
|
190
|
+
/** 可回滚的最近检查点数,缺省 100。 */
|
|
191
|
+
keep?: number;
|
|
192
|
+
}
|
|
193
|
+
export declare const DEFAULT_CHECKPOINTS_CONFIG: Readonly<Required<CheckpointsConfig>>;
|
|
194
|
+
export declare const SANDBOX_ENABLED_MODES: readonly ("auto" | "off")[];
|
|
195
|
+
/** [S2] `sandbox.network` 的取值。 */
|
|
196
|
+
export declare const SANDBOX_NETWORK_MODES: readonly ("deny" | "allow")[];
|
|
197
|
+
/**
|
|
198
|
+
* 操作系统级沙箱(docs/sandbox.md)。只认用户级 / profile;项目级只接受收紧的 `network: "deny"`,其余忽略
|
|
199
|
+
* 并 warning。环境变量 `AMA_SANDBOX=off` 覆盖 `enabled`。
|
|
200
|
+
*/
|
|
201
|
+
export interface SandboxConfig {
|
|
202
|
+
/** auto(缺省):探测到可用的 sandbox-exec / bwrap / unshare 就用;off:不用。 */
|
|
203
|
+
enabled?: "auto" | "off";
|
|
204
|
+
/** [S2] bash 经 OS 沙箱运行:auto 有 sandbox-exec / bwrap 就用;off(缺省)不用。 */
|
|
205
|
+
bash?: "auto" | "off";
|
|
206
|
+
/** [S2] bash 沙箱里的网络:deny(缺省,满足 default 模式免审批的条件)/ allow。 */
|
|
207
|
+
network?: "deny" | "allow";
|
|
208
|
+
/** [S2] bash 沙箱追加的可写目录(绝对路径或 `~/…`)。 */
|
|
209
|
+
writable?: string[];
|
|
210
|
+
}
|
|
139
211
|
/** config.json(用户级 / 项目级 / profile.config 同形状;项目级只接受受限字段,§10.2)。 */
|
|
140
|
-
export interface AmaConfig {
|
|
212
|
+
export interface AmaConfig extends AmaConfigW5 {
|
|
141
213
|
version: typeof CONFIG_FILE_VERSION;
|
|
142
214
|
/** `provider/model-id`。 */
|
|
143
215
|
defaultModel?: string;
|
|
@@ -152,6 +224,9 @@ export interface AmaConfig {
|
|
|
152
224
|
ui?: UiConfig;
|
|
153
225
|
skills?: SkillsConfig;
|
|
154
226
|
cache?: CacheConfig;
|
|
227
|
+
request?: RequestConfig;
|
|
228
|
+
checkpoints?: CheckpointsConfig;
|
|
229
|
+
sandbox?: SandboxConfig;
|
|
155
230
|
}
|
|
156
231
|
/** auth.json(0600)。 */
|
|
157
232
|
export interface AuthFile {
|
|
@@ -169,6 +244,8 @@ export interface ProfileFile {
|
|
|
169
244
|
instructions?: string[];
|
|
170
245
|
skillDirs?: string[];
|
|
171
246
|
promptDirs?: string[];
|
|
247
|
+
/** [W5-C0] 子 Agent 定义目录(发现顺序在 `--agent-dir` 之后、用户级之前,W5-G)。 */
|
|
248
|
+
agentDirs?: string[];
|
|
172
249
|
hooksFile?: string;
|
|
173
250
|
authFile?: string;
|
|
174
251
|
/** false:key 只来自 authFile,不读环境变量(§11.2)。 */
|
package/dist/config/types.js
CHANGED
|
@@ -7,17 +7,36 @@
|
|
|
7
7
|
* hooks.json 的形状是 `HookConfig`(hooks/types.ts)。
|
|
8
8
|
* (W3-C0)第三波:`cache` 段(§1.12,只认用户级 / profile);`ModelConfig` / `ModelOverride`
|
|
9
9
|
* 允许模型级 `api`(§2.3,同一中转的模型走不同协议),由 W3-B12 在注册表里生效。
|
|
10
|
+
* (W5-C0)第五波配置键(docs/wave5-plan.md §9):新段的形状在 types-w5.ts(`AmaConfigW5` 并入
|
|
11
|
+
* `AmaConfig`),已有段加 `ui.statusLine`、`compaction.prune / pruneExclude`、profile `agentDirs`。
|
|
10
12
|
*/
|
|
13
|
+
export { AGENTS_RESERVED_KEYS, IMAGE_RESIZE_MODES, PLAN_BASH_MODES_STRICT_FIRST, PLAN_UNATTENDED_MODES, STATUS_LINE_MODES, agentEntry, } from "./types-w5.js";
|
|
11
14
|
export const CONFIG_FILE_VERSION = 1;
|
|
12
15
|
/** 渠道名:不含 `/` 与 `@`(`provider/model@channel`)。 */
|
|
13
16
|
export const CHANNEL_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$/;
|
|
14
|
-
/**
|
|
17
|
+
/** 预设别名 → 规范名:`codemode` 是 0.3.0 的旧名(行为同 `codemode-only`)。 */
|
|
18
|
+
export const TOOLS_PRESET_ALIASES = Object.freeze({
|
|
19
|
+
codemode: "codemode-only",
|
|
20
|
+
});
|
|
21
|
+
/** 从严到宽:项目级只能把预设改成不比当前更宽的那个(coordinator 最严,codemode-only 最宽)。 */
|
|
15
22
|
export const TOOLS_PRESETS_STRICT_FIRST = [
|
|
16
23
|
"coordinator",
|
|
17
24
|
"minimal",
|
|
18
25
|
"default",
|
|
26
|
+
"codemode-only",
|
|
27
|
+
];
|
|
28
|
+
/** 全部可接受的写法(规范名在前,别名在后;schema 与命令行校验用)。 */
|
|
29
|
+
export const TOOLS_PRESET_INPUTS = [
|
|
30
|
+
...TOOLS_PRESETS_STRICT_FIRST,
|
|
19
31
|
"codemode",
|
|
20
32
|
];
|
|
33
|
+
export function canonicalPreset(name) {
|
|
34
|
+
if (name === undefined)
|
|
35
|
+
return undefined;
|
|
36
|
+
return Object.hasOwn(TOOLS_PRESET_ALIASES, name)
|
|
37
|
+
? TOOLS_PRESET_ALIASES[name]
|
|
38
|
+
: name;
|
|
39
|
+
}
|
|
21
40
|
export const CODEMODE_MODES = ["off", "on", "only"];
|
|
22
41
|
export const CACHE_RETENTIONS = ["none", "short", "long"];
|
|
23
42
|
export const DEFAULT_CACHE_CONFIG = Object.freeze({
|
|
@@ -27,3 +46,12 @@ export const DEFAULT_CACHE_CONFIG = Object.freeze({
|
|
|
27
46
|
missNotices: true,
|
|
28
47
|
warmSubagents: false,
|
|
29
48
|
});
|
|
49
|
+
export const CHECKPOINT_MODES = ["tools", "shadow-git", "off"];
|
|
50
|
+
export const DEFAULT_CHECKPOINTS_CONFIG = Object.freeze({
|
|
51
|
+
mode: "tools",
|
|
52
|
+
maxFileBytes: 5_242_880,
|
|
53
|
+
keep: 100,
|
|
54
|
+
});
|
|
55
|
+
export const SANDBOX_ENABLED_MODES = ["auto", "off"];
|
|
56
|
+
/** [S2] `sandbox.network` 的取值。 */
|
|
57
|
+
export const SANDBOX_NETWORK_MODES = ["deny", "allow"];
|