synapse-cli-agent 0.1.13__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 (285) hide show
  1. synapse_cli_agent-0.1.13/.github/workflows/ci.yml +41 -0
  2. synapse_cli_agent-0.1.13/.github/workflows/docs.yml +48 -0
  3. synapse_cli_agent-0.1.13/.github/workflows/native-compression-wheels.yml +69 -0
  4. synapse_cli_agent-0.1.13/.github/workflows/release.yml +71 -0
  5. synapse_cli_agent-0.1.13/.gitignore +41 -0
  6. synapse_cli_agent-0.1.13/.python-version +1 -0
  7. synapse_cli_agent-0.1.13/.readthedocs.yaml +19 -0
  8. synapse_cli_agent-0.1.13/AGENTS.md +133 -0
  9. synapse_cli_agent-0.1.13/CHANGELOG.md +270 -0
  10. synapse_cli_agent-0.1.13/PKG-INFO +412 -0
  11. synapse_cli_agent-0.1.13/README.md +381 -0
  12. synapse_cli_agent-0.1.13/docs/cli.md +123 -0
  13. synapse_cli_agent-0.1.13/docs/codex-session-discovery-phase-1.md +116 -0
  14. synapse_cli_agent-0.1.13/docs/codex-session-import-phase-2.md +83 -0
  15. synapse_cli_agent-0.1.13/docs/config.md +118 -0
  16. synapse_cli_agent-0.1.13/docs/design.md +527 -0
  17. synapse_cli_agent-0.1.13/docs/index.md +54 -0
  18. synapse_cli_agent-0.1.13/docs/install.md +63 -0
  19. synapse_cli_agent-0.1.13/docs/mcp.md +132 -0
  20. synapse_cli_agent-0.1.13/docs/models.md +120 -0
  21. synapse_cli_agent-0.1.13/docs/native-compression-core.md +59 -0
  22. synapse_cli_agent-0.1.13/docs/permissions.md +107 -0
  23. synapse_cli_agent-0.1.13/docs/quickstart.md +91 -0
  24. synapse_cli_agent-0.1.13/docs/sessions.md +102 -0
  25. synapse_cli_agent-0.1.13/docs/skills.md +109 -0
  26. synapse_cli_agent-0.1.13/docs/tool-output-transform.md +101 -0
  27. synapse_cli_agent-0.1.13/docs/tui-cursor-refactor.md +421 -0
  28. synapse_cli_agent-0.1.13/examples/mcp.example.json +29 -0
  29. synapse_cli_agent-0.1.13/examples/models.example.json +44 -0
  30. synapse_cli_agent-0.1.13/examples/settings.example.json +10 -0
  31. synapse_cli_agent-0.1.13/mkdocs.yml +56 -0
  32. synapse_cli_agent-0.1.13/pyproject.toml +68 -0
  33. synapse_cli_agent-0.1.13/release_body.md +11 -0
  34. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/Cargo.lock +711 -0
  35. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/Cargo.toml +36 -0
  36. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/LICENSE +190 -0
  37. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/NOTICE +43 -0
  38. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/README.md +34 -0
  39. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/pyproject.toml +20 -0
  40. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/python/synapse_tool_compress_core/__init__.py +17 -0
  41. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/ccr.rs +22 -0
  42. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/ccr_in_memory.rs +322 -0
  43. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/mod.rs +38 -0
  44. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/relevance/base.rs +144 -0
  45. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/relevance/bm25.rs +390 -0
  46. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/signals/keyword_detector.rs +438 -0
  47. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/signals/line_importance.rs +89 -0
  48. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/adaptive_sizer.rs +651 -0
  49. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/anchor_selector.rs +1194 -0
  50. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/code_compressor.rs +1888 -0
  51. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/diff_compressor.rs +1780 -0
  52. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/log_compressor.rs +1802 -0
  53. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/search_compressor.rs +1362 -0
  54. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/analyzer.rs +1267 -0
  55. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/anchors.rs +412 -0
  56. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/builder.rs +268 -0
  57. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/classifier.rs +219 -0
  58. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/classifier.rs +312 -0
  59. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/compactor.rs +855 -0
  60. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/formatter.rs +966 -0
  61. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/ir.rs +257 -0
  62. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/mod.rs +150 -0
  63. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/compaction/walker.rs +402 -0
  64. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/config.rs +203 -0
  65. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/constraints.rs +164 -0
  66. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/crusher.rs +2055 -0
  67. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/crushers.rs +870 -0
  68. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/error_keywords.rs +82 -0
  69. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/field_detect.rs +398 -0
  70. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/hashing.rs +77 -0
  71. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/mod.rs +86 -0
  72. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/observer.rs +71 -0
  73. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/orchestration.rs +464 -0
  74. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/outliers.rs +512 -0
  75. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/planning.rs +909 -0
  76. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/statistics.rs +515 -0
  77. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/stats_math.rs +292 -0
  78. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/traits.rs +208 -0
  79. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/headroom_port/transforms/smart_crusher/types.rs +268 -0
  80. synapse_cli_agent-0.1.13/rust/synapse-tool-compress-core/src/lib.rs +334 -0
  81. synapse_cli_agent-0.1.13/scripts/install.ps1 +57 -0
  82. synapse_cli_agent-0.1.13/scripts/release.ps1 +53 -0
  83. synapse_cli_agent-0.1.13/src/synapse/__init__.py +13 -0
  84. synapse_cli_agent-0.1.13/src/synapse/__main__.py +6 -0
  85. synapse_cli_agent-0.1.13/src/synapse/app/__init__.py +1 -0
  86. synapse_cli_agent-0.1.13/src/synapse/app/agent.py +492 -0
  87. synapse_cli_agent-0.1.13/src/synapse/app/agent_md.py +107 -0
  88. synapse_cli_agent-0.1.13/src/synapse/cli.py +750 -0
  89. synapse_cli_agent-0.1.13/src/synapse/commands/__init__.py +1 -0
  90. synapse_cli_agent-0.1.13/src/synapse/commands/compression.py +573 -0
  91. synapse_cli_agent-0.1.13/src/synapse/commands/helpers.py +22 -0
  92. synapse_cli_agent-0.1.13/src/synapse/commands/mcp.py +406 -0
  93. synapse_cli_agent-0.1.13/src/synapse/commands/model.py +173 -0
  94. synapse_cli_agent-0.1.13/src/synapse/commands/result.py +34 -0
  95. synapse_cli_agent-0.1.13/src/synapse/commands/sessions.py +443 -0
  96. synapse_cli_agent-0.1.13/src/synapse/commands/slash_cmds.py +521 -0
  97. synapse_cli_agent-0.1.13/src/synapse/commands/slash_complete.py +816 -0
  98. synapse_cli_agent-0.1.13/src/synapse/commands/theme.py +99 -0
  99. synapse_cli_agent-0.1.13/src/synapse/config.py +27 -0
  100. synapse_cli_agent-0.1.13/src/synapse/content/__init__.py +1 -0
  101. synapse_cli_agent-0.1.13/src/synapse/content/input_history.py +122 -0
  102. synapse_cli_agent-0.1.13/src/synapse/content/multimodal.py +733 -0
  103. synapse_cli_agent-0.1.13/src/synapse/content/prompts.py +249 -0
  104. synapse_cli_agent-0.1.13/src/synapse/content/skills_catalog.py +128 -0
  105. synapse_cli_agent-0.1.13/src/synapse/integrations/__init__.py +1 -0
  106. synapse_cli_agent-0.1.13/src/synapse/integrations/checkpoint_seed.py +281 -0
  107. synapse_cli_agent-0.1.13/src/synapse/integrations/codex_history.py +375 -0
  108. synapse_cli_agent-0.1.13/src/synapse/integrations/codex_import.py +393 -0
  109. synapse_cli_agent-0.1.13/src/synapse/integrations/codex_sessions.py +629 -0
  110. synapse_cli_agent-0.1.13/src/synapse/integrations/describe_image.py +370 -0
  111. synapse_cli_agent-0.1.13/src/synapse/integrations/http_clients.py +199 -0
  112. synapse_cli_agent-0.1.13/src/synapse/integrations/llm_openai_compat.py +90 -0
  113. synapse_cli_agent-0.1.13/src/synapse/integrations/llm_openai_websocket.py +187 -0
  114. synapse_cli_agent-0.1.13/src/synapse/integrations/mcp_client.py +646 -0
  115. synapse_cli_agent-0.1.13/src/synapse/integrations/vision_middleware.py +62 -0
  116. synapse_cli_agent-0.1.13/src/synapse/models/__init__.py +5 -0
  117. synapse_cli_agent-0.1.13/src/synapse/models/config.py +240 -0
  118. synapse_cli_agent-0.1.13/src/synapse/models/helpers.py +206 -0
  119. synapse_cli_agent-0.1.13/src/synapse/models/profile.py +59 -0
  120. synapse_cli_agent-0.1.13/src/synapse/models/registry.py +722 -0
  121. synapse_cli_agent-0.1.13/src/synapse/models_registry.py +7 -0
  122. synapse_cli_agent-0.1.13/src/synapse/observability/__init__.py +1 -0
  123. synapse_cli_agent-0.1.13/src/synapse/observability/startup_trace.py +127 -0
  124. synapse_cli_agent-0.1.13/src/synapse/runtime/__init__.py +1 -0
  125. synapse_cli_agent-0.1.13/src/synapse/runtime/async_runtime.py +176 -0
  126. synapse_cli_agent-0.1.13/src/synapse/runtime/backends.py +458 -0
  127. synapse_cli_agent-0.1.13/src/synapse/runtime/context_compact.py +249 -0
  128. synapse_cli_agent-0.1.13/src/synapse/runtime/execute_capture.py +48 -0
  129. synapse_cli_agent-0.1.13/src/synapse/runtime/fs_permissions.py +79 -0
  130. synapse_cli_agent-0.1.13/src/synapse/runtime/harness.py +57 -0
  131. synapse_cli_agent-0.1.13/src/synapse/runtime/hitl.py +197 -0
  132. synapse_cli_agent-0.1.13/src/synapse/runtime/interaction_ledger.py +82 -0
  133. synapse_cli_agent-0.1.13/src/synapse/runtime/middleware.py +802 -0
  134. synapse_cli_agent-0.1.13/src/synapse/runtime/model_request_compression_middleware.py +745 -0
  135. synapse_cli_agent-0.1.13/src/synapse/runtime/pathing.py +146 -0
  136. synapse_cli_agent-0.1.13/src/synapse/runtime/safety.py +184 -0
  137. synapse_cli_agent-0.1.13/src/synapse/runtime/steer.py +240 -0
  138. synapse_cli_agent-0.1.13/src/synapse/runtime/subagents.py +207 -0
  139. synapse_cli_agent-0.1.13/src/synapse/runtime/tool_ignore.py +221 -0
  140. synapse_cli_agent-0.1.13/src/synapse/runtime/tool_output_eval.py +118 -0
  141. synapse_cli_agent-0.1.13/src/synapse/runtime/tool_output_middleware.py +585 -0
  142. synapse_cli_agent-0.1.13/src/synapse/runtime/tool_output_usage_middleware.py +60 -0
  143. synapse_cli_agent-0.1.13/src/synapse/sessions/__init__.py +31 -0
  144. synapse_cli_agent-0.1.13/src/synapse/sessions/cancel_repair.py +208 -0
  145. synapse_cli_agent-0.1.13/src/synapse/sessions/session_recap.py +174 -0
  146. synapse_cli_agent-0.1.13/src/synapse/sessions/store.py +695 -0
  147. synapse_cli_agent-0.1.13/src/synapse/sessions/transcript.py +754 -0
  148. synapse_cli_agent-0.1.13/src/synapse/settings/__init__.py +5 -0
  149. synapse_cli_agent-0.1.13/src/synapse/settings/config_paths.py +184 -0
  150. synapse_cli_agent-0.1.13/src/synapse/settings/schema.py +464 -0
  151. synapse_cli_agent-0.1.13/src/synapse/tool_output/__init__.py +59 -0
  152. synapse_cli_agent-0.1.13/src/synapse/tool_output/detection.py +170 -0
  153. synapse_cli_agent-0.1.13/src/synapse/tool_output/metrics.py +32 -0
  154. synapse_cli_agent-0.1.13/src/synapse/tool_output/models.py +173 -0
  155. synapse_cli_agent-0.1.13/src/synapse/tool_output/pipeline.py +330 -0
  156. synapse_cli_agent-0.1.13/src/synapse/tool_output/repository.py +721 -0
  157. synapse_cli_agent-0.1.13/src/synapse/tool_output/transformers.py +648 -0
  158. synapse_cli_agent-0.1.13/src/synapse/tools/__init__.py +5 -0
  159. synapse_cli_agent-0.1.13/src/synapse/tools/session_tools.py +204 -0
  160. synapse_cli_agent-0.1.13/src/synapse/ui/__init__.py +10 -0
  161. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/__init__.py +73 -0
  162. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/components/__init__.py +143 -0
  163. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/components/key_hints.py +30 -0
  164. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/components/mcp.py +64 -0
  165. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/components/mode.py +24 -0
  166. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/components/model.py +28 -0
  167. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/components/thread.py +29 -0
  168. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/context.py +36 -0
  169. synapse_cli_agent-0.1.13/src/synapse/ui/bottombar/core.py +74 -0
  170. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/__init__.py +25 -0
  171. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/base.py +362 -0
  172. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/codex_session_list.py +84 -0
  173. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/compression_diagnostics.py +210 -0
  174. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/git_explore.py +702 -0
  175. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/mcp_panel.py +407 -0
  176. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/model_picker.py +128 -0
  177. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/safety_panel.py +63 -0
  178. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/session_list.py +98 -0
  179. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/theme_designer.py +863 -0
  180. synapse_cli_agent-0.1.13/src/synapse/ui/dialogs/theme_picker.py +113 -0
  181. synapse_cli_agent-0.1.13/src/synapse/ui/git_explore/__init__.py +31 -0
  182. synapse_cli_agent-0.1.13/src/synapse/ui/git_explore/engine.py +82 -0
  183. synapse_cli_agent-0.1.13/src/synapse/ui/git_explore/provider.py +242 -0
  184. synapse_cli_agent-0.1.13/src/synapse/ui/git_explore/unified.py +85 -0
  185. synapse_cli_agent-0.1.13/src/synapse/ui/rendering.py +350 -0
  186. synapse_cli_agent-0.1.13/src/synapse/ui/sink.py +70 -0
  187. synapse_cli_agent-0.1.13/src/synapse/ui/steer_widget.py +367 -0
  188. synapse_cli_agent-0.1.13/src/synapse/ui/stream.py +1207 -0
  189. synapse_cli_agent-0.1.13/src/synapse/ui/stream_events.py +421 -0
  190. synapse_cli_agent-0.1.13/src/synapse/ui/stream_runtime.py +252 -0
  191. synapse_cli_agent-0.1.13/src/synapse/ui/theme.py +1154 -0
  192. synapse_cli_agent-0.1.13/src/synapse/ui/timeline.py +621 -0
  193. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/__init__.py +97 -0
  194. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/components/__init__.py +150 -0
  195. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/components/branch.py +41 -0
  196. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/components/title.py +24 -0
  197. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/components/tool_output.py +24 -0
  198. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/components/usage.py +24 -0
  199. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/components/workspace.py +32 -0
  200. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/context.py +32 -0
  201. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/core.py +979 -0
  202. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/git_changes_popover.py +178 -0
  203. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/git_chrome.py +475 -0
  204. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/tool_output_popover.py +84 -0
  205. synapse_cli_agent-0.1.13/src/synapse/ui/topbar/widget.py +474 -0
  206. synapse_cli_agent-0.1.13/src/synapse/ui/tui.py +5717 -0
  207. synapse_cli_agent-0.1.13/src/synapse/ui/turn_rail.py +71 -0
  208. synapse_cli_agent-0.1.13/src/synapse/ui/user_turn.py +83 -0
  209. synapse_cli_agent-0.1.13/src/synapse/ui/welcome.py +261 -0
  210. synapse_cli_agent-0.1.13/synapse.cmd +32 -0
  211. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/duplicate_response_item.jsonl +6 -0
  212. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/incomplete_and_aborted.jsonl +10 -0
  213. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/legacy_compaction.jsonl +5 -0
  214. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/normal_completed.jsonl +6 -0
  215. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/replacement_history.jsonl +9 -0
  216. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/rollback.jsonl +13 -0
  217. synapse_cli_agent-0.1.13/tests/fixtures/codex_rollouts/unsupported_replacement.jsonl +1 -0
  218. synapse_cli_agent-0.1.13/tests/fixtures/sample_repo/calculator.py +14 -0
  219. synapse_cli_agent-0.1.13/tests/fixtures/sample_repo/test_calculator.py +13 -0
  220. synapse_cli_agent-0.1.13/tests/fixtures/tool_output_eval.json +30 -0
  221. synapse_cli_agent-0.1.13/tests/test_agent_factory.py +260 -0
  222. synapse_cli_agent-0.1.13/tests/test_async_checkpointer.py +95 -0
  223. synapse_cli_agent-0.1.13/tests/test_backends.py +231 -0
  224. synapse_cli_agent-0.1.13/tests/test_bottombar_registry.py +209 -0
  225. synapse_cli_agent-0.1.13/tests/test_cancel_repair.py +119 -0
  226. synapse_cli_agent-0.1.13/tests/test_capabilities.py +585 -0
  227. synapse_cli_agent-0.1.13/tests/test_checkpoint_seed.py +253 -0
  228. synapse_cli_agent-0.1.13/tests/test_cli.py +73 -0
  229. synapse_cli_agent-0.1.13/tests/test_cli_codex_import.py +113 -0
  230. synapse_cli_agent-0.1.13/tests/test_codex_history.py +216 -0
  231. synapse_cli_agent-0.1.13/tests/test_codex_import.py +168 -0
  232. synapse_cli_agent-0.1.13/tests/test_codex_sessions.py +421 -0
  233. synapse_cli_agent-0.1.13/tests/test_codex_sessions_windows.py +15 -0
  234. synapse_cli_agent-0.1.13/tests/test_compact_tool_descriptions.py +214 -0
  235. synapse_cli_agent-0.1.13/tests/test_config.py +139 -0
  236. synapse_cli_agent-0.1.13/tests/test_context_compact.py +99 -0
  237. synapse_cli_agent-0.1.13/tests/test_context_window.py +88 -0
  238. synapse_cli_agent-0.1.13/tests/test_describe_image.py +208 -0
  239. synapse_cli_agent-0.1.13/tests/test_dialogs.py +903 -0
  240. synapse_cli_agent-0.1.13/tests/test_git_changes_popover.py +165 -0
  241. synapse_cli_agent-0.1.13/tests/test_git_chrome.py +170 -0
  242. synapse_cli_agent-0.1.13/tests/test_git_explore.py +338 -0
  243. synapse_cli_agent-0.1.13/tests/test_http_clients.py +114 -0
  244. synapse_cli_agent-0.1.13/tests/test_input_history.py +60 -0
  245. synapse_cli_agent-0.1.13/tests/test_iteration_abc.py +155 -0
  246. synapse_cli_agent-0.1.13/tests/test_layered_config.py +137 -0
  247. synapse_cli_agent-0.1.13/tests/test_mcp_schema.py +90 -0
  248. synapse_cli_agent-0.1.13/tests/test_mermaid_render.py +143 -0
  249. synapse_cli_agent-0.1.13/tests/test_middleware_async.py +87 -0
  250. synapse_cli_agent-0.1.13/tests/test_model_request_compression_middleware.py +331 -0
  251. synapse_cli_agent-0.1.13/tests/test_model_retry.py +188 -0
  252. synapse_cli_agent-0.1.13/tests/test_multimodal.py +328 -0
  253. synapse_cli_agent-0.1.13/tests/test_openai_compat_reasoning.py +30 -0
  254. synapse_cli_agent-0.1.13/tests/test_openai_websocket.py +178 -0
  255. synapse_cli_agent-0.1.13/tests/test_pathing.py +68 -0
  256. synapse_cli_agent-0.1.13/tests/test_safety.py +18 -0
  257. synapse_cli_agent-0.1.13/tests/test_session_recap.py +97 -0
  258. synapse_cli_agent-0.1.13/tests/test_slash_and_mcp.py +649 -0
  259. synapse_cli_agent-0.1.13/tests/test_slash_complete.py +242 -0
  260. synapse_cli_agent-0.1.13/tests/test_startup_defer.py +40 -0
  261. synapse_cli_agent-0.1.13/tests/test_steer.py +180 -0
  262. synapse_cli_agent-0.1.13/tests/test_stream_cancel.py +207 -0
  263. synapse_cli_agent-0.1.13/tests/test_stream_tool_items.py +538 -0
  264. synapse_cli_agent-0.1.13/tests/test_stream_ui.py +276 -0
  265. synapse_cli_agent-0.1.13/tests/test_subagent_status.py +29 -0
  266. synapse_cli_agent-0.1.13/tests/test_theme.py +379 -0
  267. synapse_cli_agent-0.1.13/tests/test_timeline.py +179 -0
  268. synapse_cli_agent-0.1.13/tests/test_tool_ignore.py +94 -0
  269. synapse_cli_agent-0.1.13/tests/test_tool_intent.py +125 -0
  270. synapse_cli_agent-0.1.13/tests/test_tool_output.py +711 -0
  271. synapse_cli_agent-0.1.13/tests/test_tool_output_eval.py +15 -0
  272. synapse_cli_agent-0.1.13/tests/test_tool_output_slash.py +318 -0
  273. synapse_cli_agent-0.1.13/tests/test_tool_output_usage_middleware.py +48 -0
  274. synapse_cli_agent-0.1.13/tests/test_topbar_context_ratio.py +75 -0
  275. synapse_cli_agent-0.1.13/tests/test_topbar_registry.py +303 -0
  276. synapse_cli_agent-0.1.13/tests/test_transcript.py +172 -0
  277. synapse_cli_agent-0.1.13/tests/test_tui_codex_import.py +118 -0
  278. synapse_cli_agent-0.1.13/tests/test_tui_selection.py +193 -0
  279. synapse_cli_agent-0.1.13/tests/test_tui_sink.py +870 -0
  280. synapse_cli_agent-0.1.13/tests/test_turn_rail_minimap.py +60 -0
  281. synapse_cli_agent-0.1.13/tests/test_usage_restore.py +39 -0
  282. synapse_cli_agent-0.1.13/tests/test_user_turn_style.py +45 -0
  283. synapse_cli_agent-0.1.13/tests/test_welcome.py +119 -0
  284. synapse_cli_agent-0.1.13/tests/tool_output_plugin_fixture.py +18 -0
  285. synapse_cli_agent-0.1.13/uv.lock +2363 -0
