execweave 0.8.11__tar.gz → 0.8.13__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 (593) hide show
  1. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/ci.yml +4 -1
  2. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/provider-capability-stage-integrity.yml +52 -1
  3. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/provider-dashboard-contract.yml +2 -0
  4. execweave-0.8.13/.github/workflows/viewer-agent-isolation.yml +89 -0
  5. {execweave-0.8.11 → execweave-0.8.13}/.gitignore +2 -0
  6. execweave-0.8.13/PKG-INFO +357 -0
  7. execweave-0.8.13/README.de.md +302 -0
  8. execweave-0.8.13/README.fr.md +302 -0
  9. execweave-0.8.13/README.ja.md +302 -0
  10. execweave-0.8.13/README.ko.md +302 -0
  11. execweave-0.8.13/README.md +302 -0
  12. execweave-0.8.13/README.ru.md +302 -0
  13. execweave-0.8.13/README.zh-CN.md +302 -0
  14. execweave-0.8.13/README.zh-TW.md +302 -0
  15. execweave-0.8.13/diagnostics/acceptance_hardening_20260906.md +202 -0
  16. execweave-0.8.13/diagnostics/audit_eight_children.py +134 -0
  17. execweave-0.8.13/diagnostics/audit_python_journey.py +215 -0
  18. execweave-0.8.13/diagnostics/audit_real_clicks.py +83 -0
  19. execweave-0.8.13/diagnostics/current_state_reaudit.md +101 -0
  20. execweave-0.8.13/diagnostics/execweave_full_audit.md +468 -0
  21. execweave-0.8.13/diagnostics/gate_status.md +69 -0
  22. execweave-0.8.13/diagnostics/gate_status_history_through_g3.md +171 -0
  23. execweave-0.8.13/diagnostics/github_pr_inventory.json +402 -0
  24. execweave-0.8.13/diagnostics/handoff_checkpoint_20260906.md +98 -0
  25. execweave-0.8.13/diagnostics/next_agent_handoff.md +154 -0
  26. execweave-0.8.13/diagnostics/pr_regression_map.md +803 -0
  27. {execweave-0.8.11 → execweave-0.8.13}/pyproject.toml +6 -3
  28. execweave-0.8.13/scripts/_dashboard_acceptance_impl.py +598 -0
  29. execweave-0.8.13/scripts/_ollama_interactive_acceptance_impl.py +806 -0
  30. execweave-0.8.13/scripts/_ollama_visible_acceptance_impl.py +852 -0
  31. execweave-0.8.13/scripts/_python_native_acceptance_impl.py +542 -0
  32. execweave-0.8.13/scripts/acceptance/__init__.py +1 -0
  33. execweave-0.8.13/scripts/acceptance/browser_diagnostics.py +81 -0
  34. execweave-0.8.13/scripts/acceptance/contracts.py +33 -0
  35. execweave-0.8.13/scripts/acceptance/g5_runner.py +468 -0
  36. execweave-0.8.13/scripts/acceptance/g6_runner.py +258 -0
  37. execweave-0.8.13/scripts/acceptance/interrupt_guard.py +88 -0
  38. execweave-0.8.13/scripts/acceptance/processes.py +207 -0
  39. execweave-0.8.13/scripts/acceptance/reporting.py +336 -0
  40. execweave-0.8.13/scripts/acceptance/terminal_output.py +242 -0
  41. execweave-0.8.13/scripts/annotate_pytest_failures.py +52 -0
  42. {execweave-0.8.11 → execweave-0.8.13}/scripts/audit_i18n_parity.py +4 -13
  43. execweave-0.8.13/scripts/check_release_stage_integrity.py +79 -0
  44. execweave-0.8.13/scripts/dashboard_acceptance.py +49 -0
  45. execweave-0.8.13/scripts/measure_graph_metrics.py +932 -0
  46. execweave-0.8.13/scripts/ollama_interactive_acceptance.py +88 -0
  47. execweave-0.8.13/scripts/ollama_visible_acceptance.py +33 -0
  48. execweave-0.8.13/scripts/owned_cleanup_acceptance.py +164 -0
  49. execweave-0.8.13/scripts/python_native_acceptance.py +52 -0
  50. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/__init__.py +1 -1
  51. execweave-0.8.11/src/execweave/dashboard_shell.py → execweave-0.8.13/src/execweave/_dashboard_shell_base.py +31 -1
  52. execweave-0.8.11/src/execweave/http_proxy.py → execweave-0.8.13/src/execweave/_http_proxy_base.py +79 -26
  53. execweave-0.8.13/src/execweave/_http_proxy_bounded.py +519 -0
  54. execweave-0.8.13/src/execweave/_http_proxy_stage.py +506 -0
  55. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_hook_cli.py +31 -3
  56. execweave-0.8.13/src/execweave/codex_hook_entry.py +204 -0
  57. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_hook_lifecycle.py +34 -0
  58. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/collector.py +185 -31
  59. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/command.py +6 -1
  60. execweave-0.8.13/src/execweave/dashboard_shell.py +273 -0
  61. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/fidelity.py +20 -7
  62. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/filesystem.py +12 -5
  63. execweave-0.8.13/src/execweave/http_proxy.py +187 -0
  64. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live.py +18 -13
  65. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_core.py +22 -8
  66. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view.py +6 -4
  67. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_process_layout.py +311 -25
  68. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_readability.py +56 -16
  69. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_script_a.py +2 -2
  70. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_script_b.py +82 -4
  71. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_script_d.py +3 -3
  72. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_style.py +7 -7
  73. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/semantic.py +12 -7
  74. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_dashboard_clean.py +13 -0
  75. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_dashboard_hardening.py +1 -0
  76. execweave-0.8.13/src/execweave/viewer_external_endpoints.py +307 -0
  77. execweave-0.8.13/src/execweave/viewer_semantic_projection.py +332 -0
  78. execweave-0.8.13/tests/test_acceptance_browser_diagnostics_e2e.py +138 -0
  79. execweave-0.8.13/tests/test_acceptance_conpty_selection.py +43 -0
  80. execweave-0.8.13/tests/test_acceptance_interrupt_guard.py +65 -0
  81. execweave-0.8.13/tests/test_acceptance_owned_processes.py +112 -0
  82. execweave-0.8.13/tests/test_acceptance_required_capabilities.py +64 -0
  83. execweave-0.8.13/tests/test_acceptance_terminal_output.py +79 -0
  84. execweave-0.8.13/tests/test_acceptance_visible_pipe.py +47 -0
  85. execweave-0.8.13/tests/test_auto_specialized_ollama_two_phase.py +230 -0
  86. execweave-0.8.13/tests/test_cleanup_finalizer_identity.py +31 -0
  87. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_adapter.py +5 -1
  88. execweave-0.8.13/tests/test_codex_hook_global_fail_open.py +99 -0
  89. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_hook_lifecycle.py +18 -2
  90. execweave-0.8.13/tests/test_codex_interrupt_contract.py +73 -0
  91. {execweave-0.8.11 → execweave-0.8.13}/tests/test_command.py +3 -0
  92. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_access.py +6 -1
  93. execweave-0.8.13/tests/test_dagre_semantic_pipeline.py +254 -0
  94. execweave-0.8.13/tests/test_dashboard_acceptance_relative_output_e2e.py +36 -0
  95. execweave-0.8.13/tests/test_dashboard_acceptance_reporting.py +60 -0
  96. execweave-0.8.13/tests/test_dashboard_camera_scheduler_e2e.py +299 -0
  97. execweave-0.8.13/tests/test_dashboard_favicon.py +8 -0
  98. execweave-0.8.13/tests/test_dashboard_gif_export_e2e.py +108 -0
  99. {execweave-0.8.11 → execweave-0.8.13}/tests/test_dashboard_information_architecture.py +8 -1
  100. execweave-0.8.13/tests/test_dashboard_initial_fit_readability_e2e.py +107 -0
  101. execweave-0.8.13/tests/test_dashboard_node_drag_camera_e2e.py +67 -0
  102. {execweave-0.8.11 → execweave-0.8.13}/tests/test_external_endpoints_all_providers.py +66 -42
  103. execweave-0.8.13/tests/test_g5_hardening_contract.py +39 -0
  104. execweave-0.8.13/tests/test_g6_owned_parity_contract.py +133 -0
  105. execweave-0.8.13/tests/test_graph_arrange_constraints_e2e.py +111 -0
  106. {execweave-0.8.11 → execweave-0.8.13}/tests/test_graph_clear_focus_e2e.py +4 -0
  107. {execweave-0.8.11 → execweave-0.8.13}/tests/test_graph_edge_routing_e2e.py +4 -0
  108. {execweave-0.8.11 → execweave-0.8.13}/tests/test_graph_lane_separation_e2e.py +52 -47
  109. {execweave-0.8.11 → execweave-0.8.13}/tests/test_graph_node_sizing_e2e.py +2 -0
  110. execweave-0.8.13/tests/test_http_proxy_request_phase.py +121 -0
  111. execweave-0.8.13/tests/test_http_proxy_response_memory.py +154 -0
  112. execweave-0.8.13/tests/test_http_proxy_streaming.py +116 -0
  113. execweave-0.8.13/tests/test_i18n_readme_policy.py +49 -0
  114. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live_auth.py +47 -0
  115. execweave-0.8.13/tests/test_ollama_interactive_acceptance.py +269 -0
  116. execweave-0.8.13/tests/test_ollama_interactive_terminal_semantics.py +76 -0
  117. execweave-0.8.13/tests/test_ollama_visible_acceptance.py +254 -0
  118. execweave-0.8.13/tests/test_pro6_audit_regressions.py +228 -0
  119. {execweave-0.8.11 → execweave-0.8.13}/tests/test_process_tree_layout.py +4 -5
  120. execweave-0.8.13/tests/test_provider_neutral_viewer_semantics.py +190 -0
  121. execweave-0.8.13/tests/test_pypi_0812_regressions.py +171 -0
  122. execweave-0.8.13/tests/test_python_native_acceptance.py +107 -0
  123. execweave-0.8.13/tests/test_relay_prompt_live_e2e.py +179 -0
  124. {execweave-0.8.11 → execweave-0.8.13}/tests/test_semantic.py +39 -0
  125. execweave-0.8.13/tests/test_single_agent_barycenter.py +261 -0
  126. {execweave-0.8.11 → execweave-0.8.13}/tests/test_tool_traffic_e2e.py +4 -0
  127. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v069_dashboard_release.py +16 -12
  128. {execweave-0.8.11 → execweave-0.8.13}/tests/test_viewer_agent_isolation_e2e.py +2 -1
  129. {execweave-0.8.11 → execweave-0.8.13}/tests/test_viewer_projection.py +102 -44
  130. execweave-0.8.13/tests/test_visual_ux_readability.py +256 -0
  131. execweave-0.8.13/tools/verify_metrics_tool.py +104 -0
  132. execweave-0.8.11/.github/workflows/viewer-agent-isolation.yml +0 -45
  133. execweave-0.8.11/PKG-INFO +0 -347
  134. execweave-0.8.11/README.de.md +0 -286
  135. execweave-0.8.11/README.fr.md +0 -286
  136. execweave-0.8.11/README.ja.md +0 -286
  137. execweave-0.8.11/README.ko.md +0 -286
  138. execweave-0.8.11/README.md +0 -294
  139. execweave-0.8.11/README.ru.md +0 -286
  140. execweave-0.8.11/README.zh-CN.md +0 -286
  141. execweave-0.8.11/README.zh-TW.md +0 -286
  142. execweave-0.8.11/src/execweave/viewer_external_endpoints.py +0 -199
  143. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/cleanup-workflow-history.yml +0 -0
  144. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/i18n.yml +0 -0
  145. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/package-benchmark.yml +0 -0
  146. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/package-smoke.yml +0 -0
  147. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/publish.yml +0 -0
  148. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/scalability.yml +0 -0
  149. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/wheel-smoke.yml +0 -0
  150. {execweave-0.8.11 → execweave-0.8.13}/.github/workflows/windows-launcher.yml +0 -0
  151. {execweave-0.8.11 → execweave-0.8.13}/LICENSE +0 -0
  152. {execweave-0.8.11 → execweave-0.8.13}/benchmarks/phase1_overhead.py +0 -0
  153. {execweave-0.8.11 → execweave-0.8.13}/docs/antigravity-hooks.md +0 -0
  154. {execweave-0.8.11 → execweave-0.8.13}/docs/assets/codex.gif +0 -0
  155. {execweave-0.8.11 → execweave-0.8.13}/docs/benchmarks/README.md +0 -0
  156. {execweave-0.8.11 → execweave-0.8.13}/docs/benchmarks/v0.6.0-github-actions.json +0 -0
  157. {execweave-0.8.11 → execweave-0.8.13}/docs/benchmarks/v0.6.0-github-actions.svg +0 -0
  158. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.de.md +0 -0
  159. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.fr.md +0 -0
  160. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.ja.md +0 -0
  161. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.ko.md +0 -0
  162. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.md +0 -0
  163. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.ru.md +0 -0
  164. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.zh-CN.md +0 -0
  165. {execweave-0.8.11 → execweave-0.8.13}/docs/claude-code-hooks.zh-TW.md +0 -0
  166. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.de.md +0 -0
  167. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.fr.md +0 -0
  168. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.ja.md +0 -0
  169. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.ko.md +0 -0
  170. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.md +0 -0
  171. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.ru.md +0 -0
  172. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.zh-CN.md +0 -0
  173. {execweave-0.8.11 → execweave-0.8.13}/docs/codex-hooks.zh-TW.md +0 -0
  174. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.de.md +0 -0
  175. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.fr.md +0 -0
  176. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.ja.md +0 -0
  177. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.ko.md +0 -0
  178. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.md +0 -0
  179. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.ru.md +0 -0
  180. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.zh-CN.md +0 -0
  181. {execweave-0.8.11 → execweave-0.8.13}/docs/cursor-hooks.zh-TW.md +0 -0
  182. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.de.md +0 -0
  183. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.fr.md +0 -0
  184. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.ja.md +0 -0
  185. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.ko.md +0 -0
  186. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.md +0 -0
  187. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.ru.md +0 -0
  188. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.zh-CN.md +0 -0
  189. {execweave-0.8.11 → execweave-0.8.13}/docs/evidence-grades.zh-TW.md +0 -0
  190. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.de.md +0 -0
  191. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.fr.md +0 -0
  192. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.ja.md +0 -0
  193. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.ko.md +0 -0
  194. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.md +0 -0
  195. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.ru.md +0 -0
  196. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.zh-CN.md +0 -0
  197. {execweave-0.8.11 → execweave-0.8.13}/docs/inference-gateway.zh-TW.md +0 -0
  198. {execweave-0.8.11 → execweave-0.8.13}/docs/internal/provider-capability-matrix.md +0 -0
  199. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.de.md +0 -0
  200. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.fr.md +0 -0
  201. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.ja.md +0 -0
  202. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.ko.md +0 -0
  203. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.md +0 -0
  204. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.ru.md +0 -0
  205. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.zh-CN.md +0 -0
  206. {execweave-0.8.11 → execweave-0.8.13}/docs/live-graph.zh-TW.md +0 -0
  207. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.de.md +0 -0
  208. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.fr.md +0 -0
  209. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.ja.md +0 -0
  210. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.ko.md +0 -0
  211. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.md +0 -0
  212. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.ru.md +0 -0
  213. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.zh-CN.md +0 -0
  214. {execweave-0.8.11 → execweave-0.8.13}/docs/model-runtime.zh-TW.md +0 -0
  215. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.de.md +0 -0
  216. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.fr.md +0 -0
  217. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.ja.md +0 -0
  218. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.ko.md +0 -0
  219. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.md +0 -0
  220. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.ru.md +0 -0
  221. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.zh-CN.md +0 -0
  222. {execweave-0.8.11 → execweave-0.8.13}/docs/opencode-plugin.zh-TW.md +0 -0
  223. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.de.md +0 -0
  224. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.fr.md +0 -0
  225. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.ja.md +0 -0
  226. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.ko.md +0 -0
  227. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.md +0 -0
  228. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.ru.md +0 -0
  229. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.zh-CN.md +0 -0
  230. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-1-runtime-collection.zh-TW.md +0 -0
  231. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.de.md +0 -0
  232. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.fr.md +0 -0
  233. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.ja.md +0 -0
  234. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.ko.md +0 -0
  235. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.md +0 -0
  236. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.ru.md +0 -0
  237. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.zh-CN.md +0 -0
  238. {execweave-0.8.11 → execweave-0.8.13}/docs/phase-2-execution-graph.zh-TW.md +0 -0
  239. {execweave-0.8.11 → execweave-0.8.13}/docs/remaining-provider-audit-v0.8.7.md +0 -0
  240. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.de.md +0 -0
  241. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.fr.md +0 -0
  242. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.ja.md +0 -0
  243. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.ko.md +0 -0
  244. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.md +0 -0
  245. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.ru.md +0 -0
  246. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.zh-CN.md +0 -0
  247. {execweave-0.8.11 → execweave-0.8.13}/docs/rule-packs.zh-TW.md +0 -0
  248. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.de.md +0 -0
  249. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.fr.md +0 -0
  250. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.ja.md +0 -0
  251. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.ko.md +0 -0
  252. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.md +0 -0
  253. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.ru.md +0 -0
  254. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.zh-CN.md +0 -0
  255. {execweave-0.8.11 → execweave-0.8.13}/docs/run-integrity.zh-TW.md +0 -0
  256. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.de.md +0 -0
  257. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.fr.md +0 -0
  258. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.ja.md +0 -0
  259. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.ko.md +0 -0
  260. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.md +0 -0
  261. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.ru.md +0 -0
  262. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.zh-CN.md +0 -0
  263. {execweave-0.8.11 → execweave-0.8.13}/docs/runtime-threat-model.zh-TW.md +0 -0
  264. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.de.md +0 -0
  265. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.fr.md +0 -0
  266. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.ja.md +0 -0
  267. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.ko.md +0 -0
  268. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.md +0 -0
  269. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.ru.md +0 -0
  270. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.zh-CN.md +0 -0
  271. {execweave-0.8.11 → execweave-0.8.13}/docs/security-analysis.zh-TW.md +0 -0
  272. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.de.md +0 -0
  273. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.fr.md +0 -0
  274. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.ja.md +0 -0
  275. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.ko.md +0 -0
  276. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.md +0 -0
  277. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.ru.md +0 -0
  278. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.zh-CN.md +0 -0
  279. {execweave-0.8.11 → execweave-0.8.13}/docs/semantic-telemetry.zh-TW.md +0 -0
  280. {execweave-0.8.11 → execweave-0.8.13}/docs/v0.6.5-hardening-decisions.md +0 -0
  281. {execweave-0.8.11 → execweave-0.8.13}/docs/v0.8.3-graph-ergonomics.md +0 -0
  282. /execweave-0.8.11/scripts/check_release_stage_integrity.py → /execweave-0.8.13/scripts/_check_release_stage_integrity_impl.py +0 -0
  283. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_claude_hook.py +0 -0
  284. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_claude_record_graph.py +0 -0
  285. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_codex_hook.py +0 -0
  286. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_conversation_records.py +0 -0
  287. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_correlation_graph.py +0 -0
  288. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_inference_gateway_cli.py +0 -0
  289. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_model_runtime_cli.py +0 -0
  290. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_openai_compatible_cli.py +0 -0
  291. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_semantic_graph.py +0 -0
  292. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_viewer_js.py +0 -0
  293. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_wheel_install.py +0 -0
  294. {execweave-0.8.11 → execweave-0.8.13}/scripts/check_windows_launchers.py +0 -0
  295. {execweave-0.8.11 → execweave-0.8.13}/scripts/emit_claude_hook_smoke.py +0 -0
  296. {execweave-0.8.11 → execweave-0.8.13}/scripts/emit_codex_hook_smoke.py +0 -0
  297. {execweave-0.8.11 → execweave-0.8.13}/scripts/emit_cursor_hook_smoke.py +0 -0
  298. {execweave-0.8.11 → execweave-0.8.13}/scripts/emit_opencode_plugin_smoke.py +0 -0
  299. {execweave-0.8.11 → execweave-0.8.13}/scripts/make_semantic_smoke.py +0 -0
  300. {execweave-0.8.11 → execweave-0.8.13}/scripts/probe_provider_capability.py +0 -0
  301. {execweave-0.8.11 → execweave-0.8.13}/scripts/sync_i18n_nav.py +0 -0
  302. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/__main__.py +0 -0
  303. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/_conversation_records_core.py +0 -0
  304. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/agent_bootstrap.py +0 -0
  305. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/agent_topology.py +0 -0
  306. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/agent_trace.py +0 -0
  307. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/agy_preview_sanitize.py +0 -0
  308. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/analysis.py +0 -0
  309. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/anthropic.py +0 -0
  310. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/anthropic_cli.py +0 -0
  311. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/anthropic_full_fidelity.py +0 -0
  312. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_adapter.py +0 -0
  313. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_adapter_base.py +0 -0
  314. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_full_fidelity.py +0 -0
  315. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_full_fidelity_base.py +0 -0
  316. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_full_fidelity_collaboration_base.py +0 -0
  317. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_hook_cli.py +0 -0
  318. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_record.py +0 -0
  319. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_subagent_linkage.py +0 -0
  320. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/antigravity_trace_capability.py +0 -0
  321. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/auto_specialized.py +0 -0
  322. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/backends.py +0 -0
  323. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/benchmark.py +0 -0
  324. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_adapter.py +0 -0
  325. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_child_transcript.py +0 -0
  326. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_delegation.py +0 -0
  327. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_full_fidelity.py +0 -0
  328. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_hook_cli.py +0 -0
  329. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_hook_contract.py +0 -0
  330. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_model_observer.py +0 -0
  331. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/claude_record.py +0 -0
  332. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cli.py +0 -0
  333. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_adapter.py +0 -0
  334. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_conversation.py +0 -0
  335. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_full_fidelity.py +0 -0
  336. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_message_diagnostics.py +0 -0
  337. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_message_transport_diagnostics.py +0 -0
  338. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_record.py +0 -0
  339. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_rollout_structures.py +0 -0
  340. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_rollout_trace.py +0 -0
  341. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/codex_rollout_trace_base.py +0 -0
  342. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/content_evidence.py +0 -0
  343. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/content_store.py +0 -0
  344. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_archive.py +0 -0
  345. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_message_identity.py +0 -0
  346. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview.py +0 -0
  347. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_antigravity.py +0 -0
  348. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_claude.py +0 -0
  349. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_codex.py +0 -0
  350. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_common.py +0 -0
  351. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_generic.py +0 -0
  352. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_lines.py +0 -0
  353. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_preview_transcript.py +0 -0
  354. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_records.py +0 -0
  355. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_records_antigravity.py +0 -0
  356. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_records_codex.py +0 -0
  357. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_records_common.py +0 -0
  358. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/conversation_records_ollama.py +0 -0
  359. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/correlation.py +0 -0
  360. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_adapter.py +0 -0
  361. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_delegation.py +0 -0
  362. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_delegation_base.py +0 -0
  363. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_full_fidelity.py +0 -0
  364. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_hook_cli.py +0 -0
  365. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_hook_contract.py +0 -0
  366. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/cursor_record.py +0 -0
  367. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/entry.py +0 -0
  368. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/evidence_availability.py +0 -0
  369. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/evidence_grade.py +0 -0
  370. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/focus.py +0 -0
  371. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/graph.py +0 -0
  372. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/graph_ops.py +0 -0
  373. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/http_proxy_cli.py +0 -0
  374. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/inference_gateway.py +0 -0
  375. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/inference_gateway_cli.py +0 -0
  376. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/inference_gateway_full_fidelity.py +0 -0
  377. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/inference_identity.py +0 -0
  378. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/inference_identity_cli.py +0 -0
  379. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/integrity.py +0 -0
  380. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/integrity_cli.py +0 -0
  381. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/litellm_callback.py +0 -0
  382. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/litellm_callback_cli.py +0 -0
  383. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_extra_style.py +0 -0
  384. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_markup.py +0 -0
  385. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/live_view_script_c.py +0 -0
  386. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/model_runtime.py +0 -0
  387. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/model_runtime_cli.py +0 -0
  388. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/model_runtime_full_fidelity.py +0 -0
  389. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/openai_compatible.py +0 -0
  390. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/openai_compatible_cli.py +0 -0
  391. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/openai_compatible_full_fidelity.py +0 -0
  392. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_adapter.py +0 -0
  393. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_event_contract.py +0 -0
  394. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_full_fidelity.py +0 -0
  395. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_hook_cli.py +0 -0
  396. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_plugin_cli.py +0 -0
  397. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_record.py +0 -0
  398. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/opencode_task_linkage.py +0 -0
  399. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/overhead_benchmark.py +0 -0
  400. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/provider_capability.py +0 -0
  401. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/provider_lifecycle.py +0 -0
  402. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/provider_record.py +0 -0
  403. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/rule_pack.py +0 -0
  404. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/rule_pack_cli.py +0 -0
  405. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/scalability_benchmark.py +0 -0
  406. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/schema.py +0 -0
  407. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/scope.py +0 -0
  408. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/sink.py +0 -0
  409. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/strace_backend.py +0 -0
  410. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/stream_assembly.py +0 -0
  411. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/theme.py +0 -0
  412. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/top.py +0 -0
  413. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/top_cli.py +0 -0
  414. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/validate.py +0 -0
  415. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/vendor/dagre.min.js +0 -0
  416. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/view_cli.py +0 -0
  417. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer.py +0 -0
  418. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel.py +0 -0
  419. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_antigravity.py +0 -0
  420. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_claude.py +0 -0
  421. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_codex.py +0 -0
  422. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_cursor.py +0 -0
  423. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_default.py +0 -0
  424. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_ollama.py +0 -0
  425. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_opencode.py +0 -0
  426. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_agent_panel_registry.py +0 -0
  427. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_content_inspector.py +0 -0
  428. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_dashboard_focus.py +0 -0
  429. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_dashboard_hardening_v2.py +0 -0
  430. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_limits.py +0 -0
  431. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_live_layout.py +0 -0
  432. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_projection.py +0 -0
  433. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/viewer_projection_base.py +0 -0
  434. {execweave-0.8.11 → execweave-0.8.13}/src/execweave/workflow.py +0 -0
  435. {execweave-0.8.11 → execweave-0.8.13}/tests/dashboard_readability_fixture.py +0 -0
  436. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/codex_multi_agent/PROVENANCE.md +0 -0
  437. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/codex_multi_agent/hook-payloads.json +0 -0
  438. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/codex_multi_agent/rollout-main.jsonl +0 -0
  439. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/hooks/README.md +0 -0
  440. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/hooks/claude.json +0 -0
  441. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/hooks/codex.json +0 -0
  442. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/hooks/cursor.json +0 -0
  443. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/hooks/manifest.json +0 -0
  444. {execweave-0.8.11 → execweave-0.8.13}/tests/fixtures/hooks/opencode.json +0 -0
  445. {execweave-0.8.11 → execweave-0.8.13}/tests/multi_agent_run_fixture.py +0 -0
  446. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_bootstrap.py +0 -0
  447. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_message_viewer.py +0 -0
  448. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_node_labels.py +0 -0
  449. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_said_panel.py +0 -0
  450. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_topology_evidence.py +0 -0
  451. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_trace_lifecycle.py +0 -0
  452. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agent_trace_viewer_visibility.py +0 -0
  453. {execweave-0.8.11 → execweave-0.8.13}/tests/test_agy_windows_wire_acceptance.py +0 -0
  454. {execweave-0.8.11 → execweave-0.8.13}/tests/test_analysis.py +0 -0
  455. {execweave-0.8.11 → execweave-0.8.13}/tests/test_anthropic.py +0 -0
  456. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_agent_collaboration.py +0 -0
  457. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_child_panel_policy.py +0 -0
  458. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_child_transcript_tools.py +0 -0
  459. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_cursor_launch.py +0 -0
  460. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_field_run_regressions.py +0 -0
  461. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_history_replay.py +0 -0
  462. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_identity_topology.py +0 -0
  463. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_invocation_archive.py +0 -0
  464. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_lifecycle.py +0 -0
  465. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_linkage_projection.py +0 -0
  466. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_multi_conversation_isolation.py +0 -0
  467. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_official_contract.py +0 -0
  468. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_role_path_fallback.py +0 -0
  469. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_root_child_history_v2.py +0 -0
  470. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_subagent_transcript_linkage.py +0 -0
  471. {execweave-0.8.11 → execweave-0.8.13}/tests/test_antigravity_trace_capability_cli.py +0 -0
  472. {execweave-0.8.11 → execweave-0.8.13}/tests/test_auto_specialized.py +0 -0
  473. {execweave-0.8.11 → execweave-0.8.13}/tests/test_backends.py +0 -0
  474. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_adapter.py +0 -0
  475. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_child_transcript_tools.py +0 -0
  476. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_delegation.py +0 -0
  477. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_full_fidelity.py +0 -0
  478. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_hook_contract.py +0 -0
  479. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_hook_metadata.py +0 -0
  480. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_hook_viewer.py +0 -0
  481. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_model_observer.py +0 -0
  482. {execweave-0.8.11 → execweave-0.8.13}/tests/test_claude_record.py +0 -0
  483. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_archive_full_fidelity.py +0 -0
  484. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_child_panel_policy.py +0 -0
  485. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_conversation_isolation.py +0 -0
  486. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_full_fidelity.py +0 -0
  487. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_hook_partial_capture.py +0 -0
  488. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_message_diagnostics.py +0 -0
  489. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_message_transport_diagnostics.py +0 -0
  490. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_nickname_path_fallback.py +0 -0
  491. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_plain_routed_agent_message.py +0 -0
  492. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_real_multi_agent_conversation.py +0 -0
  493. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_record.py +0 -0
  494. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_reducer_command.py +0 -0
  495. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_rollout_structures.py +0 -0
  496. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_rollout_trace.py +0 -0
  497. {execweave-0.8.11 → execweave-0.8.13}/tests/test_codex_routing_native_identity.py +0 -0
  498. {execweave-0.8.11 → execweave-0.8.13}/tests/test_collector.py +0 -0
  499. {execweave-0.8.11 → execweave-0.8.13}/tests/test_condense.py +0 -0
  500. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_agent_focus.py +0 -0
  501. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_agent_isolation.py +0 -0
  502. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_identity_merge.py +0 -0
  503. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_message_observation_dedupe.py +0 -0
  504. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_provider_parity.py +0 -0
  505. {execweave-0.8.11 → execweave-0.8.13}/tests/test_conversation_root_authority.py +0 -0
  506. {execweave-0.8.11 → execweave-0.8.13}/tests/test_correlation.py +0 -0
  507. {execweave-0.8.11 → execweave-0.8.13}/tests/test_correlation_canonical_path.py +0 -0
  508. {execweave-0.8.11 → execweave-0.8.13}/tests/test_correlation_checker.py +0 -0
  509. {execweave-0.8.11 → execweave-0.8.13}/tests/test_correlation_process_exe.py +0 -0
  510. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cross_provider_agent_trace.py +0 -0
  511. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_adapter.py +0 -0
  512. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_delegation.py +0 -0
  513. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_full_fidelity.py +0 -0
  514. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_hook_contract.py +0 -0
  515. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_hook_fail_open.py +0 -0
  516. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_ollama_session_lifecycle.py +0 -0
  517. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_record.py +0 -0
  518. {execweave-0.8.11 → execweave-0.8.13}/tests/test_cursor_task_linkage.py +0 -0
  519. {execweave-0.8.11 → execweave-0.8.13}/tests/test_dashboard_readability_e2e.py +0 -0
  520. {execweave-0.8.11 → execweave-0.8.13}/tests/test_dashboard_round_fold_state_e2e.py +0 -0
  521. {execweave-0.8.11 → execweave-0.8.13}/tests/test_dashboard_simplification.py +0 -0
  522. {execweave-0.8.11 → execweave-0.8.13}/tests/test_dashboard_ux_and_hook_projection.py +0 -0
  523. {execweave-0.8.11 → execweave-0.8.13}/tests/test_delegation_viewer.py +0 -0
  524. {execweave-0.8.11 → execweave-0.8.13}/tests/test_evidence_grade.py +0 -0
  525. {execweave-0.8.11 → execweave-0.8.13}/tests/test_execution_viewer.py +0 -0
  526. {execweave-0.8.11 → execweave-0.8.13}/tests/test_fidelity.py +0 -0
  527. {execweave-0.8.11 → execweave-0.8.13}/tests/test_filesystem_resilience.py +0 -0
  528. {execweave-0.8.11 → execweave-0.8.13}/tests/test_focus.py +0 -0
  529. {execweave-0.8.11 → execweave-0.8.13}/tests/test_fold_budget_setting.py +0 -0
  530. {execweave-0.8.11 → execweave-0.8.13}/tests/test_full_fidelity.py +0 -0
  531. {execweave-0.8.11 → execweave-0.8.13}/tests/test_graph.py +0 -0
  532. {execweave-0.8.11 → execweave-0.8.13}/tests/test_graph_ops.py +0 -0
  533. {execweave-0.8.11 → execweave-0.8.13}/tests/test_hook_fixture_corpus.py +0 -0
  534. {execweave-0.8.11 → execweave-0.8.13}/tests/test_http_proxy.py +0 -0
  535. {execweave-0.8.11 → execweave-0.8.13}/tests/test_inference_endpoint_identity.py +0 -0
  536. {execweave-0.8.11 → execweave-0.8.13}/tests/test_inference_gateway.py +0 -0
  537. {execweave-0.8.11 → execweave-0.8.13}/tests/test_inference_gateway_full_fidelity.py +0 -0
  538. {execweave-0.8.11 → execweave-0.8.13}/tests/test_inference_identity.py +0 -0
  539. {execweave-0.8.11 → execweave-0.8.13}/tests/test_integrity.py +0 -0
  540. {execweave-0.8.11 → execweave-0.8.13}/tests/test_litellm_callback.py +0 -0
  541. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live.py +0 -0
  542. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live_dashboard.py +0 -0
  543. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live_dashboard_js.py +0 -0
  544. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live_delta.py +0 -0
  545. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live_logs_export.py +0 -0
  546. {execweave-0.8.11 → execweave-0.8.13}/tests/test_live_theme.py +0 -0
  547. {execweave-0.8.11 → execweave-0.8.13}/tests/test_lmstudio_auto_specialized.py +0 -0
  548. {execweave-0.8.11 → execweave-0.8.13}/tests/test_local_runtime_live_capture.py +0 -0
  549. {execweave-0.8.11 → execweave-0.8.13}/tests/test_model_runtime.py +0 -0
  550. {execweave-0.8.11 → execweave-0.8.13}/tests/test_model_runtime_full_fidelity.py +0 -0
  551. {execweave-0.8.11 → execweave-0.8.13}/tests/test_ollama_panel_policy.py +0 -0
  552. {execweave-0.8.11 → execweave-0.8.13}/tests/test_ollama_serve_runtime_integration.py +0 -0
  553. {execweave-0.8.11 → execweave-0.8.13}/tests/test_openai_compatible.py +0 -0
  554. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_adapter.py +0 -0
  555. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_event_contract.py +0 -0
  556. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_event_lifecycle.py +0 -0
  557. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_full_fidelity.py +0 -0
  558. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_identity_unification.py +0 -0
  559. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_plugin.py +0 -0
  560. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_record.py +0 -0
  561. {execweave-0.8.11 → execweave-0.8.13}/tests/test_opencode_task_session_linkage.py +0 -0
  562. {execweave-0.8.11 → execweave-0.8.13}/tests/test_overhead_benchmark.py +0 -0
  563. {execweave-0.8.11 → execweave-0.8.13}/tests/test_per_agent_conversation_default.py +0 -0
  564. {execweave-0.8.11 → execweave-0.8.13}/tests/test_pr25_premerge_hardening_contract.py +0 -0
  565. {execweave-0.8.11 → execweave-0.8.13}/tests/test_pr25_premerge_hardening_e2e.py +0 -0
  566. {execweave-0.8.11 → execweave-0.8.13}/tests/test_provider_capability.py +0 -0
  567. {execweave-0.8.11 → execweave-0.8.13}/tests/test_provider_conversation_evidence.py +0 -0
  568. {execweave-0.8.11 → execweave-0.8.13}/tests/test_provider_conversation_history_integrity.py +0 -0
  569. {execweave-0.8.11 → execweave-0.8.13}/tests/test_provider_dashboard_contract.py +0 -0
  570. {execweave-0.8.11 → execweave-0.8.13}/tests/test_provider_lifecycle.py +0 -0
  571. {execweave-0.8.11 → execweave-0.8.13}/tests/test_release_stage_integrity_version_guard.py +0 -0
  572. {execweave-0.8.11 → execweave-0.8.13}/tests/test_rule_pack.py +0 -0
  573. {execweave-0.8.11 → execweave-0.8.13}/tests/test_schema.py +0 -0
  574. {execweave-0.8.11 → execweave-0.8.13}/tests/test_scope.py +0 -0
  575. {execweave-0.8.11 → execweave-0.8.13}/tests/test_shared_injected_context_scope.py +0 -0
  576. {execweave-0.8.11 → execweave-0.8.13}/tests/test_strace_backend.py +0 -0
  577. {execweave-0.8.11 → execweave-0.8.13}/tests/test_stream_assembly.py +0 -0
  578. {execweave-0.8.11 → execweave-0.8.13}/tests/test_threat_model.py +0 -0
  579. {execweave-0.8.11 → execweave-0.8.13}/tests/test_top_detached.py +0 -0
  580. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v063_features.py +0 -0
  581. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v064_live_auto_integrations.py +0 -0
  582. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v064_live_evidence.py +0 -0
  583. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v079_review_e2e.py +0 -0
  584. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v079_review_regressions.py +0 -0
  585. {execweave-0.8.11 → execweave-0.8.13}/tests/test_v083_release_gate_p2.py +0 -0
  586. {execweave-0.8.11 → execweave-0.8.13}/tests/test_validate.py +0 -0
  587. {execweave-0.8.11 → execweave-0.8.13}/tests/test_version.py +0 -0
  588. {execweave-0.8.11 → execweave-0.8.13}/tests/test_viewer.py +0 -0
  589. {execweave-0.8.11 → execweave-0.8.13}/tests/test_viewer_child_authority.py +0 -0
  590. {execweave-0.8.11 → execweave-0.8.13}/tests/test_viewer_content_inspector.py +0 -0
  591. {execweave-0.8.11 → execweave-0.8.13}/tests/test_viewer_limits.py +0 -0
  592. {execweave-0.8.11 → execweave-0.8.13}/tests/test_windows_codex_agy_display_repair.py +0 -0
  593. {execweave-0.8.11 → execweave-0.8.13}/tests/test_workflow.py +0 -0
