code-context-control 2.80.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.80.0/code_context_control.egg-info → code_context_control-2.82.0}/PKG-INFO +2 -2
  2. {code_context_control-2.80.0 → code_context_control-2.82.0}/README.md +1 -1
  3. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/c3.py +12 -4
  4. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/commands/parser.py +12 -0
  5. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_server.py +7 -3
  6. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_ci.js +42 -8
  7. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/mcp_server.py +5 -3
  8. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/ci.py +62 -13
  9. {code_context_control-2.80.0 → code_context_control-2.82.0/code_context_control.egg-info}/PKG-INFO +2 -2
  10. {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/SOURCES.txt +2 -0
  11. {code_context_control-2.80.0 → code_context_control-2.82.0}/pyproject.toml +1 -1
  12. code_context_control-2.82.0/services/ci_act.py +274 -0
  13. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_runner.py +160 -13
  14. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_workflow.py +114 -25
  15. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/claude_md.py +1 -1
  16. code_context_control-2.82.0/tests/test_ci_act.py +486 -0
  17. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ci_runner.py +11 -4
  18. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ci_workflow.py +5 -1
  19. {code_context_control-2.80.0 → code_context_control-2.82.0}/LICENSE +0 -0
  20. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/__init__.py +0 -0
  21. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/_hook_utils.py +0 -0
  22. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/commands/__init__.py +0 -0
  23. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/commands/common.py +0 -0
  24. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/docs.html +0 -0
  25. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/edits.html +0 -0
  26. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/access.html +0 -0
  27. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/bitbucket.html +0 -0
  28. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/credentials.html +0 -0
  29. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/getting-started.html +0 -0
  30. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/index.html +0 -0
  31. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/masking.html +0 -0
  32. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/oracle.html +0 -0
  33. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/shared.css +0 -0
  34. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/tools.html +0 -0
  35. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/guide/workflow.html +0 -0
  36. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_access_guard.py +0 -0
  37. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_artifact.py +0 -0
  38. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_auto_snapshot.py +0 -0
  39. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_c3_signal.py +0 -0
  40. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_c3read.py +0 -0
  41. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_dispatch.py +0 -0
  42. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_edit_ledger.py +0 -0
  43. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_edit_unlock.py +0 -0
  44. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_filter.py +0 -0
  45. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_ghost_files.py +0 -0
  46. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_pretool_enforce.py +0 -0
  47. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_prompt_recall.py +0 -0
  48. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_read.py +0 -0
  49. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_session_stats.py +0 -0
  50. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hook_terse_advisor.py +0 -0
  51. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/app.js +0 -0
  52. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/add_project.js +0 -0
  53. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/config_editor.js +0 -0
  54. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
  55. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_health.js +0 -0
  56. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_panel.js +0 -0
  57. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
  58. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_tasks.js +0 -0
  59. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/drill_views.js +0 -0
  60. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/global_search.js +0 -0
  61. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_credentials.js +0 -0
  62. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
  63. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/hub_locks.js +0 -0
  64. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/mcp_manager.js +0 -0
  65. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/modals.js +0 -0
  66. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/project_card.js +0 -0
  67. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/project_tree.js +0 -0
  68. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/session_drawer.js +0 -0
  69. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/settings_modal.js +0 -0
  70. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/sidebar.js +0 -0
  71. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/summary_bar.js +0 -0
  72. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/task_board.js +0 -0
  73. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/toasts.js +0 -0
  74. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/components/topbar.js +0 -0
  75. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui/state.js +0 -0
  76. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/hub_ui.html +0 -0
  77. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/mcp_proxy.py +0 -0
  78. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/progress.py +0 -0
  79. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/server.py +0 -0
  80. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/__init__.py +0 -0
  81. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/_grants.py +0 -0
  82. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/_helpers.py +0 -0
  83. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/agent.py +0 -0
  84. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/artifacts.py +0 -0
  85. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/bitbucket.py +0 -0
  86. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/compress.py +0 -0
  87. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/credentials.py +0 -0
  88. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/delegate.py +0 -0
  89. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/edit.py +0 -0
  90. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/edit_verify.py +0 -0
  91. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/edits.py +0 -0
  92. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/federate.py +0 -0
  93. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/filter.py +0 -0
  94. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/impact.py +0 -0
  95. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/jira.py +0 -0
  96. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/locks.py +0 -0
  97. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/memory.py +0 -0
  98. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/override.py +0 -0
  99. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/project.py +0 -0
  100. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/read.py +0 -0
  101. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/search.py +0 -0
  102. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/session.py +0 -0
  103. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/shell.py +0 -0
  104. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/status.py +0 -0
  105. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/tasks.py +0 -0
  106. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/tools/validate.py +0 -0
  107. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/api.js +0 -0
  108. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/app.js +0 -0
  109. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/access.js +0 -0
  110. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/bitbucket.js +0 -0
  111. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/chat.js +0 -0
  112. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/credentials.js +0 -0
  113. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/dashboard.js +0 -0
  114. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/edits.js +0 -0
  115. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/enforcement.js +0 -0
  116. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/instructions.js +0 -0
  117. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/jira.js +0 -0
  118. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/memory.js +0 -0
  119. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/sessions.js +0 -0
  120. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/settings.js +0 -0
  121. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/sidebar.js +0 -0
  122. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/components/tasks.js +0 -0
  123. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/icons.js +0 -0
  124. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/pm_shared.js +0 -0
  125. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/shared.js +0 -0
  126. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui/theme.js +0 -0
  127. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui.html +0 -0
  128. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui_legacy.html +0 -0
  129. {code_context_control-2.80.0 → code_context_control-2.82.0}/cli/ui_nano.html +0 -0
  130. {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/dependency_links.txt +0 -0
  131. {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/entry_points.txt +0 -0
  132. {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/requires.txt +0 -0
  133. {code_context_control-2.80.0 → code_context_control-2.82.0}/code_context_control.egg-info/top_level.txt +0 -0
  134. {code_context_control-2.80.0 → code_context_control-2.82.0}/core/__init__.py +0 -0
  135. {code_context_control-2.80.0 → code_context_control-2.82.0}/core/config.py +0 -0
  136. {code_context_control-2.80.0 → code_context_control-2.82.0}/core/ide.py +0 -0
  137. {code_context_control-2.80.0 → code_context_control-2.82.0}/core/mcp_toml.py +0 -0
  138. {code_context_control-2.80.0 → code_context_control-2.82.0}/core/web_security.py +0 -0
  139. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/__init__.py +0 -0
  140. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/config.py +0 -0
  141. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/mcp_oracle.py +0 -0
  142. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/oracle_server.py +0 -0
  143. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/oracle_ui.html +0 -0
  144. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/__init__.py +0 -0
  145. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/activity_reporter.py +0 -0
  146. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/api_auth.py +0 -0
  147. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/c3_bridge.py +0 -0
  148. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/chat_engine.py +0 -0
  149. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/chat_poll.py +0 -0
  150. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/chat_store.py +0 -0
  151. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/cross_memory.py +0 -0
  152. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/discovery_audit.py +0 -0
  153. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/federated_graph.py +0 -0
  154. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/health_checker.py +0 -0
  155. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/insight_engine.py +0 -0
  156. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/local_session.py +0 -0
  157. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/memory_reader.py +0 -0
  158. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/memory_writer.py +0 -0
  159. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/mobile_api.py +0 -0
  160. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/project_scanner.py +0 -0
  161. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/review_agent.py +0 -0
  162. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/tool_executor.py +0 -0
  163. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/services/tool_registry.py +0 -0
  164. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/activity.js +0 -0
  165. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/agents.js +0 -0
  166. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/app.js +0 -0
  167. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/busy.js +0 -0
  168. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/conversations.js +0 -0
  169. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/input.js +0 -0
  170. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/markdown.js +0 -0
  171. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/send.js +0 -0
  172. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/stream_renderer.js +0 -0
  173. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/chat/toolbar.js +0 -0
  174. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/core.js +0 -0
  175. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/crossgraph.js +0 -0
  176. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/header.js +0 -0
  177. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/insights.js +0 -0
  178. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/projects.js +0 -0
  179. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/qrcode.js +0 -0
  180. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/settings.js +0 -0
  181. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/suggestions.js +0 -0
  182. {code_context_control-2.80.0 → code_context_control-2.82.0}/oracle/ui/theme_tabs.js +0 -0
  183. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/__init__.py +0 -0
  184. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/access_guard.py +0 -0
  185. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/access_telemetry.py +0 -0
  186. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/activity_log.py +0 -0
  187. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/agent_base.py +0 -0
  188. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/agent_locks.py +0 -0
  189. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/agents.py +0 -0
  190. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/artifact_defs.py +0 -0
  191. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/artifact_store.py +0 -0
  192. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/auto_memory.py +0 -0
  193. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/__init__.py +0 -0
  194. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/external/__init__.py +0 -0
  195. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/external/aider_polyglot.py +0 -0
  196. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bench/external/swe_bench.py +0 -0
  197. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/benchmark_dashboard.py +0 -0
  198. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bitbucket_client.py +0 -0
  199. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/bitbucket_credentials.py +0 -0
  200. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_expr.py +0 -0
  201. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ci_failures.py +0 -0
  202. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/circuit_breaker.py +0 -0
  203. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/compressor.py +0 -0
  204. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/context_snapshot.py +0 -0
  205. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/conversation_store.py +0 -0
  206. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/credential_store.py +0 -0
  207. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/doc_index.py +0 -0
  208. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/e2e_benchmark.py +0 -0
  209. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/e2e_evaluator.py +0 -0
  210. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/e2e_tasks.py +0 -0
  211. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/edit_ledger.py +0 -0
  212. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/embedding_index.py +0 -0
  213. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/enforcement_policy.py +0 -0
  214. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/error_reporting.py +0 -0
  215. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/file_memory.py +0 -0
  216. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/git_context.py +0 -0
  217. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/hub_service.py +0 -0
  218. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/indexer.py +0 -0
  219. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_client.py +0 -0
  220. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_cloud.py +0 -0
  221. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_credentials.py +0 -0
  222. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_data_center.py +0 -0
  223. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/jira_links.py +0 -0
  224. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/mask_activation.py +0 -0
  225. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/mask_mirror.py +0 -0
  226. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/mask_presets.py +0 -0
  227. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory.py +0 -0
  228. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_consolidator.py +0 -0
  229. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_distiller.py +0 -0
  230. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_graph.py +0 -0
  231. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_grounder.py +0 -0
  232. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_queue.py +0 -0
  233. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/memory_scorer.py +0 -0
  234. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/metrics.py +0 -0
  235. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/notifications.py +0 -0
  236. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ollama_bridge.py +0 -0
  237. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ollama_client.py +0 -0
  238. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/ollama_credentials.py +0 -0
  239. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/output_filter.py +0 -0
  240. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_grants.py +0 -0
  241. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_policy.py +0 -0
  242. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_requests.py +0 -0
  243. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/override_wake.py +0 -0
  244. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/parser.py +0 -0
  245. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/project_manager.py +0 -0
  246. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/project_runtime.py +0 -0
  247. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/protocol.py +0 -0
  248. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/proxy_state.py +0 -0
  249. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/repo_map.py +0 -0
  250. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/retention.py +0 -0
  251. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/retrieval_broker.py +0 -0
  252. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/router.py +0 -0
  253. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/runtime.py +0 -0
  254. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/scanner.py +0 -0
  255. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/session_benchmark.py +0 -0
  256. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/session_manager.py +0 -0
  257. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/session_preloader.py +0 -0
  258. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/subprojects.py +0 -0
  259. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/task_store.py +0 -0
  260. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/telemetry.py +0 -0
  261. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/text_index.py +0 -0
  262. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/time_tracker.py +0 -0
  263. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/tool_classifier.py +0 -0
  264. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/transcript_index.py +0 -0
  265. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/validation_cache.py +0 -0
  266. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/vector_store.py +0 -0
  267. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/watcher.py +0 -0
  268. {code_context_control-2.80.0 → code_context_control-2.82.0}/services/win_subprocess.py +0 -0
  269. {code_context_control-2.80.0 → code_context_control-2.82.0}/setup.cfg +0 -0
  270. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_builtin_optout.py +0 -0
  271. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard.py +0 -0
  272. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_meta.py +0 -0
  273. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_shell_project.py +0 -0
  274. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_surfaces.py +0 -0
  275. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_access_guard_wiring.py +0 -0
  276. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_activity_reporter.py +0 -0
  277. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_agent_locks.py +0 -0
  278. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_aider_polyglot.py +0 -0
  279. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_antigravity_transition.py +0 -0
  280. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_artifact_store.py +0 -0
  281. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_artifact_tool.py +0 -0
  282. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_cli_smoke.py +0 -0
  283. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_client.py +0 -0
  284. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_config_fallback.py +0 -0
  285. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_credentials.py +0 -0
  286. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_bitbucket_tool.py +0 -0
  287. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
  288. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_c3_shell.py +0 -0
  289. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_chat_poll.py +0 -0
  290. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ci_expr.py +0 -0
  291. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_circuit_breaker.py +0 -0
  292. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_claude_md_merge.py +0 -0
  293. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_cli_smoke.py +0 -0
  294. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_compressor_large_file.py +0 -0
  295. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_credential_store.py +0 -0
  296. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_credentials_routes.py +0 -0
  297. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_credentials_tool.py +0 -0
  298. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_creds_cli_smoke.py +0 -0
  299. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_delegate_cascade.py +0 -0
  300. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_delegate_version_probe.py +0 -0
  301. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_e2e_benchmark.py +0 -0
  302. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_ledger_deadline.py +0 -0
  303. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_ledger_hook.py +0 -0
  304. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_locking.py +0 -0
  305. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_normalization.py +0 -0
  306. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_edit_verify.py +0 -0
  307. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_embedding_index_deadlock.py +0 -0
  308. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_enforcement_flip.py +0 -0
  309. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_enforcement_policy.py +0 -0
  310. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_enforcement_routes.py +0 -0
  311. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_federated_graph.py +0 -0
  312. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_filter_backoff.py +0 -0
  313. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ghost_files.py +0 -0
  314. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ghost_generation.py +0 -0
  315. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_git_branch_awareness.py +0 -0
  316. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_access_guard.py +0 -0
  317. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_codex_compat.py +0 -0
  318. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_dispatch.py +0 -0
  319. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_pretool_enforce.py +0 -0
  320. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_prompt_recall.py +0 -0
  321. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_smoke.py +0 -0
  322. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_state.py +0 -0
  323. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hook_utf8_stdio.py +0 -0
  324. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_credentials_route.py +0 -0
  325. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_credentials_routes_write.py +0 -0
  326. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_enforcement_routes.py +0 -0
  327. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_inspect_api.py +0 -0
  328. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_locks_routes.py +0 -0
  329. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_server_smoke.py +0 -0
  330. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_hub_subproject_links.py +0 -0
  331. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ide_workflow_adaptation.py +0 -0
  332. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_init_scan.py +0 -0
  333. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_install_mcp_entrypoint.py +0 -0
  334. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_cli_smoke.py +0 -0
  335. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_client.py +0 -0
  336. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_config_fallback.py +0 -0
  337. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_credentials.py +0 -0
  338. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_links.py +0 -0
  339. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_routes.py +0 -0
  340. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_jira_tool.py +0 -0
  341. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_lazy_store_init.py +0 -0
  342. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mask_guard.py +0 -0
  343. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mask_routes.py +0 -0
  344. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mask_surfaces.py +0 -0
  345. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_host_guard.py +0 -0
  346. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_memory_timeout.py +0 -0
  347. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_server_smoke.py +0 -0
  348. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mcp_toml.py +0 -0
  349. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_distiller.py +0 -0
  350. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_graph_api.py +0 -0
  351. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_queue.py +0 -0
  352. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_memory_system.py +0 -0
  353. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_api.py +0 -0
  354. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_extras.py +0 -0
  355. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_override_routes.py +0 -0
  356. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_mobile_security_api.py +0 -0
  357. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_no_stale_model_pins.py +0 -0
  358. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_notification_dedup.py +0 -0
  359. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_notification_discipline.py +0 -0
  360. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_ollama_credentials.py +0 -0
  361. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_api_auth.py +0 -0
  362. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_apikey_api.py +0 -0
  363. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_c3_bridge.py +0 -0
  364. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_chat_engine.py +0 -0
  365. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_chat_store.py +0 -0
  366. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_discovery_api.py +0 -0
  367. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_discovery_audit.py +0 -0
  368. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_local_auth.py +0 -0
  369. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_ollama_bridge.py +0 -0
  370. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_scanner_cache.py +0 -0
  371. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_security_fixes.py +0 -0
  372. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_session_bootstrap.py +0 -0
  373. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_subproject_awareness.py +0 -0
  374. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_oracle_ui_bundle.py +0 -0
  375. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_output_filter.py +0 -0
  376. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_grants.py +0 -0
  377. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_grants_mcp.py +0 -0
  378. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_requests.py +0 -0
  379. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_override_wake.py +0 -0
  380. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_permissions.py +0 -0
  381. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_pm_api.py +0 -0
  382. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_project_manager.py +0 -0
  383. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_project_manager_merge.py +0 -0
  384. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_project_tool.py +0 -0
  385. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_read_coercion.py +0 -0
  386. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_read_edit_parity.py +0 -0
  387. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_related_facts.py +0 -0
  388. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_repo_map.py +0 -0
  389. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_response_boilerplate.py +0 -0
  390. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_retention.py +0 -0
  391. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_review_digest.py +0 -0
  392. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_service_durability.py +0 -0
  393. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_session_benchmark.py +0 -0
  394. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_session_budget.py +0 -0
  395. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_shell_creds.py +0 -0
  396. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_shell_robustness.py +0 -0
  397. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_subproject_exclusion.py +0 -0
  398. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_subproject_federation.py +0 -0
  399. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_subprojects.py +0 -0
  400. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_swe_bench.py +0 -0
  401. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_task_store.py +0 -0
  402. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_task_tool.py +0 -0
  403. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_time_tracker.py +0 -0
  404. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_token_telemetry.py +0 -0
  405. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_tool_registry.py +0 -0
  406. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_upgrade_and_version.py +0 -0
  407. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_validate.py +0 -0
  408. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_vault_write_guard.py +0 -0
  409. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_version_sync.py +0 -0
  410. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_web_security.py +0 -0
  411. {code_context_control-2.80.0 → code_context_control-2.82.0}/tests/test_windows_reliability.py +0 -0
  412. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/__init__.py +0 -0
  413. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/backend.py +0 -0
  414. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/main.py +0 -0
  415. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/__init__.py +0 -0
  416. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/benchmark_view.py +0 -0
  417. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/claudemd_view.py +0 -0
  418. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/compress_view.py +0 -0
  419. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/index_view.py +0 -0
  420. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/init_view.py +0 -0
  421. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/mcp_view.py +0 -0
  422. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/optimize_view.py +0 -0
  423. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/pipe_view.py +0 -0
  424. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/projects_view.py +0 -0
  425. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/search_view.py +0 -0
  426. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/session_view.py +0 -0
  427. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/stats.py +0 -0
  428. {code_context_control-2.80.0 → code_context_control-2.82.0}/tui/screens/ui_view.py +0 -0
  429. {code_context_control-2.80.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.80.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
@@ -202,7 +202,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
202
202
  | `c3_session` | Snapshot, restore, log decisions, compact history |
203
203
  | `c3_impact` | Blast-radius analysis before editing shared symbols |
204
204
  | `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
205
- | `c3_ci` | Run this repo's real `.github/workflows` locally, with structured failures, before pushing (v2.79.0) |
205
+ | `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
206
206
  | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
207
207
  | `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
208
208
  | `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
@@ -139,7 +139,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
139
139
  | `c3_session` | Snapshot, restore, log decisions, compact history |
140
140
  | `c3_impact` | Blast-radius analysis before editing shared symbols |
141
141
  | `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
142
- | `c3_ci` | Run this repo's real `.github/workflows` locally, with structured failures, before pushing (v2.79.0) |
142
+ | `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
143
143
  | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
144
144
  | `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
145
145
  | `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
@@ -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.80.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":
@@ -6079,7 +6081,10 @@ def _ci_main(args) -> int:
6079
6081
  allow_foreign=bool(getattr(args, "allow_foreign", False)),
6080
6082
  only=only, timeout=getattr(args, "timeout", 0) or cr.DEFAULT_STEP_TIMEOUT,
6081
6083
  workflow=getattr(args, "workflow", ""),
6082
- event=getattr(args, "event", "") or "").to_dict()
6084
+ event=getattr(args, "event", "") or "",
6085
+ engine=getattr(args, "engine", "auto") or "auto",
6086
+ allow_side_effects=bool(getattr(args, "allow_side_effects", False)),
6087
+ network=getattr(args, "network", "") or "").to_dict()
6083
6088
  elif sub == "runs":
6084
6089
  payload = {"runs": cr.list_runs(project_path)}
6085
6090
  else:
@@ -6098,7 +6103,10 @@ def _ci_main(args) -> int:
6098
6103
  bool(getattr(args, "allow_foreign", False)),
6099
6104
  getattr(args, "workflow", "") or "", getattr(args, "tail", 200) or 200,
6100
6105
  getattr(args, "timeout", 0) or 0, svc, finalize,
6101
- getattr(args, "event", "") or "")
6106
+ getattr(args, "event", "") or "",
6107
+ getattr(args, "engine", "auto") or "auto",
6108
+ bool(getattr(args, "allow_side_effects", False)),
6109
+ getattr(args, "network", "") or "")
6102
6110
  print(out)
6103
6111
  # Exit code is the finding: a non-full verdict must not read as success to
6104
6112
  # a shell script or a pre-push hook.
@@ -500,6 +500,16 @@ def build_parser(version: str, parse_cli_ide_arg):
500
500
  "can never yield FULL_CI_PASS)")
