dsh-plugin-dev-kb 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +56 -0
- package/cordis.patch.yml +12 -0
- package/kb/INDEX.md +210 -0
- package/kb/README.md +69 -0
- package/kb/extra/AGENTS.md +75 -0
- package/kb/extra/api-gateway.md +164 -0
- package/kb/extra/api-gateway.zh.md +164 -0
- package/kb/extra/cookbook/adding-a-vendored-package.md +59 -0
- package/kb/extra/cookbook/adding-a-vendored-package.zh.md +59 -0
- package/kb/extra/cookbook/maintaining-dsh-code-review.md +64 -0
- package/kb/extra/cookbook/maintaining-dsh-code-review.zh.md +64 -0
- package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
- package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
- package/kb/extra/defensive-patterns.md +33 -0
- package/kb/extra/defensive-patterns.zh.md +33 -0
- package/kb/extra/development.md +171 -0
- package/kb/extra/development.zh.md +171 -0
- package/kb/extra/event-producer-consumer.md +76 -0
- package/kb/extra/event-producer-consumer.zh.md +78 -0
- package/kb/extra/glossary.md +45 -0
- package/kb/extra/glossary.zh.md +45 -0
- package/kb/extra/graph-atlas.md +24 -0
- package/kb/extra/graph-atlas.zh.md +26 -0
- package/kb/extra/i18n/README.md +60 -0
- package/kb/extra/i18n/README.zh.md +60 -0
- package/kb/extra/i18n/style-samples.md +87 -0
- package/kb/extra/i18n/terminology.md +214 -0
- package/kb/extra/i18n/translation-prompt.md +263 -0
- package/kb/extra/i18n/translation-rules.md +69 -0
- package/kb/extra/i18n/translation-rules.zh.md +69 -0
- package/kb/extra/module-graph.md +1641 -0
- package/kb/extra/module-graph.zh.md +1643 -0
- package/kb/extra/postmortem/0001-acp-default-export-drops-inject.md +113 -0
- package/kb/extra/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
- package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
- package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
- package/kb/extra/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
- package/kb/extra/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
- package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
- package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
- package/kb/extra/postmortem/README.md +18 -0
- package/kb/extra/postmortem/README.zh.md +18 -0
- package/kb/extra/rescope.md +53 -0
- package/kb/extra/rescope.zh.md +53 -0
- package/kb/extra/subsystems/attachment.md +125 -0
- package/kb/extra/subsystems/attachment.zh.md +125 -0
- package/kb/extra/subsystems/extensions.md +364 -0
- package/kb/extra/subsystems/extensions.zh.md +364 -0
- package/kb/extra/subsystems/feedback.md +266 -0
- package/kb/extra/subsystems/feedback.zh.md +266 -0
- package/kb/extra/testing.md +49 -0
- package/kb/extra/testing.zh.md +49 -0
- package/kb/extra/web-styling.md +25 -0
- package/kb/extra/web-styling.zh.md +25 -0
- package/kb/meta/search-index.json +1328 -0
- package/kb/meta/site-pages.txt +168 -0
- package/kb/meta/source.json +13 -0
- package/kb/meta/topics.md +75 -0
- package/kb/site/develop/basic/config.md +108 -0
- package/kb/site/develop/basic/index.md +146 -0
- package/kb/site/develop/basic/publish.md +185 -0
- package/kb/site/develop/basic/tool.md +54 -0
- package/kb/site/develop/cordis-tutorial/01-first-plugin.md +95 -0
- package/kb/site/develop/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
- package/kb/site/develop/cordis-tutorial/03-services.md +98 -0
- package/kb/site/develop/cordis-tutorial/04-events.md +144 -0
- package/kb/site/develop/cordis-tutorial/05-config.md +84 -0
- package/kb/site/develop/cordis-tutorial/06-composition-and-hmr.md +113 -0
- package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +107 -0
- package/kb/site/develop/cordis-tutorial/index.md +62 -0
- package/kb/site/develop/framework/events.md +145 -0
- package/kb/site/develop/framework/index.md +139 -0
- package/kb/site/develop/framework/service.md +152 -0
- package/kb/site/develop/practice/index.md +157 -0
- package/kb/site/develop/practice/llm-adapter.md +190 -0
- package/kb/site/en/develop/basic/config.md +108 -0
- package/kb/site/en/develop/basic/index.md +146 -0
- package/kb/site/en/develop/basic/publish.md +185 -0
- package/kb/site/en/develop/basic/tool.md +54 -0
- package/kb/site/en/develop/cordis-tutorial/01-first-plugin.md +95 -0
- package/kb/site/en/develop/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
- package/kb/site/en/develop/cordis-tutorial/03-services.md +98 -0
- package/kb/site/en/develop/cordis-tutorial/04-events.md +144 -0
- package/kb/site/en/develop/cordis-tutorial/05-config.md +84 -0
- package/kb/site/en/develop/cordis-tutorial/06-composition-and-hmr.md +113 -0
- package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +107 -0
- package/kb/site/en/develop/cordis-tutorial/index.md +60 -0
- package/kb/site/en/develop/framework/events.md +145 -0
- package/kb/site/en/develop/framework/index.md +139 -0
- package/kb/site/en/develop/framework/service.md +150 -0
- package/kb/site/en/develop/practice/index.md +157 -0
- package/kb/site/en/develop/practice/llm-adapter.md +190 -0
- package/kb/site/en/guide/providers-custom-form.png +0 -0
- package/kb/site/en/guide/providers-models-page.png +0 -0
- package/kb/site/en/guide/providers.md +100 -0
- package/kb/site/en/guide/python-sdk.md +106 -0
- package/kb/site/en/guide/quickstart.md +32 -0
- package/kb/site/en/index.md +8 -0
- package/kb/site/en/reference/agent-lifecycle.md +86 -0
- package/kb/site/en/reference/capability-seams.md +475 -0
- package/kb/site/en/reference/config-catalog.md +3155 -0
- package/kb/site/en/reference/cookbook/adding-a-conversation-node.md +235 -0
- package/kb/site/en/reference/cookbook/adding-a-package.md +120 -0
- package/kb/site/en/reference/cookbook/adding-a-settings-card.md +102 -0
- package/kb/site/en/reference/cookbook/adding-a-tool.md +96 -0
- package/kb/site/en/reference/cookbook/adding-an-llm-adapter.md +45 -0
- package/kb/site/en/reference/cookbook/extension-cookbook.md +131 -0
- package/kb/site/en/reference/cordis-api/context.md +368 -0
- package/kb/site/en/reference/cordis-api/events.md +211 -0
- package/kb/site/en/reference/cordis-api/fiber.md +379 -0
- package/kb/site/en/reference/cordis-api/inherited.md +43 -0
- package/kb/site/en/reference/cordis-api/registry.md +156 -0
- package/kb/site/en/reference/cordis-api/service.md +106 -0
- package/kb/site/en/reference/cordis-primer.md +46 -0
- package/kb/site/en/reference/index.md +131 -0
- package/kb/site/en/reference/persistence-catalog.md +949 -0
- package/kb/site/en/reference/subsystems/approval.md +173 -0
- package/kb/site/en/reference/subsystems/client-modules.md +121 -0
- package/kb/site/en/reference/subsystems/code-runtime.md +194 -0
- package/kb/site/en/reference/subsystems/commands.md +190 -0
- package/kb/site/en/reference/subsystems/compaction.md +241 -0
- package/kb/site/en/reference/subsystems/core.md +1073 -0
- package/kb/site/en/reference/subsystems/credentials.md +136 -0
- package/kb/site/en/reference/subsystems/filesystem.md +498 -0
- package/kb/site/en/reference/subsystems/goal.md +280 -0
- package/kb/site/en/reference/subsystems/index.md +58 -0
- package/kb/site/en/reference/subsystems/invariants.md +91 -0
- package/kb/site/en/reference/subsystems/jobs.md +293 -0
- package/kb/site/en/reference/subsystems/llm-streaming.md +920 -0
- package/kb/site/en/reference/subsystems/lsp.md +205 -0
- package/kb/site/en/reference/subsystems/permission-presets.md +134 -0
- package/kb/site/en/reference/subsystems/persistence.md +388 -0
- package/kb/site/en/reference/subsystems/plan.md +90 -0
- package/kb/site/en/reference/subsystems/sandbox.md +221 -0
- package/kb/site/en/reference/subsystems/schedule.md +189 -0
- package/kb/site/en/reference/subsystems/scope.md +62 -0
- package/kb/site/en/reference/subsystems/session-projection.md +265 -0
- package/kb/site/en/reference/subsystems/session-query.md +498 -0
- package/kb/site/en/reference/subsystems/session-reference.md +111 -0
- package/kb/site/en/reference/subsystems/session-telemetry.md +197 -0
- package/kb/site/en/reference/subsystems/session-title.md +207 -0
- package/kb/site/en/reference/subsystems/session.md +852 -0
- package/kb/site/en/reference/subsystems/settings.md +313 -0
- package/kb/site/en/reference/subsystems/shell.md +306 -0
- package/kb/site/en/reference/subsystems/skills.md +334 -0
- package/kb/site/en/reference/subsystems/spill.md +120 -0
- package/kb/site/en/reference/subsystems/storage.md +232 -0
- package/kb/site/en/reference/subsystems/subagent.md +737 -0
- package/kb/site/en/reference/subsystems/subprocess.md +327 -0
- package/kb/site/en/reference/subsystems/system-prompt.md +210 -0
- package/kb/site/en/reference/subsystems/terminal.md +187 -0
- package/kb/site/en/reference/subsystems/token-meter.md +93 -0
- package/kb/site/en/reference/subsystems/tools.md +723 -0
- package/kb/site/en/reference/subsystems/typert.md +339 -0
- package/kb/site/en/reference/subsystems/user-questions.md +181 -0
- package/kb/site/en/reference/subsystems/web-server.md +111 -0
- package/kb/site/en/reference/subsystems/web.md +202 -0
- package/kb/site/en/reference/subsystems/workflow.md +281 -0
- package/kb/site/en/reference/subsystems/workspace.md +231 -0
- package/kb/site/en/reference/tool-catalog.md +1877 -0
- package/kb/site/en/reference/tool-execution-pipeline.md +66 -0
- package/kb/site/guide/providers-custom-form.zh.png +0 -0
- package/kb/site/guide/providers-models-page.zh.png +0 -0
- package/kb/site/guide/providers.md +100 -0
- package/kb/site/guide/python-sdk.md +106 -0
- package/kb/site/guide/quickstart.md +32 -0
- package/kb/site/index.md +8 -0
- package/kb/site/reference/agent-lifecycle.md +86 -0
- package/kb/site/reference/capability-seams.md +475 -0
- package/kb/site/reference/config-catalog.md +3154 -0
- package/kb/site/reference/cookbook/adding-a-conversation-node.md +235 -0
- package/kb/site/reference/cookbook/adding-a-package.md +120 -0
- package/kb/site/reference/cookbook/adding-a-settings-card.md +102 -0
- package/kb/site/reference/cookbook/adding-a-tool.md +98 -0
- package/kb/site/reference/cookbook/adding-an-llm-adapter.md +45 -0
- package/kb/site/reference/cookbook/extension-cookbook.md +133 -0
- package/kb/site/reference/cordis-api/context.md +368 -0
- package/kb/site/reference/cordis-api/events.md +211 -0
- package/kb/site/reference/cordis-api/fiber.md +379 -0
- package/kb/site/reference/cordis-api/inherited.md +43 -0
- package/kb/site/reference/cordis-api/registry.md +156 -0
- package/kb/site/reference/cordis-api/service.md +106 -0
- package/kb/site/reference/cordis-primer.md +52 -0
- package/kb/site/reference/index.md +135 -0
- package/kb/site/reference/persistence-catalog.md +949 -0
- package/kb/site/reference/subsystems/approval.md +173 -0
- package/kb/site/reference/subsystems/client-modules.md +121 -0
- package/kb/site/reference/subsystems/code-runtime.md +194 -0
- package/kb/site/reference/subsystems/commands.md +190 -0
- package/kb/site/reference/subsystems/compaction.md +241 -0
- package/kb/site/reference/subsystems/core.md +1081 -0
- package/kb/site/reference/subsystems/credentials.md +136 -0
- package/kb/site/reference/subsystems/filesystem.md +498 -0
- package/kb/site/reference/subsystems/goal.md +280 -0
- package/kb/site/reference/subsystems/index.md +58 -0
- package/kb/site/reference/subsystems/invariants.md +91 -0
- package/kb/site/reference/subsystems/jobs.md +293 -0
- package/kb/site/reference/subsystems/llm-streaming.md +926 -0
- package/kb/site/reference/subsystems/lsp.md +205 -0
- package/kb/site/reference/subsystems/permission-presets.md +134 -0
- package/kb/site/reference/subsystems/persistence.md +388 -0
- package/kb/site/reference/subsystems/plan.md +90 -0
- package/kb/site/reference/subsystems/sandbox.md +221 -0
- package/kb/site/reference/subsystems/schedule.md +189 -0
- package/kb/site/reference/subsystems/scope.md +62 -0
- package/kb/site/reference/subsystems/session-projection.md +265 -0
- package/kb/site/reference/subsystems/session-query.md +498 -0
- package/kb/site/reference/subsystems/session-reference.md +111 -0
- package/kb/site/reference/subsystems/session-telemetry.md +197 -0
- package/kb/site/reference/subsystems/session-title.md +207 -0
- package/kb/site/reference/subsystems/session.md +854 -0
- package/kb/site/reference/subsystems/settings.md +313 -0
- package/kb/site/reference/subsystems/shell.md +306 -0
- package/kb/site/reference/subsystems/skills.md +334 -0
- package/kb/site/reference/subsystems/spill.md +120 -0
- package/kb/site/reference/subsystems/storage.md +232 -0
- package/kb/site/reference/subsystems/subagent.md +739 -0
- package/kb/site/reference/subsystems/subprocess.md +327 -0
- package/kb/site/reference/subsystems/system-prompt.md +210 -0
- package/kb/site/reference/subsystems/terminal.md +187 -0
- package/kb/site/reference/subsystems/token-meter.md +93 -0
- package/kb/site/reference/subsystems/tools.md +723 -0
- package/kb/site/reference/subsystems/typert.md +339 -0
- package/kb/site/reference/subsystems/user-questions.md +181 -0
- package/kb/site/reference/subsystems/web-server.md +111 -0
- package/kb/site/reference/subsystems/web.md +202 -0
- package/kb/site/reference/subsystems/workflow.md +281 -0
- package/kb/site/reference/subsystems/workspace.md +231 -0
- package/kb/site/reference/tool-catalog.md +1880 -0
- package/kb/site/reference/tool-execution-pipeline.md +66 -0
- package/package.json +40 -0
- package/scripts/rebuild-index.mjs +88 -0
- package/skills/dsh-plugin-dev-kb.md +66 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
editSource: "docs/tool-execution-pipeline.md"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated by scripts/gen-doc-graphs.ts - do not edit by hand.
|
|
6
|
+
Run `pnpm run gen-doc-graphs` to regenerate. -->
|
|
7
|
+
|
|
8
|
+
# Tool Execution Pipeline
|
|
9
|
+
|
|
10
|
+
This graph shows where policy, hooks, sandboxing, filesystem guards, result rewriting, final-outcome observation, and UI rendering run without changing the loop. The `tools/pre-execute` waterfall runs first, monotonic guards run next, and the `tools/execute` and `tools/post-execute` waterfalls follow; the three waterfalls may transform a call. Definition-owned `finalizeContent` and `tools/result` run afterward.
|
|
11
|
+
|
|
12
|
+
```mermaid
|
|
13
|
+
flowchart TD
|
|
14
|
+
model["Assistant message contains tool-call block"]
|
|
15
|
+
toolCall["Session event: <code>tool/call</code><br/>logged before execution"]
|
|
16
|
+
presentCall["UI pending card<br/>presentCall(args)"]
|
|
17
|
+
pre["<code>tools/pre-execute</code> waterfall<br/>hooks, permission, sandbox"]
|
|
18
|
+
guards["Registered monotonic guards<br/>deny or abstain; identity protected"]
|
|
19
|
+
denied["denied or approval refused<br/>tool body skipped"]
|
|
20
|
+
approval["<code>ctx.approval</code> one-shot prompt<br/>absent or unanswerable: deny"]
|
|
21
|
+
around["<code>tools/execute</code> waterfall<br/>timeout, retry, metrics (around dispatch)"]
|
|
22
|
+
toolBody["Registered tool execute() body"]
|
|
23
|
+
fsGate["<code>fs/write-intent</code> or <code>fs/edit-intent</code><br/>tool-fs mutations only"]
|
|
24
|
+
owned["Tool-owned session events<br/><code>todo/write</code>, <code>fs/observed</code>, <code>hook/invoked</code>, <code>hook/result</code>, <code>tool/code-dispatch</code>"]
|
|
25
|
+
post["<code>tools/post-execute</code> waterfall<br/>accept, block, replace, add context"]
|
|
26
|
+
normalized["Registry outer normalization<br/>pipeline/result snapshot throws become isError"]
|
|
27
|
+
finalize["ToolDefinition.finalizeContent<br/>last content-only invariant"]
|
|
28
|
+
final["<code>tools/result</code> synchronous notification<br/>frozen authoritative outcome"]
|
|
29
|
+
context["Active-batch additionalContexts FIFO<br/>injected user/message after recorded tool results"]
|
|
30
|
+
toolResult["Session event: <code>tool/result</code><br/>single model-facing outcome"]
|
|
31
|
+
allResults["Tool batch settled<br/>recorded tool/result events complete"]
|
|
32
|
+
presentResult["UI completed card<br/>presentResult(args, result)"]
|
|
33
|
+
model --> toolCall
|
|
34
|
+
toolCall --> presentCall
|
|
35
|
+
toolCall --> pre
|
|
36
|
+
pre -->|allow| guards
|
|
37
|
+
guards -->|allow| around
|
|
38
|
+
guards -->|deny| denied
|
|
39
|
+
guards -.->|throw| normalized
|
|
40
|
+
around --> toolBody
|
|
41
|
+
pre -->|deny| denied
|
|
42
|
+
pre -->|ask| approval
|
|
43
|
+
approval -->|allowed-once| guards
|
|
44
|
+
approval -->|rejected, cancelled, unavailable| denied
|
|
45
|
+
approval -.->|throw| normalized
|
|
46
|
+
denied --> post
|
|
47
|
+
pre -.->|throw| normalized
|
|
48
|
+
toolBody --> fsGate
|
|
49
|
+
fsGate --> toolBody
|
|
50
|
+
toolBody --> owned
|
|
51
|
+
toolBody --> around
|
|
52
|
+
around --> post
|
|
53
|
+
around -.->|wrapper throws| normalized
|
|
54
|
+
post -.->|throw| normalized
|
|
55
|
+
post --> finalize
|
|
56
|
+
normalized --> finalize
|
|
57
|
+
finalize --> final
|
|
58
|
+
final --> toolResult
|
|
59
|
+
toolResult --> presentResult
|
|
60
|
+
toolResult --> allResults
|
|
61
|
+
allResults --> context
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Filesystem read-before-edit checks stay below `tool-fs` on `fs/*` events. Generic pre/post waterfalls host hooks and approval policy; `ctx.approval` resolves asks before monotonic guards, and owner policy that must not be reordered remains a registered guard. Around-dispatch concerns such as timeouts wrap `tools/execute`. The registry losslessly snapshots the candidate result and normalizes a snapshot failure before the visible definition's snapshotted `finalizeContent` callback enforces its synchronous content-only invariant. `tools/result` then observes the immutable, lossless-JSON outcome. This lets hooks span tool families without coupling the tools to one policy service. Code Mode sends both the reserved `run_code` transport and its serialized sub-calls through the pipeline; sub-calls carry the parent token, log `tool/code-dispatch`, return denials as binding rejections, and omit `additionalContexts` to preserve call/result adjacency.
|
|
65
|
+
|
|
66
|
+
Maintenance mode: curated Mermaid flow; exact tool schemas and event signatures live in generated catalogs.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
editSource: "docs/user/guide/providers.zh.md"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 配置模型
|
|
6
|
+
|
|
7
|
+
本指南假定你已按照[根 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md#run)启动 Web UI。模型变更会在下一次请求时生效,不需要重启服务器。
|
|
8
|
+
|
|
9
|
+
## 配置 DeepSeek
|
|
10
|
+
|
|
11
|
+
打开**设置 → 模型**。DeepSeek 卡片提供一个 API 密钥字段;输入密钥并保存。
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
密钥是只写的。保存后,页面只会收到脱敏描述符,永远不会收到明文密钥。密钥存储在 `$DSH_HOME/.credentials.yaml` 中,settings 只保留它的凭据引用。
|
|
16
|
+
|
|
17
|
+
## 添加目录提供方
|
|
18
|
+
|
|
19
|
+
选择**添加提供方**,选取 Anthropic 或 OpenAI 等提供方,输入其 API 密钥并保存。已安装目录会提供端点、协议和模型列表。
|
|
20
|
+
|
|
21
|
+
使用原生认证的提供方需要各自的原生凭据。Bedrock、Vertex、Azure 和 Codex 分别使用 AWS 凭据与区域、ADC 项目、`api-version` 和 OAuth;只填写 API 密钥字段无法完成配置。
|
|
22
|
+
|
|
23
|
+
## 添加自定义提供方
|
|
24
|
+
|
|
25
|
+
对于公司网关、自建服务器或已安装目录中不存在的提供方,选择**添加自定义提供方**。提供小写 Provider ID、基础 URL、API 协议、凭据和至少一个模型。
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
Provider ID 是永久的,因为请求、已保存会话、模型默认值和凭据引用都会使用它。如需重命名提供方,请添加新提供方并删除旧提供方。显示名称、基础 URL、协议、凭据和模型仍可编辑。
|
|
30
|
+
|
|
31
|
+
在**模型目录**中选择**获取可用模型**,可查询表单当前显示的基础 URL 和凭据。选择候选项只会更新草稿;保存前不会存储提供方。目录提供方使用已安装目录,不发起网络请求。
|
|
32
|
+
|
|
33
|
+
### 图片输入
|
|
34
|
+
|
|
35
|
+
手动输入的模型在自己声明之前一律按纯文本对待,因为没有任何环节能去询问端点接受哪些模态。给这类模型附加图片,会在发送前就被拒绝,并点名该模型。
|
|
36
|
+
|
|
37
|
+
因此自定义提供方下的视觉模型需要加一行。表单没有对应字段;请在 `$DSH_HOME/settings.yaml` 中给该模型加上 `input`:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
llm-pi-ai:
|
|
41
|
+
providers:
|
|
42
|
+
my-gateway:
|
|
43
|
+
apiKeyEnv: GATEWAY_API_KEY
|
|
44
|
+
api: openai-completions
|
|
45
|
+
baseURL: https://gateway.example/v1
|
|
46
|
+
models:
|
|
47
|
+
- id: legacy-chat
|
|
48
|
+
- id: vision-preview
|
|
49
|
+
input: [text, image]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`input` 接受 `text` 和 `image`,且只作用于该模型,因此一条路由可以同时服务两类模型。省略它——或写成空列表,两者同义——则保留已安装目录为该模型记录的模态;目录未描述的模型则回退到该路由的 `defaultInput`。
|
|
53
|
+
|
|
54
|
+
如果你手动录入的模型全都接受图片,可以在路由上设置一次回退值,不必逐个模型写:
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
llm-pi-ai:
|
|
58
|
+
providers:
|
|
59
|
+
vision-gateway:
|
|
60
|
+
apiKeyEnv: GATEWAY_API_KEY
|
|
61
|
+
api: openai-completions
|
|
62
|
+
baseURL: https://vision.example/v1
|
|
63
|
+
defaultInput: [text, image]
|
|
64
|
+
models:
|
|
65
|
+
- id: first-model
|
|
66
|
+
- id: second-model
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`defaultInput` 是回退值而不是覆盖值,默认为 `[text]`:在目录提供方上,它只为目录未描述的模型作答,因此绝不会把目录中本就具备图片能力的模型的该能力去掉。要收窄这类模型,请用它自己的 `input`。目录提供方没有可供填写的 `models` 列表,因此写在 `modelOverrides` 下,以模型 id 为键:
|
|
70
|
+
|
|
71
|
+
```yaml
|
|
72
|
+
llm-pi-ai:
|
|
73
|
+
providers:
|
|
74
|
+
anthropic:
|
|
75
|
+
modelOverrides:
|
|
76
|
+
claude-sonnet-4-5:
|
|
77
|
+
input: [text]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
除模型自身的列表外,每个列表都至少要写一项模态;模型自身的空列表与省略它同义。未知模态在任何位置写入都会被拒绝。
|
|
81
|
+
|
|
82
|
+
这两个字段都是对你端点的断言,而不是对它的检查。声明了端点并不提供的图片能力的模型不会在这里被拦下,改由提供方拒绝该请求。
|
|
83
|
+
|
|
84
|
+
## 选择模型
|
|
85
|
+
|
|
86
|
+
已配置的提供方会出现在模型选择器中。选择模型也会将其设为新会话的默认值。已发送过请求的会话会保留自身日志中记录的模型。
|
|
87
|
+
|
|
88
|
+
如果已保存默认值指向已删除的提供方,输入框会显示**选择模型**,并在选择其他模型前阻止输入。
|
|
89
|
+
|
|
90
|
+
## 排错
|
|
91
|
+
|
|
92
|
+
- **`MISSING_CREDENTIAL`**:通过模型页存储提供方密钥,或提供被引用的环境变量。
|
|
93
|
+
- **`UNKNOWN_MODEL`**:选择已配置的模型,或向自定义提供方添加缺失的模型。
|
|
94
|
+
- **获取可用模型返回 401**:检查密钥。模型发现会调用 OpenAI 兼容的 `GET /models` 端点;对于不提供该端点的服务,请手动输入模型。
|
|
95
|
+
- **图片在发送前被拒绝**:该模型未声明图片模态。请给自定义提供方的模型加上 `input: [text, image]`;DeepSeek 自身的 chat-completions 路由是纯文本的,且无法通过配置改变。
|
|
96
|
+
- **提供方拒绝了带图片的请求**:该模型声明了其端点实际并不提供的图片能力。请从授予它图片能力的那个列表中移除 `image`——可能是模型的 `input`,也可能是路由的 `defaultInput`——然后开启新会话:附加的图片会留在会话日志里,因此在会话离开它之前,同一个请求会不断重复。
|
|
97
|
+
|
|
98
|
+
## 进阶配置
|
|
99
|
+
|
|
100
|
+
自动生成的[插件配置目录](../reference/config-catalog.md)列出所有受支持的字段与默认值。[`dsh-llm-pi-ai`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-pi-ai/README.md) 和 [`dsh-llm-deepseek`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/llm/llm-deepseek/README.md) 参考文档负责直接 `settings.yaml` 配置、目录解析、推理控制、凭据与适配器错误。
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
editSource: "docs/user/guide/python-sdk.zh.md"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Python SDK 快速上手
|
|
6
|
+
|
|
7
|
+
本教程介绍 Web UI 之外的程序化使用方式:安装已发布的 Python SDK、运行仓库内置的 agent(智能体)组合,并在自己的程序中调用同一套 API。
|
|
8
|
+
|
|
9
|
+
## 前置要求
|
|
10
|
+
|
|
11
|
+
- Python 3.10 或更高版本
|
|
12
|
+
- Git
|
|
13
|
+
- Linux x64、Linux arm64 或 macOS 14 或更高版本的 arm64
|
|
14
|
+
- DeepSeek 兼容的 API 端点与凭据
|
|
15
|
+
- agent 可以修改的隔离 workspace
|
|
16
|
+
|
|
17
|
+
## 安装 SDK
|
|
18
|
+
|
|
19
|
+
克隆仓库以使用其中的可运行示例,创建虚拟环境,并安装 SDK 及其同版本内置运行时:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
git clone https://github.com/deepseek-ai/deepseek-harness.git
|
|
23
|
+
cd deepseek-harness
|
|
24
|
+
python -m venv .venv
|
|
25
|
+
. .venv/bin/activate
|
|
26
|
+
python -m pip install deepseek-harness-sdk
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
安装后的运行时不需要系统提供 Node.js。需要从源码构建运行时或 wheel 包的仓库贡献者应使用 [Python 贡献者工作流](https://github.com/deepseek-ai/deepseek-harness/blob/master/python/development.md)。
|
|
30
|
+
|
|
31
|
+
## 运行仓库内置示例
|
|
32
|
+
|
|
33
|
+
请在环境中设置凭据。如果模型不是由默认 DeepSeek 端点提供,而是通过 OpenAI 兼容代理提供,还需要设置 `DEEPSEEK_BASE_URL`。
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
export DEEPSEEK_API_KEY=sk-your-key-here
|
|
37
|
+
# export DEEPSEEK_BASE_URL=http://127.0.0.1:8000/v1
|
|
38
|
+
# export DSH_MODEL=deepseek-v4-flash
|
|
39
|
+
# export DSH_SYSTEM_PROMPT='You are a helpful software engineer assistant.'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
针对隔离的 workspace 和会话目录运行一个任务:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
python examples/jsonrpc-agent/minimal.py \
|
|
46
|
+
--workspace /absolute/path/to/workspace \
|
|
47
|
+
--session-root /absolute/path/to/sessions \
|
|
48
|
+
--session-id example-001 \
|
|
49
|
+
"Inspect the repository and fix the failing tests."
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
脚本会打印 assistant 的最终回复。会话目录会收到 JSONL 日志,其中包含组装后的模型请求与工具调用。
|
|
53
|
+
|
|
54
|
+
## 在自己的程序中使用 SDK
|
|
55
|
+
|
|
56
|
+
仓库内置示例是以下 SDK 调用的轻量包装:
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from pathlib import Path
|
|
60
|
+
|
|
61
|
+
from deepseek_harness import DeepSeekHarness
|
|
62
|
+
|
|
63
|
+
config = Path("examples/jsonrpc-agent/minimal.cordis.yml").resolve()
|
|
64
|
+
workspace = Path("/absolute/path/to/workspace").resolve()
|
|
65
|
+
sessions = Path("/absolute/path/to/sessions").resolve()
|
|
66
|
+
|
|
67
|
+
with DeepSeekHarness(
|
|
68
|
+
provider="deepseek-official",
|
|
69
|
+
model="deepseek-v4-flash",
|
|
70
|
+
max_tokens=49_152,
|
|
71
|
+
cwd=str(workspace),
|
|
72
|
+
session_root=str(sessions),
|
|
73
|
+
cordis=str(config),
|
|
74
|
+
) as harness:
|
|
75
|
+
result = harness.run(
|
|
76
|
+
"Inspect the repository and fix the failing tests.",
|
|
77
|
+
session_id="example-001",
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
print(result.final_response)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`DeepSeekHarness` 会延迟启动内置运行时,并持续复用,直至退出上下文管理器。复用同一个 harness 与 session id 会保留该会话拥有的 Bash 进程,包括其工作目录、已导出的变量与 shell 函数。独立任务应使用新的 session id;只有下一次调用需要延续同一段持久化对话时,才复用原有 id。
|
|
84
|
+
|
|
85
|
+
## 了解示例组合
|
|
86
|
+
|
|
87
|
+
| 属性 | 值 |
|
|
88
|
+
|---|---|
|
|
89
|
+
| 系统提示词 | `DSH_SYSTEM_PROMPT`;未设置时使用 `You are a helpful software engineer assistant.` |
|
|
90
|
+
| `minimal.py` 使用的模型 | `--model`,其次为 `DSH_MODEL`,最后为 `deepseek-v4-flash` |
|
|
91
|
+
| 面向模型的工具 | 仅持久 `bash` 与 `str_replace_editor` |
|
|
92
|
+
| Bash 超时 | 300 秒 |
|
|
93
|
+
| 编辑器输出上限 | 16,000 个字符 |
|
|
94
|
+
| 上下文压缩 | 已关闭 |
|
|
95
|
+
| 文件系统 | 裸本地后端;编辑器使用绝对路径,可以访问运行时进程可见的任何路径 |
|
|
96
|
+
| 会话持久化 | `DSH_SESSION_ROOT` 下未压缩的 JSONL |
|
|
97
|
+
|
|
98
|
+
该组合省略了 harness 身份、workspace 提示词文本、skill(技能)、一次性 Bash、任务工具、上下文压缩和其他所有面向模型的插件。沙箱策略事实记录为运行时用户上下文,而不会追加到系统提示词中。
|
|
99
|
+
|
|
100
|
+
## 选择 workspace 与 session id
|
|
101
|
+
|
|
102
|
+
`cwd` 用于选择 agent 可访问的 workspace,`session_root` 用于保存会话日志和状态。独立任务应使用新的 session id;只有下一次调用需要延续同一段对话和持久 shell 状态时,才复用原有 id。
|
|
103
|
+
|
|
104
|
+
该组合使用 `danger-full-access`。只能在可丢弃的 checkout 或容器内运行:Bash 与编辑器可以修改运行时进程有权访问的任何路径。持久 PTY 后端需要 POSIX 终端环境,因此该组合不支持 Windows agent。
|
|
105
|
+
|
|
106
|
+
准确的组合内容归 [`jsonrpc-agent` 示例参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/examples/jsonrpc-agent/README.md)所有。[Python SDK 参考](https://github.com/deepseek-ai/deepseek-harness/blob/master/python/sdk/README.md)介绍生命周期、结果、通知、运行时选择和配置;[Cordis primer](../reference/cordis-primer.md)介绍组合语法。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
editSource: "docs/user/guide/index.zh.md"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 使用 Web UI
|
|
6
|
+
|
|
7
|
+
请先按照[根目录 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/README.md#run) 中的说明启动 Web UI;命令会打印其访问地址。本指南从服务器已经运行的状态开始。`dsh` 进程会把启动时所在的目录作为默认文件系统位置;全新的 Web UI 则不会选中任何工作区,你需要添加一个工作区。
|
|
8
|
+
|
|
9
|
+
## 配置模型
|
|
10
|
+
|
|
11
|
+
打开**设置 → 模型**,输入 [DeepSeek API 密钥](https://platform.deepseek.com/)并保存。模型路由会立即可用,不需要重启服务器。
|
|
12
|
+
|
|
13
|
+
[模型配置指南](./providers.md)介绍其他提供方和自定义 OpenAI 兼容端点。
|
|
14
|
+
|
|
15
|
+
## 选择工作区
|
|
16
|
+
|
|
17
|
+
点击**选择工作区**,添加启动 `dsh` 时所在的项目目录,然后选中它。选中工作区前,会话输入框不可用。
|
|
18
|
+
|
|
19
|
+
## 运行任务
|
|
20
|
+
|
|
21
|
+
启动一个会话并发送:
|
|
22
|
+
|
|
23
|
+
> Summarize this repository and identify its main packages.
|
|
24
|
+
|
|
25
|
+
Agent(智能体)可以读取和编辑工作区文件、运行命令、委派工作并维护计划。如果根据当前权限策略,某项操作需要审批,Web UI 会先询问你。
|
|
26
|
+
|
|
27
|
+
## 继续使用
|
|
28
|
+
|
|
29
|
+
- [配置模型](./providers.md)
|
|
30
|
+
- [使用 Python SDK](./python-sdk.md)
|
|
31
|
+
- [使用其他 CLI 模式](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md)
|
|
32
|
+
- [开发插件](../develop/basic/index.md)
|
package/kb/site/index.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
editSource: "docs/agent-lifecycle.zh.md"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- 英文源文件由 scripts/gen-doc-graphs.ts 生成;本中文文件是通过双语配对维护的经评审对侧。
|
|
6
|
+
更新时先运行 `pnpm run gen-doc-graphs` 更新英文,再更新本文件并运行 `pnpm run verify-translation-pairing --write docs/agent-lifecycle.md` 重新记录配对。 -->
|
|
7
|
+
|
|
8
|
+
# Agent 轮次与步骤生命周期
|
|
9
|
+
|
|
10
|
+
此时序图是 [architecture.md](./index.md#turn-flow) 的配套图示。持久的回放事实保存在 `session/event` 中,实时控制与状态则保存在 `agent/*` 中。
|
|
11
|
+
|
|
12
|
+
```mermaid
|
|
13
|
+
sequenceDiagram
|
|
14
|
+
participant User
|
|
15
|
+
participant Agent
|
|
16
|
+
participant Driver
|
|
17
|
+
participant Hooks as hook listeners
|
|
18
|
+
participant Prompt as ctx.systemPrompt
|
|
19
|
+
participant LLM as ctx.llm
|
|
20
|
+
participant Tools as ctx.tools
|
|
21
|
+
participant Session
|
|
22
|
+
participant SDK as UI or SDK listener
|
|
23
|
+
User->>Agent: followup(content)
|
|
24
|
+
Agent-->>SDK: <code>agent/inbox/spliced</code>
|
|
25
|
+
Agent-->>SDK: <code>agent/inbox/inserted</code> { message }
|
|
26
|
+
Agent->>Driver: queued work wakes driver
|
|
27
|
+
Driver-->>SDK: <code>agent/status</code> running
|
|
28
|
+
Driver->>Session: <code>turn/start</code>
|
|
29
|
+
Note over Agent,Driver: claim pending next-step input plus one queued prompt
|
|
30
|
+
Driver-->>SDK: <code>agent/inbox/spliced</code> pure deletion
|
|
31
|
+
Driver-->>SDK: <code>agent/inbox/claimed</code> { message, turn } per message
|
|
32
|
+
Driver->>Hooks: <code>agent/pre-step</code> waterfall
|
|
33
|
+
Hooks-->>Driver: authoritative reject or enter(messages)
|
|
34
|
+
alt proposed step rejected or pre-step failed
|
|
35
|
+
Driver-->>Driver: claimed batch stays removed, the open turn spends no step
|
|
36
|
+
else enter proposed step
|
|
37
|
+
Driver->>Session: <code>step/start</code>
|
|
38
|
+
Driver->>Session: <code>user/message</code> per entered message
|
|
39
|
+
Driver->>Prompt: <code>system-prompt/assemble</code> waterfall
|
|
40
|
+
Driver->>LLM: <code>agent/request</code> waterfall, then <code>llm/stream</code> waterfall
|
|
41
|
+
LLM-->>Driver: StreamChunk*
|
|
42
|
+
Driver->>Session: <code>assistant/chunk</code>*
|
|
43
|
+
Session-->>SDK: <code>session/event</code> <code>assistant/chunk</code>*
|
|
44
|
+
alt final adapter or terminal in-band request failure
|
|
45
|
+
Driver->>Session: <code>step/end</code>
|
|
46
|
+
Driver->>Hooks: <code>agent/request-error</code> waterfall
|
|
47
|
+
Hooks-->>Driver: return retry action or preserve the original error
|
|
48
|
+
else model request succeeded
|
|
49
|
+
Driver->>Session: <code>assistant/message</code>
|
|
50
|
+
Driver->>Tools: classify pending call by executionMode
|
|
51
|
+
loop barriers and bounded rolling pool, reclassify before start
|
|
52
|
+
opt call starts
|
|
53
|
+
Driver->>Session: <code>tool/call</code>
|
|
54
|
+
Driver->>Tools: ordered pre, concurrent execute
|
|
55
|
+
Tools-->>Session: tool-owned events when applicable
|
|
56
|
+
end
|
|
57
|
+
opt next model-order result ready
|
|
58
|
+
Driver->>Tools: ordered post
|
|
59
|
+
Driver->>Session: <code>tool/result</code>
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
Driver->>Session: <code>step/end</code>
|
|
63
|
+
opt natural stop and next-step inbox empty
|
|
64
|
+
Driver->>Hooks: <code>agent/turn-stopping</code> serial terminal checkpoint
|
|
65
|
+
end
|
|
66
|
+
opt next-step input is pending
|
|
67
|
+
Driver-->>Driver: claim pending next-step input
|
|
68
|
+
Driver-->>SDK: <code>agent/inbox/claimed</code> { message, turn } per message
|
|
69
|
+
Driver->>Hooks: <code>agent/pre-step</code> waterfall
|
|
70
|
+
Hooks-->>Driver: authoritative reject or enter(messages)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
Driver->>Session: <code>turn/end</code>
|
|
75
|
+
Driver-->>SDK: <code>agent/status</code> idle
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`assistant/message` 事件会记录每次成功的提供方调用,包括返回空内容或以 `max-tokens` 结束的调用。空内容不会进入派生历史,但该持久事件仍会保留用量,并通过 `sourceEventSeqs` 精确列出对应的 `assistant/chunk` 事件,包括显式空列表。
|
|
79
|
+
|
|
80
|
+
`dsh-compaction-basic` 在派生请求之前通过 `agent/pre-step` 处理压力,而 `agent/request-error` 仅用于规范的上下文溢出。任一触发条件满足后,系统都会先执行可选的工具结果剪枝,再选择摘要。恢复发生在失败步骤结束之后、失败轮次结束之前;只有当剪枝或摘要生成推进了 surface replacement generation 时,系统才会开启一个全新的重试轮次,否则仍以原始请求错误为准。
|
|
81
|
+
|
|
82
|
+
以返回的 `agent/pre-step` 决策为准;通过包装 `next()` 的监听器会保留下游消息,除非有意替换这些消息。steering(中途引导)和注入的上下文在后续的认领操作取得其下一步骤批次后,会经过同一 waterfall(瀑布式事件)。
|
|
83
|
+
|
|
84
|
+
需要可回放 transcript(文本记录)数据的 SDK 用户应当消费 `session/event`;`agent/*` 是用于队列与状态、提示词拦截、请求构造、steering、继续执行和错误处理的实时协调接口。
|
|
85
|
+
|
|
86
|
+
维护模式:英文源文件包含人工维护的 Mermaid 时序图,并由生成器写出;本中文文件作为经评审对侧通过双语配对维护。确切的事件签名位于生成的 Cordis 目录中。
|