synapse-cli-agent 0.1.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- synapse/__init__.py +13 -0
- synapse/__main__.py +6 -0
- synapse/app/__init__.py +1 -0
- synapse/app/agent.py +492 -0
- synapse/app/agent_md.py +107 -0
- synapse/cli.py +750 -0
- synapse/commands/__init__.py +1 -0
- synapse/commands/compression.py +573 -0
- synapse/commands/helpers.py +22 -0
- synapse/commands/mcp.py +406 -0
- synapse/commands/model.py +173 -0
- synapse/commands/result.py +34 -0
- synapse/commands/sessions.py +443 -0
- synapse/commands/slash_cmds.py +521 -0
- synapse/commands/slash_complete.py +816 -0
- synapse/commands/theme.py +99 -0
- synapse/config.py +27 -0
- synapse/content/__init__.py +1 -0
- synapse/content/input_history.py +122 -0
- synapse/content/multimodal.py +733 -0
- synapse/content/prompts.py +249 -0
- synapse/content/skills_catalog.py +128 -0
- synapse/integrations/__init__.py +1 -0
- synapse/integrations/checkpoint_seed.py +281 -0
- synapse/integrations/codex_history.py +375 -0
- synapse/integrations/codex_import.py +393 -0
- synapse/integrations/codex_sessions.py +629 -0
- synapse/integrations/describe_image.py +370 -0
- synapse/integrations/http_clients.py +199 -0
- synapse/integrations/llm_openai_compat.py +90 -0
- synapse/integrations/llm_openai_websocket.py +187 -0
- synapse/integrations/mcp_client.py +646 -0
- synapse/integrations/vision_middleware.py +62 -0
- synapse/models/__init__.py +5 -0
- synapse/models/config.py +240 -0
- synapse/models/helpers.py +206 -0
- synapse/models/profile.py +59 -0
- synapse/models/registry.py +722 -0
- synapse/models_registry.py +7 -0
- synapse/observability/__init__.py +1 -0
- synapse/observability/startup_trace.py +127 -0
- synapse/runtime/__init__.py +1 -0
- synapse/runtime/async_runtime.py +176 -0
- synapse/runtime/backends.py +458 -0
- synapse/runtime/context_compact.py +249 -0
- synapse/runtime/execute_capture.py +48 -0
- synapse/runtime/fs_permissions.py +79 -0
- synapse/runtime/harness.py +57 -0
- synapse/runtime/hitl.py +197 -0
- synapse/runtime/interaction_ledger.py +82 -0
- synapse/runtime/middleware.py +802 -0
- synapse/runtime/model_request_compression_middleware.py +745 -0
- synapse/runtime/pathing.py +146 -0
- synapse/runtime/safety.py +184 -0
- synapse/runtime/steer.py +240 -0
- synapse/runtime/subagents.py +207 -0
- synapse/runtime/tool_ignore.py +221 -0
- synapse/runtime/tool_output_eval.py +118 -0
- synapse/runtime/tool_output_middleware.py +585 -0
- synapse/runtime/tool_output_usage_middleware.py +60 -0
- synapse/sessions/__init__.py +31 -0
- synapse/sessions/cancel_repair.py +208 -0
- synapse/sessions/session_recap.py +174 -0
- synapse/sessions/store.py +695 -0
- synapse/sessions/transcript.py +754 -0
- synapse/settings/__init__.py +5 -0
- synapse/settings/config_paths.py +184 -0
- synapse/settings/schema.py +464 -0
- synapse/tool_output/__init__.py +59 -0
- synapse/tool_output/detection.py +170 -0
- synapse/tool_output/metrics.py +32 -0
- synapse/tool_output/models.py +173 -0
- synapse/tool_output/pipeline.py +330 -0
- synapse/tool_output/repository.py +721 -0
- synapse/tool_output/transformers.py +648 -0
- synapse/tools/__init__.py +5 -0
- synapse/tools/session_tools.py +204 -0
- synapse/ui/__init__.py +10 -0
- synapse/ui/bottombar/__init__.py +73 -0
- synapse/ui/bottombar/components/__init__.py +143 -0
- synapse/ui/bottombar/components/key_hints.py +30 -0
- synapse/ui/bottombar/components/mcp.py +64 -0
- synapse/ui/bottombar/components/mode.py +24 -0
- synapse/ui/bottombar/components/model.py +28 -0
- synapse/ui/bottombar/components/thread.py +29 -0
- synapse/ui/bottombar/context.py +36 -0
- synapse/ui/bottombar/core.py +74 -0
- synapse/ui/dialogs/__init__.py +25 -0
- synapse/ui/dialogs/base.py +362 -0
- synapse/ui/dialogs/codex_session_list.py +84 -0
- synapse/ui/dialogs/compression_diagnostics.py +210 -0
- synapse/ui/dialogs/git_explore.py +702 -0
- synapse/ui/dialogs/mcp_panel.py +407 -0
- synapse/ui/dialogs/model_picker.py +128 -0
- synapse/ui/dialogs/safety_panel.py +63 -0
- synapse/ui/dialogs/session_list.py +98 -0
- synapse/ui/dialogs/theme_designer.py +863 -0
- synapse/ui/dialogs/theme_picker.py +113 -0
- synapse/ui/git_explore/__init__.py +31 -0
- synapse/ui/git_explore/engine.py +82 -0
- synapse/ui/git_explore/provider.py +242 -0
- synapse/ui/git_explore/unified.py +85 -0
- synapse/ui/rendering.py +350 -0
- synapse/ui/sink.py +70 -0
- synapse/ui/steer_widget.py +367 -0
- synapse/ui/stream.py +1207 -0
- synapse/ui/stream_events.py +421 -0
- synapse/ui/stream_runtime.py +252 -0
- synapse/ui/theme.py +1154 -0
- synapse/ui/timeline.py +621 -0
- synapse/ui/topbar/__init__.py +97 -0
- synapse/ui/topbar/components/__init__.py +150 -0
- synapse/ui/topbar/components/branch.py +41 -0
- synapse/ui/topbar/components/title.py +24 -0
- synapse/ui/topbar/components/tool_output.py +24 -0
- synapse/ui/topbar/components/usage.py +24 -0
- synapse/ui/topbar/components/workspace.py +32 -0
- synapse/ui/topbar/context.py +32 -0
- synapse/ui/topbar/core.py +979 -0
- synapse/ui/topbar/git_changes_popover.py +178 -0
- synapse/ui/topbar/git_chrome.py +475 -0
- synapse/ui/topbar/tool_output_popover.py +84 -0
- synapse/ui/topbar/widget.py +474 -0
- synapse/ui/tui.py +5717 -0
- synapse/ui/turn_rail.py +71 -0
- synapse/ui/user_turn.py +83 -0
- synapse/ui/welcome.py +261 -0
- synapse_cli_agent-0.1.13.dist-info/METADATA +412 -0
- synapse_cli_agent-0.1.13.dist-info/RECORD +131 -0
- synapse_cli_agent-0.1.13.dist-info/WHEEL +4 -0
- synapse_cli_agent-0.1.13.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: synapse-cli-agent
|
|
3
|
+
Version: 0.1.13
|
|
4
|
+
Summary: Local coding agent built on LangChain Deep Agents (LocalShell, no sandbox)
|
|
5
|
+
Author-email: alex8224 <alex8224@gmail.com>
|
|
6
|
+
Requires-Python: >=3.12
|
|
7
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
8
|
+
Requires-Dist: deepagents>=0.6.12
|
|
9
|
+
Requires-Dist: langchain-anthropic>=1.4.8
|
|
10
|
+
Requires-Dist: langchain-openai>=1.3.5
|
|
11
|
+
Requires-Dist: langchain>=1.3.14
|
|
12
|
+
Requires-Dist: langgraph-checkpoint-sqlite>=3.1.0
|
|
13
|
+
Requires-Dist: langgraph>=1.2.9
|
|
14
|
+
Requires-Dist: mcp>=1.28.0
|
|
15
|
+
Requires-Dist: pydantic-settings>=2.14.2
|
|
16
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
17
|
+
Requires-Dist: rich>=15.0.0
|
|
18
|
+
Requires-Dist: termaid>=0.7.1
|
|
19
|
+
Requires-Dist: texicode>=1.0.3
|
|
20
|
+
Requires-Dist: textual-diff-view>=0.1.5
|
|
21
|
+
Requires-Dist: textual>=1.0.0
|
|
22
|
+
Requires-Dist: typer>=0.27.0
|
|
23
|
+
Requires-Dist: websockets<16,>=13
|
|
24
|
+
Requires-Dist: zstandard>=0.23.0
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: mkdocs-material>=9.7.7; extra == 'dev'
|
|
27
|
+
Requires-Dist: mkdocs>=1.6.1; extra == 'dev'
|
|
28
|
+
Requires-Dist: pytest>=9.1.1; extra == 'dev'
|
|
29
|
+
Requires-Dist: ruff>=0.15.22; extra == 'dev'
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
32
|
+
# Synapse
|
|
33
|
+
|
|
34
|
+
基于 **LangChain Deep Agents** 的本地 Synapse。
|
|
35
|
+
|
|
36
|
+
- Harness: `deepagents.create_deep_agent`
|
|
37
|
+
- Backend: `LocalShellBackend`(**无 sandbox**)
|
|
38
|
+
- 默认审批: **关闭 / 自动通过**
|
|
39
|
+
- 依赖管理: `uv`
|
|
40
|
+
|
|
41
|
+
## 功能
|
|
42
|
+
|
|
43
|
+
| 能力 | 说明 |
|
|
44
|
+
|---|---|
|
|
45
|
+
| 读改代码 | `read/write/edit/glob`;目录和搜索通过 `execute` 调用项目命令 |
|
|
46
|
+
| 执行命令 | `execute` 本地 shell |
|
|
47
|
+
| 规划 | `write_todos` |
|
|
48
|
+
| 子代理 | 默认 `researcher` / `tester` / `reviewer`(`task` 委派) |
|
|
49
|
+
| 自定义工具 | 会话查阅工具;git/测试/搜索等通过 `execute` 调用项目命令 |
|
|
50
|
+
| 记忆 | `AGENTS.md` |
|
|
51
|
+
| Skills | `skills/**`(Agent Skills frontmatter) |
|
|
52
|
+
| 会话 | sqlite checkpointer + 会话元数据管理 |
|
|
53
|
+
| 多模型 | `ModelRegistry`(单模型兼容 / JSON 多 profile) |
|
|
54
|
+
| MCP | 配置 MCP Server 后注入为 tools |
|
|
55
|
+
| 权限/只读 | `FilesystemPermission` + `HarnessProfile.excluded_tools` |
|
|
56
|
+
| CLI | `run` / `chat` / `tui` / `sessions` / `models` / `mcp` / `version` |
|
|
57
|
+
| 可选 HITL | `--require-approval`(默认关) |
|
|
58
|
+
|
|
59
|
+
## 安装
|
|
60
|
+
|
|
61
|
+
### 前置要求
|
|
62
|
+
|
|
63
|
+
- [uv](https://docs.astral.sh/uv/getting-started/installation/)(会自动安装和管理所需的 Python >= 3.12)
|
|
64
|
+
|
|
65
|
+
### 方法一:从 PyPI 安装为系统 CLI 工具(推荐)
|
|
66
|
+
|
|
67
|
+
无需克隆仓库或预装 Python:
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
uv tool install synapse-cli-agent
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
开发者如需从本地源码可编辑安装:
|
|
74
|
+
|
|
75
|
+
```powershell
|
|
76
|
+
powershell -ExecutionPolicy Bypass -File scripts/install.ps1 -Force
|
|
77
|
+
# 或:uv tool install --editable --force .
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
安装后任意目录直接使用:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
synapse tui -w .
|
|
84
|
+
synapse run "查看当前仓库结构并总结" -w .
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
仓库根目录还提供 `synapse.cmd` 薄启动器(优先 PATH 上的入口,其次 `.venv\Scripts`,最后回退 `uv run`)。
|
|
88
|
+
|
|
89
|
+
### 方法二:本地 venv 开发
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# 同步依赖
|
|
93
|
+
uv sync
|
|
94
|
+
|
|
95
|
+
# 使用 venv 入口(Windows)
|
|
96
|
+
.\.venv\Scripts\synapse.exe tui -w .
|
|
97
|
+
|
|
98
|
+
# 或模块入口
|
|
99
|
+
uv run python -m synapse tui -w .
|
|
100
|
+
|
|
101
|
+
# 兼容旧写法
|
|
102
|
+
uv run synapse chat -w .
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 卸载
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
uv tool uninstall synapse-cli-agent
|
|
109
|
+
# 或
|
|
110
|
+
powershell -ExecutionPolicy Bypass -File scripts/install.ps1 -Uninstall
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 快速开始
|
|
114
|
+
|
|
115
|
+
安装并配置完成后,即可运行:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# TUI 交互界面(推荐)
|
|
119
|
+
synapse tui -w .
|
|
120
|
+
|
|
121
|
+
# 单次执行
|
|
122
|
+
synapse run "总结当前项目结构" -w .
|
|
123
|
+
|
|
124
|
+
# CLI 对话
|
|
125
|
+
synapse chat -w .
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 会话管理
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
synapse sessions list
|
|
132
|
+
synapse sessions export <thread_id> -f md
|
|
133
|
+
# 默认写入 .coding-agent/exports/<thread_id>.md;打印到终端加 --stdout
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 模型与 MCP 管理
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
synapse models list
|
|
140
|
+
synapse mcp list
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## 配置
|
|
144
|
+
|
|
145
|
+
Synapse 采用**分层配置**策略:用户全局配置(`~/.synapse/`)与项目本地配置(`<workspace>/.synapse/`)合并,项目层覆盖用户层。
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
~/.synapse/ # 用户全局层(优先级低)
|
|
149
|
+
models.json # 模型 profiles + api_key(推荐方式)
|
|
150
|
+
mcp.json # MCP Server 定义
|
|
151
|
+
settings.json # 非敏感 Settings 覆盖
|
|
152
|
+
themes.json # 自定义 UI 主题
|
|
153
|
+
|
|
154
|
+
<workspace>/.synapse/ # 项目层(优先级高,覆盖用户层)
|
|
155
|
+
models.json
|
|
156
|
+
mcp.json
|
|
157
|
+
settings.json
|
|
158
|
+
themes.json
|
|
159
|
+
system_prompt.md # 自定义系统提示
|
|
160
|
+
sessions.sqlite
|
|
161
|
+
checkpoints.sqlite
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 方式一:环境变量(.env 快速入门)
|
|
165
|
+
|
|
166
|
+
从模板创建,填入密钥即可:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
cp .env.example .env
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
核心变量:
|
|
173
|
+
|
|
174
|
+
| 变量 | 必填 | 说明 |
|
|
175
|
+
|---|---|---|
|
|
176
|
+
| `MODEL` | 是 | 模型标识,如 `openai:gpt-4.1`、`openai:deepseek-chat` |
|
|
177
|
+
| `OPENAI_API_KEY` | 是* | OpenAI 兼容 API 密钥 |
|
|
178
|
+
| `OPENAI_BASE_URL` | 否 | 自定义 API 端点(中转/本地服务需填) |
|
|
179
|
+
| `OPENAI_WEBSOCKET` | 否 | 普通 Responses API 使用 WebSocket;默认 `false`(HTTP/SSE) |
|
|
180
|
+
| `ANTHROPIC_API_KEY` | 否 | Anthropic 原生 API 密钥 |
|
|
181
|
+
| `WORKSPACE` | 否 | 工作区路径,默认 `.` |
|
|
182
|
+
| `SHELL_EXECUTABLE` | 否 | Shell 类型,默认 `pwsh`(可选 `cmd`/`bash`) |
|
|
183
|
+
| `SHELL_TIMEOUT` | 否 | 命令超时秒数,默认 120 |
|
|
184
|
+
| `TOKEN_STREAM` | 否 | token 级流式输出,默认 `true` |
|
|
185
|
+
| `PARALLEL_TOOL_CALLS` | 否 | 并发工具调用,默认 `true` |
|
|
186
|
+
|
|
187
|
+
完整变量列表见 `.env.example`。
|
|
188
|
+
|
|
189
|
+
### 方式二:models.json(多模型 profiles,推荐)
|
|
190
|
+
|
|
191
|
+
在 `~/.synapse/` 或 `<workspace>/.synapse/` 下创建 `models.json`。支持多 profile、自定义模型参数(temperature、max_tokens、thinking 等)。
|
|
192
|
+
|
|
193
|
+
参考示例:`examples/models.example.json`
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{
|
|
197
|
+
"default": "primary",
|
|
198
|
+
"models": {
|
|
199
|
+
"primary": {
|
|
200
|
+
"model": "openai:gpt-4.1",
|
|
201
|
+
"api_key": "sk-REPLACE_ME",
|
|
202
|
+
"websocket": false,
|
|
203
|
+
"context_window": 128000,
|
|
204
|
+
"temperature": 0.2,
|
|
205
|
+
"max_tokens": 8192
|
|
206
|
+
},
|
|
207
|
+
"deepseek": {
|
|
208
|
+
"model": "openai:deepseek-v4-pro",
|
|
209
|
+
"api_key": "sk-REPLACE_ME",
|
|
210
|
+
"base_url": "http://127.0.0.1:3000/v1",
|
|
211
|
+
"context_window": 128000,
|
|
212
|
+
"thinking": "high",
|
|
213
|
+
"temperature": 0.2
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
OpenAI Responses API 同时支持 HTTP/SSE 与普通 LLM WebSocket。profile 中设置
|
|
220
|
+
`"websocket": true` 后,Synapse 使用持久 `/v1/responses` WebSocket;省略或设为
|
|
221
|
+
`false` 时保持现有 HTTP/SSE。自定义 OpenAI-compatible 网关必须实现该 WebSocket
|
|
222
|
+
端点,否则请保持关闭。WebSocket 模式会自动启用 `use_responses_api`。
|
|
223
|
+
|
|
224
|
+
通过 `AGENT_ACTIVE_MODEL` 环境变量或 CLI 参数切换 profile。
|
|
225
|
+
|
|
226
|
+
#### 非多模态模型的图片识别
|
|
227
|
+
|
|
228
|
+
主模型与识图模型独立配置。主模型 profile 不写 `image_input` 时,Synapse 会按常见模型名推断;未知的 OpenAI-compatible 模型默认按纯文本模型处理。需要覆盖推断时,在 profile 中写 `"image_input": true/false`。
|
|
229
|
+
|
|
230
|
+
识图模型放在同一层 `models.json` 顶层的 `vision_model` 配置中(也支持 `settings.json`),可以自由更换任意兼容 OpenAI Chat Completions 图片输入的服务:
|
|
231
|
+
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"vision_model": {
|
|
235
|
+
"model": "qwen-vl-max",
|
|
236
|
+
"base_url": "https://your-vision-gateway.example/v1",
|
|
237
|
+
"api_key_env": "VISION_API_KEY",
|
|
238
|
+
"timeout_secs": 45,
|
|
239
|
+
"max_input_bytes": 10485760,
|
|
240
|
+
"max_retries": 2,
|
|
241
|
+
"fallback_model": "qwen-vl-plus",
|
|
242
|
+
"allow_remote_urls": false,
|
|
243
|
+
"think": true,
|
|
244
|
+
"prompt": "Describe the image for a text-only coding assistant. Extract visible text and errors."
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
`vision_model.model`、`base_url`、`api_key_env` 均可更换;`api_key` 也支持,但建议使用环境变量。`think` 是识图模型独立的思考开关,开启后发送 `thinking: {"type": "enabled"}`;它不影响主模型。默认只处理本地/内存图片;将 `allow_remote_urls` 设为 `true` 才会把消息中的 HTTP(S) 图片 URL 转发给识图服务。该服务只用于把图片转换成文字,配置后图片内容会发送到指定服务。多模态主模型会跳过该 middleware,不调用识图服务。
|
|
250
|
+
|
|
251
|
+
### MCP 服务器配置
|
|
252
|
+
|
|
253
|
+
在 `~/.synapse/` 或 `<workspace>/.synapse/` 下创建 `mcp.json`。
|
|
254
|
+
|
|
255
|
+
参考示例:`examples/mcp.example.json`
|
|
256
|
+
|
|
257
|
+
```json
|
|
258
|
+
{
|
|
259
|
+
"servers": [
|
|
260
|
+
{
|
|
261
|
+
"name": "filesystem",
|
|
262
|
+
"transport": "stdio",
|
|
263
|
+
"command": "npx",
|
|
264
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
|
|
265
|
+
"enabled": false
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"name": "anysearch",
|
|
269
|
+
"transport": "streamable_http",
|
|
270
|
+
"url": "https://api.anysearch.com/mcp",
|
|
271
|
+
"headers": {
|
|
272
|
+
"Authorization": "Bearer ${ANYSEARCH_API_KEY}"
|
|
273
|
+
},
|
|
274
|
+
"enabled": false,
|
|
275
|
+
"tool_prefix": "anysearch__"
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
配置后通过 `synapse mcp list` 查看状态,可在 TUI 中动态启用/禁用。
|
|
282
|
+
|
|
283
|
+
### Settings 覆盖
|
|
284
|
+
|
|
285
|
+
在 `~/.synapse/settings.json` 或 `<workspace>/.synapse/settings.json` 中写入非敏感配置,与 `.env` 环境变量作用相同但优先级更高(项目层 > 用户层 > 环境变量)。
|
|
286
|
+
|
|
287
|
+
## 使用技巧
|
|
288
|
+
|
|
289
|
+
### TUI 快捷键
|
|
290
|
+
|
|
291
|
+
| 快捷键 | 功能 |
|
|
292
|
+
|--------|------|
|
|
293
|
+
| `Ctrl+T` | 折叠/展开最近工具组 |
|
|
294
|
+
| `Ctrl+E` | 展开/收起最近 Thought 摘要 |
|
|
295
|
+
| `Ctrl+L` | 清空 transcript |
|
|
296
|
+
| `Alt+C` | 复制当前划选(无选区时复制最近答案) |
|
|
297
|
+
| `Ctrl+Shift+Y` | 复制最近一条助手答案 |
|
|
298
|
+
| `Ctrl+C` / `Ctrl+Q` | 退出 |
|
|
299
|
+
|
|
300
|
+
文本选择:transcript 中答案/Thought/工具组/用户条支持鼠标拖选(有高亮),划选后用 `Alt+C` 复制。
|
|
301
|
+
|
|
302
|
+
### 斜杠命令(chat / TUI)
|
|
303
|
+
|
|
304
|
+
- `/help` `/thread` `/new` `/sessions` `/session ...` `/switch <id>`
|
|
305
|
+
- `/rename` `/export [md\|json] [path]`
|
|
306
|
+
- `/model` `/model <alias>`
|
|
307
|
+
- `/mcp list|tools|test|reload|enable|disable|config`
|
|
308
|
+
- `/clear` `/exit`
|
|
309
|
+
|
|
310
|
+
补全:TUI 输入 `/` 后有 ghost 建议(`Tab`/`→` 接受,`Shift+Tab` 上一项,`Ctrl+Space` 列出候选);chat 模式下 `Tab` 补全。
|
|
311
|
+
|
|
312
|
+
### MCP transports
|
|
313
|
+
|
|
314
|
+
| transport | 用途 | 关键字段 |
|
|
315
|
+
|-----------|------|----------|
|
|
316
|
+
| `stdio` | 本地 MCP 进程 | `command` / `args` / `env` |
|
|
317
|
+
| `sse` | 远程 SSE | `url` / `headers` |
|
|
318
|
+
| `streamable_http` / `http` | 远程 Streamable HTTP | `url` / `headers` |
|
|
319
|
+
|
|
320
|
+
连接在后台事件循环中保持复用;`/mcp reload` 重建 agent 与连接池。
|
|
321
|
+
|
|
322
|
+
### models.json 字段说明
|
|
323
|
+
|
|
324
|
+
| 字段 | 含义 |
|
|
325
|
+
|---|---|
|
|
326
|
+
| `api_key` | **推荐**:密钥直接写在 models.json |
|
|
327
|
+
| `api_key_env` | 旧方式:从环境变量读密钥 |
|
|
328
|
+
| `thinking` / `thinking_level` / `reasoning_effort` | 思考级别:`off\|minimal\|low\|medium\|high\|max` |
|
|
329
|
+
| `enable_thinking` | 兼容旧字段 bool |
|
|
330
|
+
| `temperature` / `max_tokens` / `timeout` 等 | 直接传给 ChatModel |
|
|
331
|
+
| `stream_chunk_timeout` | 流式相邻 chunk 静默超时(秒);默认关闭,避免长思考被 langchain-openai 120s 掐断 |
|
|
332
|
+
| `model_kwargs` | 请求体 kwargs |
|
|
333
|
+
| `extra_body` | 厂商扩展体(与 thinking 合并) |
|
|
334
|
+
|
|
335
|
+
`.env` 仍可读,仅作迁移/CI 兼容,**不推荐**作为常规分发方式。
|
|
336
|
+
|
|
337
|
+
## 示例:修复 sample_repo
|
|
338
|
+
|
|
339
|
+
`tests/fixtures/sample_repo` 中 `sub()` 有意写错,可用于验证 agent 闭环:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
# 先确认测试失败
|
|
343
|
+
uv run pytest tests/fixtures/sample_repo -q
|
|
344
|
+
|
|
345
|
+
# 让 agent 修复(需要有效模型密钥)
|
|
346
|
+
uv run synapse run "修复 calculator.sub 的 bug,使 tests 全部通过" -w tests/fixtures/sample_repo
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## 环境变量参考
|
|
350
|
+
|
|
351
|
+
关键 Agent 行为变量:
|
|
352
|
+
|
|
353
|
+
| 变量 | 默认 | 含义 |
|
|
354
|
+
|---|---|---|
|
|
355
|
+
| `MODEL` | `openai:gpt-4.1` | `provider:model` 或 profile 名 |
|
|
356
|
+
| `AGENT_MODELS_CONFIG` | - | 多模型 JSON 路径 |
|
|
357
|
+
| `AGENT_ACTIVE_MODEL` | - | 当前 profile 别名 |
|
|
358
|
+
| `WORKSPACE` | `.` | 工作区 |
|
|
359
|
+
| `AGENT_REQUIRE_APPROVAL` | `false` | 是否启用 HITL |
|
|
360
|
+
| `AGENT_ENABLE_SUBAGENTS` | `true` | 默认子代理 |
|
|
361
|
+
| `AGENT_READONLY` | `false` | 排除写/执行工具 |
|
|
362
|
+
| `AGENT_ENABLE_FS_PERMISSIONS` | `false` | 文件系统权限规则 |
|
|
363
|
+
| `AGENT_ENABLE_MCP` | `true` | 启用 MCP 注入 |
|
|
364
|
+
| `AGENT_MCP_EAGER` | `false` | 启动时立刻连 MCP(默认延迟到 TUI 后台二阶段) |
|
|
365
|
+
| `AGENT_TUI_DEFER_AGENT` | `true` | TUI 先起 UI,后台 build agent |
|
|
366
|
+
| `AGENT_MCP_CONFIG` | - | MCP servers JSON |
|
|
367
|
+
| `CHECKPOINT_BACKEND` | `sqlite` | `sqlite` 或 `memory` |
|
|
368
|
+
| `INHERIT_ENV` | `true` | shell 继承主机环境 |
|
|
369
|
+
| `VIRTUAL_MODE` | `true` | 文件路径虚拟根 |
|
|
370
|
+
|
|
371
|
+
## 安全说明
|
|
372
|
+
|
|
373
|
+
- **不使用 sandbox**:命令在宿主机执行。
|
|
374
|
+
- 默认**不审批**;仅建议在受信开发机使用。
|
|
375
|
+
- 可用 `--require-approval` 临时打开 HITL。
|
|
376
|
+
- `safety.py` 提供危险命令黑名单(警告/检测用);默认不拦截 agent 内置 `execute`。
|
|
377
|
+
- `--readonly` / `AGENT_READONLY=true` 通过 harness 排除 `execute/write_file/edit_file`。
|
|
378
|
+
|
|
379
|
+
## 开发
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
uv run pytest
|
|
383
|
+
uv run ruff check src tests
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
## 项目结构
|
|
387
|
+
|
|
388
|
+
```text
|
|
389
|
+
src/synapse/
|
|
390
|
+
agent.py # create_deep_agent 装配
|
|
391
|
+
backends.py # LocalShellBackend
|
|
392
|
+
cli.py # typer CLI
|
|
393
|
+
config.py # pydantic-settings
|
|
394
|
+
models_registry.py # 多模型目录
|
|
395
|
+
mcp_client.py # MCP → tools
|
|
396
|
+
sessions.py # 会话元数据
|
|
397
|
+
subagents.py # 默认子代理
|
|
398
|
+
harness.py # excluded_tools
|
|
399
|
+
fs_permissions.py # FilesystemPermission
|
|
400
|
+
prompts.py
|
|
401
|
+
safety.py
|
|
402
|
+
tools/ # session tools
|
|
403
|
+
ui/ # stream + TUI
|
|
404
|
+
docs/design.md
|
|
405
|
+
skills/ # agent skills
|
|
406
|
+
examples/ # models/mcp 配置样例
|
|
407
|
+
AGENTS.md
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## 设计文档
|
|
411
|
+
|
|
412
|
+
更完整的架构与分期说明见 [`docs/design.md`](docs/design.md)。
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
synapse/__init__.py,sha256=C3uBqvMHZjWug4OurQ0_Q6wGHIgfr6xgd8uQIBO-A0k,244
|
|
2
|
+
synapse/__main__.py,sha256=FijEpQ7-WSLjiyaZ-bnuvGsCMS2LFdzYXv4qeB2sK-E,93
|
|
3
|
+
synapse/cli.py,sha256=-y6KVluMfz5A8xYqrp-yHoKceHQ5IhVlHdNLTv8MgZ0,27450
|
|
4
|
+
synapse/config.py,sha256=IazrVmMia0FxWNPLoAknye6J5aS23TKPZMOYV3RkBCQ,627
|
|
5
|
+
synapse/models_registry.py,sha256=IujrUqgE6z7rojl2FwjBjfxU3jtQciJkAKVrXeDWL-A,250
|
|
6
|
+
synapse/app/__init__.py,sha256=XAJyXuMQLoiQoJxedPLGy79tJEw_3oVBkq05sm9BBG4,37
|
|
7
|
+
synapse/app/agent.py,sha256=5-PLl0tsR8pn8pBNR290Ih8aJHp6cjpmDcJqzhavIIQ,20089
|
|
8
|
+
synapse/app/agent_md.py,sha256=6CWDRGMN-xNws_ZRu9UKGShdCesyBFdomDKF_7vE2Zo,3331
|
|
9
|
+
synapse/commands/__init__.py,sha256=7bG9ydulaK-Lo59YLbtazTWH1W8ahEcPsmbWvm7uhXY,48
|
|
10
|
+
synapse/commands/compression.py,sha256=Q001IY44qf7KO2E-FcHi1aePWZQ5AFIG4NVjkIDQ-es,22668
|
|
11
|
+
synapse/commands/helpers.py,sha256=sleG3akt2AhppeHDo1hJ7pLaNQimL01mshF0_Kjn3ms,731
|
|
12
|
+
synapse/commands/mcp.py,sha256=ekzXW1BBRffo57Z662Ef0cbSuUCNBZwkNMsaguVdXxE,15709
|
|
13
|
+
synapse/commands/model.py,sha256=_Kbddl1EC1I9HOBA3OT0dFw9aW2XS-OCZX20pOCxYAE,6098
|
|
14
|
+
synapse/commands/result.py,sha256=7zzjxiC4F942yywOu54v2M6CYH33JY8H1y5PP3n5xLg,1217
|
|
15
|
+
synapse/commands/sessions.py,sha256=nb9LTrLb0Yz-URitAhMpoeNOS6ipvY-jSbbsit8LCMY,15062
|
|
16
|
+
synapse/commands/slash_cmds.py,sha256=7Mn7Q29lwmnlM7vAn7iVWpjI2qn5T6cXPFJEREGZuRM,18768
|
|
17
|
+
synapse/commands/slash_complete.py,sha256=23xR0elfzo_fpn0AYcvnVNK6Nz3YKIdWviDf50EDi4A,27702
|
|
18
|
+
synapse/commands/theme.py,sha256=b6_Fbzj2KF061a2fHTZamVGVAk9Ksi7bssrI-vQEdXg,3155
|
|
19
|
+
synapse/content/__init__.py,sha256=G8wVyirsCKObOs4EIYCVVKCyCEVZMN5-5ivV7VYBquI,61
|
|
20
|
+
synapse/content/input_history.py,sha256=3cwEFf8587-1Nuiz5TaNoq657poTLmLntD-RMxsom5A,4046
|
|
21
|
+
synapse/content/multimodal.py,sha256=465r5JXuwQv9KwZrrWHAaZodOdJk4AaejmW0Y-bZf8c,22410
|
|
22
|
+
synapse/content/prompts.py,sha256=CRIzoxwzd4wftEiUcnLj9dKioAT6AmwnnvV7m2FIQDQ,8172
|
|
23
|
+
synapse/content/skills_catalog.py,sha256=nyOru_-6qL2W8ez-uX8uSs4WI79n092ktWAR9jruF5U,4260
|
|
24
|
+
synapse/integrations/__init__.py,sha256=VO_6McDtNNJmW6spb5ciMTFXrQM2KY7aO8Gm4rleByg,50
|
|
25
|
+
synapse/integrations/checkpoint_seed.py,sha256=gXhjVG-ZYB6Ochdjw4ZEuwPrPkJB0BvY6sfYvC-B3KU,12036
|
|
26
|
+
synapse/integrations/codex_history.py,sha256=R1Jf1hWisrPIhdZPTUlt89W7CQ-uwIQ_cFIQNfvqG7c,14353
|
|
27
|
+
synapse/integrations/codex_import.py,sha256=c2tLjIcICBZQO-3m04jkN2YP-DpTGcGN57K6H7Z1R5I,14391
|
|
28
|
+
synapse/integrations/codex_sessions.py,sha256=0jDWVSo23drVrco0w2-rcXmy-aU12afQvoqN1_MS7q4,22093
|
|
29
|
+
synapse/integrations/describe_image.py,sha256=bzaXSKQbaSujzhlyLror1T04j9pQ0Phd15HNdxEipAk,13496
|
|
30
|
+
synapse/integrations/http_clients.py,sha256=Ze7hTB1KMlVx1bpmhaMwsWhHm7OSHfoATgVsyECx5OM,6509
|
|
31
|
+
synapse/integrations/llm_openai_compat.py,sha256=Ab0dPzXfrV7Dl4LHIOPxE6jETtQIe_ml3aOOkBtQec8,3494
|
|
32
|
+
synapse/integrations/llm_openai_websocket.py,sha256=FrGAfE0O1uHlplk6x4WgMnqOw4hNzfTfhFFNRp4J1Go,7870
|
|
33
|
+
synapse/integrations/mcp_client.py,sha256=7-CPiZFr9TbWyq4dmoQPjRMv4GNkOA9v9JVTXNBHelY,22676
|
|
34
|
+
synapse/integrations/vision_middleware.py,sha256=FXBIHFlCv3n1ntQxt43DIy9V04YsPZzsLGbfIOQyumw,2114
|
|
35
|
+
synapse/models/__init__.py,sha256=gNaXjmi21rvYA17bwCp-fcyS9RkVv7r1o7v1dAbwtfY,218
|
|
36
|
+
synapse/models/config.py,sha256=lqzBqBIXE8jrfmosPy3F6gIt48kdjb_8QgNBykuynps,7955
|
|
37
|
+
synapse/models/helpers.py,sha256=7H0UyTBpzc4s1xZJGPPSptwYXuoDTf1lb7qQF7J27FA,6789
|
|
38
|
+
synapse/models/profile.py,sha256=xTga5Re4PyLFbDqY5EOHHj86IKKWMNTdLw-TtWtIocU,2168
|
|
39
|
+
synapse/models/registry.py,sha256=TiDv6tuI6pVqGtUr0fQid9iu6_rEAI0Y1FJAAjrA8rQ,30391
|
|
40
|
+
synapse/observability/__init__.py,sha256=69n4AdfjO3G6Tvo9hPiudVKNyBU5nZ4G9J0nEWjhx-w,53
|
|
41
|
+
synapse/observability/startup_trace.py,sha256=LpjORSaURta0wuB3x4-LTo67jVwXa88vKlNXAPT0K3o,3802
|
|
42
|
+
synapse/runtime/__init__.py,sha256=h-gNL9wbxp5J6SjA5o36JVr_p6eec26AVHEJE0q-NdM,58
|
|
43
|
+
synapse/runtime/async_runtime.py,sha256=gTxXobfvlwGK2BeVz-_oCBGwK8K3gLCpqisMySP4iKs,5938
|
|
44
|
+
synapse/runtime/backends.py,sha256=1qMrDVumSIO0DXzgCtPrefhVfTCyS_R-98HUZ1hIvX4,16376
|
|
45
|
+
synapse/runtime/context_compact.py,sha256=h7HNHMpVMXOZgylRouFaDiq25mZkWjGRBlB4eXShUqo,8969
|
|
46
|
+
synapse/runtime/execute_capture.py,sha256=avmsgEPggCN40nyK1ZK_6PO0_QlOTu51Qd0b2brY5vs,1636
|
|
47
|
+
synapse/runtime/fs_permissions.py,sha256=bydvojk1zM9pQU_ILyYKmyjx6JyyOt1HMFrAMvkUjuU,2410
|
|
48
|
+
synapse/runtime/harness.py,sha256=Uf-AwtwUGgXOfk2BcpJZMEtFN95UIdmiJfYYrShmP5w,1799
|
|
49
|
+
synapse/runtime/hitl.py,sha256=gm8LmrVUR9Xjrq-lGJtCdm8MUkM8033IfwOcMMMPt5U,6729
|
|
50
|
+
synapse/runtime/interaction_ledger.py,sha256=4ab4YdYMV7ihHi4tw1filcMF8VeB4qPQjFQMzuMil2I,2499
|
|
51
|
+
synapse/runtime/middleware.py,sha256=er9VICgLlKZpFMihDBX-JDvi0nOj4wYIVQUma1aijpY,29051
|
|
52
|
+
synapse/runtime/model_request_compression_middleware.py,sha256=IrKKhkk9i8Rko1DV7GPOX3o_3yxSyhPIGBoPL5bxg-A,31823
|
|
53
|
+
synapse/runtime/pathing.py,sha256=jF7ieyWV-spWNCade7h7A1jti09WM_o4WVYFZaFnCWs,4474
|
|
54
|
+
synapse/runtime/safety.py,sha256=HeEuYX1wVmkn9cM65-fznvYDYM7rDe_uOVy7RzRO3Fk,6425
|
|
55
|
+
synapse/runtime/steer.py,sha256=wlTUE7FSkQhe0p-RxHQ3KUqLKH1EexuVJKNOyf74SU0,8508
|
|
56
|
+
synapse/runtime/subagents.py,sha256=0xD-GLNExGwUwDrHCo3nAx3L_t6vBLQDlWwR708W52M,8812
|
|
57
|
+
synapse/runtime/tool_ignore.py,sha256=evt-AutlYq925moT-jO1w8aPIbseB4lKtNOMA1uN25o,6573
|
|
58
|
+
synapse/runtime/tool_output_eval.py,sha256=xydhZVn-1A-ubt97AHdfsztPP03UFNwuWip6FdnyzwE,4091
|
|
59
|
+
synapse/runtime/tool_output_middleware.py,sha256=EBWyQvIB-AV0CsWxLx-qIX8tLsp0RoahUOfHJtVqp5I,24736
|
|
60
|
+
synapse/runtime/tool_output_usage_middleware.py,sha256=zKk4S2Vj6DV5o3Ln6FHx18VWegstVUqZ6ZfTKQ5VVA0,2183
|
|
61
|
+
synapse/sessions/__init__.py,sha256=JuhEq2Vcr-tKCzlI3Y87Q-7ZUoPKsxiBB3A9587IHs8,746
|
|
62
|
+
synapse/sessions/cancel_repair.py,sha256=HhDFeqik95Dx-YPvtgOW8vyw_irD4S9RU3EN3MtFslA,7134
|
|
63
|
+
synapse/sessions/session_recap.py,sha256=Rc_arEkbTdCNX5nV40gGB2zLC0w50Khw7kwYk0j9cQI,5338
|
|
64
|
+
synapse/sessions/store.py,sha256=SkQgvel5XWhI35csOAgDiYpsG9uykNUvdfpu9rBXqGY,22437
|
|
65
|
+
synapse/sessions/transcript.py,sha256=6Pl9hs0Qi1GnIfosgQlDXXTIOrfbCjuY23WRfBjgphU,25356
|
|
66
|
+
synapse/settings/__init__.py,sha256=upnYzzI1OQIrtAJPwJ5s_vwwfrXBKO4ciTtPuM8hgyc,243
|
|
67
|
+
synapse/settings/config_paths.py,sha256=EiOVZhKx_GdSS80qN0ImCcEQ8NEww2r_O_GgIMatSo4,5822
|
|
68
|
+
synapse/settings/schema.py,sha256=36jb9naW5VMt0Eg9loaDt38zxGfiCKIU5aDvDx2YcJY,19954
|
|
69
|
+
synapse/tool_output/__init__.py,sha256=jbfJas4ebbBBT5Ve5hXDacQNUpYmQJwh4fxA-spfiPE,1608
|
|
70
|
+
synapse/tool_output/detection.py,sha256=cOsynI7el6NeGtWFpAY63VAwafKbxmeTicW5XYfjwMU,6165
|
|
71
|
+
synapse/tool_output/metrics.py,sha256=x_gjtd8ETfJIqHs10gpYnbzzk4WVKgfR6M8ShXvRgms,988
|
|
72
|
+
synapse/tool_output/models.py,sha256=X_ryFjpdmEU4BfU65aKR645qKXVWIh8aVtTAr2O9lmE,5052
|
|
73
|
+
synapse/tool_output/pipeline.py,sha256=p4TR0Laskj6lc2DZqo9_meqCEDbbwQNfuLLJSXDKgTk,12706
|
|
74
|
+
synapse/tool_output/repository.py,sha256=y29g1RtXgRNnT0Wt8QDuBkoDYoq3YEzmVQ7g1Sz-nSE,30972
|
|
75
|
+
synapse/tool_output/transformers.py,sha256=K6DSRYuAt7__StR5HZFmVvFuIxFQ6L0NUSG2jqf0Vqc,24734
|
|
76
|
+
synapse/tools/__init__.py,sha256=bkL5jh0rDET14aa84ILBGWiQ-S5wPS1m2BKCQQUUJEI,201
|
|
77
|
+
synapse/tools/session_tools.py,sha256=_4pWiZFXREItuy5gtyGdmshEF3u1aYWnRaJ-PWO6XNg,8018
|
|
78
|
+
synapse/ui/__init__.py,sha256=5ClnwOUd8oGeYxti_5ohF-GOM5eqtKQKdBbUgwfn4Hw,260
|
|
79
|
+
synapse/ui/rendering.py,sha256=hpn5GmwZrJx2vGKjtKpSyKFFmf34FqlmrUD3XpEdgPc,10912
|
|
80
|
+
synapse/ui/sink.py,sha256=uL2on8_DwlHTR4RO-5s1mCJMC06mqKBxaJ7v8BJ20Q4,2333
|
|
81
|
+
synapse/ui/steer_widget.py,sha256=HNj_oqSfSRH2CF9ibVdCtxWSD-Lb4W7WH8_Ig6EqiMg,10194
|
|
82
|
+
synapse/ui/stream.py,sha256=ueKMjJyQo7o-s2_Ft-ebNODX4BUBE7S1BLCNcJZZTBg,46732
|
|
83
|
+
synapse/ui/stream_events.py,sha256=xQLtQ4xgHmGmSJO1hl91e8-W41oh913JA9uIanasBo4,14260
|
|
84
|
+
synapse/ui/stream_runtime.py,sha256=jfEqplMq3rK3ezd11MTuysdoGAQHC4HQhkMbnsQSFEc,8813
|
|
85
|
+
synapse/ui/theme.py,sha256=xNuMMAbKMKQO_AM1_Gkq0R7IwQPL9UOGrnX3kc5tgvo,33257
|
|
86
|
+
synapse/ui/timeline.py,sha256=GFp-YNCv5QG9yG5lgCbwthz-9RrB6fXBAkYD4MkeQds,18859
|
|
87
|
+
synapse/ui/tui.py,sha256=8_MTqZdtCH-muuDB67MdbLgIfgfVCwb-EqVTTxD062w,214548
|
|
88
|
+
synapse/ui/turn_rail.py,sha256=PH8H750-HvHDcJKz47WimfrVgLFW3C9gB651qz6yJqU,2161
|
|
89
|
+
synapse/ui/user_turn.py,sha256=VQx5befY-WYdqGRN9b8X5nDPLWTzah3SkL9RQ8Pg8X8,2468
|
|
90
|
+
synapse/ui/welcome.py,sha256=RaVcU1yX6c3q_EZUI0FTYRQu-yszvo7NPrKfJ7t8_FY,8596
|
|
91
|
+
synapse/ui/bottombar/__init__.py,sha256=nGtpcNhYsDICfxxAQMUte32Lvg3_PP2r78ge5roNUhw,1866
|
|
92
|
+
synapse/ui/bottombar/context.py,sha256=PSHnALjgaGBZCk91eptSB-RafNQqe___2XrbBkRhzSY,1124
|
|
93
|
+
synapse/ui/bottombar/core.py,sha256=jGwcJSaIifgGuv14dPpO1fdrKKcrMUH6Io1nzNjGfa0,1920
|
|
94
|
+
synapse/ui/bottombar/components/__init__.py,sha256=q2_1MuhEuMb0u_KUdavqRgZ2zXPq_6yhKlTQkJ_1EyE,4237
|
|
95
|
+
synapse/ui/bottombar/components/key_hints.py,sha256=D7YL1HuvZ4InWVMBG9T9RTXvIj-PK78jWcI-tk0sJeE,787
|
|
96
|
+
synapse/ui/bottombar/components/mcp.py,sha256=AWJWUx5owo14rCBHTBvn2RbUYnhKNZfAzGbb2lclHP4,1791
|
|
97
|
+
synapse/ui/bottombar/components/mode.py,sha256=5M_NA4c5SgfvpRQ2U_aSM8dYk_ZMBuUKCEXwYlnPFrc,666
|
|
98
|
+
synapse/ui/bottombar/components/model.py,sha256=bDMWRYEo4OWJ2_Dy1nyys4s3IBPgKf64y4T9wh9_jV8,681
|
|
99
|
+
synapse/ui/bottombar/components/thread.py,sha256=3XVMve1B7iGzlavVfv_YZyr5XJtXQhoOFQoPcw3JBZk,733
|
|
100
|
+
synapse/ui/dialogs/__init__.py,sha256=rymJeD9bW-Vs_7IlNSZcxC1FRdDbzaRrEktuwhah_0U,927
|
|
101
|
+
synapse/ui/dialogs/base.py,sha256=yW5EWfZ2TpWERjEwQwMv78bDrB7lFxE6vD8Cnhb1v4M,11784
|
|
102
|
+
synapse/ui/dialogs/codex_session_list.py,sha256=TABN-fFT_DT0OI4aY3MiGWIKBnzcom9Kvfa0nbc-Cik,3039
|
|
103
|
+
synapse/ui/dialogs/compression_diagnostics.py,sha256=JgHkEPclOkZevtm3vZ7HWxvo8UtKEbmBUdZouVTYciI,8577
|
|
104
|
+
synapse/ui/dialogs/git_explore.py,sha256=xrRDM_AD8urmSnGUTCj8YCDH2Lm7LUiGVgtOql41LPI,23223
|
|
105
|
+
synapse/ui/dialogs/mcp_panel.py,sha256=q5srpDX5iAuoMQ1QK_KzFX-TU3XywLYN-XpElDvwRAk,13547
|
|
106
|
+
synapse/ui/dialogs/model_picker.py,sha256=c_6L08Uytxg73xB6YS2qMCopFvwWcQ9xCLv7OCShZNA,4080
|
|
107
|
+
synapse/ui/dialogs/safety_panel.py,sha256=Qmlqq5C-KcDs_Ubox-ZzUjBDKM5KFZhm0B6MgvhTXr0,1712
|
|
108
|
+
synapse/ui/dialogs/session_list.py,sha256=zyjL1vaJZ0mwW7NwxiA9KUCpmgSK1mwUPjIJNrMZgdw,3360
|
|
109
|
+
synapse/ui/dialogs/theme_designer.py,sha256=P4y3FBd-54R42TyE7wMHfeBLPSPTx3QwwQIm_xHkVI0,29342
|
|
110
|
+
synapse/ui/dialogs/theme_picker.py,sha256=4kh23Dgj3z3WhKFv3g8a3Y-mK84e4-WywmTLyvdo8dU,3550
|
|
111
|
+
synapse/ui/git_explore/__init__.py,sha256=HsKkHETHS7aXRCRfljFHoIKfwQPNPDUxWV4LywixvMA,672
|
|
112
|
+
synapse/ui/git_explore/engine.py,sha256=EBxVFjhQU7-cmq1a-gFNLshflDUi-RQZMChJpQcMens,2596
|
|
113
|
+
synapse/ui/git_explore/provider.py,sha256=5gOuzLGhkA1wLaG7E4J4cNfcF1SyWwXZQi9Lwu1wwG0,6640
|
|
114
|
+
synapse/ui/git_explore/unified.py,sha256=eFQtx7R-2DFD-4aJU-b7cQldElltldsJ8uLCucwAJ1E,2772
|
|
115
|
+
synapse/ui/topbar/__init__.py,sha256=v6Wj1ri18uuaChl6demLN5P-vn3_iYosbTgGZLHG3Go,2545
|
|
116
|
+
synapse/ui/topbar/context.py,sha256=nLWW4-yjgtOZ-gSZG--0EDdFAWNeUPpw6jD-Y7NAmcY,761
|
|
117
|
+
synapse/ui/topbar/core.py,sha256=pnwXIHzukezvvjiJKtFayqQwRB0R9zI9Tc4YyM8pPLU,31489
|
|
118
|
+
synapse/ui/topbar/git_changes_popover.py,sha256=H6ss_-KSU9NH_3szadzmZbf3ymBixQmPSuVz9-EXuzE,6163
|
|
119
|
+
synapse/ui/topbar/git_chrome.py,sha256=9MWachCNZ9E9QIhvXjajNKDBs7Dq-K7oh9Qrw_6rHn8,15042
|
|
120
|
+
synapse/ui/topbar/tool_output_popover.py,sha256=dwDJ_jH9X9JkxiFXHYcBHoAKCTrfRicbKtoxia9zFEs,2683
|
|
121
|
+
synapse/ui/topbar/widget.py,sha256=-UUD0wsMcfeIhiJaDzf96mKPcdIEUOOLH1CXZS4MxeY,16986
|
|
122
|
+
synapse/ui/topbar/components/__init__.py,sha256=E-QFgko0V5z1N6UZLwP963_15UqNz7EafvbmxdewEBA,4113
|
|
123
|
+
synapse/ui/topbar/components/branch.py,sha256=Q_kLYe9-abqxx5tD2zNrz4n414O0tSAaT7pMNI8bMK8,1127
|
|
124
|
+
synapse/ui/topbar/components/title.py,sha256=zj0_jX3kIcmdSuWnsJBr9GGGZoXPva-GcE_Upq9Wjzs,617
|
|
125
|
+
synapse/ui/topbar/components/tool_output.py,sha256=6_LdnqMAhNLBeV3e5Fo2VSnBMGrT10NNFz6XlajNH9Q,618
|
|
126
|
+
synapse/ui/topbar/components/usage.py,sha256=X4RGdspJCmsm5dJrRDa_sWkgF5dlhXK3xqyGkBvyDPY,612
|
|
127
|
+
synapse/ui/topbar/components/workspace.py,sha256=WT0ReHx93QHykboXawGH2lZkmk8ABNGFVtnEZJPiEB4,785
|
|
128
|
+
synapse_cli_agent-0.1.13.dist-info/METADATA,sha256=sTSyiz5Cm1LOzmZ_MXl86WDJxMECwbN-x1Yk5cO38PU,13480
|
|
129
|
+
synapse_cli_agent-0.1.13.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
|
|
130
|
+
synapse_cli_agent-0.1.13.dist-info/entry_points.txt,sha256=9X_dETmbBzuxS_BwJpH1k8Lo17r57J76kcs_NohBHyY,45
|
|
131
|
+
synapse_cli_agent-0.1.13.dist-info/RECORD,,
|