synapse-cli-agent 0.1.28__tar.gz → 0.1.30__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.
- synapse_cli_agent-0.1.30/.github/workflows/release.yml +163 -0
- synapse_cli_agent-0.1.30/AGENTS.md +136 -0
- synapse_cli_agent-0.1.30/CHANGELOG.md +554 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/PKG-INFO +7 -2
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/README.md +5 -1
- synapse_cli_agent-0.1.30/assets/demo.gif +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/architecture.md +2 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/pyproject.toml +3 -2
- synapse_cli_agent-0.1.30/release_body.md +13 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/Cargo.lock +1 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/Cargo.toml +1 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/pyproject.toml +1 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/__main__.py +1 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/app/agent.py +7 -3
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/cli.py +18 -12
- synapse_cli_agent-0.1.30/src/synapse/entry.py +22 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/__init__.py +22 -2
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/llm_openai_compat.py +32 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/models/registry.py +33 -4
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/observability/exit_trace.py +12 -34
- synapse_cli_agent-0.1.30/src/synapse/observability/startup_trace.py +198 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/agent_loop/model.py +6 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/agent_loop/turn.py +5 -1
- synapse_cli_agent-0.1.30/src/synapse/runtime/cancellation.py +24 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/parser.py +4 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/stream_events.py +2 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/cancel_repair.py +34 -7
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/agent_lifecycle.py +51 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/model_picker.py +4 -1
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/image_viewer.py +6 -1
- synapse_cli_agent-0.1.30/src/synapse/ui/mermaid_image.py +148 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/rendering.py +188 -5
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/status_controller.py +2 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/stream.py +4 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/transcript_blocks.py +111 -11
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/tui.py +19 -1
- synapse_cli_agent-0.1.30/src/synapse/ui/tui_launch.py +141 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/tui_styles.py +28 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn/controller.py +239 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_agent_lifecycle.py +38 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_agent_turn_runtime.py +25 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_cancel_repair.py +36 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_capabilities.py +17 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_dialogs.py +2 -2
- synapse_cli_agent-0.1.30/tests/test_entry.py +34 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_image_render.py +11 -0
- synapse_cli_agent-0.1.30/tests/test_image_viewer.py +40 -0
- synapse_cli_agent-0.1.30/tests/test_mermaid_image.py +485 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_openai_compat_reasoning.py +12 -0
- synapse_cli_agent-0.1.30/tests/test_startup_trace.py +210 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_stream_cancel.py +25 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_turn_controller.py +393 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/uv.lock +17 -2
- synapse_cli_agent-0.1.28/.github/workflows/release.yml +0 -71
- synapse_cli_agent-0.1.28/AGENTS.md +0 -185
- synapse_cli_agent-0.1.28/CHANGELOG.md +0 -536
- synapse_cli_agent-0.1.28/release_body.md +0 -24
- synapse_cli_agent-0.1.28/src/synapse/observability/startup_trace.py +0 -127
- synapse_cli_agent-0.1.28/src/synapse/ui/tui_launch.py +0 -114
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.dockerignore +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.github/workflows/ci.yml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.github/workflows/docs.yml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.github/workflows/native-compression-wheels.yml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.github/workflows/native-core-tool-wheels.yml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.gitignore +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.python-version +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/.readthedocs.yaml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/Dockerfile.web +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/LICENSE +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/README.zh-CN.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/agent-studio-prototype/favicon.svg +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/agent-studio-prototype/index.html +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/agent-studio-prototype/script.js +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/agent-studio-prototype/styles.css +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/agent_upstream.txt +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/assets/synapse-logo.svg +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/assets/tui-preview.png +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/cli_upstream.txt +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/debug_compact.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/decode_screenshot.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-development-guide.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/baseline-report.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/decisions.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/index.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/migration.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-0-baseline.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-1-streaming-core.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-2-turn-runtime.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-3-tui-cutover.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-4-session-runtime.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-5-multi-session.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-6-project-runtime.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-7-global-control-plane.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/phase-8-hardening.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/post-review-fix-plan.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/agent-runtime-decoupling/progress.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/architecture-flow.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/cli.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/codex-session-discovery-phase-1.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/codex-session-import-phase-2.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/config.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/design.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/docker-web.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/index.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/install.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/math-formulas-test.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/mcp.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/models.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/native-compression-core.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/native-core-tool.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/permissions.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/quickstart.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/sessions.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/skills.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/smith_output.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/subagent-architecture-survey.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/tool-output-transform.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/tui-cursor-refactor.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/tutorial.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/docs/x-agent-development-guide.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/examples/mcp.example.json +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/examples/models.example.json +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/examples/settings.example.json +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/middleware_upstream.txt +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/mkdocs.yml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/LICENSE +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/NOTICE +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/README.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/python/synapse_core_tool/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/src/file_access.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/src/file_tools.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/src/lib.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/src/math_render.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/src/search.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-core-tool/uv.lock +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/Cargo.lock +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/Cargo.toml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/LICENSE +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/NOTICE +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/README.md +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/pyproject.toml +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/python/synapse_tool_compress_core/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/ccr.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/ccr_in_memory.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/mod.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/relevance/base.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/relevance/bm25.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/signals/keyword_detector.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/signals/line_importance.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/adaptive_sizer.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/anchor_selector.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/code_compressor.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/diff_compressor.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/log_compressor.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/search_compressor.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/analyzer.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/anchors.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/builder.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/classifier.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/classifier.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/compactor.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/formatter.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/ir.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/mod.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/walker.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/config.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/constraints.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/crusher.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/crushers.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/error_keywords.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/field_detect.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/hashing.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/mod.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/observer.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/orchestration.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/outliers.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/planning.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/statistics.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/stats_math.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/traits.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/types.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/rust/synapse-tool-compress-core/src/lib.rs +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/scripts/install.ps1 +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/scripts/release.ps1 +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/scripts/serve_web.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/slash_cmds_upstream.txt +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/app/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/app/agent_assembly.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/app/agent_md.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/compression.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/goal.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/helpers.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/mcp.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/model.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/result.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/sessions.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/slash_cmds.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/slash_complete.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/commands/theme.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/config.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/content/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/content/input_history.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/content/multimodal.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/content/prompts.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/content/skills_catalog.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/model.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/steering.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/store.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/goals/tools.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/checkpoint_seed.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/codex_history.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/codex_import.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/codex_sessions.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/describe_image.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/http_clients.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/llm_openai_websocket.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/mcp_client.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/openai_oauth.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/openai_oauth_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/openai_usage.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/integrations/vision_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/memory/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/memory/auto_recorder.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/memory/embedder.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/memory/long_term.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/models/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/models/config.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/models/helpers.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/models/profile.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/models_registry.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/observability/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/observability/debug_inspector.html +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/observability/debug_server.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/observability/heap_dump.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/observability/llm_debug.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/parallel_subagents.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/planner/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/planner/task_planner.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/projects/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/projects/catalog.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/rag/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/rag/knowledge_base.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/agent_loop/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/agent_loop/request.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/async_runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/backends.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/context_compact.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/debug_capture_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/execute_capture.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/filesystem_tool_prompt_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/fs_permissions.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/harness.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/hitl.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/interaction_ledger.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/model_request_compression_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/pathing.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/projects/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/projects/identity.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/projects/runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/safety.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/session_prewarm.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/sessions/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/sessions/events.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/sessions/manager.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/sessions/persistence.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/sessions/ref.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/sessions/runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/steer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/accumulator.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/adapters.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/events.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/protocol.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/streaming/tool_model.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/subagent_routing.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/subagents.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/timeline.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/token_rate.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/tool_ignore.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/tool_output_eval.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/tool_output_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/tool_output_usage_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/runtime/tool_response_truncate_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/search_index.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/store.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/summary.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/transcript.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/transcript_migration.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/sessions/transcript_projection.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/settings/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/settings/config_paths.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/settings/schema.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/subagent_monitor.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/subagents.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/detection.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/metrics.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/models.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/pipeline.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/repository.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tool_output/transformers.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tools/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tools/describe_image.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tools/filesystem_patch.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tools/filesystem_search.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/tools/session_tools.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/answer_divider.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/codex_usage.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/fast.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/goal.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/key_hints.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/mcp.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/mode.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/model.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/components/thread.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/context.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/bottombar/core.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/chrome/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/chrome/controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/clipboard.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/active_session_switcher.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/base.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/codex_reset.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/codex_session_list.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/compression_diagnostics.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/git_explore.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/mcp_panel.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/safety_panel.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/session_list.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/subagent_monitor.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/theme_designer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/dialogs/theme_picker.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/drawer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/formatters.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/git_explore/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/git_explore/engine.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/git_explore/provider.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/git_explore/unified.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/image_preview.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/image_render.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/math_image.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/prompt_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/selectable_static.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/selectable_text.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/sink.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/steer_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/steer_widget.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/stream_events.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/stream_runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/subagent_status_bar.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/textual_lifecycle.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/textual_stream_sink.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/theme.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/theme_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/timeline.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/tool_blocks.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/components/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/components/branch.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/components/title.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/components/tool_output.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/components/usage.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/components/workspace.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/context.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/core.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/git_changes_popover.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/git_chrome.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/tool_output_popover.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/topbar/widget.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/transcript/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/transcript/controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/transcript/factory.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/transcript/history.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/transcript/state.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn/event_bridge.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn/event_renderer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn/persistence.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn/request.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn_rail.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/turn_rail_widgets.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/user_turn.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/user_turn_block.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/ui/welcome.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/src/synapse/web.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/synapse.cmd +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/__init__.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/agent_stream/core_scenarios.json +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/duplicate_response_item.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/incomplete_and_aborted.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/legacy_compaction.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/normal_completed.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/replacement_history.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/rollback.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/codex_rollouts/unsupported_replacement.jsonl +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/sample_repo/calculator.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/sample_repo/test_calculator.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/fixtures/tool_output_eval.json +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_agent_factory.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_async_checkpointer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_backends.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_bottombar_registry.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_checkpoint_seed.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_chrome_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_cli.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_cli_codex_import.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_codex_history.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_codex_import.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_codex_sessions.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_codex_sessions_windows.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_compact_tool_descriptions.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_config.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_context_compact.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_context_window.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_dag_parallel.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_debug_capture_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_debug_inspector.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_describe_image.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_filesystem_patch_tool.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_filesystem_search_tools.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_git_changes_popover.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_git_chrome.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_git_explore.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_goal_live_tui.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_goals.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_heap_dump.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_http_clients.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_input_history.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_iteration_abc.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_layered_config.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_math_image_render.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_mcp_schema.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_mermaid_render.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_middleware_async.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_model_request_compression_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_model_retry.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_multimodal.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_native_math_render.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_openai_oauth.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_openai_oauth_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_openai_usage.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_openai_websocket.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_pathing.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_project_catalog.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_project_drawer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_project_runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_project_switch.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_prompt_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_prompts.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_runtime_hardening.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_runtime_manager.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_runtime_streaming.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_safety.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_search_index.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_session_prewarm.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_session_runtime.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_session_store.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_session_summary.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_slash_and_mcp.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_slash_complete.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_slash_effects.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_startup_defer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_steer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_steer_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_stream_semantic_fixtures.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_stream_tool_items.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_stream_ui.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_subagent_monitor_dialog.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_subagent_status.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_textual_stream_sink.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_theme.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_theme_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_timeline.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_token_rate.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_ignore.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_intent.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_output.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_output_eval.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_output_slash.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_output_usage_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tool_response_truncate_middleware.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_topbar_context_ratio.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_topbar_registry.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_transcript.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_transcript_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_transcript_history.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_transcript_history_controller.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_transcript_migration.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_transcript_projection.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tui_active_session_switcher.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tui_codex_import.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_tui_selection.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_turn_event_renderer.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_turn_rail_minimap.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_turn_request.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_usage_restore.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_user_turn_style.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/test_welcome.py +0 -0
- {synapse_cli_agent-0.1.28 → synapse_cli_agent-0.1.30}/tests/tool_output_plugin_fixture.py +0 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Install uv
|
|
18
|
+
uses: astral-sh/setup-uv@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Extract changelog section
|
|
23
|
+
run: |
|
|
24
|
+
VERSION="${GITHUB_REF#refs/tags/}" python -c "
|
|
25
|
+
import os, re
|
|
26
|
+
ver = os.environ['VERSION']
|
|
27
|
+
with open('CHANGELOG.md', 'r', encoding='utf-8') as f:
|
|
28
|
+
content = f.read()
|
|
29
|
+
pattern = rf'(?ms)^## {re.escape(ver)}\n.*?(?=\n## |\Z)'
|
|
30
|
+
m = re.search(pattern, content)
|
|
31
|
+
if m:
|
|
32
|
+
out = m.group().strip()
|
|
33
|
+
with open('release_body.md', 'w', encoding='utf-8') as f:
|
|
34
|
+
f.write(out)
|
|
35
|
+
print(f'Extracted {len(out)} chars for {ver}')
|
|
36
|
+
else:
|
|
37
|
+
raise SystemExit(f'ERROR: ## {ver} section not found in CHANGELOG.md')
|
|
38
|
+
"
|
|
39
|
+
|
|
40
|
+
- name: Build distributions
|
|
41
|
+
run: uv build
|
|
42
|
+
|
|
43
|
+
- name: Upload distribution artifacts
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: python-package-distributions
|
|
47
|
+
path: dist/
|
|
48
|
+
|
|
49
|
+
- name: Upload changelog body
|
|
50
|
+
uses: actions/upload-artifact@v4
|
|
51
|
+
with:
|
|
52
|
+
name: release-body
|
|
53
|
+
path: release_body.md
|
|
54
|
+
if-no-files-found: error
|
|
55
|
+
|
|
56
|
+
build-executables:
|
|
57
|
+
name: executable (${{ matrix.name }})
|
|
58
|
+
runs-on: ${{ matrix.os }}
|
|
59
|
+
strategy:
|
|
60
|
+
fail-fast: false
|
|
61
|
+
matrix:
|
|
62
|
+
include:
|
|
63
|
+
- name: windows
|
|
64
|
+
os: windows-latest
|
|
65
|
+
artifact: executable-windows
|
|
66
|
+
# macOS executables target Apple Silicon only; Intel macOS is unsupported
|
|
67
|
+
# (matches the native-core-tool wheels matrix).
|
|
68
|
+
- name: macos
|
|
69
|
+
os: macos-latest
|
|
70
|
+
artifact: executable-macos
|
|
71
|
+
- name: linux
|
|
72
|
+
os: ubuntu-latest
|
|
73
|
+
artifact: executable-linux
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- name: Install uv
|
|
78
|
+
uses: astral-sh/setup-uv@v5
|
|
79
|
+
with:
|
|
80
|
+
python-version: "3.12"
|
|
81
|
+
|
|
82
|
+
- name: Install Rust toolchain
|
|
83
|
+
uses: dtolnay/rust-toolchain@stable
|
|
84
|
+
|
|
85
|
+
- name: Install dependencies (builds local synapse-core-tool)
|
|
86
|
+
run: uv sync --frozen
|
|
87
|
+
|
|
88
|
+
- name: Install PyInstaller
|
|
89
|
+
run: uv pip install pyinstaller
|
|
90
|
+
|
|
91
|
+
- name: Package executable with PyInstaller
|
|
92
|
+
shell: pwsh
|
|
93
|
+
run: |
|
|
94
|
+
uv run pyinstaller --noconfirm --clean --onefile --name synapse `
|
|
95
|
+
--paths src `
|
|
96
|
+
--collect-all textual `
|
|
97
|
+
--collect-all textual_serve `
|
|
98
|
+
--collect-all textual_image `
|
|
99
|
+
--collect-all termaid `
|
|
100
|
+
--collect-all texicode `
|
|
101
|
+
src/synapse/entry.py
|
|
102
|
+
|
|
103
|
+
- name: Fix executable permission (Unix)
|
|
104
|
+
if: runner.os != 'Windows'
|
|
105
|
+
run: chmod +x dist/synapse
|
|
106
|
+
|
|
107
|
+
- name: Upload executable artifact
|
|
108
|
+
uses: actions/upload-artifact@v4
|
|
109
|
+
with:
|
|
110
|
+
name: ${{ matrix.artifact }}
|
|
111
|
+
path: dist/synapse*
|
|
112
|
+
if-no-files-found: error
|
|
113
|
+
|
|
114
|
+
release:
|
|
115
|
+
needs: [build, build-executables]
|
|
116
|
+
runs-on: ubuntu-latest
|
|
117
|
+
permissions:
|
|
118
|
+
contents: write
|
|
119
|
+
steps:
|
|
120
|
+
- name: Download distribution artifacts
|
|
121
|
+
uses: actions/download-artifact@v4
|
|
122
|
+
with:
|
|
123
|
+
name: python-package-distributions
|
|
124
|
+
path: dist
|
|
125
|
+
|
|
126
|
+
- name: Download executable artifacts
|
|
127
|
+
uses: actions/download-artifact@v4
|
|
128
|
+
with:
|
|
129
|
+
pattern: executable-*
|
|
130
|
+
merge-multiple: true
|
|
131
|
+
path: executables
|
|
132
|
+
|
|
133
|
+
- name: Download changelog body
|
|
134
|
+
uses: actions/download-artifact@v4
|
|
135
|
+
with:
|
|
136
|
+
name: release-body
|
|
137
|
+
path: .
|
|
138
|
+
|
|
139
|
+
- name: Create GitHub Release
|
|
140
|
+
uses: softprops/action-gh-release@v2
|
|
141
|
+
with:
|
|
142
|
+
files: |
|
|
143
|
+
dist/*
|
|
144
|
+
executables/*
|
|
145
|
+
body_path: release_body.md
|
|
146
|
+
|
|
147
|
+
publish-pypi:
|
|
148
|
+
needs: build
|
|
149
|
+
runs-on: ubuntu-latest
|
|
150
|
+
environment:
|
|
151
|
+
name: pypi
|
|
152
|
+
url: https://pypi.org/p/synapse-cli-agent
|
|
153
|
+
permissions:
|
|
154
|
+
id-token: write
|
|
155
|
+
steps:
|
|
156
|
+
- name: Download distribution artifacts
|
|
157
|
+
uses: actions/download-artifact@v4
|
|
158
|
+
with:
|
|
159
|
+
name: python-package-distributions
|
|
160
|
+
path: dist/
|
|
161
|
+
|
|
162
|
+
- name: Publish package distributions to PyPI
|
|
163
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Synapse Collaboration Guide
|
|
2
|
+
|
|
3
|
+
## Repository layout
|
|
4
|
+
|
|
5
|
+
| Path | Responsibility |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| `src/synapse/app/` | Agent assembly and `AGENTS.md` injection |
|
|
8
|
+
| `src/synapse/commands/` | Slash command parsing, completion, and results |
|
|
9
|
+
| `src/synapse/content/` | Prompts, skills, input history, multimodal content |
|
|
10
|
+
| `src/synapse/goals/` | Goal accounting, steering, and persistence |
|
|
11
|
+
| `src/synapse/integrations/` | MCP, model transport, Codex import, vision |
|
|
12
|
+
| `src/synapse/memory/` | Long-term memory (SQLite + embeddings) |
|
|
13
|
+
| `src/synapse/models/` | Model profiles, registry, config helpers |
|
|
14
|
+
| `src/synapse/observability/` | Startup and runtime observability |
|
|
15
|
+
| `src/synapse/planner/` | LLM-driven task decomposition |
|
|
16
|
+
| `src/synapse/projects/` | User-layer project catalog |
|
|
17
|
+
| `src/synapse/rag/` | Project document index and retrieval |
|
|
18
|
+
| `src/synapse/runtime/` | Backends, middleware, compression, steer, safety, async runtime |
|
|
19
|
+
| `src/synapse/sessions/` | Sessions, transcripts, recap, persistence |
|
|
20
|
+
| `src/synapse/settings/` | Layered config paths, Settings schema, loading |
|
|
21
|
+
| `src/synapse/tool_output/` | Reversible tool output detection, transforms, storage, metrics |
|
|
22
|
+
| `src/synapse/tools/` | Custom tools injected into the agent |
|
|
23
|
+
| `src/synapse/ui/` | Textual TUI, stream, timeline, dialogs, topbar/bottombar |
|
|
24
|
+
| `tests/` | Python tests, usually mirroring domain modules |
|
|
25
|
+
| `rust/synapse-core-tool/` | Native filesystem tools (read/edit/patch/search) and math rendering; published to PyPI as `synapse-core-tool` |
|
|
26
|
+
| `rust/synapse-tool-compress-core/` | Optional native tool-output compression core |
|
|
27
|
+
| `docs/`, `mkdocs.yml` | User docs and MkDocs config |
|
|
28
|
+
| `.github/workflows/` | CI, docs, Python release, native wheel builds |
|
|
29
|
+
|
|
30
|
+
## Architecture & compatibility
|
|
31
|
+
|
|
32
|
+
- `src/synapse/app/agent.py` is the assembly layer; keep domain algorithms in their own packages.
|
|
33
|
+
- New features belong in the matching domain package; cross-domain wiring goes in `app/` or an explicit runtime middleware.
|
|
34
|
+
- `src/synapse/config.py` is a compatibility re-export layer. Import from `synapse.settings` in new code; keep legacy import paths working.
|
|
35
|
+
- `__init__.py` exports are public API. Keep necessary re-exports when moving implementations.
|
|
36
|
+
- Config merges user and project layers. When changing Settings, update `src/synapse/settings/schema.py`, `src/synapse/settings/config_paths.py`, `tests/test_config.py`, `tests/test_layered_config.py`, and the user docs (`README.md`, `docs/config.md`).
|
|
37
|
+
- `AGENTS.md` is statically injected by the agent-md middleware (`src/synapse/app/agent_md.py`), independent of writable memory; never route it back into memory writes.
|
|
38
|
+
|
|
39
|
+
## Coding standards
|
|
40
|
+
|
|
41
|
+
- Ruff is the only automated Python baseline: line length 100, target Python 3.12, rules `E/F/I/B/UP`.
|
|
42
|
+
- Annotate new or modified public functions, complex state transitions, and compatibility branches.
|
|
43
|
+
- Catch broad exceptions only at explicit degradation boundaries, and explain the fallback; never swallow core business errors silently.
|
|
44
|
+
- Avoid unbounded reads, searches, and terminal output; cap logs, tool results, and external data.
|
|
45
|
+
- Never leak API keys, tokens, `.env` contents, or private user config in code, tests, docs, or output.
|
|
46
|
+
- Update README/docs when user-visible behavior changes; skip doc churn for internal-only changes.
|
|
47
|
+
|
|
48
|
+
## Development & testing
|
|
49
|
+
|
|
50
|
+
Run `uv sync` after the first install or dependency changes.
|
|
51
|
+
|
|
52
|
+
Verification order: narrowest test → domain tests → full checks.
|
|
53
|
+
|
|
54
|
+
```powershell
|
|
55
|
+
uv run --no-sync pytest tests/test_x.py -q
|
|
56
|
+
uv run --no-sync pytest tests/test_x.py::test_case_name -q
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
| Change area | Preferred tests |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| settings/models | `tests/test_config.py`, `tests/test_layered_config.py`, model tests |
|
|
62
|
+
| backend/safety/runtime | `tests/test_backends.py`, `tests/test_safety.py`, middleware tests |
|
|
63
|
+
| tool output/compression | `tests/test_tool_output.py`, `tests/test_tool_output_*`, request compression tests |
|
|
64
|
+
| sessions/Codex import | `tests/test_session_*`, `tests/test_transcript.py`, `tests/test_codex_*` |
|
|
65
|
+
| CLI/slash commands | `tests/test_cli.py`, `tests/test_slash_*` |
|
|
66
|
+
| TUI/widgets/dialogs | `tests/test_tui_*`, `tests/test_stream_*`, `tests/test_dialogs.py`, component tests |
|
|
67
|
+
|
|
68
|
+
Full checks:
|
|
69
|
+
|
|
70
|
+
```powershell
|
|
71
|
+
uv run --no-sync ruff check .
|
|
72
|
+
uv run --no-sync pytest -q
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
CI runs lint on ubuntu-latest and tests on Windows/Linux with Python 3.12/3.13. Platform-specific changes must at least pass on the current machine and be reviewed for the other platform.
|
|
76
|
+
|
|
77
|
+
Docs and packaging:
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
uv run --no-sync mkdocs build # after touching docs/, README.md, or mkdocs.yml
|
|
81
|
+
uv build # after packaging/entry-point changes
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Rust/PyO3 native crates
|
|
85
|
+
|
|
86
|
+
Two optional crates; the Python app must work without their wheels and must keep `ImportError`/`OSError` fallbacks.
|
|
87
|
+
|
|
88
|
+
- `rust/synapse-core-tool` (`synapse-core-tool` on PyPI): native filesystem tools (read/edit/patch/search) and math rendering. Release with tag `synapse-core-tool-v*`; `native-core-tool-wheels.yml` builds wheels and publishes to GitHub Release + PyPI. Keep the `pyproject.toml` version in sync with `Cargo.toml` — maturin names wheels from `pyproject.toml`.
|
|
89
|
+
- `rust/synapse-tool-compress-core`: native tool-output compression core. Release with tag `synapse-tool-compress-core-v*`; `native-compression-wheels.yml` publishes wheels to GitHub Release.
|
|
90
|
+
|
|
91
|
+
When changing either crate, at least run:
|
|
92
|
+
|
|
93
|
+
```powershell
|
|
94
|
+
cargo test --manifest-path rust/<crate>/Cargo.toml
|
|
95
|
+
cargo fmt --manifest-path rust/<crate>/Cargo.toml --check
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
If Python bindings/APIs change, build or install the local extension and run the related Python tests.
|
|
99
|
+
|
|
100
|
+
Keep the Apache-2.0 SPDX headers, attribution, `LICENSE`, and `NOTICE` under `rust/synapse-tool-compress-core/src/headroom_port/`; do not introduce excluded network calls or model downloads.
|
|
101
|
+
|
|
102
|
+
## Release process
|
|
103
|
+
|
|
104
|
+
Before any `git push`, ask the user: "Do we need to tag a release this time?"
|
|
105
|
+
|
|
106
|
+
If releasing:
|
|
107
|
+
|
|
108
|
+
1. Read the current version from `pyproject.toml` and let the user confirm or override it.
|
|
109
|
+
2. Review changes since the last `v*` tag with `git log`.
|
|
110
|
+
3. Add a `## v{version}` section at the top of `CHANGELOG.md`; the heading must match the tag exactly, group entries by New Features / Bug Fixes / Engineering, and write entries in English (the section becomes the GitHub Release notes).
|
|
111
|
+
4. Update `pyproject.toml` if the version changed; sync `uv.lock` when needed.
|
|
112
|
+
5. Run relevant tests, Ruff, and `uv build`.
|
|
113
|
+
6. Commit with `release: bump to v{version}`.
|
|
114
|
+
7. Run:
|
|
115
|
+
|
|
116
|
+
```powershell
|
|
117
|
+
powershell -ExecutionPolicy Bypass -File scripts/release.ps1
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
8. The script creates and pushes the `v{version}` tag; `release.yml` extracts the matching CHANGELOG section, runs `uv build`, and creates the GitHub Release.
|
|
121
|
+
|
|
122
|
+
## cdp_take_screenshot usage
|
|
123
|
+
|
|
124
|
+
### Known limits
|
|
125
|
+
- `filePath` cannot write into the workspace (browser sandbox); any attempt returns `Access denied`.
|
|
126
|
+
- Without `filePath`, the screenshot is stored as text (with base64) under `/large_tool_results/call_xx_xxx`.
|
|
127
|
+
|
|
128
|
+
### Standard flow: screenshot → decode → describe
|
|
129
|
+
1. Ensure `/decode_screenshot.py` exists (it picks the latest `large_tool_results/call_*`, extracts the base64, and writes `.tmp/screenshot_*.png`).
|
|
130
|
+
2. Run `python decode_screenshot.py`.
|
|
131
|
+
3. Call `describe_image(image_path="/.tmp/screenshot_<timestamp>.png", ...)` with the printed filename.
|
|
132
|
+
|
|
133
|
+
### Notes
|
|
134
|
+
- Every screenshot creates a new file; the script always picks the latest.
|
|
135
|
+
- Output goes to `/.tmp/`, which is gitignored.
|
|
136
|
+
- Use the script instead of decoding manually.
|