w-dispatch-ai 1.0.11 → 1.0.12
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 +33 -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 +15 -3
- package/docs/adapters.mjs.html +2 -2
- package/docs/budgetFor.mjs.html +124 -0
- package/docs/castPintOr.mjs.html +2 -2
- package/docs/dfTimeoutMs.mjs.html +2 -2
- package/docs/dispatchAi.mjs.html +2 -2
- package/docs/dispatchAiFallback.mjs.html +2 -2
- package/docs/dispatchAiWkf.mjs.html +2 -2
- package/docs/dispatchAntigravity.mjs.html +2 -2
- package/docs/dispatchApiOpenaiCompat.mjs.html +2 -2
- 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/getErrorType.mjs.html +2 -2
- package/docs/global.html +1632 -49
- package/docs/index.html +2 -2
- package/docs/readEnvFile.mjs.html +132 -0
- package/docs/resolveProviders.mjs.html +54 -6
- package/docs/wkf_callAiWithFallback.mjs.html +7 -22
- package/docs/wkf_createFileStore.mjs.html +175 -0
- package/docs/wkf_createUsageCounter.mjs.html +213 -0
- package/docs/wkf_extractJsonLoose.mjs.html +2 -2
- package/docs/wkf_noSideEffectPrefix.mjs.html +121 -0
- 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/docs/wkf_salvageTruncatedArray.mjs.html +167 -0
- package/package.json +1 -1
- package/src/WDispatchAi.mjs +13 -1
- package/src/budgetFor.mjs +52 -0
- package/src/providers.mjs +4 -3
- package/src/readEnvFile.mjs +60 -0
- package/src/resolveProviders.mjs +52 -4
- package/src/wkf/callAiWithFallback.mjs +5 -20
- package/src/wkf/createFileStore.mjs +103 -0
- package/src/wkf/createUsageCounter.mjs +141 -0
- package/src/wkf/noSideEffectPrefix.mjs +49 -0
- package/src/wkf/salvageTruncatedArray.mjs +95 -0
- package/test/unit-WDispatchAi.test.mjs +9 -3
- package/test/unit-budgetFor.test.mjs +26 -0
- package/test/unit-callAiWithFallback.test.mjs +8 -0
- package/test/unit-createFileStore.test.mjs +66 -0
- package/test/unit-createUsageCounter.test.mjs +76 -0
- package/test/unit-readEnvFile.test.mjs +52 -0
- package/test/unit-resolveProviders.test.mjs +49 -0
- package/test/unit-salvageTruncatedArray.test.mjs +39 -0
package/README.md
CHANGED
|
@@ -41,7 +41,13 @@ Note:
|
|
|
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
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 |
|
|
44
|
+
| `resolveProviders(providers, opt)` | expand `envVar` → `keys` from env (comma-separated, missing vars auto-skipped), supports `pick` subset by id, `exes` per-kind exe injection and `patch` per-id field override |
|
|
45
|
+
| `readEnvFile(file)` | read a `.env` file into a plain object for `resolveProviders`'s `opt.env`, without polluting `process.env` |
|
|
46
|
+
| `budgetFor(providers)` | derive the time budget to walk a whole fallback chain (sum of per-entry `timeoutMs`, defaults applied) |
|
|
47
|
+
| `createFileStore(opt)` | file-persisted `store` for `dispatchAiFallback` (cursors and cooling survive across processes), exclusion-style passthrough |
|
|
48
|
+
| `createUsageCounter(opt)` | per-day per-key usage counter fed by `onEvent` (observation only, never throttles) |
|
|
49
|
+
| `salvageTruncatedArray(text)` | salvage the complete leading elements of a truncated JSON array (opt-in, not part of default parsing) |
|
|
50
|
+
| `NO_SIDE_EFFECT` | the no-side-effect prompt prefix (single source), auto-applied by workflow `callAi`, prepend manually for direct `dispatchAiFallback` calls |
|
|
45
51
|
| `KINDS` | array of available kinds, `['opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat']` |
|
|
46
52
|
|
|
47
53
|
#### Example:
|
|
@@ -301,7 +307,7 @@ await test()
|
|
|
301
307
|
| `providers[].meta` | any | 無 | **保留鍵,保證永不轉傳**轉接器。條目其餘鍵一律原樣轉傳——呼叫端要在條目上掛自有資訊(分類、標籤、註記)一律放`meta`,與轉傳機制永久絕緣(頂層opt與工作流各層規格物件同此約定) |
|
|
302
308
|
| `budgetMs` | Integer | 不限 | 整輪遞補之時間上限,剩餘預算會壓進每次呼叫之`timeoutMs` |
|
|
303
309
|
| `minAttemptMs` | Integer | `20000` | 單次嘗試之最低剩餘預算,低於此值即停止並回報`budget exhausted` |
|
|
304
|
-
| `store` | Object | 行程內記憶體 | 狀態持久化`{get:()=>state, set:(state)=>{}}`,state含`cursors`(逐群組游標)與`cooling`(供應商冷卻時間戳,僅啟用cooldownMs
|
|
310
|
+
| `store` | Object | 行程內記憶體 | 狀態持久化`{get:()=>state, set:(state)=>{}}`,state含`cursors`(逐群組游標)與`cooling`(供應商冷卻時間戳,僅啟用cooldownMs時使用);假定單行程序列調用。跨行程持久化可直接用`createFileStore`;自行實作時**務必整包原封存還**,白名單式挑欄位會在套件擴充state時靜默丟棄新欄位 |
|
|
305
311
|
| `cooldownMs` | Integer | `0`不啟用 | 供應商冷卻視窗:條目(限有明給id者)遭遇**限流(HTTP 429,僅api類可偵測)或逾時(TIMEOUT)**後,於視窗內之後續呼叫中被**移至鏈尾(只降序不移除)**——前面全敗時仍會被嘗試、任一次成功立即解除,故不存在把已恢復服務冰住的問題。多階段工作流可大幅省去逐階段重踩已失效供應商的成本(使用端實測107s→15s)。注意啟用時providers順序會被暫時重排,此即機制目的 |
|
|
306
312
|
| `coolDetect` | Function | 無 | 冷卻觸發之**注入判定**`(r)=>Boolean`,收完整失敗結果(含`stdout`、`stderr`、`code`、`error`),回傳`true`即視同冷卻觸發(內建429/TIMEOUT觸發不受影響)。CLI類限流埋在stderr且各家字樣不同、隨版本漂移,**簽章表由觀察到字樣的呼叫端維護**,如`(r) => /FreeUsageLimitError/i.test(r.stderr \|\| '')`;漏判僅退回現狀(每階段重探一次)、誤判也只是降尾非移除,兩邊代價都有上限。僅`cooldownMs>0`時有效;回調拋出例外視同`false` |
|
|
307
313
|
| `shouldStop` | Function | 無 | 中止判定`()=>Boolean`,於**每次嘗試之間**檢查,`true`即停止遞補回報`ABORTED`——供成果已無人接收時(如server端客戶端斷線)止損,把「斷線後仍空耗整條鏈」縮成「至多再耗當前這一家」。**不中止進行中之嘗試**(不殺子進程/不斷開請求,見Known design notes)。經工作流層原樣轉傳:中止後每個後續呼叫進門即回`ABORTED`,整條工作流自然快速收束,無須逐層處理;回調拋出例外視同`false` |
|
|
@@ -481,17 +487,39 @@ let wkf2 = wdi.dispatchAiWkf({ providers: table, defaults: {
|
|
|
481
487
|
|
|
482
488
|
```alias
|
|
483
489
|
import wdi from 'w-dispatch-ai'
|
|
484
|
-
|
|
490
|
+
|
|
491
|
+
//金鑰放.env(OPENCODE_KEYS/AGNES_KEYS/POOLSIDE_KEYS, 逗號分隔多把), 以readEnvFile讀成物件——
|
|
492
|
+
//不用process.loadEnvFile: 那會把金鑰塞進process.env, 多專案並行時互相覆蓋
|
|
493
|
+
let env = wdi.readEnvFile('./.env')
|
|
485
494
|
|
|
486
495
|
//全取: envVar → keys, 缺環境變數之條目自動停用並列入skipped
|
|
487
|
-
let { providers, table, skipped } = wdi.resolveProviders(wdi.providers)
|
|
496
|
+
let { providers, table, skipped } = wdi.resolveProviders(wdi.providers, { env })
|
|
488
497
|
|
|
489
498
|
//自選: pick順序即遞補優先序; providers餵dispatchAiFallback, table餵dispatchAiWkf
|
|
490
|
-
let picked = wdi.resolveProviders(wdi.providers, { pick: ['agnes:agnes-2.0-flash', 'claude:sonnet'] })
|
|
499
|
+
let picked = wdi.resolveProviders(wdi.providers, { env, pick: ['agnes:agnes-2.0-flash', 'claude:sonnet'] })
|
|
491
500
|
let r = await wdi.dispatchAiFallback(prompt, { providers: picked.providers, timeoutMs: 1200000 })
|
|
492
501
|
let wkf = wdi.dispatchAiWkf({ providers: picked.table, defaults: { timeoutMs: 1200000 } })
|
|
502
|
+
|
|
503
|
+
//後處理(選用): exes逐kind注入CLI執行檔絕對路徑(Windows排程session 0之PATH常缺npm全域目錄),
|
|
504
|
+
//patch逐id淺合併覆寫任意欄位; 兩者於函數內施作, providers與table同源產出必然一致
|
|
505
|
+
let p2 = wdi.resolveProviders(wdi.providers, {
|
|
506
|
+
env,
|
|
507
|
+
pick: ['claude:sonnet', 'codex:gpt-5.6-luna'],
|
|
508
|
+
exes: { claude: 'C:/Users/x/.local/bin/claude.exe' },
|
|
509
|
+
patch: { 'claude:sonnet': { timeoutMs: 360000 } },
|
|
510
|
+
})
|
|
493
511
|
```
|
|
494
512
|
|
|
513
|
+
**配套工具**(皆為選用,深層引入或由聚合物件取用):
|
|
514
|
+
|
|
515
|
+
| 工具 | 用途 |
|
|
516
|
+
| --- | --- |
|
|
517
|
+
| `createFileStore({ dir })` | `dispatchAiFallback`之`store`的檔案持久化——排程任務每次執行都是新行程,記憶體游標/冷卻每次歸零;本實作採**排除式passthrough**(state原封存還,僅剔自用欄位`at`),日後套件擴充state欄位自動相容(殷鑑:白名單store曾把1.0.7新增的`cooling`靜默丟棄) |
|
|
518
|
+
| `createUsageCounter({ dir })` | 逐日逐鍵用量計帳,`onEvent`直接掛進dispatch即於`try`事件記帳;**純觀測絕不據以節流**(額度視窗形態多樣,臆測門檻擋自己的呼叫等同拿猜測當事實);排程環境務必注入`getDate`錨定時區 |
|
|
519
|
+
| `budgetFor(chain)` | 遞補鏈走滿全鏈之時間預算(Σ各條目`timeoutMs`,未帶者以統一預設300000計);與外部排程硬上限取小者交`budgetMs` |
|
|
520
|
+
| `salvageTruncatedArray(text)` | 截斷JSON陣列之前段搶救(救回的每個元素皆完整合法);**不併入預設解析**——「判失敗換家重產」與「搶救前段部分接受」是同一問題的兩種合法策略,組成自訂`parse`注入即可 |
|
|
521
|
+
| `NO_SIDE_EFFECT` | 防副作用prompt前綴之單一來源(措辭含唯讀查閱豁免——codex以shell讀檔,一律禁指令等同禁讀檔);工作流`callAi`預設自動掛上,直呼`dispatchAiFallback`者自行前綴 |
|
|
522
|
+
|
|
495
523
|
**內建CLI條目之防寫機制對照**(內建清單定位為唯讀調用,各家CLI條目皆自帶機械防寫;需要寫入能力時於條目或呼叫時覆寫該欄位即可。api類為純文字生成天然無寫檔能力,不在此列):
|
|
496
524
|
|
|
497
525
|
| kind | 條目防寫欄位 | 機制 | 實測依據 |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* w-dispatch-ai v1.0.
|
|
2
|
+
* w-dispatch-ai v1.0.12
|
|
3
3
|
* (c) 2018-2021 yuda-lyu(semisphere)
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
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 g=Object.prototype,v=g.hasOwnProperty,m=g.propertyIsEnumerable,b=h(function(){return arguments}())?h:function(e){return y(e)&&v.call(e,"callee")&&!m.call(e,"callee")},j=b,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?i.Buffer:void 0,x=(_?_.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 T(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var I={};function M(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,$=E&&"object"==typeof module&&module&&!module.nodeType&&module,N=$&&$.exports===E&&n.process,D=function(){try{var e=$&&$.require&&$.require("util").types;return e||N&&N.binding&&N.binding("util")}catch(e){}}(),P=D&&D.isTypedArray,U=P?M(P):function(e){return y(e)&&T(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&&T(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 ge=Array.prototype.splice;function ve(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])}}ve.prototype.clear=function(){this.__data__=[],this.size=0},ve.prototype.delete=function(e){var t=this.__data__,r=he(t,e);return!(r<0)&&(r==t.length-1?t.pop():ge.call(t,r,1),--this.size,!0)},ve.prototype.get=function(e){var t=this.__data__,r=he(t,e);return r<0?void 0:t[r][1]},ve.prototype.has=function(e){return he(this.__data__,e)>-1},ve.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 me=se(i,"Map");function be(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(me||ve),string:new pe}},je.prototype.delete=function(e){var t=be(this,e).delete(e);return this.size-=t?1:0,t},je.prototype.get=function(e){return be(this,e).get(e)},je.prototype.has=function(e){return be(this,e).has(e)},je.prototype.set=function(e,t){var r=be(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,Oe,_e,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},Oe=ke(we,function(e){return 500===_e.size&&_e.clear(),e}),_e=Oe.cache,Oe),Te=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 Me=u?u.prototype:void 0,Ee=Me?Me.toString:void 0;function $e(e){if("string"==typeof e)return e;if(k(e))return Ie(e,$e)+"";if(H(e))return Ee?Ee.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Ne(e){return null==e?"":$e(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]:Te(Ne(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 ve(e);this.size=t.size}Fe.prototype.clear=function(){this.__data__=new ve,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 ve){var n=r.__data__;if(!me||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]",gt="[object Set]",vt="[object WeakMap]",mt="[object DataView]",bt=te(ct),jt=te(me),kt=te(ft),wt=te(dt),Ot=te(pt),_t=p;(ct&&_t(new ct(new ArrayBuffer(1)))!=mt||me&&_t(new me)!=yt||ft&&_t(ft.resolve())!=ht||dt&&_t(new dt)!=gt||pt&&_t(new pt)!=vt)&&(_t=function(e){var t=p(e),r="[object Object]"==t?e.constructor:void 0,n=r?te(r):"";if(n)switch(n){case bt:return mt;case jt:return yt;case kt:return ht;case wt:return gt;case Ot:return vt}return t});var xt=_t,St=Object.prototype.hasOwnProperty;var At=i.Uint8Array;function Tt(e){var t=new e.constructor(e.byteLength);return new At(t).set(new At(e)),t}var It=/\w*$/;var Mt=u?u.prototype:void 0,Et=Mt?Mt.valueOf:void 0;function $t(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Tt(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Tt(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?Tt(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 Nt=Object.create,Dt=function(){function e(){}return function(t){if(!J(t))return{};if(Nt)return Nt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Pt=Dt;var Ut=D&&D.isMap,Ct=Ut?M(Ut):function(e){return y(e)&&"[object Map]"==xt(e)};var Ft=D&&D.isSet,Lt=Ft?M(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=$t(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;function dr(e){return"[object Object]"===Object.prototype.toString.call(e)}function pr(e){return"[object String]"===Object.prototype.toString.call(e)}function yr(e){return!(!pr(e)||""===e)}function hr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function gr(e){return e!=e}function vr(e){let t=!1;if(yr(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(gr(e))return!1;t=!0}return t}function mr(e=10){vr(e)||(e=10);let t=hr();return setTimeout(function(){t.resolve()},e),t}var br=/\s/;var jr=/^\s+/;function kr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&br.test(e.charAt(t)););return t}(e)+1).replace(jr,""):e}var wr=/^[-+]0x[0-9a-f]+$/i,Or=/^0b[01]+$/i,_r=/^0o[0-7]+$/i,xr=parseInt;function Sr(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=kr(e);var r=Or.test(e);return r||_r.test(e)?xr(e.slice(2),r?2:8):wr.test(e)?NaN:+e}var Ar=1/0;function Tr(e){return e?(e=Sr(e))===Ar||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Ir(e){var t=Tr(e),r=t%1;return t==t?r?t-r:t:0}var Mr=i.isFinite,Er=Math.min;var $r=function(e){var t=Math[e];return function(e,r){if(e=Sr(e),(r=null==r?0:Er(Ir(r),292))&&Mr(e)){var n=(Ne(e)+"e").split("e");return+((n=(Ne(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Nr=$r;function Dr(e){if(!vr(e))return 0;return Tr(e)}function Pr(e){if(!vr(e))return 0;e=Dr(e);let t=Nr(e);return"0"===String(t)?0:t}function Ur(e){return"[object Array]"===Object.prototype.toString.call(e)}function Cr(e){let t=Object.prototype.toString.call(e);return"[object Function]"===t||"[object AsyncFunction]"===t}function Fr(e){return!!vr(e)&&(e=Dr(e),"number"==typeof(t=e)&&t==Ir(t));var t}function Lr(e){if(!Fr(e))return!1;return Pr(e)>0}function zr(e){if(!Fr(e))return!1;return Pr(e)>=0}function Br(e,t){return yr(e)&&zr(t)?0===(t=Pr(t))?"":e.substring(0,t):""}function Rr(e,t){return yr(e)&&zr(t)?0===(t=Pr(t))?e:function(e,t){if(!yr(e))return"";if(!zr(t))return"";if(0===(t=Pr(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(!yr(e))return"";if(!zr(t))return e;if(t=Pr(t),e.length<=t)return e;let n=Ce(r,"funWithMsg"),o="";if(Cr(n)){let r=n(e,t);yr(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(!yr(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(Cr(e))return e;if(!yr(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(!yr(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(!vr(t))return!1;let n=Pr(t);if(!yr(e)||e.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 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 g=tn(t,r),v=e.spawn(g.file,g.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...g.opt}),m="",b="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,O=!1;v.stdout.on("data",e=>{let t=j.decode(e,{stream:!0});t&&(Cr(s)&&s(t),m.length<a&&(m+=t))}),v.stderr.on("data",e=>{let t=k.decode(e,{stream:!0});t&&(Cr(c)&&c(t),b.length<a&&(b+=t))}),v.stdin.on("error",()=>{}),void 0!==u&&v.stdin.write(u,"utf8"),v.stdin.end();let _=setTimeout(()=>{w||(O=!0,function(e){let t=hr();return Zr(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}(v.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Vr(m,500,rn),stderr:Vr(b,500,rn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:v.pid}))},3e3).unref())},o);return v.on("error",e=>{w||(w=!0,clearTimeout(_),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-p,pid:v.pid}))}),v.on("close",(e,t)=>{if(w)return;w=!0,clearTimeout(_);let r=j.decode();r&&m.length<a&&(m+=r);let n=k.decode();n&&b.length<a&&(b+=n);let i=Date.now()-p;O?y.resolve({ok:!1,stdout:Vr(m,500,rn),stderr:Vr(b,500,rn),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:v.pid}):0===e?!d||d(m)?y.resolve({ok:!0,stdout:m,stderr:b,code:0,error:"",durationMs:i,pid:v.pid}):y.resolve({ok:!1,stdout:Vr(m,500,rn),stderr:Vr(b,500,rn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:v.pid}):y.resolve({ok:!1,stdout:Vr(m,500,rn),stderr:Vr(b,1e3,rn),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:v.pid})}),y}async function on(e,t=[],r={}){if(!yr(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Ur(t)||(t=[]),dr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,u=Ce(i,"cwd",null);yr(u)?i.cwd=u:i.cwd=process.cwd();let l=Ce(i,"input",null);yr(l)?i.input=l:i.input=void 0;let a=Ce(i,"env",null);dr(a)?i.env=a:i.env=void 0;let s=Ce(i,"validate",null);Cr(s)||yr(s)?i.validate=s:i.validate=void 0;let c=Ce(i,"onStdout",null);Cr(c)?i.onStdout=c:i.onStdout=void 0;let f=Ce(i,"onStderr",null);Cr(f)?i.onStderr=f:i.onStderr=void 0,n=zr(n)?Pr(n):0,o=Lr(o)?Pr(o):5e3;let d=Ce(i,"timeoutMs",null);Lr(d)?i.timeoutMs=Pr(d):i.timeoutMs=12e4;let p,y=Ce(i,"maxBuffer",null);Lr(y)?i.maxBuffer=Pr(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 mr(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(Ur(r))for(let e of r)yr(e)&&t.push(e);else yr(r)&&t.push(r);return t}function ln(e,t="params"){return yr(e)||(e="unknown error"),yr(t)||(t="params"),{ok:!1,stdout:"",stderr:"",code:null,error:e,errorType:t,durationMs:0,attempts:0}}function an(e){let t=Ce(e,"error","");return yr(t)?0===t.indexOf("TIMEOUT")?"timeout":t.includes("ENOENT")||t.includes("ENAMETOOLONG")?"spawn":"OUTPUT_VALIDATION_FAILED"===t?"validation":"exec":"exec"}function sn(e){return!0===Ce(e,"ok",!1)||yr(Ce(e,"errorType",null))?e:{...e,errorType:an(e)}}function cn(e,t){return Lr(e)?Pr(e):t}let fn=3e5,dn=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function pn(e,t={}){if(!yr(e))return ln("prompt must be a non-empty string");let r=Ce(t,"exe",null);yr(r)||(r="opencode");let n=Ce(t,"model",null),o=Ce(t,"agent",null);yr(o)||(o="build");let i=Ce(t,"extraArgs",null),u=un("run",["--agent",o],yr(n)?["-m",n]:[],i),l=Ce(t,"env",null);dr(l)||(l=void 0);let a=Ce(t,"config",null);dr(a)&&(a=JSON.stringify(a)),yr(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=Ce(t,"key",null),c=Ce(t,"provider",null);yr(s)&&yr(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})});let f=cn(Ce(t,"timeoutMs",null),fn),d=fr(t,dn);return sn(await on(r,u,{...d,input:e,env:l,timeoutMs:f}))}function yn(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==p(t);var t}let hn=["exe","model","skipPermissions","extraArgs","input"];async function gn(e,t={}){if(!yr(e))return ln("prompt must be a non-empty string");let r=Ce(t,"exe",null);yr(r)||(r="claude");let n=Ce(t,"model",null),o=Ce(t,"skipPermissions",null);yn(o)||(o=!0);let i=Ce(t,"extraArgs",null),u=un("-p",o?"--dangerously-skip-permissions":[],yr(n)?["--model",n]:[],i),l=cn(Ce(t,"timeoutMs",null),fn),a=fr(t,hn);return sn(await on(r,u,{...a,input:e,timeoutMs:l}))}let vn=["exe","model","sandbox","extraArgs","input"];async function mn(e,t={}){if(!yr(e))return ln("prompt must be a non-empty string");let r=Ce(t,"exe",null);yr(r)||(r="codex");let n=Ce(t,"model",null),o=Ce(t,"sandbox",null);yr(o)||(o="workspace-write");let i=Ce(t,"extraArgs",null),u=un("exec",["--sandbox",o],"--skip-git-repo-check",yr(n)?["-m",n]:[],i),l=cn(Ce(t,"timeoutMs",null),fn),a=fr(t,vn);return sn(await on(r,u,{...a,input:e,timeoutMs:l}))}let bn=fn,jn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function kn(e,t={}){if(!yr(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);yr(r)||(r="agy");let n=Ce(t,"model",null),o=Ce(t,"effort",null),i=Ce(t,"skipPermissions",null);yn(i)||(i=!0);let u=cn(Ce(t,"timeoutMs",null),bn),l=Ce(t,"printTimeout",null);yr(l)||(l=`${Math.max(30,Math.floor(u/1e3)-30)}s`);let a=Ce(t,"addDirs",null);if(!Ur(a)){let e=Ce(t,"cwd",null);yr(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)yr(e)&&s.push("--add-dir",e);let c=Ce(t,"extraArgs",null),f=un(i?"--dangerously-skip-permissions":[],["--print-timeout",l],yr(n)?["--model",n]:[],yr(o)?["--effort",o]:[],s,c,["--print",e]),d=fr(t,jn);try{return sn(await on(r,f,{...d,timeoutMs:u}))}catch(e){return ln(`${e.code||"UNKNOWN"}: ${e.message}`,"spawn")}}let wn=fn,On={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function _n(e,t,r,n,o){let i=Date.now(),u=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-i,usage:null,...e}),l=new AbortController,a=setTimeout(()=>{l.abort()},n),s=null,c="";try{s=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:l.signal}),c=await s.text()}catch(e){if(clearTimeout(a),"AbortError"===e.name)return u({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return u({error:`FETCH_ERROR: ${Ce(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return u({stderr:Vr(c,1e3,On),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let f=null,d="",p=null,y=null;try{let e=JSON.parse(c);f=Ce(e,"choices.0.message.content",null),d=Ce(e,"choices.0.finish_reason",""),p=Ce(e,"choices.0.message.tool_calls",null),y=Ce(e,"usage",null),dr(y)||(y=null)}catch{}return"tool_calls"===d||null!=p?u({stderr:Vr(c,1e3,On),code:s.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:y}):null==f?u({stderr:Vr(c,500,On),code:s.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:y}):("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?u({stdout:Vr(f,500,On),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:y}):u({ok:!0,stdout:f,code:s.status,usage:y}))}async function xn(e,t={}){if(!yr(e))return ln("prompt must be a non-empty string");let r=Ce(t,"baseURL",null);if(!yr(r))return ln("baseURL must be a non-empty string");let n=Ce(t,"model",null);if(!yr(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);dr(u)||(u={});let l=Ce(t,"headers",null);dr(l)||(l={});let a=cn(Ce(t,"timeoutMs",null),wn),s=Ce(t,"maxRetries",null);s=zr(s)?Pr(s):0;let c=cn(Ce(t,"retryDelayMs",null),5e3),f=function(e){if(Cr(e))return e;if(!yr(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(!yr(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(!vr(t))return!1;let n=Pr(t);if(!yr(e)||e.length<n)return!1}return!0}}(Ce(t,"validate",null)),d=r.replace(/\/+$/,"")+"/chat/completions",p=[];yr(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};yr(o)&&(h.Authorization=`Bearer ${o}`);let g=null,v=0;for(let e=0;e<=s;e++){if(e>0&&await mr(Math.min(c*e,15e3)),g=await _n(d,h,y,a,f),v=e+1,g.ok)return g.attempts=v,g;let t=g.code;if(vr(t)&&t>=400&&t<500&&429!==t)break}return g.attempts=v,g}let Sn={opencode:pn,claude:gn,codex:mn,antigravity:kn,"api-openai-compat":xn};function An(e){return e!=e}function Tn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,G(e))}var In=Math.max;function Mn(e,t,r,n){e=K(e)?e:Tn(e),r=r&&!n?Ir(r):0;var o=e.length;return r<0&&(r=In(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,An,r)}(e,t,r)>-1}async function En(e,t,r={}){let n=G(Sn);return yr(e)&&Mn(n,e)?(0,Sn[e])(t,r):ln(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let $n=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],Nn=["id","keys","meta"],Dn=fn,Pn={cursors:{}};function Un(e){let t=Ce(e,"error","");yr(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 Cn(e,t={}){if(!yr(e))return{...ln("prompt must be a non-empty string"),tried:[]};let r=Ce(t,"providers",null),n=Ur(r)?r.filter(dr):[];if(0===n.length)return{...ln("providers must be a non-empty array"),tried:[]};let o=cn(Ce(t,"budgetMs",null),null),i=null===o?null:Date.now()+o,u=cn(Ce(t,"minAttemptMs",null),2e4),{state:l,saveState:a}=function(e){let t=dr(e)&&Cr(e.get)&&Cr(e.set),r=null;if(t)try{r=e.get()}catch{}return dr(r)||(r=t?{cursors:{}}:Pn),dr(r.cursors)||(r.cursors={}),dr(r.cooling)||(r.cooling={}),{state:r,saveState:()=>{if(t)try{e.set(r)}catch{}}}}(Ce(t,"store",null)),s=cn(Ce(t,"cooldownMs",null),0),c=Ce(t,"coolDetect",null);Cr(c)||(c=null);let f=Ce(t,"shouldStop",null);Cr(f)||(f=null);let d=()=>{if(null===f)return!1;try{return!0===f()}catch{return!1}};s>0&&(n=function(e,t,r,n){let o=Date.now(),i=[],u=[],l=!1;for(let n of e){let e=Ce(n,"id",null),a=yr(e)?Ce(t.cooling,e,null):null;Lr(a)&&o-a<r?u.push(n):(yr(e)&&void 0!==t.cooling[e]&&(delete t.cooling[e],l=!0),i.push(n))}return l&&n(),[...i,...u]}(n,l,s,a));let p=Ce(t,"onEvent",null),y=e=>{if(Cr(p))try{p(e)}catch{}},h=fr(t,$n),g=[],v=null,m=null;for(let t=0;t<n.length;t++){let r=n[t],o=Ce(r,"id",null),f=yr(o);f||(o=String(t));let p=Ce(r,"kind",null),b=Ce(r,"model",null),j=Ce(r,"keys",null),k=Ur(j)?j.filter(yr):[],w=k.length,O=fr(r,Nn),_=0;if(w>0){let e=Ce(l.cursors,o,0);_=Lr(e)?Pr(e)%w:0}let x=w>0?w:1,S=!1;for(let t=0;t<x&&!S;t++){if(d())return y({type:"aborted",providerId:o,keyIndex:null,keyId:o}),g.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...ln("ABORTED","aborted"),tried:g};let r=w>0?(_+t)%w:null,n=null===r?o:`${o}#${r}`,j={...h,...O};w>0&&(j.key=k[r]);let x=cn(Ce(j,"timeoutMs",null),Dn);if(null!==i){let e=i-Date.now();if(e<u)return y({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...ln("budget exhausted","budget"),tried:g};x=Math.min(x,e)}j.timeoutMs=x,y({type:"try",providerId:o,keyIndex:r,keyId:n,kind:p,model:b});let A=await En(p,e,j);if(A.ok)return s>0&&f&&void 0!==l.cooling[o]&&(delete l.cooling[o],a()),w>0&&(l.cursors[o]=(r+1)%w,a()),y({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:A.durationMs}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{}}),{...A,providerId:o,keyIndex:r,kind:p,model:b,tried:g};if(v=A,m={providerId:o,keyIndex:r,kind:p,model:b},s>0&&f){let e=429===A.code||yr(A.error)&&0===A.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(A)}catch{}e&&(l.cooling[o]=Date.now(),a(),y({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:A.error,cooldownMs:s}))}Un(A)?(y({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr,durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{}}),S=!0):(y({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr,durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{}}))}}return{...v||ln("all providers failed","exec"),...m||{},tried:g}}function Fn(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(dr(e)){for(let t in e)return!1;return!0}return!1}(e)||(!!function(e){return!(!pr(e)||""!==e)}(e)||(!!function(e){return!!Ur(e)&&0===e.length}(e)||!!gr(e)))))}function Ln(e){return!!Ur(e)&&(0!==e.length&&(1!==e.length||!Fn(e[0])))}function zn(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 Bn=["providers","spec","check","parse","rawText","promptPrefix","meta"],Rn=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n");async function Vn(e,t={}){let r=Date.now();if(!yr(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",errorType:"params",ms:0,tried:[]};let n=Ce(t,"providers",null),o=Ce(t,"spec",null);if(!dr(n)||!dr(o))return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,errorType:"params",ms:0,tried:[]};let{chain:i,missing:u}=function(e,t){let r=[Ce(t,"use","")],n=Ce(t,"fallback",null);Ln(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Ce(e,t,null);dr(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(", ")}`,errorType:"params",ms:0,tried:[]};if(0===i.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,errorType:"params",ms:0,tried:[]};let l=!0===Ce(t,"rawText",!1),a=Ce(t,"parse",null);Cr(a)||(a=zn);let s=Ce(t,"check",null);Cr(s)||(s=null);let c=Ce(t,"promptPrefix",null);yr(c)||(c=""===c?"":Rn);let f=await Cn(c+e,{...fr(t,Bn),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)||fn}),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",[]),usage:Ce(f,"usage",null),error:f.ok?"":Ce(f,"error","unknown error"),...f.ok?{}:{errorType:Ce(f,"errorType","exec")}}}async function Jn(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(!yr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Ln(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=Lr(a)?Pr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:a,...s}=e;return Vn(n,{...l,...s,providers:r,spec:{use:t,fallback:o},check:Cr(i)?i: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||!yr(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,check:y,meta:h,...g}=i,v=Cr(p)?p(c):function(e,t={}){let r=Ce(t,"schema",""),n=yr(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),m=await Vn(v,{...l,...g,providers:r,spec:{use:f,fallback:d},check:Cr(y)?y:u});return{ok:m.ok,result:m.ok?m.json:null,integrated:m.ok,agents:s,candidates:c,integrateDetail:m,totalMs:Date.now()-t,error:m.ok?"":`integrate failed: ${m.error}`}}let Wn=["id","use","fallback","prompt","check","meta"];async function Kn(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(!Ln(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=yr(Ce(c,"id",""))?c.id:`stage${e+1}`;a.push(f);let d=Ce(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: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(!yr(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,Wn),h=await Vn(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 Gn=["stages","input"],Hn=["task","agents","integrate","check","schema","minCandidates"];let Yn={KINDS:G(Sn),dispatchAi:En,dispatchAiFallback:Cn,dispatchAiWkf:function(e={}){let t=Ce(e,"providers",null);if(!dr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ce(e,"defaults",null);return dr(r)||(r={}),{providers:t,callAi:(e,n={})=>Vn(e,{...r,...n,providers:t}),runFanout:(e={})=>Jn({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}}),runRolePipeline:(e={})=>Kn({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await Jn(fr(e,Gn));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await Kn({...fr(e,Hn),input:r.result});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:pn,dispatchClaude:gn,dispatchCodex:mn,dispatchAntigravity:kn,dispatchApiOpenaiCompat:xn,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:["."],skipPermissions:!1},{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);dr(r)||(r="undefined"!=typeof process&&process&&dr(process.env)?process.env:{});let n=Ur(e)?e.filter(dr):[],o=Ce(t,"pick",null),i=[],u=n;if(Ln(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(!yr(t)||Ln(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 Yn});
|
|
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")(),l=i.Symbol,u=Object.prototype,a=u.hasOwnProperty,s=u.toString,c=l?l.toStringTag:void 0;var f=Object.prototype.toString;var d=l?l.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 g=Object.prototype,v=g.hasOwnProperty,m=g.propertyIsEnumerable,b=h(function(){return arguments}())?h:function(e){return y(e)&&v.call(e,"callee")&&!m.call(e,"callee")},j=b,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?i.Buffer:void 0,x=(_?_.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 T(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var I={};function M(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,$=E&&"object"==typeof module&&module&&!module.nodeType&&module,N=$&&$.exports===E&&n.process,D=function(){try{var e=$&&$.require&&$.require("util").types;return e||N&&N.binding&&N.binding("util")}catch(e){}}(),P=D&&D.isTypedArray,F=P?M(P):function(e){return y(e)&&T(e.length)&&!!I[p(e)]},U=Object.prototype.hasOwnProperty;function C(e,t){var r=k(e),n=!r&&j(e),o=!r&&!n&&x(e),i=!r&&!n&&!o&&F(e),l=r||n||o||i,u=l?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],a=u.length;for(var s in e)!t&&!U.call(e,s)||l&&("length"==s||o&&("offset"==s||"parent"==s)||i&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||A(s,a))||u.push(s);return u}var R=Object.prototype;function L(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||R)}function z(e,t){return function(r){return e(t(r))}}var B=z(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&&T(e.length)&&!W(e)}function q(e){return K(e)?C(e):function(e){if(!L(e))return B(e);var t=[];for(var r in Object(e))V.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e)}function G(e){return"symbol"==typeof e||y(e)&&"[object Symbol]"==p(e)}var Y=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,H=/^\w*$/;var Z,Q=i["__core-js_shared__"],X=(Z=/[^.]+$/.exec(Q&&Q.keys&&Q.keys.IE_PROTO||""))?"Symbol(src)_1."+Z:"";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,le=oe.hasOwnProperty,ue=RegExp("^"+ie.call(le).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ae(e){return!(!J(e)||(t=e,X&&X in t))&&(W(e)?ue: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 ge=Array.prototype.splice;function ve(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])}}ve.prototype.clear=function(){this.__data__=[],this.size=0},ve.prototype.delete=function(e){var t=this.__data__,r=he(t,e);return!(r<0)&&(r==t.length-1?t.pop():ge.call(t,r,1),--this.size,!0)},ve.prototype.get=function(e){var t=this.__data__,r=he(t,e);return r<0?void 0:t[r][1]},ve.prototype.has=function(e){return he(this.__data__,e)>-1},ve.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 me=se(i,"Map");function be(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(me||ve),string:new pe}},je.prototype.delete=function(e){var t=be(this,e).delete(e);return this.size-=t?1:0,t},je.prototype.get=function(e){return be(this,e).get(e)},je.prototype.has=function(e){return be(this,e).has(e)},je.prototype.set=function(e,t){var r=be(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 l=e.apply(this,n);return r.cache=i.set(o,l)||i,l};return r.cache=new(ke.Cache||je),r}ke.Cache=je;var we,Oe,_e,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},Oe=ke(we,function(e){return 500===_e.size&&_e.clear(),e}),_e=Oe.cache,Oe),Te=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 Me=l?l.prototype:void 0,Ee=Me?Me.toString:void 0;function $e(e){if("string"==typeof e)return e;if(k(e))return Ie(e,$e)+"";if(G(e))return Ee?Ee.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Ne(e){return null==e?"":$e(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&&!G(e))||H.test(e)||!Y.test(e)||null!=t&&e in Object(t)}(e,t)?[e]:Te(Ne(e))}function Pe(e){if("string"==typeof e||G(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Fe(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 Ue(e,t,r){var n=null==e?void 0:Fe(e,t);return void 0===n?r:n}function Ce(e){var t=this.__data__=new ve(e);this.size=t.size}Ce.prototype.clear=function(){this.__data__=new ve,this.size=0},Ce.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Ce.prototype.get=function(e){return this.__data__.get(e)},Ce.prototype.has=function(e){return this.__data__.has(e)},Ce.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ve){var n=r.__data__;if(!me||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 Re=function(){try{var e=se(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Le=Re;function ze(e,t,r){"__proto__"==t&&Le?Le(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Be=Object.prototype.hasOwnProperty;function Ve(e,t,r){var n=e[t];Be.call(e,t)&&ye(n,r)&&(void 0!==r||t in e)||ze(e,t,r)}function Je(e,t,r,n){var o=!r;r||(r={});for(var i=-1,l=t.length;++i<l;){var u=t[i],a=n?n(r[u],e[u],u,r,e):void 0;void 0===a&&(a=e[u]),o?ze(r,u,a):Ve(r,u,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=L(e),r=[];for(var n in e)("constructor"!=n||!t&&We.call(e,n))&&r.push(n);return r}function qe(e){return K(e)?C(e,!0):Ke(e)}var Ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ye=Ge&&"object"==typeof module&&module&&!module.nodeType&&module,He=Ye&&Ye.exports===Ge?i.Buffer:void 0,Ze=He?He.allocUnsafe:void 0;function Qe(){return[]}var Xe=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 l=e[r];t(l,r,e)&&(i[o++]=l)}return i}(et(e),function(t){return Xe.call(e,t)}))}:Qe,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=z(Object.getPrototypeOf,Object),it=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)nt(t,rt(e)),e=ot(e);return t}:Qe,lt=it;function ut(e,t,r){var n=t(e);return k(e)?n:nt(n,r(e))}function at(e){return ut(e,q,rt)}function st(e){return ut(e,qe,lt)}var ct=se(i,"DataView"),ft=se(i,"Promise"),dt=se(i,"Set"),pt=se(i,"WeakMap"),yt="[object Map]",ht="[object Promise]",gt="[object Set]",vt="[object WeakMap]",mt="[object DataView]",bt=te(ct),jt=te(me),kt=te(ft),wt=te(dt),Ot=te(pt),_t=p;(ct&&_t(new ct(new ArrayBuffer(1)))!=mt||me&&_t(new me)!=yt||ft&&_t(ft.resolve())!=ht||dt&&_t(new dt)!=gt||pt&&_t(new pt)!=vt)&&(_t=function(e){var t=p(e),r="[object Object]"==t?e.constructor:void 0,n=r?te(r):"";if(n)switch(n){case bt:return mt;case jt:return yt;case kt:return ht;case wt:return gt;case Ot:return vt}return t});var xt=_t,St=Object.prototype.hasOwnProperty;var At=i.Uint8Array;function Tt(e){var t=new e.constructor(e.byteLength);return new At(t).set(new At(e)),t}var It=/\w*$/;var Mt=l?l.prototype:void 0,Et=Mt?Mt.valueOf:void 0;function $t(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Tt(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Tt(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?Tt(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 Nt=Object.create,Dt=function(){function e(){}return function(t){if(!J(t))return{};if(Nt)return Nt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Pt=Dt;var Ft=D&&D.isMap,Ut=Ft?M(Ft):function(e){return y(e)&&"[object Map]"==xt(e)};var Ct=D&&D.isSet,Rt=Ct?M(Ct):function(e){return y(e)&&"[object Set]"==xt(e)},Lt="[object Arguments]",zt="[object Function]",Bt="[object Object]",Vt={};function Jt(e,t,r,n,o,i){var l,u=1&t,a=2&t,s=4&t;if(r&&(l=o?r(e,n,o,i):r(e)),void 0!==l)return l;if(!J(e))return e;var c=k(e);if(c){if(l=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),!u)return function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}(e,l)}else{var f=xt(e),d=f==zt||"[object GeneratorFunction]"==f;if(x(e))return function(e,t){if(t)return e.slice();var r=e.length,n=Ze?Ze(r):new e.constructor(r);return e.copy(n),n}(e,u);if(f==Bt||f==Lt||d&&!o){if(l=a||d?{}:function(e){return"function"!=typeof e.constructor||L(e)?{}:Pt(ot(e))}(e),!u)return a?function(e,t){return Je(e,lt(e),t)}(e,function(e,t){return e&&Je(t,qe(t),e)}(l,e)):function(e,t){return Je(e,rt(e),t)}(e,function(e,t){return e&&Je(t,q(t),e)}(l,e))}else{if(!Vt[f])return o?e:{};l=$t(e,f,u)}}i||(i=new Ce);var p=i.get(e);if(p)return p;i.set(e,l),Rt(e)?e.forEach(function(n){l.add(Jt(n,t,r,n,e,i))}):Ut(e)&&e.forEach(function(n,o){l.set(o,Jt(n,t,r,o,e,i))});var y=c?void 0:(s?a?st:at:a?qe:q)(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(l,o,Jt(n,t,r,o,e,i))}),l}function Wt(e,t){return t.length<2?e:Fe(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[Lt]=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[Bt]=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[zt]=Vt["[object WeakMap]"]=!1;var Kt=Object.prototype.hasOwnProperty;function qt(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 Gt=Function.prototype,Yt=Object.prototype,Ht=Gt.toString,Zt=Yt.hasOwnProperty,Qt=Ht.call(Object);function Xt(e){return function(e){if(!y(e)||"[object Object]"!=p(e))return!1;var t=ot(e);if(null===t)return!0;var r=Zt.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Ht.call(r)==Qt}(e)?void 0:e}var er=l?l.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,l=e.length;for(r||(r=tr),o||(o=[]);++i<l;){var u=e[i];t>0&&r(u)?t>1?rr(u,t-1,r,n,o):nt(o,u):n||(o[o.length]=u)}return o}function nr(e){return(null==e?0:e.length)?rr(e,1):[]}var or=Math.max;var ir=Le?function(e,t){return Le(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:function(e){return e},lr=ir,ur=Date.now;var ar=function(e){var t=0,r=0;return function(){var n=ur(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(lr),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),l=Array(i);++o<i;)l[o]=n[t+o];o=-1;for(var u=Array(t+1);++o<t;)u[o]=n[o];return u[t]=r(l),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,u)}}(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,Xt));for(var o=t.length;o--;)qt(r,t[o]);return r}),fr=cr;function dr(e){return"[object Object]"===Object.prototype.toString.call(e)}function pr(e){return"[object String]"===Object.prototype.toString.call(e)}function yr(e){return!(!pr(e)||""===e)}function hr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function gr(e){return e!=e}function vr(e){let t=!1;if(yr(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(gr(e))return!1;t=!0}return t}function mr(e=10){vr(e)||(e=10);let t=hr();return setTimeout(function(){t.resolve()},e),t}var br=/\s/;var jr=/^\s+/;function kr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&br.test(e.charAt(t)););return t}(e)+1).replace(jr,""):e}var wr=/^[-+]0x[0-9a-f]+$/i,Or=/^0b[01]+$/i,_r=/^0o[0-7]+$/i,xr=parseInt;function Sr(e){if("number"==typeof e)return e;if(G(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=kr(e);var r=Or.test(e);return r||_r.test(e)?xr(e.slice(2),r?2:8):wr.test(e)?NaN:+e}var Ar=1/0;function Tr(e){return e?(e=Sr(e))===Ar||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Ir(e){var t=Tr(e),r=t%1;return t==t?r?t-r:t:0}var Mr=i.isFinite,Er=Math.min;var $r=function(e){var t=Math[e];return function(e,r){if(e=Sr(e),(r=null==r?0:Er(Ir(r),292))&&Mr(e)){var n=(Ne(e)+"e").split("e");return+((n=(Ne(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Nr=$r;function Dr(e){if(!vr(e))return 0;return Tr(e)}function Pr(e){if(!vr(e))return 0;e=Dr(e);let t=Nr(e);return"0"===String(t)?0:t}function Fr(e){return"[object Array]"===Object.prototype.toString.call(e)}function Ur(e){let t=Object.prototype.toString.call(e);return"[object Function]"===t||"[object AsyncFunction]"===t}function Cr(e){return!!vr(e)&&(e=Dr(e),"number"==typeof(t=e)&&t==Ir(t));var t}function Rr(e){if(!Cr(e))return!1;return Pr(e)>0}function Lr(e){if(!Cr(e))return!1;return Pr(e)>=0}function zr(e,t){return yr(e)&&Lr(t)?0===(t=Pr(t))?"":e.substring(0,t):""}function Br(e,t){if(!yr(e))return"";if(!Lr(t))return"";if(0===(t=Pr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Vr(e,t){return yr(e)&&Lr(t)?0===(t=Pr(t))?e:Br(e,e.length-t):""}function Jr(e,t,r={}){if(!yr(e))return"";if(!Lr(t))return e;if(t=Pr(t),e.length<=t)return e;let n=Ue(r,"funWithMsg"),o="";if(Ur(n)){let r=n(e,t);yr(r)&&(o=r)}return zr(e,t)+`...${o}`}function Wr(e,t={}){let r=Ue(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function Kr(e){return function(e,t={}){let r=Ue(t,"fs");return!!Wr(e,{fs:r})&&!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink()}(e,{fs:r})}function qr(e,t={}){let r=null,n=Ue(t,"fs"),o="";try{o=n.readFileSync(e,"utf8")}catch(e){r=e}return null!==r?{error:r}:{success:o}}function Gr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Yr=e,Hr=Yr.spawn,Zr=Yr.exec;function Qr(e,t,r){var n={};try{Object.keys(e).forEach(function(r){e[r].forEach(function(e){n[e]||(Xr(e,t),n[e]=1)}),n[r]||(Xr(r,t),n[r]=1)})}catch(e){if(r)return r(e);throw e}if(r)return r()}function Xr(e,t){try{process.kill(parseInt(e,10),t)}catch(e){if("ESRCH"!==e.code)throw e}}function en(e,t,r,n,o){var i=n(e),l="";i.stdout.on("data",function(e){e=e.toString("ascii");l+=e});i.on("close",function(i){delete r[e],0==i?l.match(/\d+/g).forEach(function(i){i=parseInt(i,10),t[e].push(i),t[i]=[],r[i]=1,en(i,t,r,n,o)}):0==Object.keys(r).length&&o()})}var tn=Gr(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":Zr("taskkill /pid "+e+" /T /F",r);break;case"darwin":en(e,n,o,function(e){return Hr("pgrep",["-P",e])},function(){Qr(n,t,r)});break;default:en(e,n,o,function(e){return Hr("ps",["-o","pid","--no-headers","--ppid",e])},function(){Qr(n,t,r)})}});function rn(e){let n=Ue(qr(e,{fs:r}),"success","");if(!yr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let i=t.dirname(e),l=t.join(i,o[1]);return Kr(l)?l:null}function nn(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=rn(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 on={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function ln(t,r=[],n={}){let{timeoutMs:o=12e4,cwd:i=process.cwd(),input:l,validate:u,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:f}=n,d=function(e){if(Ur(e))return e;if(!yr(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(!yr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===zr(r,4)){let t=Vr(r,4);if(!vr(t))return!1;let n=Pr(t);if(!yr(e)||e.length<n)return!1}return!0}}(u),p=Date.now(),y=hr(),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 g=nn(t,r),v=e.spawn(g.file,g.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...g.opt}),m="",b="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,O=!1;v.stdout.on("data",e=>{let t=j.decode(e,{stream:!0});t&&(Ur(s)&&s(t),m.length<a&&(m+=t))}),v.stderr.on("data",e=>{let t=k.decode(e,{stream:!0});t&&(Ur(c)&&c(t),b.length<a&&(b+=t))}),v.stdin.on("error",()=>{}),void 0!==l&&v.stdin.write(l,"utf8"),v.stdin.end();let _=setTimeout(()=>{w||(O=!0,function(e){let t=hr();return tn(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}(v.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Jr(m,500,on),stderr:Jr(b,500,on),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:v.pid}))},3e3).unref())},o);return v.on("error",e=>{w||(w=!0,clearTimeout(_),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-p,pid:v.pid}))}),v.on("close",(e,t)=>{if(w)return;w=!0,clearTimeout(_);let r=j.decode();r&&m.length<a&&(m+=r);let n=k.decode();n&&b.length<a&&(b+=n);let i=Date.now()-p;O?y.resolve({ok:!1,stdout:Jr(m,500,on),stderr:Jr(b,500,on),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:v.pid}):0===e?!d||d(m)?y.resolve({ok:!0,stdout:m,stderr:b,code:0,error:"",durationMs:i,pid:v.pid}):y.resolve({ok:!1,stdout:Jr(m,500,on),stderr:Jr(b,500,on),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:v.pid}):y.resolve({ok:!1,stdout:Jr(m,500,on),stderr:Jr(b,1e3,on),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:v.pid})}),y}async function un(e,t=[],r={}){if(!yr(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Fr(t)||(t=[]),dr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,l=Ue(i,"cwd",null);yr(l)?i.cwd=l:i.cwd=process.cwd();let u=Ue(i,"input",null);yr(u)?i.input=u:i.input=void 0;let a=Ue(i,"env",null);dr(a)?i.env=a:i.env=void 0;let s=Ue(i,"validate",null);Ur(s)||yr(s)?i.validate=s:i.validate=void 0;let c=Ue(i,"onStdout",null);Ur(c)?i.onStdout=c:i.onStdout=void 0;let f=Ue(i,"onStderr",null);Ur(f)?i.onStderr=f:i.onStderr=void 0,n=Lr(n)?Pr(n):0,o=Rr(o)?Pr(o):5e3;let d=Ue(i,"timeoutMs",null);Rr(d)?i.timeoutMs=Pr(d):i.timeoutMs=12e4;let p,y=Ue(i,"maxBuffer",null);Rr(y)?i.maxBuffer=Pr(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 mr(e)}if(p=await ln(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 an(...e){let t=[];for(let r of e)if(Fr(r))for(let e of r)yr(e)&&t.push(e);else yr(r)&&t.push(r);return t}function sn(e,t="params"){return yr(e)||(e="unknown error"),yr(t)||(t="params"),{ok:!1,stdout:"",stderr:"",code:null,error:e,errorType:t,durationMs:0,attempts:0}}function cn(e){let t=Ue(e,"error","");return yr(t)?0===t.indexOf("TIMEOUT")?"timeout":t.includes("ENOENT")||t.includes("ENAMETOOLONG")?"spawn":"OUTPUT_VALIDATION_FAILED"===t?"validation":"exec":"exec"}function fn(e){return!0===Ue(e,"ok",!1)||yr(Ue(e,"errorType",null))?e:{...e,errorType:cn(e)}}function dn(e,t){return Rr(e)?Pr(e):t}let pn=3e5,yn=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function hn(e,t={}){if(!yr(e))return sn("prompt must be a non-empty string");let r=Ue(t,"exe",null);yr(r)||(r="opencode");let n=Ue(t,"model",null),o=Ue(t,"agent",null);yr(o)||(o="build");let i=Ue(t,"extraArgs",null),l=an("run",["--agent",o],yr(n)?["-m",n]:[],i),u=Ue(t,"env",null);dr(u)||(u=void 0);let a=Ue(t,"config",null);dr(a)&&(a=JSON.stringify(a)),yr(a)&&(u={...u,OPENCODE_CONFIG_CONTENT:a});let s=Ue(t,"key",null),c=Ue(t,"provider",null);yr(s)&&yr(c)&&(u={...u,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})});let f=dn(Ue(t,"timeoutMs",null),pn),d=fr(t,yn);return fn(await un(r,l,{...d,input:e,env:u,timeoutMs:f}))}function gn(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==p(t);var t}let vn=["exe","model","skipPermissions","extraArgs","input"];async function mn(e,t={}){if(!yr(e))return sn("prompt must be a non-empty string");let r=Ue(t,"exe",null);yr(r)||(r="claude");let n=Ue(t,"model",null),o=Ue(t,"skipPermissions",null);gn(o)||(o=!0);let i=Ue(t,"extraArgs",null),l=an("-p",o?"--dangerously-skip-permissions":[],yr(n)?["--model",n]:[],i),u=dn(Ue(t,"timeoutMs",null),pn),a=fr(t,vn);return fn(await un(r,l,{...a,input:e,timeoutMs:u}))}let bn=["exe","model","sandbox","extraArgs","input"];async function jn(e,t={}){if(!yr(e))return sn("prompt must be a non-empty string");let r=Ue(t,"exe",null);yr(r)||(r="codex");let n=Ue(t,"model",null),o=Ue(t,"sandbox",null);yr(o)||(o="workspace-write");let i=Ue(t,"extraArgs",null),l=an("exec",["--sandbox",o],"--skip-git-repo-check",yr(n)?["-m",n]:[],i),u=dn(Ue(t,"timeoutMs",null),pn),a=fr(t,bn);return fn(await un(r,l,{...a,input:e,timeoutMs:u}))}let kn=pn,wn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function On(e,t={}){if(!yr(e))return sn("prompt must be a non-empty string");if(e.length>3e4)return sn(`prompt too long (${e.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Ue(t,"exe",null);yr(r)||(r="agy");let n=Ue(t,"model",null),o=Ue(t,"effort",null),i=Ue(t,"skipPermissions",null);gn(i)||(i=!0);let l=dn(Ue(t,"timeoutMs",null),kn),u=Ue(t,"printTimeout",null);yr(u)||(u=`${Math.max(30,Math.floor(l/1e3)-30)}s`);let a=Ue(t,"addDirs",null);if(!Fr(a)){let e=Ue(t,"cwd",null);yr(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)yr(e)&&s.push("--add-dir",e);let c=Ue(t,"extraArgs",null),f=an(i?"--dangerously-skip-permissions":[],["--print-timeout",u],yr(n)?["--model",n]:[],yr(o)?["--effort",o]:[],s,c,["--print",e]),d=fr(t,wn);try{return fn(await un(r,f,{...d,timeoutMs:l}))}catch(e){return sn(`${e.code||"UNKNOWN"}: ${e.message}`,"spawn")}}let _n=pn,xn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Sn(e,t,r,n,o){let i=Date.now(),l=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-i,usage:null,...e}),u=new AbortController,a=setTimeout(()=>{u.abort()},n),s=null,c="";try{s=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),c=await s.text()}catch(e){if(clearTimeout(a),"AbortError"===e.name)return l({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return l({error:`FETCH_ERROR: ${Ue(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return l({stderr:Jr(c,1e3,xn),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let f=null,d="",p=null,y=null;try{let e=JSON.parse(c);f=Ue(e,"choices.0.message.content",null),d=Ue(e,"choices.0.finish_reason",""),p=Ue(e,"choices.0.message.tool_calls",null),y=Ue(e,"usage",null),dr(y)||(y=null)}catch{}return"tool_calls"===d||null!=p?l({stderr:Jr(c,1e3,xn),code:s.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:y}):null==f?l({stderr:Jr(c,500,xn),code:s.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:y}):("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?l({stdout:Jr(f,500,xn),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:y}):l({ok:!0,stdout:f,code:s.status,usage:y}))}async function An(e,t={}){if(!yr(e))return sn("prompt must be a non-empty string");let r=Ue(t,"baseURL",null);if(!yr(r))return sn("baseURL must be a non-empty string");let n=Ue(t,"model",null);if(!yr(n))return sn("model must be a non-empty string");let o=Ue(t,"key",null),i=Ue(t,"system",null),l=Ue(t,"body",null);dr(l)||(l={});let u=Ue(t,"headers",null);dr(u)||(u={});let a=dn(Ue(t,"timeoutMs",null),_n),s=Ue(t,"maxRetries",null);s=Lr(s)?Pr(s):0;let c=dn(Ue(t,"retryDelayMs",null),5e3),f=function(e){if(Ur(e))return e;if(!yr(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(!yr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===zr(r,4)){let t=Vr(r,4);if(!vr(t))return!1;let n=Pr(t);if(!yr(e)||e.length<n)return!1}return!0}}(Ue(t,"validate",null)),d=r.replace(/\/+$/,"")+"/chat/completions",p=[];yr(i)&&p.push({role:"system",content:i}),p.push({role:"user",content:e});let y={model:n,messages:p,...l},h={"Content-Type":"application/json",...u};yr(o)&&(h.Authorization=`Bearer ${o}`);let g=null,v=0;for(let e=0;e<=s;e++){if(e>0&&await mr(Math.min(c*e,15e3)),g=await Sn(d,h,y,a,f),v=e+1,g.ok)return g.attempts=v,g;let t=g.code;if(vr(t)&&t>=400&&t<500&&429!==t)break}return g.attempts=v,g}let Tn={opencode:hn,claude:mn,codex:jn,antigravity:On,"api-openai-compat":An};function In(e){return e!=e}function Mn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,q(e))}var En=Math.max;function $n(e,t,r,n){e=K(e)?e:Mn(e),r=r&&!n?Ir(r):0;var o=e.length;return r<0&&(r=En(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,In,r)}(e,t,r)>-1}async function Nn(e,t,r={}){let n=q(Tn);return yr(e)&&$n(n,e)?(0,Tn[e])(t,r):sn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let Dn=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],Pn=["id","keys","meta"],Fn=pn,Un={cursors:{}};function Cn(e){let t=Ue(e,"error","");yr(t)||(t="");let r=Ue(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 Rn(e,t={}){if(!yr(e))return{...sn("prompt must be a non-empty string"),tried:[]};let r=Ue(t,"providers",null),n=Fr(r)?r.filter(dr):[];if(0===n.length)return{...sn("providers must be a non-empty array"),tried:[]};let o=dn(Ue(t,"budgetMs",null),null),i=null===o?null:Date.now()+o,l=dn(Ue(t,"minAttemptMs",null),2e4),{state:u,saveState:a}=function(e){let t=dr(e)&&Ur(e.get)&&Ur(e.set),r=null;if(t)try{r=e.get()}catch{}return dr(r)||(r=t?{cursors:{}}:Un),dr(r.cursors)||(r.cursors={}),dr(r.cooling)||(r.cooling={}),{state:r,saveState:()=>{if(t)try{e.set(r)}catch{}}}}(Ue(t,"store",null)),s=dn(Ue(t,"cooldownMs",null),0),c=Ue(t,"coolDetect",null);Ur(c)||(c=null);let f=Ue(t,"shouldStop",null);Ur(f)||(f=null);let d=()=>{if(null===f)return!1;try{return!0===f()}catch{return!1}};s>0&&(n=function(e,t,r,n){let o=Date.now(),i=[],l=[],u=!1;for(let n of e){let e=Ue(n,"id",null),a=yr(e)?Ue(t.cooling,e,null):null;Rr(a)&&o-a<r?l.push(n):(yr(e)&&void 0!==t.cooling[e]&&(delete t.cooling[e],u=!0),i.push(n))}return u&&n(),[...i,...l]}(n,u,s,a));let p=Ue(t,"onEvent",null),y=e=>{if(Ur(p))try{p(e)}catch{}},h=fr(t,Dn),g=[],v=null,m=null;for(let t=0;t<n.length;t++){let r=n[t],o=Ue(r,"id",null),f=yr(o);f||(o=String(t));let p=Ue(r,"kind",null),b=Ue(r,"model",null),j=Ue(r,"keys",null),k=Fr(j)?j.filter(yr):[],w=k.length,O=fr(r,Pn),_=0;if(w>0){let e=Ue(u.cursors,o,0);_=Rr(e)?Pr(e)%w:0}let x=w>0?w:1,S=!1;for(let t=0;t<x&&!S;t++){if(d())return y({type:"aborted",providerId:o,keyIndex:null,keyId:o}),g.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...sn("ABORTED","aborted"),tried:g};let r=w>0?(_+t)%w:null,n=null===r?o:`${o}#${r}`,j={...h,...O};w>0&&(j.key=k[r]);let x=dn(Ue(j,"timeoutMs",null),Fn);if(null!==i){let e=i-Date.now();if(e<l)return y({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...sn("budget exhausted","budget"),tried:g};x=Math.min(x,e)}j.timeoutMs=x,y({type:"try",providerId:o,keyIndex:r,keyId:n,kind:p,model:b});let A=await Nn(p,e,j);if(A.ok)return s>0&&f&&void 0!==u.cooling[o]&&(delete u.cooling[o],a()),w>0&&(u.cursors[o]=(r+1)%w,a()),y({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:A.durationMs}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{}}),{...A,providerId:o,keyIndex:r,kind:p,model:b,tried:g};if(v=A,m={providerId:o,keyIndex:r,kind:p,model:b},s>0&&f){let e=429===A.code||yr(A.error)&&0===A.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(A)}catch{}e&&(u.cooling[o]=Date.now(),a(),y({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:A.error,cooldownMs:s}))}Cn(A)?(y({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr,durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{}}),S=!0):(y({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr,durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{}}))}}return{...v||sn("all providers failed","exec"),...m||{},tried:g}}function Ln(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(dr(e)){for(let t in e)return!1;return!0}return!1}(e)||(!!function(e){return!(!pr(e)||""!==e)}(e)||(!!function(e){return!!Fr(e)&&0===e.length}(e)||!!gr(e)))))}function zn(e){return!!Fr(e)&&(0!==e.length&&(1!==e.length||!Ln(e[0])))}function Bn(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 l=t[e];if(o)i?i=!1:"\\"===l?i=!0:'"'===l&&(o=!1);else if('"'===l)o=!0;else if("{"===l||"["===l)n++;else if(("}"===l||"]"===l)&&(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 Vn=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),Jn=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function Wn(e,t={}){let r=Date.now();if(!yr(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",errorType:"params",ms:0,tried:[]};let n=Ue(t,"providers",null),o=Ue(t,"spec",null);if(!dr(n)||!dr(o))return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,errorType:"params",ms:0,tried:[]};let{chain:i,missing:l}=function(e,t){let r=[Ue(t,"use","")],n=Ue(t,"fallback",null);zn(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Ue(e,t,null);dr(r)?o.push({id:t,...r}):i.push(String(t))}return{chain:o,missing:i}}(n,o);if(l.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${l.join(", ")}`,errorType:"params",ms:0,tried:[]};if(0===i.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,errorType:"params",ms:0,tried:[]};let u=!0===Ue(t,"rawText",!1),a=Ue(t,"parse",null);Ur(a)||(a=Bn);let s=Ue(t,"check",null);Ur(s)||(s=null);let c=Ue(t,"promptPrefix",null);yr(c)||(c=""===c?"":Vn);let f=await Rn(c+e,{...fr(t,Jn),providers:i,validate:e=>{if(u){let t=String(e||"").trim();return""!==t&&(!s||!0===s(t))}let t=a(e);return null!==t&&(!s||!0===s(t))},timeoutMs:Ue(t,"timeoutMs",null)||pn}),d=null;f.ok&&(d=u?String(f.stdout||"").trim():a(f.stdout));let p=Ue(f,"providerId",null),y=Ue(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:Ue(f,"tried",[]),usage:Ue(f,"usage",null),error:f.ok?"":Ue(f,"error","unknown error"),...f.ok?{}:{errorType:Ue(f,"errorType","exec")}}}async function Kn(e={}){let t=Date.now(),r=Ue(e,"providers",null),n=Ue(e,"task",""),o=Ue(e,"agents",null),i=Ue(e,"integrate",null),l=Ue(e,"check",null),u=Ue(e,"callOpt",{});if(!yr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!zn(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Ue(e,"minCandidates",null);a=Rr(a)?Pr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:a,...s}=e;return Wn(n,{...u,...s,providers:r,spec:{use:t,fallback:o},check:Ur(i)?i:l})})),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||!yr(Ue(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,check:y,meta:h,...g}=i,v=Ur(p)?p(c):function(e,t={}){let r=Ue(t,"schema",""),n=yr(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),m=await Wn(v,{...u,...g,providers:r,spec:{use:f,fallback:d},check:Ur(y)?y:l});return{ok:m.ok,result:m.ok?m.json:null,integrated:m.ok,agents:s,candidates:c,integrateDetail:m,totalMs:Date.now()-t,error:m.ok?"":`integrate failed: ${m.error}`}}let qn=["id","use","fallback","prompt","check","meta"];async function Gn(e={}){let t=Date.now(),r=Ue(e,"providers",null),n=Ue(e,"input",null),o=Ue(e,"stages",null),i=Ue(e,"callOpt",{});if(!zn(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let l={},u={},a=[],s=null;for(let e=0;e<o.length;e++){let c=o[e],f=yr(Ue(c,"id",""))?c.id:`stage${e+1}`;a.push(f);let d=Ue(c,"prompt",null);if(!Ur(d))return u[f]={ok:!1,error:`stage[${f}].prompt must be a function`},{ok:!1,result:null,stages:u,results:l,order:a,failedStage:f,totalMs:Date.now()-t,error:u[f].error};let p=d({input:n,prev:s,results:l,index:e});if(!yr(p))return u[f]={ok:!1,error:`stage[${f}].prompt returned empty`},{ok:!1,result:null,stages:u,results:l,order:a,failedStage:f,totalMs:Date.now()-t,error:u[f].error};let y=fr(c,qn),h=await Wn(p,{...i,...y,providers:r,spec:{use:Ue(c,"use",""),fallback:Ue(c,"fallback",null)},check:Ue(c,"check",null)});if(u[f]=h,!h.ok)return{ok:!1,result:null,stages:u,results:l,order:a,failedStage:f,totalMs:Date.now()-t,error:`stage[${f}] failed: ${h.error}`};l[f]=h.json,s=h.json}return{ok:!0,result:s,stages:u,results:l,order:a,failedStage:null,totalMs:Date.now()-t,error:""}}let Yn=["stages","input"],Hn=["task","agents","integrate","check","schema","minCandidates"];function Zn(e){let t=null,n=qr(e,{fs:r});if(n.error)return n;let o=n.success,i=null;try{i=JSON.parse(o)}catch(e){t=e}return null!==t?{error:t}:{success:i}}function Qn(e,t){return yr(e)&&Lr(t)?0===(t=Pr(t))?e:zr(e,e.length-t):""}function Xn(e){if(!yr(e))return{path:"",isRoot:!1};for(;e.indexOf("\\\\")>=0;)e=e.replace("\\\\","\\");for(;e.indexOf("//")>=0;)e=e.replace("//","/");if(":"===Br(e,1))return{path:`${e}\\`,isRoot:!0};if("\\"===Br(e,1)){let t=Qn(e,1);return":"===Br(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Br(e,1)){let t=Qn(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function eo(e){if(!yr(e))return"";let t=Xn(e);if(t.isRoot)return t.path;let r=function(e){if(!yr(e))return"";let t=Xn(e);if(t.isRoot)return t.path;let r=t.path;try{r=r.split("\\").pop().split("/").pop()}catch(e){}return r}(e=t.path);if(!yr(r))return e;let n=Xn(e=Qn(e,r.length));return n.isRoot,n.path}function to(e,t={}){let r=Ue(t,"fs");if(!Wr(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function ro(e,t,r={}){let n=null,o=Ue(r,"fs"),i=eo(e);to(i,{fs:o})||function(e,t={}){let r=Ue(t,"fs");if(to(e,{fs:r}))return{success:"input folder is already exists: "+e};if(Wr(e,{fs:r}))return{error:"input path already exists: "+e};try{r.mkdirSync(e,{recursive:!0})}catch(e){return{error:e}}}(i,{fs:o});try{o.writeFileSync(e,t,"utf8")}catch(e){n=e}return null!==n?{error:n}:{success:e}}function no(e,t,n={}){let o=null;if(!dr(t)&&!Fr(t))return{error:"inp is not an object or array"};let i=Ue(n,"useFormat",null);gn(i)||(i=!1);let l="";try{l=i?JSON.stringify(t,null,2):JSON.stringify(t)}catch(e){o=e}return null!==o?{error:o}:ro(e,l,{fs:r})}let oo={KINDS:q(Tn),NO_SIDE_EFFECT:Vn,dispatchAi:Nn,dispatchAiFallback:Rn,dispatchAiWkf:function(e={}){let t=Ue(e,"providers",null);if(!dr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ue(e,"defaults",null);return dr(r)||(r={}),{providers:t,callAi:(e,n={})=>Wn(e,{...r,...n,providers:t}),runFanout:(e={})=>Kn({...e,providers:t,callOpt:{...r,...Ue(e,"callOpt",{})}}),runRolePipeline:(e={})=>Gn({...e,providers:t,callOpt:{...r,...Ue(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await Kn(fr(e,Yn));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await Gn({...fr(e,Hn),input:r.result});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,...Ue(e,"callOpt",{})}})}},dispatchOpencode:hn,dispatchClaude:mn,dispatchCodex:jn,dispatchAntigravity:On,dispatchApiOpenaiCompat:An,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:["."],skipPermissions:!1},{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=Ue(t,"env",null);dr(r)||(r="undefined"!=typeof process&&process&&dr(process.env)?process.env:{});let n=Fr(e)?e.filter(dr):[],o=Ue(t,"pick",null),i=[],l=n;if(zn(o)){l=[];for(let e of o){let t=n.find(t=>Ue(t,"id",null)===e);t?l.push(t):i.push(String(e))}}let u=[],a=[];for(let e of l){let t=Ue(e,"envVar",null);if(!yr(t)||zn(Ue(e,"keys",null))){u.push(fr(e,["envVar"]));continue}let n=String(Ue(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?u.push({...fr(e,["envVar"]),keys:n}):a.push({id:Ue(e,"id",""),envVar:t})}let s=Ue(t,"exes",null),c=Ue(t,"patch",null);(dr(s)||dr(c))&&(u=u.map(e=>{let t=e,r=dr(s)?Ue(s,Ue(t,"kind",""),null):null;yr(r)&&!yr(Ue(t,"exe",null))&&(t={...t,exe:r});let n=dr(c)?Ue(c,Ue(t,"id",""),null):null;return dr(n)&&(t={...t,...n}),t}));let f={};for(let e of u)f[e.id]=e;return{providers:u,table:f,skipped:a,missing:i}},readEnvFile:function(e){let t={},n="";try{n=r.readFileSync(e,"utf8")}catch(e){return t}for(let e of n.split(/\r?\n/)){let r=e.match(/^\s*([A-Za-z0-9_]+)\s*=\s*(.*)$/);r&&(t[r[1]]=r[2].trim().replace(/^(["'])(.*)\1$/,"$2"))}return t},budgetFor:function(e){if(!Fr(e))return 0;let t=0;for(let r of e)t+=dn(Ue(r,"timeoutMs",null),pn);return t},createFileStore:function(e={}){let r=Ue(e,"file",null);if(!yr(r)){let n=Ue(e,"dir",null);if(!yr(n))throw new Error("createFileStore: file or dir is required");let o=Ue(e,"name",null);r=t.join(n,yr(o)?o:"ai-cursor.json")}let n=Ue(e,"ownKeys",null);zn(n)||(n=["at"]);let o=Ue(e,"stamp",null);return Ur(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=Zn(r),t=void 0!==Ue(e,"error",void 0)?null:Ue(e,"success",null);if(!dr(t))return{};let o={...t};for(let e of n)delete o[e];return o},set:e=>{let t={...dr(e)?e:{},at:o()};no(r,t,{useFormat:!0})}}},createUsageCounter:function(e={}){let r=Ue(e,"file",null);if(!yr(r)){let n=Ue(e,"dir",null);if(!yr(n))throw new Error("createUsageCounter: file or dir is required");let o=Ue(e,"name",null);r=t.join(n,yr(o)?o:"ai-usage.json")}let n=Ue(e,"getDate",null);Ur(n)||(n=()=>{let e=new Date,t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`});let o=Ue(e,"keepDays",null);Rr(o)||(o=14);let i=Ue(e,"keyOf",null);Ur(i)||(i=e=>Ue(e,"keyId",null)||Ue(e,"providerId",""));let l=()=>{let e=Zn(r),t=void 0!==Ue(e,"error",void 0)?null:Ue(e,"success",null);return dr(t)?t:{}},u=(e,t=1)=>{if(!yr(e))return;let i=l(),u=n(),a=dr(i[u])?i[u]:{};a[e]=(Number(a[e])||0)+t,i[u]=a;let s=Object.keys(i).sort().slice(-o),c={};for(let e of s)c[e]=i[e];no(r,c,{useFormat:!0})};return{file:r,onEvent:e=>{"try"===Ue(e,"type",null)&&u(i(e))},bump:u,today:()=>{let e=l(),t=n(),r=dr(e[t])?e[t]:{};return{today:t,byKey:r,total:Object.values(r).reduce((e,t)=>e+(Number(t)||0),0)}}}},salvageTruncatedArray:function(e){let t=String(e||""),r=t.indexOf("[");if(r<0)return null;let n=0,o=!1,i=!1,l=-1;for(let e=r;e<t.length;e++){let r=t[e];if(i)i=!1;else if(o)"\\"===r?i=!0:'"'===r&&(o=!1);else if('"'!==r){if("["===r||"{"===r)n++;else if(("]"===r||"}"===r)&&(n--,1===n&&"}"===r&&(l=e),0===n))return null}else o=!0}if(l<0)return null;try{let e=JSON.parse(t.slice(r,l+1)+"]");return Array.isArray(e)&&e.length>0?e:null}catch(e){return null}}};return oo});
|
|
7
7
|
//# sourceMappingURL=w-dispatch-ai.umd.js.map
|