@xtalpi/agentic-lab-skills 0.0.10 → 0.0.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.
Files changed (68) hide show
  1. package/README.md +1 -1
  2. package/package.json +14 -14
  3. package/skills/lab-flow-designer/SKILL.md +612 -612
  4. package/skills/lab-flow-designer/embedded-template/SKILL.md +103 -103
  5. package/skills/lab-flow-designer/embedded-template/pools//345/205/245/345/217/243/346/261/240.md +21 -21
  6. package/skills/lab-flow-designer/embedded-template/pools//345/207/272/345/217/243/346/261/240.md +21 -21
  7. package/skills/lab-flow-designer/embedded-template/scripts//347/244/272/344/276/213/346/225/260/346/215/256/344/270/216/346/240/241/351/252/214/351/227/250/346/216/247.js +142 -142
  8. package/skills/lab-flow-designer/embedded-template/valves//347/244/272/344/276/213/346/225/260/346/215/256/344/270/216/346/240/241/351/252/214/351/227/250/346/216/247.md +114 -114
  9. package/skills/lab-flow-designer/references/agentic-lab-processer.md +122 -122
  10. package/skills/lab-flow-designer/references/agentic-lab-sdk.md +534 -361
  11. package/skills/lab-flow-designer/references/rhea-api/README.md +7 -7
  12. package/skills/lab-flow-designer/references/rhea-api/execute_process_batch.md +58 -58
  13. package/skills/lab-flow-designer/references/skill-package-layout.md +268 -268
  14. package/skills/lab-flow-designer/references//344/270/232/345/212/241/346/265/201/347/250/213/346/226/207/346/241/243/346/240/207/345/207/206.md +216 -216
  15. package/skills/lab-flow-designer/templates//344/270/232/345/212/241/346/265/201/347/250/213/346/226/207/346/241/243/346/250/241/346/235/277.md +192 -192
  16. package/skills/lab-flow-designer/templates//344/270/232/345/212/241/346/265/201/347/250/213/346/226/207/346/241/243/347/244/272/344/276/213.md +207 -207
  17. package/skills/lab-flow-designer/testing/test-processer.mjs +1240 -1240
  18. package/skills/lab-nocobase-flow-generator/SKILL.md +164 -164
  19. package/skills/lab-nocobase-flow-generator/examples/setting/350/241/250/350/216/267/345/217/226/345/244/226/351/203/250/346/234/215/345/212/241.js +70 -70
  20. package/skills/lab-nocobase-flow-generator/examples//346/237/245/350/257/242/345/214/226/345/255/246/345/223/201/344/277/241/346/201/257.js +30 -30
  21. package/skills/lab-nocobase-flow-generator/references/doc-standard.md +84 -84
  22. package/skills/lab-nocobase-flow-generator/references/runtime-api.md +224 -224
  23. package/skills/lab-nocobase-flow-generator/templates//350/204/232/346/234/254/351/200/273/350/276/221/346/226/207/346/241/243/346/250/241/346/235/277.md +121 -121
  24. package/skills/lab-nocobase-flow-generator/templates//350/204/232/346/234/254/351/200/273/350/276/221/346/226/207/346/241/243/347/244/272/344/276/213.md +67 -67
  25. package/skills/lab-orbit-component-builder/SKILL.md +353 -353
  26. package/skills/lab-orbit-component-builder/examples/xnb-component-template/.env.local.example +27 -27
  27. package/skills/lab-orbit-component-builder/examples/xnb-component-template/.eslintignore +7 -7
  28. package/skills/lab-orbit-component-builder/examples/xnb-component-template/.eslintrc.cjs +88 -88
  29. package/skills/lab-orbit-component-builder/examples/xnb-component-template/.nvmrc +1 -1
  30. package/skills/lab-orbit-component-builder/examples/xnb-component-template/AgenticAppAPI.md +268 -268
  31. package/skills/lab-orbit-component-builder/examples/xnb-component-template/Jenkinsfile +106 -106
  32. package/skills/lab-orbit-component-builder/examples/xnb-component-template/OrbitAPI.md +453 -453
  33. package/skills/lab-orbit-component-builder/examples/xnb-component-template/README.md +176 -176
  34. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/public/index.html +12 -12
  35. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/App.vue +151 -151
  36. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/components/DevOpenerLauncher.vue +143 -143
  37. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/global.d.ts +77 -77
  38. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/main.ts +308 -308
  39. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/mockXNBBitable.ts +119 -119
  40. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/shims-vue.d.ts +6 -6
  41. package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/utils/devOpenerHost.ts +75 -75
  42. package/skills/lab-orbit-component-builder/examples/xnb-component-template/index.html +13 -13
  43. package/skills/lab-orbit-component-builder/examples/xnb-component-template/package.json +60 -60
  44. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/api/agenticlabTickets.ts +110 -110
  45. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/entries/bitable.ts +4 -4
  46. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/entries/custom-page.ts +4 -4
  47. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/index.ts +1 -1
  48. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/styles/orbit-quasar-host.scss +19 -19
  49. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/types/context.ts +15 -15
  50. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/types/xnb-context.ts +70 -70
  51. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/use/useBitablePage.ts +189 -189
  52. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/use/useSuperCellDemo.ts +257 -257
  53. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/use/useSuperTableBitableLifecycle.ts +555 -555
  54. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/openerInitParams.ts +158 -158
  55. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/openerTicketIds.ts +32 -32
  56. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/orbitHttpClient.ts +110 -110
  57. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/request.ts +92 -92
  58. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/views/bitable.vue +67 -67
  59. package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/views/custom-page.vue +140 -140
  60. package/skills/lab-orbit-component-builder/examples/xnb-component-template/tsconfig.json +45 -45
  61. package/skills/lab-orbit-component-builder/examples/xnb-component-template/vite.config.ts +170 -170
  62. package/skills/lab-orbit-component-builder/examples/xnb-component-template/vite.dev.config.ts +58 -58
  63. package/skills/lab-orbit-component-builder/references/flow-document-human-ui.md +65 -65
  64. package/skills/lab-orbit-component-builder/references/orbit-vue-conventions.md +133 -133
  65. package/skills/lab-orbit-component-builder/references/pool-schema-to-columns.md +67 -67
  66. package/skills/lab-orbit-component-builder/references/vue-template-checklist.md +179 -179
  67. package/skills/lab-orbit-component-builder/references/xnb-context-vue-props.md +49 -49
  68. package/skills/lab-orbit-component-builder/references/xnbitable-vue-parity.md +32 -32
