code-context-control 2.131.0__tar.gz → 2.138.0__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 (552) hide show
  1. {code_context_control-2.131.0 → code_context_control-2.138.0}/PKG-INFO +1 -1
  2. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/c3.py +62 -2
  3. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/commands/parser.py +22 -0
  4. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/tools.html +38 -11
  5. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_access_guard.py +36 -0
  6. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/mcp_server.py +7 -4
  7. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/delegate.py +942 -145
  8. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/status.py +15 -0
  9. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/settings.js +1 -5
  10. {code_context_control-2.131.0 → code_context_control-2.138.0}/code_context_control.egg-info/PKG-INFO +1 -1
  11. {code_context_control-2.131.0 → code_context_control-2.138.0}/code_context_control.egg-info/SOURCES.txt +10 -0
  12. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/config.py +27 -1
  13. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/c3_bridge.py +6 -1
  14. {code_context_control-2.131.0 → code_context_control-2.138.0}/pyproject.toml +1 -1
  15. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/agents.py +12 -11
  16. code_context_control-2.138.0/services/bench/delegate_eval.py +606 -0
  17. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/claude_md.py +1 -1
  18. code_context_control-2.138.0/services/delegate_agents.py +108 -0
  19. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/telemetry.py +65 -0
  20. code_context_control-2.138.0/tests/test_delegate_adoption_d4.py +137 -0
  21. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_delegate_cascade.py +1 -1
  22. code_context_control-2.138.0/tests/test_delegate_claude_d1.py +359 -0
  23. code_context_control-2.138.0/tests/test_delegate_eval.py +234 -0
  24. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_delegate_grok.py +2 -1
  25. code_context_control-2.138.0/tests/test_delegate_host_d2.py +385 -0
  26. code_context_control-2.138.0/tests/test_delegate_scout_d3.py +231 -0
  27. code_context_control-2.138.0/tests/test_delegate_telemetry_d0.py +235 -0
  28. code_context_control-2.138.0/tests/test_delegate_thinking_cap.py +134 -0
  29. code_context_control-2.138.0/tests/test_delegate_tuning.py +123 -0
  30. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_no_stale_model_pins.py +5 -0
  31. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_chat_engine.py +2 -0
  32. {code_context_control-2.131.0 → code_context_control-2.138.0}/LICENSE +0 -0
  33. {code_context_control-2.131.0 → code_context_control-2.138.0}/README.md +0 -0
  34. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/__init__.py +0 -0
  35. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/_hook_utils.py +0 -0
  36. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/_shell_writes.py +0 -0
  37. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/commands/__init__.py +0 -0
  38. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/commands/common.py +0 -0
  39. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/docs.html +0 -0
  40. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/edits.html +0 -0
  41. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/access.html +0 -0
  42. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/bitbucket.html +0 -0
  43. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/credentials.html +0 -0
  44. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/getting-started.html +0 -0
  45. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/index.html +0 -0
  46. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/masking.html +0 -0
  47. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/oracle.html +0 -0
  48. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/shared.css +0 -0
  49. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/guide/workflow.html +0 -0
  50. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_artifact.py +0 -0
  51. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_auto_snapshot.py +0 -0
  52. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_c3_signal.py +0 -0
  53. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_c3read.py +0 -0
  54. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_codex_lifecycle.py +0 -0
  55. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_dispatch.py +0 -0
  56. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_edit_ledger.py +0 -0
  57. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_edit_unlock.py +0 -0
  58. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_filter.py +0 -0
  59. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_ghost_files.py +0 -0
  60. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_pretool_enforce.py +0 -0
  61. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_prompt_recall.py +0 -0
  62. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_read.py +0 -0
  63. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_session_end.py +0 -0
  64. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_session_open.py +0 -0
  65. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_session_stats.py +0 -0
  66. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hook_terse_advisor.py +0 -0
  67. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_server.py +0 -0
  68. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/app.js +0 -0
  69. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/add_project.js +0 -0
  70. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/config_editor.js +0 -0
  71. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
  72. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/drill_health.js +0 -0
  73. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/drill_panel.js +0 -0
  74. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
  75. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/drill_tasks.js +0 -0
  76. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/drill_views.js +0 -0
  77. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/global_search.js +0 -0
  78. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_access.js +0 -0
  79. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_ci.js +0 -0
  80. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_cred_audit.js +0 -0
  81. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_credentials.js +0 -0
  82. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
  83. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_locks.js +0 -0
  84. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/hub_tokens.js +0 -0
  85. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/mcp_manager.js +0 -0
  86. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/modals.js +0 -0
  87. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/project_card.js +0 -0
  88. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/project_tree.js +0 -0
  89. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/session_drawer.js +0 -0
  90. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/settings_modal.js +0 -0
  91. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/sidebar.js +0 -0
  92. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/summary_bar.js +0 -0
  93. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/task_board.js +0 -0
  94. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/toasts.js +0 -0
  95. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/components/topbar.js +0 -0
  96. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui/state.js +0 -0
  97. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/hub_ui.html +0 -0
  98. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/mcp_proxy.py +0 -0
  99. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/progress.py +0 -0
  100. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/server.py +0 -0
  101. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/__init__.py +0 -0
  102. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/_grants.py +0 -0
  103. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/_helpers.py +0 -0
  104. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/agent.py +0 -0
  105. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/artifacts.py +0 -0
  106. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/bitbucket.py +0 -0
  107. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/ci.py +0 -0
  108. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/compress.py +0 -0
  109. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/credentials.py +0 -0
  110. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/edit.py +0 -0
  111. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/edit_verify.py +0 -0
  112. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/edits.py +0 -0
  113. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/federate.py +0 -0
  114. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/filter.py +0 -0
  115. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/impact.py +0 -0
  116. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/jira.py +0 -0
  117. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/locks.py +0 -0
  118. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/memory.py +0 -0
  119. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/override.py +0 -0
  120. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/project.py +0 -0
  121. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/read.py +0 -0
  122. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/search.py +0 -0
  123. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/session.py +0 -0
  124. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/shell.py +0 -0
  125. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/shell_job.py +0 -0
  126. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/shell_nudge.py +0 -0
  127. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/shell_parsers.py +0 -0
  128. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/shell_render.py +0 -0
  129. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/tasks.py +0 -0
  130. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/tools/validate.py +0 -0
  131. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/api.js +0 -0
  132. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/app.js +0 -0
  133. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/access.js +0 -0
  134. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/bitbucket.js +0 -0
  135. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/chat.js +0 -0
  136. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/credentials.js +0 -0
  137. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/dashboard.js +0 -0
  138. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/edits.js +0 -0
  139. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/enforcement.js +0 -0
  140. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/instructions.js +0 -0
  141. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/jira.js +0 -0
  142. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/memory.js +0 -0
  143. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/sessions.js +0 -0
  144. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/sidebar.js +0 -0
  145. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/components/tasks.js +0 -0
  146. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/icons.js +0 -0
  147. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/pm_shared.js +0 -0
  148. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/shared.js +0 -0
  149. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui/theme.js +0 -0
  150. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui.html +0 -0
  151. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui_legacy.html +0 -0
  152. {code_context_control-2.131.0 → code_context_control-2.138.0}/cli/ui_nano.html +0 -0
  153. {code_context_control-2.131.0 → code_context_control-2.138.0}/code_context_control.egg-info/dependency_links.txt +0 -0
  154. {code_context_control-2.131.0 → code_context_control-2.138.0}/code_context_control.egg-info/entry_points.txt +0 -0
  155. {code_context_control-2.131.0 → code_context_control-2.138.0}/code_context_control.egg-info/requires.txt +0 -0
  156. {code_context_control-2.131.0 → code_context_control-2.138.0}/code_context_control.egg-info/top_level.txt +0 -0
  157. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/__init__.py +0 -0
  158. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/codex_patch.py +0 -0
  159. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/grok_payload.py +0 -0
  160. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/hook_command.py +0 -0
  161. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/host.py +0 -0
  162. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/ide.py +0 -0
  163. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/mcp_toml.py +0 -0
  164. {code_context_control-2.131.0 → code_context_control-2.138.0}/core/web_security.py +0 -0
  165. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/__init__.py +0 -0
  166. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/config.py +0 -0
  167. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/listeners.py +0 -0
  168. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/mcp_oracle.py +0 -0
  169. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/oracle_server.py +0 -0
  170. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/oracle_ui.html +0 -0
  171. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/__init__.py +0 -0
  172. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/activity_reporter.py +0 -0
  173. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/api_auth.py +0 -0
  174. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/chat_engine.py +0 -0
  175. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/chat_poll.py +0 -0
  176. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/chat_store.py +0 -0
  177. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/client_tokens.py +0 -0
  178. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/cross_memory.py +0 -0
  179. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/discovery_audit.py +0 -0
  180. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/federated_graph.py +0 -0
  181. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/health_checker.py +0 -0
  182. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/insight_engine.py +0 -0
  183. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/local_session.py +0 -0
  184. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/memory_reader.py +0 -0
  185. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/memory_writer.py +0 -0
  186. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/mobile_api.py +0 -0
  187. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/project_scanner.py +0 -0
  188. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/review_agent.py +0 -0
  189. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/tool_executor.py +0 -0
  190. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/services/tool_registry.py +0 -0
  191. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/activity.js +0 -0
  192. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/agents.js +0 -0
  193. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/app.js +0 -0
  194. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/busy.js +0 -0
  195. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/chat/conversations.js +0 -0
  196. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/chat/input.js +0 -0
  197. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/chat/markdown.js +0 -0
  198. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/chat/send.js +0 -0
  199. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/chat/stream_renderer.js +0 -0
  200. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/chat/toolbar.js +0 -0
  201. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/core.js +0 -0
  202. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/crossgraph.js +0 -0
  203. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/header.js +0 -0
  204. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/insights.js +0 -0
  205. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/projects.js +0 -0
  206. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/qrcode.js +0 -0
  207. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/settings.js +0 -0
  208. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/suggestions.js +0 -0
  209. {code_context_control-2.131.0 → code_context_control-2.138.0}/oracle/ui/theme_tabs.js +0 -0
  210. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/__init__.py +0 -0
  211. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/access_guard.py +0 -0
  212. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/access_telemetry.py +0 -0
  213. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/activity_log.py +0 -0
  214. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/agent_base.py +0 -0
  215. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/agent_locks.py +0 -0
  216. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/agents_workflow.py +0 -0
  217. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/artifact_defs.py +0 -0
  218. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/artifact_store.py +0 -0
  219. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/atomic_json.py +0 -0
  220. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/auto_memory.py +0 -0
  221. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/background_service.py +0 -0
  222. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/__init__.py +0 -0
  223. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/external/__init__.py +0 -0
  224. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/external/aider_polyglot.py +0 -0
  225. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/external/swe_bench.py +0 -0
  226. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/map_eval.py +0 -0
  227. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/search_eval.py +0 -0
  228. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bench/shell_eval.py +0 -0
  229. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/benchmark_dashboard.py +0 -0
  230. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bitbucket_client.py +0 -0
  231. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/bitbucket_credentials.py +0 -0
  232. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_act.py +0 -0
  233. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_cache.py +0 -0
  234. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_expr.py +0 -0
  235. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_failures.py +0 -0
  236. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_github.py +0 -0
  237. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_impact.py +0 -0
  238. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_intel.py +0 -0
  239. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_runner.py +0 -0
  240. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ci_workflow.py +0 -0
  241. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/circuit_breaker.py +0 -0
  242. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/codex_integration.py +0 -0
  243. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/codex_transcript.py +0 -0
  244. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/compressor.py +0 -0
  245. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/context_snapshot.py +0 -0
  246. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/conversation_store.py +0 -0
  247. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/cred_audit.py +0 -0
  248. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/cred_telemetry.py +0 -0
  249. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/credential_store.py +0 -0
  250. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/dir_map.py +0 -0
  251. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/doc_index.py +0 -0
  252. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/e2e_benchmark.py +0 -0
  253. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/e2e_evaluator.py +0 -0
  254. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/e2e_tasks.py +0 -0
  255. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/edit_ledger.py +0 -0
  256. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/embedding_index.py +0 -0
  257. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/enforcement_policy.py +0 -0
  258. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/error_reporting.py +0 -0
  259. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/file_map.py +0 -0
  260. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/file_memory.py +0 -0
  261. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/git_context.py +0 -0
  262. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/grok_integration.py +0 -0
  263. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/grok_transcript.py +0 -0
  264. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/host_sessions.py +0 -0
  265. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/hub_service.py +0 -0
  266. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/index_store.py +0 -0
  267. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/indexer.py +0 -0
  268. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/jira_client.py +0 -0
  269. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/jira_cloud.py +0 -0
  270. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/jira_credentials.py +0 -0
  271. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/jira_data_center.py +0 -0
  272. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/jira_links.py +0 -0
  273. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/lexical_index.py +0 -0
  274. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/mask_activation.py +0 -0
  275. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/mask_mirror.py +0 -0
  276. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/mask_presets.py +0 -0
  277. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory.py +0 -0
  278. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory_consolidator.py +0 -0
  279. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory_distiller.py +0 -0
  280. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory_graph.py +0 -0
  281. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory_grounder.py +0 -0
  282. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory_queue.py +0 -0
  283. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/memory_scorer.py +0 -0
  284. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/metrics.py +0 -0
  285. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/notifications.py +0 -0
  286. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ollama_bridge.py +0 -0
  287. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ollama_client.py +0 -0
  288. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/ollama_credentials.py +0 -0
  289. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/oracle_service.py +0 -0
  290. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/output_filter.py +0 -0
  291. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/override_costs.py +0 -0
  292. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/override_grants.py +0 -0
  293. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/override_policy.py +0 -0
  294. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/override_requests.py +0 -0
  295. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/override_wake.py +0 -0
  296. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/parser.py +0 -0
  297. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/project_manager.py +0 -0
  298. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/project_runtime.py +0 -0
  299. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/protocol.py +0 -0
  300. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/proxy_state.py +0 -0
  301. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/repo_map.py +0 -0
  302. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/repo_shape.py +0 -0
  303. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/reranker.py +0 -0
  304. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/retention.py +0 -0
  305. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/retrieval.py +0 -0
  306. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/retrieval_broker.py +0 -0
  307. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/router.py +0 -0
  308. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/runtime.py +0 -0
  309. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/scanner.py +0 -0
  310. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/session_benchmark.py +0 -0
  311. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/session_live.py +0 -0
  312. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/session_manager.py +0 -0
  313. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/session_preloader.py +0 -0
  314. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/shell_jobs.py +0 -0
  315. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/shell_output.py +0 -0
  316. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/subprojects.py +0 -0
  317. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/task_store.py +0 -0
  318. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/text_index.py +0 -0
  319. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/time_tracker.py +0 -0
  320. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/tool_classifier.py +0 -0
  321. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/transcript_index.py +0 -0
  322. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/validation_cache.py +0 -0
  323. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/vector_store.py +0 -0
  324. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/watcher.py +0 -0
  325. {code_context_control-2.131.0 → code_context_control-2.138.0}/services/win_subprocess.py +0 -0
  326. {code_context_control-2.131.0 → code_context_control-2.138.0}/setup.cfg +0 -0
  327. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_access_builtin_optout.py +0 -0
  328. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_access_guard.py +0 -0
  329. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_access_guard_meta.py +0 -0
  330. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_access_guard_shell_project.py +0 -0
  331. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_access_guard_surfaces.py +0 -0
  332. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_access_guard_wiring.py +0 -0
  333. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_activity_log_find_last.py +0 -0
  334. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_activity_reporter.py +0 -0
  335. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_agent_locks.py +0 -0
  336. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_aider_polyglot.py +0 -0
  337. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_antigravity_transition.py +0 -0
  338. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_artifact_store.py +0 -0
  339. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_artifact_tool.py +0 -0
  340. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_atomic_json.py +0 -0
  341. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_background_service.py +0 -0
  342. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_bitbucket_cli_smoke.py +0 -0
  343. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_bitbucket_client.py +0 -0
  344. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_bitbucket_config_fallback.py +0 -0
  345. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_bitbucket_credentials.py +0 -0
  346. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_bitbucket_tool.py +0 -0
  347. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_builtin_modes.py +0 -0
  348. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
  349. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_c3_shell.py +0 -0
  350. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_chat_poll.py +0 -0
  351. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_act.py +0 -0
  352. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_cache.py +0 -0
  353. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_dag_ownership.py +0 -0
  354. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_expr.py +0 -0
  355. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_impact.py +0 -0
  356. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_intel.py +0 -0
  357. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_runner.py +0 -0
  358. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ci_workflow.py +0 -0
  359. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_circuit_breaker.py +0 -0
  360. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_claude_md_merge.py +0 -0
  361. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_claude_md_updater.py +0 -0
  362. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_cli_smoke.py +0 -0
  363. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_codex_mcp_transport.py +0 -0
  364. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_codex_native.py +0 -0
  365. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_compressor_large_file.py +0 -0
  366. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_confirm_guard.py +0 -0
  367. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_confirm_guard_wiring.py +0 -0
  368. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_cooccurrence_bounds.py +0 -0
  369. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_cred_audit.py +0 -0
  370. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_cred_telemetry.py +0 -0
  371. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_credential_login_kind.py +0 -0
  372. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_credential_store.py +0 -0
  373. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_credential_ui_parity.py +0 -0
  374. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_credentials_routes.py +0 -0
  375. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_credentials_tool.py +0 -0
  376. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_creds_cli_smoke.py +0 -0
  377. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_delegate_version_probe.py +0 -0
  378. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_dir_map_c3.py +0 -0
  379. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_e2e_benchmark.py +0 -0
  380. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_edit_ledger_deadline.py +0 -0
  381. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_edit_ledger_hook.py +0 -0
  382. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_edit_locking.py +0 -0
  383. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_edit_normalization.py +0 -0
  384. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_edit_verify.py +0 -0
  385. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_embedding_index_deadlock.py +0 -0
  386. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_enforcement_flip.py +0 -0
  387. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_enforcement_policy.py +0 -0
  388. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_enforcement_routes.py +0 -0
  389. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_env_parser.py +0 -0
  390. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_failed_calls_do_not_unlock.py +0 -0
  391. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_federated_graph.py +0 -0
  392. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_file_map_c1.py +0 -0
  393. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_filter_backoff.py +0 -0
  394. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ghost_files.py +0 -0
  395. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ghost_generation.py +0 -0
  396. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_git_branch_awareness.py +0 -0
  397. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_grok_native.py +0 -0
  398. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_access_guard.py +0 -0
  399. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_codex_compat.py +0 -0
  400. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_dispatch.py +0 -0
  401. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_grok_compat.py +0 -0
  402. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_pretool_enforce.py +0 -0
  403. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_prompt_recall.py +0 -0
  404. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_session_end.py +0 -0
  405. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_smoke.py +0 -0
  406. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_state.py +0 -0
  407. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hook_utf8_stdio.py +0 -0
  408. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_credentials_route.py +0 -0
  409. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_credentials_routes_write.py +0 -0
  410. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_enforcement_routes.py +0 -0
  411. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_hook_migration.py +0 -0
  412. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_inspect_api.py +0 -0
  413. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_locks_routes.py +0 -0
  414. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_oracle_service_routes.py +0 -0
  415. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_override_policy_routes.py +0 -0
  416. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_override_routes.py +0 -0
  417. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_server_smoke.py +0 -0
  418. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_hub_subproject_links.py +0 -0
  419. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ide_workflow_adaptation.py +0 -0
  420. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_index_cap_not_hardcoded.py +0 -0
  421. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_init_clear_preserves_user_content.py +0 -0
  422. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_init_scan.py +0 -0
  423. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_install_mcp_entrypoint.py +0 -0
  424. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_cli_smoke.py +0 -0
  425. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_client.py +0 -0
  426. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_config_fallback.py +0 -0
  427. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_credentials.py +0 -0
  428. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_links.py +0 -0
  429. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_routes.py +0 -0
  430. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_jira_tool.py +0 -0
  431. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_large_files_c4.py +0 -0
  432. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_lazy_store_init.py +0 -0
  433. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_map_eval.py +0 -0
  434. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_map_telemetry_c0.py +0 -0
  435. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mask_guard.py +0 -0
  436. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mask_routes.py +0 -0
  437. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mask_surfaces.py +0 -0
  438. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mcp_host_guard.py +0 -0
  439. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mcp_memory_timeout.py +0 -0
  440. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mcp_server_smoke.py +0 -0
  441. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mcp_toml.py +0 -0
  442. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_memory_distiller.py +0 -0
  443. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_memory_graph_api.py +0 -0
  444. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_memory_queue.py +0 -0
  445. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_memory_system.py +0 -0
  446. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_api.py +0 -0
  447. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_clients.py +0 -0
  448. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_extras.py +0 -0
  449. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_jobs_ci.py +0 -0
  450. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_override_costs.py +0 -0
  451. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_override_routes.py +0 -0
  452. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_mobile_security_api.py +0 -0
  453. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_notification_dedup.py +0 -0
  454. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_notification_discipline.py +0 -0
  455. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_notification_kinds.py +0 -0
  456. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ollama_credentials.py +0 -0
  457. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_api_auth.py +0 -0
  458. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_apikey_api.py +0 -0
  459. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_c3_bridge.py +0 -0
  460. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_chat_store.py +0 -0
  461. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_discovery_api.py +0 -0
  462. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_discovery_audit.py +0 -0
  463. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_health_probe.py +0 -0
  464. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_local_auth.py +0 -0
  465. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_loopback.py +0 -0
  466. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_ollama_bridge.py +0 -0
  467. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_scanner_cache.py +0 -0
  468. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_security_fixes.py +0 -0
  469. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_session_bootstrap.py +0 -0
  470. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_subproject_awareness.py +0 -0
  471. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_oracle_ui_bundle.py +0 -0
  472. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_output_filter.py +0 -0
  473. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_override_costs.py +0 -0
  474. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_override_grants.py +0 -0
  475. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_override_grants_mcp.py +0 -0
  476. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_override_requests.py +0 -0
  477. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_override_wake.py +0 -0
  478. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_permissions.py +0 -0
  479. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_pm_api.py +0 -0
  480. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_project_manager.py +0 -0
  481. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_project_manager_merge.py +0 -0
  482. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_project_tool.py +0 -0
  483. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_read_coercion.py +0 -0
  484. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_read_edit_parity.py +0 -0
  485. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_read_outside_root.py +0 -0
  486. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_related_facts.py +0 -0
  487. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_repo_map.py +0 -0
  488. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_repo_shape.py +0 -0
  489. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_response_boilerplate.py +0 -0
  490. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_retention.py +0 -0
  491. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_review_digest.py +0 -0
  492. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_eval.py +0 -0
  493. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_p1.py +0 -0
  494. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_p2.py +0 -0
  495. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_p2b.py +0 -0
  496. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_p3.py +0 -0
  497. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_p4.py +0 -0
  498. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_search_p5.py +0 -0
  499. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_service_durability.py +0 -0
  500. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_session_benchmark.py +0 -0
  501. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_session_budget.py +0 -0
  502. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_session_live.py +0 -0
  503. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_budget_s1.py +0 -0
  504. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_creds.py +0 -0
  505. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_eval.py +0 -0
  506. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_jobs_s3.py +0 -0
  507. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_nudge_s4.py +0 -0
  508. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_output.py +0 -0
  509. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_parsers_s2.py +0 -0
  510. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_robustness.py +0 -0
  511. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_telemetry_s0.py +0 -0
  512. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_write_ledger.py +0 -0
  513. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_shell_writes.py +0 -0
  514. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_subproject_clear_scope.py +0 -0
  515. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_subproject_depth_consumers.py +0 -0
  516. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_subproject_exclusion.py +0 -0
  517. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_subproject_federation.py +0 -0
  518. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_subproject_linkage_api.py +0 -0
  519. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_subprojects.py +0 -0
  520. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_swe_bench.py +0 -0
  521. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_task_store.py +0 -0
  522. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_task_tool.py +0 -0
  523. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_time_tracker.py +0 -0
  524. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_token_telemetry.py +0 -0
  525. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_token_tracking.py +0 -0
  526. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_tool_registry.py +0 -0
  527. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_ui_jsx_syntax.py +0 -0
  528. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_upgrade_and_version.py +0 -0
  529. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_validate.py +0 -0
  530. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_vault_write_guard.py +0 -0
  531. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_version_sync.py +0 -0
  532. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_watcher_pruning.py +0 -0
  533. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_web_security.py +0 -0
  534. {code_context_control-2.131.0 → code_context_control-2.138.0}/tests/test_windows_reliability.py +0 -0
  535. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/__init__.py +0 -0
  536. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/backend.py +0 -0
  537. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/main.py +0 -0
  538. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/__init__.py +0 -0
  539. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/benchmark_view.py +0 -0
  540. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/claudemd_view.py +0 -0
  541. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/compress_view.py +0 -0
  542. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/index_view.py +0 -0
  543. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/init_view.py +0 -0
  544. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/mcp_view.py +0 -0
  545. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/optimize_view.py +0 -0
  546. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/pipe_view.py +0 -0
  547. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/projects_view.py +0 -0
  548. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/search_view.py +0 -0
  549. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/session_view.py +0 -0
  550. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/stats.py +0 -0
  551. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/screens/ui_view.py +0 -0
  552. {code_context_control-2.131.0 → code_context_control-2.138.0}/tui/theme.tcss +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-control