501
501
  ci_run.add_argument("--timeout", type=int, default=0,
502
502
  help="Per-step timeout in seconds (default 900)")
503
+ ci_run.add_argument("--engine", choices=["auto", "native", "act"],
504
+ default="auto",
505
+ help="auto (default) uses act for Linux jobs when act + "
506
+ "Docker are present, native otherwise")
507
+ ci_run.add_argument("--allow-side-effects", action="store_true",
508
+ help="Let the act engine run jobs that look like they "
509
+ "publish or deploy. Refused by default.")
510
+ ci_run.add_argument("--network", default="",
511
+ help="Container network for the act engine (e.g. `none` "
512
+ "to cut egress). Default: act's own.")
503
513
 
504
514
  ci_rerun = _ci_common(ci_subs.add_parser(
505
515
  "rerun", help="Re-run only the jobs that failed in the last run"))
@@ -520,6 +530,8 @@ def build_parser(version: str, parse_cli_ide_arg):
520
530
  ci_logs.add_argument("--tail", type=int, default=200)
521
531
 
522
532
  _ci_common(ci_subs.add_parser("runs", help="Recent local CI runs"))
533
+ _ci_common(ci_subs.add_parser(
534
+ "doctor", help="Which execution engines are available on this machine"))
523
535
 
524
536
  # ── Override Requests (v2.69.0, docs/override-requests.md) ──────────
