w-dispatch-ai 1.0.7 → 1.0.8

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.
Files changed (51) hide show
  1. package/README.md +27 -1
  2. package/dist/w-dispatch-ai.umd.js +2 -2
  3. package/dist/w-dispatch-ai.umd.js.map +1 -1
  4. package/docs/WDispatchAi.mjs.html +4 -3
  5. package/docs/adapters.mjs.html +2 -2
  6. package/docs/castPintOr.mjs.html +109 -0
  7. package/docs/dfTimeoutMs.mjs.html +2 -2
  8. package/docs/dispatchAi.mjs.html +14 -13
  9. package/docs/dispatchAiFallback.mjs.html +156 -97
  10. package/docs/dispatchAiWkf.mjs.html +2 -2
  11. package/docs/dispatchAntigravity.mjs.html +10 -14
  12. package/docs/dispatchApiOpenaiCompat.mjs.html +50 -64
  13. package/docs/dispatchClaude.mjs.html +8 -13
  14. package/docs/dispatchCodex.mjs.html +8 -13
  15. package/docs/dispatchOpencode.mjs.html +8 -13
  16. package/docs/getCliArgs.mjs.html +2 -2
  17. package/docs/getErrorResult.mjs.html +12 -5
  18. package/docs/getErrorType.mjs.html +171 -0
  19. package/docs/global.html +1275 -88
  20. package/docs/index.html +2 -2
  21. package/docs/resolveProviders.mjs.html +2 -2
  22. package/docs/wkf_callAiWithFallback.mjs.html +14 -10
  23. package/docs/wkf_extractJsonLoose.mjs.html +2 -2
  24. package/docs/wkf_runFanout.mjs.html +8 -8
  25. package/docs/wkf_runFanoutPipeline.mjs.html +14 -18
  26. package/docs/wkf_runRolePipeline.mjs.html +5 -4
  27. package/package.json +1 -1
  28. package/src/WDispatchAi.mjs +2 -1
  29. package/src/castPintOr.mjs +37 -0
  30. package/src/dispatchAi.mjs +12 -11
  31. package/src/dispatchAiFallback.mjs +154 -95
  32. package/src/dispatchAntigravity.mjs +8 -12
  33. package/src/dispatchApiOpenaiCompat.mjs +48 -62
  34. package/src/dispatchClaude.mjs +6 -11
  35. package/src/dispatchCodex.mjs +6 -11
  36. package/src/dispatchOpencode.mjs +6 -11
  37. package/src/getErrorResult.mjs +10 -3
  38. package/src/getErrorType.mjs +99 -0
  39. package/src/wkf/callAiWithFallback.mjs +12 -8
  40. package/src/wkf/runFanout.mjs +6 -6
  41. package/src/wkf/runFanoutPipeline.mjs +12 -16
  42. package/src/wkf/runRolePipeline.mjs +3 -2
  43. package/test/tools/fakeServerForApiTest.mjs +4 -1
  44. package/test/unit-callAiWithFallback.test.mjs +24 -0
  45. package/test/unit-castPintOr.test.mjs +28 -0
  46. package/test/unit-dispatchAiFallback.test.mjs +137 -0
  47. package/test/unit-dispatchApiOpenaiCompat.test.mjs +39 -0
  48. package/test/unit-getErrorResult.test.mjs +13 -1
  49. package/test/unit-getErrorType.test.mjs +36 -0
  50. package/test/unit-runFanout.test.mjs +14 -0
  51. package/test/unit-runRolePipeline.test.mjs +12 -0
package/README.md CHANGED
@@ -272,17 +272,41 @@ await test()
272
272
 
273
273
  結果結構對齊execCli:`stdout`為回覆內容、`code`為HTTP狀態碼(網路錯誤/逾時為`null`)、逾時`error`以`TIMEOUT`開頭、驗證失敗為`OUTPUT_VALIDATION_FAILED`——故可直接作為`dispatchAiFallback`條目(`kind: 'api-openai-compat'`,`keys`多金鑰輪替同樣適用)與工作流provider。
274
274
 
275
+ 另追加`usage`欄位:原始回應之token用量物件**原樣透傳**(無則`null`;驗證失敗等已耗token之失敗亦帶出),經`dispatchAiFallback`(最終結果與`tried`歷程各項)與工作流層(`callAi`結果之`usage`欄)一路流出。CLI類轉接器無可靠來源故**無此欄**——對外提供OpenAI相容API的呼叫端可據此把「真實用量(REST路徑)」與「只能估算(CLI路徑)」分開處理。
276
+
277
+ **`errorType`機器可讀錯誤類別**(全部轉接器與`dispatchAiFallback`/`callAi`之失敗結果皆帶,成功結果無此欄;`error`字串保留不動,兩者並存):
278
+
279
+ | errorType | 意義 | 出現於 |
280
+ | --- | --- | --- |
281
+ | `params` | 參數/設定檢核失敗(進入執行前即被擋) | 全部 |
282
+ | `timeout` | 逾時(execCli強殺或API abort) | 全部 |
283
+ | `spawn` | 子進程無法啟動(ENOENT/ENAMETOOLONG) | CLI類 |
284
+ | `validation` | stdout未過`validate` | 全部 |
285
+ | `exec` | CLI非零離開碼之一般執行失敗(未能再機械細分) | CLI類 |
286
+ | `http` | HTTP非2xx(`code`為狀態碼) | api類 |
287
+ | `fetch` | 網路層錯誤(DNS/連線拒絕) | api類 |
288
+ | `tool-unsupported` | 模型回tool_calls而api類不支援工具 | api類 |
289
+ | `invalid-response` | 回應缺`choices[0].message.content` | api類 |
290
+ | `aborted` | `shouldStop`中止 | fallback層 |
291
+ | `budget` | 時間預算用盡 | fallback層 |
292
+
293
+ 僅涵蓋**機械可判**者:CLI類之其餘失敗(額度上限/金鑰無效/服務端錯誤,各家字樣不同且隨版本漂移)一律歸`exec`,套件不維護簽章表(與否決金鑰停用清單同一理由)——需細分時以`coolDetect`式注入自判,或依`tried`內之`error`與`stderr`自行決策。
294
+
275
295
  #### Options for dispatchAiFallback:
