opencode-a2a-server 0.1.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.gitignore +3 -0
  2. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.secrets.baseline +2 -2
  3. opencode_a2a_server-0.2.1/CONTRIBUTING.md +79 -0
  4. {opencode_a2a_server-0.1.0/src/opencode_a2a_server.egg-info → opencode_a2a_server-0.2.1}/PKG-INFO +111 -20
  5. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/README.md +109 -18
  6. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/docs/agent_deploy_sop.md +45 -123
  7. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/docs/guide.md +141 -12
  8. opencode_a2a_server-0.2.1/docs/release_deploy_smoke_test.md +188 -0
  9. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/pyproject.toml +1 -1
  10. opencode_a2a_server-0.2.1/scripts/README.md +34 -0
  11. opencode_a2a_server-0.2.1/scripts/dependency_health.sh +13 -0
  12. opencode_a2a_server-0.2.1/scripts/deploy/enable_instance.sh +175 -0
  13. opencode_a2a_server-0.2.1/scripts/deploy/install_release_runtime.sh +52 -0
  14. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/install_units.sh +26 -4
  15. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/provider_secret_env_keys.sh +23 -0
  16. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/run_opencode.sh +8 -5
  17. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/setup_instance.sh +36 -9
  18. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy.sh +60 -15
  19. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy_readme.md +37 -15
  20. opencode_a2a_server-0.2.1/scripts/deploy_release.sh +8 -0
  21. opencode_a2a_server-0.2.1/scripts/deploy_release_readme.md +72 -0
  22. opencode_a2a_server-0.2.1/scripts/doctor.sh +13 -0
  23. opencode_a2a_server-0.2.1/scripts/health_common.sh +23 -0
  24. opencode_a2a_server-0.2.1/scripts/init_release_system.sh +15 -0
  25. opencode_a2a_server-0.2.1/scripts/init_release_system_readme.md +41 -0
  26. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/init_system.sh +133 -38
  27. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/init_system_readme.md +16 -6
  28. opencode_a2a_server-0.2.1/scripts/shell_helpers.sh +34 -0
  29. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/uninstall.sh +13 -8
  30. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/uninstall_readme.md +2 -2
  31. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/agent.py +122 -20
  32. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/app.py +203 -82
  33. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/config.py +2 -25
  34. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/extension_contracts.py +237 -21
  35. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/jsonrpc_ext.py +57 -116
  36. opencode_a2a_server-0.2.1/src/opencode_a2a_server/jsonrpc_models.py +123 -0
  37. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/opencode_client.py +49 -16
  38. opencode_a2a_server-0.2.1/src/opencode_a2a_server/parts_mapper.py +151 -0
  39. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1/src/opencode_a2a_server.egg-info}/PKG-INFO +111 -20
  40. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/SOURCES.txt +16 -4
  41. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/requires.txt +1 -1
  42. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/helpers.py +28 -4
  43. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_agent_card.py +95 -16
  44. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_agent_errors.py +43 -0
  45. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_cancel_contract.py +61 -0
  46. opencode_a2a_server-0.2.1/tests/test_deploy_security_contract.py +164 -0
  47. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_extension_contract_consistency.py +54 -4
  48. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_init_system_security.py +25 -0
  49. opencode_a2a_server-0.2.1/tests/test_jsonrpc_models.py +57 -0
  50. opencode_a2a_server-0.2.1/tests/test_jsonrpc_unsupported_method.py +85 -0
  51. opencode_a2a_server-0.2.1/tests/test_metrics.py +201 -0
  52. opencode_a2a_server-0.2.1/tests/test_multipart_input.py +170 -0
  53. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_opencode_client_params.py +97 -1
  54. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_opencode_session_extension.py +197 -2
  55. opencode_a2a_server-0.2.1/tests/test_script_health_contract.py +41 -0
  56. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_settings.py +0 -10
  57. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_streaming_output_contract.py +120 -4
  58. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_transport_contract.py +4 -2
  59. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/uv.lock +7 -7
  60. opencode_a2a_server-0.1.0/scripts/README.md +0 -33
  61. opencode_a2a_server-0.1.0/scripts/dependency_health.sh +0 -22
  62. opencode_a2a_server-0.1.0/scripts/deploy/enable_instance.sh +0 -34
  63. opencode_a2a_server-0.1.0/scripts/deploy_light.sh +0 -452
  64. opencode_a2a_server-0.1.0/scripts/deploy_light_readme.md +0 -84
  65. opencode_a2a_server-0.1.0/scripts/doctor.sh +0 -22
  66. opencode_a2a_server-0.1.0/scripts/start_services.sh +0 -115
  67. opencode_a2a_server-0.1.0/scripts/start_services_readme.md +0 -41
  68. opencode_a2a_server-0.1.0/tests/test_deploy_security_contract.py +0 -79
  69. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.github/workflows/ci.yml +0 -0
  70. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.github/workflows/dependency-health.yml +0 -0
  71. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.github/workflows/publish.yml +0 -0
  72. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.pre-commit-config.yaml +0 -0
  73. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/AGENTS.md +0 -0
  74. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/LICENSE +0 -0
  75. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/SECURITY.md +0 -0
  76. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/run_a2a.sh +0 -0
  77. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/update_a2a.sh +0 -0
  78. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/init_system_uv_release_manifest.sh +0 -0
  79. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/lint.sh +0 -0
  80. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/smoke_test_built_cli.sh +0 -0
  81. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/setup.cfg +0 -0
  82. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/__init__.py +0 -0
  83. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/text_parts.py +0 -0
  84. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/dependency_links.txt +0 -0
  85. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/entry_points.txt +0 -0
  86. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/top_level.txt +0 -0
  87. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/__init__.py +0 -0
  88. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_call_context_builder.py +0 -0
  89. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_cancellation.py +0 -0
  90. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_directory_validation.py +0 -0
  91. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_opencode_agent_session_binding.py +0 -0
  92. {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_session_ownership.py +0 -0
@@ -213,6 +213,9 @@ __marimo__/
213
213
  # GitHub CLI temporary body files (should not be committed)
214
214
  issue_*.md
215
215
 
216
+ # Local session temp files
217
+ temp_*.*
218
+
216
219
  # Local OpenCode OpenAPI snapshots (high-churn, local reference only)
217
220
  docs/operations/opencode/
218
221
  .swival/
@@ -133,9 +133,9 @@
133
133
  "filename": "scripts/init_system.sh",
134
134
  "hashed_secret": "96183ea4ff07d786ed3233777364ddbf14eb74cc",
135
135
  "is_verified": false,
136
- "line_number": 23
136
+ "line_number": 25
137
137
  }
