code-context-control 2.92.1__tar.gz → 2.92.3__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 (453) hide show
  1. {code_context_control-2.92.1/code_context_control.egg-info → code_context_control-2.92.3}/PKG-INFO +1 -1
  2. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/c3.py +1 -1
  3. {code_context_control-2.92.1 → code_context_control-2.92.3/code_context_control.egg-info}/PKG-INFO +1 -1
  4. {code_context_control-2.92.1 → code_context_control-2.92.3}/code_context_control.egg-info/SOURCES.txt +1 -0
  5. {code_context_control-2.92.1 → code_context_control-2.92.3}/pyproject.toml +1 -1
  6. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/bench/external/swe_bench.py +3 -1
  7. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/doc_index.py +1 -1
  8. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/indexer.py +42 -3
  9. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/protocol.py +1 -1
  10. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/scanner.py +2 -1
  11. code_context_control-2.92.3/tests/test_cooccurrence_bounds.py +96 -0
  12. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_windows_reliability.py +65 -1
  13. {code_context_control-2.92.1 → code_context_control-2.92.3}/LICENSE +0 -0
  14. {code_context_control-2.92.1 → code_context_control-2.92.3}/README.md +0 -0
  15. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/__init__.py +0 -0
  16. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/_hook_utils.py +0 -0
  17. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/_shell_writes.py +0 -0
  18. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/commands/__init__.py +0 -0
  19. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/commands/common.py +0 -0
  20. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/commands/parser.py +0 -0
  21. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/docs.html +0 -0
  22. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/edits.html +0 -0
  23. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/access.html +0 -0
  24. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/bitbucket.html +0 -0
  25. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/credentials.html +0 -0
  26. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/getting-started.html +0 -0
  27. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/index.html +0 -0
  28. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/masking.html +0 -0
  29. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/oracle.html +0 -0
  30. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/shared.css +0 -0
  31. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/tools.html +0 -0
  32. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/guide/workflow.html +0 -0
  33. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_access_guard.py +0 -0
  34. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_artifact.py +0 -0
  35. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_auto_snapshot.py +0 -0
  36. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_c3_signal.py +0 -0
  37. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_c3read.py +0 -0
  38. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_dispatch.py +0 -0
  39. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_edit_ledger.py +0 -0
  40. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_edit_unlock.py +0 -0
  41. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_filter.py +0 -0
  42. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_ghost_files.py +0 -0
  43. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_pretool_enforce.py +0 -0
  44. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_prompt_recall.py +0 -0
  45. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_read.py +0 -0
  46. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_session_stats.py +0 -0
  47. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hook_terse_advisor.py +0 -0
  48. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_server.py +0 -0
  49. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/app.js +0 -0
  50. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/add_project.js +0 -0
  51. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/config_editor.js +0 -0
  52. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/drill_artifacts.js +0 -0
  53. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/drill_health.js +0 -0
  54. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/drill_panel.js +0 -0
  55. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/drill_subprojects.js +0 -0
  56. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/drill_tasks.js +0 -0
  57. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/drill_views.js +0 -0
  58. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/global_search.js +0 -0
  59. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/hub_ci.js +0 -0
  60. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/hub_credentials.js +0 -0
  61. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/hub_enforcement.js +0 -0
  62. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/hub_locks.js +0 -0
  63. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/mcp_manager.js +0 -0
  64. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/modals.js +0 -0
  65. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/project_card.js +0 -0
  66. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/project_tree.js +0 -0
  67. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/session_drawer.js +0 -0
  68. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/settings_modal.js +0 -0
  69. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/sidebar.js +0 -0
  70. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/summary_bar.js +0 -0
  71. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/task_board.js +0 -0
  72. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/toasts.js +0 -0
  73. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/components/topbar.js +0 -0
  74. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui/state.js +0 -0
  75. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/hub_ui.html +0 -0
  76. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/mcp_proxy.py +0 -0
  77. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/mcp_server.py +0 -0
  78. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/progress.py +0 -0
  79. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/server.py +0 -0
  80. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/__init__.py +0 -0
  81. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/_grants.py +0 -0
  82. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/_helpers.py +0 -0
  83. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/agent.py +0 -0
  84. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/artifacts.py +0 -0
  85. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/bitbucket.py +0 -0
  86. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/ci.py +0 -0
  87. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/compress.py +0 -0
  88. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/credentials.py +0 -0
  89. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/delegate.py +0 -0
  90. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/edit.py +0 -0
  91. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/edit_verify.py +0 -0
  92. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/edits.py +0 -0
  93. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/federate.py +0 -0
  94. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/filter.py +0 -0
  95. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/impact.py +0 -0
  96. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/jira.py +0 -0
  97. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/locks.py +0 -0
  98. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/memory.py +0 -0
  99. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/override.py +0 -0
  100. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/project.py +0 -0
  101. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/read.py +0 -0
  102. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/search.py +0 -0
  103. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/session.py +0 -0
  104. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/shell.py +0 -0
  105. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/status.py +0 -0
  106. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/tasks.py +0 -0
  107. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/tools/validate.py +0 -0
  108. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/api.js +0 -0
  109. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/app.js +0 -0
  110. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/access.js +0 -0
  111. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/bitbucket.js +0 -0
  112. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/chat.js +0 -0
  113. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/credentials.js +0 -0
  114. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/dashboard.js +0 -0
  115. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/edits.js +0 -0
  116. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/enforcement.js +0 -0
  117. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/instructions.js +0 -0
  118. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/jira.js +0 -0
  119. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/memory.js +0 -0
  120. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/sessions.js +0 -0
  121. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/settings.js +0 -0
  122. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/sidebar.js +0 -0
  123. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/components/tasks.js +0 -0
  124. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/icons.js +0 -0
  125. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/pm_shared.js +0 -0
  126. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/shared.js +0 -0
  127. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui/theme.js +0 -0
  128. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui.html +0 -0
  129. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui_legacy.html +0 -0
  130. {code_context_control-2.92.1 → code_context_control-2.92.3}/cli/ui_nano.html +0 -0
  131. {code_context_control-2.92.1 → code_context_control-2.92.3}/code_context_control.egg-info/dependency_links.txt +0 -0
  132. {code_context_control-2.92.1 → code_context_control-2.92.3}/code_context_control.egg-info/entry_points.txt +0 -0
  133. {code_context_control-2.92.1 → code_context_control-2.92.3}/code_context_control.egg-info/requires.txt +0 -0
  134. {code_context_control-2.92.1 → code_context_control-2.92.3}/code_context_control.egg-info/top_level.txt +0 -0
  135. {code_context_control-2.92.1 → code_context_control-2.92.3}/core/__init__.py +0 -0
  136. {code_context_control-2.92.1 → code_context_control-2.92.3}/core/config.py +0 -0
  137. {code_context_control-2.92.1 → code_context_control-2.92.3}/core/ide.py +0 -0
  138. {code_context_control-2.92.1 → code_context_control-2.92.3}/core/mcp_toml.py +0 -0
  139. {code_context_control-2.92.1 → code_context_control-2.92.3}/core/web_security.py +0 -0
  140. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/__init__.py +0 -0
  141. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/config.py +0 -0
  142. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/mcp_oracle.py +0 -0
  143. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/oracle_server.py +0 -0
  144. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/oracle_ui.html +0 -0
  145. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/__init__.py +0 -0
  146. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/activity_reporter.py +0 -0
  147. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/api_auth.py +0 -0
  148. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/c3_bridge.py +0 -0
  149. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/chat_engine.py +0 -0
  150. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/chat_poll.py +0 -0
  151. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/chat_store.py +0 -0
  152. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/cross_memory.py +0 -0
  153. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/discovery_audit.py +0 -0
  154. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/federated_graph.py +0 -0
  155. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/health_checker.py +0 -0
  156. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/insight_engine.py +0 -0
  157. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/local_session.py +0 -0
  158. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/memory_reader.py +0 -0
  159. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/memory_writer.py +0 -0
  160. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/mobile_api.py +0 -0
  161. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/project_scanner.py +0 -0
  162. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/review_agent.py +0 -0
  163. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/tool_executor.py +0 -0
  164. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/services/tool_registry.py +0 -0
  165. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/activity.js +0 -0
  166. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/agents.js +0 -0
  167. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/app.js +0 -0
  168. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/busy.js +0 -0
  169. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/chat/conversations.js +0 -0
  170. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/chat/input.js +0 -0
  171. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/chat/markdown.js +0 -0
  172. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/chat/send.js +0 -0
  173. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/chat/stream_renderer.js +0 -0
  174. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/chat/toolbar.js +0 -0
  175. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/core.js +0 -0
  176. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/crossgraph.js +0 -0
  177. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/header.js +0 -0
  178. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/insights.js +0 -0
  179. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/projects.js +0 -0
  180. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/qrcode.js +0 -0
  181. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/settings.js +0 -0
  182. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/suggestions.js +0 -0
  183. {code_context_control-2.92.1 → code_context_control-2.92.3}/oracle/ui/theme_tabs.js +0 -0
  184. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/__init__.py +0 -0
  185. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/access_guard.py +0 -0
  186. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/access_telemetry.py +0 -0
  187. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/activity_log.py +0 -0
  188. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/agent_base.py +0 -0
  189. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/agent_locks.py +0 -0
  190. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/agents.py +0 -0
  191. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/artifact_defs.py +0 -0
  192. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/artifact_store.py +0 -0
  193. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/auto_memory.py +0 -0
  194. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/background_service.py +0 -0
  195. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/bench/__init__.py +0 -0
  196. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/bench/external/__init__.py +0 -0
  197. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/bench/external/aider_polyglot.py +0 -0
  198. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/benchmark_dashboard.py +0 -0
  199. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/bitbucket_client.py +0 -0
  200. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/bitbucket_credentials.py +0 -0
  201. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_act.py +0 -0
  202. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_cache.py +0 -0
  203. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_expr.py +0 -0
  204. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_failures.py +0 -0
  205. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_github.py +0 -0
  206. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_impact.py +0 -0
  207. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_intel.py +0 -0
  208. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_runner.py +0 -0
  209. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ci_workflow.py +0 -0
  210. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/circuit_breaker.py +0 -0
  211. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/claude_md.py +0 -0
  212. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/compressor.py +0 -0
  213. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/context_snapshot.py +0 -0
  214. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/conversation_store.py +0 -0
  215. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/cred_telemetry.py +0 -0
  216. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/credential_store.py +0 -0
  217. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/e2e_benchmark.py +0 -0
  218. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/e2e_evaluator.py +0 -0
  219. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/e2e_tasks.py +0 -0
  220. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/edit_ledger.py +0 -0
  221. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/embedding_index.py +0 -0
  222. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/enforcement_policy.py +0 -0
  223. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/error_reporting.py +0 -0
  224. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/file_memory.py +0 -0
  225. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/git_context.py +0 -0
  226. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/hub_service.py +0 -0
  227. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/jira_client.py +0 -0
  228. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/jira_cloud.py +0 -0
  229. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/jira_credentials.py +0 -0
  230. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/jira_data_center.py +0 -0
  231. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/jira_links.py +0 -0
  232. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/mask_activation.py +0 -0
  233. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/mask_mirror.py +0 -0
  234. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/mask_presets.py +0 -0
  235. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory.py +0 -0
  236. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory_consolidator.py +0 -0
  237. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory_distiller.py +0 -0
  238. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory_graph.py +0 -0
  239. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory_grounder.py +0 -0
  240. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory_queue.py +0 -0
  241. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/memory_scorer.py +0 -0
  242. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/metrics.py +0 -0
  243. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/notifications.py +0 -0
  244. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ollama_bridge.py +0 -0
  245. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ollama_client.py +0 -0
  246. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/ollama_credentials.py +0 -0
  247. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/oracle_service.py +0 -0
  248. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/output_filter.py +0 -0
  249. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/override_grants.py +0 -0
  250. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/override_policy.py +0 -0
  251. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/override_requests.py +0 -0
  252. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/override_wake.py +0 -0
  253. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/parser.py +0 -0
  254. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/project_manager.py +0 -0
  255. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/project_runtime.py +0 -0
  256. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/proxy_state.py +0 -0
  257. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/repo_map.py +0 -0
  258. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/repo_shape.py +0 -0
  259. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/retention.py +0 -0
  260. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/retrieval_broker.py +0 -0
  261. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/router.py +0 -0
  262. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/runtime.py +0 -0
  263. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/session_benchmark.py +0 -0
  264. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/session_manager.py +0 -0
  265. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/session_preloader.py +0 -0
  266. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/subprojects.py +0 -0
  267. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/task_store.py +0 -0
  268. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/telemetry.py +0 -0
  269. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/text_index.py +0 -0
  270. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/time_tracker.py +0 -0
  271. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/tool_classifier.py +0 -0
  272. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/transcript_index.py +0 -0
  273. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/validation_cache.py +0 -0
  274. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/vector_store.py +0 -0
  275. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/watcher.py +0 -0
  276. {code_context_control-2.92.1 → code_context_control-2.92.3}/services/win_subprocess.py +0 -0
  277. {code_context_control-2.92.1 → code_context_control-2.92.3}/setup.cfg +0 -0
  278. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_access_builtin_optout.py +0 -0
  279. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_access_guard.py +0 -0
  280. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_access_guard_meta.py +0 -0
  281. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_access_guard_shell_project.py +0 -0
  282. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_access_guard_surfaces.py +0 -0
  283. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_access_guard_wiring.py +0 -0
  284. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_activity_reporter.py +0 -0
  285. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_agent_locks.py +0 -0
  286. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_aider_polyglot.py +0 -0
  287. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_antigravity_transition.py +0 -0
  288. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_artifact_store.py +0 -0
  289. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_artifact_tool.py +0 -0
  290. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_background_service.py +0 -0
  291. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_bitbucket_cli_smoke.py +0 -0
  292. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_bitbucket_client.py +0 -0
  293. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_bitbucket_config_fallback.py +0 -0
  294. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_bitbucket_credentials.py +0 -0
  295. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_bitbucket_tool.py +0 -0
  296. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_c3_bridge_project_artifacts.py +0 -0
  297. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_c3_shell.py +0 -0
  298. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_chat_poll.py +0 -0
  299. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_act.py +0 -0
  300. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_cache.py +0 -0
  301. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_expr.py +0 -0
  302. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_impact.py +0 -0
  303. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_intel.py +0 -0
  304. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_runner.py +0 -0
  305. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ci_workflow.py +0 -0
  306. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_circuit_breaker.py +0 -0
  307. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_claude_md_merge.py +0 -0
  308. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_cli_smoke.py +0 -0
  309. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_compressor_large_file.py +0 -0
  310. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_cred_telemetry.py +0 -0
  311. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_credential_login_kind.py +0 -0
  312. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_credential_store.py +0 -0
  313. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_credential_ui_parity.py +0 -0
  314. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_credentials_routes.py +0 -0
  315. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_credentials_tool.py +0 -0
  316. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_creds_cli_smoke.py +0 -0
  317. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_delegate_cascade.py +0 -0
  318. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_delegate_version_probe.py +0 -0
  319. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_e2e_benchmark.py +0 -0
  320. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_edit_ledger_deadline.py +0 -0
  321. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_edit_ledger_hook.py +0 -0
  322. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_edit_locking.py +0 -0
  323. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_edit_normalization.py +0 -0
  324. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_edit_verify.py +0 -0
  325. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_embedding_index_deadlock.py +0 -0
  326. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_enforcement_flip.py +0 -0
  327. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_enforcement_policy.py +0 -0
  328. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_enforcement_routes.py +0 -0
  329. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_failed_calls_do_not_unlock.py +0 -0
  330. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_federated_graph.py +0 -0
  331. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_filter_backoff.py +0 -0
  332. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ghost_files.py +0 -0
  333. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ghost_generation.py +0 -0
  334. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_git_branch_awareness.py +0 -0
  335. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_access_guard.py +0 -0
  336. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_codex_compat.py +0 -0
  337. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_dispatch.py +0 -0
  338. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_pretool_enforce.py +0 -0
  339. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_prompt_recall.py +0 -0
  340. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_smoke.py +0 -0
  341. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_state.py +0 -0
  342. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hook_utf8_stdio.py +0 -0
  343. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_credentials_route.py +0 -0
  344. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_credentials_routes_write.py +0 -0
  345. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_enforcement_routes.py +0 -0
  346. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_inspect_api.py +0 -0
  347. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_locks_routes.py +0 -0
  348. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_oracle_service_routes.py +0 -0
  349. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_server_smoke.py +0 -0
  350. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_hub_subproject_links.py +0 -0
  351. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ide_workflow_adaptation.py +0 -0
  352. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_init_clear_preserves_user_content.py +0 -0
  353. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_init_scan.py +0 -0
  354. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_install_mcp_entrypoint.py +0 -0
  355. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_cli_smoke.py +0 -0
  356. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_client.py +0 -0
  357. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_config_fallback.py +0 -0
  358. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_credentials.py +0 -0
  359. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_links.py +0 -0
  360. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_routes.py +0 -0
  361. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_jira_tool.py +0 -0
  362. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_lazy_store_init.py +0 -0
  363. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mask_guard.py +0 -0
  364. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mask_routes.py +0 -0
  365. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mask_surfaces.py +0 -0
  366. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mcp_host_guard.py +0 -0
  367. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mcp_memory_timeout.py +0 -0
  368. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mcp_server_smoke.py +0 -0
  369. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mcp_toml.py +0 -0
  370. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_memory_distiller.py +0 -0
  371. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_memory_graph_api.py +0 -0
  372. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_memory_queue.py +0 -0
  373. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_memory_system.py +0 -0
  374. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mobile_api.py +0 -0
  375. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mobile_extras.py +0 -0
  376. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mobile_override_routes.py +0 -0
  377. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_mobile_security_api.py +0 -0
  378. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_no_stale_model_pins.py +0 -0
  379. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_notification_dedup.py +0 -0
  380. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_notification_discipline.py +0 -0
  381. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_ollama_credentials.py +0 -0
  382. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_api_auth.py +0 -0
  383. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_apikey_api.py +0 -0
  384. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_c3_bridge.py +0 -0
  385. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_chat_engine.py +0 -0
  386. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_chat_store.py +0 -0
  387. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_discovery_api.py +0 -0
  388. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_discovery_audit.py +0 -0
  389. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_health_probe.py +0 -0
  390. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_local_auth.py +0 -0
  391. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_ollama_bridge.py +0 -0
  392. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_scanner_cache.py +0 -0
  393. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_security_fixes.py +0 -0
  394. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_session_bootstrap.py +0 -0
  395. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_subproject_awareness.py +0 -0
  396. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_oracle_ui_bundle.py +0 -0
  397. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_output_filter.py +0 -0
  398. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_override_grants.py +0 -0
  399. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_override_grants_mcp.py +0 -0
  400. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_override_requests.py +0 -0
  401. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_override_wake.py +0 -0
  402. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_permissions.py +0 -0
  403. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_pm_api.py +0 -0
  404. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_project_manager.py +0 -0
  405. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_project_manager_merge.py +0 -0
  406. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_project_tool.py +0 -0
  407. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_read_coercion.py +0 -0
  408. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_read_edit_parity.py +0 -0
  409. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_related_facts.py +0 -0
  410. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_repo_map.py +0 -0
  411. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_repo_shape.py +0 -0
  412. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_response_boilerplate.py +0 -0
  413. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_retention.py +0 -0
  414. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_review_digest.py +0 -0
  415. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_service_durability.py +0 -0
  416. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_session_benchmark.py +0 -0
  417. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_session_budget.py +0 -0
  418. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_shell_creds.py +0 -0
  419. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_shell_robustness.py +0 -0
  420. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_shell_write_ledger.py +0 -0
  421. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_shell_writes.py +0 -0
  422. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_subproject_exclusion.py +0 -0
  423. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_subproject_federation.py +0 -0
  424. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_subprojects.py +0 -0
  425. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_swe_bench.py +0 -0
  426. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_task_store.py +0 -0
  427. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_task_tool.py +0 -0
  428. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_time_tracker.py +0 -0
  429. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_token_telemetry.py +0 -0
  430. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_tool_registry.py +0 -0
  431. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_upgrade_and_version.py +0 -0
  432. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_validate.py +0 -0
  433. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_vault_write_guard.py +0 -0
  434. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_version_sync.py +0 -0
  435. {code_context_control-2.92.1 → code_context_control-2.92.3}/tests/test_web_security.py +0 -0
  436. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/__init__.py +0 -0
  437. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/backend.py +0 -0
  438. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/main.py +0 -0
  439. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/__init__.py +0 -0
  440. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/benchmark_view.py +0 -0
  441. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/claudemd_view.py +0 -0
  442. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/compress_view.py +0 -0
  443. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/index_view.py +0 -0
  444. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/init_view.py +0 -0
  445. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/mcp_view.py +0 -0
  446. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/optimize_view.py +0 -0
  447. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/pipe_view.py +0 -0
  448. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/projects_view.py +0 -0
  449. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/search_view.py +0 -0
  450. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/session_view.py +0 -0
  451. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/stats.py +0 -0
  452. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/screens/ui_view.py +0 -0
  453. {code_context_control-2.92.1 → code_context_control-2.92.3}/tui/theme.tcss +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-control
