synapse-cli-agent 0.1.20__tar.gz → 0.1.22__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. synapse_cli_agent-0.1.20/.github/workflows/native-search-wheels.yml → synapse_cli_agent-0.1.22/.github/workflows/native-core-tool-wheels.yml +11 -11
  2. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/CHANGELOG.md +42 -0
  3. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/PKG-INFO +21 -21
  4. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/agent-development-guide.md +8 -4
  5. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/architecture-flow.md +2 -2
  6. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/architecture.md +3 -3
  7. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/config.md +2 -0
  8. synapse_cli_agent-0.1.22/docs/native-core-tool.md +41 -0
  9. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/permissions.md +3 -2
  10. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/sessions.md +11 -0
  11. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/tutorial.md +16 -10
  12. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/mkdocs.yml +1 -1
  13. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/pyproject.toml +24 -21
  14. synapse_cli_agent-0.1.22/release_body.md +16 -0
  15. {synapse_cli_agent-0.1.20/rust/synapse-search-core → synapse_cli_agent-0.1.22/rust/synapse-core-tool}/Cargo.lock +15 -37
  16. {synapse_cli_agent-0.1.20/rust/synapse-search-core → synapse_cli_agent-0.1.22/rust/synapse-core-tool}/Cargo.toml +6 -5
  17. synapse_cli_agent-0.1.22/rust/synapse-core-tool/README.md +29 -0
  18. {synapse_cli_agent-0.1.20/rust/synapse-search-core → synapse_cli_agent-0.1.22/rust/synapse-core-tool}/pyproject.toml +4 -4
  19. synapse_cli_agent-0.1.22/rust/synapse-core-tool/python/synapse_core_tool/__init__.py +3 -0
  20. synapse_cli_agent-0.1.22/rust/synapse-core-tool/src/file_access.rs +148 -0
  21. synapse_cli_agent-0.1.22/rust/synapse-core-tool/src/file_tools.rs +386 -0
  22. synapse_cli_agent-0.1.22/rust/synapse-core-tool/src/lib.rs +15 -0
  23. synapse_cli_agent-0.1.20/rust/synapse-search-core/src/lib.rs → synapse_cli_agent-0.1.22/rust/synapse-core-tool/src/search.rs +9 -30
  24. {synapse_cli_agent-0.1.20/rust/synapse-search-core → synapse_cli_agent-0.1.22/rust/synapse-core-tool}/uv.lock +3 -3
  25. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/app/agent.py +11 -3
  26. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/content/prompts.py +33 -10
  27. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/mcp_client.py +1 -1
  28. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/models/registry.py +2 -2
  29. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/backends.py +82 -9
  30. synapse_cli_agent-0.1.22/src/synapse/runtime/filesystem_tool_prompt_middleware.py +37 -0
  31. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/harness.py +3 -2
  32. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/model_request_compression_middleware.py +3 -3
  33. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/safety.py +2 -1
  34. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/subagents.py +6 -5
  35. synapse_cli_agent-0.1.22/src/synapse/sessions/search_index.py +282 -0
  36. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/sessions/store.py +8 -2
  37. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/sessions/transcript.py +184 -16
  38. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/settings/schema.py +13 -4
  39. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/detection.py +15 -7
  40. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tools/__init__.py +3 -1
  41. synapse_cli_agent-0.1.22/src/synapse/tools/filesystem_patch.py +33 -0
  42. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tools/session_tools.py +127 -21
  43. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/base.py +40 -5
  44. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/theme.py +1 -1
  45. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/timeline.py +2 -2
  46. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/transcript_blocks.py +9 -6
  47. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/tui.py +371 -31
  48. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/welcome.py +4 -3
  49. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_agent_factory.py +6 -1
  50. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_backends.py +74 -3
  51. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_config.py +20 -0
  52. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_dialogs.py +72 -0
  53. synapse_cli_agent-0.1.22/tests/test_filesystem_patch_tool.py +48 -0
  54. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_layered_config.py +5 -1
  55. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_prompts.py +44 -2
  56. synapse_cli_agent-0.1.22/tests/test_search_index.py +102 -0
  57. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tool_output.py +43 -0
  58. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_transcript.py +126 -0
  59. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tui_selection.py +37 -0
  60. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/uv.lock +25 -31
  61. synapse_cli_agent-0.1.20/docs/native-search-core.md +0 -44
  62. synapse_cli_agent-0.1.20/release_body.md +0 -21
  63. synapse_cli_agent-0.1.20/rust/synapse-search-core/README.md +0 -25
  64. synapse_cli_agent-0.1.20/rust/synapse-search-core/python/synapse_search_core/__init__.py +0 -3
  65. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.github/workflows/ci.yml +0 -0
  66. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.github/workflows/docs.yml +0 -0
  67. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.github/workflows/native-compression-wheels.yml +0 -0
  68. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.github/workflows/release.yml +0 -0
  69. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.gitignore +0 -0
  70. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.python-version +0 -0
  71. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/.readthedocs.yaml +0 -0
  72. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/AGENTS.md +0 -0
  73. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/README.md +0 -0
  74. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/agent_upstream.txt +0 -0
  75. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/cli_upstream.txt +0 -0
  76. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/decode_screenshot.py +0 -0
  77. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/cli.md +0 -0
  78. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/codex-session-discovery-phase-1.md +0 -0
  79. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/codex-session-import-phase-2.md +0 -0
  80. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/design.md +0 -0
  81. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/index.md +0 -0
  82. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/install.md +0 -0
  83. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/mcp.md +0 -0
  84. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/models.md +0 -0
  85. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/native-compression-core.md +0 -0
  86. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/quickstart.md +0 -0
  87. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/skills.md +0 -0
  88. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/smith_output.md +0 -0
  89. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/tool-output-transform.md +0 -0
  90. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/tui-cursor-refactor.md +0 -0
  91. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/docs/x-agent-development-guide.md +0 -0
  92. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/examples/mcp.example.json +0 -0
  93. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/examples/models.example.json +0 -0
  94. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/examples/settings.example.json +0 -0
  95. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/middleware_upstream.txt +0 -0
  96. {synapse_cli_agent-0.1.20/rust/synapse-search-core → synapse_cli_agent-0.1.22/rust/synapse-core-tool}/LICENSE +0 -0
  97. {synapse_cli_agent-0.1.20/rust/synapse-search-core → synapse_cli_agent-0.1.22/rust/synapse-core-tool}/NOTICE +0 -0
  98. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/Cargo.lock +0 -0
  99. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/Cargo.toml +0 -0
  100. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/LICENSE +0 -0
  101. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/NOTICE +0 -0
  102. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/README.md +0 -0
  103. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/pyproject.toml +0 -0
  104. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/python/synapse_tool_compress_core/__init__.py +0 -0
  105. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/ccr.rs +0 -0
  106. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/ccr_in_memory.rs +0 -0
  107. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/mod.rs +0 -0
  108. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/relevance/base.rs +0 -0
  109. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/relevance/bm25.rs +0 -0
  110. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/signals/keyword_detector.rs +0 -0
  111. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/signals/line_importance.rs +0 -0
  112. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/adaptive_sizer.rs +0 -0
  113. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/anchor_selector.rs +0 -0
  114. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/code_compressor.rs +0 -0
  115. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/diff_compressor.rs +0 -0
  116. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/log_compressor.rs +0 -0
  117. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/search_compressor.rs +0 -0
  118. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/analyzer.rs +0 -0
  119. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/anchors.rs +0 -0
  120. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/builder.rs +0 -0
  121. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/classifier.rs +0 -0
  122. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/classifier.rs +0 -0
  123. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/compactor.rs +0 -0
  124. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/formatter.rs +0 -0
  125. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/ir.rs +0 -0
  126. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/mod.rs +0 -0
  127. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/walker.rs +0 -0
  128. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/config.rs +0 -0
  129. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/constraints.rs +0 -0
  130. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/crusher.rs +0 -0
  131. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/crushers.rs +0 -0
  132. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/error_keywords.rs +0 -0
  133. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/field_detect.rs +0 -0
  134. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/hashing.rs +0 -0
  135. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/mod.rs +0 -0
  136. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/observer.rs +0 -0
  137. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/orchestration.rs +0 -0
  138. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/outliers.rs +0 -0
  139. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/planning.rs +0 -0
  140. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/statistics.rs +0 -0
  141. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/stats_math.rs +0 -0
  142. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/traits.rs +0 -0
  143. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/types.rs +0 -0
  144. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/rust/synapse-tool-compress-core/src/lib.rs +0 -0
  145. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/scripts/install.ps1 +0 -0
  146. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/scripts/release.ps1 +0 -0
  147. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/slash_cmds_upstream.txt +0 -0
  148. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/__init__.py +0 -0
  149. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/__main__.py +0 -0
  150. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/app/__init__.py +0 -0
  151. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/app/agent_md.py +0 -0
  152. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/cli.py +0 -0
  153. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/__init__.py +0 -0
  154. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/compression.py +0 -0
  155. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/helpers.py +0 -0
  156. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/mcp.py +0 -0
  157. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/model.py +0 -0
  158. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/result.py +0 -0
  159. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/sessions.py +0 -0
  160. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/slash_cmds.py +0 -0
  161. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/slash_complete.py +0 -0
  162. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/commands/theme.py +0 -0
  163. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/config.py +0 -0
  164. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/content/__init__.py +0 -0
  165. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/content/input_history.py +0 -0
  166. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/content/multimodal.py +0 -0
  167. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/content/skills_catalog.py +0 -0
  168. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/__init__.py +0 -0
  169. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/checkpoint_seed.py +0 -0
  170. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/codex_history.py +0 -0
  171. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/codex_import.py +0 -0
  172. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/codex_sessions.py +0 -0
  173. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/describe_image.py +0 -0
  174. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/http_clients.py +0 -0
  175. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/llm_openai_compat.py +0 -0
  176. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/llm_openai_websocket.py +0 -0
  177. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/openai_oauth.py +0 -0
  178. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/openai_oauth_middleware.py +0 -0
  179. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/openai_usage.py +0 -0
  180. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/integrations/vision_middleware.py +0 -0
  181. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/memory/__init__.py +0 -0
  182. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/memory/auto_recorder.py +0 -0
  183. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/memory/embedder.py +0 -0
  184. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/memory/long_term.py +0 -0
  185. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/models/__init__.py +0 -0
  186. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/models/config.py +0 -0
  187. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/models/helpers.py +0 -0
  188. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/models/profile.py +0 -0
  189. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/models_registry.py +0 -0
  190. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/observability/__init__.py +0 -0
  191. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/observability/debug_inspector.html +0 -0
  192. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/observability/debug_server.py +0 -0
  193. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/observability/llm_debug.py +0 -0
  194. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/observability/startup_trace.py +0 -0
  195. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/parallel_subagents.py +0 -0
  196. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/planner/__init__.py +0 -0
  197. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/planner/task_planner.py +0 -0
  198. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/rag/__init__.py +0 -0
  199. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/rag/knowledge_base.py +0 -0
  200. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/__init__.py +0 -0
  201. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/async_runtime.py +0 -0
  202. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/context_compact.py +0 -0
  203. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/debug_capture_middleware.py +0 -0
  204. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/execute_capture.py +0 -0
  205. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/fs_permissions.py +0 -0
  206. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/hitl.py +0 -0
  207. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/interaction_ledger.py +0 -0
  208. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/middleware.py +0 -0
  209. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/pathing.py +0 -0
  210. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/steer.py +0 -0
  211. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/subagent_routing.py +0 -0
  212. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/tool_ignore.py +0 -0
  213. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/tool_output_eval.py +0 -0
  214. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/tool_output_middleware.py +0 -0
  215. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/runtime/tool_output_usage_middleware.py +0 -0
  216. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/sessions/__init__.py +0 -0
  217. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/sessions/cancel_repair.py +0 -0
  218. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/sessions/session_recap.py +0 -0
  219. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/settings/__init__.py +0 -0
  220. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/settings/config_paths.py +0 -0
  221. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/subagent_monitor.py +0 -0
  222. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/subagents.py +0 -0
  223. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/__init__.py +0 -0
  224. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/metrics.py +0 -0
  225. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/models.py +0 -0
  226. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/pipeline.py +0 -0
  227. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/repository.py +0 -0
  228. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tool_output/transformers.py +0 -0
  229. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tools/describe_image.py +0 -0
  230. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/tools/filesystem_search.py +0 -0
  231. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/__init__.py +0 -0
  232. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/answer_divider.py +0 -0
  233. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/__init__.py +0 -0
  234. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/__init__.py +0 -0
  235. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/codex_usage.py +0 -0
  236. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/key_hints.py +0 -0
  237. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/mcp.py +0 -0
  238. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/mode.py +0 -0
  239. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/model.py +0 -0
  240. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/components/thread.py +0 -0
  241. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/context.py +0 -0
  242. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/bottombar/core.py +0 -0
  243. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/clipboard.py +0 -0
  244. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/__init__.py +0 -0
  245. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/codex_reset.py +0 -0
  246. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/codex_session_list.py +0 -0
  247. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/compression_diagnostics.py +0 -0
  248. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/git_explore.py +0 -0
  249. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/mcp_panel.py +0 -0
  250. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/model_picker.py +0 -0
  251. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/safety_panel.py +0 -0
  252. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/session_list.py +0 -0
  253. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/subagent_monitor.py +0 -0
  254. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/theme_designer.py +0 -0
  255. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/dialogs/theme_picker.py +0 -0
  256. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/formatters.py +0 -0
  257. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/git_explore/__init__.py +0 -0
  258. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/git_explore/engine.py +0 -0
  259. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/git_explore/provider.py +0 -0
  260. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/git_explore/unified.py +0 -0
  261. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/rendering.py +0 -0
  262. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/selectable_static.py +0 -0
  263. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/selectable_text.py +0 -0
  264. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/sink.py +0 -0
  265. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/steer_widget.py +0 -0
  266. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/stream.py +0 -0
  267. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/stream_events.py +0 -0
  268. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/stream_runtime.py +0 -0
  269. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/textual_stream_sink.py +0 -0
  270. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/tool_blocks.py +0 -0
  271. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/__init__.py +0 -0
  272. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/components/__init__.py +0 -0
  273. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/components/branch.py +0 -0
  274. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/components/title.py +0 -0
  275. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/components/tool_output.py +0 -0
  276. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/components/usage.py +0 -0
  277. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/components/workspace.py +0 -0
  278. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/context.py +0 -0
  279. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/core.py +0 -0
  280. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/git_changes_popover.py +0 -0
  281. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/git_chrome.py +0 -0
  282. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/tool_output_popover.py +0 -0
  283. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/topbar/widget.py +0 -0
  284. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/turn_rail.py +0 -0
  285. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/turn_rail_widgets.py +0 -0
  286. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/user_turn.py +0 -0
  287. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/src/synapse/ui/user_turn_block.py +0 -0
  288. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/synapse.cmd +0 -0
  289. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/__init__.py +0 -0
  290. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/duplicate_response_item.jsonl +0 -0
  291. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/incomplete_and_aborted.jsonl +0 -0
  292. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/legacy_compaction.jsonl +0 -0
  293. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/normal_completed.jsonl +0 -0
  294. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/replacement_history.jsonl +0 -0
  295. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/rollback.jsonl +0 -0
  296. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/codex_rollouts/unsupported_replacement.jsonl +0 -0
  297. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/sample_repo/calculator.py +0 -0
  298. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/sample_repo/test_calculator.py +0 -0
  299. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/fixtures/tool_output_eval.json +0 -0
  300. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test.py +0 -0
  301. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_async_checkpointer.py +0 -0
  302. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_bottombar_registry.py +0 -0
  303. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_cancel_repair.py +0 -0
  304. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_capabilities.py +0 -0
  305. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_checkpoint_seed.py +0 -0
  306. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_cli.py +0 -0
  307. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_cli_codex_import.py +0 -0
  308. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_codex_history.py +0 -0
  309. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_codex_import.py +0 -0
  310. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_codex_sessions.py +0 -0
  311. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_codex_sessions_windows.py +0 -0
  312. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_compact_tool_descriptions.py +0 -0
  313. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_context_compact.py +0 -0
  314. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_context_window.py +0 -0
  315. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_dag_parallel.py +0 -0
  316. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_debug_capture_middleware.py +0 -0
  317. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_debug_inspector.py +0 -0
  318. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_describe_image.py +0 -0
  319. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_filesystem_search_tools.py +0 -0
  320. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_git_changes_popover.py +0 -0
  321. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_git_chrome.py +0 -0
  322. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_git_explore.py +0 -0
  323. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_http_clients.py +0 -0
  324. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_input_history.py +0 -0
  325. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_iteration_abc.py +0 -0
  326. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_mcp_schema.py +0 -0
  327. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_mermaid_render.py +0 -0
  328. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_middleware_async.py +0 -0
  329. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_model_request_compression_middleware.py +0 -0
  330. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_model_retry.py +0 -0
  331. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_multimodal.py +0 -0
  332. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_openai_compat_reasoning.py +0 -0
  333. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_openai_oauth.py +0 -0
  334. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_openai_oauth_middleware.py +0 -0
  335. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_openai_usage.py +0 -0
  336. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_openai_websocket.py +0 -0
  337. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_pathing.py +0 -0
  338. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_safety.py +0 -0
  339. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_session_recap.py +0 -0
  340. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_slash_and_mcp.py +0 -0
  341. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_slash_complete.py +0 -0
  342. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_startup_defer.py +0 -0
  343. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_steer.py +0 -0
  344. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_stream_cancel.py +0 -0
  345. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_stream_tool_items.py +0 -0
  346. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_stream_ui.py +0 -0
  347. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_subagent_monitor_dialog.py +0 -0
  348. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_subagent_status.py +0 -0
  349. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_textual_stream_sink.py +0 -0
  350. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_theme.py +0 -0
  351. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_timeline.py +0 -0
  352. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tool_ignore.py +0 -0
  353. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tool_intent.py +0 -0
  354. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tool_output_eval.py +0 -0
  355. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tool_output_slash.py +0 -0
  356. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tool_output_usage_middleware.py +0 -0
  357. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_topbar_context_ratio.py +0 -0
  358. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_topbar_registry.py +0 -0
  359. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_tui_codex_import.py +0 -0
  360. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_turn_rail_minimap.py +0 -0
  361. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_usage_restore.py +0 -0
  362. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_user_turn_style.py +0 -0
  363. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/test_welcome.py +0 -0
  364. {synapse_cli_agent-0.1.20 → synapse_cli_agent-0.1.22}/tests/tool_output_plugin_fixture.py +0 -0
