execweave 0.8.3__tar.gz → 0.8.4__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 (481) hide show
  1. {execweave-0.8.3 → execweave-0.8.4}/PKG-INFO +2 -2
  2. {execweave-0.8.3 → execweave-0.8.4}/README.de.md +1 -1
  3. {execweave-0.8.3 → execweave-0.8.4}/README.fr.md +1 -1
  4. {execweave-0.8.3 → execweave-0.8.4}/README.ja.md +1 -1
  5. {execweave-0.8.3 → execweave-0.8.4}/README.ko.md +1 -1
  6. {execweave-0.8.3 → execweave-0.8.4}/README.md +1 -1
  7. {execweave-0.8.3 → execweave-0.8.4}/README.ru.md +1 -1
  8. {execweave-0.8.3 → execweave-0.8.4}/README.zh-CN.md +1 -1
  9. {execweave-0.8.3 → execweave-0.8.4}/README.zh-TW.md +1 -1
  10. {execweave-0.8.3 → execweave-0.8.4}/pyproject.toml +2 -2
  11. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/__init__.py +1 -1
  12. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_full_fidelity.py +9 -3
  13. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/dashboard_shell.py +7 -29
  14. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_agent_panel.py +41 -14
  15. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_dashboard_focus.py +12 -6
  16. execweave-0.8.4/tests/test_antigravity_multi_conversation_isolation.py +316 -0
  17. execweave-0.8.4/tests/test_conversation_root_authority.py +40 -0
  18. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v069_dashboard_release.py +3 -3
  19. execweave-0.8.4/tests/test_viewer_child_authority.py +22 -0
  20. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/ci.yml +0 -0
  21. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/cleanup-workflow-history.yml +0 -0
  22. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/i18n.yml +0 -0
  23. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/package-benchmark.yml +0 -0
  24. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/package-smoke.yml +0 -0
  25. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/provider-capability-stage-integrity.yml +0 -0
  26. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/publish.yml +0 -0
  27. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/scalability.yml +0 -0
  28. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/viewer-agent-isolation.yml +0 -0
  29. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/wheel-smoke.yml +0 -0
  30. {execweave-0.8.3 → execweave-0.8.4}/.github/workflows/windows-launcher.yml +0 -0
  31. {execweave-0.8.3 → execweave-0.8.4}/.gitignore +0 -0
  32. {execweave-0.8.3 → execweave-0.8.4}/LICENSE +0 -0
  33. {execweave-0.8.3 → execweave-0.8.4}/RELEASE-PLAN-0.8.0.md +0 -0
  34. {execweave-0.8.3 → execweave-0.8.4}/benchmarks/phase1_overhead.py +0 -0
  35. {execweave-0.8.3 → execweave-0.8.4}/docs/antigravity-hooks.md +0 -0
  36. {execweave-0.8.3 → execweave-0.8.4}/docs/assets/codex.gif +0 -0
  37. {execweave-0.8.3 → execweave-0.8.4}/docs/benchmarks/README.md +0 -0
  38. {execweave-0.8.3 → execweave-0.8.4}/docs/benchmarks/v0.6.0-github-actions.json +0 -0
  39. {execweave-0.8.3 → execweave-0.8.4}/docs/benchmarks/v0.6.0-github-actions.svg +0 -0
  40. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.de.md +0 -0
  41. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.fr.md +0 -0
  42. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.ja.md +0 -0
  43. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.ko.md +0 -0
  44. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.md +0 -0
  45. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.ru.md +0 -0
  46. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.zh-CN.md +0 -0
  47. {execweave-0.8.3 → execweave-0.8.4}/docs/claude-code-hooks.zh-TW.md +0 -0
  48. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.de.md +0 -0
  49. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.fr.md +0 -0
  50. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.ja.md +0 -0
  51. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.ko.md +0 -0
  52. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.md +0 -0
  53. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.ru.md +0 -0
  54. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.zh-CN.md +0 -0
  55. {execweave-0.8.3 → execweave-0.8.4}/docs/codex-hooks.zh-TW.md +0 -0
  56. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.de.md +0 -0
  57. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.fr.md +0 -0
  58. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.ja.md +0 -0
  59. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.ko.md +0 -0
  60. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.md +0 -0
  61. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.ru.md +0 -0
  62. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.zh-CN.md +0 -0
  63. {execweave-0.8.3 → execweave-0.8.4}/docs/cursor-hooks.zh-TW.md +0 -0
  64. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.de.md +0 -0
  65. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.fr.md +0 -0
  66. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.ja.md +0 -0
  67. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.ko.md +0 -0
  68. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.md +0 -0
  69. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.ru.md +0 -0
  70. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.zh-CN.md +0 -0
  71. {execweave-0.8.3 → execweave-0.8.4}/docs/evidence-grades.zh-TW.md +0 -0
  72. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.de.md +0 -0
  73. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.fr.md +0 -0
  74. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.ja.md +0 -0
  75. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.ko.md +0 -0
  76. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.md +0 -0
  77. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.ru.md +0 -0
  78. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.zh-CN.md +0 -0
  79. {execweave-0.8.3 → execweave-0.8.4}/docs/gemini-hooks.zh-TW.md +0 -0
  80. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.de.md +0 -0
  81. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.fr.md +0 -0
  82. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.ja.md +0 -0
  83. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.ko.md +0 -0
  84. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.md +0 -0
  85. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.ru.md +0 -0
  86. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.zh-CN.md +0 -0
  87. {execweave-0.8.3 → execweave-0.8.4}/docs/inference-gateway.zh-TW.md +0 -0
  88. {execweave-0.8.3 → execweave-0.8.4}/docs/internal/provider-capability-matrix.md +0 -0
  89. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.de.md +0 -0
  90. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.fr.md +0 -0
  91. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.ja.md +0 -0
  92. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.ko.md +0 -0
  93. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.md +0 -0
  94. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.ru.md +0 -0
  95. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.zh-CN.md +0 -0
  96. {execweave-0.8.3 → execweave-0.8.4}/docs/live-graph.zh-TW.md +0 -0
  97. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.de.md +0 -0
  98. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.fr.md +0 -0
  99. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.ja.md +0 -0
  100. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.ko.md +0 -0
  101. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.md +0 -0
  102. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.ru.md +0 -0
  103. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.zh-CN.md +0 -0
  104. {execweave-0.8.3 → execweave-0.8.4}/docs/model-runtime.zh-TW.md +0 -0
  105. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.de.md +0 -0
  106. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.fr.md +0 -0
  107. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.ja.md +0 -0
  108. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.ko.md +0 -0
  109. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.md +0 -0
  110. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.ru.md +0 -0
  111. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.zh-CN.md +0 -0
  112. {execweave-0.8.3 → execweave-0.8.4}/docs/opencode-plugin.zh-TW.md +0 -0
  113. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.de.md +0 -0
  114. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.fr.md +0 -0
  115. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.ja.md +0 -0
  116. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.ko.md +0 -0
  117. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.md +0 -0
  118. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.ru.md +0 -0
  119. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.zh-CN.md +0 -0
  120. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-1-runtime-collection.zh-TW.md +0 -0
  121. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.de.md +0 -0
  122. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.fr.md +0 -0
  123. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.ja.md +0 -0
  124. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.ko.md +0 -0
  125. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.md +0 -0
  126. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.ru.md +0 -0
  127. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.zh-CN.md +0 -0
  128. {execweave-0.8.3 → execweave-0.8.4}/docs/phase-2-execution-graph.zh-TW.md +0 -0
  129. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.de.md +0 -0
  130. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.fr.md +0 -0
  131. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.ja.md +0 -0
  132. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.ko.md +0 -0
  133. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.md +0 -0
  134. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.ru.md +0 -0
  135. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.zh-CN.md +0 -0
  136. {execweave-0.8.3 → execweave-0.8.4}/docs/rule-packs.zh-TW.md +0 -0
  137. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.de.md +0 -0
  138. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.fr.md +0 -0
  139. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.ja.md +0 -0
  140. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.ko.md +0 -0
  141. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.md +0 -0
  142. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.ru.md +0 -0
  143. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.zh-CN.md +0 -0
  144. {execweave-0.8.3 → execweave-0.8.4}/docs/run-integrity.zh-TW.md +0 -0
  145. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.de.md +0 -0
  146. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.fr.md +0 -0
  147. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.ja.md +0 -0
  148. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.ko.md +0 -0
  149. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.md +0 -0
  150. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.ru.md +0 -0
  151. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.zh-CN.md +0 -0
  152. {execweave-0.8.3 → execweave-0.8.4}/docs/runtime-threat-model.zh-TW.md +0 -0
  153. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.de.md +0 -0
  154. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.fr.md +0 -0
  155. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.ja.md +0 -0
  156. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.ko.md +0 -0
  157. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.md +0 -0
  158. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.ru.md +0 -0
  159. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.zh-CN.md +0 -0
  160. {execweave-0.8.3 → execweave-0.8.4}/docs/security-analysis.zh-TW.md +0 -0
  161. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.de.md +0 -0
  162. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.fr.md +0 -0
  163. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.ja.md +0 -0
  164. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.ko.md +0 -0
  165. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.md +0 -0
  166. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.ru.md +0 -0
  167. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.zh-CN.md +0 -0
  168. {execweave-0.8.3 → execweave-0.8.4}/docs/semantic-telemetry.zh-TW.md +0 -0
  169. {execweave-0.8.3 → execweave-0.8.4}/docs/v0.6.5-hardening-decisions.md +0 -0
  170. {execweave-0.8.3 → execweave-0.8.4}/docs/v0.8.3-graph-ergonomics.md +0 -0
  171. {execweave-0.8.3 → execweave-0.8.4}/scripts/audit_i18n_parity.py +0 -0
  172. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_claude_hook.py +0 -0
  173. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_claude_record_graph.py +0 -0
  174. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_codex_hook.py +0 -0
  175. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_conversation_records.py +0 -0
  176. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_correlation_graph.py +0 -0
  177. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_inference_gateway_cli.py +0 -0
  178. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_model_runtime_cli.py +0 -0
  179. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_openai_compatible_cli.py +0 -0
  180. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_release_stage_integrity.py +0 -0
  181. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_semantic_graph.py +0 -0
  182. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_viewer_js.py +0 -0
  183. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_wheel_install.py +0 -0
  184. {execweave-0.8.3 → execweave-0.8.4}/scripts/check_windows_launchers.py +0 -0
  185. {execweave-0.8.3 → execweave-0.8.4}/scripts/emit_claude_hook_smoke.py +0 -0
  186. {execweave-0.8.3 → execweave-0.8.4}/scripts/emit_codex_hook_smoke.py +0 -0
  187. {execweave-0.8.3 → execweave-0.8.4}/scripts/emit_cursor_hook_smoke.py +0 -0
  188. {execweave-0.8.3 → execweave-0.8.4}/scripts/emit_gemini_hook_smoke.py +0 -0
  189. {execweave-0.8.3 → execweave-0.8.4}/scripts/emit_opencode_plugin_smoke.py +0 -0
  190. {execweave-0.8.3 → execweave-0.8.4}/scripts/make_semantic_smoke.py +0 -0
  191. {execweave-0.8.3 → execweave-0.8.4}/scripts/probe_provider_capability.py +0 -0
  192. {execweave-0.8.3 → execweave-0.8.4}/scripts/sync_i18n_nav.py +0 -0
  193. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/__main__.py +0 -0
  194. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/_conversation_records_core.py +0 -0
  195. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/agent_bootstrap.py +0 -0
  196. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/agent_topology.py +0 -0
  197. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/agent_trace.py +0 -0
  198. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/analysis.py +0 -0
  199. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/anthropic.py +0 -0
  200. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/anthropic_cli.py +0 -0
  201. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/anthropic_full_fidelity.py +0 -0
  202. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_adapter.py +0 -0
  203. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_adapter_base.py +0 -0
  204. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_full_fidelity_base.py +0 -0
  205. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_full_fidelity_collaboration_base.py +0 -0
  206. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_hook_cli.py +0 -0
  207. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_record.py +0 -0
  208. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_subagent_linkage.py +0 -0
  209. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/antigravity_trace_capability.py +0 -0
  210. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/auto_specialized.py +0 -0
  211. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/backends.py +0 -0
  212. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/benchmark.py +0 -0
  213. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_adapter.py +0 -0
  214. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_delegation.py +0 -0
  215. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_full_fidelity.py +0 -0
  216. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_hook_cli.py +0 -0
  217. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_hook_contract.py +0 -0
  218. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_model_observer.py +0 -0
  219. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/claude_record.py +0 -0
  220. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cli.py +0 -0
  221. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_adapter.py +0 -0
  222. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_conversation.py +0 -0
  223. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_full_fidelity.py +0 -0
  224. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_hook_cli.py +0 -0
  225. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_hook_lifecycle.py +0 -0
  226. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_message_diagnostics.py +0 -0
  227. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_message_transport_diagnostics.py +0 -0
  228. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_record.py +0 -0
  229. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_rollout_structures.py +0 -0
  230. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_rollout_trace.py +0 -0
  231. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/codex_rollout_trace_base.py +0 -0
  232. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/collector.py +0 -0
  233. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/command.py +0 -0
  234. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/content_evidence.py +0 -0
  235. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/content_store.py +0 -0
  236. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/conversation_archive.py +0 -0
  237. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/conversation_message_identity.py +0 -0
  238. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/conversation_preview.py +0 -0
  239. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/conversation_records.py +0 -0
  240. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/correlation.py +0 -0
  241. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_adapter.py +0 -0
  242. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_delegation.py +0 -0
  243. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_delegation_base.py +0 -0
  244. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_full_fidelity.py +0 -0
  245. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_hook_cli.py +0 -0
  246. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_hook_contract.py +0 -0
  247. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/cursor_record.py +0 -0
  248. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/entry.py +0 -0
  249. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/evidence_availability.py +0 -0
  250. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/evidence_grade.py +0 -0
  251. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/fidelity.py +0 -0
  252. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/filesystem.py +0 -0
  253. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/focus.py +0 -0
  254. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/gemini_adapter.py +0 -0
  255. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/gemini_full_fidelity.py +0 -0
  256. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/gemini_hook_cli.py +0 -0
  257. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/gemini_hook_contract.py +0 -0
  258. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/gemini_record.py +0 -0
  259. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/graph.py +0 -0
  260. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/graph_ops.py +0 -0
  261. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/http_proxy.py +0 -0
  262. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/http_proxy_cli.py +0 -0
  263. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/inference_gateway.py +0 -0
  264. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/inference_gateway_cli.py +0 -0
  265. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/inference_gateway_full_fidelity.py +0 -0
  266. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/inference_identity.py +0 -0
  267. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/inference_identity_cli.py +0 -0
  268. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/integrity.py +0 -0
  269. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/integrity_cli.py +0 -0
  270. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/litellm_callback.py +0 -0
  271. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/litellm_callback_cli.py +0 -0
  272. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live.py +0 -0
  273. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_core.py +0 -0
  274. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view.py +0 -0
  275. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_extra_style.py +0 -0
  276. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_markup.py +0 -0
  277. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_readability.py +0 -0
  278. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_script_a.py +0 -0
  279. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_script_b.py +0 -0
  280. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_script_c.py +0 -0
  281. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_script_d.py +0 -0
  282. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/live_view_style.py +0 -0
  283. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/model_runtime.py +0 -0
  284. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/model_runtime_cli.py +0 -0
  285. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/model_runtime_full_fidelity.py +0 -0
  286. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/openai_compatible.py +0 -0
  287. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/openai_compatible_cli.py +0 -0
  288. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/openai_compatible_full_fidelity.py +0 -0
  289. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_adapter.py +0 -0
  290. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_event_contract.py +0 -0
  291. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_full_fidelity.py +0 -0
  292. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_hook_cli.py +0 -0
  293. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_plugin_cli.py +0 -0
  294. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_record.py +0 -0
  295. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/opencode_task_linkage.py +0 -0
  296. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/overhead_benchmark.py +0 -0
  297. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/provider_capability.py +0 -0
  298. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/provider_lifecycle.py +0 -0
  299. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/provider_record.py +0 -0
  300. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/rule_pack.py +0 -0
  301. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/rule_pack_cli.py +0 -0
  302. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/scalability_benchmark.py +0 -0
  303. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/schema.py +0 -0
  304. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/scope.py +0 -0
  305. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/semantic.py +0 -0
  306. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/sink.py +0 -0
  307. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/strace_backend.py +0 -0
  308. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/stream_assembly.py +0 -0
  309. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/theme.py +0 -0
  310. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/top.py +0 -0
  311. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/top_cli.py +0 -0
  312. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/validate.py +0 -0
  313. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/view_cli.py +0 -0
  314. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer.py +0 -0
  315. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_content_inspector.py +0 -0
  316. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_dashboard_clean.py +0 -0
  317. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_dashboard_hardening.py +0 -0
  318. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_dashboard_hardening_v2.py +0 -0
  319. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_live_layout.py +0 -0
  320. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_projection.py +0 -0
  321. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/viewer_projection_base.py +0 -0
  322. {execweave-0.8.3 → execweave-0.8.4}/src/execweave/workflow.py +0 -0
  323. {execweave-0.8.3 → execweave-0.8.4}/tests/dashboard_readability_fixture.py +0 -0
  324. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/codex_multi_agent/PROVENANCE.md +0 -0
  325. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/codex_multi_agent/hook-payloads.json +0 -0
  326. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/codex_multi_agent/rollout-main.jsonl +0 -0
  327. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/README.md +0 -0
  328. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/claude.json +0 -0
  329. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/codex.json +0 -0
  330. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/cursor.json +0 -0
  331. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/gemini.json +0 -0
  332. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/manifest.json +0 -0
  333. {execweave-0.8.3 → execweave-0.8.4}/tests/fixtures/hooks/opencode.json +0 -0
  334. {execweave-0.8.3 → execweave-0.8.4}/tests/multi_agent_run_fixture.py +0 -0
  335. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_bootstrap.py +0 -0
  336. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_message_viewer.py +0 -0
  337. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_node_labels.py +0 -0
  338. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_said_panel.py +0 -0
  339. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_topology_evidence.py +0 -0
  340. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_trace_lifecycle.py +0 -0
  341. {execweave-0.8.3 → execweave-0.8.4}/tests/test_agent_trace_viewer_visibility.py +0 -0
  342. {execweave-0.8.3 → execweave-0.8.4}/tests/test_analysis.py +0 -0
  343. {execweave-0.8.3 → execweave-0.8.4}/tests/test_anthropic.py +0 -0
  344. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_agent_collaboration.py +0 -0
  345. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_cursor_launch.py +0 -0
  346. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_history_replay.py +0 -0
  347. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_identity_topology.py +0 -0
  348. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_lifecycle.py +0 -0
  349. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_linkage_projection.py +0 -0
  350. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_official_contract.py +0 -0
  351. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_subagent_transcript_linkage.py +0 -0
  352. {execweave-0.8.3 → execweave-0.8.4}/tests/test_antigravity_trace_capability_cli.py +0 -0
  353. {execweave-0.8.3 → execweave-0.8.4}/tests/test_auto_specialized.py +0 -0
  354. {execweave-0.8.3 → execweave-0.8.4}/tests/test_backends.py +0 -0
  355. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_adapter.py +0 -0
  356. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_delegation.py +0 -0
  357. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_full_fidelity.py +0 -0
  358. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_hook_contract.py +0 -0
  359. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_hook_metadata.py +0 -0
  360. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_hook_viewer.py +0 -0
  361. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_model_observer.py +0 -0
  362. {execweave-0.8.3 → execweave-0.8.4}/tests/test_claude_record.py +0 -0
  363. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_adapter.py +0 -0
  364. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_archive_full_fidelity.py +0 -0
  365. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_conversation_isolation.py +0 -0
  366. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_full_fidelity.py +0 -0
  367. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_hook_lifecycle.py +0 -0
  368. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_hook_partial_capture.py +0 -0
  369. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_message_diagnostics.py +0 -0
  370. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_message_transport_diagnostics.py +0 -0
  371. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_plain_routed_agent_message.py +0 -0
  372. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_real_multi_agent_conversation.py +0 -0
  373. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_record.py +0 -0
  374. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_reducer_command.py +0 -0
  375. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_rollout_structures.py +0 -0
  376. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_rollout_trace.py +0 -0
  377. {execweave-0.8.3 → execweave-0.8.4}/tests/test_codex_routing_native_identity.py +0 -0
  378. {execweave-0.8.3 → execweave-0.8.4}/tests/test_collector.py +0 -0
  379. {execweave-0.8.3 → execweave-0.8.4}/tests/test_command.py +0 -0
  380. {execweave-0.8.3 → execweave-0.8.4}/tests/test_condense.py +0 -0
  381. {execweave-0.8.3 → execweave-0.8.4}/tests/test_conversation_access.py +0 -0
  382. {execweave-0.8.3 → execweave-0.8.4}/tests/test_conversation_agent_focus.py +0 -0
  383. {execweave-0.8.3 → execweave-0.8.4}/tests/test_conversation_agent_isolation.py +0 -0
  384. {execweave-0.8.3 → execweave-0.8.4}/tests/test_conversation_identity_merge.py +0 -0
  385. {execweave-0.8.3 → execweave-0.8.4}/tests/test_conversation_message_observation_dedupe.py +0 -0
  386. {execweave-0.8.3 → execweave-0.8.4}/tests/test_conversation_provider_parity.py +0 -0
  387. {execweave-0.8.3 → execweave-0.8.4}/tests/test_correlation.py +0 -0
  388. {execweave-0.8.3 → execweave-0.8.4}/tests/test_correlation_canonical_path.py +0 -0
  389. {execweave-0.8.3 → execweave-0.8.4}/tests/test_correlation_checker.py +0 -0
  390. {execweave-0.8.3 → execweave-0.8.4}/tests/test_correlation_process_exe.py +0 -0
  391. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cross_provider_agent_trace.py +0 -0
  392. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_adapter.py +0 -0
  393. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_delegation.py +0 -0
  394. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_full_fidelity.py +0 -0
  395. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_hook_contract.py +0 -0
  396. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_hook_fail_open.py +0 -0
  397. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_record.py +0 -0
  398. {execweave-0.8.3 → execweave-0.8.4}/tests/test_cursor_task_linkage.py +0 -0
  399. {execweave-0.8.3 → execweave-0.8.4}/tests/test_dashboard_information_architecture.py +0 -0
  400. {execweave-0.8.3 → execweave-0.8.4}/tests/test_dashboard_readability_e2e.py +0 -0
  401. {execweave-0.8.3 → execweave-0.8.4}/tests/test_dashboard_round_fold_state_e2e.py +0 -0
  402. {execweave-0.8.3 → execweave-0.8.4}/tests/test_dashboard_simplification.py +0 -0
  403. {execweave-0.8.3 → execweave-0.8.4}/tests/test_dashboard_ux_and_hook_projection.py +0 -0
  404. {execweave-0.8.3 → execweave-0.8.4}/tests/test_delegation_viewer.py +0 -0
  405. {execweave-0.8.3 → execweave-0.8.4}/tests/test_evidence_grade.py +0 -0
  406. {execweave-0.8.3 → execweave-0.8.4}/tests/test_execution_viewer.py +0 -0
  407. {execweave-0.8.3 → execweave-0.8.4}/tests/test_fidelity.py +0 -0
  408. {execweave-0.8.3 → execweave-0.8.4}/tests/test_filesystem_resilience.py +0 -0
  409. {execweave-0.8.3 → execweave-0.8.4}/tests/test_focus.py +0 -0
  410. {execweave-0.8.3 → execweave-0.8.4}/tests/test_fold_budget_setting.py +0 -0
  411. {execweave-0.8.3 → execweave-0.8.4}/tests/test_full_fidelity.py +0 -0
  412. {execweave-0.8.3 → execweave-0.8.4}/tests/test_gemini_adapter.py +0 -0
  413. {execweave-0.8.3 → execweave-0.8.4}/tests/test_gemini_full_fidelity.py +0 -0
  414. {execweave-0.8.3 → execweave-0.8.4}/tests/test_gemini_hook_contract.py +0 -0
  415. {execweave-0.8.3 → execweave-0.8.4}/tests/test_gemini_lifecycle.py +0 -0
  416. {execweave-0.8.3 → execweave-0.8.4}/tests/test_gemini_record.py +0 -0
  417. {execweave-0.8.3 → execweave-0.8.4}/tests/test_graph.py +0 -0
  418. {execweave-0.8.3 → execweave-0.8.4}/tests/test_graph_clear_focus_e2e.py +0 -0
  419. {execweave-0.8.3 → execweave-0.8.4}/tests/test_graph_edge_routing_e2e.py +0 -0
  420. {execweave-0.8.3 → execweave-0.8.4}/tests/test_graph_lane_separation_e2e.py +0 -0
  421. {execweave-0.8.3 → execweave-0.8.4}/tests/test_graph_node_sizing_e2e.py +0 -0
  422. {execweave-0.8.3 → execweave-0.8.4}/tests/test_graph_ops.py +0 -0
  423. {execweave-0.8.3 → execweave-0.8.4}/tests/test_hook_fixture_corpus.py +0 -0
  424. {execweave-0.8.3 → execweave-0.8.4}/tests/test_http_proxy.py +0 -0
  425. {execweave-0.8.3 → execweave-0.8.4}/tests/test_inference_endpoint_identity.py +0 -0
  426. {execweave-0.8.3 → execweave-0.8.4}/tests/test_inference_gateway.py +0 -0
  427. {execweave-0.8.3 → execweave-0.8.4}/tests/test_inference_gateway_full_fidelity.py +0 -0
  428. {execweave-0.8.3 → execweave-0.8.4}/tests/test_inference_identity.py +0 -0
  429. {execweave-0.8.3 → execweave-0.8.4}/tests/test_integrity.py +0 -0
  430. {execweave-0.8.3 → execweave-0.8.4}/tests/test_litellm_callback.py +0 -0
  431. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live.py +0 -0
  432. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live_auth.py +0 -0
  433. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live_dashboard.py +0 -0
  434. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live_dashboard_js.py +0 -0
  435. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live_delta.py +0 -0
  436. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live_logs_export.py +0 -0
  437. {execweave-0.8.3 → execweave-0.8.4}/tests/test_live_theme.py +0 -0
  438. {execweave-0.8.3 → execweave-0.8.4}/tests/test_lmstudio_auto_specialized.py +0 -0
  439. {execweave-0.8.3 → execweave-0.8.4}/tests/test_local_runtime_live_capture.py +0 -0
  440. {execweave-0.8.3 → execweave-0.8.4}/tests/test_model_runtime.py +0 -0
  441. {execweave-0.8.3 → execweave-0.8.4}/tests/test_model_runtime_full_fidelity.py +0 -0
  442. {execweave-0.8.3 → execweave-0.8.4}/tests/test_openai_compatible.py +0 -0
  443. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_adapter.py +0 -0
  444. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_event_contract.py +0 -0
  445. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_event_lifecycle.py +0 -0
  446. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_full_fidelity.py +0 -0
  447. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_identity_unification.py +0 -0
  448. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_plugin.py +0 -0
  449. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_record.py +0 -0
  450. {execweave-0.8.3 → execweave-0.8.4}/tests/test_opencode_task_session_linkage.py +0 -0
  451. {execweave-0.8.3 → execweave-0.8.4}/tests/test_overhead_benchmark.py +0 -0
  452. {execweave-0.8.3 → execweave-0.8.4}/tests/test_per_agent_conversation_default.py +0 -0
  453. {execweave-0.8.3 → execweave-0.8.4}/tests/test_pr25_premerge_hardening_contract.py +0 -0
  454. {execweave-0.8.3 → execweave-0.8.4}/tests/test_pr25_premerge_hardening_e2e.py +0 -0
  455. {execweave-0.8.3 → execweave-0.8.4}/tests/test_provider_capability.py +0 -0
  456. {execweave-0.8.3 → execweave-0.8.4}/tests/test_provider_conversation_evidence.py +0 -0
  457. {execweave-0.8.3 → execweave-0.8.4}/tests/test_provider_lifecycle.py +0 -0
  458. {execweave-0.8.3 → execweave-0.8.4}/tests/test_release_stage_integrity_version_guard.py +0 -0
  459. {execweave-0.8.3 → execweave-0.8.4}/tests/test_rule_pack.py +0 -0
  460. {execweave-0.8.3 → execweave-0.8.4}/tests/test_schema.py +0 -0
  461. {execweave-0.8.3 → execweave-0.8.4}/tests/test_scope.py +0 -0
  462. {execweave-0.8.3 → execweave-0.8.4}/tests/test_semantic.py +0 -0
  463. {execweave-0.8.3 → execweave-0.8.4}/tests/test_shared_injected_context_scope.py +0 -0
  464. {execweave-0.8.3 → execweave-0.8.4}/tests/test_strace_backend.py +0 -0
  465. {execweave-0.8.3 → execweave-0.8.4}/tests/test_stream_assembly.py +0 -0
  466. {execweave-0.8.3 → execweave-0.8.4}/tests/test_threat_model.py +0 -0
  467. {execweave-0.8.3 → execweave-0.8.4}/tests/test_tool_traffic_e2e.py +0 -0
  468. {execweave-0.8.3 → execweave-0.8.4}/tests/test_top_detached.py +0 -0
  469. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v063_features.py +0 -0
  470. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v064_live_auto_integrations.py +0 -0
  471. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v064_live_evidence.py +0 -0
  472. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v079_review_e2e.py +0 -0
  473. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v079_review_regressions.py +0 -0
  474. {execweave-0.8.3 → execweave-0.8.4}/tests/test_v083_release_gate_p2.py +0 -0
  475. {execweave-0.8.3 → execweave-0.8.4}/tests/test_validate.py +0 -0
  476. {execweave-0.8.3 → execweave-0.8.4}/tests/test_version.py +0 -0
  477. {execweave-0.8.3 → execweave-0.8.4}/tests/test_viewer.py +0 -0
  478. {execweave-0.8.3 → execweave-0.8.4}/tests/test_viewer_agent_isolation_e2e.py +0 -0
  479. {execweave-0.8.3 → execweave-0.8.4}/tests/test_viewer_content_inspector.py +0 -0
  480. {execweave-0.8.3 → execweave-0.8.4}/tests/test_viewer_projection.py +0 -0
  481. {execweave-0.8.3 → execweave-0.8.4}/tests/test_workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: execweave