3
- Version: 2.92.1
3
+ Version: 2.92.3
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.92.1"
95
+ __version__ = "2.92.3"
96
96
 
97
97
 
98
98
  def _compress_file_cli(compressor, path, mode="smart", **kw):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-context-control
3
- Version: 2.92.1
3
+ Version: 2.92.3
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
@@ -303,6 +303,7 @@ tests/test_circuit_breaker.py
303
303
  tests/test_claude_md_merge.py
304
304
  tests/test_cli_smoke.py
305
305
  tests/test_compressor_large_file.py
306
+ tests/test_cooccurrence_bounds.py
306
307
  tests/test_cred_telemetry.py
307
308
  tests/test_credential_login_kind.py
308
309
  tests/test_credential_store.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "code-context-control"
7
- version = "2.92.1"
7
+ version = "2.92.3"
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"
@@ -446,7 +446,9 @@ def evaluate_with_docker(
446
446
  "--timeout", str(timeout),
447
447
  ]
448
448
  try:
449
- subprocess.run(cmd, check=True, timeout=timeout * len(list(predictions_path.read_text().splitlines())))
449
+ n_predictions = len(
450
+ predictions_path.read_text(encoding="utf-8").splitlines())
451
+ subprocess.run(cmd, check=True, timeout=timeout * n_predictions)
450
452
  except Exception as e:
