deployment.md
Book Agent 0.1.0 · 本版随附原文,按章节提供导览;完整原文可在文末展开。文内本机路径属于示例,请替换为你的实际路径。
本版本其他文档与许可
- 用户完整使用手册.md
- 网站发布交接说明.md
- 一句话安装提示词.md
- 安装Agent操作指南.md
- README-交付说明.md
- README.md
- dependency-licenses.json
- acceptance.md
- architecture.md
- build.md
- codex-diagnostics.md
- contracts.md
- deployment.md
- evaluation.md
- example-package-inspection.md
- hosts.md
- mcp.md
- package-format.md
- portability.md
- query-runtime.md
- rerankers.md
- retrieval.md
- security.md
- source-resolution.md
- sqlite-adapters.md
- troubleshooting.md
- visual-fallback.md
- windows-binary-validation.md
- offline-dependency-licenses.json
- 289bfef3a422b5d7-LICENSE
- 320fb46da982dd20-LICENSE
- 0d26a74c4cd409f1-LICENSE
- 29f0a9349a98f786-LICENSE.txt
- 8fe2fae6851b8b02-LICENSE_zstd.txt
- 5927d884110638aa-LICENSE
- c1aedbaa6db194c8-LICENSE
- 2e2d841f3829cb8c-LICENSE
- 37deb54162951132-LICENSE
- 1c294ee0ed0fe5a4-LICENSE.txt
- 9cbd6b2bcad1331c-LICENSE.txt
- 22cdd958c280cb3f-LICENSE.APACHE
- 33a7c36a4f64f214-LICENSE.BSD
- 8e9b59db150b8b29-LICENSE
- 9d2d6534b255a725-LICENSE
- 44ac41031103bcac-LICENSE
- 39d084ff20ffc40e-LICENSE.txt
- b6618d8dc766ea7c-LICENSE.md
- 696bca653f07d94f-LICENSE
- 1a79882f84c42428-LICENSE.md
- 404602f585d7ece7-LICENSE
- d91c8e1dcc4f21a2-LICENSE.md
- b0ec1e6164c921a7-LICENSE.txt
- 2102cfff7eb71b8c-LICENSE.txt
- 60b346c789b9f38f-LICENSE
- 21b64ce33aa4532a-LICENSE
- 37bbe72ee1bbafbd-LICENSE
- 3a70ad943ce55a72-LICENSE.txt
- 0f4ffb2948b11d2f-LICENSE.txt
- 0f552da71ad28735-LICENSE.txt
- 14c3180f75c13432-LICENSE.txt
- 237d5ce190d18ec8-LICENSE.md
- 33f4c2195fc42df4-LICENSE.md
- 34e0a82278464f7a-LICENSE.md
- 606163a509c60e74-LICENSE.txt
- 68188ef77bc0f51d-LICENSE.md
- 7d261385d7c11247-LICENSE.md
- 892e6e9281e05f9e-LICENSE.md
- a62d8b7410f97d10-LICENSE
- aefd64774c70ee6f-LICENSE
- ba28e7ff75ea728b-dragon4_LICENSE.txt
- c21c93791addfba9-LICENSE.md
- c38cab56d01cd957-LICENSE
- caa67dbe4c1ea31d-LICENSE.md
- ddfcf34665e22241-LICENSE
- f384fe378597d8ee-LICENSE.md
- fa40db527ec8a4f8-LICENSE.md
- 11c854e2fea5c3c3-LICENSE
- e9a5bac8b5a01882-LICENSE.APACHE
- ef96a0844cda24cd-LICENSE.BSD
- 60b8570677f4c852-LICENSE
- b750eeade19bb396-LICENSE
- 7d70cfb623ece0f5-LICENSE
- c6dc91d12372ba7d-LICENSE
- 4d610a0401713428-LICENSE
- b4cf246d7037e3e5-LICENSE
- 6ba7e4be3a3e5e98-LICENSE.rst
- bd6c3caec9dc0b2c-LICENSE
- 404f172525c78526-LICENSE
- ea58743ddd8149fe-LICENSE
- d94ac33ee6c5b99c-LICENSE
- 06fc5f72f75ece40-LICENSE
- 6ee341f79804040b-LICENSE
- ca8b44050606bf3f-LICENSE.txt
- 0eb90f9858c86a9d-MAPIStubLibrary-License.txt
- 0f36ec7ac95c3104-Scintilla-License.txt
- 1445ad867b84e928-LICENSE.txt
- 1b588beb4a04f4c3-LICENSE
- 3c06ee52d5d89b25-License.txt
- 6300165282b47172-License.txt
- 6eec8b7b9c778ef7-License.txt
- 6fbb090f28b7d9d7-NOTICE.md
- 7f00f05027a6f1b3-license.txt
- 881f648ef42a607c-License.txt
- ae73a46638a88910-License.txt
- c2a4985aa4145fc3-License.txt
- cf5cae3ab668ac79-License.txt
- d04b9dead3df9f2b-License.txt
- dc8527163d427906-LICENSE.txt
- ff463f305e7e68dc-license.txt
- 1f5c94674bb026f1-LICENSE
- 0fb05a2e9284070c-LICENSE.txt
- bd7b91afd66e7fa0-NOTICE
- fb0b720c70d8ce6a-LICENSE
- fcd0c1933c03449f-LICENSE
- 07c67dcb9a0a1264-LICENSE
- 0e45092c306c1829-LICENSE
- 123439bfbc433e83-LICENSE.APACHE
- 1ab641e9121b81f5-LICENSE
- 4094fd3590b59adb-NOTICE
- 4a7fd6a9c689e423-LICENSE
- 4d09286af1bf926b-LICENSE
- 63a92caf8157263d-LICENSE
- 6562dd76db576ab9-LICENSE
- 8b28658c9e8179cb-LICENSE.txt
- 9fe05a3195b3cc3f-LICENSE
- aeab75b4c2775e84-LICENSE
- b8b1f5f03784d7a5-LICENSE
- c2780f51d1429c4b-LICENSE
- c80865de46db705d-LICENSE.BSD
- c9e41e71fb671b2e-LICENSE
- d6b8bc4557547f24-LICENSE
- e972ee51f8cb405e-NOTICE
- e453abd81b5ad12e-LICENSE
- 717f721f1be51398-LICENSE.md
- 767eeaf795dbfce8-LICENSE
- 94e2a313c2183fa6-LICENSE.txt
- 3391f6db464bf907-LICENSE
- c4388b01504343b0-LICENSE
- 000af5e58f31978d-LICENSE.txt
- 012d34b072b31cdb-LICENSE
- 020fa8056b9cc414-LICENSE
- 057ffcbbade9301e-LICENSE
- 096eee7c37050ec5-LICENSE
- 0b14d5ccfc8ae3b6-LICENSE
- 0d84796ed41f21b5-LICENSE.txt
- 0f51b035ee2b205e-LICENSE.txt
- 15ac02d83e9f5cf0-LICENSE
- 1987b9857feb2977-LICENSE
- 1ab5abcd87c44e46-LICENSE.rst
- 1b491a95f1ea6812-LICENSE
- 1bddb28b536554a8-LICENSE
- 1e0dae2d67a75d8f-LICENSE
- 1f00093269c431aa-LICENSE
- 1f88918564d6b190-LICENSE.txt
- 23170591db6c2e35-LICENSE
- 24e7a39da250d246-LICENSE
- 25356621a82f4798-LICENSE
- 2b6931cc6558558d-LICENSE
- 2e20b75d944dfc10-LICENSE.rst
- 3148042f9d6dc44b-LICENSE
- 34440ff12dbdee0b-LICENSE
- 38d7390db6751b95-LICENSE
- 394f72aa9820b35e-LICENSE
- 3a1efc907aa90e6e-LICENSE.txt
- 3f471b7b9a34654b-LICENSE
- 3f59a46ca08f425d-LICENSE
- 41a82292d67b1815-LICENSE
- 43e0660fee92e3d9-LICENSE
- 4418818ca0528087-LICENSE
- 44bd708d348a7f79-LICENSE.txt
- 45a5f164a90b025e-LICENSE
- 4679f7f6ca539098-LICENSE
- 46bcf873674918a0-LICENSE
- 4cb2f76b15650e2b-LICENSE.txt
- 4ce67a1d3f22f06e-LICENSE
- 4d4c272c2aaf7d4c-LICENSE.txt
- 4f73bb9c13a8cf6a-LICENSE
- 50d2c50ab17033d4-LICENSE
- 568ef02dec145f8f-LICENSE.APACHE
- 5d0844276d7620c3-LICENSE
- 5d3ee7cad434b050-LICENSE
- 63c9efa00504c8e7-LICENSE.BSD
- 658c67bb72402f54-LICENSE
- 65feb792d908bb47-LICENSE
- 6ab6f3ebe36250fc-LICENSE
- 6f3ff74d1e961003-LICENSE
- 70c92009f569c7ff-LICENSE
- 71e8135b761ff506-LICENSE
- 720a043a5f63b8e2-LICENSE
- 732e9d1d0dc3a9f3-LICENSE.rst
- 76fa1ec680b6563a-LICENSE
- 778654dd362ccfc1-LICENSE
- 7bad43a1c663d2d3-LICENSE
- 7e5ab77aaefbcbfe-LICENSE
- 81f9de42fb4cff6d-LICENSE.rst
- 83a0b2cad3631647-LICENSE
- 83d9a4cd337039d3-LICENSE
- 878c0ed7cc080bee-LICENSE.txt
- 8e3c8657c4d54274-LICENSE
- 923573b2290edd3f-LICENSE.txt
- 932fff1dd3afca18-LICENSE.rst
- 93b14a999e446b81-LICENSE
- 93ef29e6e98ebe1c-LICENSE
- 95a8821c42dd5a93-LICENSE
- 9611af4ef03999e9-LICENSE.txt
- 9690869ec82dc7ff-LICENSE
- 98445537094b5eca-LICENSE.txt
- 9bcc07396f3695fd-LICENSE.txt
- 9d236d10d50376fa-LICENSE
- a3af08ceb14d4e70-LICENSE.rst
- a42e3616102ec1a4-LICENSE
- a68145b6a6945de2-LICENSE
- ac000064f187d287-LICENSE
- b14490d244e39dd6-LICENSE.txt
- b152e206fedb11c6-LICENSE
- b5cccfdd56d29de3-LICENSE
- bb4c4e06309173d1-LICENSE.txt
- c18a22744d03cae4-LICENSE.rst
- c59a7e2bf6163ddd-LICENSE
- c643fc658eb3d4f4-LICENSE
- ce8e5d64c3015701-LICENSE
- d382d51b74d1dde7-LICENSE
- d414936ad243b5dd-LICENSE.txt
- d431c50ef2b89f09-LICENSE
- d86156e7d7554a5f-LICENSE
- e04596b38de5343a-LICENSE
- e1fd63729d99cd47-LICENSE
- e3aa5bda22dc7a7a-LICENSE
- e3f5bf83e6fd8b70-LICENSE
- e7f7eb90618838ff-LICENSE
- e845cee760dabf6e-LICENSE
- ea19c7c3e4500582-LICENSE
- f063c5a9ee927ae6-LICENSE
- f589495d9a662be4-LICENSE.txt
- f7f25c636a548517-LICENSE.rst
- f861d3e2e007d200-LICENSE.txt
- fa17b838b2594837-LICENSE.txt
- 14a65df99717c958-LICENSE
- 2231b6c46c068b83-LICENSE
- 215ebb8580f197a8-LICENSE
- 3677f050c9618f5d-LICENSE.txt
- b645068efededc15-LICENSE.md
- MODEL-LICENSE.md
- README.md
- UPSTREAM-LICENSE.txt
# Deployment and offline bootstrap The reusable Skill is `skills/book-assistant/`. Its frontmatter and `agents/openai.yaml` follow the skill-creator workflow; it is compact and routes deployment, package/query rules, public host interfaces, and visual evidence to references. Runtime **0.1.0** is distributed from this project's reviewed `book-agent/` source. Its Python distribution is `prebuilt-book-agent`; its CLI is `book-agent`. Build output must include a release manifest with version, source location/hash, artifact hashes, and license inventory. The delivered runtime must not contain the example corpus, API keys or unapproved model weights. Optional approved weights ship separately with a file-hash receipt and license inventory. Installing the Skill alone cannot supply a missing runtime.
Verified local artifacts
`skills/book-assistant/scripts/bootstrap.py` accepts only local approved wheel artifacts. It is a standard-library program, so it works before Book Agent's dependencies are installed. Its release manifest format is:
```json
{
"version": "0.1.0",
"source": {"path": "book-agent-reviewed-source.zip", "sha256": "<actual source archive hash>"},
"artifacts": [
{"path": "prebuilt_book_agent-0.1.0-py3-none-any.whl", "sha256": "<actual wheel hash>"},
{"path": "dependency.whl", "sha256": "<actual approved dependency hash>"}
],
"licenses": [{"component": "book-agent", "license": "<declared project license>"}]
}
```
These hashes are generated from actual build artifacts. Obtain the expected **manifest hash** through a trusted delivery channel; the bootstrap does not invent a publisher identity from package checksums. It verifies that hash, the actual local source archive, every approved wheel and wheel metadata, and pins Book Agent's reviewed version. Relative source/wheel paths must remain within the release directory. Wheels are copied into a temporary wheelhouse containing only approved artifacts.
The bootstrap installs with pip's isolated mode, `--no-index`, `--require-hashes`, and that approved wheelhouse. It does not run a remote installation script or silently fetch omitted dependencies. A dependency-complete offline wheelhouse is needed for a clean machine. A missing wheel produces an installation error. Select a new virtual-environment directory, or a prior bootstrap-owned environment; unrelated existing environments are refused.
```powershell
python .\skills\book-assistant\scripts\bootstrap.py --manifest ".\Delivery\release-manifest.json" --manifest-sha256 "<trusted manifest SHA-256>" --venv ".\BookAgentRuntime\venv"
python .\skills\book-assistant\scripts\bootstrap.py --manifest ".\Delivery\release-manifest.json" --manifest-sha256 "<trusted manifest SHA-256>" --venv ".\BookAgentRuntime\venv" --install
& ".\BookAgentRuntime\venv\Scripts\book-agent.exe" --version
```
Without `--install` it prints a validated plan and creates no environment. Successful installation records `.book-agent-bootstrap.json` with artifact provenance and reports the installed distribution version. Installation failure does not imply successful runtime verification.
The bootstrap excludes `offline-wheelhouse/` by default, preserving the lightweight route. Add `--with-local-query` to both planning and installation when offline vectors are wanted; it includes the optional CPU wheels and the application's `local-query` extra. It does not activate vectors or install/copy weights.
This source workflow is compatible with Python on Windows/macOS/Linux. Platform executables are separate build artifacts: claim an executable platform only after that platform's build and checks. Offline bootstrap does not establish that an existing book query encoder, reranker, or the harness's language model operates offline. Those dependencies require their own inspection.
Import, check and deploy
```powershell book-agent init "E:\Books\示例书" --reranker none --json book-agent configure "<registered-book-id>" --vector-search none --json book-agent doctor "<registered-book-id>" --json book-agent install-host "<registered-book-id>" --host codex --dry-run --json book-agent install-host "<registered-book-id>" --host codex --json ``` The default workflow uses existing book text for lightweight lexical/FTS retrieval, original Skill navigation and PDF/EPUB source/image tools. It requires no query-model weights or API key. State, sidecars and deployment artifacts are stored in the configured BookAgentData directory. The original archive/database/Skill is preserved. See [host integration](hosts.md) for configured targets, ownership, backups and manual import steps.
Optional vector queries
| Route | Configuration | Requirements | | --- | --- | --- | | Lightweight default | `--vector-search none` | Existing book package; no model download or query key | | Offline vectors | `--vector-search offline` | Original compatible local checkpoint and optional Python `local-query` dependencies | | Online vectors | `--vector-search online` | Inherited reviewed endpoint, explicit authorization and the user's own credential reference | Register the book with `init`, then select a route with `configure`; registration defaults to `none`. Existing document vectors are reused for either vector route. Query encoders must satisfy the original index's model/revision, normalization, prefix and metric contract; no new document model is selected and no document embeddings are regenerated. When a query model or service is unavailable, diagnostics retain the limitation and permitted lexical fallback remains labeled. The standard portable onedir binary includes lightweight retrieval and HTTP query support. Local neural query execution is optional through the Python runtime with `local-query` dependencies. The default runtime does not require the large local query framework or its model weights. The main agent model is separate from retrieval and may still be remote. The separate Windows CPython 3.13 offline wheelhouse can be installed with the delivered `install-offline.py` helper alongside the release manifest (its source location is `packaging/install-offline.py` in the source archive). Use its local artifact/receipt checks and documented options; neither offline query execution nor that local installation needs an API key. This wheelhouse has a platform/Python version scope and does not establish Linux/macOS binary support. The delivered offline BGE-M3 weight directory uses the original `BAAI/bge-m3` checkpoint. Its portable SHA-256 receipt verifies the files after copying. Keep one weight directory for all books sharing that compatible index contract, then validate it and bind the actual destination path for each book: ```powershell book-agent install-query-model "<book-id>" --model-dir "<weights-directory>" --json book-agent configure "<book-id>" --vector-search offline --query-model-path "<weights-directory>" --json ``` `install-query-model` does not download by default or set the book's query path; `configure --query-model-path` binds that path. A separate `--download` request fetches only the inherited original checkpoint into the chosen model directory; it is optional and never a model-selection wizard. A supplied weight directory avoids repeated downloads. Include approved optional dependency wheels when preparing a fully offline Python installation, and review delivered model/dependency licenses before redistribution. The audited package's SiliconFlow route is optional and uses the user's own account. Select it only when online vectors are wanted; the lightweight route and supplied local weights do not require that service. No remote endpoint is authorized merely because a manifest names it. If the original query encoder sends questions remotely, disclose that transfer. If the user enables a remote reranker, disclose that it may receive both question and candidate book text. Tool evidence and images may also be passed to the host's remote main model. Keep credential values out of deployment configs and diagnostics. After applying a host configuration, perform MCP initialization and tool checks independently. Then ask the actual agent an evidence question. If a visual answer is required, inspect actual delivered pixels or explicitly record that interpretation has not been verified. Artifact generation and host config checks are not agent acceptance.
查看完整原文(逐字保留)
# Deployment and offline bootstrap
The reusable Skill is `skills/book-assistant/`. Its frontmatter and `agents/openai.yaml` follow the skill-creator workflow; it is compact and routes deployment, package/query rules, public host interfaces, and visual evidence to references.
Runtime **0.1.0** is distributed from this project's reviewed `book-agent/` source. Its Python distribution is `prebuilt-book-agent`; its CLI is `book-agent`. Build output must include a release manifest with version, source location/hash, artifact hashes, and license inventory. The delivered runtime must not contain the example corpus, API keys or unapproved model weights. Optional approved weights ship separately with a file-hash receipt and license inventory. Installing the Skill alone cannot supply a missing runtime.
## Verified local artifacts
`skills/book-assistant/scripts/bootstrap.py` accepts only local approved wheel artifacts. It is a standard-library program, so it works before Book Agent's dependencies are installed. Its release manifest format is:
```json
{
"version": "0.1.0",
"source": {"path": "book-agent-reviewed-source.zip", "sha256": "<actual source archive hash>"},
"artifacts": [
{"path": "prebuilt_book_agent-0.1.0-py3-none-any.whl", "sha256": "<actual wheel hash>"},
{"path": "dependency.whl", "sha256": "<actual approved dependency hash>"}
],
"licenses": [{"component": "book-agent", "license": "<declared project license>"}]
}
```
These hashes are generated from actual build artifacts. Obtain the expected **manifest hash** through a trusted delivery channel; the bootstrap does not invent a publisher identity from package checksums. It verifies that hash, the actual local source archive, every approved wheel and wheel metadata, and pins Book Agent's reviewed version. Relative source/wheel paths must remain within the release directory. Wheels are copied into a temporary wheelhouse containing only approved artifacts.
The bootstrap installs with pip's isolated mode, `--no-index`, `--require-hashes`, and that approved wheelhouse. It does not run a remote installation script or silently fetch omitted dependencies. A dependency-complete offline wheelhouse is needed for a clean machine. A missing wheel produces an installation error. Select a new virtual-environment directory, or a prior bootstrap-owned environment; unrelated existing environments are refused.
```powershell
python .\skills\book-assistant\scripts\bootstrap.py --manifest ".\Delivery\release-manifest.json" --manifest-sha256 "<trusted manifest SHA-256>" --venv ".\BookAgentRuntime\venv"
python .\skills\book-assistant\scripts\bootstrap.py --manifest ".\Delivery\release-manifest.json" --manifest-sha256 "<trusted manifest SHA-256>" --venv ".\BookAgentRuntime\venv" --install
& ".\BookAgentRuntime\venv\Scripts\book-agent.exe" --version
```
Without `--install` it prints a validated plan and creates no environment. Successful installation records `.book-agent-bootstrap.json` with artifact provenance and reports the installed distribution version. Installation failure does not imply successful runtime verification.
The bootstrap excludes `offline-wheelhouse/` by default, preserving the lightweight route. Add `--with-local-query` to both planning and installation when offline vectors are wanted; it includes the optional CPU wheels and the application's `local-query` extra. It does not activate vectors or install/copy weights.
This source workflow is compatible with Python on Windows/macOS/Linux. Platform executables are separate build artifacts: claim an executable platform only after that platform's build and checks. Offline bootstrap does not establish that an existing book query encoder, reranker, or the harness's language model operates offline. Those dependencies require their own inspection.
## Import, check and deploy
```powershell
book-agent init "E:\Books\示例书" --reranker none --json
book-agent configure "<registered-book-id>" --vector-search none --json
book-agent doctor "<registered-book-id>" --json
book-agent install-host "<registered-book-id>" --host codex --dry-run --json
book-agent install-host "<registered-book-id>" --host codex --json
```
The default workflow uses existing book text for lightweight lexical/FTS retrieval, original Skill navigation and PDF/EPUB source/image tools. It requires no query-model weights or API key. State, sidecars and deployment artifacts are stored in the configured BookAgentData directory. The original archive/database/Skill is preserved. See [host integration](hosts.md) for configured targets, ownership, backups and manual import steps.
## Optional vector queries
| Route | Configuration | Requirements |
| --- | --- | --- |
| Lightweight default | `--vector-search none` | Existing book package; no model download or query key |
| Offline vectors | `--vector-search offline` | Original compatible local checkpoint and optional Python `local-query` dependencies |
| Online vectors | `--vector-search online` | Inherited reviewed endpoint, explicit authorization and the user's own credential reference |
Register the book with `init`, then select a route with `configure`; registration defaults to `none`. Existing document vectors are reused for either vector route. Query encoders must satisfy the original index's model/revision, normalization, prefix and metric contract; no new document model is selected and no document embeddings are regenerated. When a query model or service is unavailable, diagnostics retain the limitation and permitted lexical fallback remains labeled.
The standard portable onedir binary includes lightweight retrieval and HTTP query support. Local neural query execution is optional through the Python runtime with `local-query` dependencies. The default runtime does not require the large local query framework or its model weights. The main agent model is separate from retrieval and may still be remote.
The separate Windows CPython 3.13 offline wheelhouse can be installed with the delivered `install-offline.py` helper alongside the release manifest (its source location is `packaging/install-offline.py` in the source archive). Use its local artifact/receipt checks and documented options; neither offline query execution nor that local installation needs an API key. This wheelhouse has a platform/Python version scope and does not establish Linux/macOS binary support.
The delivered offline BGE-M3 weight directory uses the original `BAAI/bge-m3` checkpoint. Its portable SHA-256 receipt verifies the files after copying. Keep one weight directory for all books sharing that compatible index contract, then validate it and bind the actual destination path for each book:
```powershell
book-agent install-query-model "<book-id>" --model-dir "<weights-directory>" --json
book-agent configure "<book-id>" --vector-search offline --query-model-path "<weights-directory>" --json
```
`install-query-model` does not download by default or set the book's query path; `configure --query-model-path` binds that path. A separate `--download` request fetches only the inherited original checkpoint into the chosen model directory; it is optional and never a model-selection wizard. A supplied weight directory avoids repeated downloads. Include approved optional dependency wheels when preparing a fully offline Python installation, and review delivered model/dependency licenses before redistribution.
The audited package's SiliconFlow route is optional and uses the user's own account. Select it only when online vectors are wanted; the lightweight route and supplied local weights do not require that service.
No remote endpoint is authorized merely because a manifest names it. If the original query encoder sends questions remotely, disclose that transfer. If the user enables a remote reranker, disclose that it may receive both question and candidate book text. Tool evidence and images may also be passed to the host's remote main model. Keep credential values out of deployment configs and diagnostics.
After applying a host configuration, perform MCP initialization and tool checks independently. Then ask the actual agent an evidence question. If a visual answer is required, inspect actual delivered pixels or explicitly record that interpretation has not been verified. Artifact generation and host config checks are not agent acceptance.
原文 SHA-256:42d27bafab7c5b1d0d6db06f87230cf449f985199e752b1fced0ba50f1ab8569