3
- Version: 2.131.0
3
+ Version: 2.138.0
4
4
  Summary: Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub.
5
5
  Author-email: Dimitri Tselenchuk <dtselenc@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -91,7 +91,7 @@ console = Console() if HAS_RICH else None
91
91
  # Config
92
92
  CONFIG_DIR = ".c3"
93
93
  CONFIG_FILE = ".c3/config.json"
94
- __version__ = "2.131.0"
94
+ __version__ = "2.138.0"
95
95
 
96
96
 
97
97
  def _compress_file_cli(compressor, path, mode="smart", **kw):
@@ -1571,6 +1571,51 @@ def cmd_shell_eval(args):
1571
1571
  sys.exit(1)
1572
1572
 
1573
1573
 
1574
+ def cmd_delegate_eval(args):
1575
+ """Grade c3_delegate answers per target and name the cheapest passing tier.
1576
+
1577
+ Live by default (every case goes to the real backend and costs what that
1578
+ backend costs); --replay grades a recorded run instead. Exit status 1 when
1579
+ a --floor is given and a target's core pass rate falls under it. See
1580
+ docs/delegate-eval.md.
1581
+ """
1582
+ from services.bench import delegate_eval as de
1583
+
1584
+ targets = [t.strip() for t in (args.targets or "").split(",") if t.strip()]
1585
+ case_ids = [c.strip() for c in (args.cases or "").split(",") if c.strip()]
1586
+ overrides = json.loads(args.config) if getattr(args, "config", None) else None
1587
+ if overrides is not None and not isinstance(overrides, dict):
1588
+ raise RuntimeError("--config must be a JSON object")
1589
+
1590
+ def progress(res):
1591
+ if not args.json:
1592
+ cost = "" if res.cost_usd is None else f" ${res.cost_usd:.4f}"
1593
+ print(f" {res.target:<16} {res.id:<28} {res.status}{cost} "
1594
+ f"{res.wall_ms / 1000:.1f}s", flush=True)
1595
+
1596
+ try:
1597
+ report = de.run_suite(
1598
+ args.suite, targets=targets or None, replay=args.replay, record=args.record,
1599
+ case_ids=case_ids or None, floor=args.floor if args.floor is not None else de.DEFAULT_FLOOR,
1600
+ allow_write_delegation=args.allow_write_delegation, delegate_overrides=overrides,
1601
+ progress=progress)
1602
+ except (FileNotFoundError, ValueError) as e:
1603
+ raise RuntimeError(str(e))
1604
+
1605
+ if args.json:
1606
+ print(json.dumps(report.to_dict(), indent=2))
1607
+ else:
1608
+ print(report.render())
1609
+ if args.record and report.mode == "live":
1610
+ print(f"recorded: {args.record}")
1611
+ if args.floor is not None:
1612
+ under = [t for t, a in report.aggregates.items()
1613
+ if a["pass_rate_core"] is None or a["pass_rate_core"] < args.floor]
1614
+ if under:
1615
+ print(f"under floor {args.floor}: {', '.join(under)}", file=sys.stderr)
1616
+ sys.exit(1)
1617
+
1618
+
1574
1619
  def cmd_map_eval(args):
