@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.
Files changed (61) hide show
  1. package/README.md +25 -19
  2. package/dist/bin.js +52 -4
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/add.js +2 -2
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/check.js +7 -4
  7. package/dist/commands/check.js.map +1 -1
  8. package/dist/commands/config.d.ts +1 -0
  9. package/dist/commands/config.js +23 -0
  10. package/dist/commands/config.js.map +1 -1
  11. package/dist/commands/issue.d.ts +12 -0
  12. package/dist/commands/issue.js +92 -0
  13. package/dist/commands/issue.js.map +1 -0
  14. package/dist/commands/module.d.ts +8 -0
  15. package/dist/commands/module.js +40 -0
  16. package/dist/commands/module.js.map +1 -0
  17. package/dist/commands/prep.js +13 -2
  18. package/dist/commands/prep.js.map +1 -1
  19. package/dist/commands/project-init.js +5 -5
  20. package/dist/commands/project-init.js.map +1 -1
  21. package/dist/core/config.d.ts +19 -3
  22. package/dist/core/config.js +63 -16
  23. package/dist/core/config.js.map +1 -1
  24. package/dist/core/raw-manifest.d.ts +11 -3
  25. package/dist/core/raw-manifest.js +16 -8
  26. package/dist/core/raw-manifest.js.map +1 -1
  27. package/dist/core/scaffolder.d.ts +1 -0
  28. package/dist/core/scaffolder.js +12 -5
  29. package/dist/core/scaffolder.js.map +1 -1
  30. package/package.json +3 -2
  31. package/{templates/project-init/.zsk/schemas → schemas}/module.schema.json +36 -25
  32. package/{templates/project-init/.zsk/schemas → schemas}/zsk-config.schema.json +185 -37
  33. package/templates/issue/default/assets/index.md +5 -0
  34. package/templates/issue/default/debug-logs/index.md +5 -0
  35. package/templates/issue/default/issue.md +45 -0
  36. package/templates/module/frontend-module/design.md +6 -0
  37. package/templates/module/frontend-module/module.yaml +26 -0
  38. package/templates/module/frontend-module/spec.md +6 -0
  39. package/templates/module/frontend-module/tasks.md +6 -0
  40. package/templates/module/frontend-module/verification.md +6 -0
  41. package/templates/project-init/.issues/README.md +31 -16
  42. package/templates/project-init/.raws/README.md +18 -32
  43. package/templates/project-init/.raws/api-contracts/index.md +22 -0
  44. package/templates/project-init/.raws/design-assets/index.md +25 -0
  45. package/templates/project-init/.raws/design-sources/index.md +24 -0
  46. package/templates/project-init/.raws/index.md +53 -0
  47. package/templates/project-init/.raws/requirements/index.md +23 -0
  48. package/templates/project-init/.raws/testing/index.md +22 -0
  49. package/templates/project-init/.zsk/config.yaml +39 -0
  50. package/templates/project-init/{SYSTEM-SPEC.md → docs/SYSTEM-SPEC.md} +16 -18
  51. package/templates/project-init/.issues/_templates/issue.md +0 -44
  52. package/templates/project-init/.raws/FIGMA-INDEX.md +0 -38
  53. package/templates/project-init/.raws/SRS.md +0 -73
  54. package/templates/project-init/.raws/api-contracts/README.md +0 -13
  55. package/templates/project-init/.raws/design-assets/README.md +0 -16
  56. package/templates/project-init/.raws/testing/README.md +0 -10
  57. package/templates/project-init/CLAUDE.md +0 -45
  58. package/templates/project-init/docs/_module-template/module.yaml +0 -32
  59. package/templates/project-init/docs/system/README.md +0 -12
  60. package/templates/project-init/project-config.md +0 -296
  61. 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