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.
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/provider-capability-stage-integrity.yml +36 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/provider-dashboard-contract.yml +33 -0
- {execweave-0.8.8 → execweave-0.8.10}/PKG-INFO +9 -5
- {execweave-0.8.8 → execweave-0.8.10}/README.de.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/README.fr.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/README.ja.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/README.ko.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/README.md +8 -4
- {execweave-0.8.8 → execweave-0.8.10}/README.ru.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/README.zh-CN.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/README.zh-TW.md +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/pyproject.toml +2 -2
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/__init__.py +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_full_fidelity.py +79 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_subagent_linkage.py +56 -30
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/auto_specialized.py +112 -25
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/collector.py +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/command.py +47 -8
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_antigravity.py +6 -5
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/graph.py +166 -59
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live.py +80 -7
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_process_layout.py +66 -7
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_readability.py +2 -2
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_d.py +5 -5
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_style.py +1 -1
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel.py +2 -0
- execweave-0.8.10/src/execweave/viewer_projection.py +463 -0
- execweave-0.8.10/tests/test_antigravity_field_run_regressions.py +280 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_subagent_transcript_linkage.py +69 -0
- execweave-0.8.10/tests/test_cursor_ollama_session_lifecycle.py +176 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_information_architecture.py +5 -1
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph.py +70 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_edge_routing_e2e.py +11 -4
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_logs_export.py +4 -2
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_process_tree_layout.py +61 -8
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_dashboard_contract.py +131 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v069_dashboard_release.py +3 -3
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_agent_isolation_e2e.py +243 -0
- execweave-0.8.8/src/execweave/viewer_projection.py +0 -198
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/ci.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/cleanup-workflow-history.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/i18n.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/package-benchmark.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/package-smoke.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/publish.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/scalability.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/viewer-agent-isolation.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/wheel-smoke.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.github/workflows/windows-launcher.yml +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/.gitignore +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/LICENSE +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/benchmarks/phase1_overhead.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/antigravity-hooks.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/assets/codex.gif +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/benchmarks/README.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/benchmarks/v0.6.0-github-actions.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/benchmarks/v0.6.0-github-actions.svg +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/claude-code-hooks.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/codex-hooks.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/cursor-hooks.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/evidence-grades.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/inference-gateway.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/internal/provider-capability-matrix.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/live-graph.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/model-runtime.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/opencode-plugin.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-1-runtime-collection.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/phase-2-execution-graph.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/remaining-provider-audit-v0.8.7.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/rule-packs.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/run-integrity.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/runtime-threat-model.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/security-analysis.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.de.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.fr.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.ja.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.ko.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.ru.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.zh-CN.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/semantic-telemetry.zh-TW.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/v0.6.5-hardening-decisions.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/docs/v0.8.3-graph-ergonomics.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/audit_i18n_parity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_claude_hook.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_claude_record_graph.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_codex_hook.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_conversation_records.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_correlation_graph.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_inference_gateway_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_model_runtime_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_openai_compatible_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_release_stage_integrity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_semantic_graph.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_viewer_js.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_wheel_install.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/check_windows_launchers.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_claude_hook_smoke.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_codex_hook_smoke.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_cursor_hook_smoke.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/emit_opencode_plugin_smoke.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/make_semantic_smoke.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/probe_provider_capability.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/scripts/sync_i18n_nav.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/__main__.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/_conversation_records_core.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agent_bootstrap.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agent_topology.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agent_trace.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/agy_preview_sanitize.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/analysis.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/anthropic.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/anthropic_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/anthropic_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_adapter_base.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_full_fidelity_base.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_full_fidelity_collaboration_base.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_hook_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/antigravity_trace_capability.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/backends.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/benchmark.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_child_transcript.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_delegation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_hook_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_hook_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_model_observer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/claude_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_conversation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_hook_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_hook_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_message_diagnostics.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_message_transport_diagnostics.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_rollout_structures.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_rollout_trace.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/codex_rollout_trace_base.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/content_evidence.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/content_store.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_archive.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_message_identity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_antigravity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_claude.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_codex.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_common.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_generic.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_lines.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_preview_transcript.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_codex.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_common.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/conversation_records_ollama.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/correlation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_delegation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_delegation_base.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_hook_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_hook_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/cursor_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/dashboard_shell.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/entry.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/evidence_availability.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/evidence_grade.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/filesystem.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/focus.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/graph_ops.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/http_proxy.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/http_proxy_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_gateway.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_gateway_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_gateway_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_identity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/inference_identity_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/integrity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/integrity_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/litellm_callback.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/litellm_callback_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_core.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_extra_style.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_markup.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_a.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_b.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/live_view_script_c.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/model_runtime.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/model_runtime_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/model_runtime_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/openai_compatible.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/openai_compatible_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/openai_compatible_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_event_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_hook_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_plugin_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/opencode_task_linkage.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/overhead_benchmark.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/provider_capability.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/provider_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/provider_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/rule_pack.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/rule_pack_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/scalability_benchmark.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/schema.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/scope.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/semantic.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/sink.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/strace_backend.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/stream_assembly.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/theme.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/top.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/top_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/validate.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/vendor/dagre.min.js +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/view_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_antigravity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_claude.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_codex.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_cursor.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_default.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_ollama.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_opencode.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_agent_panel_registry.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_content_inspector.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_clean.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_focus.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_hardening.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_dashboard_hardening_v2.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_external_endpoints.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_limits.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_live_layout.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/viewer_projection_base.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/src/execweave/workflow.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/dashboard_readability_fixture.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/codex_multi_agent/PROVENANCE.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/codex_multi_agent/hook-payloads.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/codex_multi_agent/rollout-main.jsonl +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/README.md +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/claude.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/codex.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/cursor.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/manifest.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/fixtures/hooks/opencode.json +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/multi_agent_run_fixture.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_bootstrap.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_message_viewer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_node_labels.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_said_panel.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_topology_evidence.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_trace_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agent_trace_viewer_visibility.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_agy_windows_wire_acceptance.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_analysis.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_anthropic.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_agent_collaboration.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_child_panel_policy.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_child_transcript_tools.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_cursor_launch.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_history_replay.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_identity_topology.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_invocation_archive.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_linkage_projection.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_multi_conversation_isolation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_official_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_role_path_fallback.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_root_child_history_v2.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_antigravity_trace_capability_cli.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_auto_specialized.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_backends.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_child_transcript_tools.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_delegation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_hook_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_hook_metadata.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_hook_viewer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_model_observer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_claude_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_archive_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_child_panel_policy.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_conversation_isolation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_hook_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_hook_partial_capture.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_message_diagnostics.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_message_transport_diagnostics.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_nickname_path_fallback.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_plain_routed_agent_message.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_real_multi_agent_conversation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_reducer_command.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_rollout_structures.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_rollout_trace.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_codex_routing_native_identity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_collector.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_command.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_condense.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_access.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_agent_focus.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_agent_isolation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_identity_merge.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_message_observation_dedupe.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_provider_parity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_conversation_root_authority.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation_canonical_path.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation_checker.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_correlation_process_exe.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cross_provider_agent_trace.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_delegation.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_hook_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_hook_fail_open.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_cursor_task_linkage.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_readability_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_round_fold_state_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_simplification.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_dashboard_ux_and_hook_projection.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_delegation_viewer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_evidence_grade.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_execution_viewer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_external_endpoints_all_providers.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_filesystem_resilience.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_focus.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_fold_budget_setting.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_clear_focus_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_lane_separation_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_node_sizing_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_graph_ops.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_hook_fixture_corpus.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_http_proxy.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_endpoint_identity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_gateway.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_gateway_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_inference_identity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_integrity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_litellm_callback.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_auth.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_dashboard.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_dashboard_js.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_delta.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_live_theme.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_lmstudio_auto_specialized.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_local_runtime_live_capture.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_model_runtime.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_model_runtime_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_ollama_panel_policy.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_openai_compatible.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_adapter.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_event_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_event_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_full_fidelity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_identity_unification.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_plugin.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_record.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_opencode_task_session_linkage.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_overhead_benchmark.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_per_agent_conversation_default.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_pr25_premerge_hardening_contract.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_pr25_premerge_hardening_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_capability.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_conversation_evidence.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_conversation_history_integrity.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_provider_lifecycle.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_release_stage_integrity_version_guard.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_rule_pack.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_schema.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_scope.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_semantic.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_shared_injected_context_scope.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_strace_backend.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_stream_assembly.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_threat_model.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_tool_traffic_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_top_detached.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v063_features.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v064_live_auto_integrations.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v064_live_evidence.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v079_review_e2e.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v079_review_regressions.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_v083_release_gate_p2.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_validate.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_version.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_child_authority.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_content_inspector.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_limits.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_viewer_projection.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_windows_codex_agy_display_repair.py +0 -0
- {execweave-0.8.8 → execweave-0.8.10}/tests/test_workflow.py +0 -0
{execweave-0.8.8 → execweave-0.8.10}/.github/workflows/provider-capability-stage-integrity.yml
RENAMED
|
@@ -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.
|
|
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.
|
|
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`.
|
|
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.
|
|
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.
|
|
35
|
+
Ce README décrit **v0.8.10**.
|
|
36
36
|
|
|
37
37
|
## Pourquoi 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.
|
|
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`.
|
|
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.
|
|
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
|
-
version = "0.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"
|
|
@@ -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
|
|
308
|
+
if not candidates:
|
|
309
309
|
return []
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
319
|
+
|
|
314
320
|
links: list[dict[str, Any]] = []
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
if
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
-
|
|
388
|
-
|
|
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 =
|
|
416
|
+
results = latest[0][0]
|
|
391
417
|
if len(results) != len(specs):
|
|
392
418
|
return []
|
|
393
419
|
|