525
537
  # Human-only approval surface. A grant is single-use, session-bound,
@@ -1293,11 +1293,12 @@ _ci_runs: dict = {} # project path -> in-flight state
1293
1293
  _ci_lock = threading.Lock()
1294
1294
 
1295
1295
 
1296
- def _ci_worker(project: str, job: str, allow_foreign: bool, workflow: str) -> None:
1296
+ def _ci_worker(project: str, job: str, allow_foreign: bool, workflow: str,
1297
+ engine: str = "auto") -> None:
1297
1298
  from services import ci_runner as cr
1298
1299
  try:
1299
1300
  result = cr.run_ci(project, selector=job, allow_foreign=allow_foreign,
1300
- workflow=workflow)
1301
+ workflow=workflow, engine=engine)
1301
1302
  payload = {"running": False, "done": True, "error": None,
1302
1303
  "run_id": result.run_id, "verdict": result.verdict,
1303
1304
  "note": result.note}
@@ -1320,6 +1321,8 @@ def api_ci_inspect():
1320
1321
  except ValueError as e:
1321
1322
  return jsonify({"error": str(e)}), 404
1322
1323
  try:
1324
+ # inspect_project owns the engine partition, so the Hub, the CLI
1325
+ # and the tool text can never disagree about what is runnable.
1323
1326
  return jsonify(inspect_project(resolved))