@@ -133,7 +133,10 @@ jobs:
133
133
  - name: Ruff
134
134
  run: ruff check .
135
135
  - name: Tests
136
- run: pytest -q
136
+ run: pytest -q --junitxml=pytest-results.xml
137
+ - name: Annotate pytest failures
138
+ if: failure() && hashFiles('pytest-results.xml') != ''
139
+ run: python scripts/annotate_pytest_failures.py pytest-results.xml
137
140
  - name: Claude hook command smoke
138
141
  run: python scripts/check_claude_hook.py
139
142
  - name: Claude run-bound semantic and correlation smoke
@@ -147,11 +147,62 @@ jobs:
147
147
  esac
148
148
  done < <(git diff --name-only "$BASELINE_REF...HEAD" -- tests)
149
149
  fi
150
+ if [[ "$HEAD_REF" == "test/live-dashboard-acceptance" ]]; then
151
+ while IFS= read -r path; do
152
+ case "$path" in
153
+ tests/test_command.py)
154
+ args+=(--allow-test-change "$path=acceptance branch isolates the historical Windows shim fallback from installed Cursor desktop candidates; native desktop preference and custom-install contracts remain separate and existing test node IDs are unchanged")
155
+ ;;
156
+ tests/test_codex_adapter.py)
157
+ args+=(--allow-test-change "$path=Codex now documents Interrupt as a first-class hook with a bounded handler contract; the existing config test node ID is retained and now asserts the current official event and timeout semantics")
158
+ ;;
159
+ tests/test_codex_hook_lifecycle.py)
160
+ args+=(--allow-test-change "$path=Codex now documents Interrupt as a first-class lifecycle event; the historical test node ID is retained while its assertion is corrected to the current official contract")
161
+ ;;
162
+ tests/test_v069_dashboard_release.py)
163
+ args+=(--allow-test-change "$path=README policy is now stable product documentation instead of release notes; the historical test node IDs are retained while assertions require no hard-coded release tags and preserve dashboard/conversation/license anchors")
164
+ ;;
165
+ tests/test_graph_clear_focus_e2e.py|tests/test_graph_edge_routing_e2e.py|tests/test_graph_node_sizing_e2e.py|tests/test_tool_traffic_e2e.py)
166
+ args+=(--allow-test-change "$path=existing browser assertions are unchanged; the module-level viewer_e2e marker makes the dedicated three-OS browser workflow collect tests that were previously omitted")
167
+ ;;
168
+ tests/test_graph_lane_separation_e2e.py)
169
+ args+=(--allow-test-change "$path=layout acceptance separates endpoint projection from lane geometry using loopback fixtures and replaces obsolete fixed canvas coordinates with semantic lane/band invariants; historical test node IDs remain unchanged")
170
+ ;;
171
+ tests/test_http_proxy.py)
172
+ args+=(--allow-test-change "$path=NEW-005 adds native streaming-order regressions for content-length and chunked responses; existing test assertions and node IDs are unchanged")
173
+ ;;
174
+ tests/test_conversation_access.py)
175
+ args+=(--allow-test-change "$path=the historical live conversation-access test now requires bounded authenticated polling with AbortController cleanup at finished state; the test node ID and auth/path-boundary assertions remain unchanged")
176
+ ;;
177
+ tests/test_semantic.py)
178
+ args+=(--allow-test-change "$path=NEW-006 adds contradictory and future PID identity regressions through merge and graph materialization; existing test assertions and node IDs are unchanged")
179
+ ;;
180
+ tests/test_live_auth.py)
181
+ args+=(--allow-test-change "$path=acceptance branch adds the native client-reset regression proving expected Windows disconnects are suppressed without hiding unexpected server errors")
182
+ ;;
183
+ tests/test_process_tree_layout.py)
184
+ args+=(--allow-test-change "$path=acceptance branch replaces obsolete fixed layout coordinates with semantic lane and ordering assertions while retaining the historical test node IDs")
185
+ ;;
186
+ tests/test_external_endpoints_all_providers.py)
187
+ args+=(--allow-test-change "$path=loopback endpoint presentation intentionally changed from individual raw nodes to one provider-neutral Local endpoints cluster while External behavior remains; historical test node IDs are retained and raw endpoint evidence is unchanged")
188
+ ;;
189
+ tests/test_viewer_projection.py)
190
+ args+=(--allow-test-change "$path=approved provider-neutral endpoint semantics retire the old four-endpoint threshold and per-process loopback cluster shape: every loopback endpoint now folds into one Local endpoints node while source edges, chronology, expansion evidence, and historical test node IDs are retained")
191
+ ;;
192
+ tests/test_dashboard_information_architecture.py)
193
+ args+=(--allow-test-change "$path=approved orphan-file presentation now folds degree-zero file and directory nodes into the expandable Files / directories viewer cluster; the historical test node ID remains and the assertion now requires the original notes.txt evidence in cluster expansion")
194
+ ;;
195
+ tests/test_viewer_agent_isolation_e2e.py)
196
+ args+=(--allow-test-change "$path=live conversation ownership now reads the raw observed graph before viewer-only endpoint, request, and orphan collapse; historical test IDs and conversation completeness assertions remain unchanged and only the live-index fixture injection seam follows _raw_graph_locked")
197
+ ;;
198
+ esac
199
+ done < <(git diff --name-only "$BASELINE_REF...HEAD" -- tests)
200
+ fi
150
201
  if [[ "$HEAD_REF" == "audit/remaining-providers-v0.8.7" ]]; then
