w-dispatch-ai 1.0.38 → 1.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -3
- package/dist/w-dispatch-ai.umd.js +2 -2
- package/dist/w-dispatch-ai.umd.js.map +1 -1
- package/docs/WDispatchAi.mjs.html +1 -1
- package/docs/adapters.mjs.html +1 -1
- package/docs/budgetFor.mjs.html +1 -1
- package/docs/buildValidator.mjs.html +1 -1
- package/docs/castPintOr.mjs.html +1 -1
- package/docs/checkTruncation.mjs.html +1 -1
- package/docs/describeNonJsonBody.mjs.html +1 -1
- package/docs/dfTimeoutMs.mjs.html +1 -1
- package/docs/dispatchAi.mjs.html +1 -1
- package/docs/dispatchAiFallback.mjs.html +25 -2
- package/docs/dispatchAiWkf.mjs.html +1 -1
- package/docs/dispatchAntigravity.mjs.html +1 -1
- package/docs/dispatchApiOpenaiCompat.mjs.html +1 -1
- package/docs/dispatchApiOpenaiResponses.mjs.html +1 -1
- package/docs/dispatchApiTypesafeSystemone.mjs.html +1 -1
- package/docs/dispatchClaude.mjs.html +1 -1
- package/docs/dispatchCodex.mjs.html +2 -2
- package/docs/dispatchOpencode.mjs.html +1 -1
- package/docs/getCliArgs.mjs.html +1 -1
- package/docs/getErrorResult.mjs.html +1 -1
- package/docs/getErrorType.mjs.html +1 -1
- package/docs/global.html +8 -8
- package/docs/index.html +1 -1
- package/docs/quota_dfQuotaTimeoutMs.mjs.html +1 -1
- package/docs/quota_fetchQuotaJson.mjs.html +1 -1
- package/docs/quota_fromCodexUsageHttp.mjs.html +1 -1
- package/docs/quota_getQuotaAntigravity.mjs.html +1 -1
- package/docs/quota_getQuotaClaude.mjs.html +1 -1
- package/docs/quota_getQuotaCodex.mjs.html +1 -1
- package/docs/quota_readJsonOrNull.mjs.html +1 -1
- package/docs/quota_toQuotaLabel.mjs.html +1 -1
- package/docs/quota_toQuotaResult.mjs.html +1 -1
- package/docs/quota_toQuotaScopedLabel.mjs.html +1 -1
- package/docs/quota_toQuotaWindow.mjs.html +1 -1
- package/docs/readEnvFile.mjs.html +1 -1
- package/docs/resolveProviders.mjs.html +1 -1
- package/docs/wkf_callAiWithFallback.mjs.html +1 -1
- package/docs/wkf_createFileStore.mjs.html +1 -1
- package/docs/wkf_createUsageCounter.mjs.html +1 -1
- package/docs/wkf_extractJsonLoose.mjs.html +1 -1
- package/docs/wkf_noSideEffectPrefix.mjs.html +1 -1
- package/docs/wkf_runFanout.mjs.html +1 -1
- package/docs/wkf_runFanoutPipeline.mjs.html +1 -1
- package/docs/wkf_runRolePipeline.mjs.html +1 -1
- package/docs/wkf_salvageTruncatedArray.mjs.html +1 -1
- package/package.json +1 -1
- package/src/dispatchAiFallback.mjs +24 -1
- package/src/dispatchCodex.mjs +1 -1
- package/src/providers.mjs +49 -13
- package/test/tools/fakeServerForApiTest.mjs +7 -0
- package/test/unit-dispatchAiFallback.test.mjs +245 -2
- package/test/unit-providers.test.mjs +37 -0
package/README.md
CHANGED
|
@@ -220,9 +220,16 @@ await test()
|
|
|
220
220
|
5. 三個 REST 轉接器預設帶`Accept-Encoding: identity`。
|
|
221
221
|
6. 依`errorType`做健康計數或監控者:截斷且驗證不過者由`validation`改為`incomplete`,須一併納入;結果另帶`finishReason`與`truncated`。
|
|
222
222
|
|
|
223
|
-
**1.0.
|
|
223
|
+
**1.0.38 起**:
|
|
224
224
|
7. HTTP 200 但本體非 JSON,另報`INVALID_RESPONSE: body is not JSON (<位元組數>, first bytes <前16位元組hex>, content-encoding=…, content-type=…)`(此前與「JSON 缺欄位」同一句),並改為**整組跳過**;`errorType`仍為`invalid-response`,「JSON 缺欄位」維持換金鑰。依`errorType`計數者若要把此類整組失敗計入,須納入`invalid-response`。
|
|
225
225
|
|
|
226
|
+
**1.0.39 起**:
|
|
227
|
+
8. `dispatchAiFallback`之`onEvent`新增事件`'group-exhausted'`:一組試完仍無成交時發出(每次呼叫每組恰一次,位於該組最後一個`next-key`/`skip-group`之後、下一組首個`try`之前),欄位見下方 Options for dispatchAiFallback 之`onEvent`;成交、預算用盡、中止之組不發,`tried`不變,既有 7 種事件之順序、欄位與觸發條件不變。**逐事件寫日誌者每個試完的組多一行**;只認特定`ev.type`者不受影響。以「本次呼叫整組全敗」計數(如健康層降序)者,改為每收到一次此事件計一次,不必再以金鑰數與逐把失敗次數重建(並行下不精確)。
|
|
228
|
+
|
|
229
|
+
**1.0.39 之後**:
|
|
230
|
+
9. 內建 providers:`codex:gpt-6-sol` 改為 `codex:gpt-6.1-sol`(id 與 model 皆換)。以舊 id 做 `pick` 者會落入 `missing`(`hints` 會提示新 id),須改用新 id。
|
|
231
|
+
10. 內建 providers 之思考強度一律明給 high:claude 條目加 `--effort high`(此前未給,`-p` 實測為 medium);codex 條目加 `--config model_reasoning_effort="high"`(此前沿用執行機之 `config.toml`);opencode 之 muse-spark-1.2/1.3 與 space-bunny 加 `--variant high`;`zen:space-bunny-free` 之 body 加 `reasoning_effort: 'high'`;`poolside:laguna-s-2.1` 由關閉思考改為開啟(`enable_thinking: true`,`max_tokens` 由 8192 改 32768)。**耗時會增加**(poolside 實測推理題由 3.8s 增為 15~28s,但關閉時該題答錯)。以 `patch` 覆寫條目 `extraArgs` 者,須自行一併帶上防寫與思考強度旗標。
|
|
232
|
+
|
|
226
233
|
#### Options shared by all dispatch functions:
|
|
227
234
|
| key | type | default | description |
|
|
228
235
|
| --- | --- | --- | --- |
|
|
@@ -406,7 +413,7 @@ let r = await wdi.dispatchAiFallback(state, { providers: jev, questions })
|
|
|
406
413
|
| `coolDetect` | Function | 無 | 冷卻觸發之**注入判定**`(r)=>Boolean`,收完整失敗結果(含`stdout`、`stderr`、`code`、`error`),回傳`true`即視同冷卻觸發(內建429/TIMEOUT觸發不受影響)。CLI類限流字樣各家不同、隨版本漂移,且不一定在stderr(Claude Code之執行期失敗以result印在stdout,官方headless文件),**簽章表由觀察到字樣的呼叫端維護**,如`(r) => /FreeUsageLimitError/i.test(r.stderr \|\| '')`(注意:opencode 1.18.32 遇 Zen 免費層 429 時 `run` **不會結束**、stderr 只有 session 標頭,直到逾時才以 `TIMEOUT` 回報——內建 TIMEOUT 觸發已涵蓋;要讓字樣出現在 stderr 須於 `extraArgs` 加 `--print-logs --log-level ERROR`,2026-09-23 實測 DEBUG log 內為 `AI_APICallError: Rate limit exceeded`;不經本套件的原始 CLI 亦同);漏判僅退回現狀(每階段重探一次)、誤判也只是降尾非移除,兩邊代價都有上限。僅`cooldownMs>0`時有效;回調拋出例外視同`false` |
|
|
407
414
|
| `shouldStop` | Function | 無 | 中止判定`()=>Boolean`,於**每次嘗試之間**檢查,`true`即停止遞補回報`ABORTED`——供成果已無人接收時(如server端客戶端斷線)止損,把「斷線後仍空耗整條鏈」縮成「至多再耗當前這一家」。**不中止進行中之嘗試**(不殺子進程/不斷開請求,見Known design notes)。經工作流層原樣轉傳:中止後每個後續呼叫進門即回`ABORTED`,整條工作流自然快速收束,無須逐層處理;回調拋出例外視同`false` |
|
|
408
415
|
| `meta` | any | 無 | 保留鍵,同`providers[].meta`,永不轉傳 |
|
|
409
|
-
| `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'`、`'aborted'`、`'cooled'`(冷卻觸發,帶`error`與`cooldownMs`,僅啟用cooldownMs時出現);失敗事件另帶`errorType`、`stdout`(被拒回覆)與`stderr`(錯誤輸出,皆已截斷)供診斷;回調拋出例外不影響主流程 |
|
|
416
|
+
| `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'`、`'aborted'`、`'cooled'`(冷卻觸發,帶`error`與`cooldownMs`,僅啟用cooldownMs時出現)、`'group-exhausted'`(一組試完仍無成交,每次呼叫每組恰一次,位於該組最後一個`next-key`/`skip-group`之後、下一組首個`try`之前;帶`keys`(有效金鑰數,`0`代表登入態之單一虛擬金鑰)、`attempted`(本組實際嘗試數)、`by`(`'all-keys'`每把皆換鑰失敗,或`'skip-group'`以與金鑰無關之失敗收尾)、`errorTypes`(本組各次嘗試之`errorType`依序)與`error`(本組最後一次錯誤);成交、預算用盡、中止之組不發,亦不寫入`tried`);失敗事件另帶`errorType`、`stdout`(被拒回覆)與`stderr`(錯誤輸出,皆已截斷)供診斷;回調拋出例外不影響主流程 |
|
|
410
417
|
|
|
411
418
|
頂層其餘設定(`timeoutMs`、`validate`、`maxRetries`等)為各attempt之共用預設,條目可覆寫;`maxRetries`建議維持預設`0`,韌性交給換家而非重試同一家。
|
|
412
419
|
|
|
@@ -625,6 +632,8 @@ let merged = [...wdi.providers.filter((p) => !extra.some((e) => e.id === p.id)),
|
|
|
625
632
|
let resolved = wdi.resolveProviders(merged, { env, pick: [...] })
|
|
626
633
|
```
|
|
627
634
|
|
|
635
|
+
**內建條目之思考強度一律 high**(2026-09-30 起,單一來源為 providers.mjs 之 `EFFORT` 常數):各家參數不同——claude 為 `--effort`,codex 為 `--config model_reasoning_effort`,opencode 為 `--variant`(僅有檔位之模型帶),REST 為 `body.reasoning_effort`(僅 `zen:space-bunny-free`),agy 以模型 slug 之檔位(`-high`)表示;poolside 之思考為開關,已設為開啟。未明給時各 CLI 回退自身預設(claude `-p` 實測為 medium,codex 沿用執行機之 `config.toml`),結果隨安裝機而異,故一律明給。以 `patch` 覆寫 `extraArgs` 時,須自行一併帶上防寫與思考強度旗標,否則兩者同時失效。
|
|
636
|
+
|
|
628
637
|
**推理模型請放寬 `body.max_tokens`**:推理模型的 `max_tokens` 含推理 token(2026-09-24 實測 `space-bunny-free` 列 10 個縣市一題即用 5222,其中推理 4849),照抄上例之 8192 容易截斷;截斷預設判失敗換家(`errorType: 'incomplete'`,見`acceptTruncated`),截斷頻繁等於白白換家;內建之 `zen:space-bunny-free` 即用 32768。
|
|
629
638
|
|
|
630
639
|
**警語:動「輸入」、不要動「回傳」**——把條目 push 進回傳的 `providers` 陣列不會同步進 `table`,兩者當場分歧;合併輸入再呼叫則兩種輸出同源產出、必然一致。另同 id 重複條目屬設定錯誤(共用游標、日誌無法區分),合併時務必如上例先濾再接。
|
|
@@ -696,7 +705,7 @@ let a = await wdi.getQuotaAntigravity() // source: 'agy-print-usage'; windows
|
|
|
696
705
|
#### Known design notes:
|
|
697
706
|
- `package.json`**刻意不設**`exports`欄位:wsemi與w-*系列皆為自有套件,呼叫端以按需深層引入(`w-dispatch-ai/src/xxx.mjs`)為既定路線;增設exports會封死此路徑,勿加。
|
|
698
707
|
- `dispatchAi(kind, prompt, opt)`會把整個`opt`原樣轉傳對應轉接器,該轉接器用不到的鍵(例如輪替條目物件內的`kind`)會被忽略,故「供應商條目物件直接當`opt`」是預期用法;`dispatchAiFallback`之providers條目沿用同一約定。
|
|
699
|
-
- `dispatchAiFallback`為單向單輪:全數群組試畢即回傳最後一筆失敗結果與`tried`歷程,不回頭重試已敗的組。跨次執行僅記憶游標,不設金鑰停用清單(理由見上方失敗分流說明);需跨次跳過特定金鑰時,由呼叫端依`tried`/`onEvent`內之`error`與`stderr
|
|
708
|
+
- `dispatchAiFallback`為單向單輪:全數群組試畢即回傳最後一筆失敗結果與`tried`歷程,不回頭重試已敗的組。跨次執行僅記憶游標,不設金鑰停用清單(理由見上方失敗分流說明);需跨次跳過特定金鑰時,由呼叫端依`tried`/`onEvent`內之`error`與`stderr`自行決策。要以條目為單位判斷「本次呼叫整組試完仍無成交」者(如健康層據以降序),每收到一次`group-exhausted`事件計一次即可,勿以金鑰數與逐把`next-key`次數重建——事件不帶呼叫識別,並行呼叫跨越一次成交時(游標只在成交時推進,各呼叫起點不同)重建會多計或少計。
|
|
700
709
|
- `shouldStop`**只在嘗試邊界檢查,不中止進行中之嘗試**(不殺子進程、不斷開HTTP請求):進行中嘗試之強制中止需侵入execCli層與各轉接器,屬已知設計取捨——最小版已把斷線後的損失從「整條鏈」縮成「至多再耗當前這一家」;如有實測場景證明不足再議完整版。
|
|
701
710
|
- CLI類限流簽章**不進套件**:各家字樣(stdout或stderr)不同且隨CLI版本漂移,套件維護簽章表等同養一個自己驗證不了的分類器(與否決金鑰停用清單同一理由)。偵測經`coolDetect`依賴注入,由觀察到字樣的呼叫端維護。
|
|
702
711
|
- `dispatchOpencode`之`key`與`provider`須同時給予才會注入金鑰;只給其一(或範例中`.env`缺鍵導致`key`為`undefined`)時不會報錯,而是靜默沿用CLI既有登入狀態。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* w-dispatch-ai v1.0.
|
|
2
|
+
* w-dispatch-ai v1.0.40
|
|
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("path"),require("child_process"),require("fs"),require("os"),require("crypto")):"function"==typeof define&&define.amd?define(["path","child_process","fs","os","crypto"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-dispatch-ai"]=t(e.path,e.child_process,e.fs,e.os,e.crypto)}(this,function(e,t,r,n,o){"use strict";var i="object"==typeof global&&global&&global.Object===Object&&global,l="object"==typeof self&&self&&self.Object===Object&&self,u=i||l||Function("return this")(),a=u.Symbol,s=Object.prototype,c=s.hasOwnProperty,d=s.toString,f=a?a.toStringTag:void 0;var p=Object.prototype.toString;var m=a?a.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":m&&m in Object(e)?function(e){var t=c.call(e,f),r=e[f];try{e[f]=void 0;var n=!0}catch(e){}var o=d.call(e);return n&&(t?e[f]=r:delete e[f]),o}(e):function(e){return p.call(e)}(e)}function y(e){return null!=e&&"object"==typeof e}function g(e){return y(e)&&"[object Arguments]"==h(e)}var v=Object.prototype,b=v.hasOwnProperty,w=v.propertyIsEnumerable,_=g(function(){return arguments}())?g:function(e){return y(e)&&b.call(e,"callee")&&!w.call(e,"callee")},k=_,O=Array.isArray;var T="object"==typeof exports&&exports&&!exports.nodeType&&exports,j=T&&"object"==typeof module&&module&&!module.nodeType&&module,S=j&&j.exports===T?u.Buffer:void 0,A=(S?S.isBuffer:void 0)||function(){return!1},x=/^(?:0|[1-9]\d*)$/;function $(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 E(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var M={};function I(e){return function(t){return e(t)}}M["[object Float32Array]"]=M["[object Float64Array]"]=M["[object Int8Array]"]=M["[object Int16Array]"]=M["[object Int32Array]"]=M["[object Uint8Array]"]=M["[object Uint8ClampedArray]"]=M["[object Uint16Array]"]=M["[object Uint32Array]"]=!0,M["[object Arguments]"]=M["[object Array]"]=M["[object ArrayBuffer]"]=M["[object Boolean]"]=M["[object DataView]"]=M["[object Date]"]=M["[object Error]"]=M["[object Function]"]=M["[object Map]"]=M["[object Number]"]=M["[object Object]"]=M["[object RegExp]"]=M["[object Set]"]=M["[object String]"]=M["[object WeakMap]"]=!1;var N="object"==typeof exports&&exports&&!exports.nodeType&&exports,D=N&&"object"==typeof module&&module&&!module.nodeType&&module,C=D&&D.exports===N&&i.process,L=function(){try{var e=D&&D.require&&D.require("util").types;return e||C&&C.binding&&C.binding("util")}catch(e){}}(),P=L&&L.isTypedArray,R=P?I(P):function(e){return y(e)&&E(e.length)&&!!M[h(e)]},U=Object.prototype.hasOwnProperty;function F(e,t){var r=O(e),n=!r&&k(e),o=!r&&!n&&A(e),i=!r&&!n&&!o&&R(e),l=r||n||o||i,u=l?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],a=u.length;for(var s in e)!t&&!U.call(e,s)||l&&("length"==s||o&&("offset"==s||"parent"==s)||i&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||$(s,a))||u.push(s);return u}var z=Object.prototype;function B(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||z)}function J(e,t){return function(r){return e(t(r))}}var V=J(Object.keys,Object),q=Object.prototype.hasOwnProperty;function W(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function K(e){if(!W(e))return!1;var t=h(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function G(e){return null!=e&&E(e.length)&&!K(e)}function H(e){return G(e)?F(e):function(e){if(!B(e))return V(e);var t=[];for(var r in Object(e))q.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e)}function Y(e){return"symbol"==typeof e||y(e)&&"[object Symbol]"==h(e)}var X=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Q=/^\w*$/;function Z(e,t){if(O(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!Y(e))||(Q.test(e)||!X.test(e)||null!=t&&e in Object(t))}var ee,te=u["__core-js_shared__"],re=(ee=/[^.]+$/.exec(te&&te.keys&&te.keys.IE_PROTO||""))?"Symbol(src)_1."+ee:"";var ne=Function.prototype.toString;function oe(e){if(null!=e){try{return ne.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var ie=/^\[object .+?Constructor\]$/,le=Function.prototype,ue=Object.prototype,ae=le.toString,se=ue.hasOwnProperty,ce=RegExp("^"+ae.call(se).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function de(e){return!(!W(e)||(t=e,re&&re in t))&&(K(e)?ce:ie).test(oe(e));var t}function fe(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return de(r)?r:void 0}var pe=fe(Object,"create");var me=Object.prototype.hasOwnProperty;var he=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 ge(e,t){return e===t||e!=e&&t!=t}function ve(e,t){for(var r=e.length;r--;)if(ge(e[r][0],t))return r;return-1}ye.prototype.clear=function(){this.__data__=pe?pe(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(pe){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return me.call(t,e)?t[e]:void 0},ye.prototype.has=function(e){var t=this.__data__;return pe?void 0!==t[e]:he.call(t,e)},ye.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=pe&&void 0===t?"__lodash_hash_undefined__":t,this};var be=Array.prototype.splice;function we(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])}}we.prototype.clear=function(){this.__data__=[],this.size=0},we.prototype.delete=function(e){var t=this.__data__,r=ve(t,e);return!(r<0)&&(r==t.length-1?t.pop():be.call(t,r,1),--this.size,!0)},we.prototype.get=function(e){var t=this.__data__,r=ve(t,e);return r<0?void 0:t[r][1]},we.prototype.has=function(e){return ve(this.__data__,e)>-1},we.prototype.set=function(e,t){var r=this.__data__,n=ve(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var _e=fe(u,"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 Oe(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])}}Oe.prototype.clear=function(){this.size=0,this.__data__={hash:new ye,map:new(_e||we),string:new ye}},Oe.prototype.delete=function(e){var t=ke(this,e).delete(e);return this.size-=t?1:0,t},Oe.prototype.get=function(e){return ke(this,e).get(e)},Oe.prototype.has=function(e){return ke(this,e).has(e)},Oe.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 Te(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var l=e.apply(this,n);return r.cache=i.set(o,l)||i,l};return r.cache=new(Te.Cache||Oe),r}Te.Cache=Oe;var je,Se,Ae,xe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/\\(\\)?/g,Ee=(je=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(xe,function(e,r,n,o){t.push(n?o.replace($e,"$1"):r||e)}),t},Se=Te(je,function(e){return 500===Ae.size&&Ae.clear(),e}),Ae=Se.cache,Se),Me=Ee;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 Ne=a?a.prototype:void 0,De=Ne?Ne.toString:void 0;function Ce(e){if("string"==typeof e)return e;if(O(e))return Ie(e,Ce)+"";if(Y(e))return De?De.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Le(e){return null==e?"":Ce(e)}function Pe(e,t){return O(e)?e:Z(e,t)?[e]:Me(Le(e))}function Re(e){if("string"==typeof e||Y(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Ue(e,t){for(var r=0,n=(t=Pe(t,e)).length;null!=e&&r<n;)e=e[Re(t[r++])];return r&&r==n?e:void 0}function Fe(e,t,r){var n=null==e?void 0:Ue(e,t);return void 0===n?r:n}function ze(e){var t=this.__data__=new we(e);this.size=t.size}ze.prototype.clear=function(){this.__data__=new we,this.size=0},ze.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},ze.prototype.get=function(e){return this.__data__.get(e)},ze.prototype.has=function(e){return this.__data__.has(e)},ze.prototype.set=function(e,t){var r=this.__data__;if(r instanceof we){var n=r.__data__;if(!_e||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Oe(n)}return r.set(e,t),this.size=r.size,this};var Be=function(){try{var e=fe(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Je=Be;function Ve(e,t,r){"__proto__"==t&&Je?Je(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var qe=Object.prototype.hasOwnProperty;function We(e,t,r){var n=e[t];qe.call(e,t)&&ge(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,l=t.length;++i<l;){var u=t[i],a=n?n(r[u],e[u],u,r,e):void 0;void 0===a&&(a=e[u]),o?Ve(r,u,a):We(r,u,a)}return r}var Ge=Object.prototype.hasOwnProperty;function He(e){if(!W(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=B(e),r=[];for(var n in e)("constructor"!=n||!t&&Ge.call(e,n))&&r.push(n);return r}function Ye(e){return G(e)?F(e,!0):He(e)}var Xe="object"==typeof exports&&exports&&!exports.nodeType&&exports,Qe=Xe&&"object"==typeof module&&module&&!module.nodeType&&module,Ze=Qe&&Qe.exports===Xe?u.Buffer:void 0,et=Ze?Ze.allocUnsafe:void 0;function tt(){return[]}var rt=Object.prototype.propertyIsEnumerable,nt=Object.getOwnPropertySymbols,ot=nt?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r<n;){var l=e[r];t(l,r,e)&&(i[o++]=l)}return i}(nt(e),function(t){return rt.call(e,t)}))}:tt,it=ot;function lt(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var ut=J(Object.getPrototypeOf,Object),at=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)lt(t,it(e)),e=ut(e);return t}:tt,st=at;function ct(e,t,r){var n=t(e);return O(e)?n:lt(n,r(e))}function dt(e){return ct(e,H,it)}function ft(e){return ct(e,Ye,st)}var pt=fe(u,"DataView"),mt=fe(u,"Promise"),ht=fe(u,"Set"),yt=fe(u,"WeakMap"),gt="[object Map]",vt="[object Promise]",bt="[object Set]",wt="[object WeakMap]",_t="[object DataView]",kt=oe(pt),Ot=oe(_e),Tt=oe(mt),jt=oe(ht),St=oe(yt),At=h;(pt&&At(new pt(new ArrayBuffer(1)))!=_t||_e&&At(new _e)!=gt||mt&&At(mt.resolve())!=vt||ht&&At(new ht)!=bt||yt&&At(new yt)!=wt)&&(At=function(e){var t=h(e),r="[object Object]"==t?e.constructor:void 0,n=r?oe(r):"";if(n)switch(n){case kt:return _t;case Ot:return gt;case Tt:return vt;case jt:return bt;case St:return wt}return t});var xt=At,$t=Object.prototype.hasOwnProperty;var Et=u.Uint8Array;function Mt(e){var t=new e.constructor(e.byteLength);return new Et(t).set(new Et(e)),t}var It=/\w*$/;var Nt=a?a.prototype:void 0,Dt=Nt?Nt.valueOf:void 0;function Ct(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Mt(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}(e,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(e);case"[object RegExp]":return function(e){var t=new e.constructor(e.source,It.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,Dt?Object(Dt.call(n)):{}}}var Lt=Object.create,Pt=function(){function e(){}return function(t){if(!W(t))return{};if(Lt)return Lt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Rt=Pt;var Ut=L&&L.isMap,Ft=Ut?I(Ut):function(e){return y(e)&&"[object Map]"==xt(e)};var zt=L&&L.isSet,Bt=zt?I(zt):function(e){return y(e)&&"[object Set]"==xt(e)},Jt="[object Arguments]",Vt="[object Function]",qt="[object Object]",Wt={};function Kt(e,t,r,n,o,i){var l,u=1&t,a=2&t,s=4&t;if(r&&(l=o?r(e,n,o,i):r(e)),void 0!==l)return l;if(!W(e))return e;var c=O(e);if(c){if(l=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&$t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}(e),!u)return function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}(e,l)}else{var d=xt(e),f=d==Vt||"[object GeneratorFunction]"==d;if(A(e))return function(e,t){if(t)return e.slice();var r=e.length,n=et?et(r):new e.constructor(r);return e.copy(n),n}(e,u);if(d==qt||d==Jt||f&&!o){if(l=a||f?{}:function(e){return"function"!=typeof e.constructor||B(e)?{}:Rt(ut(e))}(e),!u)return a?function(e,t){return Ke(e,st(e),t)}(e,function(e,t){return e&&Ke(t,Ye(t),e)}(l,e)):function(e,t){return Ke(e,it(e),t)}(e,function(e,t){return e&&Ke(t,H(t),e)}(l,e))}else{if(!Wt[d])return o?e:{};l=Ct(e,d,u)}}i||(i=new ze);var p=i.get(e);if(p)return p;i.set(e,l),Bt(e)?e.forEach(function(n){l.add(Kt(n,t,r,n,e,i))}):Ft(e)&&e.forEach(function(n,o){l.set(o,Kt(n,t,r,o,e,i))});var m=c?void 0:(s?a?ft:dt:a?Ye:H)(e);return function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););}(m||e,function(n,o){m&&(n=e[o=n]),We(l,o,Kt(n,t,r,o,e,i))}),l}function Gt(e,t){return t.length<2?e:Ue(e,function(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}(t,0,-1))}Wt[Jt]=Wt["[object Array]"]=Wt["[object ArrayBuffer]"]=Wt["[object DataView]"]=Wt["[object Boolean]"]=Wt["[object Date]"]=Wt["[object Float32Array]"]=Wt["[object Float64Array]"]=Wt["[object Int8Array]"]=Wt["[object Int16Array]"]=Wt["[object Int32Array]"]=Wt["[object Map]"]=Wt["[object Number]"]=Wt[qt]=Wt["[object RegExp]"]=Wt["[object Set]"]=Wt["[object String]"]=Wt["[object Symbol]"]=Wt["[object Uint8Array]"]=Wt["[object Uint8ClampedArray]"]=Wt["[object Uint16Array]"]=Wt["[object Uint32Array]"]=!0,Wt["[object Error]"]=Wt[Vt]=Wt["[object WeakMap]"]=!1;var Ht=Object.prototype.hasOwnProperty;function Yt(e,t){var r=-1,n=(t=Pe(t,e)).length;if(!n)return!0;for(;++r<n;){var o=Re(t[r]);if("__proto__"===o&&!Ht.call(e,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var i=Gt(e,t);return null==i||delete i[Re(function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}(t))]}var Xt=Function.prototype,Qt=Object.prototype,Zt=Xt.toString,er=Qt.hasOwnProperty,tr=Zt.call(Object);function rr(e){return function(e){if(!y(e)||"[object Object]"!=h(e))return!1;var t=ut(e);if(null===t)return!0;var r=er.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Zt.call(r)==tr}(e)?void 0:e}var nr=a?a.isConcatSpreadable:void 0;function or(e){return O(e)||k(e)||!!(nr&&e&&e[nr])}function ir(e,t,r,n,o){var i=-1,l=e.length;for(r||(r=or),o||(o=[]);++i<l;){var u=e[i];t>0&&r(u)?t>1?ir(u,t-1,r,n,o):lt(o,u):n||(o[o.length]=u)}return o}function lr(e){return(null==e?0:e.length)?ir(e,1):[]}var ur=Math.max;function ar(e){return e}var sr=Je?function(e,t){return Je(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:ar,cr=sr,dr=Date.now;var fr=function(e){var t=0,r=0;return function(){var n=dr(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(cr),pr=fr;var mr=function(e){return pr(function(e,t,r){return t=ur(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=ur(n.length-t,0),l=Array(i);++o<i;)l[o]=n[t+o];o=-1;for(var u=Array(t+1);++o<t;)u[o]=n[o];return u[t]=r(l),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,u)}}(e,void 0,lr),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,ft(e),r),n&&(r=Kt(r,7,rr));for(var o=t.length;o--;)Yt(r,t[o]);return r}),hr=mr;function yr(e){return"[object Object]"===Object.prototype.toString.call(e)}function gr(e){return"[object String]"===Object.prototype.toString.call(e)}function vr(e){return!(!gr(e)||""===e)}let br=2147483647;function wr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function _r(e){return e!=e}function kr(e){let t=!1;if(vr(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(_r(e))return!1;t=!0}return t}function Or(e=10){kr(e)||(e=10),e=Math.min(e,br);let t=wr();return setTimeout(function(){t.resolve()},e),t}var Tr=/\s/;var jr=/^\s+/;function Sr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&Tr.test(e.charAt(t)););return t}(e)+1).replace(jr,""):e}var Ar=/^[-+]0x[0-9a-f]+$/i,xr=/^0b[01]+$/i,$r=/^0o[0-7]+$/i,Er=parseInt;function Mr(e){if("number"==typeof e)return e;if(Y(e))return NaN;if(W(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=W(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Sr(e);var r=xr.test(e);return r||$r.test(e)?Er(e.slice(2),r?2:8):Ar.test(e)?NaN:+e}var Ir=1/0;function Nr(e){return e?(e=Mr(e))===Ir||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Dr(e){var t=Nr(e),r=t%1;return t==t?r?t-r:t:0}var Cr=u.isFinite,Lr=Math.min;var Pr=function(e){var t=Math[e];return function(e,r){if(e=Mr(e),(r=null==r?0:Lr(Dr(r),292))&&Cr(e)){var n=(Le(e)+"e").split("e");return+((n=(Le(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Rr=Pr;function Ur(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==h(t);var t}function Fr(e){if(!kr(e))return 0;return Nr(e)}function zr(e,t={}){let r=Fe(t,"useClampSafe",null);Ur(r)||(r=!1);let n=Fe(t,"useLimitSafe",null);Ur(n)||(n=!1);let o=Fe(t,"returnWithStateAndMsg",null);Ur(o)||(o=!1);let i=e=>o?{state:"success",msg:e}:e,l=e=>{if(o)return{state:"error",msg:e};throw new Error(e)};if(!kr(e))return i(0);let u=null;try{e=Fr(e),u=Rr(e),r&&(u>Number.MAX_SAFE_INTEGER?u=Number.MAX_SAFE_INTEGER:u<Number.MIN_SAFE_INTEGER&&(u=Number.MIN_SAFE_INTEGER))}catch(e){return l(e.toString())}return n&&!Number.isSafeInteger(Number(u))?l(`v[${e}] is not a safe integer`):("0"===String(u)&&(u=0),i(u))}function Br(e){return"[object Array]"===Object.prototype.toString.call(e)}function Jr(e){return K(e)}function Vr(e,t={}){let r=Fe(t,"useLimitSafe",null);return Ur(r)||(r=!1),!!kr(e)&&(e=Fr(e),r?Number.isSafeInteger(e):"number"==typeof(n=e)&&n==Dr(n));var n}function qr(e,t={}){if(!Vr(e,t))return!1;return zr(e)>0}function Wr(e,t={}){if(!Vr(e,t))return!1;return zr(e)>=0}function Kr(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?"":e.substring(0,t):""}function Gr(e,t){if(!vr(e))return"";if(!Wr(t))return"";if(0===(t=zr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Hr(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Gr(e,e.length-t):""}function Yr(e,t,r={}){if(!vr(e))return"";if(!Wr(t))return e;if(t=zr(t),e.length<=t)return e;let n=Fe(r,"funWithMsg"),o="";if(Jr(n)){let r=n(e,t);vr(r)&&(o=r)}return Kr(e,t)+`...${o}`}function Xr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Qr=t,Zr=Qr.spawn,en=Qr.exec;function tn(e,t,r){var n={};try{Object.keys(e).forEach(function(r){e[r].forEach(function(e){n[e]||(rn(e,t),n[e]=1)}),n[r]||(rn(r,t),n[r]=1)})}catch(e){if(r)return r(e);throw e}if(r)return r()}function rn(e,t){try{process.kill(parseInt(e,10),t)}catch(e){if("ESRCH"!==e.code)throw e}}function nn(e,t,r,n,o){var i=n(e),l="";i.stdout.on("data",function(e){e=e.toString("ascii");l+=e});i.on("close",function(i){delete r[e],0==i?l.match(/\d+/g).forEach(function(i){i=parseInt(i,10),t[e].push(i),t[i]=[],r[i]=1,nn(i,t,r,n,o)}):0==Object.keys(r).length&&o()})}var on=Xr(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":en("taskkill /pid "+e+" /T /F",r);break;case"darwin":nn(e,n,o,function(e){return Zr("pgrep",["-P",e])},function(){tn(n,t,r)});break;default:nn(e,n,o,function(e){return Zr("ps",["-o","pid","--no-headers","--ppid",e])},function(){tn(n,t,r)})}});function ln(e){let t=wr();return on(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}function un(e,t={}){let r=Fe(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function an(e){return function(e,t={}){let r=Fe(t,"fs");return!!un(e,{fs:r})&&!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink()}(e,{fs:r})}function sn(e,t={}){let r=null,n=Fe(t,"fs"),o="";try{o=n.readFileSync(e,"utf8")}catch(e){r=e}return null!==r?{error:r}:{success:o}}function cn(t){let n=Fe(sn(t,{fs:r}),"success","");if(!vr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let i=e.dirname(t),l=e.join(i,o[1]);return an(l)?l:null}let dn={buildSpawnArgs:function(r,n=[]){if(Br(n)||(n=[]),"win32"!==process.platform)return{file:r,args:n,opt:{}};let o=function(r){if("win32"!==process.platform)return r;if(/\.(cmd|exe|bat|ps1)$/i.test(r))return r;if(e.isAbsolute(r))return r;try{let e=t.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=e.find(e=>/\.cmd$/i.test(e));return n||(e.find(e=>/\.exe$/i.test(e))||e[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n,opt:{}};if(/\.(cmd|bat)$/i.test(o)){let e=cn(o);if(e)return/\.exe$/i.test(e)?{file:e,args:n,opt:{}}:{file:process.execPath,args:[e,...n],opt:{}};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,opt:{}}},buildSpawnEnv:function(e=void 0){let t={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==e){if("win32"===process.platform){let r=Object.keys(e).map(e=>e.toLowerCase());for(let e of Object.keys(t))r.includes(e.toLowerCase())&&delete t[e]}t={...t,...e}}return t}},{buildSpawnArgs:fn,buildSpawnEnv:pn}=dn,mn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function hn(e,r=[],n={}){let{timeoutMs:o=12e4,cwd:i=process.cwd(),input:l,validate:u,maxBuffer:a=10485760,onStdout:s,onStderr:c,env:d}=n,f=function(e){if(Jr(e))return e;if(!vr(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(!vr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Kr(r,4)){let t=Hr(r,4);if(!kr(t))return!1;let n=zr(t);if(!vr(e)||e.length<n)return!1}return!0}}(u),p=Date.now(),m=wr(),h=pn(d),y=fn(e,r),g=t.spawn(y.file,y.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...y.opt}),v="",b="",w=new TextDecoder("utf-8"),_=new TextDecoder("utf-8"),k=!1,O=!1;g.stdout.on("data",e=>{let t=w.decode(e,{stream:!0});t&&(Jr(s)&&s(t),v.length<a&&(v+=t))}),g.stderr.on("data",e=>{let t=_.decode(e,{stream:!0});t&&(Jr(c)&&c(t),b.length<a&&(b+=t))}),g.stdin.on("error",()=>{}),void 0!==l&&g.stdin.write(l,"utf8"),g.stdin.end();let T=setTimeout(()=>{k||(O=!0,ln(g.pid).catch(()=>{}),setTimeout(()=>{k||(k=!0,m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,500,mn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:g.pid}))},3e3).unref())},o);return g.on("error",e=>{k||(k=!0,clearTimeout(T),m.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-p,pid:g.pid}))}),g.on("close",(e,t)=>{if(k)return;k=!0,clearTimeout(T);let r=w.decode();r&&v.length<a&&(v+=r);let n=_.decode();n&&b.length<a&&(b+=n);let i=Date.now()-p;O?m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,500,mn),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:g.pid}):0===e?!f||f(v)?m.resolve({ok:!0,stdout:v,stderr:b,code:0,error:"",durationMs:i,pid:g.pid}):m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,500,mn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:g.pid}):m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,1e3,mn),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:g.pid})}),m}async function yn(e,t=[],r={}){if(!vr(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Br(t)||(t=[]),yr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,l=Fe(i,"cwd",null);vr(l)?i.cwd=l:i.cwd=process.cwd();let u=Fe(i,"input",null);vr(u)?i.input=u:i.input=void 0;let a=Fe(i,"env",null);yr(a)?i.env=a:i.env=void 0;let s=Fe(i,"validate",null);Jr(s)||vr(s)?i.validate=s:i.validate=void 0;let c=Fe(i,"onStdout",null);Jr(c)?i.onStdout=c:i.onStdout=void 0;let d=Fe(i,"onStderr",null);Jr(d)?i.onStderr=d:i.onStderr=void 0,n=Wr(n)?zr(n):0,o=qr(o)?zr(o):5e3;let f=Fe(i,"timeoutMs",null);qr(f)?i.timeoutMs=zr(f):i.timeoutMs=12e4,i.timeoutMs=Math.min(i.timeoutMs,br);let p,m=Fe(i,"maxBuffer",null);qr(m)?i.maxBuffer=zr(m):i.maxBuffer=10485760;let h=0;for(let r=0;r<=n;r++){if(r>0){let e=Math.min(o*r,15e3);await Or(e)}if(p=await hn(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 gn(...e){let t=[];for(let r of e)if(Br(r))for(let e of r)vr(e)&&t.push(e);else vr(r)&&t.push(r);return t}function vn(e,t="params"){return vr(e)||(e="unknown error"),vr(t)||(t="params"),{ok:!1,stdout:"",stderr:"",code:null,error:e,errorType:t,durationMs:0,attempts:0}}function bn(e){let t=Fe(e,"error","");return vr(t)?0===t.indexOf("TIMEOUT")?"timeout":t.includes("ENOENT")||t.includes("ENAMETOOLONG")?"spawn":"OUTPUT_VALIDATION_FAILED"===t?"validation":"exec":"exec"}function wn(e){return!0===Fe(e,"ok",!1)||vr(Fe(e,"errorType",null))?e:{...e,errorType:bn(e)}}function _n(e,t){return qr(e)?zr(e):t}let kn=3e5,On=["exe","model","key","provider","useStoredAuth","agent","config","extraArgs","input","env"];async function Tn(t,r={}){if(!vr(t))return vn("prompt must be a non-empty string");let n=Fe(r,"exe",null);vr(n)||(n="opencode");let o=Fe(r,"model",null),i=Fe(r,"agent",null);vr(i)||(i="build");let l=Fe(r,"extraArgs",null),u=gn("run",["--agent",i],vr(o)?["-m",o]:[],l),a=Fe(r,"env",null);yr(a)||(a=void 0);let s=Fe(r,"config",null);yr(s)&&(s=JSON.stringify(s)),vr(s)&&(a={...a,OPENCODE_CONFIG_CONTENT:s});let c=Fe(r,"key",null),d=Fe(r,"provider",null),f=!1!==Fe(r,"useStoredAuth",null);vr(c)&&vr(d)?a={...a,OPENCODE_AUTH_CONTENT:JSON.stringify({[d]:{type:"api",key:c}})}:f||(a={...a,OPENCODE_AUTH_CONTENT:"{}"});let p=Fe(r,"cwd",null);p=vr(p)?e.resolve(p):process.cwd(),a={...a,PWD:p};let m=_n(Fe(r,"timeoutMs",null),kn),h=hr(r,On);return wn(await yn(n,u,{...h,input:t,env:a,timeoutMs:m}))}let jn=["exe","model","skipPermissions","extraArgs","input"];async function Sn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"exe",null);vr(r)||(r="claude");let n=Fe(t,"model",null),o=Fe(t,"skipPermissions",null);Ur(o)||(o=!0);let i=Fe(t,"extraArgs",null),l=gn("-p",o?"--dangerously-skip-permissions":[],vr(n)?["--model",n]:[],i),u=_n(Fe(t,"timeoutMs",null),kn),a=hr(t,jn);return wn(await yn(r,l,{...a,input:e,timeoutMs:u}))}let An=["exe","model","sandbox","extraArgs","input"];async function xn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"exe",null);vr(r)||(r="codex");let n=Fe(t,"model",null),o=Fe(t,"sandbox",null);vr(o)||(o="workspace-write");let i=Fe(t,"extraArgs",null),l=gn("exec",["--sandbox",o],"--skip-git-repo-check",vr(n)?["-m",n]:[],i),u=_n(Fe(t,"timeoutMs",null),kn),a=hr(t,An);return wn(await yn(r,l,{...a,input:e,timeoutMs:u}))}let $n=kn,En=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function Mn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");if(e.length>3e4)return vn(`prompt too long (${e.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Fe(t,"exe",null);vr(r)||(r="agy");let n=Fe(t,"model",null),o=Fe(t,"effort",null),i=Fe(t,"skipPermissions",null);Ur(i)||(i=!0);let l=_n(Fe(t,"timeoutMs",null),$n),u=Fe(t,"printTimeout",null);vr(u)||(u=`${Math.max(30,Math.floor(l/1e3)-30)}s`);let a=Fe(t,"addDirs",null);if(!Br(a)){let e=Fe(t,"cwd",null);vr(e)||(e=process.cwd()),a=[e]}let s=[];for(let e of a)vr(e)&&s.push("--add-dir",e);let c=Fe(t,"extraArgs",null),d=gn(i?"--dangerously-skip-permissions":[],["--print-timeout",u],vr(n)?["--model",n]:[],vr(o)?["--effort",o]:[],s,c,["--print",e]),f=hr(t,En);try{return wn(await yn(r,d,{...f,timeoutMs:l}))}catch(e){return vn(`${e.code||"UNKNOWN"}: ${e.message}`,"spawn")}}function In(e){if(Jr(e))return e;if(!vr(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(!vr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Kr(r,4)){let t=Hr(r,4);if(!kr(t))return!1;let n=zr(t);if(!vr(e)||e.length<n)return!1}return!0}}let Nn=["length","content_filter"];function Dn(e){return vr(e)?e.trim().toLowerCase():""}function Cn(e,t){try{return{pass:!!e(t),threw:""}}catch(e){let t=Fe(e,"message","");return{pass:!1,threw:vr(t)?t:String(e)}}}function Ln(e){let t=Fe(e,"finishReason",""),r=Fe(e,"content",null),n=!0===Fe(e,"acceptTruncated",!1),o=Fe(e,"validator",null),i=Fe(e,"reasoningTokens",null),l=`INCOMPLETE_RESPONSE: ${Fe(e,"label","")}`;if(""===(vr(r)?r.trim():"")){return{accept:!1,error:`${l}; no visible output (reasoning may have used up the output token limit${kr(i)?`, reasoning_tokens=${i}`:""})`,threw:""}}if("length"!==t||!n)return{accept:!1,error:l,threw:""};if("function"==typeof o){let e=Cn(o,r);if(!e.pass)return{accept:!1,error:`${l}; rejected by validate`,threw:e.threw}}return{accept:!0,error:"",threw:""}}let Pn="INVALID_RESPONSE: body is not JSON";function Rn(e,t){let r=e instanceof Uint8Array?e:new Uint8Array(0),n=Array.from(r.subarray(0,16)).map(e=>e.toString(16).padStart(2,"0")).join(""),o=e=>{let r="function"==typeof Fe(t,"get",null)?t.get(e):null;return vr(r)?r:"none"},i=r.length>16?"...":"";return`${Pn} (${r.length} bytes, first bytes ${n||"(none)"}${i}, content-encoding=${o("content-encoding")}, content-type=${o("content-type")})`}let Un=kn,Fn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function zn(e,t,r,n,o,i){let l=Date.now(),u=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-l,usage:null,...e}),a=new AbortController,s=setTimeout(()=>{a.abort()},n),c=null,d=new Uint8Array(0),f="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=new Uint8Array(await c.arrayBuffer()),f=new TextDecoder("utf-8").decode(d)}catch(e){if(clearTimeout(s),"AbortError"===e.name)return u({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return u({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(s),!c.ok)return u({stderr:Yr(f,1e3,Fn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,m=null,h=null,y=null,g=!0;try{let e=JSON.parse(f);p=Fe(e,"choices.0.message.content",null),m=Fe(e,"choices.0.finish_reason",null),h=Fe(e,"choices.0.message.tool_calls",null),y=Fe(e,"usage",null),yr(y)||(y=null)}catch{g=!1}if(!g)return u({stderr:Yr(f,500,Fn),code:c.status,error:Rn(d,c.headers),errorType:"invalid-response",finishReason:"",truncated:!1});let v=Dn(m),b={finishReason:v,truncated:Nn.includes(v)};if("tool_calls"===v||null!=h)return u({stderr:Yr(f,1e3,Fn),code:c.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:y,...b});if(void 0===p&&(p=null),null!==p&&"string"!=typeof p&&(p=JSON.stringify(p)),b.truncated){let e=Ln({finishReason:v,content:p,acceptTruncated:i,validator:o,reasoningTokens:Fe(y,"completion_tokens_details.reasoning_tokens",null),label:`finish_reason=${v}`});return e.accept?u({ok:!0,stdout:p,code:c.status,usage:y,...b}):u({stdout:Yr(p||"",500,Fn),stderr:Yr((e.threw?`validate threw: ${e.threw}\n`:"")+f,500,Fn),code:c.status,error:e.error,errorType:"incomplete",usage:y,...b})}if(null===p)return u({stderr:Yr(f,500,Fn),code:c.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:y,...b});if(o){let e=Cn(o,p);if(!e.pass)return u({stdout:Yr(p,500,Fn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:y,...b})}return u({ok:!0,stdout:p,code:c.status,usage:y,...b})}async function Bn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"baseURL",null);if(!vr(r))return vn("baseURL must be a non-empty string");let n=Fe(t,"model",null);if(!vr(n))return vn("model must be a non-empty string");let o=Fe(t,"key",null),i=Fe(t,"system",null),l=Fe(t,"body",null);yr(l)||(l={});let u=Fe(t,"headers",null);yr(u)||(u={});let a=_n(Fe(t,"timeoutMs",null),Un),s=Fe(t,"maxRetries",null);s=Wr(s)?zr(s):0;let c=_n(Fe(t,"retryDelayMs",null),5e3),d=In(Fe(t,"validate",null)),f=!0===Fe(t,"acceptTruncated",null),p=r.replace(/\/+$/,"")+"/chat/completions",m=[];vr(i)&&m.push({role:"system",content:i}),m.push({role:"user",content:e});let h={model:n,messages:m,...l},y={"Content-Type":"application/json","Accept-Encoding":"identity",...u};vr(o)&&(y.Authorization=`Bearer ${o}`);let g=null,v=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),g=await zn(p,y,h,a,d,f),v=e+1,g.ok)return g.attempts=v,g;if(!0===g.truncated)break;let t=g.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return g.attempts=v,g}let Jn=kn,Vn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function qn(e){if(!Br(e))return"";let t=[];for(let r of e){if("message"!==Fe(r,"type",""))continue;let e=Fe(r,"content",null);if(Br(e))for(let r of e){let e=Fe(r,"text",null);vr(e)&&t.push(e)}}return t.join("")}async function Wn(e,t,r,n,o,i){let l=Date.now(),u=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-l,usage:null,...e}),a=new AbortController,s=setTimeout(()=>{a.abort()},n),c=null,d=new Uint8Array(0),f="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=new Uint8Array(await c.arrayBuffer()),f=new TextDecoder("utf-8").decode(d)}catch(e){if(clearTimeout(s),"AbortError"===e.name)return u({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return u({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(s),!c.ok)return u({stderr:Yr(f,1e3,Vn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,m="",h="",y="",g=null,v=!0;try{let e=JSON.parse(f);p=Fe(e,"output",null),m=Fe(e,"status",""),h=Fe(e,"incomplete_details.reason",""),y=Fe(e,"error.message","")||Fe(e,"error.code",""),g=Fe(e,"usage",null),yr(g)||(g=null)}catch{v=!1}if(!v)return u({stderr:Yr(f,500,Vn),code:c.status,error:Rn(d,c.headers),errorType:"invalid-response",usage:g,finishReason:"",truncated:!1});let b=Dn(m),w=Dn(h),_=b;"completed"===b?_="stop":"incomplete"===b&&(_="max_output_tokens"===w?"length":w||"incomplete");let k={finishReason:_,truncated:"incomplete"===b},O=h||y||m||"unknown",T=Br(p);if(T&&p.some(e=>"function_call"===Fe(e,"type","")))return u({stderr:Yr(f,1e3,Vn),code:c.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:g,...k});if(k.truncated){let e=T?qn(p):"",t=Ln({finishReason:_,content:e,acceptTruncated:i,validator:o,reasoningTokens:Fe(g,"output_tokens_details.reasoning_tokens",null),label:`status=${m} (${O})`});return t.accept?u({ok:!0,stdout:e,code:c.status,usage:g,...k}):u({stdout:Yr(e,500,Vn),stderr:Yr((t.threw?`validate threw: ${t.threw}\n`:"")+f,500,Vn),code:c.status,error:t.error,errorType:"incomplete",usage:g,...k})}if(!T)return u({stderr:Yr(f,500,Vn),code:c.status,error:"INVALID_RESPONSE: missing output array",errorType:"invalid-response",usage:g,...k});if("completed"!==b)return u({stdout:Yr(qn(p),500,Vn),stderr:Yr(f,500,Vn),code:c.status,error:`INCOMPLETE_RESPONSE: status=${m||"missing"} (${O})`,errorType:"incomplete",usage:g,...k});let j=qn(p);if(""===j)return u({stderr:Yr(f,500,Vn),code:c.status,error:"INVALID_RESPONSE: no output_text in output messages",errorType:"invalid-response",usage:g,...k});if(o){let e=Cn(o,j);if(!e.pass)return u({stdout:Yr(j,500,Vn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:g,...k})}return u({ok:!0,stdout:j,code:c.status,usage:g,...k})}async function Kn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"baseURL",null);if(!vr(r))return vn("baseURL must be a non-empty string");let n=Fe(t,"model",null);if(!vr(n))return vn("model must be a non-empty string");let o=Fe(t,"key",null),i=Fe(t,"system",null),l=Fe(t,"body",null);yr(l)||(l={});let u=Fe(t,"headers",null);yr(u)||(u={});let a=_n(Fe(t,"timeoutMs",null),Jn),s=Fe(t,"maxRetries",null);s=Wr(s)?zr(s):0;let c=_n(Fe(t,"retryDelayMs",null),5e3),d=In(Fe(t,"validate",null)),f=!0===Fe(t,"acceptTruncated",null),p=r.replace(/\/+$/,"")+"/responses",m={model:n,input:e};vr(i)&&(m.instructions=i),m={...m,...l};let h={"Content-Type":"application/json","Accept-Encoding":"identity",...u};vr(o)&&(h.Authorization=`Bearer ${o}`);let y=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),y=await Wn(p,h,m,a,d,f),g=e+1,y.ok)return y.attempts=g,y;if(!0===y.truncated)break;let t=y.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return y.attempts=g,y}function Gn(e){if(yr(e)){for(let t in e)return!0;return!1}return!1}let Hn=kn,Yn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Xn(e,t,r,n,o,i){let l=Date.now(),u=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-l,usage:null,answers:null,modelResolved:"",...e}),a=new AbortController,s=setTimeout(()=>{a.abort()},o),c=null,d=new Uint8Array(0),f="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=new Uint8Array(await c.arrayBuffer()),f=new TextDecoder("utf-8").decode(d)}catch(e){if(clearTimeout(s),"AbortError"===e.name)return u({error:`TIMEOUT after ${o/1e3}s`,errorType:"timeout"});return u({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(s),!c.ok)return u({stderr:Yr(f,1e3,Yn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,m="",h=null,y=!0;try{let e=JSON.parse(f);p=Fe(e,"answers",null),m=Fe(e,"model",""),vr(m)||(m=""),h=Fe(e,"usage",null),yr(h)||(h=null)}catch{y=!1}if(!y)return u({stderr:Yr(f,500,Yn),code:c.status,error:Rn(d,c.headers),errorType:"invalid-response"});if(!yr(p))return u({stderr:Yr(f,500,Yn),code:c.status,error:"INVALID_RESPONSE: missing answers object",errorType:"invalid-response",usage:h,modelResolved:m});let g=n.filter(e=>!yr(p[e]));if(g.length>0)return u({stderr:Yr(f,500,Yn),code:c.status,error:`INVALID_RESPONSE: missing answers for [${g.join(", ")}]`,errorType:"invalid-response",usage:h,modelResolved:m});let v=JSON.stringify(p);if(i){let e=Cn(i,v);if(!e.pass)return u({stdout:Yr(v,500,Yn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:h,modelResolved:m})}return u({ok:!0,stdout:v,code:c.status,usage:h,answers:p,modelResolved:m})}async function Qn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"questions",null);if(!Gn(r))return vn("questions must be a non-empty object");let n=Fe(t,"baseURL",null);vr(n)||(n="https://api.typesafe.ai/v1");let o=Fe(t,"model",null);vr(o)||(o="jev-latest");let i=Fe(t,"key",null),l=Fe(t,"body",null);yr(l)||(l={});let u=Fe(t,"headers",null);yr(u)||(u={});let a=_n(Fe(t,"timeoutMs",null),Hn),s=Fe(t,"maxRetries",null);s=Wr(s)?zr(s):0;let c=_n(Fe(t,"retryDelayMs",null),5e3),d=In(Fe(t,"validate",null)),f=n.replace(/\/+$/,"")+"/systemone",p={model:o,state:e,questions:r,...l},m=Object.keys(yr(p.questions)?p.questions:r),h={"Content-Type":"application/json","Accept-Encoding":"identity",...u};vr(i)&&(h.Authorization=`Bearer ${i}`);let y=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),y=await Xn(f,h,p,m,a,d),g=e+1,y.ok)return y.attempts=g,y;let t=y.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return y.attempts=g,y}let Zn={opencode:Tn,claude:Sn,codex:xn,antigravity:Mn,"api-openai-compat":Bn,"api-openai-responses":Kn,"api-typesafe-systemone":Qn};function eo(e){return e!=e}function to(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,H(e))}var ro=Math.max;function no(e,t,r,n){e=G(e)?e:to(e),r=r&&!n?Dr(r):0;var o=e.length;return r<0&&(r=ro(o+r,0)),function(e){return"string"==typeof e||!O(e)&&y(e)&&"[object String]"==h(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,eo,r)}(e,t,r)>-1}async function oo(e,t,r={}){let n=H(Zn);return vr(e)&&no(n,e)?(0,Zn[e])(t,r):vn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let io=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],lo=["id","keys","meta"],uo=kn,ao={cursors:{}};function so(e){return void 0!==Fe(e,"truncated",void 0)?{truncated:e.truncated,finishReason:e.finishReason}:{}}function co(e){let t=Fe(e,"error","");vr(t)||(t="");let r=Fe(e,"code",null);return 0===t.indexOf("TIMEOUT")||(!!t.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===t||(!0===Fe(e,"truncated",!1)||(0===t.indexOf("TOOL_CALLS_UNSUPPORTED")||(0===t.indexOf(Pn)||0===t.indexOf("unknown ai kind")))))))}async function fo(e,t={}){if(!vr(e))return{...vn("prompt must be a non-empty string"),tried:[]};let r=Fe(t,"providers",null),n=Br(r)?r.filter(yr):[];if(0===n.length)return{...vn("providers must be a non-empty array"),tried:[]};let o=_n(Fe(t,"budgetMs",null),null),i=null===o?null:Date.now()+o,l=_n(Fe(t,"minAttemptMs",null),2e4),{state:u,saveState:a}=function(e){let t=yr(e)&&Jr(e.get)&&Jr(e.set),r=null;if(t)try{r=e.get()}catch{}return yr(r)||(r=t?{cursors:{}}:ao),yr(r.cursors)||(r.cursors={}),yr(r.cooling)||(r.cooling={}),{state:r,saveState:()=>{if(t)try{e.set(r)}catch{}}}}(Fe(t,"store",null)),s=_n(Fe(t,"cooldownMs",null),0),c=Fe(t,"coolDetect",null);Jr(c)||(c=null);let d=Fe(t,"shouldStop",null);Jr(d)||(d=null);let f=()=>{if(null===d)return!1;try{return!0===d()}catch{return!1}};s>0&&(n=function(e,t,r,n){let o=Date.now(),i=[],l=[],u=!1;for(let n of e){let e=Fe(n,"id",null),a=vr(e)?Fe(t.cooling,e,null):null;qr(a)&&o-a<r?l.push(n):(vr(e)&&void 0!==t.cooling[e]&&(delete t.cooling[e],u=!0),i.push(n))}return u&&n(),[...i,...l]}(n,u,s,a));let p=Fe(t,"onEvent",null),m=e=>{if(Jr(p))try{p(e)}catch{}},h=hr(t,io),y=[],g=null,v=null;for(let t=0;t<n.length;t++){let r=n[t],o=Fe(r,"id",null),d=vr(o);d||(o=String(t));let p=Fe(r,"kind",null),b=Fe(r,"model",null),w=Fe(r,"keys",null),_=Br(w)?w.filter(vr):[],k=_.length,O=hr(r,lo),T=0;if(k>0){let e=Fe(u.cursors,o,0);T=qr(e)?zr(e)%k:0}let j=k>0?k:1,S=!1;for(let t=0;t<j&&!S;t++){if(f())return m({type:"aborted",providerId:o,keyIndex:null,keyId:o}),y.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...vn("ABORTED","aborted"),tried:y};let r=k>0?(T+t)%k:null,n=null===r?o:`${o}#${r}`,w={...h,...O};k>0&&(w.key=_[r]);let j=_n(Fe(w,"timeoutMs",null),uo);if(null!==i){let e=i-Date.now();if(e<l)return m({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...vn("budget exhausted","budget"),tried:y};j=Math.min(j,e)}w.timeoutMs=j,m({type:"try",providerId:o,keyIndex:r,keyId:n,kind:p,model:b});let A=await oo(p,e,w);if(A.ok)return s>0&&d&&void 0!==u.cooling[o]&&(delete u.cooling[o],a()),k>0&&(u.cursors[o]=(r+1)%k,a()),m({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:A.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{},...so(A)}),{...A,providerId:o,keyIndex:r,kind:p,model:b,tried:y};if(g=A,v={providerId:o,keyIndex:r,kind:p,model:b},s>0&&d){let e=429===A.code||vr(A.error)&&0===A.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(A)}catch{}e&&(u.cooling[o]=Date.now(),a(),m({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:A.error,cooldownMs:s}))}co(A)?(m({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),y.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}:{},...so(A)}),S=!0):(m({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),y.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}:{},...so(A)}))}}return{...g||vn("all providers failed","exec"),...v||{},tried:y}}function po(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!(!gr(e)||""!==e)}(e)||(!!function(e){return!!Br(e)&&0===e.length}(e)||!!_r(e)))))}function mo(e){return!!Br(e)&&(0!==e.length&&(1!==e.length||!po(e[0])))}function ho(e){let t=String(e||"");if(t=t.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),t=t.replace(/```(?:json)?/g,""),t=t.trim(),""===t)return null;try{let e=JSON.parse(t);if(null!==e&&"object"==typeof e)return e}catch(e){}let r=-1;for(let e=0;e<t.length;e++)if("{"===t[e]||"["===t[e]){r=e;break}if(r<0)return null;let n=0,o=!1,i=!1;for(let e=r;e<t.length;e++){let l=t[e];if(o)i?i=!1:"\\"===l?i=!0:'"'===l&&(o=!1);else if('"'===l)o=!0;else if("{"===l||"["===l)n++;else if(("}"===l||"]"===l)&&(n--,0===n)){try{let n=JSON.parse(t.slice(r,e+1));if(null!==n&&"object"==typeof n)return n}catch(e){}return null}}return null}let yo=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),go=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function vo(e,t={}){let r=Date.now();if(!vr(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",errorType:"params",ms:0,tried:[]};let n=Fe(t,"providers",null),o=Fe(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:l}=function(e,t){let r=[Fe(t,"use","")],n=Fe(t,"fallback",null);mo(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Fe(e,t,null);yr(r)?o.push({id:t,...r}):i.push(String(t))}return{chain:o,missing:i}}(n,o);if(l.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${l.join(", ")}`,errorType:"params",ms:0,tried:[]};if(0===i.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,errorType:"params",ms:0,tried:[]};let u=!0===Fe(t,"rawText",!1),a=Fe(t,"parse",null),s=Jr(a);s||(a=ho);let c=Fe(t,"check",null);Jr(c)||(c=null);let d=Fe(t,"acceptTruncated",null);Ur(d)||(d=s&&!u);let f=Fe(t,"promptPrefix",null);vr(f)||(f=""===f?"":yo);let p=e=>{try{if(u){let t=String(e||"").trim();return""!==t&&(!c||!0===c(t))}let t=a(e);return null!==t&&(!c||!0===c(t))}catch{return!1}};i=i.map(e=>{let t=In(Fe(e,"validate",null));return null===t?e:{...e,validate:e=>Cn(t,e).pass&&p(e)}});let m=await fo(f+e,{...hr(t,go),providers:i,validate:p,acceptTruncated:d,timeoutMs:Fe(t,"timeoutMs",null)||kn}),h=null;if(m.ok)try{h=u?String(m.stdout||"").trim():a(m.stdout)}catch{h=null}let y=m.ok&&null!==h,g=Fe(m,"providerId",null),v=Fe(m,"keyIndex",null);return{ok:y,json:h,providerId:g,keyIndex:v,keyId:null===v?g:`${g}#${v}`,ms:Date.now()-r,tried:Fe(m,"tried",[]),usage:Fe(m,"usage",null),finishReason:Fe(m,"finishReason",""),truncated:!0===Fe(m,"truncated",!1),error:y?"":m.ok?"OUTPUT_VALIDATION_FAILED":Fe(m,"error","unknown error"),...y?{}:{errorType:m.ok?"validation":Fe(m,"errorType","exec")}}}async function bo(e={}){let t=Date.now(),r=Fe(e,"providers",null),n=Fe(e,"task",""),o=Fe(e,"agents",null),i=Fe(e,"integrate",null),l=Fe(e,"check",null),u=Fe(e,"callOpt",{});if(!vr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!mo(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let a=Fe(e,"minCandidates",null);a=qr(a)?zr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:a,...s}=e;return vo(n,{...u,...s,providers:r,spec:{use:t,fallback:o},check:Jr(i)?i:l})})),c=s.filter(e=>e.ok).map(e=>e.json);if(0===c.length)return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-t,error:"all agents failed"};if(1===c.length||c.length<a)return{ok:!0,result:c[0],integrated:!1,agents:s,candidates:c,totalMs:Date.now()-t,error:""};if(!i||!vr(Fe(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:d,fallback:f,prompt:p,check:m,meta:h,...y}=i,g=Jr(p)?p(c):function(e,t={}){let r=Fe(t,"schema",""),n=vr(r)?`\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同:\n${r}\n`:"\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同。\n";return`你是整合者。以下是同一任務由 ${e.length} 個獨立執行產生的候選結果(JSON),請整合成單一最佳版本:擇優合併、去重、保留最完整的證據標注與爭議呈現,不可加入候選中沒有的數字或結論。\n${n}\n${e.map((e,t)=>`【候選 ${t+1}】\n${JSON.stringify(e)}`).join("\n\n")}`}(c,e),v=await vo(g,{...u,...y,providers:r,spec:{use:d,fallback:f},check:Jr(m)?m:l});return{ok:v.ok,result:v.ok?v.json:null,integrated:v.ok,agents:s,candidates:c,integrateDetail:v,totalMs:Date.now()-t,error:v.ok?"":`integrate failed: ${v.error}`}}let wo=["id","use","fallback","prompt","check","meta"];async function _o(e={}){let t=Date.now(),r=Fe(e,"providers",null),n=Fe(e,"input",null),o=Fe(e,"stages",null),i=Fe(e,"callOpt",{});if(!mo(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let l={},u={},a=[],s=null;for(let e=0;e<o.length;e++){let c=o[e],d=vr(Fe(c,"id",""))?c.id:`stage${e+1}`;a.push(d);let f=Fe(c,"prompt",null);if(!Jr(f))return u[d]={ok:!1,error:`stage[${d}].prompt must be a function`},{ok:!1,result:null,stages:u,results:l,order:a,failedStage:d,totalMs:Date.now()-t,error:u[d].error};let p=f({input:n,prev:s,results:l,index:e});if(!vr(p))return u[d]={ok:!1,error:`stage[${d}].prompt returned empty`},{ok:!1,result:null,stages:u,results:l,order:a,failedStage:d,totalMs:Date.now()-t,error:u[d].error};let m=hr(c,wo),h=await vo(p,{...i,...m,providers:r,spec:{use:Fe(c,"use",""),fallback:Fe(c,"fallback",null)},check:Fe(c,"check",null)});if(u[d]=h,!h.ok)return{ok:!1,result:null,stages:u,results:l,order:a,failedStage:d,totalMs:Date.now()-t,error:`stage[${d}] failed: ${h.error}`};l[d]=h.json,s=h.json}return{ok:!0,result:s,stages:u,results:l,order:a,failedStage:null,totalMs:Date.now()-t,error:""}}let ko=["stages","input"],Oo=["task","agents","integrate","check","schema","minCandidates"];let To={edit:"deny",bash:"ask"},jo=["--tools","Read,Glob,Grep","--strict-mcp-config"],So=[{id:"oc:agnes-ai/agnes-3.0-flash",model:"agnes-ai/agnes-3.0-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-3.0-flash":{name:"Agnes 3.0 Flash"}}}},permission:To}},{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:To}},{id:"oc:opencode/muse-spark-1.2-contributor-free",model:"opencode/muse-spark-1.2-contributor-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{id:"oc:opencode/muse-spark-1.3-contributor-free",model:"opencode/muse-spark-1.3-contributor-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{id:"oc:opencode/big-pickle",model:"opencode/big-pickle",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{id:"oc:opencode/mimo-v2.6-flash-free",model:"opencode/mimo-v2.6-flash-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{id:"oc:opencode/space-bunny-free",model:"opencode/space-bunny-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{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:jo},{id:"claude:opus-5.5",model:"claude-opus-5-5",kind:"claude",extraArgs:jo},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only"},{id:"codex:gpt-6-sol",model:"gpt-6-sol",kind:"codex",sandbox:"read-only"},{id:"typesafe:jev-latest",model:"jev-latest",kind:"api-typesafe-systemone",envVar:"TYPESAFE_KEYS"},{id:"zen:jev-1.13-free",model:"jev-1.13-free",kind:"api-typesafe-systemone",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1"},{id:"agnes:agnes-3.0-flash",model:"agnes-3.0-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:space-bunny-free",model:"space-bunny-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:32768}}];var Ao=Array.prototype.join;function xo(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Oe;++t<r;)this.add(e[t])}function $o(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 Eo(e,t){return e.has(t)}xo.prototype.add=xo.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},xo.prototype.has=function(e){return this.__data__.has(e)};function Mo(e,t,r,n,o,i){var l=1&r,u=e.length,a=t.length;if(u!=a&&!(l&&a>u))return!1;var s=i.get(e),c=i.get(t);if(s&&c)return s==t&&c==e;var d=-1,f=!0,p=2&r?new xo:void 0;for(i.set(e,t),i.set(t,e);++d<u;){var m=e[d],h=t[d];if(n)var y=l?n(h,m,d,t,e,i):n(m,h,d,e,t,i);if(void 0!==y){if(y)continue;f=!1;break}if(p){if(!$o(t,function(e,t){if(!Eo(p,t)&&(m===e||o(m,e,r,n,i)))return p.push(t)})){f=!1;break}}else if(m!==h&&!o(m,h,r,n,i)){f=!1;break}}return i.delete(e),i.delete(t),f}function Io(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function No(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var Do=a?a.prototype:void 0,Co=Do?Do.valueOf:void 0;var Lo=Object.prototype.hasOwnProperty;var Po="[object Arguments]",Ro="[object Array]",Uo="[object Object]",Fo=Object.prototype.hasOwnProperty;function zo(e,t,r,n,o,i){var l=O(e),u=O(t),a=l?Ro:xt(e),s=u?Ro:xt(t),c=(a=a==Po?Uo:a)==Uo,d=(s=s==Po?Uo:s)==Uo,f=a==s;if(f&&A(e)){if(!A(t))return!1;l=!0,c=!1}if(f&&!c)return i||(i=new ze),l||R(e)?Mo(e,t,r,n,o,i):function(e,t,r,n,o,i,l){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 ge(+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 u=Io;case"[object Set]":var a=1&n;if(u||(u=No),e.size!=t.size&&!a)return!1;var s=l.get(e);if(s)return s==t;n|=2,l.set(e,t);var c=Mo(u(e),u(t),n,o,i,l);return l.delete(e),c;case"[object Symbol]":if(Co)return Co.call(e)==Co.call(t)}return!1}(e,t,a,r,n,o,i);if(!(1&r)){var p=c&&Fo.call(e,"__wrapped__"),m=d&&Fo.call(t,"__wrapped__");if(p||m){var h=p?e.value():e,y=m?t.value():t;return i||(i=new ze),o(h,y,r,n,i)}}return!!f&&(i||(i=new ze),function(e,t,r,n,o,i){var l=1&r,u=dt(e),a=u.length;if(a!=dt(t).length&&!l)return!1;for(var s=a;s--;){var c=u[s];if(!(l?c in t:Lo.call(t,c)))return!1}var d=i.get(e),f=i.get(t);if(d&&f)return d==t&&f==e;var p=!0;i.set(e,t),i.set(t,e);for(var m=l;++s<a;){var h=e[c=u[s]],y=t[c];if(n)var g=l?n(y,h,c,t,e,i):n(h,y,c,e,t,i);if(!(void 0===g?h===y||o(h,y,r,n,i):g)){p=!1;break}m||(m="constructor"==c)}if(p&&!m){var v=e.constructor,b=t.constructor;v==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof b&&b instanceof b||(p=!1)}return i.delete(e),i.delete(t),p}(e,t,r,n,o,i))}function Bo(e,t,r,n,o){return e===t||(null==e||null==t||!y(e)&&!y(t)?e!=e&&t!=t:zo(e,t,r,n,Bo,o))}function Jo(e){return e==e&&!W(e)}function Vo(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function qo(e){var t=function(e){for(var t=H(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Jo(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,l=!n;if(null==e)return!i;for(e=Object(e);o--;){var u=r[o];if(l&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o<i;){var a=(u=r[o])[0],s=e[a],c=u[1];if(l&&u[2]){if(void 0===s&&!(a in e))return!1}else{var d=new ze;if(n)var f=n(s,c,a,e,t,d);if(!(void 0===f?Bo(c,s,3,n,d):f))return!1}}return!0}(r,e,t)}}function Wo(e,t){return null!=e&&t in Object(e)}function Ko(e,t){return null!=e&&function(e,t,r){for(var n=-1,o=(t=Pe(t,e)).length,i=!1;++n<o;){var l=Re(t[n]);if(!(i=null!=e&&r(e,l)))break;e=e[l]}return i||++n!=o?i:!!(o=null==e?0:e.length)&&E(o)&&$(l,o)&&(O(e)||k(e))}(e,t,Wo)}function Go(e){return Z(e)?(t=Re(e),function(e){return null==e?void 0:e[t]}):function(e){return function(t){return Ue(t,e)}}(e);var t}function Ho(e){return"function"==typeof e?e:null==e?ar:"object"==typeof e?O(e)?function(e,t){return Z(e)&&Jo(t)?Vo(Re(e),t):function(r){var n=Fe(r,e);return void 0===n&&n===t?Ko(r,e):Bo(t,n,3)}}(e[0],e[1]):qo(e):Go(e)}var Yo,Xo=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),l=i.length;l--;){var u=i[Yo?l:++n];if(!1===t(o[u],u,o))break}return e};var Qo=function(e,t){return function(r,n){if(null==r)return r;if(!G(r))return e(r,n);for(var o=r.length,i=t?o:-1,l=Object(r);(t?i--:++i<o)&&!1!==n(l[i],i,l););return r}}(function(e,t){return e&&Xo(e,t,H)}),Zo=Qo;function ei(e,t){var r=-1,n=G(e)?Array(e.length):[];return Zo(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function ti(e,t){return vr(e)&&vr(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 ri(e){if(!(vr(e)||kr(e)||Y(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 ni(e,t){let r="";if(vr(e)||kr(e))r=ri(e);else{if(!mo(e))return{};o="",r=null==(n=e)?"":Ao.call(n,o)}var n,o,i,l;return kr(t)&&(t=ri(t)),vr(t)&&(t=[t]),mo(t)?(l=function(e){return ri(e)},function(e,t){let r=[],n=0;for(let o=0;o<t.length;o++){let i=t[o],l=ti(e,i);r.push({target:i,rating:l}),l>r[n].rating&&(n=o)}return{ratings:r,bestMatch:r[n],bestMatchIndex:n}}(r,t=(O(i=t)?Ie:ei)(i,Ho(l)))):{}}function oi(e){let t=null,n=sn(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 ii(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Kr(e,e.length-t):""}function li(e){if(!vr(e))return{path:"",isRoot:!1};for(;e.indexOf("\\\\")>=0;)e=e.replace("\\\\","\\");for(;e.indexOf("//")>=0;)e=e.replace("//","/");if(":"===Gr(e,1))return{path:`${e}\\`,isRoot:!0};if("\\"===Gr(e,1)){let t=ii(e,1);return":"===Gr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Gr(e,1)){let t=ii(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function ui(e){if(!vr(e))return"";let t=li(e);if(t.isRoot)return t.path;let r=function(e){if(!vr(e))return"";let t=li(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(!vr(r))return e;let n=li(e=ii(e,r.length));return n.isRoot,n.path}function ai(e,t={}){let r=Fe(t,"fs");if(!un(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function si(e,t,r={}){let n=null,o=Fe(r,"fs"),i=ui(e);ai(i,{fs:o})||function(e,t={}){let r=Fe(t,"fs");if(ai(e,{fs:r}))return{success:"input folder is already exists: "+e};if(un(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 ci(e,t,n={}){let o=null;if(!yr(t)&&!Br(t))return{error:"inp is not an object or array"};let i=Fe(n,"useFormat",null);Ur(i)||(i=!1);let l="";try{l=i?JSON.stringify(t,null,2):JSON.stringify(t)}catch(e){o=e}return null!==o?{error:o}:si(e,l,{fs:r})}let di=2e4;function fi(e){return Fe(oi(e),"success",null)}function pi(e,t){let r=String(e);for(let e of t)vr(e)&&e.length>=6&&(r=r.split(e).join("[REDACTED]"));return r}async function mi(e,t={}){let r=Date.now(),n=(e,t,n,o,i)=>({ok:e,status:t,data:n,error:o,errorType:i,durationMs:Date.now()-r});if(!vr(e))return n(!1,0,null,"url must be a non-empty string","params");let o=Fe(t,"headers",null);Gn(o)||(o={});let i=Fe(t,"method",null);vr(i)||(i="GET");let l=Fe(t,"body",null);Gn(l)?(l=JSON.stringify(l),vr(Fe(o,"Content-Type",null))||(o={...o,"Content-Type":"application/json"})):vr(l)||(l=null);let u=_n(Fe(t,"timeoutMs",null),di),a=_n(Fe(t,"maxBodyBytes",null),1048576),s=Fe(t,"redact",null);mo(s)||(s=[]);let c=e=>pi(e,s).slice(0,300),d=new AbortController,f=setTimeout(()=>{d.abort()},u),p=null,m="";try{try{p=await fetch(e,{method:i,headers:o,body:l,signal:d.signal})}catch(e){return"AbortError"===Fe(e,"name","")?n(!1,0,null,`request timeout over ${u}ms`,"timeout"):n(!1,0,null,`network error: ${pi(Fe(e,"message","unknown"),s)}`,"network")}try{let e=await async function(e,t){let r=Number(e.headers.get("content-length")||0);if(r>t)return{ok:!1,text:"",bytes:r};let n=e.body;if(!n||"function"!=typeof n.getReader){let r=await e.text(),n=Buffer.byteLength(r);return n>t?{ok:!1,text:"",bytes:n}:{ok:!0,text:r,bytes:n}}let o=n.getReader(),i=[],l=0;for(;;){let{done:e,value:r}=await o.read();if(e)break;if(l+=r.byteLength,l>t){try{await o.cancel()}catch(e){}return{ok:!1,text:"",bytes:l}}i.push(Buffer.from(r))}return{ok:!0,text:Buffer.concat(i).toString("utf8"),bytes:l}}(p,a);if(!e.ok)return d.abort(),n(!1,p.status,null,`response body too large: ${e.bytes} bytes over limit ${a}`,"toolarge");m=e.text}catch(e){return"AbortError"===Fe(e,"name","")?n(!1,p.status,null,`request timeout over ${u}ms while reading body`,"timeout"):n(!1,p.status,null,`read body error: ${pi(Fe(e,"message","unknown"),s)}`,"network")}}finally{clearTimeout(f)}if(401===p.status)return n(!1,p.status,null,`unauthorized(401), credential rejected (expired or revoked): ${c(m)}`,"auth");if(403===p.status)return n(!1,p.status,null,`forbidden(403), credential valid but this account has no access to the resource (plan does not include it, or the service no longer serves this account tier): ${c(m)}`,"forbidden");if(429===p.status)return n(!1,p.status,null,`rate limited(429) by usage endpoint: ${c(m)}`,"ratelimit");if(!p.ok)return n(!1,p.status,null,`http error(${p.status}): ${c(m)}`,"http");let h=null;try{h=JSON.parse(m)}catch(e){return n(!1,p.status,null,`invalid json: ${c(m)}`,"parse")}return n(!0,p.status,h,"","")}function hi(e){return!kr(e)||Fr(e)<=0?"":(e=Fr(e))%86400==0?e/86400+"天":e%3600==0?e/3600+"小時":e%60==0?e/60+"分鐘":`${e}秒`}function yi(e,t){if(!vr(t))return"";let r=hi(e);return""===r?t:`${r}(${t})`}function gi(e={}){let t=Fe(e,"key","");vr(t)||(t="");let r=Fe(e,"windowSeconds",null);r=kr(r)?Fr(r):null;let n=Fe(e,"label","");vr(n)||(n=hi(r));let o=Fe(e,"usedPercent",null);o=kr(o)?Math.min(100,Math.max(0,Fr(o))):null;let i=null;null!==o&&(i=Math.round(100*(100-o))/100);let l=Fe(e,"resetAt","");if(kr(l)&&Fr(l)>0)l=new Date(1e3*Fr(l)).toISOString();else if(vr(l)){let e=new Date(l);l=isNaN(e.getTime())?"":e.toISOString()}else l="";let u=Fe(e,"resetAfterSeconds",null);if(kr(u))u=Math.max(0,Math.round(Fr(u)));else if(u=null,""!==l){let e=Math.round((new Date(l).getTime()-Date.now())/1e3);u=Math.max(0,e)}""===l&&null!==u&&(l=new Date(Date.now()+1e3*u).toISOString());let a=Fe(e,"scope","");vr(a)||(a="");let s=Fe(e,"active",null);Ur(s)||(s=!1);let c=Fe(e,"severity","");return vr(c)||(c="",null!==o&&(c=o>=100?"exhausted":"normal")),{key:t,label:n,windowSeconds:r,usedPercent:o,remainingPercent:i,resetAt:l,resetAfterSeconds:u,scope:a,active:s,severity:c}}function vi(e,t={}){vr(e)||(e="");let r=Fe(t,"email","");vr(r)||(r="");let n=Fe(t,"emailWant","");vr(n)||(n="");let o=Fe(t,"error","");vr(o)||(o="");let i=Fe(t,"errorType","");vr(i)||(i="");let l=null;""!==n&&(""===r?(l=!1,""===o&&(o=`cannot determine the local ${e} login account, so it is unknown whether it is the requested account [${n}]`,i="account")):(l=r.trim().toLowerCase()===n.trim().toLowerCase(),l||""!==o||(o=`local ${e} login account is [${r}], which does not match the requested account [${n}]`,i="account")));let u=Fe(t,"windows",null);mo(u)||(u=[]);let a=Fe(t,"plan","");vr(a)||(a="");let s=Fe(t,"planTier","");vr(s)||(s="");let c=Fe(t,"source","");return vr(c)||(c=""),{ok:""===o&&!1!==l,provider:e,email:r,matched:l,plan:a,planTier:s,source:c,windows:u,credits:Fe(t,"credits",null),raw:Fe(t,"raw",null),error:o,errorType:i,durationMs:Fe(t,"durationMs",0)}}let bi=604800,wi=[["five_hour",18e3,""],["seven_day",bi,""],["seven_day_opus",bi,"Opus"],["seven_day_sonnet",bi,"Sonnet"],["seven_day_cowork",bi,"Cowork"],["seven_day_oauth_apps",bi,"OAuth apps"]],_i=["ANTHROPIC_API_KEY","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX"];function ki(e){let t=Fe(e,"group",""),r=null;"session"===t?r=18e3:"weekly"===t&&(r=bi);let n=[],o=Fe(e,"scope.model.display_name","");vr(o)&&n.push(o);let i=Fe(e,"scope.surface","");vr(i)&&n.push(i);let l=n.join("/");return gi({key:Fe(e,"kind",""),label:yi(r,l),windowSeconds:r,usedPercent:Fe(e,"percent",null),resetAt:Fe(e,"resets_at",""),scope:l,active:Fe(e,"is_active",!1),severity:Fe(e,"severity","")})}let{buildSpawnArgs:Oi,buildSpawnEnv:Ti}=dn;async function ji(e,r=[],n=[],o={}){let i=Date.now(),l=(e,t,r={})=>({ok:!1,results:{},responses:[],error:t,errorType:e,durationMs:Date.now()-i,exitCode:null,...r});if(!vr(e))return l("params","command 須為非空字串");if(Br(r)||(r=[]),!Br(n))return l("params","requests 須為陣列");for(let e=0;e<n.length;e++){let t=n[e];if(!yr(t)||!vr(t.method)&&!vr(t.notify))return l("params",`requests[${e}] 須為含method或notify之物件`)}yr(o)||(o={});let u=Fe(o,"timeoutMs");qr(u)||(u=12e4);let a=Fe(o,"jsonrpc");!0===a&&(a="2.0"),vr(a)||(a=null);let s=Fe(o,"continueOnError");Ur(s)||(s=!1);let c=Fe(o,"onNotify"),d=Fe(o,"onServerRequest"),f=new Map,p=null,m=0,h={},y=[],g=(e,t,r)=>{let n={};return null!==a&&(n.jsonrpc=a),void 0!==e&&(n.id=e),n.method=t,void 0!==r&&(n.params=r),n},v=function(e,r=[],n={}){Br(r)||(r=[]),yr(n)||(n={});let o=Fe(n,"cwd");vr(o)||(o=process.cwd());let i=Fe(n,"env");yr(i)||(i=void 0);let l=Fe(n,"timeoutMs");l=qr(l)?Math.min(l,br):null;let u=Fe(n,"exitGraceMs");Wr(u)||(u=2e3),u=Math.min(u,br);let a=Fe(n,"killWaitMs");Wr(a)||(a=3e3),a=Math.min(a,br);let s=Fe(n,"stderrKeep");Wr(s)||(s=4e3);let c=Fe(n,"onLine"),d=Fe(n,"onStdout"),f=Fe(n,"onStderr"),p=Fe(n,"onExit"),m=Date.now(),h=!1,y=null,g=!1,v=!1,b=!1,w="",_="",k=null,O=null,T=null,j=wr(),S=null,A={pid:null,exited:!1,write:null,writeLine:null,stop:null},x=e=>{h||(h=!0,clearTimeout(k),clearTimeout(O),clearTimeout(T),y={code:null,signal:null,exited:!0,timeout:g,killed:v,error:"",stderr:w,durationMs:Date.now()-m,pid:A.pid,...e},A.exited=!0,Jr(p)&&p(y),j.resolve(y))},$=()=>S||(S=wr(),j.then(e=>{S.resolve(e)}),S);if(!vr(e))return A.write=async()=>!1,A.writeLine=async()=>!1,A.stop=$,setTimeout(()=>{x({error:"command 須為非空字串"})},1),A;let E,M=Oi(e,r);try{E=t.spawn(M.file,M.args,{cwd:o,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:Ti(i),...M.opt})}catch(e){return A.write=async()=>!1,A.writeLine=async()=>!1,A.stop=$,setTimeout(()=>{x({error:`${e.code||"UNKNOWN"}: ${e.message}`})},1),A}A.pid=E.pid||null;let I=new TextDecoder("utf-8"),N=new TextDecoder("utf-8"),D=(e,t)=>{_+=e;let r=_.indexOf("\n");for(;r>=0;){let e=_.slice(0,r);_=_.slice(r+1),e.endsWith("\r")&&(e=e.slice(0,-1)),Jr(c)&&c(e),r=_.indexOf("\n")}if(t&&""!==_){let e=_;_="",e.endsWith("\r")&&(e=e.slice(0,-1)),Jr(c)&&c(e)}},C=e=>{w=0!==s?(w+e).slice(-s):""};E.stdout.on("data",e=>{let t=I.decode(e,{stream:!0});t&&(Jr(d)&&d(t),D(t,!1))}),E.stderr.on("data",e=>{let t=N.decode(e,{stream:!0});t&&(Jr(f)&&f(t),C(t))}),E.stdin.on("error",()=>{});let L=e=>{v=!0,ln(E.pid).catch(()=>{}),T=setTimeout(()=>{h||x({code:null,exited:!1,error:e})},a)};return null!==l&&(k=setTimeout(()=>{h||(g=!0,L(`TIMEOUT after ${l/1e3}s(子進程未能結束)`))},l)),E.on("error",e=>{x({error:`${e.code||"UNKNOWN"}: ${e.message}`})}),E.on("close",(e,t)=>{if(h)return;let r=I.decode();r&&(Jr(d)&&d(r),D(r,!1)),D("",!0);let n=N.decode();n&&(Jr(f)&&f(n),C(n));let o="";g?o=`TIMEOUT after ${l/1e3}s`:v||(t?o=`Signal: ${t}`:0!==e&&(o=`Exit code ${e}`)),x({code:e,signal:t,error:o})}),A.write=e=>{let t=wr();if(h||b||E.stdin.destroyed||!E.stdin.writable)return t.resolve(!1),t;try{E.stdin.write(String(e),"utf8",e=>{t.resolve(!e)})}catch{t.resolve(!1)}return t},A.writeLine=e=>A.write(String(e)+"\n"),A.stop=()=>{if(S)return S;if(S=wr(),h)return S.resolve(y),S;b=!0;try{E.stdin.end()}catch{}return O=setTimeout(()=>{h||L("STOP_TIMEOUT(子進程未能結束)")},u),j.then(e=>{S.resolve(e)}),S},A}(e,r,{cwd:Fe(o,"cwd"),env:Fe(o,"env"),timeoutMs:u,exitGraceMs:Fe(o,"exitGraceMs"),onStderr:Fe(o,"onStderr"),onLine:e=>{if(""===(e=e.trim()))return;let t;try{t=JSON.parse(e)}catch{return}if(!yr(t))return;let r=void 0!==t.id&&null!==t.id;if(r&&("result"in t||"error"in t)){let e=f.get(t.id);return void(e&&(f.delete(t.id),e.pm.resolve({msg:t})))}r&&vr(t.method)?Jr(d)&&d(t,v):Jr(c)&&c(t)},onExit:e=>{p=e;for(let[t,r]of f)r.pm.resolve({exit:e});f.clear()}}),b=(e,t)=>{let r="exit";e.timeout?r="timeout":vr(e.error)&&e.error.includes("ENOENT")&&(r="notfound");let n=vr(e.error)?e.error:`子進程於回應前結束(code ${e.code})`;return l(r,`${t}: ${n}`,{results:h,responses:y,exitCode:e.code})},w=null;for(let e of n){if(!vr(e.method)){if(!await v.writeLine(JSON.stringify(g(void 0,e.notify,e.params)))){w=b(p||await v.stop(),e.notify);break}continue}let t=m;m+=1;let r=wr();if(f.set(t,{method:e.method,pm:r}),!await v.writeLine(JSON.stringify(g(t,e.method,e.params)))){f.delete(t),w=b(p||await v.stop(),e.method);break}let n=await r;if(n.exit){w=b(n.exit,e.method);break}let o=n.msg;if("error"in o&&null!==o.error&&void 0!==o.error){if(h[e.method]=null,y.push({id:t,method:e.method,result:null,error:o.error}),!s){let t=Fe(o,"error.message");w=l("rpc",`${e.method}: ${vr(t)?t:JSON.stringify(o.error)}`,{results:h,responses:y});break}}else h[e.method]=o.result,y.push({id:t,method:e.method,result:o.result,error:null})}let _=await v.stop();if(w)return w.durationMs=Date.now()-i,null===w.exitCode&&(w.exitCode=_.code),w;let k=y.filter(e=>null!==e.error);if(k.length>0){let e=k[0],t=Fe(e,"error.message");return{ok:!1,results:h,responses:y,error:`${e.method}: ${vr(t)?t:JSON.stringify(e.error)}`,errorType:"rpc",durationMs:Date.now()-i,exitCode:_.code}}return{ok:!0,results:h,responses:y,error:"",errorType:"",durationMs:Date.now()-i,exitCode:_.code}}function Si(e,t){for(let r of t){let t=Fe(e,r,"");if(vr(t))return t}return""}function Ai(e,t,r){if(!Gn(e))return null;let n=Fe(e,"limit_window_seconds",null),o=kr(n)?Fr(n):null;return gi({key:t,label:yi(o,r),windowSeconds:o,usedPercent:Fe(e,"used_percent",null),resetAt:Fe(e,"reset_at",""),resetAfterSeconds:Fe(e,"reset_after_seconds",null),scope:r})}function xi(e,t,r){for(let n of[e,Fe(e,"rate_limit",null),Fe(e,"rateLimit",null)]){if(!Gn(n))continue;let e=Fe(n,t,null);if(Gn(e)||(e=Fe(n,r,null)),Gn(e))return e}return null}function $i(e){if(!Gn(e))return null;if(void 0!==Fe(e,"used_percent",void 0))return e;let t=Fe(e,"window",null);if(Gn(t))return t;let r=Fe(e,"rate_limit",null);return Gn(r)&&void 0!==Fe(r,"used_percent",void 0)?r:null}function Ei(e){let t=Si(e,["email"]),r=Si(e,["plan_type"]),n=[];for(let t of["primary","secondary"]){let r=Ai(Fe(e,`rate_limit.${t}_window`,null),t,"");null!==r&&n.push(r)}for(let t of["primary","secondary"]){let r=Ai(Fe(e,`code_review_rate_limit.${t}_window`,null),`code_review:${t}`,"code review");null!==r&&n.push(r)}let o=function(e){let t=[Fe(e,"additional_rate_limits",null),Fe(e,"rate_limit.additional_rate_limits",null)];for(let e of t){if(mo(e))return e;if(Gn(e))return Object.keys(e).map(t=>{let r=e[t];if(!Gn(r))return r;let n=Si(r,["limit_name","name","id"]);return{...r,limit_name:""===n?t:n}})}return[]}(e);for(let e=0;e<o.length;e++){let t=o[e];if(!Gn(t))continue;let r=Si(t,["limit_name","metered_limit_name","name","id"]);""===r&&(r=`additional_${e+1}`);let i=Si(t,["display_name","title","name","limit_name","metered_limit_name"]),l=""===i?r:i,u=`${r} ${i}`.toLowerCase(),a=xi(t,"primary_window","primaryWindow"),s=xi(t,"secondary_window","secondaryWindow");if(null===a&&null===s){let e=$i(t);if(null!==e){let t=Fe(e,"limit_window_seconds",null);/weekly|secondary|reserve/.test(u)||kr(t)&&Fr(t)>=518400?s=e:a=e}}let c=Ai(a,`${r}:primary`,l);null!==c&&n.push(c);let d=Ai(s,`${r}:secondary`,l);null!==d&&n.push(d)}return{email:t,plan:r,windows:n,credits:{hasCredits:Fe(e,"credits.has_credits",!1),unlimited:Fe(e,"credits.unlimited",!1),balance:Fe(e,"credits.balance",""),resetCreditsAvailable:Fe(e,"rate_limit_reset_credits.available_count",null),spendControlReached:Fe(e,"spend_control.reached",!1),rateLimitReachedType:Fe(e,"rate_limit_reached_type",null),individualLimit:Fe(e,"spend_control.individual_limit",null)}}}let Mi=[{method:"initialize",params:{clientInfo:{name:"w-dispatch-ai",title:"w-dispatch-ai",version:"1.0.0"}}},{notify:"initialized",params:{}},{method:"account/read",params:{}},{method:"account/rateLimits/read",params:{}}];function Ii(e,t,r){if(!Gn(e))return null;let n=Fe(e,"windowDurationMins",null),o=kr(n)?60*Fr(n):null;return gi({key:t,label:yi(o,r),windowSeconds:o,usedPercent:Fe(e,"usedPercent",null),resetAt:Fe(e,"resetsAt",""),scope:r})}async function Ni(t,r,n){let o=Fe(t,"env",null);yr(o)||(o=process.env);let i=e.join(r,"auth.json"),l=fi(i),u=Fe(l,"tokens.access_token",""),a=Fe(l,"tokens.account_id",""),s="",c="",d=Fe(l,"tokens.id_token","");if(vr(d)){let e=function(e){try{let t=e.split(".");return t.length<2?null:JSON.parse(Buffer.from(t[1],"base64url").toString("utf8"))}catch(e){return null}}(d),t=Fe(e,"email","");vr(t)&&(s=t);let r=Fe(e,["https://api.openai.com/auth","chatgpt_plan_type"],"");vr(r)&&(c=r)}if(!vr(u)){return vr(Fe(l,"OPENAI_API_KEY",""))||vr(Fe(o,"OPENAI_API_KEY",""))?{ok:!1,email:s,plan:c,error:"codex is running in API key mode (auth.json has OPENAI_API_KEY but no tokens); this mode is billed by usage and has no subscription quota windows",errorType:"unsupported"}:{ok:!1,email:s,plan:c,error:`Codex CLI credential not found (${i}); run [codex login] first`,errorType:"notfound"}}let f=Fe(t,"userAgent",null);vr(f)||(f="codex-cli/0.153.0");let p=Fe(t,"originator",null);vr(p)||(p="codex_cli_rs");let m={Authorization:`Bearer ${u}`,"User-Agent":f,originator:p};vr(a)&&(m["ChatGPT-Account-ID"]=a);let h=Fe(t,"usageUrl",null);vr(h)||(h="https://chatgpt.com/backend-api/wham/usage");let y=await mi(h,{headers:m,timeoutMs:n,redact:[u,a]});if(!y.ok){let e=y.error;return"auth"===y.errorType&&(e=`${e} → codex refreshes the token on every run; run any codex command then retry, and only fall back to [codex login] if it still fails`),{ok:!1,email:s,plan:c,error:e,errorType:y.errorType}}let g=Ei(y.data);return vr(g.email)&&(s=g.email),vr(g.plan)&&(c=g.plan),{ok:!0,email:s,plan:c,windows:g.windows,credits:g.credits,raw:{usage:y.data}}}function Di(e){if(!vr(e))return null;let t=e.match(/(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}let Ci="1.1.11",Li={"5h":18e3,five_hour:18e3,"five-hour":18e3,weekly:604800,week:604800,daily:86400,day:86400};function Pi(e,t){let r=Fe(t,"id","");if(!vr(r))return null;let n=Fe(t,"remaining_fraction",null),o=null;kr(n)&&(o=Math.round(100*(1-Fr(n))*100)/100);let i=Fe(e,"name","");vr(i)||(i="");let l=function(e){if(!vr(e))return null;let t=e.trim().toLowerCase();if(void 0!==Li[t])return Li[t];let r=t.match(/^(\d+)\s*(h|hr|hour|hours|d|day|days|m|min|minutes)$/);if(!r)return null;let n=Number(r[1]);return/^h/.test(r[2])?3600*n:/^d/.test(r[2])?86400*n:60*n}(Fe(t,"window","")),u=hi(l);""===u&&(u=Fe(t,"name",""),vr(u)||(u=r));let a=""===i?u:`${u}(${i})`,s="normal";return!0===Fe(t,"disabled",!1)?s="disabled":null!==o&&o>=100&&(s="exhausted"),gi({key:r,label:a,windowSeconds:l,usedPercent:o,resetAt:Fe(t,"reset_time",""),scope:i,active:!1,severity:s})}async function Ri(e,t,r){let n=[];vr(r.logFile)&&n.push("--log-file",r.logFile),n.push("-p",t,"--output-format","json","--print-timeout",`${Math.max(5,Math.ceil(r.timeoutMs/1e3))}s`);let o=await yn(e,n,{timeoutMs:r.timeoutMs,cwd:r.cwd}),i=String(Fe(o,"stdout","")).trim().split("\n").map(e=>e.trim()).filter(e=>""!==e).pop()||"",l=null;try{l=JSON.parse(i)}catch(e){}if(!o.ok){let e=String(Fe(o,"stderr","")).trim().slice(-300),r=/timeout/i.test(Fe(o,"error",""))?"timeout":"exit";return/not logged in|login|sign in|authenticate/i.test(e)&&(r="auth"),{ok:!1,data:null,response:"",stderr:e,error:`agy ${t} failed: ${Fe(o,"error","")}${e?` | stderr: ${e}`:""}`,errorType:r,code:Fe(o,"code",null)}}if(null===l)return{ok:!1,data:null,response:"",stderr:"",error:`agy ${t} stdout is not JSON: ${i.slice(0,200)}`,errorType:"parse",code:o.code};let u=Fe(l,"num_turns",0);return!vr(Fe(l,"command.name",""))||kr(u)&&Fr(u)>0?{ok:!1,data:null,response:Fe(l,"response",""),stderr:"",error:`agy did not handle ${t} as a slash command (num_turns=${u}); version may be below ${Ci} or --disable-slash-commands is set; this call may have consumed quota`,errorType:"unsupported",code:o.code}:"SUCCESS"!==Fe(l,"status","")?{ok:!1,data:Fe(l,"command.data",null),response:Fe(l,"response",""),stderr:"",error:`agy ${t} reported status=${Fe(l,"status","")}: ${String(Fe(l,"response","")).slice(0,200)}`,errorType:"exit",code:o.code}:{ok:!0,data:Fe(l,"command.data",null),response:Fe(l,"response",""),stderr:"",error:"",errorType:"",code:o.code,raw:l}}let Ui={KINDS:H(Zn),NO_SIDE_EFFECT:yo,dispatchAi:oo,dispatchAiFallback:fo,dispatchAiWkf:function(e={}){let t=Fe(e,"providers",null);if(!yr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Fe(e,"defaults",null);return yr(r)||(r={}),{providers:t,callAi:(e,n={})=>vo(e,{...r,...n,providers:t}),runFanout:(e={})=>bo({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runRolePipeline:(e={})=>_o({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await bo(hr(e,ko));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await _o({...hr(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,...Fe(e,"callOpt",{})}})}},dispatchOpencode:Tn,dispatchClaude:Sn,dispatchCodex:xn,dispatchAntigravity:Mn,dispatchApiOpenaiCompat:Bn,dispatchApiOpenaiResponses:Kn,dispatchApiTypesafeSystemone:Qn,providers:So,resolveProviders:function(e,t={}){let r=Fe(t,"env",null);yr(r)||(r="undefined"!=typeof process&&process&&yr(process.env)?process.env:{});let n=Br(e)?e.filter(yr):[],o=Fe(t,"pick",null),i=[],l=n;if(mo(o)){l=[];for(let e of o){let t=n.find(t=>Fe(t,"id",null)===e);t?l.push(t):i.push(String(e))}}let u={};if(i.length>0){let e=n.map(e=>Fe(e,"id",null)).filter(vr);for(let t of i)u[t]=e.length>0?Fe(ni(t,e),"bestMatch.target",null):null}let a=[],s=[];for(let e of l){let t=Fe(e,"envVar",null);if(!vr(t)||mo(Fe(e,"keys",null))){a.push(hr(e,["envVar"]));continue}let n=String(Fe(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?a.push({...hr(e,["envVar"]),keys:n}):s.push({id:Fe(e,"id",""),envVar:t})}let c=Fe(t,"exes",null),d=Fe(t,"patch",null);(yr(c)||yr(d))&&(a=a.map(e=>{let t=e,r=yr(c)?Fe(c,Fe(t,"kind",""),null):null;vr(r)&&!vr(Fe(t,"exe",null))&&(t={...t,exe:r});let n=yr(d)?Fe(d,Fe(t,"id",""),null):null;return yr(n)&&(t={...t,...n}),t}));let f={};for(let e of a)f[e.id]=e;return{providers:a,table:f,skipped:s,missing:i,hints:u}},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(!Br(e))return 0;let t=0;for(let r of e)t+=_n(Fe(r,"timeoutMs",null),kn);return t},createFileStore:function(t={}){let r=Fe(t,"file",null);if(!vr(r)){let n=Fe(t,"dir",null);if(!vr(n))throw new Error("createFileStore: file or dir is required");let o=Fe(t,"name",null);r=e.join(n,vr(o)?o:"ai-cursor.json")}let n=Fe(t,"ownKeys",null);mo(n)||(n=["at"]);let o=Fe(t,"stamp",null);return Jr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=oi(r),t=void 0!==Fe(e,"error",void 0)?null:Fe(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()};ci(r,t,{useFormat:!0})}}},createUsageCounter:function(t={}){let r=Fe(t,"file",null);if(!vr(r)){let n=Fe(t,"dir",null);if(!vr(n))throw new Error("createUsageCounter: file or dir is required");let o=Fe(t,"name",null);r=e.join(n,vr(o)?o:"ai-usage.json")}let n=Fe(t,"getDate",null);Jr(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=Fe(t,"keepDays",null);qr(o)||(o=14);let i=Fe(t,"keyOf",null);Jr(i)||(i=e=>Fe(e,"keyId",null)||Fe(e,"providerId",""));let l=()=>{let e=oi(r),t=void 0!==Fe(e,"error",void 0)?null:Fe(e,"success",null);return yr(t)?t:{}},u=(e,t=1)=>{if(!vr(e))return;let i=l(),u=n(),a=yr(i[u])?i[u]:{};a[e]=(Number(a[e])||0)+t,i[u]=a;let s=Object.keys(i).sort().slice(-o),c={};for(let e of s)c[e]=i[e];ci(r,c,{useFormat:!0})};return{file:r,onEvent:e=>{"try"===Fe(e,"type",null)&&u(i(e))},bump:u,today:()=>{let e=l(),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,l=-1;for(let e=r;e<t.length;e++){let r=t[e];if(i)i=!1;else if(o)"\\"===r?i=!0:'"'===r&&(o=!1);else if('"'!==r){if("["===r||"{"===r)n++;else if(("]"===r||"}"===r)&&(n--,1===n&&"}"===r&&(l=e),0===n))return null}else o=!0}if(l<0)return null;try{let e=JSON.parse(t.slice(r,l+1)+"]");return Array.isArray(e)&&e.length>0?e:null}catch(e){return null}},getQuotaClaude:async function(t="",r={}){let o=Date.now(),i=vr(t)?t:"",l=Fe(r,"env",null);yr(l)||(l=process.env);let u=Fe(r,"homeDir",null);vr(u)||(u=n.homedir());let a=Fe(r,"configDir",null),s=!0;vr(a)||(a=Fe(l,"CLAUDE_CONFIG_DIR",""),vr(a)||(a=e.join(u,".claude"),s=!1));let c=e.join(a,".credentials.json"),d=s?e.join(a,".claude.json"):e.join(u,".claude.json"),f=_n(Fe(r,"timeoutMs",null),di),p=Fe(r,"userAgent",null);vr(p)||(p="claude-code/2.1.259");let m=!1!==Fe(r,"profileFallback",!0),h=Fe(r,"usageUrl",null);vr(h)||(h="https://api.anthropic.com/api/oauth/usage");let y=Fe(r,"profileUrl",null);vr(y)||(y="https://api.anthropic.com/api/oauth/profile");let g=fi(c),v=fi(d),b=Fe(g,"claudeAiOauth.accessToken",""),w=Fe(v,"oauthAccount.emailAddress","");vr(w)||(w="");let _=Fe(g,"claudeAiOauth.subscriptionType","");vr(_)||(_=Fe(v,"oauthAccount.organizationType",""),vr(_)||(_=""));let k=Fe(g,"claudeAiOauth.rateLimitTier","");vr(k)||(k=Fe(v,"oauthAccount.organizationRateLimitTier",""),vr(k)||(k=""));let O=e=>vi("claude",{email:w,emailWant:i,plan:_,planTier:k,source:"anthropic-oauth-usage-api",durationMs:Date.now()-o,...e});if(!vr(b)){let e=_i.filter(e=>vr(Fe(l,e,"")));return e.length>0?O({error:`Claude Code is running in non-subscription mode (env ${e.join(", ")} is set); this mode is billed by usage and has no 5-hour/7-day subscription quota windows`,errorType:"unsupported"}):O({error:`Claude Code credential not found (${c}); run [claude auth login] first (with the same CLAUDE_CONFIG_DIR if this config dir is relocated). On macOS the credential lives in Keychain instead of this file, which this function cannot read.${vr(Fe(l,"CLAUDE_CODE_OAUTH_TOKEN",""))?" Env CLAUDE_CODE_OAUTH_TOKEN is set but is ignored here: a setup-token lacks the user:profile scope the usage endpoint requires, so only a stored login can be queried.":""}`,errorType:"notfound"})}let T={Authorization:`Bearer ${b}`,"anthropic-beta":"oauth-2025-04-20","User-Agent":p,"Content-Type":"application/json"},j=await mi(h,{headers:T,timeoutMs:f,redact:[b]});if(!j.ok){let e=j.error;if("auth"===j.errorType){let t=Fe(g,"claudeAiOauth.expiresAt",null),r="run any claude command (just open claude) so Claude Code refreshes the token itself, then retry; re-login is not needed, the stored refresh token is still valid and only has to be used by Claude Code";e=`${e} ${kr(t)?`(local recorded expiry: ${new Date(t).toISOString()})`:""} → ${r}`}return"forbidden"===j.errorType&&/oauth_not_allowed_for_organization/.test(e)&&(e=`this account's organization disallows OAuth usage queries (oauth_not_allowed_for_organization); subscription quota must be viewed by an org admin in the console: ${e}`),O({error:e,errorType:j.errorType})}let S=j.data;if(""===w&&m){let e=await mi(y,{headers:T,timeoutMs:f,redact:[b]});if(e.ok)for(let t of["account.email","account.email_address","email","email_address"]){let r=Fe(e.data,t,"");if(vr(r)){w=r;break}}}let A=[],x=Fe(S,"limits",null);return A=mo(x)?x.map(ki):wi.map(([e,t,r])=>function(e,t,r,n){let o=Fe(e,t,null);return null==o?null:gi({key:t,label:yi(r,n),windowSeconds:r,usedPercent:Fe(o,"utilization",null),resetAt:Fe(o,"resets_at",""),scope:n})}(S,e,t,r)).filter(e=>null!==e),O({windows:A,credits:{extraUsageEnabled:Fe(S,"extra_usage.is_enabled",!1),monthlyLimit:Fe(S,"extra_usage.monthly_limit",null),usedCredits:Fe(S,"extra_usage.used_credits",null),utilization:Fe(S,"extra_usage.utilization",null),spendUsedMinor:Fe(S,"spend.used.amount_minor",null),spendCurrency:Fe(S,"spend.used.currency",""),spendPercent:Fe(S,"spend.percent",null)},raw:{configDir:a,usage:S}})},getQuotaCodex:async function(t="",r={}){let o=Date.now(),i=vr(t)?t:"",l=Fe(r,"env",null);yr(l)||(l=process.env);let u=Fe(r,"homeDir",null);vr(u)||(u=n.homedir());let a=Fe(r,"codexHome",null);vr(a)||(a=Fe(l,"CODEX_HOME",""),vr(a)||(a=e.join(u,".codex")));let s=_n(Fe(r,"timeoutMs",null),di),c=!1!==Fe(r,"useAppServer",!0),d=!1!==Fe(r,"fallbackHttp",!0),f=(e,t)=>vi("codex",{emailWant:i,source:e,durationMs:Date.now()-o,...t}),p=null;if(c){let e=await async function(e){let t=Fe(e,"exe",null);vr(t)||(t="codex");let r=await ji(t,["app-server","--stdio"],Mi,{timeoutMs:Fe(e,"timeoutMs",null)});if(!r.ok)return{ok:!1,error:r.error,errorType:r.errorType,raw:{appServer:{error:r.error,errorType:r.errorType,exitCode:r.exitCode,responses:r.responses}}};let n=Fe(r.results,["account/read","account"],null),o=Fe(r.results,["account/rateLimits/read"],null);if(!Gn(n))return{ok:!1,notLoggedIn:!0,error:"codex app-server reports not logged in (account is null); run [codex login] first",errorType:"notfound",raw:{appServer:r.results}};let i=Fe(n,"email",""),l=Fe(n,"planType",""),u=Fe(n,"type","");if(vr(u)&&"chatgpt"!==u)return{ok:!1,email:i,plan:l,accountType:u,error:`codex is logged in with [${u}] mode; this mode is billed by usage and has no 5-hour/7-day subscription quota windows`,errorType:"unsupported",raw:{appServer:r.results}};let a=[],s=Fe(o,"rateLimits",null),c=Fe(s,"limitId","codex"),d=Ii(Fe(s,"primary",null),"primary","");null!==d&&a.push(d);let f=Ii(Fe(s,"secondary",null),"secondary","");null!==f&&a.push(f);let p=Fe(o,"rateLimitsByLimitId",null);if(Gn(p))for(let e of Object.keys(p)){if(e===c)continue;let t=p[e],r=Fe(t,"limitName","");vr(r)||(r=e);for(let n of["primary","secondary"]){let o=Ii(Fe(t,n,null),`${e}:${n}`,r);null!==o&&a.push(o)}}let m={hasCredits:Fe(s,"credits.hasCredits",!1),unlimited:Fe(s,"credits.unlimited",!1),balance:Fe(s,"credits.balance",""),resetCreditsAvailable:Fe(o,"rateLimitResetCredits.availableCount",null),resetCredits:Fe(o,"rateLimitResetCredits.credits",null),spendControlReached:Fe(s,"spendControlReached",!1),rateLimitReachedType:Fe(s,"rateLimitReachedType",null),individualLimit:Fe(s,"individualLimit",null)};return vr(l)||(l=Fe(s,"planType","")),{ok:!0,email:i,plan:l,accountType:u,windows:a,credits:m,raw:{appServer:r.results}}}({...r,timeoutMs:s});if(e.ok)return f("codex-app-server",{email:e.email,plan:e.plan,windows:e.windows,credits:e.credits,raw:{accountType:e.accountType,...e.raw}});if("unsupported"===e.errorType||!0===e.notLoggedIn)return f("codex-app-server",{email:e.email,plan:e.plan,error:e.error,errorType:e.errorType,raw:e.raw});if(p=e,!d)return f("codex-app-server",{error:e.error,errorType:e.errorType,raw:e.raw})}let m=await Ni(r,a,s),h=null!==p?` (app-server path failed: ${p.error})`:"";return m.ok?f("chatgpt-wham-usage-api",{email:m.email,plan:m.plan,windows:m.windows,credits:m.credits,raw:{codexHome:a,appServerError:null!==p?p.error:"",...m.raw}}):f("chatgpt-wham-usage-api",{email:m.email,plan:m.plan,error:`${m.error}${h}`,errorType:m.errorType,raw:null!==p?p.raw:null})},getQuotaAntigravity:async function(t="",i={}){let l=Date.now(),u=vr(t)?t:"",a=Fe(i,"exe",null);vr(a)||(a="agy");let s=_n(Fe(i,"timeoutMs",null),6e4),c=Fe(i,"cwd",null);vr(c)||(c=n.tmpdir());let d=!1!==Fe(i,"checkVersion",!0),f=Fe(i,"withCredits",null);Ur(f)||(f=!1);let p=e=>vi("antigravity",{emailWant:u,source:"agy-print-usage",durationMs:Date.now()-l,...e}),m="";if(d){let e=await yn(a,["--version"],{timeoutMs:Math.min(s,15e3),cwd:c});if(!e.ok)return p({error:`agy not found or not executable (${a}): ${Fe(e,"error","")}${String(Fe(e,"stderr","")).trim()?` | ${String(e.stderr).trim().slice(-200)}`:""}; see https://antigravity.google/docs/cli/ for install and login`,errorType:"notfound"});m=String(Fe(e,"stdout","")).trim().split("\n")[0];let t=function(e,t){let r=Di(e),n=Di(t);if(null===r||null===n)return null;for(let e=0;e<3;e++){if(r[e]>n[e])return 1;if(r[e]<n[e])return-1}return 0}(m,Ci);if(null===t||t<0)return p({error:`agy version [${m||"unknown"}] is below ${Ci}; its print mode cannot run /usage non-interactively (it would treat it as a prompt and consume quota); run [agy update]`,errorType:"unsupported",raw:{version:m}})}let h=e.join(n.tmpdir(),`w-dispatch-ai-agy-${process.pid}-${o.randomBytes(4).toString("hex")}.log`),y=null,g=null,v="",b="";try{y=await Ri(a,"/usage",{timeoutMs:s,cwd:c,logFile:h});let e="";try{e=r.readFileSync(h,"utf8")}catch(e){}let t=e.match(/applyAuthResult: email=([^,\s]+), authMethod=(\w+)/);if(t)v=t[1],b=t[2];else{let t=e.match(/authenticated successfully as (\S+)/);t&&(v=t[1])}y.ok&&f&&(g=await Ri(a,"/credits",{timeoutMs:s,cwd:c,logFile:""}))}finally{try{r.unlinkSync(h)}catch(e){}}if(!y.ok)return p({email:v,error:y.error,errorType:y.errorType,raw:{version:m,authMethod:b,response:y.response,stderr:y.stderr}});let w=[],_=Fe(y.data,"groups",null);if(mo(_))for(let e of _){let t=Fe(e,"buckets",null);if(mo(t))for(let r of t){let t=Pi(e,r);null!==t&&w.push(t)}}let k=null;return null!==g&&(k=g.ok?{remainingCredits:Fe(g.data,"remaining_credits",null),upgradeUri:Fe(g.data,"upgrade_uri","")}:{error:g.error}),p({email:v,windows:w,credits:k,raw:{version:m,authMethod:b,description:Fe(y.data,"description",""),usage:y.raw,credits:null!==g?Fe(g,"raw",null):null}})}};return Ui});
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("path"),require("child_process"),require("fs"),require("os"),require("crypto")):"function"==typeof define&&define.amd?define(["path","child_process","fs","os","crypto"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-dispatch-ai"]=t(e.path,e.child_process,e.fs,e.os,e.crypto)}(this,function(e,t,r,n,o){"use strict";var i="object"==typeof global&&global&&global.Object===Object&&global,l="object"==typeof self&&self&&self.Object===Object&&self,a=i||l||Function("return this")(),u=a.Symbol,s=Object.prototype,c=s.hasOwnProperty,d=s.toString,f=u?u.toStringTag:void 0;var p=Object.prototype.toString;var m=u?u.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":m&&m in Object(e)?function(e){var t=c.call(e,f),r=e[f];try{e[f]=void 0;var n=!0}catch(e){}var o=d.call(e);return n&&(t?e[f]=r:delete e[f]),o}(e):function(e){return p.call(e)}(e)}function y(e){return null!=e&&"object"==typeof e}function g(e){return y(e)&&"[object Arguments]"==h(e)}var v=Object.prototype,b=v.hasOwnProperty,w=v.propertyIsEnumerable,_=g(function(){return arguments}())?g:function(e){return y(e)&&b.call(e,"callee")&&!w.call(e,"callee")},k=_,O=Array.isArray;var T="object"==typeof exports&&exports&&!exports.nodeType&&exports,j=T&&"object"==typeof module&&module&&!module.nodeType&&module,S=j&&j.exports===T?a.Buffer:void 0,A=(S?S.isBuffer:void 0)||function(){return!1},x=/^(?:0|[1-9]\d*)$/;function $(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 E(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var M={};function I(e){return function(t){return e(t)}}M["[object Float32Array]"]=M["[object Float64Array]"]=M["[object Int8Array]"]=M["[object Int16Array]"]=M["[object Int32Array]"]=M["[object Uint8Array]"]=M["[object Uint8ClampedArray]"]=M["[object Uint16Array]"]=M["[object Uint32Array]"]=!0,M["[object Arguments]"]=M["[object Array]"]=M["[object ArrayBuffer]"]=M["[object Boolean]"]=M["[object DataView]"]=M["[object Date]"]=M["[object Error]"]=M["[object Function]"]=M["[object Map]"]=M["[object Number]"]=M["[object Object]"]=M["[object RegExp]"]=M["[object Set]"]=M["[object String]"]=M["[object WeakMap]"]=!1;var N="object"==typeof exports&&exports&&!exports.nodeType&&exports,D=N&&"object"==typeof module&&module&&!module.nodeType&&module,C=D&&D.exports===N&&i.process,L=function(){try{var e=D&&D.require&&D.require("util").types;return e||C&&C.binding&&C.binding("util")}catch(e){}}(),P=L&&L.isTypedArray,R=P?I(P):function(e){return y(e)&&E(e.length)&&!!M[h(e)]},U=Object.prototype.hasOwnProperty;function F(e,t){var r=O(e),n=!r&&k(e),o=!r&&!n&&A(e),i=!r&&!n&&!o&&R(e),l=r||n||o||i,a=l?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],u=a.length;for(var s in e)!t&&!U.call(e,s)||l&&("length"==s||o&&("offset"==s||"parent"==s)||i&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||$(s,u))||a.push(s);return a}var z=Object.prototype;function B(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||z)}function J(e,t){return function(r){return e(t(r))}}var V=J(Object.keys,Object),q=Object.prototype.hasOwnProperty;function W(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function K(e){if(!W(e))return!1;var t=h(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function G(e){return null!=e&&E(e.length)&&!K(e)}function H(e){return G(e)?F(e):function(e){if(!B(e))return V(e);var t=[];for(var r in Object(e))q.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e)}function Y(e){return"symbol"==typeof e||y(e)&&"[object Symbol]"==h(e)}var X=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Q=/^\w*$/;function Z(e,t){if(O(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!Y(e))||(Q.test(e)||!X.test(e)||null!=t&&e in Object(t))}var ee,te=a["__core-js_shared__"],re=(ee=/[^.]+$/.exec(te&&te.keys&&te.keys.IE_PROTO||""))?"Symbol(src)_1."+ee:"";var ne=Function.prototype.toString;function oe(e){if(null!=e){try{return ne.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var ie=/^\[object .+?Constructor\]$/,le=Function.prototype,ae=Object.prototype,ue=le.toString,se=ae.hasOwnProperty,ce=RegExp("^"+ue.call(se).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function de(e){return!(!W(e)||(t=e,re&&re in t))&&(K(e)?ce:ie).test(oe(e));var t}function fe(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return de(r)?r:void 0}var pe=fe(Object,"create");var me=Object.prototype.hasOwnProperty;var he=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 ge(e,t){return e===t||e!=e&&t!=t}function ve(e,t){for(var r=e.length;r--;)if(ge(e[r][0],t))return r;return-1}ye.prototype.clear=function(){this.__data__=pe?pe(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(pe){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return me.call(t,e)?t[e]:void 0},ye.prototype.has=function(e){var t=this.__data__;return pe?void 0!==t[e]:he.call(t,e)},ye.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=pe&&void 0===t?"__lodash_hash_undefined__":t,this};var be=Array.prototype.splice;function we(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])}}we.prototype.clear=function(){this.__data__=[],this.size=0},we.prototype.delete=function(e){var t=this.__data__,r=ve(t,e);return!(r<0)&&(r==t.length-1?t.pop():be.call(t,r,1),--this.size,!0)},we.prototype.get=function(e){var t=this.__data__,r=ve(t,e);return r<0?void 0:t[r][1]},we.prototype.has=function(e){return ve(this.__data__,e)>-1},we.prototype.set=function(e,t){var r=this.__data__,n=ve(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};var _e=fe(a,"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 Oe(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])}}Oe.prototype.clear=function(){this.size=0,this.__data__={hash:new ye,map:new(_e||we),string:new ye}},Oe.prototype.delete=function(e){var t=ke(this,e).delete(e);return this.size-=t?1:0,t},Oe.prototype.get=function(e){return ke(this,e).get(e)},Oe.prototype.has=function(e){return ke(this,e).has(e)},Oe.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 Te(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var l=e.apply(this,n);return r.cache=i.set(o,l)||i,l};return r.cache=new(Te.Cache||Oe),r}Te.Cache=Oe;var je,Se,Ae,xe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/\\(\\)?/g,Ee=(je=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(xe,function(e,r,n,o){t.push(n?o.replace($e,"$1"):r||e)}),t},Se=Te(je,function(e){return 500===Ae.size&&Ae.clear(),e}),Ae=Se.cache,Se),Me=Ee;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 Ne=u?u.prototype:void 0,De=Ne?Ne.toString:void 0;function Ce(e){if("string"==typeof e)return e;if(O(e))return Ie(e,Ce)+"";if(Y(e))return De?De.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Le(e){return null==e?"":Ce(e)}function Pe(e,t){return O(e)?e:Z(e,t)?[e]:Me(Le(e))}function Re(e){if("string"==typeof e||Y(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Ue(e,t){for(var r=0,n=(t=Pe(t,e)).length;null!=e&&r<n;)e=e[Re(t[r++])];return r&&r==n?e:void 0}function Fe(e,t,r){var n=null==e?void 0:Ue(e,t);return void 0===n?r:n}function ze(e){var t=this.__data__=new we(e);this.size=t.size}ze.prototype.clear=function(){this.__data__=new we,this.size=0},ze.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},ze.prototype.get=function(e){return this.__data__.get(e)},ze.prototype.has=function(e){return this.__data__.has(e)},ze.prototype.set=function(e,t){var r=this.__data__;if(r instanceof we){var n=r.__data__;if(!_e||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Oe(n)}return r.set(e,t),this.size=r.size,this};var Be=function(){try{var e=fe(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),Je=Be;function Ve(e,t,r){"__proto__"==t&&Je?Je(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var qe=Object.prototype.hasOwnProperty;function We(e,t,r){var n=e[t];qe.call(e,t)&&ge(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,l=t.length;++i<l;){var a=t[i],u=n?n(r[a],e[a],a,r,e):void 0;void 0===u&&(u=e[a]),o?Ve(r,a,u):We(r,a,u)}return r}var Ge=Object.prototype.hasOwnProperty;function He(e){if(!W(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=B(e),r=[];for(var n in e)("constructor"!=n||!t&&Ge.call(e,n))&&r.push(n);return r}function Ye(e){return G(e)?F(e,!0):He(e)}var Xe="object"==typeof exports&&exports&&!exports.nodeType&&exports,Qe=Xe&&"object"==typeof module&&module&&!module.nodeType&&module,Ze=Qe&&Qe.exports===Xe?a.Buffer:void 0,et=Ze?Ze.allocUnsafe:void 0;function tt(){return[]}var rt=Object.prototype.propertyIsEnumerable,nt=Object.getOwnPropertySymbols,ot=nt?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r<n;){var l=e[r];t(l,r,e)&&(i[o++]=l)}return i}(nt(e),function(t){return rt.call(e,t)}))}:tt,it=ot;function lt(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}var at=J(Object.getPrototypeOf,Object),ut=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)lt(t,it(e)),e=at(e);return t}:tt,st=ut;function ct(e,t,r){var n=t(e);return O(e)?n:lt(n,r(e))}function dt(e){return ct(e,H,it)}function ft(e){return ct(e,Ye,st)}var pt=fe(a,"DataView"),mt=fe(a,"Promise"),ht=fe(a,"Set"),yt=fe(a,"WeakMap"),gt="[object Map]",vt="[object Promise]",bt="[object Set]",wt="[object WeakMap]",_t="[object DataView]",kt=oe(pt),Ot=oe(_e),Tt=oe(mt),jt=oe(ht),St=oe(yt),At=h;(pt&&At(new pt(new ArrayBuffer(1)))!=_t||_e&&At(new _e)!=gt||mt&&At(mt.resolve())!=vt||ht&&At(new ht)!=bt||yt&&At(new yt)!=wt)&&(At=function(e){var t=h(e),r="[object Object]"==t?e.constructor:void 0,n=r?oe(r):"";if(n)switch(n){case kt:return _t;case Ot:return gt;case Tt:return vt;case jt:return bt;case St:return wt}return t});var xt=At,$t=Object.prototype.hasOwnProperty;var Et=a.Uint8Array;function Mt(e){var t=new e.constructor(e.byteLength);return new Et(t).set(new Et(e)),t}var It=/\w*$/;var Nt=u?u.prototype:void 0,Dt=Nt?Nt.valueOf:void 0;function Ct(e,t,r){var n,o=e.constructor;switch(t){case"[object ArrayBuffer]":return Mt(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return function(e,t){var r=t?Mt(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}(e,r);case"[object Map]":case"[object Set]":return new o;case"[object Number]":case"[object String]":return new o(e);case"[object RegExp]":return function(e){var t=new e.constructor(e.source,It.exec(e));return t.lastIndex=e.lastIndex,t}(e);case"[object Symbol]":return n=e,Dt?Object(Dt.call(n)):{}}}var Lt=Object.create,Pt=function(){function e(){}return function(t){if(!W(t))return{};if(Lt)return Lt(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}(),Rt=Pt;var Ut=L&&L.isMap,Ft=Ut?I(Ut):function(e){return y(e)&&"[object Map]"==xt(e)};var zt=L&&L.isSet,Bt=zt?I(zt):function(e){return y(e)&&"[object Set]"==xt(e)},Jt="[object Arguments]",Vt="[object Function]",qt="[object Object]",Wt={};function Kt(e,t,r,n,o,i){var l,a=1&t,u=2&t,s=4&t;if(r&&(l=o?r(e,n,o,i):r(e)),void 0!==l)return l;if(!W(e))return e;var c=O(e);if(c){if(l=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&$t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}(e),!a)return function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}(e,l)}else{var d=xt(e),f=d==Vt||"[object GeneratorFunction]"==d;if(A(e))return function(e,t){if(t)return e.slice();var r=e.length,n=et?et(r):new e.constructor(r);return e.copy(n),n}(e,a);if(d==qt||d==Jt||f&&!o){if(l=u||f?{}:function(e){return"function"!=typeof e.constructor||B(e)?{}:Rt(at(e))}(e),!a)return u?function(e,t){return Ke(e,st(e),t)}(e,function(e,t){return e&&Ke(t,Ye(t),e)}(l,e)):function(e,t){return Ke(e,it(e),t)}(e,function(e,t){return e&&Ke(t,H(t),e)}(l,e))}else{if(!Wt[d])return o?e:{};l=Ct(e,d,a)}}i||(i=new ze);var p=i.get(e);if(p)return p;i.set(e,l),Bt(e)?e.forEach(function(n){l.add(Kt(n,t,r,n,e,i))}):Ft(e)&&e.forEach(function(n,o){l.set(o,Kt(n,t,r,o,e,i))});var m=c?void 0:(s?u?ft:dt:u?Ye:H)(e);return function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););}(m||e,function(n,o){m&&(n=e[o=n]),We(l,o,Kt(n,t,r,o,e,i))}),l}function Gt(e,t){return t.length<2?e:Ue(e,function(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}(t,0,-1))}Wt[Jt]=Wt["[object Array]"]=Wt["[object ArrayBuffer]"]=Wt["[object DataView]"]=Wt["[object Boolean]"]=Wt["[object Date]"]=Wt["[object Float32Array]"]=Wt["[object Float64Array]"]=Wt["[object Int8Array]"]=Wt["[object Int16Array]"]=Wt["[object Int32Array]"]=Wt["[object Map]"]=Wt["[object Number]"]=Wt[qt]=Wt["[object RegExp]"]=Wt["[object Set]"]=Wt["[object String]"]=Wt["[object Symbol]"]=Wt["[object Uint8Array]"]=Wt["[object Uint8ClampedArray]"]=Wt["[object Uint16Array]"]=Wt["[object Uint32Array]"]=!0,Wt["[object Error]"]=Wt[Vt]=Wt["[object WeakMap]"]=!1;var Ht=Object.prototype.hasOwnProperty;function Yt(e,t){var r=-1,n=(t=Pe(t,e)).length;if(!n)return!0;for(;++r<n;){var o=Re(t[r]);if("__proto__"===o&&!Ht.call(e,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var i=Gt(e,t);return null==i||delete i[Re(function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}(t))]}var Xt=Function.prototype,Qt=Object.prototype,Zt=Xt.toString,er=Qt.hasOwnProperty,tr=Zt.call(Object);function rr(e){return function(e){if(!y(e)||"[object Object]"!=h(e))return!1;var t=at(e);if(null===t)return!0;var r=er.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Zt.call(r)==tr}(e)?void 0:e}var nr=u?u.isConcatSpreadable:void 0;function or(e){return O(e)||k(e)||!!(nr&&e&&e[nr])}function ir(e,t,r,n,o){var i=-1,l=e.length;for(r||(r=or),o||(o=[]);++i<l;){var a=e[i];t>0&&r(a)?t>1?ir(a,t-1,r,n,o):lt(o,a):n||(o[o.length]=a)}return o}function lr(e){return(null==e?0:e.length)?ir(e,1):[]}var ar=Math.max;function ur(e){return e}var sr=Je?function(e,t){return Je(e,"toString",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:ur,cr=sr,dr=Date.now;var fr=function(e){var t=0,r=0;return function(){var n=dr(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(cr),pr=fr;var mr=function(e){return pr(function(e,t,r){return t=ar(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=ar(n.length-t,0),l=Array(i);++o<i;)l[o]=n[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=n[o];return a[t]=r(l),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,a)}}(e,void 0,lr),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,ft(e),r),n&&(r=Kt(r,7,rr));for(var o=t.length;o--;)Yt(r,t[o]);return r}),hr=mr;function yr(e){return"[object Object]"===Object.prototype.toString.call(e)}function gr(e){return"[object String]"===Object.prototype.toString.call(e)}function vr(e){return!(!gr(e)||""===e)}let br=2147483647;function wr(){let e,t,r=new Promise(function(){e=arguments[0],t=arguments[1]});return r.resolve=e,r.reject=t,r}function _r(e){return e!=e}function kr(e){let t=!1;if(vr(e))t=!isNaN(Number(e));else if(function(e){return"[object Number]"===Object.prototype.toString.call(e)}(e)){if(_r(e))return!1;t=!0}return t}function Or(e=10){kr(e)||(e=10),e=Math.min(e,br);let t=wr();return setTimeout(function(){t.resolve()},e),t}var Tr=/\s/;var jr=/^\s+/;function Sr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&Tr.test(e.charAt(t)););return t}(e)+1).replace(jr,""):e}var Ar=/^[-+]0x[0-9a-f]+$/i,xr=/^0b[01]+$/i,$r=/^0o[0-7]+$/i,Er=parseInt;function Mr(e){if("number"==typeof e)return e;if(Y(e))return NaN;if(W(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=W(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Sr(e);var r=xr.test(e);return r||$r.test(e)?Er(e.slice(2),r?2:8):Ar.test(e)?NaN:+e}var Ir=1/0;function Nr(e){return e?(e=Mr(e))===Ir||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function Dr(e){var t=Nr(e),r=t%1;return t==t?r?t-r:t:0}var Cr=a.isFinite,Lr=Math.min;var Pr=function(e){var t=Math[e];return function(e,r){if(e=Mr(e),(r=null==r?0:Lr(Dr(r),292))&&Cr(e)){var n=(Le(e)+"e").split("e");return+((n=(Le(t(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return t(e)}}("round"),Rr=Pr;function Ur(e){return!0===(t=e)||!1===t||y(t)&&"[object Boolean]"==h(t);var t}function Fr(e){if(!kr(e))return 0;return Nr(e)}function zr(e,t={}){let r=Fe(t,"useClampSafe",null);Ur(r)||(r=!1);let n=Fe(t,"useLimitSafe",null);Ur(n)||(n=!1);let o=Fe(t,"returnWithStateAndMsg",null);Ur(o)||(o=!1);let i=e=>o?{state:"success",msg:e}:e,l=e=>{if(o)return{state:"error",msg:e};throw new Error(e)};if(!kr(e))return i(0);let a=null;try{e=Fr(e),a=Rr(e),r&&(a>Number.MAX_SAFE_INTEGER?a=Number.MAX_SAFE_INTEGER:a<Number.MIN_SAFE_INTEGER&&(a=Number.MIN_SAFE_INTEGER))}catch(e){return l(e.toString())}return n&&!Number.isSafeInteger(Number(a))?l(`v[${e}] is not a safe integer`):("0"===String(a)&&(a=0),i(a))}function Br(e){return"[object Array]"===Object.prototype.toString.call(e)}function Jr(e){return K(e)}function Vr(e,t={}){let r=Fe(t,"useLimitSafe",null);return Ur(r)||(r=!1),!!kr(e)&&(e=Fr(e),r?Number.isSafeInteger(e):"number"==typeof(n=e)&&n==Dr(n));var n}function qr(e,t={}){if(!Vr(e,t))return!1;return zr(e)>0}function Wr(e,t={}){if(!Vr(e,t))return!1;return zr(e)>=0}function Kr(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?"":e.substring(0,t):""}function Gr(e,t){if(!vr(e))return"";if(!Wr(t))return"";if(0===(t=zr(t)))return"";let r=e.length-t;return r<0&&(r=0),e.substring(r,r+t)}function Hr(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Gr(e,e.length-t):""}function Yr(e,t,r={}){if(!vr(e))return"";if(!Wr(t))return e;if(t=zr(t),e.length<=t)return e;let n=Fe(r,"funWithMsg"),o="";if(Jr(n)){let r=n(e,t);vr(r)&&(o=r)}return Kr(e,t)+`...${o}`}function Xr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Qr=t,Zr=Qr.spawn,en=Qr.exec;function tn(e,t,r){var n={};try{Object.keys(e).forEach(function(r){e[r].forEach(function(e){n[e]||(rn(e,t),n[e]=1)}),n[r]||(rn(r,t),n[r]=1)})}catch(e){if(r)return r(e);throw e}if(r)return r()}function rn(e,t){try{process.kill(parseInt(e,10),t)}catch(e){if("ESRCH"!==e.code)throw e}}function nn(e,t,r,n,o){var i=n(e),l="";i.stdout.on("data",function(e){e=e.toString("ascii");l+=e});i.on("close",function(i){delete r[e],0==i?l.match(/\d+/g).forEach(function(i){i=parseInt(i,10),t[e].push(i),t[i]=[],r[i]=1,nn(i,t,r,n,o)}):0==Object.keys(r).length&&o()})}var on=Xr(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":en("taskkill /pid "+e+" /T /F",r);break;case"darwin":nn(e,n,o,function(e){return Zr("pgrep",["-P",e])},function(){tn(n,t,r)});break;default:nn(e,n,o,function(e){return Zr("ps",["-o","pid","--no-headers","--ppid",e])},function(){tn(n,t,r)})}});function ln(e){let t=wr();return on(Number(e),"SIGKILL",r=>{r?t.reject(r):t.resolve(`pid[${e}] killed`)}),t}function an(e,t={}){let r=Fe(t,"fs"),n=!1;try{r.statSync(e),n=!0}catch{n=!1}return n}function un(e){return function(e,t={}){let r=Fe(t,"fs");return!!an(e,{fs:r})&&!r.lstatSync(e).isDirectory()&&!r.lstatSync(e).isSymbolicLink()}(e,{fs:r})}function sn(e,t={}){let r=null,n=Fe(t,"fs"),o="";try{o=n.readFileSync(e,"utf8")}catch(e){r=e}return null!==r?{error:r}:{success:o}}function cn(t){let n=Fe(sn(t,{fs:r}),"success","");if(!vr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let i=e.dirname(t),l=e.join(i,o[1]);return un(l)?l:null}let dn={buildSpawnArgs:function(r,n=[]){if(Br(n)||(n=[]),"win32"!==process.platform)return{file:r,args:n,opt:{}};let o=function(r){if("win32"!==process.platform)return r;if(/\.(cmd|exe|bat|ps1)$/i.test(r))return r;if(e.isAbsolute(r))return r;try{let e=t.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=e.find(e=>/\.cmd$/i.test(e));return n||(e.find(e=>/\.exe$/i.test(e))||e[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n,opt:{}};if(/\.(cmd|bat)$/i.test(o)){let e=cn(o);if(e)return/\.exe$/i.test(e)?{file:e,args:n,opt:{}}:{file:process.execPath,args:[e,...n],opt:{}};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,opt:{}}},buildSpawnEnv:function(e=void 0){let t={...process.env,PYTHONIOENCODING:"utf-8"};if(void 0!==e){if("win32"===process.platform){let r=Object.keys(e).map(e=>e.toLowerCase());for(let e of Object.keys(t))r.includes(e.toLowerCase())&&delete t[e]}t={...t,...e}}return t}},{buildSpawnArgs:fn,buildSpawnEnv:pn}=dn,mn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function hn(e,r=[],n={}){let{timeoutMs:o=12e4,cwd:i=process.cwd(),input:l,validate:a,maxBuffer:u=10485760,onStdout:s,onStderr:c,env:d}=n,f=function(e){if(Jr(e))return e;if(!vr(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(!vr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Kr(r,4)){let t=Hr(r,4);if(!kr(t))return!1;let n=zr(t);if(!vr(e)||e.length<n)return!1}return!0}}(a),p=Date.now(),m=wr(),h=pn(d),y=fn(e,r),g=t.spawn(y.file,y.args,{cwd:i,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:h,...y.opt}),v="",b="",w=new TextDecoder("utf-8"),_=new TextDecoder("utf-8"),k=!1,O=!1;g.stdout.on("data",e=>{let t=w.decode(e,{stream:!0});t&&(Jr(s)&&s(t),v.length<u&&(v+=t))}),g.stderr.on("data",e=>{let t=_.decode(e,{stream:!0});t&&(Jr(c)&&c(t),b.length<u&&(b+=t))}),g.stdin.on("error",()=>{}),void 0!==l&&g.stdin.write(l,"utf8"),g.stdin.end();let T=setTimeout(()=>{k||(O=!0,ln(g.pid).catch(()=>{}),setTimeout(()=>{k||(k=!0,m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,500,mn),code:null,error:`TIMEOUT after ${o/1e3}s(子進程未能結束)`,durationMs:Date.now()-p,pid:g.pid}))},3e3).unref())},o);return g.on("error",e=>{k||(k=!0,clearTimeout(T),m.resolve({ok:!1,stdout:"",stderr:"",code:null,error:`${e.code||"UNKNOWN"}: ${e.message}`,durationMs:Date.now()-p,pid:g.pid}))}),g.on("close",(e,t)=>{if(k)return;k=!0,clearTimeout(T);let r=w.decode();r&&v.length<u&&(v+=r);let n=_.decode();n&&b.length<u&&(b+=n);let i=Date.now()-p;O?m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,500,mn),code:e,error:`TIMEOUT after ${o/1e3}s`,durationMs:i,pid:g.pid}):0===e?!f||f(v)?m.resolve({ok:!0,stdout:v,stderr:b,code:0,error:"",durationMs:i,pid:g.pid}):m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,500,mn),code:0,error:"OUTPUT_VALIDATION_FAILED",durationMs:i,pid:g.pid}):m.resolve({ok:!1,stdout:Yr(v,500,mn),stderr:Yr(b,1e3,mn),code:e,error:t?`Signal: ${t}`:`Exit code ${e}`,durationMs:i,pid:g.pid})}),m}async function yn(e,t=[],r={}){if(!vr(e))return{ok:!1,stdout:"",stderr:"",code:null,error:"command 須為非空字串",durationMs:0,attempts:0};Br(t)||(t=[]),yr(r)||(r={});let{maxRetries:n=0,retryDelayMs:o=5e3,...i}=r,l=Fe(i,"cwd",null);vr(l)?i.cwd=l:i.cwd=process.cwd();let a=Fe(i,"input",null);vr(a)?i.input=a:i.input=void 0;let u=Fe(i,"env",null);yr(u)?i.env=u:i.env=void 0;let s=Fe(i,"validate",null);Jr(s)||vr(s)?i.validate=s:i.validate=void 0;let c=Fe(i,"onStdout",null);Jr(c)?i.onStdout=c:i.onStdout=void 0;let d=Fe(i,"onStderr",null);Jr(d)?i.onStderr=d:i.onStderr=void 0,n=Wr(n)?zr(n):0,o=qr(o)?zr(o):5e3;let f=Fe(i,"timeoutMs",null);qr(f)?i.timeoutMs=zr(f):i.timeoutMs=12e4,i.timeoutMs=Math.min(i.timeoutMs,br);let p,m=Fe(i,"maxBuffer",null);qr(m)?i.maxBuffer=zr(m):i.maxBuffer=10485760;let h=0;for(let r=0;r<=n;r++){if(r>0){let e=Math.min(o*r,15e3);await Or(e)}if(p=await hn(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 gn(...e){let t=[];for(let r of e)if(Br(r))for(let e of r)vr(e)&&t.push(e);else vr(r)&&t.push(r);return t}function vn(e,t="params"){return vr(e)||(e="unknown error"),vr(t)||(t="params"),{ok:!1,stdout:"",stderr:"",code:null,error:e,errorType:t,durationMs:0,attempts:0}}function bn(e){let t=Fe(e,"error","");return vr(t)?0===t.indexOf("TIMEOUT")?"timeout":t.includes("ENOENT")||t.includes("ENAMETOOLONG")?"spawn":"OUTPUT_VALIDATION_FAILED"===t?"validation":"exec":"exec"}function wn(e){return!0===Fe(e,"ok",!1)||vr(Fe(e,"errorType",null))?e:{...e,errorType:bn(e)}}function _n(e,t){return qr(e)?zr(e):t}let kn=3e5,On=["exe","model","key","provider","useStoredAuth","agent","config","extraArgs","input","env"];async function Tn(t,r={}){if(!vr(t))return vn("prompt must be a non-empty string");let n=Fe(r,"exe",null);vr(n)||(n="opencode");let o=Fe(r,"model",null),i=Fe(r,"agent",null);vr(i)||(i="build");let l=Fe(r,"extraArgs",null),a=gn("run",["--agent",i],vr(o)?["-m",o]:[],l),u=Fe(r,"env",null);yr(u)||(u=void 0);let s=Fe(r,"config",null);yr(s)&&(s=JSON.stringify(s)),vr(s)&&(u={...u,OPENCODE_CONFIG_CONTENT:s});let c=Fe(r,"key",null),d=Fe(r,"provider",null),f=!1!==Fe(r,"useStoredAuth",null);vr(c)&&vr(d)?u={...u,OPENCODE_AUTH_CONTENT:JSON.stringify({[d]:{type:"api",key:c}})}:f||(u={...u,OPENCODE_AUTH_CONTENT:"{}"});let p=Fe(r,"cwd",null);p=vr(p)?e.resolve(p):process.cwd(),u={...u,PWD:p};let m=_n(Fe(r,"timeoutMs",null),kn),h=hr(r,On);return wn(await yn(n,a,{...h,input:t,env:u,timeoutMs:m}))}let jn=["exe","model","skipPermissions","extraArgs","input"];async function Sn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"exe",null);vr(r)||(r="claude");let n=Fe(t,"model",null),o=Fe(t,"skipPermissions",null);Ur(o)||(o=!0);let i=Fe(t,"extraArgs",null),l=gn("-p",o?"--dangerously-skip-permissions":[],vr(n)?["--model",n]:[],i),a=_n(Fe(t,"timeoutMs",null),kn),u=hr(t,jn);return wn(await yn(r,l,{...u,input:e,timeoutMs:a}))}let An=["exe","model","sandbox","extraArgs","input"];async function xn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"exe",null);vr(r)||(r="codex");let n=Fe(t,"model",null),o=Fe(t,"sandbox",null);vr(o)||(o="workspace-write");let i=Fe(t,"extraArgs",null),l=gn("exec",["--sandbox",o],"--skip-git-repo-check",vr(n)?["-m",n]:[],i),a=_n(Fe(t,"timeoutMs",null),kn),u=hr(t,An);return wn(await yn(r,l,{...u,input:e,timeoutMs:a}))}let $n=kn,En=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function Mn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");if(e.length>3e4)return vn(`prompt too long (${e.length} chars > 30000), agy passes prompt via --print flag and Windows command line is capped at 32767 chars`);let r=Fe(t,"exe",null);vr(r)||(r="agy");let n=Fe(t,"model",null),o=Fe(t,"effort",null),i=Fe(t,"skipPermissions",null);Ur(i)||(i=!0);let l=_n(Fe(t,"timeoutMs",null),$n),a=Fe(t,"printTimeout",null);vr(a)||(a=`${Math.max(30,Math.floor(l/1e3)-30)}s`);let u=Fe(t,"addDirs",null);if(!Br(u)){let e=Fe(t,"cwd",null);vr(e)||(e=process.cwd()),u=[e]}let s=[];for(let e of u)vr(e)&&s.push("--add-dir",e);let c=Fe(t,"extraArgs",null),d=gn(i?"--dangerously-skip-permissions":[],["--print-timeout",a],vr(n)?["--model",n]:[],vr(o)?["--effort",o]:[],s,c,["--print",e]),f=hr(t,En);try{return wn(await yn(r,d,{...f,timeoutMs:l}))}catch(e){return vn(`${e.code||"UNKNOWN"}: ${e.message}`,"spawn")}}function In(e){if(Jr(e))return e;if(!vr(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(!vr(e)||""===e.trim())return!1}else if("json"===r)try{JSON.parse(e)}catch{return!1}else if("min:"===Kr(r,4)){let t=Hr(r,4);if(!kr(t))return!1;let n=zr(t);if(!vr(e)||e.length<n)return!1}return!0}}let Nn=["length","content_filter"];function Dn(e){return vr(e)?e.trim().toLowerCase():""}function Cn(e,t){try{return{pass:!!e(t),threw:""}}catch(e){let t=Fe(e,"message","");return{pass:!1,threw:vr(t)?t:String(e)}}}function Ln(e){let t=Fe(e,"finishReason",""),r=Fe(e,"content",null),n=!0===Fe(e,"acceptTruncated",!1),o=Fe(e,"validator",null),i=Fe(e,"reasoningTokens",null),l=`INCOMPLETE_RESPONSE: ${Fe(e,"label","")}`;if(""===(vr(r)?r.trim():"")){return{accept:!1,error:`${l}; no visible output (reasoning may have used up the output token limit${kr(i)?`, reasoning_tokens=${i}`:""})`,threw:""}}if("length"!==t||!n)return{accept:!1,error:l,threw:""};if("function"==typeof o){let e=Cn(o,r);if(!e.pass)return{accept:!1,error:`${l}; rejected by validate`,threw:e.threw}}return{accept:!0,error:"",threw:""}}let Pn="INVALID_RESPONSE: body is not JSON";function Rn(e,t){let r=e instanceof Uint8Array?e:new Uint8Array(0),n=Array.from(r.subarray(0,16)).map(e=>e.toString(16).padStart(2,"0")).join(""),o=e=>{let r="function"==typeof Fe(t,"get",null)?t.get(e):null;return vr(r)?r:"none"},i=r.length>16?"...":"";return`${Pn} (${r.length} bytes, first bytes ${n||"(none)"}${i}, content-encoding=${o("content-encoding")}, content-type=${o("content-type")})`}let Un=kn,Fn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function zn(e,t,r,n,o,i){let l=Date.now(),a=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-l,usage:null,...e}),u=new AbortController,s=setTimeout(()=>{u.abort()},n),c=null,d=new Uint8Array(0),f="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),d=new Uint8Array(await c.arrayBuffer()),f=new TextDecoder("utf-8").decode(d)}catch(e){if(clearTimeout(s),"AbortError"===e.name)return a({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return a({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(s),!c.ok)return a({stderr:Yr(f,1e3,Fn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,m=null,h=null,y=null,g=!0;try{let e=JSON.parse(f);p=Fe(e,"choices.0.message.content",null),m=Fe(e,"choices.0.finish_reason",null),h=Fe(e,"choices.0.message.tool_calls",null),y=Fe(e,"usage",null),yr(y)||(y=null)}catch{g=!1}if(!g)return a({stderr:Yr(f,500,Fn),code:c.status,error:Rn(d,c.headers),errorType:"invalid-response",finishReason:"",truncated:!1});let v=Dn(m),b={finishReason:v,truncated:Nn.includes(v)};if("tool_calls"===v||null!=h)return a({stderr:Yr(f,1e3,Fn),code:c.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:y,...b});if(void 0===p&&(p=null),null!==p&&"string"!=typeof p&&(p=JSON.stringify(p)),b.truncated){let e=Ln({finishReason:v,content:p,acceptTruncated:i,validator:o,reasoningTokens:Fe(y,"completion_tokens_details.reasoning_tokens",null),label:`finish_reason=${v}`});return e.accept?a({ok:!0,stdout:p,code:c.status,usage:y,...b}):a({stdout:Yr(p||"",500,Fn),stderr:Yr((e.threw?`validate threw: ${e.threw}\n`:"")+f,500,Fn),code:c.status,error:e.error,errorType:"incomplete",usage:y,...b})}if(null===p)return a({stderr:Yr(f,500,Fn),code:c.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:y,...b});if(o){let e=Cn(o,p);if(!e.pass)return a({stdout:Yr(p,500,Fn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:y,...b})}return a({ok:!0,stdout:p,code:c.status,usage:y,...b})}async function Bn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"baseURL",null);if(!vr(r))return vn("baseURL must be a non-empty string");let n=Fe(t,"model",null);if(!vr(n))return vn("model must be a non-empty string");let o=Fe(t,"key",null),i=Fe(t,"system",null),l=Fe(t,"body",null);yr(l)||(l={});let a=Fe(t,"headers",null);yr(a)||(a={});let u=_n(Fe(t,"timeoutMs",null),Un),s=Fe(t,"maxRetries",null);s=Wr(s)?zr(s):0;let c=_n(Fe(t,"retryDelayMs",null),5e3),d=In(Fe(t,"validate",null)),f=!0===Fe(t,"acceptTruncated",null),p=r.replace(/\/+$/,"")+"/chat/completions",m=[];vr(i)&&m.push({role:"system",content:i}),m.push({role:"user",content:e});let h={model:n,messages:m,...l},y={"Content-Type":"application/json","Accept-Encoding":"identity",...a};vr(o)&&(y.Authorization=`Bearer ${o}`);let g=null,v=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),g=await zn(p,y,h,u,d,f),v=e+1,g.ok)return g.attempts=v,g;if(!0===g.truncated)break;let t=g.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return g.attempts=v,g}let Jn=kn,Vn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function qn(e){if(!Br(e))return"";let t=[];for(let r of e){if("message"!==Fe(r,"type",""))continue;let e=Fe(r,"content",null);if(Br(e))for(let r of e){let e=Fe(r,"text",null);vr(e)&&t.push(e)}}return t.join("")}async function Wn(e,t,r,n,o,i){let l=Date.now(),a=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-l,usage:null,...e}),u=new AbortController,s=setTimeout(()=>{u.abort()},n),c=null,d=new Uint8Array(0),f="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),d=new Uint8Array(await c.arrayBuffer()),f=new TextDecoder("utf-8").decode(d)}catch(e){if(clearTimeout(s),"AbortError"===e.name)return a({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return a({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(s),!c.ok)return a({stderr:Yr(f,1e3,Vn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,m="",h="",y="",g=null,v=!0;try{let e=JSON.parse(f);p=Fe(e,"output",null),m=Fe(e,"status",""),h=Fe(e,"incomplete_details.reason",""),y=Fe(e,"error.message","")||Fe(e,"error.code",""),g=Fe(e,"usage",null),yr(g)||(g=null)}catch{v=!1}if(!v)return a({stderr:Yr(f,500,Vn),code:c.status,error:Rn(d,c.headers),errorType:"invalid-response",usage:g,finishReason:"",truncated:!1});let b=Dn(m),w=Dn(h),_=b;"completed"===b?_="stop":"incomplete"===b&&(_="max_output_tokens"===w?"length":w||"incomplete");let k={finishReason:_,truncated:"incomplete"===b},O=h||y||m||"unknown",T=Br(p);if(T&&p.some(e=>"function_call"===Fe(e,"type","")))return a({stderr:Yr(f,1e3,Vn),code:c.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:g,...k});if(k.truncated){let e=T?qn(p):"",t=Ln({finishReason:_,content:e,acceptTruncated:i,validator:o,reasoningTokens:Fe(g,"output_tokens_details.reasoning_tokens",null),label:`status=${m} (${O})`});return t.accept?a({ok:!0,stdout:e,code:c.status,usage:g,...k}):a({stdout:Yr(e,500,Vn),stderr:Yr((t.threw?`validate threw: ${t.threw}\n`:"")+f,500,Vn),code:c.status,error:t.error,errorType:"incomplete",usage:g,...k})}if(!T)return a({stderr:Yr(f,500,Vn),code:c.status,error:"INVALID_RESPONSE: missing output array",errorType:"invalid-response",usage:g,...k});if("completed"!==b)return a({stdout:Yr(qn(p),500,Vn),stderr:Yr(f,500,Vn),code:c.status,error:`INCOMPLETE_RESPONSE: status=${m||"missing"} (${O})`,errorType:"incomplete",usage:g,...k});let j=qn(p);if(""===j)return a({stderr:Yr(f,500,Vn),code:c.status,error:"INVALID_RESPONSE: no output_text in output messages",errorType:"invalid-response",usage:g,...k});if(o){let e=Cn(o,j);if(!e.pass)return a({stdout:Yr(j,500,Vn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:g,...k})}return a({ok:!0,stdout:j,code:c.status,usage:g,...k})}async function Kn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"baseURL",null);if(!vr(r))return vn("baseURL must be a non-empty string");let n=Fe(t,"model",null);if(!vr(n))return vn("model must be a non-empty string");let o=Fe(t,"key",null),i=Fe(t,"system",null),l=Fe(t,"body",null);yr(l)||(l={});let a=Fe(t,"headers",null);yr(a)||(a={});let u=_n(Fe(t,"timeoutMs",null),Jn),s=Fe(t,"maxRetries",null);s=Wr(s)?zr(s):0;let c=_n(Fe(t,"retryDelayMs",null),5e3),d=In(Fe(t,"validate",null)),f=!0===Fe(t,"acceptTruncated",null),p=r.replace(/\/+$/,"")+"/responses",m={model:n,input:e};vr(i)&&(m.instructions=i),m={...m,...l};let h={"Content-Type":"application/json","Accept-Encoding":"identity",...a};vr(o)&&(h.Authorization=`Bearer ${o}`);let y=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),y=await Wn(p,h,m,u,d,f),g=e+1,y.ok)return y.attempts=g,y;if(!0===y.truncated)break;let t=y.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return y.attempts=g,y}function Gn(e){if(yr(e)){for(let t in e)return!0;return!1}return!1}let Hn=kn,Yn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Xn(e,t,r,n,o,i){let l=Date.now(),a=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-l,usage:null,answers:null,modelResolved:"",...e}),u=new AbortController,s=setTimeout(()=>{u.abort()},o),c=null,d=new Uint8Array(0),f="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),d=new Uint8Array(await c.arrayBuffer()),f=new TextDecoder("utf-8").decode(d)}catch(e){if(clearTimeout(s),"AbortError"===e.name)return a({error:`TIMEOUT after ${o/1e3}s`,errorType:"timeout"});return a({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(s),!c.ok)return a({stderr:Yr(f,1e3,Yn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,m="",h=null,y=!0;try{let e=JSON.parse(f);p=Fe(e,"answers",null),m=Fe(e,"model",""),vr(m)||(m=""),h=Fe(e,"usage",null),yr(h)||(h=null)}catch{y=!1}if(!y)return a({stderr:Yr(f,500,Yn),code:c.status,error:Rn(d,c.headers),errorType:"invalid-response"});if(!yr(p))return a({stderr:Yr(f,500,Yn),code:c.status,error:"INVALID_RESPONSE: missing answers object",errorType:"invalid-response",usage:h,modelResolved:m});let g=n.filter(e=>!yr(p[e]));if(g.length>0)return a({stderr:Yr(f,500,Yn),code:c.status,error:`INVALID_RESPONSE: missing answers for [${g.join(", ")}]`,errorType:"invalid-response",usage:h,modelResolved:m});let v=JSON.stringify(p);if(i){let e=Cn(i,v);if(!e.pass)return a({stdout:Yr(v,500,Yn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:h,modelResolved:m})}return a({ok:!0,stdout:v,code:c.status,usage:h,answers:p,modelResolved:m})}async function Qn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"questions",null);if(!Gn(r))return vn("questions must be a non-empty object");let n=Fe(t,"baseURL",null);vr(n)||(n="https://api.typesafe.ai/v1");let o=Fe(t,"model",null);vr(o)||(o="jev-latest");let i=Fe(t,"key",null),l=Fe(t,"body",null);yr(l)||(l={});let a=Fe(t,"headers",null);yr(a)||(a={});let u=_n(Fe(t,"timeoutMs",null),Hn),s=Fe(t,"maxRetries",null);s=Wr(s)?zr(s):0;let c=_n(Fe(t,"retryDelayMs",null),5e3),d=In(Fe(t,"validate",null)),f=n.replace(/\/+$/,"")+"/systemone",p={model:o,state:e,questions:r,...l},m=Object.keys(yr(p.questions)?p.questions:r),h={"Content-Type":"application/json","Accept-Encoding":"identity",...a};vr(i)&&(h.Authorization=`Bearer ${i}`);let y=null,g=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),y=await Xn(f,h,p,m,u,d),g=e+1,y.ok)return y.attempts=g,y;let t=y.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return y.attempts=g,y}let Zn={opencode:Tn,claude:Sn,codex:xn,antigravity:Mn,"api-openai-compat":Bn,"api-openai-responses":Kn,"api-typesafe-systemone":Qn};function eo(e){return e!=e}function to(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,H(e))}var ro=Math.max;function no(e,t,r,n){e=G(e)?e:to(e),r=r&&!n?Dr(r):0;var o=e.length;return r<0&&(r=ro(o+r,0)),function(e){return"string"==typeof e||!O(e)&&y(e)&&"[object String]"==h(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,eo,r)}(e,t,r)>-1}async function oo(e,t,r={}){let n=H(Zn);return vr(e)&&no(n,e)?(0,Zn[e])(t,r):vn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let io=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],lo=["id","keys","meta"],ao=kn,uo={cursors:{}};function so(e){return void 0!==Fe(e,"truncated",void 0)?{truncated:e.truncated,finishReason:e.finishReason}:{}}function co(e){let t=Fe(e,"error","");vr(t)||(t="");let r=Fe(e,"code",null);return 0===t.indexOf("TIMEOUT")||(!!t.includes("ENOENT")||(2===r||("OUTPUT_VALIDATION_FAILED"===t||(!0===Fe(e,"truncated",!1)||(0===t.indexOf("TOOL_CALLS_UNSUPPORTED")||(0===t.indexOf(Pn)||0===t.indexOf("unknown ai kind")))))))}async function fo(e,t={}){if(!vr(e))return{...vn("prompt must be a non-empty string"),tried:[]};let r=Fe(t,"providers",null),n=Br(r)?r.filter(yr):[];if(0===n.length)return{...vn("providers must be a non-empty array"),tried:[]};let o=_n(Fe(t,"budgetMs",null),null),i=null===o?null:Date.now()+o,l=_n(Fe(t,"minAttemptMs",null),2e4),{state:a,saveState:u}=function(e){let t=yr(e)&&Jr(e.get)&&Jr(e.set),r=null;if(t)try{r=e.get()}catch{}return yr(r)||(r=t?{cursors:{}}:uo),yr(r.cursors)||(r.cursors={}),yr(r.cooling)||(r.cooling={}),{state:r,saveState:()=>{if(t)try{e.set(r)}catch{}}}}(Fe(t,"store",null)),s=_n(Fe(t,"cooldownMs",null),0),c=Fe(t,"coolDetect",null);Jr(c)||(c=null);let d=Fe(t,"shouldStop",null);Jr(d)||(d=null);let f=()=>{if(null===d)return!1;try{return!0===d()}catch{return!1}};s>0&&(n=function(e,t,r,n){let o=Date.now(),i=[],l=[],a=!1;for(let n of e){let e=Fe(n,"id",null),u=vr(e)?Fe(t.cooling,e,null):null;qr(u)&&o-u<r?l.push(n):(vr(e)&&void 0!==t.cooling[e]&&(delete t.cooling[e],a=!0),i.push(n))}return a&&n(),[...i,...l]}(n,a,s,u));let p=Fe(t,"onEvent",null),m=e=>{if(Jr(p))try{p(e)}catch{}},h=hr(t,io),y=[],g=null,v=null;for(let t=0;t<n.length;t++){let r=n[t],o=Fe(r,"id",null),d=vr(o);d||(o=String(t));let p=Fe(r,"kind",null),b=Fe(r,"model",null),w=Fe(r,"keys",null),_=Br(w)?w.filter(vr):[],k=_.length,O=hr(r,lo),T=0;if(k>0){let e=Fe(a.cursors,o,0);T=qr(e)?zr(e)%k:0}let j=k>0?k:1,S=!1,A=y.length;for(let t=0;t<j&&!S;t++){if(f())return m({type:"aborted",providerId:o,keyIndex:null,keyId:o}),y.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...vn("ABORTED","aborted"),tried:y};let r=k>0?(T+t)%k:null,n=null===r?o:`${o}#${r}`,w={...h,...O};k>0&&(w.key=_[r]);let j=_n(Fe(w,"timeoutMs",null),ao);if(null!==i){let e=i-Date.now();if(e<l)return m({type:"budget-out",providerId:o,keyIndex:r,keyId:n,remainingMs:e}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"budget-out"}),{...vn("budget exhausted","budget"),tried:y};j=Math.min(j,e)}w.timeoutMs=j,m({type:"try",providerId:o,keyIndex:r,keyId:n,kind:p,model:b});let A=await oo(p,e,w);if(A.ok)return s>0&&d&&void 0!==a.cooling[o]&&(delete a.cooling[o],u()),k>0&&(a.cursors[o]=(r+1)%k,u()),m({type:"ok",providerId:o,keyIndex:r,keyId:n,durationMs:A.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:A.durationMs,...void 0!==A.usage?{usage:A.usage}:{},...so(A)}),{...A,providerId:o,keyIndex:r,kind:p,model:b,tried:y};if(g=A,v={providerId:o,keyIndex:r,kind:p,model:b},s>0&&d){let e=429===A.code||vr(A.error)&&0===A.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(A)}catch{}e&&(a.cooling[o]=Date.now(),u(),m({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:A.error,cooldownMs:s}))}co(A)?(m({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),y.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}:{},...so(A)}),S=!0):(m({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:A.error,errorType:A.errorType,stdout:A.stdout,stderr:A.stderr}),y.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}:{},...so(A)}))}let x=y.slice(A);m({type:"group-exhausted",providerId:o,keyIndex:null,keyId:o,keys:k,attempted:x.length,by:S?"skip-group":"all-keys",errorTypes:x.map(e=>e.errorType),error:Fe(g,"error","")})}return{...g||vn("all providers failed","exec"),...v||{},tried:y}}function po(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!(!gr(e)||""!==e)}(e)||(!!function(e){return!!Br(e)&&0===e.length}(e)||!!_r(e)))))}function mo(e){return!!Br(e)&&(0!==e.length&&(1!==e.length||!po(e[0])))}function ho(e){let t=String(e||"");if(t=t.replace(new RegExp(String.fromCharCode(27)+"\\[[0-9;]*m","g"),""),t=t.replace(/```(?:json)?/g,""),t=t.trim(),""===t)return null;try{let e=JSON.parse(t);if(null!==e&&"object"==typeof e)return e}catch(e){}let r=-1;for(let e=0;e<t.length;e++)if("{"===t[e]||"["===t[e]){r=e;break}if(r<0)return null;let n=0,o=!1,i=!1;for(let e=r;e<t.length;e++){let l=t[e];if(o)i?i=!1:"\\"===l?i=!0:'"'===l&&(o=!1);else if('"'===l)o=!0;else if("{"===l||"["===l)n++;else if(("}"===l||"]"===l)&&(n--,0===n)){try{let n=JSON.parse(t.slice(r,e+1));if(null!==n&&"object"==typeof n)return n}catch(e){}return null}}return null}let yo=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),go=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function vo(e,t={}){let r=Date.now();if(!vr(e))return{ok:!1,json:null,error:"prompt must be a non-empty string",errorType:"params",ms:0,tried:[]};let n=Fe(t,"providers",null),o=Fe(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:l}=function(e,t){let r=[Fe(t,"use","")],n=Fe(t,"fallback",null);mo(n)&&(r=[...r,...n]);let o=[],i=[];for(let t of r){let r=Fe(e,t,null);yr(r)?o.push({id:t,...r}):i.push(String(t))}return{chain:o,missing:i}}(n,o);if(l.length>0)return{ok:!1,json:null,error:`unknown provider name(s): ${l.join(", ")}`,errorType:"params",ms:0,tried:[]};if(0===i.length)return{ok:!1,json:null,error:`no valid provider for spec: ${JSON.stringify(o)}`,errorType:"params",ms:0,tried:[]};let a=!0===Fe(t,"rawText",!1),u=Fe(t,"parse",null),s=Jr(u);s||(u=ho);let c=Fe(t,"check",null);Jr(c)||(c=null);let d=Fe(t,"acceptTruncated",null);Ur(d)||(d=s&&!a);let f=Fe(t,"promptPrefix",null);vr(f)||(f=""===f?"":yo);let p=e=>{try{if(a){let t=String(e||"").trim();return""!==t&&(!c||!0===c(t))}let t=u(e);return null!==t&&(!c||!0===c(t))}catch{return!1}};i=i.map(e=>{let t=In(Fe(e,"validate",null));return null===t?e:{...e,validate:e=>Cn(t,e).pass&&p(e)}});let m=await fo(f+e,{...hr(t,go),providers:i,validate:p,acceptTruncated:d,timeoutMs:Fe(t,"timeoutMs",null)||kn}),h=null;if(m.ok)try{h=a?String(m.stdout||"").trim():u(m.stdout)}catch{h=null}let y=m.ok&&null!==h,g=Fe(m,"providerId",null),v=Fe(m,"keyIndex",null);return{ok:y,json:h,providerId:g,keyIndex:v,keyId:null===v?g:`${g}#${v}`,ms:Date.now()-r,tried:Fe(m,"tried",[]),usage:Fe(m,"usage",null),finishReason:Fe(m,"finishReason",""),truncated:!0===Fe(m,"truncated",!1),error:y?"":m.ok?"OUTPUT_VALIDATION_FAILED":Fe(m,"error","unknown error"),...y?{}:{errorType:m.ok?"validation":Fe(m,"errorType","exec")}}}async function bo(e={}){let t=Date.now(),r=Fe(e,"providers",null),n=Fe(e,"task",""),o=Fe(e,"agents",null),i=Fe(e,"integrate",null),l=Fe(e,"check",null),a=Fe(e,"callOpt",{});if(!vr(n))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"task must be a non-empty string"};if(!mo(o))return{ok:!1,result:null,integrated:!1,agents:[],candidates:[],totalMs:0,error:"agents must be a non-empty array"};let u=Fe(e,"minCandidates",null);u=qr(u)?zr(u):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:u,...s}=e;return vo(n,{...a,...s,providers:r,spec:{use:t,fallback:o},check:Jr(i)?i:l})})),c=s.filter(e=>e.ok).map(e=>e.json);if(0===c.length)return{ok:!1,result:null,integrated:!1,agents:s,candidates:c,totalMs:Date.now()-t,error:"all agents failed"};if(1===c.length||c.length<u)return{ok:!0,result:c[0],integrated:!1,agents:s,candidates:c,totalMs:Date.now()-t,error:""};if(!i||!vr(Fe(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:d,fallback:f,prompt:p,check:m,meta:h,...y}=i,g=Jr(p)?p(c):function(e,t={}){let r=Fe(t,"schema",""),n=vr(r)?`\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同:\n${r}\n`:"\n只回覆 JSON 物件,不要任何其他說明文字,格式與候選相同。\n";return`你是整合者。以下是同一任務由 ${e.length} 個獨立執行產生的候選結果(JSON),請整合成單一最佳版本:擇優合併、去重、保留最完整的證據標注與爭議呈現,不可加入候選中沒有的數字或結論。\n${n}\n${e.map((e,t)=>`【候選 ${t+1}】\n${JSON.stringify(e)}`).join("\n\n")}`}(c,e),v=await vo(g,{...a,...y,providers:r,spec:{use:d,fallback:f},check:Jr(m)?m:l});return{ok:v.ok,result:v.ok?v.json:null,integrated:v.ok,agents:s,candidates:c,integrateDetail:v,totalMs:Date.now()-t,error:v.ok?"":`integrate failed: ${v.error}`}}let wo=["id","use","fallback","prompt","check","meta"];async function _o(e={}){let t=Date.now(),r=Fe(e,"providers",null),n=Fe(e,"input",null),o=Fe(e,"stages",null),i=Fe(e,"callOpt",{});if(!mo(o))return{ok:!1,result:null,stages:{},results:{},order:[],failedStage:null,totalMs:0,error:"stages must be a non-empty array"};let l={},a={},u=[],s=null;for(let e=0;e<o.length;e++){let c=o[e],d=vr(Fe(c,"id",""))?c.id:`stage${e+1}`;u.push(d);let f=Fe(c,"prompt",null);if(!Jr(f))return a[d]={ok:!1,error:`stage[${d}].prompt must be a function`},{ok:!1,result:null,stages:a,results:l,order:u,failedStage:d,totalMs:Date.now()-t,error:a[d].error};let p=f({input:n,prev:s,results:l,index:e});if(!vr(p))return a[d]={ok:!1,error:`stage[${d}].prompt returned empty`},{ok:!1,result:null,stages:a,results:l,order:u,failedStage:d,totalMs:Date.now()-t,error:a[d].error};let m=hr(c,wo),h=await vo(p,{...i,...m,providers:r,spec:{use:Fe(c,"use",""),fallback:Fe(c,"fallback",null)},check:Fe(c,"check",null)});if(a[d]=h,!h.ok)return{ok:!1,result:null,stages:a,results:l,order:u,failedStage:d,totalMs:Date.now()-t,error:`stage[${d}] failed: ${h.error}`};l[d]=h.json,s=h.json}return{ok:!0,result:s,stages:a,results:l,order:u,failedStage:null,totalMs:Date.now()-t,error:""}}let ko=["stages","input"],Oo=["task","agents","integrate","check","schema","minCandidates"];let To={edit:"deny",bash:"ask"},jo=["--tools","Read,Glob,Grep","--strict-mcp-config"],So="high",Ao=["--effort",So],xo=["--config",`model_reasoning_effort="${So}"`],$o=["--variant",So],Eo=[{id:"oc:agnes-ai/agnes-3.0-flash",model:"agnes-ai/agnes-3.0-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-3.0-flash":{name:"Agnes 3.0 Flash"}}}},permission:To}},{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:To}},{id:"oc:opencode/muse-spark-1.2-contributor-free",model:"opencode/muse-spark-1.2-contributor-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To},extraArgs:$o},{id:"oc:opencode/muse-spark-1.3-contributor-free",model:"opencode/muse-spark-1.3-contributor-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To},extraArgs:$o},{id:"oc:opencode/big-pickle",model:"opencode/big-pickle",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{id:"oc:opencode/mimo-v2.6-flash-free",model:"opencode/mimo-v2.6-flash-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To}},{id:"oc:opencode/space-bunny-free",model:"opencode/space-bunny-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:To},extraArgs:$o},{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:[...jo,...Ao]},{id:"claude:opus-5.5",model:"claude-opus-5-5",kind:"claude",extraArgs:[...jo,...Ao]},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only",extraArgs:xo},{id:"codex:gpt-6.1-sol",model:"gpt-6.1-sol",kind:"codex",sandbox:"read-only",extraArgs:xo},{id:"typesafe:jev-latest",model:"jev-latest",kind:"api-typesafe-systemone",envVar:"TYPESAFE_KEYS"},{id:"zen:jev-1.13-free",model:"jev-1.13-free",kind:"api-typesafe-systemone",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1"},{id:"agnes:agnes-3.0-flash",model:"agnes-3.0-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:32768,chat_template_kwargs:{enable_thinking:!0}}},{id:"zen:space-bunny-free",model:"space-bunny-free",kind:"api-openai-compat",envVar:"OPENCODE_KEYS",baseURL:"https://opencode.ai/zen/v1",body:{max_tokens:32768,reasoning_effort:So}}];var Mo=Array.prototype.join;function Io(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Oe;++t<r;)this.add(e[t])}function No(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 Do(e,t){return e.has(t)}Io.prototype.add=Io.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Io.prototype.has=function(e){return this.__data__.has(e)};function Co(e,t,r,n,o,i){var l=1&r,a=e.length,u=t.length;if(a!=u&&!(l&&u>a))return!1;var s=i.get(e),c=i.get(t);if(s&&c)return s==t&&c==e;var d=-1,f=!0,p=2&r?new Io:void 0;for(i.set(e,t),i.set(t,e);++d<a;){var m=e[d],h=t[d];if(n)var y=l?n(h,m,d,t,e,i):n(m,h,d,e,t,i);if(void 0!==y){if(y)continue;f=!1;break}if(p){if(!No(t,function(e,t){if(!Do(p,t)&&(m===e||o(m,e,r,n,i)))return p.push(t)})){f=!1;break}}else if(m!==h&&!o(m,h,r,n,i)){f=!1;break}}return i.delete(e),i.delete(t),f}function Lo(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function Po(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var Ro=u?u.prototype:void 0,Uo=Ro?Ro.valueOf:void 0;var Fo=Object.prototype.hasOwnProperty;var zo="[object Arguments]",Bo="[object Array]",Jo="[object Object]",Vo=Object.prototype.hasOwnProperty;function qo(e,t,r,n,o,i){var l=O(e),a=O(t),u=l?Bo:xt(e),s=a?Bo:xt(t),c=(u=u==zo?Jo:u)==Jo,d=(s=s==zo?Jo:s)==Jo,f=u==s;if(f&&A(e)){if(!A(t))return!1;l=!0,c=!1}if(f&&!c)return i||(i=new ze),l||R(e)?Co(e,t,r,n,o,i):function(e,t,r,n,o,i,l){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 ge(+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 a=Lo;case"[object Set]":var u=1&n;if(a||(a=Po),e.size!=t.size&&!u)return!1;var s=l.get(e);if(s)return s==t;n|=2,l.set(e,t);var c=Co(a(e),a(t),n,o,i,l);return l.delete(e),c;case"[object Symbol]":if(Uo)return Uo.call(e)==Uo.call(t)}return!1}(e,t,u,r,n,o,i);if(!(1&r)){var p=c&&Vo.call(e,"__wrapped__"),m=d&&Vo.call(t,"__wrapped__");if(p||m){var h=p?e.value():e,y=m?t.value():t;return i||(i=new ze),o(h,y,r,n,i)}}return!!f&&(i||(i=new ze),function(e,t,r,n,o,i){var l=1&r,a=dt(e),u=a.length;if(u!=dt(t).length&&!l)return!1;for(var s=u;s--;){var c=a[s];if(!(l?c in t:Fo.call(t,c)))return!1}var d=i.get(e),f=i.get(t);if(d&&f)return d==t&&f==e;var p=!0;i.set(e,t),i.set(t,e);for(var m=l;++s<u;){var h=e[c=a[s]],y=t[c];if(n)var g=l?n(y,h,c,t,e,i):n(h,y,c,e,t,i);if(!(void 0===g?h===y||o(h,y,r,n,i):g)){p=!1;break}m||(m="constructor"==c)}if(p&&!m){var v=e.constructor,b=t.constructor;v==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof v&&v instanceof v&&"function"==typeof b&&b instanceof b||(p=!1)}return i.delete(e),i.delete(t),p}(e,t,r,n,o,i))}function Wo(e,t,r,n,o){return e===t||(null==e||null==t||!y(e)&&!y(t)?e!=e&&t!=t:qo(e,t,r,n,Wo,o))}function Ko(e){return e==e&&!W(e)}function Go(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function Ho(e){var t=function(e){for(var t=H(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Ko(o)]}return t}(e);return 1==t.length&&t[0][2]?Go(t[0][0],t[0][1]):function(r){return r===e||function(e,t,r,n){var o=r.length,i=o,l=!n;if(null==e)return!i;for(e=Object(e);o--;){var a=r[o];if(l&&a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++o<i;){var u=(a=r[o])[0],s=e[u],c=a[1];if(l&&a[2]){if(void 0===s&&!(u in e))return!1}else{var d=new ze;if(n)var f=n(s,c,u,e,t,d);if(!(void 0===f?Wo(c,s,3,n,d):f))return!1}}return!0}(r,e,t)}}function Yo(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 l=Re(t[n]);if(!(i=null!=e&&r(e,l)))break;e=e[l]}return i||++n!=o?i:!!(o=null==e?0:e.length)&&E(o)&&$(l,o)&&(O(e)||k(e))}(e,t,Yo)}function Qo(e){return Z(e)?(t=Re(e),function(e){return null==e?void 0:e[t]}):function(e){return function(t){return Ue(t,e)}}(e);var t}function Zo(e){return"function"==typeof e?e:null==e?ur:"object"==typeof e?O(e)?function(e,t){return Z(e)&&Ko(t)?Go(Re(e),t):function(r){var n=Fe(r,e);return void 0===n&&n===t?Xo(r,e):Wo(t,n,3)}}(e[0],e[1]):Ho(e):Qo(e)}var ei,ti=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),l=i.length;l--;){var a=i[ei?l:++n];if(!1===t(o[a],a,o))break}return e};var ri=function(e,t){return function(r,n){if(null==r)return r;if(!G(r))return e(r,n);for(var o=r.length,i=t?o:-1,l=Object(r);(t?i--:++i<o)&&!1!==n(l[i],i,l););return r}}(function(e,t){return e&&ti(e,t,H)}),ni=ri;function oi(e,t){var r=-1,n=G(e)?Array(e.length):[];return ni(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function ii(e,t){return vr(e)&&vr(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 li(e){if(!(vr(e)||kr(e)||Y(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 ai(e,t){let r="";if(vr(e)||kr(e))r=li(e);else{if(!mo(e))return{};o="",r=null==(n=e)?"":Mo.call(n,o)}var n,o,i,l;return kr(t)&&(t=li(t)),vr(t)&&(t=[t]),mo(t)?(l=function(e){return li(e)},function(e,t){let r=[],n=0;for(let o=0;o<t.length;o++){let i=t[o],l=ii(e,i);r.push({target:i,rating:l}),l>r[n].rating&&(n=o)}return{ratings:r,bestMatch:r[n],bestMatchIndex:n}}(r,t=(O(i=t)?Ie:oi)(i,Zo(l)))):{}}function ui(e){let t=null,n=sn(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 si(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Kr(e,e.length-t):""}function ci(e){if(!vr(e))return{path:"",isRoot:!1};for(;e.indexOf("\\\\")>=0;)e=e.replace("\\\\","\\");for(;e.indexOf("//")>=0;)e=e.replace("//","/");if(":"===Gr(e,1))return{path:`${e}\\`,isRoot:!0};if("\\"===Gr(e,1)){let t=si(e,1);return":"===Gr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Gr(e,1)){let t=si(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function di(e){if(!vr(e))return"";let t=ci(e);if(t.isRoot)return t.path;let r=function(e){if(!vr(e))return"";let t=ci(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(!vr(r))return e;let n=ci(e=si(e,r.length));return n.isRoot,n.path}function fi(e,t={}){let r=Fe(t,"fs");if(!an(e,{fs:r}))return!1;let n=r.lstatSync(e);return!n.isFile()&&!n.isSymbolicLink()}function pi(e,t,r={}){let n=null,o=Fe(r,"fs"),i=di(e);fi(i,{fs:o})||function(e,t={}){let r=Fe(t,"fs");if(fi(e,{fs:r}))return{success:"input folder is already exists: "+e};if(an(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 mi(e,t,n={}){let o=null;if(!yr(t)&&!Br(t))return{error:"inp is not an object or array"};let i=Fe(n,"useFormat",null);Ur(i)||(i=!1);let l="";try{l=i?JSON.stringify(t,null,2):JSON.stringify(t)}catch(e){o=e}return null!==o?{error:o}:pi(e,l,{fs:r})}let hi=2e4;function yi(e){return Fe(ui(e),"success",null)}function gi(e,t){let r=String(e);for(let e of t)vr(e)&&e.length>=6&&(r=r.split(e).join("[REDACTED]"));return r}async function vi(e,t={}){let r=Date.now(),n=(e,t,n,o,i)=>({ok:e,status:t,data:n,error:o,errorType:i,durationMs:Date.now()-r});if(!vr(e))return n(!1,0,null,"url must be a non-empty string","params");let o=Fe(t,"headers",null);Gn(o)||(o={});let i=Fe(t,"method",null);vr(i)||(i="GET");let l=Fe(t,"body",null);Gn(l)?(l=JSON.stringify(l),vr(Fe(o,"Content-Type",null))||(o={...o,"Content-Type":"application/json"})):vr(l)||(l=null);let a=_n(Fe(t,"timeoutMs",null),hi),u=_n(Fe(t,"maxBodyBytes",null),1048576),s=Fe(t,"redact",null);mo(s)||(s=[]);let c=e=>gi(e,s).slice(0,300),d=new AbortController,f=setTimeout(()=>{d.abort()},a),p=null,m="";try{try{p=await fetch(e,{method:i,headers:o,body:l,signal:d.signal})}catch(e){return"AbortError"===Fe(e,"name","")?n(!1,0,null,`request timeout over ${a}ms`,"timeout"):n(!1,0,null,`network error: ${gi(Fe(e,"message","unknown"),s)}`,"network")}try{let e=await async function(e,t){let r=Number(e.headers.get("content-length")||0);if(r>t)return{ok:!1,text:"",bytes:r};let n=e.body;if(!n||"function"!=typeof n.getReader){let r=await e.text(),n=Buffer.byteLength(r);return n>t?{ok:!1,text:"",bytes:n}:{ok:!0,text:r,bytes:n}}let o=n.getReader(),i=[],l=0;for(;;){let{done:e,value:r}=await o.read();if(e)break;if(l+=r.byteLength,l>t){try{await o.cancel()}catch(e){}return{ok:!1,text:"",bytes:l}}i.push(Buffer.from(r))}return{ok:!0,text:Buffer.concat(i).toString("utf8"),bytes:l}}(p,u);if(!e.ok)return d.abort(),n(!1,p.status,null,`response body too large: ${e.bytes} bytes over limit ${u}`,"toolarge");m=e.text}catch(e){return"AbortError"===Fe(e,"name","")?n(!1,p.status,null,`request timeout over ${a}ms while reading body`,"timeout"):n(!1,p.status,null,`read body error: ${gi(Fe(e,"message","unknown"),s)}`,"network")}}finally{clearTimeout(f)}if(401===p.status)return n(!1,p.status,null,`unauthorized(401), credential rejected (expired or revoked): ${c(m)}`,"auth");if(403===p.status)return n(!1,p.status,null,`forbidden(403), credential valid but this account has no access to the resource (plan does not include it, or the service no longer serves this account tier): ${c(m)}`,"forbidden");if(429===p.status)return n(!1,p.status,null,`rate limited(429) by usage endpoint: ${c(m)}`,"ratelimit");if(!p.ok)return n(!1,p.status,null,`http error(${p.status}): ${c(m)}`,"http");let h=null;try{h=JSON.parse(m)}catch(e){return n(!1,p.status,null,`invalid json: ${c(m)}`,"parse")}return n(!0,p.status,h,"","")}function bi(e){return!kr(e)||Fr(e)<=0?"":(e=Fr(e))%86400==0?e/86400+"天":e%3600==0?e/3600+"小時":e%60==0?e/60+"分鐘":`${e}秒`}function wi(e,t){if(!vr(t))return"";let r=bi(e);return""===r?t:`${r}(${t})`}function _i(e={}){let t=Fe(e,"key","");vr(t)||(t="");let r=Fe(e,"windowSeconds",null);r=kr(r)?Fr(r):null;let n=Fe(e,"label","");vr(n)||(n=bi(r));let o=Fe(e,"usedPercent",null);o=kr(o)?Math.min(100,Math.max(0,Fr(o))):null;let i=null;null!==o&&(i=Math.round(100*(100-o))/100);let l=Fe(e,"resetAt","");if(kr(l)&&Fr(l)>0)l=new Date(1e3*Fr(l)).toISOString();else if(vr(l)){let e=new Date(l);l=isNaN(e.getTime())?"":e.toISOString()}else l="";let a=Fe(e,"resetAfterSeconds",null);if(kr(a))a=Math.max(0,Math.round(Fr(a)));else if(a=null,""!==l){let e=Math.round((new Date(l).getTime()-Date.now())/1e3);a=Math.max(0,e)}""===l&&null!==a&&(l=new Date(Date.now()+1e3*a).toISOString());let u=Fe(e,"scope","");vr(u)||(u="");let s=Fe(e,"active",null);Ur(s)||(s=!1);let c=Fe(e,"severity","");return vr(c)||(c="",null!==o&&(c=o>=100?"exhausted":"normal")),{key:t,label:n,windowSeconds:r,usedPercent:o,remainingPercent:i,resetAt:l,resetAfterSeconds:a,scope:u,active:s,severity:c}}function ki(e,t={}){vr(e)||(e="");let r=Fe(t,"email","");vr(r)||(r="");let n=Fe(t,"emailWant","");vr(n)||(n="");let o=Fe(t,"error","");vr(o)||(o="");let i=Fe(t,"errorType","");vr(i)||(i="");let l=null;""!==n&&(""===r?(l=!1,""===o&&(o=`cannot determine the local ${e} login account, so it is unknown whether it is the requested account [${n}]`,i="account")):(l=r.trim().toLowerCase()===n.trim().toLowerCase(),l||""!==o||(o=`local ${e} login account is [${r}], which does not match the requested account [${n}]`,i="account")));let a=Fe(t,"windows",null);mo(a)||(a=[]);let u=Fe(t,"plan","");vr(u)||(u="");let s=Fe(t,"planTier","");vr(s)||(s="");let c=Fe(t,"source","");return vr(c)||(c=""),{ok:""===o&&!1!==l,provider:e,email:r,matched:l,plan:u,planTier:s,source:c,windows:a,credits:Fe(t,"credits",null),raw:Fe(t,"raw",null),error:o,errorType:i,durationMs:Fe(t,"durationMs",0)}}let Oi=604800,Ti=[["five_hour",18e3,""],["seven_day",Oi,""],["seven_day_opus",Oi,"Opus"],["seven_day_sonnet",Oi,"Sonnet"],["seven_day_cowork",Oi,"Cowork"],["seven_day_oauth_apps",Oi,"OAuth apps"]],ji=["ANTHROPIC_API_KEY","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX"];function Si(e){let t=Fe(e,"group",""),r=null;"session"===t?r=18e3:"weekly"===t&&(r=Oi);let n=[],o=Fe(e,"scope.model.display_name","");vr(o)&&n.push(o);let i=Fe(e,"scope.surface","");vr(i)&&n.push(i);let l=n.join("/");return _i({key:Fe(e,"kind",""),label:wi(r,l),windowSeconds:r,usedPercent:Fe(e,"percent",null),resetAt:Fe(e,"resets_at",""),scope:l,active:Fe(e,"is_active",!1),severity:Fe(e,"severity","")})}let{buildSpawnArgs:Ai,buildSpawnEnv:xi}=dn;async function $i(e,r=[],n=[],o={}){let i=Date.now(),l=(e,t,r={})=>({ok:!1,results:{},responses:[],error:t,errorType:e,durationMs:Date.now()-i,exitCode:null,...r});if(!vr(e))return l("params","command 須為非空字串");if(Br(r)||(r=[]),!Br(n))return l("params","requests 須為陣列");for(let e=0;e<n.length;e++){let t=n[e];if(!yr(t)||!vr(t.method)&&!vr(t.notify))return l("params",`requests[${e}] 須為含method或notify之物件`)}yr(o)||(o={});let a=Fe(o,"timeoutMs");qr(a)||(a=12e4);let u=Fe(o,"jsonrpc");!0===u&&(u="2.0"),vr(u)||(u=null);let s=Fe(o,"continueOnError");Ur(s)||(s=!1);let c=Fe(o,"onNotify"),d=Fe(o,"onServerRequest"),f=new Map,p=null,m=0,h={},y=[],g=(e,t,r)=>{let n={};return null!==u&&(n.jsonrpc=u),void 0!==e&&(n.id=e),n.method=t,void 0!==r&&(n.params=r),n},v=function(e,r=[],n={}){Br(r)||(r=[]),yr(n)||(n={});let o=Fe(n,"cwd");vr(o)||(o=process.cwd());let i=Fe(n,"env");yr(i)||(i=void 0);let l=Fe(n,"timeoutMs");l=qr(l)?Math.min(l,br):null;let a=Fe(n,"exitGraceMs");Wr(a)||(a=2e3),a=Math.min(a,br);let u=Fe(n,"killWaitMs");Wr(u)||(u=3e3),u=Math.min(u,br);let s=Fe(n,"stderrKeep");Wr(s)||(s=4e3);let c=Fe(n,"onLine"),d=Fe(n,"onStdout"),f=Fe(n,"onStderr"),p=Fe(n,"onExit"),m=Date.now(),h=!1,y=null,g=!1,v=!1,b=!1,w="",_="",k=null,O=null,T=null,j=wr(),S=null,A={pid:null,exited:!1,write:null,writeLine:null,stop:null},x=e=>{h||(h=!0,clearTimeout(k),clearTimeout(O),clearTimeout(T),y={code:null,signal:null,exited:!0,timeout:g,killed:v,error:"",stderr:w,durationMs:Date.now()-m,pid:A.pid,...e},A.exited=!0,Jr(p)&&p(y),j.resolve(y))},$=()=>S||(S=wr(),j.then(e=>{S.resolve(e)}),S);if(!vr(e))return A.write=async()=>!1,A.writeLine=async()=>!1,A.stop=$,setTimeout(()=>{x({error:"command 須為非空字串"})},1),A;let E,M=Ai(e,r);try{E=t.spawn(M.file,M.args,{cwd:o,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:xi(i),...M.opt})}catch(e){return A.write=async()=>!1,A.writeLine=async()=>!1,A.stop=$,setTimeout(()=>{x({error:`${e.code||"UNKNOWN"}: ${e.message}`})},1),A}A.pid=E.pid||null;let I=new TextDecoder("utf-8"),N=new TextDecoder("utf-8"),D=(e,t)=>{_+=e;let r=_.indexOf("\n");for(;r>=0;){let e=_.slice(0,r);_=_.slice(r+1),e.endsWith("\r")&&(e=e.slice(0,-1)),Jr(c)&&c(e),r=_.indexOf("\n")}if(t&&""!==_){let e=_;_="",e.endsWith("\r")&&(e=e.slice(0,-1)),Jr(c)&&c(e)}},C=e=>{w=0!==s?(w+e).slice(-s):""};E.stdout.on("data",e=>{let t=I.decode(e,{stream:!0});t&&(Jr(d)&&d(t),D(t,!1))}),E.stderr.on("data",e=>{let t=N.decode(e,{stream:!0});t&&(Jr(f)&&f(t),C(t))}),E.stdin.on("error",()=>{});let L=e=>{v=!0,ln(E.pid).catch(()=>{}),T=setTimeout(()=>{h||x({code:null,exited:!1,error:e})},u)};return null!==l&&(k=setTimeout(()=>{h||(g=!0,L(`TIMEOUT after ${l/1e3}s(子進程未能結束)`))},l)),E.on("error",e=>{x({error:`${e.code||"UNKNOWN"}: ${e.message}`})}),E.on("close",(e,t)=>{if(h)return;let r=I.decode();r&&(Jr(d)&&d(r),D(r,!1)),D("",!0);let n=N.decode();n&&(Jr(f)&&f(n),C(n));let o="";g?o=`TIMEOUT after ${l/1e3}s`:v||(t?o=`Signal: ${t}`:0!==e&&(o=`Exit code ${e}`)),x({code:e,signal:t,error:o})}),A.write=e=>{let t=wr();if(h||b||E.stdin.destroyed||!E.stdin.writable)return t.resolve(!1),t;try{E.stdin.write(String(e),"utf8",e=>{t.resolve(!e)})}catch{t.resolve(!1)}return t},A.writeLine=e=>A.write(String(e)+"\n"),A.stop=()=>{if(S)return S;if(S=wr(),h)return S.resolve(y),S;b=!0;try{E.stdin.end()}catch{}return O=setTimeout(()=>{h||L("STOP_TIMEOUT(子進程未能結束)")},a),j.then(e=>{S.resolve(e)}),S},A}(e,r,{cwd:Fe(o,"cwd"),env:Fe(o,"env"),timeoutMs:a,exitGraceMs:Fe(o,"exitGraceMs"),onStderr:Fe(o,"onStderr"),onLine:e=>{if(""===(e=e.trim()))return;let t;try{t=JSON.parse(e)}catch{return}if(!yr(t))return;let r=void 0!==t.id&&null!==t.id;if(r&&("result"in t||"error"in t)){let e=f.get(t.id);return void(e&&(f.delete(t.id),e.pm.resolve({msg:t})))}r&&vr(t.method)?Jr(d)&&d(t,v):Jr(c)&&c(t)},onExit:e=>{p=e;for(let[t,r]of f)r.pm.resolve({exit:e});f.clear()}}),b=(e,t)=>{let r="exit";e.timeout?r="timeout":vr(e.error)&&e.error.includes("ENOENT")&&(r="notfound");let n=vr(e.error)?e.error:`子進程於回應前結束(code ${e.code})`;return l(r,`${t}: ${n}`,{results:h,responses:y,exitCode:e.code})},w=null;for(let e of n){if(!vr(e.method)){if(!await v.writeLine(JSON.stringify(g(void 0,e.notify,e.params)))){w=b(p||await v.stop(),e.notify);break}continue}let t=m;m+=1;let r=wr();if(f.set(t,{method:e.method,pm:r}),!await v.writeLine(JSON.stringify(g(t,e.method,e.params)))){f.delete(t),w=b(p||await v.stop(),e.method);break}let n=await r;if(n.exit){w=b(n.exit,e.method);break}let o=n.msg;if("error"in o&&null!==o.error&&void 0!==o.error){if(h[e.method]=null,y.push({id:t,method:e.method,result:null,error:o.error}),!s){let t=Fe(o,"error.message");w=l("rpc",`${e.method}: ${vr(t)?t:JSON.stringify(o.error)}`,{results:h,responses:y});break}}else h[e.method]=o.result,y.push({id:t,method:e.method,result:o.result,error:null})}let _=await v.stop();if(w)return w.durationMs=Date.now()-i,null===w.exitCode&&(w.exitCode=_.code),w;let k=y.filter(e=>null!==e.error);if(k.length>0){let e=k[0],t=Fe(e,"error.message");return{ok:!1,results:h,responses:y,error:`${e.method}: ${vr(t)?t:JSON.stringify(e.error)}`,errorType:"rpc",durationMs:Date.now()-i,exitCode:_.code}}return{ok:!0,results:h,responses:y,error:"",errorType:"",durationMs:Date.now()-i,exitCode:_.code}}function Ei(e,t){for(let r of t){let t=Fe(e,r,"");if(vr(t))return t}return""}function Mi(e,t,r){if(!Gn(e))return null;let n=Fe(e,"limit_window_seconds",null),o=kr(n)?Fr(n):null;return _i({key:t,label:wi(o,r),windowSeconds:o,usedPercent:Fe(e,"used_percent",null),resetAt:Fe(e,"reset_at",""),resetAfterSeconds:Fe(e,"reset_after_seconds",null),scope:r})}function Ii(e,t,r){for(let n of[e,Fe(e,"rate_limit",null),Fe(e,"rateLimit",null)]){if(!Gn(n))continue;let e=Fe(n,t,null);if(Gn(e)||(e=Fe(n,r,null)),Gn(e))return e}return null}function Ni(e){if(!Gn(e))return null;if(void 0!==Fe(e,"used_percent",void 0))return e;let t=Fe(e,"window",null);if(Gn(t))return t;let r=Fe(e,"rate_limit",null);return Gn(r)&&void 0!==Fe(r,"used_percent",void 0)?r:null}function Di(e){let t=Ei(e,["email"]),r=Ei(e,["plan_type"]),n=[];for(let t of["primary","secondary"]){let r=Mi(Fe(e,`rate_limit.${t}_window`,null),t,"");null!==r&&n.push(r)}for(let t of["primary","secondary"]){let r=Mi(Fe(e,`code_review_rate_limit.${t}_window`,null),`code_review:${t}`,"code review");null!==r&&n.push(r)}let o=function(e){let t=[Fe(e,"additional_rate_limits",null),Fe(e,"rate_limit.additional_rate_limits",null)];for(let e of t){if(mo(e))return e;if(Gn(e))return Object.keys(e).map(t=>{let r=e[t];if(!Gn(r))return r;let n=Ei(r,["limit_name","name","id"]);return{...r,limit_name:""===n?t:n}})}return[]}(e);for(let e=0;e<o.length;e++){let t=o[e];if(!Gn(t))continue;let r=Ei(t,["limit_name","metered_limit_name","name","id"]);""===r&&(r=`additional_${e+1}`);let i=Ei(t,["display_name","title","name","limit_name","metered_limit_name"]),l=""===i?r:i,a=`${r} ${i}`.toLowerCase(),u=Ii(t,"primary_window","primaryWindow"),s=Ii(t,"secondary_window","secondaryWindow");if(null===u&&null===s){let e=Ni(t);if(null!==e){let t=Fe(e,"limit_window_seconds",null);/weekly|secondary|reserve/.test(a)||kr(t)&&Fr(t)>=518400?s=e:u=e}}let c=Mi(u,`${r}:primary`,l);null!==c&&n.push(c);let d=Mi(s,`${r}:secondary`,l);null!==d&&n.push(d)}return{email:t,plan:r,windows:n,credits:{hasCredits:Fe(e,"credits.has_credits",!1),unlimited:Fe(e,"credits.unlimited",!1),balance:Fe(e,"credits.balance",""),resetCreditsAvailable:Fe(e,"rate_limit_reset_credits.available_count",null),spendControlReached:Fe(e,"spend_control.reached",!1),rateLimitReachedType:Fe(e,"rate_limit_reached_type",null),individualLimit:Fe(e,"spend_control.individual_limit",null)}}}let Ci=[{method:"initialize",params:{clientInfo:{name:"w-dispatch-ai",title:"w-dispatch-ai",version:"1.0.0"}}},{notify:"initialized",params:{}},{method:"account/read",params:{}},{method:"account/rateLimits/read",params:{}}];function Li(e,t,r){if(!Gn(e))return null;let n=Fe(e,"windowDurationMins",null),o=kr(n)?60*Fr(n):null;return _i({key:t,label:wi(o,r),windowSeconds:o,usedPercent:Fe(e,"usedPercent",null),resetAt:Fe(e,"resetsAt",""),scope:r})}async function Pi(t,r,n){let o=Fe(t,"env",null);yr(o)||(o=process.env);let i=e.join(r,"auth.json"),l=yi(i),a=Fe(l,"tokens.access_token",""),u=Fe(l,"tokens.account_id",""),s="",c="",d=Fe(l,"tokens.id_token","");if(vr(d)){let e=function(e){try{let t=e.split(".");return t.length<2?null:JSON.parse(Buffer.from(t[1],"base64url").toString("utf8"))}catch(e){return null}}(d),t=Fe(e,"email","");vr(t)&&(s=t);let r=Fe(e,["https://api.openai.com/auth","chatgpt_plan_type"],"");vr(r)&&(c=r)}if(!vr(a)){return vr(Fe(l,"OPENAI_API_KEY",""))||vr(Fe(o,"OPENAI_API_KEY",""))?{ok:!1,email:s,plan:c,error:"codex is running in API key mode (auth.json has OPENAI_API_KEY but no tokens); this mode is billed by usage and has no subscription quota windows",errorType:"unsupported"}:{ok:!1,email:s,plan:c,error:`Codex CLI credential not found (${i}); run [codex login] first`,errorType:"notfound"}}let f=Fe(t,"userAgent",null);vr(f)||(f="codex-cli/0.153.0");let p=Fe(t,"originator",null);vr(p)||(p="codex_cli_rs");let m={Authorization:`Bearer ${a}`,"User-Agent":f,originator:p};vr(u)&&(m["ChatGPT-Account-ID"]=u);let h=Fe(t,"usageUrl",null);vr(h)||(h="https://chatgpt.com/backend-api/wham/usage");let y=await vi(h,{headers:m,timeoutMs:n,redact:[a,u]});if(!y.ok){let e=y.error;return"auth"===y.errorType&&(e=`${e} → codex refreshes the token on every run; run any codex command then retry, and only fall back to [codex login] if it still fails`),{ok:!1,email:s,plan:c,error:e,errorType:y.errorType}}let g=Di(y.data);return vr(g.email)&&(s=g.email),vr(g.plan)&&(c=g.plan),{ok:!0,email:s,plan:c,windows:g.windows,credits:g.credits,raw:{usage:y.data}}}function Ri(e){if(!vr(e))return null;let t=e.match(/(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}let Ui="1.1.11",Fi={"5h":18e3,five_hour:18e3,"five-hour":18e3,weekly:604800,week:604800,daily:86400,day:86400};function zi(e,t){let r=Fe(t,"id","");if(!vr(r))return null;let n=Fe(t,"remaining_fraction",null),o=null;kr(n)&&(o=Math.round(100*(1-Fr(n))*100)/100);let i=Fe(e,"name","");vr(i)||(i="");let l=function(e){if(!vr(e))return null;let t=e.trim().toLowerCase();if(void 0!==Fi[t])return Fi[t];let r=t.match(/^(\d+)\s*(h|hr|hour|hours|d|day|days|m|min|minutes)$/);if(!r)return null;let n=Number(r[1]);return/^h/.test(r[2])?3600*n:/^d/.test(r[2])?86400*n:60*n}(Fe(t,"window","")),a=bi(l);""===a&&(a=Fe(t,"name",""),vr(a)||(a=r));let u=""===i?a:`${a}(${i})`,s="normal";return!0===Fe(t,"disabled",!1)?s="disabled":null!==o&&o>=100&&(s="exhausted"),_i({key:r,label:u,windowSeconds:l,usedPercent:o,resetAt:Fe(t,"reset_time",""),scope:i,active:!1,severity:s})}async function Bi(e,t,r){let n=[];vr(r.logFile)&&n.push("--log-file",r.logFile),n.push("-p",t,"--output-format","json","--print-timeout",`${Math.max(5,Math.ceil(r.timeoutMs/1e3))}s`);let o=await yn(e,n,{timeoutMs:r.timeoutMs,cwd:r.cwd}),i=String(Fe(o,"stdout","")).trim().split("\n").map(e=>e.trim()).filter(e=>""!==e).pop()||"",l=null;try{l=JSON.parse(i)}catch(e){}if(!o.ok){let e=String(Fe(o,"stderr","")).trim().slice(-300),r=/timeout/i.test(Fe(o,"error",""))?"timeout":"exit";return/not logged in|login|sign in|authenticate/i.test(e)&&(r="auth"),{ok:!1,data:null,response:"",stderr:e,error:`agy ${t} failed: ${Fe(o,"error","")}${e?` | stderr: ${e}`:""}`,errorType:r,code:Fe(o,"code",null)}}if(null===l)return{ok:!1,data:null,response:"",stderr:"",error:`agy ${t} stdout is not JSON: ${i.slice(0,200)}`,errorType:"parse",code:o.code};let a=Fe(l,"num_turns",0);return!vr(Fe(l,"command.name",""))||kr(a)&&Fr(a)>0?{ok:!1,data:null,response:Fe(l,"response",""),stderr:"",error:`agy did not handle ${t} as a slash command (num_turns=${a}); version may be below ${Ui} or --disable-slash-commands is set; this call may have consumed quota`,errorType:"unsupported",code:o.code}:"SUCCESS"!==Fe(l,"status","")?{ok:!1,data:Fe(l,"command.data",null),response:Fe(l,"response",""),stderr:"",error:`agy ${t} reported status=${Fe(l,"status","")}: ${String(Fe(l,"response","")).slice(0,200)}`,errorType:"exit",code:o.code}:{ok:!0,data:Fe(l,"command.data",null),response:Fe(l,"response",""),stderr:"",error:"",errorType:"",code:o.code,raw:l}}let Ji={KINDS:H(Zn),NO_SIDE_EFFECT:yo,dispatchAi:oo,dispatchAiFallback:fo,dispatchAiWkf:function(e={}){let t=Fe(e,"providers",null);if(!yr(t))throw new Error("dispatchAiWkf: opt.providers must be an object (name → provider entry)");let r=Fe(e,"defaults",null);return yr(r)||(r={}),{providers:t,callAi:(e,n={})=>vo(e,{...r,...n,providers:t}),runFanout:(e={})=>bo({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runRolePipeline:(e={})=>_o({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await bo(hr(e,ko));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await _o({...hr(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,...Fe(e,"callOpt",{})}})}},dispatchOpencode:Tn,dispatchClaude:Sn,dispatchCodex:xn,dispatchAntigravity:Mn,dispatchApiOpenaiCompat:Bn,dispatchApiOpenaiResponses:Kn,dispatchApiTypesafeSystemone:Qn,providers:Eo,resolveProviders:function(e,t={}){let r=Fe(t,"env",null);yr(r)||(r="undefined"!=typeof process&&process&&yr(process.env)?process.env:{});let n=Br(e)?e.filter(yr):[],o=Fe(t,"pick",null),i=[],l=n;if(mo(o)){l=[];for(let e of o){let t=n.find(t=>Fe(t,"id",null)===e);t?l.push(t):i.push(String(e))}}let a={};if(i.length>0){let e=n.map(e=>Fe(e,"id",null)).filter(vr);for(let t of i)a[t]=e.length>0?Fe(ai(t,e),"bestMatch.target",null):null}let u=[],s=[];for(let e of l){let t=Fe(e,"envVar",null);if(!vr(t)||mo(Fe(e,"keys",null))){u.push(hr(e,["envVar"]));continue}let n=String(Fe(r,t,"")||"").split(",").map(e=>e.trim()).filter(Boolean);0!==n.length?u.push({...hr(e,["envVar"]),keys:n}):s.push({id:Fe(e,"id",""),envVar:t})}let c=Fe(t,"exes",null),d=Fe(t,"patch",null);(yr(c)||yr(d))&&(u=u.map(e=>{let t=e,r=yr(c)?Fe(c,Fe(t,"kind",""),null):null;vr(r)&&!vr(Fe(t,"exe",null))&&(t={...t,exe:r});let n=yr(d)?Fe(d,Fe(t,"id",""),null):null;return yr(n)&&(t={...t,...n}),t}));let f={};for(let e of u)f[e.id]=e;return{providers:u,table:f,skipped:s,missing:i,hints:a}},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(!Br(e))return 0;let t=0;for(let r of e)t+=_n(Fe(r,"timeoutMs",null),kn);return t},createFileStore:function(t={}){let r=Fe(t,"file",null);if(!vr(r)){let n=Fe(t,"dir",null);if(!vr(n))throw new Error("createFileStore: file or dir is required");let o=Fe(t,"name",null);r=e.join(n,vr(o)?o:"ai-cursor.json")}let n=Fe(t,"ownKeys",null);mo(n)||(n=["at"]);let o=Fe(t,"stamp",null);return Jr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=ui(r),t=void 0!==Fe(e,"error",void 0)?null:Fe(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()};mi(r,t,{useFormat:!0})}}},createUsageCounter:function(t={}){let r=Fe(t,"file",null);if(!vr(r)){let n=Fe(t,"dir",null);if(!vr(n))throw new Error("createUsageCounter: file or dir is required");let o=Fe(t,"name",null);r=e.join(n,vr(o)?o:"ai-usage.json")}let n=Fe(t,"getDate",null);Jr(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=Fe(t,"keepDays",null);qr(o)||(o=14);let i=Fe(t,"keyOf",null);Jr(i)||(i=e=>Fe(e,"keyId",null)||Fe(e,"providerId",""));let l=()=>{let e=ui(r),t=void 0!==Fe(e,"error",void 0)?null:Fe(e,"success",null);return yr(t)?t:{}},a=(e,t=1)=>{if(!vr(e))return;let i=l(),a=n(),u=yr(i[a])?i[a]:{};u[e]=(Number(u[e])||0)+t,i[a]=u;let s=Object.keys(i).sort().slice(-o),c={};for(let e of s)c[e]=i[e];mi(r,c,{useFormat:!0})};return{file:r,onEvent:e=>{"try"===Fe(e,"type",null)&&a(i(e))},bump:a,today:()=>{let e=l(),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,l=-1;for(let e=r;e<t.length;e++){let r=t[e];if(i)i=!1;else if(o)"\\"===r?i=!0:'"'===r&&(o=!1);else if('"'!==r){if("["===r||"{"===r)n++;else if(("]"===r||"}"===r)&&(n--,1===n&&"}"===r&&(l=e),0===n))return null}else o=!0}if(l<0)return null;try{let e=JSON.parse(t.slice(r,l+1)+"]");return Array.isArray(e)&&e.length>0?e:null}catch(e){return null}},getQuotaClaude:async function(t="",r={}){let o=Date.now(),i=vr(t)?t:"",l=Fe(r,"env",null);yr(l)||(l=process.env);let a=Fe(r,"homeDir",null);vr(a)||(a=n.homedir());let u=Fe(r,"configDir",null),s=!0;vr(u)||(u=Fe(l,"CLAUDE_CONFIG_DIR",""),vr(u)||(u=e.join(a,".claude"),s=!1));let c=e.join(u,".credentials.json"),d=s?e.join(u,".claude.json"):e.join(a,".claude.json"),f=_n(Fe(r,"timeoutMs",null),hi),p=Fe(r,"userAgent",null);vr(p)||(p="claude-code/2.1.259");let m=!1!==Fe(r,"profileFallback",!0),h=Fe(r,"usageUrl",null);vr(h)||(h="https://api.anthropic.com/api/oauth/usage");let y=Fe(r,"profileUrl",null);vr(y)||(y="https://api.anthropic.com/api/oauth/profile");let g=yi(c),v=yi(d),b=Fe(g,"claudeAiOauth.accessToken",""),w=Fe(v,"oauthAccount.emailAddress","");vr(w)||(w="");let _=Fe(g,"claudeAiOauth.subscriptionType","");vr(_)||(_=Fe(v,"oauthAccount.organizationType",""),vr(_)||(_=""));let k=Fe(g,"claudeAiOauth.rateLimitTier","");vr(k)||(k=Fe(v,"oauthAccount.organizationRateLimitTier",""),vr(k)||(k=""));let O=e=>ki("claude",{email:w,emailWant:i,plan:_,planTier:k,source:"anthropic-oauth-usage-api",durationMs:Date.now()-o,...e});if(!vr(b)){let e=ji.filter(e=>vr(Fe(l,e,"")));return e.length>0?O({error:`Claude Code is running in non-subscription mode (env ${e.join(", ")} is set); this mode is billed by usage and has no 5-hour/7-day subscription quota windows`,errorType:"unsupported"}):O({error:`Claude Code credential not found (${c}); run [claude auth login] first (with the same CLAUDE_CONFIG_DIR if this config dir is relocated). On macOS the credential lives in Keychain instead of this file, which this function cannot read.${vr(Fe(l,"CLAUDE_CODE_OAUTH_TOKEN",""))?" Env CLAUDE_CODE_OAUTH_TOKEN is set but is ignored here: a setup-token lacks the user:profile scope the usage endpoint requires, so only a stored login can be queried.":""}`,errorType:"notfound"})}let T={Authorization:`Bearer ${b}`,"anthropic-beta":"oauth-2025-04-20","User-Agent":p,"Content-Type":"application/json"},j=await vi(h,{headers:T,timeoutMs:f,redact:[b]});if(!j.ok){let e=j.error;if("auth"===j.errorType){let t=Fe(g,"claudeAiOauth.expiresAt",null),r="run any claude command (just open claude) so Claude Code refreshes the token itself, then retry; re-login is not needed, the stored refresh token is still valid and only has to be used by Claude Code";e=`${e} ${kr(t)?`(local recorded expiry: ${new Date(t).toISOString()})`:""} → ${r}`}return"forbidden"===j.errorType&&/oauth_not_allowed_for_organization/.test(e)&&(e=`this account's organization disallows OAuth usage queries (oauth_not_allowed_for_organization); subscription quota must be viewed by an org admin in the console: ${e}`),O({error:e,errorType:j.errorType})}let S=j.data;if(""===w&&m){let e=await vi(y,{headers:T,timeoutMs:f,redact:[b]});if(e.ok)for(let t of["account.email","account.email_address","email","email_address"]){let r=Fe(e.data,t,"");if(vr(r)){w=r;break}}}let A=[],x=Fe(S,"limits",null);return A=mo(x)?x.map(Si):Ti.map(([e,t,r])=>function(e,t,r,n){let o=Fe(e,t,null);return null==o?null:_i({key:t,label:wi(r,n),windowSeconds:r,usedPercent:Fe(o,"utilization",null),resetAt:Fe(o,"resets_at",""),scope:n})}(S,e,t,r)).filter(e=>null!==e),O({windows:A,credits:{extraUsageEnabled:Fe(S,"extra_usage.is_enabled",!1),monthlyLimit:Fe(S,"extra_usage.monthly_limit",null),usedCredits:Fe(S,"extra_usage.used_credits",null),utilization:Fe(S,"extra_usage.utilization",null),spendUsedMinor:Fe(S,"spend.used.amount_minor",null),spendCurrency:Fe(S,"spend.used.currency",""),spendPercent:Fe(S,"spend.percent",null)},raw:{configDir:u,usage:S}})},getQuotaCodex:async function(t="",r={}){let o=Date.now(),i=vr(t)?t:"",l=Fe(r,"env",null);yr(l)||(l=process.env);let a=Fe(r,"homeDir",null);vr(a)||(a=n.homedir());let u=Fe(r,"codexHome",null);vr(u)||(u=Fe(l,"CODEX_HOME",""),vr(u)||(u=e.join(a,".codex")));let s=_n(Fe(r,"timeoutMs",null),hi),c=!1!==Fe(r,"useAppServer",!0),d=!1!==Fe(r,"fallbackHttp",!0),f=(e,t)=>ki("codex",{emailWant:i,source:e,durationMs:Date.now()-o,...t}),p=null;if(c){let e=await async function(e){let t=Fe(e,"exe",null);vr(t)||(t="codex");let r=await $i(t,["app-server","--stdio"],Ci,{timeoutMs:Fe(e,"timeoutMs",null)});if(!r.ok)return{ok:!1,error:r.error,errorType:r.errorType,raw:{appServer:{error:r.error,errorType:r.errorType,exitCode:r.exitCode,responses:r.responses}}};let n=Fe(r.results,["account/read","account"],null),o=Fe(r.results,["account/rateLimits/read"],null);if(!Gn(n))return{ok:!1,notLoggedIn:!0,error:"codex app-server reports not logged in (account is null); run [codex login] first",errorType:"notfound",raw:{appServer:r.results}};let i=Fe(n,"email",""),l=Fe(n,"planType",""),a=Fe(n,"type","");if(vr(a)&&"chatgpt"!==a)return{ok:!1,email:i,plan:l,accountType:a,error:`codex is logged in with [${a}] mode; this mode is billed by usage and has no 5-hour/7-day subscription quota windows`,errorType:"unsupported",raw:{appServer:r.results}};let u=[],s=Fe(o,"rateLimits",null),c=Fe(s,"limitId","codex"),d=Li(Fe(s,"primary",null),"primary","");null!==d&&u.push(d);let f=Li(Fe(s,"secondary",null),"secondary","");null!==f&&u.push(f);let p=Fe(o,"rateLimitsByLimitId",null);if(Gn(p))for(let e of Object.keys(p)){if(e===c)continue;let t=p[e],r=Fe(t,"limitName","");vr(r)||(r=e);for(let n of["primary","secondary"]){let o=Li(Fe(t,n,null),`${e}:${n}`,r);null!==o&&u.push(o)}}let m={hasCredits:Fe(s,"credits.hasCredits",!1),unlimited:Fe(s,"credits.unlimited",!1),balance:Fe(s,"credits.balance",""),resetCreditsAvailable:Fe(o,"rateLimitResetCredits.availableCount",null),resetCredits:Fe(o,"rateLimitResetCredits.credits",null),spendControlReached:Fe(s,"spendControlReached",!1),rateLimitReachedType:Fe(s,"rateLimitReachedType",null),individualLimit:Fe(s,"individualLimit",null)};return vr(l)||(l=Fe(s,"planType","")),{ok:!0,email:i,plan:l,accountType:a,windows:u,credits:m,raw:{appServer:r.results}}}({...r,timeoutMs:s});if(e.ok)return f("codex-app-server",{email:e.email,plan:e.plan,windows:e.windows,credits:e.credits,raw:{accountType:e.accountType,...e.raw}});if("unsupported"===e.errorType||!0===e.notLoggedIn)return f("codex-app-server",{email:e.email,plan:e.plan,error:e.error,errorType:e.errorType,raw:e.raw});if(p=e,!d)return f("codex-app-server",{error:e.error,errorType:e.errorType,raw:e.raw})}let m=await Pi(r,u,s),h=null!==p?` (app-server path failed: ${p.error})`:"";return m.ok?f("chatgpt-wham-usage-api",{email:m.email,plan:m.plan,windows:m.windows,credits:m.credits,raw:{codexHome:u,appServerError:null!==p?p.error:"",...m.raw}}):f("chatgpt-wham-usage-api",{email:m.email,plan:m.plan,error:`${m.error}${h}`,errorType:m.errorType,raw:null!==p?p.raw:null})},getQuotaAntigravity:async function(t="",i={}){let l=Date.now(),a=vr(t)?t:"",u=Fe(i,"exe",null);vr(u)||(u="agy");let s=_n(Fe(i,"timeoutMs",null),6e4),c=Fe(i,"cwd",null);vr(c)||(c=n.tmpdir());let d=!1!==Fe(i,"checkVersion",!0),f=Fe(i,"withCredits",null);Ur(f)||(f=!1);let p=e=>ki("antigravity",{emailWant:a,source:"agy-print-usage",durationMs:Date.now()-l,...e}),m="";if(d){let e=await yn(u,["--version"],{timeoutMs:Math.min(s,15e3),cwd:c});if(!e.ok)return p({error:`agy not found or not executable (${u}): ${Fe(e,"error","")}${String(Fe(e,"stderr","")).trim()?` | ${String(e.stderr).trim().slice(-200)}`:""}; see https://antigravity.google/docs/cli/ for install and login`,errorType:"notfound"});m=String(Fe(e,"stdout","")).trim().split("\n")[0];let t=function(e,t){let r=Ri(e),n=Ri(t);if(null===r||null===n)return null;for(let e=0;e<3;e++){if(r[e]>n[e])return 1;if(r[e]<n[e])return-1}return 0}(m,Ui);if(null===t||t<0)return p({error:`agy version [${m||"unknown"}] is below ${Ui}; its print mode cannot run /usage non-interactively (it would treat it as a prompt and consume quota); run [agy update]`,errorType:"unsupported",raw:{version:m}})}let h=e.join(n.tmpdir(),`w-dispatch-ai-agy-${process.pid}-${o.randomBytes(4).toString("hex")}.log`),y=null,g=null,v="",b="";try{y=await Bi(u,"/usage",{timeoutMs:s,cwd:c,logFile:h});let e="";try{e=r.readFileSync(h,"utf8")}catch(e){}let t=e.match(/applyAuthResult: email=([^,\s]+), authMethod=(\w+)/);if(t)v=t[1],b=t[2];else{let t=e.match(/authenticated successfully as (\S+)/);t&&(v=t[1])}y.ok&&f&&(g=await Bi(u,"/credits",{timeoutMs:s,cwd:c,logFile:""}))}finally{try{r.unlinkSync(h)}catch(e){}}if(!y.ok)return p({email:v,error:y.error,errorType:y.errorType,raw:{version:m,authMethod:b,response:y.response,stderr:y.stderr}});let w=[],_=Fe(y.data,"groups",null);if(mo(_))for(let e of _){let t=Fe(e,"buckets",null);if(mo(t))for(let r of t){let t=zi(e,r);null!==t&&w.push(t)}}let k=null;return null!==g&&(k=g.ok?{remainingCredits:Fe(g.data,"remaining_credits",null),upgradeUri:Fe(g.data,"upgrade_uri","")}:{error:g.error}),p({email:v,windows:w,credits:k,raw:{version:m,authMethod:b,description:Fe(y.data,"description",""),usage:y.raw,credits:null!==g?Fe(g,"raw",null):null}})}};return Ji});
|
|
7
7
|
//# sourceMappingURL=w-dispatch-ai.umd.js.map
|