@@ -0,0 +1,41 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ lint:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+
13
+ - name: Install uv
14
+ uses: astral-sh/setup-uv@v5
15
+ with:
16
+ python-version: "3.12"
17
+
18
+ - name: ruff check
19
+ run: uv run ruff check src tests
20
+
21
+ test:
22
+ needs: lint
23
+ runs-on: ${{ matrix.os }}
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ os: [ubuntu-latest, windows-latest]
28
+ python-version: ["3.12", "3.13"]
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v5
34
+ with:
35
+ python-version: ${{ matrix.python-version }}
36
+
37
+ - name: Install dependencies
38
+ run: uv sync
39
+
40
+ - name: Run tests
41
+ run: uv run pytest -v
@@ -0,0 +1,48 @@
1
+ name: docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: pages
15
+ cancel-in-progress: false
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v5
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Install dependencies
29
+ run: uv sync
30
+
31
+ - name: Build site
32
+ run: uv run mkdocs build
33
+
34
+ - name: Upload artifact
35
+ uses: actions/upload-pages-artifact@v3
36
+ with:
37
+ path: site
38
+
39
+ deploy:
40
+ needs: build
41
+ runs-on: ubuntu-latest
42
+ environment:
43
+ name: github-pages
44
+ url: ${{ steps.deployment.outputs.page_url }}
45
+ steps:
46
+ - name: Deploy to GitHub Pages
47
+ id: deployment
48
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,69 @@
1
+ name: Build Native Compression Wheels
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "synapse-tool-compress-core-v*"
7
+ pull_request:
8
+ paths:
9
+ - "rust/synapse-tool-compress-core/**"
10
+ - ".github/workflows/native-compression-wheels.yml"
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ wheel:
18
+ name: ${{ matrix.target }}
19
+ runs-on: ${{ matrix.os }}
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ include:
24
+ - os: windows-latest
25
+ target: x86_64-pc-windows-msvc
26
+ - os: macos-latest
27
+ target: aarch64-apple-darwin
28
+ - os: ubuntu-latest
29
+ target: x86_64-unknown-linux-gnu
30
+ - os: ubuntu-24.04-arm
31
+ target: aarch64-unknown-linux-gnu
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: PyO3/maturin-action@v1
35
+ with:
36
+ command: build
37
+ working-directory: rust/synapse-tool-compress-core
38
+ target: ${{ matrix.target }}
39
+ args: --release --locked --compatibility pypi --out dist
40
+ manylinux: 2014
41
+ # tree-sitter 0.25 requires _BSD_SOURCE on manylinux2014's glibc 2.17
42
+ # for le16toh/be16toh to expand as macros instead of unresolved symbols.
43
+ docker-options: --env CFLAGS=-D_BSD_SOURCE
44
+ - name: Smoke test wheel
45
+ shell: bash
46
+ run: |
47
+ python -m pip install --force-reinstall rust/synapse-tool-compress-core/dist/*.whl
48
+ python -c "import synapse_tool_compress_core; print('native wheel import OK')"
49
+ - uses: actions/upload-artifact@v4
50
+ with:
51
+ name: wheel-${{ matrix.target }}
52
+ path: rust/synapse-tool-compress-core/dist/*.whl
53
+
54
+ publish:
55
+ if: startsWith(github.ref, 'refs/tags/synapse-tool-compress-core-v')
56
+ needs: wheel
57
+ runs-on: ubuntu-latest
58
+ permissions:
59
+ contents: write
60
+ steps:
61
+ - uses: actions/download-artifact@v4
62
+ with:
63
+ pattern: wheel-*
64
+ merge-multiple: true
65
+ path: dist
66
+ - uses: softprops/action-gh-release@v2
67
+ with:
68
+ files: dist/*.whl
69
+ name: synapse-tool-compress-core ${{ github.ref_name }}
@@ -0,0 +1,71 @@
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: Create GitHub Release
50
+ uses: softprops/action-gh-release@v2
51
+ with:
52
+ files: dist/*
53
+ body_path: release_body.md
54
+
55
+ publish-pypi:
56
+ needs: build
57
+ runs-on: ubuntu-latest
58
+ environment:
59
+ name: pypi
60
+ url: https://pypi.org/p/synapse-cli-agent
61
+ permissions:
62
+ id-token: write
63
+ steps:
64
+ - name: Download distribution artifacts
65
+ uses: actions/download-artifact@v4
66
+ with:
67
+ name: python-package-distributions
68
+ path: dist/
69
+
70
+ - name: Publish package distributions to PyPI
71
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,41 @@
1
+ # Rust build artifacts
2
+ **/target/
3
+
4
+ # Python-generated files
5
+ __pycache__/
6
+ *.py[oc]
7
+ build/
8
+ dist/
9
+ wheels/
10
+ *.egg-info
11
+
12
+ # Virtual environments
13
+ .venv
14
+
15
+ # Local env / agent state
16
+ .env
17
+ .coding-agent/
18
+ .cmd-agent/
19
+ .synapse/
20
+ .pytest_cache/
21
+ .ruff_cache/
22
+ .mypy_cache/
23
+ .coverage
24
+ htmlcov/
25
+
26
+ # Agent transient output
27
+ large_tool_results/
28
+ conversation_history/
29
+
30
+ # IDE
31
+ .idea/
32
+ .vscode/
33
+ *.swp
34
+
35
+ # Runtime logs
36
+ logs/
37
+ site/
38
+
39
+ # OS
40
+ Thumbs.db
41
+ .DS_Store
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,19 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ version: 2
5
+
6
+ build:
7
+ os: "ubuntu-22.04"
8
+ tools:
9
+ python: "3.12"
10
+
11
+ python:
12
+ install:
13
+ - method: pip
14
+ path: .
15
+ extra_requirements:
16
+ - dev
17
+
18
+ mkdocs:
19
+ configuration: mkdocs.yml
@@ -0,0 +1,133 @@
1
+ # Synapse 项目协作指南
2
+
3
+ ## 当前仓库结构
4
+
5
+ | 路径 | 主要职责 |
6
+ | ---------------------------------- | -------------------------------------------------------- |
7
+ | `src/synapse/app/` | Agent 装配与 `AGENTS.md` 注入 |
8
+ | `src/synapse/commands/` | slash 命令解析、补全和命令结果 |
9
+ | `src/synapse/content/` | prompt、skills、输入历史和多模态内容处理 |
10
+ | `src/synapse/integrations/` | MCP、模型传输、Codex 导入、图片识别等外部集成 |
11
+ | `src/synapse/models/` | 模型 profile、registry、配置解析与辅助逻辑 |
12
+ | `src/synapse/observability/` | 启动与运行观测 |
13
+ | `src/synapse/runtime/` | backend、middleware、压缩、steer、安全和异步运行时 |
14
+ | `src/synapse/sessions/` | session、transcript、recap、取消修复与持久化 |
15
+ | `src/synapse/settings/` | 分层配置路径、Settings schema 与加载逻辑 |
16
+ | `src/synapse/tool_output/` | 可逆工具输出检测、变换、存储和指标 |
17
+ | `src/synapse/tools/` | 注入 Agent 的自定义工具 |
18
+ | `src/synapse/ui/` | Textual TUI、stream、timeline、dialogs、topbar/bottombar |
19
+ | `tests/` | Python 测试;测试文件通常与领域模块对应 |
20
+ | `rust/synapse-tool-compress-core/` | 可选 Rust/PyO3 原生工具输出压缩核心 |
21
+ | `docs/`、`mkdocs.yml` | 用户文档与 MkDocs 配置 |
22
+ | `.github/workflows/` | CI、文档、Python Release 与原生 wheel 构建 |
23
+
24
+ ## 架构与兼容性约定
25
+
26
+ - 将 `src/synapse/app/agent.py` 视为装配层,不要把具体领域算法继续堆入该文件。
27
+ - 新功能应落入对应领域包;跨领域装配放在 `app/` 或明确的 runtime middleware 中。
28
+ - `src/synapse/config.py` 是兼容导出层。新代码优先从 `synapse.settings` 导入,但不要无理由破坏旧导入路径。
29
+ - 各包 `__init__.py` 中的导出属于公共 API。移动实现时保留必要 re-export,并检查现有测试和扩展调用方。
30
+ - 配置采用用户层与项目层合并策略。修改 Settings 时同步检查:
31
+ - `src/synapse/settings/schema.py`
32
+ - `src/synapse/settings/config_paths.py`
33
+ - `tests/test_config.py`
34
+ - `tests/test_layered_config.py`
35
+ - `README.md` 与 `docs/config.md` 中的用户文档
36
+ - `AGENTS.md` 由 `AgentMdMiddleware` 静态注入,独立于可写 memory。不要把它重新并入 memory 写回机制。
37
+
38
+ ## 编码规范
39
+
40
+ - Ruff 配置是 Python 风格的唯一自动化基线:行宽 100,目标 Python 3.12,规则集 `E/F/I/B/UP`。
41
+ - 为新增或修改的公共函数、复杂状态转换和兼容分支补充类型标注。
42
+ - 捕获宽泛异常只用于明确的降级边界,并说明为何允许 fallback;不要静默吞掉核心业务错误。
43
+ - 避免无界读取、无界搜索和无界终端输出;对日志、工具结果和外部数据设置合理上限。
44
+ - 不在代码、测试快照、文档或终端输出中暴露 API key、token、`.env` 内容或用户私有配置。
45
+ - 修改用户可见行为时,同步更新相应 README/docs;修改内部实现但行为未变时,不制造无关文档改动。
46
+
47
+ ## 6. Python 开发与测试
48
+
49
+ 首次安装或依赖变化后执行:
50
+
51
+ ```powershell
52
+ uv sync
53
+ ```
54
+
55
+ 验证遵循“最窄测试 → 相关领域测试 → 全量检查”的顺序。
56
+
57
+ ### 6.1 针对性测试
58
+
59
+ ```powershell
60
+ uv run --no-sync pytest tests/test_x.py -q
61
+ uv run --no-sync pytest tests/test_x.py::test_case_name -q
62
+ ```
63
+
64
+ 按改动领域优先选择相应测试,例如:
65
+
66
+ | 改动领域 | 优先测试 |
67
+ | ----------------------- | ------------------------------------------------------------------------ |
68
+ | settings/models | `tests/test_config.py`、`tests/test_layered_config.py`、模型相关测试 |
69
+ | backend/safety/runtime | `tests/test_backends.py`、`tests/test_safety.py`、对应 middleware 测试 |
70
+ | tool output/compression | `tests/test_tool_output.py`、`tests/test_tool_output_*`、请求压缩测试 |
71
+ | sessions/Codex import | `tests/test_session_*`、`tests/test_transcript.py`、`tests/test_codex_*` |
72
+ | CLI/slash commands | `tests/test_cli.py`、`tests/test_slash_*` |
73
+ | TUI/widgets/dialogs | 对应 `test_tui_*`、`test_stream_*`、`test_dialogs.py` 和组件测试 |
74
+
75
+ ### 6.2 全量检查
76
+
77
+ 针对性测试通过后,根据改动风险运行:
78
+
79
+ ```powershell
80
+ uv run --no-sync ruff check .
81
+ uv run --no-sync pytest -q
82
+ ```
83
+
84
+ CI 会在 Windows/Linux、Python 3.12/3.13 上运行 lint 和测试。平台相关改动至少要覆盖当前本机,并在代码层面检查另一平台分支。
85
+
86
+ ### 6.3 文档与构建
87
+
88
+ 修改 `docs/`、`README.md` 或 `mkdocs.yml` 后运行:
89
+
90
+ ```powershell
91
+ uv run --no-sync mkdocs build
92
+ ```
93
+
94
+ 修改打包配置、入口点或发布内容后可运行:
95
+
96
+ ```powershell
97
+ uv build
98
+ ```
99
+
100
+ ## 7. Rust/PyO3 原生压缩核心
101
+
102
+ - `synapse-tool-compress-core` 是独立可选包,不是 Synapse 的必需开发依赖。
103
+ - Python 主程序必须在未安装原生 wheel 时正常工作,不能移除 `ImportError`/`OSError` fallback。
104
+ - 修改 `rust/synapse-tool-compress-core/` 时,至少运行:
105
+
106
+ ```powershell
107
+ cargo test --manifest-path rust/synapse-tool-compress-core/Cargo.toml
108
+ cargo fmt --manifest-path rust/synapse-tool-compress-core/Cargo.toml --check
109
+ ```
110
+
111
+ - 如修改 Python 绑定/API,再构建或安装本地扩展,并运行 `tests/test_tool_output.py` 及相关压缩测试。
112
+ - 保留 `src/headroom_port/` 中的 Apache-2.0 SPDX、来源归属、`LICENSE` 和 `NOTICE`;不要引入被明确排除的网络调用或模型下载依赖。
113
+ - 原生 wheel 由 `.github/workflows/native-compression-wheels.yml` 独立构建,tag 格式为 `synapse-tool-compress-core-v*`。
114
+
115
+ ## 9. 发布流程
116
+
117
+ 任何 `git push` 前必须询问用户:**“本次是否需要打 tag 发 Release?”**
118
+ 如果用户确认不发布,只执行普通 push,不创建 tag。
119
+ 如果用户确认发布:
120
+
121
+ 1. 读取 `pyproject.toml` 的当前版本,并让用户确认或覆盖版本号。
122
+ 2. 用 `git log` 对比上一个 `v*` tag 以来的变更。
123
+ 3. 在 `CHANGELOG.md` 顶部新增 `## v{version}` 段落;标题必须与 tag 完全一致,并按新增功能、修复、工程改进等类别总结。
124
+ 4. 如版本变化,更新 `pyproject.toml`;需要时同步 `uv.lock`。
125
+ 5. 运行相关测试、Ruff 和 `uv build`,确认工作树内容正确。
126
+ 6. 提交发布文件,提交信息使用:`release: bump to v{version}`。
127
+ 7. 运行:
128
+
129
+ ```powershell
130
+ powershell -ExecutionPolicy Bypass -File scripts/release.ps1
131
+ ```
132
+
133
+ 8. 脚本会创建并推送 `v{version}` tag;`.github/workflows/release.yml` 会从 `CHANGELOG.md` 提取同名段落、执行 `uv build` 并创建 GitHub Release。
@@ -0,0 +1,270 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ Each release section starts with `## v{version}` and ends before the next `## ` heading.
6
+ The release workflow automatically extracts the matching section as release notes.
7
+
8
+ ---
9
+
10
+ ## v0.1.13
11
+
12
+ ### 新功能
13
+
14
+ - 支持通过 PyPI Trusted Publisher 自动发布 `synapse-cli-agent` 分发包。
15
+
16
+ ### 工程改进
17
+
18
+ - 安装文档增加无需克隆仓库的 PyPI 安装方式;`uv` 可自动管理所需 Python 版本。
19
+
20
+ ---
21
+
22
+ ## v0.1.2
23
+
24
+ ### 修复
25
+
26
+ - 修复 `synapse-tool-compress-core` manylinux2014 wheel 中 tree-sitter 的 `le16toh` / `be16toh` 未解析符号,确保原生扩展可导入。
27
+
28
+ ### 工程改进
29
+
30
+ - 原生 wheel 构建固定 manylinux2014 兼容目标,并增加安装导入冒烟测试。
31
+ - 同步 Rust crate 与 Python wheel 的发布版本为 `0.1.2`。
32
+
33
+ ---
34
+
35
+ ## v0.1.11
36
+
37
+ ### 新功能
38
+
39
+ - F5 MCP Tools 面板支持按 `d` 临时切换当前选中 MCP server 的启用状态,并自动重建 agent;该状态不写入 `mcp.json`
40
+ - 工具输出路径压缩增加更清晰的统计与诊断展示,优化压缩处理路径
41
+
42
+ ### 修复
43
+
44
+ - 修复会话切换与删除快捷键的职责冲突
45
+
46
+ ### 工程改进
47
+
48
+ - 扩充 `AGENTS.md` 的仓库结构、架构约束、测试和发布协作规范
49
+
50
+ ---
51
+
52
+ ## v0.1.10
53
+
54
+ ### 工程改进
55
+
56
+ - 重组应用、命令、运行时、内容与会话等核心领域模块,收紧模块职责与依赖边界
57
+ - 拆分工具输出管道为模型、仓储、检测和变换层,保留既有公共 API
58
+ - 将 slash 命令按压缩、会话、MCP、模型和主题职责拆分,保留统一分发入口
59
+ - 拆分流处理为渲染、事件归一化与运行时迭代层,兼容现有 CLI 和 TUI 调用路径
60
+ - 提取 TUI turn rail 和用户 turn 格式化逻辑,降低主应用模块复杂度
61
+ - 拆分模型配置解析、Profile 与 settings/能力辅助逻辑,保持 provider 工厂和 mock 契约稳定
62
+
63
+ ---
64
+
65
+ ## v0.1.9
66
+
67
+ ### 新功能
68
+
69
+ - 紧凑工具描述中间件:替换上游冗长的工具 schema 描述(~4K chars → ~200 chars),减少 token 开销
70
+ - Cache-aware 压缩控制面:实时追踪 provider 缓存命中/写入,区分缓存输入与新输入
71
+ - 压缩诊断面板:profile-driven 内容分解与优化机会排序(TUI `Ctrl+D`)
72
+ - 请求账本(interaction ledger):turn 级与 model-call 级关联追踪
73
+ - Topbar 实时压缩指示器:显示活跃 zone 与压缩状态
74
+ - `/tool-output` slash 命令:查看工具输出变换统计
75
+ - GitSummaryTransformer:识别 `git status`/`git diff --stat` 输出并智能摘要
76
+
77
+ ### 修复
78
+
79
+ - 避免 search 内容检测误判为 critical-line 回退
80
+ - 修复 Alt+C 复制崩溃
81
+
82
+ ### 工程改进
83
+
84
+ - 默认路径从 `.coding-agent` 迁移至 `.synapse`(checkpoint / sessions / memory)
85
+ - 工具输出压缩阈值降至 512 bytes
86
+ - CI native compression wheel 发布到 GitHub Release(替代 PyPI)
87
+
88
+ ---
89
+
90
+ ## v0.1.8
91
+
92
+ ### 新功能
93
+
94
+ - 工具输出变换管道:大型工具结果自动归档到 JSONL journal,替换为边界预览 + `tool-result://` 引用,避免撑爆 LLM 上下文
95
+ - Rust 原生压缩核心 (`synapse-tool-compress-core`):智能摘要引擎 SmartCrusher,支持 code/diff/log/search 专用压缩器,BM25 相关性排序,adaptive sizer
96
+ - CLI `--diagnose-tool-output` 诊断标志:查看每次工具输出的变换统计
97
+ - F4 多选删除 session + F5 MCP 分组折叠 + 多选 UI 统一
98
+
99
+ ### 修复
100
+
101
+ - MCP deferred 状态不再错误显示为 "mcp err"
102
+
103
+ ### 工程改进
104
+
105
+ - `tool_results.py` 重构为 `tool_output.py` + `tool_output_middleware.py`,职责更清晰
106
+ - 新增 `tool_output_eval.py` 评估框架
107
+ - CI 新增 native-compression-wheels workflow 用于构建 Rust wheel
108
+
109
+ ---
110
+
111
+ ## v0.1.7
112
+
113
+ ### 新功能
114
+
115
+ - 斜杠命令 TUI 输出升级为 Markdown 渲染,会话/MCP/主题等数据使用 Rich 表格展示
116
+ - AgentMdMiddleware:将 `AGENTS.md` 静态注入 system prompt,与 memory 解耦
117
+ - MCP per-tool 过滤:支持 UI 勾选工具并持久化到配置
118
+
119
+ ### 修复
120
+
121
+ - 全新 session 输入斜杠命令不会在 TUI 显示内容(welcome 页面遮挡 `#log`)
122
+ - shell 默认值平台感知:非 Windows 用 `bash` 替代 `pwsh`
123
+ - prompt_border 校验 Textual 白名单,新增 `panel` 样式支持
124
+
125
+ ### 工程改进
126
+
127
+ - 添加 MkDocs + GitHub Pages 文档站点
128
+ - subagents 和 memory 默认关闭,精简冗余 middleware prompt 块
129
+ - UI:steer 更名为 queue,简化 bottombar mode 标签
130
+
131
+ ---
132
+
133
+ ## v0.1.6
134
+
135
+ ### 新功能
136
+
137
+ - 支持 OpenAI Responses API WebSocket 传输,降低延迟
138
+ - Welcome 页面动画重构:左到右打字光标出现 + 斜扫逐点删除循环
139
+ - Braille Logo 点阵逐点显隐动画,仅用 muted/fg 两种主题色无中间杂色
140
+ - 打字光标效果:新字符短暂高亮 accent 后降为 fg
141
+ - `prompt_border` 字段支持主题自定义输入框边框样式(tall/heavy/dashed/dotted/double/round/solid)
142
+ - 后端 glob/grep 工具自动跳过 `.gitignore` 匹配路径
143
+
144
+ ### 修复
145
+
146
+ - WebSocket:握手前刷新异步 API key,避免网关 401
147
+ - WebSocket:关闭 ping timeout,防止推理期间误断连
148
+ - WebSocket:过滤 Chat Completions 专用 `thinking` 字段
149
+ - TUI:主题设计器 backdrop 完全透明
150
+ - TUI:修复 `_open_theme_designer` 缺失回调
151
+ - TUI:移除 `_save_theme` 重复 `apply_theme` 调用,避免 UI 卡死
152
+ - TUI:git changes popover 重新挂载避免 DuplicateIds 异常
153
+ - SteerQueue:修复可重入死锁和 graph 重建后队列丢失
154
+ - 修复子 agent 工具调用的时间线渲染
155
+ - 修复 alt-v 多行粘贴被截断
156
+
157
+ ### 性能
158
+
159
+ - 纯异步 model clients,消除同步 OpenAI 客户端的阻塞
160
+ - 加速模型切换和 shutdown 流程
161
+
162
+ ### 工程
163
+
164
+ - 移除 cancel-seal 诊断日志输出
165
+ - SteerQueue 在活跃 turn 期间保持可见
166
+ - 简化 agent 工具表面,减少不必要的工具暴露
167
+ - 上调模型瞬时故障重试上限
168
+
169
+ ---
170
+
171
+ ## v0.1.5
172
+
173
+ ### 新功能
174
+
175
+ - 新增独立识图服务:非多模态主模型可通过 `vision_model` 配置独立图片识别服务,自动将图片转为文字描述后交给主模型处理
176
+ - 支持 `models.json` / `settings.json` 中配置 `vision_model`,可自由更换任意 OpenAI-compatible 识图服务(Qwen-VL 等)
177
+ - 识图服务支持独立 `think` 开关(不影响主模型思考模式)、`allow_remote_urls` 安全策略、超时重试和 fallback 模型
178
+ - 自动推断主模型是否原生支持图片输入(按 provider/model 名匹配),支持 `image_input` 显式覆盖
179
+
180
+ ### 修复
181
+
182
+ - 修复 mermaid / git-explore 调用卡死问题
183
+ - 修复 Windows 下 git 输出编码导致的乱码问题
184
+
185
+ ### 工程
186
+
187
+ - 新增 `vision_middleware`、`describe_image` 模块
188
+ - 新增识图服务测试和 API 检查脚本
189
+
190
+ ---
191
+
192
+ ## v0.1.4
193
+
194
+ ### 新功能
195
+
196
+ - 新增 Codex session 的只读发现、预览和导入,支持 CLI 与 TUI picker
197
+ - 导入使用终态 checkpoint seeding 与 ledger,支持幂等重用和崩溃恢复
198
+
199
+ ### 修复
200
+
201
+ - 修复 state DB 过期、空 thread、Windows 扩展路径、长 metadata header 导致 Codex 历史缺失的问题
202
+ - 支持 `subagent.thread_spawn` 子代理会话,并按首条用户消息生成 picker 与导入标题
203
+ - 对可恢复的模型服务 5xx 故障增加退避重试,并向 TUI 显示重试状态
204
+
205
+ ### 工程
206
+
207
+ - 扩充 Codex discovery、import、TUI 和 retry 回归覆盖
208
+
209
+ ---
210
+
211
+ ## v0.1.3
212
+
213
+ ### 修复
214
+
215
+ - 修复 49 个 ruff lint 错误(E501 超长行、UP042 StrEnum、F401/F811 未使用导入、I001 导入排序)
216
+
217
+ ### 工程
218
+
219
+ - CI 仅对 PR 触发,避免 push tag 时与 Release workflow 重复构建
220
+
221
+ ---
222
+
223
+ ## v0.1.2
224
+
225
+ ### 修复
226
+
227
+ - Release workflow 中 CHANGELOG 提取脚本误将 shell 变量当 Python 变量,改用 `os.environ` 读取
228
+
229
+ ---
230
+
231
+ ## v0.1.1
232
+
233
+ ### 工程
234
+
235
+ - 新增 `CHANGELOG.md`,发布说明从此文件对应版本段落自动提取
236
+ - 修复 `release.ps1`:打 tag 时同步推送分支提交,避免 tag 到了代码没跟上
237
+ - 更新 `AGENTS.md` 发布流程:AI 自动分析变更、写入 changelog 条目
238
+
239
+ ---
240
+
241
+ ## v0.1.0
242
+
243
+ 初版发布。基于 LangChain Deep Agents 的本地 AI 编码 Agent。
244
+
245
+ ### 新功能
246
+
247
+ - 自主编码闭环:读改代码、执行命令、运行测试、Git 操作
248
+ - 子代理协作:内置 researcher / tester / reviewer,任务自动拆解并行执行
249
+ - MCP 协议支持,接入外部工具生态
250
+ - 多模型切换:OpenAI / Anthropic / DeepSeek / 任意 OpenAI-compatible 网关
251
+ - TUI 终端界面(Textual):斜杠命令补全、实时流式输出、快捷键
252
+ - CLI 命令行:`run` / `chat` / `tui` / `sessions` / `models` / `mcp` / `version`
253
+ - 分层配置:用户全局 + 项目本地,密钥写入 models.json
254
+ - Skills 系统:Agent Skills 可复用能力单元
255
+ - 会话管理:SQLite checkpointer,支持导出
256
+ - TUI 文本选择与复制、mermaid 渲染、Git Explore
257
+ - 自适应顶栏与底栏,模型/MCP 状态显示
258
+
259
+ ### 修复
260
+
261
+ - Windows subprocess timeout 管道卡死问题
262
+ - TeXicode 解析错误污染最终回答
263
+ - Textual DiffView 卸载后样式缓存泄漏
264
+ - stream_chunk_timeout 默认关闭,避免长思考被掐断
265
+
266
+ ### 工程
267
+
268
+ - uv 依赖管理,Python 3.12+
269
+ - GitHub Actions:CI(lint + test)和 Release(自动构建 wheel)
270
+ - 一键发布脚本 `scripts/release.ps1`