151
202
  args+=(--allow-retired-provider "gemini=Gemini integration was retired and replaced by the AGY/Antigravity provider; only Gemini-owned test IDs and files may disappear")
152
203
  while IFS= read -r path; do
153
204
  case "$path" in
154
- tests/fixtures/hooks/manifest.json|tests/test_agent_bootstrap.py|tests/test_agent_topology_evidence.py|tests/test_agent_trace_viewer_visibility.py|tests/test_antigravity_agent_collaboration.py|tests/test_antigravity_child_transcript_tools.py|tests/test_antigravity_cursor_launch.py|tests/test_antigravity_identity_topology.py|tests/test_antigravity_invocation_archive.py|tests/test_antigravity_official_contract.py|tests/test_antigravity_subagent_transcript_linkage.py|tests/test_antigravity_trace_capability_cli.py|tests/test_claude_adapter.py|tests/test_codex_real_multi_agent_conversation.py|tests/test_collector.py|tests/test_command.py|tests/test_conversation_access.py|tests/test_conversation_agent_isolation.py|tests/test_conversation_identity_merge.py|tests/test_conversation_provider_parity.py|tests/test_cross_provider_agent_trace.py|tests/test_cursor_adapter.py|tests/test_dashboard_information_architecture.py|tests/test_external_endpoints_all_providers.py|tests/test_hook_fixture_corpus.py|tests/test_provider_capability.py|tests/test_provider_conversation_evidence.py|tests/test_provider_lifecycle.py|tests/test_v064_live_auto_integrations.py)
205
+ tests/fixtures/hooks/manifest.json|tests/test_agent_bootstrap.py|tests/test_agent_topology_evidence.py|tests/test_agent_trace_viewer_visibility.py|tests/test_antigravity_agent_collaboration.py|tests/test_antigravity_child_transcript_tools.py|tests/test_antigravity_cursor_launch.py|tests/test_antigravity_identity_topology.py|tests/test_antigravity_invocation_archive.py|tests/test_antigravity_official_contract.py|tests/test_antigravity_subagent_transcript_linkage.py|tests/test_antigravity_trace_capability_cli.py|tests/test_claude_adapter.py|tests/test_codex_real_multi_agent_conversation.py|tests/test_collector.py|tests/test_command.py|tests/test_conversation_access.py|tests/test_conversation_agent_isolation.py|tests/test_conversation_identity_merge.py|tests/test_cross_provider_agent_trace.py|tests/test_cursor_adapter.py|tests/test_dashboard_information_architecture.py|tests/test_external_endpoints_all_providers.py|tests/test_hook_fixture_corpus.py|tests/test_provider_capability.py|tests/test_provider_conversation_evidence.py|tests/test_provider_lifecycle.py|tests/test_v064_live_auto_integrations.py)
155
206
  args+=(--allow-test-change "$path=Gemini provider retirement and provider-neutral AGY/dashboard contract updates are intentional on this branch; existing test node IDs remain stable where the provider is still supported")