1575
1620
  """Run the file-map gold suite and compare it to its baseline.
1576
1621
 
@@ -5020,7 +5065,7 @@ back to native tools as the task progresses.
5020
5065
  - **Filter**: `c3_filter(text=...)` — for terminal output >10 lines
5021
5066
  - **Shell**: `c3_shell(cmd, timeout=60)` — structured shell exec (tests/git/build). Auto-filters output, logs git mutations to the ledger. Native Bash for interactive/TTY only
5022
5067
  - **Memory**: `c3_memory(action='recall')` — full recall. `index` + `fetch` for token-efficient two-step retrieval
5023
- - **Delegate**: `c3_delegate(task, backend='ollama|codex|gemini|claude|grok|auto')` — offload to other models
5068
+ - **Delegate**: `c3_delegate(task, task_type, context|file_path)` — your own provider one tier down (default `backend='host'`, `tier='small'`; Claude Code: Haiku) for bounded answers: summarize a diff/log, explain a function, triage a traceback. `scout=true` lets it look files up itself. Multi-step work: the `c3-scout` (haiku) / `c3-worker` (sonnet) subagents
5024
5069
  - **Local CI** (v2.79.0+): `c3_ci(action='inspect|run|rerun|failures')` — run THIS repo's real `.github/workflows` here instead of pushing for feedback. `run` executes in `needs` order; `failures` gives {file,line,message}; `rerun` retries only what failed. Only `FULL_CI_PASS` means safe to push — `PARTIAL_PASS` means something did not run (other OS, unsupported action, or your selection).
5025
5070
  - **Bitbucket** (v2.30.0+, when `c3 bitbucket login` has run): `c3_bitbucket(action='list_prs|get_pr|merge_pr|...')` — self-hosted Bitbucket Data Center / Server. Token in OS keyring; mutating actions auto-log to the edit ledger.
5026
5071
  - **Cross-project** (v2.31.0+): `c3_project(action='list|scan|search|read|edit|...', project='<name|path>')` — discover and operate on OTHER c3-installed projects. Reads run freely; writes (edit/shell/memory) need `allow_write=true`.
@@ -5878,6 +5923,20 @@ def cmd_install_mcp(args):
5878
5923
  except Exception as e:
5879
5924
  print(f"Warning: Could not install /terse skill: {e}")
5880
5925
 
5926
+ # ── Downshift subagents (c3-scout on haiku, c3-worker on sonnet) ──
5927
+ if profile.name == "claude-code" and not getattr(args, "no_agents", False):
5928
+ try:
5929
+ from services.delegate_agents import install_delegate_agents
5930
+ for path, action in install_delegate_agents(target):
5931
+ if action == "skipped":
5932
+ print(f"Kept {path} (no C3 marker: yours, left untouched)")
5933
+ elif action == "kept":
5934
+ print(f"Kept {path} (subagent up to date)")
5935
+ else:
5936
+ print(f"{action.capitalize()} {path} (subagent)")
5937
+ except Exception as e:
5938
+ print(f"Warning: Could not install c3-scout/c3-worker subagents: {e}")
5939
+
5881
5940
  print(f"IDE: {profile.display_name}")
5882
5941
  print(f"MCP Mode: {mcp_mode}")
5883
5942
  print(f"Server: {server_script}")
@@ -9380,6 +9439,7 @@ def main():
9380
9439
  "search-eval": cmd_search_eval,
9381
9440
  "shell-eval": cmd_shell_eval,
9382
9441
  "map-eval": cmd_map_eval,
9442
+ "delegate-eval": cmd_delegate_eval,
9383
9443
  "benchmark": cmd_benchmark,
9384
9444
  "session-benchmark": cmd_session_benchmark,
9385
9445
  "benchmark-e2e": cmd_benchmark_e2e,
@@ -89,6 +89,26 @@ def build_parser(version: str, parse_cli_ide_arg):
89
89
  help='With --update-baseline: JSON object of metric ceilings, e.g. \'{"tokens_p95": 4000}\'')
90
90
  p_map_eval.add_argument("--json", action="store_true", help="Emit the full report as JSON")
91
91
 
92
+ p_delegate_eval = subparsers.add_parser(
93
+ "delegate-eval", help="Grade c3_delegate answers per backend/tier (docs/delegate-eval.md)")
94
+ p_delegate_eval.add_argument("--suite", default="gold",
95
+ help="'gold' (bundled) or a .jsonl path")
96
+ p_delegate_eval.add_argument("--targets", default="",
97
+ help="Comma-separated backend[:tier] list, e.g. 'claude:small,claude:medium'")
98
+ p_delegate_eval.add_argument("--cases", default="", help="Comma-separated case ids (default: all)")
99
+ p_delegate_eval.add_argument("--replay", default=None,
100
+ help="Grade a recorded run instead of calling backends")
101
+ p_delegate_eval.add_argument("--record", default=None, help="Write the live answers to this JSON file")
102
+ p_delegate_eval.add_argument("--floor", type=float, default=None,
103
+ help="Core pass-rate floor; exit 1 when a target falls under it")
104
+ p_delegate_eval.add_argument("--allow-write-delegation", action="store_true",
105
+ help="Pass allow_write_delegation=true (needed for write-capable backends "
106
+ "when Access Guard rules exist)")
107
+ p_delegate_eval.add_argument("--config", default=None,
108
+ help='JSON object merged over the delegate config for this run, '
109
+ 'e.g. \'{"allow_model_fallback": false}\'')
110
+ p_delegate_eval.add_argument("--json", action="store_true", help="Emit the full report as JSON")
111
+
92
112
  p_compress = subparsers.add_parser("compress", help="Compress a file")
93
113
  p_compress.add_argument("file", help="File to compress")
94
114
  p_compress.add_argument("--mode", choices=["map", "smart", "structure", "outline"], default="map",
@@ -158,6 +178,7 @@ def build_parser(version: str, parse_cli_ide_arg):
158
178
  p_install_mcp.add_argument("--global-fallback", action="store_true", help="Also install the machine-wide Codex fallback")
159
179
  p_install_mcp.add_argument("--permissions", choices=["read-only", "c3-strict", "standard", "permissive"], default=None, help="Apply Claude Code permission tier (Claude Code only)")
160
180
  p_install_mcp.add_argument("--include-mcp-wildcard", action="store_true", help="Add mcp__* wildcard so non-C3 MCP servers don't prompt per-call")
181
+ p_install_mcp.add_argument("--no-agents", action="store_true", help="Do not write the c3-scout/c3-worker subagents to .claude/agents (Claude Code only)")
161
182
 
162
183
  p_mcp_install = subparsers.add_parser("mcp-install", help="Alias for install-mcp")
163
184
  p_mcp_install.add_argument("targets", nargs="*", help="Optional project path and/or IDE shorthand")
@@ -166,6 +187,7 @@ def build_parser(version: str, parse_cli_ide_arg):
166
187
  p_mcp_install.add_argument("--global-fallback", action="store_true", help="Also install the machine-wide Codex fallback")
167
188
  p_mcp_install.add_argument("--permissions", choices=["read-only", "c3-strict", "standard", "permissive"], default=None, help="Apply Claude Code permission tier (Claude Code only)")
168
189
  p_mcp_install.add_argument("--include-mcp-wildcard", action="store_true", help="Add mcp__* wildcard so non-C3 MCP servers don't prompt per-call")
190
+ p_mcp_install.add_argument("--no-agents", action="store_true", help="Do not write the c3-scout/c3-worker subagents to .claude/agents (Claude Code only)")
169
191
 
170
192
  p_mcp_remove = subparsers.add_parser("mcp-remove", help="Remove an MCP server from your IDE config")
171
193
  p_mcp_remove.add_argument("name", help="Name of the MCP server to remove (e.g. 'c3')")
@@ -898,10 +898,10 @@ c3_status(view=<span class="str">'sessions'</span>) <span class="com">#
898
898
  <div class="tag-row">
899
899
  <span class="badge badge-orange">AI</span>
900
900
  </div>
901
- <span class="tool-tagline">Offload tasks to Ollama, Codex, Gemini, or Claude CLI</span>
901
+ <span class="tool-tagline">Hand bounded work to your own provider, one tier down</span>
902
902
  </div>
903
903
  <div class="tool-card-body">
904
- <p class="tool-desc">Delegates tasks to local or remote AI backends to save Claude tokens on routine work (summarization, routing, simple Q&amp;A). Supports automatic backend selection based on task type.</p>
904
+ <p class="tool-desc">Sends a bounded task (summarize a diff or log, explain a function, triage a traceback, draft a docstring or test cases) to a smaller model from the provider you already run on. In Claude Code that is Haiku by default, through a tool-less <code>claude -p</code> that answers only from the context C3 packs for it. On C3's delegate eval, Haiku passed all 22 bounded cases at about a fifth of Opus's cost.</p>
905
905
 
906
906
  <table class="params-table">
907
907
  <thead><tr><th>Parameter</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>
@@ -916,34 +916,61 @@ c3_status(view=<span class="str">'sessions'</span>) <span class="com">#
916
916
  <td class="param-name">task_type</td>
917
917
  <td class="param-type">string</td>
918
918
  <td class="param-default">"ask"</td>
919
- <td class="param-desc"><code>ask</code> general Q&amp;A · <code>summarize</code> summarization · <code>auto</code> let C3 route optimally</td>
919
+ <td class="param-desc"><code>ask</code> · <code>explain</code> · <code>summarize</code> · <code>review</code> · <code>diagnose</code> · <code>docstring</code> · <code>test</code> · <code>auto</code> · <code>ping</code> (one live call to check auth) · <code>available</code> (CLI versions only)</td>
920
920
  </tr>
921
921
  <tr>
922
922
  <td class="param-name">context</td>
923
923
  <td class="param-type">string</td>
924
924
  <td class="param-default">""</td>
925
- <td class="param-desc">Additional context to include with the task</td>
925
+ <td class="param-desc">The text the delegate answers from</td>
926
+ </tr>
927
+ <tr>
928
+ <td class="param-name">file_path</td>
929
+ <td class="param-type">string</td>
930
+ <td class="param-default">""</td>
931
+ <td class="param-desc">Comma-separated files C3 reads under Access Guard and packs into the prompt (a file over 8k tokens goes as its map; a masked path is refused)</td>
926
932
  </tr>
927
933
  <tr>
928
934
  <td class="param-name">backend</td>
929
935
  <td class="param-type">string</td>
930
- <td class="param-default">"auto"</td>
931
- <td class="param-desc"><code>ollama</code> · <code>codex</code> · <code>gemini</code> · <code>claude</code> · <code>auto</code></td>
936
+ <td class="param-default">"host"</td>
937
+ <td class="param-desc"><code>host</code> = your own provider (Claude Code → <code>claude</code>, Codex → <code>codex</code>, Grok Build → <code>grok</code>, Antigravity → <code>gemini</code>) · <code>claude</code> · <code>codex</code> · <code>gemini</code> · <code>grok</code> · <code>ollama</code> · <code>auto</code></td>
938
+ </tr>
939
+ <tr>
940
+ <td class="param-name">tier</td>
941
+ <td class="param-type">string</td>
942
+ <td class="param-default">"small"</td>
943
+ <td class="param-desc"><code>small</code> · <code>medium</code> · <code>large</code> · <code>default</code>. Claude: Haiku (thinking capped at 1024 tokens) / Sonnet / Opus; a scout defaults to Sonnet, which finds things in far fewer turns. Codex and Grok: reasoning effort low / medium / high on the account's model. Gemini: flash-lite / flash / pro.</td>
944
+ </tr>
945
+ <tr>
946
+ <td class="param-name">model</td>
947
+ <td class="param-type">string</td>
948
+ <td class="param-default">""</td>
949
+ <td class="param-desc">A model alias or id; overrides the tier</td>
950
+ </tr>
951
+ <tr>
952
+ <td class="param-name">scout</td>
953
+ <td class="param-type">bool</td>
954
+ <td class="param-default">false</td>
955
+ <td class="param-desc">Let the delegate Read/Grep/Glob the project itself, for lookups when you cannot name the files. Claude runs <code>--restricted</code> with Access Guard's read denies; Codex uses its read-only sandbox.</td>
932
956
  </tr>
933
957
  </tbody>
934
958
  </table>
935
959
 
936
960
  <h4>Examples</h4>
937
- <pre><code><span class="com"># Delegate summarization to local Ollama</span>
938
- c3_delegate(task=<span class="str">'Summarize what this function does'</span>, context=<span class="str">'&lt;function code&gt;'</span>, backend=<span class="str">'ollama'</span>, task_type=<span class="str">'summarize'</span>)
961
+ <pre><code><span class="com"># Summarize a diff on Haiku (Claude Code host, default tier)</span>
962
+ c3_delegate(task=<span class="str">'Summarize this diff for a changelog in three bullets'</span>, context=<span class="str">'&lt;diff&gt;'</span>, task_type=<span class="str">'summarize'</span>)
963
+
964
+ <span class="com"># Explain a function on Sonnet</span>
965
+ c3_delegate(task=<span class="str">'What does resolve_host return inside a grok child?'</span>, file_path=<span class="str">'core/host.py'</span>, task_type=<span class="str">'explain'</span>, tier=<span class="str">'medium'</span>)
939
966
 
940
- <span class="com"># Auto-route based on task type</span>
941
- c3_delegate(task=<span class="str">'What is the purpose of this config key?'</span>, context=<span class="str">'&lt;config snippet&gt;'</span>, backend=<span class="str">'auto'</span>)</code></pre>
967
+ <span class="com"># A lookup the delegate does itself</span>
968
+ c3_delegate(task=<span class="str">'Which functions call charge_card, and where?'</span>, scout=<span class="kw">True</span>)</code></pre>
942
969
 
943
970
  <div class="callout callout-info">
944
971
  <span class="callout-icon">ℹ️</span>
945
972
  <div class="callout-body">
946
- Requires Ollama running locally for <code>ollama</code> backend. Codex and Gemini backends require their respective CLIs. The <code>claude</code> backend uses the Claude Code CLI in non-interactive print mode (<code>claude -p</code>) — no extra config needed if Claude Code is installed. Use <code>task_type='available'</code> to check which of the 4 backends are reachable.
973
+ For multi-step work in Claude Code, <code>c3 install-mcp</code> also writes two subagents to <code>.claude/agents</code>: <code>c3-scout</code> (Haiku, read-only) and <code>c3-worker</code> (Sonnet). They run inside your session, so C3's hooks apply to them. Skip them with <code>--no-agents</code>. <code>c3 delegate-eval</code> measures pass rate and cost per backend and tier on your machine.
947
974
  </div>
948
975
  </div>
949
976
  </div>
@@ -501,3 +501,39 @@ def run(payload: dict, project_path: Path | None = None,
501
501
  return _scan_shell_writes(cmd, base, session_id, defer_consume)
502
502
 
503
503
  return None
504
+
505
+
506
+ def main() -> None:
507
+ """Standalone PreToolUse entry for a ``c3_delegate`` scout run.
508
+
509
+ A scout is ``claude -p --restricted`` with Read/Grep/Glob and no C3 MCP
510
+ server, so the dispatcher's discipline hook (hook_pretool_enforce) would
511
+ refuse every native read. Only the access guard runs here. It prints a
512
+ deny and nothing else: grants and search footers are for an agent that
513
+ can act on them. Any failure denies (fail closed).
514
+ """
515
+ import argparse
516
+ import json
517
+
518
+ from _hook_utils import ensure_utf8_stdio
519
+
520
+ ensure_utf8_stdio()
521
+ parser = argparse.ArgumentParser()
522
+ parser.add_argument("--project", required=True)
523
+ args = parser.parse_args()
524
+ try:
525
+ raw = sys.stdin.read()
526
+ payload = json.loads(raw) if raw.strip() else {}
527
+ if not isinstance(payload, dict):
528
+ raise ValueError("hook payload must be a JSON object")
529
+ # access_guard canonicalizes the base itself (no direct resolve here).
530
+ out = run(payload, Path(args.project))
531
+ except Exception as exc:
532
+ out = _deny(f"[c3-access:error] scout guard failed ({type(exc).__name__}: {exc}); "
533
+ "refusing the call")
534
+ if isinstance(out, dict) and isinstance(out.get("hookSpecificOutput"), dict):
535
+ print(json.dumps({"hookSpecificOutput": out["hookSpecificOutput"]}))
536
+
537
+
538
+ if __name__ == "__main__":
539
+ main()
@@ -803,13 +803,16 @@ async def c3_status(view: str = "budget", detailed: bool = False,
803
803
 
804
804
  @mcp.tool()
805
805
  async def c3_delegate(task: str, task_type: str = "ask", context: str = "",
806
- file_path: str = "", backend: str = "ollama",
806
+ file_path: str = "", backend: str = "host",
807
807
  allow_write_delegation: bool = False,
808
+ tier: str = "", model: str = "", scout: bool = False,
808
809
  ctx: Context = None) -> str:
809
810
  """OFFLOAD to another model — use when the subtask is local-model-sized or needs a different perspective.
