@agent-native/core 0.102.2 → 0.103.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/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +6 -0
- package/corpus/core/docs/content/local-file-mode.mdx +99 -489
- package/corpus/core/docs/content/locales/ar-SA/local-file-mode.mdx +35 -490
- package/corpus/core/docs/content/locales/ar-SA/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/de-DE/local-file-mode.mdx +37 -491
- package/corpus/core/docs/content/locales/de-DE/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/es-ES/local-file-mode.mdx +35 -493
- package/corpus/core/docs/content/locales/es-ES/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/fr-FR/local-file-mode.mdx +38 -491
- package/corpus/core/docs/content/locales/fr-FR/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/hi-IN/local-file-mode.mdx +33 -492
- package/corpus/core/docs/content/locales/hi-IN/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/ja-JP/local-file-mode.mdx +36 -492
- package/corpus/core/docs/content/locales/ja-JP/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/ko-KR/local-file-mode.mdx +35 -490
- package/corpus/core/docs/content/locales/ko-KR/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/pt-BR/local-file-mode.mdx +35 -493
- package/corpus/core/docs/content/locales/pt-BR/template-content.mdx +10 -24
- package/corpus/core/docs/content/locales/zh-CN/local-file-mode.mdx +31 -489
- package/corpus/core/docs/content/locales/zh-CN/template-content.mdx +9 -24
- package/corpus/core/docs/content/locales/zh-TW/local-file-mode.mdx +31 -489
- package/corpus/core/docs/content/locales/zh-TW/template-content.mdx +9 -24
- package/corpus/core/docs/content/template-content.mdx +26 -42
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/cli/content-local.ts +86 -18
- package/corpus/core/src/cli/index.ts +2 -2
- package/corpus/core/src/cli/skills-content/content-skill.ts +36 -25
- package/corpus/core/src/cli/skills.ts +47 -13
- package/corpus/core/src/local-artifacts/index.ts +65 -0
- package/corpus/templates/assets/app/components/library/GenerationPresetsPanel.tsx +325 -0
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +12 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +21 -0
- package/corpus/templates/assets/app/i18n-data.ts +215 -0
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +19 -479
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +1 -1
- package/corpus/templates/assets/app/routes/brand-kits.$id_.settings.tsx +446 -0
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +12 -2
- package/corpus/templates/clips/app/components/player/settings-panel.tsx +30 -12
- package/corpus/templates/clips/app/components/player/video-player.tsx +5 -1
- package/corpus/templates/clips/app/components/recorder/microphone-visualizer.tsx +22 -3
- package/corpus/templates/clips/app/i18n/ar-SA.ts +3 -2
- package/corpus/templates/clips/app/i18n/de-DE.ts +4 -2
- package/corpus/templates/clips/app/i18n/en-US.ts +3 -2
- package/corpus/templates/clips/app/i18n/es-ES.ts +4 -2
- package/corpus/templates/clips/app/i18n/fr-FR.ts +3 -2
- package/corpus/templates/clips/app/i18n/hi-IN.ts +3 -2
- package/corpus/templates/clips/app/i18n/ja-JP.ts +4 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +3 -2
- package/corpus/templates/clips/app/i18n/pt-BR.ts +4 -2
- package/corpus/templates/clips/app/i18n/zh-CN.ts +3 -2
- package/corpus/templates/clips/app/i18n/zh-TW.ts +3 -2
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +27 -1
- package/corpus/templates/clips/server/lib/share-password.ts +6 -3
- package/corpus/templates/content/.agents/skills/content/SKILL.md +26 -39
- package/corpus/templates/content/AGENTS.md +25 -30
- package/corpus/templates/content/actions/_builder-docs-client.ts +23 -0
- package/corpus/templates/content/actions/_content-database-source-adapters.ts +21 -3
- package/corpus/templates/content/actions/_content-files.ts +338 -0
- package/corpus/templates/content/actions/_content-space-access.ts +135 -0
- package/corpus/templates/content/actions/_content-spaces.ts +640 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +90 -7
- package/corpus/templates/content/actions/_database-utils.ts +7 -1
- package/corpus/templates/content/actions/_local-file-documents.ts +0 -9
- package/corpus/templates/content/actions/_local-folder-source.ts +53 -0
- package/corpus/templates/content/actions/_property-utils.ts +9 -4
- package/corpus/templates/content/actions/add-database-item.ts +108 -65
- package/corpus/templates/content/actions/backfill-content-files.ts +22 -0
- package/corpus/templates/content/actions/connect-local-folder-source.ts +221 -0
- package/corpus/templates/content/actions/create-content-database.ts +129 -3
- package/corpus/templates/content/actions/create-document.ts +65 -55
- package/corpus/templates/content/actions/create-inline-content-database.ts +6 -1
- package/corpus/templates/content/actions/delete-content-database.ts +3 -0
- package/corpus/templates/content/actions/delete-document.ts +7 -11
- package/corpus/templates/content/actions/disconnect-local-folder-source.ts +175 -0
- package/corpus/templates/content/actions/duplicate-database-item.ts +10 -0
- package/corpus/templates/content/actions/duplicate-database-items.ts +13 -0
- package/corpus/templates/content/actions/edit-document.ts +2 -28
- package/corpus/templates/content/actions/ensure-content-spaces.ts +26 -0
- package/corpus/templates/content/actions/export-content-source.ts +47 -9
- package/corpus/templates/content/actions/get-document.ts +0 -14
- package/corpus/templates/content/actions/import-content-source.ts +43 -3
- package/corpus/templates/content/actions/list-content-spaces.ts +103 -0
- package/corpus/templates/content/actions/list-documents.ts +12 -9
- package/corpus/templates/content/actions/move-document.ts +3 -14
- package/corpus/templates/content/actions/pull-document.ts +0 -23
- package/corpus/templates/content/actions/remove-local-file-source.ts +50 -29
- package/corpus/templates/content/actions/resolve-local-folder-conflict.ts +442 -0
- package/corpus/templates/content/actions/reveal-local-source-file.ts +6 -17
- package/corpus/templates/content/actions/search-documents.ts +0 -34
- package/corpus/templates/content/actions/share-local-file-document.ts +25 -1
- package/corpus/templates/content/actions/submit-content-database-form.ts +12 -0
- package/corpus/templates/content/actions/sync-local-folder-source.ts +731 -0
- package/corpus/templates/content/actions/sync-manifest-local-folder-source.ts +123 -0
- package/corpus/templates/content/actions/update-content-database-view.ts +10 -1
- package/corpus/templates/content/actions/update-document.ts +0 -15
- package/corpus/templates/content/actions/view-screen.ts +2 -50
- package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +76 -62
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +70 -22
- package/corpus/templates/content/app/components/editor/database/grouping.ts +2 -1
- package/corpus/templates/content/app/components/editor/database/settings.tsx +23 -20
- package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
- package/corpus/templates/content/app/components/editor/database/sidebar.tsx +330 -0
- package/corpus/templates/content/app/components/editor/database/types.ts +1 -0
- package/corpus/templates/content/app/components/editor/database/view-config.ts +3 -1
- package/corpus/templates/content/app/components/layout/Layout.tsx +25 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +209 -113
- package/corpus/templates/content/app/components/sidebar/select-content-space.ts +31 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +16 -0
- package/corpus/templates/content/app/hooks/use-content-spaces.ts +39 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +11 -0
- package/corpus/templates/content/app/i18n-data.ts +75 -0
- package/corpus/templates/content/app/routes/_app.local-files.tsx +174 -65
- package/corpus/templates/content/changelog/2026-07-16-content-callouts-can-now-be-reviewed-and-published-to-builder.md +6 -0
- package/corpus/templates/content/changelog/2026-07-16-heading-5-and-heading-6-are-available-from-the-editor-slash-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-16-organize-every-workspace-through-a-customizable-files-databa.md +6 -0
- package/corpus/templates/content/parity/matrix.md +2 -1
- package/corpus/templates/content/parity/matrix.ts +37 -1
- package/corpus/templates/content/scripts/dev-database.mjs +7 -5
- package/corpus/templates/content/server/db/schema.ts +113 -40
- package/corpus/templates/content/server/lib/document-context.ts +15 -1
- package/corpus/templates/content/server/lib/notion-sync.ts +6 -0
- package/corpus/templates/content/server/plugins/db.ts +153 -0
- package/corpus/templates/content/shared/api.ts +17 -3
- package/corpus/templates/content/shared/builder-mdx.ts +163 -16
- package/corpus/templates/design/.agents/skills/design-templates/SKILL.md +59 -0
- package/corpus/templates/design/AGENTS.md +6 -1
- package/corpus/templates/design/actions/create-design-from-template.ts +19 -7
- package/corpus/templates/design/actions/list-design-templates.ts +69 -21
- package/corpus/templates/design/actions/navigate.ts +2 -2
- package/corpus/templates/design/actions/view-screen.ts +15 -2
- package/corpus/templates/design/agent-native.app-skill.json +5 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +281 -56
- package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +14 -2
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +3 -2
- package/corpus/templates/design/app/i18n/zh-TW.ts +3 -3
- package/corpus/templates/design/app/i18n-data.ts +21 -2
- package/corpus/templates/design/app/i18n-template-feature.ts +218 -10
- package/corpus/templates/design/app/pages/Index.tsx +195 -24
- package/corpus/templates/design/app/pages/Templates.tsx +144 -55
- package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +12 -1
- package/corpus/templates/design/changelog/2026-07-14-templates-now-appear-in-the-new-design-picker-with-previews-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-15-templates-now-open-immediately-after-copying-even-while-the-.md +6 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/mail/AGENTS.md +23 -18
- package/corpus/templates/mail/actions/bulk-archive.ts +32 -28
- package/corpus/templates/mail/actions/mark-read.ts +131 -20
- package/corpus/templates/mail/actions/mark-thread-read.ts +1 -1
- package/corpus/templates/mail/actions/move-email.ts +30 -24
- package/corpus/templates/mail/actions/send-email.ts +73 -68
- package/corpus/templates/mail/changelog/2026-07-15-unread-inbox-cleanup-now-completes-reliably.md +6 -0
- package/corpus/templates/mail/server/handlers/emails.ts +218 -209
- package/corpus/templates/mail/server/lib/bulk-mark-read.ts +30 -0
- package/corpus/templates/mail/server/lib/email-state.ts +198 -113
- package/corpus/templates/mail/server/lib/google-auth.ts +218 -25
- package/corpus/templates/mail/server/lib/jobs.ts +69 -74
- package/corpus/templates/mail/server/lib/local-email-store.ts +265 -0
- package/corpus/templates/mail/server/plugins/agent-chat.ts +6 -0
- package/dist/cli/content-local.d.ts +1 -0
- package/dist/cli/content-local.d.ts.map +1 -1
- package/dist/cli/content-local.js +75 -17
- package/dist/cli/content-local.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills-content/content-skill.d.ts +1 -1
- package/dist/cli/skills-content/content-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/content-skill.js +36 -25
- package/dist/cli/skills-content/content-skill.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +47 -14
- package/dist/cli/skills.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/local-artifacts/index.d.ts +10 -0
- package/dist/local-artifacts/index.d.ts.map +1 -1
- package/dist/local-artifacts/index.js +39 -0
- package/dist/local-artifacts/index.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/docs/content/local-file-mode.mdx +99 -489
- package/docs/content/locales/ar-SA/local-file-mode.mdx +35 -490
- package/docs/content/locales/ar-SA/template-content.mdx +10 -24
- package/docs/content/locales/de-DE/local-file-mode.mdx +37 -491
- package/docs/content/locales/de-DE/template-content.mdx +10 -24
- package/docs/content/locales/es-ES/local-file-mode.mdx +35 -493
- package/docs/content/locales/es-ES/template-content.mdx +10 -24
- package/docs/content/locales/fr-FR/local-file-mode.mdx +38 -491
- package/docs/content/locales/fr-FR/template-content.mdx +10 -24
- package/docs/content/locales/hi-IN/local-file-mode.mdx +33 -492
- package/docs/content/locales/hi-IN/template-content.mdx +10 -24
- package/docs/content/locales/ja-JP/local-file-mode.mdx +36 -492
- package/docs/content/locales/ja-JP/template-content.mdx +10 -24
- package/docs/content/locales/ko-KR/local-file-mode.mdx +35 -490
- package/docs/content/locales/ko-KR/template-content.mdx +10 -24
- package/docs/content/locales/pt-BR/local-file-mode.mdx +35 -493
- package/docs/content/locales/pt-BR/template-content.mdx +10 -24
- package/docs/content/locales/zh-CN/local-file-mode.mdx +31 -489
- package/docs/content/locales/zh-CN/template-content.mdx +9 -24
- package/docs/content/locales/zh-TW/local-file-mode.mdx +31 -489
- package/docs/content/locales/zh-TW/template-content.mdx +9 -24
- package/docs/content/template-content.mdx +26 -42
- package/package.json +1 -1
- package/corpus/templates/assets/app/components/library/EditLibraryDialog.tsx +0 -126
|
@@ -1,523 +1,65 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
3
|
-
description: "
|
|
2
|
+
title: "本地文件夹源"
|
|
3
|
+
description: "将 Markdown 和 MDX 文件夹连接到由数据库支持的 Content 空间。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# 本地文件夹源
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
而不是 SQL 支持的应用记录。
|
|
8
|
+
Content 现在只有一个数据模型:每个页面都存储在 SQL 中,属于一个**空间**,并且
|
|
9
|
+
是该空间系统 **Files** 数据库的条目。本地文件夹是连接到 Files 的数据源,而不是
|
|
10
|
+
另一种应用模式。`AGENT_NATIVE_MODE` 开关已被移除。
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
也可以由 Codex、Claude 代码、Agent-Native 侧边栏代理或普通编辑
|
|
17
|
-
编辑器。
|
|
12
|
+
每位用户有个人空间,每个可访问的组织有组织空间;个人 **Workspaces** 目录决定
|
|
13
|
+
应用中显示哪些空间。Files 是普通的 Content 数据库,因此它的属性、筛选、排序、
|
|
14
|
+
分组和保存视图也可以呈现为侧边栏。
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
您的文档以文件形式存在,而应用程序添加了可视化编辑器、代理 actions,
|
|
21
|
-
可共享的副本,以及丰富的交互式 MDX 组件。
|
|
16
|
+
## 连接文件夹
|
|
22
17
|
|
|
23
|
-
|
|
18
|
+
通过浏览器或 Agent Native Desktop 选择文件夹,将它连接到现有空间,或创建一个
|
|
19
|
+
由该文件夹支持的私有空间。SQL 只保存不透明的连接 ID、相对路径、哈希和数据源
|
|
20
|
+
元数据;不保存绝对路径、浏览器句柄或原始文件正文。
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- 需要从本地 React 代码生成的交互式自定义 MDX 块的文档
|
|
30
|
-
- 应用程序工件应该易于编码代理检查和修补
|
|
22
|
+
可选策略为 `database_primary`、`source_primary` 和
|
|
23
|
+
`reviewed_bidirectional`。同步会把文件实体化为普通 SQL 页面。如果文件与 Content
|
|
24
|
+
页面同时更改,系统会创建待审核变更,而不会悄悄覆盖任一方。断开连接会保留页面
|
|
25
|
+
和本地文件。
|
|
31
26
|
|
|
32
|
-
|
|
33
|
-
多用户共享、SQL 支持的权限、评论、版本历史记录和
|
|
34
|
-
没有本地文件系统访问权限的生产托管。
|
|
35
|
-
|
|
36
|
-
## 心智模型
|
|
37
|
-
|
|
38
|
-
有两种真相来源模式:
|
|
39
|
-
|
|
40
|
-
| 模式 | 事实来源 | 最适合 |
|
|
41
|
-
| ------------ | --------------------------------- | ------------------------------------------------------- |
|
|
42
|
-
| 数据库模式 | SQL 行至 Drizzle | 托管应用、协作、共享、评论、版本历史记录 |
|
|
43
|
-
| 本地文件模式 | `agent-native.json`声明的Repo文件 | 本地/开发工作流程、Git 审核、编码代理编辑、文件本机内容 |
|
|
44
|
-
|
|
45
|
-
UI 和特工 actions 在两种模式下都应保持相同的形状。内容
|
|
46
|
-
编辑器仍然编辑文档;区别在于这些文档是否解析
|
|
47
|
-
到 SQL 行或本地文件。
|
|
48
|
-
|
|
49
|
-
<Diagram id="doc-block-bob9ei" title={"相同的行为,两个事实来源"} summary={"UI 和代理在两种模式下调用相同的操作。操作层决定每个调用是否解析为 SQL 行或存储库文件。"}>
|
|
50
|
-
|
|
51
|
-
```html
|
|
52
|
-
<div class="diagram-mode">
|
|
53
|
-
<div class="diagram-col entry">
|
|
54
|
-
<div class="diagram-node">内容 UI</div>
|
|
55
|
-
<div class="diagram-node">
|
|
56
|
-
代理 + actions<br /><small class="diagram-muted"
|
|
57
|
-
>list/get/update-document</small
|
|
58
|
-
>
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
61
|
-
<div class="diagram-arrow diagram-muted" aria-hidden="true">→</div>
|
|
62
|
-
<div class="diagram-row resolve">
|
|
63
|
-
<div class="diagram-panel" data-rough>
|
|
64
|
-
<span class="diagram-pill accent">数据库模式</span
|
|
65
|
-
><small class="diagram-muted">SQL rows via Drizzle</small
|
|
66
|
-
><small class="diagram-muted">托管 · 分享 · 评论 · 历史</small>
|
|
67
|
-
</div>
|
|
68
|
-
<div class="diagram-panel" data-rough>
|
|
69
|
-
<span class="diagram-pill ok">Local File Mode</span
|
|
70
|
-
><small class="diagram-muted">repo files via agent-native.json</small
|
|
71
|
-
><small class="diagram-muted">Git 评审 · 编码代理编辑</small>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
```css
|
|
78
|
-
.diagram-mode {
|
|
79
|
-
display: flex;
|
|
80
|
-
align-items: center;
|
|
81
|
-
gap: 14px;
|
|
82
|
-
flex-wrap: wrap;
|
|
83
|
-
}
|
|
84
|
-
.diagram-mode .diagram-col {
|
|
85
|
-
display: flex;
|
|
86
|
-
flex-direction: column;
|
|
87
|
-
gap: 10px;
|
|
88
|
-
}
|
|
89
|
-
.diagram-mode .diagram-arrow {
|
|
90
|
-
font-size: 22px;
|
|
91
|
-
line-height: 1;
|
|
92
|
-
}
|
|
93
|
-
.diagram-mode .resolve {
|
|
94
|
-
display: flex;
|
|
95
|
-
gap: 12px;
|
|
96
|
-
flex-wrap: wrap;
|
|
97
|
-
}
|
|
98
|
-
.diagram-mode .diagram-panel {
|
|
99
|
-
display: flex;
|
|
100
|
-
flex-direction: column;
|
|
101
|
-
gap: 4px;
|
|
102
|
-
padding: 12px 14px;
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
</Diagram>
|
|
107
|
-
|
|
108
|
-
## 示例存储库
|
|
109
|
-
|
|
110
|
-
内容工作区可以像这样小:
|
|
111
|
-
|
|
112
|
-
<FileTree
|
|
113
|
-
id="doc-block-1mk9qsi"
|
|
114
|
-
title={"一个 Content workspace repo"}
|
|
115
|
-
entries={[
|
|
116
|
-
{
|
|
117
|
-
path: "agent-native.json",
|
|
118
|
-
note: "声明哪些文件夹是内容根以及它们的类型",
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
path: "docs/",
|
|
122
|
-
note: "内容根:在侧边栏中显示为页面",
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
path: "docs/getting-started.mdx",
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
path: "docs/guides/custom-components.mdx",
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
path: "blog/",
|
|
132
|
-
note: "内容根",
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
path: "blog/launch-post.mdx",
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
path: "resources/",
|
|
139
|
-
note: "内容根",
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
path: "resources/messaging/positioning.md",
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
path: "components/",
|
|
146
|
-
note: "不是内容根:MDX 可导入的 preview 组件库",
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
path: "components/FrameworkTabs.tsx",
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
path: "components/Callout.tsx",
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
path: "extensions/",
|
|
156
|
-
note: "不是内容根:本地 extension 库(沙盒 widgets)",
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
path: "extensions/doc-status/extension.json",
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
path: "extensions/doc-status/index.html",
|
|
163
|
-
},
|
|
164
|
-
]}
|
|
165
|
-
/>
|
|
166
|
-
|
|
167
|
-
在本地文件模式下,内容侧边栏显示 `docs/`、`blog/` 和
|
|
168
|
-
`resources/` 树为页面。选择 `docs/getting-started.mdx` 打开
|
|
169
|
-
标准内容编辑器中的文件;在 UI 中编辑写回
|
|
170
|
-
`docs/getting-started.mdx`.
|
|
171
|
-
|
|
172
|
-
`components/` 不是内容根。 MDX
|
|
173
|
-
文件可以导入或引用。编辑器可以渲染简单的本地MDX组件
|
|
174
|
-
无需您克隆或分叉整个内容应用。
|
|
175
|
-
|
|
176
|
-
`extensions/` 也不是内容根。它是一个本地扩展库:
|
|
177
|
-
小型沙盒小部件,可以在应用程序槽中呈现,同时其源保留在
|
|
178
|
-
存储库。
|
|
179
|
-
|
|
180
|
-
## 将内容安装到存储库中
|
|
181
|
-
|
|
182
|
-
对于现有文档、博客或 MDX 工作区,安装内容本地文件
|
|
183
|
-
技能:
|
|
27
|
+
## 从仓库启动
|
|
184
28
|
|
|
185
29
|
```bash
|
|
186
|
-
npx @agent-native/core@latest
|
|
30
|
+
npx @agent-native/core@latest content .
|
|
187
31
|
```
|
|
188
32
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
- 工作区级别的 `mode: "local-files"`
|
|
193
|
-
- `apps.content.mode: "local-files"`
|
|
194
|
-
- `docs/`、`blog/`、`content/` 和 `resources/` 的内容根
|
|
195
|
-
- `components/` 用于本地 MDX 组件
|
|
196
|
-
- `extensions/` 用于本地扩展小部件
|
|
197
|
-
|
|
198
|
-
安装的技能告诉编码代理使用内容actions
|
|
199
|
-
(`list-documents`, `get-document`, `edit-document`, `update-document`,
|
|
200
|
-
`share-local-file-document` 和组件文件 actions)(当本地内容应用时)
|
|
201
|
-
或 Agent Native 桌面桥公开它们。如果没有桥在运行,则该技能
|
|
202
|
-
退回到安全的直接存储库编辑,同时保留 frontmatter、导入、JSX,
|
|
203
|
-
和未知的 MDX。
|
|
33
|
+
此命令启动正常的数据库版 Content,将文件夹注册为数据源并打开连接界面;它不会
|
|
34
|
+
设置模式环境变量。
|
|
204
35
|
|
|
205
36
|
## 配置
|
|
206
37
|
|
|
207
|
-
将 `agent-native.json` 添加到存储库或工作区根目录:
|
|
208
|
-
|
|
209
38
|
```json
|
|
210
39
|
{
|
|
211
40
|
"version": 1,
|
|
212
41
|
"apps": {
|
|
213
42
|
"content": {
|
|
214
|
-
"mode": "local-files",
|
|
215
43
|
"roots": [
|
|
216
44
|
{
|
|
217
45
|
"name": "Docs",
|
|
218
46
|
"path": "docs",
|
|
219
47
|
"kind": "docs",
|
|
220
|
-
"extensions": [".md", ".mdx"]
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
"extensions": [".md", ".mdx"]
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
"name": "Resources",
|
|
230
|
-
"path": "resources",
|
|
231
|
-
"kind": "resources",
|
|
232
|
-
"extensions": [".md", ".mdx"]
|
|
48
|
+
"extensions": [".md", ".mdx"],
|
|
49
|
+
"source": {
|
|
50
|
+
"type": "local-folder",
|
|
51
|
+
"connectionId": "local-folder:<opaque-id>",
|
|
52
|
+
"truthPolicy": "source_primary"
|
|
53
|
+
}
|
|
233
54
|
}
|
|
234
55
|
],
|
|
235
56
|
"components": "components",
|
|
236
|
-
"extensions": "extensions"
|
|
237
|
-
"hide": ["**/_*.md", "**/_*.mdx"]
|
|
57
|
+
"extensions": "extensions"
|
|
238
58
|
}
|
|
239
59
|
}
|
|
240
60
|
}
|
|
241
61
|
```
|
|
242
62
|
|
|
243
|
-
|
|
244
|
-
`
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
## 内容文件格式
|
|
248
|
-
|
|
249
|
-
内容为 Markdown 和 MDX。 Frontmatter 保存页面元数据,正文为
|
|
250
|
-
可编辑文档:
|
|
251
|
-
|
|
252
|
-
```mdx
|
|
253
|
-
---
|
|
254
|
-
title: "开始使用"
|
|
255
|
-
icon: "sparkles"
|
|
256
|
-
isFavorite: true
|
|
257
|
-
updatedAt: "2026-06-12T20:00:00.000Z"
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
# 开始使用
|
|
261
|
-
|
|
262
|
-
Use <FrameworkTabs value="react" /> to show framework-specific code.
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
标题来自 `title` frontmatter(如果存在),否则来自
|
|
266
|
-
文件名。编辑器保留了 MDX 源代码,但尚无法进行可视化编辑,因此
|
|
267
|
-
编码代理和普通文本编辑器仍然是安全的逃生舱口。
|
|
268
|
-
|
|
269
|
-
## 自定义 MDX 组件
|
|
270
|
-
|
|
271
|
-
内容可以从配置的 `components` 文件夹中预览本地组件。
|
|
272
|
-
这适用于文档样式的 MDX 组件,例如选项卡、标注、包
|
|
273
|
-
安装片段或特定于框架的代码块。
|
|
274
|
-
|
|
275
|
-
例如,在您的内容旁边添加一个交互式组件:
|
|
276
|
-
|
|
277
|
-
```tsx
|
|
278
|
-
// components/ImpactCounter.tsx
|
|
279
|
-
import { useState } from "react";
|
|
280
|
-
|
|
281
|
-
export function ImpactCounter({
|
|
282
|
-
label = "points",
|
|
283
|
-
accent = "blue",
|
|
284
|
-
featured = false,
|
|
285
|
-
}: {
|
|
286
|
-
label?: string;
|
|
287
|
-
accent?: "blue" | "green" | "purple";
|
|
288
|
-
featured?: boolean;
|
|
289
|
-
}) {
|
|
290
|
-
const [count, setCount] = useState(3);
|
|
291
|
-
const accentClass =
|
|
292
|
-
accent === "green"
|
|
293
|
-
? "border-green-300 bg-green-50"
|
|
294
|
-
: accent === "purple"
|
|
295
|
-
? "border-purple-300 bg-purple-50"
|
|
296
|
-
: "border-blue-300 bg-blue-50";
|
|
297
|
-
|
|
298
|
-
return (
|
|
299
|
-
<div className={`rounded-md border p-4 ${accentClass}`}>
|
|
300
|
-
<div className="text-sm text-muted-foreground">Launch impact</div>
|
|
301
|
-
<div className="mt-1 text-3xl font-semibold">
|
|
302
|
-
{count} {label}
|
|
303
|
-
</div>
|
|
304
|
-
{featured ? <div className="mt-1 text-sm">Featured metric</div> : null}
|
|
305
|
-
<button
|
|
306
|
-
type="button"
|
|
307
|
-
className="mt-3 rounded border px-3 py-1 text-sm"
|
|
308
|
-
onClick={() => setCount((value) => value + 1)}
|
|
309
|
-
>
|
|
310
|
-
Add point
|
|
311
|
-
</button>
|
|
312
|
-
</div>
|
|
313
|
-
);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
export const ImpactCounterInputs = {
|
|
317
|
-
label: {
|
|
318
|
-
type: "string",
|
|
319
|
-
label: "Metric label",
|
|
320
|
-
default: "points",
|
|
321
|
-
},
|
|
322
|
-
accent: {
|
|
323
|
-
type: "select",
|
|
324
|
-
label: "Accent",
|
|
325
|
-
options: ["blue", "green", "purple"],
|
|
326
|
-
default: "blue",
|
|
327
|
-
},
|
|
328
|
-
featured: {
|
|
329
|
-
type: "boolean",
|
|
330
|
-
label: "Featured",
|
|
331
|
-
default: false,
|
|
332
|
-
},
|
|
333
|
-
};
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
然后从任何本地 MDX 文件使用它:
|
|
337
|
-
|
|
338
|
-
```mdx
|
|
339
|
-
---
|
|
340
|
-
title: "发布说明"
|
|
341
|
-
---
|
|
342
|
-
|
|
343
|
-
# 发布说明
|
|
344
|
-
|
|
345
|
-
<ImpactCounter label="wins" />
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
内容开发服务器发现 PascalCase 命名导出和 PascalCase 默认
|
|
349
|
-
从 `components/` 下的 `.tsx`、`.jsx`、`.ts` 和 `.js` 文件导出。那些
|
|
350
|
-
组件在编辑器内呈现并出现在
|
|
351
|
-
**本地组件**。斜线插入创建一个最小的标签,例如
|
|
352
|
-
`<ImpactCounter />`;需要时在 MDX 源中添加 props。
|
|
353
|
-
|
|
354
|
-
组件执行有意成为本地开发/桌面桥接功能,而不是
|
|
355
|
-
普通托管浏览器文件夹访问。如果你打开`content.agent-native.com`,
|
|
356
|
-
选择**本地文件**,并在Chrome中选择一个文件夹,应用程序可以读写
|
|
357
|
-
通过浏览器文件系统访问`.md`和`.mdx`文件API,但是
|
|
358
|
-
Chrome 不会公开 Vite 编译的绝对文件夹路径
|
|
359
|
-
`components/*.tsx`。要预览和热重载自定义 React 组件,请运行
|
|
360
|
-
本地内容或使用 Agent Native Desktop,以便受信任的本地网桥可以
|
|
361
|
-
将所选工作区注册到本地内容开发服务器。在该模式下,
|
|
362
|
-
通过Vite编辑现有组件文件热重载,并添加或
|
|
363
|
-
删除组件文件会重新加载组件注册表和斜杠菜单。
|
|
364
|
-
|
|
365
|
-
代理还可以使用这些已注册的组件文件。使用
|
|
366
|
-
`list-local-component-files` 找到注册的工作空间id,然后
|
|
367
|
-
`write-local-component-file` 创建或更新 `.tsx`、`.jsx`、`.ts` 或
|
|
368
|
-
`.js` 文件位于工作区的 `components/` 文件夹下。 MDX 文件仍然是
|
|
369
|
-
组件使用的真实来源;组件文件保持正常仓库
|
|
370
|
-
使用 Git 审核源文件。
|
|
371
|
-
|
|
372
|
-
如果组件导出输入元数据,则在编辑器中选择该组件
|
|
373
|
-
在组件的右上角显示一个编辑按钮。支持的输入类型
|
|
374
|
-
为 `string`、`textarea`、`number`、`boolean` 和 `select`。表格写
|
|
375
|
-
更改回 MDX 标签,因此本地文件仍然是事实来源。
|
|
376
|
-
元数据可以导出为 `ComponentNameInputs`、`ComponentNameConfig.inputs`、
|
|
377
|
-
`Component.inputs`,或`agentNative.inputs`。
|
|
378
|
-
|
|
379
|
-
带有文字属性的简单组件标签可以内联预览:
|
|
380
|
-
|
|
381
|
-
```mdx
|
|
382
|
-
<FrameworkTabs value="react" />
|
|
383
|
-
|
|
384
|
-
<Callout tone="warning">
|
|
385
|
-
|
|
386
|
-
This setting affects production deploys.
|
|
387
|
-
|
|
388
|
-
</Callout>
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
复杂的 JSX 表达式保留在源代码中。如果编辑者不能安全
|
|
392
|
-
预览组件道具,它显示一个警告占位符而不是
|
|
393
|
-
默默地丢弃数据。
|
|
394
|
-
|
|
395
|
-
## 共享本地文件
|
|
396
|
-
|
|
397
|
-
本地文件不会直接共享,因为其他用户无法读取路径
|
|
398
|
-
你的机器。内容工具栏的共享按钮创建或刷新
|
|
399
|
-
所选文件的数据库支持副本,导航到该副本,然后打开
|
|
400
|
-
正常共享弹出窗口。原始本地文件保留在本地文件下;
|
|
401
|
-
数据库副本出现在本地文件模式下的共享副本下,并使用
|
|
402
|
-
标准文档共享模型。
|
|
403
|
-
|
|
404
|
-
## 本地扩展
|
|
405
|
-
|
|
406
|
-
本地文件模式还可以从配置中加载存储库支持的扩展
|
|
407
|
-
`extensions` 文件夹。每个扩展都是一个带有 `extension.json`
|
|
408
|
-
清单和 HTML 条目文件:
|
|
409
|
-
|
|
410
|
-
```text
|
|
411
|
-
extensions/
|
|
412
|
-
doc-status/
|
|
413
|
-
extension.json
|
|
414
|
-
index.html
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
```json
|
|
418
|
-
{
|
|
419
|
-
"id": "doc-status",
|
|
420
|
-
"name": "Doc Status",
|
|
421
|
-
"description": "Shows metadata for the selected Content file.",
|
|
422
|
-
"entry": "index.html",
|
|
423
|
-
"slots": ["content.sidebar.bottom"],
|
|
424
|
-
"permissions": {
|
|
425
|
-
"appActions": ["list-documents"],
|
|
426
|
-
"extensionData": true
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
`index.html` 与普通使用的 Alpine/Tailwind 扩展主体格式相同
|
|
432
|
-
数据库支持的扩展。当内容应用看到本地扩展程序时
|
|
433
|
-
声明了 `content.sidebar.bottom`,它在底部呈现该扩展
|
|
434
|
-
内容侧边栏。主机通过选择的`window.slotContext`
|
|
435
|
-
文档 ID、标题、源元数据以及内容是否处于本地文件模式。
|
|
436
|
-
|
|
437
|
-
本地扩展由应用程序预览,但作为文件进行编辑。扩展
|
|
438
|
-
列表显示它们带有本地文件徽章,整页查看器指向
|
|
439
|
-
入口文件。 SQL 支持的扩展 actions,例如更新、删除、共享和
|
|
440
|
-
历史记录不适用;使用您的编辑器、Codex、Claude 代码或 Git 历史记录
|
|
441
|
-
源代码更改。
|
|
442
|
-
|
|
443
|
-
对于 v1,本地扩展有意保守:
|
|
444
|
-
|
|
445
|
-
- 他们可以将 `extensionData` 用于自己的小型运行时状态
|
|
446
|
-
- 他们只能调用`extension.json`中列出的`appAction`
|
|
447
|
-
- 原始 SQL 助手和外部 `extensionFetch` 已禁用
|
|
448
|
-
- slot 目标在 `extension.json` 中声明,而不是通过 SQL 安装
|
|
449
|
-
|
|
450
|
-
这为本地工作空间提供了类似黑曜石的插件界面,而无需让
|
|
451
|
-
任意存储库文件继承数据库支持的扩展的所有功能。
|
|
452
|
-
|
|
453
|
-
## 应用程序如何使用它
|
|
454
|
-
|
|
455
|
-
本地文件模式是通过框架的本地工件助手实现的。
|
|
456
|
-
应用程序声明其拥有的工件类型的根,然后读取和写入
|
|
457
|
-
通过 UI 和代理已经使用的相同操作界面。
|
|
458
|
-
|
|
459
|
-
对于内容,这意味着:
|
|
460
|
-
|
|
461
|
-
- `list-documents` 列出配置的 `.md` 和 `.mdx` 文件。
|
|
462
|
-
- `get-document` 读取选定的本地文件。
|
|
463
|
-
- `update-document` 写入选定的本地文件。
|
|
464
|
-
- `create-document` 在所选文件夹中创建新的本地 `.mdx` 文件。
|
|
465
|
-
- `delete-document`删除本地文件。
|
|
466
|
-
- 搜索在配置的本地文件中运行。
|
|
467
|
-
|
|
468
|
-
不能从内容 UI 中移动、重命名和重新排序本地文件页面
|
|
469
|
-
尚支持。在工作区或使用编码代理执行这些操作;
|
|
470
|
-
内容侧边栏将反映生成的文件树。
|
|
471
|
-
|
|
472
|
-
这使代理合约变得简单:代理可以继续使用内容 actions,
|
|
473
|
-
而这些 actions 决定目标是 SQL 支持的还是文件支持的。
|
|
474
|
-
|
|
475
|
-
随着时间的推移,其他应用程序可以采用相同的模式。幻灯片应用程序可以映射
|
|
476
|
-
`slides/*.mdx` 到甲板,计划应用程序可以将 `plans/*` 映射到计划文档,以及
|
|
477
|
-
仪表板应用程序可以将 `dashboards/*.mdx` 映射到仪表板。那些特定于应用程序的
|
|
478
|
-
文件夹是位于同一本地工件合约之上的约定。
|
|
479
|
-
|
|
480
|
-
## 本地文件与导出/导入
|
|
481
|
-
|
|
482
|
-
内容有两种不同的文件工作流程:
|
|
483
|
-
|
|
484
|
-
| 工作流程 | 发生了什么 |
|
|
485
|
-
| ------------------------ | ------------------------------------------------------------------------ |
|
|
486
|
-
| `/local-files` 导出/导入 | 数据库模式仍然是事实来源。文件是您导出、编辑、预览和导入的显式同步表面。 |
|
|
487
|
-
| 本地文件模式 | 文件是真相的来源。内容侧边栏和编辑器直接对本地文件进行操作。 |
|
|
488
|
-
|
|
489
|
-
当您需要偶尔查看托管工作区的文件时,请使用导出/导入。
|
|
490
|
-
当存储库本身是工作区时,使用本地文件模式。
|
|
491
|
-
|
|
492
|
-
## 历史与合作
|
|
493
|
-
|
|
494
|
-
本地文件模式依赖于文件本机历史记录:
|
|
495
|
-
|
|
496
|
-
- 向 Git 提交重要更改
|
|
497
|
-
- 使用拉取请求进行审核
|
|
498
|
-
- 让编码代理直接编辑相同的文件
|
|
499
|
-
- 使用普通文件差异来了解更改
|
|
500
|
-
|
|
501
|
-
数据库模式仍然更适合托管协作功能,例如
|
|
502
|
-
共享、评论、SQL 支持的版本历史记录和实时多用户编辑。
|
|
503
|
-
|
|
504
|
-
提供者同步可以分层在任一模式之上。例如,文档存储库可以
|
|
505
|
-
添加 actions,将内容从 CMS 提取到本地 MDX 文件或推送所选内容
|
|
506
|
-
本地文件返回到那个CMS。
|
|
507
|
-
|
|
508
|
-
## 安全生产
|
|
509
|
-
|
|
510
|
-
本地文件模式为应用程序 actions 提供对配置的工作区的直接写入访问权限
|
|
511
|
-
文件。这适合本地开发和可信单租户文件
|
|
512
|
-
桥梁,但它不是默认的生产安全模型。
|
|
513
|
-
|
|
514
|
-
当 `NODE_ENV=production` 时,框架拒绝 `local-files` 模式,除非您
|
|
515
|
-
设置:
|
|
516
|
-
|
|
517
|
-
```bash
|
|
518
|
-
AGENT_NATIVE_ALLOW_LOCAL_FILES_IN_PRODUCTION=true
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
仅针对受信任的单租户部署进行设置,其中每个人都可以使用
|
|
522
|
-
应用程序可以读取和写入配置的文件。对于普通托管,
|
|
523
|
-
多用户应用程序,使用数据库模式和SQL支持的共享。
|
|
63
|
+
迁移时请删除 `mode: "local-files"` 和 `AGENT_NATIVE_MODE=local-files`,保留
|
|
64
|
+
roots 并添加 `source`。frontmatter ID 能在重命名和移动时保持页面身份。本地组件
|
|
65
|
+
和扩展仍通过受信任的本地桥接加载。
|
|
@@ -89,9 +89,8 @@ description: "MDX 的开源 Obsidian:编辑本地 Markdown/MDX 文件,生成
|
|
|
89
89
|
- **在树中组织页面** — 无限嵌套、拖动重新排序、收藏您经常使用的页面。
|
|
90
90
|
- **搜索所有内容**,通过标题和内容进行全文搜索。
|
|
91
91
|
- **像 Obsidian 一样编辑本地 Markdown/MDX 文件。**使用 `/local-files` 视图
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
选定的 `.md` 或 `.mdx` 文件。
|
|
92
|
+
将文件夹连接到 Files,使用自己的工具编辑并同步更改,然后在 SQL 应用中
|
|
93
|
+
审核冲突。
|
|
95
94
|
- **生成丰富的交互式自定义块。**注册本地React组件,
|
|
96
95
|
将它们插入为 MDX,并让代理创建或更新组件文件
|
|
97
96
|
您的文档。
|
|
@@ -134,32 +133,18 @@ Native Desktop,并将当前文档树导出为Markdown/MDX
|
|
|
134
133
|
评论、权限和实时协作;本地文件夹是显式的
|
|
135
134
|
同步表面。
|
|
136
135
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
`content/` 和 `resources/`。然后标准内容编辑器填充其
|
|
141
|
-
来自本地 `.md`/`.mdx` 文件的左侧边栏,并将编辑写回
|
|
142
|
-
通过普通文件actions选择文件。将其用于回购优先文档,
|
|
143
|
-
由 MDX 驱动的博客、资源库或黑曜石风格的个人内容
|
|
144
|
-
组件;当您需要托管协作时切换回数据库模式并且
|
|
145
|
-
SQL 支持的共享。请参阅 [Local File Mode](/docs/local-file-mode)
|
|
146
|
-
独立存储库布局、配置、自定义 MDX 组件、本地
|
|
147
|
-
`extensions/`小部件、安全生产指南。
|
|
136
|
+
本地文件夹现在与所有页面使用相同的 SQL 模型。每个页面属于一个空间和它的
|
|
137
|
+
Files 数据库;文件夹是该数据库的数据源适配器。策略、冲突、MDX 组件和旧模式
|
|
138
|
+
迁移请参阅[本地文件夹源](/docs/local-file-mode)。
|
|
148
139
|
|
|
149
|
-
|
|
140
|
+
要在现有仓库中打开 Content:
|
|
150
141
|
|
|
151
142
|
```bash
|
|
152
|
-
npx @agent-native/core@latest
|
|
143
|
+
npx @agent-native/core@latest content .
|
|
153
144
|
```
|
|
154
145
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
和`resources/`。当本地内容应用、Agent Native 桌面或受信任
|
|
158
|
-
本地网桥正在运行,代理应使用内容actions,例如
|
|
159
|
-
`list-documents`、`get-document`、`edit-document`、`update-document` 和
|
|
160
|
-
`share-local-file-document` 而不是原始文件系统写入。没有那个本地
|
|
161
|
-
bridge,已安装的技能仍然为代理提供了回购编辑合同
|
|
162
|
-
安全 Markdown/MDX 编辑。
|
|
146
|
+
CLI 会启动正常的数据库版 Content,注册文件夹源,并在不设置模式环境变量的
|
|
147
|
+
情况下打开连接界面。
|
|
163
148
|
|
|
164
149
|
## 对于开发者
|
|
165
150
|
|