w-dispatch-ai 1.0.21 → 1.0.22

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 (49) hide show
  1. package/README.md +15 -3
  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 +5 -3
  5. package/docs/adapters.mjs.html +5 -3
  6. package/docs/budgetFor.mjs.html +2 -2
  7. package/docs/buildValidator.mjs.html +166 -0
  8. package/docs/castPintOr.mjs.html +2 -2
  9. package/docs/dfTimeoutMs.mjs.html +2 -2
  10. package/docs/dispatchAi.mjs.html +2 -2
  11. package/docs/dispatchAiFallback.mjs.html +2 -2
  12. package/docs/dispatchAiWkf.mjs.html +2 -2
  13. package/docs/dispatchAntigravity.mjs.html +2 -2
  14. package/docs/dispatchApiOpenaiCompat.mjs.html +4 -68
  15. package/docs/dispatchApiOpenaiResponses.mjs.html +498 -0
  16. package/docs/dispatchClaude.mjs.html +2 -2
  17. package/docs/dispatchCodex.mjs.html +2 -2
  18. package/docs/dispatchOpencode.mjs.html +2 -2
  19. package/docs/getCliArgs.mjs.html +2 -2
  20. package/docs/getErrorResult.mjs.html +2 -2
  21. package/docs/getErrorType.mjs.html +5 -3
  22. package/docs/global.html +2277 -1159
  23. package/docs/index.html +2 -2
  24. package/docs/readEnvFile.mjs.html +2 -2
  25. package/docs/resolveProviders.mjs.html +3 -3
  26. package/docs/wkf_callAiWithFallback.mjs.html +2 -2
  27. package/docs/wkf_createFileStore.mjs.html +2 -2
  28. package/docs/wkf_createUsageCounter.mjs.html +2 -2
  29. package/docs/wkf_extractJsonLoose.mjs.html +2 -2
  30. package/docs/wkf_noSideEffectPrefix.mjs.html +2 -2
  31. package/docs/wkf_runFanout.mjs.html +2 -2
  32. package/docs/wkf_runFanoutPipeline.mjs.html +2 -2
  33. package/docs/wkf_runRolePipeline.mjs.html +2 -2
  34. package/docs/wkf_salvageTruncatedArray.mjs.html +2 -2
  35. package/g.mjs +2 -2
  36. package/package.json +1 -1
  37. package/src/WDispatchAi.mjs +3 -1
  38. package/src/adapters.mjs +3 -1
  39. package/src/buildValidator.mjs +94 -0
  40. package/src/dispatchApiOpenaiCompat.mjs +2 -66
  41. package/src/dispatchApiOpenaiResponses.mjs +426 -0
  42. package/src/getErrorType.mjs +3 -1
  43. package/src/providers.mjs +303 -213
  44. package/src/resolveProviders.mjs +1 -1
  45. package/test/tools/fakeServerForApiTest.mjs +108 -3
  46. package/test/unit-WDispatchAi.test.mjs +10 -6
  47. package/test/unit-adapters.test.mjs +5 -3
  48. package/test/unit-dispatchAi.test.mjs +1 -1
  49. package/test/unit-dispatchApiOpenaiResponses.test.mjs +198 -0
package/README.md CHANGED
@@ -32,7 +32,7 @@ Note:
32
32
  #### Functions:
33
33
  | function | description |
34
34
  | --- | --- |
35
- | `dispatchAi(kind, prompt, opt)` | dispatch to the adapter of `kind`, one of `'opencode'`、`'claude'`、`'codex'`、`'antigravity'`、`'api-openai-compat'` |
35
+ | `dispatchAi(kind, prompt, opt)` | dispatch to the adapter of `kind`, one of `'opencode'`、`'claude'`、`'codex'`、`'antigravity'`、`'api-openai-compat'`、`'api-openai-responses'` |
36
36
  | `dispatchAiFallback(prompt, opt)` | call ai with an ordered provider list, auto rotating keys within a group and falling back to the next group |
37
37
  | `dispatchAiWkf(opt)` | workflow factory: inject a named provider table once, returns bound `callAi`/`runFanout`/`runRolePipeline`/`runFanoutPipeline` |
38
38
  | `dispatchOpencode(prompt, opt)` | call an ai model by opencode cli, supports per-call api key and provider config |
@@ -40,6 +40,7 @@ Note:
40
40
  | `dispatchCodex(prompt, opt)` | call a gpt model by openai codex cli |
41
41
  | `dispatchAntigravity(prompt, opt)` | call an ai model by google antigravity cli (`agy`), a multi-model gateway (gemini, claude, gpt-oss) |
42
42
  | `dispatchApiOpenaiCompat(prompt, opt)` | call an ai model by direct fetch to any OpenAI-compatible API (`baseURL`+`key`+`model`), no cli and no login required |
