@wujie-shell/core 1.0.2 → 1.0.4

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 (66) hide show
  1. package/README.md +7 -5
  2. package/dist/bin/wujie-shell.mjs +1 -1
  3. package/dist/src/agents/bundled-agent-skills.mjs +1 -1
  4. package/dist/src/agents/bundled-agents.mjs +1 -1
  5. package/dist/src/agents/runtime-config.mjs +1 -1
  6. package/dist/src/chat/media-archive.mjs +1 -1
  7. package/dist/src/chat/queue.mjs +1 -1
  8. package/dist/src/common/cron-session-key.mjs +1 -0
  9. package/dist/src/common/diagnostics.mjs +1 -1
  10. package/dist/src/common/logging.mjs +1 -1
  11. package/dist/src/common/runtime-logger.mjs +1 -1
  12. package/dist/src/common/sqlite-paths.mjs +1 -0
  13. package/dist/src/common/user-events.mjs +1 -1
  14. package/dist/src/common/utils.mjs +1 -1
  15. package/dist/src/config/controller.mjs +1 -1
  16. package/dist/src/connectors/config-utils.mjs +1 -1
  17. package/dist/src/connectors/constants.mjs +1 -1
  18. package/dist/src/connectors/controller.mjs +1 -1
  19. package/dist/src/connectors/kdocs-cli.mjs +1 -1
  20. package/dist/src/connectors/lark-cli.mjs +1 -1
  21. package/dist/src/electron/main.mjs +1 -1
  22. package/dist/src/electron/preload.mjs +1 -1
  23. package/dist/src/electron/protocol-url-state.mjs +1 -0
  24. package/dist/src/events/domain-event-journal.mjs +1 -0
  25. package/dist/src/files/generated-files-store.mjs +1 -1
  26. package/dist/src/files/handlers.mjs +1 -1
  27. package/dist/src/gateway/chat-delta.mjs +1 -1
  28. package/dist/src/gateway/controller.mjs +1 -1
  29. package/dist/src/gateway/request-id-title-events.mjs +1 -0
  30. package/dist/src/gateway/ws-client.mjs +1 -1
  31. package/dist/src/index.mjs +1 -1
  32. package/dist/src/log-reporting/handlers.mjs +1 -1
  33. package/dist/src/log-reporting/report-logs.mjs +1 -1
  34. package/dist/src/models/handlers.mjs +1 -1
  35. package/dist/src/preferences/store.mjs +1 -1
  36. package/dist/src/request-id/handlers.mjs +1 -0
  37. package/dist/src/request-id/runtime-bridge.mjs +1 -0
  38. package/dist/src/request-id/session-store.mjs +1 -0
  39. package/dist/src/request-id/title.mjs +1 -0
  40. package/dist/src/runtime/cron-missed-run-policy.mjs +1 -0
  41. package/dist/src/runtime/index.mjs +1 -1
  42. package/dist/src/runtime/patch-channel-plugin-runtime.mjs +1 -1
  43. package/dist/src/runtime/patch-chat-history-mixed-tool-content.mjs +1 -1
  44. package/dist/src/runtime/patch-provider-request-id-header.mjs +1 -1
  45. package/dist/src/runtime/patch-qqbot-outbound-session-route.mjs +1 -0
  46. package/dist/src/runtime/patch-request-id-title-runtime.mjs +1 -0
  47. package/dist/src/runtime/patch-session-store-sqlite.mjs +1 -1
  48. package/dist/src/runtime/patch-weixin-outbound-session-route.mjs +1 -0
  49. package/dist/src/runtime/plugin-sync.mjs +1 -1
  50. package/dist/src/sessions/agent-sessions-map-store.mjs +1 -1
  51. package/dist/src/sessions/runtime-bridge.mjs +1 -1
  52. package/dist/src/sessions/session-data-service.mjs +1 -1
  53. package/dist/src/sessions/session-runtime-state-service.mjs +1 -0
  54. package/dist/src/sessions/session-runtime-state.mjs +1 -0
  55. package/dist/src/sessions/session-sqlite-store.mjs +1 -1
  56. package/dist/src/sessions/sql/001_init.sql +2 -1
  57. package/dist/src/sessions/sql/004_request_id_titles.sql +15 -0
  58. package/dist/src/sessions/sql/005_session_subagents.sql +31 -0
  59. package/dist/src/sessions/sql/006_session_process_snapshot.sql +24 -0
  60. package/dist/src/sessions/sql/schema.md +53 -3
  61. package/dist/src/skills/import.mjs +1 -1
  62. package/dist/src/skills/market.mjs +1 -1
  63. package/dist/src/terminal/manager.mjs +1 -1
  64. package/dist/src/updates/controller.mjs +1 -1
  65. package/dist/src/updates/loader.mjs +1 -1
  66. package/package.json +3 -3
@@ -19,7 +19,8 @@ CREATE TABLE IF NOT EXISTS session_store_legacy_imports (
19
19
  imported_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
20
20
  source_mtime_ms INTEGER,
21
21
  source_size_bytes INTEGER,
22
- imported_session_count INTEGER NOT NULL DEFAULT 0
22
+ imported_session_count INTEGER NOT NULL DEFAULT 0,
23
+ imported_subagent_run_count INTEGER
23
24
  );
24
25
 