276
296
  | key | type | default | description |
277
297
  | --- | --- | --- | --- |
278
298
  | `providers` | Array | 必填 | 供應商條目陣列,**順序即優先序**。條目除`id`、`keys`外即該次調用之opt,原樣透傳對應轉接器(`kind`、`model`、`exe`、`provider`、`config`、`sandbox`、`timeoutMs`等皆放條目內) |
279
299
  | `providers[].id` | String | 條目索引 | 群組識別,游標以此為鍵、亦為日誌標籤;本套件不解讀其內容,命名規則見下方 |
280
300
  | `providers[].keys` | Array | `[]` | 同一服務之多把API key,逐次注入輪替(`kind`為`opencode`時須同時給`provider`);省略代表沿用CLI登入狀態 |
301
+ | `providers[].meta` | any | 無 | **保留鍵,保證永不轉傳**轉接器。條目其餘鍵一律原樣轉傳——呼叫端要在條目上掛自有資訊(分類、標籤、註記)一律放`meta`,與轉傳機制永久絕緣(頂層opt與工作流各層規格物件同此約定) |
281
302
  | `budgetMs` | Integer | 不限 | 整輪遞補之時間上限,剩餘預算會壓進每次呼叫之`timeoutMs` |
282
303
  | `minAttemptMs` | Integer | `20000` | 單次嘗試之最低剩餘預算,低於此值即停止並回報`budget exhausted` |
283
304
  | `store` | Object | 行程內記憶體 | 狀態持久化`{get:()=>state, set:(state)=>{}}`,state含`cursors`(逐群組游標)與`cooling`(供應商冷卻時間戳,僅啟用cooldownMs時使用);假定單行程序列調用 |
284
305
  | `cooldownMs` | Integer | `0`不啟用 | 供應商冷卻視窗:條目(限有明給id者)遭遇**限流(HTTP 429,僅api類可偵測)或逾時(TIMEOUT)**後,於視窗內之後續呼叫中被**移至鏈尾(只降序不移除)**——前面全敗時仍會被嘗試、任一次成功立即解除,故不存在把已恢復服務冰住的問題。多階段工作流可大幅省去逐階段重踩已失效供應商的成本(使用端實測107s→15s)。注意啟用時providers順序會被暫時重排,此即機制目的 |
285
- | `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'`;失敗事件另帶`stdout`(被拒回覆)與`stderr`(錯誤輸出,皆已截斷)供診斷;回調拋出例外不影響主流程 |
306
+ | `coolDetect` | Function | 無 | 冷卻觸發之**注入判定**`(r)=>Boolean`,收完整失敗結果(含`stdout`、`stderr`、`code`、`error`),回傳`true`即視同冷卻觸發(內建429/TIMEOUT觸發不受影響)。CLI類限流埋在stderr且各家字樣不同、隨版本漂移,**簽章表由觀察到字樣的呼叫端維護**,如`(r) => /FreeUsageLimitError/i.test(r.stderr \|\| '')`;漏判僅退回現狀(每階段重探一次)、誤判也只是降尾非移除,兩邊代價都有上限。僅`cooldownMs>0`時有效;回調拋出例外視同`false` |
307
+ | `shouldStop` | Function | 無 | 中止判定`()=>Boolean`,於**每次嘗試之間**檢查,`true`即停止遞補回報`ABORTED`——供成果已無人接收時(如server端客戶端斷線)止損,把「斷線後仍空耗整條鏈」縮成「至多再耗當前這一家」。**不中止進行中之嘗試**(不殺子進程/不斷開請求,見Known design notes)。經工作流層原樣轉傳:中止後每個後續呼叫進門即回`ABORTED`,整條工作流自然快速收束,無須逐層處理;回調拋出例外視同`false` |
308
+ | `meta` | any | 無 | 保留鍵,同`providers[].meta`,永不轉傳 |
309
+ | `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'`、`'aborted'`、`'cooled'`(冷卻觸發,帶`error`與`cooldownMs`,僅啟用cooldownMs時出現);失敗事件另帶`errorType`、`stdout`(被拒回覆)與`stderr`(錯誤輸出,皆已截斷)供診斷;回調拋出例外不影響主流程 |
286
310
 
287
311
  頂層其餘設定(`timeoutMs`、`validate`、`maxRetries`等)為各attempt之共用預設,條目可覆寫;`maxRetries`建議維持預設`0`,韌性交給換家而非重試同一家。
288
312
 
