w-dispatch-ai 1.0.4 → 1.0.6
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 +94 -17
- package/dist/w-dispatch-ai.umd.js +2 -2
- package/dist/w-dispatch-ai.umd.js.map +1 -1
- package/docs/WDispatchAi.mjs.html +8 -4
- package/docs/adapters.mjs.html +2 -2
- package/docs/dfTimeoutMs.mjs.html +98 -0
- package/docs/dispatchAi.mjs.html +2 -2
- package/docs/dispatchAiFallback.mjs.html +16 -11
- package/docs/dispatchAiWkf.mjs.html +11 -2
- package/docs/dispatchAntigravity.mjs.html +23 -12
- package/docs/dispatchApiOpenaiCompat.mjs.html +5 -4
- package/docs/dispatchClaude.mjs.html +17 -4
- package/docs/dispatchCodex.mjs.html +16 -3
- package/docs/dispatchOpencode.mjs.html +16 -3
- package/docs/getCliArgs.mjs.html +2 -2
- package/docs/getErrorResult.mjs.html +2 -2
- package/docs/global.html +501 -35
- package/docs/index.html +2 -2
- package/docs/resolveProviders.mjs.html +189 -0
- package/docs/wkf_callAiWithFallback.mjs.html +29 -13
- package/docs/wkf_extractJsonLoose.mjs.html +2 -2
- package/docs/wkf_runFanout.mjs.html +2 -2
- package/docs/wkf_runFanoutPipeline.mjs.html +2 -2
- package/docs/wkf_runRolePipeline.mjs.html +2 -2
- package/g.mjs +7 -7
- package/package.json +1 -1
- package/src/WDispatchAi.mjs +6 -2
- package/src/dfTimeoutMs.mjs +26 -0
- package/src/dispatchAiFallback.mjs +14 -9
- package/src/dispatchAiWkf.mjs +9 -0
- package/src/dispatchAntigravity.mjs +21 -10
- package/src/dispatchApiOpenaiCompat.mjs +3 -2
- package/src/dispatchClaude.mjs +15 -2
- package/src/dispatchCodex.mjs +14 -1
- package/src/dispatchOpencode.mjs +14 -1
- package/src/providers.mjs +133 -0
- package/src/resolveProviders.mjs +117 -0
- package/src/wkf/callAiWithFallback.mjs +27 -11
- package/test/unit-WDispatchAi.test.mjs +9 -3
- package/test/unit-callAiWithFallback.test.mjs +15 -0
- package/test/unit-dispatchAi.test.mjs +1 -1
- package/test/unit-dispatchAiFallback.test.mjs +25 -0
- package/test/unit-dispatchAiWkf.test.mjs +8 -0
- package/test/unit-dispatchAntigravity.test.mjs +25 -5
- package/test/unit-providers.test.mjs +66 -0
- package/test/unit-resolveProviders.test.mjs +85 -0
package/README.md
CHANGED
|
@@ -40,6 +40,8 @@ Note:
|
|
|
40
40
|
| `dispatchCodex(prompt, opt)` | call a gpt model by openai codex cli |
|
|
41
41
|
| `dispatchAntigravity(prompt, opt)` | call an ai model by google antigravity cli (`agy`), a multi-model gateway (gemini, claude, gpt-oss) |
|
|
42
42
|
| `dispatchApiOpenaiCompat(prompt, opt)` | call an ai model by direct fetch to any OpenAI-compatible API (`baseURL`+`key`+`model`), no cli and no login required |
|
|
43
|
+
| `providers` | curated provider entries verified by real tests (cli and rest paths), pick or use all via `resolveProviders` |
|
|
44
|
+
| `resolveProviders(providers, opt)` | expand `envVar` → `keys` from env (comma-separated, missing vars auto-skipped), supports `pick` subset by id |
|
|
43
45
|
| `KINDS` | array of available kinds, `['opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat']` |
|
|
44
46
|
|
|
45
47
|
#### Example:
|
|
@@ -159,7 +161,7 @@ let test = async () => {
|
|
|
159
161
|
providers: [
|
|
160
162
|
//REST版排前面: 免CLI、快3~5倍, 純文字任務優先走此路
|
|
161
163
|
{
|
|
162
|
-
id: '
|
|
164
|
+
id: 'agnes:agnes-2.0-flash',
|
|
163
165
|
kind: 'api-openai-compat',
|
|
164
166
|
baseURL: 'https://apihub.agnes-ai.com/v1',
|
|
165
167
|
model: 'agnes-2.0-flash',
|
|
@@ -184,12 +186,12 @@ let test = async () => {
|
|
|
184
186
|
})
|
|
185
187
|
console.log('fallback:', r7.ok, r7.providerId, r7.keyIndex, r7.stdout.trim())
|
|
186
188
|
console.log('tried:', r7.tried.map((x) => `${x.keyId}:${x.outcome}`).join(', '))
|
|
187
|
-
// => event: try
|
|
188
|
-
// => event: next-key
|
|
189
|
-
// => event: try
|
|
190
|
-
// => event: ok
|
|
191
|
-
// => fallback: true
|
|
192
|
-
// => tried:
|
|
189
|
+
// => event: try agnes:agnes-2.0-flash#0
|
|
190
|
+
// => event: next-key agnes:agnes-2.0-flash#0 HTTP 401
|
|
191
|
+
// => event: try agnes:agnes-2.0-flash#1
|
|
192
|
+
// => event: ok agnes:agnes-2.0-flash#1
|
|
193
|
+
// => fallback: true agnes:agnes-2.0-flash 1 完成
|
|
194
|
+
// => tried: agnes:agnes-2.0-flash#0:next-key, agnes:agnes-2.0-flash#1:ok
|
|
193
195
|
|
|
194
196
|
}
|
|
195
197
|
await test()
|
|
@@ -204,7 +206,7 @@ await test()
|
|
|
204
206
|
| `exe` | String | 各CLI名稱 | 執行檔名稱或絕對路徑,給予名稱時由系統`PATH`解析 |
|
|
205
207
|
| `model` | String | `''` | 模型ID,未給予則不帶模型旗標,由CLI自行決定 |
|
|
206
208
|
| `extraArgs` | Array | `[]` | 額外命令列旗標字串陣列,接於固定旗標之後 |
|
|
207
|
-
| `timeoutMs` | Integer | `
|
|
209
|
+
| `timeoutMs` | Integer | `300000` | 逾時毫秒,逾時將強制關閉子進程及其子孫程序;**全套件統一預設**(所有轉接器與各層一致,單一來源`dfTimeoutMs.mjs`),由opt傳入即可覆寫 |
|
|
208
210
|
| `cwd` | String | `process.cwd()` | 子進程工作目錄 |
|
|
209
211
|
| `validate` | String\|Function | `undefined` | `stdout`驗證規則,可用`'nonempty'`、`'json'`、`'min:100'`,多規則以逗號串接,亦可給予`(stdout)=>Boolean` |
|
|
210
212
|
| `maxRetries` | Integer | `0` | 失敗後最大重試次數,遇`ENOENT`或exit code 2視為不可重試而立即中止 |
|
|
@@ -236,8 +238,8 @@ await test()
|
|
|
236
238
|
| `effort` | String | `''` | `'low'`、`'medium'`、`'high'`,需agy>=1.1.11;建議搭配不帶檔位之基礎slug(如`gemini-3.1-pro`),與帶檔位slug併用且檔位不一致時agy回conflicts錯誤 |
|
|
237
239
|
| `skipPermissions` | Boolean | `true` | 是否帶`--dangerously-skip-permissions`旗標 |
|
|
238
240
|
| `printTimeout` | String | 由`timeoutMs`推導 | agy自身等待上限(如`'10m'`、`'570s'`),預設`timeoutMs`扣30秒緩衝(下限30秒),令CLI先於外層逾時而回報自身錯誤訊息 |
|
|
239
|
-
| `addDirs` | Array |
|
|
240
|
-
| `timeoutMs` | Integer | `300000` | agy
|
|
241
|
+
| `addDirs` | Array | 自動納入cwd | 加入workspace之目錄字串陣列,逐項展開為`--add-dir`。agy以自身scratch目錄為工作區而**不採子進程cwd**,故未給時自動納入有效cwd令檔案可視範圍與其他CLI一致;明示給陣列(含`[]`代表不揭露任何目錄)則完全尊重呼叫端 |
|
|
242
|
+
| `timeoutMs` | Integer | `300000` | 全套件統一預設(恰對齊agy自身print-timeout之5m0s) |
|
|
241
243
|
|
|
242
244
|
注意:agy之prompt走`--print`旗標而非stdin(agy介面如此),故prompt長度上限30000字元,超過回傳錯誤結果物件(不reject)。
|
|
243
245
|
|
|
@@ -264,7 +266,7 @@ await test()
|
|
|
264
266
|
| `system` | String | `''` | system提示詞,置於messages首位 |
|
|
265
267
|
| `body` | Object | `{}` | 額外請求本體(`temperature`、`max_tokens`、`response_format`等),同名鍵覆寫預設 |
|
|
266
268
|
| `headers` | Object | `{}` | 額外請求標頭 |
|
|
267
|
-
| `timeoutMs` | Integer | `
|
|
269
|
+
| `timeoutMs` | Integer | `300000` | 逾時毫秒,逾時中止請求(含回應串流讀取);全套件統一預設 |
|
|
268
270
|
| `maxRetries` | Integer | `0` | 失敗重試次數;**4xx(429除外)為客戶端錯誤不重試**,429/5xx/網路錯誤/逾時線性退避重試 |
|
|
269
271
|
| `retryDelayMs` | Integer | `5000` | 重試間隔,實際為`retryDelayMs`×次數且上限15000ms |
|
|
270
272
|
|
|
@@ -279,7 +281,7 @@ await test()
|
|
|
279
281
|
| `budgetMs` | Integer | 不限 | 整輪遞補之時間上限,剩餘預算會壓進每次呼叫之`timeoutMs` |
|
|
280
282
|
| `minAttemptMs` | Integer | `20000` | 單次嘗試之最低剩餘預算,低於此值即停止並回報`budget exhausted` |
|
|
281
283
|
| `store` | Object | 行程內記憶體 | 狀態持久化`{get:()=>state, set:(state)=>{}}`,state僅含`cursors`(逐群組游標);假定單行程序列調用 |
|
|
282
|
-
| `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'
|
|
284
|
+
| `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'`;失敗事件另帶`stdout`(被拒回覆)與`stderr`(錯誤輸出,皆已截斷)供診斷;回調拋出例外不影響主流程 |
|
|
283
285
|
|
|
284
286
|
頂層其餘設定(`timeoutMs`、`validate`、`maxRetries`等)為各attempt之共用預設,條目可覆寫;`maxRetries`建議維持預設`0`,韌性交給換家而非重試同一家。
|
|
285
287
|
|
|
@@ -350,19 +352,19 @@ await test()
|
|
|
350
352
|
```alias
|
|
351
353
|
{
|
|
352
354
|
// ...ok, stdout, stderr, code, error, durationMs, attempts, pid...
|
|
353
|
-
providerId: '
|
|
355
|
+
providerId: 'agnes:agnes-2.0-flash', //實際使用之群組(即條目id)
|
|
354
356
|
keyIndex: 1, //實際使用之金鑰索引, 無keys時為null
|
|
355
357
|
kind: 'api-openai-compat',
|
|
356
358
|
model: 'agnes-2.0-flash',
|
|
357
|
-
tried: [ //完整嘗試歷程,
|
|
358
|
-
{ providerId: '
|
|
359
|
-
{ providerId: '
|
|
359
|
+
tried: [ //完整嘗試歷程, 成功時亦回傳; 失敗項另含stdout(被拒回覆)與stderr(錯誤輸出, 皆已截斷)供診斷
|
|
360
|
+
{ providerId: 'agnes:agnes-2.0-flash', keyIndex: 0, keyId: 'agnes:agnes-2.0-flash#0', outcome: 'next-key', error: 'HTTP 401', durationMs: 105 },
|
|
361
|
+
{ providerId: 'agnes:agnes-2.0-flash', keyIndex: 1, keyId: 'agnes:agnes-2.0-flash#1', outcome: 'ok', durationMs: 1161 },
|
|
360
362
|
],
|
|
361
363
|
}
|
|
362
364
|
```
|
|
363
365
|
|
|
364
366
|
#### dispatchAiWkf (workflow factory):
|
|
365
|
-
注入一次provider定義表(名稱 → `dispatchAiFallback`條目)與共用預設,之後以名稱宣告工作流;名稱查無定義即回報錯誤(fail fast)。回覆經寬鬆JSON解析(`extractJsonLoose`)+自訂`check`驗證,非法回覆視為該家失敗而自動遞補;預設於prompt前掛「禁止建檔」約束(`promptPrefix: ''`可關閉)。
|
|
367
|
+
注入一次provider定義表(名稱 → `dispatchAiFallback`條目)與共用預設,之後以名稱宣告工作流;名稱查無定義即回報錯誤(fail fast)。回覆經寬鬆JSON解析(`extractJsonLoose`)+自訂`check`驗證,非法回覆視為該家失敗而自動遞補;預設於prompt前掛「禁止建檔」約束(`promptPrefix: ''`可關閉);措辭豁免唯讀查閱——codex以shell讀檔,一律禁指令會令其無法讀取專案檔案且靜默回拒答(2026-08-13實測)。
|
|
366
368
|
|
|
367
369
|
```alias
|
|
368
370
|
let wkf = wdi.dispatchAiWkf({
|
|
@@ -389,6 +391,81 @@ let r4 = await wkf.runFanoutPipeline({ task, agents, integrate, stages, check })
|
|
|
389
391
|
|
|
390
392
|
各工作流皆部分接受:個別名額/階段失敗不炸整輪,已完成成果完整回傳(`candidates`/`results`+`failedStage`),可只重跑失敗段。
|
|
391
393
|
|
|
394
|
+
#### Timeout 總覽(各層預設、行為與調整方式):
|
|
395
|
+
|
|
396
|
+
**一句話**:全套件單一預設 **`300000`(5分鐘,單一來源 [src/dfTimeoutMs.mjs](https://github.com/yuda-lyu/w-dispatch-ai/blob/master/src/dfTimeoutMs.mjs))**——不論直接呼叫轉接器、或經 `dispatchAiFallback`/工作流,「單次AI嘗試」的逾時都是它;工作流本身**沒有**獨立的總時限參數(總時長=結構×單次,見下方公式)。
|
|
397
|
+
|
|
398
|
+
**階梯結構**(由細至粗,數值須嚴格遞增):
|
|
399
|
+
|
|
400
|
+
```alias
|
|
401
|
+
agy --print-timeout(自動=timeoutMs−30s)
|
|
402
|
+
< timeoutMs(單次嘗試,統一預設300000)
|
|
403
|
+
< budgetMs(單一名額之遞補鏈總預算,預設null不限)
|
|
404
|
+
< 工作流總時長(無獨立參數,由結構推導)
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
**各參數一覽**:
|
|
408
|
+
|
|
409
|
+
| 參數 | 作用範圍 | 預設 | 逾時後果/備註 |
|
|
410
|
+
| --- | --- | --- | --- |
|
|
411
|
+
| `timeoutMs` | **單次AI嘗試**,所有kind一致(直接呼叫與工作流內皆同一數字) | `300000` | CLI強殺子進程樹/API中止請求;`error`以`TIMEOUT`開頭 → fallback視為**與金鑰無關**,整組跳過(不逐把空耗) |
|
|
412
|
+
| `printTimeout` | 僅antigravity,agy自身等待上限 | 自動=timeoutMs−30s | 令CLI先於外層逾時,錯誤訊息來自agy自身;一般無須手動設 |
|
|
413
|
+
| `budgetMs` | `dispatchAiFallback`整輪遞補(=工作流的一個名額/階段) | `null`不限 | 有值時剩餘預算會壓進每次嘗試的timeoutMs;用盡回`budget exhausted` |
|
|
414
|
+
| `minAttemptMs` | 搭配budgetMs的開工門檻 | `20000` | 剩餘預算低於此值即不再開工;**無budgetMs時不作用** |
|
|
415
|
+
| 工作流總時長 | `runFanout`/`runRolePipeline`/`runFanoutPipeline` | 無(刻意) | 由結構推導,要上限就設各名額的`budgetMs` |
|
|
416
|
+
|
|
417
|
+
**工作流總時長公式**(每次嘗試≤timeoutMs;K=遞補鏈組數、M=階段數):
|
|
418
|
+
|
|
419
|
+
| 工作流 | 正常情況 | 最壞情況(多家連環卡死) |
|
|
420
|
+
| --- | --- | --- |
|
|
421
|
+
| `callAi`單一名額 | 首家耗時 | K×timeoutMs(逾時型失敗每組只燒一次即跳組;額度型失敗為秒級) |
|
|
422
|
+
| `runFanout` | 最慢名額+整合名額(agents**並行**) | ≈2×K×timeoutMs |
|
|
423
|
+
| `runRolePipeline` | Σ各階段(**序列**) | ≈M×K×timeoutMs |
|
|
424
|
+
| `runFanoutPipeline` | 上兩者相加 | ≈(2+M)×K×timeoutMs |
|
|
425
|
+
|
|
426
|
+
量級感受:內建providers 9條全上陣時,一個名額最壞9×300s=45min;3階段RolePipeline最壞約2.25小時(正常情況為秒級~分鐘級,最壞只在多家連環卡死時發生)。
|
|
427
|
+
|
|
428
|
+
**外部調整四層**(細者覆蓋粗者,全部免改套件程式):
|
|
429
|
+
1. **全域**:`dispatchAiWkf({ defaults: { timeoutMs, budgetMs, minAttemptMs } })`
|
|
430
|
+
2. **單工作流**:`runFanout({ callOpt: { timeoutMs... } })`
|
|
431
|
+
3. **單階段/名額**:stage/agent 規格上直接給 `timeoutMs`/`budgetMs`
|
|
432
|
+
4. **單條目**:provider 條目給 `timeoutMs`(如已知會卡死之供應商給小蓋子,卡死成本從名額預算縮為該蓋子)
|
|
433
|
+
|
|
434
|
+
**三種常用設定**:
|
|
435
|
+
|
|
436
|
+
```alias
|
|
437
|
+
//1. 簡單任務(秒級~分鐘級): 什麼都不用設, 全走統一預設300000
|
|
438
|
+
|
|
439
|
+
//2. 要給工作流總上限: 設每名額budgetMs(序列工作流總上限≈Σ各階段budget; fanout≈名額+整合)
|
|
440
|
+
let wkf = wdi.dispatchAiWkf({ providers: table, defaults: {
|
|
441
|
+
budgetMs: 900000, //每名額至多15min → 3階段RolePipeline總上限≈45min
|
|
442
|
+
minAttemptMs: 60000, //剩餘不足1min就不再開工
|
|
443
|
+
} })
|
|
444
|
+
|
|
445
|
+
//3. 複雜任務(單一AI工作約15min, fallback須能走到最末):
|
|
446
|
+
let wkf2 = wdi.dispatchAiWkf({ providers: table, defaults: {
|
|
447
|
+
timeoutMs: 1200000, //20min=15min工作+33%餘裕(太緊會殺掉合法執行)
|
|
448
|
+
minAttemptMs: 1200000, //剩餘不足完整視窗即不開工——開了也不可能完成, 純浪費
|
|
449
|
+
budgetMs: 4800000, //鏈長K×timeoutMs(K=4→80min): 逾時每組只燒一次即跳組, 故保證走得到最末; 無外部時限可null
|
|
450
|
+
} })
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
#### providers.mjs(內建供應商定義檔):
|
|
454
|
+
[src/providers.mjs](https://github.com/yuda-lyu/w-dispatch-ai/blob/master/src/providers.mjs) 收錄實測可用之條目(CLI版與REST版),金鑰以 `envVar` 間接引用(機密只放 `.env`),經 `resolveProviders` 展開後即可直接使用或以 `pick` 自選:
|
|
455
|
+
|
|
456
|
+
```alias
|
|
457
|
+
import wdi from 'w-dispatch-ai'
|
|
458
|
+
process.loadEnvFile('./.env') //OPENCODE_KEYS/AGNES_KEYS/POOLSIDE_KEYS, 逗號分隔多把
|
|
459
|
+
|
|
460
|
+
//全取: envVar → keys, 缺環境變數之條目自動停用並列入skipped
|
|
461
|
+
let { providers, table, skipped } = wdi.resolveProviders(wdi.providers)
|
|
462
|
+
|
|
463
|
+
//自選: pick順序即遞補優先序; providers餵dispatchAiFallback, table餵dispatchAiWkf
|
|
464
|
+
let picked = wdi.resolveProviders(wdi.providers, { pick: ['agnes:agnes-2.0-flash', 'claude:sonnet'] })
|
|
465
|
+
let r = await wdi.dispatchAiFallback(prompt, { providers: picked.providers, timeoutMs: 1200000 })
|
|
466
|
+
let wkf = wdi.dispatchAiWkf({ providers: picked.table, defaults: { timeoutMs: 1200000 } })
|
|
467
|
+
```
|
|
468
|
+
|
|
392
469
|
#### Known design notes:
|
|
393
470
|
- `dispatchAi(kind, prompt, opt)`會把整個`opt`原樣轉傳對應轉接器,該轉接器用不到的鍵(例如輪替條目物件內的`kind`)會被忽略,故「供應商條目物件直接當`opt`」是預期用法;`dispatchAiFallback`之providers條目沿用同一約定。
|
|
394
471
|
- `dispatchAiFallback`為單向單輪:全數群組試畢即回傳最後一筆失敗結果與`tried`歷程,不回頭重試已敗的組。跨次執行僅記憶游標,不設金鑰停用清單(理由見上方失敗分流說明);需跨次跳過特定金鑰時,由呼叫端依`tried`/`onEvent`內之`error`與`stderr`自行決策。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* w-dispatch-ai v1.0.
|
|
2
|
+
* w-dispatch-ai v1.0.6
|
|
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 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}});
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("child_process"),require("path"),require("fs")):"function"==typeof define&&define.amd?define(["child_process","path","fs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-dispatch-ai"]=t(e.child_process,e.path,e.fs)}(this,function(e,t,r){"use strict";var n="object"==typeof global&&global&&global.Object===Object&&global,o="object"==typeof self&&self&&self.Object===Object&&self,i=n||o||Function("return this")(),u=i.Symbol,l=Object.prototype,a=l.hasOwnProperty,s=l.toString,c=u?u.toStringTag:void 0;var f=Object.prototype.toString;var d=u?u.toStringTag:void 0;function p(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":d&&d in Object(e)?function(e){var t=a.call(e,c),r=e[c];try{e[c]=void 0;var n=!0}catch(e){}var o=s.call(e);return n&&(t?e[c]=r:delete e[c]),o}(e):function(e){return f.call(e)}(e)}function y(e){return null!=e&&"object"==typeof e}function h(e){return y(e)&&"[object Arguments]"==p(e)}var v=Object.prototype,g=v.hasOwnProperty,b=v.propertyIsEnumerable,m=h(function(){return arguments}())?h:function(e){return y(e)&&g.call(e,"callee")&&!b.call(e,"callee")},j=m,k=Array.isArray;var w="object"==typeof exports&&exports&&!exports.nodeType&&exports,_=w&&"object"==typeof module&&module&&!module.nodeType&&module,O=_&&_.exports===w?i.Buffer:void 0,x=(O?O.isBuffer:void 0)||function(){return!1},S=/^(?:0|[1-9]\d*)$/;function A(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&S.test(e))&&e>-1&&e%1==0&&e<t}function M(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var I={};function $(e){return function(t){return e(t)}}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 E="object"==typeof exports&&exports&&!exports.nodeType&&exports,N=E&&"object"==typeof module&&module&&!module.nodeType&&module,T=N&&N.exports===E&&n.process,D=function(){try{var e=N&&N.require&&N.require("util").types;return e||T&&T.binding&&T.binding("util")}catch(e){}}(),P=D&&D.isTypedArray,U=P?$(P):function(e){return y(e)&&M(e.length)&&!!I[p(e)]},C=Object.prototype.hasOwnProperty;function F(e,t){var r=k(e),n=!r&&j(e),o=!r&&!n&&x(e),i=!r&&!n&&!o&&U(e),u=r||n||o||i,l=u?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],a=l.length;for(var s in e)!t&&!C.call(e,s)||u&&("length"==s||o&&("offset"==s||"parent"==s)||i&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||A(s,a))||l.push(s);return l}var L=Object.prototype;function z(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||L)}function B(e,t){return function(r){return e(t(r))}}var R=B(Object.keys,Object),V=Object.prototype.hasOwnProperty;function J(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function W(e){if(!J(e))return!1;var t=p(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function K(e){return null!=e&&M(e.length)&&!W(e)}function G(e){return K(e)?F(e):function(e){if(!z(e))return R(e);var t=[];for(var r in Object(e))V.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e)}function H(e){return"symbol"==typeof e||y(e)&&"[object Symbol]"==p(e)}var Y=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/;var Q,X=i["__core-js_shared__"],Z=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var ee=Function.prototype.toString;function te(e){if(null!=e){try{return ee.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var re=/^\[object .+?Constructor\]$/,ne=Function.prototype,oe=Object.prototype,ie=ne.toString,ue=oe.hasOwnProperty,le=RegExp("^"+ie.call(ue).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ae(e){return!(!J(e)||(t=e,Z&&Z in t))&&(W(e)?le:re).test(te(e));var t}function se(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return ae(r)?r:void 0}var ce=se(Object,"create");var fe=Object.prototype.hasOwnProperty;var de=Object.prototype.hasOwnProperty;function pe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ye(e,t){return e===t||e!=e&&t!=t}function he(e,t){for(var r=e.length;r--;)if(ye(e[r][0],t))return r;return-1}pe.prototype.clear=function(){this.__data__=ce?ce(null):{},this.size=0},pe.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},pe.prototype.get=function(e){var t=this.__data__;if(ce){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return fe.call(t,e)?t[e]:void 0},pe.prototype.has=function(e){var t=this.__data__;return ce?void 0!==t[e]:de.call(t,e)},pe.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=ce&&void 0===t?"__lodash_hash_undefined__":t,this};var ve=Array.prototype.splice;function ge(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}ge.prototype.clear=function(){this.__data__=[],this.size=0},ge.prototype.delete=function(e){var t=this.__data__,r=he(t,e);return!(r<0)&&(r==t.length-1?t.pop():ve.call(t,r,1),--this.size,!0)},ge.prototype.get=function(e){var t=this.__data__,r=he(t,e);return r<0?void 0:t[r][1]},ge.prototype.has=function(e){return he(this.__data__,e)>-1},ge.prototype.set=function(e,t){var r=this.__data__,n=he(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var be=se(i,"Map");function me(e,t){var r,n,o=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof t?"string":"hash"]:o.map}function je(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}je.prototype.clear=function(){this.size=0,this.__data__={hash:new pe,map:new(be||ge),string:new pe}},je.prototype.delete=function(e){var t=me(this,e).delete(e);return this.size-=t?1:0,t},je.prototype.get=function(e){return me(this,e).get(e)},je.prototype.has=function(e){return me(this,e).has(e)},je.prototype.set=function(e,t){var r=me(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function ke(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var u=e.apply(this,n);return r.cache=i.set(o,u)||i,u};return r.cache=new(ke.Cache||je),r}ke.Cache=je;var we,_e,Oe,xe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Se=/\\(\\)?/g,Ae=(we=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(xe,function(e,r,n,o){t.push(n?o.replace(Se,"$1"):r||e)}),t},_e=ke(we,function(e){return 500===Oe.size&&Oe.clear(),e}),Oe=_e.cache,_e),Me=Ae;function Ie(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}var $e=u?u.prototype:void 0,Ee=$e?$e.toString:void 0;function Ne(e){if("string"==typeof e)return e;if(k(e))return Ie(e,Ne)+"";if(H(e))return Ee?Ee.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Te(e){return null==e?"":Ne(e)}function De(e,t){return k(e)?e:function(e,t){if(k(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!H(e))||q.test(e)||!Y.test(e)||null!=t&&e in Object(t)}(e,t)?[e]:Me(Te(e))}function Pe(e){if("string"==typeof e||H(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Ue(e,t){for(var r=0,n=(t=De(t,e)).length;null!=e&&r<n;)e=e[Pe(t[r++])];return r&&r==n?e:void 0}function Ce(e,t,r){var n=null==e?void 0:Ue(e,t);return void 0===n?r:n}function Fe(e){var t=this.__data__=new ge(e);this.size=t.size}Fe.prototype.clear=function(){this.__data__=new ge,this.size=0},Fe.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Fe.prototype.get=function(e){return this.__data__.get(e)},Fe.prototype.has=function(e){return this.__data__.has(e)},Fe.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ge){var n=r.__data__;if(!be||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new je(n)}return r.set(e,t),this.size=r.size,this};var Le=function(){try{var e=se(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ze=Le;function Be(e,t,r){"__proto__"==t&&ze?ze(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Re=Object.prototype.hasOwnProperty;function Ve(e,t,r){var n=e[t];Re.call(e,t)&&ye(n,r)&&(void 0!==r||t in e)||Be(e,t,r)}function Je(e,t,r,n){var o=!r;r||(r={});for(var i=-1,u=t.length;++i<u;){var l=t[i],a=n?n(r[l],e[l],l,r,e):void 0;void 0===a&&(a=e[l]),o?Be(r,l,a):Ve(r,l,a)}return r}var We=Object.prototype.hasOwnProperty;function Ke(e){if(!J(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=z(e),r=[];for(var n in e)("constructor"!=n||!t&&We.call(e,n))&&r.push(n);return r}function Ge(e){return K(e)?F(e,!0):Ke(e)}var He="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ye=He&&"object"==typeof module&&module&&!module.nodeType&&module,qe=Ye&&Ye.exports===He?i.Buffer:void 0,Qe=qe?qe.allocUnsafe:void 0;function Xe(){return[]}var Ze=Object.prototype.propertyIsEnumerable,et=Object.getOwnPropertySymbols,tt=et?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r<n;){var u=e[r];t(u,r,e)&&(i[o++]=u)}return i}(et(e),function(t){return Ze.call(e,t)}))}:Xe,rt=tt;function nt(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var ot=B(Object.getPrototypeOf,Object),it=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)nt(t,rt(e)),e=ot(e);return t}:Xe,ut=it;function lt(e,t,r){var n=t(e);return k(e)?n:nt(n,r(e))}function at(e){return lt(e,G,rt)}function st(e){return lt(e,Ge,ut)}var ct=se(i,"DataView"),ft=se(i,"Promise"),dt=se(i,"Set"),pt=se(i,"WeakMap"),yt="[object Map]",ht="[object Promise]",vt="[object Set]",gt="[object WeakMap]",bt="[object DataView]",mt=te(ct),jt=te(be),kt=te(ft),wt=te(dt),_t=te(pt),Ot=p;(ct&&Ot(new ct(new ArrayBuffer(1)))!=bt||be&&Ot(new be)!=yt||ft&&Ot(ft.resolve())!=ht||dt&&Ot(new dt)!=vt||pt&&Ot(new pt)!=gt)&&(Ot=function(e){var t=p(e),r="[object Object]"==t?e.constructor:void 0,n=r?te(r):"";if(n)switch(n){case mt:return bt;case jt:return yt;case kt:return ht;case wt:return vt;case _t:return gt}return t});var xt=Ot,St=Object.prototype.hasOwnProperty;var At=i.Uint8Array;function Mt(e){var t=new e.constructor(e.byteLength);return new At(t).set(new At(e)),t}var It=/\w*$/;var $t=u?u.prototype:void 0,Et=$t?$t.valueOf:void 0;function Nt(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Mt(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,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(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}(e,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(e);case"[object RegExp]":return function(e){var t=new e.constructor(e.source,It.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,Et?Object(Et.call(n)):{}}}var Tt=Object.create,Dt=function(){function e(){}return function(t){if(!J(t))return{};if(Tt)return Tt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Pt=Dt;var Ut=D&&D.isMap,Ct=Ut?$(Ut):function(e){return y(e)&&"[object Map]"==xt(e)};var Ft=D&&D.isSet,Lt=Ft?$(Ft):function(e){return y(e)&&"[object Set]"==xt(e)},zt="[object Arguments]",Bt="[object Function]",Rt="[object Object]",Vt={};function Jt(e,t,r,n,o,i){var u,l=1&t,a=2&t,s=4&t;if(r&&(u=o?r(e,n,o,i):r(e)),void 0!==u)return u;if(!J(e))return e;var c=k(e);if(c){if(u=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&St.call(e,"index")&&(r.index=e.index,r.input=e.input),r}(e),!l)return function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}(e,u)}else{var f=xt(e),d=f==Bt||"[object GeneratorFunction]"==f;if(x(e))return function(e,t){if(t)return e.slice();var r=e.length,n=Qe?Qe(r):new e.constructor(r);return e.copy(n),n}(e,l);if(f==Rt||f==zt||d&&!o){if(u=a||d?{}:function(e){return"function"!=typeof e.constructor||z(e)?{}:Pt(ot(e))}(e),!l)return a?function(e,t){return Je(e,ut(e),t)}(e,function(e,t){return e&&Je(t,Ge(t),e)}(u,e)):function(e,t){return Je(e,rt(e),t)}(e,function(e,t){return e&&Je(t,G(t),e)}(u,e))}else{if(!Vt[f])return o?e:{};u=Nt(e,f,l)}}i||(i=new Fe);var p=i.get(e);if(p)return p;i.set(e,u),Lt(e)?e.forEach(function(n){u.add(Jt(n,t,r,n,e,i))}):Ct(e)&&e.forEach(function(n,o){u.set(o,Jt(n,t,r,o,e,i))});var y=c?void 0:(s?a?st:at:a?Ge:G)(e);return function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););}(y||e,function(n,o){y&&(n=e[o=n]),Ve(u,o,Jt(n,t,r,o,e,i))}),u}function Wt(e,t){return t.length<2?e:Ue(e,function(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}(t,0,-1))}Vt[zt]=Vt["[object Array]"]=Vt["[object ArrayBuffer]"]=Vt["[object DataView]"]=Vt["[object Boolean]"]=Vt["[object Date]"]=Vt["[object Float32Array]"]=Vt["[object Float64Array]"]=Vt["[object Int8Array]"]=Vt["[object Int16Array]"]=Vt["[object Int32Array]"]=Vt["[object Map]"]=Vt["[object Number]"]=Vt[Rt]=Vt["[object RegExp]"]=Vt["[object Set]"]=Vt["[object String]"]=Vt["[object Symbol]"]=Vt["[object Uint8Array]"]=Vt["[object Uint8ClampedArray]"]=Vt["[object Uint16Array]"]=Vt["[object Uint32Array]"]=!0,Vt["[object Error]"]=Vt[Bt]=Vt["[object WeakMap]"]=!1;var Kt=Object.prototype.hasOwnProperty;function Gt(e,t){var r=-1,n=(t=De(t,e)).length;if(!n)return!0;for(;++r<n;){var o=Pe(t[r]);if("__proto__"===o&&!Kt.call(e,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var i=Wt(e,t);return null==i||delete i[Pe(function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}(t))]}var Ht=Function.prototype,Yt=Object.prototype,qt=Ht.toString,Qt=Yt.hasOwnProperty,Xt=qt.call(Object);function Zt(e){return function(e){if(!y(e)||"[object Object]"!=p(e))return!1;var t=ot(e);if(null===t)return!0;var r=Qt.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&qt.call(r)==Xt}(e)?void 0:e}var er=u?u.isConcatSpreadable:void 0;function tr(e){return k(e)||j(e)||!!(er&&e&&e[er])}function rr(e,t,r,n,o){var i=-1,u=e.length;for(r||(r=tr),o||(o=[]);++i<u;){var l=e[i];t>0&&r(l)?t>1?rr(l,t-1,r,n,o):nt(o,l):n||(o[o.length]=l)}return o}function nr(e){return(null==e?0:e.length)?rr(e,1):[]}var or=Math.max;var ir=ze?function(e,t){return ze(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:function(e){return e},ur=ir,lr=Date.now;var ar=function(e){var t=0,r=0;return function(){var n=lr(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ur),sr=ar;var cr=function(e){return sr(function(e,t,r){return t=or(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=or(n.length-t,0),u=Array(i);++o<i;)u[o]=n[t+o];o=-1;for(var l=Array(t+1);++o<t;)l[o]=n[o];return l[t]=r(u),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,l)}}(e,void 0,nr),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Ie(t,function(t){return t=De(t,e),n||(n=t.length>1),t}),Je(e,st(e),r),n&&(r=Jt(r,7,Zt));for(var o=t.length;o--;)Gt(r,t[o]);return r}),fr=cr,dr=/\s/;var pr=/^\s+/;function yr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&dr.test(e.charAt(t)););return t}(e)+1).replace(pr,""):e}var hr=/^[-+]0x[0-9a-f]+$/i,vr=/^0b[01]+$/i,gr=/^0o[0-7]+$/i,br=parseInt;function mr(e){if("number"==typeof e)return e;if(H(e))return NaN;if(J(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=J(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=yr(e);var r=vr.test(e);return r||gr.test(e)?br(e.slice(2),r?2:8):hr.test(e)?NaN:+e}var jr=1/0;function kr(e){return e?(e=mr(e))===jr||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function wr(e){var t=kr(e),r=t%1;return t==t?r?t-r:t:0}function _r(e){return"[object String]"===Object.prototype.toString.call(e)}function Or(e){return!(!_r(e)||""===e)}function xr(e){return e!=e}function Sr(e){let t=!1;if(Or(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(xr(e))return!1;t=!0}return t}function Ar(e){if(!Sr(e))return 0;return kr(e)}function Mr(e){return!!Sr(e)&&(e=Ar(e),"number"==typeof(t=e)&&t==wr(t));var t}var Ir=i.isFinite,$r=Math.min;var Er=function(e){var t=Math[e];return function(e,r){if(e=mr(e),(r=null==r?0:$r(wr(r),292))&&Ir(e)){var n=(Te(e)+"e").split("e");return+((n=(Te(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Nr=Er;function Tr(e){if(!Sr(e))return 0;e=Ar(e);let t=Nr(e);return"0"===String(t)?0:t}function Dr(e){if(!Mr(e))return!1;return Tr(e)>0}function Pr(e){return"[object Object]"===Object.prototype.toString.call(e)}function Ur(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function Cr(e=10){Sr(e)||(e=10);let t=Ur();return setTimeout(function(){t.resolve()},e),t}function Fr(e){return"[object Array]"===Object.prototype.toString.call(e)}function Lr(e){let t=Object.prototype.toString.call(e);return"[object Function]"===t||"[object AsyncFunction]"===t}function zr(e){if(!Mr(e))return!1;return Tr(e)>=0}function Br(e,t){return Or(e)&&zr(t)?0===(t=Tr(t))?"":e.substring(0,t):""}function Rr(e,t){return Or(e)&&zr(t)?0===(t=Tr(t))?e:function(e,t){if(!Or(e))return"";if(!zr(t))return"";if(0===(t=Tr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}(e,e.length-t):""}function Vr(e,t,r={}){if(!Or(e))return"";if(!zr(t))return e;if(t=Tr(t),e.length<=t)return e;let n=Ce(r,"funWithMsg"),o="";if(Lr(n)){let r=n(e,t);Or(r)&&(o=r)}return Br(e,t)+`...${o}`}function Jr(e,t={}){let r=Ce(t,"fs");return!!function(e,t={}){let r=Ce(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}(e,{fs:r})&&(!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink())}function Wr(e){return function(e,t={}){let r=null,n=Ce(t,"fs"),o="";try{o=n.readFileSync(e,"utf8")}catch(e){r=e}return null!==r?{error:r}:{success:o}}(e,{fs:r})}function Kr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Gr=e,Hr=Gr.spawn,Yr=Gr.exec;function qr(e,t,r){var n={};try{Object.keys(e).forEach(function(r){e[r].forEach(function(e){n[e]||(Qr(e,t),n[e]=1)}),n[r]||(Qr(r,t),n[r]=1)})}catch(e){if(r)return r(e);throw e}if(r)return r()}function Qr(e,t){try{process.kill(parseInt(e,10),t)}catch(e){if("ESRCH"!==e.code)throw e}}function Xr(e,t,r,n,o){var i=n(e),u="";i.stdout.on("data",function(e){e=e.toString("ascii");u+=e});i.on("close",function(i){delete r[e],0==i?u.match(/\d+/g).forEach(function(i){i=parseInt(i,10),t[e].push(i),t[i]=[],r[i]=1,Xr(i,t,r,n,o)}):0==Object.keys(r).length&&o()})}var Zr=Kr(function(e,t,r){if("function"==typeof t&&void 0===r&&(r=t,t=void 0),e=parseInt(e),Number.isNaN(e)){if(r)return r(new Error("pid must be a number"));throw new Error("pid must be a number")}var n={},o={};switch(n[e]=[],o[e]=1,process.platform){case"win32":Yr("taskkill /pid "+e+" /T /F",r);break;case"darwin":Xr(e,n,o,function(e){return Hr("pgrep",["-P",e])},function(){qr(n,t,r)});break;default:Xr(e,n,o,function(e){return Hr("ps",["-o","pid","--no-headers","--ppid",e])},function(){qr(n,t,r)})}});function en(e){let n=Ce(Wr(e),"success","");if(!Or(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let i=t.dirname(e),u=t.join(i,o[1]);return Jr(u,{fs:r})?u:null}function tn(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(t.isAbsolute(r))return r;try{let t=e.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=t.find(e=>/\.cmd$/i.test(e));return n||(t.find(e=>/\.exe$/i.test(e))||t[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n};if(/\.(cmd|bat)$/i.test(o)){let e=en(o);if(e)return/\.exe$/i.test(e)?{file:e,args:n}:{file:process.execPath,args:[e,...n]};let t=n.map(e=>`"${e.replace(/(\\*)"/g,'$1$1\\"').replace(/(\\*)$/,"$1$1")}"`.replace(/[()%!^"<>&|]/g,"^$&")),r=`${i=o,i.replace(/[()%!^"<>&|;, ]/g,"^$&")} ${t.join(" ")}`;return{file:process.env.comspec||process.env.COMSPEC||"cmd.exe",args:["/d","/s","/c",`"${r}"`],opt:{windowsVerbatimArguments:!0}}}var i;return{file:o,args:n}}let rn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function nn(t,r=[],n={}){let{timeoutMs:o=12e4,cwd:i=process.cwd(),input:u,validate:l,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:f}=n,d=function(e){if(Lr(e))return e;if(!Or(e))return null;let t=e.split(",").map(e=>e.trim()).filter(Boolean);return 0===t.length?null:e=>{for(let r of t)if("nonempty"===r){if(!Or(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Rr(r,4);if(!Sr(t))return!1;let n=Tr(t);if(!Or(e)||e.length<n)return!1}return!0}}(l),p=Date.now(),y=Ur(),h={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==f){if("win32"===process.platform){let e=Object.keys(f).map(e=>e.toLowerCase());for(let t of Object.keys(h))e.includes(t.toLowerCase())&&delete h[t]}h={...h,...f}}let v=tn(t,r),g=e.spawn(v.file,v.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...v.opt}),b="",m="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,_=!1;g.stdout.on("data",e=>{let t=j.decode(e,{stream:!0});t&&(Lr(s)&&s(t),b.length<a&&(b+=t))}),g.stderr.on("data",e=>{let t=k.decode(e,{stream:!0});t&&(Lr(c)&&c(t),m.length<a&&(m+=t))}),g.stdin.on("error",()=>{}),void 0!==u&&g.stdin.write(u,"utf8"),g.stdin.end();let O=setTimeout(()=>{w||(_=!0,function(e){let t=Ur();return Zr(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}(g.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,500,rn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:g.pid}))},3e3).unref())},o);return g.on("error",e=>{w||(w=!0,clearTimeout(O),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-p,pid:g.pid}))}),g.on("close",(e,t)=>{if(w)return;w=!0,clearTimeout(O);let r=j.decode();r&&b.length<a&&(b+=r);let n=k.decode();n&&m.length<a&&(m+=n);let i=Date.now()-p;_?y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,500,rn),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:g.pid}):0===e?!d||d(b)?y.resolve({ok:!0,stdout:b,stderr:m,code:0,error:"",durationMs:i,pid:g.pid}):y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,500,rn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:g.pid}):y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,1e3,rn),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:g.pid})}),y}async function on(e,t=[],r={}){if(!Or(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Fr(t)||(t=[]),Pr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,u=Ce(i,"cwd",null);Or(u)?i.cwd=u:i.cwd=process.cwd();let l=Ce(i,"input",null);Or(l)?i.input=l:i.input=void 0;let a=Ce(i,"env",null);Pr(a)?i.env=a:i.env=void 0;let s=Ce(i,"validate",null);Lr(s)||Or(s)?i.validate=s:i.validate=void 0;let c=Ce(i,"onStdout",null);Lr(c)?i.onStdout=c:i.onStdout=void 0;let f=Ce(i,"onStderr",null);Lr(f)?i.onStderr=f:i.onStderr=void 0,n=zr(n)?Tr(n):0,o=Dr(o)?Tr(o):5e3;let d=Ce(i,"timeoutMs",null);Dr(d)?i.timeoutMs=Tr(d):i.timeoutMs=12e4;let p,y=Ce(i,"maxBuffer",null);Dr(y)?i.maxBuffer=Tr(y):i.maxBuffer=10485760;let h=0;for(let r=0;r<=n;r++){if(r>0){let e=Math.min(o*r,15e3);await Cr(e)}if(p=await nn(e,t,i),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(...e){let t=[];for(let r of e)if(Fr(r))for(let e of r)Or(e)&&t.push(e);else Or(r)&&t.push(r);return t}function ln(e){return Or(e)||(e="unknown error"),{ok:!1,stdout:"",stderr:"",code:null,error:e,durationMs:0,attempts:0}}let an=3e5,sn=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function cn(e,t={}){if(!Or(e))return ln("prompt must be a non-empty string");let r=Ce(t,"exe",null);Or(r)||(r="opencode");let n=Ce(t,"model",null),o=Ce(t,"agent",null);Or(o)||(o="build");let i=Ce(t,"extraArgs",null),u=un("run",["--agent",o],Or(n)?["-m",n]:[],i),l=Ce(t,"env",null);Pr(l)||(l=void 0);let a=Ce(t,"config",null);Pr(a)&&(a=JSON.stringify(a)),Or(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=Ce(t,"key",null),c=Ce(t,"provider",null);Or(s)&&Or(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})});let f=Ce(t,"timeoutMs",null);return f=Dr(f)?Tr(f):an,on(r,u,{...fr(t,sn),input:e,env:l,timeoutMs:f})}function fn(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==p(t);var t}let dn=["exe","model","skipPermissions","extraArgs","input"];async function pn(e,t={}){if(!Or(e))return ln("prompt must be a non-empty string");let r=Ce(t,"exe",null);Or(r)||(r="claude");let n=Ce(t,"model",null),o=Ce(t,"skipPermissions",null);fn(o)||(o=!0);let i=Ce(t,"extraArgs",null),u=un("-p",o?"--dangerously-skip-permissions":[],Or(n)?["--model",n]:[],i),l=Ce(t,"timeoutMs",null);return l=Dr(l)?Tr(l):an,on(r,u,{...fr(t,dn),input:e,timeoutMs:l})}let yn=["exe","model","sandbox","extraArgs","input"];async function hn(e,t={}){if(!Or(e))return ln("prompt must be a non-empty string");let r=Ce(t,"exe",null);Or(r)||(r="codex");let n=Ce(t,"model",null),o=Ce(t,"sandbox",null);Or(o)||(o="workspace-write");let i=Ce(t,"extraArgs",null),u=un("exec",["--sandbox",o],"--skip-git-repo-check",Or(n)?["-m",n]:[],i),l=Ce(t,"timeoutMs",null);return l=Dr(l)?Tr(l):an,on(r,u,{...fr(t,yn),input:e,timeoutMs:l})}let vn=an,gn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function bn(e,t={}){if(!Or(e))return ln("prompt must be a non-empty string");if(e.length>3e4)return ln(`prompt too long (${e.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Ce(t,"exe",null);Or(r)||(r="agy");let n=Ce(t,"model",null),o=Ce(t,"effort",null),i=Ce(t,"skipPermissions",null);fn(i)||(i=!0);let u=Ce(t,"timeoutMs",null);u=Dr(u)?Tr(u):vn;let l=Ce(t,"printTimeout",null);Or(l)||(l=`${Math.max(30,Math.floor(u/1e3)-30)}s`);let a=Ce(t,"addDirs",null);if(!Fr(a)){let e=Ce(t,"cwd",null);Or(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)Or(e)&&s.push("--add-dir",e);let c=Ce(t,"extraArgs",null),f=un(i?"--dangerously-skip-permissions":[],["--print-timeout",l],Or(n)?["--model",n]:[],Or(o)?["--effort",o]:[],s,c,["--print",e]),d=fr(t,gn);try{return await on(r,f,{...d,timeoutMs:u})}catch(e){return ln(`${e.code||"UNKNOWN"}: ${e.message}`)}}let mn=an,jn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function kn(e,t,r,n,o){let i=Date.now(),u=new AbortController,l=setTimeout(()=>{u.abort()},n),a=null,s="";try{a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),s=await a.text()}catch(e){clearTimeout(l);let t=Date.now()-i;return"AbortError"===e.name?{ok:!1,stdout:"",stderr:"",code:null,error:`TIMEOUT after ${n/1e3}s`,durationMs:t}:{ok:!1,stdout:"",stderr:"",code:null,error:`FETCH_ERROR: ${Ce(e,"cause.code","")||e.message}`,durationMs:t}}clearTimeout(l);let c=Date.now()-i;if(!a.ok)return{ok:!1,stdout:"",stderr:Vr(s,1e3,jn),code:a.status,error:`HTTP ${a.status}`,durationMs:c};let f=null,d="",p=null;try{let e=JSON.parse(s);f=Ce(e,"choices.0.message.content",null),d=Ce(e,"choices.0.finish_reason",""),p=Ce(e,"choices.0.message.tool_calls",null)}catch{}return"tool_calls"===d||null!=p?{ok:!1,stdout:"",stderr:Vr(s,1e3,jn),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:Vr(s,500,jn),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:Vr(f,500,jn),stderr:"",code:a.status,error:"OUTPUT_VALIDATION_FAILED",durationMs:c}:{ok:!0,stdout:f,stderr:"",code:a.status,error:"",durationMs:c})}async function wn(e,t={}){if(!Or(e))return ln("prompt must be a non-empty string");let r=Ce(t,"baseURL",null);if(!Or(r))return ln("baseURL must be a non-empty string");let n=Ce(t,"model",null);if(!Or(n))return ln("model must be a non-empty string");let o=Ce(t,"key",null),i=Ce(t,"system",null),u=Ce(t,"body",null);Pr(u)||(u={});let l=Ce(t,"headers",null);Pr(l)||(l={});let a=Ce(t,"timeoutMs",null);a=Dr(a)?Tr(a):mn;let s=Ce(t,"maxRetries",null);s=zr(s)?Tr(s):0;let c=Ce(t,"retryDelayMs",null);c=Dr(c)?Tr(c):5e3;let f=function(e){if(Lr(e))return e;if(!Or(e))return null;let t=e.split(",").map(e=>e.trim()).filter(Boolean);return 0===t.length?null:e=>{for(let r of t)if("nonempty"===r){if(!Or(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Rr(r,4);if(!Sr(t))return!1;let n=Tr(t);if(!Or(e)||e.length<n)return!1}return!0}}(Ce(t,"validate",null)),d=r.replace(/\/+$/,"")+"/chat/completions",p=[];Or(i)&&p.push({role:"system",content:i}),p.push({role:"user",content:e});let y={model:n,messages:p,...u},h={"Content-Type":"application/json",...l};Or(o)&&(h.Authorization=`Bearer ${o}`);let v=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await Cr(Math.min(c*e,15e3)),v=await kn(d,h,y,a,f),g=e+1,v.ok)return v.attempts=g,v;let t=v.code;if(Sr(t)&&t>=400&&t<500&&429!==t)break}return v.attempts=g,v}let _n={opencode:cn,claude:pn,codex:hn,antigravity:bn,"api-openai-compat":wn};function On(e){return e!=e}function xn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,G(e))}var Sn=Math.max;function An(e,t,r,n){e=K(e)?e:xn(e),r=r&&!n?wr(r):0;var o=e.length;return r<0&&(r=Sn(o+r,0)),function(e){return"string"==typeof e||!k(e)&&y(e)&&"[object String]"==p(e)}(e)?r<=o&&e.indexOf(t,r)>-1:!!o&&function(e,t,r){return t==t?function(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}(e,t,r):function(e,t,r,n){for(var o=e.length,i=r+(n?1:-1);n?i--:++i<o;)if(t(e[i],i,e))return i;return-1}(e,On,r)}(e,t,r)>-1}async function Mn(e,t,r={}){let n=G(_n);return Or(e)&&An(n,e)?(0,_n[e])(t,r):ln(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let In=["providers","budgetMs","minAttemptMs","store","onEvent"],$n=["id","keys"],En=an,Nn={cursors:{}};function Tn(e){let t=Ce(e,"error","");Or(t)||(t="");let r=Ce(e,"code",null);return 0===t.indexOf("TIMEOUT")||(!!t.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===t||0===t.indexOf("unknown ai kind"))))}async function Dn(e,t={}){if(!Or(e))return{...ln("prompt must be a non-empty string"),tried:[]};let r=Ce(t,"providers",null),n=Fr(r)?r.filter(Pr):[];if(0===n.length)return{...ln("providers must be a non-empty array"),tried:[]};let o=Ce(t,"budgetMs",null);o=Dr(o)?Tr(o):null;let i=null===o?null:Date.now()+o,u=Ce(t,"minAttemptMs",null);u=Dr(u)?Tr(u):2e4;let l=Ce(t,"store",null),a=Pr(l)&&Lr(l.get)&&Lr(l.set),s=null;if(a)try{s=l.get()}catch{}Pr(s)||(s=a?{cursors:{}}:Nn),Pr(s.cursors)||(s.cursors={});let c=()=>{if(a)try{l.set(s)}catch{}},f=Ce(t,"onEvent",null),d=e=>{if(Lr(f))try{f(e)}catch{}},p=fr(t,In),y=[],h=null,v=null;for(let t=0;t<n.length;t++){let r=n[t],o=Ce(r,"id",null);Or(o)||(o=String(t));let l=Ce(r,"kind",null),a=Ce(r,"model",null),f=Ce(r,"keys",null),g=Fr(f)?f.filter(Or):[],b=g.length,m=fr(r,$n),j=0;if(b>0){let e=Ce(s.cursors,o,0);j=Dr(e)?Tr(e)%b:0}let k=b>0?b:1,w=!1;for(let t=0;t<k&&!w;t++){let r=b>0?(j+t)%b:null,n=null===r?o:`${o}#${r}`,f={...p,...m};b>0&&(f.key=g[r]);let k=Ce(f,"timeoutMs",null);if(k=Dr(k)?Tr(k):En,null!==i){let e=i-Date.now();if(e<u)return d({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...ln("budget exhausted"),tried:y};k=Math.min(k,e)}f.timeoutMs=k,d({type:"try",providerId:o,keyIndex:r,keyId:n,kind:l,model:a});let _=await Mn(l,e,f);if(_.ok)return b>0&&(s.cursors[o]=(r+1)%b,c()),d({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:_.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:_.durationMs}),{..._,providerId:o,keyIndex:r,kind:l,model:a,tried:y};h=_,v={providerId:o,keyIndex:r,kind:l,model:a},Tn(_)?(d({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:_.error,stdout:_.stdout,stderr:_.stderr}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:_.error,stdout:_.stdout,stderr:_.stderr,durationMs:_.durationMs}),w=!0):(d({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:_.error,stdout:_.stdout,stderr:_.stderr}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:_.error,stdout:_.stdout,stderr:_.stderr,durationMs:_.durationMs}))}}return{...h||ln("all providers failed"),...v||{},tried:y}}function Pn(e){return!!function(e){return"[object Undefined]"===Object.prototype.toString.call(e)}(e)||(!!function(e){return"[object Null]"===Object.prototype.toString.call(e)}(e)||(!!function(e){if(Pr(e)){for(let t in e)return!1;return!0}return!1}(e)||(!!function(e){return!(!_r(e)||""!==e)}(e)||(!!function(e){return!!Fr(e)&&0===e.length}(e)||!!xr(e)))))}function Un(e){return!!Fr(e)&&(0!==e.length&&(1!==e.length||!Pn(e[0])))}function Cn(e){let t=String(e||"");if(t=t.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),t=t.replace(/```(?:json)?/g,""),t=t.trim(),""===t)return null;try{let e=JSON.parse(t);if(null!==e&&"object"==typeof e)return e}catch(e){}let r=-1;for(let e=0;e<t.length;e++)if("{"===t[e]||"["===t[e]){r=e;break}if(r<0)return null;let n=0,o=!1,i=!1;for(let e=r;e<t.length;e++){let u=t[e];if(o)i?i=!1:"\\"===u?i=!0:'"'===u&&(o=!1);else if('"'===u)o=!0;else if("{"===u||"["===u)n++;else if(("}"===u||"]"===u)&&(n--,0===n)){try{let n=JSON.parse(t.slice(r,e+1));if(null!==n&&"object"==typeof n)return n}catch(e){}return null}}return null}let Fn=["providers","spec","check","parse","rawText","promptPrefix"],Ln=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n");async function zn(e,t={}){let r=Date.now();if(!Or(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",ms:0,tried:[]};let n=Ce(t,"providers",null),o=Ce(t,"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:i,missing:u}=function(e,t){let r=[Ce(t,"use","")],n=Ce(t,"fallback",null);Un(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Ce(e,t,null);Pr(r)?o.push({id:t,...r}):i.push(String(t))}return{chain:o,missing:i}}(n,o);if(u.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${u.join(", ")}`,ms:0,tried:[]};if(0===i.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let l=!0===Ce(t,"rawText",!1),a=Ce(t,"parse",null);Lr(a)||(a=Cn);let s=Ce(t,"check",null);Lr(s)||(s=null);let c=Ce(t,"promptPrefix",null);Or(c)||(c=""===c?"":Ln);let f=await Dn(c+e,{...fr(t,Fn),providers:i,validate:e=>{if(l){let t=String(e||"").trim();return""!==t&&(!s||!0===s(t))}let t=a(e);return null!==t&&(!s||!0===s(t))},timeoutMs:Ce(t,"timeoutMs",null)||an}),d=null;f.ok&&(d=l?String(f.stdout||"").trim():a(f.stdout));let p=Ce(f,"providerId",null),y=Ce(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:Ce(f,"tried",[]),error:f.ok?"":Ce(f,"error","unknown error")}}async function Bn(e={}){let t=Date.now(),r=Ce(e,"providers",null),n=Ce(e,"task",""),o=Ce(e,"agents",null),i=Ce(e,"integrate",null),u=Ce(e,"check",null),l=Ce(e,"callOpt",{});if(!Or(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Un(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Ce(e,"minCandidates",null);a=Dr(a)?Tr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,...i}=e;return zn(n,{...l,...i,providers:r,spec:{use:t,fallback:o},check:u})})),c=s.filter(e=>e.ok).map(e=>e.json);if(0===c.length)return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-t,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()-t,error:""};if(!i||!Or(Ce(i,"use","")))return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-t,error:"integrate spec (with use) is required"};let{use:f,fallback:d,prompt:p,...y}=i,h=Lr(p)?p(c):function(e,t={}){let r=Ce(t,"schema",""),n=Or(r)?`\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同:\n${r}\n`:"\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同。\n";return`你是整合者。以下是同一任務由 ${e.length} 個獨立執行產生的候選結果(JSON),請整合成單一最佳版本:擇優合併、去重、保留最完整的證據標注與爭議呈現,不可加入候選中沒有的數字或結論。\n${n}\n${e.map((e,t)=>`【候選 ${t+1}】\n${JSON.stringify(e)}`).join("\n\n")}`}(c,e),v=await zn(h,{...l,...y,providers:r,spec:{use:f,fallback:d},check:u});return{ok:v.ok,result:v.ok?v.json:null,integrated:v.ok,agents:s,candidates:c,integrateDetail:v,totalMs:Date.now()-t,error:v.ok?"":`integrate failed: ${v.error}`}}let Rn=["id","use","fallback","prompt","check"];async function Vn(e={}){let t=Date.now(),r=Ce(e,"providers",null),n=Ce(e,"input",null),o=Ce(e,"stages",null),i=Ce(e,"callOpt",{});if(!Un(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let u={},l={},a=[],s=null;for(let e=0;e<o.length;e++){let c=o[e],f=Or(Ce(c,"id",""))?c.id:`stage${e+1}`;a.push(f);let d=Ce(c,"prompt",null);if(!Lr(d))return l[f]={ok:!1,error:`stage[${f}].prompt must be a function`},{ok:!1,result:null,stages:l,results:u,order:a,failedStage:f,totalMs:Date.now()-t,error:l[f].error};let p=d({input:n,prev:s,results:u,index:e});if(!Or(p))return l[f]={ok:!1,error:`stage[${f}].prompt returned empty`},{ok:!1,result:null,stages:l,results:u,order:a,failedStage:f,totalMs:Date.now()-t,error:l[f].error};let y=fr(c,Rn),h=await zn(p,{...i,...y,providers:r,spec:{use:Ce(c,"use",""),fallback:Ce(c,"fallback",null)},check:Ce(c,"check",null)});if(l[f]=h,!h.ok)return{ok:!1,result:null,stages:l,results:u,order:a,failedStage:f,totalMs:Date.now()-t,error:`stage[${f}] failed: ${h.error}`};u[f]=h.json,s=h.json}return{ok:!0,result:s,stages:l,results:u,order:a,failedStage:null,totalMs:Date.now()-t,error:""}}let Jn={KINDS:G(_n),dispatchAi:Mn,dispatchAiFallback:Dn,dispatchAiWkf:function(e={}){let t=Ce(e,"providers",null);if(!Pr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ce(e,"defaults",null);return Pr(r)||(r={}),{providers:t,callAi:(e,n={})=>zn(e,{...r,...n,providers:t}),runFanout:(e={})=>Bn({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}}),runRolePipeline:(e={})=>Vn({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await Bn({providers:Ce(e,"providers",null),task:Ce(e,"task",""),agents:Ce(e,"agents",null),integrate:Ce(e,"integrate",null),check:Ce(e,"check",null),schema:Ce(e,"schema",""),minCandidates:Ce(e,"minCandidates",null),callOpt:Ce(e,"callOpt",{})});if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await Vn({providers:Ce(e,"providers",null),input:r.result,stages:Ce(e,"stages",null),callOpt:Ce(e,"callOpt",{})});return{ok:n.ok,result:n.ok?n.result:null,A:r,B:n,totalMs:Date.now()-t,error:n.ok?"":`B failed: ${n.error}`}}({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}})}},dispatchOpencode:cn,dispatchClaude:pn,dispatchCodex:hn,dispatchAntigravity:bn,dispatchApiOpenaiCompat:wn,providers:[{id:"oc:opencode/deepseek-v4-flash-free",model:"opencode/deepseek-v4-flash-free",kind:"opencode",envVar:"OPENCODE_KEYS",provider:"opencode",config:{permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:agnes-ai/agnes-2.5-flash",model:"agnes-ai/agnes-2.5-flash",kind:"opencode",envVar:"AGNES_KEYS",provider:"agnes-ai",config:{provider:{"agnes-ai":{npm:"@ai-sdk/openai-compatible",name:"Agnes",options:{baseURL:"https://apihub.agnes-ai.com/v1"},models:{"agnes-2.5-flash":{name:"Agnes 2.5 Flash"}}}},permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:poolside/poolside/laguna-s-2.1",model:"poolside/poolside/laguna-s-2.1",kind:"opencode",envVar:"POOLSIDE_KEYS",provider:"poolside",config:{provider:{poolside:{npm:"@ai-sdk/openai-compatible",name:"Poolside",options:{baseURL:"https://inference.poolside.ai/v1"},models:{"poolside/laguna-s-2.1":{name:"Laguna S 2.1"}}}},permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"agy:gemini-3.7-flash-high",model:"gemini-3.7-flash-high",kind:"antigravity",addDirs:["."]},{id:"claude:sonnet",model:"sonnet",kind:"claude",extraArgs:["--disallowedTools","Write,Edit,NotebookEdit,Bash"]},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only"},{id:"zen:deepseek-v4-flash-free",model:"deepseek-v4-flash-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"agnes:agnes-2.5-flash",model:"agnes-2.5-flash",kind:"api-openai-compat",envVar:"AGNES_KEYS",baseURL:"https://apihub.agnes-ai.com/v1",body:{max_tokens:8192}},{id:"poolside:laguna-s-2.1",model:"poolside/laguna-s-2.1",kind:"api-openai-compat",envVar:"POOLSIDE_KEYS",baseURL:"https://inference.poolside.ai/v1",body:{max_tokens:8192,chat_template_kwargs:{enable_thinking:!1}}}],resolveProviders:function(e,t={}){let r=Ce(t,"env",null);Pr(r)||(r="undefined"!=typeof process&&process&&Pr(process.env)?process.env:{});let n=Fr(e)?e.filter(Pr):[],o=Ce(t,"pick",null),i=[],u=n;if(Un(o)){u=[];for(let e of o){let t=n.find(t=>Ce(t,"id",null)===e);t?u.push(t):i.push(String(e))}}let l=[],a=[];for(let e of u){let t=Ce(e,"envVar",null);if(!Or(t)||Un(Ce(e,"keys",null))){l.push(fr(e,["envVar"]));continue}let n=String(Ce(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?l.push({...fr(e,["envVar"]),keys:n}):a.push({id:Ce(e,"id",""),envVar:t})}let s={};for(let e of l)s[e.id]=e;return{providers:l,table:s,skipped:a,missing:i}}};return Jn});
|
|
7
7
|
//# sourceMappingURL=w-dispatch-ai.umd.js.map
|