25
26
  CREATE TABLE IF NOT EXISTS session_records (
@@ -0,0 +1,15 @@
1
+ PRAGMA foreign_keys = ON;
2
+
3
+ CREATE TABLE IF NOT EXISTS request_id_titles (
4
+ request_id TEXT PRIMARY KEY,
5
+ agent_id TEXT NOT NULL,
6
+ session_key TEXT NOT NULL,
7
+ run_id TEXT NOT NULL DEFAULT '',
8
+ title TEXT NOT NULL,
9
+ source TEXT NOT NULL,
10
+ created_at INTEGER NOT NULL,
11
+ updated_at INTEGER NOT NULL
12
+ );
13
+
14
+ CREATE INDEX IF NOT EXISTS request_id_titles_session_idx
15
+ ON request_id_titles(agent_id, session_key);
@@ -0,0 +1,31 @@
1
+ PRAGMA foreign_keys = ON;
2
+
3
+ CREATE TABLE IF NOT EXISTS session_subagent_runs (
4
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
5
+ parent_session_key TEXT NOT NULL,
6
+ parent_user_message_key TEXT NOT NULL,
7
+ spawn_assistant_message_key TEXT,
8
+ spawn_tool_result_message_key TEXT,
9
+ subagent_session_key TEXT NOT NULL,
10
+ subagent_run_id TEXT NOT NULL DEFAULT '',
11
+ status TEXT NOT NULL,
12
+ task_name TEXT,
13
+ created_at INTEGER NOT NULL,
14
+ updated_at INTEGER NOT NULL,
15
+ finished_at INTEGER,
16
+ created_row_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
17
+ updated_row_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
18
+ UNIQUE(parent_session_key, parent_user_message_key, subagent_session_key, subagent_run_id)
19
+ );
20
+
21
+ CREATE INDEX IF NOT EXISTS session_subagent_runs_parent_message_idx
22
+ ON session_subagent_runs(parent_session_key, parent_user_message_key);
23
+
24
+ CREATE INDEX IF NOT EXISTS session_subagent_runs_child_idx
25
+ ON session_subagent_runs(subagent_session_key, subagent_run_id);
26
+
27
+ CREATE INDEX IF NOT EXISTS session_subagent_runs_parent_message_status_idx
28
+ ON session_subagent_runs(parent_session_key, parent_user_message_key, status);
29
+
30
+ CREATE INDEX IF NOT EXISTS session_subagent_runs_parent_status_idx
31
+ ON session_subagent_runs(parent_session_key, status);
@@ -0,0 +1,24 @@
1
+ PRAGMA foreign_keys = ON;
2
+
3
+ CREATE TABLE IF NOT EXISTS session_process_snapshot (
4
+ session_key TEXT NOT NULL,
5
+ revision_hash TEXT NOT NULL,
6
+ include_subagents INTEGER NOT NULL DEFAULT 0,
7
+ parent_user_message_key TEXT NOT NULL DEFAULT '',
8
+ limit_count INTEGER NOT NULL DEFAULT 1000,
9
+ processes_json TEXT NOT NULL,
10
+ revision_json TEXT,
11
+ source TEXT NOT NULL DEFAULT 'shell-process-snapshot',
12
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
13
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
14
+ PRIMARY KEY (
15
+ session_key,
16
+ revision_hash,
17
+ include_subagents,
18
+ parent_user_message_key,
19
+ limit_count
20
+ )
21
+ );
22
+
23
+ CREATE INDEX IF NOT EXISTS session_process_snapshot_session_updated_idx
24
+ ON session_process_snapshot(session_key, updated_at DESC);
@@ -100,16 +100,66 @@
100
100
  - `session_key` 外键关联 `session_records(session_key)`,删除 session 时级联清理
101
101
  - `pinned_order` 仅在 `pinned = 1` 时参与置顶排序
102
102
 
103
+ ### `request_id_titles`
104
+
105
+ 服务端 `request-id` 到用户可见标题的映射表,用于把后端计费/任务请求编号与本地
106
+ 会话输入标题关联起来。数据来源包括:
107
+
108
+ - 历史消息回填:从 assistant 消息上的 `request-id` 和前一条 user 输入推导标题
109
+ - provider/tool/skill 事件:从网关结果或 provider 响应事件写入更高优先级标题
110
+
111
+ 字段说明:
112
+
113
+ - `request_id`:服务端请求编号,主键
114
+ - `agent_id`:会话所属 agent
115
+ - `session_key`:本地会话 key
116
+ - `run_id`:网关运行 id,可为空字符串
117
+ - `title`:归一化后的用户可见标题
118
+ - `source`:标题来源,例如 `history`、`user_input`、`provider_response`
119
+ - `created_at` / `updated_at`:毫秒时间戳
120
+
121
+ 约束:
122
+
123
+ - `request_id` 唯一
124
+ - `(agent_id, session_key)` 组合索引用于按会话维度查询和排查
125
+ - 旧版本曾把该数据写入独立 `request-id-sessions/index.sqlite` 或
126
+ `generated-files/index.sqlite`;运行时会 best-effort 迁移这些旧表到本表
127
+
128
+ ### `session_subagent_runs`
129
+
130
+ OpenClaw 原生 subagent 关系的 SQLite 索引镜像。字段只保留能从
131
+ `sessions.json` 与对应 `.jsonl` 稳定恢复、且运行期双写必需的信息:
132
+
133
+ - `parent_session_key`
134
+ - `parent_user_message_key`
135
+ - `spawn_assistant_message_key`
136
+ - `spawn_tool_result_message_key`
137
+ - `subagent_session_key`
138
+ - `subagent_run_id`
139
+ - `status`
140
+ - `task_name`
141
+ - `created_at`
142
+ - `updated_at`
143
+ - `finished_at`
144
+
145
+ 约束:
146
+
147
+ - `id` 为自增主键
148
+ - `(parent_session_key, parent_user_message_key, subagent_session_key, subagent_run_id)` 唯一
149
+ - parent message、subagent child、parent status 维度建立查询索引
150
+
103
151
  ### 元数据表
104
152
 
105
153
  - `session_store_migrations`:记录已执行的 SQL 版本
106
154
  - `session_store_meta`:通用元数据
107
- - `session_store_legacy_imports`:记录 legacy `sessions.json` 的一次性导入状态
155
+ - `session_store_legacy_imports`:记录 legacy `sessions.json` 及其 subagent 关系的一次性导入状态
108
156
 
109
157
  ## 迁移策略
110
158
 
111
159
  1. 初始化或升级时按文件名顺序执行 `sql/*.sql`
112
160
  2. 每个脚本成功后写入 `session_store_migrations`
113
161
  3. 启动期扫描 legacy `agents/*/sessions/sessions.json`
114
- 4. 已导入的 legacy 文件写入 `session_store_legacy_imports`
115
- 5. 运行时只读写 SQLite,不再把 `sessions.json` 当权威源
162
+ 4. 首次导入时写入 session 摘要,并通过 parent `.jsonl``sessions_spawn`
163
+ toolResult 一次性生成 `session_subagent_runs`
164
+ 5. 已导入的 legacy 文件写入 `session_store_legacy_imports`
165
+ 6. 运行期 OpenClaw 原生文件与 SQLite 双写保持一致,不在每次启动时重复同步
@@ -1 +1 @@
1
- (function(_0xdc35f,_0x346937){const _0x4d9569=_0x559d,_0x144589=_0xdc35f();while(!![]){try{const _0x15d1a9=parseInt(_0x4d9569(0x223))/0x1+-parseInt(_0x4d9569(0x209))/0x2+-parseInt(_0x4d9569(0x270))/0x3*(parseInt(_0x4d9569(0x1f7))/0x4)+parseInt(_0x4d9569(0x226))/0x5+parseInt(_0x4d9569(0x261))/0x6+-parseInt(_0x4d9569(0x23e))/0x7+parseInt(_0x4d9569(0x228))/0x8;if(_0x15d1a9===_0x346937)break;else _0x144589['push'](_0x144589['shift']());}catch(_0x2e4823){_0x144589['push'](_0x144589['shift']());}}}(_0x5498,0x49a08));import{execFile}from'node:child_process';import{existsSync}from'node:fs';import{cp,mkdir,mkdtemp,readFile,readdir,rename,rm,writeFile}from'node:fs/promises';import{basename,dirname,join,parse}from'node:path';import{asRecord,dedupeStrings,getTrimmedString}from'../common/utils.mjs';function sanitizeManagedSkillDirSegment(_0x38954f){const _0x32eb11=_0x559d;let _0x10db23=getTrimmedString(_0x38954f)[_0x32eb11(0x1fb)](/[<>:"/\\|?*\u0000-\u001f]/g,'-');return _0x10db23=_0x10db23['replace'](/-+/g,'-')['replace'](/^[-.]+|[-.]+$/g,''),_0x10db23[_0x32eb11(0x217)](0x0,0x78);}function buildManagedSkillDirectoryName(_0x4f75be,_0x445b79,_0x9619ac){const _0x445598=_0x559d,_0x4dca6f=sanitizeManagedSkillDirSegment(_0x4f75be)||sanitizeManagedSkillDirSegment(_0x9619ac)||'imported'+_0x445598(0x25d),_0x159c7b=sanitizeManagedSkillDirSegment(_0x445b79),_0x46b3d2=_0x159c7b?_0x4dca6f+'-'+_0x159c7b:_0x4dca6f;return _0x46b3d2[_0x445598(0x217)](0x0,0xc8)||_0x445598(0x1f3)+'-skill';}function extractVersionFromZipUrl(_0x463d9f){const _0x291200=_0x559d;if(!getTrimmedString(_0x463d9f))return null;try{const _0x3f1782=basename(new URL(_0x463d9f)['pathname']),_0xa47eff=_0x3f1782[_0x291200(0x1fb)](/\.zip$/i,'');return _0xa47eff[_0x291200(0x247)](/(?:^|[-_v])(\d+\.\d+\.\d+(?:[-+][\w.-]+)?)(?:$|[-_])/i)?.[0x1]??null;}catch{return null;}}async function extractZipToDirectory(_0xca200b,_0x3e021b){await new Promise((_0x3f511f,_0x13c4d3)=>{const _0x54b4c8=_0x559d;let _0x2909f7;if(process['platform']===_0x54b4c8(0x246)){const _0x105b74=_0xca200b['replace'](/'/g,'\x27\x27'),_0x382dfb=_0x3e021b['replace'](/'/g,'\x27\x27');_0x2909f7=execFile(_0x54b4c8(0x1ef)+_0x54b4c8(0x26d),[_0x54b4c8(0x1f8)+'le','-NonInte'+'ractive','-Command',_0x54b4c8(0x224)+_0x54b4c8(0x255)+_0x54b4c8(0x200)+_0x54b4c8(0x251)+_0x105b74+('\x27\x20-Desti'+_0x54b4c8(0x1f6)+_0x54b4c8(0x1ee))+_0x382dfb+_0x54b4c8(0x245)],_0x5eb6ff=>_0x5eb6ff?_0x13c4d3(_0x5eb6ff):_0x3f511f());}else _0x2909f7=execFile('unzip',['-q',_0xca200b,'-d',_0x3e021b],_0x3ae085=>_0x3ae085?_0x13c4d3(_0x3ae085):_0x3f511f());_0x2909f7['on'](_0x54b4c8(0x244),_0x13c4d3);});}async function findSkillManifestDirectories(_0x17200f){const _0x5af8e9=[];async function _0x1de2f5(_0x4c8830){const _0x198b30=_0x559d,_0x12b6ac=await readdir(_0x4c8830,{'withFileTypes':!![]}),_0x2b66a4=new Set(_0x12b6ac[_0x198b30(0x21d)](_0x970825=>_0x970825[_0x198b30(0x1fd)]['toUpperC'+_0x198b30(0x208)]()));if(_0x2b66a4[_0x198b30(0x24c)](_0x198b30(0x24b))||_0x2b66a4[_0x198b30(0x24c)]('SKILLS.M'+'D')){_0x5af8e9[_0x198b30(0x250)](_0x4c8830);return;}for(const _0x52248d of _0x12b6ac){if(!_0x52248d['isDirect'+_0x198b30(0x271)]()||_0x52248d['name']===_0x198b30(0x241)||_0x52248d[_0x198b30(0x1fd)][_0x198b30(0x21b)+'th']('.'))continue;await _0x1de2f5(join(_0x4c8830,_0x52248d[_0x198b30(0x1fd)]));}}return await _0x1de2f5(_0x17200f),_0x5af8e9;}async function normalizeImportedSkillManifest(_0x2b74ec){const _0x151528=_0x559d,_0x41a979=join(_0x2b74ec,_0x151528(0x265)),_0x82f05b=await readdir(_0x2b74ec,{'withFileTypes':!![]})[_0x151528(0x259)](()=>[]);let _0x55558e=null,_0x817176=null;for(const _0x252c04 of _0x82f05b){if(!_0x252c04['isFile']())continue;const _0xe39dde=_0x252c04['name'][_0x151528(0x22b)+_0x151528(0x208)]();if(_0xe39dde===_0x151528(0x24b))_0x55558e=_0x252c04['name'];else{if(_0xe39dde===_0x151528(0x258)+'D')_0x817176=_0x252c04[_0x151528(0x1fd)];}}if(_0x55558e==='SKILL.md')return;const _0xcd4ad4=_0x55558e??_0x817176;if(!_0xcd4ad4)return;const _0x4537bc=join(_0x2b74ec,_0xcd4ad4);if(_0x4537bc!==_0x41a979)await rename(_0x4537bc,_0x41a979);}async function moveDirectoryWithOverwrite(_0x50824f,_0x4118f4){const _0x3e742f=_0x559d;await mkdir(dirname(_0x4118f4),{'recursive':!![]});try{await rename(_0x50824f,_0x4118f4);return;}catch(_0x11dd4e){if(_0x11dd4e?.[_0x3e742f(0x205)]!==_0x3e742f(0x23c))throw _0x11dd4e;}await cp(_0x50824f,_0x4118f4,{'recursive':!![],'force':!![]}),await rm(_0x50824f,{'recursive':!![],'force':!![]});}async function readManifestText(_0x201560){const _0x2708d8=_0x559d,_0x53dbc7=[join(_0x201560,_0x2708d8(0x265)),join(_0x201560,_0x2708d8(0x229)+'d')][_0x2708d8(0x239)](_0xcab764=>existsSync(_0xcab764));if(!_0x53dbc7)return'';return await readFile(_0x53dbc7,'utf8')[_0x2708d8(0x259)](()=>'');}function resolveFrontmatterValue(_0x4501f8,_0x5c3f49){const _0x10688d=_0x559d,_0x58afe2=_0x4501f8[_0x10688d(0x247)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x3bc126=_0x58afe2?.[0x1]??'',_0x364d38=_0x3bc126['match'](new RegExp('^\x5cs*'+_0x5c3f49+(_0x10688d(0x1fe)+'$'),'m'))?.[0x1];return getTrimmedString(_0x364d38)[_0x10688d(0x1fb)](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x132fe8){const _0x5cbc63=_0x559d,_0x53937f=await readManifestText(_0x132fe8);if(!_0x53937f[_0x5cbc63(0x240)]())return null;const _0x1f073a=_0x53937f[_0x5cbc63(0x247)](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x1f073a?.[0x1])return getTrimmedString(_0x1f073a[0x1]);return resolveFrontmatterValue(_0x53937f,'skillKey')||resolveFrontmatterValue(_0x53937f,'name');}async function resolveSkillVersionFromManifest(_0x5856e2){const _0x21065d=_0x559d,_0x19b067=await readManifestText(_0x5856e2);if(!_0x19b067[_0x21065d(0x240)]())return null;const _0x39a817=_0x19b067[_0x21065d(0x247)](/"version"\s*:\s*"([^"]+)"/);if(_0x39a817?.[0x1])return getTrimmedString(_0x39a817[0x1]);return resolveFrontmatterValue(_0x19b067,_0x21065d(0x207));}async function collectSkillDirsUnderRoot(_0x43822b,_0x1e7693,_0x180de4){const _0x8bdeaf=_0x559d;if(!existsSync(_0x43822b))return;for(const _0x39b704 of await readdir(_0x43822b,{'withFileTypes':!![]})['catch'](()=>[])){if(!_0x39b704[_0x8bdeaf(0x256)+_0x8bdeaf(0x271)]())continue;const _0x1ba6ea=join(_0x43822b,_0x39b704[_0x8bdeaf(0x1fd)]),_0x2a6ac7=await resolveSkillKeyFromManifest(_0x1ba6ea);if(_0x2a6ac7&&_0x1e7693[_0x8bdeaf(0x24c)](_0x2a6ac7))_0x180de4[_0x8bdeaf(0x254)](_0x1ba6ea);}}async function removeSkillConfigEntries(_0x181366,_0x37340d){const _0x3d4a59=_0x559d,_0xb7c1b1=new Set(_0x37340d[_0x3d4a59(0x21d)](getTrimmedString)[_0x3d4a59(0x1ff)](Boolean));if(_0xb7c1b1['size']===0x0)return;const _0x3d1696=await _0x181366[_0x3d4a59(0x20a)+'ig']()[_0x3d4a59(0x259)](()=>({})),_0xc879db=asRecord(_0x3d1696[_0x3d4a59(0x221)]),_0x5ac5eb={...asRecord(_0xc879db[_0x3d4a59(0x27e)])};let _0x80fcf2=![];for(const _0x1a8317 of _0xb7c1b1){Object['prototyp'+'e'][_0x3d4a59(0x215)+_0x3d4a59(0x277)][_0x3d4a59(0x222)](_0x5ac5eb,_0x1a8317)&&(delete _0x5ac5eb[_0x1a8317],_0x80fcf2=!![]);}if(!_0x80fcf2)return;_0xc879db[_0x3d4a59(0x27e)]=_0x5ac5eb,_0x3d1696['skills']=_0xc879db,_0x181366['markConf'+'igWriteH'+_0x3d4a59(0x22c)+'ternally']?.(),await _0x181366[_0x3d4a59(0x274)+'fig']?.(_0x3d1696,_0x3d4a59(0x253)+_0x3d4a59(0x214)+'ries\x20rem'+_0x3d4a59(0x201)+_0x3d4a59(0x1f5)+_0x3d4a59(0x234)+_0x3d4a59(0x24e));}export async function deleteManagedSkill({payload:payload={},gateway:_0xee5fa8,configController:_0x42a0cb}){const _0x7c2f78=_0x559d,_0xfb959e=asRecord(payload),_0x4aabdf=getTrimmedString(_0xfb959e[_0x7c2f78(0x213)]??_0xfb959e[_0x7c2f78(0x1fd)]);if(!_0x4aabdf)throw new Error(_0x7c2f78(0x248)+_0x7c2f78(0x210)+_0x7c2f78(0x268));const _0x3b5bd9=await _0xee5fa8['skills'][_0x7c2f78(0x23b)]()[_0x7c2f78(0x259)](()=>({'skills':[]})),_0x5455fb=Array['isArray'](asRecord(_0x3b5bd9)[_0x7c2f78(0x221)])?asRecord(_0x3b5bd9)[_0x7c2f78(0x221)]:[],_0x5cdabf=_0x5455fb[_0x7c2f78(0x21d)](asRecord)[_0x7c2f78(0x239)](_0x5a00cd=>{const _0x39af13=_0x7c2f78;return getTrimmedString(_0x5a00cd[_0x39af13(0x213)])===_0x4aabdf||getTrimmedString(_0x5a00cd[_0x39af13(0x25b)+'killKey'])===_0x4aabdf||getTrimmedString(_0x5a00cd['name'])===_0x4aabdf;});if(!_0x5cdabf)throw new Error(_0x7c2f78(0x22f)+'除');if(_0x5cdabf['always'])throw new Error(_0x7c2f78(0x232));if(_0x5cdabf['bundled']||_0x5cdabf[_0x7c2f78(0x249)]===_0x7c2f78(0x225)+_0x7c2f78(0x236)||_0x5cdabf[_0x7c2f78(0x249)]===_0x7c2f78(0x225)+_0x7c2f78(0x231))throw new Error(_0x7c2f78(0x27c)+_0x7c2f78(0x264));if(!_0x5cdabf[_0x7c2f78(0x243)])throw new Error(_0x7c2f78(0x23a)+'删除');const _0x51ab49=getTrimmedString(_0x5cdabf[_0x7c2f78(0x25b)+_0x7c2f78(0x227)])||_0x4aabdf,_0x521b11=new Set([_0x4aabdf,_0x51ab49,getTrimmedString(_0x5cdabf[_0x7c2f78(0x1fd)])][_0x7c2f78(0x1ff)](Boolean)),_0x2c83bf=new Set([join(_0x42a0cb[_0x7c2f78(0x20e)+_0x7c2f78(0x27b)](),_0x7c2f78(0x221)),join(_0x42a0cb['resolveS'+_0x7c2f78(0x27b)](),_0x7c2f78(0x24f)+'e',_0x7c2f78(0x221))]),_0x8a6c24=new Set();for(const _0x5b6c53 of _0x2c83bf)await collectSkillDirsUnderRoot(_0x5b6c53,_0x521b11,_0x8a6c24);if(_0x8a6c24[_0x7c2f78(0x26f)]===0x0)throw new Error(_0x7c2f78(0x257)+_0x7c2f78(0x1f9)+_0x7c2f78(0x21a)+'ills\x20路径,'+_0x7c2f78(0x20b));for(const _0x33bb5b of _0x8a6c24)await rm(_0x33bb5b,{'recursive':!![],'force':!![]});return await removeSkillConfigEntries(_0x42a0cb,[..._0x521b11]),{'ok':!![],'skillKey':_0x4aabdf};}export async function updateManagedSkillConfig({payload:payload={},configController:_0x139d32}){const _0x29b531=_0x559d,_0x1d187d=asRecord(payload),_0x110f29=getTrimmedString(_0x1d187d[_0x29b531(0x213)]??_0x1d187d[_0x29b531(0x1fd)]);if(!_0x110f29)throw new Error(_0x29b531(0x248)+_0x29b531(0x210)+_0x29b531(0x268));const _0x5c492a=await _0x139d32[_0x29b531(0x20a)+'ig']()['catch'](()=>({})),_0x192170=asRecord(_0x5c492a[_0x29b531(0x221)]),_0x31030b={...asRecord(_0x192170[_0x29b531(0x27e)])},_0x19e6b3=asRecord(_0x31030b[_0x110f29]),_0x334986={..._0x19e6b3};typeof _0x1d187d[_0x29b531(0x204)]===_0x29b531(0x216)&&(_0x334986[_0x29b531(0x204)]=_0x1d187d[_0x29b531(0x204)]);const _0x57e958={...asRecord(_0x1d187d[_0x29b531(0x1f2)])},_0x286264=getTrimmedString(_0x1d187d[_0x29b531(0x24d)]);if(_0x286264)_0x57e958['apiKey']=_0x286264;Object[_0x29b531(0x20c)](_0x57e958)[_0x29b531(0x20d)]>0x0&&(_0x334986[_0x29b531(0x1f2)]={...asRecord(_0x19e6b3['env']),..._0x57e958});const _0x2ad79e=asRecord(_0x1d187d[_0x29b531(0x24a)]);return Object[_0x29b531(0x20c)](_0x2ad79e)[_0x29b531(0x20d)]>0x0&&(_0x334986[_0x29b531(0x24a)]={...asRecord(_0x19e6b3[_0x29b531(0x24a)]),..._0x2ad79e}),_0x31030b[_0x110f29]=_0x334986,_0x192170[_0x29b531(0x27e)]=_0x31030b,_0x5c492a[_0x29b531(0x221)]=_0x192170,_0x139d32[_0x29b531(0x206)+_0x29b531(0x202)+'andledIn'+_0x29b531(0x25e)]?.(),await _0x139d32['writeCon'+_0x29b531(0x1f0)]?.(_0x5c492a,_0x29b531(0x253)+_0x29b531(0x252)+'ated\x20wit'+'hout\x20gat'+_0x29b531(0x234)+'tart'),{'ok':!![],'skillKey':_0x110f29};}async function ensureManagedSkillsConfig(_0x265384,_0x22058d=[]){const _0x51b3a4=_0x559d,_0x5244a2=await _0x265384[_0x51b3a4(0x20a)+'ig']()['catch'](()=>({})),_0x4cf19f=asRecord(_0x5244a2[_0x51b3a4(0x221)]),_0x5d0335=asRecord(_0x4cf19f[_0x51b3a4(0x21c)]),_0x166a94=Array[_0x51b3a4(0x235)](_0x5d0335['extraDir'+'s'])?_0x5d0335[_0x51b3a4(0x1f1)+'s']:[],_0x2e51f8=join(_0x265384[_0x51b3a4(0x20e)+'tateDir'](),'skills'),_0xb8223c=dedupeStrings([..._0x166a94,_0x2e51f8]),_0x45d652={...asRecord(_0x4cf19f['entries'])};let _0x484904=JSON['stringif'+'y'](_0x166a94)!==JSON[_0x51b3a4(0x26a)+'y'](_0xb8223c);for(const _0xec193d of _0x22058d[_0x51b3a4(0x21d)](getTrimmedString)[_0x51b3a4(0x1ff)](Boolean)){if(Object[_0x51b3a4(0x21f)+'e']['hasOwnPr'+_0x51b3a4(0x277)]['call'](_0x45d652,_0xec193d))continue;_0x45d652[_0xec193d]={'enabled':!![]},_0x484904=!![];}if(!_0x484904)return;_0x5d0335['extraDir'+'s']=_0xb8223c,_0x4cf19f[_0x51b3a4(0x21c)]=_0x5d0335,_0x4cf19f['entries']=_0x45d652,_0x5244a2['skills']=_0x4cf19f,_0x265384[_0x51b3a4(0x206)+_0x51b3a4(0x202)+_0x51b3a4(0x22c)+'ternally']?.(),await _0x265384[_0x51b3a4(0x274)+_0x51b3a4(0x1f0)]?.(_0x5244a2,_0x51b3a4(0x26b)+'skills\x20c'+_0x51b3a4(0x26e)+_0x51b3a4(0x267)+_0x51b3a4(0x278)+_0x51b3a4(0x22d)+'start');}function _0x559d(_0x3963e4,_0x1bc66a){_0x3963e4=_0x3963e4-0x1ee;const _0x549890=_0x5498();let _0x559d4f=_0x549890[_0x3963e4];return _0x559d4f;}export async function syncManagedSkillsToConfig(_0x45bf5a){const _0x4c9ce1=_0x559d,_0x36cfb1=join(_0x45bf5a[_0x4c9ce1(0x20e)+_0x4c9ce1(0x27b)](),_0x4c9ce1(0x221)),_0x24ede6=[];for(const _0x121f63 of await readdir(_0x36cfb1,{'withFileTypes':!![]})[_0x4c9ce1(0x259)](()=>[])){if(!_0x121f63[_0x4c9ce1(0x256)+_0x4c9ce1(0x271)]())continue;const _0x5ab20f=await resolveSkillKeyFromManifest(join(_0x36cfb1,_0x121f63[_0x4c9ce1(0x1fd)]));if(_0x5ab20f)_0x24ede6['push'](_0x5ab20f);}return await ensureManagedSkillsConfig(_0x45bf5a,_0x24ede6),{'skillKeys':_0x24ede6};}async function resolveZipPath({payload:_0x501f1a,app:_0x2403aa,dialog:_0x1b2301,dialogWindow:_0x21b24c}){const _0x5e227a=_0x559d,_0x1e9a5e=getTrimmedString(_0x501f1a[_0x5e227a(0x212)]);let _0xca00bb=getTrimmedString(_0x501f1a[_0x5e227a(0x273)+_0x5e227a(0x21e)]),_0x3d5031=null;if(!_0xca00bb&&_0x1e9a5e){const _0x95ba71=new URL(_0x1e9a5e);_0x3d5031=await mkdtemp(join(_0x2403aa['getPath'](_0x5e227a(0x27d)),_0x5e227a(0x23d)+_0x5e227a(0x276)+_0x5e227a(0x27a))),_0xca00bb=join(_0x3d5031,basename(_0x95ba71[_0x5e227a(0x272)])||_0x5e227a(0x220)+_0x5e227a(0x25f)+_0x5e227a(0x266));const _0x1dda9b=await fetch(_0x95ba71[_0x5e227a(0x22a)]());if(!_0x1dda9b['ok'])throw new Error('下载技能\x20ZIP'+_0x5e227a(0x242)+'\x20'+_0x1dda9b[_0x5e227a(0x23b)]+')');await writeFile(_0xca00bb,Buffer[_0x5e227a(0x269)](await _0x1dda9b['arrayBuf'+_0x5e227a(0x233)]()));}if(!_0xca00bb){const _0x2e2832={'title':_0x5e227a(0x26c),'properties':['openFile'],'filters':[{'name':_0x5e227a(0x218)+_0x5e227a(0x1f4),'extensions':['zip']}]},_0x345949=_0x21b24c?await _0x1b2301['showOpen'+_0x5e227a(0x263)](_0x21b24c,_0x2e2832):await _0x1b2301[_0x5e227a(0x25a)+_0x5e227a(0x263)](_0x2e2832);if(_0x345949[_0x5e227a(0x211)]||_0x345949[_0x5e227a(0x262)+'s'][_0x5e227a(0x20d)]===0x0)return{'cancelled':!![],'zipPath':null,'downloadedZipDir':_0x3d5031};_0xca00bb=_0x345949['filePath'+'s'][0x0];}return{'cancelled':![],'zipPath':_0xca00bb,'downloadedZipDir':_0x3d5031};}function _0x5498(){const _0x450c9a=['内置/扩展技能无','temp','entries','th\x20\x27','powershe','fig','extraDir','env','imported','ive','hout\x20gat','nationPa','4eBqSzv','-NoProfi','盘上的目录,可能','overwrit','replace','LS.md','name',':\x5cs*(.+)','filter','LiteralP','oved\x20wit','igWriteH','ill-impo','enabled','code','markConf','version','ase','267370CnvnQO','readConf','请手动删除','keys','length','resolveS','extracte','y\x20is\x20req','canceled','zipUrl','skillKey','nfig\x20ent','hasOwnPr','boolean','slice','ZIP\x20Arch','个\x20skill\x20','位于自定义\x20sk','startsWi','load','map','ZipPath','prototyp','download','skills','call','66216CoIPvX','Expand-A','openclaw','2458315YLVGgy','killKey','2463928WOAKDC','SKILLS.m','toString','toUpperC','andledIn','teway\x20re','已取消导入','技能不存在或已移','d\x20或\x20SKIL','-extra','该技能不允许删除','fer','eway\x20res','isArray','-bundled','技能目录\x22','getPath','find','请先关闭技能后再','status','EXDEV','wujie-sk','2521106lBIdkN','\x22已存在,请确认','trim','__MACOSX','\x20失败(HTTP','disabled','error','\x27\x20-Force','win32','match','Skill\x20ke','source','config','SKILL.MD','has','apiKey','tart','workspac','push','ath\x20\x27','nfig\x20upd','skill\x20co','add','rchive\x20-','isDirect','未找到该技能在磁','SKILLS.M','catch','showOpen','gatewayS','是否覆盖','-skill','ternally','ed-skill','能导入一个','1953660EsoOmz','filePath','Dialog','法删除','SKILL.md','.zip','sured\x20wi','uired','from','stringif','managed\x20','导入技能\x20ZIP','ll.exe','onfig\x20en','size','1188183VUizgU','ory','pathname','selected','writeCon','\x20添加成功','ill-down','operty','thout\x20ga','\x20SKILL.m','load-','tateDir'];_0x5498=function(){return _0x450c9a;};return _0x5498();}export async function importSkillZip({payload:payload={},app:_0x22ad92,dialog:_0x5676ed,dialogWindow:_0x22a5a2,configController:_0x3043ab}){const _0x368d8b=_0x559d,_0x5d99c8=asRecord(payload),_0x4213ff=getTrimmedString(_0x5d99c8[_0x368d8b(0x212)]),{cancelled:_0x248b35,zipPath:_0x56aa15,downloadedZipDir:_0x2729a6}=await resolveZipPath({'payload':_0x5d99c8,'app':_0x22ad92,'dialog':_0x5676ed,'dialogWindow':_0x22a5a2});if(_0x248b35)return{'cancelled':!![],'imported':![],'overwritten':![],'skillDirName':null,'selectedZipPath':null,'zipUrl':_0x4213ff||null,'message':_0x368d8b(0x22e)};const _0x3571d4=await mkdtemp(join(_0x22ad92[_0x368d8b(0x238)](_0x368d8b(0x27d)),_0x368d8b(0x23d)+_0x368d8b(0x203)+'rt-')),_0xdaf62d=join(_0x3571d4,_0x368d8b(0x20f)+'d');try{await mkdir(_0xdaf62d,{'recursive':!![]}),await extractZipToDirectory(_0x56aa15,_0xdaf62d);const _0x236e84=await findSkillManifestDirectories(_0xdaf62d);if(_0x236e84[_0x368d8b(0x20d)]===0x0)throw new Error('ZIP\x20中未找到'+_0x368d8b(0x279)+_0x368d8b(0x230)+_0x368d8b(0x1fc));if(_0x236e84[_0x368d8b(0x20d)]>0x1)throw new Error('ZIP\x20中包含多'+_0x368d8b(0x219)+'目录,当前一次只'+_0x368d8b(0x260));const _0x27d6d7=_0x236e84[0x0];await normalizeImportedSkillManifest(_0x27d6d7);const _0x2f107f=basename(_0x27d6d7),_0x1636ed=parse(_0x56aa15)['name'][_0x368d8b(0x240)]()||_0x368d8b(0x1f3)+'-skill',_0x19a768=_0x2f107f===_0x368d8b(0x20f)+'d'?_0x1636ed:_0x2f107f,_0x438ddd=await resolveSkillKeyFromManifest(_0x27d6d7)??_0x19a768,_0x3d8cfd=await resolveSkillVersionFromManifest(_0x27d6d7)??(getTrimmedString(_0x5d99c8[_0x368d8b(0x207)])||extractVersionFromZipUrl(_0x4213ff)),_0x408353=buildManagedSkillDirectoryName(_0x438ddd,_0x3d8cfd,_0x19a768),_0x969d3d=join(_0x3043ab[_0x368d8b(0x20e)+'tateDir'](),_0x368d8b(0x221)),_0x1cb274=join(_0x969d3d,_0x408353);if(existsSync(_0x1cb274)){if(_0x5d99c8[_0x368d8b(0x1fa)+'e']!==!![])return{'cancelled':![],'imported':![],'overwritten':![],'needConfirmOverwrite':!![],'skillDirName':_0x408353,'overwriteTargetPath':_0x1cb274,'selectedZipPath':_0x56aa15,'zipUrl':_0x4213ff||null,'message':_0x368d8b(0x237)+_0x408353+(_0x368d8b(0x23f)+_0x368d8b(0x25c))};await rm(_0x1cb274,{'recursive':!![],'force':!![]});}let _0x5051d8=_0x27d6d7;return _0x2f107f===_0x368d8b(0x20f)+'d'&&(_0x5051d8=join(_0x3571d4,_0x408353),await rename(_0x27d6d7,_0x5051d8)),await moveDirectoryWithOverwrite(_0x5051d8,_0x1cb274),await ensureManagedSkillsConfig(_0x3043ab,[_0x438ddd]),{'cancelled':![],'imported':!![],'overwritten':_0x5d99c8['overwrit'+'e']===!![],'skillKey':_0x438ddd,'manifestKey':_0x438ddd,'skillDirName':_0x408353,'targetPath':_0x1cb274,'selectedZipPath':_0x56aa15,'zipUrl':_0x4213ff||null,'message':_0x408353+_0x368d8b(0x275)};}finally{await rm(_0x3571d4,{'recursive':!![],'force':!![]});if(_0x2729a6)await rm(_0x2729a6,{'recursive':!![],'force':!![]});}}
1
+ (function(_0x45f83b,_0x175b27){const _0x30a9a4=_0x2de2,_0x551086=_0x45f83b();while(!![]){try{const _0x28c388=parseInt(_0x30a9a4(0x1b1))/0x1+parseInt(_0x30a9a4(0x195))/0x2+-parseInt(_0x30a9a4(0x16f))/0x3+-parseInt(_0x30a9a4(0x17c))/0x4*(-parseInt(_0x30a9a4(0x1cf))/0x5)+-parseInt(_0x30a9a4(0x1ae))/0x6*(-parseInt(_0x30a9a4(0x17d))/0x7)+parseInt(_0x30a9a4(0x164))/0x8*(parseInt(_0x30a9a4(0x177))/0x9)+-parseInt(_0x30a9a4(0x176))/0xa*(parseInt(_0x30a9a4(0x1b4))/0xb);if(_0x28c388===_0x175b27)break;else _0x551086['push'](_0x551086['shift']());}catch(_0x30efa7){_0x551086['push'](_0x551086['shift']());}}}(_0x43d4,0xdca98));import{execFile}from'node:child_process';function _0x2de2(_0x4e6358,_0x2eb887){_0x4e6358=_0x4e6358-0x141;const _0x43d43c=_0x43d4();let _0x2de20f=_0x43d43c[_0x4e6358];return _0x2de20f;}import{existsSync}from'node:fs';import{cp,mkdir,mkdtemp,readFile,readdir,rename,rm,writeFile}from'node:fs/promises';import{basename,dirname,join,parse}from'node:path';import{asRecord,dedupeStrings,getTrimmedString}from'../common/utils.mjs';function sanitizeManagedSkillDirSegment(_0x4f7c00){const _0x5e5e71=_0x2de2;let _0xeef972=getTrimmedString(_0x4f7c00)[_0x5e5e71(0x15e)](/[<>:"/\\|?*\u0000-\u001f]/g,'-');return _0xeef972=_0xeef972[_0x5e5e71(0x15e)](/-+/g,'-')[_0x5e5e71(0x15e)](/^[-.]+|[-.]+$/g,''),_0xeef972[_0x5e5e71(0x1ca)](0x0,0x78);}function buildManagedSkillDirectoryName(_0x33dc59,_0xe022a9,_0x5902f4){const _0xd85cea=_0x2de2,_0x5ac22f=sanitizeManagedSkillDirSegment(_0x33dc59)||sanitizeManagedSkillDirSegment(_0x5902f4)||'imported'+_0xd85cea(0x179),_0x13682b=sanitizeManagedSkillDirSegment(_0xe022a9),_0x33d753=_0x13682b?_0x5ac22f+'-'+_0x13682b:_0x5ac22f;return _0x33d753[_0xd85cea(0x1ca)](0x0,0xc8)||_0xd85cea(0x17e)+_0xd85cea(0x179);}function extractVersionFromZipUrl(_0x4234a5){const _0x31a3a2=_0x2de2;if(!getTrimmedString(_0x4234a5))return null;try{const _0x2082f0=basename(new URL(_0x4234a5)[_0x31a3a2(0x1bf)]),_0x508a8f=_0x2082f0[_0x31a3a2(0x15e)](/\.zip$/i,'');return _0x508a8f[_0x31a3a2(0x175)](/(?:^|[-_v])(\d+\.\d+\.\d+(?:[-+][\w.-]+)?)(?:$|[-_])/i)?.[0x1]??null;}catch{return null;}}function _0x43d4(){const _0x34a3f5=['skills','selected','utf8','ries\x20rem','entries','config','find','teway\x20re','disabled','enabled','replace','ternally','Skill\x20ke','length','push','win32','10677976tuzNIC','-Command','isArray','ill-impo','getPath','ZipPath','ll.exe','managed\x20','env','\x27\x20-Force','技能不存在或已移','2241813AdlyQX','uired','d\x20或\x20SKIL','rt-','盘上的目录,可能','-NoProfi','match','54433010jKUyTO','9aDWdik','powershe','-skill','ills\x20路径,','from','8YtvvbV','187061maNlDu','imported','.zip','法删除','skillKey','zip','ZIP\x20中包含多','eway\x20res','isDirect','技能目录\x22','showOpen','hout\x20gat','unzip','sured\x20wi','tateDir','\x22已存在,请确认','hasOwnPr','fig','overwrit','size','skills\x20c','位于自定义\x20sk','filter','wujie-sk','3123666fTascf','该技能不允许删除','\x20添加成功','readConf','markConf','gatewayS','boolean','请手动删除','ath\x20\x27','stringif','目录,当前一次只','keys','isFile','catch','status','name','-bundled','temp','ase','download','导入技能\x20ZIP','zipUrl','version','add','tart','354Yogzez','y\x20is\x20req','always','1174749ZiemwQ','\x27\x20-Desti','error','11gFhlZV','call','ZIP\x20Arch','下载技能\x20ZIP','apiKey','onfig\x20en','-extra','startsWi','thout\x20ga','killKey','igWriteH','pathname','个\x20skill\x20','ZIP\x20中未找到','code','ory','load','-NonInte','Dialog','SKILL.md','operty','resolveS','slice','rchive\x20-','openFile','LS.md','ill-down','3616045HVzqlp','has','LiteralP','filePath','th\x20\x27','请先关闭技能后再','extraDir','toUpperC','Expand-A','SKILLS.m','map','source','未找到该技能在磁','writeCon','extracte','load-','SKILLS.M','start',':\x5cs*(.+)','SKILL.MD','andledIn','skill\x20co','nfig\x20upd'];_0x43d4=function(){return _0x34a3f5;};return _0x43d4();}async function extractZipToDirectory(_0x493919,_0x4a21a2){await new Promise((_0x923926,_0x4ff9bc)=>{const _0x3dc2d0=_0x2de2;let _0x2479a8;if(process['platform']===_0x3dc2d0(0x163)){const _0x31d09c=_0x493919[_0x3dc2d0(0x15e)](/'/g,'\x27\x27'),_0x5a35a9=_0x4a21a2[_0x3dc2d0(0x15e)](/'/g,'\x27\x27');_0x2479a8=execFile(_0x3dc2d0(0x178)+_0x3dc2d0(0x16a),[_0x3dc2d0(0x174)+'le',_0x3dc2d0(0x1c5)+'ractive',_0x3dc2d0(0x165),_0x3dc2d0(0x145)+_0x3dc2d0(0x1cb)+_0x3dc2d0(0x1d1)+_0x3dc2d0(0x19d)+_0x31d09c+(_0x3dc2d0(0x1b2)+'nationPa'+_0x3dc2d0(0x141))+_0x5a35a9+_0x3dc2d0(0x16d)],_0x1a3bd7=>_0x1a3bd7?_0x4ff9bc(_0x1a3bd7):_0x923926());}else _0x2479a8=execFile(_0x3dc2d0(0x189),['-q',_0x493919,'-d',_0x4a21a2],_0x56659a=>_0x56659a?_0x4ff9bc(_0x56659a):_0x923926());_0x2479a8['on'](_0x3dc2d0(0x1b3),_0x4ff9bc);});}async function findSkillManifestDirectories(_0x3b251a){const _0x2225b5=[];async function _0x156f7e(_0x1be7c8){const _0x41db85=_0x2de2,_0xb3f4e6=await readdir(_0x1be7c8,{'withFileTypes':!![]}),_0x3e8e5d=new Set(_0xb3f4e6[_0x41db85(0x147)](_0x3f336a=>_0x3f336a[_0x41db85(0x1a4)]['toUpperC'+_0x41db85(0x1a7)]()));if(_0x3e8e5d['has'](_0x41db85(0x150))||_0x3e8e5d[_0x41db85(0x1d0)](_0x41db85(0x14d)+'D')){_0x2225b5[_0x41db85(0x162)](_0x1be7c8);return;}for(const _0x438928 of _0xb3f4e6){if(!_0x438928[_0x41db85(0x185)+_0x41db85(0x1c3)]()||_0x438928['name']==='__MACOSX'||_0x438928[_0x41db85(0x1a4)][_0x41db85(0x1bb)+'th']('.'))continue;await _0x156f7e(join(_0x1be7c8,_0x438928['name']));}}return await _0x156f7e(_0x3b251a),_0x2225b5;}async function normalizeImportedSkillManifest(_0x4fcc6e){const _0x1a0016=_0x2de2,_0x40451a=join(_0x4fcc6e,_0x1a0016(0x1c7)),_0x3329ea=await readdir(_0x4fcc6e,{'withFileTypes':!![]})['catch'](()=>[]);let _0x3725c7=null,_0x3a47fc=null;for(const _0x14911c of _0x3329ea){if(!_0x14911c[_0x1a0016(0x1a1)]())continue;const _0x526793=_0x14911c[_0x1a0016(0x1a4)][_0x1a0016(0x144)+_0x1a0016(0x1a7)]();if(_0x526793===_0x1a0016(0x150))_0x3725c7=_0x14911c['name'];else{if(_0x526793===_0x1a0016(0x14d)+'D')_0x3a47fc=_0x14911c[_0x1a0016(0x1a4)];}}if(_0x3725c7===_0x1a0016(0x1c7))return;const _0x313f13=_0x3725c7??_0x3a47fc;if(!_0x313f13)return;const _0x2a6d10=join(_0x4fcc6e,_0x313f13);if(_0x2a6d10!==_0x40451a)await rename(_0x2a6d10,_0x40451a);}async function moveDirectoryWithOverwrite(_0x1dcfb3,_0x5492ff){const _0x282634=_0x2de2;await mkdir(dirname(_0x5492ff),{'recursive':!![]});try{await rename(_0x1dcfb3,_0x5492ff);return;}catch(_0x203358){if(_0x203358?.[_0x282634(0x1c2)]!=='EXDEV')throw _0x203358;}await cp(_0x1dcfb3,_0x5492ff,{'recursive':!![],'force':!![]}),await rm(_0x1dcfb3,{'recursive':!![],'force':!![]});}async function readManifestText(_0x12ec7f){const _0x262a48=_0x2de2,_0x4e173e=[join(_0x12ec7f,_0x262a48(0x1c7)),join(_0x12ec7f,_0x262a48(0x146)+'d')][_0x262a48(0x15a)](_0x5ae3ab=>existsSync(_0x5ae3ab));if(!_0x4e173e)return'';return await readFile(_0x4e173e,_0x262a48(0x156))[_0x262a48(0x1a2)](()=>'');}function resolveFrontmatterValue(_0x451758,_0x38a2d1){const _0x29d9bd=_0x2de2,_0x44b26a=_0x451758[_0x29d9bd(0x175)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x287fc4=_0x44b26a?.[0x1]??'',_0xf4d5ab=_0x287fc4['match'](new RegExp('^\x5cs*'+_0x38a2d1+(_0x29d9bd(0x14f)+'$'),'m'))?.[0x1];return getTrimmedString(_0xf4d5ab)['replace'](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x51df84){const _0x2c70a6=_0x2de2,_0x5cd5b5=await readManifestText(_0x51df84);if(!_0x5cd5b5['trim']())return null;const _0x4d896a=_0x5cd5b5['match'](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x4d896a?.[0x1])return getTrimmedString(_0x4d896a[0x1]);return resolveFrontmatterValue(_0x5cd5b5,_0x2c70a6(0x181))||resolveFrontmatterValue(_0x5cd5b5,_0x2c70a6(0x1a4));}async function resolveSkillVersionFromManifest(_0x197c4e){const _0x434822=_0x2de2,_0x3deafb=await readManifestText(_0x197c4e);if(!_0x3deafb['trim']())return null;const _0x3471cf=_0x3deafb['match'](/"version"\s*:\s*"([^"]+)"/);if(_0x3471cf?.[0x1])return getTrimmedString(_0x3471cf[0x1]);return resolveFrontmatterValue(_0x3deafb,_0x434822(0x1ab));}async function collectSkillDirsUnderRoot(_0x139b6d,_0x9b0974,_0x334443){const _0x4a4f9e=_0x2de2;if(!existsSync(_0x139b6d))return;for(const _0x4c5208 of await readdir(_0x139b6d,{'withFileTypes':!![]})[_0x4a4f9e(0x1a2)](()=>[])){if(!_0x4c5208[_0x4a4f9e(0x185)+_0x4a4f9e(0x1c3)]())continue;const _0x576b80=join(_0x139b6d,_0x4c5208[_0x4a4f9e(0x1a4)]),_0x2b061b=await resolveSkillKeyFromManifest(_0x576b80);if(_0x2b061b&&_0x9b0974[_0x4a4f9e(0x1d0)](_0x2b061b))_0x334443[_0x4a4f9e(0x1ac)](_0x576b80);}}async function removeSkillConfigEntries(_0x5d0982,_0x14f333){const _0x39b7ba=_0x2de2,_0x4c9d89=new Set(_0x14f333['map'](getTrimmedString)[_0x39b7ba(0x193)](Boolean));if(_0x4c9d89['size']===0x0)return;const _0x2190a3=await _0x5d0982[_0x39b7ba(0x198)+'ig']()['catch'](()=>({})),_0x1f8903=asRecord(_0x2190a3[_0x39b7ba(0x154)]),_0x1c4aab={...asRecord(_0x1f8903['entries'])};let _0x403e15=![];for(const _0x422638 of _0x4c9d89){Object['prototyp'+'e']['hasOwnPr'+'operty'][_0x39b7ba(0x1b5)](_0x1c4aab,_0x422638)&&(delete _0x1c4aab[_0x422638],_0x403e15=!![]);}if(!_0x403e15)return;_0x1f8903[_0x39b7ba(0x158)]=_0x1c4aab,_0x2190a3[_0x39b7ba(0x154)]=_0x1f8903,_0x5d0982['markConf'+_0x39b7ba(0x1be)+_0x39b7ba(0x151)+_0x39b7ba(0x15f)]?.(),await _0x5d0982['writeCon'+_0x39b7ba(0x18e)]?.(_0x2190a3,'skill\x20co'+'nfig\x20ent'+_0x39b7ba(0x157)+'oved\x20wit'+_0x39b7ba(0x188)+_0x39b7ba(0x184)+'tart');}export async function deleteManagedSkill({payload:payload={},gateway:_0x5510c2,configController:_0x1451db}){const _0x4b9c6d=_0x2de2,_0x2e12dd=asRecord(payload),_0x2a7ae9=getTrimmedString(_0x2e12dd[_0x4b9c6d(0x181)]??_0x2e12dd['name']);if(!_0x2a7ae9)throw new Error('Skill\x20ke'+_0x4b9c6d(0x1af)+_0x4b9c6d(0x170));const _0x35f4d9=await _0x5510c2[_0x4b9c6d(0x154)][_0x4b9c6d(0x1a3)]()[_0x4b9c6d(0x1a2)](()=>({'skills':[]})),_0x3936fa=Array[_0x4b9c6d(0x166)](asRecord(_0x35f4d9)[_0x4b9c6d(0x154)])?asRecord(_0x35f4d9)['skills']:[],_0x5649ac=_0x3936fa['map'](asRecord)[_0x4b9c6d(0x15a)](_0x247514=>{const _0x3d8dc1=_0x4b9c6d;return getTrimmedString(_0x247514['skillKey'])===_0x2a7ae9||getTrimmedString(_0x247514[_0x3d8dc1(0x19a)+'killKey'])===_0x2a7ae9||getTrimmedString(_0x247514[_0x3d8dc1(0x1a4)])===_0x2a7ae9;});if(!_0x5649ac)throw new Error(_0x4b9c6d(0x16e)+'除');if(_0x5649ac[_0x4b9c6d(0x1b0)])throw new Error(_0x4b9c6d(0x196));if(_0x5649ac['bundled']||_0x5649ac['source']==='openclaw'+_0x4b9c6d(0x1a5)||_0x5649ac[_0x4b9c6d(0x148)]==='openclaw'+_0x4b9c6d(0x1ba))throw new Error('内置/扩展技能无'+_0x4b9c6d(0x180));if(!_0x5649ac[_0x4b9c6d(0x15c)])throw new Error(_0x4b9c6d(0x142)+'删除');const _0x331f28=getTrimmedString(_0x5649ac[_0x4b9c6d(0x19a)+_0x4b9c6d(0x1bd)])||_0x2a7ae9,_0x5aa41a=new Set([_0x2a7ae9,_0x331f28,getTrimmedString(_0x5649ac[_0x4b9c6d(0x1a4)])][_0x4b9c6d(0x193)](Boolean)),_0x30a166=new Set([join(_0x1451db[_0x4b9c6d(0x1c9)+_0x4b9c6d(0x18b)](),'skills'),join(_0x1451db[_0x4b9c6d(0x1c9)+_0x4b9c6d(0x18b)](),'workspac'+'e',_0x4b9c6d(0x154))]),_0x40400f=new Set();for(const _0x49b6a3 of _0x30a166)await collectSkillDirsUnderRoot(_0x49b6a3,_0x5aa41a,_0x40400f);if(_0x40400f[_0x4b9c6d(0x190)]===0x0)throw new Error(_0x4b9c6d(0x149)+_0x4b9c6d(0x173)+_0x4b9c6d(0x192)+_0x4b9c6d(0x17a)+_0x4b9c6d(0x19c));for(const _0x179077 of _0x40400f)await rm(_0x179077,{'recursive':!![],'force':!![]});return await removeSkillConfigEntries(_0x1451db,[..._0x5aa41a]),{'ok':!![],'skillKey':_0x2a7ae9};}export async function updateManagedSkillConfig({payload:payload={},configController:_0x267ebf}){const _0x5da519=_0x2de2,_0x10bb37=asRecord(payload),_0x593776=getTrimmedString(_0x10bb37[_0x5da519(0x181)]??_0x10bb37[_0x5da519(0x1a4)]);if(!_0x593776)throw new Error(_0x5da519(0x160)+_0x5da519(0x1af)+'uired');const _0x33ec86=await _0x267ebf[_0x5da519(0x198)+'ig']()[_0x5da519(0x1a2)](()=>({})),_0x8ebce2=asRecord(_0x33ec86[_0x5da519(0x154)]),_0xb24c78={...asRecord(_0x8ebce2[_0x5da519(0x158)])},_0x2ed0bd=asRecord(_0xb24c78[_0x593776]),_0x5913f8={..._0x2ed0bd};typeof _0x10bb37[_0x5da519(0x15d)]===_0x5da519(0x19b)&&(_0x5913f8[_0x5da519(0x15d)]=_0x10bb37[_0x5da519(0x15d)]);const _0x244cf0={...asRecord(_0x10bb37['env'])},_0x28de07=getTrimmedString(_0x10bb37[_0x5da519(0x1b8)]);if(_0x28de07)_0x244cf0[_0x5da519(0x1b8)]=_0x28de07;Object[_0x5da519(0x1a0)](_0x244cf0)[_0x5da519(0x161)]>0x0&&(_0x5913f8[_0x5da519(0x16c)]={...asRecord(_0x2ed0bd['env']),..._0x244cf0});const _0x2aef89=asRecord(_0x10bb37[_0x5da519(0x159)]);return Object[_0x5da519(0x1a0)](_0x2aef89)[_0x5da519(0x161)]>0x0&&(_0x5913f8[_0x5da519(0x159)]={...asRecord(_0x2ed0bd[_0x5da519(0x159)]),..._0x2aef89}),_0xb24c78[_0x593776]=_0x5913f8,_0x8ebce2[_0x5da519(0x158)]=_0xb24c78,_0x33ec86['skills']=_0x8ebce2,_0x267ebf[_0x5da519(0x199)+_0x5da519(0x1be)+_0x5da519(0x151)+_0x5da519(0x15f)]?.(),await _0x267ebf['writeCon'+_0x5da519(0x18e)]?.(_0x33ec86,_0x5da519(0x152)+_0x5da519(0x153)+'ated\x20wit'+_0x5da519(0x188)+_0x5da519(0x184)+_0x5da519(0x1ad)),{'ok':!![],'skillKey':_0x593776};}async function ensureManagedSkillsConfig(_0x4c7df5,_0xa12ed2=[]){const _0x25d12e=_0x2de2,_0x1d17a7=await _0x4c7df5[_0x25d12e(0x198)+'ig']()[_0x25d12e(0x1a2)](()=>({})),_0x3d2282=asRecord(_0x1d17a7[_0x25d12e(0x154)]),_0x5d5076=asRecord(_0x3d2282[_0x25d12e(0x1c4)]),_0x57d83a=Array[_0x25d12e(0x166)](_0x5d5076[_0x25d12e(0x143)+'s'])?_0x5d5076['extraDir'+'s']:[],_0x3955f3=join(_0x4c7df5[_0x25d12e(0x1c9)+'tateDir'](),_0x25d12e(0x154)),_0x23ade1=dedupeStrings([..._0x57d83a,_0x3955f3]),_0x19e908={...asRecord(_0x3d2282['entries'])};let _0x2d67fa=JSON[_0x25d12e(0x19e)+'y'](_0x57d83a)!==JSON[_0x25d12e(0x19e)+'y'](_0x23ade1);for(const _0x309f2c of _0xa12ed2[_0x25d12e(0x147)](getTrimmedString)[_0x25d12e(0x193)](Boolean)){if(Object['prototyp'+'e'][_0x25d12e(0x18d)+_0x25d12e(0x1c8)]['call'](_0x19e908,_0x309f2c))continue;_0x19e908[_0x309f2c]={'enabled':!![]},_0x2d67fa=!![];}if(!_0x2d67fa)return;_0x5d5076[_0x25d12e(0x143)+'s']=_0x23ade1,_0x3d2282[_0x25d12e(0x1c4)]=_0x5d5076,_0x3d2282[_0x25d12e(0x158)]=_0x19e908,_0x1d17a7[_0x25d12e(0x154)]=_0x3d2282,_0x4c7df5[_0x25d12e(0x199)+_0x25d12e(0x1be)+_0x25d12e(0x151)+_0x25d12e(0x15f)]?.(),await _0x4c7df5[_0x25d12e(0x14a)+'fig']?.(_0x1d17a7,_0x25d12e(0x16b)+_0x25d12e(0x191)+_0x25d12e(0x1b9)+_0x25d12e(0x18a)+_0x25d12e(0x1bc)+_0x25d12e(0x15b)+_0x25d12e(0x14e));}export async function syncManagedSkillsToConfig(_0x2014c6){const _0x18fe59=_0x2de2,_0x269787=join(_0x2014c6[_0x18fe59(0x1c9)+_0x18fe59(0x18b)](),_0x18fe59(0x154)),_0x1b167e=[];for(const _0x1bab8c of await readdir(_0x269787,{'withFileTypes':!![]})[_0x18fe59(0x1a2)](()=>[])){if(!_0x1bab8c[_0x18fe59(0x185)+'ory']())continue;const _0x51752b=await resolveSkillKeyFromManifest(join(_0x269787,_0x1bab8c['name']));if(_0x51752b)_0x1b167e[_0x18fe59(0x162)](_0x51752b);}return await ensureManagedSkillsConfig(_0x2014c6,_0x1b167e),{'skillKeys':_0x1b167e};}async function resolveZipPath({payload:_0x2e4a71,app:_0x34817b,dialog:_0x57eedf,dialogWindow:_0x326283}){const _0x386aae=_0x2de2,_0x8b2de4=getTrimmedString(_0x2e4a71[_0x386aae(0x1aa)]);let _0x4ebd9e=getTrimmedString(_0x2e4a71[_0x386aae(0x155)+_0x386aae(0x169)]),_0x13ab47=null;if(!_0x4ebd9e&&_0x8b2de4){const _0x227ca2=new URL(_0x8b2de4);_0x13ab47=await mkdtemp(join(_0x34817b[_0x386aae(0x168)]('temp'),'wujie-sk'+_0x386aae(0x1ce)+_0x386aae(0x14c))),_0x4ebd9e=join(_0x13ab47,basename(_0x227ca2[_0x386aae(0x1bf)])||_0x386aae(0x1a8)+'ed-skill'+_0x386aae(0x17f));const _0x3ba0de=await fetch(_0x227ca2['toString']());if(!_0x3ba0de['ok'])throw new Error(_0x386aae(0x1b7)+'\x20失败(HTTP'+'\x20'+_0x3ba0de[_0x386aae(0x1a3)]+')');await writeFile(_0x4ebd9e,Buffer[_0x386aae(0x17b)](await _0x3ba0de['arrayBuf'+'fer']()));}if(!_0x4ebd9e){const _0x1da5bc={'title':_0x386aae(0x1a9),'properties':[_0x386aae(0x1cc)],'filters':[{'name':_0x386aae(0x1b6)+'ive','extensions':[_0x386aae(0x182)]}]},_0x3260c1=_0x326283?await _0x57eedf[_0x386aae(0x187)+'Dialog'](_0x326283,_0x1da5bc):await _0x57eedf['showOpen'+_0x386aae(0x1c6)](_0x1da5bc);if(_0x3260c1['canceled']||_0x3260c1[_0x386aae(0x1d2)+'s'][_0x386aae(0x161)]===0x0)return{'cancelled':!![],'zipPath':null,'downloadedZipDir':_0x13ab47};_0x4ebd9e=_0x3260c1[_0x386aae(0x1d2)+'s'][0x0];}return{'cancelled':![],'zipPath':_0x4ebd9e,'downloadedZipDir':_0x13ab47};}export async function importSkillZip({payload:payload={},app:_0x2f4ab4,dialog:_0x71b8cb,dialogWindow:_0x1fd2d9,configController:_0x525c15}){const _0x2f2124=_0x2de2,_0x383ef7=asRecord(payload),_0x2aedca=getTrimmedString(_0x383ef7[_0x2f2124(0x1aa)]),{cancelled:_0xd33d87,zipPath:_0x30701f,downloadedZipDir:_0x5a706e}=await resolveZipPath({'payload':_0x383ef7,'app':_0x2f4ab4,'dialog':_0x71b8cb,'dialogWindow':_0x1fd2d9});if(_0xd33d87)return{'cancelled':!![],'imported':![],'overwritten':![],'skillDirName':null,'selectedZipPath':null,'zipUrl':_0x2aedca||null,'message':'已取消导入'};const _0x4defaa=await mkdtemp(join(_0x2f4ab4['getPath'](_0x2f2124(0x1a6)),_0x2f2124(0x194)+_0x2f2124(0x167)+_0x2f2124(0x172))),_0x252499=join(_0x4defaa,_0x2f2124(0x14b)+'d');try{await mkdir(_0x252499,{'recursive':!![]}),await extractZipToDirectory(_0x30701f,_0x252499);const _0x334c37=await findSkillManifestDirectories(_0x252499);if(_0x334c37[_0x2f2124(0x161)]===0x0)throw new Error(_0x2f2124(0x1c1)+'\x20SKILL.m'+_0x2f2124(0x171)+_0x2f2124(0x1cd));if(_0x334c37[_0x2f2124(0x161)]>0x1)throw new Error(_0x2f2124(0x183)+_0x2f2124(0x1c0)+_0x2f2124(0x19f)+'能导入一个');const _0x2596e5=_0x334c37[0x0];await normalizeImportedSkillManifest(_0x2596e5);const _0x2aee56=basename(_0x2596e5),_0x4b22c5=parse(_0x30701f)[_0x2f2124(0x1a4)]['trim']()||'imported'+_0x2f2124(0x179),_0x8f96b8=_0x2aee56===_0x2f2124(0x14b)+'d'?_0x4b22c5:_0x2aee56,_0x27ac06=await resolveSkillKeyFromManifest(_0x2596e5)??_0x8f96b8,_0x4759e4=await resolveSkillVersionFromManifest(_0x2596e5)??(getTrimmedString(_0x383ef7['version'])||extractVersionFromZipUrl(_0x2aedca)),_0x2c5660=buildManagedSkillDirectoryName(_0x27ac06,_0x4759e4,_0x8f96b8),_0x2b188e=join(_0x525c15[_0x2f2124(0x1c9)+_0x2f2124(0x18b)](),_0x2f2124(0x154)),_0x29f299=join(_0x2b188e,_0x2c5660);if(existsSync(_0x29f299)){if(_0x383ef7['overwrit'+'e']!==!![])return{'cancelled':![],'imported':![],'overwritten':![],'needConfirmOverwrite':!![],'skillDirName':_0x2c5660,'overwriteTargetPath':_0x29f299,'selectedZipPath':_0x30701f,'zipUrl':_0x2aedca||null,'message':_0x2f2124(0x186)+_0x2c5660+(_0x2f2124(0x18c)+'是否覆盖')};await rm(_0x29f299,{'recursive':!![],'force':!![]});}let _0xc55c4c=_0x2596e5;return _0x2aee56===_0x2f2124(0x14b)+'d'&&(_0xc55c4c=join(_0x4defaa,_0x2c5660),await rename(_0x2596e5,_0xc55c4c)),await moveDirectoryWithOverwrite(_0xc55c4c,_0x29f299),await ensureManagedSkillsConfig(_0x525c15,[_0x27ac06]),{'cancelled':![],'imported':!![],'overwritten':_0x383ef7[_0x2f2124(0x18f)+'e']===!![],'skillKey':_0x27ac06,'manifestKey':_0x27ac06,'skillDirName':_0x2c5660,'targetPath':_0x29f299,'selectedZipPath':_0x30701f,'zipUrl':_0x2aedca||null,'message':_0x2c5660+_0x2f2124(0x197)};}finally{await rm(_0x4defaa,{'recursive':!![],'force':!![]});if(_0x5a706e)await rm(_0x5a706e,{'recursive':!![],'force':!![]});}}
@@ -1 +1 @@
1
- const _0x1fd675=_0x2315;(function(_0xefd31f,_0x450a02){const _0x138034=_0x2315,_0x1afdbc=_0xefd31f();while(!![]){try{const _0x3acd59=parseInt(_0x138034(0x149))/0x1*(parseInt(_0x138034(0x140))/0x2)+-parseInt(_0x138034(0x14c))/0x3*(parseInt(_0x138034(0x12f))/0x4)+-parseInt(_0x138034(0x12d))/0x5*(-parseInt(_0x138034(0x147))/0x6)+parseInt(_0x138034(0x154))/0x7+parseInt(_0x138034(0x12b))/0x8+parseInt(_0x138034(0x129))/0x9+-parseInt(_0x138034(0x155))/0xa*(parseInt(_0x138034(0x139))/0xb);if(_0x3acd59===_0x450a02)break;else _0x1afdbc['push'](_0x1afdbc['shift']());}catch(_0x170376){_0x1afdbc['push'](_0x1afdbc['shift']());}}}(_0x35c9,0xa1723));import{readFile,readdir,rm}from'node:fs/promises';import{join}from'node:path';import{asRecord,getTrimmedString,writeJson}from'../common/utils.mjs';const SKILL_SOURCE_MARKET=_0x1fd675(0x13b)+'ket';function _0x2315(_0x96f1eb,_0x35ebea){_0x96f1eb=_0x96f1eb-0x124;const _0x35c984=_0x35c9();let _0x23158c=_0x35c984[_0x96f1eb];return _0x23158c;}async function readMarketSkillRegistry(_0x122459){const _0x256f9d=_0x1fd675;try{const _0x399964=JSON[_0x256f9d(0x143)](await readFile(_0x122459,_0x256f9d(0x13e)));if(!_0x399964||typeof _0x399964!=='object'||Array[_0x256f9d(0x14a)](_0x399964))return{};return _0x399964;}catch{return{};}}export async function readSkillMarketRegistry(_0x57689a){const _0x4fbf95=_0x1fd675;return await readMarketSkillRegistry(join(_0x57689a,_0x4fbf95(0x127)+'kills.js'+'on'));}async function upsertMarketSkillRegistryEntry(_0x157455,_0xbe2e29,_0x3422ee,_0x58f771,_0x574320={}){const _0xb5999e=_0x1fd675,_0x35d524=getTrimmedString(_0xbe2e29),_0x546009=getTrimmedString(_0x3422ee),_0x102fe3=getTrimmedString(_0x58f771);if(!_0x35d524||!_0x546009||!_0x102fe3)return;const _0x424d97=await readMarketSkillRegistry(_0x157455);_0x424d97[_0x35d524]={'version':_0x102fe3,'code':_0x546009,...getTrimmedString(_0x574320[_0xb5999e(0x13d)])?{'name':getTrimmedString(_0x574320['name'])}:{},...getTrimmedString(_0x574320[_0xb5999e(0x157)])?{'logo_url':getTrimmedString(_0x574320[_0xb5999e(0x157)])}:{},...getTrimmedString(_0x574320[_0xb5999e(0x14d)+_0xb5999e(0x156)])?{'description':getTrimmedString(_0x574320[_0xb5999e(0x14d)+_0xb5999e(0x156)])}:{}};if(_0x424d97[_0x546009]&&_0x546009!==_0x35d524)delete _0x424d97[_0x546009];for(const [_0x2d5842,_0x54b6fc]of Object[_0xb5999e(0x126)](_0x424d97)){if(_0x2d5842!==_0x35d524&&asRecord(_0x54b6fc)['code']===_0x546009)delete _0x424d97[_0x2d5842];}const _0x428a45=Object['fromEntr'+_0xb5999e(0x15d)](Object[_0xb5999e(0x126)](_0x424d97)[_0xb5999e(0x12a)](([_0x23980b],[_0x3b11b2])=>_0x23980b[_0xb5999e(0x136)+_0xb5999e(0x12e)](_0x3b11b2)));await writeJson(_0x157455,_0x428a45);}async function removeMarketSkillRegistryKeys(_0xd7a56f,_0x33cabf){const _0x188eff=_0x1fd675,_0x414482=new Set(_0x33cabf[_0x188eff(0x15e)](getTrimmedString)['filter'](Boolean));if(_0x414482[_0x188eff(0x132)]===0x0)return;const _0x16b4ca=await readMarketSkillRegistry(_0xd7a56f);let _0x303866=![];for(const _0x398107 of Object['keys'](_0x16b4ca)){const _0x8e3f90=asRecord(_0x16b4ca[_0x398107]);(_0x414482[_0x188eff(0x133)](_0x398107)||_0x414482[_0x188eff(0x133)](getTrimmedString(_0x8e3f90['code'])))&&(delete _0x16b4ca[_0x398107],_0x303866=!![]);}if(_0x303866){const _0x301c71=Object[_0x188eff(0x141)+_0x188eff(0x15d)](Object['entries'](_0x16b4ca)[_0x188eff(0x12a)](([_0x3dcf2b],[_0x44b62a])=>_0x3dcf2b[_0x188eff(0x136)+_0x188eff(0x12e)](_0x44b62a)));await writeJson(_0xd7a56f,_0x301c71);}}async function readSkillManifestText(_0x4e5341){const _0xdb366f=_0x1fd675,_0x5e4c49=[join(_0x4e5341,'SKILL.md'),join(_0x4e5341,_0xdb366f(0x14f)+'d')];for(const _0x24863c of _0x5e4c49){const _0xbbd7a3=await readFile(_0x24863c,_0xdb366f(0x13e))['catch'](()=>'');if(_0xbbd7a3[_0xdb366f(0x142)]())return _0xbbd7a3;}return'';}function resolveFrontmatterValue(_0x29ff23,_0x2da020){const _0x330370=_0x1fd675,_0x5c5898=_0x29ff23[_0x330370(0x130)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x5da4c7=_0x5c5898?.[0x1]??'',_0x46ef81=_0x5da4c7[_0x330370(0x130)](new RegExp(_0x330370(0x158)+_0x2da020+(_0x330370(0x144)+'$'),'m'))?.[0x1];return getTrimmedString(_0x46ef81)[_0x330370(0x125)](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x15a000){const _0x51c86b=_0x1fd675,_0x28b0f1=await readSkillManifestText(_0x15a000);if(!_0x28b0f1[_0x51c86b(0x142)]())return null;const _0x5439b3=_0x28b0f1[_0x51c86b(0x130)](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x5439b3?.[0x1])return getTrimmedString(_0x5439b3[0x1]);return resolveFrontmatterValue(_0x28b0f1,_0x51c86b(0x151))||resolveFrontmatterValue(_0x28b0f1,_0x51c86b(0x13d));}async function removeOtherMarketSkillVersions(_0x2c5ec5,_0x263744,_0x4478ea){const _0x4e1027=_0x1fd675,_0x28f2af=getTrimmedString(_0x4478ea);if(!_0x28f2af)return;for(const _0x273ba5 of await readdir(_0x2c5ec5,{'withFileTypes':!![]})['catch'](()=>[])){if(!_0x273ba5['isDirect'+_0x4e1027(0x124)]())continue;const _0x516835=join(_0x2c5ec5,_0x273ba5[_0x4e1027(0x13d)]);if(_0x516835===_0x263744)continue;const _0x3104b2=await resolveSkillKeyFromManifest(_0x516835);_0x3104b2&&_0x3104b2[_0x4e1027(0x142)]()===_0x28f2af&&await rm(_0x516835,{'recursive':!![],'force':!![]});}}export async function importMarketSkillZip({payload:payload={},importSkillZip:_0x1cf6a2,configController:_0x476c32}={}){const _0x4fb796=_0x1fd675,_0x30ac11=asRecord(payload);if(_0x30ac11[_0x4fb796(0x15c)]!==_0x4fb796(0x153))return _0x1cf6a2({'payload':payload});const _0x2a7f4d=getTrimmedString(_0x30ac11[_0x4fb796(0x150)]),_0x1866a7=getTrimmedString(_0x30ac11[_0x4fb796(0x146)]),_0x576af1=getTrimmedString(_0x30ac11[_0x4fb796(0x13d)]);if(!_0x2a7f4d)throw new Error(_0x4fb796(0x14b)+_0x4fb796(0x128)+'de');if(!_0x1866a7)throw new Error(_0x4fb796(0x14b)+_0x4fb796(0x137)+'rsion');if(!_0x576af1)throw new Error(_0x4fb796(0x14b)+_0x4fb796(0x12c)+'me');const _0x332b7=await _0x1cf6a2({'payload':{..._0x30ac11,'version':_0x1866a7}});if(!_0x332b7?.['imported'])return _0x332b7;const _0xa55551=getTrimmedString(_0x332b7[_0x4fb796(0x151)])||getTrimmedString(_0x332b7[_0x4fb796(0x152)+_0x4fb796(0x13f)])||getTrimmedString(_0x332b7[_0x4fb796(0x13c)+_0x4fb796(0x134)]);return await removeOtherMarketSkillVersions(join(_0x476c32[_0x4fb796(0x13a)+_0x4fb796(0x15a)](),_0x4fb796(0x14e)),_0x332b7[_0x4fb796(0x138)+'th'],_0xa55551),await upsertMarketSkillRegistryEntry(join(_0x476c32[_0x4fb796(0x13a)+_0x4fb796(0x15a)](),_0x4fb796(0x127)+_0x4fb796(0x135)+'on'),_0xa55551,_0x2a7f4d,_0x1866a7,{'name':_0x576af1,'logoUrl':getTrimmedString(_0x30ac11['logoUrl']),'description':getTrimmedString(_0x30ac11[_0x4fb796(0x14d)+'ion'])}),_0x332b7;}export async function deleteMarketSkillRegistryEntry({payload:payload={},deleteManagedSkill:_0xef99c4,configController:_0x3106e4}={}){const _0x174044=_0x1fd675,_0x57418f=await _0xef99c4({'payload':payload}),_0x5b27cc=asRecord(payload),_0x1a769e=getTrimmedString(_0x57418f?.[_0x174044(0x151)]??_0x5b27cc[_0x174044(0x151)]??_0x5b27cc[_0x174044(0x13d)]),_0x500d75=[_0x1a769e,getTrimmedString(_0x5b27cc[_0x174044(0x148)+_0x174044(0x15b)]),getTrimmedString(_0x5b27cc[_0x174044(0x13d)])];return await removeMarketSkillRegistryKeys(join(_0x3106e4['resolveS'+_0x174044(0x15a)](),_0x174044(0x127)+'kills.js'+'on'),_0x500d75),_0x57418f;}export function mapMarketRegisteredSkills(_0x1658a7,_0x5b081f){const _0x4cb49a=_0x1fd675,_0x4b4179=Array['isArray'](asRecord(_0x1658a7)['skills'])?asRecord(_0x1658a7)[_0x4cb49a(0x14e)]:[];if(_0x4b4179[_0x4cb49a(0x145)]===0x0||Object['keys'](_0x5b081f)[_0x4cb49a(0x145)]===0x0)return _0x1658a7;const _0xb4562=_0x4b4179[_0x4cb49a(0x15e)](_0x4da45d=>{const _0x5b54f5=_0x4cb49a,_0x1230a7=asRecord(_0x4da45d),_0x3b483d=getTrimmedString(_0x1230a7[_0x5b54f5(0x151)])||getTrimmedString(_0x1230a7[_0x5b54f5(0x13d)]);let _0xdf9524=_0x3b483d,_0x584bc3=asRecord(_0x5b081f[_0x3b483d]);if(!Object['keys'](_0x584bc3)['length'])for(const [_0x167e40,_0x5b2692]of Object[_0x5b54f5(0x126)](_0x5b081f)){const _0xa9e154=asRecord(_0x5b2692);if(getTrimmedString(_0xa9e154[_0x5b54f5(0x150)])===_0x3b483d){_0xdf9524=_0x167e40,_0x584bc3=_0xa9e154;break;}}if(!Object['keys'](_0x584bc3)[_0x5b54f5(0x145)])return _0x4da45d;const _0x18320=getTrimmedString(_0x584bc3[_0x5b54f5(0x150)]),_0x44dce6=getTrimmedString(_0x584bc3['name']),_0x2cc69d=getTrimmedString(_0x584bc3[_0x5b54f5(0x14d)+_0x5b54f5(0x156)]),_0x4820be=getTrimmedString(_0x584bc3[_0x5b54f5(0x131)]),_0x10a700=getTrimmedString(_0x584bc3[_0x5b54f5(0x146)]);return{..._0x1230a7,'source':SKILL_SOURCE_MARKET,'skillKey':_0x18320||_0x3b483d,'gatewaySkillKey':_0x18320?_0xdf9524:null,'marketInstalledVersion':_0x10a700||null,..._0x44dce6?{'cnName':_0x44dce6}:{},..._0x2cc69d?{'description':_0x2cc69d}:{},..._0x4820be?{'logoUrl':_0x4820be}:{}};});return{...asRecord(_0x1658a7),'skills':_0xb4562};}export function createMarketSkillRuntime({configController:_0x1a33d5}){return{'mapSkillsStatus':async _0x420aee=>{const _0xadd09d=_0x2315,_0x13e150=await readSkillMarketRegistry(_0x1a33d5[_0xadd09d(0x13a)+_0xadd09d(0x15a)]())[_0xadd09d(0x159)](()=>({}));return mapMarketRegisteredSkills(_0x420aee,_0x13e150);}};}function _0x35c9(){const _0x1e3085=['trim','parse',':\x5cs*(.+)','length','version','1995546IGJHNa','gatewayS','66541zJUoIK','isArray','技能商店安装需要','3JEapQA','descript','skills','SKILLS.m','code','skillKey','manifest','market','3479063BUEIxK','2214010JXgThX','ion','logoUrl','^\x5cs*','catch','tateDir','killKey','source','ies','map','ory','replace','entries','market-s','接口返回的\x20co','808740zUfNCN','sort','8428816mpjERW','接口返回的\x20na','15ofAzDt','mpare','4815472GfBwjP','match','logo_url','size','has','Name','kills.js','localeCo','接口返回的\x20ve','targetPa','88JZWxCO','resolveS','aipc-mar','skillDir','name','utf8','Key','30jtlgdD','fromEntr'];_0x35c9=function(){return _0x1e3085;};return _0x35c9();}
1
+ (function(_0x58c26b,_0x425e50){const _0x208fa2=_0x73c7,_0xc9251f=_0x58c26b();while(!![]){try{const _0x23f9ac=parseInt(_0x208fa2(0x146))/0x1*(-parseInt(_0x208fa2(0x152))/0x2)+parseInt(_0x208fa2(0x127))/0x3+-parseInt(_0x208fa2(0x14a))/0x4*(-parseInt(_0x208fa2(0x14d))/0x5)+-parseInt(_0x208fa2(0x12c))/0x6*(-parseInt(_0x208fa2(0x140))/0x7)+parseInt(_0x208fa2(0x131))/0x8*(-parseInt(_0x208fa2(0x13f))/0x9)+parseInt(_0x208fa2(0x128))/0xa+-parseInt(_0x208fa2(0x11e))/0xb;if(_0x23f9ac===_0x425e50)break;else _0xc9251f['push'](_0xc9251f['shift']());}catch(_0x2cec50){_0xc9251f['push'](_0xc9251f['shift']());}}}(_0x9578,0xbf644));import{readFile,readdir,rm}from'node:fs/promises';import{join}from'node:path';import{asRecord,getTrimmedString,writeJson}from'../common/utils.mjs';const SKILL_SOURCE_MARKET='aipc-mar'+'ket';async function readMarketSkillRegistry(_0x5e7dd3){const _0x2f1cfb=_0x73c7;try{const _0x265375=JSON['parse'](await readFile(_0x5e7dd3,_0x2f1cfb(0x158)));if(!_0x265375||typeof _0x265375!==_0x2f1cfb(0x14e)||Array['isArray'](_0x265375))return{};return _0x265375;}catch{return{};}}function _0x9578(){const _0x3aa5a6=['2290yTTSQD','sort','tateDir','ory','接口返回的\x20na','ies','utf8','logoUrl','version','3205928jmarFS','entries','localeCo','targetPa','^\x5cs*','logo_url','接口返回的\x20co','keys','isArray','3404964BPLACE','4213380hFvwyc','killKey','source','resolveS','324rZOXDt','map','market','descript','has','8dpXxyt','name','market-s','mpare',':\x5cs*(.+)','Key','replace','ion','fromEntr','skills','SKILLS.m','imported','skillKey','length','5977107fpMHKK','4214TCTjJS','SKILL.md','size','gatewayS','isDirect','trim','351eaXWHk','kills.js','code','技能商店安装需要','8bPbbJl','filter','Name','1381430hHlPGf','object','catch','rsion','match'];_0x9578=function(){return _0x3aa5a6;};return _0x9578();}export async function readSkillMarketRegistry(_0x475604){const _0x3ef502=_0x73c7;return await readMarketSkillRegistry(join(_0x475604,_0x3ef502(0x133)+_0x3ef502(0x147)+'on'));}async function upsertMarketSkillRegistryEntry(_0x19aa5d,_0x553984,_0x3bb202,_0x9d4a67,_0x445a42={}){const _0x147179=_0x73c7,_0x1d81a9=getTrimmedString(_0x553984),_0x3342c5=getTrimmedString(_0x3bb202),_0x172ca7=getTrimmedString(_0x9d4a67);if(!_0x1d81a9||!_0x3342c5||!_0x172ca7)return;const _0xf549cc=await readMarketSkillRegistry(_0x19aa5d);_0xf549cc[_0x1d81a9]={'version':_0x172ca7,'code':_0x3342c5,...getTrimmedString(_0x445a42[_0x147179(0x132)])?{'name':getTrimmedString(_0x445a42['name'])}:{},...getTrimmedString(_0x445a42[_0x147179(0x159)])?{'logo_url':getTrimmedString(_0x445a42[_0x147179(0x159)])}:{},...getTrimmedString(_0x445a42[_0x147179(0x12f)+'ion'])?{'description':getTrimmedString(_0x445a42['descript'+'ion'])}:{}};if(_0xf549cc[_0x3342c5]&&_0x3342c5!==_0x1d81a9)delete _0xf549cc[_0x3342c5];for(const [_0x448bcf,_0x276009]of Object[_0x147179(0x11f)](_0xf549cc)){if(_0x448bcf!==_0x1d81a9&&asRecord(_0x276009)['code']===_0x3342c5)delete _0xf549cc[_0x448bcf];}const _0x54903d=Object[_0x147179(0x139)+_0x147179(0x157)](Object[_0x147179(0x11f)](_0xf549cc)[_0x147179(0x153)](([_0xdb2038],[_0x4e1305])=>_0xdb2038[_0x147179(0x120)+_0x147179(0x134)](_0x4e1305)));await writeJson(_0x19aa5d,_0x54903d);}function _0x73c7(_0x2f7216,_0x58639e){_0x2f7216=_0x2f7216-0x11d;const _0x9578f6=_0x9578();let _0x73c74a=_0x9578f6[_0x2f7216];return _0x73c74a;}async function removeMarketSkillRegistryKeys(_0x5d7103,_0x55dd1c){const _0x20dae8=_0x73c7,_0x561abc=new Set(_0x55dd1c[_0x20dae8(0x12d)](getTrimmedString)[_0x20dae8(0x14b)](Boolean));if(_0x561abc[_0x20dae8(0x142)]===0x0)return;const _0x1218c4=await readMarketSkillRegistry(_0x5d7103);let _0x39f9ff=![];for(const _0x5901ed of Object[_0x20dae8(0x125)](_0x1218c4)){const _0x5374b8=asRecord(_0x1218c4[_0x5901ed]);(_0x561abc[_0x20dae8(0x130)](_0x5901ed)||_0x561abc[_0x20dae8(0x130)](getTrimmedString(_0x5374b8[_0x20dae8(0x148)])))&&(delete _0x1218c4[_0x5901ed],_0x39f9ff=!![]);}if(_0x39f9ff){const _0x181d96=Object[_0x20dae8(0x139)+'ies'](Object[_0x20dae8(0x11f)](_0x1218c4)[_0x20dae8(0x153)](([_0x363fc9],[_0x38efc7])=>_0x363fc9[_0x20dae8(0x120)+_0x20dae8(0x134)](_0x38efc7)));await writeJson(_0x5d7103,_0x181d96);}}async function readSkillManifestText(_0x1ba64b){const _0x465e23=_0x73c7,_0x30e6f9=[join(_0x1ba64b,_0x465e23(0x141)),join(_0x1ba64b,_0x465e23(0x13b)+'d')];for(const _0x39e7c2 of _0x30e6f9){const _0x4c6017=await readFile(_0x39e7c2,_0x465e23(0x158))[_0x465e23(0x14f)](()=>'');if(_0x4c6017['trim']())return _0x4c6017;}return'';}function resolveFrontmatterValue(_0x618673,_0x5b3471){const _0x45170a=_0x73c7,_0x495f40=_0x618673[_0x45170a(0x151)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x4442ae=_0x495f40?.[0x1]??'',_0x5b6e6b=_0x4442ae[_0x45170a(0x151)](new RegExp(_0x45170a(0x122)+_0x5b3471+(_0x45170a(0x135)+'$'),'m'))?.[0x1];return getTrimmedString(_0x5b6e6b)[_0x45170a(0x137)](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x1fb60e){const _0x42a856=_0x73c7,_0x430ff5=await readSkillManifestText(_0x1fb60e);if(!_0x430ff5['trim']())return null;const _0x28dfab=_0x430ff5['match'](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x28dfab?.[0x1])return getTrimmedString(_0x28dfab[0x1]);return resolveFrontmatterValue(_0x430ff5,'skillKey')||resolveFrontmatterValue(_0x430ff5,_0x42a856(0x132));}async function removeOtherMarketSkillVersions(_0x1d9363,_0x2943e6,_0x36fceb){const _0x5f3554=_0x73c7,_0x1a86d3=getTrimmedString(_0x36fceb);if(!_0x1a86d3)return;for(const _0x1f7453 of await readdir(_0x1d9363,{'withFileTypes':!![]})[_0x5f3554(0x14f)](()=>[])){if(!_0x1f7453[_0x5f3554(0x144)+_0x5f3554(0x155)]())continue;const _0x4bbc4e=join(_0x1d9363,_0x1f7453['name']);if(_0x4bbc4e===_0x2943e6)continue;const _0xb87138=await resolveSkillKeyFromManifest(_0x4bbc4e);_0xb87138&&_0xb87138[_0x5f3554(0x145)]()===_0x1a86d3&&await rm(_0x4bbc4e,{'recursive':!![],'force':!![]});}}export async function importMarketSkillZip({payload:payload={},importSkillZip:_0x307cfb,configController:_0xbd0958}={}){const _0x37fb2a=_0x73c7,_0x3dd8db=asRecord(payload);if(_0x3dd8db[_0x37fb2a(0x12a)]!==_0x37fb2a(0x12e))return _0x307cfb({'payload':payload});const _0x64560e=getTrimmedString(_0x3dd8db['code']),_0x447123=getTrimmedString(_0x3dd8db['version']),_0x5d749e=getTrimmedString(_0x3dd8db['name']);if(!_0x64560e)throw new Error(_0x37fb2a(0x149)+_0x37fb2a(0x124)+'de');if(!_0x447123)throw new Error('技能商店安装需要'+'接口返回的\x20ve'+_0x37fb2a(0x150));if(!_0x5d749e)throw new Error(_0x37fb2a(0x149)+_0x37fb2a(0x156)+'me');const _0x1fe3c4=await _0x307cfb({'payload':{..._0x3dd8db,'version':_0x447123}});if(!_0x1fe3c4?.[_0x37fb2a(0x13c)])return _0x1fe3c4;const _0x2c80e9=getTrimmedString(_0x1fe3c4[_0x37fb2a(0x13d)])||getTrimmedString(_0x1fe3c4['manifest'+_0x37fb2a(0x136)])||getTrimmedString(_0x1fe3c4['skillDir'+_0x37fb2a(0x14c)]);return await removeOtherMarketSkillVersions(join(_0xbd0958[_0x37fb2a(0x12b)+_0x37fb2a(0x154)](),'skills'),_0x1fe3c4[_0x37fb2a(0x121)+'th'],_0x2c80e9),await upsertMarketSkillRegistryEntry(join(_0xbd0958['resolveS'+_0x37fb2a(0x154)](),_0x37fb2a(0x133)+_0x37fb2a(0x147)+'on'),_0x2c80e9,_0x64560e,_0x447123,{'name':_0x5d749e,'logoUrl':getTrimmedString(_0x3dd8db['logoUrl']),'description':getTrimmedString(_0x3dd8db['descript'+'ion'])}),_0x1fe3c4;}export async function deleteMarketSkillRegistryEntry({payload:payload={},deleteManagedSkill:_0x549408,configController:_0x25ebc7}={}){const _0x2c4f2b=_0x73c7,_0x6e3773=await _0x549408({'payload':payload}),_0x1b1077=asRecord(payload),_0xc051cc=getTrimmedString(_0x6e3773?.[_0x2c4f2b(0x13d)]??_0x1b1077[_0x2c4f2b(0x13d)]??_0x1b1077[_0x2c4f2b(0x132)]),_0x491f2c=[_0xc051cc,getTrimmedString(_0x1b1077[_0x2c4f2b(0x143)+_0x2c4f2b(0x129)]),getTrimmedString(_0x1b1077[_0x2c4f2b(0x132)])];return await removeMarketSkillRegistryKeys(join(_0x25ebc7[_0x2c4f2b(0x12b)+_0x2c4f2b(0x154)](),_0x2c4f2b(0x133)+_0x2c4f2b(0x147)+'on'),_0x491f2c),_0x6e3773;}export function mapMarketRegisteredSkills(_0x28ac9e,_0x24d99d){const _0x1a3230=_0x73c7,_0x141add=Array[_0x1a3230(0x126)](asRecord(_0x28ac9e)[_0x1a3230(0x13a)])?asRecord(_0x28ac9e)[_0x1a3230(0x13a)]:[];if(_0x141add[_0x1a3230(0x13e)]===0x0||Object['keys'](_0x24d99d)[_0x1a3230(0x13e)]===0x0)return _0x28ac9e;const _0x237f71=_0x141add[_0x1a3230(0x12d)](_0x256db0=>{const _0x50bc99=_0x1a3230,_0x426cfb=asRecord(_0x256db0),_0x4cdd91=getTrimmedString(_0x426cfb[_0x50bc99(0x13d)])||getTrimmedString(_0x426cfb[_0x50bc99(0x132)]);let _0x1739dc=_0x4cdd91,_0x305c10=asRecord(_0x24d99d[_0x4cdd91]);if(!Object[_0x50bc99(0x125)](_0x305c10)[_0x50bc99(0x13e)])for(const [_0x536313,_0x25a5a3]of Object[_0x50bc99(0x11f)](_0x24d99d)){const _0x30cfe6=asRecord(_0x25a5a3);if(getTrimmedString(_0x30cfe6['code'])===_0x4cdd91){_0x1739dc=_0x536313,_0x305c10=_0x30cfe6;break;}}if(!Object[_0x50bc99(0x125)](_0x305c10)[_0x50bc99(0x13e)])return _0x256db0;const _0x5437e1=getTrimmedString(_0x305c10['code']),_0x3d4373=getTrimmedString(_0x305c10[_0x50bc99(0x132)]),_0x13bf13=getTrimmedString(_0x305c10[_0x50bc99(0x12f)+_0x50bc99(0x138)]),_0x5e5af6=getTrimmedString(_0x305c10[_0x50bc99(0x123)]),_0xcff014=getTrimmedString(_0x305c10[_0x50bc99(0x11d)]);return{..._0x426cfb,'source':SKILL_SOURCE_MARKET,'skillKey':_0x5437e1||_0x4cdd91,'gatewaySkillKey':_0x5437e1?_0x1739dc:null,'marketInstalledVersion':_0xcff014||null,..._0x3d4373?{'cnName':_0x3d4373}:{},..._0x13bf13?{'description':_0x13bf13}:{},..._0x5e5af6?{'logoUrl':_0x5e5af6}:{}};});return{...asRecord(_0x28ac9e),'skills':_0x237f71};}export function createMarketSkillRuntime({configController:_0x455c0c}){return{'mapSkillsStatus':async _0x2b0213=>{const _0x3eeaa0=_0x73c7,_0x5f2dd3=await readSkillMarketRegistry(_0x455c0c['resolveS'+_0x3eeaa0(0x154)]())[_0x3eeaa0(0x14f)](()=>({}));return mapMarketRegisteredSkills(_0x2b0213,_0x5f2dd3);}};}
@@ -1 +1 @@
1
- (function(_0x648d6,_0x1b5e5a){const _0x35788a=_0x3ace,_0x5036f4=_0x648d6();while(!![]){try{const _0x357bdb=-parseInt(_0x35788a(0x10f))/0x1+-parseInt(_0x35788a(0xfd))/0x2*(parseInt(_0x35788a(0xff))/0x3)+-parseInt(_0x35788a(0x114))/0x4*(-parseInt(_0x35788a(0xf3))/0x5)+parseInt(_0x35788a(0x10c))/0x6*(-parseInt(_0x35788a(0x105))/0x7)+parseInt(_0x35788a(0xf7))/0x8+-parseInt(_0x35788a(0xf0))/0x9*(-parseInt(_0x35788a(0xe7))/0xa)+parseInt(_0x35788a(0xdd))/0xb;if(_0x357bdb===_0x1b5e5a)break;else _0x5036f4['push'](_0x5036f4['shift']());}catch(_0x242725){_0x5036f4['push'](_0x5036f4['shift']());}}}(_0x370c,0x25925));import{spawn}from'node:child_process';import{randomUUID}from'node:crypto';function _0x3ace(_0xff10a3,_0x3adc45){_0xff10a3=_0xff10a3-0xda;const _0x370c9c=_0x370c();let _0x3acebe=_0x370c9c[_0xff10a3];return _0x3acebe;}import{accessSync,constants,existsSync}from'node:fs';function _0x370c(){const _0x209587=['xterm-25','ll\x20found','.bat','2980UfFqLq','truecolo','al/bin/z','set','child','message','env','pipe','\x20not\x20fou','420145PvWLuH','find','powershe','test','/bin/bas','close','al/bin/b','bash','object','n/bash','90ICDHtt','cmd','PATH','stderr','keys','.cmd','sessionI','/opt/hom','darwin','150723heWKPZ','ase','stdout','580DGnftt','includes','/bin/zsh','toLowerC','1746776PNihWV','Terminal','/usr/loc','rted\x20Win','clear','data','498zpTgxw','win32','2892brMCHK','get','rted\x20she','kill','ebrew/bi','cwd','7kvykJc','-NoLogo','filter','X_OK','toString','platform','trim','103638TlqKxs','F_OK','\x20session','82483afMExF','push'];_0x370c=function(){return _0x209587;};return _0x370c();}import{mkdir}from'node:fs/promises';import{basename,delimiter,join}from'node:path';const FILE_EXTENSION_REGEX=/\.[a-z0-9]+$/i;function resolvePathEntries(_0x3649b3){const _0x5bde1e=_0x3ace,_0x2ee718=Object[_0x5bde1e(0xeb)](_0x3649b3)['find'](_0x30e080=>_0x30e080[_0x5bde1e(0xf6)+_0x5bde1e(0xf1)]()==='path')??_0x5bde1e(0xe9);return String(_0x3649b3[_0x2ee718]||'')['split'](delimiter)[_0x5bde1e(0x107)](Boolean);}function canExecute(_0x3bcdf6){const _0x29b845=_0x3ace;try{return accessSync(_0x3bcdf6,process['platform']===_0x29b845(0xfe)?constants[_0x29b845(0x10d)]:constants[_0x29b845(0x108)]),!![];}catch{return![];}}function resolveExecutableOnPath(_0x3d29a4,_0x4b543f){const _0x1683fa=_0x3ace,_0x466abf=String(_0x3d29a4||'')['trim']();if(!_0x466abf)return null;if(_0x466abf[_0x1683fa(0xf4)]('/')||_0x466abf['includes']('\x5c'))return existsSync(_0x466abf)?_0x466abf:null;const _0x50c027=[_0x466abf];process[_0x1683fa(0x10a)]==='win32'&&!FILE_EXTENSION_REGEX[_0x1683fa(0xe0)](_0x466abf)&&_0x50c027[_0x1683fa(0x110)](_0x466abf+'.exe',_0x466abf+_0x1683fa(0xec),_0x466abf+_0x1683fa(0x113));for(const _0xbc1a94 of resolvePathEntries(_0x4b543f)){for(const _0x51d48b of _0x50c027){const _0x4ea83d=join(_0xbc1a94,_0x51d48b);if(canExecute(_0x4ea83d))return _0x4ea83d;}}return null;}function resolveShellLaunchConfig(_0xb3cb8d){const _0x205ab1=_0x3ace;if(process[_0x205ab1(0x10a)]===_0x205ab1(0xfe)){const _0x318a46=resolveExecutableOnPath('pwsh',_0xb3cb8d)??resolveExecutableOnPath(_0x205ab1(0xdf)+'ll',_0xb3cb8d);if(_0x318a46)return{'command':_0x318a46,'args':[_0x205ab1(0x106)]};const _0x39f0a0=resolveExecutableOnPath(_0x205ab1(0xe8),_0xb3cb8d);if(_0x39f0a0)return{'command':_0x39f0a0,'args':['/Q']};throw new Error('No\x20suppo'+_0x205ab1(0xfa)+'dows\x20she'+'ll\x20found');}if(process['platform']===_0x205ab1(0xef)){const _0x276540=[_0x205ab1(0xf5),'/usr/loc'+_0x205ab1(0x116)+'sh',_0x205ab1(0xee)+'ebrew/bi'+'n/zsh'][_0x205ab1(0xde)](canExecute);if(_0x276540)return{'command':_0x276540,'args':['-i']};const _0x4aed1e=[_0x205ab1(0xe1)+'h',_0x205ab1(0xf9)+_0x205ab1(0xe3)+'ash','/opt/hom'+_0x205ab1(0x103)+_0x205ab1(0xe6)]['find'](canExecute);if(_0x4aed1e)return{'command':_0x4aed1e,'args':['--login','-i']};}const _0x283f00=resolveExecutableOnPath(process.env.SHELL||'',_0xb3cb8d)??resolveExecutableOnPath(_0x205ab1(0xe4),_0xb3cb8d)??resolveExecutableOnPath('sh',_0xb3cb8d);if(!_0x283f00)throw new Error('No\x20suppo'+_0x205ab1(0x101)+_0x205ab1(0x112));return{'command':_0x283f00,'args':['-l','-i']};}export function createTerminalManager({cwd:_0x474a6a,emitData:_0x590f79,emitExit:_0x3875af}){const _0x207adc=new Map();function _0x3e7c9e(_0x509dbc){const _0x49f2ec=_0x3ace,_0x546a42=_0x207adc[_0x49f2ec(0x100)](_0x509dbc);if(!_0x546a42)throw new Error(_0x49f2ec(0xf8)+_0x49f2ec(0x10e)+_0x49f2ec(0xdc)+'nd');return _0x546a42;}async function _0x30110a(_0x484ebd={}){const _0x262f0e=_0x3ace,_0x4df631={...process.env,'TERM':_0x262f0e(0x111)+'6color','COLORTERM':_0x262f0e(0x115)+'r',..._0x484ebd[_0x262f0e(0xda)]&&typeof _0x484ebd[_0x262f0e(0xda)]===_0x262f0e(0xe5)?_0x484ebd[_0x262f0e(0xda)]:{}},_0x2c5987=typeof _0x484ebd[_0x262f0e(0x104)]==='string'&&_0x484ebd[_0x262f0e(0x104)][_0x262f0e(0x10b)]()?_0x484ebd[_0x262f0e(0x104)]:'',_0x4ce923=_0x2c5987||_0x474a6a;await mkdir(_0x4ce923,{'recursive':!![]});const {command:_0x5239b8,args:_0x3d2f10}=resolveShellLaunchConfig(_0x4df631),_0x2eca0c=randomUUID(),_0x2a3439=spawn(_0x5239b8,_0x3d2f10,{'cwd':_0x4ce923,'env':_0x4df631,'stdio':_0x262f0e(0xdb)});return _0x207adc[_0x262f0e(0x117)](_0x2eca0c,{'sessionId':_0x2eca0c,'child':_0x2a3439}),_0x2a3439[_0x262f0e(0xf2)]['on']('data',_0x34ba75=>_0x590f79({'sessionId':_0x2eca0c,'data':_0x34ba75['toString']()})),_0x2a3439[_0x262f0e(0xea)]['on']('data',_0x2237df=>_0x590f79({'sessionId':_0x2eca0c,'data':_0x2237df[_0x262f0e(0x109)]()})),_0x2a3439['on'](_0x262f0e(0xe2),(_0x5f516c,_0x6d7037)=>{_0x207adc['delete'](_0x2eca0c),_0x3875af({'sessionId':_0x2eca0c,'exitCode':_0x5f516c,'signal':_0x6d7037});}),_0x2a3439['on']('error',_0x1191e7=>{const _0x9ce21b=_0x262f0e;_0x590f79({'sessionId':_0x2eca0c,'data':_0x1191e7[_0x9ce21b(0x119)]+'\x0a'});}),{'sessionId':_0x2eca0c,'shell':basename(_0x5239b8),'cwd':_0x4ce923};}function _0x4a4b9e(_0x21b4e8={}){const _0x31fb75=_0x3ace,_0x331770=_0x3e7c9e(String(_0x21b4e8['sessionI'+'d']||''));return _0x331770[_0x31fb75(0x118)]['stdin']['write'](String(_0x21b4e8[_0x31fb75(0xfc)]||'')),{'ok':!![]};}function _0x3260fa(_0x190895={}){const _0x4f2516=_0x3ace,_0x3ae8da=String(_0x190895[_0x4f2516(0xed)+'d']||'');return _0x3e7c9e(_0x3ae8da),{'ok':!![],'ignored':!![]};}function _0x221d03(_0x1f5c23={}){const _0x537213=_0x3ace,_0x5f34df=String(_0x1f5c23[_0x537213(0xed)+'d']||''),_0x3b582b=_0x207adc[_0x537213(0x100)](_0x5f34df);if(!_0x3b582b)return{'ok':!![],'closed':![]};return _0x207adc['delete'](_0x5f34df),_0x3b582b['child'][_0x537213(0x102)](),{'ok':!![],'closed':!![]};}function _0x1dbc87(){const _0x4608c8=_0x3ace;for(const _0x315343 of _0x207adc['values']())_0x315343[_0x4608c8(0x118)]['kill']();_0x207adc[_0x4608c8(0xfb)]();}return{'create':_0x30110a,'input':_0x4a4b9e,'resize':_0x3260fa,'close':_0x221d03,'dispose':_0x1dbc87};}
1
+ (function(_0x56a2ae,_0x4ad5a4){const _0x1ccc3=_0x5aae,_0xe83702=_0x56a2ae();while(!![]){try{const _0x38e554=parseInt(_0x1ccc3(0x1c4))/0x1*(parseInt(_0x1ccc3(0x199))/0x2)+parseInt(_0x1ccc3(0x1ca))/0x3*(parseInt(_0x1ccc3(0x1bb))/0x4)+parseInt(_0x1ccc3(0x1a1))/0x5*(-parseInt(_0x1ccc3(0x1ab))/0x6)+-parseInt(_0x1ccc3(0x1b9))/0x7*(-parseInt(_0x1ccc3(0x1a4))/0x8)+-parseInt(_0x1ccc3(0x1c1))/0x9*(parseInt(_0x1ccc3(0x19b))/0xa)+-parseInt(_0x1ccc3(0x1a8))/0xb+parseInt(_0x1ccc3(0x1a3))/0xc*(parseInt(_0x1ccc3(0x1a0))/0xd);if(_0x38e554===_0x4ad5a4)break;else _0xe83702['push'](_0xe83702['shift']());}catch(_0xd1bbba){_0xe83702['push'](_0xe83702['shift']());}}}(_0x1526,0xd6315));function _0x5aae(_0x1bc4ce,_0x17b2d1){_0x1bc4ce=_0x1bc4ce-0x199;const _0x152651=_0x1526();let _0x5aae76=_0x152651[_0x1bc4ce];return _0x5aae76;}import{spawn}from'node:child_process';import{randomUUID}from'node:crypto';import{accessSync,constants,existsSync}from'node:fs';import{mkdir}from'node:fs/promises';import{basename,delimiter,join}from'node:path';const FILE_EXTENSION_REGEX=/\.[a-z0-9]+$/i;function resolvePathEntries(_0xfd442b){const _0x3d5c6c=_0x5aae,_0xa773eb=Object[_0x3d5c6c(0x1ad)](_0xfd442b)['find'](_0x340098=>_0x340098[_0x3d5c6c(0x1b3)+_0x3d5c6c(0x1b0)]()===_0x3d5c6c(0x1d5))??'PATH';return String(_0xfd442b[_0xa773eb]||'')[_0x3d5c6c(0x1a5)](delimiter)[_0x3d5c6c(0x1d6)](Boolean);}function canExecute(_0x4accfd){const _0x4a103e=_0x5aae;try{return accessSync(_0x4accfd,process[_0x4a103e(0x19e)]===_0x4a103e(0x1d2)?constants['F_OK']:constants['X_OK']),!![];}catch{return![];}}function resolveExecutableOnPath(_0x1218c9,_0x53671a){const _0x170c5e=_0x5aae,_0x461d78=String(_0x1218c9||'')['trim']();if(!_0x461d78)return null;if(_0x461d78[_0x170c5e(0x1c9)]('/')||_0x461d78[_0x170c5e(0x1c9)]('\x5c'))return existsSync(_0x461d78)?_0x461d78:null;const _0x44295c=[_0x461d78];process[_0x170c5e(0x19e)]===_0x170c5e(0x1d2)&&!FILE_EXTENSION_REGEX['test'](_0x461d78)&&_0x44295c[_0x170c5e(0x1d7)](_0x461d78+_0x170c5e(0x1a6),_0x461d78+'.cmd',_0x461d78+'.bat');for(const _0x24a13a of resolvePathEntries(_0x53671a)){for(const _0x5e2823 of _0x44295c){const _0x1dc85d=join(_0x24a13a,_0x5e2823);if(canExecute(_0x1dc85d))return _0x1dc85d;}}return null;}function resolveShellLaunchConfig(_0x31cd9c){const _0x22f309=_0x5aae;if(process[_0x22f309(0x19e)]===_0x22f309(0x1d2)){const _0x14bc21=resolveExecutableOnPath(_0x22f309(0x1c5),_0x31cd9c)??resolveExecutableOnPath(_0x22f309(0x1a7)+'ll',_0x31cd9c);if(_0x14bc21)return{'command':_0x14bc21,'args':['-NoLogo']};const _0x56d64f=resolveExecutableOnPath(_0x22f309(0x1c6),_0x31cd9c);if(_0x56d64f)return{'command':_0x56d64f,'args':['/Q']};throw new Error(_0x22f309(0x1c7)+'rted\x20Win'+_0x22f309(0x1d3)+_0x22f309(0x1a9));}if(process['platform']===_0x22f309(0x1d1)){const _0x20be5=[_0x22f309(0x1ae),_0x22f309(0x1ac)+'al/bin/z'+'sh',_0x22f309(0x1d8)+'ebrew/bi'+'n/zsh'][_0x22f309(0x1af)](canExecute);if(_0x20be5)return{'command':_0x20be5,'args':['-i']};const _0x28dda5=[_0x22f309(0x1cf)+'h','/usr/loc'+_0x22f309(0x1c0)+_0x22f309(0x1ba),_0x22f309(0x1d8)+_0x22f309(0x1cb)+'n/bash']['find'](canExecute);if(_0x28dda5)return{'command':_0x28dda5,'args':[_0x22f309(0x1cd),'-i']};}const _0x3256ca=resolveExecutableOnPath(process.env.SHELL||'',_0x31cd9c)??resolveExecutableOnPath('bash',_0x31cd9c)??resolveExecutableOnPath('sh',_0x31cd9c);if(!_0x3256ca)throw new Error(_0x22f309(0x1c7)+_0x22f309(0x1b5)+_0x22f309(0x1a9));return{'command':_0x3256ca,'args':['-l','-i']};}function _0x1526(){const _0x35d521=['884kMBBKg','clear','xterm-25','\x20session','stdin','al/bin/b','2657646hFyvsT','data','sessionI','180912OAhNLw','pwsh','cmd','No\x20suppo','toString','includes','23070kzQoYv','ebrew/bi','stdout','--login','object','/bin/bas','write','darwin','win32','dows\x20she','trim','path','filter','push','/opt/hom','child','4uuCsDH','\x20not\x20fou','30HzTKUb','pipe','cwd','platform','env','5046795DuIiOh','6812920WlcPaM','message','24FmkXmx','7776VrAfCU','split','.exe','powershe','4134031kvefhN','ll\x20found','delete','6xcQeiY','/usr/loc','keys','/bin/zsh','find','ase','6color','stderr','toLowerC','error','rted\x20she','truecolo','close','get','4781BmLbuJ','ash'];_0x1526=function(){return _0x35d521;};return _0x1526();}export function createTerminalManager({cwd:_0x27375a,emitData:_0x5c71ab,emitExit:_0xf3bb22}){const _0x21909a=new Map();function _0x5173c9(_0x264682){const _0x123f2f=_0x5aae,_0x2b24f4=_0x21909a[_0x123f2f(0x1b8)](_0x264682);if(!_0x2b24f4)throw new Error('Terminal'+_0x123f2f(0x1be)+_0x123f2f(0x19a)+'nd');return _0x2b24f4;}async function _0x37e2e6(_0xee4a98={}){const _0x363c8d=_0x5aae,_0x28f924={...process.env,'TERM':_0x363c8d(0x1bd)+_0x363c8d(0x1b1),'COLORTERM':_0x363c8d(0x1b6)+'r',..._0xee4a98['env']&&typeof _0xee4a98[_0x363c8d(0x19f)]===_0x363c8d(0x1ce)?_0xee4a98['env']:{}},_0x2bee0f=typeof _0xee4a98[_0x363c8d(0x19d)]==='string'&&_0xee4a98[_0x363c8d(0x19d)][_0x363c8d(0x1d4)]()?_0xee4a98['cwd']:'',_0x217abd=_0x2bee0f||_0x27375a;await mkdir(_0x217abd,{'recursive':!![]});const {command:_0x6f6171,args:_0x279562}=resolveShellLaunchConfig(_0x28f924),_0x38b1c6=randomUUID(),_0x1e5130=spawn(_0x6f6171,_0x279562,{'cwd':_0x217abd,'env':_0x28f924,'stdio':_0x363c8d(0x19c)});return _0x21909a['set'](_0x38b1c6,{'sessionId':_0x38b1c6,'child':_0x1e5130}),_0x1e5130[_0x363c8d(0x1cc)]['on'](_0x363c8d(0x1c2),_0x13fa6c=>_0x5c71ab({'sessionId':_0x38b1c6,'data':_0x13fa6c[_0x363c8d(0x1c8)]()})),_0x1e5130[_0x363c8d(0x1b2)]['on'](_0x363c8d(0x1c2),_0x4f7665=>_0x5c71ab({'sessionId':_0x38b1c6,'data':_0x4f7665[_0x363c8d(0x1c8)]()})),_0x1e5130['on'](_0x363c8d(0x1b7),(_0x46b845,_0x584a46)=>{const _0x233c2c=_0x363c8d;_0x21909a[_0x233c2c(0x1aa)](_0x38b1c6),_0xf3bb22({'sessionId':_0x38b1c6,'exitCode':_0x46b845,'signal':_0x584a46});}),_0x1e5130['on'](_0x363c8d(0x1b4),_0x21fd5a=>{const _0x99eaf3=_0x363c8d;_0x5c71ab({'sessionId':_0x38b1c6,'data':_0x21fd5a[_0x99eaf3(0x1a2)]+'\x0a'});}),{'sessionId':_0x38b1c6,'shell':basename(_0x6f6171),'cwd':_0x217abd};}function _0x1a3479(_0x388c0a={}){const _0x4b4451=_0x5aae,_0x57c7e3=_0x5173c9(String(_0x388c0a[_0x4b4451(0x1c3)+'d']||''));return _0x57c7e3[_0x4b4451(0x1d9)][_0x4b4451(0x1bf)][_0x4b4451(0x1d0)](String(_0x388c0a[_0x4b4451(0x1c2)]||'')),{'ok':!![]};}function _0x153ae3(_0x176d2d={}){const _0x49ca76=String(_0x176d2d['sessionI'+'d']||'');return _0x5173c9(_0x49ca76),{'ok':!![],'ignored':!![]};}function _0x1f2298(_0x4340ac={}){const _0x29c4b1=_0x5aae,_0x521fd4=String(_0x4340ac['sessionI'+'d']||''),_0x436e54=_0x21909a[_0x29c4b1(0x1b8)](_0x521fd4);if(!_0x436e54)return{'ok':!![],'closed':![]};return _0x21909a[_0x29c4b1(0x1aa)](_0x521fd4),_0x436e54[_0x29c4b1(0x1d9)]['kill'](),{'ok':!![],'closed':!![]};}function _0x434e6f(){const _0xbe48e=_0x5aae;for(const _0xc448c2 of _0x21909a['values']())_0xc448c2[_0xbe48e(0x1d9)]['kill']();_0x21909a[_0xbe48e(0x1bc)]();}return{'create':_0x37e2e6,'input':_0x1a3479,'resize':_0x153ae3,'close':_0x1f2298,'dispose':_0x434e6f};}