code-context-control 2.129.2__tar.gz → 2.136.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 (550) hide show
  1. {code_context_control-2.129.2 → code_context_control-2.136.0}/PKG-INFO +10 -5
  2. {code_context_control-2.129.2 → code_context_control-2.136.0}/README.md +9 -4
  3. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/_hook_utils.py +9 -1
  4. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/c3.py +98 -12
  5. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/commands/parser.py +27 -5
  6. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/docs.html +59 -14
  7. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/getting-started.html +11 -1
  8. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/tools.html +38 -11
  9. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/workflow.html +2 -2
  10. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_access_guard.py +36 -0
  11. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_dispatch.py +43 -3
  12. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_session_stats.py +23 -2
  13. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_server.py +3 -2
  14. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/mcp_manager.js +2 -2
  15. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/modals.js +1 -0
  16. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/state.js +2 -0
  17. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/mcp_server.py +8 -4
  18. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/server.py +3 -3
  19. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/delegate.py +1184 -143
  20. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/status.py +15 -0
  21. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/instructions.js +1 -0
  22. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/settings.js +81 -5
  23. {code_context_control-2.129.2 → code_context_control-2.136.0}/code_context_control.egg-info/PKG-INFO +10 -5
  24. {code_context_control-2.129.2 → code_context_control-2.136.0}/code_context_control.egg-info/SOURCES.txt +17 -0
  25. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/config.py +28 -1
  26. code_context_control-2.136.0/core/grok_payload.py +121 -0
  27. code_context_control-2.136.0/core/hook_command.py +22 -0
  28. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/host.py +5 -1
  29. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/ide.py +19 -0
  30. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/c3_bridge.py +6 -1
  31. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/chat_engine.py +1 -1
  32. {code_context_control-2.129.2 → code_context_control-2.136.0}/pyproject.toml +1 -1
  33. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/access_guard.py +8 -1
  34. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/agents.py +12 -11
  35. code_context_control-2.136.0/services/agents_workflow.py +11 -0
  36. code_context_control-2.136.0/services/bench/delegate_eval.py +575 -0
  37. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_act.py +167 -7
  38. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_runner.py +186 -14
  39. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_workflow.py +96 -13
  40. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/claude_md.py +3 -3
  41. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/codex_integration.py +7 -8
  42. code_context_control-2.136.0/services/delegate_agents.py +108 -0
  43. code_context_control-2.136.0/services/grok_integration.py +200 -0
  44. code_context_control-2.136.0/services/grok_transcript.py +73 -0
  45. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/host_sessions.py +1 -1
  46. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/session_manager.py +4 -0
  47. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/telemetry.py +65 -0
  48. code_context_control-2.136.0/tests/test_ci_dag_ownership.py +398 -0
  49. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_codex_native.py +2 -1
  50. code_context_control-2.136.0/tests/test_delegate_adoption_d4.py +137 -0
  51. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_delegate_cascade.py +6 -4
  52. code_context_control-2.136.0/tests/test_delegate_claude_d1.py +359 -0
  53. code_context_control-2.136.0/tests/test_delegate_eval.py +227 -0
  54. code_context_control-2.136.0/tests/test_delegate_grok.py +499 -0
  55. code_context_control-2.136.0/tests/test_delegate_host_d2.py +383 -0
  56. code_context_control-2.136.0/tests/test_delegate_scout_d3.py +231 -0
  57. code_context_control-2.136.0/tests/test_delegate_telemetry_d0.py +235 -0
  58. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_delegate_version_probe.py +6 -4
  59. code_context_control-2.136.0/tests/test_grok_native.py +234 -0
  60. code_context_control-2.136.0/tests/test_hook_grok_compat.py +322 -0
  61. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_no_stale_model_pins.py +5 -0
  62. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_chat_engine.py +2 -0
  63. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/init_view.py +1 -1
  64. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/mcp_view.py +1 -1
  65. {code_context_control-2.129.2 → code_context_control-2.136.0}/LICENSE +0 -0
  66. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/__init__.py +0 -0
  67. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/_shell_writes.py +0 -0
  68. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/commands/__init__.py +0 -0
  69. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/commands/common.py +0 -0
  70. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/edits.html +0 -0
  71. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/access.html +0 -0
  72. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/bitbucket.html +0 -0
  73. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/credentials.html +0 -0
  74. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/index.html +0 -0
  75. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/masking.html +0 -0
  76. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/oracle.html +0 -0
  77. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/guide/shared.css +0 -0
  78. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_artifact.py +0 -0
  79. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_auto_snapshot.py +0 -0
  80. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_c3_signal.py +0 -0
  81. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_c3read.py +0 -0
  82. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_codex_lifecycle.py +0 -0
  83. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_edit_ledger.py +0 -0
  84. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_edit_unlock.py +0 -0
  85. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_filter.py +0 -0
  86. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_ghost_files.py +0 -0
  87. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_pretool_enforce.py +0 -0
  88. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_prompt_recall.py +0 -0
  89. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_read.py +0 -0
  90. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_session_end.py +0 -0
  91. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_session_open.py +0 -0
  92. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hook_terse_advisor.py +0 -0
  93. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/app.js +0 -0
  94. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/add_project.js +0 -0
  95. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/config_editor.js +0 -0
  96. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
  97. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/drill_health.js +0 -0
  98. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/drill_panel.js +0 -0
  99. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
  100. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/drill_tasks.js +0 -0
  101. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/drill_views.js +0 -0
  102. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/global_search.js +0 -0
  103. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_access.js +0 -0
  104. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_ci.js +0 -0
  105. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_cred_audit.js +0 -0
  106. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_credentials.js +0 -0
  107. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
  108. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_locks.js +0 -0
  109. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/hub_tokens.js +0 -0
  110. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/project_card.js +0 -0
  111. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/project_tree.js +0 -0
  112. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/session_drawer.js +0 -0
  113. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/settings_modal.js +0 -0
  114. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/sidebar.js +0 -0
  115. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/summary_bar.js +0 -0
  116. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/task_board.js +0 -0
  117. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/toasts.js +0 -0
  118. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui/components/topbar.js +0 -0
  119. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/hub_ui.html +0 -0
  120. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/mcp_proxy.py +0 -0
  121. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/progress.py +0 -0
  122. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/__init__.py +0 -0
  123. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/_grants.py +0 -0
  124. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/_helpers.py +0 -0
  125. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/agent.py +0 -0
  126. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/artifacts.py +0 -0
  127. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/bitbucket.py +0 -0
  128. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/ci.py +0 -0
  129. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/compress.py +0 -0
  130. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/credentials.py +0 -0
  131. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/edit.py +0 -0
  132. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/edit_verify.py +0 -0
  133. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/edits.py +0 -0
  134. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/federate.py +0 -0
  135. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/filter.py +0 -0
  136. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/impact.py +0 -0
  137. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/jira.py +0 -0
  138. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/locks.py +0 -0
  139. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/memory.py +0 -0
  140. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/override.py +0 -0
  141. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/project.py +0 -0
  142. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/read.py +0 -0
  143. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/search.py +0 -0
  144. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/session.py +0 -0
  145. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/shell.py +0 -0
  146. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/shell_job.py +0 -0
  147. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/shell_nudge.py +0 -0
  148. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/shell_parsers.py +0 -0
  149. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/shell_render.py +0 -0
  150. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/tasks.py +0 -0
  151. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/tools/validate.py +0 -0
  152. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/api.js +0 -0
  153. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/app.js +0 -0
  154. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/access.js +0 -0
  155. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/bitbucket.js +0 -0
  156. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/chat.js +0 -0
  157. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/credentials.js +0 -0
  158. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/dashboard.js +0 -0
  159. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/edits.js +0 -0
  160. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/enforcement.js +0 -0
  161. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/jira.js +0 -0
  162. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/memory.js +0 -0
  163. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/sessions.js +0 -0
  164. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/sidebar.js +0 -0
  165. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/components/tasks.js +0 -0
  166. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/icons.js +0 -0
  167. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/pm_shared.js +0 -0
  168. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/shared.js +0 -0
  169. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui/theme.js +0 -0
  170. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui.html +0 -0
  171. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui_legacy.html +0 -0
  172. {code_context_control-2.129.2 → code_context_control-2.136.0}/cli/ui_nano.html +0 -0
  173. {code_context_control-2.129.2 → code_context_control-2.136.0}/code_context_control.egg-info/dependency_links.txt +0 -0
  174. {code_context_control-2.129.2 → code_context_control-2.136.0}/code_context_control.egg-info/entry_points.txt +0 -0
  175. {code_context_control-2.129.2 → code_context_control-2.136.0}/code_context_control.egg-info/requires.txt +0 -0
  176. {code_context_control-2.129.2 → code_context_control-2.136.0}/code_context_control.egg-info/top_level.txt +0 -0
  177. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/__init__.py +0 -0
  178. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/codex_patch.py +0 -0
  179. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/mcp_toml.py +0 -0
  180. {code_context_control-2.129.2 → code_context_control-2.136.0}/core/web_security.py +0 -0
  181. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/__init__.py +0 -0
  182. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/config.py +0 -0
  183. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/listeners.py +0 -0
  184. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/mcp_oracle.py +0 -0
  185. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/oracle_server.py +0 -0
  186. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/oracle_ui.html +0 -0
  187. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/__init__.py +0 -0
  188. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/activity_reporter.py +0 -0
  189. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/api_auth.py +0 -0
  190. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/chat_poll.py +0 -0
  191. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/chat_store.py +0 -0
  192. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/client_tokens.py +0 -0
  193. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/cross_memory.py +0 -0
  194. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/discovery_audit.py +0 -0
  195. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/federated_graph.py +0 -0
  196. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/health_checker.py +0 -0
  197. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/insight_engine.py +0 -0
  198. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/local_session.py +0 -0
  199. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/memory_reader.py +0 -0
  200. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/memory_writer.py +0 -0
  201. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/mobile_api.py +0 -0
  202. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/project_scanner.py +0 -0
  203. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/review_agent.py +0 -0
  204. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/tool_executor.py +0 -0
  205. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/services/tool_registry.py +0 -0
  206. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/activity.js +0 -0
  207. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/agents.js +0 -0
  208. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/app.js +0 -0
  209. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/busy.js +0 -0
  210. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/chat/conversations.js +0 -0
  211. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/chat/input.js +0 -0
  212. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/chat/markdown.js +0 -0
  213. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/chat/send.js +0 -0
  214. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/chat/stream_renderer.js +0 -0
  215. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/chat/toolbar.js +0 -0
  216. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/core.js +0 -0
  217. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/crossgraph.js +0 -0
  218. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/header.js +0 -0
  219. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/insights.js +0 -0
  220. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/projects.js +0 -0
  221. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/qrcode.js +0 -0
  222. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/settings.js +0 -0
  223. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/suggestions.js +0 -0
  224. {code_context_control-2.129.2 → code_context_control-2.136.0}/oracle/ui/theme_tabs.js +0 -0
  225. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/__init__.py +0 -0
  226. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/access_telemetry.py +0 -0
  227. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/activity_log.py +0 -0
  228. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/agent_base.py +0 -0
  229. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/agent_locks.py +0 -0
  230. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/artifact_defs.py +0 -0
  231. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/artifact_store.py +0 -0
  232. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/atomic_json.py +0 -0
  233. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/auto_memory.py +0 -0
  234. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/background_service.py +0 -0
  235. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/__init__.py +0 -0
  236. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/external/__init__.py +0 -0
  237. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/external/aider_polyglot.py +0 -0
  238. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/external/swe_bench.py +0 -0
  239. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/map_eval.py +0 -0
  240. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/search_eval.py +0 -0
  241. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bench/shell_eval.py +0 -0
  242. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/benchmark_dashboard.py +0 -0
  243. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bitbucket_client.py +0 -0
  244. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/bitbucket_credentials.py +0 -0
  245. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_cache.py +0 -0
  246. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_expr.py +0 -0
  247. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_failures.py +0 -0
  248. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_github.py +0 -0
  249. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_impact.py +0 -0
  250. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ci_intel.py +0 -0
  251. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/circuit_breaker.py +0 -0
  252. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/codex_transcript.py +0 -0
  253. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/compressor.py +0 -0
  254. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/context_snapshot.py +0 -0
  255. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/conversation_store.py +0 -0
  256. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/cred_audit.py +0 -0
  257. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/cred_telemetry.py +0 -0
  258. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/credential_store.py +0 -0
  259. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/dir_map.py +0 -0
  260. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/doc_index.py +0 -0
  261. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/e2e_benchmark.py +0 -0
  262. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/e2e_evaluator.py +0 -0
  263. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/e2e_tasks.py +0 -0
  264. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/edit_ledger.py +0 -0
  265. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/embedding_index.py +0 -0
  266. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/enforcement_policy.py +0 -0
  267. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/error_reporting.py +0 -0
  268. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/file_map.py +0 -0
  269. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/file_memory.py +0 -0
  270. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/git_context.py +0 -0
  271. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/hub_service.py +0 -0
  272. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/index_store.py +0 -0
  273. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/indexer.py +0 -0
  274. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/jira_client.py +0 -0
  275. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/jira_cloud.py +0 -0
  276. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/jira_credentials.py +0 -0
  277. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/jira_data_center.py +0 -0
  278. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/jira_links.py +0 -0
  279. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/lexical_index.py +0 -0
  280. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/mask_activation.py +0 -0
  281. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/mask_mirror.py +0 -0
  282. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/mask_presets.py +0 -0
  283. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory.py +0 -0
  284. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory_consolidator.py +0 -0
  285. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory_distiller.py +0 -0
  286. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory_graph.py +0 -0
  287. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory_grounder.py +0 -0
  288. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory_queue.py +0 -0
  289. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/memory_scorer.py +0 -0
  290. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/metrics.py +0 -0
  291. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/notifications.py +0 -0
  292. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ollama_bridge.py +0 -0
  293. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ollama_client.py +0 -0
  294. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/ollama_credentials.py +0 -0
  295. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/oracle_service.py +0 -0
  296. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/output_filter.py +0 -0
  297. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/override_costs.py +0 -0
  298. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/override_grants.py +0 -0
  299. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/override_policy.py +0 -0
  300. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/override_requests.py +0 -0
  301. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/override_wake.py +0 -0
  302. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/parser.py +0 -0
  303. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/project_manager.py +0 -0
  304. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/project_runtime.py +0 -0
  305. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/protocol.py +0 -0
  306. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/proxy_state.py +0 -0
  307. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/repo_map.py +0 -0
  308. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/repo_shape.py +0 -0
  309. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/reranker.py +0 -0
  310. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/retention.py +0 -0
  311. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/retrieval.py +0 -0
  312. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/retrieval_broker.py +0 -0
  313. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/router.py +0 -0
  314. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/runtime.py +0 -0
  315. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/scanner.py +0 -0
  316. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/session_benchmark.py +0 -0
  317. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/session_live.py +0 -0
  318. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/session_preloader.py +0 -0
  319. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/shell_jobs.py +0 -0
  320. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/shell_output.py +0 -0
  321. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/subprojects.py +0 -0
  322. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/task_store.py +0 -0
  323. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/text_index.py +0 -0
  324. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/time_tracker.py +0 -0
  325. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/tool_classifier.py +0 -0
  326. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/transcript_index.py +0 -0
  327. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/validation_cache.py +0 -0
  328. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/vector_store.py +0 -0
  329. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/watcher.py +0 -0
  330. {code_context_control-2.129.2 → code_context_control-2.136.0}/services/win_subprocess.py +0 -0
  331. {code_context_control-2.129.2 → code_context_control-2.136.0}/setup.cfg +0 -0
  332. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_access_builtin_optout.py +0 -0
  333. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_access_guard.py +0 -0
  334. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_access_guard_meta.py +0 -0
  335. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_access_guard_shell_project.py +0 -0
  336. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_access_guard_surfaces.py +0 -0
  337. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_access_guard_wiring.py +0 -0
  338. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_activity_log_find_last.py +0 -0
  339. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_activity_reporter.py +0 -0
  340. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_agent_locks.py +0 -0
  341. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_aider_polyglot.py +0 -0
  342. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_antigravity_transition.py +0 -0
  343. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_artifact_store.py +0 -0
  344. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_artifact_tool.py +0 -0
  345. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_atomic_json.py +0 -0
  346. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_background_service.py +0 -0
  347. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_bitbucket_cli_smoke.py +0 -0
  348. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_bitbucket_client.py +0 -0
  349. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_bitbucket_config_fallback.py +0 -0
  350. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_bitbucket_credentials.py +0 -0
  351. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_bitbucket_tool.py +0 -0
  352. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_builtin_modes.py +0 -0
  353. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
  354. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_c3_shell.py +0 -0
  355. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_chat_poll.py +0 -0
  356. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_act.py +0 -0
  357. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_cache.py +0 -0
  358. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_expr.py +0 -0
  359. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_impact.py +0 -0
  360. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_intel.py +0 -0
  361. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_runner.py +0 -0
  362. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ci_workflow.py +0 -0
  363. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_circuit_breaker.py +0 -0
  364. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_claude_md_merge.py +0 -0
  365. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_claude_md_updater.py +0 -0
  366. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_cli_smoke.py +0 -0
  367. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_codex_mcp_transport.py +0 -0
  368. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_compressor_large_file.py +0 -0
  369. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_confirm_guard.py +0 -0
  370. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_confirm_guard_wiring.py +0 -0
  371. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_cooccurrence_bounds.py +0 -0
  372. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_cred_audit.py +0 -0
  373. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_cred_telemetry.py +0 -0
  374. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_credential_login_kind.py +0 -0
  375. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_credential_store.py +0 -0
  376. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_credential_ui_parity.py +0 -0
  377. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_credentials_routes.py +0 -0
  378. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_credentials_tool.py +0 -0
  379. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_creds_cli_smoke.py +0 -0
  380. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_dir_map_c3.py +0 -0
  381. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_e2e_benchmark.py +0 -0
  382. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_edit_ledger_deadline.py +0 -0
  383. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_edit_ledger_hook.py +0 -0
  384. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_edit_locking.py +0 -0
  385. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_edit_normalization.py +0 -0
  386. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_edit_verify.py +0 -0
  387. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_embedding_index_deadlock.py +0 -0
  388. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_enforcement_flip.py +0 -0
  389. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_enforcement_policy.py +0 -0
  390. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_enforcement_routes.py +0 -0
  391. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_env_parser.py +0 -0
  392. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_failed_calls_do_not_unlock.py +0 -0
  393. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_federated_graph.py +0 -0
  394. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_file_map_c1.py +0 -0
  395. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_filter_backoff.py +0 -0
  396. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ghost_files.py +0 -0
  397. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ghost_generation.py +0 -0
  398. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_git_branch_awareness.py +0 -0
  399. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_access_guard.py +0 -0
  400. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_codex_compat.py +0 -0
  401. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_dispatch.py +0 -0
  402. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_pretool_enforce.py +0 -0
  403. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_prompt_recall.py +0 -0
  404. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_session_end.py +0 -0
  405. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_smoke.py +0 -0
  406. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_state.py +0 -0
  407. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hook_utf8_stdio.py +0 -0
  408. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_credentials_route.py +0 -0
  409. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_credentials_routes_write.py +0 -0
  410. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_enforcement_routes.py +0 -0
  411. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_hook_migration.py +0 -0
  412. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_inspect_api.py +0 -0
  413. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_locks_routes.py +0 -0
  414. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_oracle_service_routes.py +0 -0
  415. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_override_policy_routes.py +0 -0
  416. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_override_routes.py +0 -0
  417. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_server_smoke.py +0 -0
  418. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_hub_subproject_links.py +0 -0
  419. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ide_workflow_adaptation.py +0 -0
  420. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_index_cap_not_hardcoded.py +0 -0
  421. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_init_clear_preserves_user_content.py +0 -0
  422. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_init_scan.py +0 -0
  423. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_install_mcp_entrypoint.py +0 -0
  424. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_cli_smoke.py +0 -0
  425. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_client.py +0 -0
  426. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_config_fallback.py +0 -0
  427. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_credentials.py +0 -0
  428. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_links.py +0 -0
  429. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_routes.py +0 -0
  430. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_jira_tool.py +0 -0
  431. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_large_files_c4.py +0 -0
  432. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_lazy_store_init.py +0 -0
  433. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_map_eval.py +0 -0
  434. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_map_telemetry_c0.py +0 -0
  435. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mask_guard.py +0 -0
  436. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mask_routes.py +0 -0
  437. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mask_surfaces.py +0 -0
  438. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mcp_host_guard.py +0 -0
  439. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mcp_memory_timeout.py +0 -0
  440. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mcp_server_smoke.py +0 -0
  441. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mcp_toml.py +0 -0
  442. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_memory_distiller.py +0 -0
  443. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_memory_graph_api.py +0 -0
  444. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_memory_queue.py +0 -0
  445. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_memory_system.py +0 -0
  446. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_api.py +0 -0
  447. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_clients.py +0 -0
  448. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_extras.py +0 -0
  449. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_jobs_ci.py +0 -0
  450. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_override_costs.py +0 -0
  451. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_override_routes.py +0 -0
  452. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_mobile_security_api.py +0 -0
  453. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_notification_dedup.py +0 -0
  454. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_notification_discipline.py +0 -0
  455. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_notification_kinds.py +0 -0
  456. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ollama_credentials.py +0 -0
  457. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_api_auth.py +0 -0
  458. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_apikey_api.py +0 -0
  459. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_c3_bridge.py +0 -0
  460. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_chat_store.py +0 -0
  461. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_discovery_api.py +0 -0
  462. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_discovery_audit.py +0 -0
  463. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_health_probe.py +0 -0
  464. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_local_auth.py +0 -0
  465. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_loopback.py +0 -0
  466. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_ollama_bridge.py +0 -0
  467. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_scanner_cache.py +0 -0
  468. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_security_fixes.py +0 -0
  469. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_session_bootstrap.py +0 -0
  470. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_subproject_awareness.py +0 -0
  471. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_oracle_ui_bundle.py +0 -0
  472. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_output_filter.py +0 -0
  473. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_override_costs.py +0 -0
  474. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_override_grants.py +0 -0
  475. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_override_grants_mcp.py +0 -0
  476. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_override_requests.py +0 -0
  477. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_override_wake.py +0 -0
  478. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_permissions.py +0 -0
  479. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_pm_api.py +0 -0
  480. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_project_manager.py +0 -0
  481. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_project_manager_merge.py +0 -0
  482. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_project_tool.py +0 -0
  483. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_read_coercion.py +0 -0
  484. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_read_edit_parity.py +0 -0
  485. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_read_outside_root.py +0 -0
  486. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_related_facts.py +0 -0
  487. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_repo_map.py +0 -0
  488. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_repo_shape.py +0 -0
  489. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_response_boilerplate.py +0 -0
  490. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_retention.py +0 -0
  491. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_review_digest.py +0 -0
  492. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_eval.py +0 -0
  493. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_p1.py +0 -0
  494. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_p2.py +0 -0
  495. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_p2b.py +0 -0
  496. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_p3.py +0 -0
  497. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_p4.py +0 -0
  498. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_search_p5.py +0 -0
  499. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_service_durability.py +0 -0
  500. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_session_benchmark.py +0 -0
  501. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_session_budget.py +0 -0
  502. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_session_live.py +0 -0
  503. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_budget_s1.py +0 -0
  504. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_creds.py +0 -0
  505. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_eval.py +0 -0
  506. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_jobs_s3.py +0 -0
  507. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_nudge_s4.py +0 -0
  508. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_output.py +0 -0
  509. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_parsers_s2.py +0 -0
  510. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_robustness.py +0 -0
  511. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_telemetry_s0.py +0 -0
  512. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_write_ledger.py +0 -0
  513. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_shell_writes.py +0 -0
  514. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_subproject_clear_scope.py +0 -0
  515. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_subproject_depth_consumers.py +0 -0
  516. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_subproject_exclusion.py +0 -0
  517. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_subproject_federation.py +0 -0
  518. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_subproject_linkage_api.py +0 -0
  519. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_subprojects.py +0 -0
  520. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_swe_bench.py +0 -0
  521. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_task_store.py +0 -0
  522. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_task_tool.py +0 -0
  523. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_time_tracker.py +0 -0
  524. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_token_telemetry.py +0 -0
  525. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_token_tracking.py +0 -0
  526. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_tool_registry.py +0 -0
  527. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_ui_jsx_syntax.py +0 -0
  528. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_upgrade_and_version.py +0 -0
  529. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_validate.py +0 -0
  530. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_vault_write_guard.py +0 -0
  531. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_version_sync.py +0 -0
  532. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_watcher_pruning.py +0 -0
  533. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_web_security.py +0 -0
  534. {code_context_control-2.129.2 → code_context_control-2.136.0}/tests/test_windows_reliability.py +0 -0
  535. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/__init__.py +0 -0
  536. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/backend.py +0 -0
  537. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/main.py +0 -0
  538. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/__init__.py +0 -0
  539. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/benchmark_view.py +0 -0
  540. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/claudemd_view.py +0 -0
  541. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/compress_view.py +0 -0
  542. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/index_view.py +0 -0
  543. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/optimize_view.py +0 -0
  544. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/pipe_view.py +0 -0
  545. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/projects_view.py +0 -0
  546. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/search_view.py +0 -0
  547. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/session_view.py +0 -0
  548. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/stats.py +0 -0
  549. {code_context_control-2.129.2 → code_context_control-2.136.0}/tui/screens/ui_view.py +0 -0
  550. {code_context_control-2.129.2 → code_context_control-2.136.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.129.2
3
+ Version: 2.136.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
@@ -69,7 +69,7 @@ Dynamic: license-file
69
69
  <p align="center">
70
70
  <strong>The local code-intelligence layer for AI coding tools.</strong><br>
71
71
  Retrieve less, read less, edit safer — and control what an agent may read, write, or see.<br>
72
- Works with Claude Code, Codex, Copilot, Cursor, and Antigravity.
72
+ Works with Claude Code, Codex, Grok Build, Copilot, Cursor, and Antigravity.
73
73
  </p>
74
74
 
75
75
  <p align="center">
@@ -123,7 +123,7 @@ c3 init /path/to/your/project
123
123
 
124
124
  Or `pip install "code-context-control[tui]"` for the optional Textual UI.
125
125
 
126
- `c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
126
+ `c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, Grok Build, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
127
127
 
128
128
  ```bash
129
129
  c3 init /path/to/project --force --ide claude --mcp-mode direct --permissions standard
@@ -138,6 +138,11 @@ Claude Code, see the [Codex integration guide](docs/codex-native.md). Run
138
138
  `c3 doctor --ide codex`. Existing installations need this reinstall to receive
139
139
  the new host arguments and hooks.
140
140
 
141
+ For xAI's Grok Build CLI, see the [Grok integration guide](docs/grok-native.md).
142
+ Run `c3 install-mcp --ide grok`, launch `grok --trust` once in the project (Grok
143
+ loads no project MCP servers, hooks or `AGENTS.md` until the folder is trusted),
144
+ then check `c3 doctor --ide grok`.
145
+
141
146
  > **Upgrading from before v2.60.1 on Windows:** existing projects are *not* repaired by upgrading — re-run `c3 init` once per project to fix hook registration.
142
147
 
143
148
  Full notes: [Upgrading](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md) · [Contributing](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md#from-source-contributors)
@@ -191,7 +196,7 @@ Since v2.128.0 you rarely start it by hand: opening an IDE session in a register
191
196
 
192
197
  **Tasks** (v2.45.0, extended v2.53.0) is a durable per-project tracker — dependencies and subtasks, milestones, decision notes, full event history, health reports, and both automatic and manual time tracking. It rolls up into the Hub's cross-project board. Shipped milestones can be **completed** (v2.86.0) — they leave the board while their tasks keep the milestone link, unlike archiving, which detaches them.
193
198
 
194
- **Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves both Codex and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
199
+ **Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves Codex, Grok Build and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
195
200
 
196
201
  ---
197
202
 
@@ -214,7 +219,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
214
219
  | `c3_impact` | Blast-radius analysis before editing shared symbols |
215
220
  | `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
216
221
  | `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
217
- | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
222
+ | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini / Grok |
218
223
  | `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
219
224
  | `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
220
225
  | `c3_task` | Per-project PM — tasks, dependencies, milestones, time tracking (v2.53.0) |
@@ -3,7 +3,7 @@
3
3
  <p align="center">
4
4
  <strong>The local code-intelligence layer for AI coding tools.</strong><br>
5
5
  Retrieve less, read less, edit safer — and control what an agent may read, write, or see.<br>
6
- Works with Claude Code, Codex, Copilot, Cursor, and Antigravity.
6
+ Works with Claude Code, Codex, Grok Build, Copilot, Cursor, and Antigravity.
7
7
  </p>
8
8
 
9
9
  <p align="center">
@@ -57,7 +57,7 @@ c3 init /path/to/your/project
57
57
 
58
58
  Or `pip install "code-context-control[tui]"` for the optional Textual UI.
59
59
 
60
- `c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
60
+ `c3 init` walks you through IDE selection (Claude Code, Codex CLI, VS Code, Cursor, Antigravity, Grok Build, or Custom), optional `git init`, MCP registration, and — for Claude Code — a permission tier. Headless:
61
61
 
62
62
  ```bash
63
63
  c3 init /path/to/project --force --ide claude --mcp-mode direct --permissions standard
@@ -72,6 +72,11 @@ Claude Code, see the [Codex integration guide](docs/codex-native.md). Run
72
72
  `c3 doctor --ide codex`. Existing installations need this reinstall to receive
73
73
  the new host arguments and hooks.
74
74
 
75
+ For xAI's Grok Build CLI, see the [Grok integration guide](docs/grok-native.md).
76
+ Run `c3 install-mcp --ide grok`, launch `grok --trust` once in the project (Grok
77
+ loads no project MCP servers, hooks or `AGENTS.md` until the folder is trusted),
78
+ then check `c3 doctor --ide grok`.
79
+
75
80
  > **Upgrading from before v2.60.1 on Windows:** existing projects are *not* repaired by upgrading — re-run `c3 init` once per project to fix hook registration.
76
81
 
77
82
  Full notes: [Upgrading](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md) · [Contributing](https://github.com/drknowhow/code-context-control/blob/main/docs/upgrading.md#from-source-contributors)
@@ -125,7 +130,7 @@ Since v2.128.0 you rarely start it by hand: opening an IDE session in a register
125
130
 
126
131
  **Tasks** (v2.45.0, extended v2.53.0) is a durable per-project tracker — dependencies and subtasks, milestones, decision notes, full event history, health reports, and both automatic and manual time tracking. It rolls up into the Hub's cross-project board. Shipped milestones can be **completed** (v2.86.0) — they leave the board while their tasks keep the milestone link, unlike archiving, which detaches them.
127
132
 
128
- **Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves both Codex and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
133
+ **Instructions** keeps your agent-facing docs in sync. C3-generated content sits inside a `<!-- C3:BEGIN … -->` block; anything you write outside it is preserved. Since v2.60.0 generated docs point at `.c3/MAP.md` — a machine-owned, byte-stable repo map C3 refreshes automatically — instead of embedding a tree that goes stale. `AGENTS.md` serves Codex, Grok Build and Antigravity; `GEMINI.md` is read if present but no longer generated (the Gemini CLI profile was removed in v2.52).
129
134
 
130
135
  ---
131
136
 
@@ -148,7 +153,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
148
153
  | `c3_impact` | Blast-radius analysis before editing shared symbols |
149
154
  | `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
150
155
  | `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
151
- | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
156
+ | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini / Grok |
152
157
  | `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
153
158
  | `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
154
159
  | `c3_task` | Per-project PM — tasks, dependencies, milestones, time tracking (v2.53.0) |
@@ -392,20 +392,28 @@ def record_unlocked_files(
392
392
  # hookSpecificOutput.hookEventName is REQUIRED. Unknown keys are a
393
393
  # hard deserialization error, not a warning, so emitting the Claude
394
394
  # shape makes Codex discard the whole hook response.
395
+ # grok — Grok Build: native tool names and tagged results on the way in
396
+ # (core/grok_payload.translate); context only under
397
+ # hookSpecificOutput, and Stop context would keep the agent working.
395
398
  HOST_CLAUDE = "claude"
396
399
  HOST_GEMINI = "gemini"
397
400
  HOST_CODEX = "codex"
401
+ HOST_GROK = "grok"
398
402
 
399
403
 
400
404
  def detect_host(data: dict, explicit_host: str | None = None) -> str:
401
405
  """Use the hook's explicit host or wire identity, never its parent's env."""
402
406
  named = explicit_host or (data.get("_c3_host") if isinstance(data, dict) else None)
403
407
  aliases = {"claude-code": HOST_CLAUDE, "claude": HOST_CLAUDE,
404
- "codex": HOST_CODEX, "gemini": HOST_GEMINI, "antigravity": HOST_GEMINI}
408
+ "codex": HOST_CODEX, "gemini": HOST_GEMINI, "antigravity": HOST_GEMINI,
409
+ "grok": HOST_GROK, "grok-build": HOST_GROK}
405
410
  if named in aliases:
406
411
  return aliases[named]
407
412
  if not isinstance(data, dict):
408
413
  return HOST_CLAUDE
414
+ from core.grok_payload import is_grok_payload
415
+ if is_grok_payload(data):
416
+ return HOST_GROK
409
417
  if data.get("turn_id"):
410
418
  return HOST_CODEX
411
419
  response = data.get("tool_response")
@@ -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.129.2"
94
+ __version__ = "2.136.0"
95
95
 
96
96
 
97
97
  def _compress_file_cli(compressor, path, mode="smart", **kw):
@@ -316,7 +316,7 @@ _BASH_STANDARD = _BASH_READONLY + [
316
316
  "Bash(pip:*)", "Bash(pip3:*)", "Bash(npm:*)", "Bash(node:*)",
317
317
  "Bash(cargo:*)", "Bash(go:*)",
318
318
  # AI CLIs
319
- "Bash(claude:*)", "Bash(codex:*)", "Bash(gemini:*)",
319
+ "Bash(claude:*)", "Bash(codex:*)", "Bash(gemini:*)", "Bash(grok:*)",
320
320
  # Utilities
321
321
  "Bash(timeout:*)", "Bash(time:*)", "Bash(curl:*)", "Bash(gh:*)",
322
322
  "Bash(for:*)", "Bash(do:*)", "Bash(done:*)",
@@ -755,6 +755,7 @@ def _select_init_ide(default_ide: str) -> str:
755
755
  "Cursor — .cursor/mcp.json",
756
756
  "Codex — .codex/config.toml + AGENTS.md",
757
757
  "Antigravity — ~/.gemini/antigravity/mcp_config.json + AGENTS.md",
758
+ "Grok Build — .grok/config.toml + .grok/hooks + AGENTS.md",
758
759
  ]
759
760
  selected = _prompt_choice("Step 1/3 — Choose IDE profile", choices)
760
761
  mapping = {
@@ -764,6 +765,7 @@ def _select_init_ide(default_ide: str) -> str:
764
765
  choices[3]: "cursor",
765
766
  choices[4]: "codex",
766
767
  choices[5]: "antigravity",
768
+ choices[6]: "grok",
767
769
  }
768
770
  chosen = mapping.get(selected or "", normalize_ide_name(default_ide) if default_ide != "auto" else "auto")
769
771
  print(f" IDE profile: {chosen}")
@@ -1034,7 +1036,7 @@ def _parse_cli_ide_arg(value: str) -> str:
1034
1036
  normalized = normalize_ide_name(raw)
1035
1037
  if normalized not in PROFILES:
1036
1038
  raise argparse.ArgumentTypeError(
1037
- "Unsupported IDE. Use one of: auto, claude, vscode, cursor, codex, antigravity."
1039
+ "Unsupported IDE. Use one of: auto, claude, vscode, cursor, codex, antigravity, grok."
1038
1040
  )
1039
1041
  return normalized
1040
1042
 
@@ -1569,6 +1571,51 @@ def cmd_shell_eval(args):
1569
1571
  sys.exit(1)
1570
1572
 
1571
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
+
1572
1619
  def cmd_map_eval(args):
1573
1620
  """Run the file-map gold suite and compare it to its baseline.
1574
1621
 
@@ -4333,9 +4380,9 @@ _C3_HOOKLESS_WORKFLOW = _adapt_workflow_for_ide(
4333
4380
 
4334
4381
  _COPILOT_INSTRUCTIONS_CONTENT = _VSCODE_SESSION_INIT + "\n\n" + _C3_HOOKLESS_WORKFLOW
4335
4382
 
4336
- from services.codex_integration import CODEX_WORKFLOW
4383
+ from services.agents_workflow import AGENTS_MD_WORKFLOW
4337
4384
 
4338
- _AGENTS_MD_CONTENT = CODEX_WORKFLOW
4385
+ _AGENTS_MD_CONTENT = AGENTS_MD_WORKFLOW
4339
4386
 
4340
4387
  _TERSE_SKILL_CONTENT = """\
4341
4388
  # /terse — Terse Output Mode
@@ -4544,7 +4591,7 @@ def _ensure_instruction_workflow(instructions_path: Path, template: str,
4544
4591
 
4545
4592
  def _ensure_codex_agents_workflow(agents_md_path: Path,
4546
4593
  project_path: str = "") -> str:
4547
- """Ensure AGENTS.md contains the mandatory C3 workflow for Codex sessions."""
4594
+ """Ensure AGENTS.md contains the mandatory C3 workflow (Codex and Grok Build read it)."""
4548
4595
  from services.claude_md import write_c3_instruction_doc
4549
4596
  existing = agents_md_path.read_text(encoding="utf-8") if agents_md_path.exists() else None
4550
4597
  rendered = write_c3_instruction_doc(agents_md_path, _AGENTS_MD_CONTENT, project_path or None)
@@ -4888,8 +4935,15 @@ def _uninstall_mcp_all(project_path: str, include_global: bool = True):
4888
4935
  except Exception as e:
4889
4936
  print(f" Warning: Could not update {mcp_config_path}: {e}")
4890
4937
 
4938
+ # Grok Build: C3 owns the whole .grok/hooks/c3.json, so it is deleted
4939
+ # rather than stripped (its Windows commands are encoded and would not
4940
+ # match the settings scanner anyway).
4941
+ if ide_name == "grok":
4942
+ from services.grok_integration import remove_hooks as remove_grok_hooks
4943
+ if remove_grok_hooks(target):
4944
+ print(f" Deleted {target / profile.settings_path}")
4891
4945
  # Per-host hooks and settings; remove only C3-owned handlers.
4892
- if profile.supports_hooks and profile.settings_path:
4946
+ elif profile.supports_hooks and profile.settings_path:
4893
4947
  settings_path = target / profile.settings_path
4894
4948
  if settings_path.exists():
4895
4949
  try:
@@ -4970,7 +5024,7 @@ def _uninstall_mcp_all(project_path: str, include_global: bool = True):
4970
5024
  print(f" Warning: Could not update {legacy_cfg}: {e}")
4971
5025
 
4972
5026
  # Final pass: clean up empty IDE directories (.claude, .codex, .gemini, .vscode, .github)
4973
- dirs_to_check = [".claude", ".codex", ".gemini", ".vscode", ".github"]
5027
+ dirs_to_check = [".claude", ".codex", ".grok", ".gemini", ".vscode", ".github"]
4974
5028
  for dname in dirs_to_check:
4975
5029
  dpath = target / dname
4976
5030
  if dpath.exists() and dpath.is_dir():
@@ -5011,7 +5065,7 @@ back to native tools as the task progresses.
5011
5065
  - **Filter**: `c3_filter(text=...)` — for terminal output >10 lines
5012
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
5013
5067
  - **Memory**: `c3_memory(action='recall')` — full recall. `index` + `fetch` for token-efficient two-step retrieval
5014
- - **Delegate**: `c3_delegate(task, backend='ollama|codex|gemini|claude|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
5015
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).
5016
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.
5017
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`.
@@ -5466,6 +5520,12 @@ def cmd_install_mcp(args):
5466
5520
  toml_entries["startup_timeout_sec"] = 30
5467
5521
  toml_entries["tool_timeout_sec"] = 60
5468
5522
  toml_entries["args"] += ["--host", "codex"]
5523
+ elif profile.name == "grok":
5524
+ # Grok's default startup timeout is 30s; a cold C3 index build can
5525
+ # exceed it. Its tool timeout already defaults to 6000s.
5526
+ toml_entries["enabled"] = True
5527
+ toml_entries["startup_timeout_sec"] = 60
5528
+ toml_entries["args"] += ["--host", "grok"]
5469
5529
  _upsert_toml_section(
5470
5530
  mcp_config_path,
5471
5531
  f"{profile.config_key}.c3",
@@ -5517,6 +5577,13 @@ def cmd_install_mcp(args):
5517
5577
  from services.codex_integration import install_hooks
5518
5578
  hook_state = install_hooks(target, sys.executable, cli_dir / "hook_dispatch.py")
5519
5579
  print(f"Codex hooks installed; active: {hook_state['active']}. {hook_state['activation']}")
5580
+ if profile.name == "grok":
5581
+ from services.grok_integration import install_hooks as install_grok_hooks
5582
+ grok_hooks = install_grok_hooks(target, sys.executable, cli_dir / "hook_dispatch.py")
5583
+ from services.artifact_defs import note_pending_write
5584
+ note_pending_write(target, profile.settings_path, "install_mcp")
5585
+ print(f"Wrote {target / profile.settings_path}")
5586
+ print(f"Grok Build: {grok_hooks['activation']}")
5520
5587
  if profile.name == "claude-code" and profile.supports_hooks and profile.settings_path:
5521
5588
  settings_dir = target / Path(profile.settings_path).parent
5522
5589
  settings_dir.mkdir(parents=True, exist_ok=True)
@@ -5812,8 +5879,8 @@ def cmd_install_mcp(args):
5812
5879
  print(f"Wrote {vscode_settings_path}")
5813
5880
  print(" Copilot: C3 instructions linked for code gen, review, and test generation")
5814
5881
 
5815
- # ── Codex AGENTS.md enforcement file ──────────────────────
5816
- if profile.name == "codex":
5882
+ # ── Codex / Grok Build AGENTS.md enforcement file ────────────
5883
+ if profile.name in ("codex", "grok"):
5817
5884
  agents_md_path = target / "AGENTS.md"
5818
5885
  agents_state = _ensure_codex_agents_workflow(agents_md_path,
5819
5886
  str(target))
@@ -5824,6 +5891,7 @@ def cmd_install_mcp(args):
5824
5891
  else:
5825
5892
  print(f"Kept {agents_md_path} (C3 workflow present)")
5826
5893
 
5894
+ if profile.name == "codex":
5827
5895
  # Warn about a common conflict: global Codex config disables c3.
5828
5896
  global_codex_cfg = Path(os.environ.get("CODEX_HOME") or Path.home() / ".codex") / "config.toml"
5829
5897
  global_enabled = _toml_section_bool_value(global_codex_cfg, "mcp_servers.c3", "enabled")
@@ -5855,6 +5923,20 @@ def cmd_install_mcp(args):
5855
5923
  except Exception as e:
5856
5924
  print(f"Warning: Could not install /terse skill: {e}")
5857
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
+
5858
5940
  print(f"IDE: {profile.display_name}")
5859
5941
  print(f"MCP Mode: {mcp_mode}")
5860
5942
  print(f"Server: {server_script}")
@@ -9303,7 +9385,10 @@ def _launch_tui() -> None:
9303
9385
 
9304
9386
 
9305
9387
  def cmd_doctor(args):
9306
- from services.codex_integration import diagnose
9388
+ if getattr(args, "ide", "codex") == "grok":
9389
+ from services.grok_integration import diagnose
9390
+ else:
9391
+ from services.codex_integration import diagnose
9307
9392
  print(json.dumps(diagnose(Path(args.project_path).resolve()), indent=2))
9308
9393
 
9309
9394
 
@@ -9354,6 +9439,7 @@ def main():
9354
9439
  "search-eval": cmd_search_eval,
9355
9440
  "shell-eval": cmd_shell_eval,
9356
9441
  "map-eval": cmd_map_eval,
9442
+ "delegate-eval": cmd_delegate_eval,
9357
9443
  "benchmark": cmd_benchmark,
9358
9444
  "session-benchmark": cmd_session_benchmark,
9359
9445
  "benchmark-e2e": cmd_benchmark_e2e,
@@ -17,15 +17,15 @@ def build_parser(version: str, parse_cli_ide_arg):
17
17
  )
18
18
  subparsers = parser.add_subparsers(dest="command")
19
19
 
20
- p_doctor = subparsers.add_parser("doctor", help="Inspect native Codex integration without a model call")
20
+ p_doctor = subparsers.add_parser("doctor", help="Inspect native Codex or Grok Build integration without a model call")
21
21
  p_doctor.add_argument("project_path", nargs="?", default=".")
22
- p_doctor.add_argument("--ide", choices=["codex"], default="codex")
22
+ p_doctor.add_argument("--ide", choices=["codex", "grok"], default="codex")
23
23
 
24
24
  p_init = subparsers.add_parser("init", help="Initialize C3 for a project")
25
25
  p_init.add_argument("project_path", nargs="?", default=".")
26
26
  p_init.add_argument("--force", action="store_true", help="Skip prompts and apply update non-interactively")
27
27
  p_init.add_argument("--clear", action="store_true", help="Remove all C3 files and exit without rebuilding")
28
- p_init.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity}", help="Target IDE for MCP config (default: auto-detect)")
28
+ p_init.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity,grok}", help="Target IDE for MCP config (default: auto-detect)")
29
29
  p_init.add_argument("--mcp-mode", choices=["direct", "proxy"], default="direct", help="Default MCP mode if install is selected during init (default: direct)")
30
30
  p_init.add_argument("--git", action="store_true", help="Initialize a local Git repository during init/update")
31
31
  p_init.add_argument("--no-embed", action="store_true", help="Skip building the semantic embedding index during init")
@@ -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",
@@ -153,19 +173,21 @@ def build_parser(version: str, parse_cli_ide_arg):
153
173
 
154
174
  p_install_mcp = subparsers.add_parser("install-mcp", help="Generate MCP config for your IDE")
155
175
  p_install_mcp.add_argument("targets", nargs="*", help="Optional project path and/or IDE shorthand (for example: `claude` or `. codex`)")
156
- p_install_mcp.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity}", help="Target IDE (default: auto-detect)")
176
+ p_install_mcp.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity,grok}", help="Target IDE (default: auto-detect)")
157
177
  p_install_mcp.add_argument("--mcp-mode", choices=["direct", "proxy"], default="direct", help="MCP entrypoint mode (default: direct)")
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")
164
- p_mcp_install.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity}", help="Target IDE (default: auto-detect)")
185
+ p_mcp_install.add_argument("--ide", default="auto", type=parse_cli_ide_arg, metavar="{auto,claude,vscode,cursor,codex,antigravity,grok}", help="Target IDE (default: auto-detect)")
165
186
  p_mcp_install.add_argument("--mcp-mode", choices=["direct", "proxy"], default="direct", help="MCP entrypoint mode (default: direct)")
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')")
@@ -789,7 +789,7 @@
789
789
  <h1 id="overview">Code <span>Companion</span></h1>
790
790
  <div class="subtitle">
791
791
  A local code intelligence system that reduces AI coding assistant token usage through compression,
792
- indexing, and persistent memory. Works with <strong>Claude Code</strong>, <strong>Google Antigravity</strong>,
792
+ indexing, and persistent memory. Works with <strong>Claude Code</strong>, <strong>OpenAI Codex</strong>, <strong>Grok Build</strong>, <strong>Google Antigravity</strong>,
793
793
  <strong>VS Code Copilot</strong>, and <strong>Cursor</strong> via MCP. Available as an <strong>MCP
794
794
  server</strong>,
795
795
  <strong>CLI</strong>, and <strong>web dashboard</strong>.
@@ -958,7 +958,9 @@ c3 init /path/to/your/project</code></pre>
958
958
  <code>.github/copilot-instructions.md</code> (hard enforcement language) and
959
959
  <code>.vscode/settings.json</code> (Copilot instruction links). For Codex, generates
960
960
  <code>AGENTS.md</code> with the C3 session protocol. Use <code>--ide vscode</code>,
961
- <code>--ide cursor</code>, or <code>--ide codex</code> to override IDE detection.
961
+ <code>--ide cursor</code>, <code>--ide codex</code>, or <code>--ide grok</code> to override IDE detection.
962
+ For Grok Build, writes <code>.grok/config.toml</code>, <code>.grok/hooks/c3.json</code> and
963
+ <code>AGENTS.md</code>.
962
964
  </div>
963
965
  </div>
964
966
  </div>
@@ -968,7 +970,9 @@ c3 init /path/to/your/project</code></pre>
968
970
  <div class="step-desc">Open your IDE in the project. For Claude Code, run <code>/mcp</code> to verify C3
969
971
  tools appear. For Google Antigravity, the MCP tools will be loaded based on your config.
970
972
  For VS Code, check MCP tools in the Copilot agent panel. For Codex, the <code>.codex/config.toml</code> is
971
- picked up automatically on next session start.</div>
973
+ picked up automatically on next session start. For Grok Build, launch <code>grok --trust</code> once in
974
+ the project (Grok ignores project MCP servers, hooks and <code>AGENTS.md</code> in an untrusted folder),
975
+ then run <code>c3 doctor --ide grok</code>.</div>
972
976
  </div>
973
977
  </div>
974
978
  </div>
@@ -1016,8 +1020,16 @@ c3 init /path/to/your/project</code></pre>
1016
1020
  <td><strong>OpenAI Codex</strong></td>
1017
1021
  <td><code>.codex/config.toml</code></td>
1018
1022
  <td><code>AGENTS.md</code></td>
1019
- <td>—</td>
1020
- <td>No</td>
1023
+ <td><code>.codex/hooks.json</code></td>
1024
+ <td>Yes</td>
1025
+ <td>Yes</td>
1026
+ </tr>
1027
+ <tr>
1028
+ <td><strong>Grok Build</strong></td>
1029
+ <td><code>.grok/config.toml</code></td>
1030
+ <td><code>AGENTS.md</code></td>
1031
+ <td><code>.grok/hooks/c3.json</code></td>
1032
+ <td>Yes (after <code>grok --trust</code>)</td>
1021
1033
  <td>No</td>
1022
1034
  </tr>
1023
1035
  <tr>
@@ -1050,11 +1062,13 @@ python cli/c3.py install-mcp /path/to/project --ide vscode
1050
1062
  python cli/c3.py install-mcp /path/to/project --ide cursor
1051
1063
  python cli/c3.py install-mcp /path/to/project --ide claude
1052
1064
  python cli/c3.py install-mcp /path/to/project --ide codex
1065
+ python cli/c3.py install-mcp /path/to/project --ide grok
1053
1066
  python cli/c3.py install-mcp /path/to/project --ide antigravity
1054
1067
 
1055
1068
  # IDE shorthand when already inside the project directory
1056
1069
  python cli/c3.py install-mcp claude
1057
1070
  python cli/c3.py install-mcp codex
1071
+ python cli/c3.py install-mcp grok
1058
1072
  python cli/c3.py install-mcp . antigravity</code></pre>
1059
1073
 
1060
1074
  <p><code>--git</code> runs a local-only <code>git init</code>. It does not create remotes or connect to GitHub,
@@ -1111,6 +1125,32 @@ python cli/c3.py install-mcp . antigravity</code></pre>
1111
1125
  </li>
1112
1126
  </ul>
1113
1127
 
1128
+ <p><strong>Grok Build</strong> &mdash; <code>install-mcp --ide grok</code> (and <code>c3 init --ide grok</code>)
1129
+ configure xAI's <code>grok</code> CLI. Everything is project-local:</p>
1130
+ <ul>
1131
+ <li><code>.grok/config.toml</code> &mdash; a <code>[mcp_servers.c3]</code> table (the same TOML shape as Codex)
1132
+ with <code>--host grok</code> and <code>startup_timeout_sec = 60</code>. Other servers and keys are kept.
1133
+ Auto-detected when <code>.grok/config.toml</code> or a <code>.grok/</code> directory exists.
1134
+ </li>
1135
+ <li><code>.grok/hooks/c3.json</code> &mdash; C3's handlers for PreToolUse, PostToolUse, SessionStart,
1136
+ PreCompact, Stop and SessionEnd. C3 owns the whole file. On Windows each command is a
1137
+ <code>powershell.exe -NoLogo -NoProfile -NonInteractive -EncodedCommand</code> line so it runs under
1138
+ whichever shell Grok picks.
1139
+ </li>
1140
+ <li><code>AGENTS.md</code> &mdash; shared with Codex and Antigravity; only the C3 block is refreshed.</li>
1141
+ <li><strong>Folder trust</strong> &mdash; Grok loads none of these until the folder is trusted. Launch
1142
+ <code>grok --trust</code> once in the project (or run <code>/hooks-trust</code> inside Grok). C3 never
1143
+ writes <code>~/.grok/trusted_folders.toml</code> or <code>~/.grok/config.toml</code>;
1144
+ <code>c3 doctor --ide grok</code> reports the CLI version, hook install and trust state.
1145
+ </li>
1146
+ <li><strong>Limitations</strong> &mdash; C3 tools are reached through Grok's <code>search_tool</code> /
1147
+ <code>use_tool</code> and appear as <code>c3__c3_search</code> and so on; PreToolUse hints reach the model
1148
+ after the call runs (denies still block before it); there is no prompt-time memory recall; Stop-hook output
1149
+ is never emitted; with both <code>AGENTS.md</code> and <code>CLAUDE.md</code> present, Grok loads the C3
1150
+ block twice. Full guide: <code>docs/grok-native.md</code>.
1151
+ </li>
1152
+ </ul>
1153
+
1114
1154
  <h3>Graceful Degradation</h3>
1115
1155
  <p>All core C3 tools (search, compress, file_map, memory, sessions) work identically in every IDE. Claude-specific
1116
1156
  features degrade gracefully:</p>
@@ -1118,7 +1158,7 @@ python cli/c3.py install-mcp . antigravity</code></pre>
1118
1158
  <li><strong>Transcript search</strong> — returns a helpful message suggesting <code>c3_memory(action='recall')</code> or
1119
1159
  <code>c3_memory(action='query')</code> as alternatives
1120
1160
  </li>
1121
- <li><strong>Hooks</strong> — only installed for Claude Code; VS Code, Cursor, and Codex use hard-language
1161
+ <li><strong>Hooks</strong> — installed for Claude Code, Codex and Grok Build; VS Code and Cursor use hard-language
1122
1162
  workflow instructions in their instructions file instead</li>
1123
1163
  <li><strong>Instructions file</strong> — <code>c3_claudemd_generate</code> writes to the IDE-appropriate file
1124
1164
  (CLAUDE.md, copilot-instructions.md, .cursorrules, AGENTS.md, or GEMINI.md). All IDEs use MANDATORY/NEVER
@@ -2053,10 +2093,12 @@ c3 ui /path/to/your/project --silent # Hide API request logs in terminal
2053
2093
  <div class="tab-name"><span class="badge badge-green">11</span> Settings</div>
2054
2094
  <div class="tab-desc">Project info (editable name, tech stack, description), quick actions (rebuild index,
2055
2095
  save instructions file), project data management (view sizes and item counts per .c3/ category, clear
2056
- actions), instructions file management, and MCP management: target IDE selector (Claude/Gemini/VS
2057
- Code/Cursor/Codex/Antigravity), custom MCP add form, installed MCP cards, and per-card trash removal.
2096
+ actions), instructions file management, and MCP management: target IDE selector (Claude/VS
2097
+ Code/Cursor/Codex/Grok Build/Antigravity), custom MCP add form, installed MCP cards, and per-card trash removal.
2058
2098
  Removing <code>c3</code> can also clean related IDE files/hooks. Includes IDE selector for C3 MCP
2059
- installation and optimization suggestions.</div>
2099
+ installation and optimization suggestions. Delegate backend sections (Codex, Gemini, Grok Build) hold each
2100
+ backend's enable switch, model, timeouts and auto-routed task types; the Grok Build section adds max turns
2101
+ and the write-mode switch (<code>grok_allow_write</code>).</div>
2060
2102
  </div>
2061
2103
  </div>
2062
2104
 
@@ -2595,13 +2637,13 @@ c3 ui /path/to/your/project --silent # Hide API request logs in terminal
2595
2637
  </p>
2596
2638
 
2597
2639
  <h3>Project Setup</h3>
2598
- <pre><code>c3 init &lt;project_path&gt; [--ide auto|claude|vscode|cursor|codex|gemini] [--force]
2640
+ <pre><code>c3 init &lt;project_path&gt; [--ide auto|claude|vscode|cursor|codex|grok|antigravity] [--force]
2599
2641
  # Initialize C3: builds index, creates config, generates instructions file,
2600
2642
  # and automatically installs the MCP config for your IDE.
2601
2643
  # Re-running on an existing project now migrates config defaults and
2602
2644
  # refreshes instruction workflow files (Update / Clear / Reset options).
2603
2645
  c3 index [--max-files 500] # Rebuild the code index
2604
- c3 install-mcp [project_path] [ide] [--ide auto|claude|vscode|cursor|codex|gemini] # (Re-)generate MCP config manually
2646
+ c3 install-mcp [project_path] [ide] [--ide auto|claude|vscode|cursor|codex|grok|antigravity] # (Re-)generate MCP config manually
2605
2647
  c3 ui [project_path] [--port 3333] [--nano] [--silent] # Launch web dashboard (full or nano)</code></pre>
2606
2648
 
2607
2649
  <h3>Compression &amp; Search</h3>
@@ -2652,7 +2694,7 @@ c3 session load | claude --resume</code></pre>
2652
2694
 
2653
2695
  <div class="arch">
2654
2696
  <pre>
2655
- <strong>IDE</strong> (Claude Code / VS Code Copilot / Cursor / Codex / Gemini CLI)
2697
+ <strong>IDE</strong> (Claude Code / VS Code Copilot / Cursor / Codex / Grok Build / Antigravity)
2656
2698
  | MCP Protocol (IDE-specific config file)
2657
2699
  v
2658
2700
  <strong>MCP Proxy</strong> ──── Dynamic tool filtering + context injection (optional, opt-in via MCP config)
@@ -2872,7 +2914,7 @@ c3 session load | claude --resume</code></pre>
2872
2914
  protocol.py # Compression protocol encoder/decoder
2873
2915
  core/
2874
2916
  __init__.py # Token counting utilities
2875
- ide.py # IDE profile registry (Claude Code, VS Code, Cursor, Codex) + auto-detection
2917
+ ide.py # IDE profile registry (Claude Code, VS Code, Cursor, Codex, Antigravity, Grok Build) + auto-detection
2876
2918
  config.py # Hybrid, proxy, delegate, and agent configuration loaders
2877
2919
  install.bat # Windows installer
2878
2920
  install.sh # Linux/macOS installer
@@ -3023,8 +3065,11 @@ c3 session load | claude --resume</code></pre>
3023
3065
  <ul>
3024
3066
  <li>Make sure the MCP config file exists (<code>.mcp.json</code> for Claude Code,
3025
3067
  <code>.vscode/mcp.json</code> for VS Code, <code>.cursor/mcp.json</code> for Cursor,
3026
- <code>.codex/config.toml</code> for Codex)
3068
+ <code>.codex/config.toml</code> for Codex, <code>.grok/config.toml</code> for Grok Build)
3027
3069
  </li>
3070
+ <li>For Grok Build, trust the folder first (<code>grok --trust</code> or <code>/hooks-trust</code>), then
3071
+ check <code>c3 doctor --ide grok</code>, <code>grok mcp doctor c3 --json</code> and <code>grok inspect</code>.
3072
+ Run <code>/hooks</code> inside Grok to see whether C3's hooks loaded.</li>
3028
3073
  <li>Check that the Python path in the config is correct (<code>"command"</code> field for JSON configs;
3029
3074
  <code>command</code> key for Codex TOML)
3030
3075
  </li>