451
453
  return {"error": str(e)}
452
454
 
@@ -113,7 +113,7 @@ class DocIndex:
113
113
  except Exception:
114
114
  pass
115
115
  try:
116
- content = fpath.read_text(errors="replace")
116
+ content = fpath.read_text(encoding="utf-8", errors="replace")
117
117
  except Exception:
118
118
  continue
119
119
 
@@ -30,13 +30,27 @@ def _masked_content(fpath, project_path):
30
30
  if v.denial:
31
31
  return None
32
32
  if not v.masked:
33
- return fpath.read_text(errors="replace")
33
+ return fpath.read_text(encoding="utf-8", errors="replace")
34
34
  try:
35
35
  return mask_mirror.render_for_path(fpath, project_path).text
36
36
  except Exception:
37
37
  return None
38
38
 
39
39
 
40
+ # Co-occurrence is O(unique_tokens^2) per chunk, so one minified vendor
41
+ # bundle can dominate a whole index build. Both bounds below are deliberate
42
+ # and their effect is REPORTED in build_index()'s stats rather than applied
43
+ # silently — a capped build must never look like a complete one.
44
+ #
45
+ # 200: chunks above this are minified/bundled/data blobs, not code. The
46
+ # pruning step keeps only the top-5 co-occurring terms per token with at
47
+ # least 3 hits, so such a chunk contributes noise that is discarded anyway.
48
+ _COOC_MAX_CHUNK_TOKENS = 200
49
+ # 20M: whole-pass ceiling on pair updates, so no repository shape can make
50
+ # this step unbounded. ~10s of CPU on the boxes this runs on.
51
+ _COOC_MAX_PAIR_UPDATES = 20_000_000
52
+
53
+
40
54
  class CodeIndex:
