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.
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.gitignore +3 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.secrets.baseline +2 -2
- opencode_a2a_server-0.2.1/CONTRIBUTING.md +79 -0
- {opencode_a2a_server-0.1.0/src/opencode_a2a_server.egg-info → opencode_a2a_server-0.2.1}/PKG-INFO +111 -20
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/README.md +109 -18
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/docs/agent_deploy_sop.md +45 -123
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/docs/guide.md +141 -12
- opencode_a2a_server-0.2.1/docs/release_deploy_smoke_test.md +188 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/pyproject.toml +1 -1
- opencode_a2a_server-0.2.1/scripts/README.md +34 -0
- opencode_a2a_server-0.2.1/scripts/dependency_health.sh +13 -0
- opencode_a2a_server-0.2.1/scripts/deploy/enable_instance.sh +175 -0
- opencode_a2a_server-0.2.1/scripts/deploy/install_release_runtime.sh +52 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/install_units.sh +26 -4
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/provider_secret_env_keys.sh +23 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/run_opencode.sh +8 -5
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/setup_instance.sh +36 -9
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy.sh +60 -15
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy_readme.md +37 -15
- opencode_a2a_server-0.2.1/scripts/deploy_release.sh +8 -0
- opencode_a2a_server-0.2.1/scripts/deploy_release_readme.md +72 -0
- opencode_a2a_server-0.2.1/scripts/doctor.sh +13 -0
- opencode_a2a_server-0.2.1/scripts/health_common.sh +23 -0
- opencode_a2a_server-0.2.1/scripts/init_release_system.sh +15 -0
- opencode_a2a_server-0.2.1/scripts/init_release_system_readme.md +41 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/init_system.sh +133 -38
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/init_system_readme.md +16 -6
- opencode_a2a_server-0.2.1/scripts/shell_helpers.sh +34 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/uninstall.sh +13 -8
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/uninstall_readme.md +2 -2
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/agent.py +122 -20
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/app.py +203 -82
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/config.py +2 -25
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/extension_contracts.py +237 -21
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/jsonrpc_ext.py +57 -116
- opencode_a2a_server-0.2.1/src/opencode_a2a_server/jsonrpc_models.py +123 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/opencode_client.py +49 -16
- opencode_a2a_server-0.2.1/src/opencode_a2a_server/parts_mapper.py +151 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1/src/opencode_a2a_server.egg-info}/PKG-INFO +111 -20
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/SOURCES.txt +16 -4
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/requires.txt +1 -1
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/helpers.py +28 -4
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_agent_card.py +95 -16
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_agent_errors.py +43 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_cancel_contract.py +61 -0
- opencode_a2a_server-0.2.1/tests/test_deploy_security_contract.py +164 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_extension_contract_consistency.py +54 -4
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_init_system_security.py +25 -0
- opencode_a2a_server-0.2.1/tests/test_jsonrpc_models.py +57 -0
- opencode_a2a_server-0.2.1/tests/test_jsonrpc_unsupported_method.py +85 -0
- opencode_a2a_server-0.2.1/tests/test_metrics.py +201 -0
- opencode_a2a_server-0.2.1/tests/test_multipart_input.py +170 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_opencode_client_params.py +97 -1
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_opencode_session_extension.py +197 -2
- opencode_a2a_server-0.2.1/tests/test_script_health_contract.py +41 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_settings.py +0 -10
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_streaming_output_contract.py +120 -4
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_transport_contract.py +4 -2
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/uv.lock +7 -7
- opencode_a2a_server-0.1.0/scripts/README.md +0 -33
- opencode_a2a_server-0.1.0/scripts/dependency_health.sh +0 -22
- opencode_a2a_server-0.1.0/scripts/deploy/enable_instance.sh +0 -34
- opencode_a2a_server-0.1.0/scripts/deploy_light.sh +0 -452
- opencode_a2a_server-0.1.0/scripts/deploy_light_readme.md +0 -84
- opencode_a2a_server-0.1.0/scripts/doctor.sh +0 -22
- opencode_a2a_server-0.1.0/scripts/start_services.sh +0 -115
- opencode_a2a_server-0.1.0/scripts/start_services_readme.md +0 -41
- opencode_a2a_server-0.1.0/tests/test_deploy_security_contract.py +0 -79
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.github/workflows/ci.yml +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.github/workflows/dependency-health.yml +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.github/workflows/publish.yml +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/.pre-commit-config.yaml +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/AGENTS.md +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/LICENSE +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/SECURITY.md +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/run_a2a.sh +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/deploy/update_a2a.sh +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/init_system_uv_release_manifest.sh +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/lint.sh +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/scripts/smoke_test_built_cli.sh +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/setup.cfg +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/__init__.py +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server/text_parts.py +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/dependency_links.txt +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/entry_points.txt +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/src/opencode_a2a_server.egg-info/top_level.txt +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/__init__.py +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_call_context_builder.py +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_cancellation.py +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_directory_validation.py +0 -0
- {opencode_a2a_server-0.1.0 → opencode_a2a_server-0.2.1}/tests/test_opencode_agent_session_binding.py +0 -0
- {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":
|
|
136
|
+
"line_number": 25
|
|
137
137
|
}
|
|
138
138
|
]
|
|
139
139
|
},
|
|
140
|
-
"generated_at": "2026-03-
|
|
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.
|
{opencode_a2a_server-0.1.0/src/opencode_a2a_server.egg-info → opencode_a2a_server-0.2.1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencode-a2a-server
|
|
3
|
-
Version: 0.1
|
|
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.
|
|
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
|
-
-
|
|
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["
|
|
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/
|
|
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
|
-
|
|
157
|
+
### Path 1: Run a Released CLI in an Existing User Environment
|
|
151
158
|
|
|
152
|
-
|
|
159
|
+
Install the latest release:
|
|
153
160
|
|
|
154
161
|
```bash
|
|
155
|
-
opencode
|
|
162
|
+
uv tool install opencode-a2a-server
|
|
156
163
|
```
|
|
157
164
|
|
|
158
|
-
|
|
165
|
+
Upgrade an existing installation:
|
|
159
166
|
|
|
160
167
|
```bash
|
|
161
|
-
uv
|
|
168
|
+
uv tool upgrade opencode-a2a-server
|
|
162
169
|
```
|
|
163
170
|
|
|
164
|
-
|
|
171
|
+
Install an exact release:
|
|
165
172
|
|
|
166
173
|
```bash
|
|
167
|
-
|
|
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
|
|
186
|
-
|
|
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
|
-
|
|
189
|
-
|
|
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
|
|
192
|
-
- [scripts/
|
|
193
|
-
|
|
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
|
-
-
|
|
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["
|
|
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/
|
|
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
|
-
|
|
119
|
+
### Path 1: Run a Released CLI in an Existing User Environment
|
|
113
120
|
|
|
114
|
-
|
|
121
|
+
Install the latest release:
|
|
115
122
|
|
|
116
123
|
```bash
|
|
117
|
-
opencode
|
|
124
|
+
uv tool install opencode-a2a-server
|
|
118
125
|
```
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
Upgrade an existing installation:
|
|
121
128
|
|
|
122
129
|
```bash
|
|
123
|
-
uv
|
|
130
|
+
uv tool upgrade opencode-a2a-server
|
|
124
131
|
```
|
|
125
132
|
|
|
126
|
-
|
|
133
|
+
Install an exact release:
|
|
127
134
|
|
|
128
135
|
```bash
|
|
129
|
-
|
|
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
|
|
148
|
-
|
|
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
|
-
|
|
151
|
-
|
|
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
|
|
154
|
-
- [scripts/
|
|
155
|
-
|
|
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
|
|