@mingfuyun/star-allinone 0.4.9 → 0.4.10
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/README.md +6 -5
- package/docs/skills/README.md +2 -1
- package/docs/skills/dev-flow/gates.md +12 -0
- package/docs/skills/dev-flow/plan-template.md +62 -0
- package/docs/skills/dev-flow/session-protocol.md +51 -0
- package/docs/skills/dev-flow/swagger-gate.md +45 -0
- package/docs/skills/dev-flow/verify-commands.md +26 -0
- package/docs/skills/overview.md +12 -2
- package/package.json +1 -1
- package/scripts/gen/doctor.js +35 -0
package/docs/README.md
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# star-allinone 文档
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
技能与编排口径说明**只维护在本仓库**,不要在业务仓复制长文。
|
|
4
4
|
|
|
5
|
-
|
|
|
5
|
+
| 路径 | 内容 |
|
|
6
6
|
| --- | --- |
|
|
7
|
-
| [skills/](skills/README.md) | 各 shared skill
|
|
7
|
+
| [skills/](skills/README.md) | 各 shared skill 人读 / Agent 说明 |
|
|
8
|
+
| [skills/dev-flow/](skills/dev-flow/) | 编排口径资产(方案模板、SwaggerGate、Verify、会话协议、门禁) |
|
|
8
9
|
|
|
9
|
-
业务仓经 `pnpm exec star-allinone skills sync`
|
|
10
|
+
业务仓经 `pnpm exec star-allinone skills sync` 后,`docs/skills/<name>.md` 等会写入:
|
|
10
11
|
|
|
11
12
|
```text
|
|
12
13
|
.agents/skills/shared-<name>/references/guide.md
|
|
13
14
|
```
|
|
14
15
|
|
|
15
|
-
业务仓**不维护**技能相关 `docs
|
|
16
|
+
业务仓**不维护**技能相关 `docs/`;项目差异只写 `custom-entry/references/`。
|
package/docs/skills/README.md
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
| --- | --- | --- |
|
|
7
7
|
| [overview.md](overview.md) | 入口与 shared/custom 总览 | `.agents/skills/shared-project-conventions/references/skills-overview.md` |
|
|
8
8
|
| [prism-mock.md](prism-mock.md) | `shared-prism-mock` | `.agents/skills/shared-prism-mock/references/guide.md` |
|
|
9
|
+
| [dev-flow/](dev-flow/) | 编排口径(方案模板 / SwaggerGate / Verify / 会话协议 / 门禁) | 先随能力包 docs 维护;日后迁入 `shared-dev-flow/references` |
|
|
9
10
|
|
|
10
11
|
配置示例(JSON):`skills/shared/prism-mock/references/example-prism-config.json`(随 skill sync)。
|
|
11
12
|
|
|
12
|
-
Agent 执行某 skill 时:先读该 skill 的 `SKILL.md`,再读其 `references/guide.md
|
|
13
|
+
Agent 执行某 skill 时:先读该 skill 的 `SKILL.md`,再读其 `references/guide.md`(由 `docs/skills/<name>.md` 同步生成)。
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 确认门禁口令
|
|
2
|
+
|
|
3
|
+
> 维护源:能力包 `docs/skills/dev-flow/gates.md`
|
|
4
|
+
> 跨仓统一;三道门禁**互不推断**。
|
|
5
|
+
|
|
6
|
+
| 门禁 | 口令(须字面接近) | 不可替代为 |
|
|
7
|
+
| --- | --- | --- |
|
|
8
|
+
| 方案 | `确认方案` | 「确认」「OK」、提交/测发口令 |
|
|
9
|
+
| 提交 | `确认提交` / `确认提交并推送` | 方案确认、测发确认、「确认」单字 |
|
|
10
|
+
| 测发 | `确认推送流水线` / `发布测试环境` | push 成功、提交确认、方案确认 |
|
|
11
|
+
|
|
12
|
+
`确认方案` ≠ `确认提交` ≠ `确认推送流水线`
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# 实现方案模板(整单 flow)
|
|
2
|
+
|
|
3
|
+
> 维护源:能力包 `docs/skills/dev-flow/plan-template.md`
|
|
4
|
+
> 适用:所有接入 `$custom-entry` 的业务仓。整单在改业务代码前须填齐并等待 `确认方案`。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 必填字段
|
|
9
|
+
|
|
10
|
+
| 字段 | 说明 |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| 需求摘要 | 一句话目标 + 关键验收点 |
|
|
13
|
+
| 影响路径 | 预计改动的目录/模块(页面、Service、配置等) |
|
|
14
|
+
| 契约结论 | `无` / `有` / `不确定`(不确定则先问,见 [swagger-gate.md](swagger-gate.md)) |
|
|
15
|
+
| 有序 skill 清单 | 按执行顺序列出将委托的 skill / 动作(勿跳步) |
|
|
16
|
+
| 验证点 | 对照 [verify-commands.md](verify-commands.md) 本仓行 + 业务手测项 |
|
|
17
|
+
| 风险 | 公共组件、权限、数据兼容、测发范围等 |
|
|
18
|
+
| 非目标 | 明确不做的事,防止范围膨胀 |
|
|
19
|
+
| 门禁说明 | 本单将停在哪些确认点(方案 / 提交 / 测发) |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 输出骨架(可直接粘贴)
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
## 实现方案
|
|
27
|
+
|
|
28
|
+
**需求摘要:** …
|
|
29
|
+
|
|
30
|
+
**影响路径:**
|
|
31
|
+
- …
|
|
32
|
+
|
|
33
|
+
**契约结论:** 无 | 有 | 不确定
|
|
34
|
+
- 若有:分支类型(单接口 gen / 全量或增量同步 / + Prism 刷新)→ 见该仓 project-rules
|
|
35
|
+
|
|
36
|
+
**有序 skill 清单:**
|
|
37
|
+
1. …
|
|
38
|
+
2. …
|
|
39
|
+
|
|
40
|
+
**验证点:**
|
|
41
|
+
- [ ] …
|
|
42
|
+
- [ ] 本仓 Verify 命令(见 verify-commands)
|
|
43
|
+
|
|
44
|
+
**风险:** …
|
|
45
|
+
|
|
46
|
+
**非目标:** …
|
|
47
|
+
|
|
48
|
+
**门禁:** 确认方案 →(实现)→ 确认提交[并推送] →(可选)确认推送流水线
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 试填示例(虚构,星链语境)
|
|
54
|
+
|
|
55
|
+
**需求摘要:** 在 IP 回收列表增加「备注」筛选,对接已有 query 字段 `remark`。
|
|
56
|
+
**影响路径:** `src/pages/IPResource/IPRecycle/const.tsx`(及必要时页面)。
|
|
57
|
+
**契约结论:** 无(契约已含 `remark`,仅前端筛选项)。
|
|
58
|
+
**有序 skill 清单:** 1)直接改页面列配置(单点,非 flow 亦可)2)`pnpm typecheck`。
|
|
59
|
+
**验证点:** typecheck;列表搜索备注。
|
|
60
|
+
**风险:** 无 label 工具栏 placeholder 须符合 project-rules。
|
|
61
|
+
**非目标:** 不改公共 `MFProTable`;不测发。
|
|
62
|
+
**门禁:** 若走 flow 则 `确认方案`;入库时 `确认提交`。
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 会话协议(编排输出字段)
|
|
2
|
+
|
|
3
|
+
> 维护源:能力包 `docs/skills/dev-flow/session-protocol.md`
|
|
4
|
+
> 整单 / 长会话每轮至少带齐下列字段,便于人扫读与后续 `shared-dev-flow` 落状态。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 字段
|
|
9
|
+
|
|
10
|
+
| 字段 | 含义 |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `phase` | 当前阶段枚举(见下) |
|
|
13
|
+
| `done` | 本轮已完成的动作(短列表) |
|
|
14
|
+
| `blocked` | 卡住原因;无则写 `无` |
|
|
15
|
+
| `next_action` | 下一步由谁做、做什么(含是否等待口令) |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## `phase` 枚举
|
|
20
|
+
|
|
21
|
+
| phase | 说明 |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| `intake` | 澄清需求 / 判定整单 vs 单点 |
|
|
24
|
+
| `plan` | 输出实现方案 |
|
|
25
|
+
| `await_plan` | 等待 `确认方案` |
|
|
26
|
+
| `swagger_gate` | 契约判定与同步 |
|
|
27
|
+
| `implement` | 按 skill 清单改代码 |
|
|
28
|
+
| `verify` | 跑 Verify 命令与手测点 |
|
|
29
|
+
| `await_commit` | 审阅提案后等待 `确认提交` |
|
|
30
|
+
| `await_publish` | 等待测发确认词 |
|
|
31
|
+
| `done` | 本单目标已完成(或用户终止) |
|
|
32
|
+
|
|
33
|
+
单点任务可只用子集(如 submit → `await_commit`)。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 示例
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
phase: await_plan
|
|
41
|
+
done: 已输出实现方案(契约结论=无;清单 2 步)
|
|
42
|
+
blocked: 等待用户确认方案
|
|
43
|
+
next_action: 用户回复「确认方案」后进入 implement
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
phase: await_commit
|
|
48
|
+
done: typecheck 通过;已给出提交提案
|
|
49
|
+
blocked: 等待确认提交
|
|
50
|
+
next_action: 用户「确认提交」或「确认提交并推送」;勿推断测发
|
|
51
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# SwaggerGate(契约变更判定)
|
|
2
|
+
|
|
3
|
+
> 维护源:能力包 `docs/skills/dev-flow/swagger-gate.md`
|
|
4
|
+
> 框架通用;**具体 skill 名、契约文件名见各仓** `custom-entry/references/project-rules.md`。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 判定优先级
|
|
9
|
+
|
|
10
|
+
1. **用户明确声明**(「契约没变」「swagger 已更新」「只 gen 这一个接口」)
|
|
11
|
+
2. **git diff / 工作区**是否改动本仓契约文件(见 `.star-allinone.json` → `openapi`)
|
|
12
|
+
3. 仍不确定 → **停问一句**,禁止猜测后跑全量脚本
|
|
13
|
+
|
|
14
|
+
不确定话术示例:
|
|
15
|
+
|
|
16
|
+
> 这次是「只生成单个 METHOD/path」还是「契约文件已更新,要全量/增量同步 Service」?
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 分支类型(通用)
|
|
21
|
+
|
|
22
|
+
| 分支类型 | 何时 | Agent 动作 |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| 跳过 | 契约结论 = 无 | 不跑契约同步 skill |
|
|
25
|
+
| 单接口 gen | 仅一个 `METHOD /path`(或 operationId) | 委托 `shared-api-to-service`;**禁止**全量脚本 |
|
|
26
|
+
| 全量或增量同步 | 整份契约更新 / 多接口重建 | 委托该仓「契约同步」custom skill |
|
|
27
|
+
| 可选 Prism 刷新 | 仓已启用 Prism,且用户要本地 mock 对齐 | 在同步后委托 `shared-prism-mock`(保留 overrides) |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 示例映射(本波试点,非能力上限)
|
|
32
|
+
|
|
33
|
+
| 仓 | 契约文件 | 单接口 | 全量/增量 | Prism |
|
|
34
|
+
| --- | --- | --- | --- | --- |
|
|
35
|
+
| 星链 `starlink-frontend` | `swagger.json` | `shared-api-to-service` | `custom-swagger-to-markdown`;swagger-sync = 全量后再 Prism | `shared-prism-mock`(`prism.enabled`) |
|
|
36
|
+
| 星眼 `starscope-frontend` | `openapi.json` | `shared-api-to-service` | `custom-openapi-update` | 本波未强制;有 runtime 后再接 |
|
|
37
|
+
| (后续星系仓) | 填本仓 `openapi` | 通常同上 | 填本仓 custom | 按配置 |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 硬约束
|
|
42
|
+
|
|
43
|
+
- 禁止用「单 path」触发全量/增量同步脚本。
|
|
44
|
+
- 禁止把某一仓的 skill 名写进 shared 状态机当唯一路径;编排只认**分支类型**,再读 overlay。
|
|
45
|
+
- 细节冲突时以**该仓** project-rules + intents 为准,并回写能力包示例表(发版)。
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Verify 命令表
|
|
2
|
+
|
|
3
|
+
> 维护源:能力包 `docs/skills/dev-flow/verify-commands.md`
|
|
4
|
+
> **一行一仓**;新仓接入时追加行。失败默认**不允许**继续提交(除非用户明确豁免)。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 本波实测(2026-10-14)
|
|
9
|
+
|
|
10
|
+
| 仓 | 命令 | 硬门槛 | 大致耗时 | 备注 |
|
|
11
|
+
| --- | --- | --- | --- | --- |
|
|
12
|
+
| 星链 `starlink-frontend` | `pnpm typecheck` | 是 | ~4s | `tsc --noEmit`;本机通过 |
|
|
13
|
+
| 星链 | `pnpm exec star-allinone doctor` | 建议 | ~0.5s | 0 error;可能有 skills stale WARN,跟版后 sync |
|
|
14
|
+
| 星眼 `starscope-frontend` | `pnpm typecheck` | 是 | ~4–5s | 本机通过 |
|
|
15
|
+
| 星眼 | `pnpm exec star-allinone doctor` | 建议 | ~0.5s | 0 error;stale WARN 同左 |
|
|
16
|
+
| 星眼(规则补充) | `pnpm exec tsc --noEmit --baseUrl src/.umi` | 按需 | — | project-rules 写明;与 `pnpm typecheck` 二选一即可,编排优先 package script |
|
|
17
|
+
|
|
18
|
+
| (预留)新星系仓 | `pnpm typecheck` 或项目等价命令 | 是 | — | 接入时实测填耗时 |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 编排用法
|
|
23
|
+
|
|
24
|
+
- 整单 Verify 阶段:至少跑该仓「硬门槛 = 是」的命令。
|
|
25
|
+
- `doctor` 有 error 则先修配置/sync,再提交。
|
|
26
|
+
- lint 是否硬门槛:由各仓 project-rules 声明;本表未列则默认不强制。
|
package/docs/skills/overview.md
CHANGED
|
@@ -4,9 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
`shared-*` 来自 `@mingfuyun/star-allinone`,经 `skills sync` 写入业务仓 `.agents/skills/`,**不要在业务仓直接改**。`custom-*` 由业务仓维护。领域规则:`.agents/skills/custom-entry/references/project-rules.md`。
|
|
6
6
|
|
|
7
|
+
## 整单 vs 单点
|
|
8
|
+
|
|
9
|
+
| | 整单(flow) | 单点 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 话术 | 「按流程做完:…」 | 「提交代码」「生成某接口」「发布测试环境」… |
|
|
12
|
+
| 先出方案 | 是,等 `确认方案` | 否(submit/publish 自带提案/确认) |
|
|
13
|
+
| 口径文档 | [dev-flow/](dev-flow/)(方案模板、SwaggerGate、Verify、会话字段、[gates.md](dev-flow/gates.md)) | 仍守各 skill 自身门禁 |
|
|
14
|
+
|
|
15
|
+
口令:`确认方案` ≠ `确认提交` ≠ `确认推送流水线`(详见 [dev-flow/gates.md](dev-flow/gates.md))。
|
|
16
|
+
|
|
7
17
|
## 用户入口
|
|
8
18
|
|
|
9
|
-
只使用 **`$custom-entry`**。不要直接 `$shared-*`,不要直接调用内部 `custom-*`(如全量 swagger / Prism
|
|
19
|
+
只使用 **`$custom-entry`**。不要直接 `$shared-*`,不要直接调用内部 `custom-*`(如全量 swagger / Prism 实现层)。适用**所有**接入能力包的星系业务仓;仓别差异在各仓 `custom-entry`。
|
|
10
20
|
|
|
11
21
|
| 经入口委托到 | 用途 |
|
|
12
22
|
| --- | --- |
|
|
@@ -15,7 +25,7 @@
|
|
|
15
25
|
| `shared-review-and-submit` | 提交前审查,确认后再提交 |
|
|
16
26
|
| `shared-publish-test` | 明确要求测发后再跑;`git push` 后不要自动调用 |
|
|
17
27
|
| `shared-tracking` | 埋点接入与补齐 |
|
|
18
|
-
| `shared-prism-mock`(内部,若已 sync
|
|
28
|
+
| `shared-prism-mock`(内部,若已 sync 且 `prism.enabled`) | 本地 Prism / `dev:mock` / overrides;说明见 [prism-mock.md](prism-mock.md) |
|
|
19
29
|
| 项目 `custom-*`(内部) | 如全量 swagger / OpenAPI 增量等,见各仓 `AGENTS.md` |
|
|
20
30
|
|
|
21
31
|
## 示例
|
package/package.json
CHANGED
package/scripts/gen/doctor.js
CHANGED
|
@@ -15,6 +15,21 @@ const KNOWN_CONFIG_KEYS = new Set([
|
|
|
15
15
|
'publishPipelineId',
|
|
16
16
|
'sharedSkills',
|
|
17
17
|
'variables',
|
|
18
|
+
'prism',
|
|
19
|
+
]);
|
|
20
|
+
const PRISM_KNOWN_KEYS = new Set([
|
|
21
|
+
'enabled',
|
|
22
|
+
'mockPort',
|
|
23
|
+
'generatedSpec',
|
|
24
|
+
'overridesDir',
|
|
25
|
+
'authPathPrefixes',
|
|
26
|
+
'skipOpenapiPathPrefixes',
|
|
27
|
+
'skipServiceDirNames',
|
|
28
|
+
'devScript',
|
|
29
|
+
'genScript',
|
|
30
|
+
'proxyIntegration',
|
|
31
|
+
'envelope',
|
|
32
|
+
'mockSourceExtensionKey',
|
|
18
33
|
]);
|
|
19
34
|
const IGNORE_DIRS = new Set([
|
|
20
35
|
'node_modules',
|
|
@@ -167,6 +182,26 @@ function runDoctor(cwd, options = {}) {
|
|
|
167
182
|
findings.push(check(true, 'ok', `publishPipelineId ${config.publishPipelineId}`));
|
|
168
183
|
}
|
|
169
184
|
|
|
185
|
+
if (config.prism != null) {
|
|
186
|
+
if (typeof config.prism !== 'object' || Array.isArray(config.prism)) {
|
|
187
|
+
findings.push(check(false, 'error', 'Config "prism" must be an object'));
|
|
188
|
+
} else {
|
|
189
|
+
const unknownPrism = Object.keys(config.prism).filter((key) => !PRISM_KNOWN_KEYS.has(key));
|
|
190
|
+
if (unknownPrism.length) {
|
|
191
|
+
findings.push(check(false, 'warn', `Unknown prism keys: ${unknownPrism.join(', ')}`));
|
|
192
|
+
}
|
|
193
|
+
if (config.prism.enabled === true) {
|
|
194
|
+
findings.push(check(true, 'ok', 'prism.enabled true'));
|
|
195
|
+
} else if (config.prism.enabled === false) {
|
|
196
|
+
findings.push(check(true, 'ok', 'prism.enabled false'));
|
|
197
|
+
} else if (config.prism.enabled == null) {
|
|
198
|
+
findings.push(check(false, 'warn', 'prism present but "enabled" missing; shared-prism-mock will not edit code'));
|
|
199
|
+
} else {
|
|
200
|
+
findings.push(check(false, 'warn', 'prism.enabled should be boolean'));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
170
205
|
const tableFile = existsAny(root, [
|
|
171
206
|
'src/components/CommonTable/MFProTable.tsx',
|
|
172
207
|
'src/components/CommonTable/MFProTable.ts',
|