41
55
  """TF-IDF based code search index with structural awareness."""
42
56
 
@@ -187,7 +201,8 @@ class CodeIndex:
187
201
  # (docs/mask-guard.md §6, row 2). Skip it instead.
188
202
  continue
189
203
  else:
190
- content = fpath.read_text(errors='replace')
204
+ content = fpath.read_text(encoding='utf-8',
205
+ errors='replace')
191
206
  except Exception:
192
207
  continue
193
208
 
@@ -239,6 +254,7 @@ class CodeIndex:
239
254
  "entries_scanned": scan_stats["entries"],
240
255
  "files_capped": files_capped,
241
256
  "max_files": max_files,
257
+ "cooccurrence": getattr(self, "_cooccurrence_stats", {}),
242
258
  }
243
259
 
244
260
  def _chunk_file(self, content: str, ext: str, doc_id: str) -> list:
@@ -624,16 +640,39 @@ class CodeIndex:
624
640
  self.chunk_tfidf[chunk_id][term] = normalized_tf * self.idf.get(term, 0)
625
641
 
626
642
  def _build_cooccurrence(self):
627
- """Build lightweight co-occurrence map from indexed chunks for auto-synonyms."""
643
+ """Build lightweight co-occurrence map from indexed chunks for auto-synonyms.
644
+
645
+ Bounded on purpose: the pair loop is quadratic in a chunk's unique
646
+ token count, so a single minified bundle (798 unique tokens x 4091
647
+ chunks = 1.9e9 pair updates, measured on a real project) can hang a
648
+ build that has nothing else wrong with it. Skipped chunks and an
649
+ exhausted budget are recorded in ``self._cooccurrence_stats`` and
650
+ returned by :meth:`build_index`.
651
+ """
628
652
  self._cooccurrence = {}
