cade-cli 0.20.4__tar.gz → 0.20.6__tar.gz
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.
- {cade_cli-0.20.4 → cade_cli-0.20.6}/PKG-INFO +1 -1
- {cade_cli-0.20.4 → cade_cli-0.20.6}/pyproject.toml +1 -1
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/server.py +19 -9
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/agent.py +2 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/config.py +9 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/model_specs.py +20 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/runtime.py +1 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/client.py +12 -3
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/orchestrator.py +13 -1
- {cade_cli-0.20.4 → cade_cli-0.20.6}/.gitignore +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/LICENSE +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/README.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/__main__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/_metadata.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/config.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/errors.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/grants.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/resources.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/sandbox.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/_read_cache.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/access.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/agents.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/filesystem.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/git.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/notifications.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/questions.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/results.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/schemas.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/search.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/shell.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/tasks.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/web_fetch.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/web_search.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/utils.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/arcade_client.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/cache.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/extract.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/markdown.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/preapproved.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/prompts.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/scrape.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/arcade.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/base.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/http.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ai/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ai/prompts.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/app.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/auth.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/account.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/agent_group.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/agents.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/auth.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/chat.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/cron.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/daemon.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/grant.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/hooks.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/mcp.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/mem.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/tasks.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/thread.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/tools.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/mcp_hosts.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/onboarding.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/ui.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/binary.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/comms.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/constants.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/errors.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/frozen.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/git.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/inbox.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/logging.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/memory.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/names.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/paths.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/secrets.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/spawn.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/text.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/types.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/base.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/factory.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/imessage.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/registry.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/stub.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/telegram.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/allowlist.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/attach.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/chunker.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/commands.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/config.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/control.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/cron.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/elicitation.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/ensure.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/format.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/app.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/auth.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/constants.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/elicitation.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/exposure.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/host_agent.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/limits.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/middleware.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/principal.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/resources.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/subscriptions.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/turn_bridge.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/grants.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/inbox.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/inbox_cron.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/install.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/lock.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/mesh.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/message_pump.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/observability.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/owner.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/progress_sink.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/registry.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/router.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/runner.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/runner_main.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/secrets.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/secrets_broker.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/server.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/services.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/sinks.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/supervisor.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/tokens.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/traffic.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/turns.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/wake.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/context_window.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/mcp_schema_index.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/parallel.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/tool_result_store.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/tool_schema_cache.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/config.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/engine.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/callback.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/command.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/http.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/prompt.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/ssrf_guard.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/matchers.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/registry.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/types.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.claude-plugin/marketplace.json +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.claude-plugin/plugin.json +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.cursor-plugin/marketplace.json +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.cursor-plugin/plugin.json +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/agents/operator.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/commands/ask.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/commands/memory.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/commands/tasks.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/mcp.json +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/rules/gateway.mdc +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/skills/ask/SKILL.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/skills/memory/SKILL.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/skills/tasks/SKILL.md +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/doctor.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/install.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/paths.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/state.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/anthropic.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/base.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/http_client.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/ollama.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/openai.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/storage/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/storage/threads.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/scheduler.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/store.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/types.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/telemetry/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/telemetry/otel.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/login_failed.html +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/login_success.html +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/serve/launchd.plist.tmpl +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/serve/serve.toml.example +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/serve/systemd.service.tmpl +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/styles.css +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/_request_ctx.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/base.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/composite.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/config.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/mcp.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/discovered.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/scoring.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/service.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/completion.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/display.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/elicitation.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/input.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/session.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/slash.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/__init__.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/audio.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/cleanup.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/session.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/stt.py +0 -0
- {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/tts.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: cade-cli
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.6
|
|
4
4
|
Summary: Cade - The CLI Agent from Arcade.dev (install: curl -fsSL https://arcadeagent.dev/install | sh)
|
|
5
5
|
Project-URL: Homepage, https://arcade.dev
|
|
6
6
|
Project-URL: Documentation, https://arcadeagent.dev/docs
|
|
@@ -65,13 +65,20 @@ is running. Use these tools when you need to:
|
|
|
65
65
|
- WebFetch to read an external URL (Firecrawl via Arcade by default, httpx
|
|
66
66
|
fallback; preapproved hosts return raw markdown, others go through a fast
|
|
67
67
|
extraction model)
|
|
68
|
-
- WebSearch to find pages on the open web (Arcade-hosted Google Search by
|
|
69
|
-
default; generic HTTP/JSON backend as a fallback)
|
|
70
68
|
|
|
71
69
|
Do NOT use these tools for operations on remote systems, cloud resources, or
|
|
72
70
|
external services. For those, use the appropriate remote/cloud tools instead.
|
|
73
71
|
"""
|
|
74
72
|
|
|
73
|
+
# Appended only when a backend is actually configured (see
|
|
74
|
+
# `web_search_backend_configured`) — otherwise the model is told a WebSearch
|
|
75
|
+
# tool exists when `create_app` never registers it, and calls a tool name
|
|
76
|
+
# that doesn't exist instead of getting a clean "not available" signal.
|
|
77
|
+
_WEB_SEARCH_INSTRUCTIONS = """
|
|
78
|
+
- WebSearch to find pages on the open web (Arcade-hosted Google Search by
|
|
79
|
+
default; generic HTTP/JSON backend as a fallback)
|
|
80
|
+
"""
|
|
81
|
+
|
|
75
82
|
|
|
76
83
|
def web_search_backend_configured() -> bool:
|
|
77
84
|
"""True if the WebSearch tool has a usable backend.
|
|
@@ -88,10 +95,12 @@ def web_search_backend_configured() -> bool:
|
|
|
88
95
|
|
|
89
96
|
def create_app() -> MCPApp:
|
|
90
97
|
"""Create and configure the MCP application with all local tools."""
|
|
98
|
+
search_available = web_search_backend_configured()
|
|
99
|
+
instructions = SERVER_INSTRUCTIONS + (_WEB_SEARCH_INSTRUCTIONS if search_available else "")
|
|
91
100
|
app = MCPApp(
|
|
92
101
|
name="Local",
|
|
93
102
|
transport="stdio",
|
|
94
|
-
instructions=
|
|
103
|
+
instructions=instructions,
|
|
95
104
|
log_level="INFO",
|
|
96
105
|
)
|
|
97
106
|
|
|
@@ -142,21 +151,22 @@ def create_app() -> MCPApp:
|
|
|
142
151
|
|
|
143
152
|
# Web tools. WebFetch always works (httpx fallback + the agent's own LLM for
|
|
144
153
|
# extraction). WebSearch needs a backend — an Arcade key or a SearXNG/HTTP
|
|
145
|
-
# endpoint — so
|
|
146
|
-
#
|
|
147
|
-
#
|
|
148
|
-
# Arcade
|
|
154
|
+
# endpoint — so both the tool AND its instructions bullet are gated on
|
|
155
|
+
# `search_available`; otherwise the model is told the tool exists, calls
|
|
156
|
+
# it, and gets "not a registered function" instead of a clean absence.
|
|
157
|
+
# With Arcade cloud tools connected, web search comes from the Arcade
|
|
158
|
+
# catalogue (Arcade_SelectTools/UseTool) instead.
|
|
149
159
|
#
|
|
150
160
|
# Note: this gates the shipped (frozen) binary, which serves the local tools
|
|
151
161
|
# via this create_app(). In source/dev mode the local server is run through
|
|
152
162
|
# arcade_mcp_server's directory discovery, which registers every @tool and
|
|
153
163
|
# bypasses this gate — developers typically have a key set anyway.
|
|
154
164
|
app.add_tool(web_fetch_tool)
|
|
155
|
-
if
|
|
165
|
+
if search_available:
|
|
156
166
|
app.add_tool(web_search_tool)
|
|
157
167
|
|
|
158
168
|
# MCP resources: server instructions + memory sources for the active persona
|
|
159
|
-
register_resources(app,
|
|
169
|
+
register_resources(app, instructions)
|
|
160
170
|
|
|
161
171
|
return app
|
|
162
172
|
|
|
@@ -122,6 +122,8 @@ class AgentConfig(BaseModel):
|
|
|
122
122
|
temperature: float | None = None
|
|
123
123
|
# Overrides the model registry's context window (tokens) for this agent.
|
|
124
124
|
context_window: int | None = None
|
|
125
|
+
# Overrides the model registry's max response tokens for this agent.
|
|
126
|
+
max_output_tokens: int | None = None
|
|
125
127
|
|
|
126
128
|
# Personality
|
|
127
129
|
system_prompt: str | None = None
|
|
@@ -57,6 +57,9 @@ class GlobalConfig(BaseModel):
|
|
|
57
57
|
# Overrides the model registry's context window (tokens). Per-agent
|
|
58
58
|
# ``context_window`` in ``config/agents/<name>.toml`` takes precedence.
|
|
59
59
|
context_window: int | None = None
|
|
60
|
+
# Overrides the model registry's max response tokens. Per-agent
|
|
61
|
+
# ``max_output_tokens`` in ``config/agents/<name>.toml`` takes precedence.
|
|
62
|
+
max_output_tokens: int | None = None
|
|
60
63
|
debug_mode: bool = False
|
|
61
64
|
voice: VoiceConfig = Field(default_factory=VoiceConfig)
|
|
62
65
|
ui: UIConfig = Field(default_factory=UIConfig)
|
|
@@ -200,6 +203,11 @@ def build_runtime():
|
|
|
200
203
|
if active_agent.context_window is not None
|
|
201
204
|
else global_config.context_window
|
|
202
205
|
)
|
|
206
|
+
max_output_tokens = (
|
|
207
|
+
active_agent.max_output_tokens
|
|
208
|
+
if active_agent.max_output_tokens is not None
|
|
209
|
+
else global_config.max_output_tokens
|
|
210
|
+
)
|
|
203
211
|
runtime = RuntimeEnvironment(
|
|
204
212
|
paths=paths,
|
|
205
213
|
context_name=active_agent.id,
|
|
@@ -210,6 +218,7 @@ def build_runtime():
|
|
|
210
218
|
provider=provider,
|
|
211
219
|
temperature=temperature,
|
|
212
220
|
context_window=context_window,
|
|
221
|
+
max_output_tokens=max_output_tokens,
|
|
213
222
|
agent=active_agent,
|
|
214
223
|
)
|
|
215
224
|
runtime.ensure_dirs()
|
|
@@ -138,6 +138,26 @@ def max_output_tokens(model: str) -> int:
|
|
|
138
138
|
return _lookup(model, MODEL_MAX_OUTPUT, DEFAULT_MAX_OUTPUT)
|
|
139
139
|
|
|
140
140
|
|
|
141
|
+
def has_registered_max_output(model: str) -> bool:
|
|
142
|
+
"""Whether ``model`` has an explicit entry in the max-output-tokens table.
|
|
143
|
+
|
|
144
|
+
Distinguishes a real published limit from the generic ``DEFAULT_MAX_OUTPUT``
|
|
145
|
+
fallback, so callers can prefer a different default (e.g. the configured
|
|
146
|
+
context window) for models this registry doesn't recognize — a local or
|
|
147
|
+
custom OpenAI-compatible endpoint, for instance.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
model: Model identifier.
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
``True`` if an exact or prefix match exists in ``MODEL_MAX_OUTPUT``.
|
|
154
|
+
"""
|
|
155
|
+
normalized = _normalize(model)
|
|
156
|
+
if normalized in MODEL_MAX_OUTPUT:
|
|
157
|
+
return True
|
|
158
|
+
return any(normalized.startswith(_normalize(key)) for key in MODEL_MAX_OUTPUT)
|
|
159
|
+
|
|
160
|
+
|
|
141
161
|
def supports_temperature(model: str) -> bool:
|
|
142
162
|
"""Return whether ``model`` accepts a custom ``temperature``.
|
|
143
163
|
|
|
@@ -92,9 +92,18 @@ class GatewayClient:
|
|
|
92
92
|
"method": "initialize",
|
|
93
93
|
"params": {
|
|
94
94
|
"protocolVersion": _PROTOCOL,
|
|
95
|
-
"
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
# No "elicitation" capability: `ask()` below is a single
|
|
96
|
+
# blocking POST per turn, with no channel for the gateway
|
|
97
|
+
# to send a server-initiated elicitation/create request
|
|
98
|
+
# back mid-call. Declaring the capability anyway made the
|
|
99
|
+
# gateway's McpHostElicitationSink believe it could
|
|
100
|
+
# forward a question here, silently eating the full
|
|
101
|
+
# elicitation timeout (up to 295s) every time an inner
|
|
102
|
+
# tool tried to ask one, with nothing ever shown to the
|
|
103
|
+
# user. Omitting it makes the gateway decline instead
|
|
104
|
+
# of hanging, so the inner tool's in-band fallback (or
|
|
105
|
+
# a fast error) surfaces right away.
|
|
106
|
+
"capabilities": {},
|
|
98
107
|
"clientInfo": {"name": "cade-cli", "version": "attach"},
|
|
99
108
|
},
|
|
100
109
|
}
|
|
@@ -8,6 +8,7 @@ from typing import Any, Literal
|
|
|
8
8
|
from pydantic import BaseModel, Field
|
|
9
9
|
|
|
10
10
|
from cadecoder.ai.prompts import build_system_prompt
|
|
11
|
+
from cadecoder.core import model_specs
|
|
11
12
|
from cadecoder.core.constants import (
|
|
12
13
|
MAX_EXECUTION_ITERATIONS,
|
|
13
14
|
)
|
|
@@ -209,6 +210,17 @@ class Orchestrator:
|
|
|
209
210
|
context_window_override=runtime.context_window,
|
|
210
211
|
)
|
|
211
212
|
|
|
213
|
+
# Response-token cap sent to the provider. Explicit config wins; else
|
|
214
|
+
# prefer the model registry's published max output, falling back to
|
|
215
|
+
# this run's effective context window for models the registry doesn't
|
|
216
|
+
# recognize (a local/custom endpoint) rather than guessing a generic
|
|
217
|
+
# default that has nothing to do with that model's real capacity.
|
|
218
|
+
self.max_output_tokens = runtime.max_output_tokens or (
|
|
219
|
+
model_specs.max_output_tokens(self.default_model)
|
|
220
|
+
if model_specs.has_registered_max_output(self.default_model)
|
|
221
|
+
else self.context_manager.context_limit
|
|
222
|
+
)
|
|
223
|
+
|
|
212
224
|
# Tool result store — uses CADE_TOOL_RESULT_DIR env var (set by create_orchestrator)
|
|
213
225
|
self.tool_result_store = ToolResultStore()
|
|
214
226
|
self.context_manager.tool_result_store = self.tool_result_store
|
|
@@ -385,7 +397,7 @@ class Orchestrator:
|
|
|
385
397
|
model=self.default_model,
|
|
386
398
|
tools=tools if tools else None,
|
|
387
399
|
temperature=self.temperature,
|
|
388
|
-
max_tokens=
|
|
400
|
+
max_tokens=self.max_output_tokens,
|
|
389
401
|
tool_choice="auto",
|
|
390
402
|
system_prompt=None,
|
|
391
403
|
stream=True,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.claude-plugin/marketplace.json
RENAMED
|
File without changes
|
{cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.claude-plugin/plugin.json
RENAMED
|
File without changes
|
{cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.cursor-plugin/marketplace.json
RENAMED
|
File without changes
|
{cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.cursor-plugin/plugin.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|