@lovrabet/cli 1.3.4 → 1.4.1-beta.2

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 (88) hide show
  1. package/lib/ai-setup/config.js +1 -1
  2. package/lib/api/api-doc-ui.js +1 -1
  3. package/lib/api/api-doc.js +1 -1
  4. package/lib/api/api-pull-ui.js +1 -1
  5. package/lib/api/fetch-model-list.js +1 -1
  6. package/lib/api/generate-api-file.js +1 -1
  7. package/lib/api/main.js +1 -1
  8. package/lib/api/pull-silent.js +1 -1
  9. package/lib/app-menu/app-menu-sync-ui.js +1 -1
  10. package/lib/app-menu/create-menu.js +1 -1
  11. package/lib/app-menu/get-local-pages.js +1 -1
  12. package/lib/app-menu/get-online-menu-list.js +1 -1
  13. package/lib/app-menu/update-menu.js +1 -0
  14. package/lib/app-menu/use-get-online-menu-list.js +1 -1
  15. package/lib/app-menu/utils.js +1 -1
  16. package/lib/app-menu/valid-url.js +1 -1
  17. package/lib/app-menu-update-cdn/current-content.js +1 -1
  18. package/lib/app-menu-update-cdn/input-cdn-asset.js +1 -1
  19. package/lib/app-menu-update-cdn/main.js +1 -1
  20. package/lib/app-menu-update-cdn/update-menu.js +1 -0
  21. package/lib/auth/auth-server-ui.js +1 -1
  22. package/lib/auth/auth-server.js +1 -1
  23. package/lib/auth/constant.js +1 -1
  24. package/lib/auth/get-cookie.js +1 -1
  25. package/lib/auth/is-session-valid.js +1 -1
  26. package/lib/auth/logout.js +1 -1
  27. package/lib/cli-flags.js +1 -1
  28. package/lib/cli.js +1 -1
  29. package/lib/cmd/build-watch.js +1 -1
  30. package/lib/cmd/build.js +1 -1
  31. package/lib/cmd/logs.js +1 -1
  32. package/lib/cmd/preview.js +1 -1
  33. package/lib/cmd/start-execa.js +1 -1
  34. package/lib/cmd/start.js +1 -1
  35. package/lib/config/config-help.js +1 -1
  36. package/lib/config/main.js +1 -1
  37. package/lib/constant/domain.js +1 -1
  38. package/lib/constant/env.js +1 -1
  39. package/lib/create-app/enhanced-guided-create.js +1 -1
  40. package/lib/create-app/format-elapsed.js +1 -1
  41. package/lib/create-app/main.js +1 -1
  42. package/lib/create-app/non-interactive.js +1 -1
  43. package/lib/create-app/task-finished.js +1 -1
  44. package/lib/create-app/task-loading.js +1 -1
  45. package/lib/create-app/task-running.js +1 -1
  46. package/lib/create-app/task-time.js +1 -1
  47. package/lib/create-app/use-copy-project-template.js +1 -1
  48. package/lib/create-app/use-format-code.js +1 -1
  49. package/lib/create-app/use-install-dependencies.js +1 -1
  50. package/lib/help.js +1 -1
  51. package/lib/i18n/I18nProvider.js +1 -1
  52. package/lib/i18n/hooks.js +1 -1
  53. package/lib/i18n/index.js +1 -1
  54. package/lib/i18n/locales/en-US.js +1 -1
  55. package/lib/i18n/locales/zh-CN.js +1 -1
  56. package/lib/init/main.js +1 -1
  57. package/lib/mcp/McpInstallUI.js +1 -1
  58. package/lib/mcp/claude.js +1 -1
  59. package/lib/mcp/cursor.js +1 -1
  60. package/lib/mcp/main.js +1 -1
  61. package/lib/mcp/mcp-install-non-interactive.js +1 -1
  62. package/lib/mcp/mcp-installer.js +1 -1
  63. package/lib/skills/main.js +1 -1
  64. package/lib/skills/npx-skills-add.js +1 -0
  65. package/lib/ui/IDESelector.js +1 -1
  66. package/lib/ui/useIDESelection.js +1 -1
  67. package/lib/utils/ai_config.js +1 -1
  68. package/lib/utils/cdn-config.js +1 -1
  69. package/lib/utils/check-sdk-version.js +1 -1
  70. package/lib/utils/cli-version-check.js +1 -1
  71. package/lib/utils/config.js +1 -1
  72. package/lib/utils/copy-directory.js +1 -1
  73. package/lib/utils/file-utils.js +1 -1
  74. package/lib/utils/guides-cdn.js +1 -1
  75. package/lib/utils/http-client.js +1 -1
  76. package/lib/utils/logger.js +1 -1
  77. package/lib/utils/rules-cdn.js +1 -1
  78. package/lib/utils/sleep.js +1 -1
  79. package/lib/utils/template-replacer.js +1 -1
  80. package/package.json +5 -5
  81. package/sidecar/flags.json +10 -0
  82. package/templates/rules/lovrabet_rules.mdc.tpl +891 -0
  83. package/templates/skill/SKILL.md.tpl +120 -0
  84. package/lib/ai-setup/AISetupUI.js +0 -1
  85. package/lib/app-menu-update-cdn/update-menu-cdn-url.js +0 -1
  86. package/lib/skills/SkillInstallUI.js +0 -1
  87. package/lib/skills/skill-install-non-interactive.js +0 -1
  88. package/lib/skills/skill-installer.js +0 -1
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: lovrabet
3
+ description: 当用户请求涉及 Lovrabet/云兔/yuntoo 平台的数据集查询、SQL 创建、BFF 开发时使用。触发词:数据集、数据表、自定义 SQL、filter、sql.execute、bff.execute、get_dataset_detail、validate_sql_content、save_or_update_custom_sql、save_or_update_bff_script、@lovrabet/sdk、MCP SQL 工作流、多表关联、lovrabet 开发。
4
+ ---
5
+
6
+ # Lovrabet 开发工作流(路由指南)
7
+
8
+ Lovrabet 中文名为**云兔**,也常写作 **yuntoo**。本文档是**路由指南**,告诉你什么场景用什么工具/文档。
9
+
10
+ ## 强制读取规则(不可跳过)
11
+
12
+ 以下情况必须先调用 Read 工具读取对应文件,禁止依赖记忆直接回答或执行:
13
+
14
+ | 触发条件 | 必须读取的文件 |
15
+ |---------|--------------|
16
+ | 创建 / 修改 / 保存 SQL | `.lovrabet/skill/guides/02-mcp-sql-workflow.md` |
17
+ | 涉及 SQL 本地落盘、目录规范 | `.lovrabet/skill/guides/07-sql-creation-workflow.md` |
18
+ | 创建 / 修改 / 保存 BFF 脚本 | `.lovrabet/skill/guides/08-bff-creation-workflow.md` |
19
+ | 涉及 BFF 本地落盘、目录规范 | `.lovrabet/skill/guides/05-backend-function.md` |
20
+ | 遇到冲突提示 / blocked / confirmationRequired | `.lovrabet/skill/guides/09-conflict-detection.md` |
21
+ | 使用 TypeScript SDK / filter / sql.execute | `.lovrabet/skill/guides/01-typescript-sdk.md` |
22
+ | 数据接口设计、多表关联、性能优化 | `.lovrabet/skill/guides/06-data-api-guidelines.md` |
23
+ | 报错、行为异常、无法确定原因 | `.lovrabet/skill/guides/04-troubleshooting.md` |
24
+
25
+ **执行顺序**:读完对应 guide → 再调用 MCP 工具 → 再回答用户。
26
+
27
+ ## 前置条件检测
28
+
29
+ ### 检测 MCP 是否可用(必需)
30
+
31
+ ```
32
+ 检测方式:尝试调用任何 Lovrabet 相关的 MCP 工具
33
+ - 查找工具名包含 "lovrabet" 或 "dataset" 的 MCP 工具
34
+ - 常见工具:get_auth_status、list_datasets、get_dataset_detail
35
+ - ✅ 找到 → MCP 可用,继续
36
+ - ❌ 未找到 → 提示用户:lovrabet mcp install
37
+ ```
38
+
39
+ **注意**:MCP 服务器名字可能是自定义的,不一定叫 `lovrabet-dataset`
40
+
41
+ ## 工具路由规则
42
+
43
+ ### 查询和分析 → 用 MCP Tools
44
+
45
+ | 场景 | 使用的 MCP Tool |
46
+ |------|----------------|
47
+ | 列出所有数据集 | `list_datasets` |
48
+ | 搜索数据集 | `search_datasets` |
49
+ | 获取数据集详情 | `get_dataset_detail` |
50
+ | 执行已保存的 SQL | `execute_custom_sql` |
51
+ | 列出 SQL 查询 | `list_sql_queries` |
52
+ | 列出 BFF 脚本 | `list_bff_scripts` |
53
+ | 获取 BFF 详情 | `get_bff_script_info` |
54
+ | 生成 SDK 代码 | `generate_sdk_code` |
55
+ | 生成 SQL 代码 | `generate_sql_code` |
56
+
57
+ **规则**:直接调用 MCP 工具,不要生成脚本
58
+
59
+ ### 验证和保存 → 用 MCP Tools(含冲突检测)
60
+
61
+ | 场景 | 使用的 MCP Tool | 说明 |
62
+ |------|----------------|------|
63
+ | 验证 SQL 语法 | `validate_sql_content` | 静态语法 + 可选 schema 验证 |
64
+ | 保存 SQL | `save_or_update_custom_sql` | 通过 toolbox,自动冲突检测 |
65
+ | 保存 BFF | `save_or_update_bff_script` | 通过 toolbox,自动冲突检测 |
66
+
67
+ **冲突处理**:保存工具返回 `blocked: true`(例如他人为最后提交者)时,告知用户在平台上手动处理,**不要**自动重试同一保存。`confirmationRequired` / `nextAction` 等字段以工具返回为准;细节见 `09-conflict-detection.md`。
68
+
69
+ **BFF 写入类 MCP**:若看不到 `list_bff_scripts` / `save_or_update_bff_script`,请在数据集 MCP 的启动参数中加入 `--enable-bff-save`,旧名 `--dangerously-bff-save` 仍可用;详见 `11-bff-sync-workflow.md`。
70
+
71
+ ## 快速决策树
72
+
73
+ ```
74
+ 用户请求
75
+
76
+ ├─ 查询数据?
77
+ │ └─ 用 MCP: execute_custom_sql / generate_sql_code
78
+
79
+ ├─ 创建/修改 SQL?
80
+ │ ├─ 0. 读取 .lovrabet/skill/guides/02-mcp-sql-workflow.md(必须)
81
+ │ ├─ 1. 用 MCP: get_dataset_detail(了解结构)
82
+ │ ├─ 2. 生成 SQL 代码
83
+ │ ├─ 3. 用 MCP: validate_sql_content(验证)
84
+ │ ├─ 4. 用 MCP: save_or_update_custom_sql(保存,含冲突检测)
85
+ │ └─ 5. 用 MCP: execute_custom_sql(测试)
86
+
87
+ ├─ 创建/修改 BFF?
88
+ │ ├─ 0. 读取 .lovrabet/skill/guides/08-bff-creation-workflow.md(必须)
89
+ │ ├─ 1. 生成 BFF 代码
90
+ │ └─ 2. 用 MCP: save_or_update_bff_script(保存,含冲突检测)
91
+
92
+ ├─ 生成 SDK 代码?
93
+ │ └─ 用 MCP: generate_sdk_code
94
+
95
+ └─ 不确定?
96
+ └─ 读取 `.lovrabet/skill/guides/04-troubleshooting.md`
97
+ ```
98
+
99
+ ## 全部 Guides 索引
100
+
101
+ > 通过 `lovrabet skill install` 安装后,guide 位于项目根目录的 `.lovrabet/skill/guides/` 下。若使用 `npx skills add lovrabet/lovrabet-skill`,路径以 skills 生态落盘为准,可读本文档同级的 `./guides/`。
102
+
103
+ | 用户需求 | 参考的 Guide 文档 |
104
+ |---------|------------------|
105
+ | 使用 TypeScript SDK | `.lovrabet/skill/guides/01-typescript-sdk.md` |
106
+ | 创建自定义 SQL(MCP 模式) | `.lovrabet/skill/guides/02-mcp-sql-workflow.md` |
107
+ | React 前端开发 | `.lovrabet/skill/guides/03-frontend-development.md` |
108
+ | 故障排查 | `.lovrabet/skill/guides/04-troubleshooting.md` |
109
+ | 创建 BFF 脚本 | `.lovrabet/skill/guides/05-backend-function.md` |
110
+ | 数据接口规范 | `.lovrabet/skill/guides/06-data-api-guidelines.md` |
111
+ | SQL 创建工作流 | `.lovrabet/skill/guides/07-sql-creation-workflow.md` |
112
+ | BFF 创建工作流 | `.lovrabet/skill/guides/08-bff-creation-workflow.md` |
113
+ | BFF 同步与协作(平台脚本列表、保存) | `.lovrabet/skill/guides/11-bff-sync-workflow.md` |
114
+ | 冲突检测和处理 | `.lovrabet/skill/guides/09-conflict-detection.md` |
115
+ | 团队协作最佳实践 | `.lovrabet/skill/guides/10-best-practices.md` |
116
+
117
+ ## 配置文件位置
118
+
119
+ - **详细配置说明**:`.lovrabet/CONFIG.md`(若存在)
120
+ - **Guides 目录**:`.lovrabet/skill/guides/`
@@ -1 +0,0 @@
1
- const a0_0x6a51a4=a0_0x23f0;(function(_0x4dd7ff,_0x5cb963){const _0x428fc9=a0_0x23f0,_0x2d731f=_0x4dd7ff();while(!![]){try{const _0x4e13c4=-parseInt(_0x428fc9(0x195))/0x1*(-parseInt(_0x428fc9(0x1a2))/0x2)+parseInt(_0x428fc9(0x18e))/0x3*(-parseInt(_0x428fc9(0x1a0))/0x4)+-parseInt(_0x428fc9(0x180))/0x5+-parseInt(_0x428fc9(0x1bc))/0x6*(-parseInt(_0x428fc9(0x1a5))/0x7)+parseInt(_0x428fc9(0x192))/0x8*(parseInt(_0x428fc9(0x1b8))/0x9)+-parseInt(_0x428fc9(0x1b4))/0xa+parseInt(_0x428fc9(0x1aa))/0xb;if(_0x4e13c4===_0x5cb963)break;else _0x2d731f['push'](_0x2d731f['shift']());}catch(_0x381a1c){_0x2d731f['push'](_0x2d731f['shift']());}}}(a0_0x306e,0xc2934));import{jsx as a0_0x2a614b,jsxs as a0_0x1ccb59}from'react/jsx-runtime';import{useState,useEffect}from'react';import{Box,Text,useInput,useApp}from'ink';import{configureMcp}from'./config.js';function a0_0x23f0(_0x5bd0bc,_0x45118e){_0x5bd0bc=_0x5bd0bc-0x17d;const _0x306e9d=a0_0x306e();let _0x23f07a=_0x306e9d[_0x5bd0bc];return _0x23f07a;}import{installSkill,copySharedSkills,createSkillManifest,SKILL_IDE_CONFIGS}from'./config.js';import{useI18n}from'../i18n/hooks.js';const MCP_IDE_LIST=[a0_0x6a51a4(0x1b6),a0_0x6a51a4(0x1a7)],SKILL_IDE_LIST=[a0_0x6a51a4(0x1a1),a0_0x6a51a4(0x1a7),a0_0x6a51a4(0x19a),'codex','cursor',a0_0x6a51a4(0x17f),a0_0x6a51a4(0x1af),a0_0x6a51a4(0x18c),'windsurf',a0_0x6a51a4(0x1b1)];function a0_0x306e(){const _0x100328=['128311FJRYCQ','aiSetup.ui.selectAtLeastOne','gray','size','green','codebuddy','error','push','aiSetup.ui.confirm.skillDescription','return','aiSetup.ui.confirm.default','6176312QMCsls','antigravity','2EkHSXS','name','aiSetup.ui.confirm.mcpDescription','8022Druwua','white','claude','appcode','installing','16101976QzLyda','red','success','Claude\x20Code','aiSetup.ui.confirm.no','qoder','ide','agent','yellow','aiSetup.ui.select.title','14693910SJFfBb','length','cursor','[✓]','45fdGnaL','cyan','add','Cursor','6696scpokW','aiSetup.ui.select.controls','status','opencode','3132295gjQVZH','blue','column','projectRoot','has','aiSetup.ui.select.mcpSection','aiSetup.ui.confirm.yes','aiSetup.ui.confirm.title','confirming','[\x20]','map','mcp-','trae','filter','3qSeydo','delete','selecting','aiSetup.ui.installing','2505352eUHPrG','done','message'];a0_0x306e=function(){return _0x100328;};return a0_0x306e();}export function AISetupUI({config:_0x2a5cdd,onComplete:_0x3fe6e8}){const _0x30ee7a=a0_0x6a51a4,{t:_0x588060}=useI18n(),{exit:_0x476118}=useApp(),[_0x4c63a1,_0x495104]=useState(_0x30ee7a(0x188)),[_0x5e9ff6,_0x436d4b]=useState(0x0),[_0x2f3239,_0x5985c2]=useState(new Set([0x0,0x1])),[_0xa0826a,_0x3b34f4]=useState(new Set(SKILL_IDE_LIST[_0x30ee7a(0x18a)]((_0x58adc8,_0x34bc10)=>_0x34bc10))),[_0x5e2df9,_0x356556]=useState('');useEffect(()=>{const _0x56f10f=_0x30ee7a;!_0x2a5cdd[_0x56f10f(0x1a8)]&&_0x3fe6e8({'mcpResults':[],'skillResults':[]});},[_0x2a5cdd['appcode'],_0x3fe6e8]),useInput((_0x2dbcf9,_0x46a02c)=>{const _0x18f2d2=_0x30ee7a;if(_0x4c63a1===_0x18f2d2(0x188)){if(_0x2dbcf9==='y'||_0x2dbcf9==='Y'||_0x46a02c[_0x18f2d2(0x19e)]){_0x48c0df();return;}if(_0x2dbcf9==='n'||_0x2dbcf9==='N'){_0x3fe6e8({'mcpResults':[],'skillResults':[]});return;}if(_0x46a02c[_0x18f2d2(0x19e)]){_0x48c0df();return;}}if(_0x4c63a1===_0x18f2d2(0x190)){if(_0x46a02c['upArrow']){_0x436d4b(_0x39413f=>_0x39413f>0x0?_0x39413f-0x1:SKILL_IDE_LIST[_0x18f2d2(0x1b5)]-0x1);return;}if(_0x46a02c['downArrow']){_0x436d4b(_0x56621d=>_0x56621d<SKILL_IDE_LIST[_0x18f2d2(0x1b5)]-0x1?_0x56621d+0x1:0x0);return;}if(_0x2dbcf9==='\x20'){const _0x5e3b2a=_0x5e9ff6<MCP_IDE_LIST[_0x18f2d2(0x1b5)];if(_0x5e3b2a){const _0x16448a=new Set(_0x2f3239);_0x16448a[_0x18f2d2(0x184)](_0x5e9ff6)?_0x16448a[_0x18f2d2(0x18f)](_0x5e9ff6):_0x16448a['add'](_0x5e9ff6),_0x5985c2(_0x16448a);}else{const _0x111d77=_0x5e9ff6-MCP_IDE_LIST[_0x18f2d2(0x1b5)],_0x3f38b6=new Set(_0xa0826a);_0x3f38b6[_0x18f2d2(0x184)](_0x111d77)?_0x3f38b6[_0x18f2d2(0x18f)](_0x111d77):_0x3f38b6[_0x18f2d2(0x1ba)](_0x111d77),_0x3b34f4(_0x3f38b6);}return;}if(_0x2dbcf9==='a'||_0x2dbcf9==='A'){_0x5985c2(new Set(MCP_IDE_LIST[_0x18f2d2(0x18a)]((_0x5a5112,_0x10c98f)=>_0x10c98f))),_0x3b34f4(new Set(SKILL_IDE_LIST[_0x18f2d2(0x18a)]((_0x2d99df,_0x4abb89)=>_0x4abb89)));return;}if(_0x2dbcf9==='q'||_0x2dbcf9==='Q'){_0x476118();return;}if(_0x46a02c['return']){if(_0x2f3239[_0x18f2d2(0x198)]===0x0&&_0xa0826a[_0x18f2d2(0x198)]===0x0){_0x356556(_0x588060(_0x18f2d2(0x196)));return;}_0x48c0df();return;}}if(_0x4c63a1===_0x18f2d2(0x193)){_0x476118();return;}});async function _0x48c0df(){const _0x204523=_0x30ee7a;_0x495104('installing');const _0x5b8d15=[],_0x351130=[];for(const _0x2578ac of _0x2f3239){const _0x587c4e=MCP_IDE_LIST[_0x2578ac];if(!_0x587c4e)continue;try{const _0xca5f14=await configureMcp(_0x587c4e,_0x2a5cdd[_0x204523(0x183)]);_0x5b8d15[_0x204523(0x19c)](_0xca5f14);}catch(_0x348ba8){_0x5b8d15[_0x204523(0x19c)]({'ide':MCP_IDE_CONFIGS[_0x587c4e]?.[_0x204523(0x1a3)]||_0x587c4e,'status':_0x204523(0x19b),'message':_0x348ba8 instanceof Error?_0x348ba8[_0x204523(0x194)]:String(_0x348ba8)});}}await copySharedSkills(_0x2a5cdd[_0x204523(0x183)]);for(const _0x34ade5 of _0xa0826a){const _0xf9cde2=SKILL_IDE_LIST[_0x34ade5];if(!_0xf9cde2)continue;try{const _0xa7c3ce=await installSkill(_0xf9cde2,_0x2a5cdd[_0x204523(0x183)]);_0x351130[_0x204523(0x19c)](_0xa7c3ce);}catch(_0x368575){_0x351130[_0x204523(0x19c)]({'ide':SKILL_IDE_CONFIGS[_0xf9cde2]?.[_0x204523(0x1a3)]||_0xf9cde2,'status':_0x204523(0x19b),'message':_0x368575 instanceof Error?_0x368575[_0x204523(0x194)]:String(_0x368575)});}}if(_0x351130['length']>0x0){const _0xd2626c=_0x351130[_0x204523(0x18d)](_0x522569=>_0x522569[_0x204523(0x17e)]===_0x204523(0x1ac))[_0x204523(0x18a)](_0x13645e=>_0x13645e[_0x204523(0x1b0)]);_0xd2626c[_0x204523(0x1b5)]>0x0&&createSkillManifest(_0x2a5cdd[_0x204523(0x183)],_0xd2626c);}_0x495104(_0x204523(0x193)),setTimeout(()=>{_0x3fe6e8({'mcpResults':_0x5b8d15,'skillResults':_0x351130});},0xbb8);}if(_0x4c63a1==='confirming')return a0_0x1ccb59(Box,{'flexDirection':_0x30ee7a(0x182),'marginTop':0x1,'children':[a0_0x2a614b(Box,{'marginTop':0x1,'children':a0_0x2a614b(Text,{'color':_0x30ee7a(0x1a6),'children':_0x588060(_0x30ee7a(0x187))})}),a0_0x2a614b(Box,{'marginLeft':0x2,'marginTop':0x1,'children':a0_0x2a614b(Text,{'color':_0x30ee7a(0x197),'children':_0x588060(_0x30ee7a(0x1a4))})}),a0_0x2a614b(Box,{'marginLeft':0x2,'children':a0_0x2a614b(Text,{'color':_0x30ee7a(0x197),'children':_0x588060(_0x30ee7a(0x19d))})}),a0_0x1ccb59(Box,{'marginTop':0x1,'flexDirection':'column','children':[a0_0x2a614b(Box,{'children':a0_0x2a614b(Text,{'color':_0x30ee7a(0x199),'children':_0x588060(_0x30ee7a(0x186))})}),a0_0x2a614b(Box,{'children':a0_0x2a614b(Text,{'color':'gray','children':_0x588060(_0x30ee7a(0x1ae))})}),a0_0x2a614b(Box,{'children':a0_0x2a614b(Text,{'color':'dimColor','children':_0x588060(_0x30ee7a(0x19f))})})]}),_0x5e2df9&&a0_0x2a614b(Box,{'marginTop':0x1,'children':a0_0x1ccb59(Text,{'color':_0x30ee7a(0x1ab),'children':['✗\x20',_0x5e2df9]})})]});if(_0x4c63a1===_0x30ee7a(0x190))return a0_0x1ccb59(Box,{'flexDirection':'column','marginTop':0x1,'children':[a0_0x2a614b(Box,{'children':a0_0x2a614b(Text,{'color':_0x30ee7a(0x1b9),'bold':!![],'children':_0x588060(_0x30ee7a(0x1b3))})}),_0x5e2df9&&a0_0x2a614b(Box,{'marginTop':0x1,'children':a0_0x1ccb59(Text,{'color':_0x30ee7a(0x1ab),'children':['✗\x20',_0x5e2df9]})}),a0_0x1ccb59(Box,{'marginTop':0x1,'flexDirection':_0x30ee7a(0x182),'children':[a0_0x2a614b(Text,{'bold':!![],'color':'yellow','children':_0x588060(_0x30ee7a(0x185))}),MCP_IDE_LIST[_0x30ee7a(0x18a)]((_0x3cea35,_0x32bd1e)=>{const _0x17a9b7=_0x30ee7a,_0x4e5d6e=_0x5e9ff6===_0x32bd1e,_0x745464=_0x2f3239[_0x17a9b7(0x184)](_0x32bd1e);return a0_0x2a614b(Box,{'children':a0_0x1ccb59(Text,{'backgroundColor':_0x4e5d6e?_0x17a9b7(0x181):undefined,'color':_0x4e5d6e?_0x17a9b7(0x1a6):undefined,'children':[_0x745464?_0x17a9b7(0x1b7):_0x17a9b7(0x189),'\x20',_0x3cea35===_0x17a9b7(0x1b6)?_0x17a9b7(0x1bb):_0x17a9b7(0x1ad)]})},_0x17a9b7(0x18b)+_0x3cea35);}),a0_0x2a614b(Box,{'marginTop':0x1,'children':a0_0x2a614b(Text,{'bold':!![],'color':_0x30ee7a(0x1b2),'children':_0x588060('aiSetup.ui.select.skillSection')})}),SKILL_IDE_LIST[_0x30ee7a(0x18a)]((_0x2e5775,_0x43b533)=>{const _0x10ba20=_0x30ee7a,_0x2028a6=_0x43b533+MCP_IDE_LIST[_0x10ba20(0x1b5)],_0x5ab430=_0x5e9ff6===_0x2028a6,_0x5b54a6=_0xa0826a[_0x10ba20(0x184)](_0x2028a6);return a0_0x2a614b(Box,{'children':a0_0x1ccb59(Text,{'backgroundColor':_0x5ab430?_0x10ba20(0x181):undefined,'color':_0x5ab430?_0x10ba20(0x1a6):undefined,'children':[_0x5b54a6?_0x10ba20(0x1b7):'[\x20]','\x20',SKILL_IDE_CONFIGS[_0x2e5775]['name']]})},'skill-'+_0x2e5775);}),a0_0x2a614b(Box,{'marginTop':0x1,'children':a0_0x2a614b(Text,{'color':_0x30ee7a(0x197),'children':_0x588060(_0x30ee7a(0x17d))})})]})]});if(_0x4c63a1===_0x30ee7a(0x1a9))return a0_0x2a614b(Box,{'flexDirection':_0x30ee7a(0x182),'marginTop':0x1,'children':a0_0x2a614b(Box,{'children':a0_0x2a614b(Text,{'children':_0x588060(_0x30ee7a(0x191))})})});if(_0x4c63a1===_0x30ee7a(0x193))return null;return null;}const MCP_IDE_CONFIGS={'cursor':{'name':a0_0x6a51a4(0x1bb)},'claude':{'name':'Claude\x20Code'}};
@@ -1 +0,0 @@
1
- const a21_0x30521b=a21_0xb2fd;(function(_0x243df6,_0x135a1b){const _0x4837d0=a21_0xb2fd,_0x3f4c2c=_0x243df6();while(!![]){try{const _0x3c87e0=parseInt(_0x4837d0(0x159))/0x1*(-parseInt(_0x4837d0(0x166))/0x2)+-parseInt(_0x4837d0(0x150))/0x3*(parseInt(_0x4837d0(0x14e))/0x4)+parseInt(_0x4837d0(0x15d))/0x5+-parseInt(_0x4837d0(0x147))/0x6*(-parseInt(_0x4837d0(0x157))/0x7)+parseInt(_0x4837d0(0x15e))/0x8+-parseInt(_0x4837d0(0x153))/0x9*(parseInt(_0x4837d0(0x14b))/0xa)+parseInt(_0x4837d0(0x154))/0xb*(parseInt(_0x4837d0(0x169))/0xc);if(_0x3c87e0===_0x135a1b)break;else _0x3f4c2c['push'](_0x3f4c2c['shift']());}catch(_0x2da5a8){_0x3f4c2c['push'](_0x3f4c2c['shift']());}}}(a21_0x1e2c,0xd0476));import{getCookie}from'../auth/get-cookie.js';function a21_0x1e2c(){const _0x528171=['264LDwpJY','bind','appMenu.updateCdn.success.synced','2525004DdxzyD','1772683CemwAG','https://g.yuntooai.com/dist/yt-test-app/1.0.1/assets/main.css','sdk-demo','3774358MqHIMv','log','1ebkvVn','appMenu.error.missingAppCode','status','info','5049550wrvWtL','6990480SuiLPk','resources','application/json','appMenu.updateCdn.updating','appMenu.error.appCodeHint.option1','error','appMenu.error.appCodeHint.option2','update-menu-cdn-url','2489440GmUpLJ','data','appMenu.error.authExpired','48feWxLU','errorMsg','path','label','18yRGPff','stringify','import','common.error','50vdqKFw','/smartapi/menu/update','appMenu.updateCdn.error.updateFailed','29332ewsrAB','SdkDemo1'];a21_0x1e2c=function(){return _0x528171;};return a21_0x1e2c();}import{getApiDomain}from'../constant/domain.js';import{readConfig}from'../utils/config.js';import{logger}from'../utils/logger.js';import a21_0xf24b02 from'../i18n/index.js';const config=readConfig(),logLabel=a21_0x30521b(0x165),t=a21_0xf24b02['t'][a21_0x30521b(0x151)](a21_0xf24b02);function a21_0xb2fd(_0x10b28d,_0x45f2e1){_0x10b28d=_0x10b28d-0x147;const _0x1e2cfc=a21_0x1e2c();let _0xb2fd90=_0x1e2cfc[_0x10b28d];return _0xb2fd90;}import.meta.main&&updateMenuCdnUrl({'id':0xf41e,'label':a21_0x30521b(0x14f),'path':a21_0x30521b(0x156),'resources':['https://g.yuntooai.com/dist/yt-test-app/1.0.1/assets/main.js',a21_0x30521b(0x155)]});export async function updateMenuCdnUrl(_0x44c2dc){const _0xb41f66=a21_0x30521b,_0x350b06=config?.['appcode'];if(!_0x350b06){const _0x2c8dee=t(_0xb41f66(0x15a));logger['error'](logLabel,_0x2c8dee),console[_0xb41f66(0x163)]('×\x20'+_0x2c8dee),console[_0xb41f66(0x158)](t('appMenu.error.appCodeHint.title')),console[_0xb41f66(0x158)](t(_0xb41f66(0x162))),console[_0xb41f66(0x158)](t(_0xb41f66(0x164)));return;}logger[_0xb41f66(0x15c)](logLabel,t(_0xb41f66(0x161),{'label':_0x44c2dc[_0xb41f66(0x16c)],'path':_0x44c2dc[_0xb41f66(0x16b)]}));const _0x5ced5c={'id':_0x44c2dc['id'],'appCode':_0x350b06,'extend':{'loadScriptMode':_0xb41f66(0x149),'resources':_0x44c2dc[_0xb41f66(0x15f)]?JSON[_0xb41f66(0x148)](_0x44c2dc[_0xb41f66(0x15f)]):undefined}},_0x5767bd=await fetch(getApiDomain()+_0xb41f66(0x14c),{'method':'POST','body':JSON[_0xb41f66(0x148)](_0x5ced5c),'headers':{'Content-Type':_0xb41f66(0x160),'Cookie':getCookie()}});if(!_0x5767bd['ok']){if(_0x5767bd[_0xb41f66(0x15b)]===0x191){const _0x56141d=t(_0xb41f66(0x168));logger['error'](logLabel,_0x56141d,{'status':_0x5767bd[_0xb41f66(0x15b)],'menu':_0x44c2dc[_0xb41f66(0x16c)]});throw new Error(_0x56141d);}const _0x33f33f=t(_0xb41f66(0x14d),{'error':_0x5767bd[_0xb41f66(0x15b)]});logger[_0xb41f66(0x163)](logLabel,_0x33f33f,{'menu':_0x44c2dc[_0xb41f66(0x16c)]});throw new Error(_0x33f33f);}const _0x4848a1=await _0x5767bd['json']();if(!_0x4848a1['success']){const _0x251b7a=t('appMenu.updateCdn.error.updateFailed',{'error':_0x4848a1[_0xb41f66(0x16a)]||t(_0xb41f66(0x14a))});logger[_0xb41f66(0x163)](logLabel,_0x251b7a,{'errorCode':_0x4848a1['errorCode'],'errorMsg':_0x4848a1['errorMsg'],'menu':_0x44c2dc[_0xb41f66(0x16c)]});throw new Error(_0x251b7a);}logger['info'](logLabel,t(_0xb41f66(0x152),{'label':_0x44c2dc[_0xb41f66(0x16c)]}),_0x4848a1[_0xb41f66(0x167)]);}
@@ -1 +0,0 @@
1
- const a64_0x36eb1f=a64_0x3dbc;(function(_0x24bece,_0x190f1e){const _0x1d2118=a64_0x3dbc,_0x5ad2ee=_0x24bece();while(!![]){try{const _0x2cf583=-parseInt(_0x1d2118(0x1c1))/0x1+parseInt(_0x1d2118(0x19d))/0x2*(-parseInt(_0x1d2118(0x1b7))/0x3)+parseInt(_0x1d2118(0x1a8))/0x4+-parseInt(_0x1d2118(0x1bf))/0x5+-parseInt(_0x1d2118(0x1b0))/0x6+-parseInt(_0x1d2118(0x1a6))/0x7+parseInt(_0x1d2118(0x1a5))/0x8*(parseInt(_0x1d2118(0x19e))/0x9);if(_0x2cf583===_0x190f1e)break;else _0x5ad2ee['push'](_0x5ad2ee['shift']());}catch(_0x35af08){_0x5ad2ee['push'](_0x5ad2ee['shift']());}}}(a64_0x11b8,0x9117d));function a64_0x11b8(){const _0x456711=['size','skill.cdn.fetchingExtend','message','map','selecting','info','54naHPgg','25537626mGdSZx','2.0.0','selectedIndexes','gray','warn','skill.installing.installed','skill.select.selectedIDE','8obtWIX','5730438vDnelf','.lovrabet/skill-manifest.json','1015572UemSKb','return','skill.done.guidesPathInline','../../cdn-source/skills','\x20✓\x20','length','installing','skill.done.pressAnyKey','3324588juxjHB','setLogPath','log','skill.installing.title','setErrorMsg','toISOString','skill.done.successInline','39009VCNYwI','skill-install','guides','error','name','skill.cdn.fetching','skill.cdn.fetchSuccess','keys','31955PFuyPR','utf-8','766902bzoKgw','green','done','.lovrabet','cyan','skill.select.count'];a64_0x11b8=function(){return _0x456711;};return a64_0x11b8();}import{jsx as a64_0x36aafd,jsxs as a64_0x5e55a8,Fragment as a64_0x4d6ee0}from'react/jsx-runtime';import{useState,useEffect}from'react';import{Text,Box,useInput,useApp}from'ink';import{writeFileSync}from'node:fs';import{resolve,join}from'node:path';import{fileURLToPath}from'node:url';import{dirname}from'node:path';import{logger}from'../utils/logger.js';import{copyDir}from'../utils/file-utils.js';import{IDE_CONFIGS,IDE_LIST}from'../utils/ai_config.js';import{installSingleIDE}from'./skill-installer.js';function a64_0x3dbc(_0x3f6a33,_0x395236){_0x3f6a33=_0x3f6a33-0x192;const _0x11b809=a64_0x11b8();let _0x3dbc03=_0x11b809[_0x3f6a33];return _0x3dbc03;}import{fetchGuidesFromCDN,writeGuidesToProject}from'../utils/guides-cdn.js';import{IDESelector,useIDESelection}from'../ui/IDESelector.js';import{useI18n}from'../i18n/hooks.js';const __dirname=dirname(fileURLToPath(import.meta.url)),UI_IDE_LIST=IDE_LIST[a64_0x36eb1f(0x19a)](_0x265a5a=>({'key':_0x265a5a,'name':IDE_CONFIGS[_0x265a5a][a64_0x36eb1f(0x1bb)],'description':IDE_CONFIGS[_0x265a5a]['description']}));export function SkillInstallUI({preselectedIDEs:preselectedIDEs=[],providedFlags:_0x143ef0}){const _0x141e64=a64_0x36eb1f,{exit:_0x58b441}=useApp(),{t:_0x1ea8d2}=useI18n(),[_0x136be4,_0x5c5b2b]=useState(_0x141e64(0x19b)),[_0x302a79,_0x17acbb]=useState([]),[_0x9475d,_0x219ec0]=useState([]),[_0x2fc810,_0x4c5b55]=useState(0x0),_0x24878e=useIDESelection({'ideList':UI_IDE_LIST,'preselectedIDEs':preselectedIDEs,'multiSelect':!![]});useEffect(()=>{const _0x2bd925=_0x141e64;preselectedIDEs[_0x2bd925(0x1ad)]>0x0&&_0x24878e['selectedIndexes'][_0x2bd925(0x197)]>0x0&&_0x3d2810();},[]),useInput((_0xa714a,_0x4bd792)=>{const _0x400d8d=_0x141e64;if(_0x136be4===_0x400d8d(0x19b)){if(_0xa714a==='q'||_0xa714a==='Q'){_0x58b441();return;}if(_0x4bd792[_0x400d8d(0x1a9)]){if(_0x24878e[_0x400d8d(0x1a0)][_0x400d8d(0x197)]===0x0){_0x24878e[_0x400d8d(0x1b4)](_0x1ea8d2('skill.error.selectAtLeastOne'));return;}_0x3d2810();return;}_0x24878e['handleKeyDown'](_0xa714a,_0x4bd792);}_0x136be4===_0x400d8d(0x193)&&_0x58b441();});async function _0x3d2810(){const _0x2f2a3f=_0x141e64,_0x3c1355=_0x24878e['getSelectedIDEs']();_0x219ec0(_0x3c1355),_0x17acbb([{'label':_0x1ea8d2(_0x2f2a3f(0x1a4)),'value':_0x1ea8d2(_0x2f2a3f(0x196),{'count':_0x24878e['selectedIndexes'][_0x2f2a3f(0x197)]})}]),_0x5c5b2b(_0x2f2a3f(0x1ae)),await _0x4ae6e1(_0x3c1355);}async function _0x4ae6e1(_0x5156e2){const _0x46d983=_0x141e64,_0x4aec39=process['cwd'](),_0x174a52=resolve(__dirname,_0x46d983(0x1ab));logger[_0x46d983(0x1b1)](_0x4aec39);const _0x88d256=_0x143ef0&&_0x143ef0['length']>0x0;console[_0x46d983(0x1b2)](_0x88d256?_0x1ea8d2(_0x46d983(0x198)):_0x1ea8d2(_0x46d983(0x1bc)));let _0x485701;try{_0x485701=await fetchGuidesFromCDN(_0x88d256),console[_0x46d983(0x1b2)](_0x1ea8d2(_0x46d983(0x1bd),{'count':Object[_0x46d983(0x1be)](_0x485701[_0x46d983(0x1b9)])[_0x46d983(0x1ad)]}));}catch(_0x7acf8f){console[_0x46d983(0x1a2)](_0x1ea8d2('skill.cdn.fetchFailed',{'error':_0x7acf8f instanceof Error?_0x7acf8f[_0x46d983(0x199)]:String(_0x7acf8f)}));}let _0x4a14bd=0x0;for(const _0x55b03c of _0x5156e2){try{const _0x1e5390=IDE_CONFIGS[_0x55b03c],_0x189df7=await installSingleIDE(_0x55b03c,_0x1e5390,_0x4aec39,_0x174a52,_0x485701,_0x143ef0);_0x4a14bd+=_0x189df7,_0x4c5b55(_0x4a14bd);}catch(_0xf9d0ad){console[_0x46d983(0x1ba)](_0x1ea8d2('skill.error.installFailed',{'ide':_0x55b03c,'error':_0xf9d0ad instanceof Error?_0xf9d0ad[_0x46d983(0x199)]:String(_0xf9d0ad)}));}}_0x485701&&writeGuidesToProject(_0x485701,_0x4aec39,'.lovrabet/skill/.shared/guides',_0x143ef0);const _0x28c30d={'version':_0x46d983(0x19f),'installedAt':new Date()[_0x46d983(0x1b5)](),'platforms':_0x5156e2},_0x15ca3a=join(_0x4aec39,_0x46d983(0x1a7)),_0x6ae277=join(_0x4aec39,_0x46d983(0x194));await copyDir(_0x6ae277,_0x6ae277),writeFileSync(_0x15ca3a,JSON['stringify'](_0x28c30d,null,0x2),_0x46d983(0x1c0)),logger[_0x46d983(0x19c)](_0x46d983(0x1b8),'安装成功',{'projectRoot':_0x4aec39,'ides':_0x5156e2,'foldersCount':_0x4a14bd}),_0x5c5b2b('done'),setTimeout(()=>{_0x58b441();},0x3e8);}return a64_0x5e55a8(Box,{'flexDirection':'column','marginTop':0x1,'children':[_0x136be4===_0x141e64(0x19b)&&a64_0x36aafd(IDESelector,{'ideList':UI_IDE_LIST,'title':_0x1ea8d2(_0x141e64(0x1b3)),'selection':_0x24878e}),_0x136be4===_0x141e64(0x1ae)&&a64_0x36aafd(InstallingStep,{'completedSteps':_0x302a79,'installingIDEs':_0x9475d,'installedCount':_0x2fc810}),_0x136be4===_0x141e64(0x193)&&a64_0x36aafd(DoneStep,{'installedCount':_0x2fc810})]});}function InstallingStep({completedSteps:_0xb6a701,installingIDEs:_0x420d0d,installedCount:_0x106096}){const _0x41879b=a64_0x36eb1f,{t:_0x179a05}=useI18n();return a64_0x5e55a8(a64_0x4d6ee0,{'children':[_0xb6a701[_0x41879b(0x19a)]((_0x3cea40,_0x58210d)=>a64_0x5e55a8(Box,{'children':[a64_0x5e55a8(Text,{'color':_0x41879b(0x192),'children':['√\x20',_0x3cea40['label'],':\x20']}),a64_0x36aafd(Text,{'color':_0x41879b(0x195),'children':_0x3cea40['value']})]},_0x58210d)),a64_0x36aafd(Box,{'marginTop':0x1,'children':a64_0x36aafd(Text,{'children':_0x179a05('skill.installing.progress')})}),_0x420d0d['map'](_0x8a6ce1=>a64_0x5e55a8(Box,{'children':[a64_0x36aafd(Text,{'color':'green','children':_0x41879b(0x1ac)}),a64_0x36aafd(Text,{'children':IDE_CONFIGS[_0x8a6ce1]?.['name']||_0x8a6ce1})]},_0x8a6ce1)),a64_0x36aafd(Box,{'marginTop':0x1,'children':a64_0x36aafd(Text,{'color':_0x41879b(0x1a1),'children':_0x179a05(_0x41879b(0x1a3),{'count':_0x106096})})})]});}function DoneStep({installedCount:_0x518b95}){const _0x425c88=a64_0x36eb1f,{t:_0x2fe0c2}=useI18n();return a64_0x5e55a8(a64_0x4d6ee0,{'children':[a64_0x36aafd(Box,{'children':a64_0x36aafd(Text,{'color':_0x425c88(0x192),'children':_0x2fe0c2(_0x425c88(0x1b6),{'count':_0x518b95})})}),a64_0x36aafd(Box,{'marginTop':0x1,'children':a64_0x36aafd(Text,{'color':'gray','children':_0x2fe0c2(_0x425c88(0x1aa))})}),a64_0x36aafd(Box,{'marginTop':0x1,'children':a64_0x36aafd(Text,{'color':_0x425c88(0x1a1),'children':_0x2fe0c2(_0x425c88(0x1af))})})]});}async function copyDirIfNeeded(_0x2c88d7,_0x32d485){try{return await copyDir(_0x2c88d7,_0x32d485),!![];}catch{return![];}}
@@ -1 +0,0 @@
1
- const a66_0x9a1fc3=a66_0x50f6;(function(_0x2216b3,_0x3d54f6){const _0x489047=a66_0x50f6,_0x29ea7f=_0x2216b3();while(!![]){try{const _0x24710b=parseInt(_0x489047(0x1f7))/0x1+parseInt(_0x489047(0x1ea))/0x2+-parseInt(_0x489047(0x1fa))/0x3+parseInt(_0x489047(0x1e7))/0x4+-parseInt(_0x489047(0x1f6))/0x5+-parseInt(_0x489047(0x1f0))/0x6+parseInt(_0x489047(0x1f5))/0x7;if(_0x24710b===_0x3d54f6)break;else _0x29ea7f['push'](_0x29ea7f['shift']());}catch(_0x4b614f){_0x29ea7f['push'](_0x29ea7f['shift']());}}}(a66_0x4c1f,0xb7451));import{writeFileSync,existsSync,mkdirSync}from'node:fs';import{resolve,join}from'node:path';import{fileURLToPath}from'node:url';import{dirname}from'node:path';function a66_0x50f6(_0x31ca09,_0x939480){_0x31ca09=_0x31ca09-0x1de;const _0x4c1f2d=a66_0x4c1f();let _0x50f6b2=_0x4c1f2d[_0x31ca09];return _0x50f6b2;}import{logger}from'../utils/logger.js';import{IDE_CONFIGS}from'../utils/ai_config.js';function a66_0x4c1f(){const _0x6666cc=['2496562lZZLKC','message','skill.error.unknownIDE','warn','skill.cdn.fetchSuccess','skill.error.installFailed','3527898zRemUj','keys','utf-8','length','\x20\x20✓\x20','6698398qSghTj','3873120NFYlHm','488479nqPCuu','toISOString','name','2847639OopHET','log','.lovrabet/skill/.shared/guides','skill.done.guidesPathInline','skill-install-non-interactive','info','bind','2.0.0','stringify','开始安装技能包','1475276Ciutgg','.lovrabet','.lovrabet/skill-manifest.json'];a66_0x4c1f=function(){return _0x6666cc;};return a66_0x4c1f();}import{installSingleIDE}from'./skill-installer.js';import{fetchGuidesFromCDN,writeGuidesToProject}from'../utils/guides-cdn.js';import a66_0x5ab4fb from'../i18n/index.js';const t=a66_0x5ab4fb['t'][a66_0x9a1fc3(0x1e3)](a66_0x5ab4fb),__dirname=dirname(fileURLToPath(import.meta.url));export async function installSkillsNonInteractive(_0x73547a,_0x2f66c8,_0x761dc0=process['cwd']()){const _0x24207f=a66_0x9a1fc3,_0x727615=resolve(__dirname,'../../cdn-source/skills');logger['setLogPath'](_0x761dc0),logger[_0x24207f(0x1e2)](_0x24207f(0x1e1),_0x24207f(0x1e6),{'ides':_0x73547a});const _0x3bfd1e=join(_0x761dc0,_0x24207f(0x1e8));!existsSync(_0x3bfd1e)&&mkdirSync(_0x3bfd1e,{'recursive':!![]});const _0x52449a=_0x2f66c8&&_0x2f66c8[_0x24207f(0x1f3)]>0x0;console[_0x24207f(0x1de)](_0x52449a?t('skill.cdn.fetchingExtend'):t('skill.cdn.fetching'));let _0xb8c12b;try{_0xb8c12b=await fetchGuidesFromCDN(_0x52449a),console[_0x24207f(0x1de)](t(_0x24207f(0x1ee),{'count':Object[_0x24207f(0x1f1)](_0xb8c12b['guides'])[_0x24207f(0x1f3)]}));}catch(_0x2c05ef){console[_0x24207f(0x1ed)](t('skill.cdn.fetchFailed',{'error':_0x2c05ef instanceof Error?_0x2c05ef[_0x24207f(0x1eb)]:String(_0x2c05ef)}));}let _0x1eb29f=0x0;for(const _0x53f00d of _0x73547a){try{const _0x82067c=IDE_CONFIGS[_0x53f00d];if(!_0x82067c){console[_0x24207f(0x1ed)](t(_0x24207f(0x1ec),{'ide':_0x53f00d}));continue;}const _0x4f8a94=await installSingleIDE(_0x53f00d,_0x82067c,_0x761dc0,_0x727615,_0xb8c12b,_0x2f66c8);_0x1eb29f+=_0x4f8a94,console[_0x24207f(0x1de)](_0x24207f(0x1f4)+(_0x82067c[_0x24207f(0x1f9)]||_0x53f00d));}catch(_0x202e01){console['error'](t(_0x24207f(0x1ef),{'ide':_0x53f00d,'error':_0x202e01 instanceof Error?_0x202e01[_0x24207f(0x1eb)]:String(_0x202e01)}));}}_0xb8c12b&&writeGuidesToProject(_0xb8c12b,_0x761dc0,_0x24207f(0x1df),_0x2f66c8);const _0x42314c={'version':_0x24207f(0x1e4),'installedAt':new Date()[_0x24207f(0x1f8)](),'platforms':_0x73547a},_0x263c7b=join(_0x761dc0,_0x24207f(0x1e9));writeFileSync(_0x263c7b,JSON[_0x24207f(0x1e5)](_0x42314c,null,0x2),_0x24207f(0x1f2)),logger[_0x24207f(0x1e2)]('skill-install-non-interactive','安装成功',{'projectRoot':_0x761dc0,'ides':_0x73547a,'foldersCount':_0x1eb29f}),console[_0x24207f(0x1de)](t('skill.done.success',{'count':_0x1eb29f})),console[_0x24207f(0x1de)](t(_0x24207f(0x1e0)));}
@@ -1 +0,0 @@
1
- (function(_0x16bf18,_0x2717b4){const _0x2435f7=a67_0x432b,_0x41e098=_0x16bf18();while(!![]){try{const _0x1f68a7=parseInt(_0x2435f7(0xb0))/0x1+parseInt(_0x2435f7(0xa2))/0x2+-parseInt(_0x2435f7(0xb4))/0x3+parseInt(_0x2435f7(0xa6))/0x4*(parseInt(_0x2435f7(0xb1))/0x5)+-parseInt(_0x2435f7(0x9d))/0x6+-parseInt(_0x2435f7(0xb6))/0x7+-parseInt(_0x2435f7(0xac))/0x8*(parseInt(_0x2435f7(0xae))/0x9);if(_0x1f68a7===_0x2717b4)break;else _0x41e098['push'](_0x41e098['shift']());}catch(_0x24227c){_0x41e098['push'](_0x41e098['shift']());}}}(a67_0x3606,0x6cf65));function a67_0x3606(){const _0x32809f=['606972AfNhoq','replace','startsWith','folders','sort','title','8puWAsW','template','1720161qOTiYv','includes','763033yJZazm','25cBAVKi','|\x20`','name','1491465CXWVUX','\x0a<!--\x20GUIDES_APPEND\x20-->','5925955RvNRAW','utf-8','guides','requireFlags','indexOf','files','<!--\x20GUIDES_APPEND\x20-->','2243940MVZgyX','push','keys','length','join','1666800uZagUE','test','path','some'];a67_0x3606=function(){return _0x32809f;};return a67_0x3606();}import{existsSync,mkdirSync,writeFileSync,readFileSync}from'node:fs';function a67_0x432b(_0x1eb2ed,_0x28354a){_0x1eb2ed=_0x1eb2ed-0x9b;const _0x360675=a67_0x3606();let _0x432b53=_0x360675[_0x1eb2ed];return _0x432b53;}import{dirname,join}from'node:path';import{writeSkillFile,appendExtendContents}from'../utils/guides-cdn.js';export async function installSingleIDE(_0x4a9bf8,_0x1cd044,_0x397df5,_0x1021e7,_0x7895d,_0x473b2a){const _0xfd90d5=a67_0x432b;let _0x2fc06f=0x0;const _0x35e9b7=_0x1cd044?.[_0xfd90d5(0xa9)]??['.'+_0x4a9bf8];for(const _0x4fcf22 of _0x35e9b7){const _0x354dac=join(_0x397df5,_0x4fcf22),_0xc94900=_0x1cd044?.[_0xfd90d5(0x9b)]?.[_0xfd90d5(0xa5)](_0x3ffaa1=>_0x3ffaa1[_0xfd90d5(0xa4)][_0xfd90d5(0xa8)](_0x4fcf22+'/'))??![];_0xc94900?!existsSync(_0x354dac)&&(mkdirSync(_0x354dac,{'recursive':!![]}),_0x2fc06f++):!existsSync(_0x354dac)&&(writeFileSync(_0x354dac,'',_0xfd90d5(0xb7)),_0x2fc06f++);}if(_0x1cd044?.[_0xfd90d5(0x9b)]){const _0x50938b=_0x1cd044[_0xfd90d5(0xb3)]||_0x4a9bf8;for(const _0x530e25 of _0x1cd044[_0xfd90d5(0x9b)]){const _0x2f5249=join(_0x397df5,_0x530e25['path']);await createFileFromTemplate(_0x530e25,_0x2f5249,_0x50938b,_0x1021e7,_0x7895d,_0x473b2a),_0x2fc06f++;}}return _0x2fc06f;}export async function createFileFromTemplate(_0x109b98,_0x4a267c,_0x4fb381,_0x24032d,_0xfa0e68,_0x383e75){const _0x22bd5e=a67_0x432b,_0x3938bf=dirname(_0x4a267c);!existsSync(_0x3938bf)&&mkdirSync(_0x3938bf,{'recursive':!![]});const _0x1c9aae=_0x109b98[_0x22bd5e(0xad)]==='SKILL.md.tpl';if(existsSync(_0x4a267c)&&!_0x1c9aae)return;if(_0x109b98[_0x22bd5e(0xad)]){const _0x69d4c3=join(_0x24032d,_0x109b98[_0x22bd5e(0xad)]);if(existsSync(_0x69d4c3)){let _0x56b990=readFileSync(_0x69d4c3,_0x22bd5e(0xb7));_0x56b990=_0x56b990['replace'](/\{\{IDE_NAME\}\}/g,_0x4fb381);_0xfa0e68&&_0x1c9aae&&(_0x56b990=insertGuidesSection(_0x56b990,_0xfa0e68,_0x383e75),_0x56b990=appendExtendContents(_0x56b990,_0xfa0e68,_0x383e75));writeFileSync(_0x4a267c,_0x56b990,'utf-8');return;}if(_0xfa0e68&&_0x1c9aae)try{writeSkillFile(_0xfa0e68,_0x4a267c,_0x4fb381,_0x383e75);return;}catch{}}writeFileSync(_0x4a267c,'','utf-8');}function insertGuidesSection(_0x1c7101,_0x42c160,_0x5f225e){const _0x1efd2a=a67_0x432b,_0x2df87b='<!--\x20GUIDES_APPEND\x20-->',_0x295064=_0x1c7101[_0x1efd2a(0xba)](_0x2df87b);if(_0x295064===-0x1)return _0x1c7101;const _0x4ffd30=[],_0xbbc1b=Object[_0x1efd2a(0x9f)](_0x42c160[_0x1efd2a(0xb8)])[_0x1efd2a(0xaa)]();for(const _0x14ec3c of _0xbbc1b){const _0x19bc56=_0x42c160[_0x1efd2a(0xb8)][_0x14ec3c];if(!_0x19bc56)continue;if(/^0[1-6]-/[_0x1efd2a(0xa3)](_0x14ec3c))continue;if(_0x19bc56[_0x1efd2a(0xb9)]&&_0x19bc56['requireFlags'][_0x1efd2a(0xa0)]>0x0){const _0x369d0e=_0x19bc56[_0x1efd2a(0xb9)]['some'](_0x1a266d=>_0x5f225e?.[_0x1efd2a(0xaf)](_0x1a266d));if(!_0x369d0e)continue;}const _0x5586eb=_0x19bc56[_0x1efd2a(0xa4)][_0x1efd2a(0xa7)](/^\.lovrabet\/skill\/\.shared\/guides\//,'');_0x4ffd30[_0x1efd2a(0x9e)](_0x1efd2a(0xb2)+_0x5586eb+'`\x20|\x20'+_0x19bc56[_0x1efd2a(0xab)]+'\x20|');}if(_0x4ffd30[_0x1efd2a(0xa0)]===0x0)return _0x1c7101[_0x1efd2a(0xa7)](_0x2df87b,_0x1efd2a(0x9c));const _0x113d9f=_0x4ffd30[_0x1efd2a(0xa1)]('\x0a');return _0x1c7101[_0x1efd2a(0xa7)](_0x2df87b,_0x113d9f+_0x1efd2a(0xb5));}