@@ -1,179 +1,179 @@
1
- # xnb-component-template 脚手架清单(生成/增量必查)
2
-
3
- 路径前缀:`examples/xnb-component-template/`(相对本 skill 根目录)。
4
-
5
- ## 首次生成 vs 增量修改(首要判断)
6
-
7
- **执行任何操作前,先检查用户目标目录是否已有工程。**
8
-
9
- | 标志文件 | 说明 |
10
- |----------|------|
11
- | `package.json`(含 `vite` devDependency) | 构建系统 |
12
- | `vite.config.ts`(含 `COMPONENT_MAP`) | 多入口配置 |
13
- | `src/use/useBitablePage.ts` | 核心 composable |
14
-
15
- - **全部不存在** → **首次生成**:复制完整脚手架 + 生成业务组件(见下文「首次生成清单」)
16
- - **已存在** → **增量修改**:仅修改/新增业务文件,**不触碰**基础设施(见下文「增量修改边界」)
17
-
18
- ---
19
-
20
- ## 首次生成清单
21
-
22
- ### 必须复制的脚手架文件
23
-
24
- | 类别 | 文件 |
25
- |------|------|
26
- | 构建配置 | `package.json`、`vite.config.ts`、`vite.dev.config.ts`、`tsconfig.json`、`index.html`、`.nvmrc` |
27
- | 代码规范 | `.eslintrc.cjs`、`.eslintignore`、`.gitignore` |
28
- | 组件配置 | `vite.config.ts`(复制后清空 `COMPONENT_MAP` 示例条目,只写业务条目) |
29
- | 环境配置 | `.env.local.example` |
30
- | CI | `Jenkinsfile` |
31
- | 类型 | `src/types/xnb-context.ts` |
32
- | 工具函数 | `src/utils/openerInitParams.ts`、`src/utils/openerTicketIds.ts`、`src/utils/orbitHttpClient.ts` |
33
- | API | `src/api/agenticlabTickets.ts` |
34
- | Composable | `src/use/useBitablePage.ts`、`src/use/useSuperTableBitableLifecycle.ts` |
35
- | Dev 调试 | `dev/` 整个目录 |
36
- | 文档 | `OrbitAPI.md`、`AgenticAppAPI.md`、`README.md` |
37
-
38
- ### 禁止复制的示例文件
39
-
40
- | 文件 | 原因 |
41
- |------|------|
42
- | `src/views/bitable.vue` | 示例视图,仅供阅读参考 |
43
- | `src/views/custom-page.vue` | 示例视图,仅供阅读参考 |
44
- | `src/entries/bitable.ts` | 示例入口,随业务视图新建 |
45
- | `src/entries/custom-page.ts` | 示例入口,随业务视图新建 |
46
- | `src/use/useSuperCellDemo.ts` | 演示用 composable,业务不需要 |
47
- | `src/index.ts` | 默认导出占位,业务工程按需重写 |
48
-
49
- ### 首次生成后必须做的适配
50
-
51
- 1. **`vite.config.ts`**:清空 `COMPONENT_MAP` 中的 `bitable` / `custom-page` 示例条目,替换为业务组件条目(`distBaseName`、`registrarName`)
52
- 2. **`package.json`**:删除 `dev:bitable` / `build:bitable` / `dev:custom-page` / `build:custom-page` 脚本,替换为业务脚本;`main` 指向业务默认产物
53
- 3. **`src/use/useSuperTableBitableLifecycle.ts`**:替换 `DEMO_*` 常量、`DemoListRow` 类型、映射/校验函数为业务逻辑
54
- 4. **`.env.local`**:从 `.env.local.example` 复制,填入文档中的 `AppBaseUrl` 等
55
-
56
- ---
57
-
58
- ## 增量修改边界
59
-
60
- ### 禁止修改(除非用户明确要求)
61
-
62
- - `package.json` 中的 `dependencies` / `devDependencies`
63
- - `vite.config.ts`(除 `COMPONENT_MAP` 外)、`vite.dev.config.ts`、`tsconfig.json`
64
- - `dev/` 目录
65
- - `src/utils/orbitHttpClient.ts`
66
-
67
- ### 允许的操作
68
-
69
- | 操作 | 涉及文件 |
70
- |------|----------|
71
- | 新增门控入口 | 新建 `src/views/<id>.vue` + `src/entries/<id>.ts`,在 `vite.config.ts` 的 `COMPONENT_MAP` 增加条目,在 `package.json scripts` 增加 `dev:<id>` / `build:<id>` |
72
- | 修改已有视图 | 编辑 `src/views/<id>.vue` |
73
- | 修改 composable | 编辑 `src/use/useSuperTableBitableLifecycle.ts`(列、校验、映射等) |
74
- | 修改 API | 编辑 `src/api/agenticlabTickets.ts` |
75
- | 修改类型 | 编辑 `src/types/xnb-context.ts` |
76
- | 修改环境配置 | 编辑 `.env.local`(新增/修改环境变量) |
77
-
78
- ### 增量修改前必读
79
-
80
- 1. `vite.config.ts` 中的 `COMPONENT_MAP` → 已有哪些组件入口
81
- 2. `src/use/useSuperTableBitableLifecycle.ts` → 当前列定义、校验、映射逻辑
82
- 3. 目标 `src/views/<id>.vue` → 当前 UI 结构
83
-
84
- ---
85
-
86
- ## 新增一个入口组件(首次/增量均适用)
87
-
88
- | 步骤 | 文件 / 动作 |
89
- |------|-------------|
90
- | 1 | 新建 `src/views/<组件id>.vue`(`setup` + props) |
91
- | 2 | 新建 `src/entries/<组件id>.ts`:`export { default as View } from '../views/<组件id>.vue'` 与 `packageData` |
92
- | 3 | 在 `vite.config.ts` 的 `COMPONENT_MAP` 增加一项:`distBaseName`、`registrarName`、`label`(可选) |
93
- | 4 | 在 `package.json` → `scripts` 增加 `dev:<组件id>`、`build:<组件id>` |
94
- | 5 | 若作为 npm 包默认导出,更新 `package.json` 的 `main` 指向新产物 |
95
-
96
- ## 超级表格相关文件(按需复制或 import)
97
-
98
- - `src/types/xnb-context.ts`:扩展 `XnbSuperCellContext` 时在此集中声明。
99
- - `src/use/useSuperTableBitableLifecycle.ts`:列定义、`bootstrap` / `refreshTable` / `checkRows` / `submitRows`。
100
- - `src/use/useBitablePage.ts`:opener 初始化、刷新确认框、挂载 watcher。
101
- - `src/utils/openerInitParams.ts`、`openerTicketIds.ts`、`orbitHttpClient.ts`。
102
- - `src/api/agenticlabTickets.ts`。
103
- - 本地调试:`dev/src/mockXNBBitable.ts`、`App.vue` 里注入假 `xnbContext`。
104
-
105
- ## 文档链路
106
-
107
- - **运行时 HTTP / XNBBitable**:`OrbitAPI.md`(模板内为 orbit-write-js-cell API 的拷贝)。
108
- - **AgenticLab**:`AgenticAppAPI.md`。
109
- - **环境变量**:`.env.local.example`(开发,含 `VITE_DEV_TOKEN`、`VITE_AGENTICLAB_API_URL`)。
110
-
111
- ## 静态加载契约(宿主)
112
-
113
- README 中 JsCode 返回 `component.view / filename / source / params` 的占位;生成业务组件后须同步 **`registrarName` 与 `distBaseName`**(在 `vite.config.ts` 的 `COMPONENT_MAP` 中定义)到业务文档。
114
-
115
- ---
116
-
117
- ## 质量检查 npm scripts(平台无关)
118
-
119
- 模板 `package.json` 内置以下质量检查脚本,任何 Agent 平台或人工均可直接调用:
120
-
121
- | 命令 | 作用 |
122
- |------|------|
123
- | `npm run lint` | ESLint 检查(仅报告,不修改) |
124
- | `npm run lint:fix` | ESLint 自动修复 |
125
- | `npm run typecheck` | TypeScript 类型检查(`vue-tsc --noEmit`) |
126
- | `npm run build` | 构建验证 |
127
-
128
- 生成/修改代码后,按 `lint:fix → typecheck → build` 顺序执行,修复发现的问题。
129
-
130
- ---
131
-
132
- ## 可选:Claude Code PostToolUse Hook
133
-
134
- > 以下配置**仅适用于 Claude Code**,其它 Agent 平台请使用上方的 npm scripts。
135
-
136
- 为生成的 Orbit Vue 工程配置 PostToolUse hook,在每次编辑文件后自动对单文件运行 `eslint --fix`:
137
-
138
- ### `.claude/settings.json`
139
-
140
- ```json
141
- {
142
- "hooks": {
143
- "PostToolUse": [
144
- {
145
- "matcher": "Edit|Write",
146
- "hooks": [
147
- {
148
- "type": "command",
149
- "command": "bash .claude/hooks/post-edit-lint.sh"
150
- }
151
- ]
152
- }
153
- ]
154
- }
155
- }
156
- ```
157
-
158
- ### `.claude/hooks/post-edit-lint.sh`
159
-
160
- ```bash
161
- #!/bin/bash
162
- # PostToolUse hook: auto eslint --fix on edited .vue/.ts/.tsx files
163
-
164
- INPUT=$(cat)
165
- FILE=$(echo "$INPUT" | python3 -c "
166
- import sys, json
167
- try:
168
- d = json.load(sys.stdin)
169
- print(d.get('tool_input', {}).get('file_path', ''))
170
- except:
171
- pass
172
- " 2>/dev/null)
173
-
174
- if [[ -n "$FILE" && ("$FILE" == *.vue || "$FILE" == *.ts || "$FILE" == *.tsx) ]]; then
175
- cd "$(dirname "$0")/../.." && npx eslint --fix "$FILE" 2>&1 | tail -5
176
- fi
177
- ```
178
-
179
- > 首次生成工程时,可将 `.claude/` 目录一并创建到用户目标工程中(如用户同意)。记得 `chmod +x .claude/hooks/post-edit-lint.sh`。
1
+ # xnb-component-template 脚手架清单(生成/增量必查)
2
+
3
+ 路径前缀:`examples/xnb-component-template/`(相对本 skill 根目录)。
4
+
5
+ ## 首次生成 vs 增量修改(首要判断)
6
+
7
+ **执行任何操作前,先检查用户目标目录是否已有工程。**
8
+
9
+ | 标志文件 | 说明 |
10
+ |----------|------|
11
+ | `package.json`(含 `vite` devDependency) | 构建系统 |
12
+ | `vite.config.ts`(含 `COMPONENT_MAP`) | 多入口配置 |
13
+ | `src/use/useBitablePage.ts` | 核心 composable |
14
+
15
+ - **全部不存在** → **首次生成**:复制完整脚手架 + 生成业务组件(见下文「首次生成清单」)
16
+ - **已存在** → **增量修改**:仅修改/新增业务文件,**不触碰**基础设施(见下文「增量修改边界」)
17
+
18
+ ---
19
+
20
+ ## 首次生成清单
21
+
22
+ ### 必须复制的脚手架文件
23
+
24
+ | 类别 | 文件 |
25
+ |------|------|
26
+ | 构建配置 | `package.json`、`vite.config.ts`、`vite.dev.config.ts`、`tsconfig.json`、`index.html`、`.nvmrc` |
27
+ | 代码规范 | `.eslintrc.cjs`、`.eslintignore`、`.gitignore` |
28
+ | 组件配置 | `vite.config.ts`(复制后清空 `COMPONENT_MAP` 示例条目,只写业务条目) |
29
+ | 环境配置 | `.env.local.example` |
30
+ | CI | `Jenkinsfile` |
31
+ | 类型 | `src/types/xnb-context.ts` |
32
+ | 工具函数 | `src/utils/openerInitParams.ts`、`src/utils/openerTicketIds.ts`、`src/utils/orbitHttpClient.ts` |
33
+ | API | `src/api/agenticlabTickets.ts` |
34
+ | Composable | `src/use/useBitablePage.ts`、`src/use/useSuperTableBitableLifecycle.ts` |
35
+ | Dev 调试 | `dev/` 整个目录 |
36
+ | 文档 | `OrbitAPI.md`、`AgenticAppAPI.md`、`README.md` |
37
+
38
+ ### 禁止复制的示例文件
39
+
40
+ | 文件 | 原因 |
41
+ |------|------|
42
+ | `src/views/bitable.vue` | 示例视图,仅供阅读参考 |
43
+ | `src/views/custom-page.vue` | 示例视图,仅供阅读参考 |
44
+ | `src/entries/bitable.ts` | 示例入口,随业务视图新建 |
45
+ | `src/entries/custom-page.ts` | 示例入口,随业务视图新建 |
46
+ | `src/use/useSuperCellDemo.ts` | 演示用 composable,业务不需要 |
47
+ | `src/index.ts` | 默认导出占位,业务工程按需重写 |
48
+
49
+ ### 首次生成后必须做的适配
50
+
51
+ 1. **`vite.config.ts`**:清空 `COMPONENT_MAP` 中的 `bitable` / `custom-page` 示例条目,替换为业务组件条目(`distBaseName`、`registrarName`)
52
+ 2. **`package.json`**:删除 `dev:bitable` / `build:bitable` / `dev:custom-page` / `build:custom-page` 脚本,替换为业务脚本;`main` 指向业务默认产物
53
+ 3. **`src/use/useSuperTableBitableLifecycle.ts`**:替换 `DEMO_*` 常量、`DemoListRow` 类型、映射/校验函数为业务逻辑
54
+ 4. **`.env.local`**:从 `.env.local.example` 复制,填入文档中的 `AppBaseUrl` 等
55
+
56
+ ---
57
+
58
+ ## 增量修改边界
59
+
60
+ ### 禁止修改(除非用户明确要求)
61
+
62
+ - `package.json` 中的 `dependencies` / `devDependencies`
63
+ - `vite.config.ts`(除 `COMPONENT_MAP` 外)、`vite.dev.config.ts`、`tsconfig.json`
64
+ - `dev/` 目录
65
+ - `src/utils/orbitHttpClient.ts`
66
+
67
+ ### 允许的操作
68
+
69
+ | 操作 | 涉及文件 |
70
+ |------|----------|
71
+ | 新增门控入口 | 新建 `src/views/<id>.vue` + `src/entries/<id>.ts`,在 `vite.config.ts` 的 `COMPONENT_MAP` 增加条目,在 `package.json scripts` 增加 `dev:<id>` / `build:<id>` |
72
+ | 修改已有视图 | 编辑 `src/views/<id>.vue` |
73
+ | 修改 composable | 编辑 `src/use/useSuperTableBitableLifecycle.ts`(列、校验、映射等) |
74
+ | 修改 API | 编辑 `src/api/agenticlabTickets.ts` |
75
+ | 修改类型 | 编辑 `src/types/xnb-context.ts` |
76
+ | 修改环境配置 | 编辑 `.env.local`(新增/修改环境变量) |
77
+
78
+ ### 增量修改前必读
79
+
80
+ 1. `vite.config.ts` 中的 `COMPONENT_MAP` → 已有哪些组件入口
81
+ 2. `src/use/useSuperTableBitableLifecycle.ts` → 当前列定义、校验、映射逻辑
82
+ 3. 目标 `src/views/<id>.vue` → 当前 UI 结构
83
+
84
+ ---
85
+
86
+ ## 新增一个入口组件(首次/增量均适用)
87
+
88
+ | 步骤 | 文件 / 动作 |
89
+ |------|-------------|
90
+ | 1 | 新建 `src/views/<组件id>.vue`(`setup` + props) |
91
+ | 2 | 新建 `src/entries/<组件id>.ts`:`export { default as View } from '../views/<组件id>.vue'` 与 `packageData` |
92
+ | 3 | 在 `vite.config.ts` 的 `COMPONENT_MAP` 增加一项:`distBaseName`、`registrarName`、`label`(可选) |
93
+ | 4 | 在 `package.json` → `scripts` 增加 `dev:<组件id>`、`build:<组件id>` |
94
+ | 5 | 若作为 npm 包默认导出,更新 `package.json` 的 `main` 指向新产物 |
95
+
96
+ ## 超级表格相关文件(按需复制或 import)
97
+
98
+ - `src/types/xnb-context.ts`:扩展 `XnbSuperCellContext` 时在此集中声明。
99
+ - `src/use/useSuperTableBitableLifecycle.ts`:列定义、`bootstrap` / `refreshTable` / `checkRows` / `submitRows`。
100
+ - `src/use/useBitablePage.ts`:opener 初始化、刷新确认框、挂载 watcher。
101
+ - `src/utils/openerInitParams.ts`、`openerTicketIds.ts`、`orbitHttpClient.ts`。
102
+ - `src/api/agenticlabTickets.ts`。
103
+ - 本地调试:`dev/src/mockXNBBitable.ts`、`App.vue` 里注入假 `xnbContext`。
104
+
105
+ ## 文档链路
106
+
107
+ - **运行时 HTTP / XNBBitable**:`OrbitAPI.md`(模板内为 orbit-write-js-cell API 的拷贝)。
108
+ - **AgenticLab**:`AgenticAppAPI.md`。
109
+ - **环境变量**:`.env.local.example`(开发,含 `VITE_DEV_TOKEN`、`VITE_AGENTICLAB_API_URL`)。
110
+
111
+ ## 静态加载契约(宿主)
112
+
113
+ README 中 JsCode 返回 `component.view / filename / source / params` 的占位;生成业务组件后须同步 **`registrarName` 与 `distBaseName`**(在 `vite.config.ts` 的 `COMPONENT_MAP` 中定义)到业务文档。
114
+
115
+ ---
116
+
117
+ ## 质量检查 npm scripts(平台无关)
118
+
119
+ 模板 `package.json` 内置以下质量检查脚本,任何 Agent 平台或人工均可直接调用:
120
+
121
+ | 命令 | 作用 |
122
+ |------|------|
123
+ | `npm run lint` | ESLint 检查(仅报告,不修改) |
124
+ | `npm run lint:fix` | ESLint 自动修复 |
125
+ | `npm run typecheck` | TypeScript 类型检查(`vue-tsc --noEmit`) |
126
+ | `npm run build` | 构建验证 |
127
+
128
+ 生成/修改代码后,按 `lint:fix → typecheck → build` 顺序执行,修复发现的问题。
129
+
130
+ ---
131
+
132
+ ## 可选:Claude Code PostToolUse Hook
133
+
134
+ > 以下配置**仅适用于 Claude Code**,其它 Agent 平台请使用上方的 npm scripts。
135
+
136
+ 为生成的 Orbit Vue 工程配置 PostToolUse hook,在每次编辑文件后自动对单文件运行 `eslint --fix`:
137
+
138
+ ### `.claude/settings.json`
139
+
140
+ ```json
141
+ {
142
+ "hooks": {
143
+ "PostToolUse": [
144
+ {
145
+ "matcher": "Edit|Write",
146
+ "hooks": [
147
+ {
148
+ "type": "command",
149
+ "command": "bash .claude/hooks/post-edit-lint.sh"
150
+ }
151
+ ]
152
+ }
153
+ ]
154
+ }
155
+ }
156
+ ```
157
+
158
+ ### `.claude/hooks/post-edit-lint.sh`
159
+
160
+ ```bash
161
+ #!/bin/bash
162
+ # PostToolUse hook: auto eslint --fix on edited .vue/.ts/.tsx files
163
+
164
+ INPUT=$(cat)
165
+ FILE=$(echo "$INPUT" | python3 -c "
166
+ import sys, json
167
+ try:
168
+ d = json.load(sys.stdin)
169
+ print(d.get('tool_input', {}).get('file_path', ''))
170
+ except:
171
+ pass
172
+ " 2>/dev/null)
173
+
174
+ if [[ -n "$FILE" && ("$FILE" == *.vue || "$FILE" == *.ts || "$FILE" == *.tsx) ]]; then
175
+ cd "$(dirname "$0")/../.." && npx eslint --fix "$FILE" 2>&1 | tail -5
176
+ fi
177
+ ```
178
+
179
+ > 首次生成工程时,可将 `.claude/` 目录一并创建到用户目标工程中(如用户同意)。记得 `chmod +x .claude/hooks/post-edit-lint.sh`。
@@ -1,49 +1,49 @@
1
- # xnbContext:JsCode 注入 vs Vue props
2
-
3
- ## 差异摘要
4
-
5
- | 维度 | JsCode(`orbit-write-js-cell`) | Vue 组件(本技能 / 模板) |
6
- |------|----------------------------------|---------------------------|
7
- | 上下文来源 | 运行时注入,源码中可直接写 `xnbContext.cellUid` | **`defineProps<{ xnbContext: ... }>()`**,通过宿主挂载组件时传入 |
8
- | 典型入口 | 文件顶部 `const cellUid = xnbContext.cellUid` | `useXxx(() => props.xnbContext)` |
9
- | UI | `return \`...\`` HTML 字符串 | `<template>` + Quasar |
10
-
11
- ## 与 `xnb-jscode` `useContext.ts` 的对照
12
-
13
- 宿主侧 `XNBContext` 在构造时会把常用能力挂到 **`this.context`**(JsCode 里合并进 `xnbContext`)。Vue 侧应在 **`XnbSuperCellContext`**(模板 `src/types/xnb-context.ts`)上**按需扩展** props 类型,并在文档中注明「以宿主实际注入为准」。
14
-
15
- 以下为 **常见** `context` 成员与 Vue 中的用法(名称以宿主为准):
16
-
17
- | `useContext.ts` / 宿主 `context` | 用途 | Vue 中建议 |
18
- |----------------------------------|------|------------|
19
- | `bookPath` | Book 路径 | `props.xnbContext.bookPath`,传入 `XNBBitable` 与 HTTP |
20
- | `cellUid` | 当前 Cell | `props.xnbContext.cellUid` |
21
- | `notifySuccess` / `notifyError` | 轻提示 | 在 composable 中 `ctx.notifyError?.(...)` |
22
- | `loadingShow` / `loadingHide` | 全局 loading | 异步请求前后调用 |
23
- | `getUserData` / `updateUserData` / `mergeUserData` | Cell 用户数据 | 读配置、写回前合并(若宿主注入) |
24
- | `getInstanceValueById` / `setInstanceValueById` | Materialize 表单控件 | **Vue SFC 优先用 `v-model`/Quasar 表单**,仅在嵌入旧 HTML 片段时需要 |
25
- | `saveBitableConfig` / `getBitableConfig` / `clearBitableConfig` | 子表配置持久化 | 按需调用;注意异步与 book 名解析 |
26
- | `getXnbParams` / `updateXnbParams` | 运行参数 | 与提交 payload 合并(见 `afterRun` 逻辑对照) |
27
- | `XNBBitable`(类) | `new XNBBitable({ bookPath, cellUid })` | `props.xnbContext.XNBBitable`,存在时再创建 choreo 实例 |
28
-
29
- ## 代码模式(模板已有;以下为**写法参考**,示例文件名 `bitable.vue` 不应用于用户业务复制粘贴)
30
-
31
- ```vue
32
- <script lang="ts" setup>
33
- import { useBitablePage } from '@/use/useBitablePage'
34
- import type { XnbSuperCellContext } from '@/types/xnb-context'
35
-
36
- const props = defineProps<{
37
- xnbContext: XnbSuperCellContext
38
- }>()
39
-
40
- const { onRefresh, onCheck, onSubmit, ... } = useBitablePage(() => props.xnbContext)
41
- </script>
42
- ```
43
-
44
- **注意**:`watch(() => [getContext().bookPath, getContext().cellUid, ...])` 时,`getContext` 应始终读取 **最新** `props.xnbContext`,避免闭包捕获旧引用。
45
-
46
- ## 禁止
47
-
48
- - 在 Vue SFC 中假设存在未注入的全局 **`xnbContext`** 变量(除非宿主明确提供且类型已声明)。
49
- - 使用已废弃的 `window.xnb.getUserData` 等(与 **OrbitAPI.md** §1.3 反模式表一致)。
1
+ # xnbContext:JsCode 注入 vs Vue props
2
+
3
+ ## 差异摘要
4
+
5
+ | 维度 | JsCode(`orbit-write-js-cell`) | Vue 组件(本技能 / 模板) |
6
+ |------|----------------------------------|---------------------------|
7
+ | 上下文来源 | 运行时注入,源码中可直接写 `xnbContext.cellUid` | **`defineProps<{ xnbContext: ... }>()`**,通过宿主挂载组件时传入 |
8
+ | 典型入口 | 文件顶部 `const cellUid = xnbContext.cellUid` | `useXxx(() => props.xnbContext)` |
9
+ | UI | `return \`...\`` HTML 字符串 | `<template>` + Quasar |
10
+
11
+ ## 与 `xnb-jscode` `useContext.ts` 的对照
12
+
13
+ 宿主侧 `XNBContext` 在构造时会把常用能力挂到 **`this.context`**(JsCode 里合并进 `xnbContext`)。Vue 侧应在 **`XnbSuperCellContext`**(模板 `src/types/xnb-context.ts`)上**按需扩展** props 类型,并在文档中注明「以宿主实际注入为准」。
14
+
15
+ 以下为 **常见** `context` 成员与 Vue 中的用法(名称以宿主为准):
16
+
17
+ | `useContext.ts` / 宿主 `context` | 用途 | Vue 中建议 |
18
+ |----------------------------------|------|------------|
19
+ | `bookPath` | Book 路径 | `props.xnbContext.bookPath`,传入 `XNBBitable` 与 HTTP |
20
+ | `cellUid` | 当前 Cell | `props.xnbContext.cellUid` |
21
+ | `notifySuccess` / `notifyError` | 轻提示 | 在 composable 中 `ctx.notifyError?.(...)` |
22
+ | `loadingShow` / `loadingHide` | 全局 loading | 异步请求前后调用 |
23
+ | `getUserData` / `updateUserData` / `mergeUserData` | Cell 用户数据 | 读配置、写回前合并(若宿主注入) |
24
+ | `getInstanceValueById` / `setInstanceValueById` | Materialize 表单控件 | **Vue SFC 优先用 `v-model`/Quasar 表单**,仅在嵌入旧 HTML 片段时需要 |
25
+ | `saveBitableConfig` / `getBitableConfig` / `clearBitableConfig` | 子表配置持久化 | 按需调用;注意异步与 book 名解析 |
26
+ | `getXnbParams` / `updateXnbParams` | 运行参数 | 与提交 payload 合并(见 `afterRun` 逻辑对照) |
27
+ | `XNBBitable`(类) | `new XNBBitable({ bookPath, cellUid })` | `props.xnbContext.XNBBitable`,存在时再创建 choreo 实例 |
28
+
29
+ ## 代码模式(模板已有;以下为**写法参考**,示例文件名 `bitable.vue` 不应用于用户业务复制粘贴)
30
+
31
+ ```vue
32
+ <script lang="ts" setup>
33
+ import { useBitablePage } from '@/use/useBitablePage'
34
+ import type { XnbSuperCellContext } from '@/types/xnb-context'
35
+
36
+ const props = defineProps<{
37
+ xnbContext: XnbSuperCellContext
38
+ }>()
39
+
40
+ const { onRefresh, onCheck, onSubmit, ... } = useBitablePage(() => props.xnbContext)
41
+ </script>
42
+ ```
43
+
44
+ **注意**:`watch(() => [getContext().bookPath, getContext().cellUid, ...])` 时,`getContext` 应始终读取 **最新** `props.xnbContext`,避免闭包捕获旧引用。
45
+
46
+ ## 禁止
47
+
48
+ - 在 Vue SFC 中假设存在未注入的全局 **`xnbContext`** 变量(除非宿主明确提供且类型已声明)。
49
+ - 使用已废弃的 `window.xnb.getUserData` 等(与 **OrbitAPI.md** §1.3 反模式表一致)。
@@ -1,32 +1,32 @@
1
- # Vue 中实现 XNBBitable:与 JsCode 语义对齐
2
-
3
- ## 权威参考顺序
4
-
5
- 1. **本仓库模板** [`examples/xnb-component-template/OrbitAPI.md`](../examples/xnb-component-template/OrbitAPI.md)(§7–§9、反模式 §1.3)——与线上 JsCode 文档同源摘要。
6
- 2. **`orbit-write-js-cell`** 技能中的 **`references/API.md`**(若助手环境已安装该 skill):列与 `items`、`updateSubBitable`、`§8.5.2` 全量 list 为**唯一细粒度权威**。
7
- 3. **示例脚本** `orbit-write-js-cell/examples/bitable-list-lifecycle.js`:可复制其**状态机顺序**,改写成 `async function` + Vue `ref`,而非复制 `return` HTML。
8
-
9
- ## Vue 风格改写要点
10
-
11
- | JsCode / 生命周期脚本 | Vue 等价物 |
12
- |----------------------|------------|
13
- | 顶部解构 `xnbContext` | `props.xnbContext` + `() => props.xnbContext` 传入 composable |
14
- | `const choreo = new xnbContext.XNBBitable({ bookPath, cellUid })` | `computed`/`ref` 保存实例;`watch` bookPath/cellUid 变化时重新 bootstrap |
15
- | `notifyError` / `loadingShow` | 同成员,从 `getContext()` 读取 |
16
- | 按钮 `onclick="window.xnb.cell.run(...)"` | `<q-btn @click="onRefresh">` 调用 composable 方法 |
17
- | `return \`...\`` 工具栏 | `<template>` 内 Quasar 布局 |
18
-
19
- ## 必须遵守的 XNBBitable 规则(摘要)
20
-
21
- - **主列表唯一载体**:子表数据走 **`getSubBitable` / `getAllSubBitable` + `items` + `updateSubBitable`**;**不要**再用 `createCell('Sheet')`+`celldata` 做同一批数据的主表(**§7.0**)。
22
- - **全量 list 刷新**:接口返回当前全集时,每次刷新 **`bitable.items = mappedRows`** 再 `updateSubBitable`,**不要**仅依赖「有行则按 id 合并」的增量逻辑(**§8.5.2**)。
23
- - **列与行键一致**:`data_columns[].field` 必须与每行 `fields` 的键一致,否则「有表头无格内文字」。
24
- - **重建列**:仅在首屏或 `dataColumnsMismatch` 时 `addColumns`;避免每次刷新都 `createSubBitable` 清空重建(**§8.5.1**)。
25
-
26
- ## 模板内落地文件
27
-
28
- - **`src/use/useSuperTableBitableLifecycle.ts`**:`bootstrap`、`refreshTable`(`replaceAll`)、`checkRows`、`submitRows`。
29
- - **`src/use/useBitablePage.ts`**:与 opener、`watch` 联动。
30
- - **`src/types/xnb-context.ts`**:`XNBBitableChoreo` 方法签名对齐用。
31
-
32
- 生成新业务组件时,优先 **扩展/参数化** 上述 composable(如注入列定义、mapRow、校验规则),避免从零重写子表状态机。
1
+ # Vue 中实现 XNBBitable:与 JsCode 语义对齐
2
+
3
+ ## 权威参考顺序
4
+
5
+ 1. **本仓库模板** [`examples/xnb-component-template/OrbitAPI.md`](../examples/xnb-component-template/OrbitAPI.md)(§7–§9、反模式 §1.3)——与线上 JsCode 文档同源摘要。
6
+ 2. **`orbit-write-js-cell`** 技能中的 **`references/API.md`**(若助手环境已安装该 skill):列与 `items`、`updateSubBitable`、`§8.5.2` 全量 list 为**唯一细粒度权威**。
7
+ 3. **示例脚本** `orbit-write-js-cell/examples/bitable-list-lifecycle.js`:可复制其**状态机顺序**,改写成 `async function` + Vue `ref`,而非复制 `return` HTML。
8
+
9
+ ## Vue 风格改写要点
10
+
11
+ | JsCode / 生命周期脚本 | Vue 等价物 |
12
+ |----------------------|------------|
13
+ | 顶部解构 `xnbContext` | `props.xnbContext` + `() => props.xnbContext` 传入 composable |
14
+ | `const choreo = new xnbContext.XNBBitable({ bookPath, cellUid })` | `computed`/`ref` 保存实例;`watch` bookPath/cellUid 变化时重新 bootstrap |
15
+ | `notifyError` / `loadingShow` | 同成员,从 `getContext()` 读取 |
16
+ | 按钮 `onclick="window.xnb.cell.run(...)"` | `<q-btn @click="onRefresh">` 调用 composable 方法 |
17
+ | `return \`...\`` 工具栏 | `<template>` 内 Quasar 布局 |
18
+
19
+ ## 必须遵守的 XNBBitable 规则(摘要)
20
+
21
+ - **主列表唯一载体**:子表数据走 **`getSubBitable` / `getAllSubBitable` + `items` + `updateSubBitable`**;**不要**再用 `createCell('Sheet')`+`celldata` 做同一批数据的主表(**§7.0**)。
22
+ - **全量 list 刷新**:接口返回当前全集时,每次刷新 **`bitable.items = mappedRows`** 再 `updateSubBitable`,**不要**仅依赖「有行则按 id 合并」的增量逻辑(**§8.5.2**)。
23
+ - **列与行键一致**:`data_columns[].field` 必须与每行 `fields` 的键一致,否则「有表头无格内文字」。
24
+ - **重建列**:仅在首屏或 `dataColumnsMismatch` 时 `addColumns`;避免每次刷新都 `createSubBitable` 清空重建(**§8.5.1**)。
25
+
26
+ ## 模板内落地文件
27
+
28
+ - **`src/use/useSuperTableBitableLifecycle.ts`**:`bootstrap`、`refreshTable`(`replaceAll`)、`checkRows`、`submitRows`。
29
+ - **`src/use/useBitablePage.ts`**:与 opener、`watch` 联动。
30
+ - **`src/types/xnb-context.ts`**:`XNBBitableChoreo` 方法签名对齐用。
31
+
32
+ 生成新业务组件时,优先 **扩展/参数化** 上述 composable(如注入列定义、mapRow、校验规则),避免从零重写子表状态机。