newbro-cli 0.1.0__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.
- newbro_cli-0.1.0.dist-info/METADATA +333 -0
- newbro_cli-0.1.0.dist-info/RECORD +186 -0
- newbro_cli-0.1.0.dist-info/WHEEL +5 -0
- newbro_cli-0.1.0.dist-info/entry_points.txt +2 -0
- newbro_cli-0.1.0.dist-info/top_level.txt +1 -0
- synapse/__init__.py +3 -0
- synapse/__main__.py +9 -0
- synapse/api/__init__.py +1 -0
- synapse/api/app.py +54 -0
- synapse/api/logging.py +42 -0
- synapse/api/models.py +135 -0
- synapse/api/paths.py +26 -0
- synapse/api/routes/__init__.py +1 -0
- synapse/api/routes/commands.py +66 -0
- synapse/api/routes/executor_nodes.py +125 -0
- synapse/api/routes/health.py +8 -0
- synapse/api/routes/interaction_requests.py +59 -0
- synapse/api/routes/messages.py +46 -0
- synapse/api/routes/personas.py +124 -0
- synapse/api/routes/session_config.py +64 -0
- synapse/api/routes/sessions.py +129 -0
- synapse/api/ws/__init__.py +1 -0
- synapse/api/ws/executors.py +69 -0
- synapse/api/ws/stream.py +363 -0
- synapse/blackboard/__init__.py +14 -0
- synapse/blackboard/backends/__init__.py +5 -0
- synapse/blackboard/backends/memory.py +491 -0
- synapse/blackboard/interfaces.py +167 -0
- synapse/blackboard/queries.py +31 -0
- synapse/blackboard/revisions.py +30 -0
- synapse/blackboard/store.py +31 -0
- synapse/blackboard/subscriptions.py +23 -0
- synapse/cli/__init__.py +5 -0
- synapse/cli/main.py +1958 -0
- synapse/communication/__init__.py +6 -0
- synapse/communication/brain.py +1274 -0
- synapse/communication/context.py +219 -0
- synapse/communication/history.py +80 -0
- synapse/communication/model.py +107 -0
- synapse/communication/models/__init__.py +4 -0
- synapse/communication/models/openai.py +331 -0
- synapse/communication/models/scripted.py +167 -0
- synapse/communication/persona_pool.py +200 -0
- synapse/communication/policies/__init__.py +4 -0
- synapse/communication/policies/reply_style.py +59 -0
- synapse/communication/policies/tool_usage_policy.py +10 -0
- synapse/communication/prompts/__init__.py +3 -0
- synapse/communication/prompts/base/__init__.py +1 -0
- synapse/communication/prompts/base/guardrails.py +6 -0
- synapse/communication/prompts/base/identity.py +7 -0
- synapse/communication/prompts/base/persona_identity.py +21 -0
- synapse/communication/prompts/base/reply_style.py +6 -0
- synapse/communication/prompts/base/tool_policy.py +57 -0
- synapse/communication/prompts/builders.py +168 -0
- synapse/communication/prompts/examples/__init__.py +1 -0
- synapse/communication/prompts/examples/notification_style.py +11 -0
- synapse/communication/prompts/examples/tool_usage.py +60 -0
- synapse/communication/prompts/runtime_context.py +199 -0
- synapse/communication/prompts/tasks/__init__.py +1 -0
- synapse/communication/prompts/tasks/normal_reply.py +40 -0
- synapse/communication/prompts/tasks/proactive_notification.py +14 -0
- synapse/communication/resolver.py +156 -0
- synapse/communication/tools/__init__.py +256 -0
- synapse/communication/tools/add_constraint.py +63 -0
- synapse/communication/tools/add_task_note.py +59 -0
- synapse/communication/tools/base.py +22 -0
- synapse/communication/tools/control_task.py +82 -0
- synapse/communication/tools/create_task.py +127 -0
- synapse/communication/tools/list_tasks.py +53 -0
- synapse/communication/tools/query_task_detail.py +57 -0
- synapse/communication/tools/query_task_summary.py +34 -0
- synapse/communication/tools/resolve_interaction_request.py +67 -0
- synapse/communication/tools/update_task.py +109 -0
- synapse/communication/types.py +22 -0
- synapse/config_home.py +72 -0
- synapse/connectors/__init__.py +1 -0
- synapse/connectors/base/__init__.py +20 -0
- synapse/connectors/base/bindings.py +145 -0
- synapse/connectors/base/module.py +48 -0
- synapse/connectors/base/transport.py +202 -0
- synapse/connectors/host/__init__.py +17 -0
- synapse/connectors/host/app.py +60 -0
- synapse/connectors/host/catalog.py +29 -0
- synapse/connectors/host/config.py +164 -0
- synapse/connectors/host/registry.py +21 -0
- synapse/connectors/voice/__init__.py +1 -0
- synapse/connectors/voice/agora_convoai/__init__.py +20 -0
- synapse/connectors/voice/agora_convoai/app.py +4 -0
- synapse/connectors/voice/agora_convoai/models.py +116 -0
- synapse/connectors/voice/agora_convoai/module.py +391 -0
- synapse/connectors/voice/agora_convoai/service.py +513 -0
- synapse/connectors/voice/agora_convoai/session_service.py +286 -0
- synapse/connectors/voice/agora_convoai/settings.py +223 -0
- synapse/connectors/voice/agora_convoai/token_utils.py +153 -0
- synapse/envfile.py +25 -0
- synapse/execution/__init__.py +21 -0
- synapse/execution/assignment.py +53 -0
- synapse/execution/brain.py +45 -0
- synapse/execution/mode_manager.py +105 -0
- synapse/execution/reconcile.py +178 -0
- synapse/execution/run_manager.py +184 -0
- synapse/execution/scheduler.py +13 -0
- synapse/execution/session_manager.py +122 -0
- synapse/execution/summary_manager.py +84 -0
- synapse/executors/__init__.py +1 -0
- synapse/executors/adapters/__init__.py +17 -0
- synapse/executors/adapters/acpx/__init__.py +4 -0
- synapse/executors/adapters/acpx/executor.py +610 -0
- synapse/executors/adapters/acpx/session.py +117 -0
- synapse/executors/adapters/codex/__init__.py +4 -0
- synapse/executors/adapters/codex/client.py +182 -0
- synapse/executors/adapters/codex/executor.py +455 -0
- synapse/executors/adapters/codex/jsonrpc.py +108 -0
- synapse/executors/adapters/codex/session.py +124 -0
- synapse/executors/adapters/hosted/__init__.py +3 -0
- synapse/executors/adapters/hosted/executor.py +95 -0
- synapse/executors/adapters/mock/__init__.py +5 -0
- synapse/executors/adapters/mock/config.py +7 -0
- synapse/executors/adapters/mock/executor.py +91 -0
- synapse/executors/adapters/mock/session.py +7 -0
- synapse/executors/core/__init__.py +19 -0
- synapse/executors/core/capabilities.py +12 -0
- synapse/executors/core/events.py +22 -0
- synapse/executors/core/executor.py +32 -0
- synapse/executors/core/registry.py +28 -0
- synapse/executors/core/results.py +12 -0
- synapse/executors/core/session.py +12 -0
- synapse/executors/node/__init__.py +15 -0
- synapse/executors/node/__main__.py +43 -0
- synapse/executors/node/config.py +130 -0
- synapse/executors/node/registry.py +310 -0
- synapse/executors/node/service.py +397 -0
- synapse/infrastructure/__init__.py +1 -0
- synapse/infrastructure/llm/__init__.py +3 -0
- synapse/infrastructure/llm/openai_provider.py +454 -0
- synapse/interaction/__init__.py +3 -0
- synapse/interaction/manager.py +353 -0
- synapse/interaction/sanitization.py +76 -0
- synapse/notification/__init__.py +14 -0
- synapse/notification/candidate_builder.py +136 -0
- synapse/notification/manager.py +179 -0
- synapse/notification/policy.py +91 -0
- synapse/observability/__init__.py +25 -0
- synapse/observability/bootstrap.py +146 -0
- synapse/observability/context.py +47 -0
- synapse/observability/emitters/__init__.py +29 -0
- synapse/observability/emitters/api.py +87 -0
- synapse/observability/emitters/blackboard.py +76 -0
- synapse/observability/emitters/communication.py +178 -0
- synapse/observability/emitters/execution.py +154 -0
- synapse/observability/emitters/notification.py +111 -0
- synapse/observability/logger.py +73 -0
- synapse/observability/reason_codes.py +14 -0
- synapse/observability/redaction.py +117 -0
- synapse/observability/schema.py +57 -0
- synapse/observability/sinks/__init__.py +4 -0
- synapse/observability/sinks/pretty.py +216 -0
- synapse/observability/sinks/stdout.py +16 -0
- synapse/observability/sinks/types.py +10 -0
- synapse/observability/store.py +85 -0
- synapse/protocol/__init__.py +97 -0
- synapse/protocol/assignment.py +9 -0
- synapse/protocol/command.py +14 -0
- synapse/protocol/enums.py +138 -0
- synapse/protocol/execution_mode.py +12 -0
- synapse/protocol/executor_node.py +120 -0
- synapse/protocol/interaction.py +47 -0
- synapse/protocol/interruption.py +13 -0
- synapse/protocol/mutation.py +16 -0
- synapse/protocol/notification.py +22 -0
- synapse/protocol/persona.py +19 -0
- synapse/protocol/run.py +20 -0
- synapse/protocol/session.py +43 -0
- synapse/protocol/summary.py +11 -0
- synapse/protocol/task.py +22 -0
- synapse/protocol/task_execution_detail.py +14 -0
- synapse/runtime/__init__.py +28 -0
- synapse/runtime/bootstrap.py +29 -0
- synapse/runtime/config.py +209 -0
- synapse/runtime/container.py +102 -0
- synapse/runtime/executor_node_manager.py +477 -0
- synapse/runtime/models.py +112 -0
- synapse/runtime/session.py +1212 -0
- synapse/service/__init__.py +3 -0
- synapse/service/app.py +96 -0
- synapse/yaml_support.py +136 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: newbro-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Newbro CLI for the Synapse communication-brain / execution-brain runtime prototype
|
|
5
|
+
Project-URL: Repository, https://github.com/AgoraIO/Synapse
|
|
6
|
+
Project-URL: Documentation, https://github.com/AgoraIO/Synapse#readme
|
|
7
|
+
Keywords: newbro,synapse,cli,agent-runtime,communication-brain,execution-brain
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
Requires-Dist: agora-agent-server-sdk>=1.1.1
|
|
11
|
+
Requires-Dist: agora-token-builder>=1.0.0
|
|
12
|
+
Requires-Dist: anyio<5,>=4.4
|
|
13
|
+
Requires-Dist: fastapi<1.0,>=0.115
|
|
14
|
+
Requires-Dist: httpx<1.0,>=0.27
|
|
15
|
+
Requires-Dist: openai<2.0,>=1.51
|
|
16
|
+
Requires-Dist: pydantic<3.0,>=2.8
|
|
17
|
+
Requires-Dist: PyYAML<7.0,>=6.0
|
|
18
|
+
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
19
|
+
Requires-Dist: typing-extensions<5,>=4.12
|
|
20
|
+
Requires-Dist: uvicorn<1.0,>=0.30
|
|
21
|
+
Requires-Dist: websockets<16,>=13
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest<9.0,>=8.0; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest-cov<6,>=5; extra == "dev"
|
|
25
|
+
Requires-Dist: pyright<2,>=1.1.380; extra == "dev"
|
|
26
|
+
Requires-Dist: ruff<1,>=0.6; extra == "dev"
|
|
27
|
+
Provides-Extra: release
|
|
28
|
+
Requires-Dist: build<2.0,>=1.2; extra == "release"
|
|
29
|
+
Requires-Dist: twine<7,>=5; extra == "release"
|
|
30
|
+
|
|
31
|
+
# Synapse
|
|
32
|
+
|
|
33
|
+
Backend-first prototype for a communication-brain / execution-brain runtime.
|
|
34
|
+
|
|
35
|
+
## Concept
|
|
36
|
+
|
|
37
|
+
- `Communication Brain`: handles acknowledgement, clarification, and user-facing status.
|
|
38
|
+
- `Execution Brain`: owns task lifecycle and executor orchestration.
|
|
39
|
+
- `Shared Blackboard`: the session-level state synchronization layer.
|
|
40
|
+
- `Protocols`: explicit schemas for messages, tasks, execution events, and stream events.
|
|
41
|
+
|
|
42
|
+
## CLI
|
|
43
|
+
|
|
44
|
+
Synapse requires Python 3.12 or newer.
|
|
45
|
+
|
|
46
|
+
For a fresh clone, use the repo bootstrap launcher:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
./install.sh
|
|
50
|
+
./newbro setup
|
|
51
|
+
./newbro connector setup
|
|
52
|
+
./newbro doctor
|
|
53
|
+
./newbro dev
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`./install.sh` installs supported local development dependencies, creates `.venv`,
|
|
57
|
+
installs the project in editable mode, installs frontend dependencies, and writes
|
|
58
|
+
starter `~/.newbro/.env` plus `~/.newbro/config.yaml` files when they do not
|
|
59
|
+
already exist.
|
|
60
|
+
|
|
61
|
+
`./newbro setup` fills in `~/.newbro/.env` plus the shared
|
|
62
|
+
`~/.newbro/config.yaml` runtime/api/connectors config. By default it prompts for
|
|
63
|
+
required runtime values such as `OPENAI_API_KEY`, and it can also enter the
|
|
64
|
+
connector-host setup flow. For connector-only reconfiguration, use:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
./newbro connector setup
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
For automation, use:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
OPENAI_API_KEY=... ./newbro setup --non-interactive
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If you already have legacy Synapse config under `~/.synapse` and `~/.newbro`
|
|
77
|
+
does not exist yet, the CLI migrates that home directory to `~/.newbro` on the
|
|
78
|
+
first run.
|
|
79
|
+
|
|
80
|
+
## Install From PyPI
|
|
81
|
+
|
|
82
|
+
Install the public package with:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
python3 -m pip install newbro-cli
|
|
86
|
+
newbro --help
|
|
87
|
+
newbro executor setup
|
|
88
|
+
newbro executor run --base-url https://synapse.example.com --node-id node-1234 --token secret
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The published package name is `newbro-cli` and the installed console script is
|
|
92
|
+
`newbro`, but the Python module namespace is still `synapse` in this release.
|
|
93
|
+
Use `import synapse` for Python imports; `import newbro` is not supported.
|
|
94
|
+
|
|
95
|
+
`~/.newbro/.env` is auto-loaded by the backend at startup. You do not need to export
|
|
96
|
+
variables manually. OpenAI is required for normal development and demo runtime,
|
|
97
|
+
so set `OPENAI_API_KEY` in `~/.newbro/.env` before starting the app.
|
|
98
|
+
|
|
99
|
+
## Optional ACPX Executor
|
|
100
|
+
|
|
101
|
+
If you want Synapse to delegate execution through `acpx` instead of the direct
|
|
102
|
+
Codex executor, install ACPX first:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm install -g acpx@latest
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Quick verification:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
acpx --version
|
|
112
|
+
codex --version
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Then add at least this to `~/.newbro/.env`:
|
|
116
|
+
|
|
117
|
+
```env
|
|
118
|
+
SYNAPSE_ACPX_EXECUTOR_ENABLED=true
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Optional overrides:
|
|
122
|
+
|
|
123
|
+
```env
|
|
124
|
+
# SYNAPSE_ACPX_COMMAND=acpx
|
|
125
|
+
# SYNAPSE_ACPX_AGENT=codex
|
|
126
|
+
# SYNAPSE_ACPX_PERMISSION_MODE=approve-all
|
|
127
|
+
# SYNAPSE_ACPX_NON_INTERACTIVE_PERMISSIONS=deny
|
|
128
|
+
# SYNAPSE_ACPX_TIMEOUT_SECONDS=300
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
If both ACPX and the direct Codex executor are enabled, Synapse prefers ACPX.
|
|
132
|
+
|
|
133
|
+
## Common Commands
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
./install.sh
|
|
137
|
+
./newbro setup
|
|
138
|
+
./newbro connector setup
|
|
139
|
+
./newbro doctor
|
|
140
|
+
./newbro dev
|
|
141
|
+
./newbro backend
|
|
142
|
+
./newbro frontend
|
|
143
|
+
./newbro start
|
|
144
|
+
./newbro connector run
|
|
145
|
+
./newbro service install
|
|
146
|
+
./newbro service start
|
|
147
|
+
./newbro service stop
|
|
148
|
+
./newbro service restart
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
The installed console script is named `newbro`, so after setup you can run
|
|
152
|
+
`.venv/bin/newbro dev` or activate the virtual environment and use `newbro dev`.
|
|
153
|
+
|
|
154
|
+
## Run Backend
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
./newbro backend
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
FastAPI docs will be available at:
|
|
161
|
+
|
|
162
|
+
```text
|
|
163
|
+
http://127.0.0.1:8000/docs
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
If the frontend shows `error` and messages do not progress, first confirm the
|
|
167
|
+
backend is running from the same virtual environment where dependencies were
|
|
168
|
+
installed.
|
|
169
|
+
|
|
170
|
+
To run only the frontend:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
./newbro frontend
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
To run only the headless connector host:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
./newbro connector run
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Ubuntu Systemd
|
|
183
|
+
|
|
184
|
+
For an Ubuntu server deployment from a repo checkout, install the combined
|
|
185
|
+
system service with:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
./newbro service install
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`./newbro service install` now installs or updates the unit, reloads systemd,
|
|
192
|
+
enables the unit, and restarts the service so the latest code is live
|
|
193
|
+
immediately.
|
|
194
|
+
|
|
195
|
+
The installed `newbro.service` unit runs `newbro start`, so it serves one
|
|
196
|
+
main Synapse service on the public port.
|
|
197
|
+
|
|
198
|
+
This path stays inside the repo checkout. The main service serves
|
|
199
|
+
`src/synapse/ui/dist` at `/`, keeps the normal API and websocket routes on the
|
|
200
|
+
same origin, and mounts `/api/connectors/...` routes directly when connectors are
|
|
201
|
+
enabled.
|
|
202
|
+
|
|
203
|
+
The systemd unit runs as the user who invoked `./newbro service install` and
|
|
204
|
+
reads shared runtime-plus-connector config from that user’s home directory:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
~/.newbro/.env
|
|
208
|
+
~/.newbro/config.yaml
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
If you install the service as `root`, it will run as `root` and use:
|
|
212
|
+
|
|
213
|
+
```text
|
|
214
|
+
/root/.newbro/.env
|
|
215
|
+
/root/.newbro/config.yaml
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
If the Codex executor is enabled, set an absolute
|
|
219
|
+
`runtime.codex_command` in `~/.newbro/config.yaml` so the service does not
|
|
220
|
+
depend on an interactive shell PATH.
|
|
221
|
+
|
|
222
|
+
`./newbro dev` and `./newbro start` do not auto-start the standalone connector
|
|
223
|
+
host. Run `./newbro connector run` separately when you want the detached connector
|
|
224
|
+
process for direct connector testing or separate deployment.
|
|
225
|
+
|
|
226
|
+
`./newbro dev` is the reload-capable local iteration path. `./newbro start`
|
|
227
|
+
does not reload Python code changes, so restart it after editing backend,
|
|
228
|
+
connector modules, or other Python service code.
|
|
229
|
+
|
|
230
|
+
The connector host talks to the Synapse backend directly using the configured
|
|
231
|
+
`SYNAPSE_CONNECTOR_SYNAPSE_BASE_URL` and does not use proxy environment variables
|
|
232
|
+
for its internal upstream traffic.
|
|
233
|
+
|
|
234
|
+
## Test
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
.venv/bin/python -m pytest
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Frontend build check:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
cd src/synapse/ui
|
|
244
|
+
npm run build
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Release build and publish:
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
python3 -m pip install '.[release]'
|
|
251
|
+
python3 -m build
|
|
252
|
+
python3 -m twine check dist/*
|
|
253
|
+
python3 -m twine upload dist/*
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Or use the helper script:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
PYPI_TOKEN='pypi-...' ./scripts/publish_pypi.sh
|
|
260
|
+
PYPI_TOKEN='pypi-...' ./scripts/publish_pypi.sh --testpypi
|
|
261
|
+
./scripts/publish_pypi.sh --dry-run
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Deploy UI to Vercel
|
|
265
|
+
|
|
266
|
+
The main UI lives under `src/synapse/ui/`.
|
|
267
|
+
|
|
268
|
+
Before deploying the frontend separately, make sure the backend is reachable on
|
|
269
|
+
its own public HTTPS origin, that the public backend origin preserves secure
|
|
270
|
+
websocket upgrades for `WS /api/sessions/{session_id}/stream`, and that the backend
|
|
271
|
+
allows the Vercel frontend origin through CORS:
|
|
272
|
+
|
|
273
|
+
```env
|
|
274
|
+
SYNAPSE_CORS_ALLOWED_ORIGINS=https://app.example.com,https://your-project.vercel.app
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Then deploy from the UI workspace:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
cd src/synapse/ui
|
|
281
|
+
npx vercel env add VITE_API_BASE_URL production
|
|
282
|
+
npx vercel env add VITE_CONNECTOR_BASE_URL production
|
|
283
|
+
npx vercel --prod
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Set the production frontend base URLs to your public server origin, for
|
|
287
|
+
example:
|
|
288
|
+
|
|
289
|
+
```text
|
|
290
|
+
VITE_API_BASE_URL=https://newbro.plutoless.com
|
|
291
|
+
VITE_CONNECTOR_BASE_URL=https://newbro.plutoless.com
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
If you also use Vercel preview deployments, add the same variable for the
|
|
295
|
+
`preview` environment and include that preview origin in
|
|
296
|
+
`SYNAPSE_CORS_ALLOWED_ORIGINS`.
|
|
297
|
+
|
|
298
|
+
If the deployed UI enables voice mode, the connector host must also allow the
|
|
299
|
+
frontend origin. Configure that in `~/.newbro/config.yaml` under:
|
|
300
|
+
|
|
301
|
+
```yaml
|
|
302
|
+
connector_host:
|
|
303
|
+
cors_allowed_origins:
|
|
304
|
+
- https://newbro.agora-io.czhen.work
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
If the backend is served behind Nginx on your server, proxy the public session
|
|
308
|
+
routes to the main Synapse API on port `8000`, proxy `/api/connectors/...` to the
|
|
309
|
+
connector host on `8010`, and keep websocket upgrade headers intact for
|
|
310
|
+
`/api/sessions/{session_id}/stream`. See
|
|
311
|
+
[`docs/guides/vercel-ui-deployment.md`](./docs/guides/vercel-ui-deployment.md)
|
|
312
|
+
for the full deployment contract and an example reverse-proxy shape.
|
|
313
|
+
|
|
314
|
+
This repo also includes a GitHub Actions workflow at
|
|
315
|
+
`.github/workflows/deploy-ui-vercel.yml`:
|
|
316
|
+
|
|
317
|
+
- pull requests deploy a Vercel preview for `src/synapse/ui`
|
|
318
|
+
- pushes to `main` deploy production
|
|
319
|
+
- `workflow_dispatch` can trigger a manual production deploy
|
|
320
|
+
|
|
321
|
+
Before enabling that workflow, configure these GitHub repository settings:
|
|
322
|
+
|
|
323
|
+
- Actions secret: `VERCEL_TOKEN`
|
|
324
|
+
- Actions variable or secret: `VERCEL_ORG_ID`
|
|
325
|
+
- Actions variable or secret: `VERCEL_PROJECT_ID`
|
|
326
|
+
|
|
327
|
+
The production GitHub Actions deploy now injects
|
|
328
|
+
`VITE_API_BASE_URL=https://newbro.plutoless.com` and
|
|
329
|
+
`VITE_CONNECTOR_BASE_URL=https://newbro.plutoless.com` directly into the build so
|
|
330
|
+
the merge-to-`main` path does not depend on separate Vercel production env
|
|
331
|
+
entries.
|
|
332
|
+
If you also use manual Vercel CLI deploys outside GitHub Actions, keep the
|
|
333
|
+
Vercel project env aligned with those same values.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
synapse/__init__.py,sha256=U_9hJHhZxUlfO_Kf_jpewkojcWhvW3fEffq-6E48KZ0,73
|
|
2
|
+
synapse/__main__.py,sha256=60g1F6FA7JjB08J6xVviALjo-GWlcFuuKMZdE-BVYu8,140
|
|
3
|
+
synapse/config_home.py,sha256=gNA6cDnO96ApAZxNPqMIlouEAI13c2mQsFx2CccD5-s,2428
|
|
4
|
+
synapse/envfile.py,sha256=vqleBu7OF6TvCHgW8OnQPpx5nMfUrmdlI3vrM_iqJAM,714
|
|
5
|
+
synapse/yaml_support.py,sha256=QsrfT9nJqKcj8qOwC--e3DPL2CywDeTOlEeR64qPVx0,4442
|
|
6
|
+
synapse/api/__init__.py,sha256=mmUO2EYxtSE0FTX0DwUdEhg4rDzj55gidjbOOeF_s_w,28
|
|
7
|
+
synapse/api/app.py,sha256=0fnCpbbJJz3X7KKRdQ6T8cBnTqwzJ5_Gdn6OKUpSroQ,2336
|
|
8
|
+
synapse/api/logging.py,sha256=h4ePXZWhWNdkoUMTWR_YgnBbXjRnYWsOTcVldyeGi-I,1279
|
|
9
|
+
synapse/api/models.py,sha256=yMh9VhXqw1XlLD9tJ91F3ikgfhytqPaS09xn7gIVy8Y,3655
|
|
10
|
+
synapse/api/paths.py,sha256=gRZD3vT0cp3MVogYfx4SaNTv5JeRgmcv6NXvCHU69c0,617
|
|
11
|
+
synapse/api/routes/__init__.py,sha256=yvE0JHzDmyPMwFjrOCkwLTAoKqm8QVIeePxoECjBrTc,43
|
|
12
|
+
synapse/api/routes/commands.py,sha256=Bjkj9n-RRE2M1zcNHkLeK6LpRuSH-qndoPRNeVye32U,2387
|
|
13
|
+
synapse/api/routes/executor_nodes.py,sha256=aZZrSA5gk7P_zLzGIdpSZmmZGUSUBml0T0r1H9VnkF4,4411
|
|
14
|
+
synapse/api/routes/health.py,sha256=DLwz5eAYqmKWEqnMcMc2U7-9jze_8Wsq2yBxx1KQlYE,143
|
|
15
|
+
synapse/api/routes/interaction_requests.py,sha256=G8R9yeWy_yDg8It0w0AOHPqTMYglMLicfbcF4WrwHWQ,2004
|
|
16
|
+
synapse/api/routes/messages.py,sha256=foUr5DlPTgJC70wnCpOweNdKPQ3MRvB9TFAAA4e_Rnc,1459
|
|
17
|
+
synapse/api/routes/personas.py,sha256=8riXXBaYNOFiHfjuwKHQEFLFVXUL3kau_PpdNbsl2Qw,5083
|
|
18
|
+
synapse/api/routes/session_config.py,sha256=-o5M8X9XiAPruma2PPYop8GT8mR8zyhS8SueAd-JqxE,2007
|
|
19
|
+
synapse/api/routes/sessions.py,sha256=_aAzl6XlOjOzS8l9fS474vWrIa8TTQCT_DfGy4Mielg,4073
|
|
20
|
+
synapse/api/ws/__init__.py,sha256=RX9bCNQOLxbLXeP4Sr_aipnXnQwvKo20YPocN_jKuhc,48
|
|
21
|
+
synapse/api/ws/executors.py,sha256=0PTPIV6qCV7bO4fUZCw6dlqt3ufgvxWEXWUcV_IADDc,2893
|
|
22
|
+
synapse/api/ws/stream.py,sha256=NZ1XXowJTTcF4GZ2b5LmrLAHAPrIXIPbHY8nuP6UEeQ,12083
|
|
23
|
+
synapse/blackboard/__init__.py,sha256=ZxBIRcBFz64fDG1VniOvTijVJF5BMm1otNGEgLo9MLM,379
|
|
24
|
+
synapse/blackboard/interfaces.py,sha256=MaXJsbjINR3JBo1y5TChIbEoNpuInLSwyOuegu49wMY,6413
|
|
25
|
+
synapse/blackboard/queries.py,sha256=ntIUAq-KHYZXjdmdnRpKPxrQ9i_9e-EHg120Hcf1nqI,1213
|
|
26
|
+
synapse/blackboard/revisions.py,sha256=7NFv54hbHT-0BcmFaOat1xJ4Ung_Ixagei-h85rMEwE,780
|
|
27
|
+
synapse/blackboard/store.py,sha256=dxr7hVAt5Mfa-DJayJ1a9OdiM9zdteZZpoJgvt9zIwY,810
|
|
28
|
+
synapse/blackboard/subscriptions.py,sha256=kE3wdnWQVPTZvRbq2YuFPbiKqyAV9fT3DjBig5wHy-Q,708
|
|
29
|
+
synapse/blackboard/backends/__init__.py,sha256=EidKIU0zGq1pz6gP4oFi7a_es_ZLQ_M9-ceizzWVZRc,116
|
|
30
|
+
synapse/blackboard/backends/memory.py,sha256=b_xC7jOTYbpWCYQR9HJR1u_43oALw6C_mQ9hEWbB2ew,18996
|
|
31
|
+
synapse/cli/__init__.py,sha256=M0FLt0QLn5YHnjxNE0AjvuI_zZEwbL9kiaSM_9IoqPw,88
|
|
32
|
+
synapse/cli/main.py,sha256=pnY_ZCqS1fomF0-GH4POlhMt4w6_MCGzB-LzhlsCifs,67354
|
|
33
|
+
synapse/communication/__init__.py,sha256=5adOjGJU4MmvWpwsS8rSWVUyd2rOFnEv5nkCbmoF1fA,249
|
|
34
|
+
synapse/communication/brain.py,sha256=jD8VgVCpYxEIUbSOSsG1u3uyRmOE8BvSdjbHN-3O3Fw,48712
|
|
35
|
+
synapse/communication/context.py,sha256=sYHHMqZiGnrv4RvVuustGVyZ4BcDqTpPtECj8Xlc8-U,8380
|
|
36
|
+
synapse/communication/history.py,sha256=Wu7ttIHrHoadxdF3_ivYkcQ1sVvVkSnpuRobCK-GesA,2981
|
|
37
|
+
synapse/communication/model.py,sha256=dD6uAcLVSXLDFiPr3pp5PGlYSmnTu7ItHyAFsxHnIRA,3457
|
|
38
|
+
synapse/communication/persona_pool.py,sha256=jpicqb6hl9d8-qFHopjZhcXR2YMbC56ZLwRfUbU-M98,6721
|
|
39
|
+
synapse/communication/resolver.py,sha256=pGOBRYCa31IJeDq447H3VqV3ZPXJvUsRYHcM5zcdC6E,4866
|
|
40
|
+
synapse/communication/types.py,sha256=_g7wXAGb2YdDAcbnQb2h0N4Rp7DjdW1HC-gxJSZTxXM,640
|
|
41
|
+
synapse/communication/models/__init__.py,sha256=MtJPyjshk70lIBw28Lj1NwslhLv4UbO8Lhmo3FAr3lw,164
|
|
42
|
+
synapse/communication/models/openai.py,sha256=chpoHhF02luyLIv98vDif-JrE34qgSyTHaOn6hjfIbc,13316
|
|
43
|
+
synapse/communication/models/scripted.py,sha256=6mxDOdAuqq-9Go6-rMpPJ9OmwiRVXBhEuIKG3BU3StQ,5688
|
|
44
|
+
synapse/communication/policies/__init__.py,sha256=fe9YJF-ElY1H5-eb0-TmelqZ2nKzQnS9aJBeC3RVnxM,186
|
|
45
|
+
synapse/communication/policies/reply_style.py,sha256=idUN7RT_WlJ-T8_lNyES9BrlhCmZZxCwMzBkeSm4e58,2193
|
|
46
|
+
synapse/communication/policies/tool_usage_policy.py,sha256=EdTBI0zgNwNVdMHVaFEd7DeJ6UGDlONS86KlXZh1CQY,258
|
|
47
|
+
synapse/communication/prompts/__init__.py,sha256=yYnyiibAxme_uZ3lwuiPxqv-SONqBHGnJfO5hFPV7t0,139
|
|
48
|
+
synapse/communication/prompts/builders.py,sha256=rNjd_J-NTDFlliuI5_hrNLbh5xji-MR2hT73ktB56G8,6007
|
|
49
|
+
synapse/communication/prompts/runtime_context.py,sha256=t_J1nCQjYKeqkCwDY8wiFE_sowoBy4nSkfGfIexwoeQ,7127
|
|
50
|
+
synapse/communication/prompts/base/__init__.py,sha256=dVYCp_LVZZsErg88ono5t1BkmTfjPaUnD3WDSdUZbOY,60
|
|
51
|
+
synapse/communication/prompts/base/guardrails.py,sha256=qnOTUGejOYrP00IAnVnGN7vRCeCb6gZ9R1LXRaWi0yg,266
|
|
52
|
+
synapse/communication/prompts/base/identity.py,sha256=qkyZiQ_UjcDAemNP5RSm3MCEBL7m3XRbDN7GO4tTJRQ,341
|
|
53
|
+
synapse/communication/prompts/base/persona_identity.py,sha256=j805SaeLbDuyahu8CprkTJ6qVGNyezb2xnVRFdKwJ_0,821
|
|
54
|
+
synapse/communication/prompts/base/reply_style.py,sha256=TQX3MHaW71jSA1jywC4nEfYqUN9IinUkyx3vDzHb0wM,211
|
|
55
|
+
synapse/communication/prompts/base/tool_policy.py,sha256=eSEGYD9SjK6TFVPzvT8zO-p0qH7bwXgRz-ST4r-WcqY,4915
|
|
56
|
+
synapse/communication/prompts/examples/__init__.py,sha256=0e7FM83EV0SRlvr5e5tLeftaOrILaJrtl2qibWMZPZM,76
|
|
57
|
+
synapse/communication/prompts/examples/notification_style.py,sha256=APepa1b-G9oeWj66S1wO9cjnlPsAyjDh54sNHHHFcB8,595
|
|
58
|
+
synapse/communication/prompts/examples/tool_usage.py,sha256=UzOZEzz82sx1s8ODF1PrCWqVQtTzr85u7yGS7ubMLt0,3472
|
|
59
|
+
synapse/communication/prompts/tasks/__init__.py,sha256=Oeo3tNpUCKh5wpmaZf-dbZ3Pq0D0jL_2QXhnJRCskdU,81
|
|
60
|
+
synapse/communication/prompts/tasks/normal_reply.py,sha256=y5mFQWp9B6qF1Wa_JAkwBNjwD7B-FneilwF0ubvklLg,4446
|
|
61
|
+
synapse/communication/prompts/tasks/proactive_notification.py,sha256=g58TLrnZC8XAFwwvMNw4oTttBPGRB3vZXNvBLWALDJI,915
|
|
62
|
+
synapse/communication/tools/__init__.py,sha256=HroZ5cpxGYO7332UzoUww4h1kQJLATYfMFFnW3htmQo,10940
|
|
63
|
+
synapse/communication/tools/add_constraint.py,sha256=OoGQtFuoCmt3o07u6zd2HnT7sDGLJcmF7m4i81rjPE8,2182
|
|
64
|
+
synapse/communication/tools/add_task_note.py,sha256=1fSTc3NthMKLF5f9f6FxYOavBA8Vi1jqk9KdpWMqxnw,1994
|
|
65
|
+
synapse/communication/tools/base.py,sha256=Q6J1kX4wik_sxhyZfQfsTRXkP1pB_kNGGRU93h-SGao,487
|
|
66
|
+
synapse/communication/tools/control_task.py,sha256=EC8rLsD8jmA9pCxuoTzplQpliE9UOeVgV7c_ku0X8cs,2929
|
|
67
|
+
synapse/communication/tools/create_task.py,sha256=jMqnl8FB6RcDQ5PuGnsLp91nyz6SZc-8c00jVuqs7GU,4812
|
|
68
|
+
synapse/communication/tools/list_tasks.py,sha256=WhrvJkZquOw_cjXJhfsBnWR8jf5wo3plQqHK_q-W7Q8,1865
|
|
69
|
+
synapse/communication/tools/query_task_detail.py,sha256=pcOZqITOzg2C-3o0zoICSTlDcDJ-QbdaziG1PSjUGig,2072
|
|
70
|
+
synapse/communication/tools/query_task_summary.py,sha256=GYyI1Ok0quiloy_xaXyr6LnSCTss0YA3fO78p7cGh4M,1180
|
|
71
|
+
synapse/communication/tools/resolve_interaction_request.py,sha256=ZLVwEuLV4MU6gbbEnKuz7JVFPr1enRDKNo3B6Qc1OH4,2167
|
|
72
|
+
synapse/communication/tools/update_task.py,sha256=Y0yKZR5ytJ1NtFjrRjc03W7zdi120b34WbmdP_xvx2U,3763
|
|
73
|
+
synapse/connectors/__init__.py,sha256=avovKdt3DsBY64h7X_79YrWE3ELYK1P7trjz5nQFT9Q,60
|
|
74
|
+
synapse/connectors/base/__init__.py,sha256=Pkt9STJS4NWkx3Dge8eIHbdEPW54zaMUdUKoxSAVP1Q,616
|
|
75
|
+
synapse/connectors/base/bindings.py,sha256=fcftjRZiSygZkwWw86uX9DCiaHjuOv6LARVavYzxicA,4680
|
|
76
|
+
synapse/connectors/base/module.py,sha256=jYO1XJSR01JyP4yLrrlp6nRR1TayJaYOnutfl_UETP8,1340
|
|
77
|
+
synapse/connectors/base/transport.py,sha256=D4duNYi4L6SV8nbi6D3y3RB30tL7mt6j9ozSfCF_DKE,7138
|
|
78
|
+
synapse/connectors/host/__init__.py,sha256=uVLQOO1Xm-NX5ca7Z9fC29Hj2AfjCUaMakEVMHRC_94,589
|
|
79
|
+
synapse/connectors/host/app.py,sha256=-UNwb5f9Rd0nMkZ4bi-dDIC4EIXDzddD8NomlOFyMuE,1853
|
|
80
|
+
synapse/connectors/host/catalog.py,sha256=iYwMsI5C53YhC5H2rFWKQ-wfNHN4yI6eQLGSxx7yqtk,791
|
|
81
|
+
synapse/connectors/host/config.py,sha256=rc_-41qk0kHQ5EFoEPg8GTvY6ScObdNSdo6_4ofKkS0,5755
|
|
82
|
+
synapse/connectors/host/registry.py,sha256=Pkh1P2wzeik4AEoRpMuLA8VGzEG9K1aL9_r05Kq89fc,879
|
|
83
|
+
synapse/connectors/voice/__init__.py,sha256=muOwZx9bcZUx1rnHmXVqu29EShjbda0MEXlZP9oNKaM,31
|
|
84
|
+
synapse/connectors/voice/agora_convoai/__init__.py,sha256=kKssco9yyePwVfzNtUl4emvsGnAw_o8Wb2kUuJ8BGuQ,560
|
|
85
|
+
synapse/connectors/voice/agora_convoai/app.py,sha256=T_KdJQxM5T6atqysLxNIT4QLIzJJ9PFOrZBUpcdrpBk,70
|
|
86
|
+
synapse/connectors/voice/agora_convoai/models.py,sha256=zkt8pVSkdJbcDMc1EFYwshROvpJEDBlh9YJDUUsqbPQ,2776
|
|
87
|
+
synapse/connectors/voice/agora_convoai/module.py,sha256=5tNSZoK4yMAj7Z1TMvC_UjmL4d6IA6cYoh8mP3mWCQI,14257
|
|
88
|
+
synapse/connectors/voice/agora_convoai/service.py,sha256=GQre84vjCdfs6w_8zr3P_bQLdmOltDuhz8i2srjcOkg,17048
|
|
89
|
+
synapse/connectors/voice/agora_convoai/session_service.py,sha256=wDoIdoJliMJffjPRcML3aHwujzAMnOXqsmwFZewuysQ,11646
|
|
90
|
+
synapse/connectors/voice/agora_convoai/settings.py,sha256=qY0p_G88JK7a5tDE3Yg1pN3RphNjE9flBHQ2XlJhylk,9075
|
|
91
|
+
synapse/connectors/voice/agora_convoai/token_utils.py,sha256=663pp7YEXce4DZ0bWA_zzAfvCnkdmMZ1N9ebaKzgWN8,4794
|
|
92
|
+
synapse/execution/__init__.py,sha256=KvHc2qqG_NCXICDcWeTzOawoBDK6KaCLE7eD0csSV_g,548
|
|
93
|
+
synapse/execution/assignment.py,sha256=dn5ZjQ4FRLpsBUAbawJRrPSj-HR-Xq6pgSHuHS9Mthg,1906
|
|
94
|
+
synapse/execution/brain.py,sha256=ROII6GPjayRRlG3S_I3ZSfaf5MGRqdWdys7u682GrOE,1726
|
|
95
|
+
synapse/execution/mode_manager.py,sha256=Oa3SCs5lrFasIjxRPblhTnFxZJPoGdUnia5vALMXn0g,3721
|
|
96
|
+
synapse/execution/reconcile.py,sha256=ghf1qsl42kHjunbnk-GsdqwbpNu4Tgk0-5hIuWTVRis,6878
|
|
97
|
+
synapse/execution/run_manager.py,sha256=CTPEYaSOMs1Bm0RuQr8fF4TeT8qN1HQFfVkT8CiJHYQ,7360
|
|
98
|
+
synapse/execution/scheduler.py,sha256=NNo17KBLcW1qo-up3O1VvhssY6yuctlkBczzcPlvUno,432
|
|
99
|
+
synapse/execution/session_manager.py,sha256=dVFICDmZP1ld5C7ga1joqRg5z9o1_W4qOa_yvGVmIOo,5737
|
|
100
|
+
synapse/execution/summary_manager.py,sha256=_OBXW0pkAdoRhFklMpLmkNButblDFSsM2CCGGmJRhlk,3528
|
|
101
|
+
synapse/executors/__init__.py,sha256=qMQMkIDiLBEqn7uH3oA4ezhjV6FNu33iL0TSTICDHso,35
|
|
102
|
+
synapse/executors/adapters/__init__.py,sha256=-f0QezyWQB41QYpUGl4DD49KsX1UOBehF4DyYmqlRT0,462
|
|
103
|
+
synapse/executors/adapters/acpx/__init__.py,sha256=mCW-omdOWaczypQZmcXm84KyN_gt9P8NBlD0eTKsA-E,127
|
|
104
|
+
synapse/executors/adapters/acpx/executor.py,sha256=ZwAzliRrWPxwILfXpwFDkOSbQIKO392RB9_N8K0NlZA,23586
|
|
105
|
+
synapse/executors/adapters/acpx/session.py,sha256=Xp_x3HJvpaBGrz7iugcL9awlNniIxGY459-PIT6HXp8,3476
|
|
106
|
+
synapse/executors/adapters/codex/__init__.py,sha256=Ie9ze96qgtJ8z_WRPqyfs5rXr4YzZHxPIEMANTns4pw,131
|
|
107
|
+
synapse/executors/adapters/codex/client.py,sha256=nu2uVCaC2BzBgZKlI3f-ePnmSXbX41Bec0D0GG3aB6s,5423
|
|
108
|
+
synapse/executors/adapters/codex/executor.py,sha256=HWSppubRN4VYzp-1ecEegO7zifXqu0l9IR8DmLCVRnI,17806
|
|
109
|
+
synapse/executors/adapters/codex/jsonrpc.py,sha256=-qNxezrstTE30wcqkLOz1_9s5MHfs7ag2NzqTch1Cn0,3648
|
|
110
|
+
synapse/executors/adapters/codex/session.py,sha256=K4Hn965UO0RMAkjznCjyQezlO_cFVUC54NG9FXzk6Yk,4371
|
|
111
|
+
synapse/executors/adapters/hosted/__init__.py,sha256=FiR39AVOxUWlhZ8Ro2Wp94LsK8FpejOFv8OvzJRcpNU,67
|
|
112
|
+
synapse/executors/adapters/hosted/executor.py,sha256=KMrKIbAiORRso56VkrmaJ-IIEl9jZE-V_V90vE1ijvU,3266
|
|
113
|
+
synapse/executors/adapters/mock/__init__.py,sha256=VYJKn75PrarZ3EW5yYMBThUZKOfeIQCUBK8MJCl0OOM,188
|
|
114
|
+
synapse/executors/adapters/mock/config.py,sha256=B8cZLlfwRUhYbAbucrHY5ONarbgEmAzcxpM6jy2dPGk,138
|
|
115
|
+
synapse/executors/adapters/mock/executor.py,sha256=hzEDZA9gpHsudFT3OjEudMZ7o8hcBe5AFbigj-kFpoI,3057
|
|
116
|
+
synapse/executors/adapters/mock/session.py,sha256=rexxb-Cwl7mZ4RHvOh8ABEH5suhwJVnDPPnT2QzPe8A,142
|
|
117
|
+
synapse/executors/core/__init__.py,sha256=NmSZQ4fAh6n0lodisAumXBE6lhLxETVz0M5CkYTHMf0,506
|
|
118
|
+
synapse/executors/core/capabilities.py,sha256=LQa1BqOAEzPiq9bi4PQfZUs9kXM67jvNGXJ0t2lxRYs,301
|
|
119
|
+
synapse/executors/core/events.py,sha256=1XpUm10G5kaENq9_kWzxuDg1jzC8eaChpmHAVa4gU7I,503
|
|
120
|
+
synapse/executors/core/executor.py,sha256=z4iKnxcRy-VWtqwkCHxHn3iVu5vy5Dk7uVcw2USBLTE,767
|
|
121
|
+
synapse/executors/core/registry.py,sha256=6zyInrV3zNPJnpDOc87eCbKHf8mY4a9nYG5tApeGmZo,878
|
|
122
|
+
synapse/executors/core/results.py,sha256=-ggCWztekUB0knqS_cICbbpVqMf4jE0XxdC0uvBMT2w,334
|
|
123
|
+
synapse/executors/core/session.py,sha256=FYrewNHApUNU2kbGMP3QvnEP5IMPJnpSSj4NlIUPMgg,306
|
|
124
|
+
synapse/executors/node/__init__.py,sha256=DeIXEWDuXUKIV_WTTajtEGJdQGLW_q6oq1nYYeF212E,347
|
|
125
|
+
synapse/executors/node/__main__.py,sha256=Xqhk4Ubs1ni4OvILyXBTZJ7hQrrkNmm_7yuJpmGJn9A,1262
|
|
126
|
+
synapse/executors/node/config.py,sha256=ZfohM6bJJeQ33-O4I1gzvnBrde39lAoXUbfJpUcY5QM,4713
|
|
127
|
+
synapse/executors/node/registry.py,sha256=X_LcVtqHHbkXRhnEuxckQPl4OEZtVZSCjWwbiqu3Tag,11474
|
|
128
|
+
synapse/executors/node/service.py,sha256=pzkPv29WxZ73kUyE2U38oFD_r4GdaVos3-2F5O1kr8w,17026
|
|
129
|
+
synapse/infrastructure/__init__.py,sha256=PmgqGYkzN6WBhWESQaWRoTGyi2YvU4GN1mMsBINN4Yc,39
|
|
130
|
+
synapse/infrastructure/llm/__init__.py,sha256=xfLPGx-91YdHrz0LqCf9lEYju_6vC2Q7Y5U2mjloeE4,74
|
|
131
|
+
synapse/infrastructure/llm/openai_provider.py,sha256=VzQkuT7L7R6RLJMFcTVv32Q6wDSIe9duHexDQ40RLFk,15927
|
|
132
|
+
synapse/interaction/__init__.py,sha256=1l0KldPDrnBf8GdljOgXz96iAnoMbLcheCO9r59BtDc,122
|
|
133
|
+
synapse/interaction/manager.py,sha256=CPW8xnGEURNq0nmc2iF6TOCUqDFa_Lgqo6BmnvRIv3A,13473
|
|
134
|
+
synapse/interaction/sanitization.py,sha256=rUp2IjS8SPzMXrAAScqJ7GhTAiocDbplILC-tGYZzW0,2572
|
|
135
|
+
synapse/notification/__init__.py,sha256=1oYWajO-oJ8cpI1yZfyIt1Kt8Rk0kaIsUNarGIiq4Rc,466
|
|
136
|
+
synapse/notification/candidate_builder.py,sha256=-ltY6N8HmqmLaIUCYiIXcVxZFGGzVAkOfF3RE90LR60,4784
|
|
137
|
+
synapse/notification/manager.py,sha256=GG_5KBl_Lc6zmlGSMjvLfE9GZTdYm1tUBKZayqC2u3I,7116
|
|
138
|
+
synapse/notification/policy.py,sha256=9csGG3zITn8iYzWBPMxfMPWrynyFAiQaNdeZYShB-ww,3157
|
|
139
|
+
synapse/observability/__init__.py,sha256=Mn566LhgdMvkDH35IyyU3wtU77D0hc7P3d0ZNRGGjyE,692
|
|
140
|
+
synapse/observability/bootstrap.py,sha256=wBbbt52CGkeMDLuA2cEgg7x8IkmHbdHQfR-AMFM86go,4814
|
|
141
|
+
synapse/observability/context.py,sha256=zsE5UyxWoWemhf7bSp5EHfvS2vKmQdTR083S08pbBPU,1391
|
|
142
|
+
synapse/observability/logger.py,sha256=LX3nvwNPAKnid6Clm16l5-JDqIRjqubHFoMoo8Yu868,2781
|
|
143
|
+
synapse/observability/reason_codes.py,sha256=QtHqJTDKEbyRzOKck0gktVOcHbHtjuZ-qsiYHgmlASw,748
|
|
144
|
+
synapse/observability/redaction.py,sha256=QhzY2KHVpQmeC1TaPS0HKhHsM8WShF8An3qqF1XG3MM,2753
|
|
145
|
+
synapse/observability/schema.py,sha256=Bc_I2UwxCOprmLuq8lshjFpnu9CSkD4hHIyV7PMYeOo,1676
|
|
146
|
+
synapse/observability/store.py,sha256=45Qz7ux6_AWZXgyC_j02Y476Z-CT19W4pFtz3xKzug0,2711
|
|
147
|
+
synapse/observability/emitters/__init__.py,sha256=PetzckhYN-DE0ohRgU-zewgjXZgalkHDrEmfRo2IYcM,792
|
|
148
|
+
synapse/observability/emitters/api.py,sha256=tFGcr5DxbOOk9EzP39Kx4hDBYU1TIE_Iexyuj6xcOh4,2472
|
|
149
|
+
synapse/observability/emitters/blackboard.py,sha256=VucY_91vOzU74UnMeED0d8Xoln1qHFNOkRh2JGwxbZM,2946
|
|
150
|
+
synapse/observability/emitters/communication.py,sha256=jQq5EMxt02VDG66KJ9GxbNnEkgW5G_YjQ9dSXAarNZA,6453
|
|
151
|
+
synapse/observability/emitters/execution.py,sha256=LwCk48-8PHvI0OmQpRIJyr90D4cm04JVWpTvWmy61_s,4441
|
|
152
|
+
synapse/observability/emitters/notification.py,sha256=5RmNd4xAWJw6GkqPlZaIOPBz79lMwLO7JIX9iXmf520,4356
|
|
153
|
+
synapse/observability/sinks/__init__.py,sha256=XoPlwh-DXTOKH2t1MAyXx9iSicBvNNTdzU_XXhYKUAc,142
|
|
154
|
+
synapse/observability/sinks/pretty.py,sha256=vi_H9bpr-kf2xzQntNG4f9QI163ANkm0rsan4N_66z8,6387
|
|
155
|
+
synapse/observability/sinks/stdout.py,sha256=dDx6Lkf7yFQQ9Ql_1JjLySRpImwaBYvTAiK42lrvub4,441
|
|
156
|
+
synapse/observability/sinks/types.py,sha256=-z4fitmg5UNyqZwEnDtHq9lRFW3RSQCAwrFNtiQxIho,200
|
|
157
|
+
synapse/protocol/__init__.py,sha256=JiXE9qIOxLpRy7CiySB2Y4TD03xoNlTnDHbybX2dZ5E,2509
|
|
158
|
+
synapse/protocol/assignment.py,sha256=4kQuJhCUd8ZP-cR70tdKV80uJ9I-UBnjEUFTyHDiNYs,166
|
|
159
|
+
synapse/protocol/command.py,sha256=QQvgYsKEkRkezPoV3KyWg8UpcVKg2-NlQ3hOF4vDE10,324
|
|
160
|
+
synapse/protocol/enums.py,sha256=J2LPcce8BO3TfU03nQvXiqFZ6JHpYmFWTTzEVMQcWQ0,2989
|
|
161
|
+
synapse/protocol/execution_mode.py,sha256=gQ4coZqjXMuUjzdFMEzEBuztJsnxi4SwHJ1L6wQ-Ucc,282
|
|
162
|
+
synapse/protocol/executor_node.py,sha256=pJBX3NtuhtrnW3Qf3c5HpR8rxd30j6ixetveG6t2gl4,3330
|
|
163
|
+
synapse/protocol/interaction.py,sha256=2Ydks9m3w45QXPqhTbDkPDjBNG8yGzhPRMqOdbOvHlQ,1406
|
|
164
|
+
synapse/protocol/interruption.py,sha256=0HlcKH1gIGL_K13kfJS9CZAKiiETHgS6320CKkT5QxA,367
|
|
165
|
+
synapse/protocol/mutation.py,sha256=rdTagK5je_3z9JvxZf01sI3BC9iEKYYKmmpzuaK9JEg,399
|
|
166
|
+
synapse/protocol/notification.py,sha256=C6AiH3P0WHS-gT7IuMFlAKfYx8NCEH0zWscl9jq1bME,572
|
|
167
|
+
synapse/protocol/persona.py,sha256=70jJMOJYS8GQrE97OmaA7RhNmkpjjl7q_q0Yr_nTCKE,495
|
|
168
|
+
synapse/protocol/run.py,sha256=-zBauqHOpp8Wc83nzX6kV9abqjuU6BVuHrQ5ZkqKnC8,546
|
|
169
|
+
synapse/protocol/session.py,sha256=skAu1-nzpyirPxYvz7jadeZlswgcpBpW9tL5OpB0rbQ,1249
|
|
170
|
+
synapse/protocol/summary.py,sha256=PXSr_ejfmv8VGHdq0I5UTzdCNxN1sIs3dlf-CVabwAw,290
|
|
171
|
+
synapse/protocol/task.py,sha256=TAPLvyU0NRwCr0FdWjbOkhFzcF_c_WeMqriytUyZGcQ,586
|
|
172
|
+
synapse/protocol/task_execution_detail.py,sha256=pmmoyzzrIECfHp2ATllyzrnoawDBgtbmgdEK91yUIjM,316
|
|
173
|
+
synapse/runtime/__init__.py,sha256=h1jlGHMknLMiRqvNlOIE-pDus8icBlA6RnCtkROUmIA,783
|
|
174
|
+
synapse/runtime/bootstrap.py,sha256=AXyeWNy5wnKbqbhMR5ldVeme1cyhJuQLIDprk2F8Sks,1107
|
|
175
|
+
synapse/runtime/config.py,sha256=nxVF7ST-QHME1Z8_x1c6BXPasDl3Vrb0oZ-a0l1fKoI,8148
|
|
176
|
+
synapse/runtime/container.py,sha256=buqs55vjKkz4jf79DzRei58rUKsNHiiwOUdycrBP1T4,4151
|
|
177
|
+
synapse/runtime/executor_node_manager.py,sha256=yOYdmZktAiLkfWDo_TGLdVHt0f4zpmdlwS0PqthDlns,18479
|
|
178
|
+
synapse/runtime/models.py,sha256=yScnwNlv1ygFPVMjJUc1VMlaXcz_UBWT77OmvAmt57Q,3438
|
|
179
|
+
synapse/runtime/session.py,sha256=v7MrUVZHQ9JRAKAcOCxpJNJy5IUrs4o8G7FyGh76_qw,50216
|
|
180
|
+
synapse/service/__init__.py,sha256=Wrr0IS30PyXc0uDO-NorJal7Z1a9_ijzjxctZPfCKj4,54
|
|
181
|
+
synapse/service/app.py,sha256=tkyc4ET6bXQnKVh7aJzm9-R6M71GK38oVPEF6Pr4p_4,3239
|
|
182
|
+
newbro_cli-0.1.0.dist-info/METADATA,sha256=Z9nCid0bDZQIj58SExNaXAZYKFLndPeeDNF35wGrJZ4,9595
|
|
183
|
+
newbro_cli-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
184
|
+
newbro_cli-0.1.0.dist-info/entry_points.txt,sha256=_MENxysNiJx4oX3uWiaHTw-cmxOPd1bE9ai0_xfi02Y,49
|
|
185
|
+
newbro_cli-0.1.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
|
|
186
|
+
newbro_cli-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
synapse
|
synapse/__init__.py
ADDED
synapse/__main__.py
ADDED
synapse/api/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""API package scaffold."""
|
synapse/api/app.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from fastapi import FastAPI
|
|
4
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
5
|
+
|
|
6
|
+
from synapse.api.logging import install_access_log_filters
|
|
7
|
+
from synapse.api.paths import API_PREFIX, api_path
|
|
8
|
+
from synapse.api.routes.commands import router as commands_router
|
|
9
|
+
from synapse.api.routes.executor_nodes import router as executor_nodes_router
|
|
10
|
+
from synapse.api.routes.health import router as health_router
|
|
11
|
+
from synapse.api.routes.interaction_requests import router as interaction_requests_router
|
|
12
|
+
from synapse.api.routes.messages import router as messages_router
|
|
13
|
+
from synapse.api.routes.personas import router as personas_router
|
|
14
|
+
from synapse.api.routes.session_config import router as session_config_router
|
|
15
|
+
from synapse.api.routes.sessions import router as sessions_router
|
|
16
|
+
from synapse.api.ws.executors import router as executor_control_router
|
|
17
|
+
from synapse.api.ws.stream import router as stream_router
|
|
18
|
+
from synapse.runtime.bootstrap import build_runtime_container
|
|
19
|
+
from synapse.runtime.config import Settings
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def create_app(*, settings: Settings | None = None) -> FastAPI:
|
|
23
|
+
container = build_runtime_container(settings=settings)
|
|
24
|
+
app = FastAPI(
|
|
25
|
+
title="Synapse v2",
|
|
26
|
+
openapi_url=api_path("/openapi.json"),
|
|
27
|
+
docs_url=api_path("/docs"),
|
|
28
|
+
redoc_url=api_path("/redoc"),
|
|
29
|
+
)
|
|
30
|
+
app.state.runtime_container = container
|
|
31
|
+
|
|
32
|
+
install_access_log_filters(container.settings)
|
|
33
|
+
if container.settings.cors_allowed_origins:
|
|
34
|
+
app.add_middleware(
|
|
35
|
+
CORSMiddleware,
|
|
36
|
+
allow_origins=list(container.settings.cors_allowed_origins),
|
|
37
|
+
allow_methods=["*"],
|
|
38
|
+
allow_headers=["*"],
|
|
39
|
+
)
|
|
40
|
+
app.include_router(health_router, prefix=API_PREFIX)
|
|
41
|
+
app.include_router(sessions_router, prefix=API_PREFIX)
|
|
42
|
+
app.include_router(messages_router, prefix=API_PREFIX)
|
|
43
|
+
app.include_router(commands_router, prefix=API_PREFIX)
|
|
44
|
+
app.include_router(interaction_requests_router, prefix=API_PREFIX)
|
|
45
|
+
app.include_router(personas_router, prefix=API_PREFIX)
|
|
46
|
+
app.include_router(executor_nodes_router, prefix=API_PREFIX)
|
|
47
|
+
app.include_router(session_config_router, prefix=API_PREFIX)
|
|
48
|
+
app.include_router(stream_router, prefix=API_PREFIX)
|
|
49
|
+
app.include_router(executor_control_router, prefix=API_PREFIX)
|
|
50
|
+
|
|
51
|
+
return app
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
app = create_app()
|
synapse/api/logging.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from synapse.runtime.config import Settings
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class DiagnosticsTimelineAccessFilter(logging.Filter):
|
|
11
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
12
|
+
method, path = _extract_request_parts(record)
|
|
13
|
+
if method == "GET" and "/diagnostics/timeline" in path:
|
|
14
|
+
return False
|
|
15
|
+
return True
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def install_access_log_filters(settings: "Settings") -> None:
|
|
19
|
+
if not settings.quiet_diagnostics_access_logs:
|
|
20
|
+
return
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger("uvicorn.access")
|
|
23
|
+
if any(isinstance(item, DiagnosticsTimelineAccessFilter) for item in logger.filters):
|
|
24
|
+
return
|
|
25
|
+
logger.addFilter(DiagnosticsTimelineAccessFilter())
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _extract_request_parts(record: logging.LogRecord) -> tuple[str, str]:
|
|
29
|
+
args = record.args
|
|
30
|
+
if isinstance(args, tuple) and len(args) >= 3:
|
|
31
|
+
method = str(args[1])
|
|
32
|
+
path = str(args[2])
|
|
33
|
+
return method, path
|
|
34
|
+
message = record.getMessage()
|
|
35
|
+
if '"' not in message:
|
|
36
|
+
return "", ""
|
|
37
|
+
try:
|
|
38
|
+
request_part = message.split('"', 2)[1]
|
|
39
|
+
method, path, *_ = request_part.split(" ")
|
|
40
|
+
except (IndexError, ValueError):
|
|
41
|
+
return "", ""
|
|
42
|
+
return method, path
|