execweave 0.8.8__tar.gz → 0.8.10__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 (506) hide show
  1. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/provider-capability-stage-integrity.yml +36 -0
  2. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/provider-dashboard-contract.yml +33 -0
  3. {execweave-0.8.8 → execweave-0.8.10}/PKG-INFO +9 -5
  4. {execweave-0.8.8 → execweave-0.8.10}/README.de.md +1 -1
  5. {execweave-0.8.8 → execweave-0.8.10}/README.fr.md +1 -1
  6. {execweave-0.8.8 → execweave-0.8.10}/README.ja.md +1 -1
  7. {execweave-0.8.8 → execweave-0.8.10}/README.ko.md +1 -1
  8. {execweave-0.8.8 → execweave-0.8.10}/README.md +8 -4
  9. {execweave-0.8.8 → execweave-0.8.10}/README.ru.md +1 -1
  10. {execweave-0.8.8 → execweave-0.8.10}/README.zh-CN.md +1 -1
  11. {execweave-0.8.8 → execweave-0.8.10}/README.zh-TW.md +1 -1
  12. {execweave-0.8.8 → execweave-0.8.10}/pyproject.toml +2 -2
  13. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/__init__.py +1 -1
  14. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_full_fidelity.py +79 -0
  15. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_subagent_linkage.py +56 -30
  16. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/auto_specialized.py +112 -25
  17. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/collector.py +1 -1
  18. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/command.py +47 -8
  19. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_antigravity.py +6 -5
  20. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/graph.py +166 -59
  21. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live.py +80 -7
  22. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_process_layout.py +66 -7
  23. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_readability.py +2 -2
  24. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_d.py +5 -5
  25. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_style.py +1 -1
  26. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel.py +2 -0
  27. execweave-0.8.10/src/execweave/viewer_projection.py +463 -0
  28. execweave-0.8.10/tests/test_antigravity_field_run_regressions.py +280 -0
  29. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_subagent_transcript_linkage.py +69 -0
  30. execweave-0.8.10/tests/test_cursor_ollama_session_lifecycle.py +176 -0
  31. {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_information_architecture.py +5 -1
  32. {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph.py +70 -0
  33. {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_edge_routing_e2e.py +11 -4
  34. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_logs_export.py +4 -2
  35. {execweave-0.8.8 → execweave-0.8.10}/tests/test_process_tree_layout.py +61 -8
  36. {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_dashboard_contract.py +131 -0
  37. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v069_dashboard_release.py +3 -3
  38. {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_agent_isolation_e2e.py +243 -0
  39. execweave-0.8.8/src/execweave/viewer_projection.py +0 -198
  40. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/ci.yml +0 -0
  41. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/cleanup-workflow-history.yml +0 -0
  42. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/i18n.yml +0 -0
  43. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/package-benchmark.yml +0 -0
  44. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/package-smoke.yml +0 -0
  45. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/publish.yml +0 -0
  46. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/scalability.yml +0 -0
  47. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/viewer-agent-isolation.yml +0 -0
  48. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/wheel-smoke.yml +0 -0
  49. {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/windows-launcher.yml +0 -0
  50. {execweave-0.8.8 → execweave-0.8.10}/.gitignore +0 -0
  51. {execweave-0.8.8 → execweave-0.8.10}/LICENSE +0 -0
  52. {execweave-0.8.8 → execweave-0.8.10}/benchmarks/phase1_overhead.py +0 -0
  53. {execweave-0.8.8 → execweave-0.8.10}/docs/antigravity-hooks.md +0 -0
  54. {execweave-0.8.8 → execweave-0.8.10}/docs/assets/codex.gif +0 -0
  55. {execweave-0.8.8 → execweave-0.8.10}/docs/benchmarks/README.md +0 -0
  56. {execweave-0.8.8 → execweave-0.8.10}/docs/benchmarks/v0.6.0-github-actions.json +0 -0
  57. {execweave-0.8.8 → execweave-0.8.10}/docs/benchmarks/v0.6.0-github-actions.svg +0 -0
  58. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.de.md +0 -0
  59. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.fr.md +0 -0
  60. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.ja.md +0 -0
  61. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.ko.md +0 -0
  62. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.md +0 -0
  63. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.ru.md +0 -0
  64. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.zh-CN.md +0 -0
  65. {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.zh-TW.md +0 -0
  66. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.de.md +0 -0
  67. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.fr.md +0 -0
  68. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.ja.md +0 -0
  69. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.ko.md +0 -0
  70. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.md +0 -0
  71. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.ru.md +0 -0
  72. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.zh-CN.md +0 -0
  73. {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.zh-TW.md +0 -0
  74. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.de.md +0 -0
  75. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.fr.md +0 -0
  76. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.ja.md +0 -0
  77. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.ko.md +0 -0
  78. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.md +0 -0
  79. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.ru.md +0 -0
  80. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.zh-CN.md +0 -0
  81. {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.zh-TW.md +0 -0
  82. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.de.md +0 -0
  83. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.fr.md +0 -0
  84. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.ja.md +0 -0
  85. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.ko.md +0 -0
  86. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.md +0 -0
  87. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.ru.md +0 -0
  88. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.zh-CN.md +0 -0
  89. {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.zh-TW.md +0 -0
  90. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.de.md +0 -0
  91. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.fr.md +0 -0
  92. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.ja.md +0 -0
  93. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.ko.md +0 -0
  94. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.md +0 -0
  95. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.ru.md +0 -0
  96. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.zh-CN.md +0 -0
  97. {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.zh-TW.md +0 -0
  98. {execweave-0.8.8 → execweave-0.8.10}/docs/internal/provider-capability-matrix.md +0 -0
  99. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.de.md +0 -0
  100. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.fr.md +0 -0
  101. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.ja.md +0 -0
  102. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.ko.md +0 -0
  103. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.md +0 -0
  104. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.ru.md +0 -0
  105. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.zh-CN.md +0 -0
  106. {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.zh-TW.md +0 -0
  107. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.de.md +0 -0
  108. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.fr.md +0 -0
  109. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.ja.md +0 -0
  110. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.ko.md +0 -0
  111. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.md +0 -0
  112. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.ru.md +0 -0
  113. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.zh-CN.md +0 -0
  114. {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.zh-TW.md +0 -0
  115. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.de.md +0 -0
  116. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.fr.md +0 -0
  117. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.ja.md +0 -0
  118. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.ko.md +0 -0
  119. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.md +0 -0
  120. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.ru.md +0 -0
  121. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.zh-CN.md +0 -0
  122. {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.zh-TW.md +0 -0
  123. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.de.md +0 -0
  124. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.fr.md +0 -0
  125. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.ja.md +0 -0
  126. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.ko.md +0 -0
  127. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.md +0 -0
  128. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.ru.md +0 -0
  129. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.zh-CN.md +0 -0
  130. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.zh-TW.md +0 -0
  131. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.de.md +0 -0
  132. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.fr.md +0 -0
  133. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.ja.md +0 -0
  134. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.ko.md +0 -0
  135. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.md +0 -0
  136. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.ru.md +0 -0
  137. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.zh-CN.md +0 -0
  138. {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.zh-TW.md +0 -0
  139. {execweave-0.8.8 → execweave-0.8.10}/docs/remaining-provider-audit-v0.8.7.md +0 -0
  140. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.de.md +0 -0
  141. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.fr.md +0 -0
  142. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.ja.md +0 -0
  143. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.ko.md +0 -0
  144. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.md +0 -0
  145. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.ru.md +0 -0
  146. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.zh-CN.md +0 -0
  147. {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.zh-TW.md +0 -0
  148. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.de.md +0 -0
  149. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.fr.md +0 -0
  150. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.ja.md +0 -0
  151. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.ko.md +0 -0
  152. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.md +0 -0
  153. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.ru.md +0 -0
  154. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.zh-CN.md +0 -0
  155. {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.zh-TW.md +0 -0
  156. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.de.md +0 -0
  157. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.fr.md +0 -0
  158. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.ja.md +0 -0
  159. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.ko.md +0 -0
  160. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.md +0 -0
  161. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.ru.md +0 -0
  162. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.zh-CN.md +0 -0
  163. {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.zh-TW.md +0 -0
  164. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.de.md +0 -0
  165. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.fr.md +0 -0
  166. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.ja.md +0 -0
  167. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.ko.md +0 -0
  168. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.md +0 -0
  169. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.ru.md +0 -0
  170. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.zh-CN.md +0 -0
  171. {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.zh-TW.md +0 -0
  172. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.de.md +0 -0
  173. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.fr.md +0 -0
  174. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.ja.md +0 -0
  175. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.ko.md +0 -0
  176. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.md +0 -0
  177. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.ru.md +0 -0
  178. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.zh-CN.md +0 -0
  179. {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.zh-TW.md +0 -0
  180. {execweave-0.8.8 → execweave-0.8.10}/docs/v0.6.5-hardening-decisions.md +0 -0
  181. {execweave-0.8.8 → execweave-0.8.10}/docs/v0.8.3-graph-ergonomics.md +0 -0
  182. {execweave-0.8.8 → execweave-0.8.10}/scripts/audit_i18n_parity.py +0 -0
  183. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_claude_hook.py +0 -0
  184. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_claude_record_graph.py +0 -0
  185. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_codex_hook.py +0 -0
  186. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_conversation_records.py +0 -0
  187. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_correlation_graph.py +0 -0
  188. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_inference_gateway_cli.py +0 -0
  189. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_model_runtime_cli.py +0 -0
  190. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_openai_compatible_cli.py +0 -0
  191. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_release_stage_integrity.py +0 -0
  192. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_semantic_graph.py +0 -0
  193. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_viewer_js.py +0 -0
  194. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_wheel_install.py +0 -0
  195. {execweave-0.8.8 → execweave-0.8.10}/scripts/check_windows_launchers.py +0 -0
  196. {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_claude_hook_smoke.py +0 -0
  197. {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_codex_hook_smoke.py +0 -0
  198. {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_cursor_hook_smoke.py +0 -0
  199. {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_opencode_plugin_smoke.py +0 -0
  200. {execweave-0.8.8 → execweave-0.8.10}/scripts/make_semantic_smoke.py +0 -0
  201. {execweave-0.8.8 → execweave-0.8.10}/scripts/probe_provider_capability.py +0 -0
  202. {execweave-0.8.8 → execweave-0.8.10}/scripts/sync_i18n_nav.py +0 -0
  203. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/__main__.py +0 -0
  204. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/_conversation_records_core.py +0 -0
  205. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agent_bootstrap.py +0 -0
  206. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agent_topology.py +0 -0
  207. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agent_trace.py +0 -0
  208. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agy_preview_sanitize.py +0 -0
  209. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/analysis.py +0 -0
  210. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/anthropic.py +0 -0
  211. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/anthropic_cli.py +0 -0
  212. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/anthropic_full_fidelity.py +0 -0
  213. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_adapter.py +0 -0
  214. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_adapter_base.py +0 -0
  215. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_full_fidelity_base.py +0 -0
  216. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_full_fidelity_collaboration_base.py +0 -0
  217. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_hook_cli.py +0 -0
  218. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_record.py +0 -0
  219. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_trace_capability.py +0 -0
  220. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/backends.py +0 -0
  221. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/benchmark.py +0 -0
  222. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_adapter.py +0 -0
  223. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_child_transcript.py +0 -0
  224. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_delegation.py +0 -0
  225. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_full_fidelity.py +0 -0
  226. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_hook_cli.py +0 -0
  227. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_hook_contract.py +0 -0
  228. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_model_observer.py +0 -0
  229. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_record.py +0 -0
  230. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cli.py +0 -0
  231. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_adapter.py +0 -0
  232. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_conversation.py +0 -0
  233. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_full_fidelity.py +0 -0
  234. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_hook_cli.py +0 -0
  235. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_hook_lifecycle.py +0 -0
  236. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_message_diagnostics.py +0 -0
  237. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_message_transport_diagnostics.py +0 -0
  238. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_record.py +0 -0
  239. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_rollout_structures.py +0 -0
  240. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_rollout_trace.py +0 -0
  241. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_rollout_trace_base.py +0 -0
  242. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/content_evidence.py +0 -0
  243. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/content_store.py +0 -0
  244. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_archive.py +0 -0
  245. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_message_identity.py +0 -0
  246. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview.py +0 -0
  247. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_antigravity.py +0 -0
  248. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_claude.py +0 -0
  249. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_codex.py +0 -0
  250. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_common.py +0 -0
  251. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_generic.py +0 -0
  252. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_lines.py +0 -0
  253. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_transcript.py +0 -0
  254. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records.py +0 -0
  255. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_codex.py +0 -0
  256. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_common.py +0 -0
  257. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_ollama.py +0 -0
  258. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/correlation.py +0 -0
  259. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_adapter.py +0 -0
  260. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_delegation.py +0 -0
  261. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_delegation_base.py +0 -0
  262. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_full_fidelity.py +0 -0
  263. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_hook_cli.py +0 -0
  264. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_hook_contract.py +0 -0
  265. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_record.py +0 -0
  266. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/dashboard_shell.py +0 -0
  267. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/entry.py +0 -0
  268. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/evidence_availability.py +0 -0
  269. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/evidence_grade.py +0 -0
  270. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/fidelity.py +0 -0
  271. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/filesystem.py +0 -0
  272. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/focus.py +0 -0
  273. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/graph_ops.py +0 -0
  274. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/http_proxy.py +0 -0
  275. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/http_proxy_cli.py +0 -0
  276. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_gateway.py +0 -0
  277. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_gateway_cli.py +0 -0
  278. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_gateway_full_fidelity.py +0 -0
  279. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_identity.py +0 -0
  280. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_identity_cli.py +0 -0
  281. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/integrity.py +0 -0
  282. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/integrity_cli.py +0 -0
  283. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/litellm_callback.py +0 -0
  284. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/litellm_callback_cli.py +0 -0
  285. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_core.py +0 -0
  286. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view.py +0 -0
  287. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_extra_style.py +0 -0
  288. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_markup.py +0 -0
  289. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_a.py +0 -0
  290. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_b.py +0 -0
  291. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_c.py +0 -0
  292. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/model_runtime.py +0 -0
  293. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/model_runtime_cli.py +0 -0
  294. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/model_runtime_full_fidelity.py +0 -0
  295. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/openai_compatible.py +0 -0
  296. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/openai_compatible_cli.py +0 -0
  297. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/openai_compatible_full_fidelity.py +0 -0
  298. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_adapter.py +0 -0
  299. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_event_contract.py +0 -0
  300. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_full_fidelity.py +0 -0
  301. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_hook_cli.py +0 -0
  302. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_plugin_cli.py +0 -0
  303. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_record.py +0 -0
  304. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_task_linkage.py +0 -0
  305. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/overhead_benchmark.py +0 -0
  306. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/provider_capability.py +0 -0
  307. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/provider_lifecycle.py +0 -0
  308. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/provider_record.py +0 -0
  309. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/rule_pack.py +0 -0
  310. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/rule_pack_cli.py +0 -0
  311. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/scalability_benchmark.py +0 -0
  312. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/schema.py +0 -0
  313. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/scope.py +0 -0
  314. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/semantic.py +0 -0
  315. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/sink.py +0 -0
  316. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/strace_backend.py +0 -0
  317. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/stream_assembly.py +0 -0
  318. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/theme.py +0 -0
  319. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/top.py +0 -0
  320. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/top_cli.py +0 -0
  321. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/validate.py +0 -0
  322. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/vendor/dagre.min.js +0 -0
  323. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/view_cli.py +0 -0
  324. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer.py +0 -0
  325. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_antigravity.py +0 -0
  326. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_claude.py +0 -0
  327. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_codex.py +0 -0
  328. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_cursor.py +0 -0
  329. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_default.py +0 -0
  330. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_ollama.py +0 -0
  331. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_opencode.py +0 -0
  332. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_registry.py +0 -0
  333. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_content_inspector.py +0 -0
  334. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_clean.py +0 -0
  335. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_focus.py +0 -0
  336. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_hardening.py +0 -0
  337. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_hardening_v2.py +0 -0
  338. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_external_endpoints.py +0 -0
  339. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_limits.py +0 -0
  340. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_live_layout.py +0 -0
  341. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_projection_base.py +0 -0
  342. {execweave-0.8.8 → execweave-0.8.10}/src/execweave/workflow.py +0 -0
  343. {execweave-0.8.8 → execweave-0.8.10}/tests/dashboard_readability_fixture.py +0 -0
  344. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/codex_multi_agent/PROVENANCE.md +0 -0
  345. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/codex_multi_agent/hook-payloads.json +0 -0
  346. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/codex_multi_agent/rollout-main.jsonl +0 -0
  347. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/README.md +0 -0
  348. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/claude.json +0 -0
  349. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/codex.json +0 -0
  350. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/cursor.json +0 -0
  351. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/manifest.json +0 -0
  352. {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/opencode.json +0 -0
  353. {execweave-0.8.8 → execweave-0.8.10}/tests/multi_agent_run_fixture.py +0 -0
  354. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_bootstrap.py +0 -0
  355. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_message_viewer.py +0 -0
  356. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_node_labels.py +0 -0
  357. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_said_panel.py +0 -0
  358. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_topology_evidence.py +0 -0
  359. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_trace_lifecycle.py +0 -0
  360. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_trace_viewer_visibility.py +0 -0
  361. {execweave-0.8.8 → execweave-0.8.10}/tests/test_agy_windows_wire_acceptance.py +0 -0
  362. {execweave-0.8.8 → execweave-0.8.10}/tests/test_analysis.py +0 -0
  363. {execweave-0.8.8 → execweave-0.8.10}/tests/test_anthropic.py +0 -0
  364. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_agent_collaboration.py +0 -0
  365. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_child_panel_policy.py +0 -0
  366. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_child_transcript_tools.py +0 -0
  367. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_cursor_launch.py +0 -0
  368. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_history_replay.py +0 -0
  369. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_identity_topology.py +0 -0
  370. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_invocation_archive.py +0 -0
  371. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_lifecycle.py +0 -0
  372. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_linkage_projection.py +0 -0
  373. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_multi_conversation_isolation.py +0 -0
  374. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_official_contract.py +0 -0
  375. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_role_path_fallback.py +0 -0
  376. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_root_child_history_v2.py +0 -0
  377. {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_trace_capability_cli.py +0 -0
  378. {execweave-0.8.8 → execweave-0.8.10}/tests/test_auto_specialized.py +0 -0
  379. {execweave-0.8.8 → execweave-0.8.10}/tests/test_backends.py +0 -0
  380. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_adapter.py +0 -0
  381. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_child_transcript_tools.py +0 -0
  382. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_delegation.py +0 -0
  383. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_full_fidelity.py +0 -0
  384. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_hook_contract.py +0 -0
  385. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_hook_metadata.py +0 -0
  386. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_hook_viewer.py +0 -0
  387. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_model_observer.py +0 -0
  388. {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_record.py +0 -0
  389. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_adapter.py +0 -0
  390. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_archive_full_fidelity.py +0 -0
  391. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_child_panel_policy.py +0 -0
  392. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_conversation_isolation.py +0 -0
  393. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_full_fidelity.py +0 -0
  394. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_hook_lifecycle.py +0 -0
  395. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_hook_partial_capture.py +0 -0
  396. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_message_diagnostics.py +0 -0
  397. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_message_transport_diagnostics.py +0 -0
  398. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_nickname_path_fallback.py +0 -0
  399. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_plain_routed_agent_message.py +0 -0
  400. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_real_multi_agent_conversation.py +0 -0
  401. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_record.py +0 -0
  402. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_reducer_command.py +0 -0
  403. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_rollout_structures.py +0 -0
  404. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_rollout_trace.py +0 -0
  405. {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_routing_native_identity.py +0 -0
  406. {execweave-0.8.8 → execweave-0.8.10}/tests/test_collector.py +0 -0
  407. {execweave-0.8.8 → execweave-0.8.10}/tests/test_command.py +0 -0
  408. {execweave-0.8.8 → execweave-0.8.10}/tests/test_condense.py +0 -0
  409. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_access.py +0 -0
  410. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_agent_focus.py +0 -0
  411. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_agent_isolation.py +0 -0
  412. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_identity_merge.py +0 -0
  413. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_message_observation_dedupe.py +0 -0
  414. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_provider_parity.py +0 -0
  415. {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_root_authority.py +0 -0
  416. {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation.py +0 -0
  417. {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation_canonical_path.py +0 -0
  418. {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation_checker.py +0 -0
  419. {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation_process_exe.py +0 -0
  420. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cross_provider_agent_trace.py +0 -0
  421. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_adapter.py +0 -0
  422. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_delegation.py +0 -0
  423. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_full_fidelity.py +0 -0
  424. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_hook_contract.py +0 -0
  425. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_hook_fail_open.py +0 -0
  426. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_record.py +0 -0
  427. {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_task_linkage.py +0 -0
  428. {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_readability_e2e.py +0 -0
  429. {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_round_fold_state_e2e.py +0 -0
  430. {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_simplification.py +0 -0
  431. {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_ux_and_hook_projection.py +0 -0
  432. {execweave-0.8.8 → execweave-0.8.10}/tests/test_delegation_viewer.py +0 -0
  433. {execweave-0.8.8 → execweave-0.8.10}/tests/test_evidence_grade.py +0 -0
  434. {execweave-0.8.8 → execweave-0.8.10}/tests/test_execution_viewer.py +0 -0
  435. {execweave-0.8.8 → execweave-0.8.10}/tests/test_external_endpoints_all_providers.py +0 -0
  436. {execweave-0.8.8 → execweave-0.8.10}/tests/test_fidelity.py +0 -0
  437. {execweave-0.8.8 → execweave-0.8.10}/tests/test_filesystem_resilience.py +0 -0
  438. {execweave-0.8.8 → execweave-0.8.10}/tests/test_focus.py +0 -0
  439. {execweave-0.8.8 → execweave-0.8.10}/tests/test_fold_budget_setting.py +0 -0
  440. {execweave-0.8.8 → execweave-0.8.10}/tests/test_full_fidelity.py +0 -0
  441. {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_clear_focus_e2e.py +0 -0
  442. {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_lane_separation_e2e.py +0 -0
  443. {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_node_sizing_e2e.py +0 -0
  444. {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_ops.py +0 -0
  445. {execweave-0.8.8 → execweave-0.8.10}/tests/test_hook_fixture_corpus.py +0 -0
  446. {execweave-0.8.8 → execweave-0.8.10}/tests/test_http_proxy.py +0 -0
  447. {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_endpoint_identity.py +0 -0
  448. {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_gateway.py +0 -0
  449. {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_gateway_full_fidelity.py +0 -0
  450. {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_identity.py +0 -0
  451. {execweave-0.8.8 → execweave-0.8.10}/tests/test_integrity.py +0 -0
  452. {execweave-0.8.8 → execweave-0.8.10}/tests/test_litellm_callback.py +0 -0
  453. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live.py +0 -0
  454. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_auth.py +0 -0
  455. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_dashboard.py +0 -0
  456. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_dashboard_js.py +0 -0
  457. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_delta.py +0 -0
  458. {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_theme.py +0 -0
  459. {execweave-0.8.8 → execweave-0.8.10}/tests/test_lmstudio_auto_specialized.py +0 -0
  460. {execweave-0.8.8 → execweave-0.8.10}/tests/test_local_runtime_live_capture.py +0 -0
  461. {execweave-0.8.8 → execweave-0.8.10}/tests/test_model_runtime.py +0 -0
  462. {execweave-0.8.8 → execweave-0.8.10}/tests/test_model_runtime_full_fidelity.py +0 -0
  463. {execweave-0.8.8 → execweave-0.8.10}/tests/test_ollama_panel_policy.py +0 -0
  464. {execweave-0.8.8 → execweave-0.8.10}/tests/test_openai_compatible.py +0 -0
  465. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_adapter.py +0 -0
  466. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_event_contract.py +0 -0
  467. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_event_lifecycle.py +0 -0
  468. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_full_fidelity.py +0 -0
  469. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_identity_unification.py +0 -0
  470. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_plugin.py +0 -0
  471. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_record.py +0 -0
  472. {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_task_session_linkage.py +0 -0
  473. {execweave-0.8.8 → execweave-0.8.10}/tests/test_overhead_benchmark.py +0 -0
  474. {execweave-0.8.8 → execweave-0.8.10}/tests/test_per_agent_conversation_default.py +0 -0
  475. {execweave-0.8.8 → execweave-0.8.10}/tests/test_pr25_premerge_hardening_contract.py +0 -0
  476. {execweave-0.8.8 → execweave-0.8.10}/tests/test_pr25_premerge_hardening_e2e.py +0 -0
  477. {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_capability.py +0 -0
  478. {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_conversation_evidence.py +0 -0
  479. {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_conversation_history_integrity.py +0 -0
  480. {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_lifecycle.py +0 -0
  481. {execweave-0.8.8 → execweave-0.8.10}/tests/test_release_stage_integrity_version_guard.py +0 -0
  482. {execweave-0.8.8 → execweave-0.8.10}/tests/test_rule_pack.py +0 -0
  483. {execweave-0.8.8 → execweave-0.8.10}/tests/test_schema.py +0 -0
  484. {execweave-0.8.8 → execweave-0.8.10}/tests/test_scope.py +0 -0
  485. {execweave-0.8.8 → execweave-0.8.10}/tests/test_semantic.py +0 -0
  486. {execweave-0.8.8 → execweave-0.8.10}/tests/test_shared_injected_context_scope.py +0 -0
  487. {execweave-0.8.8 → execweave-0.8.10}/tests/test_strace_backend.py +0 -0
  488. {execweave-0.8.8 → execweave-0.8.10}/tests/test_stream_assembly.py +0 -0
  489. {execweave-0.8.8 → execweave-0.8.10}/tests/test_threat_model.py +0 -0
  490. {execweave-0.8.8 → execweave-0.8.10}/tests/test_tool_traffic_e2e.py +0 -0
  491. {execweave-0.8.8 → execweave-0.8.10}/tests/test_top_detached.py +0 -0
  492. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v063_features.py +0 -0
  493. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v064_live_auto_integrations.py +0 -0
  494. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v064_live_evidence.py +0 -0
  495. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v079_review_e2e.py +0 -0
  496. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v079_review_regressions.py +0 -0
  497. {execweave-0.8.8 → execweave-0.8.10}/tests/test_v083_release_gate_p2.py +0 -0
  498. {execweave-0.8.8 → execweave-0.8.10}/tests/test_validate.py +0 -0
  499. {execweave-0.8.8 → execweave-0.8.10}/tests/test_version.py +0 -0
  500. {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer.py +0 -0
  501. {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_child_authority.py +0 -0
  502. {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_content_inspector.py +0 -0
  503. {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_limits.py +0 -0
  504. {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_projection.py +0 -0
  505. {execweave-0.8.8 → execweave-0.8.10}/tests/test_windows_codex_agy_display_repair.py +0 -0
  506. {execweave-0.8.8 → execweave-0.8.10}/tests/test_workflow.py +0 -0
@@ -111,6 +111,42 @@ jobs:
111
111
  esac
112
112
  done < <(git diff --name-only "$BASELINE_REF...HEAD" -- tests)
113
113
  fi
114
+ if [[ "$HEAD_REF" == "fix/provider-history-aggregation" ]]; then
115
+ while IFS= read -r path; do
116
+ case "$path" in
117
+ tests/test_antigravity_subagent_transcript_linkage.py)
118
+ args+=(--allow-test-change "$path=follow-up Antigravity spawn pairs now select the validated latest transcript pair while preserving the historical duplicate-pair abstention contract")
119
+ ;;
120
+ tests/test_graph.py)
121
+ args+=(--allow-test-change "$path=semantic transcript replay is folded into one graph transition while raw evidence counts remain visible")
122
+ ;;
123
+ tests/test_live_logs_export.py)
124
+ args+=(--allow-test-change "$path=raw event details now expose safe inspection actions for the event source and file target nodes")
125
+ ;;
126
+ tests/test_provider_dashboard_contract.py)
127
+ args+=(--allow-test-change "$path=all providers now assert repeated result aggregation and semantic-only raw file evidence")
128
+ ;;
129
+ tests/test_dashboard_information_architecture.py)
130
+ args+=(--allow-test-change "$path=runtime and semantic raw evidence now retain independent 320-row budgets, so the combined raw panel limit is 640")
131
+ ;;
132
+ tests/test_viewer_agent_isolation_e2e.py)
133
+ args+=(--allow-test-change "$path=browser regressions now verify semantic-only md inspection and AGY follow-up conversation continuity")
134
+ ;;
135
+ esac
136
+ done < <(git diff --name-only "$BASELINE_REF...HEAD" -- tests)
137
+ fi
138
+ if [[ "$HEAD_REF" == "fix/dagre-routing-and-ports" ]]; then
139
+ while IFS= read -r path; do
140
+ case "$path" in
141
+ tests/test_process_tree_layout.py)
142
+ args+=(--allow-test-change "$path=dagre now exposes route points and ports are recomputed after layout; historical test names remain stable")
143
+ ;;
144
+ tests/test_graph_edge_routing_e2e.py)
145
+ args+=(--allow-test-change "$path=ordinary edges now use dagre polylines instead of cubics while bundle and lifecycle-return families stay deliberate exceptions")
146
+ ;;
147
+ esac
148
+ done < <(git diff --name-only "$BASELINE_REF...HEAD" -- tests)
149
+ fi
114
150
  if [[ "$HEAD_REF" == "audit/remaining-providers-v0.8.7" ]]; then
115
151
  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")
116
152
  while IFS= read -r path; do
@@ -14,6 +14,38 @@ concurrency:
14
14
  cancel-in-progress: ${{ github.event_name != 'workflow_dispatch' }}
15
15
 
16
16
  jobs:
17
+ cross-platform:
18
+ name: ${{ matrix.os }} all-provider graph/history/raw contract
19
+ runs-on: ${{ matrix.os }}
20
+ timeout-minutes: 25
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ os: [ubuntu-latest, macos-latest, windows-latest]
25
+
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: actions/setup-python@v5
29
+ with:
30
+ python-version: "3.12"
31
+ cache: pip
32
+ - name: Install test dependencies
33
+ run: python -m pip install -e ".[dev]"
34
+ - name: Run provider-neutral graph, history, dashboard, and raw-event contracts
35
+ run: >-
36
+ python -m pytest -q
37
+ tests/test_provider_dashboard_contract.py
38
+ tests/test_conversation_provider_parity.py
39
+ tests/test_provider_conversation_evidence.py
40
+ tests/test_provider_conversation_history_integrity.py
41
+ tests/test_external_endpoints_all_providers.py
42
+ tests/test_graph.py
43
+ tests/test_antigravity_field_run_regressions.py
44
+ tests/test_antigravity_subagent_transcript_linkage.py
45
+ tests/test_antigravity_role_path_fallback.py
46
+ - name: Check dashboard JavaScript syntax
47
+ run: python -m pytest -q tests/test_live_dashboard_js.py tests/test_live_dashboard.py
48
+
17
49
  provider:
18
50
  name: ${{ matrix.provider }} history/dashboard/raw contract
19
51
  runs-on: ubuntu-latest
@@ -41,6 +73,7 @@ jobs:
41
73
  tests/test_antigravity_root_child_history_v2.py
42
74
  tests/test_antigravity_invocation_archive.py
43
75
  tests/test_antigravity_child_transcript_tools.py
76
+ tests/test_antigravity_field_run_regressions.py
44
77
  tests/test_antigravity_role_path_fallback.py
45
78
  tests/test_agy_windows_wire_acceptance.py
46
79
  tests/test_provider_conversation_evidence.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: execweave
3
- Version: 0.8.8
3
+ Version: 0.8.10
4
4
  Summary: Turn AI-agent runtime behavior into a local interactive execution graph.
5
5
  Project-URL: Homepage, https://github.com/Irish-kw/ExecWeave
6
6
  Project-URL: Repository, https://github.com/Irish-kw/ExecWeave
@@ -85,7 +85,7 @@ ExecWeave is a source-available, local-first observability project that turns AI
85
85
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
86
86
  </p>
87
87
 
88
- This README documents **v0.8.8**.
88
+ This README documents **v0.8.10**. This release fixes Windows Cursor launch resolution for arbitrary install roots and lets an ExecWeave-managed local `ollama serve` capture later loopback inference clients into the same semantic stream and dashboard.
89
89
 
90
90
  ## Why ExecWeave
91
91
 
@@ -126,7 +126,11 @@ execweave live --open -- python my_agent.py
126
126
 
127
127
  > **Approve the hook when prompted.** On the first provider-integrated run, the Agent/IDE may ask whether ExecWeave may enable its local hook integration. Choose **Allow / Yes**. Without approval, OS-runtime telemetry can still work, but provider-level tool, model, conversation, and supplied-content visibility may be reduced or unavailable.
128
128
 
129
- Google Antigravity currently uses the `agy` CLI command; ExecWeave also accepts `antigravity` as a friendly alias and resolves it to `agy`. For Cursor, `execweave live --open -- cursor` first tries a normal PATH launcher, then falls back to the standard desktop application binary on macOS and Windows.
129
+ Google Antigravity currently uses the `agy` CLI command; ExecWeave also accepts `antigravity` as a friendly alias and resolves it to `agy`.
130
+
131
+ For Cursor on Windows, bare `cursor` follows the PATH entry the user actually has and, when it is the normal `.../resources/app/bin/cursor.cmd` shim, derives the matching `Cursor.exe` from that same installation root. This works for custom drives and arbitrary install directories; explicit launcher paths are left untouched. macOS/Windows standard desktop paths remain a fallback when the PATH shim cannot identify the desktop binary.
132
+
133
+ For a managed local Ollama server, `execweave live --open -- ollama serve` owns the public loopback endpoint and relays the real server through an internal loopback port. A later `ollama run`, Ollama SDK request, OpenAI-compatible client, or `curl` started from another terminal can therefore appear in the same ExecWeave semantic stream even though that client is not a child of the `ollama serve` process. Relay mode is deliberately limited to local `localhost` / `127.0.0.1` binds; external, wildcard, and IPv6 exposure is not rewritten.
130
134
 
131
135
  Build finalized run artifacts with:
132
136
 
@@ -170,9 +174,9 @@ These are presentation-layer changes. Raw graph evidence is unchanged, and Live,
170
174
  | Claude Code | Yes | native hooks + full-fidelity supplied hook content + exact subagent results when exposed |
171
175
  | OpenAI Codex | Yes | lifecycle hooks + validated rollout transcripts + agent-local task/message/final-response routing |
172
176
  | Google Antigravity / Antigravity CLI | Yes | passive native hooks + validated conversation/subagent routing where exposed |
173
- | Cursor | Yes | native hooks + exact subagent task/summary routing when exposed |
177
+ | Cursor | Yes | native hooks + exact subagent task/summary routing when exposed; Windows bare-launch resolution follows the actual PATH installation |
174
178
  | OpenCode | Yes | project plugin + session/task routing + full-fidelity supplied plugin content |
175
- | Ollama | Yes | `execweave-model-runtime event/exchange/probe --runtime ollama` |
179
+ | Ollama | Yes | managed local `ollama serve` loopback relay + `execweave-model-runtime event/exchange/probe --runtime ollama` |
176
180
  | llama.cpp | Yes | `execweave-model-runtime event/exchange/probe --runtime llamacpp` |
177
181
  | vLLM | Yes | `execweave-model-runtime event/exchange/probe --runtime vllm` |
178
182
  | LM Studio | Only when the local process is launched under ExecWeave | `execweave-model-runtime event/exchange/probe --runtime lmstudio` |
@@ -32,7 +32,7 @@ ExecWeave ist ein source-available, local-first Observability-Projekt, das Aktiv
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- Dieses README dokumentiert **v0.8.8**.
35
+ Dieses README dokumentiert **v0.8.10**.
36
36
 
37
37
  ## Warum ExecWeave
38
38
 
@@ -32,7 +32,7 @@ ExecWeave est un projet d’observabilité source-available et local-first qui t
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- Ce README décrit **v0.8.8**.
35
+ Ce README décrit **v0.8.10**.
36
36
 
37
37
  ## Pourquoi ExecWeave
38
38
 
@@ -32,7 +32,7 @@ ExecWeave は source-available / local-first の observability プロジェク
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- この README は **v0.8.8** を説明します。
35
+ この README は **v0.8.10** を説明します。
36
36
 
37
37
  ## ExecWeave を使う理由
38
38
 
@@ -32,7 +32,7 @@ ExecWeave는 source-available, local-first observability 프로젝트입니다.
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- 이 README는 **v0.8.8**을 설명합니다.
35
+ 이 README는 **v0.8.10**을 설명합니다.
36
36
 
37
37
  ## 왜 ExecWeave인가
38
38
 
@@ -32,7 +32,7 @@ ExecWeave is a source-available, local-first observability project that turns AI
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- This README documents **v0.8.8**.
35
+ This README documents **v0.8.10**. This release fixes Windows Cursor launch resolution for arbitrary install roots and lets an ExecWeave-managed local `ollama serve` capture later loopback inference clients into the same semantic stream and dashboard.
36
36
 
37
37
  ## Why ExecWeave
38
38
 
@@ -73,7 +73,11 @@ execweave live --open -- python my_agent.py
73
73
 
74
74
  > **Approve the hook when prompted.** On the first provider-integrated run, the Agent/IDE may ask whether ExecWeave may enable its local hook integration. Choose **Allow / Yes**. Without approval, OS-runtime telemetry can still work, but provider-level tool, model, conversation, and supplied-content visibility may be reduced or unavailable.
75
75
 
76
- Google Antigravity currently uses the `agy` CLI command; ExecWeave also accepts `antigravity` as a friendly alias and resolves it to `agy`. For Cursor, `execweave live --open -- cursor` first tries a normal PATH launcher, then falls back to the standard desktop application binary on macOS and Windows.
76
+ Google Antigravity currently uses the `agy` CLI command; ExecWeave also accepts `antigravity` as a friendly alias and resolves it to `agy`.
77
+
78
+ For Cursor on Windows, bare `cursor` follows the PATH entry the user actually has and, when it is the normal `.../resources/app/bin/cursor.cmd` shim, derives the matching `Cursor.exe` from that same installation root. This works for custom drives and arbitrary install directories; explicit launcher paths are left untouched. macOS/Windows standard desktop paths remain a fallback when the PATH shim cannot identify the desktop binary.
79
+
80
+ For a managed local Ollama server, `execweave live --open -- ollama serve` owns the public loopback endpoint and relays the real server through an internal loopback port. A later `ollama run`, Ollama SDK request, OpenAI-compatible client, or `curl` started from another terminal can therefore appear in the same ExecWeave semantic stream even though that client is not a child of the `ollama serve` process. Relay mode is deliberately limited to local `localhost` / `127.0.0.1` binds; external, wildcard, and IPv6 exposure is not rewritten.
77
81
 
78
82
  Build finalized run artifacts with:
79
83
 
@@ -117,9 +121,9 @@ These are presentation-layer changes. Raw graph evidence is unchanged, and Live,
117
121
  | Claude Code | Yes | native hooks + full-fidelity supplied hook content + exact subagent results when exposed |
118
122
  | OpenAI Codex | Yes | lifecycle hooks + validated rollout transcripts + agent-local task/message/final-response routing |
119
123
  | Google Antigravity / Antigravity CLI | Yes | passive native hooks + validated conversation/subagent routing where exposed |
120
- | Cursor | Yes | native hooks + exact subagent task/summary routing when exposed |
124
+ | Cursor | Yes | native hooks + exact subagent task/summary routing when exposed; Windows bare-launch resolution follows the actual PATH installation |
121
125
  | OpenCode | Yes | project plugin + session/task routing + full-fidelity supplied plugin content |
122
- | Ollama | Yes | `execweave-model-runtime event/exchange/probe --runtime ollama` |
126
+ | Ollama | Yes | managed local `ollama serve` loopback relay + `execweave-model-runtime event/exchange/probe --runtime ollama` |
123
127
  | llama.cpp | Yes | `execweave-model-runtime event/exchange/probe --runtime llamacpp` |
124
128
  | vLLM | Yes | `execweave-model-runtime event/exchange/probe --runtime vllm` |
125
129
  | LM Studio | Only when the local process is launched under ExecWeave | `execweave-model-runtime event/exchange/probe --runtime lmstudio` |
@@ -32,7 +32,7 @@ ExecWeave — source-available, local-first проект наблюдаемос
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- Этот README описывает **v0.8.8**.
35
+ Этот README описывает **v0.8.10**.
36
36
 
37
37
  ## Почему ExecWeave
38
38
 
@@ -32,7 +32,7 @@ ExecWeave 是一个 source-available、local-first 的可观测性项目,把 A
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- 本 README 对应 **v0.8.8**。
35
+ 本 README 对应 **v0.8.10**。
36
36
 
37
37
  ## 为什么是 ExecWeave
38
38
 
@@ -32,7 +32,7 @@ ExecWeave 是一個 source-available、local-first 的可觀測性專案,會
32
32
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
33
33
  </p>
34
34
 
35
- 本 README 對應 **v0.8.8**。
35
+ 本 README 對應 **v0.8.10**。
36
36
 
37
37
  ## 為什麼是 ExecWeave
38
38
 
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "execweave"
7
- # ExecWeave v0.8.8 release metadata
8
- version = "0.8.8"
7
+ # ExecWeave v0.8.10 release metadata
8
+ version = "0.8.10"
9
9
  description = "Turn AI-agent runtime behavior into a local interactive execution graph."
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
@@ -1,3 +1,3 @@
1
1
  """ExecWeave runtime graph package."""
2
2
 
3
- __version__ = "0.8.8"
3
+ __version__ = "0.8.10"
@@ -8,6 +8,7 @@ from . import antigravity_full_fidelity_collaboration_base as _base
8
8
  from . import antigravity_adapter_base as _semantic
9
9
  from .agent_topology import EVIDENCE_VALIDATED_CHILD_TRANSCRIPT, subagent_topology
10
10
  from .antigravity_subagent_linkage import (
11
+ derived_child_agent_path,
11
12
  read_transcript_records,
12
13
  transcript_subagent_links,
13
14
  validated_subagent_links,
@@ -70,6 +71,10 @@ def _assignment_event(
70
71
  "conversation_id": child_id,
71
72
  "agent_type": child_label,
72
73
  "agent_nickname": role or type_name,
74
+ "provider_role_slot": subagent_index,
75
+ "provider_role_type": type_name,
76
+ "provider_role_workspace": workspace,
77
+ "provider_role_path": derived_child_agent_path(spec, child_id),
73
78
  "identity_semantics": "provider_transcript_result_conversation_id",
74
79
  "execution_observed": False,
75
80
  "lifecycle_authority": "child_provider_hooks",
@@ -132,6 +137,67 @@ def _child_session_event(*, assignment: dict[str, Any], parent_id: str) -> dict[
132
137
  }
133
138
 
134
139
 
140
+ def _subtask_request_event(*, assignment: dict[str, Any], parent_id: str) -> dict[str, Any]:
141
+ """Connect the requesting agent to the subtask before its child is known."""
142
+ subtask = assignment.get("source")
143
+ subtask = subtask if isinstance(subtask, dict) else {}
144
+ attributes = assignment.get("attributes")
145
+ request_attributes = dict(attributes) if isinstance(attributes, dict) else {}
146
+ request_attributes.update(
147
+ {
148
+ "provider": "antigravity",
149
+ "attribution": "antigravity_hook",
150
+ "evidence_source": "provider_hook_plus_validated_transcript",
151
+ "causal": False,
152
+ "inferred": False,
153
+ "identity_exact": True,
154
+ "provider_collaboration_tool_exact": True,
155
+ "provider_post_tool_success": True,
156
+ }
157
+ )
158
+ return {
159
+ "timestamp": assignment.get("timestamp"),
160
+ "event_type": "semantic.antigravity.subtask.requested",
161
+ "relation": "REQUESTED_SUBTASK",
162
+ "source": _entity(
163
+ "agent",
164
+ f"agent:antigravity:conversation:{parent_id}",
165
+ name="Antigravity conversation",
166
+ attributes={
167
+ "provider": "antigravity",
168
+ "conversation_id": parent_id,
169
+ "identity_semantics": "provider_conversation_id",
170
+ },
171
+ ),
172
+ "target": subtask,
173
+ "attributes": request_attributes,
174
+ }
175
+
176
+
177
+ def _append_missing_subtask_requests(
178
+ events: list[dict[str, Any]],
179
+ assignments: list[dict[str, Any]],
180
+ *,
181
+ parent_id: str,
182
+ ) -> None:
183
+ """Add root-to-subtask edges without duplicating request-only evidence."""
184
+ requested_ids = {
185
+ target.get("id")
186
+ for event in events
187
+ if event.get("relation") == "REQUESTED_SUBTASK"
188
+ and isinstance((target := event.get("target")), dict)
189
+ and isinstance(target.get("id"), str)
190
+ }
191
+ for assignment in assignments:
192
+ source = assignment.get("source")
193
+ if not isinstance(source, dict) or not isinstance(source.get("id"), str):
194
+ continue
195
+ if source["id"] in requested_ids:
196
+ continue
197
+ events.append(_subtask_request_event(assignment=assignment, parent_id=parent_id))
198
+ requested_ids.add(source["id"])
199
+
200
+
135
201
  def _child_task_content_event(
136
202
  *,
137
203
  assignment: dict[str, Any],
@@ -474,6 +540,7 @@ def _transcript_assignment_events(
474
540
  parent_id=conversation_id,
475
541
  )
476
542
  events: list[dict[str, Any]] = []
543
+ assignments: list[dict[str, Any]] = []
477
544
  for link in links:
478
545
  spec = link["spec"]
479
546
  child_id = link["conversation_id"]
@@ -487,6 +554,7 @@ def _transcript_assignment_events(
487
554
  child_id=child_id,
488
555
  spec=spec,
489
556
  )
557
+ assignments.append(assignment)
490
558
  events.append(assignment)
491
559
  events.append(_child_session_event(assignment=assignment, parent_id=conversation_id))
492
560
  events.extend(
@@ -513,6 +581,7 @@ def _transcript_assignment_events(
513
581
  )
514
582
  if task_content is not None:
515
583
  events.append(task_content)
584
+ _append_missing_subtask_requests(events, assignments, parent_id=conversation_id)
516
585
  return events
517
586
 
518
587
 
@@ -539,6 +608,16 @@ def antigravity_hook_to_content_events(
539
608
  timestamp=timestamp,
540
609
  store=store,
541
610
  )
611
+ assignments = [
612
+ event
613
+ for event in assigned
614
+ if event.get("relation") == "ASSIGNED_AGENT_TASK"
615
+ ]
616
+ _append_missing_subtask_requests(
617
+ events,
618
+ assignments,
619
+ parent_id=str(payload.get("conversationId") or ""),
620
+ )
542
621
  events.extend(assigned)
543
622
  tool_call = payload.get("toolCall")
544
623
  tool_name = tool_call.get("name") if isinstance(tool_call, dict) else None
@@ -305,36 +305,46 @@ def transcript_subagent_links(
305
305
  step if isinstance(step, int) and not isinstance(step, bool) and step >= 0 else index
306
306
  )
307
307
  candidates.append((specs, results, step_index))
308
- if len(candidates) != 1:
308
+ if not candidates:
309
309
  return []
310
- specs, results, step_index = candidates[0]
311
- if len(results) != len(specs):
310
+ # A cumulative transcript contains every completed spawn pair. Replaying
311
+ # the exact same pair is ambiguous/corrupt evidence, but multiple distinct
312
+ # pairs are valid and must all remain attached to the parent conversation.
313
+ signatures = {
314
+ json.dumps((specs, results), ensure_ascii=False, sort_keys=True)
315
+ for specs, results, _ in candidates
316
+ }
317
+ if len(signatures) != len(candidates):
312
318
  return []
313
- seen: set[str] = set()
319
+
314
320
  links: list[dict[str, Any]] = []
315
- for subagent_index, (spec, result) in enumerate(zip(specs, results, strict=True)):
316
- child_id = result.get("conversationId")
317
- if not isinstance(child_id, str) or not child_id:
318
- return []
319
- if child_id == parent_id or child_id in seen:
321
+ seen: set[str] = set()
322
+ for specs, results, step_index in candidates:
323
+ if len(results) != len(specs):
320
324
  return []
321
- seen.add(child_id)
322
- child_transcript = None
323
- log_uri = result.get("logAbsoluteUri")
324
- if isinstance(log_uri, str):
325
- candidate = _canonical_file_uri_path(log_uri)
326
- if candidate is not None and _transcript_root(candidate, child_id) is not None:
327
- child_transcript = candidate
328
- links.append(
329
- {
330
- "subagent_index": subagent_index,
331
- "conversation_id": child_id,
332
- "step_index": step_index,
333
- "spec": spec,
334
- "agent_path": derived_child_agent_path(spec, child_id),
335
- "transcript_path": child_transcript,
336
- }
337
- )
325
+ for subagent_index, (spec, result) in enumerate(zip(specs, results, strict=True)):
326
+ child_id = result.get("conversationId")
327
+ if not isinstance(child_id, str) or not child_id:
328
+ return []
329
+ if child_id == parent_id or child_id in seen:
330
+ return []
331
+ seen.add(child_id)
332
+ child_transcript = None
333
+ log_uri = result.get("logAbsoluteUri")
334
+ if isinstance(log_uri, str):
335
+ candidate = _canonical_file_uri_path(log_uri)
336
+ if candidate is not None and _transcript_root(candidate, child_id) is not None:
337
+ child_transcript = candidate
338
+ links.append(
339
+ {
340
+ "subagent_index": subagent_index,
341
+ "conversation_id": child_id,
342
+ "step_index": step_index,
343
+ "spec": spec,
344
+ "agent_path": derived_child_agent_path(spec, child_id),
345
+ "transcript_path": child_transcript,
346
+ }
347
+ )
338
348
  return links
339
349
 
340
350
 
@@ -378,16 +388,32 @@ def validated_subagent_links(
378
388
  if records is None:
379
389
  return []
380
390
 
381
- candidates: list[list[dict[str, Any]]] = []
391
+ candidates: list[tuple[list[dict[str, Any]], int]] = []
382
392
  for index, record in enumerate(records[:-1]):
383
393
  if not _matching_request(record, specs):
384
394
  continue
385
395
  results = _matching_result(records[index + 1])
386
396
  if results is not None:
387
- candidates.append(results)
388
- if len(candidates) != 1:
397
+ step = record.get("step_index")
398
+ step_index = (
399
+ step if isinstance(step, int) and not isinstance(step, bool) and step >= 0 else index
400
+ )
401
+ candidates.append((results, step_index))
402
+ if not candidates:
403
+ return []
404
+ payload_step = payload.get("stepIdx")
405
+ eligible = [
406
+ candidate
407
+ for candidate in candidates
408
+ if not isinstance(payload_step, int) or candidate[1] <= payload_step
409
+ ]
410
+ if not eligible:
411
+ return []
412
+ latest_step = max(candidate[1] for candidate in eligible)
413
+ latest = [candidate for candidate in eligible if candidate[1] == latest_step]
414
+ if len(latest) != 1:
389
415
  return []
390
- results = candidates[0]
416
+ results = latest[0][0]
391
417
  if len(results) != len(specs):
392
418
  return []
393
419