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.
Files changed (186) hide show
  1. newbro_cli-0.1.0.dist-info/METADATA +333 -0
  2. newbro_cli-0.1.0.dist-info/RECORD +186 -0
  3. newbro_cli-0.1.0.dist-info/WHEEL +5 -0
  4. newbro_cli-0.1.0.dist-info/entry_points.txt +2 -0
  5. newbro_cli-0.1.0.dist-info/top_level.txt +1 -0
  6. synapse/__init__.py +3 -0
  7. synapse/__main__.py +9 -0
  8. synapse/api/__init__.py +1 -0
  9. synapse/api/app.py +54 -0
  10. synapse/api/logging.py +42 -0
  11. synapse/api/models.py +135 -0
  12. synapse/api/paths.py +26 -0
  13. synapse/api/routes/__init__.py +1 -0
  14. synapse/api/routes/commands.py +66 -0
  15. synapse/api/routes/executor_nodes.py +125 -0
  16. synapse/api/routes/health.py +8 -0
  17. synapse/api/routes/interaction_requests.py +59 -0
  18. synapse/api/routes/messages.py +46 -0
  19. synapse/api/routes/personas.py +124 -0
  20. synapse/api/routes/session_config.py +64 -0
  21. synapse/api/routes/sessions.py +129 -0
  22. synapse/api/ws/__init__.py +1 -0
  23. synapse/api/ws/executors.py +69 -0
  24. synapse/api/ws/stream.py +363 -0
  25. synapse/blackboard/__init__.py +14 -0
  26. synapse/blackboard/backends/__init__.py +5 -0
  27. synapse/blackboard/backends/memory.py +491 -0
  28. synapse/blackboard/interfaces.py +167 -0
  29. synapse/blackboard/queries.py +31 -0
  30. synapse/blackboard/revisions.py +30 -0
  31. synapse/blackboard/store.py +31 -0
  32. synapse/blackboard/subscriptions.py +23 -0
  33. synapse/cli/__init__.py +5 -0
  34. synapse/cli/main.py +1958 -0
  35. synapse/communication/__init__.py +6 -0
  36. synapse/communication/brain.py +1274 -0
  37. synapse/communication/context.py +219 -0
  38. synapse/communication/history.py +80 -0
  39. synapse/communication/model.py +107 -0
  40. synapse/communication/models/__init__.py +4 -0
  41. synapse/communication/models/openai.py +331 -0
  42. synapse/communication/models/scripted.py +167 -0
  43. synapse/communication/persona_pool.py +200 -0
  44. synapse/communication/policies/__init__.py +4 -0
  45. synapse/communication/policies/reply_style.py +59 -0
  46. synapse/communication/policies/tool_usage_policy.py +10 -0
  47. synapse/communication/prompts/__init__.py +3 -0
  48. synapse/communication/prompts/base/__init__.py +1 -0
  49. synapse/communication/prompts/base/guardrails.py +6 -0
  50. synapse/communication/prompts/base/identity.py +7 -0
  51. synapse/communication/prompts/base/persona_identity.py +21 -0
  52. synapse/communication/prompts/base/reply_style.py +6 -0
  53. synapse/communication/prompts/base/tool_policy.py +57 -0
  54. synapse/communication/prompts/builders.py +168 -0
  55. synapse/communication/prompts/examples/__init__.py +1 -0
  56. synapse/communication/prompts/examples/notification_style.py +11 -0
  57. synapse/communication/prompts/examples/tool_usage.py +60 -0
  58. synapse/communication/prompts/runtime_context.py +199 -0
  59. synapse/communication/prompts/tasks/__init__.py +1 -0
  60. synapse/communication/prompts/tasks/normal_reply.py +40 -0
  61. synapse/communication/prompts/tasks/proactive_notification.py +14 -0
  62. synapse/communication/resolver.py +156 -0
  63. synapse/communication/tools/__init__.py +256 -0
  64. synapse/communication/tools/add_constraint.py +63 -0
  65. synapse/communication/tools/add_task_note.py +59 -0
  66. synapse/communication/tools/base.py +22 -0
  67. synapse/communication/tools/control_task.py +82 -0
  68. synapse/communication/tools/create_task.py +127 -0
  69. synapse/communication/tools/list_tasks.py +53 -0
  70. synapse/communication/tools/query_task_detail.py +57 -0
  71. synapse/communication/tools/query_task_summary.py +34 -0
  72. synapse/communication/tools/resolve_interaction_request.py +67 -0
  73. synapse/communication/tools/update_task.py +109 -0
  74. synapse/communication/types.py +22 -0
  75. synapse/config_home.py +72 -0
  76. synapse/connectors/__init__.py +1 -0
  77. synapse/connectors/base/__init__.py +20 -0
  78. synapse/connectors/base/bindings.py +145 -0
  79. synapse/connectors/base/module.py +48 -0
  80. synapse/connectors/base/transport.py +202 -0
  81. synapse/connectors/host/__init__.py +17 -0
  82. synapse/connectors/host/app.py +60 -0
  83. synapse/connectors/host/catalog.py +29 -0
  84. synapse/connectors/host/config.py +164 -0
  85. synapse/connectors/host/registry.py +21 -0
  86. synapse/connectors/voice/__init__.py +1 -0
  87. synapse/connectors/voice/agora_convoai/__init__.py +20 -0
  88. synapse/connectors/voice/agora_convoai/app.py +4 -0
  89. synapse/connectors/voice/agora_convoai/models.py +116 -0
  90. synapse/connectors/voice/agora_convoai/module.py +391 -0
  91. synapse/connectors/voice/agora_convoai/service.py +513 -0
  92. synapse/connectors/voice/agora_convoai/session_service.py +286 -0
  93. synapse/connectors/voice/agora_convoai/settings.py +223 -0
  94. synapse/connectors/voice/agora_convoai/token_utils.py +153 -0
  95. synapse/envfile.py +25 -0
  96. synapse/execution/__init__.py +21 -0
  97. synapse/execution/assignment.py +53 -0
  98. synapse/execution/brain.py +45 -0
  99. synapse/execution/mode_manager.py +105 -0
  100. synapse/execution/reconcile.py +178 -0
  101. synapse/execution/run_manager.py +184 -0
  102. synapse/execution/scheduler.py +13 -0
  103. synapse/execution/session_manager.py +122 -0
  104. synapse/execution/summary_manager.py +84 -0
  105. synapse/executors/__init__.py +1 -0
  106. synapse/executors/adapters/__init__.py +17 -0
  107. synapse/executors/adapters/acpx/__init__.py +4 -0
  108. synapse/executors/adapters/acpx/executor.py +610 -0
  109. synapse/executors/adapters/acpx/session.py +117 -0
  110. synapse/executors/adapters/codex/__init__.py +4 -0
  111. synapse/executors/adapters/codex/client.py +182 -0
  112. synapse/executors/adapters/codex/executor.py +455 -0
  113. synapse/executors/adapters/codex/jsonrpc.py +108 -0
  114. synapse/executors/adapters/codex/session.py +124 -0
  115. synapse/executors/adapters/hosted/__init__.py +3 -0
  116. synapse/executors/adapters/hosted/executor.py +95 -0
  117. synapse/executors/adapters/mock/__init__.py +5 -0
  118. synapse/executors/adapters/mock/config.py +7 -0
  119. synapse/executors/adapters/mock/executor.py +91 -0
  120. synapse/executors/adapters/mock/session.py +7 -0
  121. synapse/executors/core/__init__.py +19 -0
  122. synapse/executors/core/capabilities.py +12 -0
  123. synapse/executors/core/events.py +22 -0
  124. synapse/executors/core/executor.py +32 -0
  125. synapse/executors/core/registry.py +28 -0
  126. synapse/executors/core/results.py +12 -0
  127. synapse/executors/core/session.py +12 -0
  128. synapse/executors/node/__init__.py +15 -0
  129. synapse/executors/node/__main__.py +43 -0
  130. synapse/executors/node/config.py +130 -0
  131. synapse/executors/node/registry.py +310 -0
  132. synapse/executors/node/service.py +397 -0
  133. synapse/infrastructure/__init__.py +1 -0
  134. synapse/infrastructure/llm/__init__.py +3 -0
  135. synapse/infrastructure/llm/openai_provider.py +454 -0
  136. synapse/interaction/__init__.py +3 -0
  137. synapse/interaction/manager.py +353 -0
  138. synapse/interaction/sanitization.py +76 -0
  139. synapse/notification/__init__.py +14 -0
  140. synapse/notification/candidate_builder.py +136 -0
  141. synapse/notification/manager.py +179 -0
  142. synapse/notification/policy.py +91 -0
  143. synapse/observability/__init__.py +25 -0
  144. synapse/observability/bootstrap.py +146 -0
  145. synapse/observability/context.py +47 -0
  146. synapse/observability/emitters/__init__.py +29 -0
  147. synapse/observability/emitters/api.py +87 -0
  148. synapse/observability/emitters/blackboard.py +76 -0
  149. synapse/observability/emitters/communication.py +178 -0
  150. synapse/observability/emitters/execution.py +154 -0
  151. synapse/observability/emitters/notification.py +111 -0
  152. synapse/observability/logger.py +73 -0
  153. synapse/observability/reason_codes.py +14 -0
  154. synapse/observability/redaction.py +117 -0
  155. synapse/observability/schema.py +57 -0
  156. synapse/observability/sinks/__init__.py +4 -0
  157. synapse/observability/sinks/pretty.py +216 -0
  158. synapse/observability/sinks/stdout.py +16 -0
  159. synapse/observability/sinks/types.py +10 -0
  160. synapse/observability/store.py +85 -0
  161. synapse/protocol/__init__.py +97 -0
  162. synapse/protocol/assignment.py +9 -0
  163. synapse/protocol/command.py +14 -0
  164. synapse/protocol/enums.py +138 -0
  165. synapse/protocol/execution_mode.py +12 -0
  166. synapse/protocol/executor_node.py +120 -0
  167. synapse/protocol/interaction.py +47 -0
  168. synapse/protocol/interruption.py +13 -0
  169. synapse/protocol/mutation.py +16 -0
  170. synapse/protocol/notification.py +22 -0
  171. synapse/protocol/persona.py +19 -0
  172. synapse/protocol/run.py +20 -0
  173. synapse/protocol/session.py +43 -0
  174. synapse/protocol/summary.py +11 -0
  175. synapse/protocol/task.py +22 -0
  176. synapse/protocol/task_execution_detail.py +14 -0
  177. synapse/runtime/__init__.py +28 -0
  178. synapse/runtime/bootstrap.py +29 -0
  179. synapse/runtime/config.py +209 -0
  180. synapse/runtime/container.py +102 -0
  181. synapse/runtime/executor_node_manager.py +477 -0
  182. synapse/runtime/models.py +112 -0
  183. synapse/runtime/session.py +1212 -0
  184. synapse/service/__init__.py +3 -0
  185. synapse/service/app.py +96 -0
  186. 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,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ newbro = synapse.cli.main:main
@@ -0,0 +1 @@
1
+ synapse
synapse/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ """Synapse v2 package scaffold."""
2
+
3
+ __all__ = ["protocol", "blackboard"]
synapse/__main__.py ADDED
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+
5
+ from synapse.cli.main import main
6
+
7
+
8
+ if __name__ == "__main__":
9
+ raise SystemExit(main())
@@ -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