openyida 0.1.2 → 1.0.0-beta.0
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 +68 -38
- package/bin/yida.js +164 -761
- package/lib/babel-transform/index.js +244 -0
- package/lib/babel-transform/jsx-utils.js +89 -0
- package/lib/check-update.js +72 -0
- package/lib/copy.js +258 -0
- package/lib/create-app.js +174 -0
- package/lib/create-form.js +2244 -0
- package/lib/create-page.js +89 -0
- package/lib/env.js +164 -0
- package/lib/get-page-config.js +102 -0
- package/lib/get-schema.js +76 -0
- package/lib/login.js +323 -0
- package/lib/publish.js +610 -0
- package/lib/save-share-config.js +268 -0
- package/lib/update-form-config.js +237 -0
- package/lib/utils.js +443 -0
- package/lib/verify-short-url.js +279 -0
- package/package.json +20 -7
- package/project/.cache/demo-schema.json +2353 -0
- package/project/pages/src/demo-birthday-game.js +833 -0
- package/project/pages/src/demo-future-vision-2026.js +1102 -0
- package/project/pages/src/demo-salary-calculator.js +904 -0
- package/project/prd/demo-birthday-game.md +39 -0
- package/project/prd/demo-future-vision-2026.md +78 -0
- package/project/prd/demo-salary-calculator.md +101 -0
- package/scripts/postinstall.js +114 -0
- package/yida-skills/SKILL.md +273 -0
- package/yida-skills/reference/association-form-field.md +469 -0
- package/yida-skills/reference/employee-field.md +17 -0
- package/yida-skills/reference/model-api.md +73 -0
- package/yida-skills/reference/serial-number-field.md +132 -0
- package/yida-skills/reference/yida-api.md +1208 -0
- package/yida-skills/skills/yida-app/SKILL.md +394 -0
- package/yida-skills/skills/yida-create-app/SKILL.md +158 -0
- package/yida-skills/skills/yida-create-form-page/SKILL.md +598 -0
- package/yida-skills/skills/yida-create-page/SKILL.md +103 -0
- package/yida-skills/skills/yida-custom-page/SKILL.md +533 -0
- package/yida-skills/skills/yida-get-schema/SKILL.md +90 -0
- package/yida-skills/skills/yida-login/SKILL.md +200 -0
- package/yida-skills/skills/yida-logout/SKILL.md +58 -0
- package/yida-skills/skills/yida-page-config/SKILL.md +261 -0
- package/yida-skills/skills/yida-publish-page/SKILL.md +113 -0
- package/.eslintrc.json +0 -25
- package/.github/workflows/ci.yml +0 -123
- package/.github/workflows/publish.yml +0 -105
- package/.github/workflows/update-contributors.yml +0 -151
- package/.openclaw/skills/yida-issue/SKILL.md +0 -27
- package/.openclaw/skills/yida-issue/scripts/create-issue.js +0 -317
- package/CLAUDE.md +0 -168
- package/CONTRIBUTING.md +0 -59
- package/install-skills.ps1 +0 -162
- package/install-skills.sh +0 -175
- package/pages/dist/.gitkeep +0 -0
- package/pages/src/.gitkeep +0 -0
- package/prd/salary-calculator.md +0 -15
- package/tests/cli.test.js +0 -930
- package/tests/install.test.js +0 -277
- package/tests/yida-issue.test.js +0 -314
- /package/{config.json → project/config.json} +0 -0
- /package/{.cache → project/pages/dist}/.gitkeep +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 生日祝福小游戏 需求文档
|
|
2
|
+
|
|
3
|
+
## 功能需求
|
|
4
|
+
|
|
5
|
+
### 核心功能
|
|
6
|
+
|
|
7
|
+
1. **欢迎界面**
|
|
8
|
+
- 输入寿星姓名
|
|
9
|
+
- 输入送祝福人姓名
|
|
10
|
+
- 开始游戏按钮
|
|
11
|
+
|
|
12
|
+
2. **点蜡烛游戏**
|
|
13
|
+
- 显示生日蛋糕和蜡烛(10根)
|
|
14
|
+
- 点击蜡烛可以吹灭(使用麦克风)
|
|
15
|
+
- 计时功能 - 记录吹灭所有蜡烛的时间
|
|
16
|
+
- 显示已吹灭的蜡烛数量
|
|
17
|
+
|
|
18
|
+
3. **祝福界面**
|
|
19
|
+
- 显示精美的生日贺卡
|
|
20
|
+
- 显示寿星姓名和送祝福人姓名
|
|
21
|
+
- 显示完成时间
|
|
22
|
+
- 生日祝福语
|
|
23
|
+
|
|
24
|
+
4. **庆祝动画**
|
|
25
|
+
- 彩带飘落效果
|
|
26
|
+
- 烟花动画
|
|
27
|
+
- 生日祝福语滚动
|
|
28
|
+
|
|
29
|
+
### 页面布局
|
|
30
|
+
|
|
31
|
+
- **全屏沉浸式设计**
|
|
32
|
+
- **温馨的粉色主题**
|
|
33
|
+
- **流畅的动画效果**
|
|
34
|
+
|
|
35
|
+
## 页面配置
|
|
36
|
+
|
|
37
|
+
### 首页(自定义页面)
|
|
38
|
+
|
|
39
|
+
展示完整的生日祝福小游戏功能。
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# 为"未来视野2026"线上发布会创建高转化率报名页。
|
|
2
|
+
|
|
3
|
+
## 转化策略
|
|
4
|
+
- 紧迫感:倒计时+席位稀缺+早鸟限时
|
|
5
|
+
- 社交证明:实时报名动态+企业Logo墙+往届92%满意度
|
|
6
|
+
- 低摩擦:4字段表单+智能填充+LinkedIn/微信一键登录
|
|
7
|
+
- 价值前置:白皮书预承诺+顶级嘉宾+5000+创新者社群
|
|
8
|
+
|
|
9
|
+
## 页面结构
|
|
10
|
+
|
|
11
|
+
### 1. 固定顶部栏
|
|
12
|
+
- 背景:动态渐变(深蓝#0F172A→紫#7C3AED→粉#EC4899)
|
|
13
|
+
- Logo"未来视野2026"+实时倒计时+CTA"立即锁定席位"
|
|
14
|
+
|
|
15
|
+
### 2. Hero区
|
|
16
|
+
- 视频背景:科技粒子/光线流动(移动端降级为渐变)
|
|
17
|
+
- 标签"2026年度科技趋势发布会·线上直播"
|
|
18
|
+
- 主标题:渐变文字+轻微故障艺术
|
|
19
|
+
- 副标题"与全球5000+创新者共同预见下一个十年"
|
|
20
|
+
- 信息卡:2026.3.15 | 14:00-17:00 GMT+8 | 线上直播+互动问答
|
|
21
|
+
- 双CTA:"免费报名"(粉→橙渐变,悬停发光)+"查看议程"(透明边框)
|
|
22
|
+
- 底部:实时报名动态"刚刚:张经理来自字节跳动完成报名"(10秒轮换)
|
|
23
|
+
|
|
24
|
+
### 3. 价值主张(3列卡片)
|
|
25
|
+
- 趋势首发:2026白皮书独家首发(价值¥1999)
|
|
26
|
+
- 顶级嘉宾:3位领袖+2位神秘大咖
|
|
27
|
+
- 资源网络:加入5000+创新者社群
|
|
28
|
+
- 数据背书:往届92%满意、平均观看2.5小时
|
|
29
|
+
|
|
30
|
+
### 4. 议程时间轴
|
|
31
|
+
14:00-14:10 开场 | 14:10-14:50 AI重构商业逻辑 | 14:50-15:30 碳中和圆桌 | 15:30-15:45 中场+VR抽奖 | 15:45-16:30 神秘新品发布 | 16:30-17:00 互动问答+资料包
|
|
32
|
+
- 悬停显示详情,垂直线条发光效果
|
|
33
|
+
|
|
34
|
+
### 5. 嘉宾阵容
|
|
35
|
+
- 头像+姓名职位+领域标签+一句话简介
|
|
36
|
+
- 第5位剪影问号"3月10日揭晓"
|
|
37
|
+
|
|
38
|
+
### 6. 社交证明
|
|
39
|
+
- Logo墙:华为/腾讯/阿里/蔚来/理想(灰度悬停彩色)
|
|
40
|
+
- 评价轮播:往届参会者视频/文字
|
|
41
|
+
- 实时数据:"已有3,847人报名"(数字跳动)
|
|
42
|
+
|
|
43
|
+
### 7. 报名表单
|
|
44
|
+
- 头部:"锁定席位"+"免费报名,仅限5000人"+进度条"剩余1,153"
|
|
45
|
+
- 字段:姓名*、公司*、职位*(下拉)、工作邮箱*(企业邮箱验证)
|
|
46
|
+
- 增强:智能填充、社交登录、默认勾选接收提醒(GDPR合规)
|
|
47
|
+
- 提交:"立即报名,获取专属席位"+加载动画
|
|
48
|
+
- 安全提示:"信息严格保密"
|
|
49
|
+
|
|
50
|
+
### 8. 成功状态
|
|
51
|
+
- Confetti动画+对勾绘制
|
|
52
|
+
- 显示确认信息+日历.ics下载+社交分享链接+预览资料下载+社群入口
|
|
53
|
+
|
|
54
|
+
### 9. 邮件营销
|
|
55
|
+
- 即时:凭证+日历+指南
|
|
56
|
+
- D+3:嘉宾预告 | D+7:资料包 | D+1:最后提醒 | D+0:1小时提醒 | D+1:回放+调查
|
|
57
|
+
- 工具:Mailchimp/SendGrid API
|
|
58
|
+
|
|
59
|
+
## 设计规范
|
|
60
|
+
|
|
61
|
+
**色彩**:深空黑#0B0F19(背景)、霓虹蓝#3B82F6、电光紫#8B5CF6、赛博粉#EC4899(CTA)、能量橙#F59E0B、纯白#FFFFFF、玻璃态rgba(255,255,255,0.1)
|
|
62
|
+
|
|
63
|
+
**字体**:标题Inter Bold大字号紧凑、正文Inter Regular 16-18px、数据DIN Alternate等宽
|
|
64
|
+
|
|
65
|
+
**动效**:渐变网格背景、鼠标跟随粒子、按钮磁性悬停、倒计时翻转动画、卡片3D倾斜
|
|
66
|
+
|
|
67
|
+
## 技术实现
|
|
68
|
+
- 框架:Next.js/React + Tailwind CSS + Framer Motion
|
|
69
|
+
- 表单:React Hook Form + Zod验证
|
|
70
|
+
- 后端:Node.js/Serverless + MongoDB/PostgreSQL
|
|
71
|
+
- 邮件:SendGrid/Mailchimp API
|
|
72
|
+
- 分析:Google Analytics 4 + Hotjar热力图
|
|
73
|
+
|
|
74
|
+
## A/B测试
|
|
75
|
+
- 标题:"未来视野2026" vs "预见2026:科技趋势发布会"
|
|
76
|
+
- CTA颜色:赛博粉 vs 电光紫
|
|
77
|
+
- 表单:4字段 vs 3字段(去掉职位)
|
|
78
|
+
- 社交证明位置:Hero区 vs 表单上方
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# 构建专业级"个人薪资计算器"工具页,帮助职场人精准估算收入结构。
|
|
2
|
+
|
|
3
|
+
## 核心定位
|
|
4
|
+
薪资结构分析师——让用户看清每一分钱的去向。
|
|
5
|
+
|
|
6
|
+
## 功能模块
|
|
7
|
+
|
|
8
|
+
### 1. 智能输入区
|
|
9
|
+
**基础字段**:
|
|
10
|
+
- 月薪(元):数字输入,税前/税后切换,placeholder"例如:25000"
|
|
11
|
+
- 工作城市:下拉选择(一线+新一线+自定义),自动匹配社保公积金比例
|
|
12
|
+
- 年终奖月数:滑块0-6个月,快捷按钮(13/14/15薪)
|
|
13
|
+
- 缴纳基数:默认等于月薪,可展开自定义(城市自动限制上下限)
|
|
14
|
+
|
|
15
|
+
**高级设置(可折叠)**:
|
|
16
|
+
- 公积金比例:5%-12%(默认12%)
|
|
17
|
+
- 社保方案:按实际工资/最低基数/上限基数
|
|
18
|
+
- 专项扣除:子女教育、房贷利息、赡养老人等
|
|
19
|
+
- 补充公积金/企业年金:可选
|
|
20
|
+
|
|
21
|
+
**输入辅助**:
|
|
22
|
+
- 实时验证:非法字符红色提示,有效绿色对勾
|
|
23
|
+
- 智能记忆:localStorage保存,下次自动填充
|
|
24
|
+
- 城市联动:切换城市时社保比例平滑过渡
|
|
25
|
+
|
|
26
|
+
### 2. 计算引擎
|
|
27
|
+
**核心公式**:
|
|
28
|
+
1. 税前年薪 = 月薪×12 + 月薪×年终奖月数
|
|
29
|
+
2. 平均时薪 = 税前年薪 ÷ (21.75天×8小时×12月)
|
|
30
|
+
3. 五险一金 = 各险种基数×比例之和(养老8%+医疗2%+失业0.5%+公积金12%)
|
|
31
|
+
4. 应纳税所得额 = 税前年收入 - 6万免征额 - 五险一金年缴 - 专项扣除年总额
|
|
32
|
+
5. 个税:累进税率(3%-45%),年终奖单独/合并计税可选
|
|
33
|
+
6. 税后月收入 = 月薪 - 五险一金个人部分 - 月度个税
|
|
34
|
+
7. 税后年薪 = 税后月收入×12 + 年终奖税后金额
|
|
35
|
+
|
|
36
|
+
**精度**:分位四舍五入,保留2位小数。
|
|
37
|
+
|
|
38
|
+
### 3. 可视化结果区
|
|
39
|
+
**核心指标(4宫格)**:
|
|
40
|
+
- 税前年薪:大字号绿色,标注"¥"
|
|
41
|
+
- 平均时薪:"¥/小时",附注"按176小时/月"
|
|
42
|
+
- 税后月收入:最大卡片,绿色渐变背景
|
|
43
|
+
- 税后年薪:汇总值,附注"实际到手"
|
|
44
|
+
|
|
45
|
+
**拆解图表**:
|
|
46
|
+
- 环形图:年薪构成(基本+年终奖占比)
|
|
47
|
+
- 堆叠柱状图:每月资金流向(到手、五险一金、个税)
|
|
48
|
+
- 瀑布图:税前到税后的层层扣除过程
|
|
49
|
+
|
|
50
|
+
**对比功能**:
|
|
51
|
+
- 城市对比:并排显示两地税后差异(如北京vs杭州)
|
|
52
|
+
- 方案对比:保存当前方案,调整参数后对比(如涨薪30%)
|
|
53
|
+
|
|
54
|
+
### 4. 结果操作
|
|
55
|
+
- 一键复制:结构化文本(适合微信/备忘录)
|
|
56
|
+
- 生成图片:HTML2Canvas导出,带品牌水印
|
|
57
|
+
- 保存方案:本地存储,支持命名(如"当前工作"、"offer A")
|
|
58
|
+
- 分享链接:URL参数编码,打开自动填充
|
|
59
|
+
|
|
60
|
+
## 设计风格
|
|
61
|
+
|
|
62
|
+
**色彩**:
|
|
63
|
+
- 主绿#10B981(信任、收益)、深绿#059669(强调)、浅绿#D1FAE5(高亮)
|
|
64
|
+
- 中性灰#F3F4F6(背景)、#6B7280(次要)、#1F2937(主文字)
|
|
65
|
+
- 警示橙#F59E0B(错误提示)
|
|
66
|
+
- 图表:绿#10B981(到手)、蓝#3B82F6(扣除)、灰#9CA3AF(个税)
|
|
67
|
+
|
|
68
|
+
**布局**:
|
|
69
|
+
- 桌面:左右分栏(输入40%+结果60%),sticky输入区
|
|
70
|
+
- 移动:上下堆叠,输入折叠为步骤条
|
|
71
|
+
- 留白充足,卡片圆角8px,阴影柔和
|
|
72
|
+
|
|
73
|
+
**字体**:
|
|
74
|
+
- 数字:SF Mono/Roboto Mono(等宽)
|
|
75
|
+
- 中文:Inter/思源黑体
|
|
76
|
+
- 金额:24-32px粗体绿色
|
|
77
|
+
|
|
78
|
+
## 交互细节
|
|
79
|
+
- 实时计算:防抖300ms,结果区即时反馈
|
|
80
|
+
- 输入框:focus边框变绿,label上浮
|
|
81
|
+
- 图表:hover显示精确值,图例可点击隐藏
|
|
82
|
+
- 复制成功:toast提示,按钮变勾号2秒恢复
|
|
83
|
+
- 响应式:640/768/1024/1280px断点,移动端数字键盘优化
|
|
84
|
+
|
|
85
|
+
## 数据可信度
|
|
86
|
+
- 社保比例:内置2026年各城市数据,可手动更新
|
|
87
|
+
- 个税税率:最新累进表,年终奖政策至2027年
|
|
88
|
+
- 版本号显示,过期提示"数据可能不是最新"
|
|
89
|
+
- 底部声明:"计算结果仅供参考,以实际劳动合同和当地政策为准"
|
|
90
|
+
|
|
91
|
+
## 技术实现
|
|
92
|
+
- 框架:React/Vue + TypeScript
|
|
93
|
+
- 图表:Chart.js/ECharts
|
|
94
|
+
- 导出:html2canvas + Clipboard API
|
|
95
|
+
- 优化:计算缓存、图表懒加载、城市数据JSON按需加载
|
|
96
|
+
|
|
97
|
+
## 扩展功能(V2.0)
|
|
98
|
+
- 反向计算:输入期望税后,反推税前薪资
|
|
99
|
+
- 跳槽模拟器:对比offer差异(含股票、公积金)
|
|
100
|
+
- 年度汇算:模拟个税汇算,预估退补税
|
|
101
|
+
- 家庭模式:夫妻合并计算,优化专项扣除
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* postinstall 钩子:npm install -g openyida 后自动配置 IDE 集成
|
|
4
|
+
*
|
|
5
|
+
* 在各 AI 工具的 skills/ 目录下创建指向 npm 包内 yida-skills/ 的软链接,
|
|
6
|
+
* 各工具通过扫描该目录自动发现技能包,无需额外配置。
|
|
7
|
+
*
|
|
8
|
+
* 支持的工具:Claude Code / OpenCode / Aone Copilot / Cursor / Qoder / iFlow / 悟空
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
"use strict";
|
|
12
|
+
|
|
13
|
+
const path = require("path");
|
|
14
|
+
const fs = require("fs");
|
|
15
|
+
const os = require("os");
|
|
16
|
+
|
|
17
|
+
const PACKAGE_ROOT = path.resolve(__dirname, "..");
|
|
18
|
+
const SKILLS_DIR = path.join(PACKAGE_ROOT, "yida-skills");
|
|
19
|
+
const HOME_DIR = os.homedir();
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 静默执行,不抛错
|
|
23
|
+
*/
|
|
24
|
+
function safeExec(fn) {
|
|
25
|
+
try { fn(); } catch { /* ignore */ }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 确保目录存在
|
|
30
|
+
*/
|
|
31
|
+
function ensureDir(dirPath) {
|
|
32
|
+
if (!fs.existsSync(dirPath)) {
|
|
33
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 在指定 IDE skills 目录下创建/更新指向 yida-skills/ 的软链接。
|
|
39
|
+
* 软链接名固定为 "yida-skills",各 IDE 通过此名称识别技能包。
|
|
40
|
+
* 若目标路径已是正确的软链接则跳过;
|
|
41
|
+
* 若是错误的软链接或实际目录/文件,则删除后重新创建软链接。
|
|
42
|
+
*/
|
|
43
|
+
function installSymlink(ideSkillsDir) {
|
|
44
|
+
const symlinkPath = path.join(ideSkillsDir, "yida-skills");
|
|
45
|
+
|
|
46
|
+
ensureDir(ideSkillsDir);
|
|
47
|
+
|
|
48
|
+
// 检查目标路径是否已存在
|
|
49
|
+
let existingStat = null;
|
|
50
|
+
try { existingStat = fs.lstatSync(symlinkPath); } catch { /* 不存在,继续创建 */ }
|
|
51
|
+
|
|
52
|
+
if (existingStat) {
|
|
53
|
+
if (existingStat.isSymbolicLink()) {
|
|
54
|
+
const currentTarget = fs.readlinkSync(symlinkPath);
|
|
55
|
+
if (currentTarget === SKILLS_DIR) return; // 已正确链接,跳过
|
|
56
|
+
fs.unlinkSync(symlinkPath); // 旧链接指向错误,删除后重建
|
|
57
|
+
} else {
|
|
58
|
+
// 是实际目录或文件,删除后创建软链接
|
|
59
|
+
fs.rmSync(symlinkPath, { recursive: true, force: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fs.symlinkSync(SKILLS_DIR, symlinkPath, "junction");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// ── 1. 软链接集成(各 IDE skills 目录)────────────────────────────────
|
|
67
|
+
|
|
68
|
+
// Claude Code
|
|
69
|
+
safeExec(() => {
|
|
70
|
+
installSymlink(path.join(HOME_DIR, ".claude", "skills"));
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// OpenCode
|
|
74
|
+
safeExec(() => {
|
|
75
|
+
if (fs.existsSync(path.join(HOME_DIR, ".opencode"))) {
|
|
76
|
+
installSymlink(path.join(HOME_DIR, ".opencode", "skills"));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Aone Copilot
|
|
81
|
+
safeExec(() => {
|
|
82
|
+
if (fs.existsSync(path.join(HOME_DIR, ".aone_copilot"))) {
|
|
83
|
+
installSymlink(path.join(HOME_DIR, ".aone_copilot", "skills"));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Cursor
|
|
88
|
+
safeExec(() => {
|
|
89
|
+
if (fs.existsSync(path.join(HOME_DIR, ".cursor"))) {
|
|
90
|
+
installSymlink(path.join(HOME_DIR, ".cursor", "skills"));
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Qoder
|
|
95
|
+
safeExec(() => {
|
|
96
|
+
if (fs.existsSync(path.join(HOME_DIR, ".qoder"))) {
|
|
97
|
+
installSymlink(path.join(HOME_DIR, ".qoder", "skills"));
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// iFlow
|
|
102
|
+
safeExec(() => {
|
|
103
|
+
if (fs.existsSync(path.join(HOME_DIR, ".iflow"))) {
|
|
104
|
+
installSymlink(path.join(HOME_DIR, ".iflow", "skills"));
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// ── 2. 悟空(Wukong)集成 ────────────────────────────────────────────
|
|
109
|
+
|
|
110
|
+
safeExec(() => {
|
|
111
|
+
if (fs.existsSync(path.join(HOME_DIR, ".real"))) {
|
|
112
|
+
installSymlink(path.join(HOME_DIR, ".real", ".skills"));
|
|
113
|
+
}
|
|
114
|
+
});
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Yida
|
|
3
|
+
description: >
|
|
4
|
+
宜搭 AI 应用开发总入口技能。通过有 AI Coding 能力的智能体(悟空/Claude/Open Code 等)+ 宜搭低代码平台,实现一句话生成完整应用。
|
|
5
|
+
包含应用创建、表单设计、自定义页面开发、页面发布、登录态管理等完整开发流程。
|
|
6
|
+
当用户提到"宜搭"、"yida"、"低代码"、"创建应用"、"创建表单"、"发布页面"、"搭建"、"系统"、等关键词时,使用此技能。
|
|
7
|
+
license: MIT
|
|
8
|
+
compatibility:
|
|
9
|
+
- opencode
|
|
10
|
+
- claude-code
|
|
11
|
+
metadata:
|
|
12
|
+
audience: developers
|
|
13
|
+
workflow: yida-development
|
|
14
|
+
version: 3.0.0
|
|
15
|
+
tags:
|
|
16
|
+
- yida
|
|
17
|
+
- low-code
|
|
18
|
+
- app
|
|
19
|
+
- form
|
|
20
|
+
- custom-page
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# 宜搭 AI 应用开发指南
|
|
24
|
+
|
|
25
|
+
## 概述
|
|
26
|
+
|
|
27
|
+
本技能通过有 AI Coding 能力的智能体(悟空/Claude/Open Code 等) + 宜搭低代码平台,实现一句话生成完整应用。涵盖从应用创建、表单设计、自定义页面开发到页面发布的完整链路。
|
|
28
|
+
|
|
29
|
+
所有操作通过 **`openyida`** 命令行工具统一执行,无需关心脚本路径或运行环境差异。
|
|
30
|
+
|
|
31
|
+
**登录态说明**:所有命令自动读取 `.cache/cookies.json`,首次运行或 Cookie 失效时自动触发登录流程,无需手动执行登录命令。
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 环境依赖
|
|
36
|
+
|
|
37
|
+
| 依赖 | 版本 | 用途 |
|
|
38
|
+
|------|------|------|
|
|
39
|
+
| Node.js | ≥ 16 | 运行 openyida |
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# 安装 openyida(首次使用前执行)
|
|
43
|
+
npm install -g openyida
|
|
44
|
+
|
|
45
|
+
# 更新 openyida 到最新版本
|
|
46
|
+
npm install -g openyida@latest
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 更新 openyida
|
|
52
|
+
|
|
53
|
+
**手动更新**:
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g openyida@latest
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**让 AI 帮你更新**:
|
|
59
|
+
|
|
60
|
+
执行 `openyida` 命令出现报错时,直接告诉 AI:
|
|
61
|
+
|
|
62
|
+
> "openyida 命令出错了,请帮我更新 openyida"
|
|
63
|
+
|
|
64
|
+
AI 会自动执行以下命令完成更新:
|
|
65
|
+
```bash
|
|
66
|
+
npm install -g openyida@latest
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
更新完成后重新执行出错的命令即可。
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## ⚡ 首要步骤:检测运行环境(必须先执行)
|
|
74
|
+
|
|
75
|
+
**在执行任何宜搭操作前,必须先运行环境检测命令**,确认当前 AI 工具环境和登录态:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
openyida env
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**输出解读**:
|
|
82
|
+
|
|
83
|
+
| 字段 | 说明 |
|
|
84
|
+
|------|------|
|
|
85
|
+
| AI 工具检测 | 显示当前活跃的 AI 工具(悟空/OpenCode/Aone Copilot 等) |
|
|
86
|
+
| 当前生效环境 | 显示项目根目录路径 |
|
|
87
|
+
| 登录态检测 | 显示是否已登录、域名、组织 ID |
|
|
88
|
+
|
|
89
|
+
> **若显示"未登录",自动执行 `openyida login`,无需手动操作。**。
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 🔧 初始化 project 工作目录
|
|
94
|
+
|
|
95
|
+
**如果当前工程目录下没有 `project/` 目录**(例如切换了 AI 工具、或在新工程中首次使用),需要手动执行初始化:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
openyida copy
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 复制目标说明
|
|
102
|
+
|
|
103
|
+
| AI 工具 | project 目录位置 | 说明 |
|
|
104
|
+
|---------|-----------------|------|
|
|
105
|
+
| **悟空(Wukong)** | `~/.real/workspace/project` | 悟空有专属 workspace,与工程目录无关 |
|
|
106
|
+
| **其他工具**(Aone Copilot、Cursor、Claude Code、OpenCode 等) | `<当前工程目录>/project` | 以项目为单位,需在工程根目录下执行 |
|
|
107
|
+
|
|
108
|
+
### AI 执行规则
|
|
109
|
+
|
|
110
|
+
**在执行任何宜搭操作前,先检查 project 目录是否存在**:
|
|
111
|
+
|
|
112
|
+
- **悟空**:检查 `~/.real/workspace/project` 是否存在
|
|
113
|
+
- **其他工具**:检查当前工程目录下的 `project/` 是否存在
|
|
114
|
+
|
|
115
|
+
若不存在,执行初始化:
|
|
116
|
+
```bash
|
|
117
|
+
openyida copy
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> ⚠️ 对于非悟空工具,必须先 `cd` 到工程根目录再执行 `openyida copy`。
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 何时使用
|
|
125
|
+
|
|
126
|
+
当用户提出以下需求时,使用本技能并按照完整开发流程执行:
|
|
127
|
+
- 创建宜搭应用、表单、自定义页面
|
|
128
|
+
- 发布或更新宜搭页面
|
|
129
|
+
- 配置页面公开访问/组织内分享
|
|
130
|
+
- 查询表单 Schema 或字段 ID
|
|
131
|
+
- 管理宜搭登录态(登录/退出)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 完整开发流程
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
[Step 1] 创建应用 → openyida create-app → 获得 appType
|
|
139
|
+
↓
|
|
140
|
+
[Step 2] 需求分析 → 写入 prd/<项目名>.md
|
|
141
|
+
↓
|
|
142
|
+
[Step 3] 创建自定义页面 → openyida create-page → 获得 formUuid(自定义页面)
|
|
143
|
+
↓
|
|
144
|
+
[Step 4](按需)创建/更新表单 → openyida create-form → 获得 formUuid(表单)
|
|
145
|
+
↓
|
|
146
|
+
[Step 5] 编写自定义页面代码 → yida-custom-page 规范 → pages/src/<项目名>.js
|
|
147
|
+
↓
|
|
148
|
+
[Step 6] 发布页面 → openyida publish
|
|
149
|
+
↓
|
|
150
|
+
[Step 7](按需)配置公开访问 → openyida verify-short-url / save-share-config
|
|
151
|
+
↓
|
|
152
|
+
[Step 8] 输出访问链接,用系统浏览器打开
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 子技能速查
|
|
158
|
+
|
|
159
|
+
> 每个子技能均有独立的 SKILL.md,执行前请读取对应文档获取详细参数说明。
|
|
160
|
+
|
|
161
|
+
| 技能 | SKILL.md 路径 | 用途 | 典型命令 |
|
|
162
|
+
|------|--------------|------|---------|
|
|
163
|
+
| `yida-login` | `skills/yida-login/SKILL.md` | 登录态管理(通常自动触发) | `openyida login` |
|
|
164
|
+
| `yida-logout` | `skills/yida-logout/SKILL.md` | 退出登录 / 切换账号 | `openyida logout` |
|
|
165
|
+
| `yida-create-app` | `skills/yida-create-app/SKILL.md` | 创建应用,获取 appType | `openyida create-app "<名称>"` |
|
|
166
|
+
| `yida-create-page` | `skills/yida-create-page/SKILL.md` | 创建自定义页面,获取 formUuid | `openyida create-page <appType> "<页面名>"` |
|
|
167
|
+
| `yida-create-form-page` | `skills/yida-create-form-page/SKILL.md` | 创建/更新表单页面 | `openyida create-form create <appType> "<表单名>" <字段JSON>` |
|
|
168
|
+
| `yida-get-schema` | `skills/yida-get-schema/SKILL.md` | 获取表单 Schema,确认字段 ID | `openyida get-schema <appType> <formUuid>` |
|
|
169
|
+
| `yida-custom-page` | `skills/yida-custom-page/SKILL.md` | 编写自定义页面 JSX 代码规范 | 详见 SKILL.md |
|
|
170
|
+
| `yida-publish-page` | `skills/yida-publish-page/SKILL.md` | 编译并发布自定义页面 | `openyida publish <源文件路径> <appType> <formUuid>` |
|
|
171
|
+
| `yida-page-config` | `skills/yida-page-config/SKILL.md` | 页面公开访问/组织内分享配置 | `openyida verify-short-url <appType> <formUuid> <url>` |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 关键规则
|
|
176
|
+
|
|
177
|
+
### 1. 执行子技能前必须读取其 SKILL.md
|
|
178
|
+
|
|
179
|
+
每个子技能的详细参数、注意事项、示例均在其 SKILL.md 中。**执行任何子技能前,必须先读取对应的 SKILL.md**,不要凭记忆猜测参数格式。
|
|
180
|
+
|
|
181
|
+
### 2. corpId 一致性检查(必须遵守)
|
|
182
|
+
|
|
183
|
+
在创建页面前,**必须对比 prd 文档中的 corpId 与 `.cache/cookies.json` 中的 corpId 是否一致**:
|
|
184
|
+
|
|
185
|
+
- **一致** → 继续执行
|
|
186
|
+
- **不一致** → 询问用户:重新登录到正确组织,还是在当前组织新建应用?
|
|
187
|
+
|
|
188
|
+
### 3. 配置信息分两处存储
|
|
189
|
+
|
|
190
|
+
| 信息类型 | 存储位置 | 内容示例 |
|
|
191
|
+
|---------|---------|---------|
|
|
192
|
+
| 业务语义信息 | `prd/<项目名>.md` | 字段名称、字段类型、字段说明 |
|
|
193
|
+
| Schema ID | `.cache/<项目名>-schema.json` | `appType`、`formUuid`、`fieldId` |
|
|
194
|
+
|
|
195
|
+
> **prd 文档不记录 `formUuid`、`fieldId` 等 ID**,这些写入 `.cache/` 临时文件。
|
|
196
|
+
|
|
197
|
+
### 4. 临时文件规范
|
|
198
|
+
|
|
199
|
+
所有临时文件(cookies、schema 缓存等)**必须写在项目根目录的 `.cache/` 文件夹中**,不要写在系统其他位置。
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 表单字段类型速查
|
|
204
|
+
|
|
205
|
+
| 类型 | 说明 | 特殊属性 |
|
|
206
|
+
|------|------|---------|
|
|
207
|
+
| `TextField` | 单行文本 | — |
|
|
208
|
+
| `TextareaField` | 多行文本 | — |
|
|
209
|
+
| `NumberField` | 数字 | `precision`(小数位)、`innerAfter`(单位) |
|
|
210
|
+
| `RadioField` | 单选 | `options` |
|
|
211
|
+
| `CheckboxField` | 多选 | `options` |
|
|
212
|
+
| `SelectField` | 下拉单选 | `options` |
|
|
213
|
+
| `MultiSelectField` | 下拉多选 | `options` |
|
|
214
|
+
| `DateField` | 日期 | `format`(如 `"YYYY-MM-DD"`) |
|
|
215
|
+
| `CascadeDateField` | 级联日期(范围) | `format` |
|
|
216
|
+
| `EmployeeField` | 成员选择 | `multiple` |
|
|
217
|
+
| `DepartmentSelectField` | 部门选择 | `multiple` |
|
|
218
|
+
| `AddressField` | 地址 | — |
|
|
219
|
+
| `AttachmentField` | 附件上传 | — |
|
|
220
|
+
| `ImageField` | 图片上传 | — |
|
|
221
|
+
| `TableField` | 子表格 | `children`(子字段列表) |
|
|
222
|
+
| `AssociationFormField` | 关联表单 | `associationForm` |
|
|
223
|
+
| `SerialNumberField` | 流水号 | `serialNumberRule` |
|
|
224
|
+
| `RateField` | 评分 | `count`(星级数) |
|
|
225
|
+
| `CountrySelectField` | 国家选择 | `multiple` |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 宜搭应用 URL 规则
|
|
230
|
+
|
|
231
|
+
| 页面类型 | URL 格式 |
|
|
232
|
+
|---------|---------|
|
|
233
|
+
| 应用首页 | `{base_url}/{appType}/workbench` |
|
|
234
|
+
| 表单提交页 | `{base_url}/{appType}/submission/{formUuid}` |
|
|
235
|
+
| 自定义页面 | `{base_url}/{appType}/custom/{formUuid}` |
|
|
236
|
+
| 自定义页面(隐藏导航) | `{base_url}/{appType}/custom/{formUuid}?isRenderNav=false` |
|
|
237
|
+
| 表单详情页 | `{base_url}/{appType}/formDetail/{formUuid}?formInstId={formInstId}` |
|
|
238
|
+
| 表单详情页(编辑模式) | `{base_url}/{appType}/formDetail/{formUuid}?formInstId={formInstId}&mode=edit` |
|
|
239
|
+
|
|
240
|
+
> 所有地址拼接 `&corpid={corpId}` 可自动切换到对应组织。
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 常见问题
|
|
245
|
+
**Q:发布时提示登录失效?**
|
|
246
|
+
|
|
247
|
+
重新登录后再发布:
|
|
248
|
+
```bash
|
|
249
|
+
openyida login
|
|
250
|
+
openyida publish <源文件路径> <appType> <formUuid>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Q:如何查看已有表单的字段 ID?**
|
|
254
|
+
|
|
255
|
+
使用 `yida-get-schema` 技能获取表单 Schema,从中读取各字段的 `fieldId`:
|
|
256
|
+
```bash
|
|
257
|
+
openyida get-schema <appType> <formUuid>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Q:如何更新已有表单字段?**
|
|
261
|
+
|
|
262
|
+
使用 `yida-create-form-page` 的 update 模式,详见 `skills/yida-create-form-page/SKILL.md`:
|
|
263
|
+
```bash
|
|
264
|
+
openyida create-form update <appType> <formUuid> '[{"action":"add","field":{"type":"TextField","label":"新字段"}}]'
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**Q:发布时提示 corpId 不匹配?**
|
|
268
|
+
|
|
269
|
+
询问用户是否在当前组织创建新应用发布,或重新登录到正确组织:
|
|
270
|
+
```bash
|
|
271
|
+
openyida logout
|
|
272
|
+
openyida login
|
|
273
|
+
```
|