w-dispatch-ai 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -5
- package/dist/w-dispatch-ai.umd.js +2 -2
- package/dist/w-dispatch-ai.umd.js.map +1 -1
- package/docs/WDispatchAi.mjs.html +10 -4
- package/docs/adapters.mjs.html +10 -6
- package/docs/dispatchAi.mjs.html +2 -2
- package/docs/dispatchAiFallback.mjs.html +2 -2
- package/docs/dispatchAiWkf.mjs.html +172 -0
- package/docs/dispatchAntigravity.mjs.html +264 -0
- package/docs/dispatchApiOpenaiCompat.mjs.html +483 -0
- package/docs/dispatchClaude.mjs.html +2 -2
- package/docs/dispatchCodex.mjs.html +2 -2
- package/docs/dispatchOpencode.mjs.html +2 -2
- package/docs/getCliArgs.mjs.html +2 -2
- package/docs/getErrorResult.mjs.html +2 -2
- package/docs/global.html +6095 -1092
- package/docs/index.html +2 -2
- package/docs/wkf_callAiWithFallback.mjs.html +281 -0
- package/docs/wkf_extractJsonLoose.mjs.html +180 -0
- package/docs/wkf_runFanout.mjs.html +227 -0
- package/docs/wkf_runFanoutPipeline.mjs.html +178 -0
- package/docs/wkf_runRolePipeline.mjs.html +195 -0
- package/g.mjs +19 -2
- package/package.json +1 -1
- package/src/WDispatchAi.mjs +8 -2
- package/src/adapters.mjs +8 -4
- package/src/dispatchAiWkf.mjs +100 -0
- package/src/dispatchAntigravity.mjs +192 -0
- package/src/dispatchApiOpenaiCompat.mjs +411 -0
- package/src/wkf/callAiWithFallback.mjs +209 -0
- package/src/wkf/extractJsonLoose.mjs +108 -0
- package/src/wkf/runFanout.mjs +155 -0
- package/src/wkf/runFanoutPipeline.mjs +106 -0
- package/src/wkf/runRolePipeline.mjs +123 -0
- package/test/tools/fakeServerForApiTest.mjs +137 -0
- package/test/unit-WDispatchAi.test.mjs +17 -6
- package/test/unit-adapters.test.mjs +7 -3
- package/test/unit-callAiWithFallback.test.mjs +146 -0
- package/test/unit-dispatchAi.test.mjs +7 -3
- package/test/unit-dispatchAiWkf.test.mjs +118 -0
- package/test/unit-dispatchAntigravity.test.mjs +173 -0
- package/test/unit-dispatchApiOpenaiCompat.test.mjs +233 -0
- package/test/unit-extractJsonLoose.test.mjs +78 -0
- package/test/unit-runFanout.test.mjs +166 -0
- package/test/unit-runFanoutPipeline.test.mjs +86 -0
- package/test/unit-runRolePipeline.test.mjs +163 -0
package/README.md
CHANGED
|
@@ -22,19 +22,25 @@ Note:
|
|
|
22
22
|
- `dispatchClaude` needs [Claude Code CLI](https://claude.com/claude-code) (`claude`) in system PATH, and uses its existing login state.
|
|
23
23
|
- `dispatchCodex` needs [OpenAI Codex CLI](https://github.com/openai/codex) (`codex`) in system PATH, and uses its existing login state.
|
|
24
24
|
- `dispatchOpencode` needs [opencode CLI](https://opencode.ai/) (`opencode`) in system PATH. Unlike the other two, it accepts a per-call `key`+`provider`, injected through `OPENCODE_AUTH_CONTENT`, so multiple api keys can be rotated without rewriting `auth.json`.
|
|
25
|
-
-
|
|
25
|
+
- `dispatchAntigravity` needs [Google Antigravity CLI](https://antigravity.google/) (`agy`, not `antigravity`) in system PATH, and uses its existing OAuth login state (first login requires an interactive desktop session). Unlike the other three, agy takes the prompt via the `--print` flag instead of stdin, so the prompt is capped at 30000 chars (Windows command line limit); longer prompts return an error result.
|
|
26
|
+
- `dispatchApiOpenaiCompat` needs **no cli and no login**: it calls any OpenAI-compatible endpoint directly by fetch. Known-working gateways (verified 2026-08-11): [OpenCode Zen](https://opencode.ai/docs/zen) `https://opencode.ai/zen/v1` (same `sk-...` keys as opencode cli, model names without the `opencode/` prefix, e.g. `deepseek-v4-flash-free`) and Agnes `https://apihub.agnes-ai.com/v1` (model `agnes-2.0-flash`). Note claude/codex use subscription login state, not api keys, so they cannot be called this way.
|
|
27
|
+
- Each cli adapter also accepts an `exe` option to pin the executable path, useful when the CLI is not in PATH (e.g. Windows Task Scheduler environments).
|
|
28
|
+
- For the other three adapters the prompt is always passed through stdin, never as a positional argument, so a prompt of tens of thousands of characters will not cause `ENAMETOOLONG`.
|
|
26
29
|
- All functions never reject. Success or failure is reported by the `ok` and `error` fields of the result object.
|
|
27
30
|
- **Security**: `dispatchClaude` passes `--dangerously-skip-permissions` by default, so the non-interactive `-p` mode will not hang on permission prompts. If the prompt embeds untrusted content (e.g. a web page to summarize), instructions inside that content would also run without the permission gate. Pass `skipPermissions: false` to keep the CLI permission gate.
|
|
28
31
|
|
|
29
32
|
#### Functions:
|
|
30
33
|
| function | description |
|
|
31
34
|
| --- | --- |
|
|
32
|
-
| `dispatchAi(kind, prompt, opt)` | dispatch to the adapter of `kind`, one of `'opencode'`、`'claude'`、`'codex'` |
|
|
35
|
+
| `dispatchAi(kind, prompt, opt)` | dispatch to the adapter of `kind`, one of `'opencode'`、`'claude'`、`'codex'`、`'antigravity'`、`'api-openai-compat'` |
|
|
33
36
|
| `dispatchAiFallback(prompt, opt)` | call ai with an ordered provider list, auto rotating keys within a group and falling back to the next group |
|
|
37
|
+
| `dispatchAiWkf(opt)` | workflow factory: inject a named provider table once, returns bound `callAi`/`runFanout`/`runRolePipeline`/`runFanoutPipeline` |
|
|
34
38
|
| `dispatchOpencode(prompt, opt)` | call an ai model by opencode cli, supports per-call api key and provider config |
|
|
35
39
|
| `dispatchClaude(prompt, opt)` | call a claude model by claude code cli |
|
|
36
40
|
| `dispatchCodex(prompt, opt)` | call a gpt model by openai codex cli |
|
|
37
|
-
| `
|
|
41
|
+
| `dispatchAntigravity(prompt, opt)` | call an ai model by google antigravity cli (`agy`), a multi-model gateway (gemini, claude, gpt-oss) |
|
|
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
|
+
| `KINDS` | array of available kinds, `['opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat']` |
|
|
38
44
|
|
|
39
45
|
#### Example:
|
|
40
46
|
> **Link:** [[dev source code](https://github.com/yuda-lyu/w-dispatch-ai/blob/master/g.mjs)]
|
|
@@ -68,7 +74,7 @@ let test = async () => {
|
|
|
68
74
|
|
|
69
75
|
//可用之AI供應商種類
|
|
70
76
|
console.log('KINDS:', wdi.KINDS)
|
|
71
|
-
// => KINDS: [ 'opencode', 'claude', 'codex' ]
|
|
77
|
+
// => KINDS: [ 'opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat' ]
|
|
72
78
|
|
|
73
79
|
let prompt = '請只回覆兩個字:完成,不要有任何其他文字'
|
|
74
80
|
|
|
@@ -87,6 +93,20 @@ let test = async () => {
|
|
|
87
93
|
console.log('opencode:', r3.ok, r3.stdout.trim())
|
|
88
94
|
// => opencode: true 完成
|
|
89
95
|
|
|
96
|
+
//以antigravity CLI(agy)呼叫, prompt走--print旗標(長度上限30000字元), model須為`agy models`第一欄slug
|
|
97
|
+
let r3b = await wdi.dispatchAntigravity(prompt, { model: 'gemini-3.6-flash-low' })
|
|
98
|
+
console.log('antigravity:', r3b.ok, r3b.stdout.trim())
|
|
99
|
+
// => antigravity: true 完成
|
|
100
|
+
|
|
101
|
+
//以OpenAI相容API直呼(免CLI免登入), 給baseURL+key+model即可; Zen端點即opencode CLI之自家閘道
|
|
102
|
+
let r3c = await wdi.dispatchApiOpenaiCompat(prompt, {
|
|
103
|
+
baseURL: 'https://apihub.agnes-ai.com/v1',
|
|
104
|
+
key: agnesKeys[0],
|
|
105
|
+
model: 'agnes-2.0-flash',
|
|
106
|
+
})
|
|
107
|
+
console.log('api-openai-compat:', r3c.ok, r3c.code, r3c.stdout.trim())
|
|
108
|
+
// => api-openai-compat: true 200 完成
|
|
109
|
+
|
|
90
110
|
//以供應商條目輪替, 一個條目即一組(kind, model, 可選的key與provider與config), 輪到誰就用誰的CLI與模型
|
|
91
111
|
//opencode支援逐次注入金鑰, 故同一provider之多把金鑰可各成一個條目
|
|
92
112
|
let items = [
|
|
@@ -95,6 +115,7 @@ let test = async () => {
|
|
|
95
115
|
{ kind: 'opencode', model: 'opencode/deepseek-v4-flash-free', provider: 'opencode', key: opencodeKeys[0], timeoutMs: 180000 },
|
|
96
116
|
{ kind: 'opencode', model: 'opencode/deepseek-v4-flash-free', provider: 'opencode', key: opencodeKeys[1], timeoutMs: 180000 },
|
|
97
117
|
{ kind: 'opencode', model: 'agnes-ai/agnes-2.0-flash', provider: 'agnes-ai', key: agnesKeys[0], config: configAgnes, timeoutMs: 180000 },
|
|
118
|
+
{ kind: 'antigravity', model: 'gemini-3.6-flash-low' },
|
|
98
119
|
]
|
|
99
120
|
for (let item of items) {
|
|
100
121
|
let r = await wdi.dispatchAi(item.kind, prompt, item)
|
|
@@ -104,12 +125,13 @@ let test = async () => {
|
|
|
104
125
|
// => dispatchAi opencode/deepseek-v4-flash-free: true 完成
|
|
105
126
|
// => dispatchAi opencode/deepseek-v4-flash-free: true 完成
|
|
106
127
|
// => dispatchAi agnes-ai/agnes-2.0-flash: true 完成
|
|
128
|
+
// => dispatchAi gemini-3.6-flash-low: true 完成
|
|
107
129
|
}
|
|
108
130
|
|
|
109
131
|
//未知供應商回傳error結果物件, 不會reject
|
|
110
132
|
let r4 = await wdi.dispatchAi('gemini', prompt)
|
|
111
133
|
console.log('invalid kind:', r4.ok, r4.error)
|
|
112
|
-
// => invalid kind: false unknown ai kind: "gemini" (available: opencode, claude, codex)
|
|
134
|
+
// => invalid kind: false unknown ai kind: "gemini" (available: opencode, claude, codex, antigravity, api-openai-compat)
|
|
113
135
|
|
|
114
136
|
//prompt非有效字串亦回傳error結果物件
|
|
115
137
|
let r5 = await wdi.dispatchClaude('')
|
|
@@ -148,6 +170,7 @@ let test = async () => {
|
|
|
148
170
|
},
|
|
149
171
|
{ id: 'claude', kind: 'claude', model: 'sonnet' },
|
|
150
172
|
{ id: 'codex', kind: 'codex', model: 'gpt-5.6-luna', sandbox: 'read-only' },
|
|
173
|
+
{ id: 'antigravity', kind: 'antigravity', model: 'gemini-3.6-flash-low' },
|
|
151
174
|
],
|
|
152
175
|
budgetMs: 600000,
|
|
153
176
|
onEvent: (ev) => console.log(' event:', ev.type, ev.keyId, ev.error || ''),
|
|
@@ -199,6 +222,33 @@ await test()
|
|
|
199
222
|
| --- | --- | --- | --- |
|
|
200
223
|
| `sandbox` | String | `'workspace-write'` | 沙箱模式,可用`'read-only'`、`'workspace-write'`、`'danger-full-access'` |
|
|
201
224
|
|
|
225
|
+
#### Options only for dispatchAntigravity:
|
|
226
|
+
| key | type | default | description |
|
|
227
|
+
| --- | --- | --- | --- |
|
|
228
|
+
| `model` | String | `''` | 須為`agy models`**第一欄之slug**(如`gemini-3.6-flash-low`);agy錯誤訊息列出的是顯示名稱而非slug,勿照抄 |
|
|
229
|
+
| `effort` | String | `''` | `'low'`、`'medium'`、`'high'`,需agy>=1.1.11;建議搭配不帶檔位之基礎slug(如`gemini-3.1-pro`),與帶檔位slug併用且檔位不一致時agy回conflicts錯誤 |
|
|
230
|
+
| `skipPermissions` | Boolean | `true` | 是否帶`--dangerously-skip-permissions`旗標 |
|
|
231
|
+
| `printTimeout` | String | 由`timeoutMs`推導 | agy自身等待上限(如`'10m'`、`'570s'`),預設`timeoutMs`扣30秒緩衝(下限30秒),令CLI先於外層逾時而回報自身錯誤訊息 |
|
|
232
|
+
| `addDirs` | Array | `[]` | 加入workspace之目錄字串陣列,逐項展開為`--add-dir` |
|
|
233
|
+
| `timeoutMs` | Integer | `300000` | agy為agent型CLI,預設較其他轉接器長 |
|
|
234
|
+
|
|
235
|
+
注意:agy之prompt走`--print`旗標而非stdin(agy介面如此),故prompt長度上限30000字元,超過回傳錯誤結果物件(不reject)。
|
|
236
|
+
|
|
237
|
+
#### Options only for dispatchApiOpenaiCompat:
|
|
238
|
+
| key | type | default | description |
|
|
239
|
+
| --- | --- | --- | --- |
|
|
240
|
+
| `baseURL` | String | 必填 | API基底網址,將於尾端接上`/chat/completions` |
|
|
241
|
+
| `model` | String | 必填 | 模型ID(Zen之模型名不帶`opencode/`前綴) |
|
|
242
|
+
| `key` | String | `''` | API key,以`Bearer`置於`Authorization`標頭,省略代表不帶認證 |
|
|
243
|
+
| `system` | String | `''` | system提示詞,置於messages首位 |
|
|
244
|
+
| `body` | Object | `{}` | 額外請求本體(`temperature`、`max_tokens`、`response_format`等),同名鍵覆寫預設 |
|
|
245
|
+
| `headers` | Object | `{}` | 額外請求標頭 |
|
|
246
|
+
| `timeoutMs` | Integer | `120000` | 逾時毫秒,逾時中止請求(含回應串流讀取) |
|
|
247
|
+
| `maxRetries` | Integer | `0` | 失敗重試次數;**4xx(429除外)為客戶端錯誤不重試**,429/5xx/網路錯誤/逾時線性退避重試 |
|
|
248
|
+
| `retryDelayMs` | Integer | `5000` | 重試間隔,實際為`retryDelayMs`×次數且上限15000ms |
|
|
249
|
+
|
|
250
|
+
結果結構對齊execCli:`stdout`為回覆內容、`code`為HTTP狀態碼(網路錯誤/逾時為`null`)、逾時`error`以`TIMEOUT`開頭、驗證失敗為`OUTPUT_VALIDATION_FAILED`——故可直接作為`dispatchAiFallback`條目(`kind: 'api-openai-compat'`,`keys`多金鑰輪替同樣適用)與工作流provider。
|
|
251
|
+
|
|
202
252
|
#### Options for dispatchAiFallback:
|
|
203
253
|
| key | type | default | description |
|
|
204
254
|
| --- | --- | --- | --- |
|
|
@@ -278,6 +328,34 @@ await test()
|
|
|
278
328
|
}
|
|
279
329
|
```
|
|
280
330
|
|
|
331
|
+
#### dispatchAiWkf (workflow factory):
|
|
332
|
+
注入一次provider定義表(名稱 → `dispatchAiFallback`條目)與共用預設,之後以名稱宣告工作流;名稱查無定義即回報錯誤(fail fast)。回覆經寬鬆JSON解析(`extractJsonLoose`)+自訂`check`驗證,非法回覆視為該家失敗而自動遞補;預設於prompt前掛「禁止建檔」約束(`promptPrefix: ''`可關閉)。
|
|
333
|
+
|
|
334
|
+
```alias
|
|
335
|
+
let wkf = wdi.dispatchAiWkf({
|
|
336
|
+
providers: {
|
|
337
|
+
'deepseek': { kind: 'opencode', model: 'opencode/deepseek-v4-flash-free', provider: 'opencode', keys: [...] },
|
|
338
|
+
'sonnet': { kind: 'claude', model: 'sonnet' },
|
|
339
|
+
'luna': { kind: 'codex', model: 'gpt-5.6-luna' },
|
|
340
|
+
},
|
|
341
|
+
defaults: { timeoutMs: 300000 },
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
//單一名額: 主模型+自帶遞補鏈
|
|
345
|
+
let r1 = await wkf.callAi('...prompt...', { spec: { use: 'deepseek', fallback: ['sonnet'] }, check: (j) => !!j.essence })
|
|
346
|
+
|
|
347
|
+
//Fanout: 並行多開執行 → 單點整合收斂(候選未達minCandidates時以首位候選為成果不硬整合)
|
|
348
|
+
let r2 = await wkf.runFanout({ task, agents: [{ use: 'deepseek', fallback: ['sonnet'] }, { use: 'sonnet' }], integrate: { use: 'luna' }, check })
|
|
349
|
+
|
|
350
|
+
//RolePipeline: 多角色串行鏈, 各階段可自帶AI/遞補/檢核, prompt收ctx={input,prev,results,index}
|
|
351
|
+
let r3 = await wkf.runRolePipeline({ input, stages: [{ id: 'draft', use: 'sonnet', prompt: (ctx) => `...` }, { id: 'audit', use: 'luna', prompt: (ctx) => `...${JSON.stringify(ctx.prev)}` }] })
|
|
352
|
+
|
|
353
|
+
//FanoutPipeline: Fanout成果接RolePipeline(品質天花板組合)
|
|
354
|
+
let r4 = await wkf.runFanoutPipeline({ task, agents, integrate, stages, check })
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
各工作流皆部分接受:個別名額/階段失敗不炸整輪,已完成成果完整回傳(`candidates`/`results`+`failedStage`),可只重跑失敗段。
|
|
358
|
+
|
|
281
359
|
#### Known design notes:
|
|
282
360
|
- `dispatchAi(kind, prompt, opt)`會把整個`opt`原樣轉傳對應轉接器,該轉接器用不到的鍵(例如輪替條目物件內的`kind`)會被忽略,故「供應商條目物件直接當`opt`」是預期用法;`dispatchAiFallback`之providers條目沿用同一約定。
|
|
283
361
|
- `dispatchAiFallback`為單向單輪:全數群組試畢即回傳最後一筆失敗結果與`tried`歷程,不回頭重試已敗的組。跨次執行僅記憶游標,不設金鑰停用清單(理由見上方失敗分流說明);需跨次跳過特定金鑰時,由呼叫端依`tried`/`onEvent`內之`error`與`stderr`自行決策。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* w-dispatch-ai v1.0.
|
|
2
|
+
* w-dispatch-ai v1.0.3
|
|
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,c=Object.prototype,a=c.hasOwnProperty,l=c.toString,s=i?i.toStringTag:void 0;var f=Object.prototype.toString;var p=i?i.toStringTag:void 0;function d(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":p&&p in Object(t)?function(t){var e=a.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var o=l.call(t);return n&&(e?t[s]=r:delete t[s]),o}(t):function(t){return f.call(t)}(t)}function y(t){return null!=t&&"object"==typeof t}function v(t){return y(t)&&"[object Arguments]"==d(t)}var b=Object.prototype,h=b.hasOwnProperty,g=b.propertyIsEnumerable,j=v(function(){return arguments}())?v:function(t){return y(t)&&h.call(t,"callee")&&!g.call(t,"callee")},m=j,_=Array.isArray;var w="object"==typeof exports&&exports&&!exports.nodeType&&exports,O=w&&"object"==typeof module&&module&&!module.nodeType&&module,x=O&&O.exports===w?u.Buffer:void 0,k=(x?x.isBuffer:void 0)||function(){return!1},A=/^(?:0|[1-9]\d*)$/;function I(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 S(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}var M={};function $(t){return function(e){return t(e)}}M["[object Float32Array]"]=M["[object Float64Array]"]=M["[object Int8Array]"]=M["[object Int16Array]"]=M["[object Int32Array]"]=M["[object Uint8Array]"]=M["[object Uint8ClampedArray]"]=M["[object Uint16Array]"]=M["[object Uint32Array]"]=!0,M["[object Arguments]"]=M["[object Array]"]=M["[object ArrayBuffer]"]=M["[object Boolean]"]=M["[object DataView]"]=M["[object Date]"]=M["[object Error]"]=M["[object Function]"]=M["[object Map]"]=M["[object Number]"]=M["[object Object]"]=M["[object RegExp]"]=M["[object Set]"]=M["[object String]"]=M["[object WeakMap]"]=!1;var T="object"==typeof exports&&exports&&!exports.nodeType&&exports,E=T&&"object"==typeof module&&module&&!module.nodeType&&module,N=E&&E.exports===T&&n.process,P=function(){try{var t=E&&E.require&&E.require("util").types;return t||N&&N.binding&&N.binding("util")}catch(t){}}(),D=P&&P.isTypedArray,F=D?$(D):function(t){return y(t)&&S(t.length)&&!!M[d(t)]},U=Object.prototype.hasOwnProperty;function z(t,e){var r=_(t),n=!r&&m(t),o=!r&&!n&&k(t),u=!r&&!n&&!o&&F(t),i=r||n||o||u,c=i?function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}(t.length,String):[],a=c.length;for(var l in t)!e&&!U.call(t,l)||i&&("length"==l||o&&("offset"==l||"parent"==l)||u&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||I(l,a))||c.push(l);return c}var C=Object.prototype;function B(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||C)}function L(t,e){return function(r){return t(e(r))}}var V=L(Object.keys,Object),R=Object.prototype.hasOwnProperty;function W(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function q(t){if(!W(t))return!1;var e=d(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}function G(t){return null!=t&&S(t.length)&&!q(t)}function H(t){return G(t)?z(t):function(t){if(!B(t))return V(t);var e=[];for(var r in Object(t))R.call(t,r)&&"constructor"!=r&&e.push(r);return e}(t)}function J(t){return"symbol"==typeof t||y(t)&&"[object Symbol]"==d(t)}var K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Y=/^\w*$/;var Q,X=u["__core-js_shared__"],Z=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var tt=Function.prototype.toString;function et(t){if(null!=t){try{return tt.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var rt=/^\[object .+?Constructor\]$/,nt=Function.prototype,ot=Object.prototype,ut=nt.toString,it=ot.hasOwnProperty,ct=RegExp("^"+ut.call(it).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function at(t){return!(!W(t)||(e=t,Z&&Z in e))&&(q(t)?ct:rt).test(et(t));var e}function lt(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return at(r)?r:void 0}var st=lt(Object,"create");var ft=Object.prototype.hasOwnProperty;var pt=Object.prototype.hasOwnProperty;function dt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function yt(t,e){return t===e||t!=t&&e!=e}function vt(t,e){for(var r=t.length;r--;)if(yt(t[r][0],e))return r;return-1}dt.prototype.clear=function(){this.__data__=st?st(null):{},this.size=0},dt.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},dt.prototype.get=function(t){var e=this.__data__;if(st){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return ft.call(e,t)?e[t]:void 0},dt.prototype.has=function(t){var e=this.__data__;return st?void 0!==e[t]:pt.call(e,t)},dt.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=st&&void 0===e?"__lodash_hash_undefined__":e,this};var bt=Array.prototype.splice;function ht(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])}}ht.prototype.clear=function(){this.__data__=[],this.size=0},ht.prototype.delete=function(t){var e=this.__data__,r=vt(e,t);return!(r<0)&&(r==e.length-1?e.pop():bt.call(e,r,1),--this.size,!0)},ht.prototype.get=function(t){var e=this.__data__,r=vt(e,t);return r<0?void 0:e[r][1]},ht.prototype.has=function(t){return vt(this.__data__,t)>-1},ht.prototype.set=function(t,e){var r=this.__data__,n=vt(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var gt=lt(u,"Map");function jt(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 mt(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])}}mt.prototype.clear=function(){this.size=0,this.__data__={hash:new dt,map:new(gt||ht),string:new dt}},mt.prototype.delete=function(t){var e=jt(this,t).delete(t);return this.size-=e?1:0,e},mt.prototype.get=function(t){return jt(this,t).get(t)},mt.prototype.has=function(t){return jt(this,t).has(t)},mt.prototype.set=function(t,e){var r=jt(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function _t(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(_t.Cache||mt),r}_t.Cache=mt;var wt,Ot,xt,kt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,At=/\\(\\)?/g,It=(wt=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(kt,function(t,r,n,o){e.push(n?o.replace(At,"$1"):r||t)}),e},Ot=_t(wt,function(t){return 500===xt.size&&xt.clear(),t}),xt=Ot.cache,Ot),St=It;function Mt(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,Tt=$t?$t.toString:void 0;function Et(t){if("string"==typeof t)return t;if(_(t))return Mt(t,Et)+"";if(J(t))return Tt?Tt.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Nt(t){return null==t?"":Et(t)}function Pt(t,e){return _(t)?t:function(t,e){if(_(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!J(t))||Y.test(t)||!K.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:St(Nt(t))}function Dt(t){if("string"==typeof t||J(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ft(t,e){for(var r=0,n=(e=Pt(e,t)).length;null!=t&&r<n;)t=t[Dt(e[r++])];return r&&r==n?t:void 0}function Ut(t,e,r){var n=null==t?void 0:Ft(t,e);return void 0===n?r:n}function zt(t){var e=this.__data__=new ht(t);this.size=e.size}zt.prototype.clear=function(){this.__data__=new ht,this.size=0},zt.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},zt.prototype.get=function(t){return this.__data__.get(t)},zt.prototype.has=function(t){return this.__data__.has(t)},zt.prototype.set=function(t,e){var r=this.__data__;if(r instanceof ht){var n=r.__data__;if(!gt||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new mt(n)}return r.set(t,e),this.size=r.size,this};var Ct=function(){try{var t=lt(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),Bt=Ct;function Lt(t,e,r){"__proto__"==e&&Bt?Bt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var Vt=Object.prototype.hasOwnProperty;function Rt(t,e,r){var n=t[e];Vt.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 c=e[u],a=n?n(r[c],t[c],c,r,t):void 0;void 0===a&&(a=t[c]),o?Lt(r,c,a):Rt(r,c,a)}return r}var qt=Object.prototype.hasOwnProperty;function Gt(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&&qt.call(t,n))&&r.push(n);return r}function Ht(t){return G(t)?z(t,!0):Gt(t)}var Jt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Kt=Jt&&"object"==typeof module&&module&&!module.nodeType&&module,Yt=Kt&&Kt.exports===Jt?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 ce(t,e,r){var n=e(t);return _(t)?n:ne(n,r(t))}function ae(t){return ce(t,H,re)}function le(t){return ce(t,Ht,ie)}var se=lt(u,"DataView"),fe=lt(u,"Promise"),pe=lt(u,"Set"),de=lt(u,"WeakMap"),ye="[object Map]",ve="[object Promise]",be="[object Set]",he="[object WeakMap]",ge="[object DataView]",je=et(se),me=et(gt),_e=et(fe),we=et(pe),Oe=et(de),xe=d;(se&&xe(new se(new ArrayBuffer(1)))!=ge||gt&&xe(new gt)!=ye||fe&&xe(fe.resolve())!=ve||pe&&xe(new pe)!=be||de&&xe(new de)!=he)&&(xe=function(t){var e=d(t),r="[object Object]"==e?t.constructor:void 0,n=r?et(r):"";if(n)switch(n){case je:return ge;case me:return ye;case _e:return ve;case we:return be;case Oe:return he}return e});var ke=xe,Ae=Object.prototype.hasOwnProperty;var Ie=u.Uint8Array;function Se(t){var e=new t.constructor(t.byteLength);return new Ie(e).set(new Ie(t)),e}var Me=/\w*$/;var $e=i?i.prototype:void 0,Te=$e?$e.valueOf:void 0;function Ee(t,e,r){var n,o=t.constructor;switch(e){case"[object ArrayBuffer]":return Se(t);case"[object Boolean]":case"[object Date]":return new o(+t);case"[object DataView]":return function(t,e){var r=e?Se(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?Se(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,Me.exec(t));return e.lastIndex=t.lastIndex,e}(t);case"[object Symbol]":return n=t,Te?Object(Te.call(n)):{}}}var Ne=Object.create,Pe=function(){function t(){}return function(e){if(!W(e))return{};if(Ne)return Ne(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),De=Pe;var Fe=P&&P.isMap,Ue=Fe?$(Fe):function(t){return y(t)&&"[object Map]"==ke(t)};var ze=P&&P.isSet,Ce=ze?$(ze):function(t){return y(t)&&"[object Set]"==ke(t)},Be="[object Arguments]",Le="[object Function]",Ve="[object Object]",Re={};function We(t,e,r,n,o,u){var i,c=1&e,a=2&e,l=4&e;if(r&&(i=o?r(t,n,o,u):r(t)),void 0!==i)return i;if(!W(t))return t;var s=_(t);if(s){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),!c)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=ke(t),p=f==Le||"[object GeneratorFunction]"==f;if(k(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,c);if(f==Ve||f==Be||p&&!o){if(i=a||p?{}:function(t){return"function"!=typeof t.constructor||B(t)?{}:De(oe(t))}(t),!c)return a?function(t,e){return Wt(t,ie(t),e)}(t,function(t,e){return t&&Wt(e,Ht(e),t)}(i,t)):function(t,e){return Wt(t,re(t),e)}(t,function(t,e){return t&&Wt(e,H(e),t)}(i,t))}else{if(!Re[f])return o?t:{};i=Ee(t,f,c)}}u||(u=new zt);var d=u.get(t);if(d)return d;u.set(t,i),Ce(t)?t.forEach(function(n){i.add(We(n,e,r,n,t,u))}):Ue(t)&&t.forEach(function(n,o){i.set(o,We(n,e,r,o,t,u))});var y=s?void 0:(l?a?le:ae:a?Ht:H)(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]),Rt(i,o,We(n,e,r,o,t,u))}),i}function qe(t,e){return e.length<2?t:Ft(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))}Re[Be]=Re["[object Array]"]=Re["[object ArrayBuffer]"]=Re["[object DataView]"]=Re["[object Boolean]"]=Re["[object Date]"]=Re["[object Float32Array]"]=Re["[object Float64Array]"]=Re["[object Int8Array]"]=Re["[object Int16Array]"]=Re["[object Int32Array]"]=Re["[object Map]"]=Re["[object Number]"]=Re[Ve]=Re["[object RegExp]"]=Re["[object Set]"]=Re["[object String]"]=Re["[object Symbol]"]=Re["[object Uint8Array]"]=Re["[object Uint8ClampedArray]"]=Re["[object Uint16Array]"]=Re["[object Uint32Array]"]=!0,Re["[object Error]"]=Re[Le]=Re["[object WeakMap]"]=!1;var Ge=Object.prototype.hasOwnProperty;function He(t,e){var r=-1,n=(e=Pt(e,t)).length;if(!n)return!0;for(;++r<n;){var o=Dt(e[r]);if("__proto__"===o&&!Ge.call(t,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var u=qe(t,e);return null==u||delete u[Dt(function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}(e))]}var Je=Function.prototype,Ke=Object.prototype,Ye=Je.toString,Qe=Ke.hasOwnProperty,Xe=Ye.call(Object);function Ze(t){return function(t){if(!y(t)||"[object Object]"!=d(t))return!1;var e=oe(t);if(null===e)return!0;var r=Qe.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Ye.call(r)==Xe}(t)?void 0:t}var tr=i?i.isConcatSpreadable:void 0;function er(t){return _(t)||m(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 c=t[u];e>0&&r(c)?e>1?rr(c,e-1,r,n,o):ne(o,c):n||(o[o.length]=c)}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,cr=Date.now;var ar=function(t){var e=0,r=0;return function(){var n=cr(),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),lr=ar;var sr=function(t){return lr(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 c=Array(e+1);++o<e;)c[o]=n[o];return c[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,c)}}(t,void 0,nr),t+"")}(function(t,e){var r={};if(null==t)return r;var n=!1;e=Mt(e,function(e){return e=Pt(e,t),n||(n=e.length>1),e}),Wt(t,le(t),r),n&&(r=We(r,7,Ze));for(var o=e.length;o--;)He(r,e[o]);return r}),fr=sr;function pr(t){return"[object Object]"===Object.prototype.toString.call(t)}function dr(t){return!(!function(t){return"[object String]"===Object.prototype.toString.call(t)}(t)||""===t)}function yr(){let t,e,r=new Promise(function(){t=arguments[0],e=arguments[1]});return r.resolve=t,r.reject=e,r}function vr(t){let e=!1;if(dr(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(function(t){return t!=t}(t))return!1;e=!0}return e}function br(t=10){vr(t)||(t=10);let e=yr();return setTimeout(function(){e.resolve()},t),e}var hr=/\s/;var gr=/^\s+/;function jr(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&hr.test(t.charAt(e)););return e}(t)+1).replace(gr,""):t}var mr=/^[-+]0x[0-9a-f]+$/i,_r=/^0b[01]+$/i,wr=/^0o[0-7]+$/i,Or=parseInt;function xr(t){if("number"==typeof t)return t;if(J(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=jr(t);var r=_r.test(t);return r||wr.test(t)?Or(t.slice(2),r?2:8):mr.test(t)?NaN:+t}var kr=1/0;function Ar(t){return t?(t=xr(t))===kr||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function Ir(t){var e=Ar(t),r=e%1;return e==e?r?e-r:e:0}var Sr=u.isFinite,Mr=Math.min;var $r=function(t){var e=Math[t];return function(t,r){if(t=xr(t),(r=null==r?0:Mr(Ir(r),292))&&Sr(t)){var n=(Nt(t)+"e").split("e");return+((n=(Nt(e(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return e(t)}}("round"),Tr=$r;function Er(t){if(!vr(t))return 0;return Ar(t)}function Nr(t){if(!vr(t))return 0;t=Er(t);let e=Tr(t);return"0"===String(e)?0:e}function Pr(t){return"[object Array]"===Object.prototype.toString.call(t)}function Dr(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}function Fr(t){return!!vr(t)&&(t=Er(t),"number"==typeof(e=t)&&e==Ir(e));var e}function Ur(t){if(!Fr(t))return!1;return Nr(t)>0}function zr(t){if(!Fr(t))return!1;return Nr(t)>=0}function Cr(t,e){return dr(t)&&zr(e)?0===(e=Nr(e))?"":t.substring(0,e):""}function Br(t,e){return dr(t)&&zr(e)?0===(e=Nr(e))?t:function(t,e){if(!dr(t))return"";if(!zr(e))return"";if(0===(e=Nr(e)))return"";let r=t.length-e;return r<0&&(r=0),t.substring(r,r+e)}(t,t.length-e):""}function Lr(t,e,r={}){if(!dr(t))return"";if(!zr(e))return t;if(e=Nr(e),t.length<=e)return t;let n=Ut(r,"funWithMsg"),o="";if(Dr(n)){let r=n(t,e);dr(r)&&(o=r)}return Cr(t,e)+`...${o}`}function Vr(t,e={}){let r=Ut(e,"fs");return!!function(t,e={}){let r=Ut(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 Rr(t){return function(t,e={}){let r=null,n=Ut(e,"fs"),o="";try{o=n.readFileSync(t,"utf8")}catch(t){r=t}return null!==r?{error:r}:{success:o}}(t,{fs:r})}function Wr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var qr=t,Gr=qr.spawn,Hr=qr.exec;function Jr(t,e,r){var n={};try{Object.keys(t).forEach(function(r){t[r].forEach(function(t){n[t]||(Kr(t,e),n[t]=1)}),n[r]||(Kr(r,e),n[r]=1)})}catch(t){if(r)return r(t);throw t}if(r)return r()}function Kr(t,e){try{process.kill(parseInt(t,10),e)}catch(t){if("ESRCH"!==t.code)throw t}}function Yr(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,Yr(u,e,r,n,o)}):0==Object.keys(r).length&&o()})}var Qr=Wr(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":Hr("taskkill /pid "+t+" /T /F",r);break;case"darwin":Yr(t,n,o,function(t){return Gr("pgrep",["-P",t])},function(){Jr(n,e,r)});break;default:Yr(t,n,o,function(t){return Gr("ps",["-o","pid","--no-headers","--ppid",t])},function(){Jr(n,e,r)})}});function Xr(t){let n=Ut(Rr(t),"success","");if(!dr(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 Vr(i,{fs:r})?i:null}function Zr(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=Xr(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 tn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};function en(e,r=[],n={}){let{timeoutMs:o=12e4,cwd:u=process.cwd(),input:i,validate:c,maxBuffer:a=10485760,onStdout:l,onStderr:s,env:f}=n,p=function(t){if(Dr(t))return t;if(!dr(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(!dr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Cr(r,4)){let e=Br(r,4);if(!vr(e))return!1;let n=Nr(e);if(!dr(t)||t.length<n)return!1}return!0}}(c),d=Date.now(),y=yr(),v={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==f){if("win32"===process.platform){let t=Object.keys(f).map(t=>t.toLowerCase());for(let e of Object.keys(v))t.includes(e.toLowerCase())&&delete v[e]}v={...v,...f}}let b=Zr(e,r),h=t.spawn(b.file,b.args,{cwd:u,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:v,...b.opt}),g="",j="",m=new TextDecoder("utf-8"),_=new TextDecoder("utf-8"),w=!1,O=!1;h.stdout.on("data",t=>{let e=m.decode(t,{stream:!0});e&&(Dr(l)&&l(e),g.length<a&&(g+=e))}),h.stderr.on("data",t=>{let e=_.decode(t,{stream:!0});e&&(Dr(s)&&s(e),j.length<a&&(j+=e))}),h.stdin.on("error",()=>{}),void 0!==i&&h.stdin.write(i,"utf8"),h.stdin.end();let x=setTimeout(()=>{w||(O=!0,function(t){let e=yr();return Qr(Number(t),"SIGKILL",r=>{r?e.reject(r):e.resolve(`pid[${t}] killed`)}),e}(h.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Lr(g,500,tn),stderr:Lr(j,500,tn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-d,pid:h.pid}))},3e3).unref())},o);return h.on("error",t=>{w||(w=!0,clearTimeout(x),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${t.code||"UNKNOWN"}: ${t.message}`,durationMs:Date.now()-d,pid:h.pid}))}),h.on("close",(t,e)=>{if(w)return;w=!0,clearTimeout(x);let r=m.decode();r&&g.length<a&&(g+=r);let n=_.decode();n&&j.length<a&&(j+=n);let u=Date.now()-d;O?y.resolve({ok:!1,stdout:Lr(g,500,tn),stderr:Lr(j,500,tn),code:t,error:`TIMEOUT after ${o/1e3}s`,durationMs:u,pid:h.pid}):0===t?!p||p(g)?y.resolve({ok:!0,stdout:g,stderr:j,code:0,error:"",durationMs:u,pid:h.pid}):y.resolve({ok:!1,stdout:Lr(g,500,tn),stderr:Lr(j,500,tn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:u,pid:h.pid}):y.resolve({ok:!1,stdout:Lr(g,500,tn),stderr:Lr(j,1e3,tn),code:t,error:e?`Signal: ${e}`:`Exit code ${t}`,durationMs:u,pid:h.pid})}),y}async function rn(t,e=[],r={}){if(!dr(t))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Pr(e)||(e=[]),pr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...u}=r,i=Ut(u,"cwd",null);dr(i)?u.cwd=i:u.cwd=process.cwd();let c=Ut(u,"input",null);dr(c)?u.input=c:u.input=void 0;let a=Ut(u,"env",null);pr(a)?u.env=a:u.env=void 0;let l=Ut(u,"validate",null);Dr(l)||dr(l)?u.validate=l:u.validate=void 0;let s=Ut(u,"onStdout",null);Dr(s)?u.onStdout=s:u.onStdout=void 0;let f=Ut(u,"onStderr",null);Dr(f)?u.onStderr=f:u.onStderr=void 0,n=zr(n)?Nr(n):0,o=Ur(o)?Nr(o):5e3;let p=Ut(u,"timeoutMs",null);Ur(p)?u.timeoutMs=Nr(p):u.timeoutMs=12e4;let d,y=Ut(u,"maxBuffer",null);Ur(y)?u.maxBuffer=Nr(y):u.maxBuffer=10485760;let v=0;for(let r=0;r<=n;r++){if(r>0){let t=Math.min(o*r,15e3);await br(t)}if(d=await en(t,e,u),v=r+1,d.ok)return d.attempts=v,d;if(d.error.includes("ENOENT"))break;if(2===d.code)break}return d.attempts=v,d}function nn(...t){let e=[];for(let r of t)if(Pr(r))for(let t of r)dr(t)&&e.push(t);else dr(r)&&e.push(r);return e}function on(t){return dr(t)||(t="unknown error"),{ok:!1,stdout:"",stderr:"",code:null,error:t,durationMs:0,attempts:0}}let un=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function cn(t,e={}){if(!dr(t))return on("prompt must be a non-empty string");let r=Ut(e,"exe",null);dr(r)||(r="opencode");let n=Ut(e,"model",null),o=Ut(e,"agent",null);dr(o)||(o="build");let u=Ut(e,"extraArgs",null),i=nn("run",["--agent",o],dr(n)?["-m",n]:[],u),c=Ut(e,"env",null);pr(c)||(c=void 0);let a=Ut(e,"config",null);pr(a)&&(a=JSON.stringify(a)),dr(a)&&(c={...c,OPENCODE_CONFIG_CONTENT:a});let l=Ut(e,"key",null),s=Ut(e,"provider",null);return dr(l)&&dr(s)&&(c={...c,OPENCODE_AUTH_CONTENT:JSON.stringify({[s]:{type:"api",key:l}})}),rn(r,i,{...fr(e,un),input:t,env:c})}function an(t){return!0===(e=t)||!1===e||y(e)&&"[object Boolean]"==d(e);var e}let ln=["exe","model","skipPermissions","extraArgs","input"];async function sn(t,e={}){if(!dr(t))return on("prompt must be a non-empty string");let r=Ut(e,"exe",null);dr(r)||(r="claude");let n=Ut(e,"model",null),o=Ut(e,"skipPermissions",null);an(o)||(o=!0);let u=Ut(e,"extraArgs",null);return rn(r,nn("-p",o?"--dangerously-skip-permissions":[],dr(n)?["--model",n]:[],u),{...fr(e,ln),input:t})}let fn=["exe","model","sandbox","extraArgs","input"];async function pn(t,e={}){if(!dr(t))return on("prompt must be a non-empty string");let r=Ut(e,"exe",null);dr(r)||(r="codex");let n=Ut(e,"model",null),o=Ut(e,"sandbox",null);dr(o)||(o="workspace-write");let u=Ut(e,"extraArgs",null);return rn(r,nn("exec",["--sandbox",o],"--skip-git-repo-check",dr(n)?["-m",n]:[],u),{...fr(e,fn),input:t})}let dn={opencode:cn,claude:sn,codex:pn};function yn(t){return t!=t}function vn(t){return null==t?[]:function(t,e){return Mt(e,function(e){return t[e]})}(t,H(t))}var bn=Math.max;function hn(t,e,r,n){t=G(t)?t:vn(t),r=r&&!n?Ir(r):0;var o=t.length;return r<0&&(r=bn(o+r,0)),function(t){return"string"==typeof t||!_(t)&&y(t)&&"[object String]"==d(t)}(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&function(t,e,r){return e==e?function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1}(t,e,r):function(t,e,r,n){for(var o=t.length,u=r+(n?1:-1);n?u--:++u<o;)if(e(t[u],u,t))return u;return-1}(t,yn,r)}(t,e,r)>-1}async function gn(t,e,r={}){let n=H(dn);return dr(t)&&hn(n,t)?(0,dn[t])(e,r):on(`unknown ai kind: "${t}" (available: ${n.join(", ")})`)}let jn=["providers","budgetMs","minAttemptMs","store","onEvent"],mn=["id","keys"],_n={cursors:{}};function wn(t){let e=Ut(t,"error","");dr(e)||(e="");let r=Ut(t,"code",null);return 0===e.indexOf("TIMEOUT")||(!!e.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===e||0===e.indexOf("unknown ai kind"))))}return{KINDS:H(dn),dispatchAi:gn,dispatchAiFallback:async function(t,e={}){if(!dr(t))return{...on("prompt must be a non-empty string"),tried:[]};let r=Ut(e,"providers",null),n=Pr(r)?r.filter(pr):[];if(0===n.length)return{...on("providers must be a non-empty array"),tried:[]};let o=Ut(e,"budgetMs",null);o=Ur(o)?Nr(o):null;let u=null===o?null:Date.now()+o,i=Ut(e,"minAttemptMs",null);i=Ur(i)?Nr(i):2e4;let c=Ut(e,"store",null),a=pr(c)&&Dr(c.get)&&Dr(c.set),l=null;if(a)try{l=c.get()}catch{}pr(l)||(l=a?{cursors:{}}:_n),pr(l.cursors)||(l.cursors={});let s=()=>{if(a)try{c.set(l)}catch{}},f=Ut(e,"onEvent",null),p=t=>{if(Dr(f))try{f(t)}catch{}},d=fr(e,jn),y=[],v=null,b=null;for(let e=0;e<n.length;e++){let r=n[e],o=Ut(r,"id",null);dr(o)||(o=String(e));let c=Ut(r,"kind",null),a=Ut(r,"model",null),f=Ut(r,"keys",null),h=Pr(f)?f.filter(dr):[],g=h.length,j=fr(r,mn),m=0;if(g>0){let t=Ut(l.cursors,o,0);m=Ur(t)?Nr(t)%g:0}let _=g>0?g:1,w=!1;for(let e=0;e<_&&!w;e++){let r=g>0?(m+e)%g:null,n=null===r?o:`${o}#${r}`,f={...d,...j};g>0&&(f.key=h[r]);let _=Ut(f,"timeoutMs",null);if(_=Ur(_)?Nr(_):12e4,null!==u){let t=u-Date.now();if(t<i)return p({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:t}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...on("budget exhausted"),tried:y};_=Math.min(_,t)}f.timeoutMs=_,p({type:"try",providerId:o,keyIndex:r,keyId:n,kind:c,model:a});let O=await gn(c,t,f);if(O.ok)return g>0&&(l.cursors[o]=(r+1)%g,s()),p({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:O.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:O.durationMs}),{...O,providerId:o,keyIndex:r,kind:c,model:a,tried:y};v=O,b={providerId:o,keyIndex:r,kind:c,model:a},wn(O)?(p({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:O.error,durationMs:O.durationMs}),w=!0):(p({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:O.error,durationMs:O.durationMs}))}}return{...v||on("all providers failed"),...b||{},tried:y}},dispatchOpencode:cn,dispatchClaude:sn,dispatchCodex:pn}});
|
|
6
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("child_process"),require("path"),require("fs")):"function"==typeof define&&define.amd?define(["child_process","path","fs"],e):(t="undefined"!=typeof globalThis?globalThis:t||self)["w-dispatch-ai"]=e(t.child_process,t.path,t.fs)}(this,function(t,e,r){"use strict";var n="object"==typeof global&&global&&global.Object===Object&&global,o="object"==typeof self&&self&&self.Object===Object&&self,u=n||o||Function("return this")(),i=u.Symbol,l=Object.prototype,a=l.hasOwnProperty,s=l.toString,c=i?i.toStringTag:void 0;var f=Object.prototype.toString;var p=i?i.toStringTag:void 0;function d(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":p&&p in Object(t)?function(t){var e=a.call(t,c),r=t[c];try{t[c]=void 0;var n=!0}catch(t){}var o=s.call(t);return n&&(e?t[c]=r:delete t[c]),o}(t):function(t){return f.call(t)}(t)}function y(t){return null!=t&&"object"==typeof t}function v(t){return y(t)&&"[object Arguments]"==d(t)}var h=Object.prototype,b=h.hasOwnProperty,g=h.propertyIsEnumerable,m=v(function(){return arguments}())?v:function(t){return y(t)&&b.call(t,"callee")&&!g.call(t,"callee")},j=m,k=Array.isArray;var w="object"==typeof exports&&exports&&!exports.nodeType&&exports,O=w&&"object"==typeof module&&module&&!module.nodeType&&module,_=O&&O.exports===w?u.Buffer:void 0,x=(_?_.isBuffer:void 0)||function(){return!1},A=/^(?:0|[1-9]\d*)$/;function S(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&A.test(t))&&t>-1&&t%1==0&&t<e}function M(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}var I={};function $(t){return function(e){return t(e)}}I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Arguments]"]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object Boolean]"]=I["[object DataView]"]=I["[object Date]"]=I["[object Error]"]=I["[object Function]"]=I["[object Map]"]=I["[object Number]"]=I["[object Object]"]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object WeakMap]"]=!1;var N="object"==typeof exports&&exports&&!exports.nodeType&&exports,T=N&&"object"==typeof module&&module&&!module.nodeType&&module,D=T&&T.exports===N&&n.process,E=function(){try{var t=T&&T.require&&T.require("util").types;return t||D&&D.binding&&D.binding("util")}catch(t){}}(),P=E&&E.isTypedArray,U=P?$(P):function(t){return y(t)&&M(t.length)&&!!I[d(t)]},C=Object.prototype.hasOwnProperty;function F(t,e){var r=k(t),n=!r&&j(t),o=!r&&!n&&x(t),u=!r&&!n&&!o&&U(t),i=r||n||o||u,l=i?function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}(t.length,String):[],a=l.length;for(var s in t)!e&&!C.call(t,s)||i&&("length"==s||o&&("offset"==s||"parent"==s)||u&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||S(s,a))||l.push(s);return l}var z=Object.prototype;function B(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||z)}function R(t,e){return function(r){return t(e(r))}}var L=R(Object.keys,Object),J=Object.prototype.hasOwnProperty;function W(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function V(t){if(!W(t))return!1;var e=d(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}function H(t){return null!=t&&M(t.length)&&!V(t)}function q(t){return H(t)?F(t):function(t){if(!B(t))return L(t);var e=[];for(var r in Object(t))J.call(t,r)&&"constructor"!=r&&e.push(r);return e}(t)}function G(t){return"symbol"==typeof t||y(t)&&"[object Symbol]"==d(t)}var K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Y=/^\w*$/;var Q,X=u["__core-js_shared__"],Z=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var tt=Function.prototype.toString;function et(t){if(null!=t){try{return tt.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var rt=/^\[object .+?Constructor\]$/,nt=Function.prototype,ot=Object.prototype,ut=nt.toString,it=ot.hasOwnProperty,lt=RegExp("^"+ut.call(it).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function at(t){return!(!W(t)||(e=t,Z&&Z in e))&&(V(t)?lt:rt).test(et(t));var e}function st(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return at(r)?r:void 0}var ct=st(Object,"create");var ft=Object.prototype.hasOwnProperty;var pt=Object.prototype.hasOwnProperty;function dt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function yt(t,e){return t===e||t!=t&&e!=e}function vt(t,e){for(var r=t.length;r--;)if(yt(t[r][0],e))return r;return-1}dt.prototype.clear=function(){this.__data__=ct?ct(null):{},this.size=0},dt.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},dt.prototype.get=function(t){var e=this.__data__;if(ct){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return ft.call(e,t)?e[t]:void 0},dt.prototype.has=function(t){var e=this.__data__;return ct?void 0!==e[t]:pt.call(e,t)},dt.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=ct&&void 0===e?"__lodash_hash_undefined__":e,this};var ht=Array.prototype.splice;function bt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}bt.prototype.clear=function(){this.__data__=[],this.size=0},bt.prototype.delete=function(t){var e=this.__data__,r=vt(e,t);return!(r<0)&&(r==e.length-1?e.pop():ht.call(e,r,1),--this.size,!0)},bt.prototype.get=function(t){var e=this.__data__,r=vt(e,t);return r<0?void 0:e[r][1]},bt.prototype.has=function(t){return vt(this.__data__,t)>-1},bt.prototype.set=function(t,e){var r=this.__data__,n=vt(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var gt=st(u,"Map");function mt(t,e){var r,n,o=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof e?"string":"hash"]:o.map}function jt(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}jt.prototype.clear=function(){this.size=0,this.__data__={hash:new dt,map:new(gt||bt),string:new dt}},jt.prototype.delete=function(t){var e=mt(this,t).delete(t);return this.size-=e?1:0,e},jt.prototype.get=function(t){return mt(this,t).get(t)},jt.prototype.has=function(t){return mt(this,t).has(t)},jt.prototype.set=function(t,e){var r=mt(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function kt(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],u=r.cache;if(u.has(o))return u.get(o);var i=t.apply(this,n);return r.cache=u.set(o,i)||u,i};return r.cache=new(kt.Cache||jt),r}kt.Cache=jt;var wt,Ot,_t,xt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,At=/\\(\\)?/g,St=(wt=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(xt,function(t,r,n,o){e.push(n?o.replace(At,"$1"):r||t)}),e},Ot=kt(wt,function(t){return 500===_t.size&&_t.clear(),t}),_t=Ot.cache,Ot),Mt=St;function It(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o}var $t=i?i.prototype:void 0,Nt=$t?$t.toString:void 0;function Tt(t){if("string"==typeof t)return t;if(k(t))return It(t,Tt)+"";if(G(t))return Nt?Nt.call(t):"";var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Dt(t){return null==t?"":Tt(t)}function Et(t,e){return k(t)?t:function(t,e){if(k(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!G(t))||Y.test(t)||!K.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:Mt(Dt(t))}function Pt(t){if("string"==typeof t||G(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function Ut(t,e){for(var r=0,n=(e=Et(e,t)).length;null!=t&&r<n;)t=t[Pt(e[r++])];return r&&r==n?t:void 0}function Ct(t,e,r){var n=null==t?void 0:Ut(t,e);return void 0===n?r:n}function Ft(t){var e=this.__data__=new bt(t);this.size=e.size}Ft.prototype.clear=function(){this.__data__=new bt,this.size=0},Ft.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Ft.prototype.get=function(t){return this.__data__.get(t)},Ft.prototype.has=function(t){return this.__data__.has(t)},Ft.prototype.set=function(t,e){var r=this.__data__;if(r instanceof bt){var n=r.__data__;if(!gt||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new jt(n)}return r.set(t,e),this.size=r.size,this};var zt=function(){try{var t=st(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),Bt=zt;function Rt(t,e,r){"__proto__"==e&&Bt?Bt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var Lt=Object.prototype.hasOwnProperty;function Jt(t,e,r){var n=t[e];Lt.call(t,e)&&yt(n,r)&&(void 0!==r||e in t)||Rt(t,e,r)}function Wt(t,e,r,n){var o=!r;r||(r={});for(var u=-1,i=e.length;++u<i;){var l=e[u],a=n?n(r[l],t[l],l,r,t):void 0;void 0===a&&(a=t[l]),o?Rt(r,l,a):Jt(r,l,a)}return r}var Vt=Object.prototype.hasOwnProperty;function Ht(t){if(!W(t))return function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}(t);var e=B(t),r=[];for(var n in t)("constructor"!=n||!e&&Vt.call(t,n))&&r.push(n);return r}function qt(t){return H(t)?F(t,!0):Ht(t)}var Gt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Kt=Gt&&"object"==typeof module&&module&&!module.nodeType&&module,Yt=Kt&&Kt.exports===Gt?u.Buffer:void 0,Qt=Yt?Yt.allocUnsafe:void 0;function Xt(){return[]}var Zt=Object.prototype.propertyIsEnumerable,te=Object.getOwnPropertySymbols,ee=te?function(t){return null==t?[]:(t=Object(t),function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,u=[];++r<n;){var i=t[r];e(i,r,t)&&(u[o++]=i)}return u}(te(t),function(e){return Zt.call(t,e)}))}:Xt,re=ee;function ne(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t}var oe=R(Object.getPrototypeOf,Object),ue=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)ne(e,re(t)),t=oe(t);return e}:Xt,ie=ue;function le(t,e,r){var n=e(t);return k(t)?n:ne(n,r(t))}function ae(t){return le(t,q,re)}function se(t){return le(t,qt,ie)}var ce=st(u,"DataView"),fe=st(u,"Promise"),pe=st(u,"Set"),de=st(u,"WeakMap"),ye="[object Map]",ve="[object Promise]",he="[object Set]",be="[object WeakMap]",ge="[object DataView]",me=et(ce),je=et(gt),ke=et(fe),we=et(pe),Oe=et(de),_e=d;(ce&&_e(new ce(new ArrayBuffer(1)))!=ge||gt&&_e(new gt)!=ye||fe&&_e(fe.resolve())!=ve||pe&&_e(new pe)!=he||de&&_e(new de)!=be)&&(_e=function(t){var e=d(t),r="[object Object]"==e?t.constructor:void 0,n=r?et(r):"";if(n)switch(n){case me:return ge;case je:return ye;case ke:return ve;case we:return he;case Oe:return be}return e});var xe=_e,Ae=Object.prototype.hasOwnProperty;var Se=u.Uint8Array;function Me(t){var e=new t.constructor(t.byteLength);return new Se(e).set(new Se(t)),e}var Ie=/\w*$/;var $e=i?i.prototype:void 0,Ne=$e?$e.valueOf:void 0;function Te(t,e,r){var n,o=t.constructor;switch(e){case"[object ArrayBuffer]":return Me(t);case"[object Boolean]":case"[object Date]":return new o(+t);case"[object DataView]":return function(t,e){var r=e?Me(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return function(t,e){var r=e?Me(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}(t,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(t);case"[object RegExp]":return function(t){var e=new t.constructor(t.source,Ie.exec(t));return e.lastIndex=t.lastIndex,e}(t);case"[object Symbol]":return n=t,Ne?Object(Ne.call(n)):{}}}var De=Object.create,Ee=function(){function t(){}return function(e){if(!W(e))return{};if(De)return De(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Pe=Ee;var Ue=E&&E.isMap,Ce=Ue?$(Ue):function(t){return y(t)&&"[object Map]"==xe(t)};var Fe=E&&E.isSet,ze=Fe?$(Fe):function(t){return y(t)&&"[object Set]"==xe(t)},Be="[object Arguments]",Re="[object Function]",Le="[object Object]",Je={};function We(t,e,r,n,o,u){var i,l=1&e,a=2&e,s=4&e;if(r&&(i=o?r(t,n,o,u):r(t)),void 0!==i)return i;if(!W(t))return t;var c=k(t);if(c){if(i=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&Ae.call(t,"index")&&(r.index=t.index,r.input=t.input),r}(t),!l)return function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}(t,i)}else{var f=xe(t),p=f==Re||"[object GeneratorFunction]"==f;if(x(t))return function(t,e){if(e)return t.slice();var r=t.length,n=Qt?Qt(r):new t.constructor(r);return t.copy(n),n}(t,l);if(f==Le||f==Be||p&&!o){if(i=a||p?{}:function(t){return"function"!=typeof t.constructor||B(t)?{}:Pe(oe(t))}(t),!l)return a?function(t,e){return Wt(t,ie(t),e)}(t,function(t,e){return t&&Wt(e,qt(e),t)}(i,t)):function(t,e){return Wt(t,re(t),e)}(t,function(t,e){return t&&Wt(e,q(e),t)}(i,t))}else{if(!Je[f])return o?t:{};i=Te(t,f,l)}}u||(u=new Ft);var d=u.get(t);if(d)return d;u.set(t,i),ze(t)?t.forEach(function(n){i.add(We(n,e,r,n,t,u))}):Ce(t)&&t.forEach(function(n,o){i.set(o,We(n,e,r,o,t,u))});var y=c?void 0:(s?a?se:ae:a?qt:q)(t);return function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););}(y||t,function(n,o){y&&(n=t[o=n]),Jt(i,o,We(n,e,r,o,t,u))}),i}function Ve(t,e){return e.length<2?t:Ut(t,function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var u=Array(o);++n<o;)u[n]=t[n+e];return u}(e,0,-1))}Je[Be]=Je["[object Array]"]=Je["[object ArrayBuffer]"]=Je["[object DataView]"]=Je["[object Boolean]"]=Je["[object Date]"]=Je["[object Float32Array]"]=Je["[object Float64Array]"]=Je["[object Int8Array]"]=Je["[object Int16Array]"]=Je["[object Int32Array]"]=Je["[object Map]"]=Je["[object Number]"]=Je[Le]=Je["[object RegExp]"]=Je["[object Set]"]=Je["[object String]"]=Je["[object Symbol]"]=Je["[object Uint8Array]"]=Je["[object Uint8ClampedArray]"]=Je["[object Uint16Array]"]=Je["[object Uint32Array]"]=!0,Je["[object Error]"]=Je[Re]=Je["[object WeakMap]"]=!1;var He=Object.prototype.hasOwnProperty;function qe(t,e){var r=-1,n=(e=Et(e,t)).length;if(!n)return!0;for(;++r<n;){var o=Pt(e[r]);if("__proto__"===o&&!He.call(t,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var u=Ve(t,e);return null==u||delete u[Pt(function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}(e))]}var Ge=Function.prototype,Ke=Object.prototype,Ye=Ge.toString,Qe=Ke.hasOwnProperty,Xe=Ye.call(Object);function Ze(t){return function(t){if(!y(t)||"[object Object]"!=d(t))return!1;var e=oe(t);if(null===e)return!0;var r=Qe.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Ye.call(r)==Xe}(t)?void 0:t}var tr=i?i.isConcatSpreadable:void 0;function er(t){return k(t)||j(t)||!!(tr&&t&&t[tr])}function rr(t,e,r,n,o){var u=-1,i=t.length;for(r||(r=er),o||(o=[]);++u<i;){var l=t[u];e>0&&r(l)?e>1?rr(l,e-1,r,n,o):ne(o,l):n||(o[o.length]=l)}return o}function nr(t){return(null==t?0:t.length)?rr(t,1):[]}var or=Math.max;var ur=Bt?function(t,e){return Bt(t,"toString",{configurable:!0,enumerable:!1,value:(r=e,function(){return r}),writable:!0});var r}:function(t){return t},ir=ur,lr=Date.now;var ar=function(t){var e=0,r=0;return function(){var n=lr(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ir),sr=ar;var cr=function(t){return sr(function(t,e,r){return e=or(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,u=or(n.length-e,0),i=Array(u);++o<u;)i[o]=n[e+o];o=-1;for(var l=Array(e+1);++o<e;)l[o]=n[o];return l[e]=r(i),function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}(t,this,l)}}(t,void 0,nr),t+"")}(function(t,e){var r={};if(null==t)return r;var n=!1;e=It(e,function(e){return e=Et(e,t),n||(n=e.length>1),e}),Wt(t,se(t),r),n&&(r=We(r,7,Ze));for(var o=e.length;o--;)qe(r,e[o]);return r}),fr=cr;function pr(t){return"[object Object]"===Object.prototype.toString.call(t)}function dr(t){return"[object String]"===Object.prototype.toString.call(t)}function yr(t){return!(!dr(t)||""===t)}function vr(){let t,e,r=new Promise(function(){t=arguments[0],e=arguments[1]});return r.resolve=t,r.reject=e,r}function hr(t){return t!=t}function br(t){let e=!1;if(yr(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(hr(t))return!1;e=!0}return e}function gr(t=10){br(t)||(t=10);let e=vr();return setTimeout(function(){e.resolve()},t),e}var mr=/\s/;var jr=/^\s+/;function kr(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&mr.test(t.charAt(e)););return e}(t)+1).replace(jr,""):t}var wr=/^[-+]0x[0-9a-f]+$/i,Or=/^0b[01]+$/i,_r=/^0o[0-7]+$/i,xr=parseInt;function Ar(t){if("number"==typeof t)return t;if(G(t))return NaN;if(W(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=W(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=kr(t);var r=Or.test(t);return r||_r.test(t)?xr(t.slice(2),r?2:8):wr.test(t)?NaN:+t}var Sr=1/0;function Mr(t){return t?(t=Ar(t))===Sr||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function Ir(t){var e=Mr(t),r=e%1;return e==e?r?e-r:e:0}var $r=u.isFinite,Nr=Math.min;var Tr=function(t){var e=Math[t];return function(t,r){if(t=Ar(t),(r=null==r?0:Nr(Ir(r),292))&&$r(t)){var n=(Dt(t)+"e").split("e");return+((n=(Dt(e(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return e(t)}}("round"),Dr=Tr;function Er(t){if(!br(t))return 0;return Mr(t)}function Pr(t){if(!br(t))return 0;t=Er(t);let e=Dr(t);return"0"===String(e)?0:e}function Ur(t){return"[object Array]"===Object.prototype.toString.call(t)}function Cr(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}function Fr(t){return!!br(t)&&(t=Er(t),"number"==typeof(e=t)&&e==Ir(e));var e}function zr(t){if(!Fr(t))return!1;return Pr(t)>0}function Br(t){if(!Fr(t))return!1;return Pr(t)>=0}function Rr(t,e){return yr(t)&&Br(e)?0===(e=Pr(e))?"":t.substring(0,e):""}function Lr(t,e){return yr(t)&&Br(e)?0===(e=Pr(e))?t:function(t,e){if(!yr(t))return"";if(!Br(e))return"";if(0===(e=Pr(e)))return"";let r=t.length-e;return r<0&&(r=0),t.substring(r,r+e)}(t,t.length-e):""}function Jr(t,e,r={}){if(!yr(t))return"";if(!Br(e))return t;if(e=Pr(e),t.length<=e)return t;let n=Ct(r,"funWithMsg"),o="";if(Cr(n)){let r=n(t,e);yr(r)&&(o=r)}return Rr(t,e)+`...${o}`}function Wr(t,e={}){let r=Ct(e,"fs");return!!function(t,e={}){let r=Ct(e,"fs"),n=!1;try{r.statSync(t),n=!0}catch{n=!1}return n}(t,{fs:r})&&(!r.lstatSync(t).isDirectory()&&!r.lstatSync(t).isSymbolicLink())}function Vr(t){return function(t,e={}){let r=null,n=Ct(e,"fs"),o="";try{o=n.readFileSync(t,"utf8")}catch(t){r=t}return null!==r?{error:r}:{success:o}}(t,{fs:r})}function Hr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var qr=t,Gr=qr.spawn,Kr=qr.exec;function Yr(t,e,r){var n={};try{Object.keys(t).forEach(function(r){t[r].forEach(function(t){n[t]||(Qr(t,e),n[t]=1)}),n[r]||(Qr(r,e),n[r]=1)})}catch(t){if(r)return r(t);throw t}if(r)return r()}function Qr(t,e){try{process.kill(parseInt(t,10),e)}catch(t){if("ESRCH"!==t.code)throw t}}function Xr(t,e,r,n,o){var u=n(t),i="";u.stdout.on("data",function(t){t=t.toString("ascii");i+=t});u.on("close",function(u){delete r[t],0==u?i.match(/\d+/g).forEach(function(u){u=parseInt(u,10),e[t].push(u),e[u]=[],r[u]=1,Xr(u,e,r,n,o)}):0==Object.keys(r).length&&o()})}var Zr=Hr(function(t,e,r){if("function"==typeof e&&void 0===r&&(r=e,e=void 0),t=parseInt(t),Number.isNaN(t)){if(r)return r(new Error("pid must be a number"));throw new Error("pid must be a number")}var n={},o={};switch(n[t]=[],o[t]=1,process.platform){case"win32":Kr("taskkill /pid "+t+" /T /F",r);break;case"darwin":Xr(t,n,o,function(t){return Gr("pgrep",["-P",t])},function(){Yr(n,e,r)});break;default:Xr(t,n,o,function(t){return Gr("ps",["-o","pid","--no-headers","--ppid",t])},function(){Yr(n,e,r)})}});function tn(t){let n=Ct(Vr(t),"success","");if(!yr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let u=e.dirname(t),i=e.join(u,o[1]);return Wr(i,{fs:r})?i:null}function en(r,n){if("win32"!==process.platform)return{file:r,args:n};let o=function(r){if("win32"!==process.platform)return r;if(/\.(cmd|exe|bat|ps1)$/i.test(r))return r;if(e.isAbsolute(r))return r;try{let e=t.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=e.find(t=>/\.cmd$/i.test(t));return n||(e.find(t=>/\.exe$/i.test(t))||e[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n};if(/\.(cmd|bat)$/i.test(o)){let t=tn(o);if(t)return/\.exe$/i.test(t)?{file:t,args:n}:{file:process.execPath,args:[t,...n]};let e=n.map(t=>`"${t.replace(/(\\*)"/g,'$1$1\\"').replace(/(\\*)$/,"$1$1")}"`.replace(/[()%!^"<>&|]/g,"^$&")),r=`${u=o,u.replace(/[()%!^"<>&|;, ]/g,"^$&")} ${e.join(" ")}`;return{file:process.env.comspec||process.env.COMSPEC||"cmd.exe",args:["/d","/s","/c",`"${r}"`],opt:{windowsVerbatimArguments:!0}}}var u;return{file:o,args:n}}let rn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};function nn(e,r=[],n={}){let{timeoutMs:o=12e4,cwd:u=process.cwd(),input:i,validate:l,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:f}=n,p=function(t){if(Cr(t))return t;if(!yr(t))return null;let e=t.split(",").map(t=>t.trim()).filter(Boolean);return 0===e.length?null:t=>{for(let r of e)if("nonempty"===r){if(!yr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Rr(r,4)){let e=Lr(r,4);if(!br(e))return!1;let n=Pr(e);if(!yr(t)||t.length<n)return!1}return!0}}(l),d=Date.now(),y=vr(),v={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==f){if("win32"===process.platform){let t=Object.keys(f).map(t=>t.toLowerCase());for(let e of Object.keys(v))t.includes(e.toLowerCase())&&delete v[e]}v={...v,...f}}let h=en(e,r),b=t.spawn(h.file,h.args,{cwd:u,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:v,...h.opt}),g="",m="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,O=!1;b.stdout.on("data",t=>{let e=j.decode(t,{stream:!0});e&&(Cr(s)&&s(e),g.length<a&&(g+=e))}),b.stderr.on("data",t=>{let e=k.decode(t,{stream:!0});e&&(Cr(c)&&c(e),m.length<a&&(m+=e))}),b.stdin.on("error",()=>{}),void 0!==i&&b.stdin.write(i,"utf8"),b.stdin.end();let _=setTimeout(()=>{w||(O=!0,function(t){let e=vr();return Zr(Number(t),"SIGKILL",r=>{r?e.reject(r):e.resolve(`pid[${t}] killed`)}),e}(b.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-d,pid:b.pid}))},3e3).unref())},o);return b.on("error",t=>{w||(w=!0,clearTimeout(_),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${t.code||"UNKNOWN"}: ${t.message}`,durationMs:Date.now()-d,pid:b.pid}))}),b.on("close",(t,e)=>{if(w)return;w=!0,clearTimeout(_);let r=j.decode();r&&g.length<a&&(g+=r);let n=k.decode();n&&m.length<a&&(m+=n);let u=Date.now()-d;O?y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:t,error:`TIMEOUT after ${o/1e3}s`,durationMs:u,pid:b.pid}):0===t?!p||p(g)?y.resolve({ok:!0,stdout:g,stderr:m,code:0,error:"",durationMs:u,pid:b.pid}):y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,500,rn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:u,pid:b.pid}):y.resolve({ok:!1,stdout:Jr(g,500,rn),stderr:Jr(m,1e3,rn),code:t,error:e?`Signal: ${e}`:`Exit code ${t}`,durationMs:u,pid:b.pid})}),y}async function on(t,e=[],r={}){if(!yr(t))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Ur(e)||(e=[]),pr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...u}=r,i=Ct(u,"cwd",null);yr(i)?u.cwd=i:u.cwd=process.cwd();let l=Ct(u,"input",null);yr(l)?u.input=l:u.input=void 0;let a=Ct(u,"env",null);pr(a)?u.env=a:u.env=void 0;let s=Ct(u,"validate",null);Cr(s)||yr(s)?u.validate=s:u.validate=void 0;let c=Ct(u,"onStdout",null);Cr(c)?u.onStdout=c:u.onStdout=void 0;let f=Ct(u,"onStderr",null);Cr(f)?u.onStderr=f:u.onStderr=void 0,n=Br(n)?Pr(n):0,o=zr(o)?Pr(o):5e3;let p=Ct(u,"timeoutMs",null);zr(p)?u.timeoutMs=Pr(p):u.timeoutMs=12e4;let d,y=Ct(u,"maxBuffer",null);zr(y)?u.maxBuffer=Pr(y):u.maxBuffer=10485760;let v=0;for(let r=0;r<=n;r++){if(r>0){let t=Math.min(o*r,15e3);await gr(t)}if(d=await nn(t,e,u),v=r+1,d.ok)return d.attempts=v,d;if(d.error.includes("ENOENT"))break;if(2===d.code)break}return d.attempts=v,d}function un(...t){let e=[];for(let r of t)if(Ur(r))for(let t of r)yr(t)&&e.push(t);else yr(r)&&e.push(r);return e}function ln(t){return yr(t)||(t="unknown error"),{ok:!1,stdout:"",stderr:"",code:null,error:t,durationMs:0,attempts:0}}let an=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function sn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="opencode");let n=Ct(e,"model",null),o=Ct(e,"agent",null);yr(o)||(o="build");let u=Ct(e,"extraArgs",null),i=un("run",["--agent",o],yr(n)?["-m",n]:[],u),l=Ct(e,"env",null);pr(l)||(l=void 0);let a=Ct(e,"config",null);pr(a)&&(a=JSON.stringify(a)),yr(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=Ct(e,"key",null),c=Ct(e,"provider",null);return yr(s)&&yr(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})}),on(r,i,{...fr(e,an),input:t,env:l})}function cn(t){return!0===(e=t)||!1===e||y(e)&&"[object Boolean]"==d(e);var e}let fn=["exe","model","skipPermissions","extraArgs","input"];async function pn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="claude");let n=Ct(e,"model",null),o=Ct(e,"skipPermissions",null);cn(o)||(o=!0);let u=Ct(e,"extraArgs",null);return on(r,un("-p",o?"--dangerously-skip-permissions":[],yr(n)?["--model",n]:[],u),{...fr(e,fn),input:t})}let dn=["exe","model","sandbox","extraArgs","input"];async function yn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"exe",null);yr(r)||(r="codex");let n=Ct(e,"model",null),o=Ct(e,"sandbox",null);yr(o)||(o="workspace-write");let u=Ct(e,"extraArgs",null);return on(r,un("exec",["--sandbox",o],"--skip-git-repo-check",yr(n)?["-m",n]:[],u),{...fr(e,dn),input:t})}let vn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function hn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");if(t.length>3e4)return ln(`prompt too long (${t.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Ct(e,"exe",null);yr(r)||(r="agy");let n=Ct(e,"model",null),o=Ct(e,"effort",null),u=Ct(e,"skipPermissions",null);cn(u)||(u=!0);let i=Ct(e,"timeoutMs",null);i=zr(i)?Pr(i):3e5;let l=Ct(e,"printTimeout",null);yr(l)||(l=`${Math.max(30,Math.floor(i/1e3)-30)}s`);let a=Ct(e,"addDirs",null),s=[];if(Ur(a))for(let t of a)yr(t)&&s.push("--add-dir",t);let c=Ct(e,"extraArgs",null),f=un(u?"--dangerously-skip-permissions":[],["--print-timeout",l],yr(n)?["--model",n]:[],yr(o)?["--effort",o]:[],s,c,["--print",t]),p=fr(e,vn);try{return await on(r,f,{...p,timeoutMs:i})}catch(t){return ln(`${t.code||"UNKNOWN"}: ${t.message}`)}}let bn={funWithMsg:t=>`(truncated, total ${t.length} chars)`};async function gn(t,e,r,n,o){let u=Date.now(),i=new AbortController,l=setTimeout(()=>{i.abort()},n),a=null,s="";try{a=await fetch(t,{method:"POST",headers:e,body:JSON.stringify(r),signal:i.signal}),s=await a.text()}catch(t){clearTimeout(l);let e=Date.now()-u;return"AbortError"===t.name?{ok:!1,stdout:"",stderr:"",code:null,error:`TIMEOUT after ${n/1e3}s`,durationMs:e}:{ok:!1,stdout:"",stderr:"",code:null,error:`FETCH_ERROR: ${Ct(t,"cause.code","")||t.message}`,durationMs:e}}clearTimeout(l);let c=Date.now()-u;if(!a.ok)return{ok:!1,stdout:"",stderr:Jr(s,1e3,bn),code:a.status,error:`HTTP ${a.status}`,durationMs:c};let f=null;try{f=Ct(JSON.parse(s),"choices.0.message.content",null)}catch{}return null==f?{ok:!1,stdout:"",stderr:Jr(s,500,bn),code:a.status,error:"INVALID_RESPONSE: missing choices[0].message.content",durationMs:c}:("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?{ok:!1,stdout:Jr(f,500,bn),stderr:"",code:a.status,error:"OUTPUT_VALIDATION_FAILED",durationMs:c}:{ok:!0,stdout:f,stderr:"",code:a.status,error:"",durationMs:c})}async function mn(t,e={}){if(!yr(t))return ln("prompt must be a non-empty string");let r=Ct(e,"baseURL",null);if(!yr(r))return ln("baseURL must be a non-empty string");let n=Ct(e,"model",null);if(!yr(n))return ln("model must be a non-empty string");let o=Ct(e,"key",null),u=Ct(e,"system",null),i=Ct(e,"body",null);pr(i)||(i={});let l=Ct(e,"headers",null);pr(l)||(l={});let a=Ct(e,"timeoutMs",null);a=zr(a)?Pr(a):12e4;let s=Ct(e,"maxRetries",null);s=Br(s)?Pr(s):0;let c=Ct(e,"retryDelayMs",null);c=zr(c)?Pr(c):5e3;let f=function(t){if(Cr(t))return t;if(!yr(t))return null;let e=t.split(",").map(t=>t.trim()).filter(Boolean);return 0===e.length?null:t=>{for(let r of e)if("nonempty"===r){if(!yr(t)||""===t.trim())return!1}else if("json"===r)try{JSON.parse(t)}catch{return!1}else if("min:"===Rr(r,4)){let e=Lr(r,4);if(!br(e))return!1;let n=Pr(e);if(!yr(t)||t.length<n)return!1}return!0}}(Ct(e,"validate",null)),p=r.replace(/\/+$/,"")+"/chat/completions",d=[];yr(u)&&d.push({role:"system",content:u}),d.push({role:"user",content:t});let y={model:n,messages:d,...i},v={"Content-Type":"application/json",...l};yr(o)&&(v.Authorization=`Bearer ${o}`);let h=null,b=0;for(let t=0;t<=s;t++){if(t>0&&await gr(Math.min(c*t,15e3)),h=await gn(p,v,y,a,f),b=t+1,h.ok)return h.attempts=b,h;let e=h.code;if(br(e)&&e>=400&&e<500&&429!==e)break}return h.attempts=b,h}let jn={opencode:sn,claude:pn,codex:yn,antigravity:hn,"api-openai-compat":mn};function kn(t){return t!=t}function wn(t){return null==t?[]:function(t,e){return It(e,function(e){return t[e]})}(t,q(t))}var On=Math.max;function _n(t,e,r,n){t=H(t)?t:wn(t),r=r&&!n?Ir(r):0;var o=t.length;return r<0&&(r=On(o+r,0)),function(t){return"string"==typeof t||!k(t)&&y(t)&&"[object String]"==d(t)}(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&function(t,e,r){return e==e?function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1}(t,e,r):function(t,e,r,n){for(var o=t.length,u=r+(n?1:-1);n?u--:++u<o;)if(e(t[u],u,t))return u;return-1}(t,kn,r)}(t,e,r)>-1}async function xn(t,e,r={}){let n=q(jn);return yr(t)&&_n(n,t)?(0,jn[t])(e,r):ln(`unknown ai kind: "${t}" (available: ${n.join(", ")})`)}let An=["providers","budgetMs","minAttemptMs","store","onEvent"],Sn=["id","keys"],Mn={cursors:{}};function In(t){let e=Ct(t,"error","");yr(e)||(e="");let r=Ct(t,"code",null);return 0===e.indexOf("TIMEOUT")||(!!e.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===e||0===e.indexOf("unknown ai kind"))))}async function $n(t,e={}){if(!yr(t))return{...ln("prompt must be a non-empty string"),tried:[]};let r=Ct(e,"providers",null),n=Ur(r)?r.filter(pr):[];if(0===n.length)return{...ln("providers must be a non-empty array"),tried:[]};let o=Ct(e,"budgetMs",null);o=zr(o)?Pr(o):null;let u=null===o?null:Date.now()+o,i=Ct(e,"minAttemptMs",null);i=zr(i)?Pr(i):2e4;let l=Ct(e,"store",null),a=pr(l)&&Cr(l.get)&&Cr(l.set),s=null;if(a)try{s=l.get()}catch{}pr(s)||(s=a?{cursors:{}}:Mn),pr(s.cursors)||(s.cursors={});let c=()=>{if(a)try{l.set(s)}catch{}},f=Ct(e,"onEvent",null),p=t=>{if(Cr(f))try{f(t)}catch{}},d=fr(e,An),y=[],v=null,h=null;for(let e=0;e<n.length;e++){let r=n[e],o=Ct(r,"id",null);yr(o)||(o=String(e));let l=Ct(r,"kind",null),a=Ct(r,"model",null),f=Ct(r,"keys",null),b=Ur(f)?f.filter(yr):[],g=b.length,m=fr(r,Sn),j=0;if(g>0){let t=Ct(s.cursors,o,0);j=zr(t)?Pr(t)%g:0}let k=g>0?g:1,w=!1;for(let e=0;e<k&&!w;e++){let r=g>0?(j+e)%g:null,n=null===r?o:`${o}#${r}`,f={...d,...m};g>0&&(f.key=b[r]);let k=Ct(f,"timeoutMs",null);if(k=zr(k)?Pr(k):12e4,null!==u){let t=u-Date.now();if(t<i)return p({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:t}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...ln("budget exhausted"),tried:y};k=Math.min(k,t)}f.timeoutMs=k,p({type:"try",providerId:o,keyIndex:r,keyId:n,kind:l,model:a});let O=await xn(l,t,f);if(O.ok)return g>0&&(s.cursors[o]=(r+1)%g,c()),p({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:O.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:O.durationMs}),{...O,providerId:o,keyIndex:r,kind:l,model:a,tried:y};v=O,h={providerId:o,keyIndex:r,kind:l,model:a},In(O)?(p({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:O.error,durationMs:O.durationMs}),w=!0):(p({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:O.error}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:O.error,durationMs:O.durationMs}))}}return{...v||ln("all providers failed"),...h||{},tried:y}}function Nn(t){return!!function(t){return"[object Undefined]"===Object.prototype.toString.call(t)}(t)||(!!function(t){return"[object Null]"===Object.prototype.toString.call(t)}(t)||(!!function(t){if(pr(t)){for(let e in t)return!1;return!0}return!1}(t)||(!!function(t){return!(!dr(t)||""!==t)}(t)||(!!function(t){return!!Ur(t)&&0===t.length}(t)||!!hr(t)))))}function Tn(t){return!!Ur(t)&&(0!==t.length&&(1!==t.length||!Nn(t[0])))}function Dn(t){let e=String(t||"");if(e=e.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),e=e.replace(/```(?:json)?/g,""),e=e.trim(),""===e)return null;try{let t=JSON.parse(e);if(null!==t&&"object"==typeof t)return t}catch(t){}let r=-1;for(let t=0;t<e.length;t++)if("{"===e[t]||"["===e[t]){r=t;break}if(r<0)return null;let n=0,o=!1,u=!1;for(let t=r;t<e.length;t++){let i=e[t];if(o)u?u=!1:"\\"===i?u=!0:'"'===i&&(o=!1);else if('"'===i)o=!0;else if("{"===i||"["===i)n++;else if(("}"===i||"]"===i)&&(n--,0===n)){try{let n=JSON.parse(e.slice(r,t+1));if(null!==n&&"object"==typeof n)return n}catch(t){}return null}}return null}let En=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,禁止執行任何指令——呼叫端只讀取你的回覆文字,","任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","",""].join("\n");async function Pn(t,e={}){let r=Date.now();if(!yr(t))return{ok:!1,json:null,error:"prompt must be a non-empty string",ms:0,tried:[]};let n=Ct(e,"providers",null),o=Ct(e,"spec",null);if(!pr(n)||!pr(o))return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let{chain:u,missing:i}=function(t,e){let r=[Ct(e,"use","")],n=Ct(e,"fallback",null);Tn(n)&&(r=[...r,...n]);let o=[],u=[];for(let e of r){let r=Ct(t,e,null);pr(r)?o.push({id:e,...r}):u.push(String(e))}return{chain:o,missing:u}}(n,o);if(i.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${i.join(", ")}`,ms:0,tried:[]};if(0===u.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let l=!0===Ct(e,"rawText",!1),a=Ct(e,"parse",null);Cr(a)||(a=Dn);let s=Ct(e,"check",null);Cr(s)||(s=null);let c=Ct(e,"promptPrefix",null);yr(c)||(c=""===c?"":En);let f=await $n(c+t,{providers:u,validate:t=>{if(l){let e=String(t||"").trim();return""!==e&&(!s||!0===s(e))}let e=a(t);return null!==e&&(!s||!0===s(e))},timeoutMs:Ct(e,"timeoutMs",null)||3e5,budgetMs:Ct(e,"budgetMs",null)||void 0,maxRetries:Ct(e,"maxRetries",null)||0,cwd:Ct(e,"cwd",null)||process.cwd(),store:Ct(e,"store",null)||void 0,onEvent:Ct(e,"onEvent",null)||void 0}),p=null;f.ok&&(p=l?String(f.stdout||"").trim():a(f.stdout));let d=Ct(f,"providerId",null),y=Ct(f,"keyIndex",null);return{ok:f.ok&&null!==p,json:p,providerId:d,keyIndex:y,keyId:null===y?d:`${d}#${y}`,ms:Date.now()-r,tried:Ct(f,"tried",[]),error:f.ok?"":Ct(f,"error","unknown error")}}async function Un(t={}){let e=Date.now(),r=Ct(t,"providers",null),n=Ct(t,"task",""),o=Ct(t,"agents",null),u=Ct(t,"integrate",null),i=Ct(t,"check",null),l=Ct(t,"callOpt",{});if(!yr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Tn(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Ct(t,"minCandidates",null);a=zr(a)?Pr(a):2;let s=await Promise.all(o.map(t=>{let{use:e,fallback:o,...u}=t;return Pn(n,{...l,...u,providers:r,spec:{use:e,fallback:o},check:i})})),c=s.filter(t=>t.ok).map(t=>t.json);if(0===c.length)return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:"all agents failed"};if(1===c.length||c.length<a)return{ok:!0,result:c[0],integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:""};if(!u||!yr(Ct(u,"use","")))return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-e,error:"integrate spec (with use) is required"};let{use:f,fallback:p,prompt:d,...y}=u,v=Cr(d)?d(c):function(t,e={}){let r=Ct(e,"schema",""),n=yr(r)?`\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同:\n${r}\n`:"\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同。\n";return`你是整合者。以下是同一任務由 ${t.length} 個獨立執行產生的候選結果(JSON),請整合成單一最佳版本:擇優合併、去重、保留最完整的證據標注與爭議呈現,不可加入候選中沒有的數字或結論。\n${n}\n${t.map((t,e)=>`【候選 ${e+1}】\n${JSON.stringify(t)}`).join("\n\n")}`}(c,t),h=await Pn(v,{...l,...y,providers:r,spec:{use:f,fallback:p},check:i});return{ok:h.ok,result:h.ok?h.json:null,integrated:h.ok,agents:s,candidates:c,integrateDetail:h,totalMs:Date.now()-e,error:h.ok?"":`integrate failed: ${h.error}`}}let Cn=["id","use","fallback","prompt","check"];async function Fn(t={}){let e=Date.now(),r=Ct(t,"providers",null),n=Ct(t,"input",null),o=Ct(t,"stages",null),u=Ct(t,"callOpt",{});if(!Tn(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let i={},l={},a=[],s=null;for(let t=0;t<o.length;t++){let c=o[t],f=yr(Ct(c,"id",""))?c.id:`stage${t+1}`;a.push(f);let p=Ct(c,"prompt",null);if(!Cr(p))return l[f]={ok:!1,error:`stage[${f}].prompt must be a function`},{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:l[f].error};let d=p({input:n,prev:s,results:i,index:t});if(!yr(d))return l[f]={ok:!1,error:`stage[${f}].prompt returned empty`},{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:l[f].error};let y=fr(c,Cn),v=await Pn(d,{...u,...y,providers:r,spec:{use:Ct(c,"use",""),fallback:Ct(c,"fallback",null)},check:Ct(c,"check",null)});if(l[f]=v,!v.ok)return{ok:!1,result:null,stages:l,results:i,order:a,failedStage:f,totalMs:Date.now()-e,error:`stage[${f}] failed: ${v.error}`};i[f]=v.json,s=v.json}return{ok:!0,result:s,stages:l,results:i,order:a,failedStage:null,totalMs:Date.now()-e,error:""}}return{KINDS:q(jn),dispatchAi:xn,dispatchAiFallback:$n,dispatchAiWkf:function(t={}){let e=Ct(t,"providers",null);if(!pr(e))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ct(t,"defaults",null);return pr(r)||(r={}),{providers:e,callAi:(t,n={})=>Pn(t,{...r,...n,providers:e}),runFanout:(t={})=>Un({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}}),runRolePipeline:(t={})=>Fn({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}}),runFanoutPipeline:(t={})=>async function(t={}){let e=Date.now(),r=await Un({providers:Ct(t,"providers",null),task:Ct(t,"task",""),agents:Ct(t,"agents",null),integrate:Ct(t,"integrate",null),check:Ct(t,"check",null),schema:Ct(t,"schema",""),minCandidates:Ct(t,"minCandidates",null),callOpt:Ct(t,"callOpt",{})});if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-e,error:`A failed: ${r.error}`};let n=await Fn({providers:Ct(t,"providers",null),input:r.result,stages:Ct(t,"stages",null),callOpt:Ct(t,"callOpt",{})});return{ok:n.ok,result:n.ok?n.result:null,A:r,B:n,totalMs:Date.now()-e,error:n.ok?"":`B failed: ${n.error}`}}({...t,providers:e,callOpt:{...r,...Ct(t,"callOpt",{})}})}},dispatchOpencode:sn,dispatchClaude:pn,dispatchCodex:yn,dispatchAntigravity:hn,dispatchApiOpenaiCompat:mn}});
|
|
7
7
|
//# sourceMappingURL=w-dispatch-ai.umd.js.map
|