@captain_z/zsk 0.1.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.
Files changed (49) hide show
  1. package/README.md +147 -0
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +155 -0
  4. package/dist/bin.js.map +1 -0
  5. package/dist/commands/add.d.ts +13 -0
  6. package/dist/commands/add.js +418 -0
  7. package/dist/commands/add.js.map +1 -0
  8. package/dist/commands/init.d.ts +1 -0
  9. package/dist/commands/init.js +127 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/commands/install.d.ts +7 -0
  12. package/dist/commands/install.js +54 -0
  13. package/dist/commands/install.js.map +1 -0
  14. package/dist/commands/project-init.d.ts +6 -0
  15. package/dist/commands/project-init.js +63 -0
  16. package/dist/commands/project-init.js.map +1 -0
  17. package/dist/commands/remove.d.ts +11 -0
  18. package/dist/commands/remove.js +209 -0
  19. package/dist/commands/remove.js.map +1 -0
  20. package/dist/core/bundles.d.ts +7 -0
  21. package/dist/core/bundles.js +39 -0
  22. package/dist/core/bundles.js.map +1 -0
  23. package/dist/core/capabilities.d.ts +25 -0
  24. package/dist/core/capabilities.js +79 -0
  25. package/dist/core/capabilities.js.map +1 -0
  26. package/dist/core/installer.d.ts +18 -0
  27. package/dist/core/installer.js +114 -0
  28. package/dist/core/installer.js.map +1 -0
  29. package/dist/core/manifest.d.ts +39 -0
  30. package/dist/core/manifest.js +89 -0
  31. package/dist/core/manifest.js.map +1 -0
  32. package/dist/core/scaffolder.d.ts +14 -0
  33. package/dist/core/scaffolder.js +71 -0
  34. package/dist/core/scaffolder.js.map +1 -0
  35. package/dist/core/skills.d.ts +17 -0
  36. package/dist/core/skills.js +89 -0
  37. package/dist/core/skills.js.map +1 -0
  38. package/dist/core/targets.d.ts +9 -0
  39. package/dist/core/targets.js +50 -0
  40. package/dist/core/targets.js.map +1 -0
  41. package/dist/ui/prompts.d.ts +10 -0
  42. package/dist/ui/prompts.js +40 -0
  43. package/dist/ui/prompts.js.map +1 -0
  44. package/package.json +39 -0
  45. package/templates/project-init/.raws/FIGMA-INDEX.md +38 -0
  46. package/templates/project-init/.raws/README.md +37 -0
  47. package/templates/project-init/.raws/SRS.md +73 -0
  48. package/templates/project-init/CLAUDE.md +45 -0
  49. package/templates/project-init/project-config.md +296 -0
@@ -0,0 +1,45 @@
1
+ # CLAUDE.md — <项目名>
2
+
3
+ > Claude Code 进入本项目时自动读取的会话指令。其他 harness(Codex `AGENTS.md` / Gemini `GEMINI.md`)镜像核心语义。
4
+
5
+ ## 项目身份
6
+
7
+ - **名称**:<项目名>
8
+ - **类型**:<microfrontend / monolith / library / cli>
9
+ - **技术栈**:见 [`project-config.md`](./project-config.md)(frontmatter `stack.*`)
10
+
11
+ ## 本项目使用 zsk skill set
12
+
13
+ 通过 `@captain_z/zsk add` 安装(`~/.claude/skills/` 或 `./.claude/skills/`)。运行时自动发现;手动触发写 "用 `zsk:<name>`"。
14
+
15
+ **常用 skill 组合**(见 `npx @captain_z/zsk list`):
16
+
17
+ - 启动任一变更:`zsk:feature` / `zsk:bugfix` / `zsk:refactor`
18
+ - 7 阶段:`zsk:proposal` → `zsk:spec` → `zsk:design` → `zsk:coding` → `zsk:reviewing` → `zsk:verify` → `zsk:archive`
19
+ - 任务:`zsk:task` / `zsk:task-structure` / `zsk:task-tracking`(含 §6 每任务交互契约)/ `zsk:task-evidence` / `zsk:dor-dod`
20
+ - 前端扩展:`zsk:spec-frontend` / `zsk:design-frontend` / `zsk:review-frontend` / `zsk:feature-tasks-frontend`
21
+
22
+ ## 项目事实源
23
+
24
+ | 文件 / 目录 | 作用 |
25
+ | --- | --- |
26
+ | [`project-config.md`](./project-config.md) | 机械配置(`{{config.*}}` 占位符的解析源) |
27
+ | [`.raws/`](./.raws/) | 原始事实源(SRS / FIGMA-INDEX / api-contracts / design-assets) |
28
+ | `docs/system/` | 系统级决策(ADR / architecture / glossary / nfr-baseline) |
29
+ | `SYSTEM-SPEC.md`(可选) | 团队共享的项目硬约束,覆写 zsk skill 默认 |
30
+
31
+ ## 规约优先级(冲突时上位胜出)
32
+
33
+ 1. 用户会话显式指令
34
+ 2. 本 `CLAUDE.md` 的项目指令
35
+ 3. `SYSTEM-SPEC.md`(若存在)
36
+ 4. `project-config.md`
37
+ 5. `docs/system/*`(ADR / architecture / NFR baseline)
38
+ 6. zsk skills(已安装)
39
+ 7. 平台级 skill(`~/.claude/skills/*` 非 zsk 的)
40
+ 8. 工具默认行为
41
+
42
+ ## 交互契约(LLM 执行任务时)
43
+
44
+ 见 `zsk:task-tracking` §6:**每单任务执行完 → 更新状态 + 填证据 → 短汇报 → 等人类确认 → 再推下一个**,不自动连跑。
45
+ 例外:纯读取任务 / 用户显式授权"连跑 N 个" / CI 自动化任务。
@@ -0,0 +1,296 @@
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))。