code-context-control 2.81.0__tar.gz → 2.82.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 (429) hide show
  1. {code_context_control-2.81.0/code_context_control.egg-info → code_context_control-2.82.0}/PKG-INFO +1 -1
  2. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/c3.py +4 -2
  3. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_server.py +3 -6
  4. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_ci.js +25 -7
  5. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/ci.py +22 -9
  6. {code_context_control-2.81.0 → code_context_control-2.82.0/code_context_control.egg-info}/PKG-INFO +1 -1
  7. {code_context_control-2.81.0 → code_context_control-2.82.0}/pyproject.toml +1 -1
  8. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ci_workflow.py +56 -8
  9. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ci_act.py +68 -0
  10. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ci_runner.py +1 -1
  11. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ci_workflow.py +5 -1
  12. {code_context_control-2.81.0 → code_context_control-2.82.0}/LICENSE +0 -0
  13. {code_context_control-2.81.0 → code_context_control-2.82.0}/README.md +0 -0
  14. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/__init__.py +0 -0
  15. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/_hook_utils.py +0 -0
  16. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/commands/__init__.py +0 -0
  17. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/commands/common.py +0 -0
  18. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/commands/parser.py +0 -0
  19. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/docs.html +0 -0
  20. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/edits.html +0 -0
  21. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/access.html +0 -0
  22. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/bitbucket.html +0 -0
  23. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/credentials.html +0 -0
  24. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/getting-started.html +0 -0
  25. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/index.html +0 -0
  26. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/masking.html +0 -0
  27. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/oracle.html +0 -0
  28. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/shared.css +0 -0
  29. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/tools.html +0 -0
  30. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/guide/workflow.html +0 -0
  31. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_access_guard.py +0 -0
  32. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_artifact.py +0 -0
  33. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_auto_snapshot.py +0 -0
  34. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_c3_signal.py +0 -0
  35. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_c3read.py +0 -0
  36. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_dispatch.py +0 -0
  37. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_edit_ledger.py +0 -0
  38. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_edit_unlock.py +0 -0
  39. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_filter.py +0 -0
  40. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_ghost_files.py +0 -0
  41. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_pretool_enforce.py +0 -0
  42. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_prompt_recall.py +0 -0
  43. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_read.py +0 -0
  44. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_session_stats.py +0 -0
  45. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hook_terse_advisor.py +0 -0
  46. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/app.js +0 -0
  47. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/add_project.js +0 -0
  48. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/config_editor.js +0 -0
  49. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
  50. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_health.js +0 -0
  51. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_panel.js +0 -0
  52. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
  53. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_tasks.js +0 -0
  54. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_views.js +0 -0
  55. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/global_search.js +0 -0
  56. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_credentials.js +0 -0
  57. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
  58. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_locks.js +0 -0
  59. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/mcp_manager.js +0 -0
  60. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/modals.js +0 -0
  61. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/project_card.js +0 -0
  62. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/project_tree.js +0 -0
  63. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/session_drawer.js +0 -0
  64. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/settings_modal.js +0 -0
  65. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/sidebar.js +0 -0
  66. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/summary_bar.js +0 -0
  67. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/task_board.js +0 -0
  68. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/toasts.js +0 -0
  69. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/components/topbar.js +0 -0
  70. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui/state.js +0 -0
  71. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/hub_ui.html +0 -0
  72. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/mcp_proxy.py +0 -0
  73. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/mcp_server.py +0 -0
  74. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/progress.py +0 -0
  75. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/server.py +0 -0
  76. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/__init__.py +0 -0
  77. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/_grants.py +0 -0
  78. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/_helpers.py +0 -0
  79. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/agent.py +0 -0
  80. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/artifacts.py +0 -0
  81. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/bitbucket.py +0 -0
  82. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/compress.py +0 -0
  83. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/credentials.py +0 -0
  84. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/delegate.py +0 -0
  85. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/edit.py +0 -0
  86. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/edit_verify.py +0 -0
  87. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/edits.py +0 -0
  88. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/federate.py +0 -0
  89. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/filter.py +0 -0
  90. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/impact.py +0 -0
  91. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/jira.py +0 -0
  92. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/locks.py +0 -0
  93. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/memory.py +0 -0
  94. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/override.py +0 -0
  95. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/project.py +0 -0
  96. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/read.py +0 -0
  97. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/search.py +0 -0
  98. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/session.py +0 -0
  99. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/shell.py +0 -0
  100. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/status.py +0 -0
  101. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/tasks.py +0 -0
  102. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/tools/validate.py +0 -0
  103. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/api.js +0 -0
  104. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/app.js +0 -0
  105. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/access.js +0 -0
  106. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/bitbucket.js +0 -0
  107. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/chat.js +0 -0
  108. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/credentials.js +0 -0
  109. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/dashboard.js +0 -0
  110. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/edits.js +0 -0
  111. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/enforcement.js +0 -0
  112. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/instructions.js +0 -0
  113. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/jira.js +0 -0
  114. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/memory.js +0 -0
  115. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/sessions.js +0 -0
  116. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/settings.js +0 -0
  117. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/sidebar.js +0 -0
  118. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/components/tasks.js +0 -0
  119. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/icons.js +0 -0
  120. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/pm_shared.js +0 -0
  121. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/shared.js +0 -0
  122. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui/theme.js +0 -0
  123. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui.html +0 -0
  124. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui_legacy.html +0 -0
  125. {code_context_control-2.81.0 → code_context_control-2.82.0}/cli/ui_nano.html +0 -0
  126. {code_context_control-2.81.0 → code_context_control-2.82.0}/code_context_control.egg-info/SOURCES.txt +0 -0
  127. {code_context_control-2.81.0 → code_context_control-2.82.0}/code_context_control.egg-info/dependency_links.txt +0 -0
  128. {code_context_control-2.81.0 → code_context_control-2.82.0}/code_context_control.egg-info/entry_points.txt +0 -0
  129. {code_context_control-2.81.0 → code_context_control-2.82.0}/code_context_control.egg-info/requires.txt +0 -0
  130. {code_context_control-2.81.0 → code_context_control-2.82.0}/code_context_control.egg-info/top_level.txt +0 -0
  131. {code_context_control-2.81.0 → code_context_control-2.82.0}/core/__init__.py +0 -0
  132. {code_context_control-2.81.0 → code_context_control-2.82.0}/core/config.py +0 -0
  133. {code_context_control-2.81.0 → code_context_control-2.82.0}/core/ide.py +0 -0
  134. {code_context_control-2.81.0 → code_context_control-2.82.0}/core/mcp_toml.py +0 -0
  135. {code_context_control-2.81.0 → code_context_control-2.82.0}/core/web_security.py +0 -0
  136. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/__init__.py +0 -0
  137. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/config.py +0 -0
  138. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/mcp_oracle.py +0 -0
  139. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/oracle_server.py +0 -0
  140. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/oracle_ui.html +0 -0
  141. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/__init__.py +0 -0
  142. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/activity_reporter.py +0 -0
  143. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/api_auth.py +0 -0
  144. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/c3_bridge.py +0 -0
  145. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/chat_engine.py +0 -0
  146. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/chat_poll.py +0 -0
  147. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/chat_store.py +0 -0
  148. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/cross_memory.py +0 -0
  149. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/discovery_audit.py +0 -0
  150. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/federated_graph.py +0 -0
  151. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/health_checker.py +0 -0
  152. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/insight_engine.py +0 -0
  153. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/local_session.py +0 -0
  154. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/memory_reader.py +0 -0
  155. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/memory_writer.py +0 -0
  156. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/mobile_api.py +0 -0
  157. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/project_scanner.py +0 -0
  158. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/review_agent.py +0 -0
  159. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/tool_executor.py +0 -0
  160. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/services/tool_registry.py +0 -0
  161. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/activity.js +0 -0
  162. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/agents.js +0 -0
  163. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/app.js +0 -0
  164. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/busy.js +0 -0
  165. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/chat/conversations.js +0 -0
  166. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/chat/input.js +0 -0
  167. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/chat/markdown.js +0 -0
  168. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/chat/send.js +0 -0
  169. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/chat/stream_renderer.js +0 -0
  170. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/chat/toolbar.js +0 -0
  171. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/core.js +0 -0
  172. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/crossgraph.js +0 -0
  173. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/header.js +0 -0
  174. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/insights.js +0 -0
  175. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/projects.js +0 -0
  176. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/qrcode.js +0 -0
  177. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/settings.js +0 -0
  178. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/suggestions.js +0 -0
  179. {code_context_control-2.81.0 → code_context_control-2.82.0}/oracle/ui/theme_tabs.js +0 -0
  180. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/__init__.py +0 -0
  181. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/access_guard.py +0 -0
  182. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/access_telemetry.py +0 -0
  183. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/activity_log.py +0 -0
  184. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/agent_base.py +0 -0
  185. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/agent_locks.py +0 -0
  186. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/agents.py +0 -0
  187. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/artifact_defs.py +0 -0
  188. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/artifact_store.py +0 -0
  189. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/auto_memory.py +0 -0
  190. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/bench/__init__.py +0 -0
  191. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/bench/external/__init__.py +0 -0
  192. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/bench/external/aider_polyglot.py +0 -0
  193. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/bench/external/swe_bench.py +0 -0
  194. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/benchmark_dashboard.py +0 -0
  195. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/bitbucket_client.py +0 -0
  196. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/bitbucket_credentials.py +0 -0
  197. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ci_act.py +0 -0
  198. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ci_expr.py +0 -0
  199. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ci_failures.py +0 -0
  200. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ci_runner.py +0 -0
  201. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/circuit_breaker.py +0 -0
  202. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/claude_md.py +0 -0
  203. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/compressor.py +0 -0
  204. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/context_snapshot.py +0 -0
  205. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/conversation_store.py +0 -0
  206. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/credential_store.py +0 -0
  207. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/doc_index.py +0 -0
  208. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/e2e_benchmark.py +0 -0
  209. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/e2e_evaluator.py +0 -0
  210. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/e2e_tasks.py +0 -0
  211. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/edit_ledger.py +0 -0
  212. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/embedding_index.py +0 -0
  213. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/enforcement_policy.py +0 -0
  214. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/error_reporting.py +0 -0
  215. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/file_memory.py +0 -0
  216. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/git_context.py +0 -0
  217. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/hub_service.py +0 -0
  218. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/indexer.py +0 -0
  219. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/jira_client.py +0 -0
  220. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/jira_cloud.py +0 -0
  221. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/jira_credentials.py +0 -0
  222. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/jira_data_center.py +0 -0
  223. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/jira_links.py +0 -0
  224. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/mask_activation.py +0 -0
  225. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/mask_mirror.py +0 -0
  226. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/mask_presets.py +0 -0
  227. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory.py +0 -0
  228. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory_consolidator.py +0 -0
  229. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory_distiller.py +0 -0
  230. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory_graph.py +0 -0
  231. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory_grounder.py +0 -0
  232. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory_queue.py +0 -0
  233. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/memory_scorer.py +0 -0
  234. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/metrics.py +0 -0
  235. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/notifications.py +0 -0
  236. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ollama_bridge.py +0 -0
  237. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ollama_client.py +0 -0
  238. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/ollama_credentials.py +0 -0
  239. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/output_filter.py +0 -0
  240. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/override_grants.py +0 -0
  241. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/override_policy.py +0 -0
  242. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/override_requests.py +0 -0
  243. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/override_wake.py +0 -0
  244. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/parser.py +0 -0
  245. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/project_manager.py +0 -0
  246. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/project_runtime.py +0 -0
  247. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/protocol.py +0 -0
  248. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/proxy_state.py +0 -0
  249. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/repo_map.py +0 -0
  250. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/retention.py +0 -0
  251. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/retrieval_broker.py +0 -0
  252. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/router.py +0 -0
  253. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/runtime.py +0 -0
  254. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/scanner.py +0 -0
  255. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/session_benchmark.py +0 -0
  256. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/session_manager.py +0 -0
  257. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/session_preloader.py +0 -0
  258. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/subprojects.py +0 -0
  259. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/task_store.py +0 -0
  260. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/telemetry.py +0 -0
  261. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/text_index.py +0 -0
  262. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/time_tracker.py +0 -0
  263. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/tool_classifier.py +0 -0
  264. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/transcript_index.py +0 -0
  265. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/validation_cache.py +0 -0
  266. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/vector_store.py +0 -0
  267. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/watcher.py +0 -0
  268. {code_context_control-2.81.0 → code_context_control-2.82.0}/services/win_subprocess.py +0 -0
  269. {code_context_control-2.81.0 → code_context_control-2.82.0}/setup.cfg +0 -0
  270. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_access_builtin_optout.py +0 -0
  271. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_access_guard.py +0 -0
  272. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_access_guard_meta.py +0 -0
  273. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_access_guard_shell_project.py +0 -0
  274. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_access_guard_surfaces.py +0 -0
  275. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_access_guard_wiring.py +0 -0
  276. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_activity_reporter.py +0 -0
  277. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_agent_locks.py +0 -0
  278. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_aider_polyglot.py +0 -0
  279. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_antigravity_transition.py +0 -0
  280. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_artifact_store.py +0 -0
  281. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_artifact_tool.py +0 -0
  282. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_bitbucket_cli_smoke.py +0 -0
  283. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_bitbucket_client.py +0 -0
  284. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_bitbucket_config_fallback.py +0 -0
  285. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_bitbucket_credentials.py +0 -0
  286. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_bitbucket_tool.py +0 -0
  287. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
  288. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_c3_shell.py +0 -0
  289. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_chat_poll.py +0 -0
  290. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ci_expr.py +0 -0
  291. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_circuit_breaker.py +0 -0
  292. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_claude_md_merge.py +0 -0
  293. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_cli_smoke.py +0 -0
  294. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_compressor_large_file.py +0 -0
  295. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_credential_store.py +0 -0
  296. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_credentials_routes.py +0 -0
  297. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_credentials_tool.py +0 -0
  298. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_creds_cli_smoke.py +0 -0
  299. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_delegate_cascade.py +0 -0
  300. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_delegate_version_probe.py +0 -0
  301. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_e2e_benchmark.py +0 -0
  302. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_edit_ledger_deadline.py +0 -0
  303. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_edit_ledger_hook.py +0 -0
  304. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_edit_locking.py +0 -0
  305. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_edit_normalization.py +0 -0
  306. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_edit_verify.py +0 -0
  307. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_embedding_index_deadlock.py +0 -0
  308. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_enforcement_flip.py +0 -0
  309. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_enforcement_policy.py +0 -0
  310. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_enforcement_routes.py +0 -0
  311. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_federated_graph.py +0 -0
  312. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_filter_backoff.py +0 -0
  313. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ghost_files.py +0 -0
  314. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ghost_generation.py +0 -0
  315. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_git_branch_awareness.py +0 -0
  316. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_access_guard.py +0 -0
  317. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_codex_compat.py +0 -0
  318. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_dispatch.py +0 -0
  319. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_pretool_enforce.py +0 -0
  320. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_prompt_recall.py +0 -0
  321. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_smoke.py +0 -0
  322. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_state.py +0 -0
  323. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hook_utf8_stdio.py +0 -0
  324. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_credentials_route.py +0 -0
  325. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_credentials_routes_write.py +0 -0
  326. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_enforcement_routes.py +0 -0
  327. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_inspect_api.py +0 -0
  328. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_locks_routes.py +0 -0
  329. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_server_smoke.py +0 -0
  330. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_hub_subproject_links.py +0 -0
  331. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ide_workflow_adaptation.py +0 -0
  332. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_init_scan.py +0 -0
  333. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_install_mcp_entrypoint.py +0 -0
  334. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_cli_smoke.py +0 -0
  335. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_client.py +0 -0
  336. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_config_fallback.py +0 -0
  337. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_credentials.py +0 -0
  338. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_links.py +0 -0
  339. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_routes.py +0 -0
  340. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_jira_tool.py +0 -0
  341. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_lazy_store_init.py +0 -0
  342. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mask_guard.py +0 -0
  343. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mask_routes.py +0 -0
  344. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mask_surfaces.py +0 -0
  345. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mcp_host_guard.py +0 -0
  346. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mcp_memory_timeout.py +0 -0
  347. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mcp_server_smoke.py +0 -0
  348. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mcp_toml.py +0 -0
  349. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_memory_distiller.py +0 -0
  350. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_memory_graph_api.py +0 -0
  351. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_memory_queue.py +0 -0
  352. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_memory_system.py +0 -0
  353. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mobile_api.py +0 -0
  354. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mobile_extras.py +0 -0
  355. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mobile_override_routes.py +0 -0
  356. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_mobile_security_api.py +0 -0
  357. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_no_stale_model_pins.py +0 -0
  358. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_notification_dedup.py +0 -0
  359. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_notification_discipline.py +0 -0
  360. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_ollama_credentials.py +0 -0
  361. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_api_auth.py +0 -0
  362. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_apikey_api.py +0 -0
  363. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_c3_bridge.py +0 -0
  364. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_chat_engine.py +0 -0
  365. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_chat_store.py +0 -0
  366. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_discovery_api.py +0 -0
  367. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_discovery_audit.py +0 -0
  368. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_local_auth.py +0 -0
  369. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_ollama_bridge.py +0 -0
  370. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_scanner_cache.py +0 -0
  371. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_security_fixes.py +0 -0
  372. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_session_bootstrap.py +0 -0
  373. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_subproject_awareness.py +0 -0
  374. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_oracle_ui_bundle.py +0 -0
  375. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_output_filter.py +0 -0
  376. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_override_grants.py +0 -0
  377. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_override_grants_mcp.py +0 -0
  378. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_override_requests.py +0 -0
  379. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_override_wake.py +0 -0
  380. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_permissions.py +0 -0
  381. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_pm_api.py +0 -0
  382. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_project_manager.py +0 -0
  383. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_project_manager_merge.py +0 -0
  384. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_project_tool.py +0 -0
  385. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_read_coercion.py +0 -0
  386. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_read_edit_parity.py +0 -0
  387. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_related_facts.py +0 -0
  388. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_repo_map.py +0 -0
  389. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_response_boilerplate.py +0 -0
  390. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_retention.py +0 -0
  391. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_review_digest.py +0 -0
  392. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_service_durability.py +0 -0
  393. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_session_benchmark.py +0 -0
  394. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_session_budget.py +0 -0
  395. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_shell_creds.py +0 -0
  396. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_shell_robustness.py +0 -0
  397. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_subproject_exclusion.py +0 -0
  398. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_subproject_federation.py +0 -0
  399. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_subprojects.py +0 -0
  400. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_swe_bench.py +0 -0
  401. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_task_store.py +0 -0
  402. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_task_tool.py +0 -0
  403. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_time_tracker.py +0 -0
  404. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_token_telemetry.py +0 -0
  405. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_tool_registry.py +0 -0
  406. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_upgrade_and_version.py +0 -0
  407. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_validate.py +0 -0
  408. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_vault_write_guard.py +0 -0
  409. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_version_sync.py +0 -0
  410. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_web_security.py +0 -0
  411. {code_context_control-2.81.0 → code_context_control-2.82.0}/tests/test_windows_reliability.py +0 -0
  412. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/__init__.py +0 -0
  413. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/backend.py +0 -0
  414. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/main.py +0 -0
  415. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/__init__.py +0 -0
  416. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/benchmark_view.py +0 -0
  417. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/claudemd_view.py +0 -0
  418. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/compress_view.py +0 -0
  419. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/index_view.py +0 -0
  420. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/init_view.py +0 -0
  421. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/mcp_view.py +0 -0
  422. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/optimize_view.py +0 -0
  423. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/pipe_view.py +0 -0
  424. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/projects_view.py +0 -0
  425. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/search_view.py +0 -0
  426. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/session_view.py +0 -0
  427. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/stats.py +0 -0
  428. {code_context_control-2.81.0 → code_context_control-2.82.0}/tui/screens/ui_view.py +0 -0
  429. {code_context_control-2.81.0 → code_context_control-2.82.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.81.0
3
+ Version: 2.82.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
@@ -92,7 +92,7 @@ console = Console() if HAS_RICH else None
92
92
  # Config
93
93
  CONFIG_DIR = ".c3"
94
94
  CONFIG_FILE = ".c3/config.json"
95
- __version__ = "2.81.0"
95
+ __version__ = "2.82.0"
96
96
 
97
97
 
98
98
  def _compress_file_cli(compressor, path, mode="smart", **kw):
@@ -6065,7 +6065,9 @@ def _ci_main(args) -> int:
6065
6065
  from services import ci_runner as cr
6066
6066
  from services.ci_workflow import inspect_project
6067
6067
  if sub == "inspect":
6068
- payload = inspect_project(project_path, event=getattr(args, "event", "") or "")
6068
+ payload = inspect_project(
6069
+ project_path, event=getattr(args, "event", "") or "",
6070
+ engine=getattr(args, "engine", "auto") or "auto")
6069
6071
  elif sub in ("run", "rerun"):
6070
6072
  only = None
6071
6073
  if sub == "rerun":
@@ -1321,12 +1321,9 @@ def api_ci_inspect():
1321
1321
  except ValueError as e:
1322
1322
  return jsonify({"error": str(e)}), 404
1323
1323
  try:
1324
- from services import ci_act
1325
- data = inspect_project(resolved)
1326
- # The UI has to be able to say WHY a job cannot run here, and
1327
- # "install act" is a different answer from "macOS is impossible".
1328
- data["engines"] = ci_act.availability()
1329
- return jsonify(data)
1324
+ # inspect_project owns the engine partition, so the Hub, the CLI
1325
+ # and the tool text can never disagree about what is runnable.
1326
+ return jsonify(inspect_project(resolved))
1330
1327
  except Exception as e:
1331
1328
  return jsonify({"error": f"{type(e).__name__}: {e}"}), 500
1332
1329
 
@@ -18,6 +18,11 @@ const CI_STATUS_STYLE = {
18
18
  unsupported: ['UNSUP', 'warn'],
19
19
  foreign: ['OTHER-OS', 'blue'],
20
20
  deselected: ['—', 'textDim'],
21
+ // capability labels, used by the job graph only
22
+ cap_native: ['NATIVE', 'accent'],
23
+ cap_container: ['CONTAINER', 'accent'],
24
+ cap_unreachable: ['OTHER-OS', 'blue'],
25
+ cap_unsupported: ['UNSUP', 'warn'],
21
26
  };
22
27
 
23
28
  function CiStatusPill({ status, title }) {
@@ -143,6 +148,9 @@ function HubCI({ projects, onOpenDrill }) {
143
148
 
144
149
  const jobs = (inspect && inspect.jobs) || [];
145
150
  const engines = inspect && inspect.engines;
151
+ const runnableNative = new Set((inspect && inspect.runnable_native) || []);
152
+ const runnableContainer = new Set((inspect && inspect.runnable_container) || []);
153
+ const unsupportedKeys = new Set(((inspect && inspect.unsupported) || []).map(u => u.key));
146
154
  const runJobs = ((run && run.jobs) || []).filter(j => j.status !== 'deselected');
147
155
 
148
156
  return (
@@ -152,7 +160,8 @@ function HubCI({ projects, onOpenDrill }) {
152
160
  <span style={{ fontSize: 14, color: T.text }}>Local CI</span>
153
161
  <span className="mono" style={{ fontSize: 11, color: T.textMuted }}>
154
162
  {inspect
155
- ? `${(inspect.runnable || []).length} of ${jobs.length} job(s) runnable on ${inspect.host_os}`
163
+ ? `${(inspect.runnable || []).length} of ${jobs.length} runnable here`
164
+ + ` (${runnableNative.size} native, ${runnableContainer.size} container)`
156
165
  : 'loading…'}
157
166
  </span>
158
167
  <div style={{ flex: 1 }} />
@@ -289,13 +298,22 @@ function HubCI({ projects, onOpenDrill }) {
289
298
  display: 'flex', alignItems: 'center', gap: 9, padding: '5px 10px',
290
299
  borderTop: `1px solid ${T.border}`, fontSize: 11,
291
300
  }}>
301
+ {/* Read the server's partition; never re-derive it here. The
302
+ first attempt inferred runnability in JS from act_could_run,
303
+ which means "act has no blockers with this job" and NOT "act
304
+ can run it here" — act only does Linux. Every macOS cell
305
+ rendered as a green PASS it could never earn. */}
292
306
  <CiStatusPill
293
- status={(!j.supported && !j.act_could_run) ? 'unsupported'
294
- : ((j.foreign_runner && !(j.act_could_run && engines && engines.ok))
295
- ? 'foreign' : 'passed')}
296
- title={(!j.supported && !j.act_could_run) ? (j.blockers || []).join('; ')
297
- : (j.act_could_run && !j.supported ? 'the act engine can run this'
298
- : (j.foreign_runner ? `targets ${j.runs_on}` : 'runnable on this host'))} />
307
+ status={runnableNative.has(j.key) ? 'cap_native'
308
+ : runnableContainer.has(j.key) ? 'cap_container'
309
+ : unsupportedKeys.has(j.key) ? 'cap_unsupported'
310
+ : 'cap_unreachable'}
311
+ title={runnableNative.has(j.key) ? 'runnable natively on this host'
312
+ : runnableContainer.has(j.key)
313
+ ? `runs in a container (${j.runs_on}) via act`
314
+ : unsupportedKeys.has(j.key)
315
+ ? (j.blockers || []).join('; ')
316
+ : `targets ${j.runs_on} — no available engine can run it here`} />
299
317
  <span className="mono" style={{ color: T.textMuted }}>{j.key}</span>
300
318
  {!!(j.needs || []).length && (
301
319
  <span className="mono" style={{ fontSize: 10, color: T.textDim }}>
@@ -91,7 +91,7 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
91
91
 
92
92
  # ── inspect ──────────────────────────────────────────────────────────
93
93
  if action in ("", "inspect", "jobs"):
94
- data = inspect_project(project, event=event)
94
+ data = inspect_project(project, event=event, engine=engine)
95
95
  if not data["workflows"]:
96
96
  return finalize(
97
97
  "c3_ci", args,
@@ -105,26 +105,39 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
105
105
  lines.append(f" {wf['name']} [{', '.join(wf['triggers']) or 'no triggers'}]"
106
106
  f" jobs={len(wf['jobs'])}{err}")
107
107
 
108
+ native = set(data.get("runnable_native") or [])
109
+ container = set(data.get("runnable_container") or [])
110
+
108
111
  lines.append("\nJob graph (dependency order):")
109
112
  by_key = {j["key"]: j for j in data["jobs"]}
110
113
  for key in data["order"]:
111
114
  j = by_key[key]
112
115
  needs = f" needs={','.join(j['needs'])}" if j["needs"] else ""
113
- if not j["supported"]:
116
+ if key in native:
117
+ state = "runnable here"
118
+ elif key in container:
119
+ state = "runnable (container)"
120
+ elif not j["supported"] and not j.get("act_could_run"):
114
121
  state = "UNSUPPORTED"
115
- elif j["foreign_runner"]:
116
- state = f"other-OS ({j['runs_on']})"
117
122
  else:
118
- state = "runnable here"
123
+ state = f"other-OS ({j['runs_on']})"
119
124
  lines.append(f" {key:<42} {state}{needs}")
120
125
 
126
+ engines = data.get("engines") or {}
121
127
  lines.append(
122
- f"\nRunnable on this host: {len(data['runnable'])} of {len(data['jobs'])}")
128
+ f"\nRunnable here: {len(data['runnable'])} of {len(data['jobs'])}"
129
+ f" ({len(native)} native, {len(container)} container)")
130
+ if engines.get("ok"):
131
+ lines.append(f" engines: native + act ({engines.get('act_version', '')})")
132
+ else:
133
+ lines.append(
134
+ f" engines: native only — {engines.get('reason', 'act unavailable')}")
123
135
  if data["foreign"]:
124
136
  lines.append(
125
- f" other-OS ({len(data['foreign'])}): these target a different "
126
- "runner. c3_ci(action='run', allow_foreign=true) attempts them "
127
- "anyway and labels the result cross-OS.")
137
+ f" other-OS ({len(data['foreign'])}): these target a runner no "
138
+ "available engine can reproduce. c3_ci(action='run', "
139
+ "allow_foreign=true) attempts them on this OS anyway and labels "
140
+ "the result cross-OS.")
128
141
  if data["unsupported"]:
129
142
  lines.append(f" unsupported ({len(data['unsupported'])}):")
130
143
  for item in data["unsupported"][:8]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-control
3
- Version: 2.81.0
3
+ Version: 2.82.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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-context-control"
7
- version = "2.81.0"
7
+ version = "2.82.0"
8
8
  description = "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."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -455,7 +455,11 @@ def instantiate(workflow: Workflow, event: str = "", git: dict = None) -> list:
455
455
  if job_if:
456
456
  problem = ci_expr.validate(job_if, github_fields)
457
457
  if problem:
458
+ # Blocks on BOTH engines: act evaluates conditions too, and
459
+ # a condition reading a value that does not exist locally
460
+ # (no event) is unjudgeable whatever runs the job.
458
461
  blockers.append(f"job-level {problem}")
462
+ act_blockers.append(f"job-level {problem}")
459
463
 
460
464
  steps: list = []
461
465
  if not isinstance(steps_raw, list):
@@ -686,8 +690,19 @@ def build_dag(workflows, event: str = "", git: dict = None) -> Dag:
686
690
  return Dag(instances=instances)
687
691
 
688
692
 
689
- def inspect_project(project_path, event: str = "") -> dict:
690
- """Everything `c3 ci inspect` needs, as plain data."""
693
+ def inspect_project(project_path, event: str = "", engine: str = "auto") -> dict:
694
+ """Everything `c3 ci inspect` needs, as plain data.
695
+
696
+ Engine-aware on purpose. "Is this job runnable here?" has no answer until
697
+ you know what would run it: a Linux job is out of reach for the native
698
+ shell on Windows and routine for act. Reporting the native count alone
699
+ told users 3 of 15 when the real answer was 11 — so the partition is
700
+ computed once, here, and every surface (tool text, `--json`, the Hub)
701
+ reads the same numbers.
702
+
703
+ `engine='native'` forces the pre-act view, which is what a test wants when
704
+ it must not depend on whether act happens to be installed.
705
+ """
691
706
  files = discover_workflows(project_path)
692
707
  workflows = [parse_workflow(p) for p in files]
693
708
  dag = build_dag([w for w in workflows if not w.error],
@@ -699,18 +714,51 @@ def inspect_project(project_path, event: str = "") -> dict:
699
714
  except CycleError as exc:
700
715
  ordered, cycle = dag.instances, str(exc)
701
716
 
717
+ # Lazy: keeps parsing independent of the execution engines, and avoids
718
+ # paying for a `docker version` probe on every import.
719
+ from services import ci_act
720
+ engines = ci_act.availability() if engine in ("auto", "act") else {
721
+ "ok": False, "reason": "engine='native' — containers not considered"}
722
+ act_ok = bool(engines.get("ok"))
723
+
724
+ native, container, foreign, unsupported = [], [], [], []
725
+ for i in ordered:
726
+ is_linux = runner_os(i.runs_on) == "Linux"
727
+ can_native = i.supported_by("native") and not i.foreign_runner
728
+ can_container = act_ok and is_linux and i.supported_by("act")
729
+
730
+ if can_native:
731
+ native.append(i)
732
+ elif can_container:
733
+ container.append(i)
734
+ else:
735
+ # It cannot run. Two very different reasons, and conflating them
736
+ # sends the reader to the wrong fix: `unsupported` means the job
737
+ # contains something no available engine reproduces, `foreign`
738
+ # means the job is fine but its runner is out of reach. Judge the
739
+ # blockers of the engine that WOULD have been chosen.
740
+ would_use = "act" if (act_ok and is_linux) else "native"
741
+ if not i.supported_by(would_use):
742
+ unsupported.append(i)
743
+ else:
744
+ foreign.append(i)
745
+
702
746
  return {
703
747
  "project": str(project_path),
704
748
  "host_os": host_os(),
749
+ "engines": engines,
705
750
  "workflows": [w.to_dict() for w in workflows],
706
751
  "jobs": [i.to_dict() for i in ordered],
707
752
  "order": [i.key for i in ordered],
708
753
  "cycle": cycle,
709
754
  "unknown_needs": dag.unknown_needs(),
710
- "runnable": [i.key for i in ordered
711
- if i.supported and not i.foreign_runner],
712
- "unsupported": [{"key": i.key, "blockers": i.blockers}
713
- for i in ordered if not i.supported],
714
- "foreign": [{"key": i.key, "runs_on": i.runs_on}
715
- for i in ordered if i.supported and i.foreign_runner],
755
+ # `runnable` is the union what can actually run here, by any engine
756
+ # available. The two breakdowns say how.
757
+ "runnable": [i.key for i in native + container],
758
+ "runnable_native": [i.key for i in native],
759
+ "runnable_container": [i.key for i in container],
760
+ "unsupported": [{"key": i.key,
761
+ "blockers": i.blockers_for("act" if act_ok else "native")}
762
+ for i in unsupported],
763
+ "foreign": [{"key": i.key, "runs_on": i.runs_on} for i in foreign],
716
764
  }
@@ -282,6 +282,74 @@ jobs:
282
282
  self.assertEqual((engine, fidelity), ("native", cr.FIDELITY_CROSS_OS))
283
283
 
284
284
 
285
+ class TestInspectPartition(ActTempProject):
286
+ """The partition every surface reads — tool text, --json, and the Hub.
287
+
288
+ Regression: the Hub re-derived runnability in JavaScript from
289
+ `act_could_run`, which means "act has no blockers with this job" and NOT
290
+ "act can run it here" — act only does Linux. Every macOS cell rendered as a
291
+ green PASS it could never earn. The fix was to compute this once, here,
292
+ and have the UI read it; these tests are what keep that true.
293
+ """
294
+
295
+ def _inspect(self, act_ok: bool):
296
+ workflow(self.tmp, """
297
+ name: CI
298
+ on: [push]
299
+ jobs:
300
+ linux:
301
+ runs-on: ubuntu-latest
302
+ steps:
303
+ - run: echo hi
304
+ mac:
305
+ runs-on: macos-latest
306
+ steps:
307
+ - run: echo hi
308
+ broken:
309
+ runs-on: ubuntu-latest
310
+ steps:
311
+ - run: deploy --token ${{ secrets.TOKEN }}
312
+ """)
313
+ from services.ci_workflow import inspect_project
314
+ with mock.patch.object(ci_act, "availability",
315
+ return_value={"ok": act_ok, "reason": "stubbed"}):
316
+ return inspect_project(self.tmp)
317
+
318
+ def test_macos_is_never_container_runnable_even_with_act(self):
319
+ data = self._inspect(act_ok=True)
320
+ mac = "CI::mac"
321
+ # Host-independent: act has no macOS image, so this can never be
322
+ # containerised anywhere. This is the claim the Hub bug violated.
323
+ self.assertNotIn(mac, data["runnable_container"])
324
+ if host_os() == "Darwin":
325
+ # On a Mac it is simply native — runnable, just not via a container.
326
+ self.assertIn(mac, data["runnable_native"])
327
+ else:
328
+ self.assertNotIn(mac, data["runnable"])
329
+ self.assertIn(mac, [f["key"] for f in data["foreign"]])
330
+
331
+ def test_linux_moves_from_foreign_to_container_when_act_appears(self):
332
+ if host_os() == "Linux":
333
+ self.skipTest("ubuntu-latest is native on a Linux host")
334
+ without = self._inspect(act_ok=False)
335
+ self.assertIn("CI::linux", [f["key"] for f in without["foreign"]])
336
+ with_act = self._inspect(act_ok=True)
337
+ self.assertIn("CI::linux", with_act["runnable_container"])
338
+
339
+ def test_a_job_blocked_on_every_engine_is_unsupported_not_foreign(self):
340
+ # A missing secret is not a reachability problem, and sending the
341
+ # reader to "install act" would be the wrong fix.
342
+ data = self._inspect(act_ok=True)
343
+ self.assertIn("CI::broken", [u["key"] for u in data["unsupported"]])
344
+ self.assertNotIn("CI::broken", [f["key"] for f in data["foreign"]])
345
+
346
+ def test_runnable_is_the_union_of_both_engines(self):
347
+ data = self._inspect(act_ok=True)
348
+ self.assertEqual(
349
+ sorted(data["runnable"]),
350
+ sorted(data["runnable_native"] + data["runnable_container"]))
351
+
352
+
285
353
  class TestAvailability(unittest.TestCase):
286
354
  def test_missing_act_reports_how_to_install_it(self):
287
355
  with mock.patch.object(ci_act, "find_act", return_value=""):
@@ -453,7 +453,7 @@ jobs:
453
453
  out, _ = self._call("inspect")
454
454
  self.assertIn("CI::lint", out)
455
455
  self.assertIn("needs=lint", out)
456
- self.assertIn("Runnable on this host: 2 of 2", out)
456
+ self.assertIn("Runnable here: 2 of 2", out)
457
457
 
458
458
  def test_run_then_failures_then_rerun(self):
459
459
  workflow(self.tmp, f"""
@@ -279,7 +279,11 @@ class TestInspectProject(CiTempProject):
279
279
  f" steps:\n - run: echo ok\n"
280
280
  f" broken:\n runs-on: self-hosted-unknown\n"
281
281
  f" steps:\n - uses: exotic/thing@v1\n")
282
- data = inspect_project(self.tmp)
282
+ # engine="native" pins the pre-container partition. With act installed
283
+ # the Linux job would be containerised instead of refused — correct,
284
+ # and covered in test_ci_act.py — but this test is about the native
285
+ # split and must not depend on what the machine happens to have.
286
+ data = inspect_project(self.tmp, engine="native")
283
287
  self.assertIn("CI::here", data["runnable"])
284
288
  self.assertIn("CI::elsewhere", [f["key"] for f in data["foreign"]])
285
289
  self.assertIn("CI::broken", [u["key"] for u in data["unsupported"]])