810
- backend: ollama|codex|gemini|claude|grok|auto. task_type: auto, summarize, explain, review, ask, test, diagnose, available, codex_check, gemini_check, grok_check, codex_resume.
811
+ backend: host (default: your own provider, one tier down — Claude Code->claude, Codex->codex, Grok->grok, Antigravity->gemini) | claude|codex|gemini|grok|ollama|auto. task_type: auto, summarize, explain, review, ask, test, diagnose, ping (live auth check), available, codex_check, gemini_check, grok_check, codex_resume.
812
+ tier: small (default; scout=true defaults to medium) | medium | large | default. claude: haiku/sonnet/opus; codex/grok: reasoning effort; gemini: flash-lite/flash/pro. model overrides the tier. Context + file_path are packed by C3 under Access Guard; a file over 8k tokens goes as its map, so for line-level questions on a big file paste the excerpt or use scout=true.
813
+ scout=true: the delegate may Read/Grep/Glob the project itself (claude: read-only, guard-denied paths refused; codex: its read-only sandbox) — for lookups when you cannot name the files.
811
814
  grok runs read-only in a temp dir unless delegate.grok_allow_write=true (then --yolo in the project, loading its trusted .grok MCP servers and hooks).
812
- allow_write_delegation: explicit user opt-in for write-capable backends (gemini/claude/grok write mode/codex_resume) while Access Guard rules are active; codex is pinned read-only instead."""
815
+ allow_write_delegation: explicit user opt-in for write-capable backends (gemini/grok write mode/codex_resume) while Access Guard rules are active; codex is pinned read-only instead."""
813
816
  svc = _svc(ctx)
814
817
 
815
818
  def finalize(name, args, resp, summ, **kw):
@@ -825,7 +828,7 @@ async def c3_delegate(task: str, task_type: str = "ask", context: str = "",
825
828
  try:
826
829
  return await asyncio.to_thread(handle_delegate, task, task_type, context,
827
830
  file_path, svc, finalize, backend,
828
- allow_write_delegation)
831
+ allow_write_delegation, tier, model, scout)
829
832
  finally:
830
833
  svc._agent_progress_cb = None
831
834