138
138
  ]
139
139
  },
140
- "generated_at": "2026-03-13T14:03:33Z"
140
+ "generated_at": "2026-03-17T13:35:29Z"
141
141
  }
@@ -0,0 +1,79 @@
1
+ # Contributing
2
+
3
+ Thanks for contributing to `opencode-a2a-server`.
4
+
5
+ This repository is maintained as a streaming-first A2A wrapper around OpenCode.
6
+ Changes should keep runtime behavior, Agent Card declarations, OpenAPI examples,
7
+ and machine-readable extension contracts aligned.
8
+
9
+ ## Before You Start
10
+
11
+ - Read [README.md](README.md) for project scope and user/operator paths.
12
+ - Read [docs/guide.md](docs/guide.md) for runtime contracts and compatibility guidance.
13
+ - Read [SECURITY.md](SECURITY.md) before changing auth, deployment, or secret handling.
14
+
15
+ ## Development Setup
16
+
17
+ Requirements:
18
+
19
+ - Python 3.11, 3.12, or 3.13
20
+ - `uv`
21
+ - A reachable OpenCode runtime if you need end-to-end manual checks
22
+
23
+ Install dependencies:
24
+
25
+ ```bash
26
+ uv sync --all-extras
27
+ ```
28
+
29
+ Run the local development server:
30
+
31
+ ```bash
32
+ A2A_BEARER_TOKEN=dev-token \
33
+ OPENCODE_DIRECTORY=/abs/path/to/workspace \
34
+ uv run opencode-a2a-server
35
+ ```
36
+
37
+ ## Validation
38
+
39
+ Run the default validation baseline before opening a PR:
40
+
41
+ ```bash
42
+ uv run pre-commit run --all-files
43
+ uv run pytest
44
+ ```
45
+
46
+ If you change shell or deployment scripts, also run:
47
+
48
+ ```bash
49
+ bash -n scripts/deploy.sh
50
+ bash -n scripts/deploy/setup_instance.sh
51
+ ```
52
+
53
+ ## Change Expectations
54
+
55
+ - Keep code, comments, and docs in English.
56
+ - Keep issue / PR discussion in Simplified Chinese when collaborating in this repository.
57
+ - Do not drift Agent Card, OpenAPI examples, wire contract metadata, and runtime behavior.
58
+ - Prefer additive, explicit compatibility changes over silent behavior changes.
59
+ - Treat `opencode.*` surfaces as provider-private unless the repository already defines them as shared A2A contracts.
60
+
61
+ ## Git and PR Workflow
62
+
63
+ - Branch from the latest `main`.
64
+ - Use `git fetch` and `git merge --ff-only` to sync mainline.
65
+ - Do not push directly to protected branches.
66
+ - Link the relevant issue in commits and PR descriptions when applicable.
67
+ - Open PRs as Draft by default when the change still needs review or iteration.
68
+
69
+ ## Documentation
70
+
71
+ Update docs together with code whenever you change:
72
+
73
+ - authentication or deployment behavior
74
+ - extension contracts or compatibility expectations
75
+ - user-facing request or response shapes
76
+ - operational scripts
77
+
78
+ Keep compatibility guidance centralized in [docs/guide.md](docs/guide.md) unless a
79
+ new standalone document is clearly necessary.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencode-a2a-server
3
- Version: 0.1.0
3
+ Version: 0.2.1
4
4
  Summary: A2A wrapper service for opencode
