execweave 0.7.6__tar.gz → 0.7.7__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.7.6 → execweave-0.7.7}/.github/workflows/provider-capability-stage-integrity.yml +1 -0
- execweave-0.7.7/.github/workflows/viewer-agent-isolation.yml +40 -0
- {execweave-0.7.6 → execweave-0.7.7}/PKG-INFO +6 -4
- {execweave-0.7.6 → execweave-0.7.7}/README.de.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.fr.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.ja.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.ko.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.ru.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.zh-CN.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/README.zh-TW.md +3 -3
- {execweave-0.7.6 → execweave-0.7.7}/pyproject.toml +10 -2
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_release_stage_integrity.py +68 -7
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/__init__.py +1 -1
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/_conversation_records_core.py +21 -5
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live.py +38 -1
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_conversation_panel.py +4 -4
- execweave-0.7.7/tests/multi_agent_run_fixture.py +106 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_node_labels.py +25 -2
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_v069_dashboard_release.py +4 -4
- execweave-0.7.7/tests/test_viewer_agent_isolation_e2e.py +193 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/ci.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/cleanup-workflow-history.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/i18n.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/package-benchmark.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/package-smoke.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/publish.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/scalability.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/wheel-smoke.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.github/workflows/windows-launcher.yml +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/.gitignore +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/LICENSE +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/RELEASE-PLAN-0.7.5-0.8.0.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/benchmarks/phase1_overhead.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/antigravity-hooks.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/assets/codex.gif +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/benchmarks/README.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/benchmarks/v0.6.0-github-actions.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/benchmarks/v0.6.0-github-actions.svg +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/claude-code-hooks.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/codex-hooks.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/cursor-hooks.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/evidence-grades.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/gemini-hooks.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/inference-gateway.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/internal/provider-capability-matrix.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/live-graph.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/model-runtime.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/opencode-plugin.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-1-runtime-collection.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/phase-2-execution-graph.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/rule-packs.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/run-integrity.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/runtime-threat-model.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/security-analysis.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.de.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.fr.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.ja.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.ko.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.ru.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.zh-CN.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/semantic-telemetry.zh-TW.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/docs/v0.6.5-hardening-decisions.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/audit_i18n_parity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_claude_hook.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_claude_record_graph.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_codex_hook.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_conversation_records.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_correlation_graph.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_inference_gateway_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_model_runtime_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_openai_compatible_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_semantic_graph.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_viewer_js.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_wheel_install.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/check_windows_launchers.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/emit_claude_hook_smoke.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/emit_codex_hook_smoke.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/emit_cursor_hook_smoke.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/emit_gemini_hook_smoke.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/emit_opencode_plugin_smoke.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/make_semantic_smoke.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/probe_provider_capability.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/scripts/sync_i18n_nav.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/__main__.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/agent_bootstrap.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/agent_topology.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/agent_trace.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/analysis.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/anthropic.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/anthropic_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/anthropic_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_adapter_base.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_full_fidelity_base.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_full_fidelity_collaboration_base.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_hook_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_subagent_linkage.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/antigravity_trace_capability.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/auto_specialized.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/backends.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/benchmark.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_delegation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_hook_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_hook_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_model_observer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/claude_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_conversation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_hook_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_hook_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_message_diagnostics.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_message_transport_diagnostics.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_rollout_structures.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_rollout_trace.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/codex_rollout_trace_base.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/collector.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/command.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/content_evidence.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/content_store.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/conversation_archive.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/conversation_message_identity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/conversation_preview.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/conversation_records.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/correlation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_delegation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_delegation_base.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_hook_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_hook_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/cursor_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/entry.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/evidence_availability.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/evidence_grade.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/filesystem.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/focus.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/gemini_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/gemini_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/gemini_hook_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/gemini_hook_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/gemini_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/graph.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/graph_ops.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/http_proxy.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/http_proxy_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/inference_gateway.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/inference_gateway_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/inference_gateway_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/inference_identity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/inference_identity_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/integrity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/integrity_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/litellm_callback.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/litellm_callback_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_core.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_extra_style.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_markup.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_script_a.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_script_b.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_script_c.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_script_d.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/live_view_style.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/model_runtime.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/model_runtime_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/model_runtime_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/openai_compatible.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/openai_compatible_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/openai_compatible_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_event_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_hook_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_plugin_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/opencode_task_linkage.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/overhead_benchmark.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/provider_capability.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/provider_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/provider_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/rule_pack.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/rule_pack_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/scalability_benchmark.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/schema.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/scope.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/semantic.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/sink.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/strace_backend.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/stream_assembly.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/theme.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/top.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/top_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/validate.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/view_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_antigravity_linkage_inspector.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_content_inspector.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_conversation_tree.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_dashboard_clean.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_dashboard_focus.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_execution_inspector.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_live_layout.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_projection.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/viewer_projection_base.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/src/execweave/workflow.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/codex_multi_agent/PROVENANCE.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/codex_multi_agent/hook-payloads.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/codex_multi_agent/rollout-main.jsonl +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/README.md +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/claude.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/codex.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/cursor.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/gemini.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/manifest.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/fixtures/hooks/opencode.json +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_bootstrap.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_message_viewer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_said_panel.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_topology_evidence.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_trace_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_agent_trace_viewer_visibility.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_analysis.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_anthropic.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_agent_collaboration.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_cursor_launch.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_linkage_projection.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_official_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_subagent_transcript_linkage.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_antigravity_trace_capability_cli.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_auto_specialized.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_backends.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_delegation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_hook_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_hook_metadata.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_hook_viewer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_model_observer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_claude_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_archive_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_conversation_isolation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_hook_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_hook_partial_capture.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_message_diagnostics.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_message_transport_diagnostics.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_real_multi_agent_conversation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_reducer_command.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_rollout_structures.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_rollout_trace.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_codex_routing_native_identity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_collector.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_command.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_condense.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_conversation_access.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_conversation_agent_focus.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_conversation_agent_isolation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_conversation_identity_merge.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_conversation_message_observation_dedupe.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_conversation_provider_parity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_correlation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_correlation_canonical_path.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_correlation_checker.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_correlation_process_exe.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cross_provider_agent_trace.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_delegation.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_hook_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_hook_fail_open.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_cursor_task_linkage.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_dashboard_information_architecture.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_dashboard_simplification.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_dashboard_ux_and_hook_projection.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_delegation_viewer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_evidence_grade.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_execution_viewer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_filesystem_resilience.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_focus.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_gemini_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_gemini_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_gemini_hook_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_gemini_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_gemini_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_graph.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_graph_ops.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_hook_fixture_corpus.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_http_proxy.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_inference_gateway.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_inference_gateway_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_inference_identity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_integrity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_litellm_callback.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live_auth.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live_dashboard.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live_dashboard_js.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live_delta.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live_logs_export.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_live_theme.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_lmstudio_auto_specialized.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_local_runtime_live_capture.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_model_runtime.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_model_runtime_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_openai_compatible.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_adapter.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_event_contract.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_event_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_full_fidelity.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_plugin.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_record.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_opencode_task_session_linkage.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_overhead_benchmark.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_per_agent_conversation_default.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_provider_capability.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_provider_conversation_evidence.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_provider_lifecycle.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_rule_pack.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_schema.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_scope.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_semantic.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_strace_backend.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_stream_assembly.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_threat_model.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_top_detached.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_v063_features.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_v064_live_auto_integrations.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_v064_live_evidence.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_validate.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_version.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_viewer.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_viewer_content_inspector.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_viewer_projection.py +0 -0
- {execweave-0.7.6 → execweave-0.7.7}/tests/test_workflow.py +0 -0
{execweave-0.7.6 → execweave-0.7.7}/.github/workflows/provider-capability-stage-integrity.yml
RENAMED
|
@@ -46,3 +46,4 @@ jobs:
|
|
|
46
46
|
python scripts/check_release_stage_integrity.py
|
|
47
47
|
--baseline-ref "${{ github.event.pull_request.base.sha || inputs.baseline_ref }}"
|
|
48
48
|
--allow-test-change "tests/test_dashboard_information_architecture.py=the assertion pinned the colliding eight-character id fallback, which was the defect itself; the labels-are-provider-neutral subject is unchanged and still asserted"
|
|
49
|
+
--allow-test-change "tests/test_agent_node_labels.py=the assertion required the unscoped conversation record fallback to label agents correctly; that fallback showed every agent every other agent's conversation and has been removed, so the test now asserts the stronger property that no such fallback exists"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Viewer Agent Isolation
|
|
2
|
+
|
|
3
|
+
# Every agent-isolation defect this project shipped passed the unit suite and was
|
|
4
|
+
# found by a person opening the page. This job opens the pages instead: it renders
|
|
5
|
+
# one four-agent run through both shipped viewers and reads what each agent shows.
|
|
6
|
+
# The live dashboard is exercised mid-run, because that is the state in which it
|
|
7
|
+
# showed every agent every other agent's conversation.
|
|
8
|
+
on:
|
|
9
|
+
pull_request:
|
|
10
|
+
push:
|
|
11
|
+
branches: [main]
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
viewers:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.12"
|
|
26
|
+
cache: pip
|
|
27
|
+
|
|
28
|
+
- name: Install
|
|
29
|
+
run: python -m pip install -e ".[dev,e2e]"
|
|
30
|
+
|
|
31
|
+
- name: Install Chromium
|
|
32
|
+
run: python -m playwright install --with-deps chromium
|
|
33
|
+
|
|
34
|
+
# EXECWEAVE_E2E_REQUIRED turns a missing browser into a failure. Without it
|
|
35
|
+
# the checks skip themselves when the browser cannot start, and a skipped
|
|
36
|
+
# viewer check is indistinguishable from a passing one.
|
|
37
|
+
- name: Read both viewers in a browser
|
|
38
|
+
env:
|
|
39
|
+
EXECWEAVE_E2E_REQUIRED: "1"
|
|
40
|
+
run: python -m pytest -m viewer_e2e -v
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: execweave
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.7
|
|
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
|
|
@@ -44,6 +44,8 @@ Requires-Dist: watchdog>=4.0
|
|
|
44
44
|
Provides-Extra: dev
|
|
45
45
|
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
46
46
|
Requires-Dist: ruff<0.17,>=0.16; extra == 'dev'
|
|
47
|
+
Provides-Extra: e2e
|
|
48
|
+
Requires-Dist: playwright>=1.44; extra == 'e2e'
|
|
47
49
|
Provides-Extra: release
|
|
48
50
|
Requires-Dist: build>=1.2; extra == 'release'
|
|
49
51
|
Requires-Dist: twine>=6.0; extra == 'release'
|
|
@@ -82,7 +84,7 @@ Install the latest published wheel/sdist from PyPI:
|
|
|
82
84
|
python -m pip install -U execweave
|
|
83
85
|
```
|
|
84
86
|
|
|
85
|
-
The current release is **v0.7.
|
|
87
|
+
The current release is **v0.7.7**.
|
|
86
88
|
|
|
87
89
|
For development:
|
|
88
90
|
|
|
@@ -118,7 +120,7 @@ execweave record --open -- python my_agent.py
|
|
|
118
120
|
|
|
119
121
|
`execweave top -- codex` keeps the Agent interactive in the launch terminal while opening/attaching the detached Top dashboard according to the host environment.
|
|
120
122
|
|
|
121
|
-
**v0.7.
|
|
123
|
+
**v0.7.7 — each agent's own conversation, while the run is still open.** The live dashboard showed every agent every other agent's conversation for the whole run and only became correct once the agent exited: it fetched the conversation index only at finalization, so the per-agent scoping never ran and a flat list of every stored record was drawn in its place — the same list whichever node was selected. That index is now projected from the run's current graph and served during the run, through the same builder the finalized file is written from, so a live dashboard and a recorded viewer cannot disagree about what belongs to an agent; the provider-neutral, agent-local multi-agent conversations each agent owns are the only thing either one draws. Neither viewer keeps a fallback that renders a conversation record outside that per-agent projection. A release check now opens both shipped viewers in a real browser and reads back what each agent shows, so an agent seeing another agent's conversation fails the build instead of reaching a release.
|
|
122
124
|
|
|
123
125
|
The unified dashboard brings the execution graph, logs, and conversation records into the same inspection flow. Finalized runs generate `conversations.md` and `conversations.json`, while validated provider transcripts are copied into the run-local SHA-256 content store. Claude Code, OpenAI Codex, Cursor, OpenCode, and Google Antigravity use the strongest provider-exposed multi-agent evidence available to each integration. For gateways and local runtimes that expose only root request/response traffic, ExecWeave shows only that root conversation and does not invent subagents or hidden routing.
|
|
124
126
|
|
|
@@ -327,7 +329,7 @@ Conversation isolation is an attribution/display rule, not a redaction boundary.
|
|
|
327
329
|
|
|
328
330
|
## Current status
|
|
329
331
|
|
|
330
|
-
v0.7.
|
|
332
|
+
v0.7.7 combines cross-platform runtime collection, materialized execution graphs, standalone/live dashboards, conservative provider↔runtime correlation, full-fidelity content-addressed provider evidence, attributable multi-agent execution traces, direct run-local conversation access, agent-local conversation isolation across provider-neutral projections, and per-agent conversation focus in the standalone and live dashboards. Supported integrations preserve the strongest identity/routing evidence actually exposed by each provider and abstain when that evidence is unavailable. Observed evidence and inference remain separate by design.
|
|
331
333
|
|
|
332
334
|
## Documentation
|
|
333
335
|
|
|
@@ -31,7 +31,7 @@ Installieren Sie das neueste veröffentlichte wheel/sdist von PyPI:
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Die aktuelle Version ist **v0.7.
|
|
34
|
+
Die aktuelle Version ist **v0.7.7**.
|
|
35
35
|
|
|
36
36
|
Für die Entwicklung:
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` hält den Agent im Startterminal interaktiv und öffnet bzw. verbindet gleichzeitig das detached Top dashboard entsprechend der Host-Umgebung.
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — die eigene Conversation jedes Agents, während der Run noch offen ist.** Das Live-Dashboard zeigte jedem Agent den ganzen Run über die Conversation jedes anderen Agents und wurde erst korrekt, nachdem der Agent beendet war: Es holte den Conversation-Index erst bei der Finalisierung, sodass das Per-Agent-Scoping nie lief und stattdessen eine flache Liste aller gespeicherten Datensätze gezeichnet wurde — dieselbe Liste, gleich welcher Node ausgewählt war. Dieser Index wird nun aus dem aktuellen Graphen des Runs projiziert und während des Runs ausgeliefert, durch denselben Builder, aus dem die finalisierte Datei geschrieben wird; ein Live-Dashboard und ein aufgezeichneter Viewer können sich daher nicht darüber uneinig sein, was zu einem Agent gehört, und das Einzige, was beide zeichnen, sind die provider-neutralen, agent-lokalen Multi-Agent-Conversations, die jeder Agent besitzt. Keiner der beiden Viewer behält einen Fallback, der einen Conversation-Datensatz außerhalb dieser Per-Agent-Projektion rendert. Eine Release-Prüfung öffnet nun beide ausgelieferten Viewer in einem echten Browser und liest zurück, was jeder Agent zeigt: Ein Agent, der die Conversation eines anderen sieht, lässt den Build scheitern, statt in ein Release zu gelangen.
|
|
71
71
|
|
|
72
72
|
Das vereinheitlichte Dashboard bringt execution graph, logs und conversation records in denselben Inspection-Flow. Finalisierte Runs erzeugen `conversations.md` und `conversations.json`; validierte Provider-Transcripts werden in den run-local SHA-256 content store kopiert. Claude Code, OpenAI Codex, Cursor, OpenCode und Google Antigravity verwenden jeweils die stärkste Multi-Agent-Evidence, die ihre Integration tatsächlich offenlegt. Wenn ein Gateway oder lokaler Runtime nur root request/response sichtbar macht, zeigt ExecWeave nur diese Root-Conversation und erfindet weder Subagents noch hidden routing.
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation ist eine Attribution-/Display-Regel, keine Redaction Boun
|
|
|
276
276
|
|
|
277
277
|
## Aktueller Stand
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 kombiniert cross-platform runtime collection, materialized execution graphs, standalone/live dashboards, konservative provider↔runtime correlation, full-fidelity content-addressed provider evidence, attributable multi-agent execution traces, direkten run-local conversation access agent-local conversation isolation in provider-neutralen Projektionen und per-agent conversation focus in den Standalone- und Live-Dashboards. Jede Integration bewahrt nur die stärkste identity/routing evidence, die der Provider tatsächlich offenlegt, und enthält sich, wenn diese Evidence fehlt. Observed evidence und inference bleiben konstruktiv getrennt.
|
|
280
280
|
|
|
281
281
|
## Dokumentation
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ Installez le dernier wheel/sdist publié depuis PyPI :
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
La version courante est **v0.7.
|
|
34
|
+
La version courante est **v0.7.7**.
|
|
35
35
|
|
|
36
36
|
Pour le développement :
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` garde l’Agent interactif dans le terminal de lancement tout en ouvrant ou en attachant le dashboard Top détaché selon l’environnement hôte.
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — la conversation propre à chaque agent, pendant que le run est encore ouvert.** Le live dashboard montrait à chaque agent la conversation de tous les autres pendant tout le run et ne devenait correct qu'une fois l'agent terminé : il ne récupérait l'index des conversations qu'à la finalisation, si bien que le cadrage per-agent ne s'exécutait jamais et qu'une liste plate de tous les enregistrements stockés était dessinée à la place — la même liste quel que soit le node sélectionné. Cet index est désormais projeté depuis le graphe courant du run et servi pendant le run, à travers le même builder que celui qui écrit le fichier finalisé ; un live dashboard et un viewer enregistré ne peuvent donc pas diverger sur ce qui appartient à un agent, et la seule chose que l'un ou l'autre dessine sont les conversations multi-agent provider-neutral et agent-local que chaque agent possède. Aucun des deux viewers ne conserve un repli qui rendrait un enregistrement de conversation hors de cette projection per-agent. Une vérification de release ouvre maintenant les deux viewers livrés dans un vrai navigateur et relit ce que montre chaque agent : un agent voyant la conversation d'un autre fait échouer la construction au lieu d'atteindre une release.
|
|
71
71
|
|
|
72
72
|
Le dashboard unifié rassemble execution graph, logs et conversation records dans le même flux d’inspection. Les runs finalisés génèrent `conversations.md` et `conversations.json`, et les transcripts provider validés sont copiés dans le content store SHA-256 local au run. Claude Code, OpenAI Codex, Cursor, OpenCode et Google Antigravity exploitent chacun le niveau de multi-agent evidence réellement exposé par leur integration. Lorsqu’un gateway ou un local runtime n’expose que des request/response root, ExecWeave affiche uniquement cette root conversation et n’invente ni subagent ni hidden routing.
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ La conversation isolation est une règle d’attribution et d’affichage, pas u
|
|
|
276
276
|
|
|
277
277
|
## État actuel
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 combine cross-platform runtime collection, materialized execution graphs, standalone/live dashboards, conservative provider↔runtime correlation, full-fidelity content-addressed provider evidence, attributable multi-agent execution traces, accès direct aux conversations run-local agent-local conversation isolation dans les projections provider-neutral et per-agent conversation focus dans les dashboards standalone et live. Chaque integration conserve uniquement la meilleure identity/routing evidence réellement exposée par le provider et s’abstient lorsque cette evidence manque. Observed evidence et inference restent séparées par conception.
|
|
280
280
|
|
|
281
281
|
## Documentation
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ PyPI から最新の wheel/sdist をインストールします。
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
現在のリリースは **v0.7.
|
|
34
|
+
現在のリリースは **v0.7.7** です。
|
|
35
35
|
|
|
36
36
|
開発環境では次のようにインストールできます。
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` は Agent を起動 terminal 上でインタラクティブなまま保ち、ホスト環境に応じて detached Top dashboard を開くか既存のものに attach します。
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — 実行中でも、各 agent は自分自身の conversation だけを見る。** live dashboard は実行中ずっと、すべての agent に他の agent の conversation を見せており、agent が終了して初めて正しくなっていました。conversation index を finalization でしか取得しなかったため per-agent scoping が一度も実行されず、代わりに保存済みレコードを平坦に並べた一覧が描かれ、どの node を選んでも同じ一覧でした。この index は実行中の graph から投影され、finalized ファイルが書き出されるのと同じ builder を通して実行中に提供されます。したがって live dashboard と recorded viewer が「何がどの agent のものか」で食い違うことはなく、両者が描くのは各 agent が保持する provider-neutral かつ agent-local な multi-agent conversation だけです。どちらの viewer も、per-agent projection を経ない conversation record を描く fallback を保持しません。リリース前の検査は実物のブラウザで両方の viewer を開き、各 agent が示す内容を読み返すため、agent が他の agent の conversation を見る状態は release に届く前にビルドを失敗させます。
|
|
71
71
|
|
|
72
72
|
統合 dashboard では execution graph、logs、conversation records を同じ inspection flow で確認できます。Finalized run は `conversations.md` と `conversations.json` を生成し、検証済み provider transcript は run-local SHA-256 content store にコピーされます。Claude Code、OpenAI Codex、Cursor、OpenCode、Google Antigravity は、それぞれが実際に公開する最も強い multi-agent evidence を利用します。gateway や local runtime が root request/response しか公開しない場合、ExecWeave は root conversation だけを表示し、subagent や hidden routing を捏造しません。
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation は attribution/display の規則であり redaction boun
|
|
|
276
276
|
|
|
277
277
|
## 現在の状態
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 は cross-platform runtime collection、materialized execution graph、standalone/live dashboard、保守的な provider↔runtime correlation、content-addressed full-fidelity provider evidence、attributable multi-agent execution trace、run-local conversation access、provider-neutral projection 上の agent-local conversation isolation、standalone および live dashboard での per-agent conversation focus を統合します。各 integration は provider が実際に公開した最も強い identity/routing evidence のみを保持し、不足する場合は abstain します。Observed evidence と inference は設計上分離されたままです。
|
|
280
280
|
|
|
281
281
|
## ドキュメント
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ PyPI에서 최신 wheel/sdist를 설치합니다.
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
현재 릴리스는 **v0.7.
|
|
34
|
+
현재 릴리스는 **v0.7.7** 입니다.
|
|
35
35
|
|
|
36
36
|
개발 설치:
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex`는 Agent를 시작 terminal에서 interactive 상태로 유지하면서 host 환경에 따라 detached Top dashboard를 열거나 attach합니다.
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — 실행 중에도 각 agent 는 자신의 conversation 만 본다.** live dashboard 는 실행 내내 모든 agent 에게 다른 agent 의 conversation 을 보여 주었고, agent 가 종료된 뒤에야 올바르게 동작했습니다. conversation index 를 finalization 에서만 가져왔기 때문에 per-agent scoping 이 한 번도 실행되지 않았고, 그 자리에 저장된 모든 레코드를 평평하게 나열한 목록이 그려졌으며 어떤 node 를 선택하든 같은 목록이었습니다. 이제 그 index 는 실행 중인 graph 에서 투영되어, finalized 파일이 기록되는 것과 동일한 builder 를 거쳐 실행 중에 제공됩니다. 따라서 live dashboard 와 recorded viewer 가 무엇이 어떤 agent 의 것인지에 대해 어긋날 수 없으며, 둘이 그리는 것은 각 agent 가 소유한 provider-neutral, agent-local multi-agent conversation 뿐입니다. 두 viewer 모두 per-agent projection 을 거치지 않은 conversation record 를 그리는 fallback 을 남기지 않습니다. 릴리스 검사는 이제 실제 브라우저로 두 viewer 를 열어 각 agent 가 보여 주는 내용을 되읽으므로, agent 가 다른 agent 의 conversation 을 보는 상태는 release 에 도달하는 대신 빌드를 실패시킵니다.
|
|
71
71
|
|
|
72
72
|
통합 dashboard는 execution graph, logs, conversation records를 하나의 inspection flow에서 제공합니다. Finalized run은 `conversations.md`와 `conversations.json`을 만들며, 검증된 provider transcript는 run-local SHA-256 content store로 복사됩니다. Claude Code, OpenAI Codex, Cursor, OpenCode, Google Antigravity는 각 integration이 실제로 노출하는 가장 강한 multi-agent evidence를 사용합니다. gateway나 local runtime이 root request/response만 노출하면 ExecWeave는 root conversation만 보여 주며 subagent나 hidden routing을 만들어내지 않습니다.
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation은 attribution/display 규칙이지 redaction boundary가
|
|
|
276
276
|
|
|
277
277
|
## 현재 상태
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7는 cross-platform runtime collection, materialized execution graph, standalone/live dashboard, 보수적인 provider↔runtime correlation, content-addressed full-fidelity provider evidence, attributable multi-agent execution trace, run-local conversation access, provider-neutral projection의 agent-local conversation isolation, standalone 및 live dashboard의 per-agent conversation focus를 통합합니다. 각 integration은 provider가 실제로 노출한 가장 강한 identity/routing evidence만 보존하고 충분한 증거가 없으면 abstain합니다. Observed evidence와 inference는 설계상 계속 분리됩니다.
|
|
280
280
|
|
|
281
281
|
## 문서
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ Install the latest published wheel/sdist from PyPI:
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
The current release is **v0.7.
|
|
34
|
+
The current release is **v0.7.7**.
|
|
35
35
|
|
|
36
36
|
For development:
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` keeps the Agent interactive in the launch terminal while opening/attaching the detached Top dashboard according to the host environment.
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — each agent's own conversation, while the run is still open.** The live dashboard showed every agent every other agent's conversation for the whole run and only became correct once the agent exited: it fetched the conversation index only at finalization, so the per-agent scoping never ran and a flat list of every stored record was drawn in its place — the same list whichever node was selected. That index is now projected from the run's current graph and served during the run, through the same builder the finalized file is written from, so a live dashboard and a recorded viewer cannot disagree about what belongs to an agent; the provider-neutral, agent-local multi-agent conversations each agent owns are the only thing either one draws. Neither viewer keeps a fallback that renders a conversation record outside that per-agent projection. A release check now opens both shipped viewers in a real browser and reads back what each agent shows, so an agent seeing another agent's conversation fails the build instead of reaching a release.
|
|
71
71
|
|
|
72
72
|
The unified dashboard brings the execution graph, logs, and conversation records into the same inspection flow. Finalized runs generate `conversations.md` and `conversations.json`, while validated provider transcripts are copied into the run-local SHA-256 content store. Claude Code, OpenAI Codex, Cursor, OpenCode, and Google Antigravity use the strongest provider-exposed multi-agent evidence available to each integration. For gateways and local runtimes that expose only root request/response traffic, ExecWeave shows only that root conversation and does not invent subagents or hidden routing.
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation is an attribution/display rule, not a redaction boundary.
|
|
|
276
276
|
|
|
277
277
|
## Current status
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 combines cross-platform runtime collection, materialized execution graphs, standalone/live dashboards, conservative provider↔runtime correlation, full-fidelity content-addressed provider evidence, attributable multi-agent execution traces, direct run-local conversation access, agent-local conversation isolation across provider-neutral projections, and per-agent conversation focus in the standalone and live dashboards. Supported integrations preserve the strongest identity/routing evidence actually exposed by each provider and abstain when that evidence is unavailable. Observed evidence and inference remain separate by design.
|
|
280
280
|
|
|
281
281
|
## Documentation
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ ExecWeave — source-available, local-first проект наблюдаемос
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Текущая версия — **v0.7.
|
|
34
|
+
Текущая версия — **v0.7.7**.
|
|
35
35
|
|
|
36
36
|
Для разработки:
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` оставляет Agent интерактивным в стартовом terminal и одновременно открывает либо подключает detached Top dashboard в зависимости от host environment.
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — собственный conversation каждого agent, пока прогон ещё открыт.** Live dashboard весь прогон показывал каждому agent conversation всех остальных и становился правильным лишь после завершения agent: он забирал conversation index только при finalization, поэтому per-agent scoping не выполнялся ни разу, а вместо него рисовался плоский список всех сохранённых записей — один и тот же, какой бы node ни был выбран. Теперь этот index проецируется из текущего графа прогона и отдаётся во время прогона через тот же builder, из которого пишется финализированный файл, поэтому live dashboard и записанный viewer не могут разойтись в том, что принадлежит agent; единственное, что рисует любой из них, — это provider-neutral, agent-local multi-agent conversations, которыми владеет каждый agent. Ни один из viewers не сохраняет запасной путь, рисующий запись conversation в обход этой per-agent projection. Релизная проверка теперь открывает оба поставляемые viewers в настоящем браузере и считывает, что показывает каждый agent, поэтому agent, видящий чужой conversation, роняет сборку вместо того, чтобы попасть в release.
|
|
71
71
|
|
|
72
72
|
Единый dashboard объединяет execution graph, logs и conversation records в одном inspection flow. Finalized runs создают `conversations.md` и `conversations.json`, а проверенные provider transcripts копируются в run-local SHA-256 content store. Claude Code, OpenAI Codex, Cursor, OpenCode и Google Antigravity используют наиболее сильную multi-agent evidence, которую реально раскрывает соответствующая integration. Если gateway или local runtime показывает только root request/response, ExecWeave отображает только root conversation и не выдумывает subagents или hidden routing.
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation — это правило attribution/display, а не re
|
|
|
276
276
|
|
|
277
277
|
## Текущий статус
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 объединяет cross-platform runtime collection, materialized execution graphs, standalone/live dashboards, conservative provider↔runtime correlation, full-fidelity content-addressed provider evidence, attributable multi-agent execution traces, прямой run-local conversation access agent-local conversation isolation в provider-neutral projections и per-agent conversation focus в standalone и live dashboards. Каждая integration сохраняет только наиболее сильную identity/routing evidence, реально раскрытую provider, и abstain-ит при её отсутствии. Observed evidence и inference по-прежнему разделены архитектурно.
|
|
280
280
|
|
|
281
281
|
## Документация
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ ExecWeave 是一个 source-available、local-first 的可观测性项目,把 A
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
当前正式版本是 **v0.7.
|
|
34
|
+
当前正式版本是 **v0.7.7**。
|
|
35
35
|
|
|
36
36
|
开发安装:
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` 会让 Agent 保持在启动 terminal 中交互,并根据主机环境打开或附加 detached Top dashboard。
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — 运行期间就只看得到自己那一份对话。** live dashboard 在整段运行期间让每个 agent 都看得到其他 agent 的对话,要等 agent 结束才会正确:它只在 finalization 才去取 conversation index,因此 per-agent scoping 从未执行,画面改由一份平铺的全部记录清单顶替,而且不论选取哪个 node 都是同一份。现在该 index 改为从运行中的 graph 投影并在运行期间供应,走的是与 finalized 文件相同的 builder,因此 live dashboard 与 recorded viewer 不可能对「什么属于哪个 agent」有不同答案;两者唯一会画出的,就是每个 agent 各自拥有的 provider-neutral、agent-local multi-agent conversation。两个 viewer 都不再保留任何会绕过 per-agent projection 的 fallback。发布前的检查现在会用真实浏览器打开两种 viewer 并读回每个 agent 显示的内容,因此 agent 看到别人的对话会让构建失败,而不是流到 release。
|
|
71
71
|
|
|
72
72
|
统一 dashboard 把 execution graph、logs 与 conversation records 放进同一条 inspection flow。Finalized run 会生成 `conversations.md` 与 `conversations.json`,经过验证的 provider transcript 也会复制进 run-local SHA-256 content store。Claude Code、OpenAI Codex、Cursor、OpenCode 与 Google Antigravity 都依据各自实际暴露的 evidence 强度建立 multi-agent trace;如果 gateway 或 local runtime 只提供 root request/response,ExecWeave 就只显示 root conversation,不会虚构 subagent 或 hidden routing。
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation 是 attribution/display 规则,而不是 redaction boun
|
|
|
276
276
|
|
|
277
277
|
## 当前状态
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 组合 cross-platform runtime collection、materialized execution graph、standalone/live dashboard、保守的 provider↔runtime correlation、content-addressed full-fidelity provider evidence、可归属的 multi-agent execution trace、run-local conversation access,provider-neutral projection 上的 agent-local conversation isolation,以及 standalone 与 live dashboard 上的 per-agent conversation focus。各 integration 只保留 provider 实际暴露的最强 identity/routing evidence,证据不足时选择 abstain。Observed evidence 与 inference 从设计上保持分离。
|
|
280
280
|
|
|
281
281
|
## 文档
|
|
282
282
|
|
|
@@ -31,7 +31,7 @@ ExecWeave 是一個 source-available、local-first 的可觀測性專案,會
|
|
|
31
31
|
python -m pip install -U execweave
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
目前正式版本是 **v0.7.
|
|
34
|
+
目前正式版本是 **v0.7.7**。
|
|
35
35
|
|
|
36
36
|
開發安裝:
|
|
37
37
|
|
|
@@ -67,7 +67,7 @@ execweave record --open -- python my_agent.py
|
|
|
67
67
|
|
|
68
68
|
`execweave top -- codex` 會讓 Agent 保持在啟動 terminal 中互動,並依主機環境開啟或附加 detached Top dashboard。
|
|
69
69
|
|
|
70
|
-
**v0.7.
|
|
70
|
+
**v0.7.7 — 執行期間就只看得到自己那一份對話。** live dashboard 在整段執行期間讓每個 agent 都看得到其他 agent 的對話,要等 agent 結束才會正確:它只在 finalization 才去取 conversation index,因此 per-agent scoping 從未執行,畫面改由一份平鋪的全部記錄清單頂替,而且不論選取哪個 node 都是同一份。現在該 index 改為從執行中的 graph 投影並在執行期間供應,走的是與 finalized 檔案相同的 builder,因此 live dashboard 與 recorded viewer 不可能對「什麼屬於哪個 agent」有不同答案;兩者唯一會畫出的,就是每個 agent 各自擁有的 provider-neutral、agent-local multi-agent conversation。兩個 viewer 都不再保留任何會繞過 per-agent projection 的 fallback。發布前的檢查現在會用真實瀏覽器開啟兩種 viewer 並讀回每個 agent 顯示的內容,因此 agent 看到別人的對話會讓建置失敗,而不是流到 release。
|
|
71
71
|
|
|
72
72
|
統一 dashboard 把 execution graph、logs 與 conversation records 放進同一條 inspection flow。Finalized run 會產生 `conversations.md` 與 `conversations.json`,經驗證的 provider transcript 也會複製進 run-local SHA-256 content store。Claude Code、OpenAI Codex、Cursor、OpenCode 與 Google Antigravity 都依各自實際曝露的 evidence 強度建立 multi-agent trace;若 gateway 或 local runtime 只提供 root request/response,ExecWeave 就只顯示 root conversation,不會虛構 subagent 或 hidden routing。
|
|
73
73
|
|
|
@@ -276,7 +276,7 @@ Conversation isolation 是 attribution/display 規則,不是 redaction boundar
|
|
|
276
276
|
|
|
277
277
|
## 目前狀態
|
|
278
278
|
|
|
279
|
-
v0.7.
|
|
279
|
+
v0.7.7 整合 cross-platform runtime collection、materialized execution graph、standalone/live dashboard、保守的 provider↔runtime correlation、content-addressed full-fidelity provider evidence、可歸屬的 multi-agent execution trace、run-local conversation access,provider-neutral projection 上的 agent-local conversation isolation,以及 standalone 與 live dashboard 上的 per-agent conversation focus。各 integration 只保留 provider 實際曝露的最強 identity/routing evidence,證據不足時選擇 abstain。Observed evidence 與 inference 仍從設計上分離。
|
|
280
280
|
|
|
281
281
|
## 文件
|
|
282
282
|
|
|
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "execweave"
|
|
7
|
-
# ExecWeave v0.7.
|
|
8
|
-
version = "0.7.
|
|
7
|
+
# ExecWeave v0.7.7 release metadata
|
|
8
|
+
version = "0.7.7"
|
|
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"
|
|
@@ -50,6 +50,11 @@ release = [
|
|
|
50
50
|
"build>=1.2",
|
|
51
51
|
"twine>=6.0",
|
|
52
52
|
]
|
|
53
|
+
# Drives the shipped viewers in a real browser. Kept out of dev so an ordinary
|
|
54
|
+
# development install stays small; CI installs it and requires the checks to run.
|
|
55
|
+
e2e = [
|
|
56
|
+
"playwright>=1.44",
|
|
57
|
+
]
|
|
53
58
|
|
|
54
59
|
[project.urls]
|
|
55
60
|
Homepage = "https://github.com/Irish-kw/ExecWeave"
|
|
@@ -91,6 +96,9 @@ packages = ["src/execweave"]
|
|
|
91
96
|
|
|
92
97
|
[tool.pytest.ini_options]
|
|
93
98
|
testpaths = ["tests"]
|
|
99
|
+
markers = [
|
|
100
|
+
"viewer_e2e: drives a shipped viewer in a real browser; needs playwright and chromium",
|
|
101
|
+
]
|
|
94
102
|
|
|
95
103
|
[tool.ruff]
|
|
96
104
|
target-version = "py310"
|
|
@@ -5,6 +5,7 @@ import ast
|
|
|
5
5
|
import io
|
|
6
6
|
import json
|
|
7
7
|
import os
|
|
8
|
+
import re
|
|
8
9
|
import subprocess
|
|
9
10
|
import sys
|
|
10
11
|
import tarfile
|
|
@@ -16,10 +17,19 @@ ROOT = Path(__file__).resolve().parents[1]
|
|
|
16
17
|
CRITICAL_UNCHANGED = (
|
|
17
18
|
"tests/test_http_proxy.py",
|
|
18
19
|
"scripts/audit_i18n_parity.py",
|
|
19
|
-
"pyproject.toml",
|
|
20
|
-
"src/execweave/__init__.py",
|
|
21
20
|
)
|
|
22
21
|
|
|
22
|
+
# pyproject.toml and __init__.py were frozen whole, but the red line in them is the
|
|
23
|
+
# release version and the runtime dependency set — not the file. Freezing the file
|
|
24
|
+
# blocked ordinary stage work that touches neither: registering a pytest marker, or
|
|
25
|
+
# declaring an optional extra for a check CI runs. Those two values are now compared
|
|
26
|
+
# against the baseline directly, which is what the freeze was standing in for.
|
|
27
|
+
RELEASE_METADATA = (
|
|
28
|
+
("pyproject.toml", re.compile(r'(?m)^version\s*=\s*"([^"]+)"')),
|
|
29
|
+
("src/execweave/__init__.py", re.compile(r'(?m)^__version__\s*=\s*"([^"]+)"')),
|
|
30
|
+
)
|
|
31
|
+
RUNTIME_DEPENDENCIES = re.compile(r"(?ms)^dependencies\s*=\s*\[(.*?)^\]")
|
|
32
|
+
|
|
23
33
|
# The relay module itself has to keep changing — 0.7.6 rebuilds streamed responses
|
|
24
34
|
# inside it — so freezing the whole file would block the staged work it is meant to
|
|
25
35
|
# protect. What must never move is the refusal to terminate TLS. The handler body is
|
|
@@ -70,6 +80,14 @@ SKIP_MARKERS = (
|
|
|
70
80
|
"pytest.skip(",
|
|
71
81
|
)
|
|
72
82
|
ENVIRONMENT_PROBE_SKIP = "pytest.mark.skipif(shutil.which("
|
|
83
|
+
# The second accepted form covers a check that needs a capability CI supplies and a
|
|
84
|
+
# developer's machine may not — a browser. A runtime skip is permitted only in a file
|
|
85
|
+
# that also escalates: where the environment declares the check required, the same
|
|
86
|
+
# helper fails instead of skipping, so the skip can never stand in for a pass in CI.
|
|
87
|
+
# Decorated skips and xfails stay refused in such a file; only the escalating runtime
|
|
88
|
+
# form is exempt.
|
|
89
|
+
REQUIRED_MODE_FLAG = "EXECWEAVE_E2E_REQUIRED"
|
|
90
|
+
REQUIRED_MODE_ESCALATION = "pytest.fail("
|
|
73
91
|
|
|
74
92
|
|
|
75
93
|
def _run(
|
|
@@ -207,14 +225,30 @@ def _assert_existing_tests_untouched(
|
|
|
207
225
|
|
|
208
226
|
def _assert_no_new_skip_or_xfail(baseline_ref: str) -> None:
|
|
209
227
|
diff = _git("diff", "--unified=0", f"{baseline_ref}...HEAD", "--", "tests").stdout
|
|
210
|
-
|
|
228
|
+
added: dict[str, list[str]] = {}
|
|
229
|
+
current = ""
|
|
211
230
|
for line in diff.splitlines():
|
|
212
|
-
if
|
|
231
|
+
if line.startswith("+++ "):
|
|
232
|
+
current = line[4:].strip()
|
|
233
|
+
if current.startswith("b/"):
|
|
234
|
+
current = current[2:]
|
|
213
235
|
continue
|
|
214
|
-
if
|
|
236
|
+
if not line.startswith("+"):
|
|
215
237
|
continue
|
|
216
|
-
|
|
217
|
-
|
|
238
|
+
added.setdefault(current, []).append(line)
|
|
239
|
+
|
|
240
|
+
offenders = []
|
|
241
|
+
for path, lines in sorted(added.items()):
|
|
242
|
+
escalates = any(REQUIRED_MODE_FLAG in line for line in lines) and any(
|
|
243
|
+
REQUIRED_MODE_ESCALATION in line for line in lines
|
|
244
|
+
)
|
|
245
|
+
for line in lines:
|
|
246
|
+
if ENVIRONMENT_PROBE_SKIP in line and "is None" in line:
|
|
247
|
+
continue
|
|
248
|
+
if escalates and "pytest.skip(" in line and "pytest.mark." not in line:
|
|
249
|
+
continue
|
|
250
|
+
if any(marker in line for marker in SKIP_MARKERS):
|
|
251
|
+
offenders.append(f"{path}: {line}")
|
|
218
252
|
if offenders:
|
|
219
253
|
raise RuntimeError("new skip/xfail markers are not allowed:\n" + "\n".join(offenders))
|
|
220
254
|
|
|
@@ -232,6 +266,32 @@ def _assert_critical_files_unchanged(baseline_ref: str) -> None:
|
|
|
232
266
|
raise RuntimeError("release red-line files changed:\n" + "\n".join(changed))
|
|
233
267
|
|
|
234
268
|
|
|
269
|
+
def _assert_release_metadata_unchanged(baseline_ref: str) -> None:
|
|
270
|
+
"""A stage may not move the release version or the runtime dependency set."""
|
|
271
|
+
for path, pattern in RELEASE_METADATA:
|
|
272
|
+
baseline = _git("show", f"{baseline_ref}:{path}").stdout
|
|
273
|
+
current = (ROOT / path).read_text(encoding="utf-8")
|
|
274
|
+
before, after = pattern.search(baseline), pattern.search(current)
|
|
275
|
+
if before is None or after is None:
|
|
276
|
+
raise RuntimeError(f"release version is no longer declared in {path}")
|
|
277
|
+
if before.group(1) != after.group(1):
|
|
278
|
+
raise RuntimeError(
|
|
279
|
+
f"{path} moves the release version from {before.group(1)} to "
|
|
280
|
+
f"{after.group(1)}; a stage lands before its release, not with it"
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
baseline = _git("show", f"{baseline_ref}:pyproject.toml").stdout
|
|
284
|
+
current = (ROOT / "pyproject.toml").read_text(encoding="utf-8")
|
|
285
|
+
before, after = RUNTIME_DEPENDENCIES.search(baseline), RUNTIME_DEPENDENCIES.search(current)
|
|
286
|
+
if before is None or after is None:
|
|
287
|
+
raise RuntimeError("the runtime dependency set is no longer declared in pyproject.toml")
|
|
288
|
+
if before.group(1) != after.group(1):
|
|
289
|
+
raise RuntimeError(
|
|
290
|
+
"pyproject.toml changes the runtime dependency set:\n"
|
|
291
|
+
f"baseline:{before.group(1)}\ncurrent:{after.group(1)}"
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
|
|
235
295
|
def _connect_handler_source(source: str, origin: str) -> str:
|
|
236
296
|
module = ast.parse(source)
|
|
237
297
|
for node in ast.walk(module):
|
|
@@ -495,6 +555,7 @@ def main() -> int:
|
|
|
495
555
|
)
|
|
496
556
|
_assert_no_new_skip_or_xfail(args.baseline_ref)
|
|
497
557
|
_assert_critical_files_unchanged(args.baseline_ref)
|
|
558
|
+
_assert_release_metadata_unchanged(args.baseline_ref)
|
|
498
559
|
tls_status = _assert_no_tls_mitm(args.baseline_ref)
|
|
499
560
|
completeness = _assert_conversation_completeness_unchanged(args.baseline_ref)
|
|
500
561
|
i18n_status = _assert_i18n_audit()
|
|
@@ -697,20 +697,25 @@ def _render_markdown(entries: list[dict[str, Any]]) -> str:
|
|
|
697
697
|
return "\n".join(lines)
|
|
698
698
|
|
|
699
699
|
|
|
700
|
-
def
|
|
700
|
+
def conversation_index_payload(
|
|
701
701
|
graph: dict[str, Any],
|
|
702
702
|
run_root: str | Path,
|
|
703
|
-
) ->
|
|
704
|
-
"""
|
|
703
|
+
) -> dict[str, Any]:
|
|
704
|
+
"""Build the conversation index exactly as ``conversations.json`` carries it.
|
|
705
|
+
|
|
706
|
+
The live dashboard and the finalized viewer both read this. Keeping one
|
|
707
|
+
builder is the point: a live run that computed its own projection would be
|
|
708
|
+
free to disagree with the file written at finalization, and the disagreement
|
|
709
|
+
would show up as an agent seeing conversations that are not its own.
|
|
710
|
+
"""
|
|
705
711
|
root = Path(run_root).expanduser().resolve()
|
|
706
|
-
root.mkdir(parents=True, exist_ok=True)
|
|
707
712
|
entries = conversation_record_entries(graph, root)
|
|
708
713
|
visible_message_count = sum(
|
|
709
714
|
len(preview.get("messages") or [])
|
|
710
715
|
for entry in entries
|
|
711
716
|
if isinstance((preview := entry.get("conversation_preview")), dict)
|
|
712
717
|
)
|
|
713
|
-
|
|
718
|
+
return {
|
|
714
719
|
"schema_version": "0.3",
|
|
715
720
|
"scope": "run_local_provider_neutral_conversation_projection",
|
|
716
721
|
"entry_count": len(entries),
|
|
@@ -718,6 +723,17 @@ def write_conversation_records(
|
|
|
718
723
|
"external_provider_folder_lookup_required": False,
|
|
719
724
|
"entries": entries,
|
|
720
725
|
}
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
def write_conversation_records(
|
|
729
|
+
graph: dict[str, Any],
|
|
730
|
+
run_root: str | Path,
|
|
731
|
+
) -> tuple[Path, Path]:
|
|
732
|
+
"""Write deterministic JSON + Markdown indexes beside the viewer artifacts."""
|
|
733
|
+
root = Path(run_root).expanduser().resolve()
|
|
734
|
+
root.mkdir(parents=True, exist_ok=True)
|
|
735
|
+
payload = conversation_index_payload(graph, root)
|
|
736
|
+
entries = payload["entries"]
|
|
721
737
|
json_path = root / "conversations.json"
|
|
722
738
|
markdown_path = root / "conversations.md"
|
|
723
739
|
json_path.write_text(
|