@wujie-shell/core 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -3
- package/bin/wujie-shell.mjs +22 -1
- package/dist/bin/wujie-shell.mjs +1 -1
- package/dist/src/agents/bundled-agent-skills.mjs +1 -1
- package/dist/src/agents/bundled-agents.mjs +1 -1
- package/dist/src/agents/runtime-config.mjs +1 -0
- package/dist/src/chat/media-archive.mjs +1 -1
- package/dist/src/chat/queue.mjs +1 -1
- package/dist/src/common/cron-session-key.mjs +1 -0
- package/dist/src/common/diagnostics.mjs +1 -1
- package/dist/src/common/logging.mjs +1 -1
- package/dist/src/common/runtime-logger.mjs +1 -1
- package/dist/src/common/sqlite-paths.mjs +1 -0
- package/dist/src/common/user-events.mjs +1 -1
- package/dist/src/common/utils.mjs +1 -1
- package/dist/src/config/controller.mjs +1 -1
- package/dist/src/connectors/config-utils.mjs +1 -1
- package/dist/src/connectors/constants.mjs +1 -1
- package/dist/src/connectors/controller.mjs +1 -1
- package/dist/src/connectors/kdocs-cli.mjs +1 -1
- package/dist/src/connectors/lark-cli.mjs +1 -0
- package/dist/src/electron/main.mjs +1 -1
- package/dist/src/electron/preload.mjs +1 -1
- package/dist/src/electron/protocol-url-state.mjs +1 -0
- package/dist/src/events/domain-event-journal.mjs +1 -0
- package/dist/src/files/generated-files-store.mjs +1 -1
- package/dist/src/files/handlers.mjs +1 -1
- package/dist/src/gateway/chat-delta.mjs +1 -1
- package/dist/src/gateway/controller.mjs +1 -1
- package/dist/src/gateway/request-id-title-events.mjs +1 -0
- package/dist/src/gateway/ws-client.mjs +1 -1
- package/dist/src/index.mjs +1 -1
- package/dist/src/log-reporting/handlers.mjs +1 -1
- package/dist/src/log-reporting/report-logs.mjs +1 -1
- package/dist/src/models/handlers.mjs +1 -1
- package/dist/src/preferences/store.mjs +1 -1
- package/dist/src/request-id/handlers.mjs +1 -0
- package/dist/src/request-id/runtime-bridge.mjs +1 -0
- package/dist/src/request-id/session-store.mjs +1 -0
- package/dist/src/request-id/title.mjs +1 -0
- package/dist/src/runtime/cron-missed-run-policy.mjs +1 -0
- package/dist/src/runtime/index.mjs +1 -1
- package/dist/src/runtime/patch-channel-plugin-runtime.mjs +1 -1
- package/dist/src/runtime/patch-chat-history-mixed-tool-content.mjs +1 -1
- package/dist/src/runtime/patch-provider-request-id-header.mjs +1 -0
- package/dist/src/runtime/patch-qqbot-outbound-session-route.mjs +1 -0
- package/dist/src/runtime/patch-request-id-title-runtime.mjs +1 -0
- package/dist/src/runtime/patch-session-store-sqlite.mjs +1 -1
- package/dist/src/runtime/patch-weixin-outbound-session-route.mjs +1 -0
- package/dist/src/runtime/plugin-sync.mjs +1 -1
- package/dist/src/sessions/agent-sessions-map-store.mjs +1 -1
- package/dist/src/sessions/runtime-bridge.mjs +1 -1
- package/dist/src/sessions/session-data-service.mjs +1 -0
- package/dist/src/sessions/session-runtime-state-service.mjs +1 -0
- package/dist/src/sessions/session-runtime-state.mjs +1 -0
- package/dist/src/sessions/session-sqlite-store.mjs +1 -1
- package/dist/src/sessions/sql/001_init.sql +2 -1
- package/dist/src/sessions/sql/003_session_message_index.sql +29 -0
- package/dist/src/sessions/sql/004_request_id_titles.sql +15 -0
- package/dist/src/sessions/sql/005_session_subagents.sql +31 -0
- package/dist/src/sessions/sql/006_session_process_snapshot.sql +24 -0
- package/dist/src/sessions/sql/schema.md +53 -3
- package/dist/src/skills/import.mjs +1 -1
- package/dist/src/skills/market.mjs +1 -1
- package/dist/src/terminal/manager.mjs +1 -1
- package/dist/src/updates/controller.mjs +1 -1
- package/dist/src/updates/loader.mjs +1 -1
- 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,29 @@
|
|
|
1
|
+
PRAGMA foreign_keys = ON;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE IF NOT EXISTS session_message_index (
|
|
4
|
+
session_key TEXT NOT NULL,
|
|
5
|
+
transcript_path TEXT NOT NULL,
|
|
6
|
+
seq INTEGER NOT NULL,
|
|
7
|
+
byte_offset INTEGER NOT NULL,
|
|
8
|
+
byte_length INTEGER NOT NULL,
|
|
9
|
+
message_id TEXT,
|
|
10
|
+
parent_id TEXT,
|
|
11
|
+
role TEXT,
|
|
12
|
+
timestamp INTEGER,
|
|
13
|
+
record_type TEXT,
|
|
14
|
+
line_hash TEXT,
|
|
15
|
+
file_mtime_ms INTEGER NOT NULL,
|
|
16
|
+
file_size INTEGER NOT NULL,
|
|
17
|
+
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
18
|
+
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
19
|
+
PRIMARY KEY (session_key, transcript_path, seq)
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS session_message_index_session_seq_idx
|
|
23
|
+
ON session_message_index(session_key, seq DESC);
|
|
24
|
+
|
|
25
|
+
CREATE INDEX IF NOT EXISTS session_message_index_session_path_idx
|
|
26
|
+
ON session_message_index(session_key, transcript_path);
|
|
27
|
+
|
|
28
|
+
CREATE INDEX IF NOT EXISTS session_message_index_artifact_type_idx
|
|
29
|
+
ON session_message_index(session_key, transcript_path, record_type, seq DESC);
|
|
@@ -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.
|
|
115
|
-
|
|
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(_0x4567e5,_0x563ee4){const _0x576d12=_0x5ea4,_0x3fddb=_0x4567e5();while(!![]){try{const _0x3d989a=parseInt(_0x576d12(0x1de))/0x1*(-parseInt(_0x576d12(0x1ab))/0x2)+parseInt(_0x576d12(0x1c0))/0x3+-parseInt(_0x576d12(0x20c))/0x4*(-parseInt(_0x576d12(0x202))/0x5)+-parseInt(_0x576d12(0x1ba))/0x6*(parseInt(_0x576d12(0x1d4))/0x7)+parseInt(_0x576d12(0x1c8))/0x8*(-parseInt(_0x576d12(0x1f3))/0x9)+parseInt(_0x576d12(0x1ed))/0xa*(parseInt(_0x576d12(0x1b3))/0xb)+parseInt(_0x576d12(0x1b2))/0xc;if(_0x3d989a===_0x563ee4)break;else _0x3fddb['push'](_0x3fddb['shift']());}catch(_0x5b4d18){_0x3fddb['push'](_0x3fddb['shift']());}}}(_0x37e3,0x7cf73));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';function _0x37e3(){const _0x14c84c=['map','请先关闭技能后再','sured\x20wi','resolveS','call','ZIP\x20中未找到','42782gKNBJM','是否覆盖','prototyp','startsWi','version','platform','extracte','3488376MbceOs','39226bLdVdy','ZIP\x20Arch','disabled','-bundled','env','always','Dialog','4342572NYvgjt','SKILLS.M','catch','keys','未找到该技能在磁','tart','2492724cMlVmh','skills','ills\x20路径,','位于自定义\x20sk','内置/扩展技能无','workspac','能导入一个','^\x5cs*','152rmVBvz','hout\x20gat','thout\x20ga','markConf',':\x5cs*(.+)','-NoProfi','igWriteH','load-','openFile','isArray','LiteralP','filePath','7ynXXJh','d\x20或\x20SKIL','pathname','gatewayS','fer','skill\x20co','replace','isDirect','utf8','source','5zPFTjq','imported','-skill','y\x20is\x20req','length','ractive','andledIn','powershe','getPath','ZipPath','managed\x20','code','start','ory','SKILL.MD','410ybcfvq','Skill\x20ke','trim','extraDir','导入技能\x20ZIP','uired','73413GTZeVv','wujie-sk','download','unzip','tateDir','zip','enabled','find','stringif','__MACOSX','showOpen','技能目录\x22','canceled','LS.md','match','49945svuAHK','openclaw','writeCon','ath\x20\x27','\x27\x20-Desti','readConf','entries','ated\x20wit','filter','apiKey','92nWmhQW','\x22已存在,请确认','rt-','temp','size','config','status','ill-impo','skillKey','ZIP\x20中包含多','isFile','ll.exe','个\x20skill\x20','ase','请手动删除','已取消导入','\x27\x20-Force','下载技能\x20ZIP','该技能不允许删除','name','ternally','overwrit','win32','slice','zipUrl','toString','nfig\x20ent','oved\x20wit','-extra','load','目录,当前一次只','has','toUpperC','nfig\x20upd','killKey','法删除','ed-skill','arrayBuf','fig','bundled','hasOwnPr','ries\x20rem','SKILL.md','push','eway\x20res'];_0x37e3=function(){return _0x14c84c;};return _0x37e3();}import{asRecord,dedupeStrings,getTrimmedString}from'../common/utils.mjs';function sanitizeManagedSkillDirSegment(_0x4e525c){const _0x17c6b1=_0x5ea4;let _0x32c011=getTrimmedString(_0x4e525c)[_0x17c6b1(0x1da)](/[<>:"/\\|?*\u0000-\u001f]/g,'-');return _0x32c011=_0x32c011[_0x17c6b1(0x1da)](/-+/g,'-')[_0x17c6b1(0x1da)](/^[-.]+|[-.]+$/g,''),_0x32c011[_0x17c6b1(0x223)](0x0,0x78);}function buildManagedSkillDirectoryName(_0x547a42,_0x54fa1c,_0x57d77d){const _0x552d51=_0x5ea4,_0x3b6020=sanitizeManagedSkillDirSegment(_0x547a42)||sanitizeManagedSkillDirSegment(_0x57d77d)||_0x552d51(0x1df)+_0x552d51(0x1e0),_0x53db05=sanitizeManagedSkillDirSegment(_0x54fa1c),_0xeb2c38=_0x53db05?_0x3b6020+'-'+_0x53db05:_0x3b6020;return _0xeb2c38[_0x552d51(0x223)](0x0,0xc8)||_0x552d51(0x1df)+_0x552d51(0x1e0);}function extractVersionFromZipUrl(_0x2b53af){const _0x595980=_0x5ea4;if(!getTrimmedString(_0x2b53af))return null;try{const _0x20afef=basename(new URL(_0x2b53af)['pathname']),_0x3c8296=_0x20afef[_0x595980(0x1da)](/\.zip$/i,'');return _0x3c8296[_0x595980(0x201)](/(?:^|[-_v])(\d+\.\d+\.\d+(?:[-+][\w.-]+)?)(?:$|[-_])/i)?.[0x1]??null;}catch{return null;}}async function extractZipToDirectory(_0x23530a,_0x1b18ec){await new Promise((_0x9ae1bc,_0x54d443)=>{const _0x1d4496=_0x5ea4;let _0x38ee76;if(process[_0x1d4496(0x1b0)]===_0x1d4496(0x222)){const _0x329839=_0x23530a['replace'](/'/g,'\x27\x27'),_0x2ac789=_0x1b18ec[_0x1d4496(0x1da)](/'/g,'\x27\x27');_0x38ee76=execFile(_0x1d4496(0x1e5)+_0x1d4496(0x217),[_0x1d4496(0x1cd)+'le','-NonInte'+_0x1d4496(0x1e3),'-Command','Expand-A'+'rchive\x20-'+_0x1d4496(0x1d2)+_0x1d4496(0x205)+_0x329839+(_0x1d4496(0x206)+'nationPa'+'th\x20\x27')+_0x2ac789+_0x1d4496(0x21c)],_0x3f1cc2=>_0x3f1cc2?_0x54d443(_0x3f1cc2):_0x9ae1bc());}else _0x38ee76=execFile(_0x1d4496(0x1f6),['-q',_0x23530a,'-d',_0x1b18ec],_0x16d766=>_0x16d766?_0x54d443(_0x16d766):_0x9ae1bc());_0x38ee76['on']('error',_0x54d443);});}async function findSkillManifestDirectories(_0x10951f){const _0x2b9a09=[];async function _0x53c43f(_0x240b28){const _0x2ad053=_0x5ea4,_0x3d6a99=await readdir(_0x240b28,{'withFileTypes':!![]}),_0x4e1374=new Set(_0x3d6a99[_0x2ad053(0x1a5)](_0x4805ab=>_0x4805ab[_0x2ad053(0x21f)][_0x2ad053(0x198)+_0x2ad053(0x219)]()));if(_0x4e1374['has'](_0x2ad053(0x1ec))||_0x4e1374[_0x2ad053(0x197)]('SKILLS.M'+'D')){_0x2b9a09[_0x2ad053(0x1a3)](_0x240b28);return;}for(const _0x623812 of _0x3d6a99){if(!_0x623812['isDirect'+_0x2ad053(0x1eb)]()||_0x623812['name']===_0x2ad053(0x1fc)||_0x623812[_0x2ad053(0x21f)][_0x2ad053(0x1ae)+'th']('.'))continue;await _0x53c43f(join(_0x240b28,_0x623812[_0x2ad053(0x21f)]));}}return await _0x53c43f(_0x10951f),_0x2b9a09;}async function normalizeImportedSkillManifest(_0x5c59e2){const _0x36940b=_0x5ea4,_0x134de5=join(_0x5c59e2,_0x36940b(0x1a2)),_0x1805c3=await readdir(_0x5c59e2,{'withFileTypes':!![]})['catch'](()=>[]);let _0x3463b6=null,_0x1baada=null;for(const _0x3b79a5 of _0x1805c3){if(!_0x3b79a5[_0x36940b(0x216)]())continue;const _0x36f394=_0x3b79a5[_0x36940b(0x21f)]['toUpperC'+_0x36940b(0x219)]();if(_0x36f394===_0x36940b(0x1ec))_0x3463b6=_0x3b79a5['name'];else{if(_0x36f394===_0x36940b(0x1bb)+'D')_0x1baada=_0x3b79a5[_0x36940b(0x21f)];}}if(_0x3463b6===_0x36940b(0x1a2))return;const _0x3c48da=_0x3463b6??_0x1baada;if(!_0x3c48da)return;const _0xb7e023=join(_0x5c59e2,_0x3c48da);if(_0xb7e023!==_0x134de5)await rename(_0xb7e023,_0x134de5);}function _0x5ea4(_0x4d7e7f,_0x406aee){_0x4d7e7f=_0x4d7e7f-0x197;const _0x37e384=_0x37e3();let _0x5ea4e5=_0x37e384[_0x4d7e7f];return _0x5ea4e5;}async function moveDirectoryWithOverwrite(_0x3d58ba,_0x33e844){const _0x559a12=_0x5ea4;await mkdir(dirname(_0x33e844),{'recursive':!![]});try{await rename(_0x3d58ba,_0x33e844);return;}catch(_0x5a3c7d){if(_0x5a3c7d?.[_0x559a12(0x1e9)]!=='EXDEV')throw _0x5a3c7d;}await cp(_0x3d58ba,_0x33e844,{'recursive':!![],'force':!![]}),await rm(_0x3d58ba,{'recursive':!![],'force':!![]});}async function readManifestText(_0x12d732){const _0x5e49c1=_0x5ea4,_0x54f0a4=[join(_0x12d732,_0x5e49c1(0x1a2)),join(_0x12d732,'SKILLS.m'+'d')][_0x5e49c1(0x1fa)](_0x4b201c=>existsSync(_0x4b201c));if(!_0x54f0a4)return'';return await readFile(_0x54f0a4,_0x5e49c1(0x1dc))[_0x5e49c1(0x1bc)](()=>'');}function resolveFrontmatterValue(_0x1ade13,_0x5ee8fc){const _0x3552e2=_0x5ea4,_0x1cd4bc=_0x1ade13[_0x3552e2(0x201)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x69951=_0x1cd4bc?.[0x1]??'',_0x50fee5=_0x69951[_0x3552e2(0x201)](new RegExp(_0x3552e2(0x1c7)+_0x5ee8fc+(_0x3552e2(0x1cc)+'$'),'m'))?.[0x1];return getTrimmedString(_0x50fee5)[_0x3552e2(0x1da)](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x121363){const _0x5c6a72=_0x5ea4,_0x2d44b8=await readManifestText(_0x121363);if(!_0x2d44b8['trim']())return null;const _0x460b3b=_0x2d44b8[_0x5c6a72(0x201)](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x460b3b?.[0x1])return getTrimmedString(_0x460b3b[0x1]);return resolveFrontmatterValue(_0x2d44b8,_0x5c6a72(0x214))||resolveFrontmatterValue(_0x2d44b8,_0x5c6a72(0x21f));}async function resolveSkillVersionFromManifest(_0x504c79){const _0x55b998=_0x5ea4,_0x4f4843=await readManifestText(_0x504c79);if(!_0x4f4843[_0x55b998(0x1ef)]())return null;const _0x417106=_0x4f4843['match'](/"version"\s*:\s*"([^"]+)"/);if(_0x417106?.[0x1])return getTrimmedString(_0x417106[0x1]);return resolveFrontmatterValue(_0x4f4843,_0x55b998(0x1af));}async function collectSkillDirsUnderRoot(_0x54b568,_0x1d1f77,_0x2fc0da){const _0x2b4368=_0x5ea4;if(!existsSync(_0x54b568))return;for(const _0x542d25 of await readdir(_0x54b568,{'withFileTypes':!![]})[_0x2b4368(0x1bc)](()=>[])){if(!_0x542d25[_0x2b4368(0x1db)+'ory']())continue;const _0x467684=join(_0x54b568,_0x542d25['name']),_0x32b7ac=await resolveSkillKeyFromManifest(_0x467684);if(_0x32b7ac&&_0x1d1f77[_0x2b4368(0x197)](_0x32b7ac))_0x2fc0da['add'](_0x467684);}}async function removeSkillConfigEntries(_0x1ee41d,_0x1c65be){const _0x73dd7f=_0x5ea4,_0x52e34f=new Set(_0x1c65be[_0x73dd7f(0x1a5)](getTrimmedString)[_0x73dd7f(0x20a)](Boolean));if(_0x52e34f[_0x73dd7f(0x210)]===0x0)return;const _0x405504=await _0x1ee41d[_0x73dd7f(0x207)+'ig']()[_0x73dd7f(0x1bc)](()=>({})),_0x2dc2a8=asRecord(_0x405504[_0x73dd7f(0x1c1)]),_0x1452f7={...asRecord(_0x2dc2a8[_0x73dd7f(0x208)])};let _0x113977=![];for(const _0x50cfae of _0x52e34f){Object[_0x73dd7f(0x1ad)+'e'][_0x73dd7f(0x1a0)+'operty']['call'](_0x1452f7,_0x50cfae)&&(delete _0x1452f7[_0x50cfae],_0x113977=!![]);}if(!_0x113977)return;_0x2dc2a8['entries']=_0x1452f7,_0x405504[_0x73dd7f(0x1c1)]=_0x2dc2a8,_0x1ee41d[_0x73dd7f(0x1cb)+_0x73dd7f(0x1ce)+_0x73dd7f(0x1e4)+_0x73dd7f(0x220)]?.(),await _0x1ee41d[_0x73dd7f(0x204)+_0x73dd7f(0x19e)]?.(_0x405504,_0x73dd7f(0x1d9)+_0x73dd7f(0x226)+_0x73dd7f(0x1a1)+_0x73dd7f(0x227)+_0x73dd7f(0x1c9)+_0x73dd7f(0x1a4)+_0x73dd7f(0x1bf));}export async function deleteManagedSkill({payload:payload={},gateway:_0x4938e9,configController:_0x2284d5}){const _0x46a16a=_0x5ea4,_0x19dd98=asRecord(payload),_0x5d087d=getTrimmedString(_0x19dd98[_0x46a16a(0x214)]??_0x19dd98[_0x46a16a(0x21f)]);if(!_0x5d087d)throw new Error(_0x46a16a(0x1ee)+_0x46a16a(0x1e1)+_0x46a16a(0x1f2));const _0x4c8bb4=await _0x4938e9[_0x46a16a(0x1c1)][_0x46a16a(0x212)]()[_0x46a16a(0x1bc)](()=>({'skills':[]})),_0x32de8a=Array['isArray'](asRecord(_0x4c8bb4)[_0x46a16a(0x1c1)])?asRecord(_0x4c8bb4)[_0x46a16a(0x1c1)]:[],_0x4f8bc2=_0x32de8a[_0x46a16a(0x1a5)](asRecord)[_0x46a16a(0x1fa)](_0x278044=>{const _0x3b7f62=_0x46a16a;return getTrimmedString(_0x278044[_0x3b7f62(0x214)])===_0x5d087d||getTrimmedString(_0x278044[_0x3b7f62(0x1d7)+_0x3b7f62(0x19a)])===_0x5d087d||getTrimmedString(_0x278044[_0x3b7f62(0x21f)])===_0x5d087d;});if(!_0x4f8bc2)throw new Error('技能不存在或已移'+'除');if(_0x4f8bc2[_0x46a16a(0x1b8)])throw new Error(_0x46a16a(0x21e));if(_0x4f8bc2[_0x46a16a(0x19f)]||_0x4f8bc2['source']===_0x46a16a(0x203)+_0x46a16a(0x1b6)||_0x4f8bc2[_0x46a16a(0x1dd)]==='openclaw'+_0x46a16a(0x228))throw new Error(_0x46a16a(0x1c4)+_0x46a16a(0x19b));if(!_0x4f8bc2[_0x46a16a(0x1b5)])throw new Error(_0x46a16a(0x1a6)+'删除');const _0x31eebd=getTrimmedString(_0x4f8bc2[_0x46a16a(0x1d7)+_0x46a16a(0x19a)])||_0x5d087d,_0x1278e9=new Set([_0x5d087d,_0x31eebd,getTrimmedString(_0x4f8bc2['name'])]['filter'](Boolean)),_0x24c0de=new Set([join(_0x2284d5[_0x46a16a(0x1a8)+_0x46a16a(0x1f7)](),_0x46a16a(0x1c1)),join(_0x2284d5[_0x46a16a(0x1a8)+'tateDir'](),_0x46a16a(0x1c5)+'e',_0x46a16a(0x1c1))]),_0x39b1c1=new Set();for(const _0x1e3f82 of _0x24c0de)await collectSkillDirsUnderRoot(_0x1e3f82,_0x1278e9,_0x39b1c1);if(_0x39b1c1[_0x46a16a(0x210)]===0x0)throw new Error(_0x46a16a(0x1be)+'盘上的目录,可能'+_0x46a16a(0x1c3)+_0x46a16a(0x1c2)+_0x46a16a(0x21a));for(const _0x214265 of _0x39b1c1)await rm(_0x214265,{'recursive':!![],'force':!![]});return await removeSkillConfigEntries(_0x2284d5,[..._0x1278e9]),{'ok':!![],'skillKey':_0x5d087d};}export async function updateManagedSkillConfig({payload:payload={},configController:_0x445200}){const _0x30a868=_0x5ea4,_0x552ea1=asRecord(payload),_0x23762e=getTrimmedString(_0x552ea1[_0x30a868(0x214)]??_0x552ea1[_0x30a868(0x21f)]);if(!_0x23762e)throw new Error(_0x30a868(0x1ee)+_0x30a868(0x1e1)+_0x30a868(0x1f2));const _0x3db957=await _0x445200[_0x30a868(0x207)+'ig']()[_0x30a868(0x1bc)](()=>({})),_0x22d3bb=asRecord(_0x3db957[_0x30a868(0x1c1)]),_0x26a51c={...asRecord(_0x22d3bb[_0x30a868(0x208)])},_0x44cf02=asRecord(_0x26a51c[_0x23762e]),_0x4ad557={..._0x44cf02};typeof _0x552ea1[_0x30a868(0x1f9)]==='boolean'&&(_0x4ad557['enabled']=_0x552ea1[_0x30a868(0x1f9)]);const _0x2825ae={...asRecord(_0x552ea1[_0x30a868(0x1b7)])},_0x59c5bd=getTrimmedString(_0x552ea1[_0x30a868(0x20b)]);if(_0x59c5bd)_0x2825ae['apiKey']=_0x59c5bd;Object[_0x30a868(0x1bd)](_0x2825ae)['length']>0x0&&(_0x4ad557[_0x30a868(0x1b7)]={...asRecord(_0x44cf02[_0x30a868(0x1b7)]),..._0x2825ae});const _0x5e2251=asRecord(_0x552ea1['config']);return Object[_0x30a868(0x1bd)](_0x5e2251)[_0x30a868(0x1e2)]>0x0&&(_0x4ad557[_0x30a868(0x211)]={...asRecord(_0x44cf02[_0x30a868(0x211)]),..._0x5e2251}),_0x26a51c[_0x23762e]=_0x4ad557,_0x22d3bb[_0x30a868(0x208)]=_0x26a51c,_0x3db957[_0x30a868(0x1c1)]=_0x22d3bb,_0x445200[_0x30a868(0x1cb)+'igWriteH'+_0x30a868(0x1e4)+_0x30a868(0x220)]?.(),await _0x445200[_0x30a868(0x204)+_0x30a868(0x19e)]?.(_0x3db957,'skill\x20co'+_0x30a868(0x199)+_0x30a868(0x209)+_0x30a868(0x1c9)+_0x30a868(0x1a4)+_0x30a868(0x1bf)),{'ok':!![],'skillKey':_0x23762e};}async function ensureManagedSkillsConfig(_0x415398,_0x4aa27d=[]){const _0x5ec51b=_0x5ea4,_0x8534f1=await _0x415398[_0x5ec51b(0x207)+'ig']()[_0x5ec51b(0x1bc)](()=>({})),_0x47d514=asRecord(_0x8534f1['skills']),_0x1be20e=asRecord(_0x47d514[_0x5ec51b(0x229)]),_0xd37cce=Array[_0x5ec51b(0x1d1)](_0x1be20e[_0x5ec51b(0x1f0)+'s'])?_0x1be20e[_0x5ec51b(0x1f0)+'s']:[],_0x32b662=join(_0x415398[_0x5ec51b(0x1a8)+_0x5ec51b(0x1f7)](),_0x5ec51b(0x1c1)),_0x2ee634=dedupeStrings([..._0xd37cce,_0x32b662]),_0x57078b={...asRecord(_0x47d514[_0x5ec51b(0x208)])};let _0x941f07=JSON[_0x5ec51b(0x1fb)+'y'](_0xd37cce)!==JSON[_0x5ec51b(0x1fb)+'y'](_0x2ee634);for(const _0x236bc4 of _0x4aa27d[_0x5ec51b(0x1a5)](getTrimmedString)[_0x5ec51b(0x20a)](Boolean)){if(Object[_0x5ec51b(0x1ad)+'e'][_0x5ec51b(0x1a0)+'operty'][_0x5ec51b(0x1a9)](_0x57078b,_0x236bc4))continue;_0x57078b[_0x236bc4]={'enabled':!![]},_0x941f07=!![];}if(!_0x941f07)return;_0x1be20e['extraDir'+'s']=_0x2ee634,_0x47d514['load']=_0x1be20e,_0x47d514[_0x5ec51b(0x208)]=_0x57078b,_0x8534f1[_0x5ec51b(0x1c1)]=_0x47d514,_0x415398['markConf'+_0x5ec51b(0x1ce)+'andledIn'+_0x5ec51b(0x220)]?.(),await _0x415398[_0x5ec51b(0x204)+_0x5ec51b(0x19e)]?.(_0x8534f1,_0x5ec51b(0x1e8)+'skills\x20c'+'onfig\x20en'+_0x5ec51b(0x1a7)+_0x5ec51b(0x1ca)+'teway\x20re'+_0x5ec51b(0x1ea));}export async function syncManagedSkillsToConfig(_0xbfc62f){const _0x4eb1c6=_0x5ea4,_0x7f1932=join(_0xbfc62f['resolveS'+_0x4eb1c6(0x1f7)](),_0x4eb1c6(0x1c1)),_0xace59f=[];for(const _0x180f90 of await readdir(_0x7f1932,{'withFileTypes':!![]})[_0x4eb1c6(0x1bc)](()=>[])){if(!_0x180f90['isDirect'+'ory']())continue;const _0x39bd52=await resolveSkillKeyFromManifest(join(_0x7f1932,_0x180f90[_0x4eb1c6(0x21f)]));if(_0x39bd52)_0xace59f[_0x4eb1c6(0x1a3)](_0x39bd52);}return await ensureManagedSkillsConfig(_0xbfc62f,_0xace59f),{'skillKeys':_0xace59f};}async function resolveZipPath({payload:_0x254bf3,app:_0x2f419b,dialog:_0x102a30,dialogWindow:_0x1c8f12}){const _0x4e4ffb=_0x5ea4,_0x2ba65c=getTrimmedString(_0x254bf3[_0x4e4ffb(0x224)]);let _0x494808=getTrimmedString(_0x254bf3['selected'+_0x4e4ffb(0x1e7)]),_0x58a756=null;if(!_0x494808&&_0x2ba65c){const _0x16cbc9=new URL(_0x2ba65c);_0x58a756=await mkdtemp(join(_0x2f419b[_0x4e4ffb(0x1e6)](_0x4e4ffb(0x20f)),_0x4e4ffb(0x1f4)+'ill-down'+_0x4e4ffb(0x1cf))),_0x494808=join(_0x58a756,basename(_0x16cbc9[_0x4e4ffb(0x1d6)])||_0x4e4ffb(0x1f5)+_0x4e4ffb(0x19c)+'.zip');const _0x3f9a82=await fetch(_0x16cbc9[_0x4e4ffb(0x225)]());if(!_0x3f9a82['ok'])throw new Error(_0x4e4ffb(0x21d)+'\x20失败(HTTP'+'\x20'+_0x3f9a82['status']+')');await writeFile(_0x494808,Buffer['from'](await _0x3f9a82[_0x4e4ffb(0x19d)+_0x4e4ffb(0x1d8)]()));}if(!_0x494808){const _0x3b1cb5={'title':_0x4e4ffb(0x1f1),'properties':[_0x4e4ffb(0x1d0)],'filters':[{'name':_0x4e4ffb(0x1b4)+'ive','extensions':[_0x4e4ffb(0x1f8)]}]},_0x1a70cb=_0x1c8f12?await _0x102a30[_0x4e4ffb(0x1fd)+_0x4e4ffb(0x1b9)](_0x1c8f12,_0x3b1cb5):await _0x102a30[_0x4e4ffb(0x1fd)+_0x4e4ffb(0x1b9)](_0x3b1cb5);if(_0x1a70cb[_0x4e4ffb(0x1ff)]||_0x1a70cb[_0x4e4ffb(0x1d3)+'s'][_0x4e4ffb(0x1e2)]===0x0)return{'cancelled':!![],'zipPath':null,'downloadedZipDir':_0x58a756};_0x494808=_0x1a70cb[_0x4e4ffb(0x1d3)+'s'][0x0];}return{'cancelled':![],'zipPath':_0x494808,'downloadedZipDir':_0x58a756};}export async function importSkillZip({payload:payload={},app:_0x509e37,dialog:_0x2bf78a,dialogWindow:_0x532311,configController:_0x78de02}){const _0x32c88e=_0x5ea4,_0x9d0d73=asRecord(payload),_0x5d62ec=getTrimmedString(_0x9d0d73['zipUrl']),{cancelled:_0x113643,zipPath:_0x26ce3b,downloadedZipDir:_0x4764ce}=await resolveZipPath({'payload':_0x9d0d73,'app':_0x509e37,'dialog':_0x2bf78a,'dialogWindow':_0x532311});if(_0x113643)return{'cancelled':!![],'imported':![],'overwritten':![],'skillDirName':null,'selectedZipPath':null,'zipUrl':_0x5d62ec||null,'message':_0x32c88e(0x21b)};const _0x1e3fca=await mkdtemp(join(_0x509e37[_0x32c88e(0x1e6)](_0x32c88e(0x20f)),_0x32c88e(0x1f4)+_0x32c88e(0x213)+_0x32c88e(0x20e))),_0x2f4007=join(_0x1e3fca,_0x32c88e(0x1b1)+'d');try{await mkdir(_0x2f4007,{'recursive':!![]}),await extractZipToDirectory(_0x26ce3b,_0x2f4007);const _0xff555f=await findSkillManifestDirectories(_0x2f4007);if(_0xff555f[_0x32c88e(0x1e2)]===0x0)throw new Error(_0x32c88e(0x1aa)+'\x20SKILL.m'+_0x32c88e(0x1d5)+_0x32c88e(0x200));if(_0xff555f[_0x32c88e(0x1e2)]>0x1)throw new Error(_0x32c88e(0x215)+_0x32c88e(0x218)+_0x32c88e(0x22a)+_0x32c88e(0x1c6));const _0x2b5fbc=_0xff555f[0x0];await normalizeImportedSkillManifest(_0x2b5fbc);const _0x35c4f7=basename(_0x2b5fbc),_0x23e356=parse(_0x26ce3b)[_0x32c88e(0x21f)][_0x32c88e(0x1ef)]()||'imported'+_0x32c88e(0x1e0),_0x12e4eb=_0x35c4f7===_0x32c88e(0x1b1)+'d'?_0x23e356:_0x35c4f7,_0x39544f=await resolveSkillKeyFromManifest(_0x2b5fbc)??_0x12e4eb,_0x2ad14a=await resolveSkillVersionFromManifest(_0x2b5fbc)??(getTrimmedString(_0x9d0d73[_0x32c88e(0x1af)])||extractVersionFromZipUrl(_0x5d62ec)),_0x39785f=buildManagedSkillDirectoryName(_0x39544f,_0x2ad14a,_0x12e4eb),_0x879b71=join(_0x78de02[_0x32c88e(0x1a8)+'tateDir'](),'skills'),_0x30bcfd=join(_0x879b71,_0x39785f);if(existsSync(_0x30bcfd)){if(_0x9d0d73[_0x32c88e(0x221)+'e']!==!![])return{'cancelled':![],'imported':![],'overwritten':![],'needConfirmOverwrite':!![],'skillDirName':_0x39785f,'overwriteTargetPath':_0x30bcfd,'selectedZipPath':_0x26ce3b,'zipUrl':_0x5d62ec||null,'message':_0x32c88e(0x1fe)+_0x39785f+(_0x32c88e(0x20d)+_0x32c88e(0x1ac))};await rm(_0x30bcfd,{'recursive':!![],'force':!![]});}let _0x3118e5=_0x2b5fbc;return _0x35c4f7===_0x32c88e(0x1b1)+'d'&&(_0x3118e5=join(_0x1e3fca,_0x39785f),await rename(_0x2b5fbc,_0x3118e5)),await moveDirectoryWithOverwrite(_0x3118e5,_0x30bcfd),await ensureManagedSkillsConfig(_0x78de02,[_0x39544f]),{'cancelled':![],'imported':!![],'overwritten':_0x9d0d73[_0x32c88e(0x221)+'e']===!![],'skillKey':_0x39544f,'manifestKey':_0x39544f,'skillDirName':_0x39785f,'targetPath':_0x30bcfd,'selectedZipPath':_0x26ce3b,'zipUrl':_0x5d62ec||null,'message':_0x39785f+'\x20添加成功'};}finally{await rm(_0x1e3fca,{'recursive':!![],'force':!![]});if(_0x4764ce)await rm(_0x4764ce,{'recursive':!![],'force':!![]});}}
|
|
1
|
+
(function(_0xe4010a,_0x3c5ae9){const _0x265218=_0x3671,_0x5cd41b=_0xe4010a();while(!![]){try{const _0x41c25a=parseInt(_0x265218(0x1a8))/0x1+-parseInt(_0x265218(0x174))/0x2+parseInt(_0x265218(0x1f5))/0x3*(parseInt(_0x265218(0x1b0))/0x4)+parseInt(_0x265218(0x1a4))/0x5*(parseInt(_0x265218(0x17b))/0x6)+-parseInt(_0x265218(0x1bb))/0x7*(-parseInt(_0x265218(0x1a0))/0x8)+parseInt(_0x265218(0x1dc))/0x9*(parseInt(_0x265218(0x1b9))/0xa)+-parseInt(_0x265218(0x192))/0xb;if(_0x41c25a===_0x3c5ae9)break;else _0x5cd41b['push'](_0x5cd41b['shift']());}catch(_0xa45d30){_0x5cd41b['push'](_0x5cd41b['shift']());}}}(_0x2d87,0x745da));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(_0x4d12f8){const _0x7faa13=_0x3671;let _0x453c37=getTrimmedString(_0x4d12f8)[_0x7faa13(0x1c4)](/[<>:"/\\|?*\u0000-\u001f]/g,'-');return _0x453c37=_0x453c37[_0x7faa13(0x1c4)](/-+/g,'-')['replace'](/^[-.]+|[-.]+$/g,''),_0x453c37['slice'](0x0,0x78);}function buildManagedSkillDirectoryName(_0x1f39d9,_0x56fb8c,_0x51e07d){const _0x28d1df=_0x3671,_0xb128c0=sanitizeManagedSkillDirSegment(_0x1f39d9)||sanitizeManagedSkillDirSegment(_0x51e07d)||'imported'+_0x28d1df(0x172),_0x23a069=sanitizeManagedSkillDirSegment(_0x56fb8c),_0x294584=_0x23a069?_0xb128c0+'-'+_0x23a069:_0xb128c0;return _0x294584[_0x28d1df(0x1df)](0x0,0xc8)||_0x28d1df(0x1a9)+_0x28d1df(0x172);}function extractVersionFromZipUrl(_0x3d59a2){const _0x17eed7=_0x3671;if(!getTrimmedString(_0x3d59a2))return null;try{const _0x1e5b71=basename(new URL(_0x3d59a2)[_0x17eed7(0x1e8)]),_0x5e0753=_0x1e5b71[_0x17eed7(0x1c4)](/\.zip$/i,'');return _0x5e0753[_0x17eed7(0x1ec)](/(?:^|[-_v])(\d+\.\d+\.\d+(?:[-+][\w.-]+)?)(?:$|[-_])/i)?.[0x1]??null;}catch{return null;}}async function extractZipToDirectory(_0x2e1c12,_0x186df9){await new Promise((_0x1c96ba,_0x4e78b0)=>{const _0x597f0e=_0x3671;let _0x167de7;if(process[_0x597f0e(0x1a6)]===_0x597f0e(0x1cb)){const _0x9ee01b=_0x2e1c12[_0x597f0e(0x1c4)](/'/g,'\x27\x27'),_0x43a3d8=_0x186df9['replace'](/'/g,'\x27\x27');_0x167de7=execFile(_0x597f0e(0x195)+'ll.exe',['-NoProfi'+'le',_0x597f0e(0x17e)+_0x597f0e(0x19e),'-Command',_0x597f0e(0x1c8)+_0x597f0e(0x1b7)+_0x597f0e(0x1ca)+'ath\x20\x27'+_0x9ee01b+('\x27\x20-Desti'+_0x597f0e(0x189)+'th\x20\x27')+_0x43a3d8+_0x597f0e(0x1ab)],_0x3c6f79=>_0x3c6f79?_0x4e78b0(_0x3c6f79):_0x1c96ba());}else _0x167de7=execFile(_0x597f0e(0x170),['-q',_0x2e1c12,'-d',_0x186df9],_0x5e2ef3=>_0x5e2ef3?_0x4e78b0(_0x5e2ef3):_0x1c96ba());_0x167de7['on'](_0x597f0e(0x1f6),_0x4e78b0);});}async function findSkillManifestDirectories(_0x1effd5){const _0x37d5d3=[];async function _0x51aeb8(_0x5a659c){const _0x42c248=_0x3671,_0x55be65=await readdir(_0x5a659c,{'withFileTypes':!![]}),_0x54f0cd=new Set(_0x55be65[_0x42c248(0x191)](_0x46c84f=>_0x46c84f[_0x42c248(0x1e5)][_0x42c248(0x1bf)+_0x42c248(0x19a)]()));if(_0x54f0cd[_0x42c248(0x1ef)](_0x42c248(0x18c))||_0x54f0cd[_0x42c248(0x1ef)]('SKILLS.M'+'D')){_0x37d5d3[_0x42c248(0x1e9)](_0x5a659c);return;}for(const _0x2451ae of _0x55be65){if(!_0x2451ae[_0x42c248(0x171)+_0x42c248(0x1a1)]()||_0x2451ae['name']===_0x42c248(0x1ad)||_0x2451ae[_0x42c248(0x1e5)][_0x42c248(0x1b1)+'th']('.'))continue;await _0x51aeb8(join(_0x5a659c,_0x2451ae[_0x42c248(0x1e5)]));}}return await _0x51aeb8(_0x1effd5),_0x37d5d3;}function _0x3671(_0x5802fd,_0x4aace0){_0x5802fd=_0x5802fd-0x16f;const _0x2d875b=_0x2d87();let _0x3671ec=_0x2d875b[_0x5802fd];return _0x3671ec;}async function normalizeImportedSkillManifest(_0x459aec){const _0x119fb0=_0x3671,_0x288b8e=join(_0x459aec,_0x119fb0(0x1ce)),_0x33f6ab=await readdir(_0x459aec,{'withFileTypes':!![]})['catch'](()=>[]);let _0x1ee147=null,_0x188b7b=null;for(const _0x175de7 of _0x33f6ab){if(!_0x175de7['isFile']())continue;const _0x6a442f=_0x175de7[_0x119fb0(0x1e5)][_0x119fb0(0x1bf)+_0x119fb0(0x19a)]();if(_0x6a442f===_0x119fb0(0x18c))_0x1ee147=_0x175de7[_0x119fb0(0x1e5)];else{if(_0x6a442f===_0x119fb0(0x1f8)+'D')_0x188b7b=_0x175de7[_0x119fb0(0x1e5)];}}if(_0x1ee147===_0x119fb0(0x1ce))return;const _0x4cd227=_0x1ee147??_0x188b7b;if(!_0x4cd227)return;const _0x2d15ad=join(_0x459aec,_0x4cd227);if(_0x2d15ad!==_0x288b8e)await rename(_0x2d15ad,_0x288b8e);}async function moveDirectoryWithOverwrite(_0x3ef153,_0x2974c6){const _0x41062a=_0x3671;await mkdir(dirname(_0x2974c6),{'recursive':!![]});try{await rename(_0x3ef153,_0x2974c6);return;}catch(_0x551bd7){if(_0x551bd7?.[_0x41062a(0x184)]!=='EXDEV')throw _0x551bd7;}await cp(_0x3ef153,_0x2974c6,{'recursive':!![],'force':!![]}),await rm(_0x3ef153,{'recursive':!![],'force':!![]});}async function readManifestText(_0x4c5cb3){const _0x4ac765=_0x3671,_0x44923e=[join(_0x4c5cb3,_0x4ac765(0x1ce)),join(_0x4c5cb3,_0x4ac765(0x1c2)+'d')][_0x4ac765(0x188)](_0x28ab18=>existsSync(_0x28ab18));if(!_0x44923e)return'';return await readFile(_0x44923e,'utf8')[_0x4ac765(0x197)](()=>'');}function _0x2d87(){const _0x2b0922=['keys','ill-down','powershe','arrayBuf','catch','skill\x20co','hasOwnPr','ase','ive','stringif','size','ractive','法删除','8Xkfoxr','ory','start','LS.md','1957215XlICho','getPath','platform','个\x20skill\x20','2637zEWpcU','imported','y\x20is\x20req','\x27\x20-Force','能导入一个','__MACOSX','trim','filter','28vrUjWN','startsWi','from','version','sured\x20wi','overwrit','技能目录\x22','rchive\x20-','位于自定义\x20sk','10QwTMoR','未找到该技能在磁','3806509NqfKDA','openFile','resolveS','nfig\x20ent','toUpperC','load','ZIP\x20中包含多','SKILLS.m','是否覆盖','replace','hout\x20gat','canceled','skillKey','Expand-A','onfig\x20en','LiteralP','win32','fig','目录,当前一次只','SKILL.md','isArray','prototyp','\x20SKILL.m','skills','tateDir','disabled','markConf','extracte','gatewayS','\x20添加成功','apiKey','showOpen','盘上的目录,可能','3612339onDrwl','teway\x20re','toString','slice','内置/扩展技能无','operty','Dialog','igWriteH','andledIn','name','Skill\x20ke','导入技能\x20ZIP','pathname','push','readConf','wujie-sk','match','filePath','ed-skill','has',':\x5cs*(.+)','length','enabled','boolean','always','171069iVkRzj','error','selected','SKILLS.M','temp','该技能不允许删除','env','unzip','isDirect','-skill','zipUrl','602844igNfdS','skills\x20c','bundled','extraDir','rt-','eway\x20res','ternally','12sxqHut','managed\x20','ZIP\x20中未找到','-NonInte','已取消导入','ZipPath','nfig\x20upd','\x22已存在,请确认','entries','code','\x20失败(HTTP','writeCon','tart','find','nationPa','oved\x20wit','-extra','SKILL.MD','ills\x20路径,','config','killKey','call','map','14869646fCPSaK'];_0x2d87=function(){return _0x2b0922;};return _0x2d87();}function resolveFrontmatterValue(_0x2587c5,_0x1c0c01){const _0x20aa7a=_0x3671,_0x234838=_0x2587c5[_0x20aa7a(0x1ec)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x5aec24=_0x234838?.[0x1]??'',_0x11c2f1=_0x5aec24[_0x20aa7a(0x1ec)](new RegExp('^\x5cs*'+_0x1c0c01+(_0x20aa7a(0x1f0)+'$'),'m'))?.[0x1];return getTrimmedString(_0x11c2f1)[_0x20aa7a(0x1c4)](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x1037d3){const _0x3b18ce=_0x3671,_0x405a00=await readManifestText(_0x1037d3);if(!_0x405a00[_0x3b18ce(0x1ae)]())return null;const _0x267faa=_0x405a00[_0x3b18ce(0x1ec)](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x267faa?.[0x1])return getTrimmedString(_0x267faa[0x1]);return resolveFrontmatterValue(_0x405a00,_0x3b18ce(0x1c7))||resolveFrontmatterValue(_0x405a00,_0x3b18ce(0x1e5));}async function resolveSkillVersionFromManifest(_0x574300){const _0x27abd1=_0x3671,_0x23ae89=await readManifestText(_0x574300);if(!_0x23ae89['trim']())return null;const _0x247c28=_0x23ae89['match'](/"version"\s*:\s*"([^"]+)"/);if(_0x247c28?.[0x1])return getTrimmedString(_0x247c28[0x1]);return resolveFrontmatterValue(_0x23ae89,_0x27abd1(0x1b3));}async function collectSkillDirsUnderRoot(_0x390467,_0x24c314,_0x4eebeb){const _0x21b2b0=_0x3671;if(!existsSync(_0x390467))return;for(const _0x1aa3c0 of await readdir(_0x390467,{'withFileTypes':!![]})[_0x21b2b0(0x197)](()=>[])){if(!_0x1aa3c0[_0x21b2b0(0x171)+_0x21b2b0(0x1a1)]())continue;const _0x2b70d2=join(_0x390467,_0x1aa3c0[_0x21b2b0(0x1e5)]),_0x24fe11=await resolveSkillKeyFromManifest(_0x2b70d2);if(_0x24fe11&&_0x24c314[_0x21b2b0(0x1ef)](_0x24fe11))_0x4eebeb['add'](_0x2b70d2);}}async function removeSkillConfigEntries(_0xac0b50,_0x39c5d4){const _0x5c4510=_0x3671,_0x3d8a40=new Set(_0x39c5d4[_0x5c4510(0x191)](getTrimmedString)[_0x5c4510(0x1af)](Boolean));if(_0x3d8a40[_0x5c4510(0x19d)]===0x0)return;const _0x59aecb=await _0xac0b50[_0x5c4510(0x1ea)+'ig']()[_0x5c4510(0x197)](()=>({})),_0x135cf2=asRecord(_0x59aecb[_0x5c4510(0x1d2)]),_0x78e7b8={...asRecord(_0x135cf2[_0x5c4510(0x183)])};let _0x745708=![];for(const _0x351d2c of _0x3d8a40){Object[_0x5c4510(0x1d0)+'e'][_0x5c4510(0x199)+'operty'][_0x5c4510(0x190)](_0x78e7b8,_0x351d2c)&&(delete _0x78e7b8[_0x351d2c],_0x745708=!![]);}if(!_0x745708)return;_0x135cf2[_0x5c4510(0x183)]=_0x78e7b8,_0x59aecb[_0x5c4510(0x1d2)]=_0x135cf2,_0xac0b50[_0x5c4510(0x1d5)+'igWriteH'+_0x5c4510(0x1e4)+_0x5c4510(0x17a)]?.(),await _0xac0b50['writeCon'+_0x5c4510(0x1cc)]?.(_0x59aecb,'skill\x20co'+_0x5c4510(0x1be)+'ries\x20rem'+_0x5c4510(0x18a)+_0x5c4510(0x1c5)+_0x5c4510(0x179)+_0x5c4510(0x187));}export async function deleteManagedSkill({payload:payload={},gateway:_0x39fdee,configController:_0x1887c4}){const _0x3bbdaa=_0x3671,_0x3c1931=asRecord(payload),_0x2090a8=getTrimmedString(_0x3c1931[_0x3bbdaa(0x1c7)]??_0x3c1931[_0x3bbdaa(0x1e5)]);if(!_0x2090a8)throw new Error(_0x3bbdaa(0x1e6)+_0x3bbdaa(0x1aa)+'uired');const _0x59b101=await _0x39fdee['skills']['status']()['catch'](()=>({'skills':[]})),_0x2e7b43=Array[_0x3bbdaa(0x1cf)](asRecord(_0x59b101)[_0x3bbdaa(0x1d2)])?asRecord(_0x59b101)['skills']:[],_0x576c60=_0x2e7b43['map'](asRecord)[_0x3bbdaa(0x188)](_0x3cd399=>{const _0x36f0c2=_0x3bbdaa;return getTrimmedString(_0x3cd399[_0x36f0c2(0x1c7)])===_0x2090a8||getTrimmedString(_0x3cd399[_0x36f0c2(0x1d7)+_0x36f0c2(0x18f)])===_0x2090a8||getTrimmedString(_0x3cd399[_0x36f0c2(0x1e5)])===_0x2090a8;});if(!_0x576c60)throw new Error('技能不存在或已移'+'除');if(_0x576c60[_0x3bbdaa(0x1f4)])throw new Error(_0x3bbdaa(0x1fa));if(_0x576c60[_0x3bbdaa(0x176)]||_0x576c60['source']==='openclaw'+'-bundled'||_0x576c60['source']==='openclaw'+_0x3bbdaa(0x18b))throw new Error(_0x3bbdaa(0x1e0)+_0x3bbdaa(0x19f));if(!_0x576c60[_0x3bbdaa(0x1d4)])throw new Error('请先关闭技能后再'+'删除');const _0x37ffa0=getTrimmedString(_0x576c60[_0x3bbdaa(0x1d7)+_0x3bbdaa(0x18f)])||_0x2090a8,_0x348129=new Set([_0x2090a8,_0x37ffa0,getTrimmedString(_0x576c60['name'])][_0x3bbdaa(0x1af)](Boolean)),_0x94bf6b=new Set([join(_0x1887c4[_0x3bbdaa(0x1bd)+_0x3bbdaa(0x1d3)](),_0x3bbdaa(0x1d2)),join(_0x1887c4[_0x3bbdaa(0x1bd)+_0x3bbdaa(0x1d3)](),'workspac'+'e','skills')]),_0x395b8b=new Set();for(const _0x11803d of _0x94bf6b)await collectSkillDirsUnderRoot(_0x11803d,_0x348129,_0x395b8b);if(_0x395b8b[_0x3bbdaa(0x19d)]===0x0)throw new Error(_0x3bbdaa(0x1ba)+_0x3bbdaa(0x1db)+_0x3bbdaa(0x1b8)+_0x3bbdaa(0x18d)+'请手动删除');for(const _0x352fee of _0x395b8b)await rm(_0x352fee,{'recursive':!![],'force':!![]});return await removeSkillConfigEntries(_0x1887c4,[..._0x348129]),{'ok':!![],'skillKey':_0x2090a8};}export async function updateManagedSkillConfig({payload:payload={},configController:_0x25ba92}){const _0x287bb0=_0x3671,_0x8b44ba=asRecord(payload),_0xf3b935=getTrimmedString(_0x8b44ba[_0x287bb0(0x1c7)]??_0x8b44ba[_0x287bb0(0x1e5)]);if(!_0xf3b935)throw new Error(_0x287bb0(0x1e6)+_0x287bb0(0x1aa)+'uired');const _0x3855f9=await _0x25ba92[_0x287bb0(0x1ea)+'ig']()[_0x287bb0(0x197)](()=>({})),_0x41ae25=asRecord(_0x3855f9[_0x287bb0(0x1d2)]),_0x289397={...asRecord(_0x41ae25['entries'])},_0x276c61=asRecord(_0x289397[_0xf3b935]),_0x1b552a={..._0x276c61};typeof _0x8b44ba[_0x287bb0(0x1f2)]===_0x287bb0(0x1f3)&&(_0x1b552a[_0x287bb0(0x1f2)]=_0x8b44ba[_0x287bb0(0x1f2)]);const _0x2fcdb9={...asRecord(_0x8b44ba[_0x287bb0(0x16f)])},_0x2c7d1b=getTrimmedString(_0x8b44ba[_0x287bb0(0x1d9)]);if(_0x2c7d1b)_0x2fcdb9[_0x287bb0(0x1d9)]=_0x2c7d1b;Object[_0x287bb0(0x193)](_0x2fcdb9)[_0x287bb0(0x1f1)]>0x0&&(_0x1b552a['env']={...asRecord(_0x276c61[_0x287bb0(0x16f)]),..._0x2fcdb9});const _0x5413cb=asRecord(_0x8b44ba[_0x287bb0(0x18e)]);return Object[_0x287bb0(0x193)](_0x5413cb)[_0x287bb0(0x1f1)]>0x0&&(_0x1b552a[_0x287bb0(0x18e)]={...asRecord(_0x276c61[_0x287bb0(0x18e)]),..._0x5413cb}),_0x289397[_0xf3b935]=_0x1b552a,_0x41ae25[_0x287bb0(0x183)]=_0x289397,_0x3855f9[_0x287bb0(0x1d2)]=_0x41ae25,_0x25ba92[_0x287bb0(0x1d5)+_0x287bb0(0x1e3)+'andledIn'+_0x287bb0(0x17a)]?.(),await _0x25ba92['writeCon'+'fig']?.(_0x3855f9,_0x287bb0(0x198)+_0x287bb0(0x181)+'ated\x20wit'+_0x287bb0(0x1c5)+_0x287bb0(0x179)+_0x287bb0(0x187)),{'ok':!![],'skillKey':_0xf3b935};}async function ensureManagedSkillsConfig(_0x3ae5c0,_0x595209=[]){const _0x4a7c17=_0x3671,_0x20eadc=await _0x3ae5c0[_0x4a7c17(0x1ea)+'ig']()['catch'](()=>({})),_0x2940aa=asRecord(_0x20eadc[_0x4a7c17(0x1d2)]),_0x110b99=asRecord(_0x2940aa[_0x4a7c17(0x1c0)]),_0x1c0b13=Array['isArray'](_0x110b99['extraDir'+'s'])?_0x110b99[_0x4a7c17(0x177)+'s']:[],_0x517df5=join(_0x3ae5c0[_0x4a7c17(0x1bd)+_0x4a7c17(0x1d3)](),_0x4a7c17(0x1d2)),_0x59f49b=dedupeStrings([..._0x1c0b13,_0x517df5]),_0x3c91b7={...asRecord(_0x2940aa[_0x4a7c17(0x183)])};let _0x32a267=JSON['stringif'+'y'](_0x1c0b13)!==JSON[_0x4a7c17(0x19c)+'y'](_0x59f49b);for(const _0x2ae100 of _0x595209[_0x4a7c17(0x191)](getTrimmedString)[_0x4a7c17(0x1af)](Boolean)){if(Object['prototyp'+'e'][_0x4a7c17(0x199)+_0x4a7c17(0x1e1)]['call'](_0x3c91b7,_0x2ae100))continue;_0x3c91b7[_0x2ae100]={'enabled':!![]},_0x32a267=!![];}if(!_0x32a267)return;_0x110b99[_0x4a7c17(0x177)+'s']=_0x59f49b,_0x2940aa['load']=_0x110b99,_0x2940aa['entries']=_0x3c91b7,_0x20eadc['skills']=_0x2940aa,_0x3ae5c0[_0x4a7c17(0x1d5)+'igWriteH'+_0x4a7c17(0x1e4)+_0x4a7c17(0x17a)]?.(),await _0x3ae5c0[_0x4a7c17(0x186)+_0x4a7c17(0x1cc)]?.(_0x20eadc,_0x4a7c17(0x17c)+_0x4a7c17(0x175)+_0x4a7c17(0x1c9)+_0x4a7c17(0x1b4)+'thout\x20ga'+_0x4a7c17(0x1dd)+_0x4a7c17(0x1a2));}export async function syncManagedSkillsToConfig(_0x5001d4){const _0x256aec=_0x3671,_0x10bc04=join(_0x5001d4['resolveS'+'tateDir'](),_0x256aec(0x1d2)),_0x3595e2=[];for(const _0x327095 of await readdir(_0x10bc04,{'withFileTypes':!![]})[_0x256aec(0x197)](()=>[])){if(!_0x327095[_0x256aec(0x171)+'ory']())continue;const _0x5861a9=await resolveSkillKeyFromManifest(join(_0x10bc04,_0x327095[_0x256aec(0x1e5)]));if(_0x5861a9)_0x3595e2[_0x256aec(0x1e9)](_0x5861a9);}return await ensureManagedSkillsConfig(_0x5001d4,_0x3595e2),{'skillKeys':_0x3595e2};}async function resolveZipPath({payload:_0xa15241,app:_0x17c9a1,dialog:_0x4d4156,dialogWindow:_0x222eba}){const _0x216d78=_0x3671,_0x42ae16=getTrimmedString(_0xa15241[_0x216d78(0x173)]);let _0x5bfe44=getTrimmedString(_0xa15241[_0x216d78(0x1f7)+_0x216d78(0x180)]),_0x24fcff=null;if(!_0x5bfe44&&_0x42ae16){const _0x133e91=new URL(_0x42ae16);_0x24fcff=await mkdtemp(join(_0x17c9a1['getPath'](_0x216d78(0x1f9)),_0x216d78(0x1eb)+_0x216d78(0x194)+'load-')),_0x5bfe44=join(_0x24fcff,basename(_0x133e91[_0x216d78(0x1e8)])||'download'+_0x216d78(0x1ee)+'.zip');const _0xd0ea45=await fetch(_0x133e91[_0x216d78(0x1de)]());if(!_0xd0ea45['ok'])throw new Error('下载技能\x20ZIP'+_0x216d78(0x185)+'\x20'+_0xd0ea45['status']+')');await writeFile(_0x5bfe44,Buffer[_0x216d78(0x1b2)](await _0xd0ea45[_0x216d78(0x196)+'fer']()));}if(!_0x5bfe44){const _0x1841be={'title':_0x216d78(0x1e7),'properties':[_0x216d78(0x1bc)],'filters':[{'name':'ZIP\x20Arch'+_0x216d78(0x19b),'extensions':['zip']}]},_0x3539f3=_0x222eba?await _0x4d4156['showOpen'+_0x216d78(0x1e2)](_0x222eba,_0x1841be):await _0x4d4156[_0x216d78(0x1da)+_0x216d78(0x1e2)](_0x1841be);if(_0x3539f3[_0x216d78(0x1c6)]||_0x3539f3[_0x216d78(0x1ed)+'s']['length']===0x0)return{'cancelled':!![],'zipPath':null,'downloadedZipDir':_0x24fcff};_0x5bfe44=_0x3539f3[_0x216d78(0x1ed)+'s'][0x0];}return{'cancelled':![],'zipPath':_0x5bfe44,'downloadedZipDir':_0x24fcff};}export async function importSkillZip({payload:payload={},app:_0x569206,dialog:_0x2da5bc,dialogWindow:_0x553a10,configController:_0x288d8a}){const _0x4dc1db=_0x3671,_0x3b7fd4=asRecord(payload),_0x3f32c0=getTrimmedString(_0x3b7fd4[_0x4dc1db(0x173)]),{cancelled:_0x574845,zipPath:_0xb1865c,downloadedZipDir:_0x21231f}=await resolveZipPath({'payload':_0x3b7fd4,'app':_0x569206,'dialog':_0x2da5bc,'dialogWindow':_0x553a10});if(_0x574845)return{'cancelled':!![],'imported':![],'overwritten':![],'skillDirName':null,'selectedZipPath':null,'zipUrl':_0x3f32c0||null,'message':_0x4dc1db(0x17f)};const _0x5be637=await mkdtemp(join(_0x569206[_0x4dc1db(0x1a5)](_0x4dc1db(0x1f9)),_0x4dc1db(0x1eb)+'ill-impo'+_0x4dc1db(0x178))),_0x40d2d9=join(_0x5be637,_0x4dc1db(0x1d6)+'d');try{await mkdir(_0x40d2d9,{'recursive':!![]}),await extractZipToDirectory(_0xb1865c,_0x40d2d9);const _0x2bbca3=await findSkillManifestDirectories(_0x40d2d9);if(_0x2bbca3[_0x4dc1db(0x1f1)]===0x0)throw new Error(_0x4dc1db(0x17d)+_0x4dc1db(0x1d1)+'d\x20或\x20SKIL'+_0x4dc1db(0x1a3));if(_0x2bbca3[_0x4dc1db(0x1f1)]>0x1)throw new Error(_0x4dc1db(0x1c1)+_0x4dc1db(0x1a7)+_0x4dc1db(0x1cd)+_0x4dc1db(0x1ac));const _0x1bcb70=_0x2bbca3[0x0];await normalizeImportedSkillManifest(_0x1bcb70);const _0x172a3c=basename(_0x1bcb70),_0x3a53bd=parse(_0xb1865c)[_0x4dc1db(0x1e5)][_0x4dc1db(0x1ae)]()||_0x4dc1db(0x1a9)+_0x4dc1db(0x172),_0x410523=_0x172a3c===_0x4dc1db(0x1d6)+'d'?_0x3a53bd:_0x172a3c,_0x7e0733=await resolveSkillKeyFromManifest(_0x1bcb70)??_0x410523,_0x174bcf=await resolveSkillVersionFromManifest(_0x1bcb70)??(getTrimmedString(_0x3b7fd4['version'])||extractVersionFromZipUrl(_0x3f32c0)),_0x5edbaf=buildManagedSkillDirectoryName(_0x7e0733,_0x174bcf,_0x410523),_0xe2823b=join(_0x288d8a[_0x4dc1db(0x1bd)+_0x4dc1db(0x1d3)](),_0x4dc1db(0x1d2)),_0x4c1dfb=join(_0xe2823b,_0x5edbaf);if(existsSync(_0x4c1dfb)){if(_0x3b7fd4[_0x4dc1db(0x1b5)+'e']!==!![])return{'cancelled':![],'imported':![],'overwritten':![],'needConfirmOverwrite':!![],'skillDirName':_0x5edbaf,'overwriteTargetPath':_0x4c1dfb,'selectedZipPath':_0xb1865c,'zipUrl':_0x3f32c0||null,'message':_0x4dc1db(0x1b6)+_0x5edbaf+(_0x4dc1db(0x182)+_0x4dc1db(0x1c3))};await rm(_0x4c1dfb,{'recursive':!![],'force':!![]});}let _0x28c74d=_0x1bcb70;return _0x172a3c===_0x4dc1db(0x1d6)+'d'&&(_0x28c74d=join(_0x5be637,_0x5edbaf),await rename(_0x1bcb70,_0x28c74d)),await moveDirectoryWithOverwrite(_0x28c74d,_0x4c1dfb),await ensureManagedSkillsConfig(_0x288d8a,[_0x7e0733]),{'cancelled':![],'imported':!![],'overwritten':_0x3b7fd4[_0x4dc1db(0x1b5)+'e']===!![],'skillKey':_0x7e0733,'manifestKey':_0x7e0733,'skillDirName':_0x5edbaf,'targetPath':_0x4c1dfb,'selectedZipPath':_0xb1865c,'zipUrl':_0x3f32c0||null,'message':_0x5edbaf+_0x4dc1db(0x1d8)};}finally{await rm(_0x5be637,{'recursive':!![],'force':!![]});if(_0x21231f)await rm(_0x21231f,{'recursive':!![],'force':!![]});}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x56abfa=_0xdb17;(function(_0x35a50f,_0x1beab1){const _0x1ebc12=_0xdb17,_0x28a276=_0x35a50f();while(!![]){try{const _0x18ed03=parseInt(_0x1ebc12(0xdd))/0x1+-parseInt(_0x1ebc12(0xe3))/0x2*(parseInt(_0x1ebc12(0xd2))/0x3)+parseInt(_0x1ebc12(0xe5))/0x4+parseInt(_0x1ebc12(0xd7))/0x5+-parseInt(_0x1ebc12(0xca))/0x6*(parseInt(_0x1ebc12(0xba))/0x7)+-parseInt(_0x1ebc12(0xb1))/0x8+parseInt(_0x1ebc12(0xc1))/0x9;if(_0x18ed03===_0x1beab1)break;else _0x28a276['push'](_0x28a276['shift']());}catch(_0x534bd4){_0x28a276['push'](_0x28a276['shift']());}}}(_0x54c4,0xba7a8));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=_0x56abfa(0xae)+_0x56abfa(0xcc);async function readMarketSkillRegistry(_0x223ce6){const _0x21d3b1=_0x56abfa;try{const _0x2f4c4d=JSON[_0x21d3b1(0xcf)](await readFile(_0x223ce6,_0x21d3b1(0xcd)));if(!_0x2f4c4d||typeof _0x2f4c4d!=='object'||Array['isArray'](_0x2f4c4d))return{};return _0x2f4c4d;}catch{return{};}}export async function readSkillMarketRegistry(_0x567290){const _0x3befa7=_0x56abfa;return await readMarketSkillRegistry(join(_0x567290,'market-s'+_0x3befa7(0xdb)+'on'));}function _0xdb17(_0x40f39c,_0x25e49e){_0x40f39c=_0x40f39c-0xad;const _0x54c4a8=_0x54c4();let _0xdb1729=_0x54c4a8[_0x40f39c];return _0xdb1729;}async function upsertMarketSkillRegistryEntry(_0x22a5f0,_0x580c94,_0x10ec8a,_0x47d41e,_0x123fab={}){const _0x431606=_0x56abfa,_0x277bc5=getTrimmedString(_0x580c94),_0x500ccf=getTrimmedString(_0x10ec8a),_0xaa20ea=getTrimmedString(_0x47d41e);if(!_0x277bc5||!_0x500ccf||!_0xaa20ea)return;const _0x9f2203=await readMarketSkillRegistry(_0x22a5f0);_0x9f2203[_0x277bc5]={'version':_0xaa20ea,'code':_0x500ccf,...getTrimmedString(_0x123fab[_0x431606(0xbd)])?{'name':getTrimmedString(_0x123fab[_0x431606(0xbd)])}:{},...getTrimmedString(_0x123fab['logoUrl'])?{'logo_url':getTrimmedString(_0x123fab[_0x431606(0xb9)])}:{},...getTrimmedString(_0x123fab[_0x431606(0xb2)+_0x431606(0xce)])?{'description':getTrimmedString(_0x123fab[_0x431606(0xb2)+_0x431606(0xce)])}:{}};if(_0x9f2203[_0x500ccf]&&_0x500ccf!==_0x277bc5)delete _0x9f2203[_0x500ccf];for(const [_0x2cc728,_0x1d3c8d]of Object[_0x431606(0xad)](_0x9f2203)){if(_0x2cc728!==_0x277bc5&&asRecord(_0x1d3c8d)[_0x431606(0xbb)]===_0x500ccf)delete _0x9f2203[_0x2cc728];}const _0x202f58=Object[_0x431606(0xb4)+_0x431606(0xcb)](Object[_0x431606(0xad)](_0x9f2203)['sort'](([_0x57eefa],[_0x6687a5])=>_0x57eefa[_0x431606(0xc0)+_0x431606(0xc5)](_0x6687a5)));await writeJson(_0x22a5f0,_0x202f58);}async function removeMarketSkillRegistryKeys(_0x52969f,_0x45c1b8){const _0x3b3a77=_0x56abfa,_0x254e68=new Set(_0x45c1b8[_0x3b3a77(0xc7)](getTrimmedString)[_0x3b3a77(0xdc)](Boolean));if(_0x254e68[_0x3b3a77(0xc3)]===0x0)return;const _0x527eed=await readMarketSkillRegistry(_0x52969f);let _0xd5f10=![];for(const _0x5bb4dc of Object['keys'](_0x527eed)){const _0x348d26=asRecord(_0x527eed[_0x5bb4dc]);(_0x254e68[_0x3b3a77(0xd8)](_0x5bb4dc)||_0x254e68['has'](getTrimmedString(_0x348d26[_0x3b3a77(0xbb)])))&&(delete _0x527eed[_0x5bb4dc],_0xd5f10=!![]);}if(_0xd5f10){const _0x37887f=Object[_0x3b3a77(0xb4)+_0x3b3a77(0xcb)](Object[_0x3b3a77(0xad)](_0x527eed)[_0x3b3a77(0xd6)](([_0x47b376],[_0x1e9d15])=>_0x47b376[_0x3b3a77(0xc0)+_0x3b3a77(0xc5)](_0x1e9d15)));await writeJson(_0x52969f,_0x37887f);}}async function readSkillManifestText(_0x750889){const _0x165657=_0x56abfa,_0x104782=[join(_0x750889,_0x165657(0xe0)),join(_0x750889,_0x165657(0xd9)+'d')];for(const _0x4552f3 of _0x104782){const _0x510c0a=await readFile(_0x4552f3,'utf8')[_0x165657(0xda)](()=>'');if(_0x510c0a[_0x165657(0xb5)]())return _0x510c0a;}return'';}function resolveFrontmatterValue(_0x28d961,_0x3d7cca){const _0x357ba1=_0x56abfa,_0x54293d=_0x28d961[_0x357ba1(0xb8)](/^---\s*\r?\n([\s\S]*?)\r?\n---/),_0x5a33f9=_0x54293d?.[0x1]??'',_0x1d7c6c=_0x5a33f9[_0x357ba1(0xb8)](new RegExp('^\x5cs*'+_0x3d7cca+(_0x357ba1(0xc9)+'$'),'m'))?.[0x1];return getTrimmedString(_0x1d7c6c)['replace'](/^["']|["']$/g,'')||null;}async function resolveSkillKeyFromManifest(_0x4fdda6){const _0x298914=_0x56abfa,_0x55a680=await readSkillManifestText(_0x4fdda6);if(!_0x55a680[_0x298914(0xb5)]())return null;const _0x182971=_0x55a680['match'](/"skillKey"\s*:\s*"([^"]+)"/);if(_0x182971?.[0x1])return getTrimmedString(_0x182971[0x1]);return resolveFrontmatterValue(_0x55a680,_0x298914(0xaf))||resolveFrontmatterValue(_0x55a680,'name');}async function removeOtherMarketSkillVersions(_0x5de56f,_0x3ba75b,_0x5208f1){const _0x5adeeb=_0x56abfa,_0x3a1393=getTrimmedString(_0x5208f1);if(!_0x3a1393)return;for(const _0x271f24 of await readdir(_0x5de56f,{'withFileTypes':!![]})['catch'](()=>[])){if(!_0x271f24[_0x5adeeb(0xd0)+_0x5adeeb(0xb3)]())continue;const _0x5c1919=join(_0x5de56f,_0x271f24[_0x5adeeb(0xbd)]);if(_0x5c1919===_0x3ba75b)continue;const _0x1fc965=await resolveSkillKeyFromManifest(_0x5c1919);_0x1fc965&&_0x1fc965[_0x5adeeb(0xb5)]()===_0x3a1393&&await rm(_0x5c1919,{'recursive':!![],'force':!![]});}}export async function importMarketSkillZip({payload:payload={},importSkillZip:_0x13bf22,configController:_0x4489cd}={}){const _0x4dd619=_0x56abfa,_0x53e401=asRecord(payload);if(_0x53e401[_0x4dd619(0xc8)]!==_0x4dd619(0xd3))return _0x13bf22({'payload':payload});const _0x27d605=getTrimmedString(_0x53e401[_0x4dd619(0xbb)]),_0x2d0047=getTrimmedString(_0x53e401[_0x4dd619(0xe1)]),_0x2f1e8f=getTrimmedString(_0x53e401[_0x4dd619(0xbd)]);if(!_0x27d605)throw new Error(_0x4dd619(0xc4)+_0x4dd619(0xde)+'de');if(!_0x2d0047)throw new Error(_0x4dd619(0xc4)+_0x4dd619(0xbf)+'rsion');if(!_0x2f1e8f)throw new Error('技能商店安装需要'+_0x4dd619(0xd5)+'me');const _0x37ba95=await _0x13bf22({'payload':{..._0x53e401,'version':_0x2d0047}});if(!_0x37ba95?.[_0x4dd619(0xbc)])return _0x37ba95;const _0x3b1766=getTrimmedString(_0x37ba95[_0x4dd619(0xaf)])||getTrimmedString(_0x37ba95[_0x4dd619(0xe4)+'Key'])||getTrimmedString(_0x37ba95['skillDir'+_0x4dd619(0xb7)]);return await removeOtherMarketSkillVersions(join(_0x4489cd['resolveS'+_0x4dd619(0xe2)](),_0x4dd619(0xb0)),_0x37ba95['targetPa'+'th'],_0x3b1766),await upsertMarketSkillRegistryEntry(join(_0x4489cd[_0x4dd619(0xc2)+_0x4dd619(0xe2)](),_0x4dd619(0xd1)+_0x4dd619(0xdb)+'on'),_0x3b1766,_0x27d605,_0x2d0047,{'name':_0x2f1e8f,'logoUrl':getTrimmedString(_0x53e401['logoUrl']),'description':getTrimmedString(_0x53e401[_0x4dd619(0xb2)+_0x4dd619(0xce)])}),_0x37ba95;}export async function deleteMarketSkillRegistryEntry({payload:payload={},deleteManagedSkill:_0x513386,configController:_0x50877d}={}){const _0x2004b=_0x56abfa,_0x26dc35=await _0x513386({'payload':payload}),_0x307564=asRecord(payload),_0x207d15=getTrimmedString(_0x26dc35?.[_0x2004b(0xaf)]??_0x307564['skillKey']??_0x307564[_0x2004b(0xbd)]),_0x633599=[_0x207d15,getTrimmedString(_0x307564[_0x2004b(0xbe)+_0x2004b(0xc6)]),getTrimmedString(_0x307564[_0x2004b(0xbd)])];return await removeMarketSkillRegistryKeys(join(_0x50877d[_0x2004b(0xc2)+'tateDir'](),_0x2004b(0xd1)+'kills.js'+'on'),_0x633599),_0x26dc35;}export function mapMarketRegisteredSkills(_0x2341d8,_0x13876a){const _0x40181a=_0x56abfa,_0x891c90=Array[_0x40181a(0xdf)](asRecord(_0x2341d8)['skills'])?asRecord(_0x2341d8)[_0x40181a(0xb0)]:[];if(_0x891c90['length']===0x0||Object[_0x40181a(0xb6)](_0x13876a)['length']===0x0)return _0x2341d8;const _0x3ea6a2=_0x891c90['map'](_0x2d7516=>{const _0x269d27=_0x40181a,_0x3493c5=asRecord(_0x2d7516),_0x5b0034=getTrimmedString(_0x3493c5[_0x269d27(0xaf)])||getTrimmedString(_0x3493c5[_0x269d27(0xbd)]);let _0x125f7b=_0x5b0034,_0x39ecd1=asRecord(_0x13876a[_0x5b0034]);if(!Object[_0x269d27(0xb6)](_0x39ecd1)['length'])for(const [_0x25e27b,_0x5f0793]of Object[_0x269d27(0xad)](_0x13876a)){const _0x2bf325=asRecord(_0x5f0793);if(getTrimmedString(_0x2bf325[_0x269d27(0xbb)])===_0x5b0034){_0x125f7b=_0x25e27b,_0x39ecd1=_0x2bf325;break;}}if(!Object['keys'](_0x39ecd1)[_0x269d27(0xd4)])return _0x2d7516;const _0xfac370=getTrimmedString(_0x39ecd1['code']),_0x46550b=getTrimmedString(_0x39ecd1[_0x269d27(0xbd)]),_0x39ff5b=getTrimmedString(_0x39ecd1[_0x269d27(0xb2)+'ion']),_0x37b771=getTrimmedString(_0x39ecd1['logo_url']),_0x56dcdd=getTrimmedString(_0x39ecd1[_0x269d27(0xe1)]);return{..._0x3493c5,'source':SKILL_SOURCE_MARKET,'skillKey':_0xfac370||_0x5b0034,'gatewaySkillKey':_0xfac370?_0x125f7b:null,'marketInstalledVersion':_0x56dcdd||null,..._0x46550b?{'cnName':_0x46550b}:{},..._0x39ff5b?{'description':_0x39ff5b}:{},..._0x37b771?{'logoUrl':_0x37b771}:{}};});return{...asRecord(_0x2341d8),'skills':_0x3ea6a2};}function _0x54c4(){const _0x5a5e6f=[':\x5cs*(.+)','12Okjmpn','ies','ket','utf8','ion','parse','isDirect','market-s','27pTqmFf','market','length','接口返回的\x20na','sort','4440200IcWjXG','has','SKILLS.m','catch','kills.js','filter','336474rVmSLq','接口返回的\x20co','isArray','SKILL.md','version','tateDir','219122NUHaKo','manifest','5944256xiypmX','entries','aipc-mar','skillKey','skills','12020288kFyjAu','descript','ory','fromEntr','trim','keys','Name','match','logoUrl','2111872LXgPlY','code','imported','name','gatewayS','接口返回的\x20ve','localeCo','10306935OtOSWR','resolveS','size','技能商店安装需要','mpare','killKey','map','source'];_0x54c4=function(){return _0x5a5e6f;};return _0x54c4();}export function createMarketSkillRuntime({configController:_0x1fecac}){return{'mapSkillsStatus':async _0x1c8fdf=>{const _0x2d1419=_0xdb17,_0x4ac998=await readSkillMarketRegistry(_0x1fecac[_0x2d1419(0xc2)+_0x2d1419(0xe2)]())[_0x2d1419(0xda)](()=>({}));return mapMarketRegisteredSkills(_0x1c8fdf,_0x4ac998);}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x13ea65,_0x99568c){const _0xd654e0=_0x3a74,_0x47c02d=_0x13ea65();while(!![]){try{const _0x4aa92c=parseInt(_0xd654e0(0xa4))/0x1*(parseInt(_0xd654e0(0xb1))/0x2)+parseInt(_0xd654e0(0xa5))/0x3+-parseInt(_0xd654e0(0xa6))/0x4*(parseInt(_0xd654e0(0x93))/0x5)+parseInt(_0xd654e0(0xcd))/0x6*(parseInt(_0xd654e0(0xa8))/0x7)+-parseInt(_0xd654e0(0xb4))/0x8+parseInt(_0xd654e0(0xba))/0x9*(-parseInt(_0xd654e0(0xa3))/0xa)+parseInt(_0xd654e0(0xac))/0xb;if(_0x4aa92c===_0x99568c)break;else _0x47c02d['push'](_0x47c02d['shift']());}catch(_0x45a134){_0x47c02d['push'](_0x47c02d['shift']());}}}(_0x477b,0xe4d82));import{spawn}from'node:child_process';import{randomUUID}from'node:crypto';function _0x3a74(_0x529671,_0x1c6daf){_0x529671=_0x529671-0x8f;const _0x477bb2=_0x477b();let _0x3a74af=_0x477bb2[_0x529671];return _0x3a74af;}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(_0x4def81){const _0x38b6b9=_0x3a74,_0x58aa6f=Object[_0x38b6b9(0xbd)](_0x4def81)[_0x38b6b9(0xc4)](_0x528db6=>_0x528db6[_0x38b6b9(0xce)+_0x38b6b9(0xab)]()===_0x38b6b9(0x95))??_0x38b6b9(0x8f);return String(_0x4def81[_0x58aa6f]||'')[_0x38b6b9(0x9a)](delimiter)['filter'](Boolean);}function canExecute(_0x142195){const _0x49978e=_0x3a74;try{return accessSync(_0x142195,process[_0x49978e(0x96)]===_0x49978e(0xc0)?constants[_0x49978e(0x9d)]:constants[_0x49978e(0xc1)]),!![];}catch{return![];}}function _0x477b(){const _0x27897a=['n/zsh','pwsh','sessionI','pipe','test','24pwlFQZ','toLowerC','powershe','n/bash','dows\x20she','al/bin/b','ash','/usr/loc','error','\x20session','close','PATH','object','rted\x20Win','string','5zupTZI','--login','path','platform','bash','\x20not\x20fou','push','split','-NoLogo','trim','F_OK','env','cmd','stdout','xterm-25','.bat','210vjoOxo','1hgpBGI','2740983uThzNE','3707936mHMLxe','includes','1093379YOsCJb','message','values','ase','32079630ZAujhP','darwin','kill','clear','get','742958OOxdbf','truecolo','/bin/bas','13338056bHjifJ','toString','rted\x20she','/opt/hom','stderr','/bin/zsh','554859qZqslA','.cmd','write','keys','ll\x20found','data','win32','X_OK','ebrew/bi','cwd','find','delete','al/bin/z','child'];_0x477b=function(){return _0x27897a;};return _0x477b();}function resolveExecutableOnPath(_0x338801,_0x195d3a){const _0x4500bf=_0x3a74,_0x4a08d1=String(_0x338801||'')[_0x4500bf(0x9c)]();if(!_0x4a08d1)return null;if(_0x4a08d1[_0x4500bf(0xa7)]('/')||_0x4a08d1[_0x4500bf(0xa7)]('\x5c'))return existsSync(_0x4a08d1)?_0x4a08d1:null;const _0x2d2fc6=[_0x4a08d1];process['platform']==='win32'&&!FILE_EXTENSION_REGEX[_0x4500bf(0xcc)](_0x4a08d1)&&_0x2d2fc6[_0x4500bf(0x99)](_0x4a08d1+'.exe',_0x4a08d1+_0x4500bf(0xbb),_0x4a08d1+_0x4500bf(0xa2));for(const _0x26864e of resolvePathEntries(_0x195d3a)){for(const _0x5f2ba0 of _0x2d2fc6){const _0x64d636=join(_0x26864e,_0x5f2ba0);if(canExecute(_0x64d636))return _0x64d636;}}return null;}function resolveShellLaunchConfig(_0x3afc0e){const _0x21fe52=_0x3a74;if(process[_0x21fe52(0x96)]===_0x21fe52(0xc0)){const _0x3a4663=resolveExecutableOnPath(_0x21fe52(0xc9),_0x3afc0e)??resolveExecutableOnPath(_0x21fe52(0xcf)+'ll',_0x3afc0e);if(_0x3a4663)return{'command':_0x3a4663,'args':[_0x21fe52(0x9b)]};const _0x308219=resolveExecutableOnPath(_0x21fe52(0x9f),_0x3afc0e);if(_0x308219)return{'command':_0x308219,'args':['/Q']};throw new Error('No\x20suppo'+_0x21fe52(0x91)+_0x21fe52(0xd1)+'ll\x20found');}if(process[_0x21fe52(0x96)]===_0x21fe52(0xad)){const _0x1a7176=[_0x21fe52(0xb9),_0x21fe52(0xd4)+_0x21fe52(0xc6)+'sh','/opt/hom'+'ebrew/bi'+_0x21fe52(0xc8)][_0x21fe52(0xc4)](canExecute);if(_0x1a7176)return{'command':_0x1a7176,'args':['-i']};const _0x41dcb2=[_0x21fe52(0xb3)+'h',_0x21fe52(0xd4)+_0x21fe52(0xd2)+_0x21fe52(0xd3),_0x21fe52(0xb7)+_0x21fe52(0xc2)+_0x21fe52(0xd0)]['find'](canExecute);if(_0x41dcb2)return{'command':_0x41dcb2,'args':[_0x21fe52(0x94),'-i']};}const _0x3b6310=resolveExecutableOnPath(process.env.SHELL||'',_0x3afc0e)??resolveExecutableOnPath(_0x21fe52(0x97),_0x3afc0e)??resolveExecutableOnPath('sh',_0x3afc0e);if(!_0x3b6310)throw new Error('No\x20suppo'+_0x21fe52(0xb6)+_0x21fe52(0xbe));return{'command':_0x3b6310,'args':['-l','-i']};}export function createTerminalManager({cwd:_0x247690,emitData:_0x59aaa4,emitExit:_0x1c9211}){const _0x4109a4=new Map();function _0x59e4df(_0x2fb219){const _0x513712=_0x3a74,_0xe36145=_0x4109a4[_0x513712(0xb0)](_0x2fb219);if(!_0xe36145)throw new Error('Terminal'+_0x513712(0xd6)+_0x513712(0x98)+'nd');return _0xe36145;}async function _0xd38739(_0x4ce2dd={}){const _0xc888e9=_0x3a74,_0xe3546e={...process.env,'TERM':_0xc888e9(0xa1)+'6color','COLORTERM':_0xc888e9(0xb2)+'r',..._0x4ce2dd['env']&&typeof _0x4ce2dd[_0xc888e9(0x9e)]===_0xc888e9(0x90)?_0x4ce2dd[_0xc888e9(0x9e)]:{}},_0x384493=typeof _0x4ce2dd[_0xc888e9(0xc3)]===_0xc888e9(0x92)&&_0x4ce2dd['cwd'][_0xc888e9(0x9c)]()?_0x4ce2dd[_0xc888e9(0xc3)]:'',_0x38a12c=_0x384493||_0x247690;await mkdir(_0x38a12c,{'recursive':!![]});const {command:_0x2fbc2a,args:_0x5f4b90}=resolveShellLaunchConfig(_0xe3546e),_0x13f4a1=randomUUID(),_0x1f5fca=spawn(_0x2fbc2a,_0x5f4b90,{'cwd':_0x38a12c,'env':_0xe3546e,'stdio':_0xc888e9(0xcb)});return _0x4109a4['set'](_0x13f4a1,{'sessionId':_0x13f4a1,'child':_0x1f5fca}),_0x1f5fca[_0xc888e9(0xa0)]['on']('data',_0x292c02=>_0x59aaa4({'sessionId':_0x13f4a1,'data':_0x292c02[_0xc888e9(0xb5)]()})),_0x1f5fca[_0xc888e9(0xb8)]['on'](_0xc888e9(0xbf),_0x4a307b=>_0x59aaa4({'sessionId':_0x13f4a1,'data':_0x4a307b[_0xc888e9(0xb5)]()})),_0x1f5fca['on'](_0xc888e9(0xd7),(_0x53d562,_0x53f949)=>{_0x4109a4['delete'](_0x13f4a1),_0x1c9211({'sessionId':_0x13f4a1,'exitCode':_0x53d562,'signal':_0x53f949});}),_0x1f5fca['on'](_0xc888e9(0xd5),_0x393d6e=>{const _0x2462a5=_0xc888e9;_0x59aaa4({'sessionId':_0x13f4a1,'data':_0x393d6e[_0x2462a5(0xa9)]+'\x0a'});}),{'sessionId':_0x13f4a1,'shell':basename(_0x2fbc2a),'cwd':_0x38a12c};}function _0xc5b1fa(_0x4ead4f={}){const _0x160ba0=_0x3a74,_0x2c3951=_0x59e4df(String(_0x4ead4f[_0x160ba0(0xca)+'d']||''));return _0x2c3951[_0x160ba0(0xc7)]['stdin'][_0x160ba0(0xbc)](String(_0x4ead4f['data']||'')),{'ok':!![]};}function _0x50e3a9(_0x504156={}){const _0x4c1149=_0x3a74,_0x188bf7=String(_0x504156[_0x4c1149(0xca)+'d']||'');return _0x59e4df(_0x188bf7),{'ok':!![],'ignored':!![]};}function _0x37191d(_0x4d6216={}){const _0x195a4f=_0x3a74,_0x5bc3d6=String(_0x4d6216[_0x195a4f(0xca)+'d']||''),_0x2694b7=_0x4109a4[_0x195a4f(0xb0)](_0x5bc3d6);if(!_0x2694b7)return{'ok':!![],'closed':![]};return _0x4109a4[_0x195a4f(0xc5)](_0x5bc3d6),_0x2694b7[_0x195a4f(0xc7)][_0x195a4f(0xae)](),{'ok':!![],'closed':!![]};}function _0x198186(){const _0x32262d=_0x3a74;for(const _0x547cb7 of _0x4109a4[_0x32262d(0xaa)]())_0x547cb7[_0x32262d(0xc7)][_0x32262d(0xae)]();_0x4109a4[_0x32262d(0xaf)]();}return{'create':_0xd38739,'input':_0xc5b1fa,'resize':_0x50e3a9,'close':_0x37191d,'dispose':_0x198186};}
|