5
5
  Author: liujuanjuan1984@Intelligent-Internet
6
6
  License-Expression: Apache-2.0
@@ -19,7 +19,7 @@ Classifier: Topic :: Internet :: WWW/HTTP
19
19
  Requires-Python: >=3.11
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: a2a-sdk==0.3.24
22
+ Requires-Dist: a2a-sdk==0.3.25
23
23
  Requires-Dist: fastapi>=0.110
24
24
  Requires-Dist: httpx>=0.27
25
25
  Requires-Dist: pydantic>=2.6
@@ -52,7 +52,7 @@ need a stable service layer around it. This repository provides that layer by:
52
52
 
53
53
  - bridging A2A transport contracts to OpenCode session/message/event APIs
54
54
  - making session and interrupt behavior explicit and auditable
55
- - packaging deployment scripts and operational guidance for long-running use
55
+ - packaging release-first deployment scripts and operational guidance for long-running use
56
56
 
57
57
  ## What It Already Provides
58
58
 
@@ -64,7 +64,7 @@ need a stable service layer around it. This repository provides that layer by:
64
64
  - session continuation via `metadata.shared.session.id`
65
65
  - request-scoped model selection via `metadata.shared.model`
66
66
  - OpenCode session query/control extensions and provider/model discovery
67
- - systemd multi-instance deployment and lightweight current-user deployment
67
+ - released CLI install/upgrade flow and release-based systemd deployment
68
68
 
69
69
  ## Extension Capability Overview
70
70
 
