execweave 0.6.1__tar.gz → 0.6.3__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.6.3/.github/workflows/i18n.yml +34 -0
- execweave-0.6.3/.github/workflows/package-smoke.yml +42 -0
- {execweave-0.6.1 → execweave-0.6.3}/.github/workflows/publish.yml +1 -1
- execweave-0.6.3/.github/workflows/scalability.yml +54 -0
- execweave-0.6.3/.github/workflows/wheel-smoke.yml +34 -0
- {execweave-0.6.1 → execweave-0.6.3}/PKG-INFO +94 -12
- execweave-0.6.3/README.de.md +388 -0
- execweave-0.6.3/README.fr.md +388 -0
- execweave-0.6.3/README.ja.md +238 -0
- execweave-0.6.3/README.ko.md +238 -0
- {execweave-0.6.1 → execweave-0.6.3}/README.md +93 -11
- execweave-0.6.3/README.ru.md +388 -0
- execweave-0.6.3/README.zh-CN.md +238 -0
- execweave-0.6.3/README.zh-TW.md +292 -0
- execweave-0.6.3/docs/assets/execweave-viewer.png +0 -0
- execweave-0.6.3/docs/claude-code-hooks.de.md +275 -0
- execweave-0.6.3/docs/claude-code-hooks.fr.md +275 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/claude-code-hooks.ja.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/claude-code-hooks.ko.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/claude-code-hooks.md +4 -1
- execweave-0.6.3/docs/claude-code-hooks.ru.md +275 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/claude-code-hooks.zh-CN.md +4 -1
- execweave-0.6.3/docs/claude-code-hooks.zh-TW.md +273 -0
- execweave-0.6.3/docs/codex-hooks.de.md +182 -0
- execweave-0.6.3/docs/codex-hooks.fr.md +182 -0
- execweave-0.6.3/docs/codex-hooks.ja.md +182 -0
- execweave-0.6.3/docs/codex-hooks.ko.md +180 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/codex-hooks.md +4 -1
- execweave-0.6.3/docs/codex-hooks.ru.md +182 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/codex-hooks.zh-CN.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/codex-hooks.zh-TW.md +4 -1
- execweave-0.6.3/docs/cursor-hooks.de.md +85 -0
- execweave-0.6.3/docs/cursor-hooks.fr.md +85 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/cursor-hooks.ja.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/cursor-hooks.ko.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/cursor-hooks.md +6 -1
- execweave-0.6.3/docs/cursor-hooks.ru.md +85 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/cursor-hooks.zh-CN.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/cursor-hooks.zh-TW.md +6 -1
- execweave-0.6.3/docs/gemini-hooks.de.md +189 -0
- execweave-0.6.3/docs/gemini-hooks.fr.md +189 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/gemini-hooks.ja.md +36 -11
- {execweave-0.6.1 → execweave-0.6.3}/docs/gemini-hooks.ko.md +36 -11
- {execweave-0.6.1 → execweave-0.6.3}/docs/gemini-hooks.md +4 -1
- execweave-0.6.3/docs/gemini-hooks.ru.md +189 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/gemini-hooks.zh-CN.md +24 -3
- {execweave-0.6.1 → execweave-0.6.3}/docs/gemini-hooks.zh-TW.md +4 -1
- execweave-0.6.3/docs/inference-gateway.de.md +130 -0
- execweave-0.6.3/docs/inference-gateway.fr.md +130 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/inference-gateway.ja.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/inference-gateway.ko.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/inference-gateway.md +6 -1
- execweave-0.6.3/docs/inference-gateway.ru.md +130 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/inference-gateway.zh-CN.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/inference-gateway.zh-TW.md +6 -1
- execweave-0.6.3/docs/live-graph.de.md +138 -0
- execweave-0.6.3/docs/live-graph.fr.md +138 -0
- execweave-0.6.3/docs/live-graph.ja.md +138 -0
- execweave-0.6.3/docs/live-graph.ko.md +138 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/live-graph.md +4 -1
- execweave-0.6.3/docs/live-graph.ru.md +138 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/live-graph.zh-CN.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/live-graph.zh-TW.md +4 -1
- execweave-0.6.3/docs/model-runtime.de.md +106 -0
- execweave-0.6.3/docs/model-runtime.fr.md +106 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/model-runtime.ja.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/model-runtime.ko.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/model-runtime.md +6 -1
- execweave-0.6.3/docs/model-runtime.ru.md +106 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/model-runtime.zh-CN.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/model-runtime.zh-TW.md +6 -1
- execweave-0.6.3/docs/opencode-plugin.de.md +81 -0
- execweave-0.6.3/docs/opencode-plugin.fr.md +81 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/opencode-plugin.ja.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/opencode-plugin.ko.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/opencode-plugin.md +6 -1
- execweave-0.6.3/docs/opencode-plugin.ru.md +81 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/opencode-plugin.zh-CN.md +6 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/opencode-plugin.zh-TW.md +6 -1
- execweave-0.6.3/docs/phase-1-runtime-collection.de.md +322 -0
- execweave-0.6.3/docs/phase-1-runtime-collection.fr.md +322 -0
- execweave-0.6.3/docs/phase-1-runtime-collection.ja.md +322 -0
- execweave-0.6.3/docs/phase-1-runtime-collection.ko.md +322 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/phase-1-runtime-collection.md +4 -1
- execweave-0.6.3/docs/phase-1-runtime-collection.ru.md +322 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/phase-1-runtime-collection.zh-CN.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/phase-1-runtime-collection.zh-TW.md +4 -1
- execweave-0.6.3/docs/phase-2-execution-graph.de.md +286 -0
- execweave-0.6.3/docs/phase-2-execution-graph.fr.md +286 -0
- execweave-0.6.3/docs/phase-2-execution-graph.ja.md +286 -0
- execweave-0.6.3/docs/phase-2-execution-graph.ko.md +286 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/phase-2-execution-graph.md +4 -1
- execweave-0.6.3/docs/phase-2-execution-graph.ru.md +286 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/phase-2-execution-graph.zh-CN.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/phase-2-execution-graph.zh-TW.md +4 -1
- execweave-0.6.3/docs/security-analysis.de.md +178 -0
- execweave-0.6.3/docs/security-analysis.fr.md +178 -0
- execweave-0.6.3/docs/security-analysis.ja.md +178 -0
- execweave-0.6.3/docs/security-analysis.ko.md +178 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/security-analysis.md +4 -1
- execweave-0.6.3/docs/security-analysis.ru.md +178 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/security-analysis.zh-CN.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/security-analysis.zh-TW.md +4 -1
- execweave-0.6.3/docs/semantic-telemetry.de.md +160 -0
- execweave-0.6.3/docs/semantic-telemetry.fr.md +160 -0
- execweave-0.6.3/docs/semantic-telemetry.ja.md +160 -0
- execweave-0.6.3/docs/semantic-telemetry.ko.md +160 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/semantic-telemetry.md +4 -1
- execweave-0.6.3/docs/semantic-telemetry.ru.md +160 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/semantic-telemetry.zh-CN.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/docs/semantic-telemetry.zh-TW.md +4 -1
- {execweave-0.6.1 → execweave-0.6.3}/pyproject.toml +4 -2
- execweave-0.6.3/scripts/audit_i18n_parity.py +166 -0
- execweave-0.6.3/scripts/check_wheel_install.py +74 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_windows_launchers.py +25 -1
- execweave-0.6.3/scripts/sync_i18n_nav.py +143 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/__init__.py +1 -1
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/__main__.py +1 -1
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/backends.py +11 -4
- execweave-0.6.3/src/execweave/entry.py +18 -0
- execweave-0.6.3/src/execweave/filesystem.py +240 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/graph.py +103 -2
- execweave-0.6.3/src/execweave/live.py +553 -0
- execweave-0.6.3/src/execweave/live_view.py +78 -0
- execweave-0.6.3/src/execweave/scalability_benchmark.py +195 -0
- execweave-0.6.3/src/execweave/scope.py +85 -0
- execweave-0.6.3/src/execweave/theme.py +33 -0
- execweave-0.6.3/src/execweave/top.py +361 -0
- execweave-0.6.3/src/execweave/top_cli.py +91 -0
- execweave-0.6.3/src/execweave/view_cli.py +46 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/viewer.py +89 -6
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/workflow.py +7 -1
- execweave-0.6.3/tests/test_filesystem_resilience.py +235 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_graph.py +56 -1
- execweave-0.6.3/tests/test_live.py +208 -0
- execweave-0.6.3/tests/test_live_delta.py +193 -0
- execweave-0.6.3/tests/test_live_theme.py +11 -0
- execweave-0.6.3/tests/test_scope.py +54 -0
- execweave-0.6.3/tests/test_v063_features.py +132 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_viewer.py +70 -1
- execweave-0.6.1/README.ja.md +0 -150
- execweave-0.6.1/README.ko.md +0 -150
- execweave-0.6.1/README.zh-CN.md +0 -150
- execweave-0.6.1/README.zh-TW.md +0 -210
- execweave-0.6.1/docs/claude-code-hooks.zh-TW.md +0 -218
- execweave-0.6.1/docs/codex-hooks.ja.md +0 -84
- execweave-0.6.1/docs/codex-hooks.ko.md +0 -77
- execweave-0.6.1/docs/live-graph.ja.md +0 -93
- execweave-0.6.1/docs/live-graph.ko.md +0 -93
- execweave-0.6.1/docs/phase-1-runtime-collection.ja.md +0 -153
- execweave-0.6.1/docs/phase-1-runtime-collection.ko.md +0 -151
- execweave-0.6.1/docs/phase-2-execution-graph.ja.md +0 -110
- execweave-0.6.1/docs/phase-2-execution-graph.ko.md +0 -110
- execweave-0.6.1/docs/security-analysis.ja.md +0 -95
- execweave-0.6.1/docs/security-analysis.ko.md +0 -93
- execweave-0.6.1/docs/semantic-telemetry.ja.md +0 -82
- execweave-0.6.1/docs/semantic-telemetry.ko.md +0 -77
- execweave-0.6.1/src/execweave/filesystem.py +0 -103
- execweave-0.6.1/src/execweave/live.py +0 -275
- execweave-0.6.1/tests/test_live.py +0 -96
- {execweave-0.6.1 → execweave-0.6.3}/.github/workflows/ci.yml +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/.github/workflows/package-benchmark.yml +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/.github/workflows/windows-launcher.yml +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/.gitignore +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/LICENSE +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/benchmarks/phase1_overhead.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/benchmarks/README.md +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/benchmarks/v0.6.0-github-actions.json +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/docs/benchmarks/v0.6.0-github-actions.svg +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_claude_hook.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_claude_record_graph.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_correlation_graph.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_inference_gateway_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_model_runtime_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_semantic_graph.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/check_viewer_js.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/emit_claude_hook_smoke.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/emit_cursor_hook_smoke.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/emit_gemini_hook_smoke.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/emit_opencode_plugin_smoke.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/scripts/make_semantic_smoke.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/analysis.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/benchmark.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/claude_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/claude_hook_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/claude_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/codex_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/codex_hook_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/codex_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/collector.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/command.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/correlation.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/cursor_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/cursor_hook_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/cursor_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/focus.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/gemini_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/gemini_hook_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/gemini_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/graph_ops.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/inference_gateway.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/inference_gateway_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/inference_identity.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/inference_identity_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/model_runtime.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/model_runtime_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/opencode_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/opencode_hook_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/opencode_plugin_cli.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/opencode_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/overhead_benchmark.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/provider_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/schema.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/semantic.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/sink.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/strace_backend.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/src/execweave/validate.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_analysis.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_backends.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_claude_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_claude_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_codex_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_codex_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_collector.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_command.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_condense.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_correlation.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_correlation_canonical_path.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_correlation_process_exe.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_cursor_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_cursor_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_focus.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_gemini_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_gemini_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_graph_ops.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_inference_gateway.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_inference_identity.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_model_runtime.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_opencode_adapter.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_opencode_plugin.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_opencode_record.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_overhead_benchmark.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_schema.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_semantic.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_strace_backend.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_validate.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_version.py +0 -0
- {execweave-0.6.1 → execweave-0.6.3}/tests/test_workflow.py +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Documentation i18n
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "README*.md"
|
|
8
|
+
- "docs/*.md"
|
|
9
|
+
- "scripts/audit_i18n_parity.py"
|
|
10
|
+
- "scripts/sync_i18n_nav.py"
|
|
11
|
+
- ".github/workflows/i18n.yml"
|
|
12
|
+
pull_request:
|
|
13
|
+
paths:
|
|
14
|
+
- "README*.md"
|
|
15
|
+
- "docs/*.md"
|
|
16
|
+
- "scripts/audit_i18n_parity.py"
|
|
17
|
+
- "scripts/sync_i18n_nav.py"
|
|
18
|
+
- ".github/workflows/i18n.yml"
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
audit:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
- name: Check eight-language navigation and coverage
|
|
32
|
+
run: python scripts/sync_i18n_nav.py --check
|
|
33
|
+
- name: Check German, French, and Russian structural parity
|
|
34
|
+
run: python scripts/audit_i18n_parity.py --languages fr de ru
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Package Smoke
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "pyproject.toml"
|
|
8
|
+
- "src/**"
|
|
9
|
+
- ".github/workflows/package-smoke.yml"
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
wheel:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
- name: Build wheel and sdist
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
python -m pip install build twine
|
|
27
|
+
python -m build
|
|
28
|
+
python -m twine check dist/*
|
|
29
|
+
- name: Install clean wheel
|
|
30
|
+
shell: bash
|
|
31
|
+
run: |
|
|
32
|
+
wheel="$(ls dist/*.whl)"
|
|
33
|
+
python -m venv .wheel-smoke
|
|
34
|
+
.wheel-smoke/bin/python -m pip install --upgrade pip
|
|
35
|
+
.wheel-smoke/bin/python -m pip install "$wheel"
|
|
36
|
+
- name: Smoke installed entry points
|
|
37
|
+
shell: bash
|
|
38
|
+
run: |
|
|
39
|
+
.wheel-smoke/bin/execweave --help
|
|
40
|
+
.wheel-smoke/bin/execweave top --help
|
|
41
|
+
.wheel-smoke/bin/execweave-top --help
|
|
42
|
+
.wheel-smoke/bin/execweave-scalability --help
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Scalability Benchmark
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "src/execweave/graph.py"
|
|
8
|
+
- "src/execweave/live.py"
|
|
9
|
+
- "src/execweave/scalability_benchmark.py"
|
|
10
|
+
- "pyproject.toml"
|
|
11
|
+
- ".github/workflows/scalability.yml"
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
benchmark:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 15
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
- uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.12"
|
|
26
|
+
- name: Install package
|
|
27
|
+
run: python -m pip install -e .
|
|
28
|
+
- name: Run 10k / 100k / 1M benchmark
|
|
29
|
+
run: |
|
|
30
|
+
execweave-scalability \
|
|
31
|
+
--sizes 10000,100000,1000000 \
|
|
32
|
+
--resources 10000 \
|
|
33
|
+
--output-json scalability-results.json
|
|
34
|
+
- name: Validate benchmark invariants
|
|
35
|
+
run: |
|
|
36
|
+
python - <<'PY'
|
|
37
|
+
import json
|
|
38
|
+
from pathlib import Path
|
|
39
|
+
|
|
40
|
+
payload = json.loads(Path("scalability-results.json").read_text(encoding="utf-8"))
|
|
41
|
+
points = payload["points"]
|
|
42
|
+
assert [p["event_count"] for p in points] == [10_000, 100_000, 1_000_000]
|
|
43
|
+
assert all(p["retained_event_ids"] == 0 for p in points)
|
|
44
|
+
assert all(p["events_per_second"] > 0 for p in points)
|
|
45
|
+
assert all(p["snapshot_bytes"] > 0 for p in points)
|
|
46
|
+
assert points[-1]["node_count"] == 10_001
|
|
47
|
+
assert points[-1]["edge_count"] == 10_000
|
|
48
|
+
print(json.dumps(points, indent=2))
|
|
49
|
+
PY
|
|
50
|
+
- uses: actions/upload-artifact@v4
|
|
51
|
+
with:
|
|
52
|
+
name: execweave-scalability
|
|
53
|
+
path: scalability-results.json
|
|
54
|
+
if-no-files-found: error
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Wheel Install Smoke
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "pyproject.toml"
|
|
8
|
+
- "src/execweave/**"
|
|
9
|
+
- "scripts/check_wheel_install.py"
|
|
10
|
+
- ".github/workflows/wheel-smoke.yml"
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
wheel-smoke:
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
22
|
+
runs-on: ${{ matrix.os }}
|
|
23
|
+
timeout-minutes: 15
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
- uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.12"
|
|
29
|
+
- name: Build wheel
|
|
30
|
+
run: |
|
|
31
|
+
python -m pip install --upgrade build
|
|
32
|
+
python -m build --wheel
|
|
33
|
+
- name: Clean wheel install smoke
|
|
34
|
+
run: python scripts/check_wheel_install.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: execweave
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
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
|
|
@@ -56,13 +56,18 @@ Description-Content-Type: text/markdown
|
|
|
56
56
|
|
|
57
57
|
# ExecWeave
|
|
58
58
|
|
|
59
|
+
<!-- i18n-nav:start -->
|
|
59
60
|
<p align="center">
|
|
60
61
|
<strong>English</strong> |
|
|
61
62
|
<a href="README.zh-TW.md">繁體中文</a> |
|
|
62
63
|
<a href="README.zh-CN.md">简体中文</a> |
|
|
63
64
|
<a href="README.ja.md">日本語</a> |
|
|
64
|
-
<a href="README.ko.md">한국어</a>
|
|
65
|
+
<a href="README.ko.md">한국어</a> |
|
|
66
|
+
<a href="README.fr.md">Français</a> |
|
|
67
|
+
<a href="README.de.md">Deutsch</a> |
|
|
68
|
+
<a href="README.ru.md">Русский</a>
|
|
65
69
|
</p>
|
|
70
|
+
<!-- i18n-nav:end -->
|
|
66
71
|
|
|
67
72
|
**See what AI agents actually do on your machine.**
|
|
68
73
|
|
|
@@ -70,12 +75,22 @@ ExecWeave is an open-source, local-first observability project that turns AI-age
|
|
|
70
75
|
|
|
71
76
|
> **Event is ground truth. The graph is a materialized view.**
|
|
72
77
|
|
|
78
|
+
<p align="center">
|
|
79
|
+
<img src="docs/assets/execweave-viewer.png" alt="ExecWeave Live execution graph" width="100%">
|
|
80
|
+
</p>
|
|
81
|
+
|
|
73
82
|
## Install
|
|
74
83
|
|
|
75
|
-
ExecWeave
|
|
84
|
+
ExecWeave is published on PyPI as a standard Python wheel/sdist. Install the latest published release with:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
python -m pip install -U execweave
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The `main` branch may contain a newer patch than the current PyPI release. To test the latest mainline build directly:
|
|
76
91
|
|
|
77
92
|
```bash
|
|
78
|
-
python -m pip install "execweave @ git+https://github.com/Irish-kw/ExecWeave.git@main"
|
|
93
|
+
python -m pip install --upgrade --force-reinstall "execweave @ git+https://github.com/Irish-kw/ExecWeave.git@main"
|
|
79
94
|
```
|
|
80
95
|
|
|
81
96
|
For development:
|
|
@@ -86,18 +101,71 @@ cd ExecWeave
|
|
|
86
101
|
python -m pip install -e ".[dev]"
|
|
87
102
|
```
|
|
88
103
|
|
|
89
|
-
|
|
104
|
+
Live OS-runtime telemetry works with **any local command**. The names below are examples, not a whitelist:
|
|
90
105
|
|
|
91
106
|
```bash
|
|
92
|
-
|
|
107
|
+
# Agent / IDE CLIs
|
|
108
|
+
execweave live --open -- claude
|
|
109
|
+
execweave live --open -- codex
|
|
110
|
+
execweave live --open -- gemini
|
|
111
|
+
execweave live --open -- cursor
|
|
112
|
+
execweave live --open -- opencode
|
|
113
|
+
|
|
114
|
+
# Any local program
|
|
115
|
+
execweave live --open -- python my_agent.py
|
|
116
|
+
|
|
117
|
+
# A local model runtime launched under ExecWeave
|
|
118
|
+
execweave live --open -- ollama serve
|
|
93
119
|
```
|
|
94
120
|
|
|
95
|
-
|
|
121
|
+
`execweave live` streams process, file, and network evidence for the command tree it launches. It does **not** automatically inject Agent semantic hooks, model-runtime API metadata, or inference-gateway routing metadata into the Live Viewer.
|
|
122
|
+
|
|
123
|
+
#### Live capability matrix
|
|
124
|
+
|
|
125
|
+
| Integration | Direct OS-runtime live | Specialized metadata | Automatically in Live Viewer |
|
|
126
|
+
| --- | --- | --- | --- |
|
|
127
|
+
| Claude Code | Yes | `execweave-claude-record` / hooks | No |
|
|
128
|
+
| OpenAI Codex | Yes | `execweave-codex-record` / hooks | No |
|
|
129
|
+
| Gemini CLI | Yes | `execweave-gemini-record` / hooks | No |
|
|
130
|
+
| Cursor | Yes | `execweave-cursor-record` / hooks | No |
|
|
131
|
+
| OpenCode | Yes | `execweave-opencode-record` / plugin | No |
|
|
132
|
+
| Ollama | Yes, when launched under ExecWeave (for example `ollama serve`) | `execweave-model-runtime event/probe --runtime ollama` | No |
|
|
133
|
+
| llama.cpp | Yes, when its local server is launched under ExecWeave | `execweave-model-runtime event/probe --runtime llamacpp` | No |
|
|
134
|
+
| vLLM | Yes, when its local server is launched under ExecWeave | `execweave-model-runtime event/probe --runtime vllm` | No |
|
|
135
|
+
| LM Studio | Yes only for a local process launched under ExecWeave; an already-running server is not attached | `execweave-model-runtime event/probe --runtime lmstudio` | No |
|
|
136
|
+
| LiteLLM Proxy | Yes, when the local proxy is launched under ExecWeave | `execweave-inference-gateway event --gateway litellm` | No |
|
|
137
|
+
| OpenRouter | No direct remote-service process; run the local client/Agent under `live` instead | `execweave-inference-gateway event/generation --gateway openrouter` | No |
|
|
138
|
+
|
|
139
|
+
For an already-running Ollama server, use `execweave-model-runtime probe --runtime ollama` to snapshot loaded-model state. For OpenRouter, `live` can observe the local client and its network activity, while gateway routing/usage metadata remains a separate evidence layer.
|
|
140
|
+
|
|
141
|
+
<!-- v0.6.3-live -->
|
|
142
|
+
### v0.6.3 live observability
|
|
143
|
+
|
|
144
|
+
Use the same live session in either the browser or terminal:
|
|
96
145
|
|
|
97
146
|
```bash
|
|
98
|
-
execweave
|
|
147
|
+
execweave top -- codex # Terminal dashboard
|
|
148
|
+
execweave top --open -- codex # Terminal + Web Viewer
|
|
99
149
|
```
|
|
100
150
|
|
|
151
|
+
Live updates use incremental snapshots/deltas with bounded history instead of repeatedly rebuilding and transferring the full graph. Live and standalone viewers support a persistent Dark/Light theme switch. On Linux, very large recursive filesystem scopes are preflighted and automatically fall back from inotify to polling when needed, so an exhausted inotify watch pool does not abort the session.
|
|
152
|
+
|
|
153
|
+
`live` is a generic OS-runtime view rather than an integration whitelist. Specialized Agent semantic, model-runtime, and gateway metadata remain separate evidence layers and are not automatically injected into the Live Viewer in v0.6.3.
|
|
154
|
+
|
|
155
|
+
Run the reproducible graph scalability benchmark with `execweave-scalability`; CI covers 10k, 100k, and 1M synthetic events.
|
|
156
|
+
|
|
157
|
+
#### Scalability benchmark
|
|
158
|
+
|
|
159
|
+
Reference GitHub Actions result for the incremental `GraphAccumulator` synthetic workload (`retain_event_ids=False`):
|
|
160
|
+
|
|
161
|
+
| Events | Apply time | Throughput | Nodes | Edges | Apply RSS Δ | Snapshot |
|
|
162
|
+
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
163
|
+
| 10k | 0.114 s | 87,681 ev/s | 10,001 | 10,000 | 35.9 MiB | 8.5 MiB |
|
|
164
|
+
| 100k | 0.654 s | 152,816 ev/s | 10,001 | 10,000 | 25.8 MiB | 8.6 MiB |
|
|
165
|
+
| **1M** | **6.087 s** | **164,273 ev/s** | **10,001** | **10,000** | **23.5 MiB** | **8.6 MiB** |
|
|
166
|
+
|
|
167
|
+
At **1,000,000 events**, the incremental in-memory graph did not duplicate raw event IDs; raw evidence remains separate from the materialized graph. This benchmark measures graph accumulation and snapshot materialization, not end-to-end collector or browser throughput.
|
|
168
|
+
|
|
101
169
|
Or build the full artifact pipeline:
|
|
102
170
|
|
|
103
171
|
```bash
|
|
@@ -266,10 +334,24 @@ execweave run --backend portable -- your-command
|
|
|
266
334
|
execweave run --backend strace -- your-command
|
|
267
335
|
```
|
|
268
336
|
|
|
337
|
+
Since v0.6.1, child commands are resolved through a shared cross-platform launcher before execution. Linux and macOS retain normal PATH executable behavior. Windows resolves `.exe`, `.cmd`, and `.bat` launchers through PATH/PATHEXT, while an explicit `.ps1` launcher is invoked through PowerShell. Dedicated Windows CI exercises Codex and Cursor recorders from both `cmd.exe` and Windows PowerShell; the full Cursor semantic/correlation integration remains covered by the normal Windows, macOS, and Ubuntu matrix.
|
|
338
|
+
|
|
269
339
|
Portable filesystem watching is session-correlated rather than process-causal, and short-lived processes can be missed between polling intervals. The Linux `strace` path captures process-attributed syscall evidence after the command exits.
|
|
270
340
|
|
|
271
341
|
Future native collectors remain planned for Linux eBPF, Windows ETW, and macOS Endpoint Security.
|
|
272
342
|
|
|
343
|
+
## v0.6.3 safety patch
|
|
344
|
+
|
|
345
|
+
v0.6.3 hardens long-running and high-cardinality sessions without changing evidence semantics or graph schema 0.1:
|
|
346
|
+
|
|
347
|
+
- Broad recursive filesystem scopes such as a filesystem root, user home, or users-home parent are no longer recursively observed as-is; process, network, and semantic collection can continue.
|
|
348
|
+
- Standalone and Live Viewers stop SVG materialization above the safety budget (1,500 nodes, 4,000 edges, or an estimated 5,000 SVG elements) instead of exhausting browser memory. The canonical `graph.json` evidence artifact remains complete.
|
|
349
|
+
- Viewer layout/fit no longer spreads arbitrarily large arrays into `Math.min` / `Math.max`, and edge redraw during node dragging is animation-frame throttled.
|
|
350
|
+
- The Live server tails only newly appended `events.jsonl` bytes from a byte offset and incrementally updates an in-memory `GraphAccumulator`. `/graph.json` polling no longer replays the full event history; an incomplete trailing JSONL line is buffered until its newline arrives.
|
|
351
|
+
- Event-count or aggregate-count-only changes refresh Live stats/edge labels without a full topology redraw. After the Viewer budget is exceeded, live `/graph.json` switches to a counts-only compact payload while collection and the final canonical validation/full `graph.json` continue unchanged.
|
|
352
|
+
|
|
353
|
+
This is a polling + incremental-ingestion safety patch, not an SSE, SQLite, Rust, or Canvas architecture migration.
|
|
354
|
+
|
|
273
355
|
## Layered artifacts
|
|
274
356
|
|
|
275
357
|
A provider-integrated run can produce:
|
|
@@ -321,9 +403,9 @@ Security findings remain explicit about evidence limits. A possible sensitive-fi
|
|
|
321
403
|
|
|
322
404
|
## Current status
|
|
323
405
|
|
|
324
|
-
ExecWeave is currently **v0.6.
|
|
406
|
+
ExecWeave `main` is currently **v0.6.3** and under active development.
|
|
325
407
|
|
|
326
|
-
The baseline includes runtime collection, graph materialization/querying, standalone/live Viewer, Claude/Codex/Gemini/Cursor/OpenCode semantic integrations, conservative Tool → Process correlation, OpenRouter/LiteLLM gateway metadata, Ollama/llama.cpp/vLLM/LM Studio runtime metadata, exact Gateway ↔ Model Runtime request identity, PyPI
|
|
408
|
+
The baseline includes runtime collection, graph materialization/querying, standalone/live Viewer, Claude/Codex/Gemini/Cursor/OpenCode semantic integrations, conservative Tool → Process correlation, OpenRouter/LiteLLM gateway metadata, Ollama/llama.cpp/vLLM/LM Studio runtime metadata, exact Gateway ↔ Model Runtime request identity, published PyPI wheel/sdist packaging, reproducible overhead benchmarking, cross-platform command-launcher compatibility, large-graph browser safety guards, incremental Live JSONL tail/cache, and cross-platform CI on Python 3.10/3.12.
|
|
327
409
|
|
|
328
410
|
## Privacy
|
|
329
411
|
|
|
@@ -337,7 +419,7 @@ Review artifacts before sharing them.
|
|
|
337
419
|
- [`Phase 2 — Execution Graph`](docs/phase-2-execution-graph.md)
|
|
338
420
|
- [`Live Graph`](docs/live-graph.md)
|
|
339
421
|
- [`Semantic Telemetry`](docs/semantic-telemetry.md)
|
|
340
|
-
- [`Claude Code Hooks`](docs/claude-
|
|
422
|
+
- [`Claude Code Hooks`](docs/claude-hooks.md)
|
|
341
423
|
- [`OpenAI Codex Hooks`](docs/codex-hooks.md)
|
|
342
424
|
- [`Gemini CLI Hooks`](docs/gemini-hooks.md)
|
|
343
425
|
- [`Cursor Hooks`](docs/cursor-hooks.md)
|
|
@@ -353,4 +435,4 @@ Contributions are welcome, especially around native OS collectors, additional Ag
|
|
|
353
435
|
|
|
354
436
|
## License
|
|
355
437
|
|
|
356
|
-
See [`LICENSE`](LICENSE).
|
|
438
|
+
See [`LICENSE`](LICENSE).
|