@@ -1,13 +1,13 @@
1
- name: Native Search Wheels
1
+ name: Native Core Tool Wheels
2
2
 
3
3
  on:
4
4
  push:
5
5
  tags:
6
- - "synapse-search-core-v*"
6
+ - "synapse-core-tool-v*"
7
7
  pull_request:
8
8
  paths:
9
- - "rust/synapse-search-core/**"
10
- - ".github/workflows/native-search-wheels.yml"
9
+ - "rust/synapse-core-tool/**"
10
+ - ".github/workflows/native-core-tool-wheels.yml"
11
11
  workflow_dispatch:
12
12
 
13
13
  permissions:
@@ -35,17 +35,17 @@ jobs:
35
35
  - uses: PyO3/maturin-action@v1
36
36
  with:
37
37
  command: build
38
- working-directory: rust/synapse-search-core
38
+ working-directory: rust/synapse-core-tool
39
39
  target: ${{ matrix.target }}
40
40
  args: --release --locked --compatibility pypi --out dist
41
41
  manylinux: 2014
42
42
  - uses: actions/upload-artifact@v4
43
43
  with:
44
44
  name: wheel-${{ matrix.target }}
45
- path: rust/synapse-search-core/dist/*.whl
45
+ path: rust/synapse-core-tool/dist/*.whl
46
46
 
47
47
  publish:
48
- if: startsWith(github.ref, 'refs/tags/synapse-search-core-v')
48
+ if: startsWith(github.ref, 'refs/tags/synapse-core-tool-v')
49
49
  needs: wheel
50
50
  runs-on: ubuntu-latest
51
51
  permissions:
@@ -59,15 +59,15 @@ jobs:
59
59
  - uses: softprops/action-gh-release@v2
60
60
  with:
61
61
  files: dist/*.whl
62
- name: synapse-search-core ${{ github.ref_name }}
62
+ name: synapse-core-tool ${{ github.ref_name }}
63
63
 
64
64
  publish-pypi:
65
- if: startsWith(github.ref, 'refs/tags/synapse-search-core-v')
65
+ if: startsWith(github.ref, 'refs/tags/synapse-core-tool-v')
66
66
  needs: wheel
67
67
  runs-on: ubuntu-latest
68
68
  environment:
69
69
  name: pypi
70
- url: https://pypi.org/p/synapse-search-core
70
+ url: https://pypi.org/p/synapse-core-tool
71
71
  permissions:
72
72
  id-token: write
73
73
  steps:
@@ -79,4 +79,4 @@ jobs:
79
79
  - name: Publish wheels to PyPI
80
80
  uses: pypa/gh-action-pypi-publish@release/v1
81
81
  with:
82
- packages-dir: dist/
82
+ packages-dir: dist/
@@ -7,6 +7,48 @@ The release workflow automatically extracts the matching section as release note
7
7
 
8
8
  ---
9
9
 
10
+ ## v0.1.22
11
+
12
+ ### 新增功能
13
+
14
+ - TUI 恢复会话时改为分页加载:启动只渲染最近 `AGENT_HISTORY_TAIL_TURNS` 轮(默认 20),滚动到 transcript 顶部时异步加载更早历史并保持滚动位置,避免超长会话导致启动卡顿。
15
+ - 新增 `AGENT_HISTORY_TAIL_TURNS` 设置,控制 TUI 启动时初始渲染的最近可见会话轮数(支持环境变量与分层 `settings.json`)。
16
+
17
+ ### 修复
18
+
19
+ - 修复历史分页异步加载的请求代际竞争:切换/重新加载会话后,旧分页 worker 的回调不再清除当前请求的加载状态或插入过期数据。
20
+
21
+ ### 工程改进
22
+
23
+ - 直接依赖版本固定到 `uv.lock` 对应版本。
24
+
25
+ ---
26
+
27
+ ## v0.1.21
28
+
29
+ ### 新增功能
30
+
31
+ - 会话工具 `list_sessions` 重构为 `search_session`:新增本地增量全文索引(`SessionSearchIndex`),除标题/摘要/模型外支持会话消息全文双路命中;`query` 为空时列出最近会话,支持 `limit`/`offset` 分页与摘要。
32
+ - `read_session` 支持 `include_tools`(默认去掉工具消息,输出体积最多缩小 13 倍)与 `offset`/`limit` 轮次分页。
33
+ - 新增原生 `patch` 工具,`read_file`/`edit_file`/`patch` 全部路由到 `synapse-core-tool` 编码保持的原生实现。
34
+ - 新增 `AGENT_EXPAND_THINKING` 设置,控制 reasoning 块的展开/收起。
35
+
36
+ ### 修复
37
+
38
+ - 修复 `load_messages_from_checkpointer` 只读最新 checkpoint 导致新版 SqliteSaver(delta 存储)下读不到消息:改为 delta 重建优先、旧逻辑兜底。
39
+ - 修复 `search_session` 索引库并发写锁竞争(`database is locked`):WAL + busy_timeout + 同步降级容错。
40
+ - 修复 JSON 类型检测晚于 LOG、无法识别括号风格日志的问题。
41
+ - 修复长对话框行标签被裁剪的问题。
42
+
43
+ ### 工程改进
44
+
45
+ - 文件系统核心由 `synapse-search-core` 迁移并更名为 `synapse-core-tool`(新增原生 read/edit/patch),CI workflow 同步迁移为 `native-core-tool-wheels.yml`。
46
+ - 隐藏 DeepAgents 内置 `ls`/`glob`/`grep`,新增 prompt 中间件注入权威文件工具指引。
47
+ - 主 TUI 欢迎 logo 动画时机调整。
48
+ - 清理 `list_sessions` 旧名残留(docstring、错误提示、prompts、文档)。
49
+
50
+ ---
51
+
10
52
  ## v0.1.20
11
53
 
12
54
  ### 新增功能
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-cli-agent
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: Local coding agent built on LangChain Deep Agents (LocalShell, no sandbox)
5
5
  Project-URL: Homepage, https://github.com/alex8224/synapse-agent
6
6
  Project-URL: Repository, https://github.com/alex8224/synapse-agent
@@ -8,26 +8,26 @@ Project-URL: Issues, https://github.com/alex8224/synapse-agent/issues
8
8
  Project-URL: Changelog, https://github.com/alex8224/synapse-agent/blob/main/CHANGELOG.md
9
9
  Author-email: alex8224 <alex8224@gmail.com>
10
10
  Requires-Python: >=3.12
11
- Requires-Dist: aiosqlite>=0.20.0
12
- Requires-Dist: deepagents>=0.6.12
13
- Requires-Dist: httpx[socks]>=0.28.1
14
- Requires-Dist: langchain-anthropic>=1.4.8
15
- Requires-Dist: langchain-openai>=1.3.5
16
- Requires-Dist: langchain>=1.3.14
17
- Requires-Dist: langgraph-checkpoint-sqlite>=3.1.0
18
- Requires-Dist: langgraph>=1.2.9
19
- Requires-Dist: mcp>=1.28.0
20
- Requires-Dist: pydantic-settings>=2.14.2
21
- Requires-Dist: python-dotenv>=1.2.2
22
- Requires-Dist: rich>=15.0.0
23
- Requires-Dist: synapse-search-core<0.2.0,>=0.1.0
24
- Requires-Dist: termaid>=0.7.1
25
- Requires-Dist: texicode>=1.0.3
26
- Requires-Dist: textual-diff-view>=0.1.5
27
- Requires-Dist: textual>=1.0.0
28
- Requires-Dist: typer>=0.27.0
29
- Requires-Dist: websockets<16,>=13
30
- Requires-Dist: zstandard>=0.23.0
11
+ Requires-Dist: aiosqlite==0.22.1
12
+ Requires-Dist: deepagents==0.6.12
13
+ Requires-Dist: httpx[socks]==0.28.1
14
+ Requires-Dist: langchain-anthropic==1.4.8
15
+ Requires-Dist: langchain-openai==1.3.5
16
+ Requires-Dist: langchain==1.3.14
17
+ Requires-Dist: langgraph-checkpoint-sqlite==3.1.0
18
+ Requires-Dist: langgraph==1.2.9
19
+ Requires-Dist: mcp==1.28.1
20
+ Requires-Dist: pydantic-settings==2.14.2
21
+ Requires-Dist: python-dotenv==1.2.2
22
+ Requires-Dist: rich==15.0.0
23
+ Requires-Dist: synapse-core-tool<0.2.0,>=0.1.0
24
+ Requires-Dist: termaid==0.7.1
25
+ Requires-Dist: texicode==1.0.3
26
+ Requires-Dist: textual-diff-view==0.1.5
27
+ Requires-Dist: textual==8.2.8
28
+ Requires-Dist: typer==0.27.0
29
+ Requires-Dist: websockets==15.0.1
30
+ Requires-Dist: zstandard==0.25.0
31
31
  Provides-Extra: dev
32
32
  Requires-Dist: mkdocs-material>=9.7.7; extra == 'dev'
33
33
  Requires-Dist: mkdocs>=1.6.1; extra == 'dev'
@@ -349,11 +349,15 @@ def git_status(workspace: str = ".") -> str:
349
349
 
350
350
  | 来源 | 工具 | 如何注册 |
351
351
  |------|------|---------|
352
- | `deepagents` 框架内置 | `ls`, `read_file`, `write_file`, `edit_file`, `glob`, `grep`, `execute`, `write_todos`, `task` | `create_deep_agent` 自动注入 |
353
- | 项目自定义 | `git_status`, `git_diff`, `run_tests` | 传入 `tools=[...]` 参数 |
354
- | 会话工具 | `list_sessions`, `read_session` | 通过 `build_session_tools()` 动态创建 |
352
+ | `deepagents` 框架内置(当前保留) | `read_file`, `write_file`, `edit_file`, `execute`, `write_todos`, `task` | `create_deep_agent` 自动注入;文件读写由 Synapse backend 接管 |
353
+ | Synapse 文件工具 | `find_files`, `search_files`, `patch` | 传入 `tools=[...]`;底层调用 `synapse-core-tool` |
354
+ | 会话工具 | `search_session`, `read_session` | 通过 `build_session_tools()` 动态创建 |
355
355
  | MCP 工具 | 由外部 MCP Server 提供 | `load_mcp_tools()` 动态加载 |
356
356
 
357
+ DeepAgents 的 `ls`、`glob`、`grep` 会从模型请求中隐藏,避免与 Synapse 的
358
+ `find_files`、`search_files` 产生重名语义冲突。最终系统提示词也会注入与实际 schema
359
+ 一致的权威工具说明。
360
+
357
361
  ### 6.3 `run_tests` 工具
358
362
 
359
363
  ```python
@@ -657,4 +661,4 @@ agent = create_deep_agent(
657
661
  result = agent.invoke({"messages": [{"role": "user", "content": "..."}]})
658
662
  ```
659
663
 
660
- 这就是 Synapse 的核心骨架——在它的基础上,Synapse 增加了:SQLite 持久化、TUI 界面、MCP 集成、分层配置、子 Agent、中运行引导、安全审批等工程化能力。
664
+ 这就是 Synapse 的核心骨架——在它的基础上,Synapse 增加了:SQLite 持久化、TUI 界面、MCP 集成、分层配置、子 Agent、中运行引导、安全审批等工程化能力。
@@ -423,11 +423,11 @@ idle > 180s + turn_count >= 3 → 单行摘要: `"任务 {user};工具 {tools}
423
423
 
424
424
  ### 9.1 跨会话查阅工具
425
425
 
426
- `build_session_tools()` → `[list_sessions, read_session, read_tool_result]`
426
+ `build_session_tools()` → `[search_session, read_session, read_tool_result]`
427
427
 
428
428
  | 工具 | 依赖 | 数据源 |
429
429
  |---|---|---|
430
- | `list_sessions` | SessionStore | sessions.sqlite |
430
+ | `search_session` | SessionStore + SessionSearchIndex | sessions.sqlite + search-index.sqlite |
431
431
  | `read_session` | SessionStore + SqliteSaver | sessions.sqlite + checkpoints.sqlite |
432
432
  | `read_tool_result` | ToolOutputRepository | tool-outputs.sqlite |
433
433
 
@@ -146,7 +146,7 @@
146
146
  │ │
147
147
  │ ┌──────────────────── 工具系统 ──────────────────────────────┐ │
148
148
  │ │ tools/session_tools.py (工厂+闭包依赖注入) │ │
149
- │ │ ├─ list_sessions(query, limit) 搜索本地会话 │ │
149
+ │ │ ├─ search_session(query, ...) 搜索本地会话 │ │
150
150
  │ │ ├─ read_session(thread_id, ...) 读取对话历史 │ │
151
151
  │ │ └─ read_tool_result(ref, ...) 读取压缩工具输出原文 │ │
152
152
  │ │ │ │
@@ -312,7 +312,7 @@ cli.py
312
312
  │ └→ CodingLocalShellBackend (subprocess)
313
313
  ├─ task (子Agent)
314
314
  │ └→ DAGSubAgentMiddleware (缓存结果)
315
- ├─ list_sessions/read_session
315
+ ├─ search_session/read_session
316
316
  │ └→ SessionStore (SQLite)
317
317
  ├─ MCP tools
318
318
  │ └→ McpSessionPool (stdio/SSE/HTTP)
@@ -589,7 +589,7 @@ Schema 演进:`_ensure_column()` 用 `PRAGMA table_info` 检测 `active_model`
589
589
 
590
590
  **`resolve_startup_binding()` 模型恢复**:CLI --model 显式 > 会话级绑定 (`get_model_binding(thread_id)`) > 全局最后使用 (`get_last_model_binding`)。通过 `apply_binding_to_settings()` 写回 settings。
591
591
 
592
- **`build_session_tools()` 闭包依赖注入**:`SessionStore` 和 `checkpoint_path` 通过闭包注入两个工具(`list_sessions` / `read_session`)。两个工具标记了 `**默认禁止调用**` docstring。
592
+ **`build_session_tools()` 闭包依赖注入**:`SessionStore`、`checkpoint_path` 和 `tool_output_db_path` 通过闭包注入三个工具(`search_session` / `read_session` / `read_tool_result`)。三个工具标记了 `**默认禁止调用**` docstring。
593
593
 
594
594
  ### Codex 导入完整流水线
595
595
 
@@ -70,6 +70,7 @@ Synapse 使用 **Pydantic Settings** 实现分层配置系统。
70
70
  | `CHECKPOINT_BACKEND` | `sqlite` | 检查点后端(`sqlite`/`memory`) |
71
71
  | `CHECKPOINT_PATH` | `.coding-agent/checkpoints.sqlite` | 检查点存储路径 |
72
72
  | `SESSIONS_PATH` | — | 会话元数据路径 |
73
+ | `AGENT_HISTORY_TAIL_TURNS` | `20` | TUI 启动时初始渲染的最近可见会话轮数;滚动到顶部后加载更早历史 |
73
74
 
74
75
  ### 子代理
75
76
 
@@ -94,6 +95,7 @@ Synapse 使用 **Pydantic Settings** 实现分层配置系统。
94
95
  |---|---|---|
95
96
  | `AGENT_THEME` | `cursor-dark` | TUI 主题 |
96
97
  | `AGENT_TOOL_DETAILS_EXPANDED` | `true` | 工具详情默认展开 |
98
+ | `AGENT_EXPAND_THINKING` | `false` | 推理块不自动展开:流式时仅显示状态行,结束后折叠为一行预览;设为 `true` 时流式与结束后均完整展开 |
97
99
  | `AGENT_DEBUG` | `false` | 调试模式 |
98
100
 
99
101
  ### 其他
@@ -0,0 +1,41 @@
1
+ # Native Core Tool
2
+
3
+ `synapse-core-tool` is the required PyO3 package that implements Synapse filesystem search, reading, exact editing, and unified-diff patching.
4
+
5
+ ## Package Boundary
6
+
7
+ ```text
8
+ rust/synapse-core-tool/
9
+ Cargo.toml
10
+ pyproject.toml
11
+ src/
12
+ lib.rs
13
+ search.rs
14
+ file_access.rs
15
+ file_tools.rs
16
+ python/synapse_core_tool/__init__.py
17
+ .github/workflows/native-core-tool-wheels.yml
18
+ ```
19
+
20
+ `CodingLocalShellBackend` retains responsibility for resolving agent paths, enforcing workspace boundaries, applying configured deny paths, and converting host paths back to virtual paths. The native package receives only absolute authorized host paths.
21
+
22
+ The backend's existing `read_file` and `edit_file` model tools call the native `read` and `edit`
23
+ implementations. Synapse registers `find_files`, `search_files`, and `patch` as model-facing tools
24
+ backed by native `glob`, `grep`, and unified-diff implementations. DeepAgents' generic `ls`,
25
+ `glob`, and `grep` tools are hidden from model requests, and an authoritative system-prompt suffix
26
+ documents only the active Synapse schemas to prevent conflicting tool guidance.
27
+
28
+ ## Distribution
29
+
30
+ A `synapse-core-tool-v*` tag triggers `.github/workflows/native-core-tool-wheels.yml`, which builds abi3 wheels for Windows x86_64, macOS Apple Silicon arm64, and Linux x86_64/aarch64, attaches them to a GitHub Release, and publishes them to PyPI.
31
+
32
+ For repository development, `uv` maps the dependency to `rust/synapse-core-tool`. Published Synapse wheels still declare the normal `synapse-core-tool` package dependency, so the native package must be published before a Synapse release that depends on it.
33
+
34
+ ## Local Development
35
+
36
+ ```powershell
37
+ maturin develop --manifest-path rust/synapse-core-tool/Cargo.toml
38
+ cargo test --manifest-path rust/synapse-core-tool/Cargo.toml
39
+ cargo fmt --manifest-path rust/synapse-core-tool/Cargo.toml --check
40
+ uv run --no-sync python -m pytest tests/test_backends.py -q
41
+ ```
@@ -41,7 +41,8 @@ synapse tui -w . --readonly
41
41
  export AGENT_READONLY=true
42
42
  ```
43
43
 
44
- 只读模式通过 harness 工具排除实现,会移除 `write_file`、`edit_file`、`execute` 等写入类工具。
44
+ 只读模式通过 harness 工具排除实现,会移除 `write_file`、`edit_file`、`patch`、
45
+ `execute` 等写入或执行类工具。
45
46
 
46
47
  ## 文件系统权限
47
48
 
@@ -104,4 +105,4 @@ export ENABLE_COMMAND_BLACKLIST=false
104
105
  | `AGENT_DENY_FS_PATHS` | `[]` | 禁止访问路径 |
105
106
  | `AGENT_ENABLE_FS_PERMISSIONS` | `false` | 启用 FS 权限 |
106
107
  | `AGENT_EXCLUDED_TOOLS` | `[]` | 排除工具列表 |
107
- | `ENABLE_COMMAND_BLACKLIST` | `true` | 命令黑名单 |
108
+ | `ENABLE_COMMAND_BLACKLIST` | `true` | 命令黑名单 |
@@ -34,6 +34,17 @@ synapse run "继续刚才的工作" --thread-id <thread_id> -w .
34
34
 
35
35
  TUI 模式下也可以在界面内浏览和切换历史会话。
36
36
 
37
+ ### TUI 恢复会话的分页加载
38
+
39
+ TUI 启动恢复会话时不会一次性渲染整个 transcript,而是只绘制最后
40
+ `history_tail_turns` 轮(默认 20 轮,可在配置中覆盖),避免超长会话
41
+ 导致启动卡顿。更早的历史通过滚动分页加载:
42
+
43
+ - 启动后自动滚动到 transcript 底部,显示最近 N 轮。
44
+ - 滚动到 transcript 顶部时,异步加载更早的一批历史并插入到当前内容上方,
45
+ 滚动位置保持不变,直到加载完整个会话。
46
+ - 切换会话(`/session`)或重新加载后,分页状态随 transcript 一起重置。
47
+
37
48
  ## 导出会话
38
49
 
39
50
  将对话记录导出为 Markdown:
@@ -744,19 +744,25 @@ def _build_checkpointer(settings):
744
744
 
745
745
  Agent 本身只是一个语言模型,只能"说"不能"做"。**工具**赋予了它行动能力。
746
746
 
747
- ### 7.1 内置工具(Deep Agents 自带)
747
+ ### 7.1 当前 Agent 工具
748
748
 
749
749
  | 工具名 | 功能 | 对应的人类操作 |
750
750
  |--------|------|---------------|
751
751
  | `read_file` | 读取文件内容 | 用编辑器打开文件 |
752
- | `write_file` | 创建/覆盖文件 | 新建文件并写入 |
753
- | `edit_file` | 精确替换文件片段 | 修改文件中的某几行 |
754
- | `glob` | 按模式查找文件 | 在资源管理器里搜索 `*.py` |
752
+ | `write_file` | 创建新文件 | 新建文件并写入 |
753
+ | `edit_file` | 精确替换文件片段 | 修改一个唯一的小片段 |
754
+ | `patch` | 应用 unified diff | 修改已有文件中的多行内容 |
755
+ | `find_files` | 按 glob 模式查找路径 | 在资源管理器里搜索 `*.py` |
756
+ | `search_files` | 使用正则搜索文件内容 | 在代码中查找符号或文本 |
755
757
  | `execute` | 执行 Shell 命令 | 在终端里输入命令 |
756
758
  | `write_todos` | 创建/更新任务列表 | 写待办事项清单 |
757
759
  | `task` | 委派子 Agent | 把任务分给同事 |
758
760
  | `compact_conversation` | 压缩对话上下文 | 清空不需要的聊天记录 |
759
761
 
762
+ 其中 `read_file`、`edit_file`、`find_files`、`search_files` 和 `patch` 的文件处理底层由
763
+ `synapse-core-tool` 提供。Deep Agents 原有的 `ls`、`glob`、`grep` 不会暴露给主 Agent,
764
+ 以避免与 Synapse 文件搜索工具产生冲突。
765
+
760
766
  ### 7.2 自定义工具:会话查阅工具
761
767
 
762
768
  除了内置工具,Synapse 还注册了两个自定义工具:
@@ -765,8 +771,8 @@ Agent 本身只是一个语言模型,只能"说"不能"做"。**工具**赋予
765
771
  # src/synapse/tools/session_tools.py
766
772
 
767
773
  @tool
768
- def list_sessions(query="", limit=20):
769
- """列出本地会话记录,支持按标题/ID 模糊搜索。"""
774
+ def search_session(query="", limit=20):
775
+ """搜索本地会话,支持按标题/摘要/消息全文匹配;query 为空时列出最近会话。"""
770
776
  # 默认禁止调用,只有用户明确要求才用
771
777
  ...
772
778
 
@@ -986,8 +992,8 @@ Parallel Sub-Agent 系统的核心是 `DAGSubAgentMiddleware`,它**替换了**
986
992
 
987
993
  每个子 Agent 也是一个完整的 `CompiledStateGraph`(LangGraph 图),有自己的模型、系统提示词和工具集。创建时遵循以下原则:
988
994
 
989
- - **共享 backend**:researcher/tester/reviewer 共用同一个 `CodingLocalShellBackend`,否则子 Agent 的 `read_file`/`glob`/`execute` 会变成"空壳"。
990
- - **通过工具排除实现隔离**(而非 `FilesystemPermission`):因为 `LocalShellBackend` 不支持权限模式,改用 `ToolExclusionMiddleware` 从模型可见工具列表中直接移除被禁工具(如 researcher 的 `write_file`、`edit_file`、`execute`)。
995
+ - **共享 backend**:researcher/tester/reviewer 共用同一个 `CodingLocalShellBackend`,否则子 Agent 的文件读取、搜索和 `execute` 会变成"空壳"。
996
+ - **通过工具排除实现隔离**(而非 `FilesystemPermission`):因为 `LocalShellBackend` 不支持权限模式,改用 `ToolExclusionMiddleware` 从模型可见工具列表中直接移除被禁工具(如 researcher 的 `write_file`、`edit_file`、`patch`、`execute`)。
991
997
  - **禁用 write_todos**:所有子 Agent 额外排除 `write_todos` 类任务规划工具,防止子 Agent 内部再拆解出"子子 Agent",造成递归复杂度爆炸。
992
998
  - **每个子 Agent 可指定不同模型**:通过 `tester_model` / `reviewer_model` / `researcher_model` 设置,比如 tester 用便宜的模型(如 DeepSeek),researcher 用强推理模型(如 Claude)。
993
999
 
@@ -1612,7 +1618,7 @@ synapse tui --readonly
1612
1618
  ```
1613
1619
 
1614
1620
  只读模式下,Agent 不能:
1615
- - 写文件(`write_file`、`edit_file` 被排除)
1621
+ - 写文件(`write_file`、`edit_file`、`patch` 被排除)
1616
1622
  - 执行命令(`execute` 被排除)
1617
1623
 
1618
1624
  只能读取和搜索代码。
@@ -1876,4 +1882,4 @@ uv run --no-sync ruff check . # 代码检查
1876
1882
  4. **关键模块**:agent.py(组装)、config.py(配置)、subagents.py(子 Agent)、middleware.py(中间件)
1877
1883
  5. **如何扩展**:添加自定义工具、注册中间件、定义子 Agent、加载 Skills
1878
1884
 
1879
- 最重要的是:**动手实践**。把 15.1 节的代码复制到本地,运行它,修改它,打破它,修复它。这是最快的学会方式。
1885
+ 最重要的是:**动手实践**。把 15.1 节的代码复制到本地,运行它,修改它,打破它,修复它。这是最快的学会方式。
@@ -54,4 +54,4 @@ nav:
54
54
  - 会话管理: sessions.md
55
55
  - Skills 插件: skills.md
56
56
  - 权限与安全: permissions.md
57
- - 原生搜索核心: native-search-core.md
57
+ - 原生核心工具: native-core-tool.md
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "synapse-cli-agent"
3
- version = "0.1.20"
3
+ version = "0.1.22"
4
4
  description = "Local coding agent built on LangChain Deep Agents (LocalShell, no sandbox)"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -9,26 +9,26 @@ authors = [
9
9
  requires-python = ">=3.12"
10
10
 
11
11
  dependencies = [
12
- "synapse-search-core>=0.1.0,<0.2.0",
13
- "aiosqlite>=0.20.0",
14
- "deepagents>=0.6.12",
15
- "httpx[socks]>=0.28.1",
16
- "langchain>=1.3.14",
17
- "langchain-anthropic>=1.4.8",
18
- "langchain-openai>=1.3.5",
19
- "langgraph>=1.2.9",
20
- "langgraph-checkpoint-sqlite>=3.1.0",
21
- "mcp>=1.28.0",
22
- "pydantic-settings>=2.14.2",
23
- "python-dotenv>=1.2.2",
24
- "rich>=15.0.0",
25
- "termaid>=0.7.1",
26
- "texicode>=1.0.3",
27
- "textual>=1.0.0",
28
- "textual-diff-view>=0.1.5",
29
- "typer>=0.27.0",
30
- "websockets>=13,<16",
31
- "zstandard>=0.23.0",
12
+ "synapse-core-tool>=0.1.0,<0.2.0",
13
+ "aiosqlite==0.22.1",
14
+ "deepagents==0.6.12",
15
+ "httpx[socks]==0.28.1",
16
+ "langchain==1.3.14",
17
+ "langchain-anthropic==1.4.8",
18
+ "langchain-openai==1.3.5",
19
+ "langgraph==1.2.9",
20
+ "langgraph-checkpoint-sqlite==3.1.0",
21
+ "mcp==1.28.1",
22
+ "pydantic-settings==2.14.2",
23
+ "python-dotenv==1.2.2",
24
+ "rich==15.0.0",
25
+ "termaid==0.7.1",
26
+ "texicode==1.0.3",
27
+ "textual==8.2.8",
28
+ "textual-diff-view==0.1.5",
29
+ "typer==0.27.0",
30
+ "websockets==15.0.1",
31
+ "zstandard==0.25.0",
32
32
  ]
33
33
 
34
34
  [project.urls]
@@ -55,6 +55,9 @@ build-backend = "hatchling.build"
55
55
  [tool.hatch.build.targets.wheel]
56
56
  packages = ["src/synapse"]
57
57
 
58
+ [tool.uv.sources]
59
+ synapse-core-tool = { path = "rust/synapse-core-tool" }
60
+
58
61
  [tool.pytest.ini_options]
59
62
  testpaths = ["tests"]
60
63
  pythonpath = ["src"]
@@ -0,0 +1,16 @@
1
+ ## v0.1.22
2
+
3
+ ### 新增功能
4
+
5
+ - TUI 恢复会话时改为分页加载:启动只渲染最近 `AGENT_HISTORY_TAIL_TURNS` 轮(默认 20),滚动到 transcript 顶部时异步加载更早历史并保持滚动位置,避免超长会话导致启动卡顿。
6
+ - 新增 `AGENT_HISTORY_TAIL_TURNS` 设置,控制 TUI 启动时初始渲染的最近可见会话轮数(支持环境变量与分层 `settings.json`)。
7
+
8
+ ### 修复
9
+
10
+ - 修复历史分页异步加载的请求代际竞争:切换/重新加载会话后,旧分页 worker 的回调不再清除当前请求的加载状态或插入过期数据。
11
+
12
+ ### 工程改进
13
+
14
+ - 直接依赖版本固定到 `uv.lock` 对应版本。
15
+
16
+ ---
@@ -34,6 +34,17 @@ version = "1.0.4"
34
34
  source = "registry+https://github.com/rust-lang/crates.io-index"
35
35
  checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
36
36
 
37
+ [[package]]
38
+ name = "chardetng"
39
+ version = "0.1.17"
40
+ source = "registry+https://github.com/rust-lang/crates.io-index"
41
+ checksum = "14b8f0b65b7b08ae3c8187e8d77174de20cb6777864c6b832d8ad365999cf1ea"
42
+ dependencies = [
43
+ "cfg-if",
44
+ "encoding_rs",
45
+ "memchr",
46
+ ]
47
+
37
48
  [[package]]
38
49
  name = "crossbeam-deque"
39
50
  version = "0.8.7"
@@ -158,12 +169,6 @@ dependencies = [
158
169
  "rustversion",
159
170
  ]
160
171
 
161
- [[package]]
162
- name = "itoa"
163
- version = "1.0.18"
164
- source = "registry+https://github.com/rust-lang/crates.io-index"
165
- checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
166
-
167
172
  [[package]]
168
173
  name = "libc"
169
174
  version = "0.2.189"
@@ -325,15 +330,6 @@ dependencies = [
325
330
  "winapi-util",
326
331
  ]
327
332
 
328
- [[package]]
329
- name = "serde"
330
- version = "1.0.229"
331
- source = "registry+https://github.com/rust-lang/crates.io-index"
332
- checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
333
- dependencies = [
334
- "serde_core",
335
- ]
336
-
337
333
  [[package]]
338
334
  name = "serde_core"
339
335
  version = "1.0.229"
@@ -354,19 +350,6 @@ dependencies = [
354
350
  "syn 3.0.3",
355
351
  ]
356
352
 
357
- [[package]]
358
- name = "serde_json"
359
- version = "1.0.151"
360
- source = "registry+https://github.com/rust-lang/crates.io-index"
361
- checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
362
- dependencies = [
363
- "itoa",
364
- "memchr",
365
- "serde",
366
- "serde_core",
367
- "zmij",
368
- ]
369
-
370
353
  [[package]]
371
354
  name = "syn"
372
355
  version = "2.0.119"
@@ -390,15 +373,16 @@ dependencies = [
390
373
  ]
391
374
 
392
375
  [[package]]
393
- name = "synapse-search-core"
394
- version = "0.1.1"
376
+ name = "synapse-core-tool"
377
+ version = "0.1.0"
395
378
  dependencies = [
379
+ "chardetng",
380
+ "encoding_rs",
396
381
  "globset",
397
382
  "grep-regex",
398
383
  "grep-searcher",
399
384
  "ignore",
400
385
  "pyo3",
401
- "serde_json",
402
386
  "thiserror",
403
387
  ]
404
388
 
@@ -473,9 +457,3 @@ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
473
457
  dependencies = [
474
458
  "windows-link",
475
459
  ]
476
-
477
- [[package]]
478
- name = "zmij"
479
- version = "1.0.23"
480
- source = "registry+https://github.com/rust-lang/crates.io-index"
481
- checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
@@ -1,21 +1,22 @@
1
1
  [package]
2
- name = "synapse-search-core"
3
- version = "0.1.1"
2
+ name = "synapse-core-tool"
3
+ version = "0.1.0"
4
4
  edition = "2021"
5
5
  rust-version = "1.80"
6
6
  license = "Apache-2.0"
7
- description = "Native workspace search algorithms for Synapse."
7
+ description = "Native filesystem tools for Synapse."
8
8
  publish = false
9
9
 
10
10
  [lib]
11
- name = "synapse_search_core"
11
+ name = "synapse_core_tool"
12
12
  crate-type = ["cdylib", "rlib"]
13
13
 
14
14
  [dependencies]
15
+ chardetng = "0.1"
16
+ encoding_rs = "0.8"
15
17
  grep-regex = "0.1"
16
18
  grep-searcher = "0.1"
17
19
  globset = "0.4"
18
20
  ignore = "0.4"
19
21
  pyo3 = { version = "0.23", features = ["abi3-py312", "extension-module"] }
20
- serde_json = "1.0"
21
22
  thiserror = "2.0"
@@ -0,0 +1,29 @@
1
+ # synapse-core-tool
2
+
3
+ Required Rust/PyO3 implementation of Synapse filesystem operations.
4
+
5
+ The Python module `synapse_core_tool` exports:
6
+
7
+ - `grep` and `glob` for ignore-aware workspace search;
8
+ - `read` for bounded file or directory reads;
9
+ - `edit` for exact string replacement with line-ending compatibility;
10
+ - `patch` for unified-diff updates.
11
+
12
+ Text edits preserve detected UTF-8/UTF-16 BOMs and legacy encodings. The Python backend resolves and authorizes paths before calling this module; the native package accepts only absolute host paths.
13
+
14
+ ## Distribution
15
+
16
+ Release tags use the format `synapse-core-tool-v{version}`. The `native-core-tool-wheels` workflow builds abi3 wheels for Windows x86_64, macOS Apple Silicon arm64, and Linux x86_64/aarch64, then publishes them to PyPI.
17
+
18
+ Build and install locally:
19
+
20
+ ```powershell
21
+ maturin develop --manifest-path rust/synapse-core-tool/Cargo.toml
22
+ ```
23
+
24
+ Run Rust checks:
25
+
26
+ ```powershell
27
+ cargo test --manifest-path rust/synapse-core-tool/Cargo.toml
28
+ cargo fmt --manifest-path rust/synapse-core-tool/Cargo.toml --check
29
+ ```