lcap-frontend-library 0.0.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.
- package/README.md +271 -0
- package/bin/lcap-frontend-library.mjs +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +27 -0
- package/dist/init.d.ts +6 -0
- package/dist/init.js +79 -0
- package/dist/sync.d.ts +4 -0
- package/dist/sync.js +70 -0
- package/dist/utils.d.ts +19 -0
- package/dist/utils.js +101 -0
- package/package.json +34 -0
- package/packages/lcap-frontend-library/LEARNINGS.md +11 -0
- package/packages/lcap-frontend-library/SKILL.md +86 -0
- package/packages/lcap-frontend-library/commands/migrate.check.md +287 -0
- package/packages/lcap-frontend-library/commands/migrate.green.md +190 -0
- package/packages/lcap-frontend-library/commands/migrate.plan.md +169 -0
- package/packages/lcap-frontend-library/commands/migrate.red.md +160 -0
- package/packages/lcap-frontend-library/commands/migrate.scan.md +151 -0
- package/packages/lcap-frontend-library/commands/migrate.spec.md +144 -0
- package/packages/lcap-frontend-library/commands/migrate.tasks.md +179 -0
- package/packages/lcap-frontend-library/commands/speckit.create.md +201 -0
- package/packages/lcap-frontend-library/commands/speckit.implement.md +88 -0
- package/packages/lcap-frontend-library/commands/speckit.plan.md +79 -0
- package/packages/lcap-frontend-library/commands/speckit.self-check.md +177 -0
- package/packages/lcap-frontend-library/commands/speckit.specify.md +91 -0
- package/packages/lcap-frontend-library/commands/speckit.tasks.md +61 -0
- package/packages/lcap-frontend-library/references/frontend-design/LICENSE.txt +177 -0
- package/packages/lcap-frontend-library/references/frontend-design/SKILL.md +42 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/SKILL.md +360 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/api.md +331 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/block.md +160 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/i18n.md +95 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/icon.md +27 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide/container.md +728 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide/element.md +312 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide/expression.md +154 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide/index.md +113 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide/modal.md +189 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide/popover.md +171 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/ide.md +799 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/implementation-rules.md +242 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/index.md +27 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/nasl-view-component.md +895 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/accessibility.md +185 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/child.md +82 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/data-source.md +261 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/event.md +171 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/form.md +266 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/function.md +80 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/link.md +137 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/slot.md +128 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-ant-design.md +1470 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-cloud-ui.md +259 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-element-plus.md +580 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-element-ui.md +1007 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/platform/theme-variables-mobile-ui.md +85 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/theme.md +234 -0
- package/packages/lcap-frontend-library/references/lcap-extension-component/workflow-guardrails.md +328 -0
- package/packages/lcap-frontend-library/references/nasl-logic-authoring/SKILL.md +201 -0
- package/packages/lcap-frontend-library/scripts/bash/create-component-files.sh +95 -0
- package/packages/lcap-frontend-library/scripts/bash/create-extension-project.sh +109 -0
- package/packages/lcap-frontend-library/scripts/bash/create-logic-files.sh +149 -0
- package/packages/lcap-frontend-library/scripts/bash/create-spec.sh +109 -0
- package/packages/lcap-frontend-library/scripts/bash/get-available-port.sh +35 -0
- package/packages/lcap-frontend-library/scripts/bash/list-specs.sh +19 -0
- package/packages/lcap-frontend-library/scripts/node/setup-extension-project.mjs +166 -0
- package/packages/lcap-frontend-library/templates/component-self-check.md +31 -0
- package/packages/lcap-frontend-library/templates/component-template.md +96 -0
- package/packages/lcap-frontend-library/templates/library-report-template.md +52 -0
- package/packages/lcap-frontend-library/templates/logic-template.md +44 -0
- package/packages/lcap-frontend-library/templates/migration-manifest-template.md +84 -0
- package/packages/lcap-frontend-library/templates/migration-plan-template.md +138 -0
- package/packages/lcap-frontend-library/templates/migration-report-template.md +227 -0
- package/packages/lcap-frontend-library/templates/migration-spec-template.md +135 -0
- package/packages/lcap-frontend-library/templates/migration-tasks-template.md +129 -0
- package/packages/lcap-frontend-library/templates/plan-template.md +299 -0
- package/packages/lcap-frontend-library/templates/self-check-report-template.md +148 -0
- package/packages/lcap-frontend-library/templates/tasks-template.md +81 -0
- package/packages/lcap-frontend-library/workflows/create/flow.md +199 -0
- package/packages/lcap-frontend-library/workflows/evolve/flow.md +249 -0
- package/packages/lcap-frontend-library/workflows/generate/flow.md +10 -0
- package/packages/lcap-frontend-library/workflows/harness/flow.md +82 -0
- package/packages/lcap-frontend-library/workflows/migrate/flow.md +302 -0
- package/packages/lcap-frontend-library/workflows/migrate/knowledge-base.md +564 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# create:从无到有(LCAP 扩展依赖库)
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 输入
|
|
6
|
+
|
|
7
|
+
用户的**自然语言需求描述**(`requirement`),例如:
|
|
8
|
+
> 新建一个 LCAP 扩展依赖库
|
|
9
|
+
> 生成一个支持自定义尺寸、颜色、容错等级的二维码组件
|
|
10
|
+
> 新建一个日期格式化逻辑函数
|
|
11
|
+
|
|
12
|
+
Agent 从用户话术解析(详见 `commands/speckit.create.md`):
|
|
13
|
+
|
|
14
|
+
| 字段 | 默认 | 说明 |
|
|
15
|
+
|------|------|------|
|
|
16
|
+
| `targetDir` | 用户指定或当前目录 | 建库放置目录,**不含库名** |
|
|
17
|
+
| `template` | `vue3` | `vue2` 可覆盖;**react 建库暂不支持** |
|
|
18
|
+
| `libraryDir` | INIT stdout | 后续阶段工程根 |
|
|
19
|
+
|
|
20
|
+
## 输出
|
|
21
|
+
|
|
22
|
+
输出随**资产类型**而异:
|
|
23
|
+
|
|
24
|
+
| 资产类型 | 交付标准 |
|
|
25
|
+
|----------|----------|
|
|
26
|
+
| **component** | 完整门禁:`npm run test`、`npm run build`、`npm run test:e2e` 均通过;`nasl.extension.json` 存在且 `frontends[0].viewComponents` 非空;五维自检报告全部 PASS |
|
|
27
|
+
| **logic** | `npm run test`、`npm run build` 均通过;五维自检报告全部 PASS(**无** e2e;**不**要求 viewComponents) |
|
|
28
|
+
| **library-only** | 依赖库工程已创建,依赖已安装,`npm run dev` 可正常启动(**不**进入 specify 及后续 speckit 阶段) |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 资产类型
|
|
33
|
+
|
|
34
|
+
| 资产 | 含义 | 检测规则 |
|
|
35
|
+
|------|------|----------|
|
|
36
|
+
| `library` | 仅建依赖库,不立即创建组件/逻辑 | 用户仅要求初始化工程 |
|
|
37
|
+
| `component` | 新建扩展组件 | 目标 `src/components/<name>/` 尚不存在 |
|
|
38
|
+
| `logic` | 新建 NASL 逻辑函数 | 目标 `src/logics/` 下 `@NaslLogic` 函数尚未导出 |
|
|
39
|
+
|
|
40
|
+
检测逻辑在阶段 1(INIT)中执行,详见 `commands/speckit.create.md`。
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## init-context
|
|
45
|
+
|
|
46
|
+
阶段 1 完成后,`speckit.create` 输出 `init-context`,供后续阶段读取:
|
|
47
|
+
|
|
48
|
+
| init-context | 触发条件 | 含义 |
|
|
49
|
+
|--------------|----------|------|
|
|
50
|
+
| **library-only** | 资产类型 = `library` | 只建库 + setup,INIT 后短路结束 |
|
|
51
|
+
| **library-and-asset** | cwd 不是 LCAP 扩展项目,且资产类型为 component/logic | 新库 + 首个 component/logic 骨架 |
|
|
52
|
+
| **asset-append** | 已在 LCAP 项目中,目标 component/logic 尚不存在 | 已有库 + 新 component/logic 骨架 |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 执行规则
|
|
57
|
+
|
|
58
|
+
- **严格顺序**:按 1→7 顺序执行,禁止跳过、乱序、合并阶段
|
|
59
|
+
- **阶段 1 完成后**:从 init 报告读取 **`libraryDir`(绝对路径)**;后续 specify→build-verify 的工作目录均为该路径。脚本调用使用 `--library-dir "$libraryDir"` 或 `npm install --prefix "$libraryDir"`,**禁止**假设 Agent 已 `cd`。
|
|
60
|
+
- **library-only 短路**:INIT 后若 `init-context=library-only`,报告 dev 可启后**立即结束**,不得进入阶段 2
|
|
61
|
+
- **阶段 6 执行前**:遵循零信任验证协议——必须重新读取所有文件(禁止基于实现记忆判断),test/build(及 component 的 test:e2e)必须在本阶段重新执行
|
|
62
|
+
- **失败处理**:修复后重试当前阶段,不回退到前一阶段
|
|
63
|
+
- **不可恢复错误**:记录错误信息,报告给用户,终止流程
|
|
64
|
+
- **每次变更独立 spec 目录**:无论 `library-and-asset` 还是 `asset-append`,每次操作都在 `specs/` 下创建独立编号目录
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 阶段 1:INIT
|
|
69
|
+
|
|
70
|
+
执行 `commands/speckit.create.md`(传入 `requirement`,`paradigm=create`)
|
|
71
|
+
|
|
72
|
+
**成功标准**(按 init-context):
|
|
73
|
+
- **library-only**:新项目目录已创建(含 `package.json`、`src/`、`node_modules/`),`npm run dev` 可启动
|
|
74
|
+
- **library-and-asset**:新项目目录已创建,依赖已安装,首个 component/logic 骨架已生成;component 时 Playwright 基础设施已就绪
|
|
75
|
+
- **asset-append**:基础设施完备(component 时含 `playwright.config.ts`、`e2e/`、`test:e2e` 脚本),新 component/logic 骨架已生成
|
|
76
|
+
|
|
77
|
+
**library-only 短路**:若 `init-context=library-only` → 向用户报告「依赖库已就绪,`npm run dev` 可启动」→ **流程结束**(不进入阶段 2)
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 阶段 2:SPECIFY
|
|
82
|
+
|
|
83
|
+
前置:已在工程目录内,且 `init-context` 不为 `library-only`。执行 `commands/speckit.specify.md`(传入 `requirement`,`paradigm=create`)
|
|
84
|
+
|
|
85
|
+
**成功标准**:
|
|
86
|
+
- `specs/NN-<name>/spec.md` 文件已创建
|
|
87
|
+
- 包含完整的 Feature 列表(每个 Feature 含验收标准 checkbox)
|
|
88
|
+
- component:复杂组件(展示类/容器类)包含「视觉与交互契约」章节
|
|
89
|
+
- logic:使用 `logic-template.md` 结构,含函数签名、@NaslLogic 元数据、验收标准
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 阶段 3:PLAN
|
|
94
|
+
|
|
95
|
+
前置:spec.md 已存在。执行 `commands/speckit.plan.md`(`paradigm=create`)
|
|
96
|
+
|
|
97
|
+
**成功标准**:
|
|
98
|
+
- `specs/NN-<name>/plan.md` 文件已创建
|
|
99
|
+
- 包含「文件路径与模块化」表格(每个产出文件有确定性相对路径)
|
|
100
|
+
- component:包含「样式变量映射表」(组件变量 → 平台主题变量)
|
|
101
|
+
- 包含三大计划契约(功能内聚 / 逻辑抽取 / 路径锁定)
|
|
102
|
+
- 包含实现顺序表
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 阶段 4:TASKS
|
|
107
|
+
|
|
108
|
+
前置:plan.md 已存在。执行 `commands/speckit.tasks.md`(`paradigm=create`)
|
|
109
|
+
|
|
110
|
+
**成功标准**:
|
|
111
|
+
- `specs/NN-<name>/tasks.md` 文件已创建
|
|
112
|
+
- 每条任务包含:标题、描述、依赖关系、输出路径(必填)、验收标准
|
|
113
|
+
- 所有输出路径与 `plan.md` 的文件表逐行对齐
|
|
114
|
+
- 任务按依赖拓扑排序
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 阶段 5:IMPLEMENT
|
|
119
|
+
|
|
120
|
+
前置:tasks.md 已存在。执行 `commands/speckit.implement.md`(`paradigm=create`)
|
|
121
|
+
|
|
122
|
+
**执行逻辑**:
|
|
123
|
+
1. 按依赖顺序逐个执行 Task
|
|
124
|
+
2. 每个 Task:写代码 → 验收检查 → 运行 `npm run test` → 标记完成
|
|
125
|
+
3. 全部 Task 完成后:
|
|
126
|
+
- **component**:运行 `npm run build` + `npm run test:e2e`
|
|
127
|
+
- **logic**:运行 `npm run build`(跳过 stories/ideusage/e2e 相关任务)
|
|
128
|
+
4. 失败时自动修复代码 → 重新运行 → 直到通过
|
|
129
|
+
5. **全量运行测试**确保新增不引入回归
|
|
130
|
+
|
|
131
|
+
**成功标准**:
|
|
132
|
+
- `tasks.md` 中所有 Task 标记为 `[X]`
|
|
133
|
+
- **component**:`npm run test`、`npm run build`、`npm run test:e2e` 退出码均为 0
|
|
134
|
+
- **logic**:`npm run test`、`npm run build` 退出码均为 0
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 阶段 6:SELF-CHECK
|
|
139
|
+
|
|
140
|
+
前置:implement 完成。执行 `commands/speckit.self-check.md`(`paradigm=create`)
|
|
141
|
+
|
|
142
|
+
**五个审计维度**:
|
|
143
|
+
1. **API vs 测试覆盖** — component:api.ts 中每个 Prop/Method/Event 是否都有测试;logic:@NaslLogic 函数签名与测试覆盖
|
|
144
|
+
2. **逻辑-样式冲突** — component:JS 尺寸逻辑与 CSS 约束是否矛盾;logic:N/A 或跳过
|
|
145
|
+
3. **平台合规扫描** — 硬编码颜色/间距、CSS 变量合法性;logic:nasl 类型系统合规
|
|
146
|
+
4. **E2E 断言深度** — component:是否有浅层断言(仅 `toBeVisible`);logic:跳过
|
|
147
|
+
5. **生命周期清理** — component:Observer/Listener/实例是否在 `onUnmounted` 中释放;logic:N/A 或跳过
|
|
148
|
+
|
|
149
|
+
**成功标准**:
|
|
150
|
+
- `self-check-report.md` 已生成,适用维度结论均为 PASS
|
|
151
|
+
- 所有发现的问题已修复并重新验证
|
|
152
|
+
- **component**:`npm run test`、`npm run build`、`npm run test:e2e` 最终退出码均为 0
|
|
153
|
+
- **logic**:`npm run test`、`npm run build` 最终退出码均为 0
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 阶段 7:BUILD-VERIFY
|
|
158
|
+
|
|
159
|
+
前置:self-check 通过。按资产类型执行验证。
|
|
160
|
+
|
|
161
|
+
### 按资产类型
|
|
162
|
+
|
|
163
|
+
| 资产类型 | 验证内容 |
|
|
164
|
+
|----------|----------|
|
|
165
|
+
| **component** | 见下方「component 验证清单」+ `npm run test` + `npm run build` + `npm run test:e2e` |
|
|
166
|
+
| **logic** | `npm run test` + `npm run build`(**跳过** viewComponents 检查与 e2e) |
|
|
167
|
+
| **library-only** | N/A(已在阶段 1 短路结束) |
|
|
168
|
+
|
|
169
|
+
### component 验证清单
|
|
170
|
+
|
|
171
|
+
前置:self-check 通过。执行 `npm run build`,然后逐项验证产物完整性。
|
|
172
|
+
|
|
173
|
+
1. `package.json` 中 `name` 和 `version` 字段存在且非空
|
|
174
|
+
2. `nasl.extension.json` 文件存在
|
|
175
|
+
3. `{packageName}@{version}.zip` 文件存在(packageName 中 `@` 去掉、`/` 替换为 `-`)
|
|
176
|
+
4. `nasl.extension.json` 中 `frontends[0].viewComponents` 数组非空
|
|
177
|
+
|
|
178
|
+
**失败处理**:
|
|
179
|
+
```
|
|
180
|
+
循环(最多 100 次):
|
|
181
|
+
1. npm run build
|
|
182
|
+
2. 逐项检查上述验证清单
|
|
183
|
+
若全部通过 → 结束
|
|
184
|
+
若失败 → 将错误信息反馈给 Agent 修复代码 → 重新循环
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**成功标准**:
|
|
188
|
+
- **component**:验证清单 4 项全部通过,产物 ZIP 可用于平台注册;输出最终交付报告
|
|
189
|
+
- **logic**:`npm run test`、`npm run build` 退出码均为 0;输出最终交付报告
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 核心约束
|
|
194
|
+
|
|
195
|
+
- 所有文件路径使用相对于项目根目录的相对路径
|
|
196
|
+
- 严格遵循 NASL 类型系统:仅允许 `nasl.core.*`、`nasl.collection.*`,禁止自定义 class
|
|
197
|
+
- 组件必须使用 CSS 变量实现主题适配,禁止硬编码颜色/间距
|
|
198
|
+
- 图标必须 SVG,禁止位图/base64/emoji
|
|
199
|
+
- 测试零容忍:禁止删除/跳过失败用例,Timeout 按逻辑 Bug 排查修复
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# evolve:存量演进(LCAP 扩展依赖库)
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 输入
|
|
6
|
+
|
|
7
|
+
用户的**自然语言需求描述**(`requirement`),例如:
|
|
8
|
+
> 给二维码组件增加容错等级配置
|
|
9
|
+
> 修改日期格式化逻辑,支持自定义 locale
|
|
10
|
+
> 增强现有表格组件的排序能力
|
|
11
|
+
|
|
12
|
+
**前提**:目标资产**已存在于当前仓库**。
|
|
13
|
+
|
|
14
|
+
## 输出
|
|
15
|
+
|
|
16
|
+
输出随**资产类型**而异:
|
|
17
|
+
|
|
18
|
+
| 资产类型 | 交付标准 |
|
|
19
|
+
|----------|----------|
|
|
20
|
+
| **component** | 完整门禁:`npm run test`、`npm run build`、`npm run test:e2e` 均通过;`nasl.extension.json` 存在且 `frontends[0].viewComponents` 非空;五维自检报告全部 PASS;**已有行为未被破坏** |
|
|
21
|
+
| **logic** | `npm run test`、`npm run build` 均通过;五维自检报告全部 PASS(**无** e2e;**不**要求 viewComponents);**已有导出与行为未被破坏** |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 前置门禁
|
|
26
|
+
|
|
27
|
+
在进入阶段 1 之前,**必须**解析资产类型并验证目标资产已存在:
|
|
28
|
+
|
|
29
|
+
| 资产 | 检测规则 | 不存在时 |
|
|
30
|
+
|------|----------|----------|
|
|
31
|
+
| **component** | `src/components/<name>/` 目录存在 | **报错终止**,提示用户改用 **create 流程**:`workflows/create/flow.md` |
|
|
32
|
+
| **logic** | `src/logics/` 下目标 `@NaslLogic` 函数已导出 | **报错终止**,提示用户改用 **create 流程**:`workflows/create/flow.md` |
|
|
33
|
+
|
|
34
|
+
> evolve 范式**不支持** `library` 资产类型。若用户仅要初始化工程,请路由至 `workflows/create/flow.md`。
|
|
35
|
+
|
|
36
|
+
检测逻辑在阶段 1(INIT)中由 `commands/speckit.create.md` 再次校验;若 `paradigm=evolve` 且资产不存在,command 同样报错退出。
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 资产类型
|
|
41
|
+
|
|
42
|
+
| 资产 | 含义 | 检测规则 |
|
|
43
|
+
|------|------|----------|
|
|
44
|
+
| `component` | 演进已有扩展组件 | `src/components/<name>/` **已存在** |
|
|
45
|
+
| `logic` | 演进已有 NASL 逻辑函数 | 目标 `@NaslLogic` 函数已在 `src/logics/` 导出 |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## init-context
|
|
50
|
+
|
|
51
|
+
阶段 1 完成后,`speckit.create` 输出 `init-context`,供后续阶段读取:
|
|
52
|
+
|
|
53
|
+
| init-context | 触发条件 | 含义 |
|
|
54
|
+
|--------------|----------|------|
|
|
55
|
+
| **asset-evolve** | `paradigm=evolve` 且目标 component/logic **已存在** | 列出现有文件、setup 依赖;**不** scaffold |
|
|
56
|
+
|
|
57
|
+
> evolve 流程**仅**产生 `init-context=asset-evolve`。若得到其他值,说明路由错误或 command 分支异常,应终止并排查。
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 禁止 scaffold
|
|
62
|
+
|
|
63
|
+
`paradigm=evolve` 时,阶段 1 **明确禁止**调用以下脚手架脚本:
|
|
64
|
+
|
|
65
|
+
- `scripts/bash/create-component-files.sh`
|
|
66
|
+
- `scripts/bash/create-logic-files.sh`
|
|
67
|
+
|
|
68
|
+
INIT 阶段仅执行 setup(`npm install` 等)并**列出现有实现文件**,不得生成新骨架或覆盖已有源码。
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 执行规则
|
|
73
|
+
|
|
74
|
+
自 `workflows/create/flow.md` 继承以下纪律,并追加 evolve 专属约束:
|
|
75
|
+
|
|
76
|
+
- **严格顺序**:按 1→7 顺序执行,禁止跳过、乱序、合并阶段
|
|
77
|
+
- **阶段 1 完成后**:从 init 报告读取 **`libraryDir`(绝对路径)**;后续所有操作以该路径为准(`--library-dir` / `npm install --prefix`),**禁止**假设 Agent 已 `cd`。
|
|
78
|
+
- **阶段 6 执行前**:遵循零信任验证协议——必须重新读取所有文件(禁止基于实现记忆判断),test/build(及 component 的 test:e2e)必须在本阶段重新执行
|
|
79
|
+
- **失败处理**:修复后重试当前阶段,不回退到前一阶段
|
|
80
|
+
- **不可恢复错误**:记录错误信息,报告给用户,终止流程
|
|
81
|
+
- **每次变更独立 spec 目录**:每次 evolve 操作都在 `specs/` 下创建独立编号目录
|
|
82
|
+
- **全量回归测试**:implement 与 self-check 阶段必须**全量**运行 `npm run test`(component 另加 `npm run test:e2e`);evolve 变更**不得破坏已有行为**
|
|
83
|
+
- **增量纪律**:spec/plan/tasks/self-check 均聚焦**本次增量**,但门禁与回归范围仍为**全量**
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 阶段 1:INIT
|
|
88
|
+
|
|
89
|
+
执行 `commands/speckit.create.md`(传入 `requirement`,`paradigm=evolve`)
|
|
90
|
+
|
|
91
|
+
**成功标准**:
|
|
92
|
+
- `init-context=asset-evolve`
|
|
93
|
+
- 工程目录内依赖已安装(setup 完成);setup 使用 `node setup-extension-project.mjs "<libraryDir>"`(非 `$(pwd)`)
|
|
94
|
+
- 现有 component/logic 源文件已列出(api.ts、index.vue、logics 导出等),**无** scaffold 产出
|
|
95
|
+
- **禁止**调用 `create-component-files` / `create-logic-files`
|
|
96
|
+
|
|
97
|
+
**失败处理**:若资产不存在 → 报错并提示用户改用 `workflows/create/flow.md`
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 阶段 2:SPECIFY
|
|
102
|
+
|
|
103
|
+
前置:已在工程目录内,且 `init-context=asset-evolve`。执行 `commands/speckit.specify.md`(传入 `requirement`,`paradigm=evolve`)
|
|
104
|
+
|
|
105
|
+
**evolve 模式纪律**(详见 `commands/speckit.specify.md` § evolve):
|
|
106
|
+
1. **先读取现有实现**再写 spec:
|
|
107
|
+
- component:`api.ts`、`index.vue`、最近 `specs/*/spec.md`
|
|
108
|
+
- logic:`src/logics/<name>.ts` 或 `src/logics/index.ts` 中对应导出
|
|
109
|
+
2. spec 标题:`# [资产名] — 增量需求(基于现有实现)`
|
|
110
|
+
3. 正文结构:`## 现状摘要(事实)` → `## 本次增量` → `## 验收标准(仅本次)`
|
|
111
|
+
4. 接口表标注「新增 / 修改」
|
|
112
|
+
5. 仍执行 `create-spec.sh` 创建独立 `specs/NN-<name>/` 目录
|
|
113
|
+
|
|
114
|
+
**成功标准**:
|
|
115
|
+
- `specs/NN-<name>/spec.md` 文件已创建
|
|
116
|
+
- 含现状摘要与本次增量,验收标准仅覆盖本次变更
|
|
117
|
+
- component:增量 Prop/Method/Event 标注清晰
|
|
118
|
+
- logic:函数签名与 @NaslLogic 元数据变更标注清晰
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 阶段 3:PLAN
|
|
123
|
+
|
|
124
|
+
前置:spec.md 已存在。执行 `commands/speckit.plan.md`(`paradigm=evolve`)
|
|
125
|
+
|
|
126
|
+
**evolve 模式纪律**(详见 `commands/speckit.plan.md`):
|
|
127
|
+
- plan **仅规划变更文件**;文件表增加「操作」列(新增/修改)
|
|
128
|
+
- 必须包含「回归测试范围」:列出现有 test/e2e 文件及需全量重跑的门禁
|
|
129
|
+
- logic 资产:无 stories/e2e 规划节,测试仅 vitest
|
|
130
|
+
|
|
131
|
+
**成功标准**:
|
|
132
|
+
- `specs/NN-<name>/plan.md` 文件已创建
|
|
133
|
+
- 文件表仅含变更项,每项标注操作类型
|
|
134
|
+
- 含回归测试范围说明
|
|
135
|
+
- component:变更涉及样式时含「样式变量映射表」
|
|
136
|
+
- 包含实现顺序表
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 阶段 4:TASKS
|
|
141
|
+
|
|
142
|
+
前置:plan.md 已存在。执行 `commands/speckit.tasks.md`(`paradigm=evolve`)
|
|
143
|
+
|
|
144
|
+
**evolve 模式纪律**(详见 `commands/speckit.tasks.md` § evolve 模式补充):
|
|
145
|
+
- 每条变更任务后追加「回归验证」子任务:`npm run test`(component 另加 `test:e2e`)
|
|
146
|
+
- 产出路径仍必填;**仅列变更相关路径**
|
|
147
|
+
- logic:禁止生成 stories/e2e 任务
|
|
148
|
+
|
|
149
|
+
**成功标准**:
|
|
150
|
+
- `specs/NN-<name>/tasks.md` 文件已创建
|
|
151
|
+
- 每条任务包含:标题、描述、依赖关系、输出路径(必填)、验收标准
|
|
152
|
+
- 变更任务均附带回归验证子任务
|
|
153
|
+
- 任务按依赖拓扑排序
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 阶段 5:IMPLEMENT
|
|
158
|
+
|
|
159
|
+
前置:tasks.md 已存在。执行 `commands/speckit.implement.md`(`paradigm=evolve`)
|
|
160
|
+
|
|
161
|
+
**evolve 模式纪律**(详见 `commands/speckit.implement.md`):
|
|
162
|
+
- implement 前读取 `LEARNINGS.md`(若存在)
|
|
163
|
+
- 按依赖顺序逐个执行 Task;**聚焦变更**,但完成后**全量**运行测试
|
|
164
|
+
- logic 资产:跳过 api.ts、ideusage、stories、block.stories、e2e 相关任务
|
|
165
|
+
- evolve:**全量 vitest**(component 另加全量 test:e2e)确保不引入回归
|
|
166
|
+
|
|
167
|
+
**执行逻辑**:
|
|
168
|
+
1. 按依赖顺序逐个执行 Task
|
|
169
|
+
2. 每个 Task:写代码 → 验收检查 → 运行 `npm run test` → 标记完成
|
|
170
|
+
3. 全部 Task 完成后:
|
|
171
|
+
- **component**:运行 `npm run build` + **全量** `npm run test:e2e`
|
|
172
|
+
- **logic**:运行 `npm run build`(跳过 stories/ideusage/e2e 相关任务)
|
|
173
|
+
4. 失败时自动修复代码 → 重新运行 → 直到通过
|
|
174
|
+
5. **全量运行测试**确保增量不破坏已有行为
|
|
175
|
+
|
|
176
|
+
**成功标准**:
|
|
177
|
+
- `tasks.md` 中所有 Task 标记为 `[X]`
|
|
178
|
+
- **component**:`npm run test`、`npm run build`、`npm run test:e2e` 退出码均为 0
|
|
179
|
+
- **logic**:`npm run test`、`npm run build` 退出码均为 0
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 阶段 6:SELF-CHECK
|
|
184
|
+
|
|
185
|
+
前置:implement 完成。执行 `commands/speckit.self-check.md`(`paradigm=evolve`)
|
|
186
|
+
|
|
187
|
+
**evolve 模式纪律**(详见 `commands/speckit.self-check.md` § evolve):
|
|
188
|
+
- 五维审计**聚焦本次 spec 增量**;仍须**全量 regression test** 证据
|
|
189
|
+
- 维度 1:增量 Prop/Event/Method 覆盖 + **未破坏原有导出**
|
|
190
|
+
- logic:审计 @NaslLogic、import '@nasl/types'、nasl 类型、logics/index.ts 导出、泛型/rest 规则;跳过 E2E 维度 4
|
|
191
|
+
|
|
192
|
+
**五个审计维度**:
|
|
193
|
+
1. **API vs 测试覆盖** — component:增量 Prop/Method/Event 覆盖 + 原有项仍被测试;logic:函数签名与测试覆盖
|
|
194
|
+
2. **逻辑-样式冲突** — component:JS 尺寸逻辑与 CSS 约束是否矛盾;logic:N/A 或跳过
|
|
195
|
+
3. **平台合规扫描** — 硬编码颜色/间距、CSS 变量合法性;logic:nasl 类型系统合规
|
|
196
|
+
4. **E2E 断言深度** — component:是否有浅层断言(仅 `toBeVisible`);logic:跳过
|
|
197
|
+
5. **生命周期清理** — component:Observer/Listener/实例是否在 `onUnmounted` 中释放;logic:N/A 或跳过
|
|
198
|
+
|
|
199
|
+
**成功标准**:
|
|
200
|
+
- `self-check-report.md` 已生成,适用维度结论均为 PASS
|
|
201
|
+
- 所有发现的问题已修复并重新验证
|
|
202
|
+
- **component**:`npm run test`、`npm run build`、`npm run test:e2e` 最终退出码均为 0
|
|
203
|
+
- **logic**:`npm run test`、`npm run build` 最终退出码均为 0
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 阶段 7:BUILD-VERIFY
|
|
208
|
+
|
|
209
|
+
前置:self-check 通过。按资产类型执行验证(同 create flow §2.6)。
|
|
210
|
+
|
|
211
|
+
### 按资产类型
|
|
212
|
+
|
|
213
|
+
| 资产类型 | 验证内容 |
|
|
214
|
+
|----------|----------|
|
|
215
|
+
| **component** | 见下方「component 验证清单」+ `npm run test` + `npm run build` + `npm run test:e2e` |
|
|
216
|
+
| **logic** | `npm run test` + `npm run build`(**跳过** viewComponents 检查与 e2e) |
|
|
217
|
+
|
|
218
|
+
### component 验证清单
|
|
219
|
+
|
|
220
|
+
前置:self-check 通过。执行 `npm run build`,然后逐项验证产物完整性。
|
|
221
|
+
|
|
222
|
+
1. `package.json` 中 `name` 和 `version` 字段存在且非空
|
|
223
|
+
2. `nasl.extension.json` 文件存在
|
|
224
|
+
3. `{packageName}@{version}.zip` 文件存在(packageName 中 `@` 去掉、`/` 替换为 `-`)
|
|
225
|
+
4. `nasl.extension.json` 中 `frontends[0].viewComponents` 数组非空
|
|
226
|
+
|
|
227
|
+
**失败处理**:
|
|
228
|
+
```
|
|
229
|
+
循环(最多 100 次):
|
|
230
|
+
1. npm run build
|
|
231
|
+
2. 逐项检查上述验证清单
|
|
232
|
+
若全部通过 → 结束
|
|
233
|
+
若失败 → 将错误信息反馈给 Agent 修复代码 → 重新循环
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**成功标准**:
|
|
237
|
+
- **component**:验证清单 4 项全部通过,产物 ZIP 可用于平台注册;输出最终交付报告
|
|
238
|
+
- **logic**:`npm run test`、`npm run build` 退出码均为 0;输出最终交付报告
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 核心约束
|
|
243
|
+
|
|
244
|
+
- 所有文件路径使用相对于项目根目录的相对路径
|
|
245
|
+
- 严格遵循 NASL 类型系统:仅允许 `nasl.core.*`、`nasl.collection.*`,禁止自定义 class
|
|
246
|
+
- 组件必须使用 CSS 变量实现主题适配,禁止硬编码颜色/间距
|
|
247
|
+
- 图标必须 SVG,禁止位图/base64/emoji
|
|
248
|
+
- 测试零容忍:禁止删除/跳过失败用例,Timeout 按逻辑 Bug 排查修复
|
|
249
|
+
- **evolve 专属**:任何增量变更不得破坏已有 API 契约与已通过测试的行为;修复时必须扩展测试而非削弱断言
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Harness(归因回流)
|
|
2
|
+
|
|
3
|
+
skill 自增强机制——用户主动将 create / evolve / migrate 执行中遇到的非平凡问题精炼为一行经验,写入 `LEARNINGS.md`;下次 skill 使用时自动读取,作为先验知识、checklist 与流程约束。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 触发方式
|
|
8
|
+
|
|
9
|
+
**仅用户主动触发**。create / evolve / migrate 流程执行过程中不主动提示归因、不输出收尾回顾、不在 implement/green 中询问是否写入 LEARNINGS。
|
|
10
|
+
|
|
11
|
+
用户说「归因回流」「回流」「记录教训」「总结经验」等 → SKILL.md 路由到此。
|
|
12
|
+
|
|
13
|
+
Agent 执行:
|
|
14
|
+
1. 回顾当前对话全部上下文
|
|
15
|
+
2. 识别需要归因的问题:
|
|
16
|
+
- 修复 ≥2 轮才通过的
|
|
17
|
+
- 用户指出错误并指导修复的
|
|
18
|
+
- 方案发生重大调整的
|
|
19
|
+
- agent 之前判断被证明错误的
|
|
20
|
+
3. 对每个问题执行精炼
|
|
21
|
+
4. 写入 LEARNINGS.md
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 精炼与写入
|
|
26
|
+
|
|
27
|
+
### 精炼规则
|
|
28
|
+
|
|
29
|
+
每条写入 LEARNINGS.md 的内容格式:
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
- **[场景关键词]**:[什么情况] + [什么坑/正确做法]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**要求**:
|
|
36
|
+
- 一条一行,控制在 1-2 句话内
|
|
37
|
+
- 必须包含:场景(什么时候碰到)+ 结论(正确做法或需避免的坑)
|
|
38
|
+
- 不记录日期、证据链、文件路径、调试过程等细节
|
|
39
|
+
- 目标读者是未来执行同类任务的 agent,需一眼就能理解并应用
|
|
40
|
+
|
|
41
|
+
**示例**:
|
|
42
|
+
```markdown
|
|
43
|
+
- **v-model 约定**:LCAP 用 `value` + `emit('update:value')`,非 Vue3 标准的 modelValue
|
|
44
|
+
- **桶文件导出**:`components/index.ts` 必须具名导出 `export { default as CwXxx }`,禁止 `export *`
|
|
45
|
+
- **IDE 高度塌陷**:依赖容器尺寸的组件须在 isDesigner 时加固定高度,简单容器不加
|
|
46
|
+
- **story title**:禁止中文/空格/斜杠,否则 storyId 解析失败导致 E2E 404
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 去重规则
|
|
50
|
+
|
|
51
|
+
写入前扫描 LEARNINGS.md 已有内容:
|
|
52
|
+
- 已有等价条目 → 不写入,告知用户"已有此经验"
|
|
53
|
+
- 已有但可补充 → 修改已有条目(扩展适用场景)
|
|
54
|
+
- 全新 → 追加到文件末尾
|
|
55
|
+
|
|
56
|
+
### 写入确认
|
|
57
|
+
|
|
58
|
+
写入完成后输出:
|
|
59
|
+
- 新增了 N 条经验
|
|
60
|
+
- 列出具体内容
|
|
61
|
+
- 告知用户「后续 create / evolve / migrate 各阶段执行时将读取 LEARNINGS,纳入 plan 风险、checklist 审计与实现守护」
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 消费方式(下游阶段如何使用 LEARNINGS)
|
|
66
|
+
|
|
67
|
+
LEARNINGS 是 skill 自增强的核心:**写入需用户主动,读取在下次 workflow 执行时自动发生**(不触发 harness,不自动写入)。
|
|
68
|
+
|
|
69
|
+
| 用途 | create | evolve | migrate | 落地方式 |
|
|
70
|
+
|------|--------|--------|---------|----------|
|
|
71
|
+
| **先验知识** | speckit.plan | speckit.plan | migrate.plan | plan 风险节 |
|
|
72
|
+
| **Checklist** | speckit.self-check | speckit.self-check | migrate.check | 额外审计项 |
|
|
73
|
+
| **流程约束** | speckit.implement | speckit.implement | migrate.green | 实现前内部比对 |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 核心原则
|
|
78
|
+
|
|
79
|
+
- **精简优先**:LEARNINGS 是多阶段高频引用的文件,每条必须足够简短
|
|
80
|
+
- **用户控制**:所有写入都需用户主动触发归因回流命令,不自动写入
|
|
81
|
+
- **自动读取**:下游 plan / implement / self-check(及 migrate 对应阶段)执行时须读取 LEARNINGS,这是自增强的消费端,不等于自动归因
|
|
82
|
+
- **去重**:避免重复条目,保持文件精炼
|