653
+ skipped = 0
654
+ updates = 0
655
+ budget_hit = False
629
656
  for chunk in self.chunks.values():
630
657
  tokens = set(self._tokenize(chunk["content"]))
658
+ if len(tokens) > _COOC_MAX_CHUNK_TOKENS:
659
+ skipped += 1
660
+ continue
661
+ if updates + len(tokens) * (len(tokens) - 1) > _COOC_MAX_PAIR_UPDATES:
662
+ budget_hit = True
663
+ break
631
664
  for t in tokens:
632
665
  if t not in self._cooccurrence:
633
666
  self._cooccurrence[t] = Counter()
634
667
  for t2 in tokens:
635
668
  if t != t2:
636
669
  self._cooccurrence[t][t2] += 1
670
+ updates += len(tokens) * (len(tokens) - 1)
671
+ self._cooccurrence_stats = {
672
+ "chunks_skipped": skipped,
673
+ "pair_updates": updates,
674
+ "budget_exhausted": budget_hit,
675
+ }
637
676
  # Prune: keep only top-5 co-occurring terms per token (minimum 3 co-occurrences)
638
677
  pruned = {}
639
678
  for term, counts in self._cooccurrence.items():
@@ -261,7 +261,7 @@ class CompressionProtocol:
261
261
  if _sub_excluded(fpath):
