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.
Files changed (223) hide show
  1. {cade_cli-0.20.4 → cade_cli-0.20.6}/PKG-INFO +1 -1
  2. {cade_cli-0.20.4 → cade_cli-0.20.6}/pyproject.toml +1 -1
  3. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/server.py +19 -9
  4. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/agent.py +2 -0
  5. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/config.py +9 -0
  6. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/model_specs.py +20 -0
  7. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/runtime.py +1 -0
  8. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/client.py +12 -3
  9. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/orchestrator.py +13 -1
  10. {cade_cli-0.20.4 → cade_cli-0.20.6}/.gitignore +0 -0
  11. {cade_cli-0.20.4 → cade_cli-0.20.6}/LICENSE +0 -0
  12. {cade_cli-0.20.4 → cade_cli-0.20.6}/README.md +0 -0
  13. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/__init__.py +0 -0
  14. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/__main__.py +0 -0
  15. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/_metadata.py +0 -0
  16. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/config.py +0 -0
  17. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/errors.py +0 -0
  18. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/grants.py +0 -0
  19. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/resources.py +0 -0
  20. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/sandbox.py +0 -0
  21. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/__init__.py +0 -0
  22. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/_read_cache.py +0 -0
  23. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/access.py +0 -0
  24. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/agents.py +0 -0
  25. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/filesystem.py +0 -0
  26. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/git.py +0 -0
  27. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/notifications.py +0 -0
  28. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/questions.py +0 -0
  29. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/results.py +0 -0
  30. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/schemas.py +0 -0
  31. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/search.py +0 -0
  32. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/shell.py +0 -0
  33. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/tasks.py +0 -0
  34. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/web_fetch.py +0 -0
  35. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/tools/web_search.py +0 -0
  36. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/utils.py +0 -0
  37. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/__init__.py +0 -0
  38. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/arcade_client.py +0 -0
  39. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/cache.py +0 -0
  40. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/extract.py +0 -0
  41. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/markdown.py +0 -0
  42. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/preapproved.py +0 -0
  43. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/prompts.py +0 -0
  44. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/scrape.py +0 -0
  45. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/__init__.py +0 -0
  46. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/arcade.py +0 -0
  47. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/base.py +0 -0
  48. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cade_mcp_local/web/search/http.py +0 -0
  49. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/__init__.py +0 -0
  50. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ai/__init__.py +0 -0
  51. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ai/prompts.py +0 -0
  52. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/__init__.py +0 -0
  53. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/app.py +0 -0
  54. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/auth.py +0 -0
  55. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/__init__.py +0 -0
  56. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/account.py +0 -0
  57. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/agent_group.py +0 -0
  58. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/agents.py +0 -0
  59. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/auth.py +0 -0
  60. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/chat.py +0 -0
  61. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/cron.py +0 -0
  62. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/daemon.py +0 -0
  63. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/grant.py +0 -0
  64. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/hooks.py +0 -0
  65. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/mcp.py +0 -0
  66. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/mem.py +0 -0
  67. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/tasks.py +0 -0
  68. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/thread.py +0 -0
  69. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/commands/tools.py +0 -0
  70. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/mcp_hosts.py +0 -0
  71. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/onboarding.py +0 -0
  72. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/cli/ui.py +0 -0
  73. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/__init__.py +0 -0
  74. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/binary.py +0 -0
  75. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/comms.py +0 -0
  76. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/constants.py +0 -0
  77. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/errors.py +0 -0
  78. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/frozen.py +0 -0
  79. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/git.py +0 -0
  80. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/inbox.py +0 -0
  81. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/logging.py +0 -0
  82. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/memory.py +0 -0
  83. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/names.py +0 -0
  84. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/paths.py +0 -0
  85. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/secrets.py +0 -0
  86. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/spawn.py +0 -0
  87. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/text.py +0 -0
  88. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/core/types.py +0 -0
  89. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/__init__.py +0 -0
  90. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/__init__.py +0 -0
  91. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/base.py +0 -0
  92. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/factory.py +0 -0
  93. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/imessage.py +0 -0
  94. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/registry.py +0 -0
  95. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/stub.py +0 -0
  96. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/adapters/telegram.py +0 -0
  97. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/allowlist.py +0 -0
  98. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/attach.py +0 -0
  99. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/chunker.py +0 -0
  100. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/commands.py +0 -0
  101. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/config.py +0 -0
  102. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/control.py +0 -0
  103. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/cron.py +0 -0
  104. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/elicitation.py +0 -0
  105. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/ensure.py +0 -0
  106. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/format.py +0 -0
  107. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/__init__.py +0 -0
  108. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/app.py +0 -0
  109. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/auth.py +0 -0
  110. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/constants.py +0 -0
  111. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/elicitation.py +0 -0
  112. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/exposure.py +0 -0
  113. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/host_agent.py +0 -0
  114. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/limits.py +0 -0
  115. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/middleware.py +0 -0
  116. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/principal.py +0 -0
  117. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/resources.py +0 -0
  118. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/subscriptions.py +0 -0
  119. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/gateway/turn_bridge.py +0 -0
  120. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/grants.py +0 -0
  121. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/inbox.py +0 -0
  122. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/inbox_cron.py +0 -0
  123. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/install.py +0 -0
  124. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/lock.py +0 -0
  125. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/mesh.py +0 -0
  126. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/message_pump.py +0 -0
  127. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/observability.py +0 -0
  128. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/owner.py +0 -0
  129. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/progress_sink.py +0 -0
  130. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/registry.py +0 -0
  131. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/router.py +0 -0
  132. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/runner.py +0 -0
  133. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/runner_main.py +0 -0
  134. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/secrets.py +0 -0
  135. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/secrets_broker.py +0 -0
  136. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/server.py +0 -0
  137. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/services.py +0 -0
  138. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/sinks.py +0 -0
  139. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/supervisor.py +0 -0
  140. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/tokens.py +0 -0
  141. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/traffic.py +0 -0
  142. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/turns.py +0 -0
  143. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/daemon/wake.py +0 -0
  144. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/__init__.py +0 -0
  145. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/context_window.py +0 -0
  146. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/mcp_schema_index.py +0 -0
  147. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/parallel.py +0 -0
  148. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/tool_result_store.py +0 -0
  149. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/execution/tool_schema_cache.py +0 -0
  150. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/__init__.py +0 -0
  151. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/config.py +0 -0
  152. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/engine.py +0 -0
  153. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/__init__.py +0 -0
  154. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/callback.py +0 -0
  155. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/command.py +0 -0
  156. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/http.py +0 -0
  157. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/prompt.py +0 -0
  158. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/executors/ssrf_guard.py +0 -0
  159. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/matchers.py +0 -0
  160. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/registry.py +0 -0
  161. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/hooks/types.py +0 -0
  162. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/__init__.py +0 -0
  163. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.claude-plugin/marketplace.json +0 -0
  164. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.claude-plugin/plugin.json +0 -0
  165. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.cursor-plugin/marketplace.json +0 -0
  166. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/.cursor-plugin/plugin.json +0 -0
  167. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/agents/operator.md +0 -0
  168. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/commands/ask.md +0 -0
  169. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/commands/memory.md +0 -0
  170. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/commands/tasks.md +0 -0
  171. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/mcp.json +0 -0
  172. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/rules/gateway.mdc +0 -0
  173. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/skills/ask/SKILL.md +0 -0
  174. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/skills/memory/SKILL.md +0 -0
  175. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/assets/skills/tasks/SKILL.md +0 -0
  176. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/doctor.py +0 -0
  177. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/install.py +0 -0
  178. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/paths.py +0 -0
  179. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/host_plugin/state.py +0 -0
  180. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/__init__.py +0 -0
  181. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/anthropic.py +0 -0
  182. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/base.py +0 -0
  183. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/http_client.py +0 -0
  184. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/ollama.py +0 -0
  185. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/providers/openai.py +0 -0
  186. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/storage/__init__.py +0 -0
  187. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/storage/threads.py +0 -0
  188. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/__init__.py +0 -0
  189. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/scheduler.py +0 -0
  190. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/store.py +0 -0
  191. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tasks/types.py +0 -0
  192. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/telemetry/__init__.py +0 -0
  193. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/telemetry/otel.py +0 -0
  194. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/login_failed.html +0 -0
  195. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/login_success.html +0 -0
  196. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/serve/launchd.plist.tmpl +0 -0
  197. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/serve/serve.toml.example +0 -0
  198. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/serve/systemd.service.tmpl +0 -0
  199. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/templates/styles.css +0 -0
  200. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/__init__.py +0 -0
  201. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/__init__.py +0 -0
  202. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/_request_ctx.py +0 -0
  203. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/base.py +0 -0
  204. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/composite.py +0 -0
  205. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/config.py +0 -0
  206. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/manager/mcp.py +0 -0
  207. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/__init__.py +0 -0
  208. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/discovered.py +0 -0
  209. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/scoring.py +0 -0
  210. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/tools/search/service.py +0 -0
  211. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/__init__.py +0 -0
  212. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/completion.py +0 -0
  213. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/display.py +0 -0
  214. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/elicitation.py +0 -0
  215. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/input.py +0 -0
  216. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/session.py +0 -0
  217. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/ui/slash.py +0 -0
  218. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/__init__.py +0 -0
  219. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/audio.py +0 -0
  220. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/cleanup.py +0 -0
  221. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/session.py +0 -0
  222. {cade_cli-0.20.4 → cade_cli-0.20.6}/src/cadecoder/voice/stt.py +0 -0
  223. {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.4
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cade-cli"
3
- version = "0.20.4"
3
+ version = "0.20.6"
4
4
  description = "Cade - The CLI Agent from Arcade.dev (install: curl -fsSL https://arcadeagent.dev/install | sh)"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -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=SERVER_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 only advertise it when one is configured; otherwise the model
146
- # would call it and hit a confusing "no search backend configured" error on
147
- # first use. With Arcade cloud tools connected, web search comes from the
148
- # Arcade catalogue (Arcade_SelectTools/UseTool) instead.
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 web_search_backend_configured():
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, SERVER_INSTRUCTIONS)
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
 
@@ -24,6 +24,7 @@ class RuntimeEnvironment:
24
24
  provider: str
25
25
  temperature: float | None = None
26
26
  context_window: int | None = None
27
+ max_output_tokens: int | None = None
27
28
  agent: object | None = None
28
29
 
29
30
  @property
@@ -92,9 +92,18 @@ class GatewayClient:
92
92
  "method": "initialize",
93
93
  "params": {
94
94
  "protocolVersion": _PROTOCOL,
95
- "capabilities": {
96
- "elicitation": {},
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=None,
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