3
- Version: 0.8.3
3
+ Version: 0.8.4
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
@@ -83,7 +83,7 @@ ExecWeave is a source-available, local-first observability project that turns AI
83
83
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
84
84
  </p>
85
85
 
86
- This README documents **v0.8.3**.
86
+ This README documents **v0.8.4**.
87
87
 
88
88
  ## Why ExecWeave
89
89
 
@@ -30,7 +30,7 @@ ExecWeave ist ein source-available, local-first Observability-Projekt, das Aktiv
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- Dieses README dokumentiert **v0.8.3**.
33
+ Dieses README dokumentiert **v0.8.4**.
34
34
 
35
35
  ## Warum ExecWeave
36
36
 
@@ -30,7 +30,7 @@ ExecWeave est un projet d’observabilité source-available et local-first qui t
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- Ce README décrit **v0.8.3**.
33
+ Ce README décrit **v0.8.4**.
34
34
 
35
35
  ## Pourquoi ExecWeave
36
36
 
@@ -30,7 +30,7 @@ ExecWeave は source-available / local-first の observability プロジェク
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- この README は **v0.8.3** を説明します。
33
+ この README は **v0.8.4** を説明します。
34
34
 
35
35
  ## ExecWeave を使う理由
36
36
 
@@ -30,7 +30,7 @@ ExecWeave는 source-available, local-first observability 프로젝트입니다.
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- 이 README는 **v0.8.3**을 설명합니다.
33
+ 이 README는 **v0.8.4**을 설명합니다.
34
34
 