43
+ | `dispatchApiOpenaiResponses(prompt, opt)` | same, but for the OpenAI **Responses API** (`/responses`) — required by model families that are not served on `/chat/completions` (e.g. OpenCode Zen's muse-spark and GPT families) |
43
44
  | `providers` | curated provider entries verified by real tests (cli and rest paths), pick or use all via `resolveProviders` |
44
45
  | `resolveProviders(providers, opt)` | expand `envVar` → `keys` from env (comma-separated, missing vars auto-skipped), supports `pick` subset by id, `exes` per-kind exe injection and `patch` per-id field override; unknown picked ids are reported in `missing` with fuzzy spelling `hints` |
45
46
  | `readEnvFile(file)` | read a `.env` file into a plain object for `resolveProviders`'s `opt.env`, without polluting `process.env` |
@@ -48,7 +49,7 @@ Note:
48
49
  | `createUsageCounter(opt)` | per-day per-key usage counter fed by `onEvent` (observation only, never throttles) |
49
50
  | `salvageTruncatedArray(text)` | salvage the complete leading elements of a truncated JSON array (opt-in, not part of default parsing) |
50
51
  | `NO_SIDE_EFFECT` | the no-side-effect prompt prefix (single source), auto-applied by workflow `callAi`, prepend manually for direct `dispatchAiFallback` calls |
51
- | `KINDS` | array of available kinds, `['opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat']` |
52
+ | `KINDS` | array of available kinds, `['opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat', 'api-openai-responses']` |
52
53
 
53
54
  #### Example:
54
55
  > **Link:** [[dev source code](https://github.com/yuda-lyu/w-dispatch-ai/blob/master/g.mjs)]
@@ -82,7 +83,7 @@ let test = async () => {
82
83
 
83
84
  //可用之AI供應商種類
84
85
  console.log('KINDS:', wdi.KINDS)
85
- // => KINDS: [ 'opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat' ]
86
+ // => KINDS: [ 'opencode', 'claude', 'codex', 'antigravity', 'api-openai-compat', 'api-openai-responses' ]
86
87
 
87
88
  let prompt = '請只回覆兩個字:完成,不要有任何其他文字'
88
89
 
@@ -272,6 +273,17 @@ Codex 0.149 起 Windows 預設走 elevated 沙箱(專用使用者 `CodexSandbo
272
273
 
273
274
  **混用才是常態**:同一條 `dispatchAiFallback` 鏈可逐條目混搭kind,工作流各階段亦然——產生候選與整合收斂等純文字階段走API,需要翻閱專案檔案的階段換CLI。
274
275
 
276
+ **先選對端點型別,再選kind**:同一個閘道的不同模型可能走不同端點,打錯端點會得到 **HTTP 500 而非 404**,極易被誤判為「模型故障」而反覆重試。以 OpenCode Zen 為例([官方端點對照表](https://opencode.ai/docs/zh-tw/zen/),2026-09-03 查證):
277
+
278
+ | 端點 | 對應kind | 該端點之模型(Zen) |
279
+ | --- | --- | --- |
280
+ | `/v1/chat/completions` | `api-openai-compat` | deepseek/glm/kimi/minimax/nemotron/ling/mimo 等 |
281
+ | `/v1/responses` | `api-openai-responses` | muse-spark 系、GPT 系、Grok 系 |
282
+ | `/v1/messages` | 本套件無(改用 `opencode` CLI kind) | Claude 系、Qwen 系 |
283
+ | `/v1/models/<id>` | 本套件無(改用 `opencode` CLI kind) | Gemini 系 |
284
+
285
+ 實測佐證:`muse-spark-1.2/1.3` 走 `/chat/completions` 連續 10 次 500,同金鑰同模型改打 `/responses` 立即 200;且 1.2 於 2026-08-21 曾以 `/chat/completions` 成功——**閘道會事後改路由,「以前能用」不構成「現在該能用」**。完整診斷流程見 [src/providers.mjs](https://github.com/yuda-lyu/w-dispatch-ai/blob/master/src/providers.mjs) 檔頭。
286
+
275
287
  #### Options only for dispatchApiOpenaiCompat:
276
288
  | key | type | default | description |
277
289
  | --- | --- | --- | --- |
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * w-dispatch-ai v1.0.21
2
+ * w-dispatch-ai v1.0.22
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("child_process"),require("path"),require("fs")):"function"==typeof define&&define.amd?define(["child_process","path","fs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-dispatch-ai"]=t(e.child_process,e.path,e.fs)}(this,function(e,t,r){"use strict";var n="object"==typeof global&&global&&global.Object===Object&&global,o="object"==typeof self&&self&&self.Object===Object&&self,i=n||o||Function("return this")(),u=i.Symbol,l=Object.prototype,a=l.hasOwnProperty,s=l.toString,c=u?u.toStringTag:void 0;var f=Object.prototype.toString;var p=u?u.toStringTag:void 0;function d(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":p&&p 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 h(e){return null!=e&&"object"==typeof e}function y(e){return h(e)&&"[object Arguments]"==d(e)}var g=Object.prototype,v=g.hasOwnProperty,b=g.propertyIsEnumerable,m=y(function(){return arguments}())?y:function(e){return h(e)&&v.call(e,"callee")&&!b.call(e,"callee")},j=m,k=Array.isArray;var O="object"==typeof exports&&exports&&!exports.nodeType&&exports,_=O&&"object"==typeof module&&module&&!module.nodeType&&module,w=_&&_.exports===O?i.Buffer:void 0,x=(w?w.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 E(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 T="object"==typeof exports&&exports&&!exports.nodeType&&exports,N=T&&"object"==typeof module&&module&&!module.nodeType&&module,$=N&&N.exports===T&&n.process,D=function(){try{var e=N&&N.require&&N.require("util").types;return e||$&&$.binding&&$.binding("util")}catch(e){}}(),P=D&&D.isTypedArray,U=P?M(P):function(e){return h(e)&&E(e.length)&&!!I[d(e)]},F=Object.prototype.hasOwnProperty;function z(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&&!F.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 C(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||L)}function R(e,t){return function(r){return e(t(r))}}var V=R(Object.keys,Object),B=Object.prototype.hasOwnProperty;function J(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function K(e){if(!J(e))return!1;var t=d(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Y(e){return null!=e&&E(e.length)&&!K(e)}function W(e){return Y(e)?z(e):function(e){if(!C(e))return V(e);var t=[];for(var r in Object(e))B.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e)}function q(e){return"symbol"==typeof e||h(e)&&"[object Symbol]"==d(e)}var G=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,H=/^\w*$/;function Z(e,t){if(k(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!q(e))||(H.test(e)||!G.test(e)||null!=t&&e in Object(t))}var Q,X=i["__core-js_shared__"],ee=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var te=Function.prototype.toString;function re(e){if(null!=e){try{return te.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var ne=/^\[object .+?Constructor\]$/,oe=Function.prototype,ie=Object.prototype,ue=oe.toString,le=ie.hasOwnProperty,ae=RegExp("^"+ue.call(le).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function se(e){return!(!J(e)||(t=e,ee&&ee in t))&&(K(e)?ae:ne).test(re(e));var t}function ce(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return se(r)?r:void 0}var fe=ce(Object,"create");var pe=Object.prototype.hasOwnProperty;var de=Object.prototype.hasOwnProperty;function he(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 ge(e,t){for(var r=e.length;r--;)if(ye(e[r][0],t))return r;return-1}he.prototype.clear=function(){this.__data__=fe?fe(null):{},this.size=0},he.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},he.prototype.get=function(e){var t=this.__data__;if(fe){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return pe.call(t,e)?t[e]:void 0},he.prototype.has=function(e){var t=this.__data__;return fe?void 0!==t[e]:de.call(t,e)},he.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=fe&&void 0===t?"__lodash_hash_undefined__":t,this};var ve=Array.prototype.splice;function be(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])}}be.prototype.clear=function(){this.__data__=[],this.size=0},be.prototype.delete=function(e){var t=this.__data__,r=ge(t,e);return!(r<0)&&(r==t.length-1?t.pop():ve.call(t,r,1),--this.size,!0)},be.prototype.get=function(e){var t=this.__data__,r=ge(t,e);return r<0?void 0:t[r][1]},be.prototype.has=function(e){return ge(this.__data__,e)>-1},be.prototype.set=function(e,t){var r=this.__data__,n=ge(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var me=ce(i,"Map");function je(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 ke(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])}}ke.prototype.clear=function(){this.size=0,this.__data__={hash:new he,map:new(me||be),string:new he}},ke.prototype.delete=function(e){var t=je(this,e).delete(e);return this.size-=t?1:0,t},ke.prototype.get=function(e){return je(this,e).get(e)},ke.prototype.has=function(e){return je(this,e).has(e)},ke.prototype.set=function(e,t){var r=je(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function Oe(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(Oe.Cache||ke),r}Oe.Cache=ke;var _e,we,xe,Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ae=/\\(\\)?/g,Ee=(_e=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Se,function(e,r,n,o){t.push(n?o.replace(Ae,"$1"):r||e)}),t},we=Oe(_e,function(e){return 500===xe.size&&xe.clear(),e}),xe=we.cache,we),Ie=Ee;function Me(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 Te=u?u.prototype:void 0,Ne=Te?Te.toString:void 0;function $e(e){if("string"==typeof e)return e;if(k(e))return Me(e,$e)+"";if(q(e))return Ne?Ne.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function De(e){return null==e?"":$e(e)}function Pe(e,t){return k(e)?e:Z(e,t)?[e]:Ie(De(e))}function Ue(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Fe(e,t){for(var r=0,n=(t=Pe(t,e)).length;null!=e&&r<n;)e=e[Ue(t[r++])];return r&&r==n?e:void 0}function ze(e,t,r){var n=null==e?void 0:Fe(e,t);return void 0===n?r:n}function Le(e){var t=this.__data__=new be(e);this.size=t.size}Le.prototype.clear=function(){this.__data__=new be,this.size=0},Le.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Le.prototype.get=function(e){return this.__data__.get(e)},Le.prototype.has=function(e){return this.__data__.has(e)},Le.prototype.set=function(e,t){var r=this.__data__;if(r instanceof be){var n=r.__data__;if(!me||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new ke(n)}return r.set(e,t),this.size=r.size,this};var Ce=function(){try{var e=ce(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Re=Ce;function Ve(e,t,r){"__proto__"==t&&Re?Re(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Be=Object.prototype.hasOwnProperty;function Je(e,t,r){var n=e[t];Be.call(e,t)&&ye(n,r)&&(void 0!==r||t in e)||Ve(e,t,r)}function Ke(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?Ve(r,l,a):Je(r,l,a)}return r}var Ye=Object.prototype.hasOwnProperty;function We(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=C(e),r=[];for(var n in e)("constructor"!=n||!t&&Ye.call(e,n))&&r.push(n);return r}function qe(e){return Y(e)?z(e,!0):We(e)}var Ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,He=Ge&&"object"==typeof module&&module&&!module.nodeType&&module,Ze=He&&He.exports===Ge?i.Buffer:void 0,Qe=Ze?Ze.allocUnsafe:void 0;function Xe(){return[]}var et=Object.prototype.propertyIsEnumerable,tt=Object.getOwnPropertySymbols,rt=tt?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}(tt(e),function(t){return et.call(e,t)}))}:Xe,nt=rt;function ot(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var it=R(Object.getPrototypeOf,Object),ut=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)ot(t,nt(e)),e=it(e);return t}:Xe,lt=ut;function at(e,t,r){var n=t(e);return k(e)?n:ot(n,r(e))}function st(e){return at(e,W,nt)}function ct(e){return at(e,qe,lt)}var ft=ce(i,"DataView"),pt=ce(i,"Promise"),dt=ce(i,"Set"),ht=ce(i,"WeakMap"),yt="[object Map]",gt="[object Promise]",vt="[object Set]",bt="[object WeakMap]",mt="[object DataView]",jt=re(ft),kt=re(me),Ot=re(pt),_t=re(dt),wt=re(ht),xt=d;(ft&&xt(new ft(new ArrayBuffer(1)))!=mt||me&&xt(new me)!=yt||pt&&xt(pt.resolve())!=gt||dt&&xt(new dt)!=vt||ht&&xt(new ht)!=bt)&&(xt=function(e){var t=d(e),r="[object Object]"==t?e.constructor:void 0,n=r?re(r):"";if(n)switch(n){case jt:return mt;case kt:return yt;case Ot:return gt;case _t:return vt;case wt:return bt}return t});var St=xt,At=Object.prototype.hasOwnProperty;var Et=i.Uint8Array;function It(e){var t=new e.constructor(e.byteLength);return new Et(t).set(new Et(e)),t}var Mt=/\w*$/;var Tt=u?u.prototype:void 0,Nt=Tt?Tt.valueOf:void 0;function $t(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return It(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?It(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?It(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,Mt.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,Nt?Object(Nt.call(n)):{}}}var Dt=Object.create,Pt=function(){function e(){}return function(t){if(!J(t))return{};if(Dt)return Dt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Ut=Pt;var Ft=D&&D.isMap,zt=Ft?M(Ft):function(e){return h(e)&&"[object Map]"==St(e)};var Lt=D&&D.isSet,Ct=Lt?M(Lt):function(e){return h(e)&&"[object Set]"==St(e)},Rt="[object Arguments]",Vt="[object Function]",Bt="[object Object]",Jt={};function Kt(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]&&At.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=St(e),p=f==Vt||"[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==Bt||f==Rt||p&&!o){if(u=a||p?{}:function(e){return"function"!=typeof e.constructor||C(e)?{}:Ut(it(e))}(e),!l)return a?function(e,t){return Ke(e,lt(e),t)}(e,function(e,t){return e&&Ke(t,qe(t),e)}(u,e)):function(e,t){return Ke(e,nt(e),t)}(e,function(e,t){return e&&Ke(t,W(t),e)}(u,e))}else{if(!Jt[f])return o?e:{};u=$t(e,f,l)}}i||(i=new Le);var d=i.get(e);if(d)return d;i.set(e,u),Ct(e)?e.forEach(function(n){u.add(Kt(n,t,r,n,e,i))}):zt(e)&&e.forEach(function(n,o){u.set(o,Kt(n,t,r,o,e,i))});var h=c?void 0:(s?a?ct:st:a?qe:W)(e);return function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););}(h||e,function(n,o){h&&(n=e[o=n]),Je(u,o,Kt(n,t,r,o,e,i))}),u}function Yt(e,t){return t.length<2?e:Fe(e,function(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}(t,0,-1))}Jt[Rt]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object DataView]"]=Jt["[object Boolean]"]=Jt["[object Date]"]=Jt["[object Float32Array]"]=Jt["[object Float64Array]"]=Jt["[object Int8Array]"]=Jt["[object Int16Array]"]=Jt["[object Int32Array]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt[Bt]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object Symbol]"]=Jt["[object Uint8Array]"]=Jt["[object Uint8ClampedArray]"]=Jt["[object Uint16Array]"]=Jt["[object Uint32Array]"]=!0,Jt["[object Error]"]=Jt[Vt]=Jt["[object WeakMap]"]=!1;var Wt=Object.prototype.hasOwnProperty;function qt(e,t){var r=-1,n=(t=Pe(t,e)).length;if(!n)return!0;for(;++r<n;){var o=Ue(t[r]);if("__proto__"===o&&!Wt.call(e,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var i=Yt(e,t);return null==i||delete i[Ue(function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}(t))]}var Gt=Function.prototype,Ht=Object.prototype,Zt=Gt.toString,Qt=Ht.hasOwnProperty,Xt=Zt.call(Object);function er(e){return function(e){if(!h(e)||"[object Object]"!=d(e))return!1;var t=it(e);if(null===t)return!0;var r=Qt.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Zt.call(r)==Xt}(e)?void 0:e}var tr=u?u.isConcatSpreadable:void 0;function rr(e){return k(e)||j(e)||!!(tr&&e&&e[tr])}function nr(e,t,r,n,o){var i=-1,u=e.length;for(r||(r=rr),o||(o=[]);++i<u;){var l=e[i];t>0&&r(l)?t>1?nr(l,t-1,r,n,o):ot(o,l):n||(o[o.length]=l)}return o}function or(e){return(null==e?0:e.length)?nr(e,1):[]}var ir=Math.max;function ur(e){return e}var lr=Re?function(e,t){return Re(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:ur,ar=lr,sr=Date.now;var cr=function(e){var t=0,r=0;return function(){var n=sr(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ar),fr=cr;var pr=function(e){return fr(function(e,t,r){return t=ir(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=ir(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,or),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Me(t,function(t){return t=Pe(t,e),n||(n=t.length>1),t}),Ke(e,ct(e),r),n&&(r=Kt(r,7,er));for(var o=t.length;o--;)qt(r,t[o]);return r}),dr=pr;function hr(e){return"[object Object]"===Object.prototype.toString.call(e)}function yr(e){return"[object String]"===Object.prototype.toString.call(e)}function gr(e){return!(!yr(e)||""===e)}function vr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function br(e){return e!=e}function mr(e){let t=!1;if(gr(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(br(e))return!1;t=!0}return t}function jr(e=10){mr(e)||(e=10);let t=vr();return setTimeout(function(){t.resolve()},e),t}var kr=/\s/;var Or=/^\s+/;function _r(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&kr.test(e.charAt(t)););return t}(e)+1).replace(Or,""):e}var wr=/^[-+]0x[0-9a-f]+$/i,xr=/^0b[01]+$/i,Sr=/^0o[0-7]+$/i,Ar=parseInt;function Er(e){if("number"==typeof e)return e;if(q(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=_r(e);var r=xr.test(e);return r||Sr.test(e)?Ar(e.slice(2),r?2:8):wr.test(e)?NaN:+e}var Ir=1/0;function Mr(e){return e?(e=Er(e))===Ir||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Tr(e){var t=Mr(e),r=t%1;return t==t?r?t-r:t:0}var Nr=i.isFinite,$r=Math.min;var Dr=function(e){var t=Math[e];return function(e,r){if(e=Er(e),(r=null==r?0:$r(Tr(r),292))&&Nr(e)){var n=(De(e)+"e").split("e");return+((n=(De(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Pr=Dr;function Ur(e){if(!mr(e))return 0;return Mr(e)}function Fr(e){if(!mr(e))return 0;e=Ur(e);let t=Pr(e);return"0"===String(t)?0:t}function zr(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 Cr(e){return!!mr(e)&&(e=Ur(e),"number"==typeof(t=e)&&t==Tr(t));var t}function Rr(e){if(!Cr(e))return!1;return Fr(e)>0}function Vr(e){if(!Cr(e))return!1;return Fr(e)>=0}function Br(e,t){return gr(e)&&Vr(t)?0===(t=Fr(t))?"":e.substring(0,t):""}function Jr(e,t){if(!gr(e))return"";if(!Vr(t))return"";if(0===(t=Fr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Kr(e,t){return gr(e)&&Vr(t)?0===(t=Fr(t))?e:Jr(e,e.length-t):""}function Yr(e,t,r={}){if(!gr(e))return"";if(!Vr(t))return e;if(t=Fr(t),e.length<=t)return e;let n=ze(r,"funWithMsg"),o="";if(Lr(n)){let r=n(e,t);gr(r)&&(o=r)}return Br(e,t)+`...${o}`}function Wr(e,t={}){let r=ze(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function qr(e){return function(e,t={}){let r=ze(t,"fs");return!!Wr(e,{fs:r})&&!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink()}(e,{fs:r})}function Gr(e,t={}){let r=null,n=ze(t,"fs"),o="";try{o=n.readFileSync(e,"utf8")}catch(e){r=e}return null!==r?{error:r}:{success:o}}function Hr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Zr=e,Qr=Zr.spawn,Xr=Zr.exec;function en(e,t,r){var n={};try{Object.keys(e).forEach(function(r){e[r].forEach(function(e){n[e]||(tn(e,t),n[e]=1)}),n[r]||(tn(r,t),n[r]=1)})}catch(e){if(r)return r(e);throw e}if(r)return r()}function tn(e,t){try{process.kill(parseInt(e,10),t)}catch(e){if("ESRCH"!==e.code)throw e}}function rn(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,rn(i,t,r,n,o)}):0==Object.keys(r).length&&o()})}var nn=Hr(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":Xr("taskkill /pid "+e+" /T /F",r);break;case"darwin":rn(e,n,o,function(e){return Qr("pgrep",["-P",e])},function(){en(n,t,r)});break;default:rn(e,n,o,function(e){return Qr("ps",["-o","pid","--no-headers","--ppid",e])},function(){en(n,t,r)})}});function on(e){let n=ze(Gr(e,{fs:r}),"success","");if(!gr(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 qr(u)?u:null}function un(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=on(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 ln={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function an(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,p=function(e){if(Lr(e))return e;if(!gr(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(!gr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Kr(r,4);if(!mr(t))return!1;let n=Fr(t);if(!gr(e)||e.length<n)return!1}return!0}}(l),d=Date.now(),h=vr(),y={...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(y))e.includes(t.toLowerCase())&&delete y[t]}y={...y,...f}}let g=un(t,r),v=e.spawn(g.file,g.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:y,...g.opt}),b="",m="",j=new TextDecoder("utf-8"),k=new TextDecoder("utf-8"),O=!1,_=!1;v.stdout.on("data",e=>{let t=j.decode(e,{stream:!0});t&&(Lr(s)&&s(t),b.length<a&&(b+=t))}),v.stderr.on("data",e=>{let t=k.decode(e,{stream:!0});t&&(Lr(c)&&c(t),m.length<a&&(m+=t))}),v.stdin.on("error",()=>{}),void 0!==u&&v.stdin.write(u,"utf8"),v.stdin.end();let w=setTimeout(()=>{O||(_=!0,function(e){let t=vr();return nn(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}(v.pid).catch(()=>{}),setTimeout(()=>{O||(O=!0,h.resolve({ok:!1,stdout:Yr(b,500,ln),stderr:Yr(m,500,ln),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-d,pid:v.pid}))},3e3).unref())},o);return v.on("error",e=>{O||(O=!0,clearTimeout(w),h.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-d,pid:v.pid}))}),v.on("close",(e,t)=>{if(O)return;O=!0,clearTimeout(w);let r=j.decode();r&&b.length<a&&(b+=r);let n=k.decode();n&&m.length<a&&(m+=n);let i=Date.now()-d;_?h.resolve({ok:!1,stdout:Yr(b,500,ln),stderr:Yr(m,500,ln),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:v.pid}):0===e?!p||p(b)?h.resolve({ok:!0,stdout:b,stderr:m,code:0,error:"",durationMs:i,pid:v.pid}):h.resolve({ok:!1,stdout:Yr(b,500,ln),stderr:Yr(m,500,ln),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:v.pid}):h.resolve({ok:!1,stdout:Yr(b,500,ln),stderr:Yr(m,1e3,ln),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:v.pid})}),h}async function sn(e,t=[],r={}){if(!gr(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};zr(t)||(t=[]),hr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,u=ze(i,"cwd",null);gr(u)?i.cwd=u:i.cwd=process.cwd();let l=ze(i,"input",null);gr(l)?i.input=l:i.input=void 0;let a=ze(i,"env",null);hr(a)?i.env=a:i.env=void 0;let s=ze(i,"validate",null);Lr(s)||gr(s)?i.validate=s:i.validate=void 0;let c=ze(i,"onStdout",null);Lr(c)?i.onStdout=c:i.onStdout=void 0;let f=ze(i,"onStderr",null);Lr(f)?i.onStderr=f:i.onStderr=void 0,n=Vr(n)?Fr(n):0,o=Rr(o)?Fr(o):5e3;let p=ze(i,"timeoutMs",null);Rr(p)?i.timeoutMs=Fr(p):i.timeoutMs=12e4;let d,h=ze(i,"maxBuffer",null);Rr(h)?i.maxBuffer=Fr(h):i.maxBuffer=10485760;let y=0;for(let r=0;r<=n;r++){if(r>0){let e=Math.min(o*r,15e3);await jr(e)}if(d=await an(e,t,i),y=r+1,d.ok)return d.attempts=y,d;if(d.error.includes("ENOENT"))break;if(2===d.code)break}return d.attempts=y,d}function cn(...e){let t=[];for(let r of e)if(zr(r))for(let e of r)gr(e)&&t.push(e);else gr(r)&&t.push(r);return t}function fn(e,t="params"){return gr(e)||(e="unknown error"),gr(t)||(t="params"),{ok:!1,stdout:"",stderr:"",code:null,error:e,errorType:t,durationMs:0,attempts:0}}function pn(e){let t=ze(e,"error","");return gr(t)?0===t.indexOf("TIMEOUT")?"timeout":t.includes("ENOENT")||t.includes("ENAMETOOLONG")?"spawn":"OUTPUT_VALIDATION_FAILED"===t?"validation":"exec":"exec"}function dn(e){return!0===ze(e,"ok",!1)||gr(ze(e,"errorType",null))?e:{...e,errorType:pn(e)}}function hn(e,t){return Rr(e)?Fr(e):t}let yn=3e5,gn=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function vn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=ze(t,"exe",null);gr(r)||(r="opencode");let n=ze(t,"model",null),o=ze(t,"agent",null);gr(o)||(o="build");let i=ze(t,"extraArgs",null),u=cn("run",["--agent",o],gr(n)?["-m",n]:[],i),l=ze(t,"env",null);hr(l)||(l=void 0);let a=ze(t,"config",null);hr(a)&&(a=JSON.stringify(a)),gr(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=ze(t,"key",null),c=ze(t,"provider",null);gr(s)&&gr(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})});let f=hn(ze(t,"timeoutMs",null),yn),p=dr(t,gn);return dn(await sn(r,u,{...p,input:e,env:l,timeoutMs:f}))}function bn(e){return!0===(t=e)||!1===t||h(t)&&"[object Boolean]"==d(t);var t}let mn=["exe","model","skipPermissions","extraArgs","input"];async function jn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=ze(t,"exe",null);gr(r)||(r="claude");let n=ze(t,"model",null),o=ze(t,"skipPermissions",null);bn(o)||(o=!0);let i=ze(t,"extraArgs",null),u=cn("-p",o?"--dangerously-skip-permissions":[],gr(n)?["--model",n]:[],i),l=hn(ze(t,"timeoutMs",null),yn),a=dr(t,mn);return dn(await sn(r,u,{...a,input:e,timeoutMs:l}))}let kn=["exe","model","sandbox","extraArgs","input"];async function On(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=ze(t,"exe",null);gr(r)||(r="codex");let n=ze(t,"model",null),o=ze(t,"sandbox",null);gr(o)||(o="workspace-write");let i=ze(t,"extraArgs",null),u=cn("exec",["--sandbox",o],"--skip-git-repo-check",gr(n)?["-m",n]:[],i),l=hn(ze(t,"timeoutMs",null),yn),a=dr(t,kn);return dn(await sn(r,u,{...a,input:e,timeoutMs:l}))}let _n=yn,wn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function xn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");if(e.length>3e4)return fn(`prompt too long (${e.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=ze(t,"exe",null);gr(r)||(r="agy");let n=ze(t,"model",null),o=ze(t,"effort",null),i=ze(t,"skipPermissions",null);bn(i)||(i=!0);let u=hn(ze(t,"timeoutMs",null),_n),l=ze(t,"printTimeout",null);gr(l)||(l=`${Math.max(30,Math.floor(u/1e3)-30)}s`);let a=ze(t,"addDirs",null);if(!zr(a)){let e=ze(t,"cwd",null);gr(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)gr(e)&&s.push("--add-dir",e);let c=ze(t,"extraArgs",null),f=cn(i?"--dangerously-skip-permissions":[],["--print-timeout",l],gr(n)?["--model",n]:[],gr(o)?["--effort",o]:[],s,c,["--print",e]),p=dr(t,wn);try{return dn(await sn(r,f,{...p,timeoutMs:u}))}catch(e){return fn(`${e.code||"UNKNOWN"}: ${e.message}`,"spawn")}}let Sn=yn,An={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function En(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: ${ze(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return u({stderr:Yr(c,1e3,An),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let f=null,p="",d=null,h=null;try{let e=JSON.parse(c);f=ze(e,"choices.0.message.content",null),p=ze(e,"choices.0.finish_reason",""),d=ze(e,"choices.0.message.tool_calls",null),h=ze(e,"usage",null),hr(h)||(h=null)}catch{}return"tool_calls"===p||null!=d?u({stderr:Yr(c,1e3,An),code:s.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:h}):null==f?u({stderr:Yr(c,500,An),code:s.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:h}):("string"!=typeof f&&(f=JSON.stringify(f)),o&&!o(f)?u({stdout:Yr(f,500,An),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:h}):u({ok:!0,stdout:f,code:s.status,usage:h}))}async function In(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=ze(t,"baseURL",null);if(!gr(r))return fn("baseURL must be a non-empty string");let n=ze(t,"model",null);if(!gr(n))return fn("model must be a non-empty string");let o=ze(t,"key",null),i=ze(t,"system",null),u=ze(t,"body",null);hr(u)||(u={});let l=ze(t,"headers",null);hr(l)||(l={});let a=hn(ze(t,"timeoutMs",null),Sn),s=ze(t,"maxRetries",null);s=Vr(s)?Fr(s):0;let c=hn(ze(t,"retryDelayMs",null),5e3),f=function(e){if(Lr(e))return e;if(!gr(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(!gr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Kr(r,4);if(!mr(t))return!1;let n=Fr(t);if(!gr(e)||e.length<n)return!1}return!0}}(ze(t,"validate",null)),p=r.replace(/\/+$/,"")+"/chat/completions",d=[];gr(i)&&d.push({role:"system",content:i}),d.push({role:"user",content:e});let h={model:n,messages:d,...u},y={"Content-Type":"application/json",...l};gr(o)&&(y.Authorization=`Bearer ${o}`);let g=null,v=0;for(let e=0;e<=s;e++){if(e>0&&await jr(Math.min(c*e,15e3)),g=await En(p,y,h,a,f),v=e+1,g.ok)return g.attempts=v,g;let t=g.code;if(mr(t)&&t>=400&&t<500&&429!==t)break}return g.attempts=v,g}let Mn={opencode:vn,claude:jn,codex:On,antigravity:xn,"api-openai-compat":In};function Tn(e){return e!=e}function Nn(e){return null==e?[]:function(e,t){return Me(t,function(t){return e[t]})}(e,W(e))}var $n=Math.max;function Dn(e,t,r,n){e=Y(e)?e:Nn(e),r=r&&!n?Tr(r):0;var o=e.length;return r<0&&(r=$n(o+r,0)),function(e){return"string"==typeof e||!k(e)&&h(e)&&"[object String]"==d(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,Tn,r)}(e,t,r)>-1}async function Pn(e,t,r={}){let n=W(Mn);return gr(e)&&Dn(n,e)?(0,Mn[e])(t,r):fn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let Un=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],Fn=["id","keys","meta"],zn=yn,Ln={cursors:{}};function Cn(e){let t=ze(e,"error","");gr(t)||(t="");let r=ze(e,"code",null);return 0===t.indexOf("TIMEOUT")||(!!t.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===t||0===t.indexOf("unknown ai kind"))))}async function Rn(e,t={}){if(!gr(e))return{...fn("prompt must be a non-empty string"),tried:[]};let r=ze(t,"providers",null),n=zr(r)?r.filter(hr):[];if(0===n.length)return{...fn("providers must be a non-empty array"),tried:[]};let o=hn(ze(t,"budgetMs",null),null),i=null===o?null:Date.now()+o,u=hn(ze(t,"minAttemptMs",null),2e4),{state:l,saveState:a}=function(e){let t=hr(e)&&Lr(e.get)&&Lr(e.set),r=null;if(t)try{r=e.get()}catch{}return hr(r)||(r=t?{cursors:{}}:Ln),hr(r.cursors)||(r.cursors={}),hr(r.cooling)||(r.cooling={}),{state:r,saveState:()=>{if(t)try{e.set(r)}catch{}}}}(ze(t,"store",null)),s=hn(ze(t,"cooldownMs",null),0),c=ze(t,"coolDetect",null);Lr(c)||(c=null);let f=ze(t,"shouldStop",null);Lr(f)||(f=null);let p=()=>{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=ze(n,"id",null),a=gr(e)?ze(t.cooling,e,null):null;Rr(a)&&o-a<r?u.push(n):(gr(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 d=ze(t,"onEvent",null),h=e=>{if(Lr(d))try{d(e)}catch{}},y=dr(t,Un),g=[],v=null,b=null;for(let t=0;t<n.length;t++){let r=n[t],o=ze(r,"id",null),f=gr(o);f||(o=String(t));let d=ze(r,"kind",null),m=ze(r,"model",null),j=ze(r,"keys",null),k=zr(j)?j.filter(gr):[],O=k.length,_=dr(r,Fn),w=0;if(O>0){let e=ze(l.cursors,o,0);w=Rr(e)?Fr(e)%O:0}let x=O>0?O:1,S=!1;for(let t=0;t<x&&!S;t++){if(p())return h({type:"aborted",providerId:o,keyIndex:null,keyId:o}),g.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...fn("ABORTED","aborted"),tried:g};let r=O>0?(w+t)%O:null,n=null===r?o:`${o}#${r}`,j={...y,..._};O>0&&(j.key=k[r]);let x=hn(ze(j,"timeoutMs",null),zn);if(null!==i){let e=i-Date.now();if(e<u)return h({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...fn("budget exhausted","budget"),tried:g};x=Math.min(x,e)}j.timeoutMs=x,h({type:"try",providerId:o,keyIndex:r,keyId:n,kind:d,model:m});let A=await Pn(d,e,j);if(A.ok)return s>0&&f&&void 0!==l.cooling[o]&&(delete l.cooling[o],a()),O>0&&(l.cursors[o]=(r+1)%O,a()),h({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:d,model:m,tried:g};if(v=A,b={providerId:o,keyIndex:r,kind:d,model:m},s>0&&f){let e=429===A.code||gr(A.error)&&0===A.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(A)}catch{}e&&(l.cooling[o]=Date.now(),a(),h({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:A.error,cooldownMs:s}))}Cn(A)?(h({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):(h({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||fn("all providers failed","exec"),...b||{},tried:g}}function Vn(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(hr(e)){for(let t in e)return!1;return!0}return!1}(e)||(!!function(e){return!(!yr(e)||""!==e)}(e)||(!!function(e){return!!zr(e)&&0===e.length}(e)||!!br(e)))))}function Bn(e){return!!zr(e)&&(0!==e.length&&(1!==e.length||!Vn(e[0])))}function Jn(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 Kn=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),Yn=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function Wn(e,t={}){let r=Date.now();if(!gr(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",errorType:"params",ms:0,tried:[]};let n=ze(t,"providers",null),o=ze(t,"spec",null);if(!hr(n)||!hr(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=[ze(t,"use","")],n=ze(t,"fallback",null);Bn(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=ze(e,t,null);hr(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===ze(t,"rawText",!1),a=ze(t,"parse",null);Lr(a)||(a=Jn);let s=ze(t,"check",null);Lr(s)||(s=null);let c=ze(t,"promptPrefix",null);gr(c)||(c=""===c?"":Kn);let f=await Rn(c+e,{...dr(t,Yn),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:ze(t,"timeoutMs",null)||yn}),p=null;f.ok&&(p=l?String(f.stdout||"").trim():a(f.stdout));let d=ze(f,"providerId",null),h=ze(f,"keyIndex",null);return{ok:f.ok&&null!==p,json:p,providerId:d,keyIndex:h,keyId:null===h?d:`${d}#${h}`,ms:Date.now()-r,tried:ze(f,"tried",[]),usage:ze(f,"usage",null),error:f.ok?"":ze(f,"error","unknown error"),...f.ok?{}:{errorType:ze(f,"errorType","exec")}}}async function qn(e={}){let t=Date.now(),r=ze(e,"providers",null),n=ze(e,"task",""),o=ze(e,"agents",null),i=ze(e,"integrate",null),u=ze(e,"check",null),l=ze(e,"callOpt",{});if(!gr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!Bn(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=ze(e,"minCandidates",null);a=Rr(a)?Fr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:a,...s}=e;return Wn(n,{...l,...s,providers:r,spec:{use:t,fallback:o},check:Lr(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||!gr(ze(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:p,prompt:d,check:h,meta:y,...g}=i,v=Lr(d)?d(c):function(e,t={}){let r=ze(t,"schema",""),n=gr(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),b=await Wn(v,{...l,...g,providers:r,spec:{use:f,fallback:p},check:Lr(h)?h:u});return{ok:b.ok,result:b.ok?b.json:null,integrated:b.ok,agents:s,candidates:c,integrateDetail:b,totalMs:Date.now()-t,error:b.ok?"":`integrate failed: ${b.error}`}}let Gn=["id","use","fallback","prompt","check","meta"];async function Hn(e={}){let t=Date.now(),r=ze(e,"providers",null),n=ze(e,"input",null),o=ze(e,"stages",null),i=ze(e,"callOpt",{});if(!Bn(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=gr(ze(c,"id",""))?c.id:`stage${e+1}`;a.push(f);let p=ze(c,"prompt",null);if(!Lr(p))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 d=p({input:n,prev:s,results:u,index:e});if(!gr(d))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 h=dr(c,Gn),y=await Wn(d,{...i,...h,providers:r,spec:{use:ze(c,"use",""),fallback:ze(c,"fallback",null)},check:ze(c,"check",null)});if(l[f]=y,!y.ok)return{ok:!1,result:null,stages:l,results:u,order:a,failedStage:f,totalMs:Date.now()-t,error:`stage[${f}] failed: ${y.error}`};u[f]=y.json,s=y.json}return{ok:!0,result:s,stages:l,results:u,order:a,failedStage:null,totalMs:Date.now()-t,error:""}}let Zn=["stages","input"],Qn=["task","agents","integrate","check","schema","minCandidates"];var Xn=Array.prototype.join;function eo(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new ke;++t<r;)this.add(e[t])}function to(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function ro(e,t){return e.has(t)}eo.prototype.add=eo.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},eo.prototype.has=function(e){return this.__data__.has(e)};function no(e,t,r,n,o,i){var u=1&r,l=e.length,a=t.length;if(l!=a&&!(u&&a>l))return!1;var s=i.get(e),c=i.get(t);if(s&&c)return s==t&&c==e;var f=-1,p=!0,d=2&r?new eo:void 0;for(i.set(e,t),i.set(t,e);++f<l;){var h=e[f],y=t[f];if(n)var g=u?n(y,h,f,t,e,i):n(h,y,f,e,t,i);if(void 0!==g){if(g)continue;p=!1;break}if(d){if(!to(t,function(e,t){if(!ro(d,t)&&(h===e||o(h,e,r,n,i)))return d.push(t)})){p=!1;break}}else if(h!==y&&!o(h,y,r,n,i)){p=!1;break}}return i.delete(e),i.delete(t),p}function oo(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function io(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var uo=u?u.prototype:void 0,lo=uo?uo.valueOf:void 0;var ao=Object.prototype.hasOwnProperty;var so="[object Arguments]",co="[object Array]",fo="[object Object]",po=Object.prototype.hasOwnProperty;function ho(e,t,r,n,o,i){var u=k(e),l=k(t),a=u?co:St(e),s=l?co:St(t),c=(a=a==so?fo:a)==fo,f=(s=s==so?fo:s)==fo,p=a==s;if(p&&x(e)){if(!x(t))return!1;u=!0,c=!1}if(p&&!c)return i||(i=new Le),u||U(e)?no(e,t,r,n,o,i):function(e,t,r,n,o,i,u){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!i(new Et(e),new Et(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return ye(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var l=oo;case"[object Set]":var a=1&n;if(l||(l=io),e.size!=t.size&&!a)return!1;var s=u.get(e);if(s)return s==t;n|=2,u.set(e,t);var c=no(l(e),l(t),n,o,i,u);return u.delete(e),c;case"[object Symbol]":if(lo)return lo.call(e)==lo.call(t)}return!1}(e,t,a,r,n,o,i);if(!(1&r)){var d=c&&po.call(e,"__wrapped__"),h=f&&po.call(t,"__wrapped__");if(d||h){var y=d?e.value():e,g=h?t.value():t;return i||(i=new Le),o(y,g,r,n,i)}}return!!p&&(i||(i=new Le),function(e,t,r,n,o,i){var u=1&r,l=st(e),a=l.length;if(a!=st(t).length&&!u)return!1;for(var s=a;s--;){var c=l[s];if(!(u?c in t:ao.call(t,c)))return!1}var f=i.get(e),p=i.get(t);if(f&&p)return f==t&&p==e;var d=!0;i.set(e,t),i.set(t,e);for(var h=u;++s<a;){var y=e[c=l[s]],g=t[c];if(n)var v=u?n(g,y,c,t,e,i):n(y,g,c,e,t,i);if(!(void 0===v?y===g||o(y,g,r,n,i):v)){d=!1;break}h||(h="constructor"==c)}if(d&&!h){var b=e.constructor,m=t.constructor;b==m||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof m&&m instanceof m||(d=!1)}return i.delete(e),i.delete(t),d}(e,t,r,n,o,i))}function yo(e,t,r,n,o){return e===t||(null==e||null==t||!h(e)&&!h(t)?e!=e&&t!=t:ho(e,t,r,n,yo,o))}function go(e){return e==e&&!J(e)}function vo(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function bo(e){var t=function(e){for(var t=W(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,go(o)]}return t}(e);return 1==t.length&&t[0][2]?vo(t[0][0],t[0][1]):function(r){return r===e||function(e,t,r,n){var o=r.length,i=o,u=!n;if(null==e)return!i;for(e=Object(e);o--;){var l=r[o];if(u&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++o<i;){var a=(l=r[o])[0],s=e[a],c=l[1];if(u&&l[2]){if(void 0===s&&!(a in e))return!1}else{var f=new Le;if(n)var p=n(s,c,a,e,t,f);if(!(void 0===p?yo(c,s,3,n,f):p))return!1}}return!0}(r,e,t)}}function mo(e,t){return null!=e&&t in Object(e)}function jo(e,t){return null!=e&&function(e,t,r){for(var n=-1,o=(t=Pe(t,e)).length,i=!1;++n<o;){var u=Ue(t[n]);if(!(i=null!=e&&r(e,u)))break;e=e[u]}return i||++n!=o?i:!!(o=null==e?0:e.length)&&E(o)&&A(u,o)&&(k(e)||j(e))}(e,t,mo)}function ko(e){return Z(e)?(t=Ue(e),function(e){return null==e?void 0:e[t]}):function(e){return function(t){return Fe(t,e)}}(e);var t}function Oo(e){return"function"==typeof e?e:null==e?ur:"object"==typeof e?k(e)?function(e,t){return Z(e)&&go(t)?vo(Ue(e),t):function(r){var n=ze(r,e);return void 0===n&&n===t?jo(r,e):yo(t,n,3)}}(e[0],e[1]):bo(e):ko(e)}var _o,wo=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),u=i.length;u--;){var l=i[_o?u:++n];if(!1===t(o[l],l,o))break}return e};var xo=function(e,t){return function(r,n){if(null==r)return r;if(!Y(r))return e(r,n);for(var o=r.length,i=t?o:-1,u=Object(r);(t?i--:++i<o)&&!1!==n(u[i],i,u););return r}}(function(e,t){return e&&wo(e,t,W)}),So=xo;function Ao(e,t){var r=-1,n=Y(e)?Array(e.length):[];return So(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function Eo(e,t){return gr(e)&&gr(t)?function(e,t){if(e=e.replace(/\s+/g,""),t=t.replace(/\s+/g,""),!e.length&&!t.length)return 1;if(!e.length||!t.length)return 0;if(e===t)return 1;if(1===e.length&&1===t.length)return 0;if(e.length<2||t.length<2)return 0;let r=new Map;for(let t=0;t<e.length-1;t++){const n=e.substring(t,t+2),o=r.has(n)?r.get(n)+1:1;r.set(n,o)}let n=0;for(let e=0;e<t.length-1;e++){const o=t.substring(e,e+2),i=r.has(o)?r.get(o):0;i>0&&(r.set(o,i-1),n++)}return 2*n/(e.length+t.length-2)}(e,t):0}function Io(e){if(!(gr(e)||mr(e)||q(e)||function(e){return"[object BigInt]"===Object.prototype.toString.call(e)}(e)))return"";let t="";try{t=String(e)}catch(e){}try{t=e.toString()}catch(e){}return t}function Mo(e,t){let r="";if(gr(e)||mr(e))r=Io(e);else{if(!Bn(e))return{};o="",r=null==(n=e)?"":Xn.call(n,o)}var n,o,i,u;return mr(t)&&(t=Io(t)),gr(t)&&(t=[t]),Bn(t)?(u=function(e){return Io(e)},function(e,t){let r=[],n=0;for(let o=0;o<t.length;o++){let i=t[o],u=Eo(e,i);r.push({target:i,rating:u}),u>r[n].rating&&(n=o)}return{ratings:r,bestMatch:r[n],bestMatchIndex:n}}(r,t=(k(i=t)?Me:Ao)(i,Oo(u)))):{}}function To(e){let t=null,n=Gr(e,{fs:r});if(n.error)return n;let o=n.success,i=null;try{i=JSON.parse(o)}catch(e){t=e}return null!==t?{error:t}:{success:i}}function No(e,t){return gr(e)&&Vr(t)?0===(t=Fr(t))?e:Br(e,e.length-t):""}function $o(e){if(!gr(e))return{path:"",isRoot:!1};for(;e.indexOf("\\\\")>=0;)e=e.replace("\\\\","\\");for(;e.indexOf("//")>=0;)e=e.replace("//","/");if(":"===Jr(e,1))return{path:`${e}\\`,isRoot:!0};if("\\"===Jr(e,1)){let t=No(e,1);return":"===Jr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Jr(e,1)){let t=No(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function Do(e){if(!gr(e))return"";let t=$o(e);if(t.isRoot)return t.path;let r=function(e){if(!gr(e))return"";let t=$o(e);if(t.isRoot)return t.path;let r=t.path;try{r=r.split("\\").pop().split("/").pop()}catch(e){}return r}(e=t.path);if(!gr(r))return e;let n=$o(e=No(e,r.length));return n.isRoot,n.path}function Po(e,t={}){let r=ze(t,"fs");if(!Wr(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function Uo(e,t,r={}){let n=null,o=ze(r,"fs"),i=Do(e);Po(i,{fs:o})||function(e,t={}){let r=ze(t,"fs");if(Po(e,{fs:r}))return{success:"input folder is already exists: "+e};if(Wr(e,{fs:r}))return{error:"input path already exists: "+e};try{r.mkdirSync(e,{recursive:!0})}catch(e){return{error:e}}}(i,{fs:o});try{o.writeFileSync(e,t,"utf8")}catch(e){n=e}return null!==n?{error:n}:{success:e}}function Fo(e,t,n={}){let o=null;if(!hr(t)&&!zr(t))return{error:"inp is not an object or array"};let i=ze(n,"useFormat",null);bn(i)||(i=!1);let u="";try{u=i?JSON.stringify(t,null,2):JSON.stringify(t)}catch(e){o=e}return null!==o?{error:o}:Uo(e,u,{fs:r})}let zo={KINDS:W(Mn),NO_SIDE_EFFECT:Kn,dispatchAi:Pn,dispatchAiFallback:Rn,dispatchAiWkf:function(e={}){let t=ze(e,"providers",null);if(!hr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=ze(e,"defaults",null);return hr(r)||(r={}),{providers:t,callAi:(e,n={})=>Wn(e,{...r,...n,providers:t}),runFanout:(e={})=>qn({...e,providers:t,callOpt:{...r,...ze(e,"callOpt",{})}}),runRolePipeline:(e={})=>Hn({...e,providers:t,callOpt:{...r,...ze(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await qn(dr(e,Zn));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await Hn({...dr(e,Qn),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,...ze(e,"callOpt",{})}})}},dispatchOpencode:vn,dispatchClaude:jn,dispatchCodex:On,dispatchAntigravity:xn,dispatchApiOpenaiCompat:In,providers:[{id:"oc:opencode/deepseek-v4-flash-free",model:"opencode/deepseek-v4-flash-free",kind:"opencode",envVar:"OPENCODE_KEYS",provider:"opencode",config:{permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:agnes-ai/agnes-2.5-flash",model:"agnes-ai/agnes-2.5-flash",kind:"opencode",envVar:"AGNES_KEYS",provider:"agnes-ai",config:{provider:{"agnes-ai":{npm:"@ai-sdk/openai-compatible",name:"Agnes",options:{baseURL:"https://apihub.agnes-ai.com/v1"},models:{"agnes-2.5-flash":{name:"Agnes 2.5 Flash"}}}},permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:poolside/poolside/laguna-s-2.1",model:"poolside/poolside/laguna-s-2.1",kind:"opencode",envVar:"POOLSIDE_KEYS",provider:"poolside",config:{provider:{poolside:{npm:"@ai-sdk/openai-compatible",name:"Poolside",options:{baseURL:"https://inference.poolside.ai/v1"},models:{"poolside/laguna-s-2.1":{name:"Laguna S 2.1"}}}},permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"agy:gemini-3.7-flash-high",model:"gemini-3.7-flash-high",kind:"antigravity",addDirs:["."],skipPermissions:!1},{id:"claude:sonnet",model:"sonnet",kind:"claude",extraArgs:["--disallowedTools","Write,Edit,NotebookEdit,Bash"]},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only"},{id:"zen:deepseek-v4-flash-free",model:"deepseek-v4-flash-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:laguna-s-2.1-free",model:"laguna-s-2.1-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:x-preview-f-free",model:"x-preview-f-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:muse-spark-1.2-contributor-free",model:"muse-spark-1.2-contributor-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:mimo-v2.5-free",model:"mimo-v2.5-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:hy3-free",model:"hy3-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:nemotron-3-ultra-free",model:"nemotron-3-ultra-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:nemotron-3.5-lightning-free",model:"nemotron-3.5-lightning-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=ze(t,"env",null);hr(r)||(r="undefined"!=typeof process&&process&&hr(process.env)?process.env:{});let n=zr(e)?e.filter(hr):[],o=ze(t,"pick",null),i=[],u=n;if(Bn(o)){u=[];for(let e of o){let t=n.find(t=>ze(t,"id",null)===e);t?u.push(t):i.push(String(e))}}let l={};if(i.length>0){let e=n.map(e=>ze(e,"id",null)).filter(gr);for(let t of i)l[t]=e.length>0?ze(Mo(t,e),"bestMatch.target",null):null}let a=[],s=[];for(let e of u){let t=ze(e,"envVar",null);if(!gr(t)||Bn(ze(e,"keys",null))){a.push(dr(e,["envVar"]));continue}let n=String(ze(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?a.push({...dr(e,["envVar"]),keys:n}):s.push({id:ze(e,"id",""),envVar:t})}let c=ze(t,"exes",null),f=ze(t,"patch",null);(hr(c)||hr(f))&&(a=a.map(e=>{let t=e,r=hr(c)?ze(c,ze(t,"kind",""),null):null;gr(r)&&!gr(ze(t,"exe",null))&&(t={...t,exe:r});let n=hr(f)?ze(f,ze(t,"id",""),null):null;return hr(n)&&(t={...t,...n}),t}));let p={};for(let e of a)p[e.id]=e;return{providers:a,table:p,skipped:s,missing:i,hints:l}},readEnvFile:function(e){let t={},n="";try{n=r.readFileSync(e,"utf8")}catch(e){return t}for(let e of n.split(/\r?\n/)){let r=e.match(/^\s*([A-Za-z0-9_]+)\s*=\s*(.*)$/);r&&(t[r[1]]=r[2].trim().replace(/^(["'])(.*)\1$/,"$2"))}return t},budgetFor:function(e){if(!zr(e))return 0;let t=0;for(let r of e)t+=hn(ze(r,"timeoutMs",null),yn);return t},createFileStore:function(e={}){let r=ze(e,"file",null);if(!gr(r)){let n=ze(e,"dir",null);if(!gr(n))throw new Error("createFileStore: file or dir is required");let o=ze(e,"name",null);r=t.join(n,gr(o)?o:"ai-cursor.json")}let n=ze(e,"ownKeys",null);Bn(n)||(n=["at"]);let o=ze(e,"stamp",null);return Lr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=To(r),t=void 0!==ze(e,"error",void 0)?null:ze(e,"success",null);if(!hr(t))return{};let o={...t};for(let e of n)delete o[e];return o},set:e=>{let t={...hr(e)?e:{},at:o()};Fo(r,t,{useFormat:!0})}}},createUsageCounter:function(e={}){let r=ze(e,"file",null);if(!gr(r)){let n=ze(e,"dir",null);if(!gr(n))throw new Error("createUsageCounter: file or dir is required");let o=ze(e,"name",null);r=t.join(n,gr(o)?o:"ai-usage.json")}let n=ze(e,"getDate",null);Lr(n)||(n=()=>{let e=new Date,t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`});let o=ze(e,"keepDays",null);Rr(o)||(o=14);let i=ze(e,"keyOf",null);Lr(i)||(i=e=>ze(e,"keyId",null)||ze(e,"providerId",""));let u=()=>{let e=To(r),t=void 0!==ze(e,"error",void 0)?null:ze(e,"success",null);return hr(t)?t:{}},l=(e,t=1)=>{if(!gr(e))return;let i=u(),l=n(),a=hr(i[l])?i[l]:{};a[e]=(Number(a[e])||0)+t,i[l]=a;let s=Object.keys(i).sort().slice(-o),c={};for(let e of s)c[e]=i[e];Fo(r,c,{useFormat:!0})};return{file:r,onEvent:e=>{"try"===ze(e,"type",null)&&l(i(e))},bump:l,today:()=>{let e=u(),t=n(),r=hr(e[t])?e[t]:{};return{today:t,byKey:r,total:Object.values(r).reduce((e,t)=>e+(Number(t)||0),0)}}}},salvageTruncatedArray:function(e){let t=String(e||""),r=t.indexOf("[");if(r<0)return null;let n=0,o=!1,i=!1,u=-1;for(let e=r;e<t.length;e++){let r=t[e];if(i)i=!1;else if(o)"\\"===r?i=!0:'"'===r&&(o=!1);else if('"'!==r){if("["===r||"{"===r)n++;else if(("]"===r||"}"===r)&&(n--,1===n&&"}"===r&&(u=e),0===n))return null}else o=!0}if(u<0)return null;try{let e=JSON.parse(t.slice(r,u+1)+"]");return Array.isArray(e)&&e.length>0?e:null}catch(e){return null}}};return zo});
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")},k=b,j=Array.isArray;var O="object"==typeof exports&&exports&&!exports.nodeType&&exports,_=O&&"object"==typeof module&&module&&!module.nodeType&&module,w=_&&_.exports===O?i.Buffer:void 0,S=(w?w.isBuffer:void 0)||function(){return!1},x=/^(?:0|[1-9]\d*)$/;function E(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&x.test(e))&&e>-1&&e%1==0&&e<t}function A(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var T={};function I(e){return function(t){return e(t)}}T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T["[object Arguments]"]=T["[object Array]"]=T["[object ArrayBuffer]"]=T["[object Boolean]"]=T["[object DataView]"]=T["[object Date]"]=T["[object Error]"]=T["[object Function]"]=T["[object Map]"]=T["[object Number]"]=T["[object Object]"]=T["[object RegExp]"]=T["[object Set]"]=T["[object String]"]=T["[object WeakMap]"]=!1;var M="object"==typeof exports&&exports&&!exports.nodeType&&exports,N=M&&"object"==typeof module&&module&&!module.nodeType&&module,D=N&&N.exports===M&&n.process,$=function(){try{var e=N&&N.require&&N.require("util").types;return e||D&&D.binding&&D.binding("util")}catch(e){}}(),P=$&&$.isTypedArray,U=P?I(P):function(e){return y(e)&&A(e.length)&&!!T[p(e)]},L=Object.prototype.hasOwnProperty;function R(e,t){var r=j(e),n=!r&&k(e),o=!r&&!n&&S(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&&!L.call(e,s)||u&&("length"==s||o&&("offset"==s||"parent"==s)||i&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||E(s,a))||l.push(s);return l}var C=Object.prototype;function F(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||C)}function z(e,t){return function(r){return e(t(r))}}var V=z(Object.keys,Object),B=Object.prototype.hasOwnProperty;function J(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function K(e){if(!J(e))return!1;var t=p(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Y(e){return null!=e&&A(e.length)&&!K(e)}function W(e){return Y(e)?R(e):function(e){if(!F(e))return V(e);var t=[];for(var r in Object(e))B.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 q=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,G=/^\w*$/;function Z(e,t){if(j(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!H(e))||(G.test(e)||!q.test(e)||null!=t&&e in Object(t))}var Q,X=i["__core-js_shared__"],ee=(Q=/[^.]+$/.exec(X&&X.keys&&X.keys.IE_PROTO||""))?"Symbol(src)_1."+Q:"";var te=Function.prototype.toString;function re(e){if(null!=e){try{return te.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var ne=/^\[object .+?Constructor\]$/,oe=Function.prototype,ie=Object.prototype,ue=oe.toString,le=ie.hasOwnProperty,ae=RegExp("^"+ue.call(le).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function se(e){return!(!J(e)||(t=e,ee&&ee in t))&&(K(e)?ae:ne).test(re(e));var t}function ce(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return se(r)?r:void 0}var fe=ce(Object,"create");var de=Object.prototype.hasOwnProperty;var pe=Object.prototype.hasOwnProperty;function ye(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 he(e,t){return e===t||e!=e&&t!=t}function ge(e,t){for(var r=e.length;r--;)if(he(e[r][0],t))return r;return-1}ye.prototype.clear=function(){this.__data__=fe?fe(null):{},this.size=0},ye.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},ye.prototype.get=function(e){var t=this.__data__;if(fe){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return de.call(t,e)?t[e]:void 0},ye.prototype.has=function(e){var t=this.__data__;return fe?void 0!==t[e]:pe.call(t,e)},ye.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=fe&&void 0===t?"__lodash_hash_undefined__":t,this};var ve=Array.prototype.splice;function me(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])}}me.prototype.clear=function(){this.__data__=[],this.size=0},me.prototype.delete=function(e){var t=this.__data__,r=ge(t,e);return!(r<0)&&(r==t.length-1?t.pop():ve.call(t,r,1),--this.size,!0)},me.prototype.get=function(e){var t=this.__data__,r=ge(t,e);return r<0?void 0:t[r][1]},me.prototype.has=function(e){return ge(this.__data__,e)>-1},me.prototype.set=function(e,t){var r=this.__data__,n=ge(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var be=ce(i,"Map");function ke(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 ye,map:new(be||me),string:new ye}},je.prototype.delete=function(e){var t=ke(this,e).delete(e);return this.size-=t?1:0,t},je.prototype.get=function(e){return ke(this,e).get(e)},je.prototype.has=function(e){return ke(this,e).has(e)},je.prototype.set=function(e,t){var r=ke(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function Oe(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(Oe.Cache||je),r}Oe.Cache=je;var _e,we,Se,xe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ee=/\\(\\)?/g,Ae=(_e=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(xe,function(e,r,n,o){t.push(n?o.replace(Ee,"$1"):r||e)}),t},we=Oe(_e,function(e){return 500===Se.size&&Se.clear(),e}),Se=we.cache,we),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,Ne=Me?Me.toString:void 0;function De(e){if("string"==typeof e)return e;if(j(e))return Ie(e,De)+"";if(H(e))return Ne?Ne.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function $e(e){return null==e?"":De(e)}function Pe(e,t){return j(e)?e:Z(e,t)?[e]:Te($e(e))}function Ue(e){if("string"==typeof e||H(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Le(e,t){for(var r=0,n=(t=Pe(t,e)).length;null!=e&&r<n;)e=e[Ue(t[r++])];return r&&r==n?e:void 0}function Re(e,t,r){var n=null==e?void 0:Le(e,t);return void 0===n?r:n}function Ce(e){var t=this.__data__=new me(e);this.size=t.size}Ce.prototype.clear=function(){this.__data__=new me,this.size=0},Ce.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Ce.prototype.get=function(e){return this.__data__.get(e)},Ce.prototype.has=function(e){return this.__data__.has(e)},Ce.prototype.set=function(e,t){var r=this.__data__;if(r instanceof me){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 Fe=function(){try{var e=ce(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ze=Fe;function Ve(e,t,r){"__proto__"==t&&ze?ze(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Be=Object.prototype.hasOwnProperty;function Je(e,t,r){var n=e[t];Be.call(e,t)&&he(n,r)&&(void 0!==r||t in e)||Ve(e,t,r)}function Ke(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?Ve(r,l,a):Je(r,l,a)}return r}var Ye=Object.prototype.hasOwnProperty;function We(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=F(e),r=[];for(var n in e)("constructor"!=n||!t&&Ye.call(e,n))&&r.push(n);return r}function He(e){return Y(e)?R(e,!0):We(e)}var qe="object"==typeof exports&&exports&&!exports.nodeType&&exports,Ge=qe&&"object"==typeof module&&module&&!module.nodeType&&module,Ze=Ge&&Ge.exports===qe?i.Buffer:void 0,Qe=Ze?Ze.allocUnsafe:void 0;function Xe(){return[]}var et=Object.prototype.propertyIsEnumerable,tt=Object.getOwnPropertySymbols,rt=tt?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}(tt(e),function(t){return et.call(e,t)}))}:Xe,nt=rt;function ot(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var it=z(Object.getPrototypeOf,Object),ut=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)ot(t,nt(e)),e=it(e);return t}:Xe,lt=ut;function at(e,t,r){var n=t(e);return j(e)?n:ot(n,r(e))}function st(e){return at(e,W,nt)}function ct(e){return at(e,He,lt)}var ft=ce(i,"DataView"),dt=ce(i,"Promise"),pt=ce(i,"Set"),yt=ce(i,"WeakMap"),ht="[object Map]",gt="[object Promise]",vt="[object Set]",mt="[object WeakMap]",bt="[object DataView]",kt=re(ft),jt=re(be),Ot=re(dt),_t=re(pt),wt=re(yt),St=p;(ft&&St(new ft(new ArrayBuffer(1)))!=bt||be&&St(new be)!=ht||dt&&St(dt.resolve())!=gt||pt&&St(new pt)!=vt||yt&&St(new yt)!=mt)&&(St=function(e){var t=p(e),r="[object Object]"==t?e.constructor:void 0,n=r?re(r):"";if(n)switch(n){case kt:return bt;case jt:return ht;case Ot:return gt;case _t:return vt;case wt:return mt}return t});var xt=St,Et=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,Nt=Mt?Mt.valueOf:void 0;function Dt(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,Nt?Object(Nt.call(n)):{}}}var $t=Object.create,Pt=function(){function e(){}return function(t){if(!J(t))return{};if($t)return $t(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Ut=Pt;var Lt=$&&$.isMap,Rt=Lt?I(Lt):function(e){return y(e)&&"[object Map]"==xt(e)};var Ct=$&&$.isSet,Ft=Ct?I(Ct):function(e){return y(e)&&"[object Set]"==xt(e)},zt="[object Arguments]",Vt="[object Function]",Bt="[object Object]",Jt={};function Kt(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=j(e);if(c){if(u=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&Et.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==Vt||"[object GeneratorFunction]"==f;if(S(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==Bt||f==zt||d&&!o){if(u=a||d?{}:function(e){return"function"!=typeof e.constructor||F(e)?{}:Ut(it(e))}(e),!l)return a?function(e,t){return Ke(e,lt(e),t)}(e,function(e,t){return e&&Ke(t,He(t),e)}(u,e)):function(e,t){return Ke(e,nt(e),t)}(e,function(e,t){return e&&Ke(t,W(t),e)}(u,e))}else{if(!Jt[f])return o?e:{};u=Dt(e,f,l)}}i||(i=new Ce);var p=i.get(e);if(p)return p;i.set(e,u),Ft(e)?e.forEach(function(n){u.add(Kt(n,t,r,n,e,i))}):Rt(e)&&e.forEach(function(n,o){u.set(o,Kt(n,t,r,o,e,i))});var y=c?void 0:(s?a?ct:st:a?He:W)(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]),Je(u,o,Kt(n,t,r,o,e,i))}),u}function Yt(e,t){return t.length<2?e:Le(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))}Jt[zt]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object DataView]"]=Jt["[object Boolean]"]=Jt["[object Date]"]=Jt["[object Float32Array]"]=Jt["[object Float64Array]"]=Jt["[object Int8Array]"]=Jt["[object Int16Array]"]=Jt["[object Int32Array]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt[Bt]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object Symbol]"]=Jt["[object Uint8Array]"]=Jt["[object Uint8ClampedArray]"]=Jt["[object Uint16Array]"]=Jt["[object Uint32Array]"]=!0,Jt["[object Error]"]=Jt[Vt]=Jt["[object WeakMap]"]=!1;var Wt=Object.prototype.hasOwnProperty;function Ht(e,t){var r=-1,n=(t=Pe(t,e)).length;if(!n)return!0;for(;++r<n;){var o=Ue(t[r]);if("__proto__"===o&&!Wt.call(e,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var i=Yt(e,t);return null==i||delete i[Ue(function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}(t))]}var qt=Function.prototype,Gt=Object.prototype,Zt=qt.toString,Qt=Gt.hasOwnProperty,Xt=Zt.call(Object);function er(e){return function(e){if(!y(e)||"[object Object]"!=p(e))return!1;var t=it(e);if(null===t)return!0;var r=Qt.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Zt.call(r)==Xt}(e)?void 0:e}var tr=u?u.isConcatSpreadable:void 0;function rr(e){return j(e)||k(e)||!!(tr&&e&&e[tr])}function nr(e,t,r,n,o){var i=-1,u=e.length;for(r||(r=rr),o||(o=[]);++i<u;){var l=e[i];t>0&&r(l)?t>1?nr(l,t-1,r,n,o):ot(o,l):n||(o[o.length]=l)}return o}function or(e){return(null==e?0:e.length)?nr(e,1):[]}var ir=Math.max;function ur(e){return e}var lr=ze?function(e,t){return ze(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:ur,ar=lr,sr=Date.now;var cr=function(e){var t=0,r=0;return function(){var n=sr(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ar),fr=cr;var dr=function(e){return fr(function(e,t,r){return t=ir(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=ir(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,or),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Ie(t,function(t){return t=Pe(t,e),n||(n=t.length>1),t}),Ke(e,ct(e),r),n&&(r=Kt(r,7,er));for(var o=t.length;o--;)Ht(r,t[o]);return r}),pr=dr;function yr(e){return"[object Object]"===Object.prototype.toString.call(e)}function hr(e){return"[object String]"===Object.prototype.toString.call(e)}function gr(e){return!(!hr(e)||""===e)}function vr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function mr(e){return e!=e}function br(e){let t=!1;if(gr(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(mr(e))return!1;t=!0}return t}function kr(e=10){br(e)||(e=10);let t=vr();return setTimeout(function(){t.resolve()},e),t}var jr=/\s/;var Or=/^\s+/;function _r(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&jr.test(e.charAt(t)););return t}(e)+1).replace(Or,""):e}var wr=/^[-+]0x[0-9a-f]+$/i,Sr=/^0b[01]+$/i,xr=/^0o[0-7]+$/i,Er=parseInt;function Ar(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=_r(e);var r=Sr.test(e);return r||xr.test(e)?Er(e.slice(2),r?2:8):wr.test(e)?NaN:+e}var Tr=1/0;function Ir(e){return e?(e=Ar(e))===Tr||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Mr(e){var t=Ir(e),r=t%1;return t==t?r?t-r:t:0}var Nr=i.isFinite,Dr=Math.min;var $r=function(e){var t=Math[e];return function(e,r){if(e=Ar(e),(r=null==r?0:Dr(Mr(r),292))&&Nr(e)){var n=($e(e)+"e").split("e");return+((n=($e(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Pr=$r;function Ur(e){if(!br(e))return 0;return Ir(e)}function Lr(e){if(!br(e))return 0;e=Ur(e);let t=Pr(e);return"0"===String(t)?0:t}function Rr(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!!br(e)&&(e=Ur(e),"number"==typeof(t=e)&&t==Mr(t));var t}function zr(e){if(!Fr(e))return!1;return Lr(e)>0}function Vr(e){if(!Fr(e))return!1;return Lr(e)>=0}function Br(e,t){return gr(e)&&Vr(t)?0===(t=Lr(t))?"":e.substring(0,t):""}function Jr(e,t){if(!gr(e))return"";if(!Vr(t))return"";if(0===(t=Lr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Kr(e,t){return gr(e)&&Vr(t)?0===(t=Lr(t))?e:Jr(e,e.length-t):""}function Yr(e,t,r={}){if(!gr(e))return"";if(!Vr(t))return e;if(t=Lr(t),e.length<=t)return e;let n=Re(r,"funWithMsg"),o="";if(Cr(n)){let r=n(e,t);gr(r)&&(o=r)}return Br(e,t)+`...${o}`}function Wr(e,t={}){let r=Re(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function Hr(e){return function(e,t={}){let r=Re(t,"fs");return!!Wr(e,{fs:r})&&!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink()}(e,{fs:r})}function qr(e,t={}){let r=null,n=Re(t,"fs"),o="";try{o=n.readFileSync(e,"utf8")}catch(e){r=e}return null!==r?{error:r}:{success:o}}function Gr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Zr=e,Qr=Zr.spawn,Xr=Zr.exec;function en(e,t,r){var n={};try{Object.keys(e).forEach(function(r){e[r].forEach(function(e){n[e]||(tn(e,t),n[e]=1)}),n[r]||(tn(r,t),n[r]=1)})}catch(e){if(r)return r(e);throw e}if(r)return r()}function tn(e,t){try{process.kill(parseInt(e,10),t)}catch(e){if("ESRCH"!==e.code)throw e}}function rn(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,rn(i,t,r,n,o)}):0==Object.keys(r).length&&o()})}var nn=Gr(function(e,t,r){if("function"==typeof t&&void 0===r&&(r=t,t=void 0),e=parseInt(e),Number.isNaN(e)){if(r)return r(new Error("pid must be a number"));throw new Error("pid must be a number")}var n={},o={};switch(n[e]=[],o[e]=1,process.platform){case"win32":Xr("taskkill /pid "+e+" /T /F",r);break;case"darwin":rn(e,n,o,function(e){return Qr("pgrep",["-P",e])},function(){en(n,t,r)});break;default:rn(e,n,o,function(e){return Qr("ps",["-o","pid","--no-headers","--ppid",e])},function(){en(n,t,r)})}});function on(e){let n=Re(qr(e,{fs:r}),"success","");if(!gr(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 Hr(u)?u:null}function un(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=on(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 ln={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function an(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(!gr(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(!gr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Kr(r,4);if(!br(t))return!1;let n=Lr(t);if(!gr(e)||e.length<n)return!1}return!0}}(l),p=Date.now(),y=vr(),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=un(t,r),v=e.spawn(g.file,g.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...g.opt}),m="",b="",k=new TextDecoder("utf-8"),j=new TextDecoder("utf-8"),O=!1,_=!1;v.stdout.on("data",e=>{let t=k.decode(e,{stream:!0});t&&(Cr(s)&&s(t),m.length<a&&(m+=t))}),v.stderr.on("data",e=>{let t=j.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 w=setTimeout(()=>{O||(_=!0,function(e){let t=vr();return nn(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}(v.pid).catch(()=>{}),setTimeout(()=>{O||(O=!0,y.resolve({ok:!1,stdout:Yr(m,500,ln),stderr:Yr(b,500,ln),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:v.pid}))},3e3).unref())},o);return v.on("error",e=>{O||(O=!0,clearTimeout(w),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(O)return;O=!0,clearTimeout(w);let r=k.decode();r&&m.length<a&&(m+=r);let n=j.decode();n&&b.length<a&&(b+=n);let i=Date.now()-p;_?y.resolve({ok:!1,stdout:Yr(m,500,ln),stderr:Yr(b,500,ln),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:Yr(m,500,ln),stderr:Yr(b,500,ln),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:v.pid}):y.resolve({ok:!1,stdout:Yr(m,500,ln),stderr:Yr(b,1e3,ln),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:v.pid})}),y}async function sn(e,t=[],r={}){if(!gr(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Rr(t)||(t=[]),yr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,u=Re(i,"cwd",null);gr(u)?i.cwd=u:i.cwd=process.cwd();let l=Re(i,"input",null);gr(l)?i.input=l:i.input=void 0;let a=Re(i,"env",null);yr(a)?i.env=a:i.env=void 0;let s=Re(i,"validate",null);Cr(s)||gr(s)?i.validate=s:i.validate=void 0;let c=Re(i,"onStdout",null);Cr(c)?i.onStdout=c:i.onStdout=void 0;let f=Re(i,"onStderr",null);Cr(f)?i.onStderr=f:i.onStderr=void 0,n=Vr(n)?Lr(n):0,o=zr(o)?Lr(o):5e3;let d=Re(i,"timeoutMs",null);zr(d)?i.timeoutMs=Lr(d):i.timeoutMs=12e4;let p,y=Re(i,"maxBuffer",null);zr(y)?i.maxBuffer=Lr(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 kr(e)}if(p=await an(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 cn(...e){let t=[];for(let r of e)if(Rr(r))for(let e of r)gr(e)&&t.push(e);else gr(r)&&t.push(r);return t}function fn(e,t="params"){return gr(e)||(e="unknown error"),gr(t)||(t="params"),{ok:!1,stdout:"",stderr:"",code:null,error:e,errorType:t,durationMs:0,attempts:0}}function dn(e){let t=Re(e,"error","");return gr(t)?0===t.indexOf("TIMEOUT")?"timeout":t.includes("ENOENT")||t.includes("ENAMETOOLONG")?"spawn":"OUTPUT_VALIDATION_FAILED"===t?"validation":"exec":"exec"}function pn(e){return!0===Re(e,"ok",!1)||gr(Re(e,"errorType",null))?e:{...e,errorType:dn(e)}}function yn(e,t){return zr(e)?Lr(e):t}let hn=3e5,gn=["exe","model","key","provider","agent","config","extraArgs","input","env"];async function vn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=Re(t,"exe",null);gr(r)||(r="opencode");let n=Re(t,"model",null),o=Re(t,"agent",null);gr(o)||(o="build");let i=Re(t,"extraArgs",null),u=cn("run",["--agent",o],gr(n)?["-m",n]:[],i),l=Re(t,"env",null);yr(l)||(l=void 0);let a=Re(t,"config",null);yr(a)&&(a=JSON.stringify(a)),gr(a)&&(l={...l,OPENCODE_CONFIG_CONTENT:a});let s=Re(t,"key",null),c=Re(t,"provider",null);gr(s)&&gr(c)&&(l={...l,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})});let f=yn(Re(t,"timeoutMs",null),hn),d=pr(t,gn);return pn(await sn(r,u,{...d,input:e,env:l,timeoutMs:f}))}function mn(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==p(t);var t}let bn=["exe","model","skipPermissions","extraArgs","input"];async function kn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=Re(t,"exe",null);gr(r)||(r="claude");let n=Re(t,"model",null),o=Re(t,"skipPermissions",null);mn(o)||(o=!0);let i=Re(t,"extraArgs",null),u=cn("-p",o?"--dangerously-skip-permissions":[],gr(n)?["--model",n]:[],i),l=yn(Re(t,"timeoutMs",null),hn),a=pr(t,bn);return pn(await sn(r,u,{...a,input:e,timeoutMs:l}))}let jn=["exe","model","sandbox","extraArgs","input"];async function On(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=Re(t,"exe",null);gr(r)||(r="codex");let n=Re(t,"model",null),o=Re(t,"sandbox",null);gr(o)||(o="workspace-write");let i=Re(t,"extraArgs",null),u=cn("exec",["--sandbox",o],"--skip-git-repo-check",gr(n)?["-m",n]:[],i),l=yn(Re(t,"timeoutMs",null),hn),a=pr(t,jn);return pn(await sn(r,u,{...a,input:e,timeoutMs:l}))}let _n=hn,wn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function Sn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");if(e.length>3e4)return fn(`prompt too long (${e.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Re(t,"exe",null);gr(r)||(r="agy");let n=Re(t,"model",null),o=Re(t,"effort",null),i=Re(t,"skipPermissions",null);mn(i)||(i=!0);let u=yn(Re(t,"timeoutMs",null),_n),l=Re(t,"printTimeout",null);gr(l)||(l=`${Math.max(30,Math.floor(u/1e3)-30)}s`);let a=Re(t,"addDirs",null);if(!Rr(a)){let e=Re(t,"cwd",null);gr(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)gr(e)&&s.push("--add-dir",e);let c=Re(t,"extraArgs",null),f=cn(i?"--dangerously-skip-permissions":[],["--print-timeout",l],gr(n)?["--model",n]:[],gr(o)?["--effort",o]:[],s,c,["--print",e]),d=pr(t,wn);try{return pn(await sn(r,f,{...d,timeoutMs:u}))}catch(e){return fn(`${e.code||"UNKNOWN"}: ${e.message}`,"spawn")}}function xn(e){if(Cr(e))return e;if(!gr(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(!gr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Br(r,4)){let t=Kr(r,4);if(!br(t))return!1;let n=Lr(t);if(!gr(e)||e.length<n)return!1}return!0}}let En=hn,An={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Tn(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: ${Re(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return u({stderr:Yr(c,1e3,An),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let f=null,d="",p=null,y=null;try{let e=JSON.parse(c);f=Re(e,"choices.0.message.content",null),d=Re(e,"choices.0.finish_reason",""),p=Re(e,"choices.0.message.tool_calls",null),y=Re(e,"usage",null),yr(y)||(y=null)}catch{}return"tool_calls"===d||null!=p?u({stderr:Yr(c,1e3,An),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:Yr(c,500,An),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:Yr(f,500,An),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:y}):u({ok:!0,stdout:f,code:s.status,usage:y}))}async function In(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=Re(t,"baseURL",null);if(!gr(r))return fn("baseURL must be a non-empty string");let n=Re(t,"model",null);if(!gr(n))return fn("model must be a non-empty string");let o=Re(t,"key",null),i=Re(t,"system",null),u=Re(t,"body",null);yr(u)||(u={});let l=Re(t,"headers",null);yr(l)||(l={});let a=yn(Re(t,"timeoutMs",null),En),s=Re(t,"maxRetries",null);s=Vr(s)?Lr(s):0;let c=yn(Re(t,"retryDelayMs",null),5e3),f=xn(Re(t,"validate",null)),d=r.replace(/\/+$/,"")+"/chat/completions",p=[];gr(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};gr(o)&&(h.Authorization=`Bearer ${o}`);let g=null,v=0;for(let e=0;e<=s;e++){if(e>0&&await kr(Math.min(c*e,15e3)),g=await Tn(d,h,y,a,f),v=e+1,g.ok)return g.attempts=v,g;let t=g.code;if(br(t)&&t>=400&&t<500&&429!==t)break}return g.attempts=v,g}let Mn=hn,Nn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function Dn(e){if(!Rr(e))return"";let t=[];for(let r of e){if("message"!==Re(r,"type",""))continue;let e=Re(r,"content",null);if(Rr(e))for(let r of e){let e=Re(r,"text",null);gr(e)&&t.push(e)}}return t.join("")}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: ${Re(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return u({stderr:Yr(c,1e3,Nn),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let f=null,d="",p="",y="",h=null,g=!0;try{let e=JSON.parse(c);f=Re(e,"output",null),d=Re(e,"status",""),p=Re(e,"incomplete_details.reason",""),y=Re(e,"error.message","")||Re(e,"error.code",""),h=Re(e,"usage",null),yr(h)||(h=null)}catch{g=!1}if(!g||!Rr(f))return u({stderr:Yr(c,500,Nn),code:s.status,error:"INVALID_RESPONSE: missing output array",errorType:"invalid-response",usage:h});if(f.some(e=>"function_call"===Re(e,"type","")))return u({stderr:Yr(c,1e3,Nn),code:s.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:h});if("completed"!==d){let e=p||y||d||"unknown";return u({stdout:Yr(Dn(f),500,Nn),stderr:Yr(c,500,Nn),code:s.status,error:`INCOMPLETE_RESPONSE: status=${d||"missing"} (${e})`,errorType:"incomplete",usage:h})}let v=Dn(f);return""===v?u({stderr:Yr(c,500,Nn),code:s.status,error:"INVALID_RESPONSE: no output_text in output messages",errorType:"invalid-response",usage:h}):o&&!o(v)?u({stdout:Yr(v,500,Nn),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:h}):u({ok:!0,stdout:v,code:s.status,usage:h})}async function Pn(e,t={}){if(!gr(e))return fn("prompt must be a non-empty string");let r=Re(t,"baseURL",null);if(!gr(r))return fn("baseURL must be a non-empty string");let n=Re(t,"model",null);if(!gr(n))return fn("model must be a non-empty string");let o=Re(t,"key",null),i=Re(t,"system",null),u=Re(t,"body",null);yr(u)||(u={});let l=Re(t,"headers",null);yr(l)||(l={});let a=yn(Re(t,"timeoutMs",null),Mn),s=Re(t,"maxRetries",null);s=Vr(s)?Lr(s):0;let c=yn(Re(t,"retryDelayMs",null),5e3),f=xn(Re(t,"validate",null)),d=r.replace(/\/+$/,"")+"/responses",p={model:n,input:e};gr(i)&&(p.instructions=i),p={...p,...u};let y={"Content-Type":"application/json",...l};gr(o)&&(y.Authorization=`Bearer ${o}`);let h=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await kr(Math.min(c*e,15e3)),h=await $n(d,y,p,a,f),g=e+1,h.ok)return h.attempts=g,h;let t=h.code;if(br(t)&&t>=400&&t<500&&429!==t)break}return h.attempts=g,h}let Un={opencode:vn,claude:kn,codex:On,antigravity:Sn,"api-openai-compat":In,"api-openai-responses":Pn};function Ln(e){return e!=e}function Rn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,W(e))}var Cn=Math.max;function Fn(e,t,r,n){e=Y(e)?e:Rn(e),r=r&&!n?Mr(r):0;var o=e.length;return r<0&&(r=Cn(o+r,0)),function(e){return"string"==typeof e||!j(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,Ln,r)}(e,t,r)>-1}async function zn(e,t,r={}){let n=W(Un);return gr(e)&&Fn(n,e)?(0,Un[e])(t,r):fn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let Vn=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],Bn=["id","keys","meta"],Jn=hn,Kn={cursors:{}};function Yn(e){let t=Re(e,"error","");gr(t)||(t="");let r=Re(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 Wn(e,t={}){if(!gr(e))return{...fn("prompt must be a non-empty string"),tried:[]};let r=Re(t,"providers",null),n=Rr(r)?r.filter(yr):[];if(0===n.length)return{...fn("providers must be a non-empty array"),tried:[]};let o=yn(Re(t,"budgetMs",null),null),i=null===o?null:Date.now()+o,u=yn(Re(t,"minAttemptMs",null),2e4),{state:l,saveState:a}=function(e){let t=yr(e)&&Cr(e.get)&&Cr(e.set),r=null;if(t)try{r=e.get()}catch{}return yr(r)||(r=t?{cursors:{}}:Kn),yr(r.cursors)||(r.cursors={}),yr(r.cooling)||(r.cooling={}),{state:r,saveState:()=>{if(t)try{e.set(r)}catch{}}}}(Re(t,"store",null)),s=yn(Re(t,"cooldownMs",null),0),c=Re(t,"coolDetect",null);Cr(c)||(c=null);let f=Re(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=Re(n,"id",null),a=gr(e)?Re(t.cooling,e,null):null;zr(a)&&o-a<r?u.push(n):(gr(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=Re(t,"onEvent",null),y=e=>{if(Cr(p))try{p(e)}catch{}},h=pr(t,Vn),g=[],v=null,m=null;for(let t=0;t<n.length;t++){let r=n[t],o=Re(r,"id",null),f=gr(o);f||(o=String(t));let p=Re(r,"kind",null),b=Re(r,"model",null),k=Re(r,"keys",null),j=Rr(k)?k.filter(gr):[],O=j.length,_=pr(r,Bn),w=0;if(O>0){let e=Re(l.cursors,o,0);w=zr(e)?Lr(e)%O:0}let S=O>0?O:1,x=!1;for(let t=0;t<S&&!x;t++){if(d())return y({type:"aborted",providerId:o,keyIndex:null,keyId:o}),g.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...fn("ABORTED","aborted"),tried:g};let r=O>0?(w+t)%O:null,n=null===r?o:`${o}#${r}`,k={...h,..._};O>0&&(k.key=j[r]);let S=yn(Re(k,"timeoutMs",null),Jn);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"}),{...fn("budget exhausted","budget"),tried:g};S=Math.min(S,e)}k.timeoutMs=S,y({type:"try",providerId:o,keyIndex:r,keyId:n,kind:p,model:b});let E=await zn(p,e,k);if(E.ok)return s>0&&f&&void 0!==l.cooling[o]&&(delete l.cooling[o],a()),O>0&&(l.cursors[o]=(r+1)%O,a()),y({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:E.durationMs}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:E.durationMs,...void 0!==E.usage?{usage:E.usage}:{}}),{...E,providerId:o,keyIndex:r,kind:p,model:b,tried:g};if(v=E,m={providerId:o,keyIndex:r,kind:p,model:b},s>0&&f){let e=429===E.code||gr(E.error)&&0===E.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(E)}catch{}e&&(l.cooling[o]=Date.now(),a(),y({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:E.error,cooldownMs:s}))}Yn(E)?(y({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:E.error,errorType:E.errorType,stdout:E.stdout,stderr:E.stderr}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:E.error,errorType:E.errorType,stdout:E.stdout,stderr:E.stderr,durationMs:E.durationMs,...void 0!==E.usage?{usage:E.usage}:{}}),x=!0):(y({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:E.error,errorType:E.errorType,stdout:E.stdout,stderr:E.stderr}),g.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:E.error,errorType:E.errorType,stdout:E.stdout,stderr:E.stderr,durationMs:E.durationMs,...void 0!==E.usage?{usage:E.usage}:{}}))}}return{...v||fn("all providers failed","exec"),...m||{},tried:g}}function Hn(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(yr(e)){for(let t in e)return!1;return!0}return!1}(e)||(!!function(e){return!(!hr(e)||""!==e)}(e)||(!!function(e){return!!Rr(e)&&0===e.length}(e)||!!mr(e)))))}function qn(e){return!!Rr(e)&&(0!==e.length&&(1!==e.length||!Hn(e[0])))}function Gn(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 Zn=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),Qn=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function Xn(e,t={}){let r=Date.now();if(!gr(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",errorType:"params",ms:0,tried:[]};let n=Re(t,"providers",null),o=Re(t,"spec",null);if(!yr(n)||!yr(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=[Re(t,"use","")],n=Re(t,"fallback",null);qn(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Re(e,t,null);yr(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===Re(t,"rawText",!1),a=Re(t,"parse",null);Cr(a)||(a=Gn);let s=Re(t,"check",null);Cr(s)||(s=null);let c=Re(t,"promptPrefix",null);gr(c)||(c=""===c?"":Zn);let f=await Wn(c+e,{...pr(t,Qn),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:Re(t,"timeoutMs",null)||hn}),d=null;f.ok&&(d=l?String(f.stdout||"").trim():a(f.stdout));let p=Re(f,"providerId",null),y=Re(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:Re(f,"tried",[]),usage:Re(f,"usage",null),error:f.ok?"":Re(f,"error","unknown error"),...f.ok?{}:{errorType:Re(f,"errorType","exec")}}}async function eo(e={}){let t=Date.now(),r=Re(e,"providers",null),n=Re(e,"task",""),o=Re(e,"agents",null),i=Re(e,"integrate",null),u=Re(e,"check",null),l=Re(e,"callOpt",{});if(!gr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!qn(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Re(e,"minCandidates",null);a=zr(a)?Lr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:a,...s}=e;return Xn(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||!gr(Re(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=Re(t,"schema",""),n=gr(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 Xn(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 to=["id","use","fallback","prompt","check","meta"];async function ro(e={}){let t=Date.now(),r=Re(e,"providers",null),n=Re(e,"input",null),o=Re(e,"stages",null),i=Re(e,"callOpt",{});if(!qn(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=gr(Re(c,"id",""))?c.id:`stage${e+1}`;a.push(f);let d=Re(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(!gr(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=pr(c,to),h=await Xn(p,{...i,...y,providers:r,spec:{use:Re(c,"use",""),fallback:Re(c,"fallback",null)},check:Re(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 no=["stages","input"],oo=["task","agents","integrate","check","schema","minCandidates"];var io=Array.prototype.join;function uo(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new je;++t<r;)this.add(e[t])}function lo(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function ao(e,t){return e.has(t)}uo.prototype.add=uo.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},uo.prototype.has=function(e){return this.__data__.has(e)};function so(e,t,r,n,o,i){var u=1&r,l=e.length,a=t.length;if(l!=a&&!(u&&a>l))return!1;var s=i.get(e),c=i.get(t);if(s&&c)return s==t&&c==e;var f=-1,d=!0,p=2&r?new uo:void 0;for(i.set(e,t),i.set(t,e);++f<l;){var y=e[f],h=t[f];if(n)var g=u?n(h,y,f,t,e,i):n(y,h,f,e,t,i);if(void 0!==g){if(g)continue;d=!1;break}if(p){if(!lo(t,function(e,t){if(!ao(p,t)&&(y===e||o(y,e,r,n,i)))return p.push(t)})){d=!1;break}}else if(y!==h&&!o(y,h,r,n,i)){d=!1;break}}return i.delete(e),i.delete(t),d}function co(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function fo(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var po=u?u.prototype:void 0,yo=po?po.valueOf:void 0;var ho=Object.prototype.hasOwnProperty;var go="[object Arguments]",vo="[object Array]",mo="[object Object]",bo=Object.prototype.hasOwnProperty;function ko(e,t,r,n,o,i){var u=j(e),l=j(t),a=u?vo:xt(e),s=l?vo:xt(t),c=(a=a==go?mo:a)==mo,f=(s=s==go?mo:s)==mo,d=a==s;if(d&&S(e)){if(!S(t))return!1;u=!0,c=!1}if(d&&!c)return i||(i=new Ce),u||U(e)?so(e,t,r,n,o,i):function(e,t,r,n,o,i,u){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!i(new At(e),new At(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return he(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var l=co;case"[object Set]":var a=1&n;if(l||(l=fo),e.size!=t.size&&!a)return!1;var s=u.get(e);if(s)return s==t;n|=2,u.set(e,t);var c=so(l(e),l(t),n,o,i,u);return u.delete(e),c;case"[object Symbol]":if(yo)return yo.call(e)==yo.call(t)}return!1}(e,t,a,r,n,o,i);if(!(1&r)){var p=c&&bo.call(e,"__wrapped__"),y=f&&bo.call(t,"__wrapped__");if(p||y){var h=p?e.value():e,g=y?t.value():t;return i||(i=new Ce),o(h,g,r,n,i)}}return!!d&&(i||(i=new Ce),function(e,t,r,n,o,i){var u=1&r,l=st(e),a=l.length;if(a!=st(t).length&&!u)return!1;for(var s=a;s--;){var c=l[s];if(!(u?c in t:ho.call(t,c)))return!1}var f=i.get(e),d=i.get(t);if(f&&d)return f==t&&d==e;var p=!0;i.set(e,t),i.set(t,e);for(var y=u;++s<a;){var h=e[c=l[s]],g=t[c];if(n)var v=u?n(g,h,c,t,e,i):n(h,g,c,e,t,i);if(!(void 0===v?h===g||o(h,g,r,n,i):v)){p=!1;break}y||(y="constructor"==c)}if(p&&!y){var m=e.constructor,b=t.constructor;m==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof m&&m instanceof m&&"function"==typeof b&&b instanceof b||(p=!1)}return i.delete(e),i.delete(t),p}(e,t,r,n,o,i))}function jo(e,t,r,n,o){return e===t||(null==e||null==t||!y(e)&&!y(t)?e!=e&&t!=t:ko(e,t,r,n,jo,o))}function Oo(e){return e==e&&!J(e)}function _o(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function wo(e){var t=function(e){for(var t=W(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Oo(o)]}return t}(e);return 1==t.length&&t[0][2]?_o(t[0][0],t[0][1]):function(r){return r===e||function(e,t,r,n){var o=r.length,i=o,u=!n;if(null==e)return!i;for(e=Object(e);o--;){var l=r[o];if(u&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++o<i;){var a=(l=r[o])[0],s=e[a],c=l[1];if(u&&l[2]){if(void 0===s&&!(a in e))return!1}else{var f=new Ce;if(n)var d=n(s,c,a,e,t,f);if(!(void 0===d?jo(c,s,3,n,f):d))return!1}}return!0}(r,e,t)}}function So(e,t){return null!=e&&t in Object(e)}function xo(e,t){return null!=e&&function(e,t,r){for(var n=-1,o=(t=Pe(t,e)).length,i=!1;++n<o;){var u=Ue(t[n]);if(!(i=null!=e&&r(e,u)))break;e=e[u]}return i||++n!=o?i:!!(o=null==e?0:e.length)&&A(o)&&E(u,o)&&(j(e)||k(e))}(e,t,So)}function Eo(e){return Z(e)?(t=Ue(e),function(e){return null==e?void 0:e[t]}):function(e){return function(t){return Le(t,e)}}(e);var t}function Ao(e){return"function"==typeof e?e:null==e?ur:"object"==typeof e?j(e)?function(e,t){return Z(e)&&Oo(t)?_o(Ue(e),t):function(r){var n=Re(r,e);return void 0===n&&n===t?xo(r,e):jo(t,n,3)}}(e[0],e[1]):wo(e):Eo(e)}var To,Io=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),u=i.length;u--;){var l=i[To?u:++n];if(!1===t(o[l],l,o))break}return e};var Mo=function(e,t){return function(r,n){if(null==r)return r;if(!Y(r))return e(r,n);for(var o=r.length,i=t?o:-1,u=Object(r);(t?i--:++i<o)&&!1!==n(u[i],i,u););return r}}(function(e,t){return e&&Io(e,t,W)}),No=Mo;function Do(e,t){var r=-1,n=Y(e)?Array(e.length):[];return No(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function $o(e,t){return gr(e)&&gr(t)?function(e,t){if(e=e.replace(/\s+/g,""),t=t.replace(/\s+/g,""),!e.length&&!t.length)return 1;if(!e.length||!t.length)return 0;if(e===t)return 1;if(1===e.length&&1===t.length)return 0;if(e.length<2||t.length<2)return 0;let r=new Map;for(let t=0;t<e.length-1;t++){const n=e.substring(t,t+2),o=r.has(n)?r.get(n)+1:1;r.set(n,o)}let n=0;for(let e=0;e<t.length-1;e++){const o=t.substring(e,e+2),i=r.has(o)?r.get(o):0;i>0&&(r.set(o,i-1),n++)}return 2*n/(e.length+t.length-2)}(e,t):0}function Po(e){if(!(gr(e)||br(e)||H(e)||function(e){return"[object BigInt]"===Object.prototype.toString.call(e)}(e)))return"";let t="";try{t=String(e)}catch(e){}try{t=e.toString()}catch(e){}return t}function Uo(e,t){let r="";if(gr(e)||br(e))r=Po(e);else{if(!qn(e))return{};o="",r=null==(n=e)?"":io.call(n,o)}var n,o,i,u;return br(t)&&(t=Po(t)),gr(t)&&(t=[t]),qn(t)?(u=function(e){return Po(e)},function(e,t){let r=[],n=0;for(let o=0;o<t.length;o++){let i=t[o],u=$o(e,i);r.push({target:i,rating:u}),u>r[n].rating&&(n=o)}return{ratings:r,bestMatch:r[n],bestMatchIndex:n}}(r,t=(j(i=t)?Ie:Do)(i,Ao(u)))):{}}function Lo(e){let t=null,n=qr(e,{fs:r});if(n.error)return n;let o=n.success,i=null;try{i=JSON.parse(o)}catch(e){t=e}return null!==t?{error:t}:{success:i}}function Ro(e,t){return gr(e)&&Vr(t)?0===(t=Lr(t))?e:Br(e,e.length-t):""}function Co(e){if(!gr(e))return{path:"",isRoot:!1};for(;e.indexOf("\\\\")>=0;)e=e.replace("\\\\","\\");for(;e.indexOf("//")>=0;)e=e.replace("//","/");if(":"===Jr(e,1))return{path:`${e}\\`,isRoot:!0};if("\\"===Jr(e,1)){let t=Ro(e,1);return":"===Jr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Jr(e,1)){let t=Ro(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function Fo(e){if(!gr(e))return"";let t=Co(e);if(t.isRoot)return t.path;let r=function(e){if(!gr(e))return"";let t=Co(e);if(t.isRoot)return t.path;let r=t.path;try{r=r.split("\\").pop().split("/").pop()}catch(e){}return r}(e=t.path);if(!gr(r))return e;let n=Co(e=Ro(e,r.length));return n.isRoot,n.path}function zo(e,t={}){let r=Re(t,"fs");if(!Wr(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function Vo(e,t,r={}){let n=null,o=Re(r,"fs"),i=Fo(e);zo(i,{fs:o})||function(e,t={}){let r=Re(t,"fs");if(zo(e,{fs:r}))return{success:"input folder is already exists: "+e};if(Wr(e,{fs:r}))return{error:"input path already exists: "+e};try{r.mkdirSync(e,{recursive:!0})}catch(e){return{error:e}}}(i,{fs:o});try{o.writeFileSync(e,t,"utf8")}catch(e){n=e}return null!==n?{error:n}:{success:e}}function Bo(e,t,n={}){let o=null;if(!yr(t)&&!Rr(t))return{error:"inp is not an object or array"};let i=Re(n,"useFormat",null);mn(i)||(i=!1);let u="";try{u=i?JSON.stringify(t,null,2):JSON.stringify(t)}catch(e){o=e}return null!==o?{error:o}:Vo(e,u,{fs:r})}let Jo={KINDS:W(Un),NO_SIDE_EFFECT:Zn,dispatchAi:zn,dispatchAiFallback:Wn,dispatchAiWkf:function(e={}){let t=Re(e,"providers",null);if(!yr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Re(e,"defaults",null);return yr(r)||(r={}),{providers:t,callAi:(e,n={})=>Xn(e,{...r,...n,providers:t}),runFanout:(e={})=>eo({...e,providers:t,callOpt:{...r,...Re(e,"callOpt",{})}}),runRolePipeline:(e={})=>ro({...e,providers:t,callOpt:{...r,...Re(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await eo(pr(e,no));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await ro({...pr(e,oo),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,...Re(e,"callOpt",{})}})}},dispatchOpencode:vn,dispatchClaude:kn,dispatchCodex:On,dispatchAntigravity:Sn,dispatchApiOpenaiCompat:In,dispatchApiOpenaiResponses:Pn,providers:[{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:"oc:opencode/muse-spark-1.2-contributor-free",model:"opencode/muse-spark-1.2-contributor-free",kind:"opencode",envVar:"OPENCODE_KEYS",provider:"opencode",config:{permission:{edit:"deny",write:"deny",bash:"deny"}}},{id:"oc:opencode/muse-spark-1.3-contributor-free",model:"opencode/muse-spark-1.3-contributor-free",kind:"opencode",envVar:"OPENCODE_KEYS",provider:"opencode",config:{permission:{edit:"deny",write:"deny",bash:"deny"}}},{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:"agy:gemini-3.8-flash-high",model:"gemini-3.8-flash-high",kind:"antigravity",addDirs:["."],skipPermissions:!1},{id:"claude:sonnet",model:"sonnet",kind:"claude",extraArgs:["--disallowedTools","Write,Edit,NotebookEdit,Bash"]},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only"},{id:"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}}},{id:"zen:laguna-s-2.1-free",model:"laguna-s-2.1-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:muse-spark-1.2-contributor-free",model:"muse-spark-1.2-contributor-free",kind:"api-openai-responses",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_output_tokens:8192}},{id:"zen:muse-spark-1.3-contributor-free",model:"muse-spark-1.3-contributor-free",kind:"api-openai-responses",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_output_tokens:8192}},{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:"zen:mimo-v2.5-free",model:"mimo-v2.5-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:ling-3.0-flash-fin-free",model:"ling-3.0-flash-fin-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:nemotron-3-ultra-free",model:"nemotron-3-ultra-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}},{id:"zen:nemotron-3.5-lightning-free",model:"nemotron-3.5-lightning-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:8192}}],resolveProviders:function(e,t={}){let r=Re(t,"env",null);yr(r)||(r="undefined"!=typeof process&&process&&yr(process.env)?process.env:{});let n=Rr(e)?e.filter(yr):[],o=Re(t,"pick",null),i=[],u=n;if(qn(o)){u=[];for(let e of o){let t=n.find(t=>Re(t,"id",null)===e);t?u.push(t):i.push(String(e))}}let l={};if(i.length>0){let e=n.map(e=>Re(e,"id",null)).filter(gr);for(let t of i)l[t]=e.length>0?Re(Uo(t,e),"bestMatch.target",null):null}let a=[],s=[];for(let e of u){let t=Re(e,"envVar",null);if(!gr(t)||qn(Re(e,"keys",null))){a.push(pr(e,["envVar"]));continue}let n=String(Re(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?a.push({...pr(e,["envVar"]),keys:n}):s.push({id:Re(e,"id",""),envVar:t})}let c=Re(t,"exes",null),f=Re(t,"patch",null);(yr(c)||yr(f))&&(a=a.map(e=>{let t=e,r=yr(c)?Re(c,Re(t,"kind",""),null):null;gr(r)&&!gr(Re(t,"exe",null))&&(t={...t,exe:r});let n=yr(f)?Re(f,Re(t,"id",""),null):null;return yr(n)&&(t={...t,...n}),t}));let d={};for(let e of a)d[e.id]=e;return{providers:a,table:d,skipped:s,missing:i,hints:l}},readEnvFile:function(e){let t={},n="";try{n=r.readFileSync(e,"utf8")}catch(e){return t}for(let e of n.split(/\r?\n/)){let r=e.match(/^\s*([A-Za-z0-9_]+)\s*=\s*(.*)$/);r&&(t[r[1]]=r[2].trim().replace(/^(["'])(.*)\1$/,"$2"))}return t},budgetFor:function(e){if(!Rr(e))return 0;let t=0;for(let r of e)t+=yn(Re(r,"timeoutMs",null),hn);return t},createFileStore:function(e={}){let r=Re(e,"file",null);if(!gr(r)){let n=Re(e,"dir",null);if(!gr(n))throw new Error("createFileStore: file or dir is required");let o=Re(e,"name",null);r=t.join(n,gr(o)?o:"ai-cursor.json")}let n=Re(e,"ownKeys",null);qn(n)||(n=["at"]);let o=Re(e,"stamp",null);return Cr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=Lo(r),t=void 0!==Re(e,"error",void 0)?null:Re(e,"success",null);if(!yr(t))return{};let o={...t};for(let e of n)delete o[e];return o},set:e=>{let t={...yr(e)?e:{},at:o()};Bo(r,t,{useFormat:!0})}}},createUsageCounter:function(e={}){let r=Re(e,"file",null);if(!gr(r)){let n=Re(e,"dir",null);if(!gr(n))throw new Error("createUsageCounter: file or dir is required");let o=Re(e,"name",null);r=t.join(n,gr(o)?o:"ai-usage.json")}let n=Re(e,"getDate",null);Cr(n)||(n=()=>{let e=new Date,t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`});let o=Re(e,"keepDays",null);zr(o)||(o=14);let i=Re(e,"keyOf",null);Cr(i)||(i=e=>Re(e,"keyId",null)||Re(e,"providerId",""));let u=()=>{let e=Lo(r),t=void 0!==Re(e,"error",void 0)?null:Re(e,"success",null);return yr(t)?t:{}},l=(e,t=1)=>{if(!gr(e))return;let i=u(),l=n(),a=yr(i[l])?i[l]:{};a[e]=(Number(a[e])||0)+t,i[l]=a;let s=Object.keys(i).sort().slice(-o),c={};for(let e of s)c[e]=i[e];Bo(r,c,{useFormat:!0})};return{file:r,onEvent:e=>{"try"===Re(e,"type",null)&&l(i(e))},bump:l,today:()=>{let e=u(),t=n(),r=yr(e[t])?e[t]:{};return{today:t,byKey:r,total:Object.values(r).reduce((e,t)=>e+(Number(t)||0),0)}}}},salvageTruncatedArray:function(e){let t=String(e||""),r=t.indexOf("[");if(r<0)return null;let n=0,o=!1,i=!1,u=-1;for(let e=r;e<t.length;e++){let r=t[e];if(i)i=!1;else if(o)"\\"===r?i=!0:'"'===r&&(o=!1);else if('"'!==r){if("["===r||"{"===r)n++;else if(("]"===r||"}"===r)&&(n--,1===n&&"}"===r&&(u=e),0===n))return null}else o=!0}if(u<0)return null;try{let e=JSON.parse(t.slice(r,u+1)+"]");return Array.isArray(e)&&e.length>0?e:null}catch(e){return null}}};return Jo});
7
7
  //# sourceMappingURL=w-dispatch-ai.umd.js.map