w-dispatch-ai 1.0.3 → 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.
package/README.md CHANGED
@@ -138,29 +138,36 @@ let test = async () => {
138
138
  console.log('invalid prompt:', r5.ok, r5.error)
139
139
  // => invalid prompt: false prompt must be a non-empty string
140
140
 
141
- //CLI執行失敗時, 由ok、code、error與stderr判斷原因
142
- let r6 = await wdi.dispatchOpencode(prompt, {
143
- model: 'opencode/deepseek-v4-flash-free',
144
- provider: 'opencode',
141
+ //執行失敗時, 由ok、code、error與stderr判斷原因
142
+ //REST路徑之錯誤依HTTP狀態碼分流(401金鑰無效、429限流、5xx服務端), 判別比CLI之stderr字串可靠
143
+ let r6 = await wdi.dispatchApiOpenaiCompat(prompt, {
144
+ baseURL: 'https://apihub.agnes-ai.com/v1',
145
+ model: 'agnes-2.0-flash',
145
146
  key: 'sk-invalid-key',
146
147
  })
147
- console.log('invalid key:', r6.ok, r6.code, r6.error, r6.stderr.includes('Invalid API key'))
148
- // => invalid key: false 1 Exit code 1 true
148
+ console.log('invalid key:', r6.ok, r6.code, r6.error, r6.stderr.includes('无效的令牌'))
149
+ // => invalid key: false 401 HTTP 401 true
149
150
 
150
151
  //多供應商自動遞補: providers順序即優先序, 組內keys以游標輪替
151
- //此例第1把金鑰無效 → 自動換組內下一把成功; 若整組用盡會遞補下一組(claude), 再失敗遞補codex
152
+ //此例第1把金鑰無效 → 自動換組內下一把成功; 若整組用盡會遞補下一組, 依序往下
153
+ //
154
+ //【id命名】id為游標鍵與日誌標籤, 須區分到「模型」而非只到「廠商」——
155
+ // 取'claude'則日後無法同時掛sonnet與opus, 且日誌看不出實際用了哪個模型;
156
+ // 同一模型經不同路徑(REST/CLI/不同閘道)取得時額度池與故障域各自獨立,
157
+ // 屬不同供應商, 故id須帶上路徑前綴加以區分
152
158
  let r7 = await wdi.dispatchAiFallback(prompt, {
153
159
  providers: [
160
+ //REST版排前面: 免CLI、快3~5倍, 純文字任務優先走此路
154
161
  {
155
- id: 'deepseek',
156
- kind: 'opencode',
157
- model: 'opencode/deepseek-v4-flash-free',
158
- provider: 'opencode',
159
- keys: ['sk-invalid-key-demo', opencodeKeys[0]], //第1把無效, 示範組內輪替
160
- timeoutMs: 180000,
162
+ id: 'api:agnes-2.0-flash',
163
+ kind: 'api-openai-compat',
164
+ baseURL: 'https://apihub.agnes-ai.com/v1',
165
+ model: 'agnes-2.0-flash',
166
+ keys: ['sk-invalid-key-demo', agnesKeys[0]], //第1把無效, 示範組內輪替
161
167
  },
168
+ //同一個agnes模型之CLI版: 有工具能力但較慢, 額度池亦不同, 屬另一個供應商
162
169
  {
163
- id: 'agnes',
170
+ id: 'oc:agnes-ai/agnes-2.0-flash',
164
171
  kind: 'opencode',
165
172
  model: 'agnes-ai/agnes-2.0-flash',
166
173
  provider: 'agnes-ai',
@@ -168,21 +175,21 @@ let test = async () => {
168
175
  config: configAgnes, //第三方provider須另給定義
169
176
  timeoutMs: 180000,
170
177
  },
171
- { id: 'claude', kind: 'claude', model: 'sonnet' },
172
- { id: 'codex', kind: 'codex', model: 'gpt-5.6-luna', sandbox: 'read-only' },
173
- { id: 'antigravity', kind: 'antigravity', model: 'gemini-3.6-flash-low' },
178
+ { id: 'claude:sonnet', kind: 'claude', model: 'sonnet' },
179
+ { id: 'codex:gpt-5.6-luna', kind: 'codex', model: 'gpt-5.6-luna', sandbox: 'read-only' },
180
+ { id: 'agy:gemini-3.6-flash-low', kind: 'antigravity', model: 'gemini-3.6-flash-low' },
174
181
  ],
175
182
  budgetMs: 600000,
176
183
  onEvent: (ev) => console.log(' event:', ev.type, ev.keyId, ev.error || ''),
177
184
  })
178
185
  console.log('fallback:', r7.ok, r7.providerId, r7.keyIndex, r7.stdout.trim())
179
186
  console.log('tried:', r7.tried.map((x) => `${x.keyId}:${x.outcome}`).join(', '))
180
- // => event: try deepseek#0
181
- // => event: next-key deepseek#0 Exit code 1
182
- // => event: try deepseek#1
183
- // => event: ok deepseek#1
184
- // => fallback: true deepseek 1 完成
185
- // => tried: deepseek#0:next-key, deepseek#1:ok
187
+ // => event: try api:agnes-2.0-flash#0
188
+ // => event: next-key api:agnes-2.0-flash#0 HTTP 401
189
+ // => event: try api:agnes-2.0-flash#1
190
+ // => event: ok api:agnes-2.0-flash#1
191
+ // => fallback: true api:agnes-2.0-flash 1 完成
192
+ // => tried: api:agnes-2.0-flash#0:next-key, api:agnes-2.0-flash#1:ok
186
193
 
187
194
  }
188
195
  await test()
@@ -234,6 +241,20 @@ await test()
234
241
 
235
242
  注意:agy之prompt走`--print`旗標而非stdin(agy介面如此),故prompt長度上限30000字元,超過回傳錯誤結果物件(不reject)。
236
243
 
244
+ #### Choosing CLI or API (判準):
245
+ 選 `kind` 的唯一判準是**這一步需不需要「工具」**:
246
+
247
+ | 這次呼叫要做的事 | 選用 | 理由 |
248
+ | --- | --- | --- |
249
+ | 讀本機檔案、grep、執行指令、抓網頁、寫檔 | **CLI類**:`opencode`/`claude`/`codex`/`antigravity` | CLI本身是agentic harness,自帶完整工具迴圈,呼叫端什麼都不必做 |
250
+ | 摘要、分析、改寫、翻譯、產出JSON(素材皆已在prompt內) | **API類**:`api-openai-compat` | 免安裝免登入,且實測較快(Agnes:API 1~2.5s vs CLI 4~6s) |
251
+
252
+ **API類不支援工具,且不會自建工具迴圈**——實測(2026-08-11)閘道端零內建工具:Zen與Agnes對 `tools:[{type:'web_search'}]` 皆回400並要求 `function.parameters`,即只接受「呼叫端自行定義且自行執行」的function工具。協定層雖支援function calling(Zen之 `nemotron-3-ultra-free` 與Agnes皆實測回 `finish_reason:'tool_calls'`),但工具的定義、執行、錯誤處理與安全邊界全須自行實作維護,等同重造CLI已提供的harness。故模型回 `tool_calls` 時本套件一律以 `TOOL_CALLS_UNSUPPORTED` 回報失敗,不假裝成功。
253
+
254
+ 另注意 `tool_calls` 有**會話束縛**(`tool_call_id` 須於同一條messages串內回填),無法暫停後跨行程外傳給上層agent代跑;工作流各名額(如 `runFanout` 的agents)也只是同行程的async函數呼叫而非獨立agent,故「讓外殼agent提供工具給工作流內的模型使用」在本架構下不成立——**需要工具就選CLI類kind**。
255
+
256
+ **混用才是常態**:同一條 `dispatchAiFallback` 鏈可逐條目混搭kind,工作流各階段亦然——產生候選與整合收斂等純文字階段走API,需要翻閱專案檔案的階段換CLI。
257
+
237
258
  #### Options only for dispatchApiOpenaiCompat:
238
259
  | key | type | default | description |
239
260
  | --- | --- | --- | --- |
@@ -253,7 +274,7 @@ await test()
253
274
  | key | type | default | description |
254
275
  | --- | --- | --- | --- |
255
276
  | `providers` | Array | 必填 | 供應商條目陣列,**順序即優先序**。條目除`id`、`keys`外即該次調用之opt,原樣透傳對應轉接器(`kind`、`model`、`exe`、`provider`、`config`、`sandbox`、`timeoutMs`等皆放條目內) |
256
- | `providers[].id` | String | 條目索引 | 群組識別,游標以此為鍵,多金鑰條目應給予穩定`id` |
277
+ | `providers[].id` | String | 條目索引 | 群組識別,游標以此為鍵、亦為日誌標籤;本套件不解讀其內容,命名規則見下方 |
257
278
  | `providers[].keys` | Array | `[]` | 同一服務之多把API key,逐次注入輪替(`kind`為`opencode`時須同時給`provider`);省略代表沿用CLI登入狀態 |
258
279
  | `budgetMs` | Integer | 不限 | 整輪遞補之時間上限,剩餘預算會壓進每次呼叫之`timeoutMs` |
259
280
  | `minAttemptMs` | Integer | `20000` | 單次嘗試之最低剩餘預算,低於此值即停止並回報`budget exhausted` |
@@ -262,6 +283,18 @@ await test()
262
283
 
263
284
  頂層其餘設定(`timeoutMs`、`validate`、`maxRetries`等)為各attempt之共用預設,條目可覆寫;`maxRetries`建議維持預設`0`,韌性交給換家而非重試同一家。
264
285
 
286
+ **條目 `id` 之命名規則**(呼叫端負責設計,本套件只當作不透明字串使用):
287
+
288
+ `id` 在套件內只有兩個用途——游標的物件鍵(`state.cursors[id]`)與日誌標籤(`providerId`、`keyId` = `` `${id}#${keyIndex}` ``)。不查表、不比對、無格式要求,故「什麼算同一個供應商」由呼叫端定義。
289
+
290
+ | 規則 | 說明 |
291
+ | --- | --- |
292
+ | **區分到「模型」而非只到「廠商」** | ❌ `id: 'claude'` — 日後無法同時掛 sonnet 與 opus,日誌也看不出用了哪個模型<br>✅ `id: 'claude:sonnet'`、`id: 'claude:opus'` |
293
+ | **同一模型經不同路徑時須帶路徑** | 同一個 laguna 可經 Poolside 官方 REST、OpenRouter、opencode CLI 三條路,額度池與故障域各自獨立,屬三個供應商:<br>`'poolside:laguna-s-2.1'`、`'or:poolside/laguna-s-2.1:free'`、`'oc:poolside/poolside/laguna-s-2.1'` |
294
+ | **務必給、務必唯一** | 未給時回退為**陣列索引字串**——索引是位置不是身分,日後於鏈中插入條目會令後續條目繼承他人的游標進度(輪替張冠李戴)。兩個條目同 `id` 則共用同一游標且日誌無法區分。 |
295
+
296
+ **同一組金鑰用於多個條目時**(例如某模型的 CLI 版與 REST 版共用同一批金鑰),各條目游標**獨立**:兩者各自從游標起點輪替,同一把金鑰可能被連續使用而另一把閒置。要共享輪替進度就給**相同** `id`(代價:日誌無法區分兩者);要能區分就分開命名(代價:額度不均攤)。此取捨由呼叫端依實際需求決定。
297
+
265
298
  **失敗分流規則**:
266
299
  | 失敗 | 判定 | 處置 |
267
300
  | --- | --- | --- |
@@ -317,13 +350,13 @@ await test()
317
350
  ```alias
318
351
  {
319
352
  // ...ok, stdout, stderr, code, error, durationMs, attempts, pid...
320
- providerId: 'deepseek', //實際使用之群組
321
- keyIndex: 1, //實際使用之金鑰索引, 無keys時為null
322
- kind: 'opencode',
323
- model: 'opencode/deepseek-v4-flash-free',
353
+ providerId: 'api:agnes-2.0-flash', //實際使用之群組(即條目id)
354
+ keyIndex: 1, //實際使用之金鑰索引, 無keys時為null
355
+ kind: 'api-openai-compat',
356
+ model: 'agnes-2.0-flash',
324
357
  tried: [ //完整嘗試歷程, 成功時亦回傳
325
- { providerId: 'deepseek', keyIndex: 0, keyId: 'deepseek#0', outcome: 'next-key', error: 'Exit code 1', durationMs: 3049 },
326
- { providerId: 'deepseek', keyIndex: 1, keyId: 'deepseek#1', outcome: 'ok', durationMs: 11742 },
358
+ { providerId: 'api:agnes-2.0-flash', keyIndex: 0, keyId: 'api:agnes-2.0-flash#0', outcome: 'next-key', error: 'HTTP 401', durationMs: 105 },
359
+ { providerId: 'api:agnes-2.0-flash', keyIndex: 1, keyId: 'api:agnes-2.0-flash#1', outcome: 'ok', durationMs: 1161 },
327
360
  ],
328
361
  }
329
362
  ```
@@ -334,21 +367,21 @@ await test()
334
367
  ```alias
335
368
  let wkf = wdi.dispatchAiWkf({
336
369
  providers: {
337
- 'deepseek': { kind: 'opencode', model: 'opencode/deepseek-v4-flash-free', provider: 'opencode', keys: [...] },
338
- 'sonnet': { kind: 'claude', model: 'sonnet' },
339
- 'luna': { kind: 'codex', model: 'gpt-5.6-luna' },
370
+ 'zen:deepseek-v4-flash-free': { kind: 'api-openai-compat', baseURL: 'https://opencode.ai/zen/v1', model: 'deepseek-v4-flash-free', keys: [...] },
371
+ 'claude:sonnet': { kind: 'claude', model: 'sonnet' },
372
+ 'codex:gpt-5.6-luna': { kind: 'codex', model: 'gpt-5.6-luna' },
340
373
  },
341
374
  defaults: { timeoutMs: 300000 },
342
375
  })
343
376
 
344
377
  //單一名額: 主模型+自帶遞補鏈
345
- let r1 = await wkf.callAi('...prompt...', { spec: { use: 'deepseek', fallback: ['sonnet'] }, check: (j) => !!j.essence })
378
+ let r1 = await wkf.callAi('...prompt...', { spec: { use: 'zen:deepseek-v4-flash-free', fallback: ['claude:sonnet'] }, check: (j) => !!j.essence })
346
379
 
347
380
  //Fanout: 並行多開執行 → 單點整合收斂(候選未達minCandidates時以首位候選為成果不硬整合)
348
- let r2 = await wkf.runFanout({ task, agents: [{ use: 'deepseek', fallback: ['sonnet'] }, { use: 'sonnet' }], integrate: { use: 'luna' }, check })
381
+ let r2 = await wkf.runFanout({ task, agents: [{ use: 'zen:deepseek-v4-flash-free', fallback: ['claude:sonnet'] }, { use: 'claude:sonnet' }], integrate: { use: 'codex:gpt-5.6-luna' }, check })
349
382
 
350
383
  //RolePipeline: 多角色串行鏈, 各階段可自帶AI/遞補/檢核, prompt收ctx={input,prev,results,index}
351
- let r3 = await wkf.runRolePipeline({ input, stages: [{ id: 'draft', use: 'sonnet', prompt: (ctx) => `...` }, { id: 'audit', use: 'luna', prompt: (ctx) => `...${JSON.stringify(ctx.prev)}` }] })
384
+ let r3 = await wkf.runRolePipeline({ input, stages: [{ id: 'draft', use: 'claude:sonnet', prompt: (ctx) => `...` }, { id: 'audit', use: 'codex:gpt-5.6-luna', prompt: (ctx) => `...${JSON.stringify(ctx.prev)}` }] })
352
385
 
353
386
  //FanoutPipeline: Fanout成果接RolePipeline(品質天花板組合)
354
387
  let r4 = await wkf.runFanoutPipeline({ task, agents, integrate, stages, check })
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * w-dispatch-ai v1.0.3
2
+ * w-dispatch-ai v1.0.4
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */
6
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("child_process"),require("path"),require("fs")):"function"==typeof define&&define.amd?define(["child_process","path","fs"],e):(t="undefined"!=typeof globalThis?globalThis:t||self)["w-dispatch-ai"]=e(t.child_process,t.path,t.fs)}(this,function(t,e,r){"use strict";var n="object"==typeof global&&global&&global.Object===Object&&global,o="object"==typeof self&&self&&self.Object===Object&&self,u=n||o||Function("return this")(),i=u.Symbol,l=Object.prototype,a=l.hasOwnProperty,s=l.toString,c=i?i.toStringTag:void 0;var f=Object.prototype.toString;var p=i?i.toStringTag:void 0;function d(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":p&&p in Object(t)?function(t){var e=a.call(t,c),r=t[c];try{t[c]=void 0;var n=!0}catch(t){}var o=s.call(t);return n&&(e?t[c]=r:delete t[c]),o}(t):function(t){return f.call(t)}(t)}function y(t){return null!=t&&"object"==typeof t}function v(t){return y(t)&&"[object Arguments]"==d(t)}var h=Object.prototype,b=h.hasOwnProperty,g=h.propertyIsEnumerable,m=v(function(){return arguments}())?v:function(t){return y(t)&&b.call(t,"callee")&&!g.call(t,"callee")},j=m,k=Array.isArray;var w="object"==typeof exports&&exports&&!exports.nodeType&&exports,O=w&&"object"==typeof module&&module&&!module.nodeType&&module,_=O&&O.exports===w?u.Buffer:void 0,x=(_?_.isBuffer:void 0)||function(){return!1},A=/^(?:0|[1-9]\d*)$/;function S(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&A.test(t))&&t>-1&&t%1==0&&t<e}function M(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}var I={};function $(t){return function(e){return t(e)}}I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Arguments]"]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object Boolean]"]=I["[object DataView]"]=I["[object Date]"]=I["[object Error]"]=I["[object Function]"]=I["[object Map]"]=I["[object Number]"]=I["[object Object]"]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object WeakMap]"]=!1;var N="object"==typeof exports&&exports&&!exports.nodeType&&exports,T=N&&"object"==typeof module&&module&&!module.nodeType&&module,D=T&&T.exports===N&&n.process,E=function(){try{var t=T&&T.require&&T.require("util").types;return t||D&&D.binding&&D.binding("util")}catch(t){}}(),P=E&&E.isTypedArray,U=P?$(P):function(t){return y(t)&&M(t.length)&&!!I[d(t)]},C=Object.prototype.hasOwnProperty;function F(t,e){var r=k(t),n=!r&&j(t),o=!r&&!n&&x(t),u=!r&&!n&&!o&&U(t),i=r||n||o||u,l=i?function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}(t.length,String):[],a=l.length;for(var s in t)!e&&!C.call(t,s)||i&&("length"==s||o&&("offset"==s||"parent"==s)||u&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||S(s,a))||l.push(s);return l}var z=Object.prototype;function B(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||z)}function R(t,e){return function(r){return t(e(r))}}var L=R(Object.keys,Object),J=Object.prototype.hasOwnProperty;function W(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function V(t){if(!W(t))return!1;var e=d(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}function H(t){return null!=t&&M(t.length)&&!V(t)}function q(t){return H(t)?F(t):function(t){if(!B(t))return L(t);var e=[];for(var r in Object(t))J.call(t,r)&&"constructor"!=r&&e.push(r);return e}(t)}function G(t){return"symbol"==typeof t||y(t)&&"[object Symbol]"==d(t)}var K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Y=/^\w*$/;var Q,X=u["__core-js_shared__"],Z=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var tt=Function.prototype.toString;function et(t){if(null!=t){try{return tt.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var rt=/^\[object .+?Constructor\]$/,nt=Function.prototype,ot=Object.prototype,ut=nt.toString,it=ot.hasOwnProperty,lt=RegExp("^"+ut.call(it).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function at(t){return!(!W(t)||(e=t,Z&&Z in e))&&(V(t)?lt:rt).test(et(t));var e}function st(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return at(r)?r:void 0}var ct=st(Object,"create");var ft=Object.prototype.hasOwnProperty;var pt=Object.prototype.hasOwnProperty;function dt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function yt(t,e){return t===e||t!=t&&e!=e}function vt(t,e){for(var r=t.length;r--;)if(yt(t[r][0],e))return r;return-1}dt.prototype.clear=function(){this.__data__=ct?ct(null):{},this.size=0},dt.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},dt.prototype.get=function(t){var e=this.__data__;if(ct){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return ft.call(e,t)?e[t]:void 0},dt.prototype.has=function(t){var e=this.__data__;return ct?void 0!==e[t]:pt.call(e,t)},dt.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ct&&void 0===e?"__lodash_hash_undefined__":e,this};var ht=Array.prototype.splice;function bt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}bt.prototype.clear=function(){this.__data__=[],this.size=0},bt.prototype.delete=function(t){var e=this.__data__,r=vt(e,t);return!(r<0)&&(r==e.length-1?e.pop():ht.call(e,r,1),--this.size,!0)},bt.prototype.get=function(t){var e=this.__data__,r=vt(e,t);return r<0?void 0:e[r][1]},bt.prototype.has=function(t){return vt(this.__data__,t)>-1},bt.prototype.set=function(t,e){var r=this.__data__,n=vt(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var gt=st(u,"Map");function mt(t,e){var r,n,o=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof e?"string":"hash"]:o.map}function jt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}jt.prototype.clear=function(){this.size=0,this.__data__={hash:new dt,map:new(gt||bt),string:new dt}},jt.prototype.delete=function(t){var e=mt(this,t).delete(t);return this.size-=e?1:0,e},jt.prototype.get=function(t){return mt(this,t).get(t)},jt.prototype.has=function(t){return mt(this,t).has(t)},jt.prototype.set=function(t,e){var r=mt(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function kt(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],u=r.cache;if(u.has(o))return u.get(o);var i=t.apply(this,n);return r.cache=u.set(o,i)||u,i};return r.cache=new(kt.Cache||jt),r}kt.Cache=jt;var wt,Ot,_t,xt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,At=/\\(\\)?/g,St=(wt=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(xt,function(t,r,n,o){e.push(n?o.replace(At,"$1"):r||t)}),e},Ot=kt(wt,function(t){return 500===_t.size&&_t.clear(),t}),_t=Ot.cache,Ot),Mt=St;function It(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o}var $t=i?i.prototype:void 0,Nt=$t?$t.toString:void 0;function Tt(t){if("string"==typeof t)return t;if(k(t))return It(t,Tt)+"";if(G(t))return Nt?Nt.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Dt(t){return null==t?"":Tt(t)}function Et(t,e){return k(t)?t:function(t,e){if(k(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!G(t))||Y.test(t)||!K.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:Mt(Dt(t))}function Pt(t){if("string"==typeof t||G(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ut(t,e){for(var r=0,n=(e=Et(e,t)).length;null!=t&&r<n;)t=t[Pt(e[r++])];return r&&r==n?t:void 0}function Ct(t,e,r){var n=null==t?void 0:Ut(t,e);return void 0===n?r:n}function Ft(t){var e=this.__data__=new bt(t);this.size=e.size}Ft.prototype.clear=function(){this.__data__=new bt,this.size=0},Ft.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Ft.prototype.get=function(t){return this.__data__.get(t)},Ft.prototype.has=function(t){return this.__data__.has(t)},Ft.prototype.set=function(t,e){var r=this.__data__;if(r instanceof bt){var n=r.__data__;if(!gt||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new jt(n)}return r.set(t,e),this.size=r.size,this};var zt=function(){try{var t=st(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),Bt=zt;function Rt(t,e,r){"__proto__"==e&&Bt?Bt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var Lt=Object.prototype.hasOwnProperty;function Jt(t,e,r){var n=t[e];Lt.call(t,e)&&yt(n,r)&&(void 0!==r||e in t)||Rt(t,e,r)}function Wt(t,e,r,n){var o=!r;r||(r={});for(var u=-1,i=e.length;++u<i;){var l=e[u],a=n?n(r[l],t[l],l,r,t):void 0;void 0===a&&(a=t[l]),o?Rt(r,l,a):Jt(r,l,a)}return r}var Vt=Object.prototype.hasOwnProperty;function Ht(t){if(!W(t))return function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}(t);var e=B(t),r=[];for(var n in t)("constructor"!=n||!e&&Vt.call(t,n))&&r.push(n);return r}function qt(t){return H(t)?F(t,!0):Ht(t)}var Gt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Kt=Gt&&"object"==typeof module&&module&&!module.nodeType&&module,Yt=Kt&&Kt.exports===Gt?u.Buffer:void 0,Qt=Yt?Yt.allocUnsafe:void 0;function Xt(){return[]}var Zt=Object.prototype.propertyIsEnumerable,te=Object.getOwnPropertySymbols,ee=te?function(t){return null==t?[]:(t=Object(t),function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,u=[];++r<n;){var i=t[r];e(i,r,t)&&(u[o++]=i)}return u}(te(t),function(e){return Zt.call(t,e)}))}:Xt,re=ee;function ne(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t}var oe=R(Object.getPrototypeOf,Object),ue=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)ne(e,re(t)),t=oe(t);return e}:Xt,ie=ue;function le(t,e,r){var n=e(t);return k(t)?n:ne(n,r(t))}function ae(t){return le(t,q,re)}function se(t){return le(t,qt,ie)}var ce=st(u,"DataView"),fe=st(u,"Promise"),pe=st(u,"Set"),de=st(u,"WeakMap"),ye="[object Map]",ve="[object Promise]",he="[object Set]",be="[object WeakMap]",ge="[object DataView]",me=et(ce),je=et(gt),ke=et(fe),we=et(pe),Oe=et(de),_e=d;(ce&&_e(new ce(new ArrayBuffer(1)))!=ge||gt&&_e(new gt)!=ye||fe&&_e(fe.resolve())!=ve||pe&&_e(new pe)!=he||de&&_e(new de)!=be)&&(_e=function(t){var e=d(t),r="[object Object]"==e?t.constructor:void 0,n=r?et(r):"";if(n)switch(n){case me:return ge;case je:return ye;case ke:return ve;case we:return he;case Oe:return be}return e});var xe=_e,Ae=Object.prototype.hasOwnProperty;var Se=u.Uint8Array;function Me(t){var e=new t.constructor(t.byteLength);return new Se(e).set(new Se(t)),e}var Ie=/\w*$/;var $e=i?i.prototype:void 0,Ne=$e?$e.valueOf:void 0;function Te(t,e,r){var n,o=t.constructor;switch(e){case"[object ArrayBuffer]":return Me(t);case"[object Boolean]":case"[object Date]":return new o(+t);case"[object DataView]":return function(t,e){var r=e?Me(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return function(t,e){var r=e?Me(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}(t,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(t);case"[object RegExp]":return function(t){var e=new t.constructor(t.source,Ie.exec(t));return e.lastIndex=t.lastIndex,e}(t);case"[object Symbol]":return n=t,Ne?Object(Ne.call(n)):{}}}var De=Object.create,Ee=function(){function t(){}return function(e){if(!W(e))return{};if(De)return De(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Pe=Ee;var Ue=E&&E.isMap,Ce=Ue?$(Ue):function(t){return y(t)&&"[object Map]"==xe(t)};var Fe=E&&E.isSet,ze=Fe?$(Fe):function(t){return y(t)&&"[object Set]"==xe(t)},Be="[object Arguments]",Re="[object Function]",Le="[object Object]",Je={};function We(t,e,r,n,o,u){var i,l=1&e,a=2&e,s=4&e;if(r&&(i=o?r(t,n,o,u):r(t)),void 0!==i)return i;if(!W(t))return t;var c=k(t);if(c){if(i=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&Ae.call(t,"index")&&(r.index=t.index,r.input=t.input),r}(t),!l)return function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}(t,i)}else{var f=xe(t),p=f==Re||"[object GeneratorFunction]"==f;if(x(t))return function(t,e){if(e)return t.slice();var r=t.length,n=Qt?Qt(r):new t.constructor(r);return t.copy(n),n}(t,l);if(f==Le||f==Be||p&&!o){if(i=a||p?{}:function(t){return"function"!=typeof t.constructor||B(t)?{}:Pe(oe(t))}(t),!l)return a?function(t,e){return Wt(t,ie(t),e)}(t,function(t,e){return t&&Wt(e,qt(e),t)}(i,t)):function(t,e){return Wt(t,re(t),e)}(t,function(t,e){return t&&Wt(e,q(e),t)}(i,t))}else{if(!Je[f])return o?t:{};i=Te(t,f,l)}}u||(u=new Ft);var d=u.get(t);if(d)return d;u.set(t,i),ze(t)?t.forEach(function(n){i.add(We(n,e,r,n,t,u))}):Ce(t)&&t.forEach(function(n,o){i.set(o,We(n,e,r,o,t,u))});var y=c?void 0:(s?a?se:ae:a?qt:q)(t);return function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););}(y||t,function(n,o){y&&(n=t[o=n]),Jt(i,o,We(n,e,r,o,t,u))}),i}function Ve(t,e){return e.length<2?t:Ut(t,function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var u=Array(o);++n<o;)u[n]=t[n+e];return u}(e,0,-1))}Je[Be]=Je["[object Array]"]=Je["[object ArrayBuffer]"]=Je["[object DataView]"]=Je["[object Boolean]"]=Je["[object Date]"]=Je["[object Float32Array]"]=Je["[object Float64Array]"]=Je["[object Int8Array]"]=Je["[object Int16Array]"]=Je["[object Int32Array]"]=Je["[object Map]"]=Je["[object Number]"]=Je[Le]=Je["[object RegExp]"]=Je["[object Set]"]=Je["[object String]"]=Je["[object Symbol]"]=Je["[object Uint8Array]"]=Je["[object Uint8ClampedArray]"]=Je["[object Uint16Array]"]=Je["[object Uint32Array]"]=!0,Je["[object Error]"]=Je[Re]=Je["[object WeakMap]"]=!1;var He=Object.prototype.hasOwnProperty;function qe(t,e){var r=-1,n=(e=Et(e,t)).length;if(!n)return!0;for(;++r<n;){var o=Pt(e[r]);if("__proto__"===o&&!He.call(t,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var u=Ve(t,e);return null==u||delete u[Pt(function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}(e))]}var Ge=Function.prototype,Ke=Object.prototype,Ye=Ge.toString,Qe=Ke.hasOwnProperty,Xe=Ye.call(Object);function Ze(t){return function(t){if(!y(t)||"[object Object]"!=d(t))return!1;var e=oe(t);if(null===e)return!0;var r=Qe.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Ye.call(r)==Xe}(t)?void 0:t}var tr=i?i.isConcatSpreadable:void 0;function er(t){return k(t)||j(t)||!!(tr&&t&&t[tr])}function rr(t,e,r,n,o){var u=-1,i=t.length;for(r||(r=er),o||(o=[]);++u<i;){var l=t[u];e>0&&r(l)?e>1?rr(l,e-1,r,n,o):ne(o,l):n||(o[o.length]=l)}return o}function nr(t){return(null==t?0:t.length)?rr(t,1):[]}var or=Math.max;var ur=Bt?function(t,e){return Bt(t,"toString",{configurable:!0,enumerable:!1,value:(r=e,function(){return r}),writable:!0});var r}:function(t){return t},ir=ur,lr=Date.now;var ar=function(t){var e=0,r=0;return function(){var n=lr(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ir),sr=ar;var cr=function(t){return sr(function(t,e,r){return e=or(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,u=or(n.length-e,0),i=Array(u);++o<u;)i[o]=n[e+o];o=-1;for(var l=Array(e+1);++o<e;)l[o]=n[o];return l[e]=r(i),function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}(t,this,l)}}(t,void 0,nr),t+"")}(function(t,e){var r={};if(null==t)return r;var n=!1;e=It(e,function(e){return e=Et(e,t),n||(n=e.length>1),e}),Wt(t,se(t),r),n&&(r=We(r,7,Ze));for(var o=e.length;o--;)qe(r,e[o]);return r}),fr=cr;function pr(t){return"[object Object]"===Object.prototype.toString.call(t)}function dr(t){return"[object String]"===Object.prototype.toString.call(t)}function yr(t){return!(!dr(t)||""===t)}function vr(){let t,e,r=new Promise(function(){t=arguments[0],e=arguments[1]});return r.resolve=t,r.reject=e,r}function hr(t){return t!=t}function br(t){let e=!1;if(yr(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(hr(t))return!1;e=!0}return e}function gr(t=10){br(t)||(t=10);let e=vr();return setTimeout(function(){e.resolve()},t),e}var mr=/\s/;var jr=/^\s+/;function kr(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&mr.test(t.charAt(e)););return e}(t)+1).replace(jr,""):t}var wr=/^[-+]0x[0-9a-f]+$/i,Or=/^0b[01]+$/i,_r=/^0o[0-7]+$/i,xr=parseInt;function Ar(t){if("number"==typeof t)return t;if(G(t))return NaN;if(W(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=W(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=kr(t);var r=Or.test(t);return r||_r.test(t)?xr(t.slice(2),r?2:8):wr.test(t)?NaN:+t}var Sr=1/0;function Mr(t){return t?(t=Ar(t))===Sr||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function Ir(t){var e=Mr(t),r=e%1;return e==e?r?e-r:e:0}var $r=u.isFinite,Nr=Math.min;var Tr=function(t){var e=Math[t];return function(t,r){if(t=Ar(t),(r=null==r?0:Nr(Ir(r),292))&&$r(t)){var n=(Dt(t)+"e").split("e");return+((n=(Dt(e(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return e(t)}}("round"),Dr=Tr;function Er(t){if(!br(t))return 0;return Mr(t)}function Pr(t){if(!br(t))return 0;t=Er(t);let e=Dr(t);return"0"===String(e)?0:e}function Ur(t){return"[object Array]"===Object.prototype.toString.call(t)}function Cr(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}function Fr(t){return!!br(t)&&(t=Er(t),"number"==typeof(e=t)&&e==Ir(e));var e}function zr(t){if(!Fr(t))return!1;return Pr(t)>0}function Br(t){if(!Fr(t))return!1;return Pr(t)>=0}function Rr(t,e){return yr(t)&&Br(e)?0===(e=Pr(e))?"":t.substring(0,e):""}function Lr(t,e){return yr(t)&&Br(e)?0===(e=Pr(e))?t:function(t,e){if(!yr(t))return"";if(!Br(e))return"";if(0===(e=Pr(e)))return"";let r=t.length-e;return r<0&&(r=0),t.substring(r,r+e)}(t,t.length-e):""}function Jr(t,e,r={}){if(!yr(t))return"";if(!Br(e))return t;if(e=Pr(e),t.length<=e)return t;let n=Ct(r,"funWithMsg"),o="";if(Cr(n)){let r=n(t,e);yr(r)&&(o=r)}return Rr(t,e)+`...${o}`}function Wr(t,e={}){let r=Ct(e,"fs");return!!function(t,e={}){let r=Ct(e,"fs"),n=!1;try{r.statSync(t),n=!0}catch{n=!1}return n}(t,{fs:r})&&(!r.lstatSync(t).isDirectory()&&!r.lstatSync(t).isSymbolicLink())}function Vr(t){return function(t,e={}){let r=null,n=Ct(e,"fs"),o="";try{o=n.readFileSync(t,"utf8")}catch(t){r=t}return null!==r?{error:r}:{success:o}}(t,{fs:r})}function Hr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var qr=t,Gr=qr.spawn,Kr=qr.exec;function Yr(t,e,r){var n={};try{Object.keys(t).forEach(function(r){t[r].forEach(function(t){n[t]||(Qr(t,e),n[t]=1)}),n[r]||(Qr(r,e),n[r]=1)})}catch(t){if(r)return r(t);throw t}if(r)return r()}function Qr(t,e){try{process.kill(parseInt(t,10),e)}catch(t){if("ESRCH"!==t.code)throw t}}function Xr(t,e,r,n,o){var u=n(t),i="";u.stdout.on("data",function(t){t=t.toString("ascii");i+=t});u.on("close",function(u){delete r[t],0==u?i.match(/\d+/g).forEach(function(u){u=parseInt(u,10),e[t].push(u),e[u]=[],r[u]=1,Xr(u,e,r,n,o)}):0==Object.keys(r).length&&o()})}var Zr=Hr(function(t,e,r){if("function"==typeof e&&void 0===r&&(r=e,e=void 0),t=parseInt(t),Number.isNaN(t)){if(r)return r(new Error("pid must be a number"));throw new Error("pid must be a number")}var n={},o={};switch(n[t]=[],o[t]=1,process.platform){case"win32":Kr("taskkill /pid "+t+" /T /F",r);break;case"darwin":Xr(t,n,o,function(t){return Gr("pgrep",["-P",t])},function(){Yr(n,e,r)});break;default:Xr(t,n,o,function(t){return Gr("ps",["-o","pid","--no-headers","--ppid",t])},function(){Yr(n,e,r)})}});function tn(t){let n=Ct(Vr(t),"success","");if(!yr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let u=e.dirname(t),i=e.join(u,o[1]);return Wr(i,{fs:r})?i:null}function en(r,n){if("win32"!==process.platform)return{file:r,args:n};let o=function(r){if("win32"!==process.platform)return r;if(/\.(cmd|exe|bat|ps1)$/i.test(r))return r;if(e.isAbsolute(r))return r;try{let e=t.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=e.find(t=>/\.cmd$/i.test(t));return n||(e.find(t=>/\.exe$/i.test(t))||e[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n};if(/\.(cmd|bat)$/i.test(o)){let t=tn(o);if(t)return/\.exe$/i.test(t)?{file:t,args:n}:{file:process.execPath,args:[t,...n]};let e=n.map(t=>`"${t.replace(/(\\*)"/g,'$1$1\\"').replace(/(\\*)$/,"$1$1")}"`.replace(/[()%!^"<>&|]/g,"^$&")),r=`${u=o,u.replace(/[()%!^"<>&|;, ]/g,"^$&")} ${e.join(" ")}`;return{file:process.env.comspec||process.env.COMSPEC||"cmd.exe",args:["/d","/s","/c",`"${r}"`],opt:{windowsVerbatimArguments:!0}}}var u;return{file:o,args:n}}let rn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};function nn(e,r=[],n={}){let{timeoutMs:o=12e4,cwd:u=process.cwd(),input:i,validate:l,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:f}=n,p=function(t){if(Cr(t))return t;if(!yr(t))return null;let e=t.split(",").map(t=>t.trim()).filter(Boolean);return 0===e.length?null:t=>{for(let r of e)if("nonempty"===r){if(!yr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Rr(r,4)){let e=Lr(r,4);if(!br(e))return!1;let n=Pr(e);if(!yr(t)||t.length<n)return!1}return!0}}(l),d=Date.now(),y=vr(),v={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==f){if("win32"===process.platform){let t=Object.keys(f).map(t=>t.toLowerCase());for(let e of Object.keys(v))t.includes(e.toLowerCase())&&delete v[e]}v={...v,...f}}let h=en(e,r),b=t.spawn(h.file,h.args,{cwd:u,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:v,...h.opt}),g="",m="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,O=!1;b.stdout.on("data",t=>{let e=j.decode(t,{stream:!0});e&&(Cr(s)&&s(e),g.length<a&&(g+=e))}),b.stderr.on("data",t=>{let e=k.decode(t,{stream:!0});e&&(Cr(c)&&c(e),m.length<a&&(m+=e))}),b.stdin.on("error",()=>{}),void 0!==i&&b.stdin.write(i,"utf8"),b.stdin.end();let _=setTimeout(()=>{w||(O=!0,function(t){let e=vr();return Zr(Number(t),"SIGKILL",r=>{r?e.reject(r):e.resolve(`pid[${t}] killed`)}),e}(b.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-d,pid:b.pid}))},3e3).unref())},o);return b.on("error",t=>{w||(w=!0,clearTimeout(_),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${t.code||"UNKNOWN"}: ${t.message}`,durationMs:Date.now()-d,pid:b.pid}))}),b.on("close",(t,e)=>{if(w)return;w=!0,clearTimeout(_);let r=j.decode();r&&g.length<a&&(g+=r);let n=k.decode();n&&m.length<a&&(m+=n);let u=Date.now()-d;O?y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:t,error:`TIMEOUT after ${o/1e3}s`,durationMs:u,pid:b.pid}):0===t?!p||p(g)?y.resolve({ok:!0,stdout:g,stderr:m,code:0,error:"",durationMs:u,pid:b.pid}):y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:u,pid:b.pid}):y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,1e3,rn),code:t,error:e?`Signal: ${e}`:`Exit code ${t}`,durationMs:u,pid:b.pid})}),y}async function on(t,e=[],r={}){if(!yr(t))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Ur(e)||(e=[]),pr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...u}=r,i=Ct(u,"cwd",null);yr(i)?u.cwd=i:u.cwd=process.cwd();let l=Ct(u,"input",null);yr(l)?u.input=l:u.input=void 0;let a=Ct(u,"env",null);pr(a)?u.env=a:u.env=void 0;let s=Ct(u,"validate",null);Cr(s)||yr(s)?u.validate=s:u.validate=void 0;let c=Ct(u,"onStdout",null);Cr(c)?u.onStdout=c:u.onStdout=void 0;let f=Ct(u,"onStderr",null);Cr(f)?u.onStderr=f:u.onStderr=void 0,n=Br(n)?Pr(n):0,o=zr(o)?Pr(o):5e3;let p=Ct(u,"timeoutMs",null);zr(p)?u.timeoutMs=Pr(p):u.timeoutMs=12e4;let d,y=Ct(u,"maxBuffer",null);zr(y)?u.maxBuffer=Pr(y):u.maxBuffer=10485760;let v=0;for(let r=0;r<=n;r++){if(r>0){let t=Math.min(o*r,15e3);await gr(t)}if(d=await nn(t,e,u),v=r+1,d.ok)return d.attempts=v,d;if(d.error.includes("ENOENT"))break;if(2===d.code)break}return d.attempts=v,d}function un(...t){let e=[];for(let r of t)if(Ur(r))for(let t of r)yr(t)&&e.push(t);else yr(r)&&e.push(r);return e}function ln(t){return yr(t)||(t="unknown error"),{ok:!1,stdout:"",stderr:"",code:null,error:t,durationMs:0,attempts:0}}let an=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function sn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="opencode");let n=Ct(e,"model",null),o=Ct(e,"agent",null);yr(o)||(o="build");let u=Ct(e,"extraArgs",null),i=un("run",["--agent",o],yr(n)?["-m",n]:[],u),l=Ct(e,"env",null);pr(l)||(l=void 0);let a=Ct(e,"config",null);pr(a)&&(a=JSON.stringify(a)),yr(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=Ct(e,"key",null),c=Ct(e,"provider",null);return yr(s)&&yr(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})}),on(r,i,{...fr(e,an),input:t,env:l})}function cn(t){return!0===(e=t)||!1===e||y(e)&&"[object Boolean]"==d(e);var e}let fn=["exe","model","skipPermissions","extraArgs","input"];async function pn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="claude");let n=Ct(e,"model",null),o=Ct(e,"skipPermissions",null);cn(o)||(o=!0);let u=Ct(e,"extraArgs",null);return on(r,un("-p",o?"--dangerously-skip-permissions":[],yr(n)?["--model",n]:[],u),{...fr(e,fn),input:t})}let dn=["exe","model","sandbox","extraArgs","input"];async function yn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="codex");let n=Ct(e,"model",null),o=Ct(e,"sandbox",null);yr(o)||(o="workspace-write");let u=Ct(e,"extraArgs",null);return on(r,un("exec",["--sandbox",o],"--skip-git-repo-check",yr(n)?["-m",n]:[],u),{...fr(e,dn),input:t})}let vn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function hn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");if(t.length>3e4)return ln(`prompt too long (${t.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Ct(e,"exe",null);yr(r)||(r="agy");let n=Ct(e,"model",null),o=Ct(e,"effort",null),u=Ct(e,"skipPermissions",null);cn(u)||(u=!0);let i=Ct(e,"timeoutMs",null);i=zr(i)?Pr(i):3e5;let l=Ct(e,"printTimeout",null);yr(l)||(l=`${Math.max(30,Math.floor(i/1e3)-30)}s`);let a=Ct(e,"addDirs",null),s=[];if(Ur(a))for(let t of a)yr(t)&&s.push("--add-dir",t);let c=Ct(e,"extraArgs",null),f=un(u?"--dangerously-skip-permissions":[],["--print-timeout",l],yr(n)?["--model",n]:[],yr(o)?["--effort",o]:[],s,c,["--print",t]),p=fr(e,vn);try{return await on(r,f,{...p,timeoutMs:i})}catch(t){return ln(`${t.code||"UNKNOWN"}: ${t.message}`)}}let bn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};async function gn(t,e,r,n,o){let u=Date.now(),i=new AbortController,l=setTimeout(()=>{i.abort()},n),a=null,s="";try{a=await fetch(t,{method:"POST",headers:e,body:JSON.stringify(r),signal:i.signal}),s=await a.text()}catch(t){clearTimeout(l);let e=Date.now()-u;return"AbortError"===t.name?{ok:!1,stdout:"",stderr:"",code:null,error:`TIMEOUT after ${n/1e3}s`,durationMs:e}:{ok:!1,stdout:"",stderr:"",code:null,error:`FETCH_ERROR: ${Ct(t,"cause.code","")||t.message}`,durationMs:e}}clearTimeout(l);let c=Date.now()-u;if(!a.ok)return{ok:!1,stdout:"",stderr:Jr(s,1e3,bn),code:a.status,error:`HTTP ${a.status}`,durationMs:c};let f=null;try{f=Ct(JSON.parse(s),"choices.0.message.content",null)}catch{}return null==f?{ok:!1,stdout:"",stderr:Jr(s,500,bn),code:a.status,error:"INVALID_RESPONSE: missing choices[0].message.content",durationMs:c}:("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?{ok:!1,stdout:Jr(f,500,bn),stderr:"",code:a.status,error:"OUTPUT_VALIDATION_FAILED",durationMs:c}:{ok:!0,stdout:f,stderr:"",code:a.status,error:"",durationMs:c})}async function mn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"baseURL",null);if(!yr(r))return ln("baseURL must be a non-empty string");let n=Ct(e,"model",null);if(!yr(n))return ln("model must be a non-empty string");let o=Ct(e,"key",null),u=Ct(e,"system",null),i=Ct(e,"body",null);pr(i)||(i={});let l=Ct(e,"headers",null);pr(l)||(l={});let a=Ct(e,"timeoutMs",null);a=zr(a)?Pr(a):12e4;let s=Ct(e,"maxRetries",null);s=Br(s)?Pr(s):0;let c=Ct(e,"retryDelayMs",null);c=zr(c)?Pr(c):5e3;let f=function(t){if(Cr(t))return t;if(!yr(t))return null;let e=t.split(",").map(t=>t.trim()).filter(Boolean);return 0===e.length?null:t=>{for(let r of e)if("nonempty"===r){if(!yr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Rr(r,4)){let e=Lr(r,4);if(!br(e))return!1;let n=Pr(e);if(!yr(t)||t.length<n)return!1}return!0}}(Ct(e,"validate",null)),p=r.replace(/\/+$/,"")+"/chat/completions",d=[];yr(u)&&d.push({role:"system",content:u}),d.push({role:"user",content:t});let y={model:n,messages:d,...i},v={"Content-Type":"application/json",...l};yr(o)&&(v.Authorization=`Bearer ${o}`);let h=null,b=0;for(let t=0;t<=s;t++){if(t>0&&await gr(Math.min(c*t,15e3)),h=await gn(p,v,y,a,f),b=t+1,h.ok)return h.attempts=b,h;let e=h.code;if(br(e)&&e>=400&&e<500&&429!==e)break}return h.attempts=b,h}let jn={opencode:sn,claude:pn,codex:yn,antigravity:hn,"api-openai-compat":mn};function kn(t){return t!=t}function wn(t){return null==t?[]:function(t,e){return It(e,function(e){return t[e]})}(t,q(t))}var On=Math.max;function _n(t,e,r,n){t=H(t)?t:wn(t),r=r&&!n?Ir(r):0;var o=t.length;return r<0&&(r=On(o+r,0)),function(t){return"string"==typeof t||!k(t)&&y(t)&&"[object String]"==d(t)}(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&function(t,e,r){return e==e?function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1}(t,e,r):function(t,e,r,n){for(var o=t.length,u=r+(n?1:-1);n?u--:++u<o;)if(e(t[u],u,t))return u;return-1}(t,kn,r)}(t,e,r)>-1}async function xn(t,e,r={}){let n=q(jn);return yr(t)&&_n(n,t)?(0,jn[t])(e,r):ln(`unknown ai kind: "${t}" (available: ${n.join(", ")})`)}let An=["providers","budgetMs","minAttemptMs","store","onEvent"],Sn=["id","keys"],Mn={cursors:{}};function In(t){let e=Ct(t,"error","");yr(e)||(e="");let r=Ct(t,"code",null);return 0===e.indexOf("TIMEOUT")||(!!e.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===e||0===e.indexOf("unknown ai kind"))))}async function $n(t,e={}){if(!yr(t))return{...ln("prompt must be a non-empty string"),tried:[]};let r=Ct(e,"providers",null),n=Ur(r)?r.filter(pr):[];if(0===n.length)return{...ln("providers must be a non-empty array"),tried:[]};let o=Ct(e,"budgetMs",null);o=zr(o)?Pr(o):null;let u=null===o?null:Date.now()+o,i=Ct(e,"minAttemptMs",null);i=zr(i)?Pr(i):2e4;let l=Ct(e,"store",null),a=pr(l)&&Cr(l.get)&&Cr(l.set),s=null;if(a)try{s=l.get()}catch{}pr(s)||(s=a?{cursors:{}}:Mn),pr(s.cursors)||(s.cursors={});let c=()=>{if(a)try{l.set(s)}catch{}},f=Ct(e,"onEvent",null),p=t=>{if(Cr(f))try{f(t)}catch{}},d=fr(e,An),y=[],v=null,h=null;for(let e=0;e<n.length;e++){let r=n[e],o=Ct(r,"id",null);yr(o)||(o=String(e));let l=Ct(r,"kind",null),a=Ct(r,"model",null),f=Ct(r,"keys",null),b=Ur(f)?f.filter(yr):[],g=b.length,m=fr(r,Sn),j=0;if(g>0){let t=Ct(s.cursors,o,0);j=zr(t)?Pr(t)%g:0}let k=g>0?g:1,w=!1;for(let e=0;e<k&&!w;e++){let r=g>0?(j+e)%g:null,n=null===r?o:`${o}#${r}`,f={...d,...m};g>0&&(f.key=b[r]);let k=Ct(f,"timeoutMs",null);if(k=zr(k)?Pr(k):12e4,null!==u){let t=u-Date.now();if(t<i)return p({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:t}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...ln("budget exhausted"),tried:y};k=Math.min(k,t)}f.timeoutMs=k,p({type:"try",providerId:o,keyIndex:r,keyId:n,kind:l,model:a});let O=await xn(l,t,f);if(O.ok)return g>0&&(s.cursors[o]=(r+1)%g,c()),p({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:O.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:O.durationMs}),{...O,providerId:o,keyIndex:r,kind:l,model:a,tried:y};v=O,h={providerId:o,keyIndex:r,kind:l,model:a},In(O)?(p({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:O.error,durationMs:O.durationMs}),w=!0):(p({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:O.error,durationMs:O.durationMs}))}}return{...v||ln("all providers failed"),...h||{},tried:y}}function Nn(t){return!!function(t){return"[object Undefined]"===Object.prototype.toString.call(t)}(t)||(!!function(t){return"[object Null]"===Object.prototype.toString.call(t)}(t)||(!!function(t){if(pr(t)){for(let e in t)return!1;return!0}return!1}(t)||(!!function(t){return!(!dr(t)||""!==t)}(t)||(!!function(t){return!!Ur(t)&&0===t.length}(t)||!!hr(t)))))}function Tn(t){return!!Ur(t)&&(0!==t.length&&(1!==t.length||!Nn(t[0])))}function Dn(t){let e=String(t||"");if(e=e.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),e=e.replace(/```(?:json)?/g,""),e=e.trim(),""===e)return null;try{let t=JSON.parse(e);if(null!==t&&"object"==typeof t)return t}catch(t){}let r=-1;for(let t=0;t<e.length;t++)if("{"===e[t]||"["===e[t]){r=t;break}if(r<0)return null;let n=0,o=!1,u=!1;for(let t=r;t<e.length;t++){let i=e[t];if(o)u?u=!1:"\\"===i?u=!0:'"'===i&&(o=!1);else if('"'===i)o=!0;else if("{"===i||"["===i)n++;else if(("}"===i||"]"===i)&&(n--,0===n)){try{let n=JSON.parse(e.slice(r,t+1));if(null!==n&&"object"==typeof n)return n}catch(t){}return null}}return null}let En=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,禁止執行任何指令——呼叫端只讀取你的回覆文字,","任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","",""].join("\n");async function Pn(t,e={}){let r=Date.now();if(!yr(t))return{ok:!1,json:null,error:"prompt must be a non-empty string",ms:0,tried:[]};let n=Ct(e,"providers",null),o=Ct(e,"spec",null);if(!pr(n)||!pr(o))return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let{chain:u,missing:i}=function(t,e){let r=[Ct(e,"use","")],n=Ct(e,"fallback",null);Tn(n)&&(r=[...r,...n]);let o=[],u=[];for(let e of r){let r=Ct(t,e,null);pr(r)?o.push({id:e,...r}):u.push(String(e))}return{chain:o,missing:u}}(n,o);if(i.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${i.join(", ")}`,ms:0,tried:[]};if(0===u.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let l=!0===Ct(e,"rawText",!1),a=Ct(e,"parse",null);Cr(a)||(a=Dn);let s=Ct(e,"check",null);Cr(s)||(s=null);let c=Ct(e,"promptPrefix",null);yr(c)||(c=""===c?"":En);let f=await $n(c+t,{providers:u,validate:t=>{if(l){let e=String(t||"").trim();return""!==e&&(!s||!0===s(e))}let e=a(t);return null!==e&&(!s||!0===s(e))},timeoutMs:Ct(e,"timeoutMs",null)||3e5,budgetMs:Ct(e,"budgetMs",null)||void 0,maxRetries:Ct(e,"maxRetries",null)||0,cwd:Ct(e,"cwd",null)||process.cwd(),store:Ct(e,"store",null)||void 0,onEvent:Ct(e,"onEvent",null)||void 0}),p=null;f.ok&&(p=l?String(f.stdout||"").trim():a(f.stdout));let d=Ct(f,"providerId",null),y=Ct(f,"keyIndex",null);return{ok:f.ok&&null!==p,json:p,providerId:d,keyIndex:y,keyId:null===y?d:`${d}#${y}`,ms:Date.now()-r,tried:Ct(f,"tried",[]),error:f.ok?"":Ct(f,"error","unknown error")}}async function Un(t={}){let e=Date.now(),r=Ct(t,"providers",null),n=Ct(t,"task",""),o=Ct(t,"agents",null),u=Ct(t,"integrate",null),i=Ct(t,"check",null),l=Ct(t,"callOpt",{});if(!yr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Tn(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Ct(t,"minCandidates",null);a=zr(a)?Pr(a):2;let s=await Promise.all(o.map(t=>{let{use:e,fallback:o,...u}=t;return Pn(n,{...l,...u,providers:r,spec:{use:e,fallback:o},check:i})})),c=s.filter(t=>t.ok).map(t=>t.json);if(0===c.length)return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:"all agents failed"};if(1===c.length||c.length<a)return{ok:!0,result:c[0],integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:""};if(!u||!yr(Ct(u,"use","")))return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:"integrate spec (with use) is required"};let{use:f,fallback:p,prompt:d,...y}=u,v=Cr(d)?d(c):function(t,e={}){let r=Ct(e,"schema",""),n=yr(r)?`\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同:\n${r}\n`:"\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同。\n";return`你是整合者。以下是同一任務由 ${t.length} 個獨立執行產生的候選結果(JSON),請整合成單一最佳版本:擇優合併、去重、保留最完整的證據標注與爭議呈現,不可加入候選中沒有的數字或結論。\n${n}\n${t.map((t,e)=>`【候選 ${e+1}】\n${JSON.stringify(t)}`).join("\n\n")}`}(c,t),h=await Pn(v,{...l,...y,providers:r,spec:{use:f,fallback:p},check:i});return{ok:h.ok,result:h.ok?h.json:null,integrated:h.ok,agents:s,candidates:c,integrateDetail:h,totalMs:Date.now()-e,error:h.ok?"":`integrate failed: ${h.error}`}}let Cn=["id","use","fallback","prompt","check"];async function Fn(t={}){let e=Date.now(),r=Ct(t,"providers",null),n=Ct(t,"input",null),o=Ct(t,"stages",null),u=Ct(t,"callOpt",{});if(!Tn(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let i={},l={},a=[],s=null;for(let t=0;t<o.length;t++){let c=o[t],f=yr(Ct(c,"id",""))?c.id:`stage${t+1}`;a.push(f);let p=Ct(c,"prompt",null);if(!Cr(p))return l[f]={ok:!1,error:`stage[${f}].prompt must be a function`},{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:l[f].error};let d=p({input:n,prev:s,results:i,index:t});if(!yr(d))return l[f]={ok:!1,error:`stage[${f}].prompt returned empty`},{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:l[f].error};let y=fr(c,Cn),v=await Pn(d,{...u,...y,providers:r,spec:{use:Ct(c,"use",""),fallback:Ct(c,"fallback",null)},check:Ct(c,"check",null)});if(l[f]=v,!v.ok)return{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:`stage[${f}] failed: ${v.error}`};i[f]=v.json,s=v.json}return{ok:!0,result:s,stages:l,results:i,order:a,failedStage:null,totalMs:Date.now()-e,error:""}}return{KINDS:q(jn),dispatchAi:xn,dispatchAiFallback:$n,dispatchAiWkf:function(t={}){let e=Ct(t,"providers",null);if(!pr(e))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ct(t,"defaults",null);return pr(r)||(r={}),{providers:e,callAi:(t,n={})=>Pn(t,{...r,...n,providers:e}),runFanout:(t={})=>Un({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}}),runRolePipeline:(t={})=>Fn({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}}),runFanoutPipeline:(t={})=>async function(t={}){let e=Date.now(),r=await Un({providers:Ct(t,"providers",null),task:Ct(t,"task",""),agents:Ct(t,"agents",null),integrate:Ct(t,"integrate",null),check:Ct(t,"check",null),schema:Ct(t,"schema",""),minCandidates:Ct(t,"minCandidates",null),callOpt:Ct(t,"callOpt",{})});if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-e,error:`A failed: ${r.error}`};let n=await Fn({providers:Ct(t,"providers",null),input:r.result,stages:Ct(t,"stages",null),callOpt:Ct(t,"callOpt",{})});return{ok:n.ok,result:n.ok?n.result:null,A:r,B:n,totalMs:Date.now()-e,error:n.ok?"":`B failed: ${n.error}`}}({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}})}},dispatchOpencode:sn,dispatchClaude:pn,dispatchCodex:yn,dispatchAntigravity:hn,dispatchApiOpenaiCompat:mn}});
6
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("child_process"),require("path"),require("fs")):"function"==typeof define&&define.amd?define(["child_process","path","fs"],e):(t="undefined"!=typeof globalThis?globalThis:t||self)["w-dispatch-ai"]=e(t.child_process,t.path,t.fs)}(this,function(t,e,r){"use strict";var n="object"==typeof global&&global&&global.Object===Object&&global,o="object"==typeof self&&self&&self.Object===Object&&self,u=n||o||Function("return this")(),i=u.Symbol,l=Object.prototype,a=l.hasOwnProperty,s=l.toString,c=i?i.toStringTag:void 0;var f=Object.prototype.toString;var d=i?i.toStringTag:void 0;function p(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":d&&d in Object(t)?function(t){var e=a.call(t,c),r=t[c];try{t[c]=void 0;var n=!0}catch(t){}var o=s.call(t);return n&&(e?t[c]=r:delete t[c]),o}(t):function(t){return f.call(t)}(t)}function y(t){return null!=t&&"object"==typeof t}function h(t){return y(t)&&"[object Arguments]"==p(t)}var v=Object.prototype,b=v.hasOwnProperty,g=v.propertyIsEnumerable,m=h(function(){return arguments}())?h:function(t){return y(t)&&b.call(t,"callee")&&!g.call(t,"callee")},j=m,k=Array.isArray;var w="object"==typeof exports&&exports&&!exports.nodeType&&exports,O=w&&"object"==typeof module&&module&&!module.nodeType&&module,_=O&&O.exports===w?u.Buffer:void 0,x=(_?_.isBuffer:void 0)||function(){return!1},A=/^(?:0|[1-9]\d*)$/;function S(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&A.test(t))&&t>-1&&t%1==0&&t<e}function M(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}var I={};function $(t){return function(e){return t(e)}}I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Arguments]"]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object Boolean]"]=I["[object DataView]"]=I["[object Date]"]=I["[object Error]"]=I["[object Function]"]=I["[object Map]"]=I["[object Number]"]=I["[object Object]"]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object WeakMap]"]=!1;var N="object"==typeof exports&&exports&&!exports.nodeType&&exports,T=N&&"object"==typeof module&&module&&!module.nodeType&&module,D=T&&T.exports===N&&n.process,E=function(){try{var t=T&&T.require&&T.require("util").types;return t||D&&D.binding&&D.binding("util")}catch(t){}}(),P=E&&E.isTypedArray,U=P?$(P):function(t){return y(t)&&M(t.length)&&!!I[p(t)]},C=Object.prototype.hasOwnProperty;function F(t,e){var r=k(t),n=!r&&j(t),o=!r&&!n&&x(t),u=!r&&!n&&!o&&U(t),i=r||n||o||u,l=i?function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}(t.length,String):[],a=l.length;for(var s in t)!e&&!C.call(t,s)||i&&("length"==s||o&&("offset"==s||"parent"==s)||u&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||S(s,a))||l.push(s);return l}var z=Object.prototype;function B(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||z)}function L(t,e){return function(r){return t(e(r))}}var R=L(Object.keys,Object),J=Object.prototype.hasOwnProperty;function W(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function V(t){if(!W(t))return!1;var e=p(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}function H(t){return null!=t&&M(t.length)&&!V(t)}function q(t){return H(t)?F(t):function(t){if(!B(t))return R(t);var e=[];for(var r in Object(t))J.call(t,r)&&"constructor"!=r&&e.push(r);return e}(t)}function G(t){return"symbol"==typeof t||y(t)&&"[object Symbol]"==p(t)}var K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Y=/^\w*$/;var Q,X=u["__core-js_shared__"],Z=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var tt=Function.prototype.toString;function et(t){if(null!=t){try{return tt.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var rt=/^\[object .+?Constructor\]$/,nt=Function.prototype,ot=Object.prototype,ut=nt.toString,it=ot.hasOwnProperty,lt=RegExp("^"+ut.call(it).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function at(t){return!(!W(t)||(e=t,Z&&Z in e))&&(V(t)?lt:rt).test(et(t));var e}function st(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return at(r)?r:void 0}var ct=st(Object,"create");var ft=Object.prototype.hasOwnProperty;var dt=Object.prototype.hasOwnProperty;function pt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function yt(t,e){return t===e||t!=t&&e!=e}function ht(t,e){for(var r=t.length;r--;)if(yt(t[r][0],e))return r;return-1}pt.prototype.clear=function(){this.__data__=ct?ct(null):{},this.size=0},pt.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},pt.prototype.get=function(t){var e=this.__data__;if(ct){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return ft.call(e,t)?e[t]:void 0},pt.prototype.has=function(t){var e=this.__data__;return ct?void 0!==e[t]:dt.call(e,t)},pt.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ct&&void 0===e?"__lodash_hash_undefined__":e,this};var vt=Array.prototype.splice;function bt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}bt.prototype.clear=function(){this.__data__=[],this.size=0},bt.prototype.delete=function(t){var e=this.__data__,r=ht(e,t);return!(r<0)&&(r==e.length-1?e.pop():vt.call(e,r,1),--this.size,!0)},bt.prototype.get=function(t){var e=this.__data__,r=ht(e,t);return r<0?void 0:e[r][1]},bt.prototype.has=function(t){return ht(this.__data__,t)>-1},bt.prototype.set=function(t,e){var r=this.__data__,n=ht(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var gt=st(u,"Map");function mt(t,e){var r,n,o=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof e?"string":"hash"]:o.map}function jt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}jt.prototype.clear=function(){this.size=0,this.__data__={hash:new pt,map:new(gt||bt),string:new pt}},jt.prototype.delete=function(t){var e=mt(this,t).delete(t);return this.size-=e?1:0,e},jt.prototype.get=function(t){return mt(this,t).get(t)},jt.prototype.has=function(t){return mt(this,t).has(t)},jt.prototype.set=function(t,e){var r=mt(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function kt(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],u=r.cache;if(u.has(o))return u.get(o);var i=t.apply(this,n);return r.cache=u.set(o,i)||u,i};return r.cache=new(kt.Cache||jt),r}kt.Cache=jt;var wt,Ot,_t,xt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,At=/\\(\\)?/g,St=(wt=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(xt,function(t,r,n,o){e.push(n?o.replace(At,"$1"):r||t)}),e},Ot=kt(wt,function(t){return 500===_t.size&&_t.clear(),t}),_t=Ot.cache,Ot),Mt=St;function It(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o}var $t=i?i.prototype:void 0,Nt=$t?$t.toString:void 0;function Tt(t){if("string"==typeof t)return t;if(k(t))return It(t,Tt)+"";if(G(t))return Nt?Nt.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Dt(t){return null==t?"":Tt(t)}function Et(t,e){return k(t)?t:function(t,e){if(k(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!G(t))||Y.test(t)||!K.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:Mt(Dt(t))}function Pt(t){if("string"==typeof t||G(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ut(t,e){for(var r=0,n=(e=Et(e,t)).length;null!=t&&r<n;)t=t[Pt(e[r++])];return r&&r==n?t:void 0}function Ct(t,e,r){var n=null==t?void 0:Ut(t,e);return void 0===n?r:n}function Ft(t){var e=this.__data__=new bt(t);this.size=e.size}Ft.prototype.clear=function(){this.__data__=new bt,this.size=0},Ft.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Ft.prototype.get=function(t){return this.__data__.get(t)},Ft.prototype.has=function(t){return this.__data__.has(t)},Ft.prototype.set=function(t,e){var r=this.__data__;if(r instanceof bt){var n=r.__data__;if(!gt||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new jt(n)}return r.set(t,e),this.size=r.size,this};var zt=function(){try{var t=st(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),Bt=zt;function Lt(t,e,r){"__proto__"==e&&Bt?Bt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var Rt=Object.prototype.hasOwnProperty;function Jt(t,e,r){var n=t[e];Rt.call(t,e)&&yt(n,r)&&(void 0!==r||e in t)||Lt(t,e,r)}function Wt(t,e,r,n){var o=!r;r||(r={});for(var u=-1,i=e.length;++u<i;){var l=e[u],a=n?n(r[l],t[l],l,r,t):void 0;void 0===a&&(a=t[l]),o?Lt(r,l,a):Jt(r,l,a)}return r}var Vt=Object.prototype.hasOwnProperty;function Ht(t){if(!W(t))return function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}(t);var e=B(t),r=[];for(var n in t)("constructor"!=n||!e&&Vt.call(t,n))&&r.push(n);return r}function qt(t){return H(t)?F(t,!0):Ht(t)}var Gt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Kt=Gt&&"object"==typeof module&&module&&!module.nodeType&&module,Yt=Kt&&Kt.exports===Gt?u.Buffer:void 0,Qt=Yt?Yt.allocUnsafe:void 0;function Xt(){return[]}var Zt=Object.prototype.propertyIsEnumerable,te=Object.getOwnPropertySymbols,ee=te?function(t){return null==t?[]:(t=Object(t),function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,u=[];++r<n;){var i=t[r];e(i,r,t)&&(u[o++]=i)}return u}(te(t),function(e){return Zt.call(t,e)}))}:Xt,re=ee;function ne(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t}var oe=L(Object.getPrototypeOf,Object),ue=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)ne(e,re(t)),t=oe(t);return e}:Xt,ie=ue;function le(t,e,r){var n=e(t);return k(t)?n:ne(n,r(t))}function ae(t){return le(t,q,re)}function se(t){return le(t,qt,ie)}var ce=st(u,"DataView"),fe=st(u,"Promise"),de=st(u,"Set"),pe=st(u,"WeakMap"),ye="[object Map]",he="[object Promise]",ve="[object Set]",be="[object WeakMap]",ge="[object DataView]",me=et(ce),je=et(gt),ke=et(fe),we=et(de),Oe=et(pe),_e=p;(ce&&_e(new ce(new ArrayBuffer(1)))!=ge||gt&&_e(new gt)!=ye||fe&&_e(fe.resolve())!=he||de&&_e(new de)!=ve||pe&&_e(new pe)!=be)&&(_e=function(t){var e=p(t),r="[object Object]"==e?t.constructor:void 0,n=r?et(r):"";if(n)switch(n){case me:return ge;case je:return ye;case ke:return he;case we:return ve;case Oe:return be}return e});var xe=_e,Ae=Object.prototype.hasOwnProperty;var Se=u.Uint8Array;function Me(t){var e=new t.constructor(t.byteLength);return new Se(e).set(new Se(t)),e}var Ie=/\w*$/;var $e=i?i.prototype:void 0,Ne=$e?$e.valueOf:void 0;function Te(t,e,r){var n,o=t.constructor;switch(e){case"[object ArrayBuffer]":return Me(t);case"[object Boolean]":case"[object Date]":return new o(+t);case"[object DataView]":return function(t,e){var r=e?Me(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return function(t,e){var r=e?Me(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}(t,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(t);case"[object RegExp]":return function(t){var e=new t.constructor(t.source,Ie.exec(t));return e.lastIndex=t.lastIndex,e}(t);case"[object Symbol]":return n=t,Ne?Object(Ne.call(n)):{}}}var De=Object.create,Ee=function(){function t(){}return function(e){if(!W(e))return{};if(De)return De(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Pe=Ee;var Ue=E&&E.isMap,Ce=Ue?$(Ue):function(t){return y(t)&&"[object Map]"==xe(t)};var Fe=E&&E.isSet,ze=Fe?$(Fe):function(t){return y(t)&&"[object Set]"==xe(t)},Be="[object Arguments]",Le="[object Function]",Re="[object Object]",Je={};function We(t,e,r,n,o,u){var i,l=1&e,a=2&e,s=4&e;if(r&&(i=o?r(t,n,o,u):r(t)),void 0!==i)return i;if(!W(t))return t;var c=k(t);if(c){if(i=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&Ae.call(t,"index")&&(r.index=t.index,r.input=t.input),r}(t),!l)return function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}(t,i)}else{var f=xe(t),d=f==Le||"[object GeneratorFunction]"==f;if(x(t))return function(t,e){if(e)return t.slice();var r=t.length,n=Qt?Qt(r):new t.constructor(r);return t.copy(n),n}(t,l);if(f==Re||f==Be||d&&!o){if(i=a||d?{}:function(t){return"function"!=typeof t.constructor||B(t)?{}:Pe(oe(t))}(t),!l)return a?function(t,e){return Wt(t,ie(t),e)}(t,function(t,e){return t&&Wt(e,qt(e),t)}(i,t)):function(t,e){return Wt(t,re(t),e)}(t,function(t,e){return t&&Wt(e,q(e),t)}(i,t))}else{if(!Je[f])return o?t:{};i=Te(t,f,l)}}u||(u=new Ft);var p=u.get(t);if(p)return p;u.set(t,i),ze(t)?t.forEach(function(n){i.add(We(n,e,r,n,t,u))}):Ce(t)&&t.forEach(function(n,o){i.set(o,We(n,e,r,o,t,u))});var y=c?void 0:(s?a?se:ae:a?qt:q)(t);return function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););}(y||t,function(n,o){y&&(n=t[o=n]),Jt(i,o,We(n,e,r,o,t,u))}),i}function Ve(t,e){return e.length<2?t:Ut(t,function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var u=Array(o);++n<o;)u[n]=t[n+e];return u}(e,0,-1))}Je[Be]=Je["[object Array]"]=Je["[object ArrayBuffer]"]=Je["[object DataView]"]=Je["[object Boolean]"]=Je["[object Date]"]=Je["[object Float32Array]"]=Je["[object Float64Array]"]=Je["[object Int8Array]"]=Je["[object Int16Array]"]=Je["[object Int32Array]"]=Je["[object Map]"]=Je["[object Number]"]=Je[Re]=Je["[object RegExp]"]=Je["[object Set]"]=Je["[object String]"]=Je["[object Symbol]"]=Je["[object Uint8Array]"]=Je["[object Uint8ClampedArray]"]=Je["[object Uint16Array]"]=Je["[object Uint32Array]"]=!0,Je["[object Error]"]=Je[Le]=Je["[object WeakMap]"]=!1;var He=Object.prototype.hasOwnProperty;function qe(t,e){var r=-1,n=(e=Et(e,t)).length;if(!n)return!0;for(;++r<n;){var o=Pt(e[r]);if("__proto__"===o&&!He.call(t,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var u=Ve(t,e);return null==u||delete u[Pt(function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}(e))]}var Ge=Function.prototype,Ke=Object.prototype,Ye=Ge.toString,Qe=Ke.hasOwnProperty,Xe=Ye.call(Object);function Ze(t){return function(t){if(!y(t)||"[object Object]"!=p(t))return!1;var e=oe(t);if(null===e)return!0;var r=Qe.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Ye.call(r)==Xe}(t)?void 0:t}var tr=i?i.isConcatSpreadable:void 0;function er(t){return k(t)||j(t)||!!(tr&&t&&t[tr])}function rr(t,e,r,n,o){var u=-1,i=t.length;for(r||(r=er),o||(o=[]);++u<i;){var l=t[u];e>0&&r(l)?e>1?rr(l,e-1,r,n,o):ne(o,l):n||(o[o.length]=l)}return o}function nr(t){return(null==t?0:t.length)?rr(t,1):[]}var or=Math.max;var ur=Bt?function(t,e){return Bt(t,"toString",{configurable:!0,enumerable:!1,value:(r=e,function(){return r}),writable:!0});var r}:function(t){return t},ir=ur,lr=Date.now;var ar=function(t){var e=0,r=0;return function(){var n=lr(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ir),sr=ar;var cr=function(t){return sr(function(t,e,r){return e=or(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,u=or(n.length-e,0),i=Array(u);++o<u;)i[o]=n[e+o];o=-1;for(var l=Array(e+1);++o<e;)l[o]=n[o];return l[e]=r(i),function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}(t,this,l)}}(t,void 0,nr),t+"")}(function(t,e){var r={};if(null==t)return r;var n=!1;e=It(e,function(e){return e=Et(e,t),n||(n=e.length>1),e}),Wt(t,se(t),r),n&&(r=We(r,7,Ze));for(var o=e.length;o--;)qe(r,e[o]);return r}),fr=cr;function dr(t){return"[object Object]"===Object.prototype.toString.call(t)}function pr(t){return"[object String]"===Object.prototype.toString.call(t)}function yr(t){return!(!pr(t)||""===t)}function hr(){let t,e,r=new Promise(function(){t=arguments[0],e=arguments[1]});return r.resolve=t,r.reject=e,r}function vr(t){return t!=t}function br(t){let e=!1;if(yr(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(vr(t))return!1;e=!0}return e}function gr(t=10){br(t)||(t=10);let e=hr();return setTimeout(function(){e.resolve()},t),e}var mr=/\s/;var jr=/^\s+/;function kr(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&mr.test(t.charAt(e)););return e}(t)+1).replace(jr,""):t}var wr=/^[-+]0x[0-9a-f]+$/i,Or=/^0b[01]+$/i,_r=/^0o[0-7]+$/i,xr=parseInt;function Ar(t){if("number"==typeof t)return t;if(G(t))return NaN;if(W(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=W(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=kr(t);var r=Or.test(t);return r||_r.test(t)?xr(t.slice(2),r?2:8):wr.test(t)?NaN:+t}var Sr=1/0;function Mr(t){return t?(t=Ar(t))===Sr||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function Ir(t){var e=Mr(t),r=e%1;return e==e?r?e-r:e:0}var $r=u.isFinite,Nr=Math.min;var Tr=function(t){var e=Math[t];return function(t,r){if(t=Ar(t),(r=null==r?0:Nr(Ir(r),292))&&$r(t)){var n=(Dt(t)+"e").split("e");return+((n=(Dt(e(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return e(t)}}("round"),Dr=Tr;function Er(t){if(!br(t))return 0;return Mr(t)}function Pr(t){if(!br(t))return 0;t=Er(t);let e=Dr(t);return"0"===String(e)?0:e}function Ur(t){return"[object Array]"===Object.prototype.toString.call(t)}function Cr(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}function Fr(t){return!!br(t)&&(t=Er(t),"number"==typeof(e=t)&&e==Ir(e));var e}function zr(t){if(!Fr(t))return!1;return Pr(t)>0}function Br(t){if(!Fr(t))return!1;return Pr(t)>=0}function Lr(t,e){return yr(t)&&Br(e)?0===(e=Pr(e))?"":t.substring(0,e):""}function Rr(t,e){return yr(t)&&Br(e)?0===(e=Pr(e))?t:function(t,e){if(!yr(t))return"";if(!Br(e))return"";if(0===(e=Pr(e)))return"";let r=t.length-e;return r<0&&(r=0),t.substring(r,r+e)}(t,t.length-e):""}function Jr(t,e,r={}){if(!yr(t))return"";if(!Br(e))return t;if(e=Pr(e),t.length<=e)return t;let n=Ct(r,"funWithMsg"),o="";if(Cr(n)){let r=n(t,e);yr(r)&&(o=r)}return Lr(t,e)+`...${o}`}function Wr(t,e={}){let r=Ct(e,"fs");return!!function(t,e={}){let r=Ct(e,"fs"),n=!1;try{r.statSync(t),n=!0}catch{n=!1}return n}(t,{fs:r})&&(!r.lstatSync(t).isDirectory()&&!r.lstatSync(t).isSymbolicLink())}function Vr(t){return function(t,e={}){let r=null,n=Ct(e,"fs"),o="";try{o=n.readFileSync(t,"utf8")}catch(t){r=t}return null!==r?{error:r}:{success:o}}(t,{fs:r})}function Hr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var qr=t,Gr=qr.spawn,Kr=qr.exec;function Yr(t,e,r){var n={};try{Object.keys(t).forEach(function(r){t[r].forEach(function(t){n[t]||(Qr(t,e),n[t]=1)}),n[r]||(Qr(r,e),n[r]=1)})}catch(t){if(r)return r(t);throw t}if(r)return r()}function Qr(t,e){try{process.kill(parseInt(t,10),e)}catch(t){if("ESRCH"!==t.code)throw t}}function Xr(t,e,r,n,o){var u=n(t),i="";u.stdout.on("data",function(t){t=t.toString("ascii");i+=t});u.on("close",function(u){delete r[t],0==u?i.match(/\d+/g).forEach(function(u){u=parseInt(u,10),e[t].push(u),e[u]=[],r[u]=1,Xr(u,e,r,n,o)}):0==Object.keys(r).length&&o()})}var Zr=Hr(function(t,e,r){if("function"==typeof e&&void 0===r&&(r=e,e=void 0),t=parseInt(t),Number.isNaN(t)){if(r)return r(new Error("pid must be a number"));throw new Error("pid must be a number")}var n={},o={};switch(n[t]=[],o[t]=1,process.platform){case"win32":Kr("taskkill /pid "+t+" /T /F",r);break;case"darwin":Xr(t,n,o,function(t){return Gr("pgrep",["-P",t])},function(){Yr(n,e,r)});break;default:Xr(t,n,o,function(t){return Gr("ps",["-o","pid","--no-headers","--ppid",t])},function(){Yr(n,e,r)})}});function tn(t){let n=Ct(Vr(t),"success","");if(!yr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let u=e.dirname(t),i=e.join(u,o[1]);return Wr(i,{fs:r})?i:null}function en(r,n){if("win32"!==process.platform)return{file:r,args:n};let o=function(r){if("win32"!==process.platform)return r;if(/\.(cmd|exe|bat|ps1)$/i.test(r))return r;if(e.isAbsolute(r))return r;try{let e=t.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=e.find(t=>/\.cmd$/i.test(t));return n||(e.find(t=>/\.exe$/i.test(t))||e[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n};if(/\.(cmd|bat)$/i.test(o)){let t=tn(o);if(t)return/\.exe$/i.test(t)?{file:t,args:n}:{file:process.execPath,args:[t,...n]};let e=n.map(t=>`"${t.replace(/(\\*)"/g,'$1$1\\"').replace(/(\\*)$/,"$1$1")}"`.replace(/[()%!^"<>&|]/g,"^$&")),r=`${u=o,u.replace(/[()%!^"<>&|;, ]/g,"^$&")} ${e.join(" ")}`;return{file:process.env.comspec||process.env.COMSPEC||"cmd.exe",args:["/d","/s","/c",`"${r}"`],opt:{windowsVerbatimArguments:!0}}}var u;return{file:o,args:n}}let rn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};function nn(e,r=[],n={}){let{timeoutMs:o=12e4,cwd:u=process.cwd(),input:i,validate:l,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:f}=n,d=function(t){if(Cr(t))return t;if(!yr(t))return null;let e=t.split(",").map(t=>t.trim()).filter(Boolean);return 0===e.length?null:t=>{for(let r of e)if("nonempty"===r){if(!yr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Lr(r,4)){let e=Rr(r,4);if(!br(e))return!1;let n=Pr(e);if(!yr(t)||t.length<n)return!1}return!0}}(l),p=Date.now(),y=hr(),h={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==f){if("win32"===process.platform){let t=Object.keys(f).map(t=>t.toLowerCase());for(let e of Object.keys(h))t.includes(e.toLowerCase())&&delete h[e]}h={...h,...f}}let v=en(e,r),b=t.spawn(v.file,v.args,{cwd:u,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...v.opt}),g="",m="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,O=!1;b.stdout.on("data",t=>{let e=j.decode(t,{stream:!0});e&&(Cr(s)&&s(e),g.length<a&&(g+=e))}),b.stderr.on("data",t=>{let e=k.decode(t,{stream:!0});e&&(Cr(c)&&c(e),m.length<a&&(m+=e))}),b.stdin.on("error",()=>{}),void 0!==i&&b.stdin.write(i,"utf8"),b.stdin.end();let _=setTimeout(()=>{w||(O=!0,function(t){let e=hr();return Zr(Number(t),"SIGKILL",r=>{r?e.reject(r):e.resolve(`pid[${t}] killed`)}),e}(b.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:b.pid}))},3e3).unref())},o);return b.on("error",t=>{w||(w=!0,clearTimeout(_),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${t.code||"UNKNOWN"}: ${t.message}`,durationMs:Date.now()-p,pid:b.pid}))}),b.on("close",(t,e)=>{if(w)return;w=!0,clearTimeout(_);let r=j.decode();r&&g.length<a&&(g+=r);let n=k.decode();n&&m.length<a&&(m+=n);let u=Date.now()-p;O?y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:t,error:`TIMEOUT after ${o/1e3}s`,durationMs:u,pid:b.pid}):0===t?!d||d(g)?y.resolve({ok:!0,stdout:g,stderr:m,code:0,error:"",durationMs:u,pid:b.pid}):y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:u,pid:b.pid}):y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,1e3,rn),code:t,error:e?`Signal: ${e}`:`Exit code ${t}`,durationMs:u,pid:b.pid})}),y}async function on(t,e=[],r={}){if(!yr(t))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Ur(e)||(e=[]),dr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...u}=r,i=Ct(u,"cwd",null);yr(i)?u.cwd=i:u.cwd=process.cwd();let l=Ct(u,"input",null);yr(l)?u.input=l:u.input=void 0;let a=Ct(u,"env",null);dr(a)?u.env=a:u.env=void 0;let s=Ct(u,"validate",null);Cr(s)||yr(s)?u.validate=s:u.validate=void 0;let c=Ct(u,"onStdout",null);Cr(c)?u.onStdout=c:u.onStdout=void 0;let f=Ct(u,"onStderr",null);Cr(f)?u.onStderr=f:u.onStderr=void 0,n=Br(n)?Pr(n):0,o=zr(o)?Pr(o):5e3;let d=Ct(u,"timeoutMs",null);zr(d)?u.timeoutMs=Pr(d):u.timeoutMs=12e4;let p,y=Ct(u,"maxBuffer",null);zr(y)?u.maxBuffer=Pr(y):u.maxBuffer=10485760;let h=0;for(let r=0;r<=n;r++){if(r>0){let t=Math.min(o*r,15e3);await gr(t)}if(p=await nn(t,e,u),h=r+1,p.ok)return p.attempts=h,p;if(p.error.includes("ENOENT"))break;if(2===p.code)break}return p.attempts=h,p}function un(...t){let e=[];for(let r of t)if(Ur(r))for(let t of r)yr(t)&&e.push(t);else yr(r)&&e.push(r);return e}function ln(t){return yr(t)||(t="unknown error"),{ok:!1,stdout:"",stderr:"",code:null,error:t,durationMs:0,attempts:0}}let an=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function sn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="opencode");let n=Ct(e,"model",null),o=Ct(e,"agent",null);yr(o)||(o="build");let u=Ct(e,"extraArgs",null),i=un("run",["--agent",o],yr(n)?["-m",n]:[],u),l=Ct(e,"env",null);dr(l)||(l=void 0);let a=Ct(e,"config",null);dr(a)&&(a=JSON.stringify(a)),yr(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=Ct(e,"key",null),c=Ct(e,"provider",null);return yr(s)&&yr(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})}),on(r,i,{...fr(e,an),input:t,env:l})}function cn(t){return!0===(e=t)||!1===e||y(e)&&"[object Boolean]"==p(e);var e}let fn=["exe","model","skipPermissions","extraArgs","input"];async function dn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="claude");let n=Ct(e,"model",null),o=Ct(e,"skipPermissions",null);cn(o)||(o=!0);let u=Ct(e,"extraArgs",null);return on(r,un("-p",o?"--dangerously-skip-permissions":[],yr(n)?["--model",n]:[],u),{...fr(e,fn),input:t})}let pn=["exe","model","sandbox","extraArgs","input"];async function yn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="codex");let n=Ct(e,"model",null),o=Ct(e,"sandbox",null);yr(o)||(o="workspace-write");let u=Ct(e,"extraArgs",null);return on(r,un("exec",["--sandbox",o],"--skip-git-repo-check",yr(n)?["-m",n]:[],u),{...fr(e,pn),input:t})}let hn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function vn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");if(t.length>3e4)return ln(`prompt too long (${t.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Ct(e,"exe",null);yr(r)||(r="agy");let n=Ct(e,"model",null),o=Ct(e,"effort",null),u=Ct(e,"skipPermissions",null);cn(u)||(u=!0);let i=Ct(e,"timeoutMs",null);i=zr(i)?Pr(i):3e5;let l=Ct(e,"printTimeout",null);yr(l)||(l=`${Math.max(30,Math.floor(i/1e3)-30)}s`);let a=Ct(e,"addDirs",null),s=[];if(Ur(a))for(let t of a)yr(t)&&s.push("--add-dir",t);let c=Ct(e,"extraArgs",null),f=un(u?"--dangerously-skip-permissions":[],["--print-timeout",l],yr(n)?["--model",n]:[],yr(o)?["--effort",o]:[],s,c,["--print",t]),d=fr(e,hn);try{return await on(r,f,{...d,timeoutMs:i})}catch(t){return ln(`${t.code||"UNKNOWN"}: ${t.message}`)}}let bn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};async function gn(t,e,r,n,o){let u=Date.now(),i=new AbortController,l=setTimeout(()=>{i.abort()},n),a=null,s="";try{a=await fetch(t,{method:"POST",headers:e,body:JSON.stringify(r),signal:i.signal}),s=await a.text()}catch(t){clearTimeout(l);let e=Date.now()-u;return"AbortError"===t.name?{ok:!1,stdout:"",stderr:"",code:null,error:`TIMEOUT after ${n/1e3}s`,durationMs:e}:{ok:!1,stdout:"",stderr:"",code:null,error:`FETCH_ERROR: ${Ct(t,"cause.code","")||t.message}`,durationMs:e}}clearTimeout(l);let c=Date.now()-u;if(!a.ok)return{ok:!1,stdout:"",stderr:Jr(s,1e3,bn),code:a.status,error:`HTTP ${a.status}`,durationMs:c};let f=null,d="",p=null;try{let t=JSON.parse(s);f=Ct(t,"choices.0.message.content",null),d=Ct(t,"choices.0.finish_reason",""),p=Ct(t,"choices.0.message.tool_calls",null)}catch{}return"tool_calls"===d||null!=p?{ok:!1,stdout:"",stderr:Jr(s,1e3,bn),code:a.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",durationMs:c}:null==f?{ok:!1,stdout:"",stderr:Jr(s,500,bn),code:a.status,error:"INVALID_RESPONSE: missing choices[0].message.content",durationMs:c}:("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?{ok:!1,stdout:Jr(f,500,bn),stderr:"",code:a.status,error:"OUTPUT_VALIDATION_FAILED",durationMs:c}:{ok:!0,stdout:f,stderr:"",code:a.status,error:"",durationMs:c})}async function mn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"baseURL",null);if(!yr(r))return ln("baseURL must be a non-empty string");let n=Ct(e,"model",null);if(!yr(n))return ln("model must be a non-empty string");let o=Ct(e,"key",null),u=Ct(e,"system",null),i=Ct(e,"body",null);dr(i)||(i={});let l=Ct(e,"headers",null);dr(l)||(l={});let a=Ct(e,"timeoutMs",null);a=zr(a)?Pr(a):12e4;let s=Ct(e,"maxRetries",null);s=Br(s)?Pr(s):0;let c=Ct(e,"retryDelayMs",null);c=zr(c)?Pr(c):5e3;let f=function(t){if(Cr(t))return t;if(!yr(t))return null;let e=t.split(",").map(t=>t.trim()).filter(Boolean);return 0===e.length?null:t=>{for(let r of e)if("nonempty"===r){if(!yr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Lr(r,4)){let e=Rr(r,4);if(!br(e))return!1;let n=Pr(e);if(!yr(t)||t.length<n)return!1}return!0}}(Ct(e,"validate",null)),d=r.replace(/\/+$/,"")+"/chat/completions",p=[];yr(u)&&p.push({role:"system",content:u}),p.push({role:"user",content:t});let y={model:n,messages:p,...i},h={"Content-Type":"application/json",...l};yr(o)&&(h.Authorization=`Bearer ${o}`);let v=null,b=0;for(let t=0;t<=s;t++){if(t>0&&await gr(Math.min(c*t,15e3)),v=await gn(d,h,y,a,f),b=t+1,v.ok)return v.attempts=b,v;let e=v.code;if(br(e)&&e>=400&&e<500&&429!==e)break}return v.attempts=b,v}let jn={opencode:sn,claude:dn,codex:yn,antigravity:vn,"api-openai-compat":mn};function kn(t){return t!=t}function wn(t){return null==t?[]:function(t,e){return It(e,function(e){return t[e]})}(t,q(t))}var On=Math.max;function _n(t,e,r,n){t=H(t)?t:wn(t),r=r&&!n?Ir(r):0;var o=t.length;return r<0&&(r=On(o+r,0)),function(t){return"string"==typeof t||!k(t)&&y(t)&&"[object String]"==p(t)}(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&function(t,e,r){return e==e?function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1}(t,e,r):function(t,e,r,n){for(var o=t.length,u=r+(n?1:-1);n?u--:++u<o;)if(e(t[u],u,t))return u;return-1}(t,kn,r)}(t,e,r)>-1}async function xn(t,e,r={}){let n=q(jn);return yr(t)&&_n(n,t)?(0,jn[t])(e,r):ln(`unknown ai kind: "${t}" (available: ${n.join(", ")})`)}let An=["providers","budgetMs","minAttemptMs","store","onEvent"],Sn=["id","keys"],Mn={cursors:{}};function In(t){let e=Ct(t,"error","");yr(e)||(e="");let r=Ct(t,"code",null);return 0===e.indexOf("TIMEOUT")||(!!e.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===e||0===e.indexOf("unknown ai kind"))))}async function $n(t,e={}){if(!yr(t))return{...ln("prompt must be a non-empty string"),tried:[]};let r=Ct(e,"providers",null),n=Ur(r)?r.filter(dr):[];if(0===n.length)return{...ln("providers must be a non-empty array"),tried:[]};let o=Ct(e,"budgetMs",null);o=zr(o)?Pr(o):null;let u=null===o?null:Date.now()+o,i=Ct(e,"minAttemptMs",null);i=zr(i)?Pr(i):2e4;let l=Ct(e,"store",null),a=dr(l)&&Cr(l.get)&&Cr(l.set),s=null;if(a)try{s=l.get()}catch{}dr(s)||(s=a?{cursors:{}}:Mn),dr(s.cursors)||(s.cursors={});let c=()=>{if(a)try{l.set(s)}catch{}},f=Ct(e,"onEvent",null),d=t=>{if(Cr(f))try{f(t)}catch{}},p=fr(e,An),y=[],h=null,v=null;for(let e=0;e<n.length;e++){let r=n[e],o=Ct(r,"id",null);yr(o)||(o=String(e));let l=Ct(r,"kind",null),a=Ct(r,"model",null),f=Ct(r,"keys",null),b=Ur(f)?f.filter(yr):[],g=b.length,m=fr(r,Sn),j=0;if(g>0){let t=Ct(s.cursors,o,0);j=zr(t)?Pr(t)%g:0}let k=g>0?g:1,w=!1;for(let e=0;e<k&&!w;e++){let r=g>0?(j+e)%g:null,n=null===r?o:`${o}#${r}`,f={...p,...m};g>0&&(f.key=b[r]);let k=Ct(f,"timeoutMs",null);if(k=zr(k)?Pr(k):12e4,null!==u){let t=u-Date.now();if(t<i)return d({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:t}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...ln("budget exhausted"),tried:y};k=Math.min(k,t)}f.timeoutMs=k,d({type:"try",providerId:o,keyIndex:r,keyId:n,kind:l,model:a});let O=await xn(l,t,f);if(O.ok)return g>0&&(s.cursors[o]=(r+1)%g,c()),d({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:O.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:O.durationMs}),{...O,providerId:o,keyIndex:r,kind:l,model:a,tried:y};h=O,v={providerId:o,keyIndex:r,kind:l,model:a},In(O)?(d({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:O.error,durationMs:O.durationMs}),w=!0):(d({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:O.error,durationMs:O.durationMs}))}}return{...h||ln("all providers failed"),...v||{},tried:y}}function Nn(t){return!!function(t){return"[object Undefined]"===Object.prototype.toString.call(t)}(t)||(!!function(t){return"[object Null]"===Object.prototype.toString.call(t)}(t)||(!!function(t){if(dr(t)){for(let e in t)return!1;return!0}return!1}(t)||(!!function(t){return!(!pr(t)||""!==t)}(t)||(!!function(t){return!!Ur(t)&&0===t.length}(t)||!!vr(t)))))}function Tn(t){return!!Ur(t)&&(0!==t.length&&(1!==t.length||!Nn(t[0])))}function Dn(t){let e=String(t||"");if(e=e.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),e=e.replace(/```(?:json)?/g,""),e=e.trim(),""===e)return null;try{let t=JSON.parse(e);if(null!==t&&"object"==typeof t)return t}catch(t){}let r=-1;for(let t=0;t<e.length;t++)if("{"===e[t]||"["===e[t]){r=t;break}if(r<0)return null;let n=0,o=!1,u=!1;for(let t=r;t<e.length;t++){let i=e[t];if(o)u?u=!1:"\\"===i?u=!0:'"'===i&&(o=!1);else if('"'===i)o=!0;else if("{"===i||"["===i)n++;else if(("}"===i||"]"===i)&&(n--,0===n)){try{let n=JSON.parse(e.slice(r,t+1));if(null!==n&&"object"==typeof n)return n}catch(t){}return null}}return null}let En=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,禁止執行任何指令——呼叫端只讀取你的回覆文字,","任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","",""].join("\n");async function Pn(t,e={}){let r=Date.now();if(!yr(t))return{ok:!1,json:null,error:"prompt must be a non-empty string",ms:0,tried:[]};let n=Ct(e,"providers",null),o=Ct(e,"spec",null);if(!dr(n)||!dr(o))return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let{chain:u,missing:i}=function(t,e){let r=[Ct(e,"use","")],n=Ct(e,"fallback",null);Tn(n)&&(r=[...r,...n]);let o=[],u=[];for(let e of r){let r=Ct(t,e,null);dr(r)?o.push({id:e,...r}):u.push(String(e))}return{chain:o,missing:u}}(n,o);if(i.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${i.join(", ")}`,ms:0,tried:[]};if(0===u.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let l=!0===Ct(e,"rawText",!1),a=Ct(e,"parse",null);Cr(a)||(a=Dn);let s=Ct(e,"check",null);Cr(s)||(s=null);let c=Ct(e,"promptPrefix",null);yr(c)||(c=""===c?"":En);let f=await $n(c+t,{providers:u,validate:t=>{if(l){let e=String(t||"").trim();return""!==e&&(!s||!0===s(e))}let e=a(t);return null!==e&&(!s||!0===s(e))},timeoutMs:Ct(e,"timeoutMs",null)||3e5,budgetMs:Ct(e,"budgetMs",null)||void 0,maxRetries:Ct(e,"maxRetries",null)||0,cwd:Ct(e,"cwd",null)||process.cwd(),store:Ct(e,"store",null)||void 0,onEvent:Ct(e,"onEvent",null)||void 0}),d=null;f.ok&&(d=l?String(f.stdout||"").trim():a(f.stdout));let p=Ct(f,"providerId",null),y=Ct(f,"keyIndex",null);return{ok:f.ok&&null!==d,json:d,providerId:p,keyIndex:y,keyId:null===y?p:`${p}#${y}`,ms:Date.now()-r,tried:Ct(f,"tried",[]),error:f.ok?"":Ct(f,"error","unknown error")}}async function Un(t={}){let e=Date.now(),r=Ct(t,"providers",null),n=Ct(t,"task",""),o=Ct(t,"agents",null),u=Ct(t,"integrate",null),i=Ct(t,"check",null),l=Ct(t,"callOpt",{});if(!yr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Tn(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Ct(t,"minCandidates",null);a=zr(a)?Pr(a):2;let s=await Promise.all(o.map(t=>{let{use:e,fallback:o,...u}=t;return Pn(n,{...l,...u,providers:r,spec:{use:e,fallback:o},check:i})})),c=s.filter(t=>t.ok).map(t=>t.json);if(0===c.length)return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:"all agents failed"};if(1===c.length||c.length<a)return{ok:!0,result:c[0],integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:""};if(!u||!yr(Ct(u,"use","")))return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:"integrate spec (with use) is required"};let{use:f,fallback:d,prompt:p,...y}=u,h=Cr(p)?p(c):function(t,e={}){let r=Ct(e,"schema",""),n=yr(r)?`\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同:\n${r}\n`:"\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同。\n";return`你是整合者。以下是同一任務由 ${t.length} 個獨立執行產生的候選結果(JSON),請整合成單一最佳版本:擇優合併、去重、保留最完整的證據標注與爭議呈現,不可加入候選中沒有的數字或結論。\n${n}\n${t.map((t,e)=>`【候選 ${e+1}】\n${JSON.stringify(t)}`).join("\n\n")}`}(c,t),v=await Pn(h,{...l,...y,providers:r,spec:{use:f,fallback:d},check:i});return{ok:v.ok,result:v.ok?v.json:null,integrated:v.ok,agents:s,candidates:c,integrateDetail:v,totalMs:Date.now()-e,error:v.ok?"":`integrate failed: ${v.error}`}}let Cn=["id","use","fallback","prompt","check"];async function Fn(t={}){let e=Date.now(),r=Ct(t,"providers",null),n=Ct(t,"input",null),o=Ct(t,"stages",null),u=Ct(t,"callOpt",{});if(!Tn(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let i={},l={},a=[],s=null;for(let t=0;t<o.length;t++){let c=o[t],f=yr(Ct(c,"id",""))?c.id:`stage${t+1}`;a.push(f);let d=Ct(c,"prompt",null);if(!Cr(d))return l[f]={ok:!1,error:`stage[${f}].prompt must be a function`},{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:l[f].error};let p=d({input:n,prev:s,results:i,index:t});if(!yr(p))return l[f]={ok:!1,error:`stage[${f}].prompt returned empty`},{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:l[f].error};let y=fr(c,Cn),h=await Pn(p,{...u,...y,providers:r,spec:{use:Ct(c,"use",""),fallback:Ct(c,"fallback",null)},check:Ct(c,"check",null)});if(l[f]=h,!h.ok)return{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:`stage[${f}] failed: ${h.error}`};i[f]=h.json,s=h.json}return{ok:!0,result:s,stages:l,results:i,order:a,failedStage:null,totalMs:Date.now()-e,error:""}}return{KINDS:q(jn),dispatchAi:xn,dispatchAiFallback:$n,dispatchAiWkf:function(t={}){let e=Ct(t,"providers",null);if(!dr(e))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ct(t,"defaults",null);return dr(r)||(r={}),{providers:e,callAi:(t,n={})=>Pn(t,{...r,...n,providers:e}),runFanout:(t={})=>Un({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}}),runRolePipeline:(t={})=>Fn({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}}),runFanoutPipeline:(t={})=>async function(t={}){let e=Date.now(),r=await Un({providers:Ct(t,"providers",null),task:Ct(t,"task",""),agents:Ct(t,"agents",null),integrate:Ct(t,"integrate",null),check:Ct(t,"check",null),schema:Ct(t,"schema",""),minCandidates:Ct(t,"minCandidates",null),callOpt:Ct(t,"callOpt",{})});if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-e,error:`A failed: ${r.error}`};let n=await Fn({providers:Ct(t,"providers",null),input:r.result,stages:Ct(t,"stages",null),callOpt:Ct(t,"callOpt",{})});return{ok:n.ok,result:n.ok?n.result:null,A:r,B:n,totalMs:Date.now()-e,error:n.ok?"":`B failed: ${n.error}`}}({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}})}},dispatchOpencode:sn,dispatchClaude:dn,dispatchCodex:yn,dispatchAntigravity:vn,dispatchApiOpenaiCompat:mn}});
7
7
  //# sourceMappingURL=w-dispatch-ai.umd.js.map