262
262
  continue
263
263
  try:
264
- content = fpath.read_text(errors='replace')
264
+ content = fpath.read_text(encoding='utf-8', errors='replace')
265
265
  except Exception:
266
266
  continue
267
267
  _accumulate(content)
@@ -43,7 +43,8 @@ def gitignore_dir_patterns(root) -> tuple:
43
43
  names: set = set()
44
44
  patterns: list = []
45
45
  try:
46
- text = (Path(root) / '.gitignore').read_text(errors='replace')
46
+ text = (Path(root) / '.gitignore').read_text(encoding='utf-8',
47
+ errors='replace')
47
48
  except OSError:
48
49
  return names, patterns
49
50
  for line in text.splitlines():
@@ -0,0 +1,96 @@
1
+ """The co-occurrence pass is quadratic per chunk and must stay bounded.
2
+
3
+ Measured origin: a 139-file project whose vendor directory holds a minified
4
+ CSS bundle produced 4091 chunks averaging 798 unique tokens. The unbounded
5
+ pass needed ~1.9e9 Counter updates and pinned one core for over fifteen
6
+ minutes on an index that is otherwise built in seconds.
7
+ """
8
+ import tempfile
9
+ import unittest
10
+ from pathlib import Path
11
+
12
+ from services import indexer as indexer_mod
13
+ from services.indexer import CodeIndex
14
+
15
+
16
+ def _word(i: int) -> str:
17
+ """Distinct lowercase word - the tokenizer keeps [a-zA-Z]{2,} only."""
18
+ a, b = divmod(i, 26)
19
+ c, a = divmod(a, 26)
20
+ return "zz" + chr(97 + c) + chr(97 + a) + chr(97 + b)
21
+
22
+
23
+ def _minified_like(n_tokens: int) -> str:
24
+ """A single line of n distinct tokens - what a minified bundle looks like."""
25
+ return ".".join(_word(i) for i in range(n_tokens)) + "\n"
26
+
27
+
28
+ class TestCooccurrenceBounds(unittest.TestCase):
29
+ def setUp(self):
30
+ self._tmp = tempfile.TemporaryDirectory()
31
+ self.root = Path(self._tmp.name)
32
+
33
+ def tearDown(self):
34
+ self._tmp.cleanup()
35
+
36
+ def _build(self):
37
+ idx = CodeIndex(str(self.root), str(self.root / ".c3" / "index"))
38
+ return idx, idx.build_index()
39
+
40
+ def test_token_dense_chunks_are_skipped_and_reported(self):
41
+ """A chunk past the cap contributes nothing - and says so."""
42
+ big = indexer_mod._COOC_MAX_CHUNK_TOKENS + 50
43
+ (self.root / "vendor.js").write_text(_minified_like(big), encoding="utf-8")
44
+ (self.root / "small.py").write_text(
45
+ "def alpha_helper():\n return beta_helper\n", encoding="utf-8")
46
+
47
+ idx, result = self._build()
48
+ stats = result["cooccurrence"]
49
+
50
+ self.assertGreaterEqual(stats["chunks_skipped"], 1)
51
+ self.assertFalse(stats["budget_exhausted"])
52
+ # The skipped chunk's tokens are absent from the synonym map...
53
+ self.assertNotIn(_word(0), idx._cooccurrence)
54
+ # ...while the ordinary file was still processed.
55
+ self.assertLessEqual(
56
+ stats["pair_updates"],
57
+ indexer_mod._COOC_MAX_PAIR_UPDATES,
58
+ )
59
+
60
+ def test_pair_updates_never_exceed_the_budget(self):
61
+ """Many at-the-cap chunks stop the pass instead of running away."""
62
+ # Each file sits just under the per-chunk cap, so only the whole-pass
63
+ # budget can stop this.
64
+ per_chunk = indexer_mod._COOC_MAX_CHUNK_TOKENS
65
+ pairs_each = per_chunk * (per_chunk - 1)
66
+ n_files = (indexer_mod._COOC_MAX_PAIR_UPDATES // pairs_each) + 3
67
+ for i in range(n_files):
68
+ (self.root / f"f{i}.js").write_text(
69
+ _minified_like(per_chunk), encoding="utf-8")
70
+
71
+ _, result = self._build()
72
+ stats = result["cooccurrence"]
73
+
74
+ self.assertLessEqual(
75
+ stats["pair_updates"], indexer_mod._COOC_MAX_PAIR_UPDATES)
76
+ self.assertTrue(stats["budget_exhausted"])
77
+
78
+ def test_ordinary_project_is_unaffected(self):
79
+ """The bound must not change the synonym map for normal code."""
80
+ (self.root / "a.py").write_text(
81
+ "def alpha_helper():\n"
82
+ " return beta_helper() + gamma_helper()\n", encoding="utf-8")
83
+ (self.root / "b.py").write_text(
84
+ "def beta_helper():\n"
85
+ " return alpha_helper() + gamma_helper()\n", encoding="utf-8")
86
+
87
+ idx, result = self._build()
88
+ stats = result["cooccurrence"]
89
+
90
+ self.assertEqual(stats["chunks_skipped"], 0)
91
+ self.assertFalse(stats["budget_exhausted"])
92
+ self.assertGreater(stats["pair_updates"], 0)
93
+
94
+
95
+ if __name__ == "__main__":
96
+ unittest.main()
@@ -2,6 +2,7 @@
2
2
 
3
3
  Locks in invariants that have bitten this project on Windows:
4
4
  - Text-mode open() calls must pass encoding='utf-8' so cp1252 doesn't corrupt JSON
5
+ - Path.read_text()/write_text() must pass encoding='utf-8' for the same reason
5
6
  - No mojibake byte sequences in .py sources (re-encoding bugs decay silently)
6
7
  """
7
8
  from __future__ import annotations
@@ -12,7 +13,9 @@ from pathlib import Path
12
13
 
13
14
  REPO_ROOT = Path(__file__).resolve().parents[1]
14
15
 
15
- _SKIP_DIRS = {".venv", "__pycache__", ".pytest_cache", ".c3"}
16
+ _SKIP_DIRS = {".venv", "__pycache__", ".pytest_cache", ".c3",
17
+ # Build artifacts: gitignored copies of sources we already scan.
18
+ "build", "dist", ".eggs"}
16
19
  _SKIP_FRAGMENTS = (".tmp.",)
17
20
 
18
21
  # Sequence produced when UTF-8 text is written then re-read as cp1252 and
@@ -63,6 +66,36 @@ def _find_open_calls_missing_encoding(text: str):
63
66
  yield line_no, call.replace("\n", " ")[:160]
64
67
 
65
68
 
69
+ # Path.read_text/write_text default to locale encoding exactly like open().
70
+ # `importlib.metadata` Distribution.read_text takes a FILENAME, not an encoding.
71
+ _PATH_TEXT_CALL = re.compile(r"\.(read_text|write_text)\s*\(", re.MULTILINE)
72
+ _PATH_TEXT_EXEMPT = re.compile(r"\b(dist|distribution)\.\s*$")
73
+
74
+
75
+ def _find_path_text_calls_missing_encoding(text: str):
76
+ """Yield (line_no, call_text) for read_text/write_text without an encoding.
77
+
78
+ ``read_text('utf-8')`` (positional) counts: encoding is the first parameter.
79
+ """
80
+ for m in _PATH_TEXT_CALL.finditer(text):
81
+ if _PATH_TEXT_EXEMPT.search(text[max(0, m.start() - 24):m.start() + 1]):
82
+ continue
83
+ depth = 1
84
+ i = m.end()
85
+ while i < len(text) and depth > 0:
86
+ c = text[i]
87
+ if c == "(":
88
+ depth += 1
89
+ elif c == ")":
90
+ depth -= 1
91
+ i += 1
92
+ call = text[m.start():i]
93
+ if "encoding" in call or "utf-8" in call or "utf8" in call:
94
+ continue
95
+ line_no = text[: m.start()].count("\n") + 1
96
+ yield line_no, call.replace("\n", " ")[:160]
97
+
98
+
66
99
  class TestWindowsReliability(unittest.TestCase):
67
100
  def test_no_text_open_without_encoding(self):
68
101
  """Every text-mode open() in shipped code must pass encoding='utf-8'.
@@ -89,6 +122,37 @@ class TestWindowsReliability(unittest.TestCase):
89
122
  + "\n ".join(offenders)
90
123
  )
