code-context-control 2.142.0__tar.gz → 2.143.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 (568) hide show
  1. {code_context_control-2.142.0 → code_context_control-2.143.0}/PKG-INFO +3 -1
  2. {code_context_control-2.142.0 → code_context_control-2.143.0}/README.md +2 -0
  3. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/c3.py +2 -1
  4. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_server.py +171 -42
  5. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/app.js +4 -2
  6. code_context_control-2.143.0/cli/hub_ui/components/hub_sessions.js +446 -0
  7. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/topbar.js +1 -1
  8. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/mcp_server.py +11 -4
  9. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/session.py +94 -1
  10. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/tasks.py +7 -1
  11. {code_context_control-2.142.0 → code_context_control-2.143.0}/code_context_control.egg-info/PKG-INFO +3 -1
  12. {code_context_control-2.142.0 → code_context_control-2.143.0}/code_context_control.egg-info/SOURCES.txt +6 -0
  13. {code_context_control-2.142.0 → code_context_control-2.143.0}/pyproject.toml +1 -1
  14. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/claude_md.py +1 -1
  15. code_context_control-2.143.0/services/session_catalog.py +1078 -0
  16. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/task_store.py +1 -1
  17. code_context_control-2.143.0/services/terminal_launch.py +73 -0
  18. code_context_control-2.143.0/tests/test_hub_sessions_routes.py +180 -0
  19. code_context_control-2.143.0/tests/test_session_catalog.py +374 -0
  20. code_context_control-2.143.0/tests/test_session_tool.py +129 -0
  21. {code_context_control-2.142.0 → code_context_control-2.143.0}/LICENSE +0 -0
  22. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/__init__.py +0 -0
  23. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/_hook_utils.py +0 -0
  24. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/_shell_writes.py +0 -0
  25. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/commands/__init__.py +0 -0
  26. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/commands/common.py +0 -0
  27. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/commands/parser.py +0 -0
  28. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/docs.html +0 -0
  29. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/edits.html +0 -0
  30. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/access.html +0 -0
  31. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/bitbucket.html +0 -0
  32. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/credentials.html +0 -0
  33. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/getting-started.html +0 -0
  34. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/index.html +0 -0
  35. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/masking.html +0 -0
  36. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/oracle.html +0 -0
  37. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/shared.css +0 -0
  38. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/tools.html +0 -0
  39. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/guide/workflow.html +0 -0
  40. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_access_guard.py +0 -0
  41. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_agent_model.py +0 -0
  42. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_artifact.py +0 -0
  43. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_auto_snapshot.py +0 -0
  44. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_c3_signal.py +0 -0
  45. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_c3read.py +0 -0
  46. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_codex_lifecycle.py +0 -0
  47. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_dispatch.py +0 -0
  48. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_edit_ledger.py +0 -0
  49. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_edit_unlock.py +0 -0
  50. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_filter.py +0 -0
  51. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_ghost_files.py +0 -0
  52. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_pretool_enforce.py +0 -0
  53. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_prompt_recall.py +0 -0
  54. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_read.py +0 -0
  55. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_session_end.py +0 -0
  56. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_session_open.py +0 -0
  57. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_session_stats.py +0 -0
  58. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hook_terse_advisor.py +0 -0
  59. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/add_project.js +0 -0
  60. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/config_editor.js +0 -0
  61. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/drill_artifacts.js +0 -0
  62. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/drill_health.js +0 -0
  63. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/drill_panel.js +0 -0
  64. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/drill_subprojects.js +0 -0
  65. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/drill_tasks.js +0 -0
  66. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/drill_views.js +0 -0
  67. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/global_search.js +0 -0
  68. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_access.js +0 -0
  69. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_ci.js +0 -0
  70. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_cred_audit.js +0 -0
  71. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_credentials.js +0 -0
  72. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_enforcement.js +0 -0
  73. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_locks.js +0 -0
  74. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/hub_tokens.js +0 -0
  75. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/mcp_manager.js +0 -0
  76. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/modals.js +0 -0
  77. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/project_card.js +0 -0
  78. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/project_tree.js +0 -0
  79. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/session_drawer.js +0 -0
  80. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/settings_modal.js +0 -0
  81. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/sidebar.js +0 -0
  82. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/summary_bar.js +0 -0
  83. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/task_board.js +0 -0
  84. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/components/toasts.js +0 -0
  85. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui/state.js +0 -0
  86. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/hub_ui.html +0 -0
  87. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/mcp_proxy.py +0 -0
  88. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/progress.py +0 -0
  89. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/server.py +0 -0
  90. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/__init__.py +0 -0
  91. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/_grants.py +0 -0
  92. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/_helpers.py +0 -0
  93. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/agent.py +0 -0
  94. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/artifacts.py +0 -0
  95. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/bitbucket.py +0 -0
  96. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/ci.py +0 -0
  97. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/compress.py +0 -0
  98. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/credentials.py +0 -0
  99. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/delegate.py +0 -0
  100. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/edit.py +0 -0
  101. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/edit_verify.py +0 -0
  102. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/edits.py +0 -0
  103. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/federate.py +0 -0
  104. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/filter.py +0 -0
  105. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/impact.py +0 -0
  106. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/jira.py +0 -0
  107. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/locks.py +0 -0
  108. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/memory.py +0 -0
  109. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/override.py +0 -0
  110. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/project.py +0 -0
  111. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/read.py +0 -0
  112. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/search.py +0 -0
  113. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/shell.py +0 -0
  114. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/shell_job.py +0 -0
  115. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/shell_nudge.py +0 -0
  116. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/shell_parsers.py +0 -0
  117. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/shell_render.py +0 -0
  118. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/status.py +0 -0
  119. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/tools/validate.py +0 -0
  120. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/api.js +0 -0
  121. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/app.js +0 -0
  122. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/access.js +0 -0
  123. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/bitbucket.js +0 -0
  124. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/chat.js +0 -0
  125. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/credentials.js +0 -0
  126. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/dashboard.js +0 -0
  127. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/edits.js +0 -0
  128. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/enforcement.js +0 -0
  129. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/instructions.js +0 -0
  130. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/jira.js +0 -0
  131. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/memory.js +0 -0
  132. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/sessions.js +0 -0
  133. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/settings.js +0 -0
  134. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/sidebar.js +0 -0
  135. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/components/tasks.js +0 -0
  136. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/icons.js +0 -0
  137. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/pm_shared.js +0 -0
  138. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/shared.js +0 -0
  139. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui/theme.js +0 -0
  140. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui.html +0 -0
  141. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui_legacy.html +0 -0
  142. {code_context_control-2.142.0 → code_context_control-2.143.0}/cli/ui_nano.html +0 -0
  143. {code_context_control-2.142.0 → code_context_control-2.143.0}/code_context_control.egg-info/dependency_links.txt +0 -0
  144. {code_context_control-2.142.0 → code_context_control-2.143.0}/code_context_control.egg-info/entry_points.txt +0 -0
  145. {code_context_control-2.142.0 → code_context_control-2.143.0}/code_context_control.egg-info/requires.txt +0 -0
  146. {code_context_control-2.142.0 → code_context_control-2.143.0}/code_context_control.egg-info/top_level.txt +0 -0
  147. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/__init__.py +0 -0
  148. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/codex_patch.py +0 -0
  149. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/config.py +0 -0
  150. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/grok_payload.py +0 -0
  151. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/hook_command.py +0 -0
  152. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/host.py +0 -0
  153. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/ide.py +0 -0
  154. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/mcp_toml.py +0 -0
  155. {code_context_control-2.142.0 → code_context_control-2.143.0}/core/web_security.py +0 -0
  156. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/__init__.py +0 -0
  157. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/config.py +0 -0
  158. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/listeners.py +0 -0
  159. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/mcp_oracle.py +0 -0
  160. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/oracle_server.py +0 -0
  161. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/oracle_ui.html +0 -0
  162. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/__init__.py +0 -0
  163. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/activity_reporter.py +0 -0
  164. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/api_auth.py +0 -0
  165. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/c3_bridge.py +0 -0
  166. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/chat_engine.py +0 -0
  167. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/chat_poll.py +0 -0
  168. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/chat_store.py +0 -0
  169. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/client_tokens.py +0 -0
  170. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/cross_memory.py +0 -0
  171. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/discovery_audit.py +0 -0
  172. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/federated_graph.py +0 -0
  173. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/health_checker.py +0 -0
  174. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/insight_engine.py +0 -0
  175. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/local_session.py +0 -0
  176. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/memory_reader.py +0 -0
  177. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/memory_writer.py +0 -0
  178. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/mobile_api.py +0 -0
  179. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/project_scanner.py +0 -0
  180. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/review_agent.py +0 -0
  181. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/tool_executor.py +0 -0
  182. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/services/tool_registry.py +0 -0
  183. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/activity.js +0 -0
  184. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/agents.js +0 -0
  185. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/app.js +0 -0
  186. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/busy.js +0 -0
  187. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/chat/conversations.js +0 -0
  188. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/chat/input.js +0 -0
  189. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/chat/markdown.js +0 -0
  190. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/chat/send.js +0 -0
  191. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/chat/stream_renderer.js +0 -0
  192. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/chat/toolbar.js +0 -0
  193. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/core.js +0 -0
  194. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/crossgraph.js +0 -0
  195. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/header.js +0 -0
  196. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/insights.js +0 -0
  197. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/projects.js +0 -0
  198. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/qrcode.js +0 -0
  199. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/settings.js +0 -0
  200. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/suggestions.js +0 -0
  201. {code_context_control-2.142.0 → code_context_control-2.143.0}/oracle/ui/theme_tabs.js +0 -0
  202. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/__init__.py +0 -0
  203. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/access_guard.py +0 -0
  204. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/access_telemetry.py +0 -0
  205. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/activity_log.py +0 -0
  206. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/agent_base.py +0 -0
  207. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/agent_downshift.py +0 -0
  208. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/agent_locks.py +0 -0
  209. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/agents.py +0 -0
  210. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/agents_workflow.py +0 -0
  211. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/artifact_defs.py +0 -0
  212. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/artifact_store.py +0 -0
  213. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/atomic_json.py +0 -0
  214. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/auto_memory.py +0 -0
  215. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/background_service.py +0 -0
  216. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/__init__.py +0 -0
  217. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/delegate_eval.py +0 -0
  218. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/delegate_write_eval.py +0 -0
  219. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/external/__init__.py +0 -0
  220. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/external/aider_polyglot.py +0 -0
  221. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/external/swe_bench.py +0 -0
  222. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/map_eval.py +0 -0
  223. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/search_eval.py +0 -0
  224. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bench/shell_eval.py +0 -0
  225. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/benchmark_dashboard.py +0 -0
  226. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bitbucket_client.py +0 -0
  227. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/bitbucket_credentials.py +0 -0
  228. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_act.py +0 -0
  229. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_cache.py +0 -0
  230. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_expr.py +0 -0
  231. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_failures.py +0 -0
  232. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_github.py +0 -0
  233. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_impact.py +0 -0
  234. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_intel.py +0 -0
  235. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_runner.py +0 -0
  236. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ci_workflow.py +0 -0
  237. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/circuit_breaker.py +0 -0
  238. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/codex_integration.py +0 -0
  239. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/codex_transcript.py +0 -0
  240. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/compressor.py +0 -0
  241. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/context_snapshot.py +0 -0
  242. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/conversation_store.py +0 -0
  243. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/cred_audit.py +0 -0
  244. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/cred_telemetry.py +0 -0
  245. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/credential_store.py +0 -0
  246. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/delegate_agents.py +0 -0
  247. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/delegate_hints.py +0 -0
  248. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/delegate_write.py +0 -0
  249. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/dir_map.py +0 -0
  250. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/doc_index.py +0 -0
  251. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/e2e_benchmark.py +0 -0
  252. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/e2e_evaluator.py +0 -0
  253. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/e2e_tasks.py +0 -0
  254. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/edit_ledger.py +0 -0
  255. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/embedding_index.py +0 -0
  256. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/enforcement_policy.py +0 -0
  257. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/error_reporting.py +0 -0
  258. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/file_map.py +0 -0
  259. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/file_memory.py +0 -0
  260. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/git_context.py +0 -0
  261. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/grok_integration.py +0 -0
  262. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/grok_transcript.py +0 -0
  263. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/host_sessions.py +0 -0
  264. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/hub_service.py +0 -0
  265. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/index_store.py +0 -0
  266. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/indexer.py +0 -0
  267. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/jira_client.py +0 -0
  268. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/jira_cloud.py +0 -0
  269. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/jira_credentials.py +0 -0
  270. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/jira_data_center.py +0 -0
  271. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/jira_links.py +0 -0
  272. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/lexical_index.py +0 -0
  273. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/mask_activation.py +0 -0
  274. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/mask_mirror.py +0 -0
  275. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/mask_presets.py +0 -0
  276. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory.py +0 -0
  277. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory_consolidator.py +0 -0
  278. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory_distiller.py +0 -0
  279. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory_graph.py +0 -0
  280. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory_grounder.py +0 -0
  281. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory_queue.py +0 -0
  282. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/memory_scorer.py +0 -0
  283. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/metrics.py +0 -0
  284. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/notifications.py +0 -0
  285. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ollama_bridge.py +0 -0
  286. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ollama_client.py +0 -0
  287. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/ollama_credentials.py +0 -0
  288. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/oracle_service.py +0 -0
  289. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/output_filter.py +0 -0
  290. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/override_costs.py +0 -0
  291. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/override_grants.py +0 -0
  292. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/override_policy.py +0 -0
  293. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/override_requests.py +0 -0
  294. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/override_wake.py +0 -0
  295. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/parser.py +0 -0
  296. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/project_manager.py +0 -0
  297. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/project_runtime.py +0 -0
  298. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/protocol.py +0 -0
  299. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/proxy_state.py +0 -0
  300. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/repo_map.py +0 -0
  301. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/repo_shape.py +0 -0
  302. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/reranker.py +0 -0
  303. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/retention.py +0 -0
  304. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/retrieval.py +0 -0
  305. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/retrieval_broker.py +0 -0
  306. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/router.py +0 -0
  307. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/runtime.py +0 -0
  308. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/scanner.py +0 -0
  309. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/session_benchmark.py +0 -0
  310. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/session_live.py +0 -0
  311. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/session_manager.py +0 -0
  312. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/session_preloader.py +0 -0
  313. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/shell_jobs.py +0 -0
  314. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/shell_output.py +0 -0
  315. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/subprojects.py +0 -0
  316. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/telemetry.py +0 -0
  317. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/text_index.py +0 -0
  318. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/time_tracker.py +0 -0
  319. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/tool_classifier.py +0 -0
  320. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/transcript_index.py +0 -0
  321. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/validation_cache.py +0 -0
  322. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/vector_store.py +0 -0
  323. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/watcher.py +0 -0
  324. {code_context_control-2.142.0 → code_context_control-2.143.0}/services/win_subprocess.py +0 -0
  325. {code_context_control-2.142.0 → code_context_control-2.143.0}/setup.cfg +0 -0
  326. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_access_builtin_optout.py +0 -0
  327. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_access_guard.py +0 -0
  328. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_access_guard_meta.py +0 -0
  329. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_access_guard_shell_project.py +0 -0
  330. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_access_guard_surfaces.py +0 -0
  331. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_access_guard_wiring.py +0 -0
  332. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_activity_log_find_last.py +0 -0
  333. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_activity_reporter.py +0 -0
  334. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_agent_locks.py +0 -0
  335. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_aider_polyglot.py +0 -0
  336. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_antigravity_transition.py +0 -0
  337. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_artifact_store.py +0 -0
  338. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_artifact_tool.py +0 -0
  339. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_atomic_json.py +0 -0
  340. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_background_service.py +0 -0
  341. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_bitbucket_cli_smoke.py +0 -0
  342. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_bitbucket_client.py +0 -0
  343. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_bitbucket_config_fallback.py +0 -0
  344. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_bitbucket_credentials.py +0 -0
  345. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_bitbucket_tool.py +0 -0
  346. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_builtin_modes.py +0 -0
  347. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_c3_bridge_project_artifacts.py +0 -0
  348. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_c3_shell.py +0 -0
  349. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_chat_poll.py +0 -0
  350. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_act.py +0 -0
  351. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_cache.py +0 -0
  352. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_dag_ownership.py +0 -0
  353. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_expr.py +0 -0
  354. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_impact.py +0 -0
  355. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_intel.py +0 -0
  356. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_runner.py +0 -0
  357. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ci_workflow.py +0 -0
  358. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_circuit_breaker.py +0 -0
  359. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_claude_md_merge.py +0 -0
  360. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_claude_md_updater.py +0 -0
  361. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_cli_smoke.py +0 -0
  362. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_codex_mcp_transport.py +0 -0
  363. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_codex_native.py +0 -0
  364. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_compressor_large_file.py +0 -0
  365. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_confirm_guard.py +0 -0
  366. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_confirm_guard_wiring.py +0 -0
  367. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_cooccurrence_bounds.py +0 -0
  368. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_cred_audit.py +0 -0
  369. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_cred_telemetry.py +0 -0
  370. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_credential_login_kind.py +0 -0
  371. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_credential_store.py +0 -0
  372. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_credential_ui_parity.py +0 -0
  373. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_credentials_routes.py +0 -0
  374. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_credentials_tool.py +0 -0
  375. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_creds_cli_smoke.py +0 -0
  376. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_adoption_d4.py +0 -0
  377. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_auto.py +0 -0
  378. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_cascade.py +0 -0
  379. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_claude_d1.py +0 -0
  380. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_eval.py +0 -0
  381. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_grok.py +0 -0
  382. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_host_d2.py +0 -0
  383. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_scout_d3.py +0 -0
  384. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_telemetry_d0.py +0 -0
  385. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_thinking_cap.py +0 -0
  386. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_tuning.py +0 -0
  387. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_version_probe.py +0 -0
  388. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_write.py +0 -0
  389. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_delegate_write_eval.py +0 -0
  390. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_dir_map_c3.py +0 -0
  391. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_e2e_benchmark.py +0 -0
  392. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_edit_ledger_deadline.py +0 -0
  393. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_edit_ledger_hook.py +0 -0
  394. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_edit_locking.py +0 -0
  395. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_edit_normalization.py +0 -0
  396. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_edit_verify.py +0 -0
  397. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_embedding_index_deadlock.py +0 -0
  398. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_enforcement_flip.py +0 -0
  399. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_enforcement_policy.py +0 -0
  400. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_enforcement_routes.py +0 -0
  401. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_env_parser.py +0 -0
  402. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_failed_calls_do_not_unlock.py +0 -0
  403. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_federated_graph.py +0 -0
  404. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_file_map_c1.py +0 -0
  405. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_filter_backoff.py +0 -0
  406. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ghost_files.py +0 -0
  407. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ghost_generation.py +0 -0
  408. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_git_branch_awareness.py +0 -0
  409. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_grok_native.py +0 -0
  410. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_access_guard.py +0 -0
  411. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_codex_compat.py +0 -0
  412. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_dispatch.py +0 -0
  413. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_grok_compat.py +0 -0
  414. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_pretool_enforce.py +0 -0
  415. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_prompt_recall.py +0 -0
  416. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_session_end.py +0 -0
  417. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_smoke.py +0 -0
  418. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_state.py +0 -0
  419. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hook_utf8_stdio.py +0 -0
  420. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_access_routes.py +0 -0
  421. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_credentials_route.py +0 -0
  422. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_credentials_routes_write.py +0 -0
  423. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_enforcement_routes.py +0 -0
  424. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_hook_migration.py +0 -0
  425. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_inspect_api.py +0 -0
  426. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_locks_routes.py +0 -0
  427. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_oracle_service_routes.py +0 -0
  428. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_override_policy_routes.py +0 -0
  429. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_override_routes.py +0 -0
  430. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_rules_routes.py +0 -0
  431. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_server_smoke.py +0 -0
  432. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_hub_subproject_links.py +0 -0
  433. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ide_workflow_adaptation.py +0 -0
  434. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_index_cap_not_hardcoded.py +0 -0
  435. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_init_clear_preserves_user_content.py +0 -0
  436. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_init_scan.py +0 -0
  437. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_install_mcp_entrypoint.py +0 -0
  438. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_cli_smoke.py +0 -0
  439. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_client.py +0 -0
  440. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_config_fallback.py +0 -0
  441. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_credentials.py +0 -0
  442. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_links.py +0 -0
  443. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_routes.py +0 -0
  444. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_jira_tool.py +0 -0
  445. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_large_files_c4.py +0 -0
  446. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_lazy_store_init.py +0 -0
  447. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_map_eval.py +0 -0
  448. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_map_telemetry_c0.py +0 -0
  449. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mask_guard.py +0 -0
  450. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mask_routes.py +0 -0
  451. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mask_surfaces.py +0 -0
  452. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mcp_host_guard.py +0 -0
  453. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mcp_memory_timeout.py +0 -0
  454. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mcp_server_smoke.py +0 -0
  455. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mcp_toml.py +0 -0
  456. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_memory_distiller.py +0 -0
  457. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_memory_graph_api.py +0 -0
  458. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_memory_queue.py +0 -0
  459. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_memory_system.py +0 -0
  460. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_api.py +0 -0
  461. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_clients.py +0 -0
  462. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_extras.py +0 -0
  463. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_jobs_ci.py +0 -0
  464. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_override_costs.py +0 -0
  465. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_override_routes.py +0 -0
  466. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_mobile_security_api.py +0 -0
  467. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_no_stale_model_pins.py +0 -0
  468. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_notification_dedup.py +0 -0
  469. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_notification_discipline.py +0 -0
  470. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_notification_kinds.py +0 -0
  471. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ollama_credentials.py +0 -0
  472. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_api_auth.py +0 -0
  473. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_apikey_api.py +0 -0
  474. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_c3_bridge.py +0 -0
  475. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_chat_engine.py +0 -0
  476. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_chat_store.py +0 -0
  477. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_discovery_api.py +0 -0
  478. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_discovery_audit.py +0 -0
  479. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_health_probe.py +0 -0
  480. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_local_auth.py +0 -0
  481. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_loopback.py +0 -0
  482. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_ollama_bridge.py +0 -0
  483. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_scanner_cache.py +0 -0
  484. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_security_fixes.py +0 -0
  485. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_session_bootstrap.py +0 -0
  486. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_subproject_awareness.py +0 -0
  487. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_oracle_ui_bundle.py +0 -0
  488. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_output_filter.py +0 -0
  489. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_override_costs.py +0 -0
  490. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_override_grants.py +0 -0
  491. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_override_grants_mcp.py +0 -0
  492. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_override_requests.py +0 -0
  493. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_override_wake.py +0 -0
  494. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_permissions.py +0 -0
  495. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_pm_api.py +0 -0
  496. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_project_manager.py +0 -0
  497. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_project_manager_merge.py +0 -0
  498. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_project_tool.py +0 -0
  499. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_read_coercion.py +0 -0
  500. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_read_edit_parity.py +0 -0
  501. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_read_outside_root.py +0 -0
  502. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_related_facts.py +0 -0
  503. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_repo_map.py +0 -0
  504. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_repo_shape.py +0 -0
  505. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_response_boilerplate.py +0 -0
  506. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_retention.py +0 -0
  507. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_review_digest.py +0 -0
  508. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_eval.py +0 -0
  509. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_p1.py +0 -0
  510. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_p2.py +0 -0
  511. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_p2b.py +0 -0
  512. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_p3.py +0 -0
  513. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_p4.py +0 -0
  514. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_search_p5.py +0 -0
  515. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_service_durability.py +0 -0
  516. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_session_benchmark.py +0 -0
  517. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_session_budget.py +0 -0
  518. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_session_live.py +0 -0
  519. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_budget_s1.py +0 -0
  520. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_creds.py +0 -0
  521. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_eval.py +0 -0
  522. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_jobs_s3.py +0 -0
  523. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_nudge_s4.py +0 -0
  524. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_output.py +0 -0
  525. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_parsers_s2.py +0 -0
  526. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_robustness.py +0 -0
  527. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_telemetry_s0.py +0 -0
  528. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_write_ledger.py +0 -0
  529. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_shell_writes.py +0 -0
  530. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_subproject_clear_scope.py +0 -0
  531. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_subproject_depth_consumers.py +0 -0
  532. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_subproject_exclusion.py +0 -0
  533. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_subproject_federation.py +0 -0
  534. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_subproject_linkage_api.py +0 -0
  535. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_subprojects.py +0 -0
  536. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_swe_bench.py +0 -0
  537. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_task_store.py +0 -0
  538. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_task_tool.py +0 -0
  539. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_time_tracker.py +0 -0
  540. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_token_telemetry.py +0 -0
  541. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_token_tracking.py +0 -0
  542. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_tool_registry.py +0 -0
  543. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_ui_jsx_syntax.py +0 -0
  544. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_upgrade_and_version.py +0 -0
  545. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_validate.py +0 -0
  546. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_vault_write_guard.py +0 -0
  547. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_version_sync.py +0 -0
  548. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_watcher_pruning.py +0 -0
  549. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_web_security.py +0 -0
  550. {code_context_control-2.142.0 → code_context_control-2.143.0}/tests/test_windows_reliability.py +0 -0
  551. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/__init__.py +0 -0
  552. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/backend.py +0 -0
  553. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/main.py +0 -0
  554. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/__init__.py +0 -0
  555. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/benchmark_view.py +0 -0
  556. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/claudemd_view.py +0 -0
  557. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/compress_view.py +0 -0
  558. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/index_view.py +0 -0
  559. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/init_view.py +0 -0
  560. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/mcp_view.py +0 -0
  561. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/optimize_view.py +0 -0
  562. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/pipe_view.py +0 -0
  563. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/projects_view.py +0 -0
  564. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/search_view.py +0 -0
  565. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/session_view.py +0 -0
  566. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/stats.py +0 -0
  567. {code_context_control-2.142.0 → code_context_control-2.143.0}/tui/screens/ui_view.py +0 -0
  568. {code_context_control-2.142.0 → code_context_control-2.143.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.142.0
3
+ Version: 2.143.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
@@ -163,6 +163,8 @@ Every C3-initialized project registers itself here on `c3 init`. Filter by activ
163
163
 
164
164
  Three top-level views — **Projects**, **Tasks** (a cross-project kanban), and **Credentials** — plus a drill-in panel per project covering Overview, Sub-projects, Tasks, Artifacts, Memory, Ledger, Sessions, Health, Budget, Credentials, Config, and MCP.
165
165
 
166
+ **Sessions** (v2.143.0) lists past Claude Code sessions across projects: the title, first and last prompt, the agent's note, and linked tasks and decisions. **Resume** opens a terminal running `claude --resume <id>`, or you can copy the command or open the claude.ai/code link. Agents mark dead ends stale with `c3_session(action='stale')`. → [Sessions](https://github.com/drknowhow/code-context-control/blob/main/docs/sessions.md)
167
+
166
168
  **Sub-projects** make one project a first-class child of another, with its own `.c3`. It can be a nested repo — the parent's index then excludes its subtree — or a project anywhere else on disk, linked by path. Hierarchies nest up to 8 levels, and `c3_search` / `c3_memory` fan out on demand (`scope='all'`, or one by name). → [Sub-projects guide](https://github.com/drknowhow/code-context-control/blob/main/docs/sub-projects.md)
167
169
 
168
170
  ### Per-project UI
@@ -97,6 +97,8 @@ Every C3-initialized project registers itself here on `c3 init`. Filter by activ
97
97
 
98
98
  Three top-level views — **Projects**, **Tasks** (a cross-project kanban), and **Credentials** — plus a drill-in panel per project covering Overview, Sub-projects, Tasks, Artifacts, Memory, Ledger, Sessions, Health, Budget, Credentials, Config, and MCP.
99
99
 
100
+ **Sessions** (v2.143.0) lists past Claude Code sessions across projects: the title, first and last prompt, the agent's note, and linked tasks and decisions. **Resume** opens a terminal running `claude --resume <id>`, or you can copy the command or open the claude.ai/code link. Agents mark dead ends stale with `c3_session(action='stale')`. → [Sessions](https://github.com/drknowhow/code-context-control/blob/main/docs/sessions.md)
101
+
100
102
  **Sub-projects** make one project a first-class child of another, with its own `.c3`. It can be a nested repo — the parent's index then excludes its subtree — or a project anywhere else on disk, linked by path. Hierarchies nest up to 8 levels, and `c3_search` / `c3_memory` fan out on demand (`scope='all'`, or one by name). → [Sub-projects guide](https://github.com/drknowhow/code-context-control/blob/main/docs/sub-projects.md)
101
103
 
102
104
  ### Per-project UI
@@ -91,7 +91,7 @@ console = Console() if HAS_RICH else None
91
91
  # Config
92
92
  CONFIG_DIR = ".c3"
93
93
  CONFIG_FILE = ".c3/config.json"
94
- __version__ = "2.142.0"
94
+ __version__ = "2.143.0"
95
95
 
96
96
  # The PreToolUse matcher for native subagent calls (installer and hub migration).
97
97
  AGENT_MATCHER = "Agent|Task"
@@ -5081,6 +5081,7 @@ back to native tools as the task progresses.
5081
5081
  - **Filter**: `c3_filter(text=...)` — for terminal output >10 lines
5082
5082
  - **Shell**: `c3_shell(cmd, timeout=60)` — structured shell exec (tests/git/build). Auto-filters output, logs git mutations to the ledger. Native Bash for interactive/TTY only
5083
5083
  - **Memory**: `c3_memory(action='recall')` — full recall. `index` + `fetch` for token-efficient two-step retrieval
5084
+ - **Sessions** (v2.143.0+): `c3_session(action='note', data=<done>, reasoning=<next steps>)` before you stop; `c3_session(action='stale', target=<id>, reasoning=<why>)` when your work supersedes, finishes or abandons an earlier session (`action='list'` shows them). The Hub/Desk Sessions view resumes the rest
5084
5085
  - **Delegate**: `c3_delegate(task, task_type, context|file_path)` — your own provider one tier down (default `backend='host'`, `tier='small'`; Claude Code: Haiku) for bounded answers: summarize a diff/log, explain a function, triage a traceback. `scout=true` lets it look files up itself; `write_paths='a.py,b.py'` has Sonnet make a change you specified in only those files and return the diff. Multi-step work: the `c3-scout` (haiku) / `c3-worker` (sonnet) subagents; an `Agent` call with no `model` runs one tier below you (pass `model=` to choose)
5085
5086
  - **Local CI** (v2.79.0+): `c3_ci(action='inspect|run|rerun|failures')` — run THIS repo's real `.github/workflows` here instead of pushing for feedback. `run` executes in `needs` order; `failures` gives {file,line,message}; `rerun` retries only what failed. Only `FULL_CI_PASS` means safe to push — `PARTIAL_PASS` means something did not run (other OS, unsupported action, or your selection).
5086
5087
  - **Bitbucket** (v2.30.0+, when `c3 bitbucket login` has run): `c3_bitbucket(action='list_prs|get_pr|merge_pr|...')` — self-hosted Bitbucket Data Center / Server. Token in OS keyring; mutating actions auto-log to the edit ledger.
@@ -77,6 +77,10 @@ _HUB_CONFIG_DEFAULTS = {
77
77
  "ui_reap_minutes": 30,
78
78
  }
79
79
 
80
+ # Top-bar tabs a persisted ``main_view`` may name (cli/hub_ui/components/topbar.js).
81
+ _MAIN_VIEWS = {"projects", "board", "ci", "creds", "tokens", "locks", "access",
82
+ "enforce", "sessions"}
83
+
80
84
  # How often the hub reaps orphaned UI servers and chases autostart projects.
81
85
  _UI_SWEEP_INTERVAL_S = 60
82
86
 
@@ -348,6 +352,7 @@ _HUB_JS_FILES = [
348
352
  "hub_ui/components/hub_locks.js",
349
353
  "hub_ui/components/hub_access.js",
350
354
  "hub_ui/components/hub_enforcement.js",
355
+ "hub_ui/components/hub_sessions.js",
351
356
  "hub_ui/components/hub_ci.js",
352
357
  "hub_ui/components/drill_subprojects.js",
353
358
  "hub_ui/components/drill_health.js",
@@ -447,9 +452,11 @@ def api_hub_config_set():
447
452
  cfg["projects_view"] = projects_view
448
453
  if "main_view" in data:
449
454
  main_view = str(data["main_view"]).strip().lower()
450
- if main_view not in {"projects", "board", "creds", "locks", "enforce"}:
451
- return jsonify({"error": "main_view must be 'projects', 'board', "
452
- "'creds', 'locks' or 'enforce'"}), 400
455
+ # Every tab the top bar offers. ci, tokens and access were missing, so
456
+ # choosing one of those tabs 400'd here and never survived a reload.
457
+ if main_view not in _MAIN_VIEWS:
458
+ return jsonify({"error": "main_view must be one of: "
459
+ + ", ".join(sorted(_MAIN_VIEWS))}), 400
453
460
  cfg["main_view"] = main_view
454
461
  if "oracle_url" in data:
455
462
  cfg["oracle_url"] = str(data["oracle_url"]).strip()
@@ -777,45 +784,9 @@ def api_launch_ide():
777
784
  kwargs = {"start_new_session": True}
778
785
  subprocess.Popen([cmd, str(path)], **kwargs)
779
786
  else:
780
- # Terminal CLIs: open a new terminal window running the command
781
- if sys.platform == "win32":
782
- # On Windows, use the command directly (globally installed CLIs)
783
- win_cmd = cmd
784
-
785
- # Try Windows Terminal first, fall back to cmd
786
- try:
787
- # Windows Terminal 'wt' needs a full command to run
788
- # We wrap the command in 'cmd /k' so the terminal stays open
789
- subprocess.Popen(
790
- ["wt", "-d", str(path), "cmd", "/k", win_cmd],
791
- creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP,
792
- )
793
- except FileNotFoundError:
794
- # Fallback to classic cmd.exe
795
- subprocess.Popen(
796
- ["cmd", "/c", "start", "", "cmd", "/k", win_cmd],
797
- cwd=str(path),
798
- creationflags=subprocess.CREATE_NEW_PROCESS_GROUP,
799
- )
800
- elif sys.platform == "darwin":
801
- script = (
802
- f'tell application "Terminal" to do script '
803
- f'"cd {shlex.quote(str(path))} && {cmd}"'
804
- )
805
- subprocess.Popen(["osascript", "-e", script])
806
- else:
807
- q = shlex.quote(str(path))
808
- for term_args in [
809
- ["gnome-terminal", "--", "bash", "-c", f"cd {q} && {cmd}; exec bash"],
810
- ["xterm", "-e", f"bash -c 'cd {q} && {cmd}; exec bash'"],
811
- ["konsole", "-e", "bash", "-c", f"cd {q} && {cmd}; exec bash"],
812
- ["xfce4-terminal", "--command", f"bash -c 'cd {q} && {cmd}; exec bash'"],
813
- ]:
814
- try:
815
- subprocess.Popen(term_args, start_new_session=True)
816
- break
817
- except FileNotFoundError:
818
- continue
787
+ # Terminal CLIs: open a new terminal window running the command.
788
+ from services.terminal_launch import spawn_terminal
789
+ spawn_terminal(path, [cmd])
819
790
 
820
791
  return jsonify({"launched": True})
821
792
  except Exception as e:
@@ -4808,6 +4779,164 @@ def api_sessions():
4808
4779
  return jsonify({"error": str(e)}), 500
4809
4780
 
4810
4781
 
4782
+ # ─── Routes: session history (2.143.0) ──────────────────────────────────────
4783
+ # PAST agent sessions: find one, see what it was, resume it, mark it stale.
4784
+ # Not to be confused with /api/sessions* above, which manage per-project UI
4785
+ # servers. Loopback + the CSRF guard like every Hub route; deliberately NOT
4786
+ # mirrored on the Oracle gateway, which can bind to the tailnet — transcript
4787
+ # previews stay on this machine. See docs/sessions.md.
4788
+
4789
+ _SESSIONS_FEATURES = ["list", "detail", "mark", "note", "resume", "remote"]
4790
+ _SESSIONS_STALE = {"hide", "only", "likely", "all"}
4791
+
4792
+
4793
+ def _session_project(raw: str):
4794
+ """``{name, path}`` of the REGISTERED project ``raw`` names, or None.
4795
+
4796
+ Every session route resolves its project against the registry first, so a
4797
+ caller can never point the catalog (or a terminal) at an arbitrary folder.
4798
+ """
4799
+ raw = str(raw or "").strip()
4800
+ if not raw:
4801
+ return None
4802
+ want = os.path.normcase(os.path.normpath(raw))
4803
+ for p in _pm().list_projects():
4804
+ path = str(p.get("path") or "")
4805
+ if path and os.path.normcase(os.path.normpath(path)) == want:
4806
+ return {"name": str(p.get("name") or Path(path).name), "path": path}
4807
+ return None
4808
+
4809
+
4810
+ def _session_project_or_error(raw: str):
4811
+ proj = _session_project(raw)
4812
+ if proj is None:
4813
+ return None, (jsonify({"error": "not a registered project"}), 404)
4814
+ if not (Path(proj["path"]) / ".c3").is_dir():
4815
+ return None, (jsonify({"error": "C3 is not initialized in this project"}), 409)
4816
+ return proj, None
4817
+
4818
+
4819
+ @app.route("/api/hub/sessions/overview", methods=["GET"])
4820
+ def api_hub_sessions_overview():
4821
+ """Per-project session counts for the picker. Stats files only."""
4822
+ from concurrent.futures import ThreadPoolExecutor
4823
+
4824
+ from services import session_catalog as sc
4825
+
4826
+ def one(p):
4827
+ ppath = str(p.get("path") or "")
4828
+ name = str(p.get("name") or Path(ppath).name)
4829
+ row = {"name": name, "path": ppath, "initialized": True, "error": None,
4830
+ "counts": {"total": 0, "live": 0, "stale": 0, "idle": 0},
4831
+ "last_active": "", "newest": None, "transcripts": False}
4832
+ try:
4833
+ if not (Path(ppath) / ".c3").is_dir():
4834
+ row["initialized"] = False
4835
+ else:
4836
+ row.update(sc.overview(ppath, name=name))
4837
+ except Exception as e:
4838
+ row["error"] = str(e)
4839
+ return row
4840
+
4841
+ with ThreadPoolExecutor(max_workers=8) as pool:
4842
+ rows = list(pool.map(one, _pm().list_projects()))
4843
+ rows.sort(key=lambda r: r.get("last_active") or "", reverse=True)
4844
+ return jsonify({"projects": rows, "features": _SESSIONS_FEATURES})
4845
+
4846
+
4847
+ @app.route("/api/hub/sessions", methods=["GET"])
4848
+ def api_hub_sessions_list():
4849
+ """Rows for one project (``?path=``) or every project (no path)."""
4850
+ from services import session_catalog as sc
4851
+ stale = (request.args.get("stale") or "hide").strip().lower()
4852
+ if stale not in _SESSIONS_STALE:
4853
+ return jsonify({"error": f"stale must be one of {sorted(_SESSIONS_STALE)}"}), 400
4854
+ try:
4855
+ limit = int(request.args.get("limit") or 50)
4856
+ except ValueError:
4857
+ return jsonify({"error": "limit must be an integer"}), 400
4858
+ q = (request.args.get("q") or "").strip()
4859
+ before = (request.args.get("before") or "").strip()
4860
+ raw = (request.args.get("path") or "").strip()
4861
+ try:
4862
+ if raw:
4863
+ proj, err = _session_project_or_error(raw)
4864
+ if err:
4865
+ return err
4866
+ res = sc.list_sessions(proj["path"], name=proj["name"], stale=stale, q=q,
4867
+ limit=limit, before=before)
4868
+ res["errors"] = []
4869
+ else:
4870
+ projects = [{"name": str(p.get("name") or ""), "path": str(p.get("path") or "")}
4871
+ for p in _pm().list_projects()]
4872
+ res = sc.list_many(projects, stale=stale, q=q, limit=limit, before=before)
4873
+ return jsonify(res)
4874
+ except Exception as e:
4875
+ return jsonify({"error": str(e)}), 500
4876
+
4877
+
4878
+ @app.route("/api/hub/sessions/detail", methods=["GET"])
4879
+ def api_hub_sessions_detail():
4880
+ from services import session_catalog as sc
4881
+ proj, err = _session_project_or_error(request.args.get("path") or "")
4882
+ if err:
4883
+ return err
4884
+ res = sc.get_session(proj["path"], request.args.get("id") or "", name=proj["name"])
4885
+ if "error" in res:
4886
+ return jsonify(res), 404
4887
+ return jsonify(res)
4888
+
4889
+
4890
+ @app.route("/api/hub/sessions/mark", methods=["POST"])
4891
+ def api_hub_sessions_mark():
4892
+ """Body: {path, id, op: stale|unstale|note, reason?, successor?,
4893
+ summary?, next_steps?}. Recorded as ``by: user``."""
4894
+ from services import session_catalog as sc
4895
+ data = request.get_json(force=True) or {}
4896
+ proj, err = _session_project_or_error(data.get("path") or "")
4897
+ if err:
4898
+ return err
4899
+ res = sc.mark(proj["path"], str(data.get("id") or ""), str(data.get("op") or ""),
4900
+ reason=str(data.get("reason") or ""),
4901
+ successor=str(data.get("successor") or ""),
4902
+ summary=str(data.get("summary") or ""),
4903
+ next_steps=str(data.get("next_steps") or ""), by="user")
4904
+ if "error" in res:
4905
+ return jsonify({"error": res["error"]}), int(res.get("status") or 400)
4906
+ return jsonify(res)
4907
+
4908
+
4909
+ @app.route("/api/hub/sessions/resume", methods=["POST"])
4910
+ def api_hub_sessions_resume():
4911
+ """Body: {path, id}. Opens a terminal running ``claude --resume <id>``.
4912
+
4913
+ The command is built by the catalog from a validated id — nothing from the
4914
+ request reaches the command line. 409 while the session is open.
4915
+ """
4916
+ from services import session_catalog as sc
4917
+ from services import terminal_launch
4918
+ data = request.get_json(force=True) or {}
4919
+ proj, err = _session_project_or_error(data.get("path") or "")
4920
+ if err:
4921
+ return err
4922
+ spec = sc.resume_spec(proj["path"], str(data.get("id") or ""))
4923
+ if "error" in spec:
4924
+ return jsonify({"error": spec["error"]}), int(spec.get("status") or 404)
4925
+ try:
4926
+ terminal_launch.spawn_terminal(spec["cwd"], spec["argv"])
4927
+ except Exception as e:
4928
+ return jsonify({"error": f"could not open a terminal: {e}",
4929
+ "command": spec["command"]}), 500
4930
+ try:
4931
+ from services.activity_log import ActivityLog
4932
+ ActivityLog(proj["path"]).log("session_resume", {
4933
+ "host_session_id": spec["id"], "by": "user", "cwd": spec["cwd"]})
4934
+ except Exception:
4935
+ pass
4936
+ return jsonify({"launched": True, "id": spec["id"], "command": spec["command"],
4937
+ "cwd": spec["cwd"]})
4938
+
4939
+
4811
4940
  # ─── Error handlers ──────────────────────────────────────────────────────────
4812
4941
 
4813
4942
  @app.errorhandler(404)
@@ -17,7 +17,7 @@ function App() {
17
17
  const [version, setVersion] = useState('');
18
18
  const [projects, setProjects] = useState([]);
19
19
  const [loaded, setLoaded] = useState(false);
20
- const [mainView, setMainView] = useState('projects'); // projects | board | ci | creds | locks | enforce
20
+ const [mainView, setMainView] = useState('projects'); // projects | board | ci | creds | tokens | locks | access | enforce | sessions
21
21
  const [filter, setFilter] = useState('all'); // all | active | idle | tag:<x>
22
22
  const [search, setSearch] = useState('');
23
23
  const [view, setView] = useState('list'); // list | grid
@@ -44,7 +44,7 @@ function App() {
44
44
  if (cfg.projects_view === 'grid') setView('grid');
45
45
  if (cfg.sidebar_collapsed != null) setSidebarCollapsed(!!cfg.sidebar_collapsed);
46
46
  if (cfg.sidebar_group) setFilter(cfg.sidebar_group);
47
- if (['board', 'ci', 'creds', 'tokens', 'locks', 'access', 'enforce'].includes(cfg.main_view)) setMainView(cfg.main_view);
47
+ if (['board', 'ci', 'creds', 'tokens', 'locks', 'access', 'enforce', 'sessions'].includes(cfg.main_view)) setMainView(cfg.main_view);
48
48
  } catch { }
49
49
  try { const v = await api.get('/api/version'); setVersion(v.c3_version || ''); } catch { }
50
50
  }, []);
@@ -124,6 +124,8 @@ function App() {
124
124
  <HubAccess projects={projects} />
125
125
  ) : mainView === 'enforce' ? (
126
126
  <HubEnforcement projects={projects} onOpenDrill={openDrill} />
127
+ ) : mainView === 'sessions' ? (
128
+ <HubSessions projects={projects} />
127
129
  ) : (
128
130
  <React.Fragment>
129
131
  <SummaryBar projects={projects} search={search} setSearch={setSearch}