35
35
  ## 왜 ExecWeave인가
36
36
 
@@ -30,7 +30,7 @@ ExecWeave is a source-available, local-first observability project that turns AI
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- This README documents **v0.8.3**.
33
+ This README documents **v0.8.4**.
34
34
 
35
35
  ## Why ExecWeave
36
36
 
@@ -30,7 +30,7 @@ ExecWeave — source-available, local-first проект наблюдаемос
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- Этот README описывает **v0.8.3**.
33
+ Этот README описывает **v0.8.4**.
34
34
 
35
35
  ## Почему ExecWeave
36
36
 
@@ -30,7 +30,7 @@ ExecWeave 是一个 source-available、local-first 的可观测性项目,把 A
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- 本 README 对应 **v0.8.3**。
33
+ 本 README 对应 **v0.8.4**。
34
34
 
35
35
  ## 为什么是 ExecWeave
36
36
 
@@ -30,7 +30,7 @@ ExecWeave 是一個 source-available、local-first 的可觀測性專案,會
30
30
  <img src="docs/assets/codex.gif" alt="ExecWeave animated live demo" width="100%">
31
31
  </p>
32
32
 
33
- 本 README 對應 **v0.8.3**。
33
+ 本 README 對應 **v0.8.4**。
34
34
 
35
35
  ## 為什麼是 ExecWeave