156
207
  ;;
157
208
  esac
@@ -39,6 +39,7 @@ jobs:
39
39
  tests/test_provider_conversation_evidence.py
40
40
  tests/test_provider_conversation_history_integrity.py
41
41
  tests/test_external_endpoints_all_providers.py
42
+ tests/test_provider_neutral_viewer_semantics.py
42
43
  tests/test_graph.py
43
44
  tests/test_antigravity_field_run_regressions.py
44
45
  tests/test_antigravity_subagent_transcript_linkage.py
@@ -145,5 +146,6 @@ jobs:
145
146
  python -m pytest -q
146
147
  tests/test_provider_dashboard_contract.py
147
148
  ${{ matrix.tests }}
149
+ tests/test_provider_neutral_viewer_semantics.py
148
150
  - name: Check dashboard JavaScript syntax
149
151
  run: python -m pytest -q tests/test_live_dashboard_js.py tests/test_live_dashboard.py
@@ -0,0 +1,89 @@
1
+ name: Viewer Agent Isolation
2
+
3
+ # The release gate opens the actual dashboard in Chromium. It reads the visible
4
+ # root/subagent/non-agent inspectors, compares live with viewer.html, and archives
5
+ # screenshots plus the rendered live.html for a human visual pass.
6
+ on:
7
+ pull_request:
8
+ push:
9
+ branches: [main, test/live-dashboard-acceptance]
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ viewers:
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ os: [ubuntu-latest, macos-latest, windows-latest]
21
+ runs-on: ${{ matrix.os }}
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+
25
+ - uses: actions/setup-python@v5
26
+ with:
27
+ python-version: "3.12"
28
+ cache: pip
29
+
30
+ - name: Install
31
+ run: python -m pip install -e ".[dev,e2e]"
32
+
33
+ - name: Install Chromium
34
+ run: python -m playwright install --with-deps chromium
35
+
36
+ - name: Read live and viewer.html in a browser (Linux)
37
+ if: runner.os == 'Linux'
38
+ env:
39
+ EXECWEAVE_E2E_REQUIRED: "1"
40
+ EXECWEAVE_VISUAL_ARTIFACT_DIR: visual-artifacts
41
+ run: xvfb-run -a python -m pytest -m viewer_e2e -v --junitxml=viewer-pytest-results.xml
42
+
43
+ - name: Read live and viewer.html in a browser (macOS/Windows)
44
+ if: runner.os != 'Linux'
45
+ env:
46
+ EXECWEAVE_E2E_REQUIRED: "1"
47
+ EXECWEAVE_VISUAL_ARTIFACT_DIR: visual-artifacts
48
+ run: python -m pytest -m viewer_e2e -v --junitxml=viewer-pytest-results.xml
49
+
50
+ - name: Annotate viewer pytest failures
51
+ if: failure() && hashFiles('viewer-pytest-results.xml') != ''
52
+ run: python scripts/annotate_pytest_failures.py viewer-pytest-results.xml
53
+
54
+ - name: Run formal offline dashboard acceptance
55
+ run: >-
56
+ python scripts/dashboard_acceptance.py
57
+ --mode offline
58
+ --output-dir "${{ github.workspace }}/artifacts/dashboard-acceptance"
59
+ --require offline-ollama-fixture
60
+
61
+ - name: Run formal owned-process cleanup acceptance
62
+ run: >-
63
+ python scripts/owned_cleanup_acceptance.py
64
+ --output-dir "${{ github.workspace }}/artifacts/dashboard-acceptance/owned-cleanup"
65
+
66
+ - name: Run formal native Python OS acceptance (Linux)
67
+ if: runner.os == 'Linux'
68
+ run: >-
69
+ xvfb-run -a python scripts/python_native_acceptance.py
70
+ --output-dir "${{ github.workspace }}/artifacts/dashboard-acceptance/python-native"
71
+ --require python
72
+
73
+ - name: Run formal native Python OS acceptance (macOS/Windows)
74
+ if: runner.os != 'Linux'
75
+ run: >-
76
+ python scripts/python_native_acceptance.py
77
+ --output-dir "${{ github.workspace }}/artifacts/dashboard-acceptance/python-native"
78
+ --require python
79
+
80
+ - name: Upload visual release evidence
81
+ if: always()
82
+ uses: actions/upload-artifact@v4
83
+ with:
84
+ name: unified-dashboard-visuals-${{ matrix.os }}
85
+ path: |
86
+ visual-artifacts
87
+ artifacts/dashboard-acceptance
88
+ if-no-files-found: error
89
+ retention-days: 7
@@ -8,3 +8,5 @@ dist/
8
8
  build/
