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,53 @@
|
|
|
1
|
+
# Vendored package rescope
|
|
2
|
+
|
|
3
|
+
English | [中文](rescope.zh.md)
|
|
4
|
+
|
|
5
|
+
The Cordis framework and its foundation libraries are vendored under [`vendor/`](../vendor/README.md) and published under the `@deepseek-ai` scope, because every harness package declares the framework as a peer dependency: publishing the harness publishes this layer with it, and under the upstream names that publication would squat them on the registry. This page is the name mapping; the decision and its consequences live in the [rescope Agent Note](../.agents/notes/implemented/process/2026-08-10-vendor-package-rescope.md), and the upstream commits in [`vendor/README.md`](../vendor/README.md).
|
|
6
|
+
|
|
7
|
+
## Name mapping
|
|
8
|
+
|
|
9
|
+
| Directory | Upstream name | Published name | Version | Role |
|
|
10
|
+
|---|---|---|---|---|
|
|
11
|
+
| `vendor/cordis/` | `cordis` | `@deepseek-ai/cordis` | 4.0.0-rc.7 | Framework core: `Context`, `Service`, `Fiber`, events |
|
|
12
|
+
| `vendor/cosmokit/` | `cosmokit` | `@deepseek-ai/cosmokit` | 1.8.1 | Shared utilities the framework and Schemastery build on |
|
|
13
|
+
| `vendor/schemastery/` | `schemastery` | `@deepseek-ai/schemastery` | 3.18.0 | Config schemas (`Schema`) behind every plugin's `Config` |
|
|
14
|
+
| `vendor/loader/` | `@cordisjs/plugin-loader` | `@deepseek-ai/cordis-plugin-loader` | 1.0.0-rc.5 | `cordis.yml` loading, plugin resolution, repository cache |
|
|
15
|
+
| `vendor/include/` | `@cordisjs/plugin-include` | `@deepseek-ai/cordis-plugin-include` | 1.0.4 | Config includes and patch overlays |
|
|
16
|
+
| `vendor/group/` | `@cordisjs/plugin-group` | `@deepseek-ai/cordis-plugin-group` | 1.0.0 | Nested plugin groups |
|
|
17
|
+
| `vendor/timer/` | `@cordisjs/plugin-timer` | `@deepseek-ai/cordis-plugin-timer` | 1.1.2 | Disposal-aware timers on `ctx` |
|
|
18
|
+
| `vendor/hmr/` | `@cordisjs/plugin-hmr` | `@deepseek-ai/cordis-plugin-hmr` | 1.0.15 | Hot module replacement for plugins and config |
|
|
19
|
+
| `vendor/logger-console/` | `@cordisjs/plugin-logger-console` | `@deepseek-ai/cordis-plugin-logger-console` | 1.0.0 | Console logger exporter |
|
|
20
|
+
|
|
21
|
+
Subpath exports keep their path: `@cordisjs/plugin-loader/repository` becomes `@deepseek-ai/cordis-plugin-loader/repository`.
|
|
22
|
+
|
|
23
|
+
## What the rename does not touch
|
|
24
|
+
|
|
25
|
+
- **Directory names and versions.** `vendor/hmr/` stays `vendor/hmr/`, and every package keeps the upstream version its manifest table row records, so the vendored tree still reads as an upstream snapshot.
|
|
26
|
+
- **Dependency ranges.** A dependency entry changes its key, never its range: `"cordis": "^4.0.0-rc.7"` becomes `"@deepseek-ai/cordis": "^4.0.0-rc.7"`. `linkWorkspacePackages` resolves those preserved ranges to the pinned workspaces.
|
|
27
|
+
- **The Loader's `cordis:` builtin prefix.** `cordis:include` and `cordis:group` are a protocol prefix, not a package name.
|
|
28
|
+
- **The `cordis.yml` configuration family**, including `*.cordis.yml`, `*.cordis.snapshot.yml`, and `cordis.patch.yml`.
|
|
29
|
+
- **Harness packages whose own names contain the word**, such as `@deepseek-ai/dsh-tool-cordis`.
|
|
30
|
+
- **Upstream runtime identifiers**, such as Schemastery's `Symbol.for('schemastery')` and its `vendor:` metadata field.
|
|
31
|
+
- **Prose outside `docs/`.** `vendor/*/README.md`, package READMEs, and Agent Notes keep the names they were written with; a bare `cordis` there can also be the Python SDK's option name or an agent-preset id. Inside `docs/`, prose and every Markdown fence follow the rename.
|
|
32
|
+
|
|
33
|
+
## What your code has to change
|
|
34
|
+
|
|
35
|
+
| Site | Before | After |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Module import | `import { Context } from 'cordis'` | `import { Context } from '@deepseek-ai/cordis'` |
|
|
38
|
+
| Typed-event merge | `declare module 'cordis'` | `declare module '@deepseek-ai/cordis'` |
|
|
39
|
+
| `package.json` dependency key | `"@cordisjs/plugin-hmr": "^1.0.15"` | `"@deepseek-ai/cordis-plugin-hmr": "^1.0.15"` |
|
|
40
|
+
| `cordis.yml` plugin entry | `name: '@cordisjs/plugin-include'` | `name: '@deepseek-ai/cordis-plugin-include'` |
|
|
41
|
+
|
|
42
|
+
## Applying, verifying, and reverting
|
|
43
|
+
|
|
44
|
+
[`scripts/rescope-vendor.ts`](../scripts/rescope-vendor.ts) owns the mapping above and performs the rename, so no reference is renamed by hand:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
pnpm run rescope-vendor # report what would change
|
|
48
|
+
pnpm run rescope-vendor --apply # rewrite every reference
|
|
49
|
+
pnpm run rescope-vendor:check # assert the post-state; runs in the hygiene gate
|
|
50
|
+
pnpm run rescope-vendor --apply --reverse # return to the upstream names
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Re-apply it after an upstream sync ([procedure](../vendor/README.md)), and follow it with the regeneration it prints: `pnpm install` for the lockfile, `pnpm run gen-third-party-notices`, and `pnpm run verify-translation-pairing --write` for the bilingual pairs it touched.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Vendored 包改名
|
|
2
|
+
|
|
3
|
+
[English](rescope.md) | 中文
|
|
4
|
+
|
|
5
|
+
Cordis 框架及其基础库以源码形式 vendored 在 [`vendor/`](../vendor/README.md) 下,并以 `@deepseek-ai` scope 发布:每个 harness 包都把框架声明为 peer dependency,发布 harness 就会连带发布这一层,用上游名发布等于在 registry 上占用别人的名字。本页是名字映射表;决策与影响见 [改名 Agent Note](../.agents/notes/implemented/process/2026-08-10-vendor-package-rescope.md),上游 commit 见 [`vendor/README.md`](../vendor/README.md)。
|
|
6
|
+
|
|
7
|
+
## 名字映射
|
|
8
|
+
|
|
9
|
+
| 目录 | 上游名 | 发布名 | 版本 | 角色 |
|
|
10
|
+
|---|---|---|---|---|
|
|
11
|
+
| `vendor/cordis/` | `cordis` | `@deepseek-ai/cordis` | 4.0.0-rc.7 | 框架核心:`Context`、`Service`、`Fiber`、事件 |
|
|
12
|
+
| `vendor/cosmokit/` | `cosmokit` | `@deepseek-ai/cosmokit` | 1.8.1 | 框架与 Schemastery 共用的基础工具 |
|
|
13
|
+
| `vendor/schemastery/` | `schemastery` | `@deepseek-ai/schemastery` | 3.18.0 | 配置 schema(`Schema`),每个插件的 `Config` 都基于它 |
|
|
14
|
+
| `vendor/loader/` | `@cordisjs/plugin-loader` | `@deepseek-ai/cordis-plugin-loader` | 1.0.0-rc.5 | `cordis.yml` 装载、插件解析、repository 缓存 |
|
|
15
|
+
| `vendor/include/` | `@cordisjs/plugin-include` | `@deepseek-ai/cordis-plugin-include` | 1.0.4 | 配置包含与 patch 叠加 |
|
|
16
|
+
| `vendor/group/` | `@cordisjs/plugin-group` | `@deepseek-ai/cordis-plugin-group` | 1.0.0 | 嵌套插件分组 |
|
|
17
|
+
| `vendor/timer/` | `@cordisjs/plugin-timer` | `@deepseek-ai/cordis-plugin-timer` | 1.1.2 | `ctx` 上随 disposal 回收的定时器 |
|
|
18
|
+
| `vendor/hmr/` | `@cordisjs/plugin-hmr` | `@deepseek-ai/cordis-plugin-hmr` | 1.0.15 | 插件与配置的热替换 |
|
|
19
|
+
| `vendor/logger-console/` | `@cordisjs/plugin-logger-console` | `@deepseek-ai/cordis-plugin-logger-console` | 1.0.0 | 控制台日志导出 |
|
|
20
|
+
|
|
21
|
+
子路径导出保持原路径:`@cordisjs/plugin-loader/repository` 变成 `@deepseek-ai/cordis-plugin-loader/repository`。
|
|
22
|
+
|
|
23
|
+
## 改名不碰什么
|
|
24
|
+
|
|
25
|
+
- **目录名与版本号。** `vendor/hmr/` 仍是 `vendor/hmr/`,每个包保留清单表那行记录的上游版本,所以 vendored 树依旧读作一份上游快照。
|
|
26
|
+
- **依赖 range。** 依赖条目只换键、不换范围:`"cordis": "^4.0.0-rc.7"` 变成 `"@deepseek-ai/cordis": "^4.0.0-rc.7"`;`linkWorkspacePackages` 靠这些保留下来的范围把它们解析到固定的 workspace。
|
|
27
|
+
- **Loader 的 `cordis:` 内建前缀。** `cordis:include`、`cordis:group` 是协议前缀,不是包名。
|
|
28
|
+
- **`cordis.yml` 配置文件家族**,包括 `*.cordis.yml`、`*.cordis.snapshot.yml`、`cordis.patch.yml`。
|
|
29
|
+
- **名字里带这个词的 harness 包**,例如 `@deepseek-ai/dsh-tool-cordis`。
|
|
30
|
+
- **上游运行时标识符**,例如 Schemastery 的 `Symbol.for('schemastery')` 及其 `vendor:` 元数据字段。
|
|
31
|
+
- **`docs/` 之外的散文。** `vendor/*/README.md`、各包 README 与 Agent Note 保留写作当时的名字;那里的裸 `cordis` 也可能是 Python SDK 的选项名或某个 agent-preset 的 id。`docs/` 之内,散文与所有 Markdown 围栏都跟着改。
|
|
32
|
+
|
|
33
|
+
## 你的代码要改什么
|
|
34
|
+
|
|
35
|
+
| 位置 | 改前 | 改后 |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| 模块 import | `import { Context } from 'cordis'` | `import { Context } from '@deepseek-ai/cordis'` |
|
|
38
|
+
| 类型事件声明合并 | `declare module 'cordis'` | `declare module '@deepseek-ai/cordis'` |
|
|
39
|
+
| `package.json` 依赖键 | `"@cordisjs/plugin-hmr": "^1.0.15"` | `"@deepseek-ai/cordis-plugin-hmr": "^1.0.15"` |
|
|
40
|
+
| `cordis.yml` 插件条目 | `name: '@cordisjs/plugin-include'` | `name: '@deepseek-ai/cordis-plugin-include'` |
|
|
41
|
+
|
|
42
|
+
## 施加、核验与回退
|
|
43
|
+
|
|
44
|
+
上面这份映射由 [`scripts/rescope-vendor.ts`](../scripts/rescope-vendor.ts) 承载并执行改名,任何引用都不靠手改:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
pnpm run rescope-vendor # report what would change
|
|
48
|
+
pnpm run rescope-vendor --apply # rewrite every reference
|
|
49
|
+
pnpm run rescope-vendor:check # assert the post-state; runs in the hygiene gate
|
|
50
|
+
pnpm run rescope-vendor --apply --reverse # return to the upstream names
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
上游 sync 之后重跑它([流程](../vendor/README.md)),并接上它打印的重生成:`pnpm install` 重生成 lockfile、`pnpm run gen-third-party-notices`、以及对它触及的双语对跑 `pnpm run verify-translation-pairing --write`。
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Durable Image Attachments
|
|
2
|
+
|
|
3
|
+
English | [中文](attachment.zh.md)
|
|
4
|
+
|
|
5
|
+
The attachment seam separates binary image ownership from the session log. A producer gives validated encoded bytes to [`ctx.attachments`](#ctxattachments--attachmentstore-abstract-seam); the service publishes an immutable content-addressed reference only after the object is durable. Session events and model-visible `ImageBlock`s contain that reference and metadata, never a browser object URL, host temporary path, provider URL, or base64 payload.
|
|
6
|
+
|
|
7
|
+
Unsent browser drafts may stay in memory and native clients may stage them in operating-system temporary storage. Once the host accepts a user message, its images move below `<DSH_HOME>/attachments/v1` before the user event is appended. Structured model image output follows the same persist-before-event rule.
|
|
8
|
+
|
|
9
|
+
Source: [`packages/attachment/attachment/src/types.ts`](../../packages/attachment/attachment/src/types.ts)
|
|
10
|
+
|
|
11
|
+
## Identity and verified metadata
|
|
12
|
+
|
|
13
|
+
`AttachmentId` is a branded opaque string. The local backend currently emits `sha256:<digest>`, but consumers must neither parse that representation nor derive a filesystem path from it.
|
|
14
|
+
|
|
15
|
+
```ts type-equiv
|
|
16
|
+
/** Raster image formats accepted by the version-one attachment path. */
|
|
17
|
+
type ImageMediaType = 'image/png' | 'image/jpeg' | 'image/webp' | 'image/gif'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```ts type-equiv
|
|
21
|
+
/** Durable, serializable metadata for one immutable image object. */
|
|
22
|
+
interface ImageAttachmentRef {
|
|
23
|
+
/** Opaque storage identifier; never a filesystem path or bearer URL. */
|
|
24
|
+
attachmentId: AttachmentId
|
|
25
|
+
/** Media type verified from the stored bytes. */
|
|
26
|
+
mediaType: ImageMediaType
|
|
27
|
+
/** Exact encoded byte length. */
|
|
28
|
+
bytes: number
|
|
29
|
+
/** Intrinsic encoded width in pixels. */
|
|
30
|
+
width: number
|
|
31
|
+
/** Intrinsic encoded height in pixels. */
|
|
32
|
+
height: number
|
|
33
|
+
/** Optional display name stripped of local path information. */
|
|
34
|
+
name?: string
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```ts type-equiv
|
|
39
|
+
/** Deployment-resolved limits used by upload admission and request buffering. */
|
|
40
|
+
interface ImageAttachmentLimits {
|
|
41
|
+
maxImageBytes: number
|
|
42
|
+
maxImagesPerMessage: number
|
|
43
|
+
maxMessageImageBytes: number
|
|
44
|
+
maxImagePixels: number
|
|
45
|
+
mediaTypes: readonly ImageMediaType[]
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The reference records intrinsic dimensions and encoded length so clients can lay out history without decoding first, while every authoritative read still re-checks digest, media signature, dimensions, and metadata against the object.
|
|
50
|
+
|
|
51
|
+
## Commit and verified-read payloads
|
|
52
|
+
|
|
53
|
+
```ts type-equiv
|
|
54
|
+
/** Request to validate and durably commit one image. */
|
|
55
|
+
interface SaveImageAttachment {
|
|
56
|
+
data: Uint8Array
|
|
57
|
+
/** Caller-declared media type, checked against fully decoded bytes. */
|
|
58
|
+
mediaType: ImageMediaType
|
|
59
|
+
/** Optional browser/provider display name; it is never interpreted as a path. */
|
|
60
|
+
name?: string
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```ts type-equiv
|
|
65
|
+
/** Stored image bytes returned after reference and digest verification. */
|
|
66
|
+
interface StoredImageAttachment {
|
|
67
|
+
ref: ImageAttachmentRef
|
|
68
|
+
data: Uint8Array
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`saveImage()` validates bytes and atomically commits one object before returning its reference. `validateImage()` runs the same admission checks without persisting anything; batch callers validate every member through it before saving any member, so validation rejection leaves no partial objects behind. `readImage()` accepts a reference from an authorized session path and returns bytes only after integrity verification. The service is deliberately retention-neutral: resumed and forked sessions may share objects, so reference-aware garbage collection is deferred rather than tied to any one session's deletion.
|
|
73
|
+
|
|
74
|
+
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
75
|
+
|
|
76
|
+
<a id="cordis-surface"></a>
|
|
77
|
+
|
|
78
|
+
## Cordis API
|
|
79
|
+
|
|
80
|
+
Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
|
81
|
+
|
|
82
|
+
<a id="ctxattachments--attachmentstore-abstract-seam"></a>
|
|
83
|
+
|
|
84
|
+
### `ctx.attachments` — `AttachmentStore` (abstract seam)
|
|
85
|
+
|
|
86
|
+
Immutable binary attachment service. Implementations validate bytes before publishing a reference.
|
|
87
|
+
|
|
88
|
+
```ts cordis-catalog
|
|
89
|
+
/**
|
|
90
|
+
* Validate one image without persisting it.
|
|
91
|
+
* Batch callers validate every member before saving any member.
|
|
92
|
+
* @param input - encoded bytes, declared media type, and optional display name.
|
|
93
|
+
* @returns completion after the encoded raster has been fully decoded.
|
|
94
|
+
*/
|
|
95
|
+
abstract validateImage(input: SaveImageAttachment): Promise<void>
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Validate one ordered image batch before committing any member.
|
|
99
|
+
* Validation failures start no writes; storage failures return no partial
|
|
100
|
+
* references, although already published content-addressed objects may stay
|
|
101
|
+
* unreachable until a future retention policy collects them.
|
|
102
|
+
* @param inputs - encoded images in their owning message order.
|
|
103
|
+
* @returns durable references in the exact input order.
|
|
104
|
+
*/
|
|
105
|
+
async saveImages(inputs: readonly SaveImageAttachment[]): Promise<readonly ImageAttachmentRef[]>
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Validate and durably commit one image before its owning session event is appended.
|
|
109
|
+
* @param input - encoded bytes, declared media type, and optional display name.
|
|
110
|
+
* @returns a durable content-addressed reference.
|
|
111
|
+
*/
|
|
112
|
+
abstract saveImage(input: SaveImageAttachment): Promise<ImageAttachmentRef>
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Read one image and verify that bytes still match the recorded reference.
|
|
116
|
+
* @param ref - durable reference from the session log.
|
|
117
|
+
* @param signal - optional cancellation for backend read and verification work.
|
|
118
|
+
* @returns the verified bytes and canonical reference.
|
|
119
|
+
* @throws the signal reason when aborted, or a storage error when verification fails.
|
|
120
|
+
*/
|
|
121
|
+
abstract readImage(ref: ImageAttachmentRef, signal?: AbortSignal): Promise<StoredImageAttachment>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Source: [`packages/attachment/attachment/src/index.ts:31`](../../packages/attachment/attachment/src/index.ts)
|
|
125
|
+
<!-- END GENERATED cordis-surface -->
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# 持久图片附件
|
|
2
|
+
|
|
3
|
+
[English](attachment.md) | 中文
|
|
4
|
+
|
|
5
|
+
附件 seam 将二进制图片的所有权与会话日志分离。生产方把经过校验的编码字节交给 [`ctx.attachments`](#ctxattachments--attachmentstore-abstract-seam);只有对象完成持久化后,该服务才会发布不可变的内容寻址引用。会话事件和模型可见的 `ImageBlock` 包含该引用及其元数据,绝不包含浏览器对象 URL、宿主临时路径、提供方 URL 或 base64 数据。
|
|
6
|
+
|
|
7
|
+
未发送的浏览器草稿可以保留在内存中,原生客户端也可以将其暂存于操作系统临时存储。宿主接受用户消息后,会先把消息中的图片移到 `<DSH_HOME>/attachments/v1` 下,再追加用户事件。结构化模型图片输出遵循同样的先持久化、后追加事件规则。
|
|
8
|
+
|
|
9
|
+
来源:[`packages/attachment/attachment/src/types.ts`](../../packages/attachment/attachment/src/types.ts)
|
|
10
|
+
|
|
11
|
+
## 标识与经过校验的元数据
|
|
12
|
+
|
|
13
|
+
`AttachmentId` 是带类型标记的不透明字符串。本地后端目前生成 `sha256:<digest>`,但消费方既不能解析这种表示,也不能据此派生文件系统路径。
|
|
14
|
+
|
|
15
|
+
```ts type-equiv
|
|
16
|
+
/** Raster image formats accepted by the version-one attachment path. */
|
|
17
|
+
type ImageMediaType = 'image/png' | 'image/jpeg' | 'image/webp' | 'image/gif'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```ts type-equiv
|
|
21
|
+
/** Durable, serializable metadata for one immutable image object. */
|
|
22
|
+
interface ImageAttachmentRef {
|
|
23
|
+
/** Opaque storage identifier; never a filesystem path or bearer URL. */
|
|
24
|
+
attachmentId: AttachmentId
|
|
25
|
+
/** Media type verified from the stored bytes. */
|
|
26
|
+
mediaType: ImageMediaType
|
|
27
|
+
/** Exact encoded byte length. */
|
|
28
|
+
bytes: number
|
|
29
|
+
/** Intrinsic encoded width in pixels. */
|
|
30
|
+
width: number
|
|
31
|
+
/** Intrinsic encoded height in pixels. */
|
|
32
|
+
height: number
|
|
33
|
+
/** Optional display name stripped of local path information. */
|
|
34
|
+
name?: string
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```ts type-equiv
|
|
39
|
+
/** Deployment-resolved limits used by upload admission and request buffering. */
|
|
40
|
+
interface ImageAttachmentLimits {
|
|
41
|
+
maxImageBytes: number
|
|
42
|
+
maxImagesPerMessage: number
|
|
43
|
+
maxMessageImageBytes: number
|
|
44
|
+
maxImagePixels: number
|
|
45
|
+
mediaTypes: readonly ImageMediaType[]
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
引用记录固有尺寸和编码长度,使客户端无需先解码即可排布历史记录;每次权威读取仍会根据对象重新校验摘要、媒体签名、尺寸和元数据。
|
|
50
|
+
|
|
51
|
+
## 提交与经校验读取的数据
|
|
52
|
+
|
|
53
|
+
```ts type-equiv
|
|
54
|
+
/** Request to validate and durably commit one image. */
|
|
55
|
+
interface SaveImageAttachment {
|
|
56
|
+
data: Uint8Array
|
|
57
|
+
/** Caller-declared media type, checked against fully decoded bytes. */
|
|
58
|
+
mediaType: ImageMediaType
|
|
59
|
+
/** Optional browser/provider display name; it is never interpreted as a path. */
|
|
60
|
+
name?: string
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```ts type-equiv
|
|
65
|
+
/** Stored image bytes returned after reference and digest verification. */
|
|
66
|
+
interface StoredImageAttachment {
|
|
67
|
+
ref: ImageAttachmentRef
|
|
68
|
+
data: Uint8Array
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`saveImage()` 校验字节并以原子方式提交一个对象,之后才返回其引用。`validateImage()` 执行相同的准入检查,但不持久化任何内容;批量调用方会在保存任何成员前通过它校验所有成员,因此校验拒绝不会留下部分对象。`readImage()` 接受来自已授权会话路径的引用,只在完整性校验通过后返回字节。该服务刻意不规定保留策略:恢复和 fork 后的会话可能共享对象,因此基于引用的垃圾回收会延期实现,而不是与任何一个会话的删除绑定。
|
|
73
|
+
|
|
74
|
+
<!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
|
|
75
|
+
|
|
76
|
+
<a id="cordis-surface"></a>
|
|
77
|
+
|
|
78
|
+
## Cordis API
|
|
79
|
+
|
|
80
|
+
Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
|
81
|
+
|
|
82
|
+
<a id="ctxattachments--attachmentstore-abstract-seam"></a>
|
|
83
|
+
|
|
84
|
+
### `ctx.attachments` — `AttachmentStore` (abstract seam)
|
|
85
|
+
|
|
86
|
+
Immutable binary attachment service. Implementations validate bytes before publishing a reference.
|
|
87
|
+
|
|
88
|
+
```ts cordis-catalog
|
|
89
|
+
/**
|
|
90
|
+
* Validate one image without persisting it.
|
|
91
|
+
* Batch callers validate every member before saving any member.
|
|
92
|
+
* @param input - encoded bytes, declared media type, and optional display name.
|
|
93
|
+
* @returns completion after the encoded raster has been fully decoded.
|
|
94
|
+
*/
|
|
95
|
+
abstract validateImage(input: SaveImageAttachment): Promise<void>
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Validate one ordered image batch before committing any member.
|
|
99
|
+
* Validation failures start no writes; storage failures return no partial
|
|
100
|
+
* references, although already published content-addressed objects may stay
|
|
101
|
+
* unreachable until a future retention policy collects them.
|
|
102
|
+
* @param inputs - encoded images in their owning message order.
|
|
103
|
+
* @returns durable references in the exact input order.
|
|
104
|
+
*/
|
|
105
|
+
async saveImages(inputs: readonly SaveImageAttachment[]): Promise<readonly ImageAttachmentRef[]>
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Validate and durably commit one image before its owning session event is appended.
|
|
109
|
+
* @param input - encoded bytes, declared media type, and optional display name.
|
|
110
|
+
* @returns a durable content-addressed reference.
|
|
111
|
+
*/
|
|
112
|
+
abstract saveImage(input: SaveImageAttachment): Promise<ImageAttachmentRef>
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Read one image and verify that bytes still match the recorded reference.
|
|
116
|
+
* @param ref - durable reference from the session log.
|
|
117
|
+
* @param signal - optional cancellation for backend read and verification work.
|
|
118
|
+
* @returns the verified bytes and canonical reference.
|
|
119
|
+
* @throws the signal reason when aborted, or a storage error when verification fails.
|
|
120
|
+
*/
|
|
121
|
+
abstract readImage(ref: ImageAttachmentRef, signal?: AbortSignal): Promise<StoredImageAttachment>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Source: [`packages/attachment/attachment/src/index.ts:31`](../../packages/attachment/attachment/src/index.ts)
|
|
125
|
+
<!-- END GENERATED cordis-surface -->
|