cade-cli 0.20.3__tar.gz → 0.20.4__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.3 → cade_cli-0.20.4}/PKG-INFO +1 -1
  2. {cade_cli-0.20.3 → cade_cli-0.20.4}/pyproject.toml +1 -1
  3. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/app.py +5 -2
  4. cade_cli-0.20.4/src/cadecoder/daemon/gateway/principal.py +40 -0
  5. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/resources.py +6 -3
  6. {cade_cli-0.20.3 → cade_cli-0.20.4}/.gitignore +0 -0
  7. {cade_cli-0.20.3 → cade_cli-0.20.4}/LICENSE +0 -0
  8. {cade_cli-0.20.3 → cade_cli-0.20.4}/README.md +0 -0
  9. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/__init__.py +0 -0
  10. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/__main__.py +0 -0
  11. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/_metadata.py +0 -0
  12. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/config.py +0 -0
  13. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/errors.py +0 -0
  14. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/grants.py +0 -0
  15. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/resources.py +0 -0
  16. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/sandbox.py +0 -0
  17. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/server.py +0 -0
  18. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/__init__.py +0 -0
  19. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/_read_cache.py +0 -0
  20. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/access.py +0 -0
  21. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/agents.py +0 -0
  22. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/filesystem.py +0 -0
  23. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/git.py +0 -0
  24. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/notifications.py +0 -0
  25. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/questions.py +0 -0
  26. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/results.py +0 -0
  27. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/schemas.py +0 -0
  28. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/search.py +0 -0
  29. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/shell.py +0 -0
  30. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/tasks.py +0 -0
  31. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/web_fetch.py +0 -0
  32. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/tools/web_search.py +0 -0
  33. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/utils.py +0 -0
  34. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/__init__.py +0 -0
  35. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/arcade_client.py +0 -0
  36. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/cache.py +0 -0
  37. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/extract.py +0 -0
  38. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/markdown.py +0 -0
  39. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/preapproved.py +0 -0
  40. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/prompts.py +0 -0
  41. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/scrape.py +0 -0
  42. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/search/__init__.py +0 -0
  43. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/search/arcade.py +0 -0
  44. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/search/base.py +0 -0
  45. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cade_mcp_local/web/search/http.py +0 -0
  46. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/__init__.py +0 -0
  47. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ai/__init__.py +0 -0
  48. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ai/prompts.py +0 -0
  49. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/__init__.py +0 -0
  50. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/app.py +0 -0
  51. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/auth.py +0 -0
  52. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/__init__.py +0 -0
  53. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/account.py +0 -0
  54. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/agent_group.py +0 -0
  55. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/agents.py +0 -0
  56. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/auth.py +0 -0
  57. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/chat.py +0 -0
  58. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/cron.py +0 -0
  59. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/daemon.py +0 -0
  60. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/grant.py +0 -0
  61. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/hooks.py +0 -0
  62. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/mcp.py +0 -0
  63. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/mem.py +0 -0
  64. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/tasks.py +0 -0
  65. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/thread.py +0 -0
  66. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/commands/tools.py +0 -0
  67. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/mcp_hosts.py +0 -0
  68. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/onboarding.py +0 -0
  69. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/cli/ui.py +0 -0
  70. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/__init__.py +0 -0
  71. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/agent.py +0 -0
  72. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/binary.py +0 -0
  73. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/comms.py +0 -0
  74. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/config.py +0 -0
  75. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/constants.py +0 -0
  76. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/errors.py +0 -0
  77. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/frozen.py +0 -0
  78. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/git.py +0 -0
  79. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/inbox.py +0 -0
  80. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/logging.py +0 -0
  81. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/memory.py +0 -0
  82. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/model_specs.py +0 -0
  83. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/names.py +0 -0
  84. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/paths.py +0 -0
  85. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/runtime.py +0 -0
  86. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/secrets.py +0 -0
  87. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/spawn.py +0 -0
  88. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/text.py +0 -0
  89. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/core/types.py +0 -0
  90. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/__init__.py +0 -0
  91. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/__init__.py +0 -0
  92. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/base.py +0 -0
  93. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/factory.py +0 -0
  94. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/imessage.py +0 -0
  95. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/registry.py +0 -0
  96. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/stub.py +0 -0
  97. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/adapters/telegram.py +0 -0
  98. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/allowlist.py +0 -0
  99. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/attach.py +0 -0
  100. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/chunker.py +0 -0
  101. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/client.py +0 -0
  102. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/commands.py +0 -0
  103. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/config.py +0 -0
  104. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/control.py +0 -0
  105. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/cron.py +0 -0
  106. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/elicitation.py +0 -0
  107. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/ensure.py +0 -0
  108. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/format.py +0 -0
  109. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/__init__.py +0 -0
  110. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/auth.py +0 -0
  111. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/constants.py +0 -0
  112. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/elicitation.py +0 -0
  113. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/exposure.py +0 -0
  114. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/host_agent.py +0 -0
  115. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/limits.py +0 -0
  116. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/middleware.py +0 -0
  117. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/subscriptions.py +0 -0
  118. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/gateway/turn_bridge.py +0 -0
  119. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/grants.py +0 -0
  120. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/inbox.py +0 -0
  121. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/inbox_cron.py +0 -0
  122. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/install.py +0 -0
  123. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/lock.py +0 -0
  124. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/mesh.py +0 -0
  125. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/message_pump.py +0 -0
  126. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/observability.py +0 -0
  127. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/owner.py +0 -0
  128. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/progress_sink.py +0 -0
  129. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/registry.py +0 -0
  130. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/router.py +0 -0
  131. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/runner.py +0 -0
  132. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/runner_main.py +0 -0
  133. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/secrets.py +0 -0
  134. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/secrets_broker.py +0 -0
  135. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/server.py +0 -0
  136. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/services.py +0 -0
  137. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/sinks.py +0 -0
  138. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/supervisor.py +0 -0
  139. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/tokens.py +0 -0
  140. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/traffic.py +0 -0
  141. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/turns.py +0 -0
  142. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/daemon/wake.py +0 -0
  143. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/__init__.py +0 -0
  144. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/context_window.py +0 -0
  145. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/mcp_schema_index.py +0 -0
  146. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/orchestrator.py +0 -0
  147. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/parallel.py +0 -0
  148. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/tool_result_store.py +0 -0
  149. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/execution/tool_schema_cache.py +0 -0
  150. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/__init__.py +0 -0
  151. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/config.py +0 -0
  152. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/engine.py +0 -0
  153. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/executors/__init__.py +0 -0
  154. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/executors/callback.py +0 -0
  155. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/executors/command.py +0 -0
  156. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/executors/http.py +0 -0
  157. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/executors/prompt.py +0 -0
  158. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/executors/ssrf_guard.py +0 -0
  159. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/matchers.py +0 -0
  160. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/registry.py +0 -0
  161. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/hooks/types.py +0 -0
  162. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/__init__.py +0 -0
  163. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/.claude-plugin/marketplace.json +0 -0
  164. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/.claude-plugin/plugin.json +0 -0
  165. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/.cursor-plugin/marketplace.json +0 -0
  166. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/.cursor-plugin/plugin.json +0 -0
  167. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/agents/operator.md +0 -0
  168. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/commands/ask.md +0 -0
  169. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/commands/memory.md +0 -0
  170. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/commands/tasks.md +0 -0
  171. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/mcp.json +0 -0
  172. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/rules/gateway.mdc +0 -0
  173. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/skills/ask/SKILL.md +0 -0
  174. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/skills/memory/SKILL.md +0 -0
  175. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/assets/skills/tasks/SKILL.md +0 -0
  176. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/doctor.py +0 -0
  177. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/install.py +0 -0
  178. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/paths.py +0 -0
  179. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/host_plugin/state.py +0 -0
  180. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/providers/__init__.py +0 -0
  181. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/providers/anthropic.py +0 -0
  182. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/providers/base.py +0 -0
  183. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/providers/http_client.py +0 -0
  184. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/providers/ollama.py +0 -0
  185. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/providers/openai.py +0 -0
  186. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/storage/__init__.py +0 -0
  187. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/storage/threads.py +0 -0
  188. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tasks/__init__.py +0 -0
  189. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tasks/scheduler.py +0 -0
  190. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tasks/store.py +0 -0
  191. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tasks/types.py +0 -0
  192. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/telemetry/__init__.py +0 -0
  193. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/telemetry/otel.py +0 -0
  194. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/templates/login_failed.html +0 -0
  195. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/templates/login_success.html +0 -0
  196. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/templates/serve/launchd.plist.tmpl +0 -0
  197. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/templates/serve/serve.toml.example +0 -0
  198. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/templates/serve/systemd.service.tmpl +0 -0
  199. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/templates/styles.css +0 -0
  200. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/__init__.py +0 -0
  201. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/manager/__init__.py +0 -0
  202. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/manager/_request_ctx.py +0 -0
  203. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/manager/base.py +0 -0
  204. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/manager/composite.py +0 -0
  205. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/manager/config.py +0 -0
  206. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/manager/mcp.py +0 -0
  207. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/search/__init__.py +0 -0
  208. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/search/discovered.py +0 -0
  209. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/search/scoring.py +0 -0
  210. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/tools/search/service.py +0 -0
  211. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/__init__.py +0 -0
  212. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/completion.py +0 -0
  213. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/display.py +0 -0
  214. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/elicitation.py +0 -0
  215. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/input.py +0 -0
  216. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/session.py +0 -0
  217. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/ui/slash.py +0 -0
  218. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/voice/__init__.py +0 -0
  219. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/voice/audio.py +0 -0
  220. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/voice/cleanup.py +0 -0
  221. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/voice/session.py +0 -0
  222. {cade_cli-0.20.3 → cade_cli-0.20.4}/src/cadecoder/voice/stt.py +0 -0
  223. {cade_cli-0.20.3 → cade_cli-0.20.4}/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
