@captain_z/zsk 1.3.0 → 1.4.1
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/README.md +25 -19
- package/dist/bin.js +52 -4
- package/dist/bin.js.map +1 -1
- package/dist/commands/add.js +2 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/check.js +7 -4
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.js +23 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/issue.d.ts +12 -0
- package/dist/commands/issue.js +92 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/commands/module.d.ts +8 -0
- package/dist/commands/module.js +40 -0
- package/dist/commands/module.js.map +1 -0
- package/dist/commands/prep.js +13 -2
- package/dist/commands/prep.js.map +1 -1
- package/dist/commands/project-init.js +5 -5
- package/dist/commands/project-init.js.map +1 -1
- package/dist/core/config.d.ts +19 -3
- package/dist/core/config.js +63 -16
- package/dist/core/config.js.map +1 -1
- package/dist/core/raw-manifest.d.ts +11 -3
- package/dist/core/raw-manifest.js +16 -8
- package/dist/core/raw-manifest.js.map +1 -1
- package/dist/core/scaffolder.d.ts +1 -0
- package/dist/core/scaffolder.js +12 -5
- package/dist/core/scaffolder.js.map +1 -1
- package/package.json +3 -2
- package/{templates/project-init/.zsk/schemas → schemas}/module.schema.json +36 -25
- package/{templates/project-init/.zsk/schemas → schemas}/zsk-config.schema.json +185 -37
- package/templates/issue/default/assets/index.md +5 -0
- package/templates/issue/default/debug-logs/index.md +5 -0
- package/templates/issue/default/issue.md +45 -0
- package/templates/module/frontend-module/design.md +6 -0
- package/templates/module/frontend-module/module.yaml +26 -0
- package/templates/module/frontend-module/spec.md +6 -0
- package/templates/module/frontend-module/tasks.md +6 -0
- package/templates/module/frontend-module/verification.md +6 -0
- package/templates/project-init/.issues/README.md +31 -16
- package/templates/project-init/.raws/README.md +18 -32
- package/templates/project-init/.raws/api-contracts/index.md +22 -0
- package/templates/project-init/.raws/design-assets/index.md +25 -0
- package/templates/project-init/.raws/design-sources/index.md +24 -0
- package/templates/project-init/.raws/index.md +53 -0
- package/templates/project-init/.raws/requirements/index.md +23 -0
- package/templates/project-init/.raws/testing/index.md +22 -0
- package/templates/project-init/.zsk/config.yaml +39 -0
- package/templates/project-init/{SYSTEM-SPEC.md → docs/SYSTEM-SPEC.md} +16 -18
- package/templates/project-init/.issues/_templates/issue.md +0 -44
- package/templates/project-init/.raws/FIGMA-INDEX.md +0 -38
- package/templates/project-init/.raws/SRS.md +0 -73
- package/templates/project-init/.raws/api-contracts/README.md +0 -13
- package/templates/project-init/.raws/design-assets/README.md +0 -16
- package/templates/project-init/.raws/testing/README.md +0 -10
- package/templates/project-init/CLAUDE.md +0 -45
- package/templates/project-init/docs/_module-template/module.yaml +0 -32
- package/templates/project-init/docs/system/README.md +0 -12
- package/templates/project-init/project-config.md +0 -296
- package/templates/project-init/zsk.config.yaml +0 -50
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# ============================================================
|
|
3
|
-
# Project Config Template(新项目适配模板)
|
|
4
|
-
#
|
|
5
|
-
# 用法:
|
|
6
|
-
# 1. 新项目从本模板拷贝到仓库根 `project-config.md`
|
|
7
|
-
# 2. 填写 frontmatter 实际值(替换 `<fill-me>`)
|
|
8
|
-
# 3. 按正文模板补齐 Import Origins / 禁用清单 / 选型理由等叙述
|
|
9
|
-
# 4. 本 skill set 中所有 `{{config.*}}` 占位符会解析 frontmatter 对应键
|
|
10
|
-
#
|
|
11
|
-
# 设计:frontmatter = 机械查表(AI 替换占位符);正文 = 叙述与理由
|
|
12
|
-
# 优先级:本文件被项目 CLAUDE.md / SYSTEM-SPEC.md 覆写
|
|
13
|
-
# ============================================================
|
|
14
|
-
|
|
15
|
-
meta:
|
|
16
|
-
project_name: "<fill-me>"
|
|
17
|
-
project_type: "<fill-me>" # microfrontend / monolith / library / cli
|
|
18
|
-
project_role: "<fill-me>" # consumer / provider / shell / standalone
|
|
19
|
-
shell_host: "" # 若是 microfrontend 的 provider,填宿主应用
|
|
20
|
-
created: "<YYYY-MM-DD>"
|
|
21
|
-
maintainers:
|
|
22
|
-
- "<Your Name> <<you@example.com>>"
|
|
23
|
-
|
|
24
|
-
# ------------------------------------------------------------
|
|
25
|
-
# 路径(项目文档与代码布局)
|
|
26
|
-
# ------------------------------------------------------------
|
|
27
|
-
paths:
|
|
28
|
-
srs: "<fill-me>" # e.g., .raws/SRS.md / docs/PRD.md
|
|
29
|
-
figma_index: "<fill-me>" # e.g., .raws/FIGMA-INDEX.md
|
|
30
|
-
api_contracts: "<fill-me>" # e.g., .raws/api-contracts
|
|
31
|
-
design_assets: "<fill-me>" # e.g., .raws/design-assets
|
|
32
|
-
system_docs: "docs/system"
|
|
33
|
-
modules: "docs"
|
|
34
|
-
services_root: "<fill-me>" # e.g., src/services
|
|
35
|
-
services_entry: "<fill-me>" # e.g., src/services/clients.ts
|
|
36
|
-
services_core: "<fill-me>" # e.g., src/services/core
|
|
37
|
-
module_services_pattern: "<fill-me>" # e.g., src/pages/{module}/services
|
|
38
|
-
i18n_entry: "<fill-me>" # e.g., src/utils/i18n.ts
|
|
39
|
-
components_root: "<fill-me>" # e.g., src/components
|
|
40
|
-
hooks_root: "<fill-me>" # e.g., src/hooks
|
|
41
|
-
path_alias_config: "tsconfig.json"
|
|
42
|
-
mf_expose_entry: "" # microfrontend 才填,e.g., src/app4Exposes.tsx
|
|
43
|
-
|
|
44
|
-
# ------------------------------------------------------------
|
|
45
|
-
# 路径别名(与 tsconfig.json / 构建工具一致)
|
|
46
|
-
# ------------------------------------------------------------
|
|
47
|
-
path_aliases:
|
|
48
|
-
"@services/*": "<fill-me>"
|
|
49
|
-
"@components/*": "<fill-me>"
|
|
50
|
-
"@utils/*": "<fill-me>"
|
|
51
|
-
"@pages/*": "<fill-me>"
|
|
52
|
-
|
|
53
|
-
# ------------------------------------------------------------
|
|
54
|
-
# Import 起源(coding 阶段硬约束 — 具体示例与理由见正文)
|
|
55
|
-
# ------------------------------------------------------------
|
|
56
|
-
import_origins:
|
|
57
|
-
ui_components:
|
|
58
|
-
must_from: "<fill-me>" # e.g., @your-org/ui
|
|
59
|
-
forbidden: [] # 其他 UI 库
|
|
60
|
-
i18n:
|
|
61
|
-
must_from: "<fill-me>" # e.g., @utils/i18n
|
|
62
|
-
forbidden_direct: []
|
|
63
|
-
http_clients:
|
|
64
|
-
must_from: "<fill-me>" # e.g., @services/clients
|
|
65
|
-
forbidden: []
|
|
66
|
-
http_factory:
|
|
67
|
-
must_from: "<fill-me>" # e.g., 公司 SDK 包名
|
|
68
|
-
wrapper: "<fill-me>" # e.g., @services/core/client-factory
|
|
69
|
-
module_services:
|
|
70
|
-
location: "<fill-me>" # e.g., src/pages/{module}/services/
|
|
71
|
-
must_consume_from: "<fill-me>" # 通常等于 paths.services_entry 的别名
|
|
72
|
-
|
|
73
|
-
# ------------------------------------------------------------
|
|
74
|
-
# 项目命令(package.json 实际脚本名)
|
|
75
|
-
# ------------------------------------------------------------
|
|
76
|
-
scripts:
|
|
77
|
-
install: "<fill-me>" # e.g., npm install / yarn / pnpm install
|
|
78
|
-
dev: "<fill-me>"
|
|
79
|
-
build: "<fill-me>"
|
|
80
|
-
lint: "<fill-me>"
|
|
81
|
-
type_check: "<fill-me>" # e.g., npm run type-check / npx tsc --noEmit
|
|
82
|
-
test: "<fill-me>"
|
|
83
|
-
format: "<fill-me>"
|
|
84
|
-
|
|
85
|
-
# ------------------------------------------------------------
|
|
86
|
-
# 技术栈
|
|
87
|
-
# ------------------------------------------------------------
|
|
88
|
-
stack:
|
|
89
|
-
framework: "<fill-me>" # e.g., React 18 / Vue 3 / Svelte 5
|
|
90
|
-
language: "TypeScript"
|
|
91
|
-
language_strict: true
|
|
92
|
-
build_tool: "<fill-me>" # Webpack / Vite / Rspack
|
|
93
|
-
build_wrapper: "" # 公司封装;若无留空
|
|
94
|
-
css: "<fill-me>" # Less / Sass / CSS Modules / Tailwind
|
|
95
|
-
css_ext: "<fill-me>" # less / scss / module.css / css
|
|
96
|
-
css_naming: "BEM"
|
|
97
|
-
state_local: "useState"
|
|
98
|
-
state_async: "<fill-me>" # TanStack Query / SWR / RTK Query
|
|
99
|
-
state_shared: "<fill-me>" # Jotai / Zustand / Context
|
|
100
|
-
state_forbidden: []
|
|
101
|
-
router: "<fill-me>" # react-router / TanStack Router
|
|
102
|
-
router_version: "" # 锁定版本(若有)
|
|
103
|
-
ui_lib: "<fill-me>" # e.g., @your-org/ui
|
|
104
|
-
ui_lib_display_name: "<fill-me>"
|
|
105
|
-
http_client: "<fill-me>" # 统一 HTTP 入口函数签名
|
|
106
|
-
http_client_import: "<fill-me>"
|
|
107
|
-
sdk_packages: []
|
|
108
|
-
global_sdk: "" # 类似 @seeyon/global 的全局 SDK
|
|
109
|
-
global_sdk_import: ""
|
|
110
|
-
test_framework: "<fill-me>" # Jest / Vitest
|
|
111
|
-
test_utils: "<fill-me>"
|
|
112
|
-
|
|
113
|
-
# ------------------------------------------------------------
|
|
114
|
-
# 国际化
|
|
115
|
-
# ------------------------------------------------------------
|
|
116
|
-
i18n:
|
|
117
|
-
enabled: true
|
|
118
|
-
entry: "<fill-me>"
|
|
119
|
-
namespace: "<fill-me>" # key 前缀
|
|
120
|
-
languages: ["zh_CN", "en"] # 第一个为基线
|
|
121
|
-
fallback_required: true
|
|
122
|
-
icu_for_plurals: true
|
|
123
|
-
|
|
124
|
-
# ------------------------------------------------------------
|
|
125
|
-
# Git / 分支 / Commit
|
|
126
|
-
# ------------------------------------------------------------
|
|
127
|
-
git:
|
|
128
|
-
main_branch: "<fill-me>" # main / master / develop / test
|
|
129
|
-
feature_branch_pattern: "feature/{scope}"
|
|
130
|
-
fix_branch_pattern: "fix/{issue-id}"
|
|
131
|
-
refactor_branch_pattern: "refactor/{scope}"
|
|
132
|
-
docs_branch_pattern: "docs/{topic}"
|
|
133
|
-
commit_style: "conventional"
|
|
134
|
-
commit_scopes: []
|
|
135
|
-
|
|
136
|
-
# ------------------------------------------------------------
|
|
137
|
-
# 部署 / 环境
|
|
138
|
-
# ------------------------------------------------------------
|
|
139
|
-
deploy:
|
|
140
|
-
environments:
|
|
141
|
-
- { name: "dev", domain: "<fill-me>" }
|
|
142
|
-
- { name: "test", domain: "<fill-me>" }
|
|
143
|
-
- { name: "pre", domain: "<fill-me>" }
|
|
144
|
-
- { name: "prod", domain: "<fill-me>" }
|
|
145
|
-
pipeline: "<fill-me>" # Jenkins / GitHub Actions / GitLab CI
|
|
146
|
-
|
|
147
|
-
# ------------------------------------------------------------
|
|
148
|
-
# 外部工具 / MCP
|
|
149
|
-
# ------------------------------------------------------------
|
|
150
|
-
tools:
|
|
151
|
-
figma_mcp: ""
|
|
152
|
-
design_tool: "Figma"
|
|
153
|
-
|
|
154
|
-
# ------------------------------------------------------------
|
|
155
|
-
# 质量基线
|
|
156
|
-
# ------------------------------------------------------------
|
|
157
|
-
quality:
|
|
158
|
-
performance:
|
|
159
|
-
lcp_target: 2500
|
|
160
|
-
inp_target: 200
|
|
161
|
-
cls_target: 0.1
|
|
162
|
-
bundle_size_max_kb: 500
|
|
163
|
-
accessibility:
|
|
164
|
-
wcag_level: "AA"
|
|
165
|
-
mandatory: true
|
|
166
|
-
testing:
|
|
167
|
-
unit_coverage_min: 80
|
|
168
|
-
critical_branch_coverage_min: 85
|
|
169
|
-
new_code_coverage: 100
|
|
170
|
-
security:
|
|
171
|
-
cve_response_hours: 24
|
|
172
|
-
forbidden_licenses: ["GPL", "AGPL"]
|
|
173
|
-
|
|
174
|
-
# ------------------------------------------------------------
|
|
175
|
-
# 浏览器 / 响应式
|
|
176
|
-
# ------------------------------------------------------------
|
|
177
|
-
compat:
|
|
178
|
-
browsers:
|
|
179
|
-
- { name: "Chrome", min_versions: 2, priority: "P0" }
|
|
180
|
-
- { name: "Edge", min_versions: 2, priority: "P0" }
|
|
181
|
-
- { name: "Safari", min_versions: 2, priority: "P1" }
|
|
182
|
-
- { name: "Firefox", min_versions: 2, priority: "P1" }
|
|
183
|
-
breakpoints:
|
|
184
|
-
mobile: null
|
|
185
|
-
tablet: 768
|
|
186
|
-
desktop: 1024
|
|
187
|
-
wide: 1440
|
|
188
|
-
min_resolution:
|
|
189
|
-
desktop: [1280, 720]
|
|
190
|
-
laptop: [1366, 768]
|
|
191
|
-
|
|
192
|
-
# ------------------------------------------------------------
|
|
193
|
-
# 示例值(文档举例用)
|
|
194
|
-
# ------------------------------------------------------------
|
|
195
|
-
examples:
|
|
196
|
-
module_pascal: "FeatureA"
|
|
197
|
-
module_kebab: "feature-a"
|
|
198
|
-
module_camel: "featureA"
|
|
199
|
-
service_name: "ExampleService"
|
|
200
|
-
service_request: "exampleRequest"
|
|
201
|
-
leaf_key: "empty"
|
|
202
|
-
issue_id: "PROJ-123"
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
# Project Config — {项目名}
|
|
206
|
-
|
|
207
|
-
> **来源**:`docs/.best-practices/_config/project-config.template.md`
|
|
208
|
-
> **位置**:拷贝到仓库根 `project-config.md`(工具中立,Claude Code / Codex / 其他 agent 均可读)
|
|
209
|
-
> **Git 状态**:建议加入 `.gitignore`(AI 本地配置);若团队共享则提交
|
|
210
|
-
> **消费方式**:frontmatter = `{{config.*}}` 机械锚点 → 正文 = 叙述与理由
|
|
211
|
-
> **优先级**:本文件被项目 `CLAUDE.md` / `SYSTEM-SPEC.md` 覆写
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## 1. Import 起源(coding 阶段硬约束)
|
|
216
|
-
|
|
217
|
-
> 违反会被 Reviewing / Verify 阻断。对应 frontmatter `import_origins.*`。
|
|
218
|
-
|
|
219
|
-
| 能力 | 必须 import 自 | 禁止 | 示例 |
|
|
220
|
-
| --- | --- | --- | --- |
|
|
221
|
-
| UI 组件 | `{{import_origins.ui_components.must_from}}` | 其他 UI 库 | `import { Button } from '...';` |
|
|
222
|
-
| 国际化 | `{{import_origins.i18n.must_from}}` | 直接调第三方 i18n 库 | `import { t } from '...';` |
|
|
223
|
-
| HTTP 客户端(业务代码) | `{{import_origins.http_clients.must_from}}` | 裸 fetch / axios / 新建 request 实例 | `import { fooRequest } from '...';` |
|
|
224
|
-
| HTTP 工厂(仅 services 层内部) | `{{import_origins.http_factory.must_from}}` + `{{import_origins.http_factory.wrapper}}` | 业务代码直接 import 本层 | 见下方代码示例 |
|
|
225
|
-
| 模块级 service | consume `{{import_origins.module_services.must_consume_from}}` | 重建 request 实例 | 见下方代码示例 |
|
|
226
|
-
|
|
227
|
-
### 1.1 Services 三层分工(以实际项目填充代码示例)
|
|
228
|
-
|
|
229
|
-
```ts
|
|
230
|
-
// Layer 1 — {services_entry}(唯一对外出口)
|
|
231
|
-
// 从全局 SDK 拿 raw request,经 client-factory 包装后 export
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
```ts
|
|
235
|
-
// Layer 2 — 模块级 service ({module_services.location})
|
|
236
|
-
// 只 consume clients;禁止重建 request 实例
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
```ts
|
|
240
|
-
// Layer 3 — 业务组件
|
|
241
|
-
// 通过模块 service 间接消费;不直接 import clients
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## 2. 必用封装
|
|
247
|
-
|
|
248
|
-
| 场景 | 必用封装 | 位置 | 理由 |
|
|
249
|
-
| --- | --- | --- | --- |
|
|
250
|
-
| HTTP 请求 | `<项目 HTTP 工厂>` | `<path>` | 统一错误码 / 超时 / 拦截 |
|
|
251
|
-
| i18n 文案 | `t(key, fallback, values?)` | `{{paths.i18n_entry}}` | 多语同步 / fallback / ICU |
|
|
252
|
-
| 错误边界 | 模块入口 `ErrorBoundary` | 模块 `index.tsx` | 统一错误 UI + 上报 |
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 3. 禁用清单(Red Lines)
|
|
257
|
-
|
|
258
|
-
### 3.1 禁用的包 / 库
|
|
259
|
-
|
|
260
|
-
| 包 / 模式 | 禁用原因 | 替代 | ADR |
|
|
261
|
-
| --- | --- | --- | --- |
|
|
262
|
-
| {填写项目实际禁用项,如 Redux} | {过重 / 重复 / 冲突} | {替代方案} | {ADR-XXXX} |
|
|
263
|
-
|
|
264
|
-
### 3.2 禁用的语法 / 模式
|
|
265
|
-
|
|
266
|
-
| 模式 | 原因 | 替代 |
|
|
267
|
-
| --- | --- | --- |
|
|
268
|
-
| `any` / `as any` / `@ts-ignore` | 绕开类型系统 | 具体类型 / `unknown` + 收窄 |
|
|
269
|
-
| 新增硬编码文案 | i18n 违规 | `t(key, fallback)` |
|
|
270
|
-
| `dangerouslySetInnerHTML`(未经审) | XSS 风险 | 文本节点 / ADR 豁免 |
|
|
271
|
-
| 裸 `console.log` 进生产 | 日志泄漏 | 封装 logger |
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## 4. 技术栈 Pin 版本(有 ADR 保护)
|
|
276
|
-
|
|
277
|
-
| 维度 | 选型 / 版本 | 锁定方式 | ADR |
|
|
278
|
-
| --- | --- | --- | --- |
|
|
279
|
-
| 框架 | `{{stack.framework}}` | `package.json` | — |
|
|
280
|
-
| 路由 | `{{stack.router}} {{stack.router_version}}` | {锁定方式} | {ADR-XXXX} |
|
|
281
|
-
| 样式 | `{{stack.css}}` | {锁定方式} | {ADR-XXXX} |
|
|
282
|
-
| UI | `{{stack.ui_lib}}` | `package.json` | {ADR-XXXX} |
|
|
283
|
-
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
## 5. 与上位规约的关系
|
|
287
|
-
|
|
288
|
-
| 本文件(项目本地 AI 配置) | 其他文件 |
|
|
289
|
-
| --- | --- |
|
|
290
|
-
| `{{config.*}}` 机械替换 + 项目硬约束叙述 | `SYSTEM-SPEC.md` — 团队共享规约 |
|
|
291
|
-
| 本地不入库(除非团队共享) | `CLAUDE.md` — 入库,AI 会话指令 |
|
|
292
|
-
| 一处改全局生效 | `docs/.best-practices/*` — 通用方法论 |
|
|
293
|
-
|
|
294
|
-
**冲突时**:`CLAUDE.md` > 本文件 > `docs/.best-practices/*`。
|
|
295
|
-
|
|
296
|
-
项目硬约束新增 / 变更走 ADR(见 [`../system/adr.md`](../system/adr.md))。
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# yaml-language-server: $schema=.zsk/schemas/zsk-config.schema.json
|
|
2
|
-
|
|
3
|
-
project:
|
|
4
|
-
name: "<project-name>"
|
|
5
|
-
|
|
6
|
-
paths:
|
|
7
|
-
raws: .raws
|
|
8
|
-
docs: docs
|
|
9
|
-
issues: .issues
|
|
10
|
-
|
|
11
|
-
sources:
|
|
12
|
-
srs:
|
|
13
|
-
kind: local
|
|
14
|
-
path: .raws/SRS.md
|
|
15
|
-
figma_index:
|
|
16
|
-
kind: local
|
|
17
|
-
path: .raws/FIGMA-INDEX.md
|
|
18
|
-
api_contracts:
|
|
19
|
-
kind: local
|
|
20
|
-
path: .raws/api-contracts
|
|
21
|
-
testing:
|
|
22
|
-
kind: local
|
|
23
|
-
path: .raws/testing
|
|
24
|
-
design_assets:
|
|
25
|
-
kind: local
|
|
26
|
-
path: .raws/design-assets
|
|
27
|
-
|
|
28
|
-
# Optional resource sync definitions.
|
|
29
|
-
# Use kind: script for deterministic fetch/generate commands, or kind: skill
|
|
30
|
-
# when an AI skill/tool must collect the resource (for example Figma MCP).
|
|
31
|
-
# sync:
|
|
32
|
-
# figma_snapshot:
|
|
33
|
-
# kind: skill
|
|
34
|
-
# skill: zsk:ue-mcp
|
|
35
|
-
# output: .raws/design-assets/<module>/<snapshot>
|
|
36
|
-
# api_contracts:
|
|
37
|
-
# kind: script
|
|
38
|
-
# command: pnpm sync:api-contracts
|
|
39
|
-
# output: .raws/api-contracts
|
|
40
|
-
|
|
41
|
-
tools:
|
|
42
|
-
runtime_ui:
|
|
43
|
-
- computer_use
|
|
44
|
-
- browser_use
|
|
45
|
-
design:
|
|
46
|
-
- figma_mcp
|
|
47
|
-
|
|
48
|
-
modules:
|
|
49
|
-
index: docs/_module-index.md
|
|
50
|
-
root: docs
|