91
124
 
125
+ def test_no_path_text_io_without_encoding(self):
126
+ """Path.read_text()/write_text() must declare encoding='utf-8'.
127
+
128
+ The indexer, doc index, protocol dictionary and .gitignore scanner all
129
+ called ``read_text(errors='replace')`` with no encoding. On Windows
130
+ that decodes UTF-8 source as cp1252, and ``errors='replace'`` means it
131
+ never raises — every em dash landed in .c3/index, the doc index and the
132
+ chroma collection as the three-char mojibake this module's
133
+ ``_MOJIBAKE_EM_DASH`` matches. Source files were never touched; the
134
+ corruption lived only in the indexed copies served back to the agent.
135
+ """
136
+ offenders = []
137
+ for py in _iter_py_files():
138
+ # Shipped code only. Test fixtures write their own temp files and
139
+ # control both ends of the encoding.
140
+ if "tests" in py.relative_to(REPO_ROOT).parts:
141
+ continue
142
+ try:
143
+ text = py.read_text(encoding="utf-8")
144
+ except UnicodeDecodeError as e:
145
+ self.fail(f"{py} is not valid UTF-8: {e}")
146
+ for line_no, call in _find_path_text_calls_missing_encoding(text):
147
+ offenders.append(
148
+ f"{py.relative_to(REPO_ROOT).as_posix()}:{line_no}: {call}")
149
+ if offenders:
150
+ self.fail(
151
+ "read_text()/write_text() calls missing encoding='utf-8' "
152
+ "(silently mojibake non-ASCII on Windows cp1252):\n "
153
+ + "\n ".join(offenders)
154
+ )
155
+
92
156
  def test_no_mojibake_bytes_in_sources(self):
93
157
  """No .py file should contain the UTF-8-re-encoded-as-cp1252 em-dash signature.
94
158