3
+ Version: 0.20.4
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.3"
3
+ version = "0.20.4"
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"
@@ -24,6 +24,7 @@ from cadecoder.daemon.gateway.exposure import LOCAL_GROUPS, ExposurePolicy
24
24
  from cadecoder.daemon.gateway.host_agent import get_host_agent
25
25
  from cadecoder.daemon.gateway.limits import PrincipalLimits
26
26
  from cadecoder.daemon.gateway.middleware import ExposureMiddleware, HostAgentMiddleware
27
+ from cadecoder.daemon.gateway.principal import local_principal
27
28
  from cadecoder.daemon.gateway.resources import register_gateway_resources
28
29
  from cadecoder.daemon.gateway.turn_bridge import TurnBridge, TurnBridgeError
29
30
  from cadecoder.daemon.supervisor import Supervisor
@@ -56,9 +57,11 @@ def _principal_and_policy(context: Context) -> tuple[str, list[str], list[str]]:
56
57
  """
57
58
  owner = getattr(context, "_resource_owner", None)
58
59
  if owner is None:
59
- return "local", [], list(LOCAL_GROUPS)
60
+ return local_principal(context), [], list(LOCAL_GROUPS)
60
61
  claims = getattr(owner, "claims", {}) or {}
61
- principal = str(claims.get("cade_principal") or getattr(context, "user_id", "") or "local")
62
+ principal = str(
63
+ claims.get("cade_principal") or getattr(context, "user_id", "") or local_principal(context)
64
+ )
62
65
  agents = claims.get("cade_agents")
63
66
  expose = claims.get("cade_expose")
64
67
  return (
@@ -0,0 +1,40 @@
1
+ """Shared principal fallback for unauthenticated (loopback/local) MCP callers.
2
+
3
+ Used by both the ``Cade_Ask`` tool (``app.py``) and the ``threads://``
4
+ resource listing (``resources.py``) so a thread written under one is found
5
+ under the other.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import re
11
+
12
+ from arcade_mcp_server import Context
13
+
14
+
15
+ def client_app_name(context: Context | None) -> str | None:
16
+ """Best-effort slug of the connecting MCP client (e.g. ``claude``, ``cursor``).
17
+
18
+ Read from the ``clientInfo.name`` negotiated during MCP ``initialize``.
19
+ Returns ``None`` when unavailable, so the caller can fall back to a flat
20
+ ``"local"`` principal.
21
+ """
22
+ session = getattr(context, "_session", None)
23
+ params = getattr(session, "client_params", None)
24
+ client_info = getattr(params, "clientInfo", None)
25
+ name = getattr(client_info, "name", None)
26
+ if not name:
27
+ return None
28
+ slug = re.sub(r"[^a-z0-9]+", "-", name.strip().lower()).strip("-")
29
+ return slug or None
30
+
31
+
32
+ def local_principal(context: Context | None) -> str:
33
+ """Principal for an unauthenticated (loopback/local) caller.
34
+
35
+ Scoped per connecting app when its ``clientInfo.name`` is known, so e.g.
36
+ Claude Desktop and Cursor each keep their own default thread rather than
37
+ sharing one ``local:default`` conversation across every local MCP client.
38
+ """
39
+ app_name = client_app_name(context)
40
+ return f"local:{app_name}" if app_name else "local"
@@ -30,6 +30,7 @@ from cadecoder.daemon.gateway.constants import (
30
30
  THREADS_URI,
31
31
  )
32
32
  from cadecoder.daemon.gateway.host_agent import active_agent_name, get_host_agent
33
+ from cadecoder.daemon.gateway.principal import local_principal
33
34
  from cadecoder.storage.threads import BaseThreadHistory, get_thread_history
34
35
 
35
36
  if TYPE_CHECKING:
@@ -37,13 +38,15 @@ if TYPE_CHECKING:
37
38
 
38
39
 
39
40
  def _current_principal() -> str:
40
- """Principal name from the active model context; 'local' when unauthenticated."""
41
+ """Principal name from the active model context; scoped per local app when unauthenticated."""
41
42
  context = get_current_model_context()
42
43
  owner = getattr(context, "_resource_owner", None) if context else None
43
44
  if owner is None:
44
- return "local"
45
+ return local_principal(context)
45
46
  claims = getattr(owner, "claims", {}) or {}
46
- return str(claims.get("cade_principal") or getattr(owner, "user_id", "") or "local")
47
+ return str(
48
+ claims.get("cade_principal") or getattr(owner, "user_id", "") or local_principal(context)
49
+ )
47
50
 
48
51
 
49
52
  def _active_agent_name() -> str:
File without changes
File without changes
File without changes