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.zh.md"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- 英文源文件由 scripts/gen-doc-graphs.ts 生成;本中文文件是通过双语配对维护的经评审对侧。
|
|
6
|
+
更新时先运行 `pnpm run gen-doc-graphs` 更新英文,再更新本文件并运行 `pnpm run verify-translation-pairing --write docs/tool-execution-pipeline.md` 重新记录配对。 -->
|
|
7
|
+
|
|
8
|
+
# 工具执行流水线
|
|
9
|
+
|
|
10
|
+
此图展示策略、钩子、沙箱、文件系统守卫、结果重写、最终结果观察和 UI 渲染在不改变循环的情况下何时运行。`tools/pre-execute` waterfall(瀑布式事件)首先运行,随后是单调守卫,然后运行 `tools/execute` 和 `tools/post-execute` waterfall;这三个 waterfall 可以改写一次调用。由定义自身控制的 `finalizeContent` 和 `tools/result` 在此之后运行。
|
|
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
|
+
文件系统的先读后编辑检查位于 `tool-fs` 之下,通过 `fs/*` 事件实现。通用的前置/后置 waterfall 承载钩子与审批策略;`ctx.approval` 在单调守卫之前处理询问,而不得重新排序的所有者策略仍作为已注册的守卫。超时等环绕分发关注点对 `tools/execute` 进行包装。注册表会对候选结果进行无损快照;如果快照失败,则会先将失败规范化,之后再由可见定义中已随快照固定的 `finalizeContent` 回调强制执行其同步且仅限内容的不变式。随后,`tools/result` 会观察不可变、可由 JSON 无损表示的结果。这样一来,钩子便可跨越不同工具系列,而无需让工具与某个策略服务耦合。Code Mode 会将保留的 `run_code` 传输及其序列化子调用都送入流水线;子调用携带父级 token、记录 `tool/code-dispatch`、将拒绝呈现为具有约束力的驳回,并省略 `additionalContexts`,以保持调用与结果相邻。
|
|
65
|
+
|
|
66
|
+
维护模式:英文源文件包含人工维护的 Mermaid 流程图,并由生成器写出;本中文文件作为经评审对侧通过双语配对维护。确切的工具 schema 与事件签名位于生成的目录中。
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-plugin-dev-kb",
|
|
3
|
+
"description": "DeepSeek Harness (dsh) 插件开发知识库:官方文档站点的完整 Markdown 镜像(中英双语 168 页)+ 仓库补充文档(50 篇)+ 主题导航与搜索索引,以 dsh-plugin-dev-kb 技能形式让 agent 在插件开发任务中自动加载定位文档。纯数据插件,无运行时依赖。",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"kb",
|
|
8
|
+
"skills",
|
|
9
|
+
"scripts",
|
|
10
|
+
"cordis.patch.yml",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE"
|
|
13
|
+
],
|
|
14
|
+
"keywords": [
|
|
15
|
+
"dsh",
|
|
16
|
+
"dsh-plugin",
|
|
17
|
+
"deepseek",
|
|
18
|
+
"harness",
|
|
19
|
+
"cordis",
|
|
20
|
+
"plugin",
|
|
21
|
+
"knowledge",
|
|
22
|
+
"documentation",
|
|
23
|
+
"kb",
|
|
24
|
+
"plugin-development"
|
|
25
|
+
],
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/Pasumao/dsh-plugin-dev-kb.git"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/Pasumao/dsh-plugin-dev-kb",
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/Pasumao/dsh-plugin-dev-kb/issues"
|
|
33
|
+
},
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"dsh": {
|
|
36
|
+
"bundle": {
|
|
37
|
+
"patch": "./cordis.patch.yml"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Rebuilds kb/INDEX.md (site URL ↔ local file) and kb/meta/search-index.json.
|
|
2
|
+
// Run from the plugin root: node scripts/rebuild-index.mjs
|
|
3
|
+
import { readdirSync, readFileSync, writeFileSync, statSync, mkdirSync } from 'node:fs'
|
|
4
|
+
import { dirname, join } from 'node:path'
|
|
5
|
+
import { fileURLToPath } from 'node:url'
|
|
6
|
+
|
|
7
|
+
const PLUGIN = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
8
|
+
// Normalize to forward slashes so `rel` derivation matches walk() output on Windows.
|
|
9
|
+
const KB = join(PLUGIN, 'kb').replace(/\\/g, '/')
|
|
10
|
+
const BASE = 'https://deepseek-harness.github.io/deepseek-harness'
|
|
11
|
+
|
|
12
|
+
function walk(dir) {
|
|
13
|
+
const out = []
|
|
14
|
+
for (const entry of readdirSync(dir)) {
|
|
15
|
+
const abs = join(dir, entry)
|
|
16
|
+
if (statSync(abs).isDirectory()) out.push(...walk(abs))
|
|
17
|
+
else out.push(abs)
|
|
18
|
+
}
|
|
19
|
+
return out
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function stripFrontmatter(text) {
|
|
23
|
+
if (!text.startsWith('---\n')) return text
|
|
24
|
+
const end = text.indexOf('\n---\n', 4)
|
|
25
|
+
return end === -1 ? text : text.slice(end + 5)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function firstHeading(text) {
|
|
29
|
+
for (const line of stripFrontmatter(text).split('\n')) {
|
|
30
|
+
const m = line.match(/^#\s+(.+)$/)
|
|
31
|
+
if (m) return m[1].trim()
|
|
32
|
+
}
|
|
33
|
+
return ''
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function routeToUrl(rel) {
|
|
37
|
+
let p = rel.replace(/\.md$/, '')
|
|
38
|
+
if (p.endsWith('/index')) p = p.slice(0, -6)
|
|
39
|
+
else if (p === 'index') p = ''
|
|
40
|
+
return p === '' ? BASE : `${BASE}/${p}`
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ---- collect entries ----
|
|
44
|
+
const entries = []
|
|
45
|
+
for (const abs of walk(KB)) {
|
|
46
|
+
if (!abs.endsWith('.md')) continue
|
|
47
|
+
const rel = abs.replace(/\\/g, '/').replace(KB + '/', '')
|
|
48
|
+
const text = readFileSync(abs, 'utf8')
|
|
49
|
+
entries.push({
|
|
50
|
+
path: `kb/${rel}`,
|
|
51
|
+
url: rel.startsWith('site/') ? routeToUrl(rel.slice(5)) : '',
|
|
52
|
+
title: firstHeading(text),
|
|
53
|
+
chars: text.length,
|
|
54
|
+
rel,
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
entries.sort((a, b) => a.rel.localeCompare(b.rel))
|
|
58
|
+
|
|
59
|
+
// ---- search-index.json ----
|
|
60
|
+
const indexRows = entries.map(({ path, url, title, chars }) => ({ path, url, title, chars }))
|
|
61
|
+
mkdirSync(join(KB, 'meta'), { recursive: true })
|
|
62
|
+
writeFileSync(join(KB, 'meta', 'search-index.json'), JSON.stringify(indexRows, null, 1) + '\n', 'utf8')
|
|
63
|
+
|
|
64
|
+
// ---- INDEX.md ----
|
|
65
|
+
const siteRows = entries.filter(e => e.rel.startsWith('site/'))
|
|
66
|
+
const en = (rel) => rel.startsWith('site/en/')
|
|
67
|
+
const group = (pred) => siteRows.filter(r => pred(r.rel))
|
|
68
|
+
const table = (rows) => rows.length === 0
|
|
69
|
+
? '_(无)_'
|
|
70
|
+
: ['| 页面 | 站点 URL | 本地文件 |', '| --- | --- | --- |']
|
|
71
|
+
.concat(rows.map(r => `| ${r.title || r.rel} | [${r.url}](${r.url}) | \`site/${r.rel.slice(5)}\` |`))
|
|
72
|
+
.join('\n')
|
|
73
|
+
|
|
74
|
+
const md = []
|
|
75
|
+
md.push('# DeepSeek Harness 文档索引', '')
|
|
76
|
+
md.push(`> 由 \`scripts/rebuild-index.mjs\` 自动生成。共 ${siteRows.length} 个站点页面(中英双语),另有 ${entries.length - siteRows.length} 个补充文档在 \`extra/\`。`, '')
|
|
77
|
+
md.push('## 中文站点(根路径)', '')
|
|
78
|
+
md.push('### 首页', '', table(group(rel => rel === 'site/index.md')), '')
|
|
79
|
+
md.push('### 入门(/guide/)', '', table(group(rel => !en(rel) && rel.startsWith('site/guide/'))), '')
|
|
80
|
+
md.push('### 开发(/develop/)', '', table(group(rel => !en(rel) && rel.startsWith('site/develop/'))), '')
|
|
81
|
+
md.push('### 参考(/reference/)', '', table(group(rel => !en(rel) && rel.startsWith('site/reference/'))), '')
|
|
82
|
+
md.push('## 英文站点(/en/)', '')
|
|
83
|
+
md.push('### 首页', '', table(group(rel => rel === 'site/en/index.md')), '')
|
|
84
|
+
md.push('### 全部英文页面(/en/...)', '', table(group(rel => en(rel) && rel !== 'site/en/index.md')), '')
|
|
85
|
+
md.push('---', '', `*站点页面:${siteRows.length}(中文 ${siteRows.filter(r => !en(r.rel)).length},英文 ${siteRows.filter(r => en(r.rel)).length})*`, '')
|
|
86
|
+
writeFileSync(join(KB, 'INDEX.md'), md.join('\n') + '\n', 'utf8')
|
|
87
|
+
|
|
88
|
+
console.log(`rebuilt INDEX.md + search-index.json (${entries.length} files)`)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dsh-plugin-dev-kb
|
|
3
|
+
description: DeepSeek Harness 官方文档知识库的使用指南:知识库位置与结构、按任务场景的阅读路径、检索策略。写 dsh 插件 / Tool / 配置 / 服务 / 事件 / 打包发布 / LLM 适配器时先加载本技能定位文档。
|
|
4
|
+
whenToUse: 开发 dsh 插件、查询 dsh 能力与 API、写 Tool、配置 cordis.yml、扩展 Harness 时
|
|
5
|
+
---
|
|
6
|
+
# dsh 插件开发知识库使用指南(dsh-plugin-dev-kb)
|
|
7
|
+
|
|
8
|
+
本插件内置 DeepSeek Harness 官方文档的完整镜像,供插件开发时快速定位与检索。
|
|
9
|
+
|
|
10
|
+
## 0. 知识库位置
|
|
11
|
+
|
|
12
|
+
- **知识库根**:`D:\dsh\plugins\dsh-plugin-dev-kb\kb\`(绝对路径,可直接 read/glob/grep)
|
|
13
|
+
- 数据来源:官方文档站点(VitePress)的仓库原始 Markdown,链接已按站点路由重写,与线上站点逐字一致(见 `kb/meta/source.json` 的 commit)
|
|
14
|
+
|
|
15
|
+
## 1. 目录结构
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
kb/
|
|
19
|
+
├── site/ 线上站点完整镜像(中英双语,优先读这里)
|
|
20
|
+
│ ├── guide/ 入门:quickstart / providers / python-sdk
|
|
21
|
+
│ ├── develop/ basic(第一个插件/tool/config/publish)、framework(生命周期/服务/事件)、
|
|
22
|
+
│ │ practice(能力分层/LLM适配器)、cordis-tutorial(7章)
|
|
23
|
+
│ ├── reference/ index(架构)、cordis-primer、capability-seams、agent-lifecycle、
|
|
24
|
+
│ │ config-catalog、tool-catalog、cordis-api/(6)、cookbook/(6)、subsystems/(43)
|
|
25
|
+
│ └── en/ 英文站镜像(结构与中文站一致)
|
|
26
|
+
├── extra/ 仓库内未发布到站点的补充文档:glossary、defensive-patterns、
|
|
27
|
+
│ module-graph、testing、postmortem/(4)、i18n/、cookbook 与 subsystems 扩展
|
|
28
|
+
├── meta/
|
|
29
|
+
│ ├── topics.md ★ 主题导航:任务场景 → 要读的文件(先用这个)
|
|
30
|
+
│ ├── search-index.json 全量检索索引(220 文件:path/url/title/字符数)
|
|
31
|
+
│ ├── source.json 来源信息(commit/时间/统计)
|
|
32
|
+
│ └── site-pages.txt 线上站点页面清单
|
|
33
|
+
├── INDEX.md 全部 站点 URL ↔ 本地文件 对照
|
|
34
|
+
└── README.md 知识库总览与更新方法
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 2. 使用流程(三选一,从快到慢)
|
|
38
|
+
|
|
39
|
+
1. **按任务找文档**:读 `kb/meta/topics.md`,找到对应主题(如"开发一个 Tool"),按核心/扩展顺序读列出的文件。
|
|
40
|
+
2. **按关键词检索**:对 `kb/meta/search-index.json` 用 grep 过滤(如 `grep -i "tool" search-index.json`),或直接 grep `kb/site/` 内容定位。
|
|
41
|
+
3. **按 URL 反查**:已知线上页面 URL 时,在 `kb/INDEX.md` 查对应本地文件。
|
|
42
|
+
|
|
43
|
+
## 3. 阅读原则
|
|
44
|
+
|
|
45
|
+
- **中文优先**:默认读 `site/` 下中文文件;需要英文原文时读 `site/en/` 对应路径。
|
|
46
|
+
- **大文件局部读**:`reference/config-catalog.md`、`reference/tool-catalog.md`、`extra/module-graph.md`、`reference/subsystems/session.md` 等超过 100KB,先用 grep 定位再 read 局部,禁止整读。
|
|
47
|
+
- **代码示例可直接引用**:文档中的 `apply(ctx)` 插件骨架、`ctx.tools.register`、`inject` 声明等可直接用于新代码;但需注意知识库是 commit 快照,若与当前安装版本 API 不一致,以实际安装包为准。
|
|
48
|
+
- **常见检索关键词**:`ctx.effect`、`ctx.on`、`ctx.tools.register`、`inject`、`Service Definition`、`cordis.yml`、`SessionEventMap`、`Branded`。
|
|
49
|
+
|
|
50
|
+
## 4. 插件开发高频路径速查
|
|
51
|
+
|
|
52
|
+
| 任务 | 先读 |
|
|
53
|
+
| --- | --- |
|
|
54
|
+
| 写第一个插件 | `site/develop/basic/index.md` |
|
|
55
|
+
| 开发 Tool | `site/develop/basic/tool.md` + `site/reference/cookbook/adding-a-tool.md` |
|
|
56
|
+
| 插件配置 | `site/develop/basic/config.md` |
|
|
57
|
+
| 服务与依赖 | `site/develop/framework/service.md` |
|
|
58
|
+
| 事件监听 | `site/develop/framework/events.md` |
|
|
59
|
+
| 打包发布 | `site/develop/basic/publish.md` |
|
|
60
|
+
| LLM 适配器 | `site/develop/practice/llm-adapter.md` |
|
|
61
|
+
| 能力扩展 | `site/develop/practice/index.md` + `site/reference/capability-seams.md` |
|
|
62
|
+
| 子系统能力 | `site/reference/subsystems/index.md` → 对应子系统页 |
|
|
63
|
+
|
|
64
|
+
## 5. 更新知识库
|
|
65
|
+
|
|
66
|
+
见 `kb/README.md` 的更新方法(重新克隆 `deepseek-ai/deepseek-harness` 并运行站点投影器)。
|