@@ -88,6 +88,8 @@ Detailed consumption guidance:
88
88
  - Shared stream hints: [`docs/guide.md#shared-stream-hints-contract`](docs/guide.md#shared-stream-hints-contract)
89
89
  - OpenCode session query and provider discovery: [`docs/guide.md#opencode-session-query--provider-discovery-a2a-extensions`](docs/guide.md#opencode-session-query--provider-discovery-a2a-extensions)
90
90
  - Shared interrupt callback: [`docs/guide.md#shared-interrupt-callback-a2a-extension`](docs/guide.md#shared-interrupt-callback-a2a-extension)
91
+ - Compatibility profile and retention guidance:
92
+ [`docs/guide.md#compatibility-profile`](docs/guide.md#compatibility-profile)
91
93
 
92
94
  ## Design Principle
93
95
 
@@ -113,7 +115,7 @@ flowchart TD
113
115
  Mapping --> Runtime["OpenCode HTTP runtime"]
114
116
 
115
117
  Api --> Auth["Bearer auth + request logging controls"]
116
- Api --> Deploy["systemd and lightweight deployment scripts"]
118
+ Api --> Deploy["release-based deployment tooling"]
117
119
  Runtime --> Workspace["Shared workspace / environment boundary"]
118
120
  ```
119
121
 
@@ -145,30 +147,106 @@ hard multi-tenant isolation layer.
145
147
  Read before deployment:
146
148
 
147
149
  - [SECURITY.md](SECURITY.md)
148
- - [scripts/deploy_readme.md](scripts/deploy_readme.md)
150
+ - [scripts/deploy_release_readme.md](scripts/deploy_release_readme.md)
151
+
152
+ ## User Paths
153
+
154
+ Released versions are published to PyPI and mapped to Git tags / GitHub
155
+ Releases. This is the recommended entry point for users.
149
156
 
150
- ## Quick Start & Development
157
+ ### Path 1: Run a Released CLI in an Existing User Environment
151
158
 
152
- 1. Start OpenCode:
159
+ Install the latest release:
153
160
 
154
161
  ```bash
155
- opencode serve
162
+ uv tool install opencode-a2a-server
156
163
  ```
157
164
 
158
- 2. Install dependencies:
165
+ Upgrade an existing installation:
159
166
 
160
167
  ```bash
161
- uv sync --all-extras
168
+ uv tool upgrade opencode-a2a-server
162
169
  ```
163
170
 
164
- 3. Start this service:
171
+ Install an exact release:
165
172
 
166
173
  ```bash
167
- A2A_BEARER_TOKEN=dev-token uv run opencode-a2a-server
174
+ uv tool install "opencode-a2a-server==<version>"
175
+ ```
176
+
177
+ Run it against an existing project/workspace:
178
+
179
+ ```bash
180
+ GOOGLE_GENERATIVE_AI_API_KEY=<your-key> \
181
+ OPENCODE_PROVIDER_ID=google \
182
+ OPENCODE_MODEL_ID=gemini-3.1-pro-preview \
183
+ opencode serve
184
+
185
+ A2A_BEARER_TOKEN=prod-token \
186
+ A2A_PUBLIC_URL=http://127.0.0.1:8000 \
187
+ OPENCODE_DIRECTORY=/abs/path/to/workspace \
188
+ opencode-a2a-server
168
189
  ```
169
190
 
170
191
  Default address: `http://127.0.0.1:8000`
171
192
 
193
+ If you omit `OPENCODE_PROVIDER_ID` / `OPENCODE_MODEL_ID`, `opencode serve`
194
+ uses your local OpenCode defaults (for example `~/.config/opencode/opencode.json`).
195
+
196
+ For provider-specific auth, model IDs, and config details, use the OpenCode
197
+ official docs and CLI:
198
+
199
+ - Providers: <https://opencode.ai/docs/providers/>
200
+ - Models: <https://opencode.ai/docs/models/>
201
+ - Local checks: `opencode auth list`, `opencode models`, `opencode models <provider>`
202
+
203
+ This path is for users who already manage their own shell, workspace, and
204
+ process lifecycle. No host bootstrap script is required.
205
+
206
+ ### Path 2: Formal systemd Deploy From a Released Version
207
+
208
+ For long-running systemd deployments, use the release-based scripts:
209
+
210
+ ```bash
211
+ ./scripts/init_release_system.sh
212
+ ./scripts/deploy_release.sh project=alpha a2a_port=8010 a2a_host=127.0.0.1
213
+ ```
214
+
215
+ This path is for users who want:
216
+
217
+ - isolated Linux users and per-project directories
218
+ - systemd-managed restart behavior
219
+ - root-only secret files
220
+ - published package versions as the deployment boundary
221
+
222
+ Primary operator docs:
223
+
224
+ - [scripts/init_release_system.sh](scripts/init_release_system.sh)
225
+ - [scripts/deploy_release.sh](scripts/deploy_release.sh)
226
+ - [scripts/deploy_release_readme.md](scripts/deploy_release_readme.md)
227
+ - [docs/release_deploy_smoke_test.md](docs/release_deploy_smoke_test.md)
228
+
229
+ ## Contributor Paths
230
+
231
+ Use the repository checkout directly only for development, local debugging, or
232
+ validation against unreleased changes. Source-based deploy/bootstrap docs are
233
+ kept for contributors and internal debugging, not as the recommended user path.
234
+
235
+ Quick source run:
236
+
237
+ ```bash
238
+ uv sync --all-extras
239
+
240
+ GOOGLE_GENERATIVE_AI_API_KEY=<your-key> \
241
+ OPENCODE_PROVIDER_ID=google \
242
+ OPENCODE_MODEL_ID=gemini-3.1-pro-preview \
243
+ opencode serve
244
+
245
+ A2A_BEARER_TOKEN=dev-token \
246
+ OPENCODE_DIRECTORY=/abs/path/to/workspace \
247
+ uv run opencode-a2a-server
248
+ ```
249
+
172
250
  Baseline validation:
173
251
 
174
252
  ```bash
@@ -178,19 +256,32 @@ uv run pytest
178
256
 
179
257
  ## Documentation Map
180
258
 
259
+ ### User / Operator Docs
260
+
181
261
  - [docs/guide.md](docs/guide.md)
182
262
  Product behavior, API contracts, and detailed streaming/session/interrupt
183
263
  consumption guidance.
264
+ - [CONTRIBUTING.md](CONTRIBUTING.md)
265
+ Contributor workflow, validation baseline, and documentation expectations.
184
266
  - [docs/agent_deploy_sop.md](docs/agent_deploy_sop.md)
185
- Operator-facing SOP for choosing, starting, verifying, and releasing
186
- `deploy.sh` vs `deploy_light.sh`.
267
+ Operator-facing SOP for release-based deployment, verification, and uninstall.
268
+ - [docs/release_deploy_smoke_test.md](docs/release_deploy_smoke_test.md)
269
+ Real-host smoke test checklist for release-based systemd deployment.
270
+ - [scripts/deploy_release_readme.md](scripts/deploy_release_readme.md)
271
+ Release-based systemd deployment guide for published package versions.
272
+ - [scripts/init_release_system_readme.md](scripts/init_release_system_readme.md)
273
+ Release-based host bootstrap guide that avoids source checkout.
274
+ - [scripts/uninstall_readme.md](scripts/uninstall_readme.md)
275
+ Preview-first uninstall flow for deployed instances.
187
276
  - [scripts/README.md](scripts/README.md)
188
- Entry points for init, deploy, lightweight deploy, local start, and
189
- uninstall scripts.
277
+ Full script index, including contributor/internal paths.
278
+
279
+ ### Contributor / Internal Docs
280
+
190
281
  - [scripts/deploy_readme.md](scripts/deploy_readme.md)
191
- systemd deployment, runtime secret strategy, and operations guidance.
192
- - [scripts/deploy_light_readme.md](scripts/deploy_light_readme.md)
193
- current-user lightweight deployment without systemd.
282
+ Source-based systemd deployment for development/debugging only.
283
+ - [scripts/init_system_readme.md](scripts/init_system_readme.md)
284
+ Source-based host bootstrap for contributor/internal workflows.
194
285
  - [SECURITY.md](SECURITY.md)
195
286
  threat model, deployment caveats, and vulnerability disclosure guidance.
196
287
 
@@ -14,7 +14,7 @@ need a stable service layer around it. This repository provides that layer by:
14
14
 
15
15
  - bridging A2A transport contracts to OpenCode session/message/event APIs
16
16
  - making session and interrupt behavior explicit and auditable
17
- - packaging deployment scripts and operational guidance for long-running use
17
+ - packaging release-first deployment scripts and operational guidance for long-running use
18
18
 
19
19
  ## What It Already Provides
20
20
 
@@ -26,7 +26,7 @@ need a stable service layer around it. This repository provides that layer by:
26
26
  - session continuation via `metadata.shared.session.id`
27
27
  - request-scoped model selection via `metadata.shared.model`
28
28
  - OpenCode session query/control extensions and provider/model discovery
29
- - systemd multi-instance deployment and lightweight current-user deployment
29
+ - released CLI install/upgrade flow and release-based systemd deployment
30
30
 
31
31
  ## Extension Capability Overview
32
32
 
@@ -50,6 +50,8 @@ Detailed consumption guidance:
50
50
  - Shared stream hints: [`docs/guide.md#shared-stream-hints-contract`](docs/guide.md#shared-stream-hints-contract)
51
51
  - OpenCode session query and provider discovery: [`docs/guide.md#opencode-session-query--provider-discovery-a2a-extensions`](docs/guide.md#opencode-session-query--provider-discovery-a2a-extensions)
52
52
  - Shared interrupt callback: [`docs/guide.md#shared-interrupt-callback-a2a-extension`](docs/guide.md#shared-interrupt-callback-a2a-extension)
53
+ - Compatibility profile and retention guidance:
54
+ [`docs/guide.md#compatibility-profile`](docs/guide.md#compatibility-profile)
53
55
 
54
56
  ## Design Principle
55
57
 
@@ -75,7 +77,7 @@ flowchart TD
75
77
  Mapping --> Runtime["OpenCode HTTP runtime"]
76
78
 
77
79
  Api --> Auth["Bearer auth + request logging controls"]
78
- Api --> Deploy["systemd and lightweight deployment scripts"]
80
+ Api --> Deploy["release-based deployment tooling"]
79
81
  Runtime --> Workspace["Shared workspace / environment boundary"]
80
82
  ```
81
83
 
@@ -107,30 +109,106 @@ hard multi-tenant isolation layer.
107
109
  Read before deployment:
108
110
 
109
111
  - [SECURITY.md](SECURITY.md)
110
- - [scripts/deploy_readme.md](scripts/deploy_readme.md)
112
+ - [scripts/deploy_release_readme.md](scripts/deploy_release_readme.md)
113
+
114
+ ## User Paths
115
+
116
+ Released versions are published to PyPI and mapped to Git tags / GitHub
117
+ Releases. This is the recommended entry point for users.
111
118
 
112
- ## Quick Start & Development
119
+ ### Path 1: Run a Released CLI in an Existing User Environment
113
120
 
114
- 1. Start OpenCode:
121
+ Install the latest release:
115
122
 
116
123
  ```bash
117
- opencode serve
124
+ uv tool install opencode-a2a-server
118
125
  ```
119
126
 
120
- 2. Install dependencies:
127
+ Upgrade an existing installation:
121
128
 
122
129
  ```bash
123
- uv sync --all-extras
130
+ uv tool upgrade opencode-a2a-server
124
131
  ```
125
132
 
126
- 3. Start this service:
133
+ Install an exact release:
127
134
 
128
135
  ```bash
129
- A2A_BEARER_TOKEN=dev-token uv run opencode-a2a-server
136
+ uv tool install "opencode-a2a-server==<version>"
137
+ ```
138
+
139
+ Run it against an existing project/workspace:
140
+
141
+ ```bash
142
+ GOOGLE_GENERATIVE_AI_API_KEY=<your-key> \
143
+ OPENCODE_PROVIDER_ID=google \
144
+ OPENCODE_MODEL_ID=gemini-3.1-pro-preview \
145
+ opencode serve
146
+
147
+ A2A_BEARER_TOKEN=prod-token \
148
+ A2A_PUBLIC_URL=http://127.0.0.1:8000 \
149
+ OPENCODE_DIRECTORY=/abs/path/to/workspace \
150
+ opencode-a2a-server
130
151
  ```
131
152
 
132
153
  Default address: `http://127.0.0.1:8000`
133
154
 
155
+ If you omit `OPENCODE_PROVIDER_ID` / `OPENCODE_MODEL_ID`, `opencode serve`
156
+ uses your local OpenCode defaults (for example `~/.config/opencode/opencode.json`).
157
+
158
+ For provider-specific auth, model IDs, and config details, use the OpenCode
159
+ official docs and CLI:
160
+
161
+ - Providers: <https://opencode.ai/docs/providers/>
162
+ - Models: <https://opencode.ai/docs/models/>
163
+ - Local checks: `opencode auth list`, `opencode models`, `opencode models <provider>`
164
+
165
+ This path is for users who already manage their own shell, workspace, and
166
+ process lifecycle. No host bootstrap script is required.
167
+
168
+ ### Path 2: Formal systemd Deploy From a Released Version
169
+
170
+ For long-running systemd deployments, use the release-based scripts:
171
+
172
+ ```bash
173
+ ./scripts/init_release_system.sh
174
+ ./scripts/deploy_release.sh project=alpha a2a_port=8010 a2a_host=127.0.0.1
175
+ ```
176
+
177
+ This path is for users who want:
178
+
179
+ - isolated Linux users and per-project directories
180
+ - systemd-managed restart behavior
181
+ - root-only secret files
182
+ - published package versions as the deployment boundary
183
+
184
+ Primary operator docs:
185
+
186
+ - [scripts/init_release_system.sh](scripts/init_release_system.sh)
187
+ - [scripts/deploy_release.sh](scripts/deploy_release.sh)
188
+ - [scripts/deploy_release_readme.md](scripts/deploy_release_readme.md)
189
+ - [docs/release_deploy_smoke_test.md](docs/release_deploy_smoke_test.md)
190
+
191
+ ## Contributor Paths
192
+
193
+ Use the repository checkout directly only for development, local debugging, or
194
+ validation against unreleased changes. Source-based deploy/bootstrap docs are
195
+ kept for contributors and internal debugging, not as the recommended user path.
196
+
197
+ Quick source run:
198
+
199
+ ```bash
200
+ uv sync --all-extras
201
+
202
+ GOOGLE_GENERATIVE_AI_API_KEY=<your-key> \
203
+ OPENCODE_PROVIDER_ID=google \
204
+ OPENCODE_MODEL_ID=gemini-3.1-pro-preview \
205
+ opencode serve
206
+
207
+ A2A_BEARER_TOKEN=dev-token \
208
+ OPENCODE_DIRECTORY=/abs/path/to/workspace \
209
+ uv run opencode-a2a-server
210
+ ```
211
+
134
212
  Baseline validation:
135
213
 
136
214
  ```bash
@@ -140,19 +218,32 @@ uv run pytest
140
218
 
141
219
  ## Documentation Map
142
220
 
221
+ ### User / Operator Docs
222
+
143
223
  - [docs/guide.md](docs/guide.md)
144
224
  Product behavior, API contracts, and detailed streaming/session/interrupt
145
225
  consumption guidance.
226
+ - [CONTRIBUTING.md](CONTRIBUTING.md)
227
+ Contributor workflow, validation baseline, and documentation expectations.
146
228
  - [docs/agent_deploy_sop.md](docs/agent_deploy_sop.md)
147
- Operator-facing SOP for choosing, starting, verifying, and releasing
148
- `deploy.sh` vs `deploy_light.sh`.
229
+ Operator-facing SOP for release-based deployment, verification, and uninstall.
230
+ - [docs/release_deploy_smoke_test.md](docs/release_deploy_smoke_test.md)
231
+ Real-host smoke test checklist for release-based systemd deployment.
232
+ - [scripts/deploy_release_readme.md](scripts/deploy_release_readme.md)
233
+ Release-based systemd deployment guide for published package versions.
234
+ - [scripts/init_release_system_readme.md](scripts/init_release_system_readme.md)
235
+ Release-based host bootstrap guide that avoids source checkout.
236
+ - [scripts/uninstall_readme.md](scripts/uninstall_readme.md)
237
+ Preview-first uninstall flow for deployed instances.
149
238
  - [scripts/README.md](scripts/README.md)
150
- Entry points for init, deploy, lightweight deploy, local start, and
151
- uninstall scripts.
239
+ Full script index, including contributor/internal paths.
240
+
241
+ ### Contributor / Internal Docs
242
+
152
243
  - [scripts/deploy_readme.md](scripts/deploy_readme.md)
153
- systemd deployment, runtime secret strategy, and operations guidance.
154
- - [scripts/deploy_light_readme.md](scripts/deploy_light_readme.md)
155
- current-user lightweight deployment without systemd.
244
+ Source-based systemd deployment for development/debugging only.
245
+ - [scripts/init_system_readme.md](scripts/init_system_readme.md)
246
+ Source-based host bootstrap for contributor/internal workflows.
156
247
  - [SECURITY.md](SECURITY.md)
157
248
  threat model, deployment caveats, and vulnerability disclosure guidance.
158
249