36
36
 
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "execweave"
7
- # ExecWeave v0.8.3 release metadata
8
- version = "0.8.3"
7
+ # ExecWeave v0.8.4 release metadata
8
+ version = "0.8.4"
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.3"
3
+ __version__ = "0.8.4"
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  from typing import Any
4
4
 
5
5
  from . import antigravity_full_fidelity_collaboration_base as _base
6
+ from .agent_topology import EVIDENCE_VALIDATED_CHILD_TRANSCRIPT, subagent_topology
6
7
  from .antigravity_subagent_linkage import validated_subagent_links
7
8
  from .content_evidence import content_observation_event
8
9
  from .content_store import FullFidelityContentStore
@@ -51,18 +52,23 @@ def _assignment_event(
51
52
  "identity_semantics": "provider_invoke_subagent_spec_index",
52
53
  },
53
54
  )
55
+ child_label = role or type_name or "Antigravity subagent"
54
56
  child = _entity(
55
57
  "agent",
56
58
  f"agent:antigravity:conversation:{child_id}",
57
- name=role or type_name or "Antigravity subagent",
59
+ name=child_label,
58
60
  attributes={
59
61
  "provider": "antigravity",
60
62
  "conversation_id": child_id,
61
- "agent_path": f"/root/{child_id}",
62
- "agent_type": role or type_name or "Antigravity subagent",
63
+ "agent_type": child_label,
64
+ "agent_nickname": role or type_name,
63
65
  "identity_semantics": "provider_transcript_result_conversation_id",
64
66
  "execution_observed": False,
65
67
  "lifecycle_authority": "child_provider_hooks",
68
+ **subagent_topology(
69
+ evidence=EVIDENCE_VALIDATED_CHILD_TRANSCRIPT,
70
+ parent_scope_id=conversation_id,
71
+ ),
66
72
  },
67
73
  )
