@mingfuyun/star-allinone 0.4.10 → 0.4.12
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/docs/skills/overview.md +8 -4
- package/package.json +1 -1
- package/scripts/cli.js +29 -0
- package/scripts/gen/doctor.js +10 -2
- package/skills/README.md +6 -1
- package/skills/shared/dev-flow/SKILL.md +110 -0
- package/skills/shared/dev-flow/references/gates.md +14 -0
- package/skills/shared/dev-flow/references/plan-template.md +64 -0
- package/skills/shared/dev-flow/references/session-protocol.md +53 -0
- package/skills/shared/dev-flow/references/swagger-gate.md +47 -0
- package/skills/shared/dev-flow/references/verify-commands.md +28 -0
package/docs/skills/overview.md
CHANGED
|
@@ -8,15 +8,18 @@
|
|
|
8
8
|
|
|
9
9
|
| | 整单(flow) | 单点 |
|
|
10
10
|
| --- | --- | --- |
|
|
11
|
-
| 话术 |
|
|
12
|
-
|
|
|
11
|
+
| 话术 | 「按星系流程…」「按流程做完 / 按流程改…」 | 「提交代码」「生成某接口」「发布测试环境」…(无串联话术) |
|
|
12
|
+
| 入口 | 先 `$custom-entry`(或「按星系标准 / 规范 / 流程」),再委托 internal `shared-dev-flow` | 先同一入口,再按 intents 单点委托 |
|
|
13
|
+
| 先出方案 | 是,等 `确认方案`;小单可薄,门禁不裁 | 否(submit/publish 自带提案/确认) |
|
|
13
14
|
| 口径文档 | [dev-flow/](dev-flow/)(方案模板、SwaggerGate、Verify、会话字段、[gates.md](dev-flow/gates.md)) | 仍守各 skill 自身门禁 |
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
「按星系标准 / 按星系规范」只表示入 entry;不含「按流程」或「按星系流程」时仍走单点。是否串联不看改动大小。
|
|
17
|
+
|
|
18
|
+
口令:`确认方案` ≠ `确认提交` ≠ `确认推送流水线`(详见 [dev-flow/gates.md](dev-flow/gates.md))。校验失败后只有 `豁免校验继续提交` 可进入提交门,且仍须 `确认提交`。
|
|
16
19
|
|
|
17
20
|
## 用户入口
|
|
18
21
|
|
|
19
|
-
只使用 **`$custom-entry
|
|
22
|
+
只使用 **`$custom-entry`**,或自然语言「按星系标准 / 规范 / 流程…」。不要直接 `$shared-*`,不要直接调用内部 `custom-*`(如全量 swagger / Prism 实现层)。**禁止**把 `$shared-dev-flow` 当作用户入口;按流程只经 entry 委托该 internal skill。适用**所有**接入能力包的星系业务仓;仓别差异在各仓 `custom-entry`。
|
|
20
23
|
|
|
21
24
|
| 经入口委托到 | 用途 |
|
|
22
25
|
| --- | --- |
|
|
@@ -26,6 +29,7 @@
|
|
|
26
29
|
| `shared-publish-test` | 明确要求测发后再跑;`git push` 后不要自动调用 |
|
|
27
30
|
| `shared-tracking` | 埋点接入与补齐 |
|
|
28
31
|
| `shared-prism-mock`(内部,若已 sync 且 `prism.enabled`) | 本地 Prism / `dev:mock` / overrides;说明见 [prism-mock.md](prism-mock.md) |
|
|
32
|
+
| `shared-dev-flow`(内部,禁止直呼) | 按流程 / 按星系流程的状态机;只由 entry 在 flow 意图下 Read |
|
|
29
33
|
| 项目 `custom-*`(内部) | 如全量 swagger / OpenAPI 增量等,见各仓 `AGENTS.md` |
|
|
30
34
|
|
|
31
35
|
## 示例
|
package/package.json
CHANGED
package/scripts/cli.js
CHANGED
|
@@ -26,6 +26,7 @@ Run from a business project containing .star-allinone.json.
|
|
|
26
26
|
skills sync writes package skills/shared/* to <project>/.agents/skills/shared-*.
|
|
27
27
|
If docs/skills/<name>.md exists, it is copied to shared-<name>/references/guide.md.
|
|
28
28
|
docs/skills/overview.md is copied to shared-project-conventions/references/skills-overview.md.
|
|
29
|
+
docs/skills/dev-flow/*.md is copied into skills/shared/dev-flow/references/ before that skill is synced.
|
|
29
30
|
It never writes ~/.codex/skills and never modifies custom-* skills.
|
|
30
31
|
If <project>/AGENTS.md is missing, it copies examples/AGENTS.md once.
|
|
31
32
|
|
|
@@ -127,6 +128,33 @@ function skillGuideSource(skillName) {
|
|
|
127
128
|
return path.join(root, 'docs', 'skills', `${skillName}.md`);
|
|
128
129
|
}
|
|
129
130
|
|
|
131
|
+
const DEV_FLOW_REFERENCE_DOCS = [
|
|
132
|
+
'plan-template.md',
|
|
133
|
+
'swagger-gate.md',
|
|
134
|
+
'verify-commands.md',
|
|
135
|
+
'gates.md',
|
|
136
|
+
'session-protocol.md',
|
|
137
|
+
];
|
|
138
|
+
|
|
139
|
+
/** docs/skills/dev-flow/ is the only source; refresh skill references before sync. */
|
|
140
|
+
function materializeDevFlowReferences(options = {}) {
|
|
141
|
+
const sourceDir = path.join(root, 'docs', 'skills', 'dev-flow');
|
|
142
|
+
const targetDir = path.join(skillsRoot, 'dev-flow', 'references');
|
|
143
|
+
if (!fs.existsSync(path.join(skillsRoot, 'dev-flow'))) return;
|
|
144
|
+
if (!options.dryRun) fs.mkdirSync(targetDir, { recursive: true });
|
|
145
|
+
for (const name of DEV_FLOW_REFERENCE_DOCS) {
|
|
146
|
+
const source = path.join(sourceDir, name);
|
|
147
|
+
if (!fs.existsSync(source)) {
|
|
148
|
+
throw new Error(`Missing dev-flow source: docs/skills/dev-flow/${name}`);
|
|
149
|
+
}
|
|
150
|
+
const relativePath = path.join('skills', 'shared', 'dev-flow', 'references', name);
|
|
151
|
+
console.log(`${options.dryRun ? '[dry-run] ' : ''}${relativePath} (from docs/skills/dev-flow/${name})`);
|
|
152
|
+
if (options.dryRun) continue;
|
|
153
|
+
const banner = `<!-- 维护源:能力包 docs/skills/dev-flow/${name} — 勿在业务仓改此副本 -->\n\n`;
|
|
154
|
+
fs.writeFileSync(path.join(targetDir, name), banner + fs.readFileSync(source, 'utf8'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
130
158
|
/** Copy pack docs/skills/<name>.md into synced skill as references/guide.md (single doc source). */
|
|
131
159
|
function copySkillGuideDoc(skillName, skillTarget, variables, options, relativeRoot) {
|
|
132
160
|
const source = skillGuideSource(skillName);
|
|
@@ -210,6 +238,7 @@ function syncProject(options) {
|
|
|
210
238
|
const skills = selectedSharedSkills(config);
|
|
211
239
|
const syncedNames = skills.map((name) => publicSkillName(name, prefix));
|
|
212
240
|
|
|
241
|
+
materializeDevFlowReferences(options);
|
|
213
242
|
if (!options.dryRun) fs.mkdirSync(destination, { recursive: true });
|
|
214
243
|
for (const skillName of skills) {
|
|
215
244
|
copySkill(path.join(skillsRoot, skillName), destination, skillName, prefix, variables, options);
|
package/scripts/gen/doctor.js
CHANGED
|
@@ -71,8 +71,12 @@ function render(content, variables) {
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
/** Sync 注入的人读副本,不在 skills/shared 源树内,比对时忽略 */
|
|
75
|
+
const SYNC_INJECTED_DOCS = new Set(['guide.md', 'skills-overview.md']);
|
|
76
|
+
|
|
77
|
+
function hashTree(dir, variables, options = {}) {
|
|
75
78
|
if (!fs.existsSync(dir)) return '';
|
|
79
|
+
const ignoreInjected = options.ignoreInjectedDocs === true;
|
|
76
80
|
const files = [];
|
|
77
81
|
const walk = (current, relative) => {
|
|
78
82
|
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
@@ -82,6 +86,9 @@ function hashTree(dir, variables) {
|
|
|
82
86
|
walk(full, nextRel);
|
|
83
87
|
continue;
|
|
84
88
|
}
|
|
89
|
+
if (ignoreInjected && SYNC_INJECTED_DOCS.has(entry.name)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
85
92
|
let content = fs.readFileSync(full);
|
|
86
93
|
if (variables && TEMPLATE_EXT.has(path.extname(entry.name).toLowerCase())) {
|
|
87
94
|
content = Buffer.from(render(content.toString('utf8'), variables));
|
|
@@ -257,7 +264,8 @@ function runDoctor(cwd, options = {}) {
|
|
|
257
264
|
sharedSkillName: publicName,
|
|
258
265
|
project: { ...config, ...config.variables },
|
|
259
266
|
};
|
|
260
|
-
|
|
267
|
+
// dest 可能多出 docs sync 注入的 guide.md / skills-overview.md,比对时忽略
|
|
268
|
+
if (hashTree(source, variables) !== hashTree(dest, variables, { ignoreInjectedDocs: true })) {
|
|
261
269
|
findings.push(check(false, 'warn', `${publicName} is stale vs this package. Run pnpm exec star-allinone skills sync`));
|
|
262
270
|
} else {
|
|
263
271
|
findings.push(check(true, 'ok', publicName));
|
package/skills/README.md
CHANGED
|
@@ -16,6 +16,7 @@ business-app/
|
|
|
16
16
|
│ ├── shared-design-to-page/
|
|
17
17
|
│ ├── shared-review-and-submit/
|
|
18
18
|
│ ├── shared-publish-test/
|
|
19
|
+
│ ├── shared-dev-flow/ ← internal;仅 custom-entry 在 flow 下委托
|
|
19
20
|
│ ├── shared-project-conventions/ ← 无 SKILL.md,给入口读
|
|
20
21
|
│ ├── shared-i-have-adhd/ ← 无 SKILL.md,给入口读
|
|
21
22
|
│ ├── custom-entry/ ← 可选:唯一对话编排入口 + 领域规则正文
|
|
@@ -61,11 +62,12 @@ Cursor / Codex 的常驻说明只放仓库根 `AGENTS.md`(模板见 `examples/
|
|
|
61
62
|
├── publish-test/
|
|
62
63
|
├── tracking/
|
|
63
64
|
├── prism-mock/ # SKILL;正文 sync 自 docs/skills/prism-mock.md
|
|
65
|
+
├── dev-flow/ # internal SKILL;references 拷自 docs/skills/dev-flow/
|
|
64
66
|
├── project-conventions/
|
|
65
67
|
└── i-have-adhd/
|
|
66
68
|
```
|
|
67
69
|
|
|
68
|
-
技能长文只改 `docs/skills/`。`skills sync` 会把 `docs/skills/<name>.md` 写入业务仓 `shared-<name>/references/guide.md`,把 `overview.md` 写入 `shared-project-conventions/references/skills-overview.md
|
|
70
|
+
技能长文只改 `docs/skills/`。`skills sync` 会把 `docs/skills/<name>.md` 写入业务仓 `shared-<name>/references/guide.md`,把 `overview.md` 写入 `shared-project-conventions/references/skills-overview.md`,并把 `docs/skills/dev-flow/*.md` 写入包内 `skills/shared/dev-flow/references/` 后再同步。业务仓不要再维护 `docs/prism-mock.md` 等长文副本,也不要直呼 `$shared-dev-flow`。
|
|
69
71
|
|
|
70
72
|
公共入口写死两边已对齐的硬规则,例如:页面走 `MFRequest`、DTO 放 namespace typings、表格用业务仓 `@/components/CommonTable/MFProTable`(不要从包里找 `MFTablePro`)、`ProForm`、弹层从 `@mingfuyun/star-allinone` 导入 `BaseModal` / `CustomDrawer` / `HocModal`、`await` 必须 try/catch、禁止无说明的 `any`、React 18。
|
|
71
73
|
|
|
@@ -147,6 +149,8 @@ git commit -m "chore(skill): 更新公共 skill"
|
|
|
147
149
|
| `shared-publish-test` | 测发 |
|
|
148
150
|
| `shared-tracking` | 埋点接入(含 onClick、Tabs、下载 href) |
|
|
149
151
|
|
|
152
|
+
`shared-dev-flow` 是 internal 状态机,不是上表入口。按流程只经 `custom-entry` 委托。
|
|
153
|
+
|
|
150
154
|
## 公共规则写在哪里
|
|
151
155
|
|
|
152
156
|
| 入口 | 规则位置 | 覆盖内容 |
|
|
@@ -158,6 +162,7 @@ git commit -m "chore(skill): 更新公共 skill"
|
|
|
158
162
|
| `shared-tracking` | [SKILL.md](./shared/tracking/SKILL.md) | 埋点接入:按钮、onClick、Tabs 切换、下载 href |
|
|
159
163
|
| (非入口)`shared-project-conventions` | `architecture.md`、`mfprotable.md`、`component-contract.md`、`review-checklist.md`(含埋点审查)、`quality-checklist.md` | 架构、导入合同、质量清单 |
|
|
160
164
|
| (非入口)`shared-i-have-adhd` | `i-have-adhd.md` | 用户输出格式 |
|
|
165
|
+
| (非入口)`shared-dev-flow` | `SKILL.md` + `references/`(拷自 `docs/skills/dev-flow/`) | 按流程状态机;禁止当用户入口 |
|
|
161
166
|
|
|
162
167
|
以下内容**不**写进公共 skill 源码:
|
|
163
168
|
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {{sharedSkillName}}
|
|
3
|
+
description: >-
|
|
4
|
+
Internal. Not a user entry. Only custom-entry may delegate this skill when the user asked for 按流程 or 按星系流程. Do not invoke from a direct $shared-dev-flow request; send the user back to custom-entry or 按星系规范.
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Dev Flow(internal)
|
|
9
|
+
|
|
10
|
+
本 skill 是整单串联状态机,**不是用户入口**。
|
|
11
|
+
|
|
12
|
+
若用户本轮直接 `$shared-dev-flow` / `$dev-flow`,或对话没有先经过 `custom-entry`:停住,请用户改走 `$custom-entry` 或「按星系标准 / 规范 / 流程」。不要在这里开始改代码。
|
|
13
|
+
|
|
14
|
+
经 `custom-entry` 在 flow 意图下委托时:完整执行下面的阶段机。原子 skill 必须 **完整 Read 后原样执行**,不得缩短其确认门,不得把正文抄进本目录。
|
|
15
|
+
|
|
16
|
+
## 每轮输出
|
|
17
|
+
|
|
18
|
+
按 [references/session-protocol.md](references/session-protocol.md) 给出:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
phase: <intake|plan|await_plan|swagger_gate|implement|verify|await_commit|await_publish|done>
|
|
22
|
+
done: …
|
|
23
|
+
blocked: 无 | …
|
|
24
|
+
next_action: …
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`await_plan` / `await_commit` / `await_publish` 同时附上当前方案摘要。
|
|
28
|
+
|
|
29
|
+
可选:把 phase、方案摘要、门禁状态写入仓库 `.agents/dev-flow-session.md`。续跑时若该文件存在,优先读它。
|
|
30
|
+
|
|
31
|
+
## 续跑
|
|
32
|
+
|
|
33
|
+
新会话继续同一单时:
|
|
34
|
+
|
|
35
|
+
1. 先读 `.agents/dev-flow-session.md`(若有),或请用户确认上一 `phase` 以及是否已经 `确认方案`。
|
|
36
|
+
2. 不确定则从 `plan` 或 `await_plan` 恢复。
|
|
37
|
+
3. **禁止**默认方案已确认。未确认则不得改业务代码。
|
|
38
|
+
|
|
39
|
+
## 阶段
|
|
40
|
+
|
|
41
|
+
### intake
|
|
42
|
+
|
|
43
|
+
澄清需求。已经命中「按流程」或「按星系流程」则保持 flow,**不得**因为「只是改个字段」改判为单点。意图仍不清时只问一句:是否按星系规范;是否走按流程串联。
|
|
44
|
+
|
|
45
|
+
### plan
|
|
46
|
+
|
|
47
|
+
按 [references/plan-template.md](references/plan-template.md) 输出方案。小单可以写短,必填字段仍要齐。然后进入 `await_plan`。
|
|
48
|
+
|
|
49
|
+
### await_plan
|
|
50
|
+
|
|
51
|
+
等待用户说出 `确认方案`。未确认:**禁止**改业务代码。`确认方案` 不等于提交或测发。
|
|
52
|
+
|
|
53
|
+
方案确认后若用户变更需求、扩大或缩小范围:回到 `plan`,给出修订方案,再次 `await_plan`。未再次收到 `确认方案` 不得按新范围 `implement`。已改代码与新方案冲突时,`blocked` 说明冲突,请用户确认回滚或按新方案重做。
|
|
54
|
+
|
|
55
|
+
### swagger_gate
|
|
56
|
+
|
|
57
|
+
按 [references/swagger-gate.md](references/swagger-gate.md) 只认分支类型,再读 `.agents/skills/custom-entry/references/project-rules.md`(及 intents)决定仓别 skill 名。不确定就问一句,禁止猜全量。
|
|
58
|
+
|
|
59
|
+
| 分支类型 | 动作 |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| 跳过 | 不跑契约同步 |
|
|
62
|
+
| 单接口 gen | Read 并执行 `shared-api-to-service`;禁止全量脚本 |
|
|
63
|
+
| 全量或增量同步 | Read 并执行该仓契约同步 custom skill |
|
|
64
|
+
| 可选 Prism | 该仓已启用且用户要本地 mock 对齐时,同步后再 Read `shared-prism-mock` |
|
|
65
|
+
|
|
66
|
+
示例(仍以 overlay 为准):星链全量 `custom-swagger-to-markdown`,星眼增量 `custom-openapi-update`。
|
|
67
|
+
|
|
68
|
+
### implement
|
|
69
|
+
|
|
70
|
+
按方案里的有序清单逐步委托。禁止跳步、禁止扩大清单外范围。每个原子 skill 完整 Read 后原样执行。
|
|
71
|
+
|
|
72
|
+
### verify
|
|
73
|
+
|
|
74
|
+
按 [references/verify-commands.md](references/verify-commands.md) 跑该仓硬门槛命令,并核对本方案验证点。
|
|
75
|
+
|
|
76
|
+
- 硬门槛失败:默认回修,**不进入** `await_commit`。
|
|
77
|
+
- 只有用户明确说出 `豁免校验继续提交` 才可进入 `await_commit`。提案里标出已豁免项,之后仍须 `确认提交`。
|
|
78
|
+
- 「继续吧」「OK」不算豁免。
|
|
79
|
+
|
|
80
|
+
### await_commit
|
|
81
|
+
|
|
82
|
+
Read 并原样执行 `.agents/skills/shared-review-and-submit/SKILL.md`。停住等待 `确认提交` 或 `确认提交并推送`。口令以该 skill 与 [references/gates.md](references/gates.md) 为准。
|
|
83
|
+
|
|
84
|
+
提交完成后:
|
|
85
|
+
|
|
86
|
+
| 条件 | 下一步 |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| 仅 `确认提交`(没有 push) | 不询问测发。可提示测发需先推送分支。→ `done` |
|
|
89
|
+
| `确认提交并推送` 且 push 成功 | 询问:「是否发布测试环境?」然后停住 |
|
|
90
|
+
| push 失败 | `blocked`,不要进入测发 |
|
|
91
|
+
|
|
92
|
+
询问「是否发布」不等于已获测发授权。不得从提交口令推断测发。
|
|
93
|
+
|
|
94
|
+
### await_publish
|
|
95
|
+
|
|
96
|
+
仅当用户明确要测发(例如「发布测试环境」「要」)后进入本阶段。再等待 `确认推送流水线` 或 `发布测试环境`,然后 Read 并原样执行 `.agents/skills/shared-publish-test/SKILL.md`。
|
|
97
|
+
|
|
98
|
+
用户说不测发 → `done`,不跑 publish。
|
|
99
|
+
|
|
100
|
+
### done
|
|
101
|
+
|
|
102
|
+
本单完成,或用户终止。
|
|
103
|
+
|
|
104
|
+
## 硬约束
|
|
105
|
+
|
|
106
|
+
- 不因改动小把已命中的 flow 降成单点或直接改代码。
|
|
107
|
+
- 三道门禁互不推断:`确认方案` ≠ `确认提交` / `确认提交并推送` ≠ `确认推送流水线` / `发布测试环境`。
|
|
108
|
+
- `豁免校验继续提交` 只跳过 verify 拦截,不代替提交或测发确认。
|
|
109
|
+
- 不自动 commit,不在 push 成功后自动测发。
|
|
110
|
+
- 不重写、不摘要原子 skill 的确认门。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!-- 维护源:能力包 docs/skills/dev-flow/gates.md — 勿在业务仓改此副本 -->
|
|
2
|
+
|
|
3
|
+
# 确认门禁口令
|
|
4
|
+
|
|
5
|
+
> 维护源:能力包 `docs/skills/dev-flow/gates.md`
|
|
6
|
+
> 跨仓统一;三道门禁**互不推断**。
|
|
7
|
+
|
|
8
|
+
| 门禁 | 口令(须字面接近) | 不可替代为 |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| 方案 | `确认方案` | 「确认」「OK」、提交/测发口令 |
|
|
11
|
+
| 提交 | `确认提交` / `确认提交并推送` | 方案确认、测发确认、「确认」单字 |
|
|
12
|
+
| 测发 | `确认推送流水线` / `发布测试环境` | push 成功、提交确认、方案确认 |
|
|
13
|
+
|
|
14
|
+
`确认方案` ≠ `确认提交` ≠ `确认推送流水线`
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<!-- 维护源:能力包 docs/skills/dev-flow/plan-template.md — 勿在业务仓改此副本 -->
|
|
2
|
+
|
|
3
|
+
# 实现方案模板(整单 flow)
|
|
4
|
+
|
|
5
|
+
> 维护源:能力包 `docs/skills/dev-flow/plan-template.md`
|
|
6
|
+
> 适用:所有接入 `$custom-entry` 的业务仓。整单在改业务代码前须填齐并等待 `确认方案`。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 必填字段
|
|
11
|
+
|
|
12
|
+
| 字段 | 说明 |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| 需求摘要 | 一句话目标 + 关键验收点 |
|
|
15
|
+
| 影响路径 | 预计改动的目录/模块(页面、Service、配置等) |
|
|
16
|
+
| 契约结论 | `无` / `有` / `不确定`(不确定则先问,见 [swagger-gate.md](swagger-gate.md)) |
|
|
17
|
+
| 有序 skill 清单 | 按执行顺序列出将委托的 skill / 动作(勿跳步) |
|
|
18
|
+
| 验证点 | 对照 [verify-commands.md](verify-commands.md) 本仓行 + 业务手测项 |
|
|
19
|
+
| 风险 | 公共组件、权限、数据兼容、测发范围等 |
|
|
20
|
+
| 非目标 | 明确不做的事,防止范围膨胀 |
|
|
21
|
+
| 门禁说明 | 本单将停在哪些确认点(方案 / 提交 / 测发) |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 输出骨架(可直接粘贴)
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
## 实现方案
|
|
29
|
+
|
|
30
|
+
**需求摘要:** …
|
|
31
|
+
|
|
32
|
+
**影响路径:**
|
|
33
|
+
- …
|
|
34
|
+
|
|
35
|
+
**契约结论:** 无 | 有 | 不确定
|
|
36
|
+
- 若有:分支类型(单接口 gen / 全量或增量同步 / + Prism 刷新)→ 见该仓 project-rules
|
|
37
|
+
|
|
38
|
+
**有序 skill 清单:**
|
|
39
|
+
1. …
|
|
40
|
+
2. …
|
|
41
|
+
|
|
42
|
+
**验证点:**
|
|
43
|
+
- [ ] …
|
|
44
|
+
- [ ] 本仓 Verify 命令(见 verify-commands)
|
|
45
|
+
|
|
46
|
+
**风险:** …
|
|
47
|
+
|
|
48
|
+
**非目标:** …
|
|
49
|
+
|
|
50
|
+
**门禁:** 确认方案 →(实现)→ 确认提交[并推送] →(可选)确认推送流水线
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 试填示例(虚构,星链语境)
|
|
56
|
+
|
|
57
|
+
**需求摘要:** 在 IP 回收列表增加「备注」筛选,对接已有 query 字段 `remark`。
|
|
58
|
+
**影响路径:** `src/pages/IPResource/IPRecycle/const.tsx`(及必要时页面)。
|
|
59
|
+
**契约结论:** 无(契约已含 `remark`,仅前端筛选项)。
|
|
60
|
+
**有序 skill 清单:** 1)直接改页面列配置(单点,非 flow 亦可)2)`pnpm typecheck`。
|
|
61
|
+
**验证点:** typecheck;列表搜索备注。
|
|
62
|
+
**风险:** 无 label 工具栏 placeholder 须符合 project-rules。
|
|
63
|
+
**非目标:** 不改公共 `MFProTable`;不测发。
|
|
64
|
+
**门禁:** 若走 flow 则 `确认方案`;入库时 `确认提交`。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- 维护源:能力包 docs/skills/dev-flow/session-protocol.md — 勿在业务仓改此副本 -->
|
|
2
|
+
|
|
3
|
+
# 会话协议(编排输出字段)
|
|
4
|
+
|
|
5
|
+
> 维护源:能力包 `docs/skills/dev-flow/session-protocol.md`
|
|
6
|
+
> 整单 / 长会话每轮至少带齐下列字段,便于人扫读与后续 `shared-dev-flow` 落状态。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 字段
|
|
11
|
+
|
|
12
|
+
| 字段 | 含义 |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `phase` | 当前阶段枚举(见下) |
|
|
15
|
+
| `done` | 本轮已完成的动作(短列表) |
|
|
16
|
+
| `blocked` | 卡住原因;无则写 `无` |
|
|
17
|
+
| `next_action` | 下一步由谁做、做什么(含是否等待口令) |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## `phase` 枚举
|
|
22
|
+
|
|
23
|
+
| phase | 说明 |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| `intake` | 澄清需求 / 判定整单 vs 单点 |
|
|
26
|
+
| `plan` | 输出实现方案 |
|
|
27
|
+
| `await_plan` | 等待 `确认方案` |
|
|
28
|
+
| `swagger_gate` | 契约判定与同步 |
|
|
29
|
+
| `implement` | 按 skill 清单改代码 |
|
|
30
|
+
| `verify` | 跑 Verify 命令与手测点 |
|
|
31
|
+
| `await_commit` | 审阅提案后等待 `确认提交` |
|
|
32
|
+
| `await_publish` | 等待测发确认词 |
|
|
33
|
+
| `done` | 本单目标已完成(或用户终止) |
|
|
34
|
+
|
|
35
|
+
单点任务可只用子集(如 submit → `await_commit`)。
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 示例
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
phase: await_plan
|
|
43
|
+
done: 已输出实现方案(契约结论=无;清单 2 步)
|
|
44
|
+
blocked: 等待用户确认方案
|
|
45
|
+
next_action: 用户回复「确认方案」后进入 implement
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
phase: await_commit
|
|
50
|
+
done: typecheck 通过;已给出提交提案
|
|
51
|
+
blocked: 等待确认提交
|
|
52
|
+
next_action: 用户「确认提交」或「确认提交并推送」;勿推断测发
|
|
53
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- 维护源:能力包 docs/skills/dev-flow/swagger-gate.md — 勿在业务仓改此副本 -->
|
|
2
|
+
|
|
3
|
+
# SwaggerGate(契约变更判定)
|
|
4
|
+
|
|
5
|
+
> 维护源:能力包 `docs/skills/dev-flow/swagger-gate.md`
|
|
6
|
+
> 框架通用;**具体 skill 名、契约文件名见各仓** `custom-entry/references/project-rules.md`。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 判定优先级
|
|
11
|
+
|
|
12
|
+
1. **用户明确声明**(「契约没变」「swagger 已更新」「只 gen 这一个接口」)
|
|
13
|
+
2. **git diff / 工作区**是否改动本仓契约文件(见 `.star-allinone.json` → `openapi`)
|
|
14
|
+
3. 仍不确定 → **停问一句**,禁止猜测后跑全量脚本
|
|
15
|
+
|
|
16
|
+
不确定话术示例:
|
|
17
|
+
|
|
18
|
+
> 这次是「只生成单个 METHOD/path」还是「契约文件已更新,要全量/增量同步 Service」?
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 分支类型(通用)
|
|
23
|
+
|
|
24
|
+
| 分支类型 | 何时 | Agent 动作 |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| 跳过 | 契约结论 = 无 | 不跑契约同步 skill |
|
|
27
|
+
| 单接口 gen | 仅一个 `METHOD /path`(或 operationId) | 委托 `shared-api-to-service`;**禁止**全量脚本 |
|
|
28
|
+
| 全量或增量同步 | 整份契约更新 / 多接口重建 | 委托该仓「契约同步」custom skill |
|
|
29
|
+
| 可选 Prism 刷新 | 仓已启用 Prism,且用户要本地 mock 对齐 | 在同步后委托 `shared-prism-mock`(保留 overrides) |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 示例映射(本波试点,非能力上限)
|
|
34
|
+
|
|
35
|
+
| 仓 | 契约文件 | 单接口 | 全量/增量 | Prism |
|
|
36
|
+
| --- | --- | --- | --- | --- |
|
|
37
|
+
| 星链 `starlink-frontend` | `swagger.json` | `shared-api-to-service` | `custom-swagger-to-markdown`;swagger-sync = 全量后再 Prism | `shared-prism-mock`(`prism.enabled`) |
|
|
38
|
+
| 星眼 `starscope-frontend` | `openapi.json` | `shared-api-to-service` | `custom-openapi-update` | 本波未强制;有 runtime 后再接 |
|
|
39
|
+
| (后续星系仓) | 填本仓 `openapi` | 通常同上 | 填本仓 custom | 按配置 |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 硬约束
|
|
44
|
+
|
|
45
|
+
- 禁止用「单 path」触发全量/增量同步脚本。
|
|
46
|
+
- 禁止把某一仓的 skill 名写进 shared 状态机当唯一路径;编排只认**分支类型**,再读 overlay。
|
|
47
|
+
- 细节冲突时以**该仓** project-rules + intents 为准,并回写能力包示例表(发版)。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- 维护源:能力包 docs/skills/dev-flow/verify-commands.md — 勿在业务仓改此副本 -->
|
|
2
|
+
|
|
3
|
+
# Verify 命令表
|
|
4
|
+
|
|
5
|
+
> 维护源:能力包 `docs/skills/dev-flow/verify-commands.md`
|
|
6
|
+
> **一行一仓**;新仓接入时追加行。失败默认**不允许**继续提交(除非用户明确豁免)。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 本波实测(2026-10-14)
|
|
11
|
+
|
|
12
|
+
| 仓 | 命令 | 硬门槛 | 大致耗时 | 备注 |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
| 星链 `starlink-frontend` | `pnpm typecheck` | 是 | ~4s | `tsc --noEmit`;本机通过 |
|
|
15
|
+
| 星链 | `pnpm exec star-allinone doctor` | 建议 | ~0.5s | 0 error;可能有 skills stale WARN,跟版后 sync |
|
|
16
|
+
| 星眼 `starscope-frontend` | `pnpm typecheck` | 是 | ~4–5s | 本机通过 |
|
|
17
|
+
| 星眼 | `pnpm exec star-allinone doctor` | 建议 | ~0.5s | 0 error;stale WARN 同左 |
|
|
18
|
+
| 星眼(规则补充) | `pnpm exec tsc --noEmit --baseUrl src/.umi` | 按需 | — | project-rules 写明;与 `pnpm typecheck` 二选一即可,编排优先 package script |
|
|
19
|
+
|
|
20
|
+
| (预留)新星系仓 | `pnpm typecheck` 或项目等价命令 | 是 | — | 接入时实测填耗时 |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 编排用法
|
|
25
|
+
|
|
26
|
+
- 整单 Verify 阶段:至少跑该仓「硬门槛 = 是」的命令。
|
|
27
|
+
- `doctor` 有 error 则先修配置/sync,再提交。
|
|
28
|
+
- lint 是否硬门槛:由各仓 project-rules 声明;本表未列则默认不强制。
|