@modus-ai/modus 0.2.10 → 0.2.11
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/dist/commands/init.d.ts +2 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +19 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +10 -2
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/generators/continue.d.ts +16 -0
- package/dist/generators/continue.d.ts.map +1 -0
- package/dist/generators/continue.js +435 -0
- package/dist/generators/continue.js.map +1 -0
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +7 -1
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/custom.d.ts.map +1 -1
- package/dist/generators/custom.js +8 -1
- package/dist/generators/custom.js.map +1 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +4 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/utils/config.d.ts +20 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/file-system.d.ts +16 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +40 -0
- package/dist/utils/file-system.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/modus-init/SKILL.md +274 -768
- package/templates/skills/modus-init/shared/frontmatter-spec.md +255 -0
- package/templates/skills/modus-init/shared/stack-detection.md +144 -0
- package/templates/skills/modus-init/shared/universal-skill-format.md +362 -0
- package/templates/skills/modus-init/strategies/fallback-init.md +150 -0
- package/templates/skills/modus-init/strategies/frontend-init.md +298 -0
- package/templates/skills/modus-init/strategies/java-init.md +278 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Universal Business Skill Format — 17 节通用骨架(语言无关)
|
|
3
|
+
parent_skill: modus-init
|
|
4
|
+
load_when: "执行 Step 8 生成业务 Skill 时按需读取;辅助命令 /modus:verify、/modus:refresh 执行时读取"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Business Skill 通用 17 节骨架(语言无关)
|
|
8
|
+
|
|
9
|
+
> ⚙️ **通用知识库核心原则**
|
|
10
|
+
>
|
|
11
|
+
> 1. **节号、节名、知识标签三者跨所有栈完全统一**——保证不同语言生成的知识库结构一致,跨栈 monorepo 可统一索引
|
|
12
|
+
> 2. **节内具体填充按 `stack` 字段分流**——Java 写 Service/MyBatis 语义,前端写 Hook/API 调用语义,Go 写 Handler/GORM 语义
|
|
13
|
+
> 3. 各 strategy 在生成时只需替换"节内填充示例",**不允许新增/删除/重命名节标题**
|
|
14
|
+
> 4. 跨栈语义对齐参见每节的"跨栈语义对齐表"
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 17 节总览(节号 + 节名 + 知识标签 — 跨栈完全一致)
|
|
19
|
+
|
|
20
|
+
| # | 节标题 | 知识标签 | 跨栈语义概要 |
|
|
21
|
+
|---|--------|---------|-------------|
|
|
22
|
+
| 1 | 域概述 | — | 业务职责一句话 + 边界(属于/不属于) |
|
|
23
|
+
| 2 | 核心实体 | `[model]` | Java=Entity / 前端=TS Type/Zod Schema / Go=struct |
|
|
24
|
+
| 3 | 业务规则 | `[process][guideline][decision]` | 流程规则 + 推荐做法 + 架构决策 |
|
|
25
|
+
| 4 | 关键文件索引 | `[model]` | 各栈的"分层"映射(Controller→Page→Handler)|
|
|
26
|
+
| 5 | API 契约 | `[model]` | Java=暴露 REST/RPC / 前端=调用后端 endpoint |
|
|
27
|
+
| 6 | 项目特有模式 | `[decision][guideline]` | 框架级编码范式(事务 / 状态管理 / 路由守卫) |
|
|
28
|
+
| 7 | 典型代码示例 | — | 1 个写入场景 + 1 个查询场景,含项目特有模式 |
|
|
29
|
+
| 8 | 状态机 | `[process]` | Java=Order 状态 / 前端=表单/页面状态机 |
|
|
30
|
+
| 9 | 错误处理 | `[pitfall]` | Java=ErrorCode 枚举 / 前端=Toast/ErrorBoundary |
|
|
31
|
+
| 10 | 跨域依赖 | `[decision]` | upstream/downstream + 接口版本 |
|
|
32
|
+
| 11 | 数据流向 | `[process]` | Java=MQ/事件 / 前端=React Query/Pinia 数据链 |
|
|
33
|
+
| 12 | 关键数据访问模式 | `[guideline]` | Java=SQL JOIN/索引 / 前端=API 调用:debounce/缓存/重试 |
|
|
34
|
+
| 13 | 常见开发陷阱 | `[pitfall]` | 各栈典型陷阱 |
|
|
35
|
+
| 14 | 扩展点/性能优化 | `[decision]` | Java=策略模式/SPI / 前端=路由懒加载/虚拟列表/memo |
|
|
36
|
+
| 15 | 业务不变量 | `[invariant]` | 必须始终为真的业务约束(违反即 Bug) |
|
|
37
|
+
| 16 | 领域词汇表 | `[model]` | 域内术语 + 与通用概念的差异 |
|
|
38
|
+
| 17 | 新人上手指南 | `[process]` | 17.A Agent 快速定位 + 17.B 员工新人手册 |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 跨栈语义对齐表(核心节)
|
|
43
|
+
|
|
44
|
+
> 当 strategy 生成 Skill 时按本表替换节内"信号词",但保持节标题不变。
|
|
45
|
+
|
|
46
|
+
### 节 2 核心实体
|
|
47
|
+
|
|
48
|
+
| stack | 数据载体 | 字段表填充 |
|
|
49
|
+
|-------|---------|-----------|
|
|
50
|
+
| `java` | `Entity` / `Domain` 类 | Java 类型(`Long`、`String`、`BigDecimal`) |
|
|
51
|
+
| `frontend-react` | TS `interface` / `type` / Zod `schema` | TS 类型(`number`、`string`、`Date`),含可选标记 `?` |
|
|
52
|
+
| `frontend-vue` | TS `interface` / `defineProps` 类型 / Pinia state | 同 React + 响应式标记 `Ref<T>` |
|
|
53
|
+
| `backend-node` | Prisma model / TypeORM Entity / Zod schema | TS 类型 |
|
|
54
|
+
| `go` | `struct` + `gorm` tag | Go 类型(`int64`、`string`、`time.Time`) |
|
|
55
|
+
| `python` | Pydantic `BaseModel` / SQLAlchemy Model | Python 类型注解(`Optional[str]`、`Decimal`) |
|
|
56
|
+
|
|
57
|
+
### 节 5 API 契约
|
|
58
|
+
|
|
59
|
+
| stack | 含义 | 填充重点 |
|
|
60
|
+
|-------|------|---------|
|
|
61
|
+
| `java` | **本域对外暴露**的 REST/RPC 接口 | Controller/Facade 方法 + 权限注解 + 错误码 |
|
|
62
|
+
| `frontend-*` | **本域调用**的后端 endpoint | endpoint 列表 + Request/Response TS 类型 + 鉴权方式 |
|
|
63
|
+
| `backend-node` | **本域对外暴露**的 REST/GraphQL 接口 | Route/Resolver + 中间件链 |
|
|
64
|
+
| `go` | **本域对外暴露**的 HTTP/gRPC 接口 | Handler 方法 + middleware + status code |
|
|
65
|
+
|
|
66
|
+
### 节 6 项目特有模式
|
|
67
|
+
|
|
68
|
+
| stack | 典型范式 |
|
|
69
|
+
|-------|---------|
|
|
70
|
+
| `java` | `@Transactional` / `AopContext.currentProxy()` / `@DistributedLock` / `BaseRpcResponse` 包装 |
|
|
71
|
+
| `frontend-react` | Hook 命名约定(`useXxx`) / 状态管理选型(Redux/Zustand/Jotai) / 表单库(react-hook-form + zod) / 错误边界 |
|
|
72
|
+
| `frontend-vue` | Composable 命名(`useXxx`) / Pinia store action / 路由守卫(beforeEach) / `<script setup>` |
|
|
73
|
+
| `backend-node` | NestJS 模块/装饰器 / Express middleware 链 / `defer` 错误处理 |
|
|
74
|
+
| `go` | 中间件链 / `defer` / gRPC status / context 传递 |
|
|
75
|
+
|
|
76
|
+
### 节 8 状态机
|
|
77
|
+
|
|
78
|
+
| stack | 主要承载对象 |
|
|
79
|
+
|-------|------------|
|
|
80
|
+
| `java` | Domain Entity 的 `status` 字段(含 `@Transactional` 保护标注) |
|
|
81
|
+
| `frontend-react` | 表单状态机(idle→loading→success→error) / XState / 页面流 / 异步操作状态 |
|
|
82
|
+
| `frontend-vue` | 同 React + 响应式 ref 状态 |
|
|
83
|
+
| `backend-*` | 业务对象状态字段 |
|
|
84
|
+
|
|
85
|
+
### 节 9 错误处理
|
|
86
|
+
|
|
87
|
+
| stack | 表现形式 |
|
|
88
|
+
|-------|---------|
|
|
89
|
+
| `java` | ErrorCode 枚举 + Exception 类 + HTTP 状态码 + `@RestControllerAdvice` |
|
|
90
|
+
| `frontend-react` | Error Boundary / toast 时机 / fallback UI / 表单字段错误展示 / 路由守卫拦截 |
|
|
91
|
+
| `frontend-vue` | `errorHandler` / Suspense fallback / VeeValidate 错误展示 |
|
|
92
|
+
| `backend-node` | 全局异常过滤器 / problem-details JSON |
|
|
93
|
+
| `go` | error 包装 / sentinel error / status code 映射 |
|
|
94
|
+
|
|
95
|
+
### 节 12 关键数据访问模式
|
|
96
|
+
|
|
97
|
+
| stack | 含义 |
|
|
98
|
+
|-------|------|
|
|
99
|
+
| `java` | XML Mapper / MyBatis-Plus / SQL JOIN / 索引命中 / 慢查询风险 |
|
|
100
|
+
| `frontend-*` | API 调用模式:debounce / throttle / 重试 / 缓存(React Query/SWR) / 取消(AbortController) / 乐观更新 |
|
|
101
|
+
| `backend-node` | Prisma/TypeORM 查询 + N+1 风险 |
|
|
102
|
+
| `go` | GORM/sqlx 查询 + 索引利用 |
|
|
103
|
+
| `python` | SQLAlchemy ORM / 原生 SQL |
|
|
104
|
+
|
|
105
|
+
### 节 13 常见开发陷阱
|
|
106
|
+
|
|
107
|
+
| stack | 典型陷阱举例(仅举一二) |
|
|
108
|
+
|-------|---------|
|
|
109
|
+
| `java` | 同类调用 `@Transactional` 失效 / 枚举存 `name()` 导致改名失数据 / 并发未加分布式锁导致重复 |
|
|
110
|
+
| `frontend-react` | Closure 陷阱 / 依赖数组 / SSR Hydration 不一致 / Memory Leak / 不必要 re-render / 异步 setState 时机 |
|
|
111
|
+
| `frontend-vue` | ref vs reactive 解构丢响应式 / watch immediate vs watchEffect / v-for + v-if 同元素冲突 / Nuxt SSR useState 服务端复用 |
|
|
112
|
+
| `backend-node` | async 错误未捕获 / 中间件顺序错乱 / 全局变量泄漏 |
|
|
113
|
+
| `go` | goroutine 泄漏 / channel 未关闭 / context 取消未传递 |
|
|
114
|
+
|
|
115
|
+
### 节 14 扩展点/性能优化
|
|
116
|
+
|
|
117
|
+
| stack | 维度 |
|
|
118
|
+
|-------|------|
|
|
119
|
+
| `java` | 策略模式(多实现)/ `@ConditionalOn*` 条件装配 / SPI / 缓存 / N+1 优化 |
|
|
120
|
+
| `frontend-react` | 路由懒加载 / 虚拟列表 / `React.memo`/`useMemo`/`useCallback` / Suspense / Code Split / 预加载 |
|
|
121
|
+
| `frontend-vue` | 异步组件 / `v-once` / KeepAlive / 路由懒加载 / 大列表虚拟滚动 |
|
|
122
|
+
| `backend-*` | 索引优化 / 缓存层 / 异步队列 / 批处理 |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 17 节标准模板(Markdown 主体,所有栈通用)
|
|
127
|
+
|
|
128
|
+
> 各 strategy 在 Step 8 生成 Skill 时复用本模板,仅替换 frontmatter(按 `shared/frontmatter-spec.md`)和节内填充示例。
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
# {中文域名}业务知识
|
|
132
|
+
|
|
133
|
+
> 由 Modus Skills Builder 自动生成。[MODUS:BIZ] | stack: {stack}
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
> **渐进加载模式(Agent 按任务类型选择,降低 token 消耗):**
|
|
138
|
+
>
|
|
139
|
+
> | 模式 | 读取范围 | 预估 token | 适用场景 |
|
|
140
|
+
> |------|---------|-----------|---------|
|
|
141
|
+
> | **极简模式** | Section 1、2、15 | ~500 tokens | 快速了解业务边界和不变量 |
|
|
142
|
+
> | **开发模式** | Section 1-8、10 | ~1500 tokens | 新增功能、接口/页面开发 |
|
|
143
|
+
> | **审查模式** | Section 3、8、13、15 | ~1000 tokens | Code Review、架构评审 |
|
|
144
|
+
> | **排查模式** | Section 9、13 + Section 8 | ~600 tokens | 线上 Bug 排查、异常分析 |
|
|
145
|
+
> | **完整模式** | 全量(Section 1-17) | ~3500 tokens | 首次接触本域、生成设计文档 |
|
|
146
|
+
>
|
|
147
|
+
> **新人速读路径:** Section 16(词汇表)→ Section 17.B(新人手册)→ Section 8(状态机)→ Section 3(业务规则)
|
|
148
|
+
> **排障路径:** Section 9(错误码)→ Section 13(陷阱)→ Section 15(不变量)
|
|
149
|
+
>
|
|
150
|
+
> **Skill 状态:** `[SKILL_STATUS]` | **栈:** `[STACK]` | **更新:** `[UPDATED]` | **hash:** `[HASH_PREFIX]`
|
|
151
|
+
> 若 status 为 `stale`,禁止直接引用,先运行 `/modus:refresh {domain}`
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 1. 域概述
|
|
156
|
+
|
|
157
|
+
{业务域的职责边界和核心价值,2-3 句话}
|
|
158
|
+
|
|
159
|
+
**边界说明:**
|
|
160
|
+
- 属于本域:{列举主要职责}
|
|
161
|
+
- 不属于本域:{明确排除的职责}
|
|
162
|
+
|
|
163
|
+
## 2. 核心实体 [model]
|
|
164
|
+
|
|
165
|
+
> 按 stack 填充:`java` 列 Java 类型;`frontend-*` 列 TS 类型;`go` 列 Go struct;`python` 列 Pydantic 字段。
|
|
166
|
+
|
|
167
|
+
| 实体名 | 中文名 | 说明 | 关键字段 |
|
|
168
|
+
|--------|--------|------|----------|
|
|
169
|
+
| {EntityName} | {中文名} | {说明} | {字段列表,含类型} |
|
|
170
|
+
|
|
171
|
+
### 重要枚举/常量 [model]
|
|
172
|
+
|
|
173
|
+
\`\`\`{lang}
|
|
174
|
+
// {EnumName} — {含义}
|
|
175
|
+
{枚举值列表}
|
|
176
|
+
\`\`\`
|
|
177
|
+
|
|
178
|
+
## 3. 业务规则 [process] [guideline] [decision]
|
|
179
|
+
|
|
180
|
+
### 核心字段说明
|
|
181
|
+
|
|
182
|
+
每个核心字段必含:类型、是否非空、业务含义、关联枚举(如有)
|
|
183
|
+
|
|
184
|
+
| 字段 | 类型 | 非空 | 业务含义 | 关联枚举 |
|
|
185
|
+
|------|------|------|----------|----------|
|
|
186
|
+
|
|
187
|
+
### 业务流程规则 [process]
|
|
188
|
+
- [process] {流程规则}
|
|
189
|
+
|
|
190
|
+
### 推荐做法 [guideline]
|
|
191
|
+
- [guideline] {推荐做法}
|
|
192
|
+
|
|
193
|
+
### 架构决策 [decision]
|
|
194
|
+
- [decision] {架构决策}
|
|
195
|
+
|
|
196
|
+
> **信号词分流指引(跨栈通用):**
|
|
197
|
+
>
|
|
198
|
+
> | 信号词模式 | 正确归属 |
|
|
199
|
+
> |----------|---------|
|
|
200
|
+
> | 「必须/禁止 + 违反=Bug/事故」 | Section 15 `[invariant]` |
|
|
201
|
+
> | 「推荐/建议/最佳实践」 | Section 3 `[guideline]` |
|
|
202
|
+
> | 「如果 A 则 B 流程」 | Section 3 `[process]` |
|
|
203
|
+
> | 「选 A 而非 B,因为...」 | Section 3 `[decision]` |
|
|
204
|
+
> | 「曾踩过/容易犯」 | Section 13 `[pitfall]` |
|
|
205
|
+
> | 「新人首次开发前需了解」 | Section 17 |
|
|
206
|
+
|
|
207
|
+
## 4. 关键文件索引 [model]
|
|
208
|
+
|
|
209
|
+
> 按栈分层填充。各栈的"层"定义参见对应 strategy 文件。
|
|
210
|
+
|
|
211
|
+
| 层次 | 名称 | 路径 | 说明 |
|
|
212
|
+
|------|------|------|------|
|
|
213
|
+
|
|
214
|
+
## 5. API 契约 [model]
|
|
215
|
+
|
|
216
|
+
> `java`/`backend-*`:本域**对外暴露**的接口;`frontend-*`:本域**调用**的后端 endpoint。
|
|
217
|
+
|
|
218
|
+
每个接口必含:入参校验、返回结构、错误码/HTTP 状态、是否幂等、权限/鉴权方式
|
|
219
|
+
|
|
220
|
+
| 方法 | 路径/方法名 | 说明 | 关键参数 | 鉴权 | 幂等 |
|
|
221
|
+
|------|------|------|----------|----------|------|
|
|
222
|
+
|
|
223
|
+
## 6. 项目特有模式 [decision] [guideline]
|
|
224
|
+
|
|
225
|
+
- [guideline] {模式 1}
|
|
226
|
+
- [guideline] {模式 2}
|
|
227
|
+
|
|
228
|
+
## 7. 典型代码示例
|
|
229
|
+
|
|
230
|
+
要求:
|
|
231
|
+
- 来自实际扫描的源码(不能是纯伪代码)
|
|
232
|
+
- 至少 1 个"写入/变更"场景 + 1 个"查询/权限"场景
|
|
233
|
+
- 体现 Section 6 的项目特有模式
|
|
234
|
+
- 含关键步骤的内联注释
|
|
235
|
+
|
|
236
|
+
\`\`\`{lang}
|
|
237
|
+
// {代码示例 1}
|
|
238
|
+
\`\`\`
|
|
239
|
+
|
|
240
|
+
## 8. 状态机 [process]
|
|
241
|
+
|
|
242
|
+
**前置条件:** 域中存在状态字段(Java 的 `status` / 前端的表单状态/页面状态/XState)才生成本节。
|
|
243
|
+
|
|
244
|
+
\`\`\`mermaid
|
|
245
|
+
stateDiagram-v2
|
|
246
|
+
[*] --> {INITIAL}
|
|
247
|
+
{INITIAL} --> {NEXT} : {触发条件}
|
|
248
|
+
\`\`\`
|
|
249
|
+
|
|
250
|
+
### 正常流转表
|
|
251
|
+
| 起始 | 目标 | 触发条件 | 触发方法/事件 | 事务/批处理 |
|
|
252
|
+
|------|------|----------|--------------|------------|
|
|
253
|
+
|
|
254
|
+
### 异常流(前置条件:存在 FAILED/ERROR 类状态)
|
|
255
|
+
### 超时自动流转(前置条件:存在定时任务/TTL)
|
|
256
|
+
### 补偿机制(前置条件:存在 MQ 消费者/异步队列)
|
|
257
|
+
|
|
258
|
+
## 9. 错误处理 [pitfall]
|
|
259
|
+
|
|
260
|
+
| 错误码/错误名 | 触发场景 | 用户感知/HTTP 状态 | 处理建议 |
|
|
261
|
+
|--------|---------|---------|---------|
|
|
262
|
+
|
|
263
|
+
## 10. 跨域依赖 [decision]
|
|
264
|
+
|
|
265
|
+
**上游依赖:**
|
|
266
|
+
| 依赖域 | 交互方式 | 调用点 | 接口版本 | 降级预案 |
|
|
267
|
+
|--------|---------|-------|---------|---------|
|
|
268
|
+
|
|
269
|
+
**下游被依赖:**
|
|
270
|
+
| 调用域 | 交互方式 | 接口版本(本域提供)| 场景 |
|
|
271
|
+
|--------|---------|-----------------|------|
|
|
272
|
+
|
|
273
|
+
> **契约版本维护规则:**
|
|
274
|
+
> - 本域对外接口版本记录在 frontmatter `contract_version`
|
|
275
|
+
> - 调用方在 Section 10 上游依赖表记录调用时使用的版本号
|
|
276
|
+
> - 接口升级时:① 更新 `contract_version` ② 通知下游域 ③ 触发 hash 更新
|
|
277
|
+
|
|
278
|
+
## 11. 数据流向 [process]
|
|
279
|
+
|
|
280
|
+
**前置条件(按栈而异):**
|
|
281
|
+
- `java`:MQ Consumer/Producer / Spring Event / `@Async` 跨域调用
|
|
282
|
+
- `frontend-*`:React Query/SWR/Pinia 数据链 / WebSocket/SSE / 跨组件事件总线
|
|
283
|
+
- `go`/`python`:消息队列 / 任务队列
|
|
284
|
+
|
|
285
|
+
| 方向 | Topic/Hook/Channel | 触发时机 | 上下游 | 幂等/防抖保障 |
|
|
286
|
+
|------|-----------|---------|------------|---------|
|
|
287
|
+
|
|
288
|
+
## 12. 关键数据访问模式 [guideline]
|
|
289
|
+
|
|
290
|
+
**前置条件(按栈而异):**
|
|
291
|
+
- `java`:复杂 SQL(≥2 表 JOIN 或子查询)
|
|
292
|
+
- `frontend-*`:API 调用模式(缓存/重试/取消/乐观更新)
|
|
293
|
+
- `go`/`python`:复杂查询
|
|
294
|
+
|
|
295
|
+
| 标识 | 语义 | 关键技术点 | 性能/数据量 | 风险 |
|
|
296
|
+
|------|------|------------|------------|---------|
|
|
297
|
+
|
|
298
|
+
## 13. 常见开发陷阱 [pitfall]
|
|
299
|
+
|
|
300
|
+
- [pitfall] {陷阱 1}
|
|
301
|
+
- [pitfall] {陷阱 2}
|
|
302
|
+
|
|
303
|
+
## 14. 扩展点/性能优化 [decision]
|
|
304
|
+
|
|
305
|
+
**前置条件:** 域中存在 ≥2 实现的接口/策略 / `@ConditionalOn*` 条件装配 / 前端的懒加载/虚拟列表/memo / SPI 注册点。
|
|
306
|
+
|
|
307
|
+
| 扩展点/优化点 | 实现方式 | 当前实例 | 扩展/调整方式 |
|
|
308
|
+
|--------|---------|---------|---------|
|
|
309
|
+
|
|
310
|
+
## 15. 业务不变量 [invariant]
|
|
311
|
+
|
|
312
|
+
| 不变量描述 | 验证位置 | 违反后果 | 来源 |
|
|
313
|
+
|---------|---------|---------|------|
|
|
314
|
+
|
|
315
|
+
## 16. 领域词汇表 [model]
|
|
316
|
+
|
|
317
|
+
| 术语 | 定义 | 与通用概念的区别 |
|
|
318
|
+
|------|------|----------------|
|
|
319
|
+
|
|
320
|
+
## 17. 新人上手指南 [process]
|
|
321
|
+
|
|
322
|
+
### 17.A Agent 快速定位指南(机器优先)
|
|
323
|
+
|
|
324
|
+
| 任务类型 | 必读 Section | 关键文件 | 核心约束提示 |
|
|
325
|
+
|---------|------------|---------|------------|
|
|
326
|
+
|
|
327
|
+
### 17.B 员工新人入门手册(人类优先)
|
|
328
|
+
|
|
329
|
+
#### 开发前必读清单
|
|
330
|
+
1. ...
|
|
331
|
+
#### 本域关键设计决策历史
|
|
332
|
+
| 设计决策 | 选择方案 | 未选方案 | 设计理由 |
|
|
333
|
+
|---------|---------|---------|---------|
|
|
334
|
+
#### 本地环境搭建 Checklist
|
|
335
|
+
(按栈而异:Java=MQ/RPC/DB;前端=mock/proxy/env;Go=context/db;Python=venv/db)
|
|
336
|
+
#### 首次开发任务推荐
|
|
337
|
+
#### 常见问题 FAQ
|
|
338
|
+
#### 高频踩坑(精选自 Section 13 前 3 条)
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
<!-- 更新摘要(由 Skills Builder 自动追加)
|
|
342
|
+
[{YYYY-MM-DD}] {stack} strategy 生成:17节完整格式(v3-{stack}),扫描 {M} 个文件,不变量{I}条,词汇{G}个,隐性知识率{H}%
|
|
343
|
+
-->
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## 节级最低内容门槛(用于 `/modus:verify`)
|
|
349
|
+
|
|
350
|
+
| 节 | 最低门槛(自检通过条件) |
|
|
351
|
+
|---|------------------------|
|
|
352
|
+
| Section 2 | 至少 1 个核心实体;字段表非空;含枚举的域必须列出枚举值 |
|
|
353
|
+
| Section 3 | 字段说明表非空;至少 1 条 `[process]` 或 `[guideline]` |
|
|
354
|
+
| Section 5 | 接口表非空;每接口含鉴权与幂等标注 |
|
|
355
|
+
| Section 7 | 至少 1 段真实源码(非占位符) |
|
|
356
|
+
| Section 8 | 存在状态字段时必须有状态图 + 转换表 |
|
|
357
|
+
| Section 13 | draft(used) 状态时禁止仅写"暂无发现" |
|
|
358
|
+
| Section 15 | 至少 1 条不变量;从 `if/else 推断 + 校验器分析 + 人工访谈`三源任一写入 |
|
|
359
|
+
| Section 16 | 至少 3 个术语;非通用概念必须给出"差异说明" |
|
|
360
|
+
| Section 17 | 17.A 至少覆盖 5 种任务类型;17.B 至少覆盖"开发前必读"+"FAQ"+"高频踩坑" |
|
|
361
|
+
|
|
362
|
+
> 不满足任一门槛 → `/modus:verify` 报警;强制修复后才能从 `draft` 升为 `verified`。
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Fallback Strategy — 通用 Glob 兜底(任意未识别项目)
|
|
3
|
+
parent_skill: modus-init
|
|
4
|
+
load_when: "Router 在 Step 0.5 检测到 primaryStack=fallback / go / python / rust / backend-node 时加载(前 4 项为待 Phase 4 扩展的占位栈)"
|
|
5
|
+
stack: fallback | go | python | rust | backend-node
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Fallback Strategy(通用 Glob 兜底)
|
|
9
|
+
|
|
10
|
+
> 当 Router 在 Step 0.5 命中以下情况时加载本文档:
|
|
11
|
+
> - `primaryStack = fallback`(未检测出任何已知栈)
|
|
12
|
+
> - `primaryStack = go / python / rust / backend-node`(已识别但暂无专属 strategy,等 Phase 4 扩展)
|
|
13
|
+
>
|
|
14
|
+
> 本 strategy 提供**简化但可用**的扫描和 Skill 生成流程,确保 `/modus:init` 在任何项目下都能产出可用的知识库,不报错。
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## §1 适用场景
|
|
19
|
+
|
|
20
|
+
| 场景 | 行为 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| Go / Python / Rust / Node 后端 | 跳过精细的语义扫描,按目录前缀分组 |
|
|
23
|
+
| 完全未识别项目(无 build 文件) | 仅按 `src/` 或 `app/` 子目录分组,提示用户手动调整 |
|
|
24
|
+
| 用户主动选 fallback | 同上 |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## §2 简化的 5 轮扫描(按目录前缀分组)
|
|
29
|
+
|
|
30
|
+
### 轮次 1:模块发现
|
|
31
|
+
|
|
32
|
+
按以下信号逐项检查:
|
|
33
|
+
|
|
34
|
+
| 信号 | 模块识别方式 |
|
|
35
|
+
|------|-----------|
|
|
36
|
+
| `go.mod` | 单 module;按子包(含 `*.go` 的目录)分组 |
|
|
37
|
+
| `pyproject.toml` / `setup.py` | 单 package;按 `src/<pkg>/` 子目录分组 |
|
|
38
|
+
| `Cargo.toml` | 单 crate;按 `src/<mod>/` 分组 |
|
|
39
|
+
| `package.json`(NestJS/Express) | 按 `src/modules/<name>/` 分组 |
|
|
40
|
+
| 都没有 | 按 `src/` 或 `app/` 一级子目录分组 |
|
|
41
|
+
|
|
42
|
+
输出:
|
|
43
|
+
```
|
|
44
|
+
[1/5 模块发现] ✓ 发现 {N} 个候选模块(兜底模式:按目录前缀分组)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 轮次 2:文件清单(仅按扩展名分布)
|
|
48
|
+
|
|
49
|
+
按扩展名统计每个候选模块的文件数:
|
|
50
|
+
|
|
51
|
+
| 扩展名 | 含义 |
|
|
52
|
+
|--------|------|
|
|
53
|
+
| `.go` | Go 源码 |
|
|
54
|
+
| `.py` | Python 源码 |
|
|
55
|
+
| `.rs` | Rust 源码 |
|
|
56
|
+
| `.ts` / `.js` | Node 后端源码 |
|
|
57
|
+
| `.sql` | 数据库脚本 |
|
|
58
|
+
| `.proto` | Protocol Buffers 契约 |
|
|
59
|
+
|
|
60
|
+
不做语义分类,仅做计数:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
src/order/ — 18 个 .go 文件 + 2 个 .sql + 1 个 .proto
|
|
64
|
+
src/payment/ — 12 个 .go 文件 + 1 个 .sql
|
|
65
|
+
src/user/ — 8 个 .go 文件
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 轮次 3:候选域语义(弱推断)
|
|
69
|
+
|
|
70
|
+
仅做包名/目录名匹配业务名词(`order/pay/user/payment/inventory/track/album` 等):
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
src/order/ → 候选域 biz-order [置信度 Medium]
|
|
74
|
+
src/payment/ → 候选域 biz-payment [置信度 Medium]
|
|
75
|
+
src/utils/ → 通用层(不入业务域)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
> **关键:兜底模式下置信度统一标 Medium**,强制用户手动确认每个域归属(不允许自动跳过)。
|
|
79
|
+
|
|
80
|
+
### 轮次 4 / 5:跳过
|
|
81
|
+
|
|
82
|
+
- 跨域依赖:跳过(Section 10 留"暂无发现,随工作流积累")
|
|
83
|
+
- 资源所有权:跳过(Section 12 留"暂无发现,随工作流积累")
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## §3 简化的 6 节业务 Skill 模板
|
|
88
|
+
|
|
89
|
+
> 兜底模式下生成的 Skill 仅含**最关键的 6 节**,节号保持与通用 17 节骨架一致(不重新编号),其余节标记为「暂无发现,随工作流积累」。
|
|
90
|
+
>
|
|
91
|
+
> Section 编号保留与通用骨架完全一致,便于后续用户升级到完整 17 节时无需重排。
|
|
92
|
+
|
|
93
|
+
| 必生成节 | 内容来源 |
|
|
94
|
+
|---------|---------|
|
|
95
|
+
| **1 域概述** | 用户在确认阶段输入的一句话职责 |
|
|
96
|
+
| **3 业务规则** | 仅扫描注释中的 `// TODO/FIXME/NOTE` |
|
|
97
|
+
| **4 关键文件索引** | 模块下文件清单(按扩展名分类) |
|
|
98
|
+
| **5 API 契约** | 扫描简单信号:HTTP handler / gRPC method / FastAPI route / Express route |
|
|
99
|
+
| **13 常见开发陷阱** | 「暂无发现,随工作流积累」 |
|
|
100
|
+
| **17 新人上手指南** | 仅 17.B 简化版:模块入口文件 + 启动命令 + 主要目录 |
|
|
101
|
+
|
|
102
|
+
其余节(2/6/7/8/9/10/11/12/14/15/16)保留节标题,节内统一填充:
|
|
103
|
+
|
|
104
|
+
```markdown
|
|
105
|
+
## {N}. {节标题} {标签}
|
|
106
|
+
|
|
107
|
+
> 暂无发现,随工作流积累(fallback strategy 简化生成)。
|
|
108
|
+
> 升级路径:当本项目栈被 modus 框架正式支持后,可运行 `/modus:init --enhance {domain}` 重新生成完整 17 节。
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## §4 兜底模式的 frontmatter
|
|
114
|
+
|
|
115
|
+
```yaml
|
|
116
|
+
stack: fallback # 或 go / python / rust / backend-node(按实际检测)
|
|
117
|
+
format_version: v3-fallback # 标记为兜底简化版
|
|
118
|
+
key_files: [...] # 仍按"按扩展名分布前 20 个"选取
|
|
119
|
+
external_deps: {} # 不解析;用户可手动补充
|
|
120
|
+
domain_confidence: 5 # 兜底统一 Medium
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
> 其他防腐字段全部按 `shared/frontmatter-spec.md` 规范,不允许漏写。
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## §5 兜底模式的提示与升级路径
|
|
128
|
+
|
|
129
|
+
Step 14 完成回报必须包含:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
⚠️ 当前项目栈({primaryStack})未深度适配,已使用 fallback strategy 生成简化 6 节业务 Skill。
|
|
133
|
+
- 本次产出:{N} 个域,每域含 6 节核心知识 + 11 节占位
|
|
134
|
+
- 限制:跨域依赖图、资源所有权图、状态机均为占位
|
|
135
|
+
- 升级路径:
|
|
136
|
+
1. 等 Modus 后续版本支持本栈(Phase 4:go-init / python-init)
|
|
137
|
+
2. 通过 /modus:platform -add 反馈需求(含范式样例)
|
|
138
|
+
3. 手动编辑 modus/knowledge/biz-*/SKILL.md 补充内容,运行 /modus:verify 升级
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## §6 用户提供范式样例后的迁移路径
|
|
144
|
+
|
|
145
|
+
当用户后续提供具体语言(如 Go)的代码范式后:
|
|
146
|
+
|
|
147
|
+
1. **新建** `templates/skills/modus-init/strategies/go-init.md`(参照 java-init.md 的结构)
|
|
148
|
+
2. **更新** `shared/stack-detection.md` 第 2 节:将 `go` 路由到新文件
|
|
149
|
+
3. **更新** `shared/universal-skill-format.md` 第"跨栈语义对齐表"加入 Go 栈条目
|
|
150
|
+
4. **保留兼容性**:本 fallback-init.md 不删除,作为永远的兜底入口
|