68
74
  return {
@@ -9,39 +9,17 @@ from .viewer_dashboard_clean import fold_budget_bootstrap, inject_live_dashboard
9
9
  from .viewer_dashboard_focus import inject_live_dashboard_focus
10
10
  from .viewer_live_layout import inject_live_dashboard_layout
11
11
 
12
- _AGENT_PANEL_TOPOLOGY_OLD = (
13
- "const path=nodePath(node),preview=recordFor(node)?.conversation_preview||{},"
14
- "messages=Array.isArray(preview.messages)?preview.messages:[];\n"
15
- " const isRoot=path==='/root'||attrs(node).agent_role==='root'||"
16
- "attrs(node).root_agent_path==='/root';"
17
- )
18
- _AGENT_PANEL_TOPOLOGY_NEW = (
19
- "const preview=recordFor(node)?.conversation_preview||{},"
20
- "previewPath=String(preview.agent_path||'').trim();\n"
21
- " const path=previewPath||nodePath(node),"
22
- "messages=Array.isArray(preview.messages)?preview.messages:[];\n"
23
- " const isRoot=preview.is_root===true||path==='/root'||"
24
- "attrs(node).agent_role==='root'||attrs(node).root_agent_path==='/root';"
25
- )
26
-
27
12
 
28
13
  def _align_agent_panel_topology(html: str) -> str:
29
- """Render conversation topology without upgrading graph provenance.
14
+ """Keep the agent panel's identity/topology authority intact.
30
15
 
31
- A transcript can conservatively resolve to the observed run root because no
32
- positive parent evidence exists. That derived presentation fact belongs to the
33
- conversation preview; copying it back onto the graph would incorrectly turn it
34
- into provider evidence. The panel therefore consumes the preview's resolved path
35
- and root flag when choosing its round renderer while leaving graph attributes
36
- untouched.
16
+ The panel owns the provider-neutral rule: exact conversation identity selects
17
+ content, while only explicit/root-provenance evidence selects the root renderer.
18
+ Rewriting that code here used to promote every derived ``/root`` preview back into
19
+ a canonical root and reintroduced cross-conversation aggregation. The shared shell
20
+ therefore no longer carries a second topology policy.
37
21
  """
38
- if _AGENT_PANEL_TOPOLOGY_OLD not in html:
39
- raise RuntimeError("agent panel topology seam changed")
40
- return html.replace(
41
- _AGENT_PANEL_TOPOLOGY_OLD,
42
- _AGENT_PANEL_TOPOLOGY_NEW,
43
- 1,
44
- )
22
+ return html
45
23
 
46
24
 
47
25
  def _build_dashboard_html() -> str:
@@ -29,16 +29,23 @@ if(!details||!detailsEmpty)return;
29
29
  let entries=Array.isArray(window.__execweaveStaticConversations)?window.__execweaveStaticConversations:[];
30
30
  let selectedNode=null,refreshing=false,selectedConversationSignature='';
31
31
  const foldStateByAgent=new Map();
32
+ const ROOT_NODE_IDS=new Set(['agent:Claude Code','agent:OpenAI Codex','agent:Codex','agent:Cursor','agent:OpenCode','agent:Gemini CLI','agent:Antigravity']);
32
33
  const ENCRYPTED_NOTICE='Observed — plaintext not exposed by provider.';
33
34
  const attrs=node=>node&&typeof node.attributes==='object'&&node.attributes?node.attributes:{};
34
35
  const nodePath=node=>String(attrs(node).agent_path||attrs(node).child_agent_path||attrs(node).root_agent_path||node?.name||'').trim();
35
- const agentKey=node=>nodePath(node)||String(node?.id||'');
36
+ const agentKey=node=>String(node?.id||'')||nodePath(node);
36
37
  const messageText=message=>typeof message?.text==='string'?message.text.trim():'';
37
38
  const isEncrypted=message=>String(message?.content_state||'')==='provider_encrypted';
38
39
  const isObserved=message=>!!message&&(isEncrypted(message)||!!messageText(message));
39
40
  const displayText=message=>isEncrypted(message)?ENCRYPTED_NOTICE:messageText(message);
40
41
  const isInjected=message=>String(message?.content_role||'')==='shared_injected_context';
41
42
  const own=(message,path)=>!message?.sender||String(message.sender)===path;
43
+ const previewHasRootAuthority=preview=>!!preview&&preview.is_root===true&&String(preview.topology_state||'')!=='derived'&&String(preview.topology_evidence||'')!=='no_parent_evidence_observed';
44
+ const previewUsesRootRenderer=preview=>!!preview&&preview.is_root===true&&String(preview.agent_path||'')==='/root';
45
+ const nodeHasChildAuthority=node=>!!String(attrs(node).parent_agent_path||'').trim();
46
+ const legacyRootSignal=(node,path)=>path==='/root'||attrs(node).agent_role==='root'||attrs(node).root_agent_path==='/root';
47
+ const nodeHasRootAuthority=node=>!nodeHasChildAuthority(node)&&(legacyRootSignal(node,nodePath(node))||ROOT_NODE_IDS.has(String(node?.id||'')));
48
+ const entryHasRootAuthority=entry=>ROOT_NODE_IDS.has(String(entry?.source_id||''))||previewHasRootAuthority(entry?.conversation_preview);
42
49
  function messageKey(message){return JSON.stringify([message?.timestamp??null,message?.ordinal??null,message?.sender??null,message?.recipient??null,message?.kind??null,message?.phase??null,message?.content_state??null,message?.content_role??null,messageText(message)])}
43
50
  function messageOrder(message,index){const stamp=String(message?.timestamp||''),ordinal=Number.isInteger(message?.ordinal)?message.ordinal:Number.MAX_SAFE_INTEGER;return{message,index,stamp,ordinal}}
44
51
  function aggregate(matches){
@@ -52,11 +59,30 @@ function aggregate(matches){
52
59
  return{...base,conversation_preview:{...preview,messages:ordered.map(item=>item.message)}};
53
60
  }
54
61
  function recordFor(node){
55
- const path=nodePath(node),nodeId=String(node?.id||'');
56
- return aggregate(entries.filter(entry=>String(entry?.source_id||'')===nodeId||String(entry?.conversation_preview?.agent_path||'')===path));
62
+ const nodeId=String(node?.id||'');
63
+ const exact=nodeId?entries.filter(entry=>String(entry?.source_id||'')===nodeId):[];
64
+ if(exact.length)return aggregate(exact);
65
+ const path=nodePath(node);if(!path)return null;
66
+ return aggregate(entries.filter(entry=>{
67
+ const preview=entry?.conversation_preview;
68
+ if(!preview||!(String(entry?.conversation_preview?.agent_path||'')===path))return false;
69
+ if(String(preview.topology_state||'')==='derived')return false;
70
+ if(path==='/root'&&!entryHasRootAuthority(entry))return false;
71
+ return true;
72
+ }));
73
+ }
74
+ function canonicalRootRecord(){
75
+ const roots=entries.filter(entryHasRootAuthority);
76
+ const sourceIds=[...new Set(roots.map(entry=>String(entry?.source_id||'')).filter(Boolean))];
77
+ if(sourceIds.length!==1)return null;
78
+ return aggregate(roots.filter(entry=>String(entry?.source_id||'')===sourceIds[0]));
57
79
  }
58
80
  function recordForPath(path){
59
- return aggregate(entries.filter(entry=>String(entry?.conversation_preview?.agent_path||'')===String(path)));
81
+ if(String(path)==='/root')return canonicalRootRecord();
82
+ return aggregate(entries.filter(entry=>{
83
+ const preview=entry?.conversation_preview;
84
+ return !!preview&&String(entry?.conversation_preview?.agent_path||'')===String(path)&&String(preview.topology_state||'')!=='derived';
85
+ }));
60
86
  }
61
87
  function conversationSignature(node){
62
88
  if(!node||String(node.type||'')!=='agent')return '';
@@ -81,13 +107,14 @@ function summarise(text){const line=String(text||'').split('\n').map(part=>part.
81
107
  // The root's rounds are the boundaries: a round opens on a user message and runs until
82
108
  // the next one. A subagent's round is attributed to the root round whose interval
83
109
  // contains its assignment, so the two panels fold on the same moment and can be read
84
- // side by side.
110
+ // side by side. Root boundaries come from one exact root identity, never every record
111
+ // whose presentation path happens to be /root.
85
112
  function rootPrompts(messages,path){return messages.filter(message=>isObserved(message)&&!isInjected(message)&&(String(message?.kind||'')==='user_message'||String(message?.sender||'')==='user')&&(!message?.recipient||String(message.recipient)===path))}
86
- function runRounds(){
87
- // Every record the root owns, not the first one found: an agent is archived many
88
- // times and the earliest archives carry nothing.
89
- const messages=recordForPath('/root')?.conversation_preview?.messages||[];
90
- return rootPrompts(messages,'/root').map(message=>({key:messageKey(message),start:stampOf(message),label:summarise(messageText(message))}));
113
+ function runRounds(rootRecord=null){
114
+ const record=rootRecord||recordForPath('/root'),preview=record?.conversation_preview||{};
115
+ const messages=Array.isArray(preview.messages)?preview.messages:[];
116
+ const path=String(preview.agent_path||'/root');
117
+ return rootPrompts(messages,path).map(message=>({key:messageKey(message),start:stampOf(message),label:summarise(messageText(message))}));
91
118
  }
92
119
  function roundOf(stamp,rounds){let found=null;for(const round of rounds){if(round.start&&stamp&&round.start<=stamp)found=round}return found||rounds[0]||null}
93
120
  function sameDayRun(rounds){const days=new Set(rounds.map(round=>String(round.start||'').slice(0,10)).filter(Boolean));return days.size<=1}
@@ -315,14 +342,14 @@ function render(node){
315
342
  if(!node)return false;
316
343
  if(String(node.type||'')!=='agent')return renderNode(node);
317
344
  selectedNode=node;selectedConversationSignature=conversationSignature(node);detailsEmpty.hidden=true;details.replaceChildren();
318
- const path=nodePath(node),preview=recordFor(node)?.conversation_preview||{},messages=Array.isArray(preview.messages)?preview.messages:[];
319
- const isRoot=path==='/root'||attrs(node).agent_role==='root'||attrs(node).root_agent_path==='/root';
345
+ const record=recordFor(node),preview=record?.conversation_preview||{},path=String(preview.agent_path||nodePath(node)||'').trim(),messages=Array.isArray(preview.messages)?preview.messages:[];
346
+ const isRoot=nodeHasRootAuthority(node)||previewUsesRootRenderer(preview);
320
347
  const rounds=isRoot?rootRounds(messages,path||'/root'):childRounds(messages,path);
321
348
  const tools=toolCallsFor(String(node.id||''));
322
349
  const appendTools=()=>{if(tools)details.appendChild(card('Tools',tools))};
323
350
  if(rounds.length<2){details.appendChild(roundView(rounds[0]||{cards:isRoot?[['Prompt',''],['Final response','']]:[['Task',''],['Thinking',''],['Response','']]}));appendTools();return true}
324
- // A subagent borrows the moment and the wording of the root round it belongs to, so
325
- // the folds on both panels name the same thing.
351
+ // A subagent borrows the moment and the wording of the unique canonical root round
352
+ // it belongs to. If root identity is ambiguous, the child keeps its own timestamp.
326
353
  const runs=isRoot?rounds:runRounds();
327
354
  const sameDay=sameDayRun(runs.length?runs:rounds);
328
355
  const naming=round=>isRoot?round:(roundOf(round.start,runs)||{start:round.start,label:''});
@@ -12,19 +12,25 @@ execweaveDashboardGraph=function(data){
12
12
  const attrs=node.attributes||{};
13
13
  let name=node.name;
14
14
  if(node.type==='agent'){
15
- // Topology attributes are namespaced apart: a subagent carries
16
- // child_agent_path and a root carries root_agent_path. Reading agent_path
17
- // alone finds nothing and falls through to an id fragment.
15
+ const provider=String(attrs.provider||'').toLowerCase();
18
16
  const agentPath=String(attrs.agent_path||attrs.child_agent_path||attrs.root_agent_path||'').trim();
19
17
  const agentId=String(attrs.agent_id||attrs.subagent_id||'');
18
+ const conversationId=String(attrs.conversation_id||'').trim();
20
19
  const nickname=String(attrs.agent_nickname||'').trim();
21
- if(agentPath)name=agentPath;
22
- else if(providerRootIds.has(String(node.id||'')))name='/root';
23
- else if(['default','agent','subagent'].includes(String(node.name||'').toLowerCase())){
20
+ const nativeLabel=String(nickname||attrs.agent_type||attrs.subagent_type||attrs.native_agent_name||'').trim();
21
+ const explicitChild=!!String(attrs.parent_agent_path||'').trim();
22
+ const explicitRoot=!explicitChild&&(attrs.agent_role==='root'||String(attrs.root_agent_path||'')==='/root'||providerRootIds.has(String(node.id||'')));
23
+ if(explicitRoot)name='/root';
24
+ else if(provider==='antigravity'&&nativeLabel&&!['default','agent','subagent','antigravity subagent'].includes(nativeLabel.toLowerCase()))name=nativeLabel;
25
+ else if(agentPath)name=agentPath;
26
+ else if(provider==='antigravity'&&conversationId)name=`conversation · ${conversationId.slice(0,8)}`;
27
+ else if(['default','agent','subagent','antigravity conversation'].includes(String(node.name||'').toLowerCase())){
24
28
  // Never label by a timestamp-ordered id prefix: siblings spawned in the
25
29
  // same millisecond share it and render as the same node.
26
30
  if(nickname)name=`subagent · ${nickname}`;
31
+ else if(nativeLabel)name=`subagent · ${nativeLabel}`;
27
32
  else if(agentId)name=`subagent · ${agentId.slice(0,13)}`;
33
+ else name=`agent · ${String(node.id||'').split(':').at(-1).slice(0,13)}`;
28
34
  }
29
35
  }
30
36
  const occurrenceCount=Number(attrs.viewer_occurrence_count||0);