1324
1327
  except Exception as e:
1325
1328
  return jsonify({"error": f"{type(e).__name__}: {e}"}), 500
@@ -1391,7 +1394,8 @@ def api_ci_run_start():
1391
1394
  threading.Thread(
1392
1395
  target=_ci_worker,
1393
1396
  args=(resolved, str(data.get("job") or ""),
1394
- bool(data.get("allow_foreign")), str(data.get("workflow") or "")),
1397
+ bool(data.get("allow_foreign")), str(data.get("workflow") or ""),
1398
+ str(data.get("engine") or "auto")),
1395
1399
  daemon=True,
1396
1400
  ).start()
1397
1401
  return jsonify({"started": True})
@@ -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 }) {
@@ -142,6 +147,10 @@ function HubCI({ projects, onOpenDrill }) {
142
147
  };
143
148
 
144
149
  const jobs = (inspect && inspect.jobs) || [];
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));
145
154
  const runJobs = ((run && run.jobs) || []).filter(j => j.status !== 'deselected');
146
155
 
147
156
  return (
@@ -151,7 +160,8 @@ function HubCI({ projects, onOpenDrill }) {
151
160
  <span style={{ fontSize: 14, color: T.text }}>Local CI</span>
152
161
  <span className="mono" style={{ fontSize: 11, color: T.textMuted }}>
153
162
  {inspect
154
- ? `${(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)`
155
165
  : 'loading…'}
156
166
  </span>
157
167
  <div style={{ flex: 1 }} />
@@ -172,8 +182,16 @@ function HubCI({ projects, onOpenDrill }) {
172
182
  border: `1px solid ${T.border}`, borderRadius: 6, padding: '8px 10px', lineHeight: 1.5,
173
183
  }}>
174
184
  Runs the repository's real <span className="mono">.github/workflows</span> here —
175
- C3 does not define a second CI config. Jobs targeting another OS are refused
176
- unless you opt in, and a cross-OS result is indicative, never equivalent.
185
+ C3 does not define a second CI config.{' '}
186
+ {engines && engines.ok ? (
187
+ <span>Linux jobs run in a container via <span className="mono">act</span>{' '}
188
+ ({engines.act_version}, docker {engines.docker_version}), real actions included.</span>
189
+ ) : (
190
+ <span style={{ color: T.warn }}>
191
+ Container engine unavailable — {(engines && engines.reason) || 'checking…'}
192
+ </span>
193
+ )}{' '}
194
+ macOS jobs can never run locally: there are no macOS containers.
177
195
  </div>
178
196
 
179
197
  {err && (
@@ -236,8 +254,12 @@ function HubCI({ projects, onOpenDrill }) {
236
254
  <span className="mono" style={{
237
255
  color: T.text, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',
238
256
  }}>{j.key}</span>
239
- {j.cross_os && j.status === 'passed' && (
240
- <span className="mono" title={`Ran on this host, but targets ${j.runs_on}.`}
257
+ {j.status === 'passed' && j.fidelity === 'container' && (
258
+ <span className="mono" title={`Ran in a container of ${j.runs_on} via act — real actions included.`}
259
+ style={{ fontSize: 10, color: T.accent }}>container</span>
260
+ )}
261
+ {j.status === 'passed' && j.fidelity === 'cross-os' && (
262
+ <span className="mono" title={`Ran on this host, but targets ${j.runs_on}. Indicative, not equivalent.`}
241
263
  style={{ fontSize: 10, color: T.blue }}>cross-OS</span>
242
264
  )}
243
265
  <div style={{ flex: 1 }} />
@@ -276,10 +298,22 @@ function HubCI({ projects, onOpenDrill }) {
276
298
  display: 'flex', alignItems: 'center', gap: 9, padding: '5px 10px',
277
299
  borderTop: `1px solid ${T.border}`, fontSize: 11,
278
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. */}
279
306
  <CiStatusPill
280
- status={!j.supported ? 'unsupported' : (j.foreign_runner ? 'foreign' : 'passed')}
281
- title={!j.supported ? (j.blockers || []).join('; ')
282
- : (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`} />
283
317
  <span className="mono" style={{ color: T.textMuted }}>{j.key}</span>
284
318
  {!!(j.needs || []).length && (
285
319
  <span className="mono" style={{ fontSize: 10, color: T.textDim }}>
@@ -770,10 +770,11 @@ async def c3_locks(action: str = "list", paths: str = "", intent: str = "",
770
770
  async def c3_ci(action: str = "inspect", job: str = "", run_id: str = "",
771
771
  allow_foreign: bool = False, workflow: str = "",
772
772
  tail: int = 200, timeout: int = 0, event: str = "",
773
- ctx: Context = None) -> str:
773
+ engine: str = "auto", allow_side_effects: bool = False,
774
+ network: str = "", ctx: Context = None) -> str:
774
775
  """RUN THIS REPO'S REAL CI LOCALLY — before pushing, not after.
775
776
  Reads .github/workflows/*.yml as the source of truth (no second CI config).
776
- actions: inspect (default) | run | rerun | status | failures | logs | runs.
777
+ actions: inspect | run | rerun | status | failures | logs | runs | doctor.
777
778
  inspect: workflows, the job DAG, and which jobs are runnable on THIS host.
778
779
  run: execute in dependency order; job='lint' or 'test (ubuntu-latest, 3.12)'
779
780
  selects one (bare job name = all its matrix cells). A job whose dependency
@@ -796,7 +797,8 @@ async def c3_ci(action: str = "inspect", job: str = "", run_id: str = "",
796
797
  from cli.tools.ci import handle_ci
797
798
  return await asyncio.to_thread(handle_ci, action, job, run_id,
798
799
  allow_foreign, workflow, tail, timeout,
799
- svc, finalize, event)
800
+ svc, finalize, event, engine,
801
+ allow_side_effects, network)
800
802
 
801
803
 
802
804
  @mcp.tool()
@@ -39,7 +39,12 @@ def _job_rows(jobs: list, include_deselected: bool = False) -> list:
39
39
  if status == cr.DESELECTED and not include_deselected:
40
40
  continue
41
41
  mark = _MARK.get(status, status.upper())
42
- cross = " [cross-OS]" if job.get("cross_os") and status == cr.PASSED else ""
42
+ fid = job.get("fidelity", "")
43
+ cross = ""
44
+ if status == cr.PASSED and fid == cr.FIDELITY_CONTAINER:
45
+ cross = " [container]"
46
+ elif status == cr.PASSED and fid == cr.FIDELITY_CROSS_OS:
47
+ cross = " [cross-OS]"
43
48
  ms = job.get("duration_ms") or 0
44
49
  timing = f" {ms / 1000:.1f}s" if ms else ""
45
50
  line = f" {mark:<9} {job.get('key', '?')}{cross}{timing}"
@@ -75,7 +80,8 @@ def _failure_rows(jobs: list, limit: int = 25) -> list:
75
80
 
76
81
  def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
77
82
  workflow: str, tail: int, timeout: int, svc, finalize,
78
- event: str = "") -> str:
83
+ event: str = "", engine: str = "auto",
84
+ allow_side_effects: bool = False, network: str = "") -> str:
79
85
  """Route c3_ci actions."""
80
86
  project = str(svc.project_path)
81
87
  action = (action or "inspect").strip().lower()
@@ -85,7 +91,7 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
85
91
 
86
92
  # ── inspect ──────────────────────────────────────────────────────────
87
93
  if action in ("", "inspect", "jobs"):
88
- data = inspect_project(project, event=event)
94
+ data = inspect_project(project, event=event, engine=engine)
89
95
  if not data["workflows"]:
90
96
  return finalize(
91
97
  "c3_ci", args,
@@ -99,26 +105,39 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
99
105
  lines.append(f" {wf['name']} [{', '.join(wf['triggers']) or 'no triggers'}]"
100
106
  f" jobs={len(wf['jobs'])}{err}")
101
107
 
108
+ native = set(data.get("runnable_native") or [])
109
+ container = set(data.get("runnable_container") or [])
110
+
102
111
  lines.append("\nJob graph (dependency order):")
103
112
  by_key = {j["key"]: j for j in data["jobs"]}
104
113
  for key in data["order"]:
105
114
  j = by_key[key]
106
115
  needs = f" needs={','.join(j['needs'])}" if j["needs"] else ""
107
- 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"):
108
121
  state = "UNSUPPORTED"
109
- elif j["foreign_runner"]:
110
- state = f"other-OS ({j['runs_on']})"
111
122
  else:
112
- state = "runnable here"
123
+ state = f"other-OS ({j['runs_on']})"
113
124
  lines.append(f" {key:<42} {state}{needs}")
114
125
 
126
+ engines = data.get("engines") or {}
115
127
  lines.append(
116
- 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')}")
117
135
  if data["foreign"]:
118
136
  lines.append(
119
- f" other-OS ({len(data['foreign'])}): these target a different "
120
- "runner. c3_ci(action='run', allow_foreign=true) attempts them "
121
- "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.")
122
141
  if data["unsupported"]:
123
142
  lines.append(f" unsupported ({len(data['unsupported'])}):")
124
143
  for item in data["unsupported"][:8]:
@@ -151,7 +170,9 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
151
170
 
152
171
  result = cr.run_ci(project, selector=job, allow_foreign=allow_foreign,
153
172
  only=only, timeout=timeout or cr.DEFAULT_STEP_TIMEOUT,
154
- workflow=workflow, event=event)
173
+ workflow=workflow, event=event, engine=engine,
174
+ allow_side_effects=allow_side_effects,
175
+ network=network)
155
176
  run = result.to_dict()
156
177
  lines = [_verdict_line(run), f"run {run['run_id']} host={run['host_os']}"]
157
178
  fp = run.get("fingerprint") or {}
@@ -224,6 +245,34 @@ def handle_ci(action: str, job: str, run_id: str, allow_foreign: bool,
224
245
  f"{row.get('started_at', '')[:19]} {tally}")
225
246
  return finalize("c3_ci", args, "\n".join(lines), f"{len(rows)} runs")
226
247
 
248
+ # ── doctor ───────────────────────────────────────────────────────────
249
+ if action == "doctor":
250
+ from services import ci_act
251
+ state = ci_act.availability()
252
+ lines = [
253
+ "Local CI execution engines:",
254
+ "",
255
+ f" native available — runs jobs whose runs-on matches "
256
+ f"{cr.host_os()}",
257
+ ]
258
+ if state["ok"]:
259
+ lines += [
260
+ f" act available — {state['act_version']}, "
261
+ f"docker {state['docker_version']}",
262
+ f" runs Linux jobs in a container "
263
+ f"({ci_act.DEFAULT_IMAGE}), real `uses:` actions included",
264
+ ]
265
+ else:
266
+ lines += [" act UNAVAILABLE", f" {state['reason']}"]
267
+ lines += [
268
+ "",
269
+ "macOS jobs cannot run locally on any engine — there are no macOS "
270
+ "containers, so a matrix containing them can never reach "
271
+ "FULL_CI_PASS here.",
272
+ ]
273
+ return finalize("c3_ci", args, "\n".join(lines),
274
+ "act ready" if state["ok"] else "act unavailable")
275
+
227
276
  return finalize("c3_ci", args,
228
277
  f"Unknown action '{action}'. Use: inspect, run, rerun, "
229
- "status, failures, logs, runs.", "unknown action")
278
+ "status, failures, logs, runs, doctor.", "unknown action")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-control
3
- Version: 2.80.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
@@ -202,7 +202,7 @@ C3 exposes **21 tools** as a native MCP server. Your IDE calls them directly:
202
202
  | `c3_session` | Snapshot, restore, log decisions, compact history |
203
203
  | `c3_impact` | Blast-radius analysis before editing shared symbols |
204
204
  | `c3_locks` | Agent leases — who is working on which file, so two agents don't collide (v2.65.0) |
205
- | `c3_ci` | Run this repo's real `.github/workflows` locally, with structured failures, before pushing (v2.79.0) |
205
+ | `c3_ci` | Run this repo's real `.github/workflows` locally — in containers via `act` — with structured failures, before pushing (v2.79.0) |
206
206
  | `c3_delegate` | Offload heavy work to local Ollama / Codex / Gemini |
207
207
  | `c3_agent` | Workflows: `review_changes`, `investigate`, `preflight`, `prepare_context`, `validate_compress` |
208
208
  | `c3_edits` | Edit-ledger queries, version diffs, restore points, per-branch filter, `verify` (did a failed `c3_edit` still land?) |
@@ -185,6 +185,7 @@ services/auto_memory.py
185
185
  services/benchmark_dashboard.py
186
186
  services/bitbucket_client.py
187
187
  services/bitbucket_credentials.py
188
+ services/ci_act.py
188
189
  services/ci_expr.py
189
190
  services/ci_failures.py
190
191
  services/ci_runner.py
@@ -281,6 +282,7 @@ tests/test_bitbucket_tool.py
281
282
  tests/test_c3_bridge_project_artifacts.py
282
283
  tests/test_c3_shell.py
283
284
  tests/test_chat_poll.py
285
+ tests/test_ci_act.py
284
286
  tests/test_ci_expr.py
285
287
  tests/test_ci_runner.py
286
288
  tests/test_ci_workflow.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-context-control"
7
- version = "2.80.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"