9
9
  *.egg-info/
10
10
  .execweave/
11
+ .execweave-acceptance/
12
+ artifacts/dashboard-acceptance/
@@ -0,0 +1,357 @@
1
+ Metadata-Version: 2.5
2
+ Name: execweave
3
+ Version: 0.8.13
4
+ Summary: Turn AI-agent runtime behavior into a local interactive execution graph.
5
+ Project-URL: Homepage, https://github.com/Irish-kw/ExecWeave
6
+ Project-URL: Repository, https://github.com/Irish-kw/ExecWeave
7
+ Project-URL: Documentation, https://github.com/Irish-kw/ExecWeave#documentation
8
+ Project-URL: Issues, https://github.com/Irish-kw/ExecWeave/issues
9
+ Author: ExecWeave contributors
10
+ License: PolyForm Noncommercial License 1.0.0
11
+
12
+ This software is licensed under the PolyForm Noncommercial License 1.0.0.
13
+ The complete license terms are available at:
14
+ https://polyformproject.org/licenses/noncommercial/1.0.0
15
+
16
+ Required Notice: Copyright (c) 2026 GWW
17
+
18
+ Commercial use is not permitted under this license. Any commercial use,
19
+ including use in or for a commercial product or service, requires a separate
20
+ written commercial license from the licensor.
21
+
22
+ For the avoidance of doubt, this license change applies to versions released
23
+ under these terms. Earlier versions that were already distributed under the
24
+ MIT License remain available under the license terms that accompanied those
25
+ versions.
26
+ License-File: LICENSE
27
+ Keywords: ai-agents,execution-graph,observability,provenance,runtime,security
28
+ Classifier: Development Status :: 4 - Beta
29
+ Classifier: Environment :: Console
30
+ Classifier: Intended Audience :: Developers
31
+ Classifier: Intended Audience :: Information Technology
32
+ Classifier: License :: Other/Proprietary License
33
+ Classifier: Operating System :: OS Independent
34
+ Classifier: Programming Language :: Python :: 3
35
+ Classifier: Programming Language :: Python :: 3.10
36
+ Classifier: Programming Language :: Python :: 3.11
37
+ Classifier: Programming Language :: Python :: 3.12
38
+ Classifier: Programming Language :: Python :: 3.13
39
+ Classifier: Topic :: Software Development :: Debuggers
40
+ Classifier: Topic :: System :: Monitoring
41
+ Requires-Python: >=3.10
42
+ Requires-Dist: psutil>=5.9
43
+ Requires-Dist: watchdog>=4.0
44
+ Provides-Extra: dev
45
+ Requires-Dist: pytest>=8.0; extra == 'dev'
46
+ Requires-Dist: pywinpty<4,>=3.0.5; (platform_system == 'Windows') and extra == 'dev'
47
+ Requires-Dist: ruff<0.17,>=0.16; extra == 'dev'
48
+ Provides-Extra: e2e
49
+ Requires-Dist: playwright>=1.44; extra == 'e2e'
50
+ Requires-Dist: pywinpty<4,>=3.0.5; (platform_system == 'Windows') and extra == 'e2e'
51
+ Provides-Extra: release
52
+ Requires-Dist: build>=1.2; extra == 'release'
53
+ Requires-Dist: twine>=6.0; extra == 'release'
54
+ Description-Content-Type: text/markdown
55
+
56
+ # ExecWeave
57
+
58
+ <!-- i18n-nav:start -->
59
+ <p align="center">
60
+ <strong>English</strong> |
61
+ <a href="README.zh-TW.md">繁體中文</a> |
62
+ <a href="README.zh-CN.md">简体中文</a> |
63
+ <a href="README.ja.md">日本語</a> |
64
+ <a href="README.ko.md">한국어</a> |
65
+ <a href="README.fr.md">Français</a> |
66
+ <a href="README.de.md">Deutsch</a> |
67
+ <a href="README.ru.md">Русский</a>
68
+ </p>
69
+ <!-- i18n-nav:end -->
70
+
71
+ <p align="center">
72
+ <a href="https://pypi.org/project/execweave/"><img src="https://img.shields.io/pypi/v/execweave" alt="PyPI"></a>
73
+ <a href="https://github.com/Irish-kw/ExecWeave/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/Irish-kw/ExecWeave/ci.yml?branch=main" alt="CI"></a>
74
+ <img src="https://img.shields.io/badge/Python-3.10%2B-blue" alt="Python 3.10+">
75
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-PolyForm%20Noncommercial-blue" alt="License"></a>
76
+ </p>
77
+
78
+ **See what AI agents actually do on your machine.**
79
+
80
+ ExecWeave is a local-first observability project for AI agents and AI-assisted development tools. It combines provider-level semantics with operating-system runtime evidence and presents them as one interactive execution graph.
81
+
82
+ > **Events are evidence. The graph is a materialized view.**
83
+
84
+ <p align="center">
85
+ <img src="docs/assets/codex.gif" alt="ExecWeave live dashboard demo" width="100%">
86
+ </p>
87
+
88
+ ## Why ExecWeave
89
+
90
+ An agent can say it used a tool, edited a file, or contacted a service. That is useful semantic evidence, but it is not the same as observing what happened on the machine. ExecWeave keeps those layers separate and lets you inspect them together.
91
+
92
+ - **One dashboard for live and finished runs.** The live page, completed run, and standalone `viewer.html` use the same graph and conversation model.
93
+ - **Provider-aware semantics.** Hooks, rollout transcripts, plugins, and runtime APIs are used when a provider exposes them.
94
+ - **OS-runtime evidence.** Processes, files, and network endpoints can be observed independently of provider semantics.
95
+ - **Evidence-aware attribution.** Direct observations, exact identities, conservative inference, and causal claims are not flattened into one label.
96
+ - **Local-first storage.** Run artifacts stay on the machine unless you choose to copy or share them.
97
+ - **Works beyond one agent.** You can wrap ordinary local commands even when no specialized provider adapter exists.
98
+
99
+ ## Install
100
+
101
+ Install from PyPI:
102
+
103
+ ```bash
104
+ python -m pip install -U execweave
105
+ ```
106
+
107
+ For development:
108
+
109
+ ```bash
110
+ git clone https://github.com/Irish-kw/ExecWeave.git
111
+ cd ExecWeave
112
+ python -m pip install -e ".[dev]"
113
+ ```
114
+
115
+ ## Quick start
116
+
117
+ Wrap any local command with `execweave live`:
118
+
119
+ ```bash
120
+ execweave live --open -- claude
121
+ execweave live --open -- codex
122
+ execweave live --open -- antigravity
123
+ execweave live --open -- cursor
124
+ execweave live --open -- opencode
125
+ execweave live --open -- python my_agent.py
126
+ ```
127
+
128
+ Use `record` when you mainly want finalized artifacts:
129
+
130
+ ```bash
131
+ execweave record --open -- python my_agent.py
132
+ ```
133
+
134
+ Use `top` when you want a detached overview while keeping the launched program interactive in the current terminal:
135
+
136
+ ```bash
137
+ execweave top -- codex
138
+ ```
139
+
140
+ ### Provider integration approval
141
+
142
+ Some agents and IDEs ask for permission before enabling a local hook or plugin. Approve the ExecWeave integration if you want provider-level prompt, response, tool, model, and conversation evidence. If you do not approve it, OS-runtime observation can still work, but semantic coverage may be reduced.
143
+
144
+ Google Antigravity currently uses the `agy` CLI command. ExecWeave also accepts `antigravity` as a friendly alias.
145
+
146
+ On Windows, bare `cursor` follows the Cursor installation referenced by the user's PATH. Explicit launcher paths are respected.
147
+
148
+ ## Ollama
149
+
150
+ ExecWeave supports two common local Ollama workflows.
151
+
152
+ ### Managed server capture
153
+
154
+ Start Ollama through ExecWeave:
155
+
156
+ ```bash
157
+ execweave live --open -- ollama serve
158
+ ```
159
+
160
+ Then use Ollama normally from another terminal:
161
+
162
+ ```bash
163
+ ollama run deepseek-r1:1.5b
164
+ ```
165
+
166
+ SDK calls, OpenAI-compatible local requests, and `curl` requests that reach the managed local endpoint can be associated with the same ExecWeave run. The second terminal does not need another ExecWeave wrapper.
167
+
168
+ Managed relay mode is intentionally limited to local loopback endpoints. ExecWeave does not rewrite wildcard or externally exposed Ollama listeners.
169
+
170
+ ### Direct client capture
171
+
172
+ If an Ollama server is already running, you can wrap the client directly:
173
+
174
+ ```bash
175
+ execweave live --open -- ollama run deepseek-r1:1.5b
176
+ ```
177
+
178
+ This mode does not start an Ollama server. A reachable upstream server is still required.
179
+
180
+ ## Dashboard
181
+
182
+ The dashboard is designed to keep large, multi-agent runs inspectable without changing the underlying evidence.
183
+
184
+ - **Execution graph:** agents, processes, files, network endpoints, tools, model/runtime entities, and supported relations.
185
+ - **Conversation rounds:** recent and historical rounds remain associated with the correct agent instead of being overwritten by later messages.
186
+ - **Node details:** inspect process identity, file history, network endpoints, tools, and provider conversation content.
187
+ - **Stable live updates:** the dashboard updates in place instead of replacing the whole document when a run changes state.
188
+ - **Large-run folding:** high-cardinality node types can collapse older members while keeping them inspectable.
189
+ - **Selection-focused layout:** selecting an agent or runtime object de-emphasizes unrelated graph traffic.
190
+
191
+ You can tune large-run rendering with:
192
+
193
+ ```text
194
+ --fold-budget N
195
+ --viewer-max-nodes N
196
+ --viewer-max-edges N
197
+ --viewer-max-dom-elements N
198
+ ```
199
+
200
+ ## Supported integrations
201
+
202
+ | Integration | OS-runtime observation | Specialized evidence |
203
+ | --- | --- | --- |
204
+ | Claude Code | Yes when launched under ExecWeave | native hooks and provider-supplied conversation/tool content |
205
+ | OpenAI Codex | Yes | lifecycle hooks, validated rollout transcripts, agent/subagent routing where exposed |
206
+ | Google Antigravity | Yes | passive hooks and conversation/subagent routing where exposed |
207
+ | Cursor | Yes | native hooks and task/subagent routing where exposed |
208
+ | OpenCode | Yes | project plugin, session/task routing, supplied plugin content |
209
+ | Ollama | Yes | managed local relay and model-runtime evidence |
210
+ | llama.cpp | Yes | model-runtime event/exchange/probe integration |
211
+ | vLLM | Yes | model-runtime event/exchange/probe integration |
212
+ | LM Studio | When the local process is observed | model-runtime catalog/runtime evidence |
213
+ | LiteLLM Proxy | When the local proxy is observed | gateway metadata and event integration |
214
+ | OpenRouter | Local client only; the remote service process is not observable | caller-supplied gateway event/exchange evidence |
215
+
216
+ Provider identifiers such as a tool-call ID, session ID, rollout thread ID, or subagent route are logical identities. They are not automatically OS process IDs. ExecWeave links layers only when the available evidence supports the link.
217
+
218
+ ## Evidence model
219
+
220
+ ExecWeave separates four broad layers:
221
+
222
+ ```text
223
+ Agent / IDE semantics and supplied content
224
+
225
+ Inference gateway / routing evidence
226
+
227
+ Model runtime / inference-server evidence
228
+
229
+ OS runtime evidence: process / file / network
230
+ ```
231
+
232
+ A relationship is marked causal only when the underlying telemetry supports a causal claim. Conservative bridges remain explicit derived evidence, for example:
233
+
234
+ ```text
235
+ inferred: true
236
+ causal: false
237
+ ```
238
+
239
+ An exact shared request identity can prove identity without proving causality:
240
+
241
+ ```text
242
+ identity_exact: true
243
+ inferred: false
244
+ causal: false
245
+ ```
246
+
247
+ If attribution is ambiguous, ExecWeave should leave the edge absent rather than invent a stronger relationship.
248
+
249
+ ### Full-fidelity supplied content
250
+
251
+ Supported integrations can preserve complete values explicitly supplied by provider hooks, plugins, or APIs in a local SHA-256 content-addressed store:
252
+
253
+ ```text
254
+ <run-root>/content/sha256/<sha256>.<json|txt|bin>
255
+ ```
256
+
257
+ Depending on the integration, this can include prompts, messages, request/response objects, tool inputs/results, assistant responses, exposed reasoning text, shell output, and supplied file content.
258
+
259
+ `complete_from_source: true` means ExecWeave stored the complete value delivered by that integration point. It does **not** mean ExecWeave observed hidden model state or provider-side data that was never exposed.
260
+
261
+ ## Common commands
262
+
263
+ ### Agent and IDE recorders
264
+
265
+ ```bash
266
+ execweave-claude-record --open -- claude
267
+ execweave-codex-record --open -- codex
268
+ execweave-antigravity-record --open -- antigravity
269
+ execweave-cursor-record --open -- cursor
270
+ execweave-opencode-plugin --install
271
+ execweave-opencode-record --open -- opencode
272
+ ```
273
+
274
+ ### Gateways and model runtimes
275
+
276
+ ```bash
277
+ execweave-inference-gateway event --gateway openrouter --sidecar gateway.jsonl
278
+ execweave-inference-gateway exchange --gateway openrouter --sidecar gateway.jsonl
279
+ execweave-model-runtime event --runtime ollama --sidecar model-runtime.jsonl
280
+ execweave-model-runtime exchange --runtime ollama --sidecar model-runtime.jsonl
281
+ execweave-model-runtime probe --runtime ollama --sidecar model-runtime.jsonl
282
+ ```
283
+
284
+ `event` records one-sided event evidence. `exchange` records a caller-supplied request/response pair; it does not claim transparent wire interception.
285
+
286
+ ### Runtime, graph, security, and integrity
287
+
288
+ ```bash
289
+ execweave doctor
290
+ execweave run --backend portable -- your-command
291
+ execweave run --backend strace -- your-command
292
+ execweave graph-summary run.graph.json
293
+ execweave graph-filter run.graph.json --causal-only --output causal.graph.json
294
+ execweave graph-focus run.graph.json NODE_ID --hops 2 --output focused.graph.json
295
+ execweave path run.graph.json SOURCE TARGET --causal-only
296
+ execweave analyze run.graph.json --output analysis.json
297
+ execweave-rule-pack graph.json --rule-pack local-policy.json --output report.json
298
+ execweave-integrity seal .execweave/runs/<run-id>
299
+ execweave-integrity verify .execweave/runs/<run-id>
300
+ ```
301
+
302
+ ## Run artifacts
303
+
304
+ A provider-integrated run can contain:
305
+
306
+ ```text
307
+ .execweave/runs/<run-id>/
308
+ ├── events.jsonl
309
+ ├── graph.json
310
+ ├── viewer.html
311
+ ├── semantic.jsonl
312
+ ├── content/sha256/...
313
+ ├── conversations.md
314
+ ├── conversations.json
315
+ ├── events.semantic.jsonl
316
+ ├── graph.semantic.json
317
+ ├── viewer.semantic.html
318
+ ├── events.correlated.jsonl
319
+ ├── graph.correlated.json
320
+ ├── viewer.correlated.html
321
+ └── integrity.json
322
+ ```
323
+
324
+ Raw observations remain separate from derived semantic and correlation outputs.
325
+
326
+ ## Limits and privacy
327
+
328
+ - The portable collector runs on Linux, macOS, and Windows. Portable filesystem observation is session-correlated rather than always process-causal, and polling can miss sufficiently short-lived activity.
329
+ - **Process lifetime identity:** portable process tracking distinguishes PID reuse with the process creation time. A reused PID is recorded as a new process lifetime instead of being collapsed into the earlier process.
330
+ - **Explicit degraded-state reporting:** terminal network collection health is reported as `available`, `degraded`, `unavailable`, `not_sampled`, or `not_requested`. A finished live conversation is considered synchronized only after the final conversation fetch succeeds; stopping polling alone is not treated as successful synchronization.
331
+ - **Failure ownership cleanup:** if the portable collector fails unexpectedly after launching a managed workload, it terminates the workload it owns before recording terminal session state. A filesystem observer that only partially starts is also torn down before the startup error propagates.
332
+ - Linux also provides a `strace` reference backend with stronger syscall-attributed evidence for supported executions.
333
+ - Provider semantics depend on what each integration actually exposes. Missing prompts, hidden reasoning, remote provider internals, and unexposed routing cannot be reconstructed reliably.
334
+ - Full-fidelity provider content may contain credentials, secrets, source code, prompts, tool values, model responses, shell output, and file contents.
335
+ - Conversation isolation is an attribution rule, not a redaction boundary. Explicitly routed content may legitimately appear at more than one participant.
336
+ - A local integrity manifest detects changes relative to the manifest; it is not an adversary-resistant trusted logging system if both evidence and manifest remain inside the same writable trust boundary.
337
+ - Review the complete run directory before sharing it.
338
+
339
+ ## Development
340
+
341
+ Run the test suite:
342
+
343
+ ```bash
344
+ python -m pytest
345
+ ```
346
+
347
+ Run linting:
348
+
349
+ ```bash
350
+ python -m ruff check .
351
+ ```
352
+
353
+ Issues and pull requests are welcome. Keep new integrations evidence-aware: document what is directly observed, what is supplied by the provider, and what is derived.
354
+
355
+ ## License
356
+
357
+ ExecWeave is distributed under the **PolyForm Noncommercial License 1.0.0**. See [LICENSE](LICENSE) for the full terms.