@@ -472,6 +496,8 @@ let wkf = wdi.dispatchAiWkf({ providers: picked.table, defaults: { timeoutMs: 12
472
496
  - `package.json`**刻意不設**`exports`欄位:wsemi與w-*系列皆為自有套件,呼叫端以按需深層引入(`w-dispatch-ai/src/xxx.mjs`)為既定路線;增設exports會封死此路徑,勿加。
473
497
  - `dispatchAi(kind, prompt, opt)`會把整個`opt`原樣轉傳對應轉接器,該轉接器用不到的鍵(例如輪替條目物件內的`kind`)會被忽略,故「供應商條目物件直接當`opt`」是預期用法;`dispatchAiFallback`之providers條目沿用同一約定。
474
498
  - `dispatchAiFallback`為單向單輪:全數群組試畢即回傳最後一筆失敗結果與`tried`歷程,不回頭重試已敗的組。跨次執行僅記憶游標,不設金鑰停用清單(理由見上方失敗分流說明);需跨次跳過特定金鑰時,由呼叫端依`tried`/`onEvent`內之`error`與`stderr`自行決策。
499
+ - `shouldStop`**只在嘗試邊界檢查,不中止進行中之嘗試**(不殺子進程、不斷開HTTP請求):進行中嘗試之強制中止需侵入execCli層與各轉接器,屬已知設計取捨——最小版已把斷線後的損失從「整條鏈」縮成「至多再耗當前這一家」;如有實測場景證明不足再議完整版。
500
+ - CLI類限流簽章**不進套件**:各家stderr字樣不同且隨CLI版本漂移,套件維護簽章表等同養一個自己驗證不了的分類器(與否決金鑰停用清單同一理由)。偵測經`coolDetect`依賴注入,由觀察到字樣的呼叫端維護。
475
501
  - `dispatchOpencode`之`key`與`provider`須同時給予才會注入金鑰;只給其一(或範例中`.env`缺鍵導致`key`為`undefined`)時不會報錯,而是靜默沿用CLI既有登入狀態。
476
502
  - 範例中之`process.loadEnvFile`需Node.js >= 20.12,僅範例使用,套件本身無此限制。
477
503
  - `config`以`OPENCODE_CONFIG_CONTENT`注入後,與使用者既有`opencode.jsonc`為覆蓋或合併關係未經實測確認;建議`config`內含該次調用所需之完整provider定義,不依賴與既有設定檔之合併行為。
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * w-dispatch-ai v1.0.7
2
+ * w-dispatch-ai v1.0.8
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")(),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 v=Object.prototype,g=v.hasOwnProperty,b=v.propertyIsEnumerable,m=h(function(){return arguments}())?h:function(e){return y(e)&&g.call(e,"callee")&&!b.call(e,"callee")},j=m,k=Array.isArray;var w="object"==typeof exports&&exports&&!exports.nodeType&&exports,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 M(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var I={};function $(e){return function(t){return e(t)}}I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Arguments]"]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object Boolean]"]=I["[object DataView]"]=I["[object Date]"]=I["[object Error]"]=I["[object Function]"]=I["[object Map]"]=I["[object Number]"]=I["[object Object]"]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object WeakMap]"]=!1;var E="object"==typeof exports&&exports&&!exports.nodeType&&exports,N=E&&"object"==typeof module&&module&&!module.nodeType&&module,T=N&&N.exports===E&&n.process,D=function(){try{var e=N&&N.require&&N.require("util").types;return e||T&&T.binding&&T.binding("util")}catch(e){}}(),P=D&&D.isTypedArray,U=P?$(P):function(e){return y(e)&&M(e.length)&&!!I[p(e)]},C=Object.prototype.hasOwnProperty;function F(e,t){var r=k(e),n=!r&&j(e),o=!r&&!n&&x(e),i=!r&&!n&&!o&&U(e),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&&!C.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 L=Object.prototype;function z(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||L)}function B(e,t){return function(r){return e(t(r))}}var R=B(Object.keys,Object),V=Object.prototype.hasOwnProperty;function J(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function W(e){if(!J(e))return!1;var t=p(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function K(e){return null!=e&&M(e.length)&&!W(e)}function G(e){return K(e)?F(e):function(e){if(!z(e))return R(e);var t=[];for(var r in Object(e))V.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e)}function H(e){return"symbol"==typeof e||y(e)&&"[object Symbol]"==p(e)}var Y=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/;var Q,X=i["__core-js_shared__"],Z=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var ee=Function.prototype.toString;function te(e){if(null!=e){try{return ee.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var re=/^\[object .+?Constructor\]$/,ne=Function.prototype,oe=Object.prototype,ie=ne.toString,le=oe.hasOwnProperty,ue=RegExp("^"+ie.call(le).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ae(e){return!(!J(e)||(t=e,Z&&Z 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 ve=Array.prototype.splice;function ge(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}ge.prototype.clear=function(){this.__data__=[],this.size=0},ge.prototype.delete=function(e){var t=this.__data__,r=he(t,e);return!(r<0)&&(r==t.length-1?t.pop():ve.call(t,r,1),--this.size,!0)},ge.prototype.get=function(e){var t=this.__data__,r=he(t,e);return r<0?void 0:t[r][1]},ge.prototype.has=function(e){return he(this.__data__,e)>-1},ge.prototype.set=function(e,t){var r=this.__data__,n=he(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var be=se(i,"Map");function me(e,t){var r,n,o=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?o["string"==typeof t?"string":"hash"]:o.map}function je(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}je.prototype.clear=function(){this.size=0,this.__data__={hash:new pe,map:new(be||ge),string:new pe}},je.prototype.delete=function(e){var t=me(this,e).delete(e);return this.size-=t?1:0,t},je.prototype.get=function(e){return me(this,e).get(e)},je.prototype.has=function(e){return me(this,e).has(e)},je.prototype.set=function(e,t){var r=me(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function ke(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var 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),Me=Ae;function Ie(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}var $e=l?l.prototype:void 0,Ee=$e?$e.toString:void 0;function Ne(e){if("string"==typeof e)return e;if(k(e))return Ie(e,Ne)+"";if(H(e))return Ee?Ee.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Te(e){return null==e?"":Ne(e)}function De(e,t){return k(e)?e:function(e,t){if(k(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!H(e))||q.test(e)||!Y.test(e)||null!=t&&e in Object(t)}(e,t)?[e]:Me(Te(e))}function Pe(e){if("string"==typeof e||H(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Ue(e,t){for(var r=0,n=(t=De(t,e)).length;null!=e&&r<n;)e=e[Pe(t[r++])];return r&&r==n?e:void 0}function Ce(e,t,r){var n=null==e?void 0:Ue(e,t);return void 0===n?r:n}function Fe(e){var t=this.__data__=new ge(e);this.size=t.size}Fe.prototype.clear=function(){this.__data__=new ge,this.size=0},Fe.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Fe.prototype.get=function(e){return this.__data__.get(e)},Fe.prototype.has=function(e){return this.__data__.has(e)},Fe.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ge){var n=r.__data__;if(!be||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new je(n)}return r.set(e,t),this.size=r.size,this};var Le=function(){try{var e=se(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ze=Le;function Be(e,t,r){"__proto__"==t&&ze?ze(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Re=Object.prototype.hasOwnProperty;function Ve(e,t,r){var n=e[t];Re.call(e,t)&&ye(n,r)&&(void 0!==r||t in e)||Be(e,t,r)}function Je(e,t,r,n){var o=!r;r||(r={});for(var i=-1,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?Be(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=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 l=e[r];t(l,r,e)&&(i[o++]=l)}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,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,G,rt)}function st(e){return ut(e,Ge,lt)}var ct=se(i,"DataView"),ft=se(i,"Promise"),dt=se(i,"Set"),pt=se(i,"WeakMap"),yt="[object Map]",ht="[object Promise]",vt="[object Set]",gt="[object WeakMap]",bt="[object DataView]",mt=te(ct),jt=te(be),kt=te(ft),wt=te(dt),Ot=te(pt),_t=p;(ct&&_t(new ct(new ArrayBuffer(1)))!=bt||be&&_t(new be)!=yt||ft&&_t(ft.resolve())!=ht||dt&&_t(new dt)!=vt||pt&&_t(new pt)!=gt)&&(_t=function(e){var t=p(e),r="[object Object]"==t?e.constructor:void 0,n=r?te(r):"";if(n)switch(n){case mt:return bt;case jt:return yt;case kt:return ht;case wt:return vt;case Ot:return gt}return t});var xt=_t,St=Object.prototype.hasOwnProperty;var At=i.Uint8Array;function Mt(e){var t=new e.constructor(e.byteLength);return new At(t).set(new At(e)),t}var It=/\w*$/;var $t=l?l.prototype:void 0,Et=$t?$t.valueOf:void 0;function Nt(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Mt(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}(e,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(e);case"[object RegExp]":return function(e){var t=new e.constructor(e.source,It.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,Et?Object(Et.call(n)):{}}}var Tt=Object.create,Dt=function(){function e(){}return function(t){if(!J(t))return{};if(Tt)return Tt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Pt=Dt;var Ut=D&&D.isMap,Ct=Ut?$(Ut):function(e){return y(e)&&"[object Map]"==xt(e)};var Ft=D&&D.isSet,Lt=Ft?$(Ft):function(e){return y(e)&&"[object Set]"==xt(e)},zt="[object Arguments]",Bt="[object Function]",Rt="[object Object]",Vt={};function Jt(e,t,r,n,o,i){var 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==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,u);if(f==Rt||f==zt||d&&!o){if(l=a||d?{}:function(e){return"function"!=typeof e.constructor||z(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,Ge(t),e)}(l,e)):function(e,t){return Je(e,rt(e),t)}(e,function(e,t){return e&&Je(t,G(t),e)}(l,e))}else{if(!Vt[f])return o?e:{};l=Nt(e,f,u)}}i||(i=new Fe);var p=i.get(e);if(p)return p;i.set(e,l),Lt(e)?e.forEach(function(n){l.add(Jt(n,t,r,n,e,i))}):Ct(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?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(l,o,Jt(n,t,r,o,e,i))}),l}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=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=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},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,Zt));for(var o=t.length;o--;)Gt(r,t[o]);return r}),fr=cr,dr=/\s/;var pr=/^\s+/;function yr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&dr.test(e.charAt(t)););return t}(e)+1).replace(pr,""):e}var hr=/^[-+]0x[0-9a-f]+$/i,vr=/^0b[01]+$/i,gr=/^0o[0-7]+$/i,br=parseInt;function mr(e){if("number"==typeof e)return e;if(H(e))return NaN;if(J(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=J(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=yr(e);var r=vr.test(e);return r||gr.test(e)?br(e.slice(2),r?2:8):hr.test(e)?NaN:+e}var jr=1/0;function kr(e){return e?(e=mr(e))===jr||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function wr(e){var t=kr(e),r=t%1;return t==t?r?t-r:t:0}function Or(e){return"[object String]"===Object.prototype.toString.call(e)}function _r(e){return!(!Or(e)||""===e)}function xr(e){return e!=e}function Sr(e){let t=!1;if(_r(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(xr(e))return!1;t=!0}return t}function Ar(e){if(!Sr(e))return 0;return kr(e)}function Mr(e){return!!Sr(e)&&(e=Ar(e),"number"==typeof(t=e)&&t==wr(t));var t}var Ir=i.isFinite,$r=Math.min;var Er=function(e){var t=Math[e];return function(e,r){if(e=mr(e),(r=null==r?0:$r(wr(r),292))&&Ir(e)){var n=(Te(e)+"e").split("e");return+((n=(Te(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Nr=Er;function Tr(e){if(!Sr(e))return 0;e=Ar(e);let t=Nr(e);return"0"===String(t)?0:t}function Dr(e){if(!Mr(e))return!1;return Tr(e)>0}function Pr(e){return"[object Object]"===Object.prototype.toString.call(e)}function Ur(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function Cr(e=10){Sr(e)||(e=10);let t=Ur();return setTimeout(function(){t.resolve()},e),t}function Fr(e){return"[object Array]"===Object.prototype.toString.call(e)}function Lr(e){let t=Object.prototype.toString.call(e);return"[object Function]"===t||"[object AsyncFunction]"===t}function zr(e){if(!Mr(e))return!1;return Tr(e)>=0}function Br(e,t){return _r(e)&&zr(t)?0===(t=Tr(t))?"":e.substring(0,t):""}function Rr(e,t){return _r(e)&&zr(t)?0===(t=Tr(t))?e:function(e,t){if(!_r(e))return"";if(!zr(t))return"";if(0===(t=Tr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}(e,e.length-t):""}function Vr(e,t,r={}){if(!_r(e))return"";if(!zr(t))return e;if(t=Tr(t),e.length<=t)return e;let n=Ce(r,"funWithMsg"),o="";if(Lr(n)){let r=n(e,t);_r(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),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,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(!_r(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 Jr(l,{fs:r})?l: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:l,validate:u,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:f}=n,d=function(e){if(Lr(e))return e;if(!_r(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(!_r(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Rr(r,4);if(!Sr(t))return!1;let n=Tr(t);if(!_r(e)||e.length<n)return!1}return!0}}(u),p=Date.now(),y=Ur(),h={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==f){if("win32"===process.platform){let e=Object.keys(f).map(e=>e.toLowerCase());for(let t of Object.keys(h))e.includes(t.toLowerCase())&&delete h[t]}h={...h,...f}}let v=tn(t,r),g=e.spawn(v.file,v.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...v.opt}),b="",m="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),w=!1,O=!1;g.stdout.on("data",e=>{let t=j.decode(e,{stream:!0});t&&(Lr(s)&&s(t),b.length<a&&(b+=t))}),g.stderr.on("data",e=>{let t=k.decode(e,{stream:!0});t&&(Lr(c)&&c(t),m.length<a&&(m+=t))}),g.stdin.on("error",()=>{}),void 0!==l&&g.stdin.write(l,"utf8"),g.stdin.end();let _=setTimeout(()=>{w||(O=!0,function(e){let t=Ur();return Zr(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}(g.pid).catch(()=>{}),setTimeout(()=>{w||(w=!0,y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,500,rn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:g.pid}))},3e3).unref())},o);return g.on("error",e=>{w||(w=!0,clearTimeout(_),y.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-p,pid:g.pid}))}),g.on("close",(e,t)=>{if(w)return;w=!0,clearTimeout(_);let r=j.decode();r&&b.length<a&&(b+=r);let n=k.decode();n&&m.length<a&&(m+=n);let i=Date.now()-p;O?y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,500,rn),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:g.pid}):0===e?!d||d(b)?y.resolve({ok:!0,stdout:b,stderr:m,code:0,error:"",durationMs:i,pid:g.pid}):y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,500,rn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:g.pid}):y.resolve({ok:!1,stdout:Vr(b,500,rn),stderr:Vr(m,1e3,rn),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:g.pid})}),y}async function on(e,t=[],r={}){if(!_r(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Fr(t)||(t=[]),Pr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,l=Ce(i,"cwd",null);_r(l)?i.cwd=l:i.cwd=process.cwd();let u=Ce(i,"input",null);_r(u)?i.input=u:i.input=void 0;let a=Ce(i,"env",null);Pr(a)?i.env=a:i.env=void 0;let s=Ce(i,"validate",null);Lr(s)||_r(s)?i.validate=s:i.validate=void 0;let c=Ce(i,"onStdout",null);Lr(c)?i.onStdout=c:i.onStdout=void 0;let f=Ce(i,"onStderr",null);Lr(f)?i.onStderr=f:i.onStderr=void 0,n=zr(n)?Tr(n):0,o=Dr(o)?Tr(o):5e3;let d=Ce(i,"timeoutMs",null);Dr(d)?i.timeoutMs=Tr(d):i.timeoutMs=12e4;let p,y=Ce(i,"maxBuffer",null);Dr(y)?i.maxBuffer=Tr(y):i.maxBuffer=10485760;let h=0;for(let r=0;r<=n;r++){if(r>0){let e=Math.min(o*r,15e3);await Cr(e)}if(p=await nn(e,t,i),h=r+1,p.ok)return p.attempts=h,p;if(p.error.includes("ENOENT"))break;if(2===p.code)break}return p.attempts=h,p}function ln(...e){let t=[];for(let r of e)if(Fr(r))for(let e of r)_r(e)&&t.push(e);else _r(r)&&t.push(r);return t}function un(e){return _r(e)||(e="unknown error"),{ok:!1,stdout:"",stderr:"",code:null,error:e,durationMs:0,attempts:0}}let an=3e5,sn=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function cn(e,t={}){if(!_r(e))return un("prompt must be a non-empty string");let r=Ce(t,"exe",null);_r(r)||(r="opencode");let n=Ce(t,"model",null),o=Ce(t,"agent",null);_r(o)||(o="build");let i=Ce(t,"extraArgs",null),l=ln("run",["--agent",o],_r(n)?["-m",n]:[],i),u=Ce(t,"env",null);Pr(u)||(u=void 0);let a=Ce(t,"config",null);Pr(a)&&(a=JSON.stringify(a)),_r(a)&&(u={...u,OPENCODE_CONFIG_CONTENT:a});let s=Ce(t,"key",null),c=Ce(t,"provider",null);_r(s)&&_r(c)&&(u={...u,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})});let f=Ce(t,"timeoutMs",null);return f=Dr(f)?Tr(f):an,on(r,l,{...fr(t,sn),input:e,env:u,timeoutMs:f})}function fn(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==p(t);var t}let dn=["exe","model","skipPermissions","extraArgs","input"];async function pn(e,t={}){if(!_r(e))return un("prompt must be a non-empty string");let r=Ce(t,"exe",null);_r(r)||(r="claude");let n=Ce(t,"model",null),o=Ce(t,"skipPermissions",null);fn(o)||(o=!0);let i=Ce(t,"extraArgs",null),l=ln("-p",o?"--dangerously-skip-permissions":[],_r(n)?["--model",n]:[],i),u=Ce(t,"timeoutMs",null);return u=Dr(u)?Tr(u):an,on(r,l,{...fr(t,dn),input:e,timeoutMs:u})}let yn=["exe","model","sandbox","extraArgs","input"];async function hn(e,t={}){if(!_r(e))return un("prompt must be a non-empty string");let r=Ce(t,"exe",null);_r(r)||(r="codex");let n=Ce(t,"model",null),o=Ce(t,"sandbox",null);_r(o)||(o="workspace-write");let i=Ce(t,"extraArgs",null),l=ln("exec",["--sandbox",o],"--skip-git-repo-check",_r(n)?["-m",n]:[],i),u=Ce(t,"timeoutMs",null);return u=Dr(u)?Tr(u):an,on(r,l,{...fr(t,yn),input:e,timeoutMs:u})}let vn=an,gn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function bn(e,t={}){if(!_r(e))return un("prompt must be a non-empty string");if(e.length>3e4)return un(`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);_r(r)||(r="agy");let n=Ce(t,"model",null),o=Ce(t,"effort",null),i=Ce(t,"skipPermissions",null);fn(i)||(i=!0);let l=Ce(t,"timeoutMs",null);l=Dr(l)?Tr(l):vn;let u=Ce(t,"printTimeout",null);_r(u)||(u=`${Math.max(30,Math.floor(l/1e3)-30)}s`);let a=Ce(t,"addDirs",null);if(!Fr(a)){let e=Ce(t,"cwd",null);_r(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)_r(e)&&s.push("--add-dir",e);let c=Ce(t,"extraArgs",null),f=ln(i?"--dangerously-skip-permissions":[],["--print-timeout",u],_r(n)?["--model",n]:[],_r(o)?["--effort",o]:[],s,c,["--print",e]),d=fr(t,gn);try{return await on(r,f,{...d,timeoutMs:l})}catch(e){return un(`${e.code||"UNKNOWN"}: ${e.message}`)}}let mn=an,jn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function kn(e,t,r,n,o){let i=Date.now(),l=new AbortController,u=setTimeout(()=>{l.abort()},n),a=null,s="";try{a=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:l.signal}),s=await a.text()}catch(e){clearTimeout(u);let t=Date.now()-i;return"AbortError"===e.name?{ok:!1,stdout:"",stderr:"",code:null,error:`TIMEOUT after ${n/1e3}s`,durationMs:t}:{ok:!1,stdout:"",stderr:"",code:null,error:`FETCH_ERROR: ${Ce(e,"cause.code","")||e.message}`,durationMs:t}}clearTimeout(u);let c=Date.now()-i;if(!a.ok)return{ok:!1,stdout:"",stderr:Vr(s,1e3,jn),code:a.status,error:`HTTP ${a.status}`,durationMs:c};let f=null,d="",p=null;try{let e=JSON.parse(s);f=Ce(e,"choices.0.message.content",null),d=Ce(e,"choices.0.finish_reason",""),p=Ce(e,"choices.0.message.tool_calls",null)}catch{}return"tool_calls"===d||null!=p?{ok:!1,stdout:"",stderr:Vr(s,1e3,jn),code:a.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",durationMs:c}:null==f?{ok:!1,stdout:"",stderr:Vr(s,500,jn),code:a.status,error:"INVALID_RESPONSE: missing choices[0].message.content",durationMs:c}:("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?{ok:!1,stdout:Vr(f,500,jn),stderr:"",code:a.status,error:"OUTPUT_VALIDATION_FAILED",durationMs:c}:{ok:!0,stdout:f,stderr:"",code:a.status,error:"",durationMs:c})}async function wn(e,t={}){if(!_r(e))return un("prompt must be a non-empty string");let r=Ce(t,"baseURL",null);if(!_r(r))return un("baseURL must be a non-empty string");let n=Ce(t,"model",null);if(!_r(n))return un("model must be a non-empty string");let o=Ce(t,"key",null),i=Ce(t,"system",null),l=Ce(t,"body",null);Pr(l)||(l={});let u=Ce(t,"headers",null);Pr(u)||(u={});let a=Ce(t,"timeoutMs",null);a=Dr(a)?Tr(a):mn;let s=Ce(t,"maxRetries",null);s=zr(s)?Tr(s):0;let c=Ce(t,"retryDelayMs",null);c=Dr(c)?Tr(c):5e3;let f=function(e){if(Lr(e))return e;if(!_r(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(!_r(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Rr(r,4);if(!Sr(t))return!1;let n=Tr(t);if(!_r(e)||e.length<n)return!1}return!0}}(Ce(t,"validate",null)),d=r.replace(/\/+$/,"")+"/chat/completions",p=[];_r(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};_r(o)&&(h.Authorization=`Bearer ${o}`);let v=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await Cr(Math.min(c*e,15e3)),v=await kn(d,h,y,a,f),g=e+1,v.ok)return v.attempts=g,v;let t=v.code;if(Sr(t)&&t>=400&&t<500&&429!==t)break}return v.attempts=g,v}let On={opencode:cn,claude:pn,codex:hn,antigravity:bn,"api-openai-compat":wn};function _n(e){return e!=e}function xn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,G(e))}var Sn=Math.max;function An(e,t,r,n){e=K(e)?e:xn(e),r=r&&!n?wr(r):0;var o=e.length;return r<0&&(r=Sn(o+r,0)),function(e){return"string"==typeof e||!k(e)&&y(e)&&"[object String]"==p(e)}(e)?r<=o&&e.indexOf(t,r)>-1:!!o&&function(e,t,r){return t==t?function(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}(e,t,r):function(e,t,r,n){for(var o=e.length,i=r+(n?1:-1);n?i--:++i<o;)if(t(e[i],i,e))return i;return-1}(e,_n,r)}(e,t,r)>-1}async function Mn(e,t,r={}){let n=G(On);return _r(e)&&An(n,e)?(0,On[e])(t,r):un(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let In=["providers","budgetMs","minAttemptMs","cooldownMs","store","onEvent"],$n=["id","keys"],En=an,Nn={cursors:{}};function Tn(e){let t=Ce(e,"error","");_r(t)||(t="");let r=Ce(e,"code",null);return 0===t.indexOf("TIMEOUT")||(!!t.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===t||0===t.indexOf("unknown ai kind"))))}async function Dn(e,t={}){if(!_r(e))return{...un("prompt must be a non-empty string"),tried:[]};let r=Ce(t,"providers",null),n=Fr(r)?r.filter(Pr):[];if(0===n.length)return{...un("providers must be a non-empty array"),tried:[]};let o=Ce(t,"budgetMs",null);o=Dr(o)?Tr(o):null;let i=null===o?null:Date.now()+o,l=Ce(t,"minAttemptMs",null);l=Dr(l)?Tr(l):2e4;let u=Ce(t,"store",null),a=Pr(u)&&Lr(u.get)&&Lr(u.set),s=null;if(a)try{s=u.get()}catch{}Pr(s)||(s=a?{cursors:{}}:Nn),Pr(s.cursors)||(s.cursors={}),Pr(s.cooling)||(s.cooling={});let c=()=>{if(a)try{u.set(s)}catch{}},f=Ce(t,"cooldownMs",null);if(f=Dr(f)?Tr(f):0,f>0){let e=Date.now(),t=[],r=[],o=!1;for(let i of n){let n=Ce(i,"id",null),l=_r(n)?Ce(s.cooling,n,null):null;Dr(l)&&e-l<f?r.push(i):(_r(n)&&void 0!==s.cooling[n]&&(delete s.cooling[n],o=!0),t.push(i))}n=[...t,...r],o&&c()}let d=Ce(t,"onEvent",null),p=e=>{if(Lr(d))try{d(e)}catch{}},y=fr(t,In),h=[],v=null,g=null;for(let t=0;t<n.length;t++){let r=n[t],o=Ce(r,"id",null),u=_r(o);u||(o=String(t));let a=Ce(r,"kind",null),d=Ce(r,"model",null),b=Ce(r,"keys",null),m=Fr(b)?b.filter(_r):[],j=m.length,k=fr(r,$n),w=0;if(j>0){let e=Ce(s.cursors,o,0);w=Dr(e)?Tr(e)%j:0}let O=j>0?j:1,_=!1;for(let t=0;t<O&&!_;t++){let r=j>0?(w+t)%j:null,n=null===r?o:`${o}#${r}`,b={...y,...k};j>0&&(b.key=m[r]);let O=Ce(b,"timeoutMs",null);if(O=Dr(O)?Tr(O):En,null!==i){let e=i-Date.now();if(e<l)return p({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),h.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...un("budget exhausted"),tried:h};O=Math.min(O,e)}b.timeoutMs=O,p({type:"try",providerId:o,keyIndex:r,keyId:n,kind:a,model:d});let x=await Mn(a,e,b);if(x.ok)return f>0&&u&&void 0!==s.cooling[o]&&(delete s.cooling[o],c()),j>0&&(s.cursors[o]=(r+1)%j,c()),p({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:x.durationMs}),h.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:x.durationMs}),{...x,providerId:o,keyIndex:r,kind:a,model:d,tried:h};if(v=x,g={providerId:o,keyIndex:r,kind:a,model:d},f>0&&u){(429===x.code||_r(x.error)&&0===x.error.indexOf("TIMEOUT"))&&(s.cooling[o]=Date.now(),c())}Tn(x)?(p({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:x.error,stdout:x.stdout,stderr:x.stderr}),h.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:x.error,stdout:x.stdout,stderr:x.stderr,durationMs:x.durationMs}),_=!0):(p({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:x.error,stdout:x.stdout,stderr:x.stderr}),h.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:x.error,stdout:x.stdout,stderr:x.stderr,durationMs:x.durationMs}))}}return{...v||un("all providers failed"),...g||{},tried:h}}function Pn(e){return!!function(e){return"[object Undefined]"===Object.prototype.toString.call(e)}(e)||(!!function(e){return"[object Null]"===Object.prototype.toString.call(e)}(e)||(!!function(e){if(Pr(e)){for(let t in e)return!1;return!0}return!1}(e)||(!!function(e){return!(!Or(e)||""!==e)}(e)||(!!function(e){return!!Fr(e)&&0===e.length}(e)||!!xr(e)))))}function Un(e){return!!Fr(e)&&(0!==e.length&&(1!==e.length||!Pn(e[0])))}function Cn(e){let t=String(e||"");if(t=t.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),t=t.replace(/```(?:json)?/g,""),t=t.trim(),""===t)return null;try{let e=JSON.parse(t);if(null!==e&&"object"==typeof e)return e}catch(e){}let r=-1;for(let e=0;e<t.length;e++)if("{"===t[e]||"["===t[e]){r=e;break}if(r<0)return null;let n=0,o=!1,i=!1;for(let e=r;e<t.length;e++){let 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 Fn=["providers","spec","check","parse","rawText","promptPrefix"],Ln=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n");async function zn(e,t={}){let r=Date.now();if(!_r(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",ms:0,tried:[]};let n=Ce(t,"providers",null),o=Ce(t,"spec",null);if(!Pr(n)||!Pr(o))return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let{chain:i,missing:l}=function(e,t){let r=[Ce(t,"use","")],n=Ce(t,"fallback",null);Un(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Ce(e,t,null);Pr(r)?o.push({id:t,...r}):i.push(String(t))}return{chain:o,missing:i}}(n,o);if(l.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${l.join(", ")}`,ms:0,tried:[]};if(0===i.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,ms:0,tried:[]};let u=!0===Ce(t,"rawText",!1),a=Ce(t,"parse",null);Lr(a)||(a=Cn);let s=Ce(t,"check",null);Lr(s)||(s=null);let c=Ce(t,"promptPrefix",null);_r(c)||(c=""===c?"":Ln);let f=await Dn(c+e,{...fr(t,Fn),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:Ce(t,"timeoutMs",null)||an}),d=null;f.ok&&(d=u?String(f.stdout||"").trim():a(f.stdout));let p=Ce(f,"providerId",null),y=Ce(f,"keyIndex",null);return{ok:f.ok&&null!==d,json:d,providerId:p,keyIndex:y,keyId:null===y?p:`${p}#${y}`,ms:Date.now()-r,tried:Ce(f,"tried",[]),error:f.ok?"":Ce(f,"error","unknown error")}}async function Bn(e={}){let t=Date.now(),r=Ce(e,"providers",null),n=Ce(e,"task",""),o=Ce(e,"agents",null),i=Ce(e,"integrate",null),l=Ce(e,"check",null),u=Ce(e,"callOpt",{});if(!_r(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Un(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Ce(e,"minCandidates",null);a=Dr(a)?Tr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,...a}=e;return zn(n,{...u,...a,providers:r,spec:{use:t,fallback:o},check:Lr(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||!_r(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,...h}=i,v=Lr(p)?p(c):function(e,t={}){let r=Ce(t,"schema",""),n=_r(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),g=await zn(v,{...u,...h,providers:r,spec:{use:f,fallback:d},check:Lr(y)?y:l});return{ok:g.ok,result:g.ok?g.json:null,integrated:g.ok,agents:s,candidates:c,integrateDetail:g,totalMs:Date.now()-t,error:g.ok?"":`integrate failed: ${g.error}`}}let Rn=["id","use","fallback","prompt","check"];async function Vn(e={}){let t=Date.now(),r=Ce(e,"providers",null),n=Ce(e,"input",null),o=Ce(e,"stages",null),i=Ce(e,"callOpt",{});if(!Un(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let l={},u={},a=[],s=null;for(let e=0;e<o.length;e++){let c=o[e],f=_r(Ce(c,"id",""))?c.id:`stage${e+1}`;a.push(f);let d=Ce(c,"prompt",null);if(!Lr(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(!_r(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,Rn),h=await zn(p,{...i,...y,providers:r,spec:{use:Ce(c,"use",""),fallback:Ce(c,"fallback",null)},check:Ce(c,"check",null)});if(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 Jn={KINDS:G(On),dispatchAi:Mn,dispatchAiFallback:Dn,dispatchAiWkf:function(e={}){let t=Ce(e,"providers",null);if(!Pr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Ce(e,"defaults",null);return Pr(r)||(r={}),{providers:t,callAi:(e,n={})=>zn(e,{...r,...n,providers:t}),runFanout:(e={})=>Bn({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}}),runRolePipeline:(e={})=>Vn({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await Bn({providers:Ce(e,"providers",null),task:Ce(e,"task",""),agents:Ce(e,"agents",null),integrate:Ce(e,"integrate",null),check:Ce(e,"check",null),schema:Ce(e,"schema",""),minCandidates:Ce(e,"minCandidates",null),callOpt:Ce(e,"callOpt",{})});if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await Vn({providers:Ce(e,"providers",null),input:r.result,stages:Ce(e,"stages",null),callOpt:Ce(e,"callOpt",{})});return{ok:n.ok,result:n.ok?n.result:null,A:r,B:n,totalMs:Date.now()-t,error:n.ok?"":`B failed: ${n.error}`}}({...e,providers:t,callOpt:{...r,...Ce(e,"callOpt",{})}})}},dispatchOpencode:cn,dispatchClaude:pn,dispatchCodex:hn,dispatchAntigravity:bn,dispatchApiOpenaiCompat:wn,providers:[{id:"oc:opencode/deepseek-v4-flash-free",model:"opencode/deepseek-v4-flash-free",kind:"opencode",envVar:"OPENCODE_KEYS",provider:"opencode",config:{permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:agnes-ai/agnes-2.5-flash",model:"agnes-ai/agnes-2.5-flash",kind:"opencode",envVar:"AGNES_KEYS",provider:"agnes-ai",config:{provider:{"agnes-ai":{npm:"@ai-sdk/openai-compatible",name:"Agnes",options:{baseURL:"https://apihub.agnes-ai.com/v1"},models:{"agnes-2.5-flash":{name:"Agnes 2.5 Flash"}}}},permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:poolside/poolside/laguna-s-2.1",model:"poolside/poolside/laguna-s-2.1",kind:"opencode",envVar:"POOLSIDE_KEYS",provider:"poolside",config:{provider:{poolside:{npm:"@ai-sdk/openai-compatible",name:"Poolside",options:{baseURL:"https://inference.poolside.ai/v1"},models:{"poolside/laguna-s-2.1":{name:"Laguna S 2.1"}}}},permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"agy:gemini-3.7-flash-high",model:"gemini-3.7-flash-high",kind:"antigravity",addDirs:["."]},{id:"claude:sonnet",model:"sonnet",kind:"claude",extraArgs:["--disallowedTools","Write,Edit,NotebookEdit,Bash"]},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only"},{id:"zen:deepseek-v4-flash-free",model:"deepseek-v4-flash-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"agnes:agnes-2.5-flash",model:"agnes-2.5-flash",kind:"api-openai-compat",envVar:"AGNES_KEYS",baseURL:"https://apihub.agnes-ai.com/v1",body:{max_tokens:8192}},{id:"poolside:laguna-s-2.1",model:"poolside/laguna-s-2.1",kind:"api-openai-compat",envVar:"POOLSIDE_KEYS",baseURL:"https://inference.poolside.ai/v1",body:{max_tokens:8192,chat_template_kwargs:{enable_thinking:!1}}}],resolveProviders:function(e,t={}){let r=Ce(t,"env",null);Pr(r)||(r="undefined"!=typeof process&&process&&Pr(process.env)?process.env:{});let n=Fr(e)?e.filter(Pr):[],o=Ce(t,"pick",null),i=[],l=n;if(Un(o)){l=[];for(let e of o){let t=n.find(t=>Ce(t,"id",null)===e);t?l.push(t):i.push(String(e))}}let u=[],a=[];for(let e of l){let t=Ce(e,"envVar",null);if(!_r(t)||Un(Ce(e,"keys",null))){u.push(fr(e,["envVar"]));continue}let n=String(Ce(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?u.push({...fr(e,["envVar"]),keys:n}):a.push({id:Ce(e,"id",""),envVar:t})}let s={};for(let e of u)s[e.id]=e;return{providers:u,table:s,skipped:a,missing:i}}};return Jn});
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:["."]},{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});
7
7
  //# sourceMappingURL=w-dispatch-ai.umd.js.map