w-dispatch-ai 1.0.36 → 1.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +10 -6
  2. package/dist/w-dispatch-ai.umd.js +2 -2
  3. package/dist/w-dispatch-ai.umd.js.map +1 -1
  4. package/docs/WDispatchAi.mjs.html +2 -2
  5. package/docs/adapters.mjs.html +2 -2
  6. package/docs/budgetFor.mjs.html +2 -2
  7. package/docs/buildValidator.mjs.html +2 -2
  8. package/docs/castPintOr.mjs.html +2 -2
  9. package/docs/checkTruncation.mjs.html +199 -0
  10. package/docs/dfTimeoutMs.mjs.html +2 -2
  11. package/docs/dispatchAi.mjs.html +2 -2
  12. package/docs/dispatchAiFallback.mjs.html +33 -8
  13. package/docs/dispatchAiWkf.mjs.html +2 -2
  14. package/docs/dispatchAntigravity.mjs.html +2 -2
  15. package/docs/dispatchApiOpenaiCompat.mjs.html +96 -29
  16. package/docs/dispatchApiOpenaiResponses.mjs.html +102 -25
  17. package/docs/dispatchApiTypesafeSystemone.mjs.html +23 -15
  18. package/docs/dispatchClaude.mjs.html +2 -2
  19. package/docs/dispatchCodex.mjs.html +2 -2
  20. package/docs/dispatchOpencode.mjs.html +2 -2
  21. package/docs/getCliArgs.mjs.html +2 -2
  22. package/docs/getErrorResult.mjs.html +2 -2
  23. package/docs/getErrorType.mjs.html +6 -4
  24. package/docs/global.html +1234 -115
  25. package/docs/index.html +2 -2
  26. package/docs/quota_dfQuotaTimeoutMs.mjs.html +2 -2
  27. package/docs/quota_fetchQuotaJson.mjs.html +2 -2
  28. package/docs/quota_fromCodexUsageHttp.mjs.html +2 -2
  29. package/docs/quota_getQuotaAntigravity.mjs.html +2 -2
  30. package/docs/quota_getQuotaClaude.mjs.html +2 -2
  31. package/docs/quota_getQuotaCodex.mjs.html +2 -2
  32. package/docs/quota_readJsonOrNull.mjs.html +2 -2
  33. package/docs/quota_toQuotaLabel.mjs.html +2 -2
  34. package/docs/quota_toQuotaResult.mjs.html +2 -2
  35. package/docs/quota_toQuotaScopedLabel.mjs.html +2 -2
  36. package/docs/quota_toQuotaWindow.mjs.html +2 -2
  37. package/docs/readEnvFile.mjs.html +2 -2
  38. package/docs/resolveProviders.mjs.html +2 -2
  39. package/docs/wkf_callAiWithFallback.mjs.html +63 -20
  40. package/docs/wkf_createFileStore.mjs.html +2 -2
  41. package/docs/wkf_createUsageCounter.mjs.html +2 -2
  42. package/docs/wkf_extractJsonLoose.mjs.html +2 -2
  43. package/docs/wkf_noSideEffectPrefix.mjs.html +2 -2
  44. package/docs/wkf_runFanout.mjs.html +4 -2
  45. package/docs/wkf_runFanoutPipeline.mjs.html +2 -2
  46. package/docs/wkf_runRolePipeline.mjs.html +2 -2
  47. package/docs/wkf_salvageTruncatedArray.mjs.html +11 -2
  48. package/package.json +1 -1
  49. package/src/checkTruncation.mjs +127 -0
  50. package/src/dispatchAiFallback.mjs +31 -6
  51. package/src/dispatchApiOpenaiCompat.mjs +94 -27
  52. package/src/dispatchApiOpenaiResponses.mjs +100 -23
  53. package/src/dispatchApiTypesafeSystemone.mjs +21 -13
  54. package/src/getErrorType.mjs +4 -2
  55. package/src/providers.mjs +1 -1
  56. package/src/wkf/callAiWithFallback.mjs +61 -18
  57. package/src/wkf/runFanout.mjs +2 -0
  58. package/src/wkf/salvageTruncatedArray.mjs +9 -0
  59. package/test/tools/fakeServerForApiTest.mjs +79 -2
  60. package/test/unit-dispatchApiOpenaiCompat.test.mjs +169 -1
  61. package/test/unit-dispatchApiOpenaiResponses.test.mjs +63 -5
  62. package/test/unit-dispatchApiTypesafeSystemone.test.mjs +17 -0
package/README.md CHANGED
@@ -298,9 +298,10 @@ Codex 0.149 起 Windows 預設走 elevated 沙箱(專用使用者 `CodexSandbo
298
298
  | `key` | String | `''` | API key,以`Bearer`置於`Authorization`標頭,省略代表不帶認證 |
299
299
  | `system` | String | `''` | system提示詞,置於messages首位 |
300
300
  | `body` | Object | `{}` | 額外請求本體(`temperature`、`max_tokens`、`response_format`等),同名鍵覆寫預設 |
301
- | `headers` | Object | `{}` | 額外請求標頭 |
301
+ | `headers` | Object | `{}` | 額外請求標頭,同名鍵覆寫預設。**預設帶 `Accept-Encoding: identity`**:伺服器若壓縮了回應卻漏標 `Content-Encoding`,Node 內建 fetch 不會解壓,本轉接器只拿到亂碼而回 `INVALID_RESPONSE`(2026-09-24 使用端回報於 Zen;三個 REST 轉接器同步)。要改回允許壓縮可給 `{ 'Accept-Encoding': 'gzip, deflate, br' }` |
302
302
  | `timeoutMs` | Integer | `300000` | 逾時毫秒,逾時中止請求(含回應串流讀取);全套件統一預設 |
303
- | `maxRetries` | Integer | `0` | 失敗重試次數;**4xx(429除外)為客戶端錯誤不重試**,429/5xx/網路錯誤/逾時線性退避重試 |
303
+ | `maxRetries` | Integer | `0` | 失敗重試次數;**4xx(429除外)為客戶端錯誤不重試**,截斷(見`acceptTruncated`)亦不重試(同一請求必然再截斷),429/5xx/網路錯誤/逾時線性退避重試 |
304
+ | `acceptTruncated` | Boolean | `false` | **截斷預設失敗**:`finish_reason`為`length`或`content_filter`時,於`validate`之前回`errorType: 'incomplete'`(結果帶`truncated: true`,遞補層整組跳過)。`true`才放行`length`之截斷:有`validate`交其裁決、無則直接接受,結果仍標`truncated: true`;`content_filter`與可見輸出為空者一律失敗(空輸出之訊息附`reasoning_tokens`,常見於推理耗盡`max_tokens`)。`dispatchApiOpenaiResponses`同規則(`status: 'incomplete'`即截斷;`failed`不屬截斷)。工作流層`callAi`之預設見`salvageTruncatedArray`列 |
304
305
  | `retryDelayMs` | Integer | `5000` | 重試間隔,實際為`retryDelayMs`×次數且上限15000ms |
305
306
 
306
307
  結果結構對齊execCli:`stdout`為回覆內容、`code`為HTTP狀態碼(網路錯誤/逾時為`null`)、逾時`error`以`TIMEOUT`開頭、驗證失敗為`OUTPUT_VALIDATION_FAILED`——故可直接作為`dispatchAiFallback`條目(`kind: 'api-openai-compat'`,`keys`多金鑰輪替同樣適用)與工作流provider。
@@ -320,6 +321,7 @@ Codex 0.149 起 Windows 預設走 elevated 沙箱(專用使用者 `CodexSandbo
320
321
  | `fetch` | 網路層錯誤(DNS/連線拒絕) | api類 |
321
322
  | `tool-unsupported` | 模型回tool_calls而api類不支援工具 | api類 |
322
323
  | `invalid-response` | 回應結構不合規(缺`choices[0].message.content`、缺`output`陣列,或 systemone 缺`answers`/缺所請求題目之答案) | api類 |
324
+ | `incomplete` | 回應未完整:截斷(`finish_reason`為`length`/`content_filter`、Responses API 之`status: 'incomplete'`;結果帶`truncated: true`)或 Responses API 之其餘非完成狀態(如`failed`,`truncated: false`)。截斷判定只適用 REST 文字類;CLI 類拿不到終止訊號,截斷無從判別(已知限制) | api類 |
323
325
  | `aborted` | `shouldStop`中止 | fallback層 |
324
326
  | `budget` | 時間預算用盡 | fallback層 |
325
327
 
@@ -334,7 +336,7 @@ Codex 0.149 起 Windows 預設走 elevated 沙箱(專用使用者 `CodexSandbo
334
336
  | `baseURL` | String | `'https://api.typesafe.ai/v1'` | 將於尾端接上`/systemone` |
335
337
  | `model` | String | `'jev-latest'` | 另有`'jev-preview'`;回應之實際版本見結果之`modelResolved`(如`'jev-1.13.0'`) |
336
338
  | `key` | String | `''` | API key(`.env` 慣用 `TYPESAFE_KEYS`),以`Bearer`置於`Authorization`標頭 |
337
- | `body`/`headers` | Object | `{}` | 額外請求本體/標頭,同名鍵覆寫預設 |
339
+ | `body`/`headers` | Object | `{}` | 額外請求本體/標頭,同名鍵覆寫預設(標頭預設同 `dispatchApiOpenaiCompat` 帶 `Accept-Encoding: identity`) |
338
340
  | `timeoutMs`/`validate`/`maxRetries`/`retryDelayMs` | | | 同 `dispatchApiOpenaiCompat`(4xx 除 429 外不重試) |
339
341
 
340
342
  | 題型 `type` | `criteria` | 答案欄位 |
@@ -415,6 +417,8 @@ let r = await wdi.dispatchAiFallback(state, { providers: jev, questions })
415
417
  | 執行檔不存在 | `error`含`ENOENT` | 整組跳過 |
416
418
  | 參數錯誤 | `code === 2` | 整組跳過 |
417
419
  | 輸出未過驗證 | `error === 'OUTPUT_VALIDATION_FAILED'` | 整組跳過 |
420
+ | 截斷(REST 文字類) | `truncated === true` | 整組跳過(同模型同請求換金鑰必然再截斷;`status: 'failed'`不屬此列,照「其餘」換下一把) |
421
+ | 模型回工具呼叫而 api 類不支援 | `error`以`TOOL_CALLS_UNSUPPORTED`開頭 | 整組跳過 |
418
422
  | kind無效 | `error`以`unknown ai kind`開頭 | 整組跳過 |
419
423
  | 其餘(含額度上限、金鑰無效、服務回錯) | — | 換組內下一把 |
420
424
 
@@ -467,7 +471,7 @@ let r = await wdi.dispatchAiFallback(state, { providers: jev, questions })
467
471
  keyIndex: 1, //實際使用之金鑰索引, 無keys時為null
468
472
  kind: 'api-openai-compat',
469
473
  model: 'agnes-2.0-flash',
470
- tried: [ //完整嘗試歷程, 成功時亦回傳; 失敗項另含stdout(被拒回覆)與stderr(錯誤輸出, 皆已截斷)供診斷
474
+ tried: [ //完整嘗試歷程, 成功時亦回傳; 失敗項另含stdout(被拒回覆)與stderr(錯誤輸出, 皆已截斷)供診斷; REST文字類各項另帶truncated與finishReason
471
475
  { providerId: 'agnes:agnes-2.0-flash', keyIndex: 0, keyId: 'agnes:agnes-2.0-flash#0', outcome: 'next-key', error: 'HTTP 401', durationMs: 105 },
472
476
  { providerId: 'agnes:agnes-2.0-flash', keyIndex: 1, keyId: 'agnes:agnes-2.0-flash#1', outcome: 'ok', durationMs: 1161 },
473
477
  ],
@@ -606,7 +610,7 @@ let merged = [...wdi.providers.filter((p) => !extra.some((e) => e.id === p.id)),
606
610
  let resolved = wdi.resolveProviders(merged, { env, pick: [...] })
607
611
  ```
608
612
 
609
- **推理模型請放寬 `body.max_tokens`**:推理模型的 `max_tokens` 含推理 token(2026-09-24 實測 `space-bunny-free` 列 10 個縣市一題即用 5222,其中推理 4849),照抄上例之 8192 容易截斷,而 `api-openai-compat` 遇截斷仍回 `ok`(內容殘缺或為空);內建之 `zen:space-bunny-free` 即用 32768。
613
+ **推理模型請放寬 `body.max_tokens`**:推理模型的 `max_tokens` 含推理 token(2026-09-24 實測 `space-bunny-free` 列 10 個縣市一題即用 5222,其中推理 4849),照抄上例之 8192 容易截斷;截斷預設判失敗換家(`errorType: 'incomplete'`,見`acceptTruncated`),截斷頻繁等於白白換家;內建之 `zen:space-bunny-free` 即用 32768。
610
614
 
611
615
  **警語:動「輸入」、不要動「回傳」**——把條目 push 進回傳的 `providers` 陣列不會同步進 `table`,兩者當場分歧;合併輸入再呼叫則兩種輸出同源產出、必然一致。另同 id 重複條目屬設定錯誤(共用游標、日誌無法區分),合併時務必如上例先濾再接。
612
616
 
@@ -617,7 +621,7 @@ let resolved = wdi.resolveProviders(merged, { env, pick: [...] })
617
621
  | `createFileStore({ dir })` | `dispatchAiFallback`之`store`的檔案持久化——排程任務每次執行都是新行程,記憶體游標/冷卻每次歸零;本實作採**排除式passthrough**(state原封存還,僅剔自用欄位`at`),日後套件擴充state欄位自動相容(殷鑑:白名單store曾把1.0.7新增的`cooling`靜默丟棄) |
618
622
  | `createUsageCounter({ dir })` | 逐日逐鍵用量計帳,`onEvent`直接掛進dispatch即於`try`事件記帳;**純觀測絕不據以節流**(額度視窗形態多樣,臆測門檻擋自己的呼叫等同拿猜測當事實);排程環境務必注入`getDate`錨定時區 |
619
623
  | `budgetFor(chain)` | 遞補鏈走滿全鏈之時間預算(Σ各條目`timeoutMs`,未帶者以統一預設300000計);與外部排程硬上限取小者交`budgetMs` |
620
- | `salvageTruncatedArray(text)` | 截斷JSON陣列之前段搶救(救回的每個元素皆完整合法);**不併入預設解析**——「判失敗換家重產」與「搶救前段部分接受」是同一問題的兩種合法策略,組成自訂`parse`注入即可 |
624
+ | `salvageTruncatedArray(text)` | 截斷JSON陣列之前段搶救(救回的每個元素皆完整合法);**不併入預設解析**——「判失敗換家重產」與「搶救前段部分接受」是同一問題的兩種合法策略,組成自訂`parse`注入即可。REST 文字類截斷預設失敗,但工作流`callAi`之`acceptTruncated`預設為「有自訂`parse`且非`rawText`」,故注入自訂`parse`即同意接受截斷內容、既有用法不必改;結果之`truncated: true`可辨識救回的是半批;直接呼叫轉接器時須自行給`acceptTruncated: true`。限制:只救頂層元素為物件之陣列,從第一個`[`起算(外包物件如`{"items":[…`會救回內層陣列、前言含`[`會失效) |
621
625
  | `NO_SIDE_EFFECT` | 防副作用prompt前綴之單一來源(措辭含唯讀查閱豁免——codex以shell讀檔,一律禁指令等同禁讀檔);工作流`callAi`預設自動掛上,直呼`dispatchAiFallback`者自行前綴 |
622
626
 
623
627
  #### 訂閱額度查詢(quota):`getQuotaClaude`/`getQuotaCodex`/`getQuotaAntigravity`
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * w-dispatch-ai v1.0.36
2
+ * w-dispatch-ai v1.0.37
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 j="object"==typeof exports&&exports&&!exports.nodeType&&exports,S=j&&"object"==typeof module&&module&&!module.nodeType&&module,T=S&&S.exports===j?u.Buffer:void 0,x=(T?T.isBuffer:void 0)||function(){return!1},A=/^(?:0|[1-9]\d*)$/;function $(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&A.test(e))&&e>-1&&e%1==0&&e<t}function M(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}var E={};function I(e){return function(t){return e(t)}}E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object Boolean]"]=E["[object DataView]"]=E["[object Date]"]=E["[object Error]"]=E["[object Function]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[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)&&M(e.length)&&!!E[h(e)]},U=Object.prototype.hasOwnProperty;function F(e,t){var r=O(e),n=!r&&k(e),o=!r&&!n&&x(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 q=J(Object.keys,Object),V=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&&M(e.length)&&!K(e)}function H(e){return G(e)?F(e):function(e){if(!B(e))return q(e);var t=[];for(var r in Object(e))V.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 je(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(je.Cache||Oe),r}je.Cache=Oe;var Se,Te,xe,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/\\(\\)?/g,Me=(Se=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Ae,function(e,r,n,o){t.push(n?o.replace($e,"$1"):r||e)}),t},Te=je(Se,function(e){return 500===xe.size&&xe.clear(),e}),xe=Te.cache,Te),Ee=Me;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]:Ee(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 qe(e,t,r){"__proto__"==t&&Je?Je(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Ve=Object.prototype.hasOwnProperty;function We(e,t,r){var n=e[t];Ve.call(e,t)&&ge(n,r)&&(void 0!==r||t in e)||qe(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?qe(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),jt=oe(mt),St=oe(ht),Tt=oe(yt),xt=h;(pt&&xt(new pt(new ArrayBuffer(1)))!=_t||_e&&xt(new _e)!=gt||mt&&xt(mt.resolve())!=vt||ht&&xt(new ht)!=bt||yt&&xt(new yt)!=wt)&&(xt=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 jt:return vt;case St:return bt;case Tt:return wt}return t});var At=xt,$t=Object.prototype.hasOwnProperty;var Mt=u.Uint8Array;function Et(e){var t=new e.constructor(e.byteLength);return new Mt(t).set(new Mt(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 Et(e);case"[object Boolean]":case"[object Date]":return new o(+e);case"[object DataView]":return function(e,t){var r=t?Et(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?Et(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]"==At(e)};var zt=L&&L.isSet,Bt=zt?I(zt):function(e){return y(e)&&"[object Set]"==At(e)},Jt="[object Arguments]",qt="[object Function]",Vt="[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=At(e),f=d==qt||"[object GeneratorFunction]"==d;if(x(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==Vt||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[Vt]=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[qt]=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 jr=/\s/;var Sr=/^\s+/;function Tr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&jr.test(e.charAt(t)););return t}(e)+1).replace(Sr,""):e}var xr=/^[-+]0x[0-9a-f]+$/i,Ar=/^0b[01]+$/i,$r=/^0o[0-7]+$/i,Mr=parseInt;function Er(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=Tr(e);var r=Ar.test(e);return r||$r.test(e)?Mr(e.slice(2),r?2:8):xr.test(e)?NaN:+e}var Ir=1/0;function Nr(e){return e?(e=Er(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=Er(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 qr(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 Vr(e,t={}){if(!qr(e,t))return!1;return zr(e)>0}function Wr(e,t={}){if(!qr(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 j=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(j),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(j);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=Vr(o)?zr(o):5e3;let f=Fe(i,"timeoutMs",null);Vr(f)?i.timeoutMs=zr(f):i.timeoutMs=12e4,i.timeoutMs=Math.min(i.timeoutMs,br);let p,m=Fe(i,"maxBuffer",null);Vr(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 Vr(e)?zr(e):t}let kn=3e5,On=["exe","model","key","provider","useStoredAuth","agent","config","extraArgs","input","env"];async function jn(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 Sn=["exe","model","skipPermissions","extraArgs","input"];async function Tn(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,Sn);return wn(await yn(r,l,{...a,input:e,timeoutMs:u}))}let xn=["exe","model","sandbox","extraArgs","input"];async function An(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,xn);return wn(await yn(r,l,{...a,input:e,timeoutMs:u}))}let $n=kn,Mn=["exe","model","effort","skipPermissions","printTimeout","addDirs","extraArgs","input"];async function En(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,Mn);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=kn,Dn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Cn(e,t,r,n,o){let i=Date.now(),l=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-i,usage:null,...e}),u=new AbortController,a=setTimeout(()=>{u.abort()},n),s=null,c="";try{s=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),c=await s.text()}catch(e){if(clearTimeout(a),"AbortError"===e.name)return l({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return l({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return l({stderr:Yr(c,1e3,Dn),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let d=null,f="",p=null,m=null;try{let e=JSON.parse(c);d=Fe(e,"choices.0.message.content",null),f=Fe(e,"choices.0.finish_reason",""),p=Fe(e,"choices.0.message.tool_calls",null),m=Fe(e,"usage",null),yr(m)||(m=null)}catch{}return"tool_calls"===f||null!=p?l({stderr:Yr(c,1e3,Dn),code:s.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:m}):null==d?l({stderr:Yr(c,500,Dn),code:s.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:m}):("string"!=typeof d&&(d=JSON.stringify(d)),o&&!o(d)?l({stdout:Yr(d,500,Dn),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:m}):l({ok:!0,stdout:d,code:s.status,usage:m}))}async function Ln(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),Nn),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=r.replace(/\/+$/,"")+"/chat/completions",p=[];vr(i)&&p.push({role:"system",content:i}),p.push({role:"user",content:e});let m={model:n,messages:p,...l},h={"Content-Type":"application/json",...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 Cn(f,h,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 Pn=kn,Rn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function Un(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 Fn(e,t,r,n,o){let i=Date.now(),l=e=>({ok:!1,stdout:"",stderr:"",code:null,error:"",durationMs:Date.now()-i,usage:null,...e}),u=new AbortController,a=setTimeout(()=>{u.abort()},n),s=null,c="";try{s=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:u.signal}),c=await s.text()}catch(e){if(clearTimeout(a),"AbortError"===e.name)return l({error:`TIMEOUT after ${n/1e3}s`,errorType:"timeout"});return l({error:`FETCH_ERROR: ${Fe(e,"cause.code","")||e.message}`,errorType:"fetch"})}if(clearTimeout(a),!s.ok)return l({stderr:Yr(c,1e3,Rn),code:s.status,error:`HTTP ${s.status}`,errorType:"http"});let d=null,f="",p="",m="",h=null,y=!0;try{let e=JSON.parse(c);d=Fe(e,"output",null),f=Fe(e,"status",""),p=Fe(e,"incomplete_details.reason",""),m=Fe(e,"error.message","")||Fe(e,"error.code",""),h=Fe(e,"usage",null),yr(h)||(h=null)}catch{y=!1}if(!y||!Br(d))return l({stderr:Yr(c,500,Rn),code:s.status,error:"INVALID_RESPONSE: missing output array",errorType:"invalid-response",usage:h});if(d.some(e=>"function_call"===Fe(e,"type","")))return l({stderr:Yr(c,1e3,Rn),code:s.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:h});if("completed"!==f){let e=p||m||f||"unknown";return l({stdout:Yr(Un(d),500,Rn),stderr:Yr(c,500,Rn),code:s.status,error:`INCOMPLETE_RESPONSE: status=${f||"missing"} (${e})`,errorType:"incomplete",usage:h})}let g=Un(d);return""===g?l({stderr:Yr(c,500,Rn),code:s.status,error:"INVALID_RESPONSE: no output_text in output messages",errorType:"invalid-response",usage:h}):o&&!o(g)?l({stdout:Yr(g,500,Rn),code:s.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:h}):l({ok:!0,stdout:g,code:s.status,usage:h})}async function zn(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),Pn),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=r.replace(/\/+$/,"")+"/responses",p={model:n,input:e};vr(i)&&(p.instructions=i),p={...p,...l};let m={"Content-Type":"application/json",...u};vr(o)&&(m.Authorization=`Bearer ${o}`);let h=null,y=0;for(let e=0;e<=s;e++){if(e>0&&await Or(Math.min(c*e,15e3)),h=await Fn(f,m,p,a,d),y=e+1,h.ok)return h.attempts=y,h;let t=h.code;if(kr(t)&&t>=400&&t<500&&429!==t)break}return h.attempts=y,h}function Bn(e){if(yr(e)){for(let t in e)return!0;return!1}return!1}let Jn=kn,qn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Vn(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="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=await c.text()}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(d,1e3,qn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let f=null,p="",m=null;try{let e=JSON.parse(d);f=Fe(e,"answers",null),p=Fe(e,"model",""),vr(p)||(p=""),m=Fe(e,"usage",null),yr(m)||(m=null)}catch{f=null}if(!yr(f))return u({stderr:Yr(d,500,qn),code:c.status,error:"INVALID_RESPONSE: missing answers object",errorType:"invalid-response",usage:m,modelResolved:p});let h=n.filter(e=>!yr(f[e]));if(h.length>0)return u({stderr:Yr(d,500,qn),code:c.status,error:`INVALID_RESPONSE: missing answers for [${h.join(", ")}]`,errorType:"invalid-response",usage:m,modelResolved:p});let y=JSON.stringify(f);return i&&!i(y)?u({stdout:Yr(y,500,qn),code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:m,modelResolved:p}):u({ok:!0,stdout:y,code:c.status,usage:m,answers:f,modelResolved:p})}async function Wn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"questions",null);if(!Bn(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),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=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",...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 Vn(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 Kn={opencode:jn,claude:Tn,codex:An,antigravity:En,"api-openai-compat":Ln,"api-openai-responses":zn,"api-typesafe-systemone":Wn};function Gn(e){return e!=e}function Hn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,H(e))}var Yn=Math.max;function Xn(e,t,r,n){e=G(e)?e:Hn(e),r=r&&!n?Dr(r):0;var o=e.length;return r<0&&(r=Yn(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,Gn,r)}(e,t,r)>-1}async function Qn(e,t,r={}){let n=H(Kn);return vr(e)&&Xn(n,e)?(0,Kn[e])(t,r):vn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let Zn=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],eo=["id","keys","meta"],to=kn,ro={cursors:{}};function no(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===t.indexOf("unknown ai kind"))))}async function oo(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:{}}:ro),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;Vr(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,Zn),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,eo),j=0;if(k>0){let e=Fe(u.cursors,o,0);j=Vr(e)?zr(e)%k:0}let S=k>0?k:1,T=!1;for(let t=0;t<S&&!T;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?(j+t)%k:null,n=null===r?o:`${o}#${r}`,w={...h,...O};k>0&&(w.key=_[r]);let S=_n(Fe(w,"timeoutMs",null),to);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};S=Math.min(S,e)}w.timeoutMs=S,m({type:"try",providerId:o,keyIndex:r,keyId:n,kind:p,model:b});let x=await Qn(p,e,w);if(x.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:x.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:x.durationMs,...void 0!==x.usage?{usage:x.usage}:{}}),{...x,providerId:o,keyIndex:r,kind:p,model:b,tried:y};if(g=x,v={providerId:o,keyIndex:r,kind:p,model:b},s>0&&d){let e=429===x.code||vr(x.error)&&0===x.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(x)}catch{}e&&(u.cooling[o]=Date.now(),a(),m({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:x.error,cooldownMs:s}))}no(x)?(m({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr,durationMs:x.durationMs,...void 0!==x.usage?{usage:x.usage}:{}}),T=!0):(m({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr,durationMs:x.durationMs,...void 0!==x.usage?{usage:x.usage}:{}}))}}return{...g||vn("all providers failed","exec"),...v||{},tried:y}}function io(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 lo(e){return!!Br(e)&&(0!==e.length&&(1!==e.length||!io(e[0])))}function uo(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 ao=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),so=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function co(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);lo(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);Jr(a)||(a=uo);let s=Fe(t,"check",null);Jr(s)||(s=null);let c=Fe(t,"promptPrefix",null);vr(c)||(c=""===c?"":ao);let d=await oo(c+e,{...hr(t,so),providers:i,validate:e=>{if(u){let t=String(e||"").trim();return""!==t&&(!s||!0===s(t))}let t=a(e);return null!==t&&(!s||!0===s(t))},timeoutMs:Fe(t,"timeoutMs",null)||kn}),f=null;d.ok&&(f=u?String(d.stdout||"").trim():a(d.stdout));let p=Fe(d,"providerId",null),m=Fe(d,"keyIndex",null);return{ok:d.ok&&null!==f,json:f,providerId:p,keyIndex:m,keyId:null===m?p:`${p}#${m}`,ms:Date.now()-r,tried:Fe(d,"tried",[]),usage:Fe(d,"usage",null),error:d.ok?"":Fe(d,"error","unknown error"),...d.ok?{}:{errorType:Fe(d,"errorType","exec")}}}async function fo(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(!lo(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=Vr(a)?zr(a):2;let s=await Promise.all(o.map(e=>{let{use:t,fallback:o,check:i,meta:a,...s}=e;return co(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 co(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 po=["id","use","fallback","prompt","check","meta"];async function mo(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(!lo(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,po),h=await co(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 ho=["stages","input"],yo=["task","agents","integrate","check","schema","minCandidates"];let go={edit:"deny",bash:"ask"},vo=["--tools","Read,Glob,Grep","--strict-mcp-config"],bo=[{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:go}},{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:go}},{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:go}},{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:go}},{id:"oc:opencode/big-pickle",model:"opencode/big-pickle",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:go}},{id:"oc:opencode/mimo-v2.6-flash-free",model:"opencode/mimo-v2.6-flash-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:go}},{id:"oc:opencode/space-bunny-free",model:"opencode/space-bunny-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:go}},{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:vo},{id:"claude:opus-5.5",model:"claude-opus-5-5",kind:"claude",extraArgs:vo},{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 wo=Array.prototype.join;function _o(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Oe;++t<r;)this.add(e[t])}function ko(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 Oo(e,t){return e.has(t)}_o.prototype.add=_o.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},_o.prototype.has=function(e){return this.__data__.has(e)};function jo(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 _o: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(!ko(t,function(e,t){if(!Oo(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 So(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function To(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var xo=a?a.prototype:void 0,Ao=xo?xo.valueOf:void 0;var $o=Object.prototype.hasOwnProperty;var Mo="[object Arguments]",Eo="[object Array]",Io="[object Object]",No=Object.prototype.hasOwnProperty;function Do(e,t,r,n,o,i){var l=O(e),u=O(t),a=l?Eo:At(e),s=u?Eo:At(t),c=(a=a==Mo?Io:a)==Io,d=(s=s==Mo?Io:s)==Io,f=a==s;if(f&&x(e)){if(!x(t))return!1;l=!0,c=!1}if(f&&!c)return i||(i=new ze),l||R(e)?jo(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 Mt(e),new Mt(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=So;case"[object Set]":var a=1&n;if(u||(u=To),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=jo(u(e),u(t),n,o,i,l);return l.delete(e),c;case"[object Symbol]":if(Ao)return Ao.call(e)==Ao.call(t)}return!1}(e,t,a,r,n,o,i);if(!(1&r)){var p=c&&No.call(e,"__wrapped__"),m=d&&No.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:$o.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 Co(e,t,r,n,o){return e===t||(null==e||null==t||!y(e)&&!y(t)?e!=e&&t!=t:Do(e,t,r,n,Co,o))}function Lo(e){return e==e&&!W(e)}function Po(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function Ro(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,Lo(o)]}return t}(e);return 1==t.length&&t[0][2]?Po(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?Co(c,s,3,n,d):f))return!1}}return!0}(r,e,t)}}function Uo(e,t){return null!=e&&t in Object(e)}function Fo(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)&&M(o)&&$(l,o)&&(O(e)||k(e))}(e,t,Uo)}function zo(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 Bo(e){return"function"==typeof e?e:null==e?ar:"object"==typeof e?O(e)?function(e,t){return Z(e)&&Lo(t)?Po(Re(e),t):function(r){var n=Fe(r,e);return void 0===n&&n===t?Fo(r,e):Co(t,n,3)}}(e[0],e[1]):Ro(e):zo(e)}var Jo,qo=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),l=i.length;l--;){var u=i[Jo?l:++n];if(!1===t(o[u],u,o))break}return e};var Vo=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&&qo(e,t,H)}),Wo=Vo;function Ko(e,t){var r=-1,n=G(e)?Array(e.length):[];return Wo(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function Go(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 Ho(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 Yo(e,t){let r="";if(vr(e)||kr(e))r=Ho(e);else{if(!lo(e))return{};o="",r=null==(n=e)?"":wo.call(n,o)}var n,o,i,l;return kr(t)&&(t=Ho(t)),vr(t)&&(t=[t]),lo(t)?(l=function(e){return Ho(e)},function(e,t){let r=[],n=0;for(let o=0;o<t.length;o++){let i=t[o],l=Go(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:Ko)(i,Bo(l)))):{}}function Xo(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 Qo(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Kr(e,e.length-t):""}function Zo(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=Qo(e,1);return":"===Gr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Gr(e,1)){let t=Qo(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function ei(e){if(!vr(e))return"";let t=Zo(e);if(t.isRoot)return t.path;let r=function(e){if(!vr(e))return"";let t=Zo(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=Zo(e=Qo(e,r.length));return n.isRoot,n.path}function ti(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 ri(e,t,r={}){let n=null,o=Fe(r,"fs"),i=ei(e);ti(i,{fs:o})||function(e,t={}){let r=Fe(t,"fs");if(ti(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 ni(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}:ri(e,l,{fs:r})}let oi=2e4;function ii(e){return Fe(Xo(e),"success",null)}function li(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 ui(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);Bn(o)||(o={});let i=Fe(t,"method",null);vr(i)||(i="GET");let l=Fe(t,"body",null);Bn(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),oi),a=_n(Fe(t,"maxBodyBytes",null),1048576),s=Fe(t,"redact",null);lo(s)||(s=[]);let c=e=>li(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: ${li(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: ${li(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 ai(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 si(e,t){if(!vr(t))return"";let r=ai(e);return""===r?t:`${r}(${t})`}function ci(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=ai(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 di(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);lo(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 fi=604800,pi=[["five_hour",18e3,""],["seven_day",fi,""],["seven_day_opus",fi,"Opus"],["seven_day_sonnet",fi,"Sonnet"],["seven_day_cowork",fi,"Cowork"],["seven_day_oauth_apps",fi,"OAuth apps"]],mi=["ANTHROPIC_API_KEY","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX"];function hi(e){let t=Fe(e,"group",""),r=null;"session"===t?r=18e3:"weekly"===t&&(r=fi);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 ci({key:Fe(e,"kind",""),label:si(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:yi,buildSpawnEnv:gi}=dn;async function vi(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");Vr(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=Vr(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,j=null,S=wr(),T=null,x={pid:null,exited:!1,write:null,writeLine:null,stop:null},A=e=>{h||(h=!0,clearTimeout(k),clearTimeout(O),clearTimeout(j),y={code:null,signal:null,exited:!0,timeout:g,killed:v,error:"",stderr:w,durationMs:Date.now()-m,pid:x.pid,...e},x.exited=!0,Jr(p)&&p(y),S.resolve(y))},$=()=>T||(T=wr(),S.then(e=>{T.resolve(e)}),T);if(!vr(e))return x.write=async()=>!1,x.writeLine=async()=>!1,x.stop=$,setTimeout(()=>{A({error:"command 須為非空字串"})},1),x;let M,E=yi(e,r);try{M=t.spawn(E.file,E.args,{cwd:o,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:gi(i),...E.opt})}catch(e){return x.write=async()=>!1,x.writeLine=async()=>!1,x.stop=$,setTimeout(()=>{A({error:`${e.code||"UNKNOWN"}: ${e.message}`})},1),x}x.pid=M.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):""};M.stdout.on("data",e=>{let t=I.decode(e,{stream:!0});t&&(Jr(d)&&d(t),D(t,!1))}),M.stderr.on("data",e=>{let t=N.decode(e,{stream:!0});t&&(Jr(f)&&f(t),C(t))}),M.stdin.on("error",()=>{});let L=e=>{v=!0,ln(M.pid).catch(()=>{}),j=setTimeout(()=>{h||A({code:null,exited:!1,error:e})},a)};return null!==l&&(k=setTimeout(()=>{h||(g=!0,L(`TIMEOUT after ${l/1e3}s(子進程未能結束)`))},l)),M.on("error",e=>{A({error:`${e.code||"UNKNOWN"}: ${e.message}`})}),M.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}`)),A({code:e,signal:t,error:o})}),x.write=e=>{let t=wr();if(h||b||M.stdin.destroyed||!M.stdin.writable)return t.resolve(!1),t;try{M.stdin.write(String(e),"utf8",e=>{t.resolve(!e)})}catch{t.resolve(!1)}return t},x.writeLine=e=>x.write(String(e)+"\n"),x.stop=()=>{if(T)return T;if(T=wr(),h)return T.resolve(y),T;b=!0;try{M.stdin.end()}catch{}return O=setTimeout(()=>{h||L("STOP_TIMEOUT(子進程未能結束)")},u),S.then(e=>{T.resolve(e)}),T},x}(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 bi(e,t){for(let r of t){let t=Fe(e,r,"");if(vr(t))return t}return""}function wi(e,t,r){if(!Bn(e))return null;let n=Fe(e,"limit_window_seconds",null),o=kr(n)?Fr(n):null;return ci({key:t,label:si(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 _i(e,t,r){for(let n of[e,Fe(e,"rate_limit",null),Fe(e,"rateLimit",null)]){if(!Bn(n))continue;let e=Fe(n,t,null);if(Bn(e)||(e=Fe(n,r,null)),Bn(e))return e}return null}function ki(e){if(!Bn(e))return null;if(void 0!==Fe(e,"used_percent",void 0))return e;let t=Fe(e,"window",null);if(Bn(t))return t;let r=Fe(e,"rate_limit",null);return Bn(r)&&void 0!==Fe(r,"used_percent",void 0)?r:null}function Oi(e){let t=bi(e,["email"]),r=bi(e,["plan_type"]),n=[];for(let t of["primary","secondary"]){let r=wi(Fe(e,`rate_limit.${t}_window`,null),t,"");null!==r&&n.push(r)}for(let t of["primary","secondary"]){let r=wi(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(lo(e))return e;if(Bn(e))return Object.keys(e).map(t=>{let r=e[t];if(!Bn(r))return r;let n=bi(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(!Bn(t))continue;let r=bi(t,["limit_name","metered_limit_name","name","id"]);""===r&&(r=`additional_${e+1}`);let i=bi(t,["display_name","title","name","limit_name","metered_limit_name"]),l=""===i?r:i,u=`${r} ${i}`.toLowerCase(),a=_i(t,"primary_window","primaryWindow"),s=_i(t,"secondary_window","secondaryWindow");if(null===a&&null===s){let e=ki(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=wi(a,`${r}:primary`,l);null!==c&&n.push(c);let d=wi(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 ji=[{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 Si(e,t,r){if(!Bn(e))return null;let n=Fe(e,"windowDurationMins",null),o=kr(n)?60*Fr(n):null;return ci({key:t,label:si(o,r),windowSeconds:o,usedPercent:Fe(e,"usedPercent",null),resetAt:Fe(e,"resetsAt",""),scope:r})}async function Ti(t,r,n){let o=Fe(t,"env",null);yr(o)||(o=process.env);let i=e.join(r,"auth.json"),l=ii(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 ui(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=Oi(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 xi(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 Ai="1.1.11",$i={"5h":18e3,five_hour:18e3,"five-hour":18e3,weekly:604800,week:604800,daily:86400,day:86400};function Mi(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!==$i[t])return $i[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=ai(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"),ci({key:r,label:a,windowSeconds:l,usedPercent:o,resetAt:Fe(t,"reset_time",""),scope:i,active:!1,severity:s})}async function Ei(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 ${Ai} 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 Ii={KINDS:H(Kn),NO_SIDE_EFFECT:ao,dispatchAi:Qn,dispatchAiFallback:oo,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={})=>co(e,{...r,...n,providers:t}),runFanout:(e={})=>fo({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runRolePipeline:(e={})=>mo({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await fo(hr(e,ho));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await mo({...hr(e,yo),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:jn,dispatchClaude:Tn,dispatchCodex:An,dispatchAntigravity:En,dispatchApiOpenaiCompat:Ln,dispatchApiOpenaiResponses:zn,dispatchApiTypesafeSystemone:Wn,providers:bo,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(lo(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(Yo(t,e),"bestMatch.target",null):null}let a=[],s=[];for(let e of l){let t=Fe(e,"envVar",null);if(!vr(t)||lo(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);lo(n)||(n=["at"]);let o=Fe(t,"stamp",null);return Jr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=Xo(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()};ni(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);Vr(o)||(o=14);let i=Fe(t,"keyOf",null);Jr(i)||(i=e=>Fe(e,"keyId",null)||Fe(e,"providerId",""));let l=()=>{let e=Xo(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];ni(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),oi),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=ii(c),v=ii(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=>di("claude",{email:w,emailWant:i,plan:_,planTier:k,source:"anthropic-oauth-usage-api",durationMs:Date.now()-o,...e});if(!vr(b)){let e=mi.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 j={Authorization:`Bearer ${b}`,"anthropic-beta":"oauth-2025-04-20","User-Agent":p,"Content-Type":"application/json"},S=await ui(h,{headers:j,timeoutMs:f,redact:[b]});if(!S.ok){let e=S.error;if("auth"===S.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"===S.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:S.errorType})}let T=S.data;if(""===w&&m){let e=await ui(y,{headers:j,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 x=[],A=Fe(T,"limits",null);return x=lo(A)?A.map(hi):pi.map(([e,t,r])=>function(e,t,r,n){let o=Fe(e,t,null);return null==o?null:ci({key:t,label:si(r,n),windowSeconds:r,usedPercent:Fe(o,"utilization",null),resetAt:Fe(o,"resets_at",""),scope:n})}(T,e,t,r)).filter(e=>null!==e),O({windows:x,credits:{extraUsageEnabled:Fe(T,"extra_usage.is_enabled",!1),monthlyLimit:Fe(T,"extra_usage.monthly_limit",null),usedCredits:Fe(T,"extra_usage.used_credits",null),utilization:Fe(T,"extra_usage.utilization",null),spendUsedMinor:Fe(T,"spend.used.amount_minor",null),spendCurrency:Fe(T,"spend.used.currency",""),spendPercent:Fe(T,"spend.percent",null)},raw:{configDir:a,usage:T}})},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),oi),c=!1!==Fe(r,"useAppServer",!0),d=!1!==Fe(r,"fallbackHttp",!0),f=(e,t)=>di("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 vi(t,["app-server","--stdio"],ji,{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(!Bn(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=Si(Fe(s,"primary",null),"primary","");null!==d&&a.push(d);let f=Si(Fe(s,"secondary",null),"secondary","");null!==f&&a.push(f);let p=Fe(o,"rateLimitsByLimitId",null);if(Bn(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=Si(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 Ti(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=>di("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=xi(e),n=xi(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,Ai);if(null===t||t<0)return p({error:`agy version [${m||"unknown"}] is below ${Ai}; 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 Ei(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 Ei(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(lo(_))for(let e of _){let t=Fe(e,"buckets",null);if(lo(t))for(let r of t){let t=Mi(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 Ii});
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,p=a?a.toStringTag:void 0;var f=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,p),r=e[p];try{e[p]=void 0;var n=!0}catch(e){}var o=d.call(e);return n&&(t?e[p]=r:delete e[p]),o}(e):function(e){return f.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,x=(S?S.isBuffer:void 0)||function(){return!1},A=/^(?:0|[1-9]\d*)$/;function $(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&A.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&&x(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 pe(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return de(r)?r:void 0}var fe=pe(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__=fe?fe(null):{},this.size=0},ye.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},ye.prototype.get=function(e){var t=this.__data__;if(fe){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return me.call(t,e)?t[e]:void 0},ye.prototype.has=function(e){var t=this.__data__;return fe?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]=fe&&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=pe(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,xe,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/\\(\\)?/g,Ee=(je=function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Ae,function(e,r,n,o){t.push(n?o.replace($e,"$1"):r||e)}),t},Se=Te(je,function(e){return 500===xe.size&&xe.clear(),e}),xe=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=pe(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 pt(e){return ct(e,Ye,st)}var ft=pe(u,"DataView"),mt=pe(u,"Promise"),ht=pe(u,"Set"),yt=pe(u,"WeakMap"),gt="[object Map]",vt="[object Promise]",bt="[object Set]",wt="[object WeakMap]",_t="[object DataView]",kt=oe(ft),Ot=oe(_e),Tt=oe(mt),jt=oe(ht),St=oe(yt),xt=h;(ft&&xt(new ft(new ArrayBuffer(1)))!=_t||_e&&xt(new _e)!=gt||mt&&xt(mt.resolve())!=vt||ht&&xt(new ht)!=bt||yt&&xt(new yt)!=wt)&&(xt=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 At=xt,$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]"==At(e)};var zt=L&&L.isSet,Bt=zt?I(zt):function(e){return y(e)&&"[object Set]"==At(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=At(e),p=d==Vt||"[object GeneratorFunction]"==d;if(x(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||p&&!o){if(l=a||p?{}: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 f=i.get(e);if(f)return f;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?pt: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 pr=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),fr=pr;var mr=function(e){return fr(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,pt(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 xr=/^[-+]0x[0-9a-f]+$/i,Ar=/^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=Ar.test(e);return r||$r.test(e)?Er(e.slice(2),r?2:8):xr.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:pn,buildSpawnEnv:fn}=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,p=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),f=Date.now(),m=wr(),h=fn(d),y=pn(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()-f,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()-f,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()-f;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?!p||p(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 p=Fe(i,"timeoutMs",null);qr(p)?i.timeoutMs=zr(p):i.timeoutMs=12e4,i.timeoutMs=Math.min(i.timeoutMs,br);let f,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(f=await hn(e,t,i),h=r+1,f.ok)return f.attempts=h,f;if(f.error.includes("ENOENT"))break;if(2===f.code)break}return f.attempts=h,f}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),p=!1!==Fe(r,"useStoredAuth",null);vr(c)&&vr(d)?a={...a,OPENCODE_AUTH_CONTENT:JSON.stringify({[d]:{type:"api",key:c}})}:p||(a={...a,OPENCODE_AUTH_CONTENT:"{}"});let f=Fe(r,"cwd",null);f=vr(f)?e.resolve(f):process.cwd(),a={...a,PWD:f};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 xn=["exe","model","sandbox","extraArgs","input"];async function An(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,xn);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]),p=hr(t,En);try{return wn(await yn(r,d,{...p,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=kn,Rn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Un(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="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=await c.text()}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(d,1e3,Rn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,f=null,m=null,h=null;try{let e=JSON.parse(d);p=Fe(e,"choices.0.message.content",null),f=Fe(e,"choices.0.finish_reason",null),m=Fe(e,"choices.0.message.tool_calls",null),h=Fe(e,"usage",null),yr(h)||(h=null)}catch{}let y=Dn(f),g={finishReason:y,truncated:Nn.includes(y)};if("tool_calls"===y||null!=m)return u({stderr:Yr(d,1e3,Rn),code:c.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:h,...g});if(void 0===p&&(p=null),null!==p&&"string"!=typeof p&&(p=JSON.stringify(p)),g.truncated){let e=Ln({finishReason:y,content:p,acceptTruncated:i,validator:o,reasoningTokens:Fe(h,"completion_tokens_details.reasoning_tokens",null),label:`finish_reason=${y}`});return e.accept?u({ok:!0,stdout:p,code:c.status,usage:h,...g}):u({stdout:Yr(p||"",500,Rn),stderr:Yr((e.threw?`validate threw: ${e.threw}\n`:"")+d,500,Rn),code:c.status,error:e.error,errorType:"incomplete",usage:h,...g})}if(null===p)return u({stderr:Yr(d,500,Rn),code:c.status,error:"INVALID_RESPONSE: missing choices[0].message.content",errorType:"invalid-response",usage:h,...g});if(o){let e=Cn(o,p);if(!e.pass)return u({stdout:Yr(p,500,Rn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:h,...g})}return u({ok:!0,stdout:p,code:c.status,usage:h,...g})}async function Fn(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),Pn),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)),p=!0===Fe(t,"acceptTruncated",null),f=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 Un(f,y,h,a,d,p),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 zn=kn,Bn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};function Jn(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 Vn(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="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=await c.text()}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(d,1e3,Bn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,f="",m="",h="",y=null,g=!0;try{let e=JSON.parse(d);p=Fe(e,"output",null),f=Fe(e,"status",""),m=Fe(e,"incomplete_details.reason",""),h=Fe(e,"error.message","")||Fe(e,"error.code",""),y=Fe(e,"usage",null),yr(y)||(y=null)}catch{g=!1}if(!g)return u({stderr:Yr(d,500,Bn),code:c.status,error:"INVALID_RESPONSE: missing output array",errorType:"invalid-response",usage:y});let v=Dn(f),b=Dn(m),w=v;"completed"===v?w="stop":"incomplete"===v&&(w="max_output_tokens"===b?"length":b||"incomplete");let _={finishReason:w,truncated:"incomplete"===v},k=m||h||f||"unknown",O=Br(p);if(O&&p.some(e=>"function_call"===Fe(e,"type","")))return u({stderr:Yr(d,1e3,Bn),code:c.status,error:"TOOL_CALLS_UNSUPPORTED: use a cli kind (opencode/claude/codex/antigravity) when tools are needed",errorType:"tool-unsupported",usage:y,..._});if(_.truncated){let e=O?Jn(p):"",t=Ln({finishReason:w,content:e,acceptTruncated:i,validator:o,reasoningTokens:Fe(y,"output_tokens_details.reasoning_tokens",null),label:`status=${f} (${k})`});return t.accept?u({ok:!0,stdout:e,code:c.status,usage:y,..._}):u({stdout:Yr(e,500,Bn),stderr:Yr((t.threw?`validate threw: ${t.threw}\n`:"")+d,500,Bn),code:c.status,error:t.error,errorType:"incomplete",usage:y,..._})}if(!O)return u({stderr:Yr(d,500,Bn),code:c.status,error:"INVALID_RESPONSE: missing output array",errorType:"invalid-response",usage:y,..._});if("completed"!==v)return u({stdout:Yr(Jn(p),500,Bn),stderr:Yr(d,500,Bn),code:c.status,error:`INCOMPLETE_RESPONSE: status=${f||"missing"} (${k})`,errorType:"incomplete",usage:y,..._});let T=Jn(p);if(""===T)return u({stderr:Yr(d,500,Bn),code:c.status,error:"INVALID_RESPONSE: no output_text in output messages",errorType:"invalid-response",usage:y,..._});if(o){let e=Cn(o,T);if(!e.pass)return u({stdout:Yr(T,500,Bn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:y,..._})}return u({ok:!0,stdout:T,code:c.status,usage:y,..._})}async function qn(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),zn),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)),p=!0===Fe(t,"acceptTruncated",null),f=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 Vn(f,h,m,a,d,p),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 Wn(e){if(yr(e)){for(let t in e)return!0;return!1}return!1}let Kn=kn,Gn={funWithMsg:e=>`(truncated, total ${e.length} chars)`};async function Hn(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="";try{c=await fetch(e,{method:"POST",headers:t,body:JSON.stringify(r),signal:a.signal}),d=await c.text()}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(d,1e3,Gn),code:c.status,error:`HTTP ${c.status}`,errorType:"http"});let p=null,f="",m=null;try{let e=JSON.parse(d);p=Fe(e,"answers",null),f=Fe(e,"model",""),vr(f)||(f=""),m=Fe(e,"usage",null),yr(m)||(m=null)}catch{p=null}if(!yr(p))return u({stderr:Yr(d,500,Gn),code:c.status,error:"INVALID_RESPONSE: missing answers object",errorType:"invalid-response",usage:m,modelResolved:f});let h=n.filter(e=>!yr(p[e]));if(h.length>0)return u({stderr:Yr(d,500,Gn),code:c.status,error:`INVALID_RESPONSE: missing answers for [${h.join(", ")}]`,errorType:"invalid-response",usage:m,modelResolved:f});let y=JSON.stringify(p);if(i){let e=Cn(i,y);if(!e.pass)return u({stdout:Yr(y,500,Gn),stderr:e.threw?`validate threw: ${e.threw}`:"",code:c.status,error:"OUTPUT_VALIDATION_FAILED",errorType:"validation",usage:m,modelResolved:f})}return u({ok:!0,stdout:y,code:c.status,usage:m,answers:p,modelResolved:f})}async function Yn(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"questions",null);if(!Wn(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),Kn),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)),p=n.replace(/\/+$/,"")+"/systemone",f={model:o,state:e,questions:r,...l},m=Object.keys(yr(f.questions)?f.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 Hn(p,h,f,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 Xn={opencode:Tn,claude:Sn,codex:An,antigravity:Mn,"api-openai-compat":Fn,"api-openai-responses":qn,"api-typesafe-systemone":Yn};function Qn(e){return e!=e}function Zn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,H(e))}var eo=Math.max;function to(e,t,r,n){e=G(e)?e:Zn(e),r=r&&!n?Dr(r):0;var o=e.length;return r<0&&(r=eo(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,Qn,r)}(e,t,r)>-1}async function ro(e,t,r={}){let n=H(Xn);return vr(e)&&to(n,e)?(0,Xn[e])(t,r):vn(`unknown ai kind: "${e}" (available: ${n.join(", ")})`)}let no=["providers","budgetMs","minAttemptMs","cooldownMs","shouldStop","coolDetect","store","onEvent","meta"],oo=["id","keys","meta"],io=kn,lo={cursors:{}};function uo(e){return void 0!==Fe(e,"truncated",void 0)?{truncated:e.truncated,finishReason:e.finishReason}:{}}function ao(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("unknown ai kind"))))))}async function so(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:{}}:lo),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 p=()=>{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 f=Fe(t,"onEvent",null),m=e=>{if(Jr(f))try{f(e)}catch{}},h=hr(t,no),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 f=Fe(r,"kind",null),b=Fe(r,"model",null),w=Fe(r,"keys",null),_=Br(w)?w.filter(vr):[],k=_.length,O=hr(r,oo),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(p())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),io);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:f,model:b});let x=await ro(f,e,w);if(x.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:x.durationMs}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"ok",durationMs:x.durationMs,...void 0!==x.usage?{usage:x.usage}:{},...uo(x)}),{...x,providerId:o,keyIndex:r,kind:f,model:b,tried:y};if(g=x,v={providerId:o,keyIndex:r,kind:f,model:b},s>0&&d){let e=429===x.code||vr(x.error)&&0===x.error.indexOf("TIMEOUT");if(!e&&null!==c)try{e=!0===c(x)}catch{}e&&(u.cooling[o]=Date.now(),a(),m({type:"cooled",providerId:o,keyIndex:r,keyId:n,error:x.error,cooldownMs:s}))}ao(x)?(m({type:"skip-group",providerId:o,keyIndex:r,keyId:n,error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"skip-group",error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr,durationMs:x.durationMs,...void 0!==x.usage?{usage:x.usage}:{},...uo(x)}),S=!0):(m({type:"next-key",providerId:o,keyIndex:r,keyId:n,error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr}),y.push({providerId:o,keyIndex:r,keyId:n,outcome:"next-key",error:x.error,errorType:x.errorType,stdout:x.stdout,stderr:x.stderr,durationMs:x.durationMs,...void 0!==x.usage?{usage:x.usage}:{},...uo(x)}))}}return{...g||vn("all providers failed","exec"),...v||{},tried:y}}function co(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 po(e){return!!Br(e)&&(0!==e.length&&(1!==e.length||!co(e[0])))}function fo(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 mo=["【執行約束】你只需把結果輸出在回覆內容中。","禁止建立、修改或刪除任何檔案,也不要執行任何會改動磁碟或系統狀態的指令——","呼叫端只讀取你的回覆文字,任何寫入磁碟的動作都不會被採用,只會製造無人讀取的垃圾檔。","唯讀查閱(讀取檔案、搜尋內容、列出目錄)不在此限,需要時請照常使用。","",""].join("\n"),ho=["providers","spec","check","parse","rawText","promptPrefix","meta"];async function yo(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);po(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=fo);let c=Fe(t,"check",null);Jr(c)||(c=null);let d=Fe(t,"acceptTruncated",null);Ur(d)||(d=s&&!u);let p=Fe(t,"promptPrefix",null);vr(p)||(p=""===p?"":mo);let f=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&&f(e)}});let m=await so(p+e,{...hr(t,ho),providers:i,validate:f,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 go(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(!po(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 yo(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:p,prompt:f,check:m,meta:h,...y}=i,g=Jr(f)?f(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 yo(g,{...u,...y,providers:r,spec:{use:d,fallback:p},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 vo=["id","use","fallback","prompt","check","meta"];async function bo(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(!po(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 p=Fe(c,"prompt",null);if(!Jr(p))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 f=p({input:n,prev:s,results:l,index:e});if(!vr(f))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,vo),h=await yo(f,{...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 wo=["stages","input"],_o=["task","agents","integrate","check","schema","minCandidates"];let ko={edit:"deny",bash:"ask"},Oo=["--tools","Read,Glob,Grep","--strict-mcp-config"],To=[{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:ko}},{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:ko}},{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:ko}},{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:ko}},{id:"oc:opencode/big-pickle",model:"opencode/big-pickle",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:ko}},{id:"oc:opencode/mimo-v2.6-flash-free",model:"opencode/mimo-v2.6-flash-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:ko}},{id:"oc:opencode/space-bunny-free",model:"opencode/space-bunny-free",kind:"opencode",provider:"opencode",useStoredAuth:!1,config:{permission:ko}},{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:Oo},{id:"claude:opus-5.5",model:"claude-opus-5-5",kind:"claude",extraArgs:Oo},{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 jo=Array.prototype.join;function So(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Oe;++t<r;)this.add(e[t])}function xo(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function Ao(e,t){return e.has(t)}So.prototype.add=So.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},So.prototype.has=function(e){return this.__data__.has(e)};function $o(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,p=!0,f=2&r?new So: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;p=!1;break}if(f){if(!xo(t,function(e,t){if(!Ao(f,t)&&(m===e||o(m,e,r,n,i)))return f.push(t)})){p=!1;break}}else if(m!==h&&!o(m,h,r,n,i)){p=!1;break}}return i.delete(e),i.delete(t),p}function Eo(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function Mo(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}var Io=a?a.prototype:void 0,No=Io?Io.valueOf:void 0;var Do=Object.prototype.hasOwnProperty;var Co="[object Arguments]",Lo="[object Array]",Po="[object Object]",Ro=Object.prototype.hasOwnProperty;function Uo(e,t,r,n,o,i){var l=O(e),u=O(t),a=l?Lo:At(e),s=u?Lo:At(t),c=(a=a==Co?Po:a)==Po,d=(s=s==Co?Po:s)==Po,p=a==s;if(p&&x(e)){if(!x(t))return!1;l=!0,c=!1}if(p&&!c)return i||(i=new ze),l||R(e)?$o(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=Eo;case"[object Set]":var a=1&n;if(u||(u=Mo),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=$o(u(e),u(t),n,o,i,l);return l.delete(e),c;case"[object Symbol]":if(No)return No.call(e)==No.call(t)}return!1}(e,t,a,r,n,o,i);if(!(1&r)){var f=c&&Ro.call(e,"__wrapped__"),m=d&&Ro.call(t,"__wrapped__");if(f||m){var h=f?e.value():e,y=m?t.value():t;return i||(i=new ze),o(h,y,r,n,i)}}return!!p&&(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:Do.call(t,c)))return!1}var d=i.get(e),p=i.get(t);if(d&&p)return d==t&&p==e;var f=!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)){f=!1;break}m||(m="constructor"==c)}if(f&&!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||(f=!1)}return i.delete(e),i.delete(t),f}(e,t,r,n,o,i))}function Fo(e,t,r,n,o){return e===t||(null==e||null==t||!y(e)&&!y(t)?e!=e&&t!=t:Uo(e,t,r,n,Fo,o))}function zo(e){return e==e&&!W(e)}function Bo(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function Jo(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,zo(o)]}return t}(e);return 1==t.length&&t[0][2]?Bo(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 p=n(s,c,a,e,t,d);if(!(void 0===p?Fo(c,s,3,n,d):p))return!1}}return!0}(r,e,t)}}function Vo(e,t){return null!=e&&t in Object(e)}function qo(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,Vo)}function Wo(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 Ko(e){return"function"==typeof e?e:null==e?ar:"object"==typeof e?O(e)?function(e,t){return Z(e)&&zo(t)?Bo(Re(e),t):function(r){var n=Fe(r,e);return void 0===n&&n===t?qo(r,e):Fo(t,n,3)}}(e[0],e[1]):Jo(e):Wo(e)}var Go,Ho=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),l=i.length;l--;){var u=i[Go?l:++n];if(!1===t(o[u],u,o))break}return e};var Yo=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&&Ho(e,t,H)}),Xo=Yo;function Qo(e,t){var r=-1,n=G(e)?Array(e.length):[];return Xo(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function Zo(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 ei(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 ti(e,t){let r="";if(vr(e)||kr(e))r=ei(e);else{if(!po(e))return{};o="",r=null==(n=e)?"":jo.call(n,o)}var n,o,i,l;return kr(t)&&(t=ei(t)),vr(t)&&(t=[t]),po(t)?(l=function(e){return ei(e)},function(e,t){let r=[],n=0;for(let o=0;o<t.length;o++){let i=t[o],l=Zo(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:Qo)(i,Ko(l)))):{}}function ri(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 ni(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Kr(e,e.length-t):""}function oi(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=ni(e,1);return":"===Gr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Gr(e,1)){let t=ni(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function ii(e){if(!vr(e))return"";let t=oi(e);if(t.isRoot)return t.path;let r=function(e){if(!vr(e))return"";let t=oi(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=oi(e=ni(e,r.length));return n.isRoot,n.path}function li(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 ui(e,t,r={}){let n=null,o=Fe(r,"fs"),i=ii(e);li(i,{fs:o})||function(e,t={}){let r=Fe(t,"fs");if(li(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 ai(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}:ui(e,l,{fs:r})}let si=2e4;function ci(e){return Fe(ri(e),"success",null)}function di(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 pi(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);Wn(o)||(o={});let i=Fe(t,"method",null);vr(i)||(i="GET");let l=Fe(t,"body",null);Wn(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),si),a=_n(Fe(t,"maxBodyBytes",null),1048576),s=Fe(t,"redact",null);po(s)||(s=[]);let c=e=>di(e,s).slice(0,300),d=new AbortController,p=setTimeout(()=>{d.abort()},u),f=null,m="";try{try{f=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: ${di(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}}(f,a);if(!e.ok)return d.abort(),n(!1,f.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,f.status,null,`request timeout over ${u}ms while reading body`,"timeout"):n(!1,f.status,null,`read body error: ${di(Fe(e,"message","unknown"),s)}`,"network")}}finally{clearTimeout(p)}if(401===f.status)return n(!1,f.status,null,`unauthorized(401), credential rejected (expired or revoked): ${c(m)}`,"auth");if(403===f.status)return n(!1,f.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===f.status)return n(!1,f.status,null,`rate limited(429) by usage endpoint: ${c(m)}`,"ratelimit");if(!f.ok)return n(!1,f.status,null,`http error(${f.status}): ${c(m)}`,"http");let h=null;try{h=JSON.parse(m)}catch(e){return n(!1,f.status,null,`invalid json: ${c(m)}`,"parse")}return n(!0,f.status,h,"","")}function fi(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 mi(e,t){if(!vr(t))return"";let r=fi(e);return""===r?t:`${r}(${t})`}function hi(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=fi(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 yi(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);po(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 gi=604800,vi=[["five_hour",18e3,""],["seven_day",gi,""],["seven_day_opus",gi,"Opus"],["seven_day_sonnet",gi,"Sonnet"],["seven_day_cowork",gi,"Cowork"],["seven_day_oauth_apps",gi,"OAuth apps"]],bi=["ANTHROPIC_API_KEY","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX"];function wi(e){let t=Fe(e,"group",""),r=null;"session"===t?r=18e3:"weekly"===t&&(r=gi);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 hi({key:Fe(e,"kind",""),label:mi(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:_i,buildSpawnEnv:ki}=dn;async function Oi(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"),p=new Map,f=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"),p=Fe(n,"onStderr"),f=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,x={pid:null,exited:!1,write:null,writeLine:null,stop:null},A=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:x.pid,...e},x.exited=!0,Jr(f)&&f(y),j.resolve(y))},$=()=>S||(S=wr(),j.then(e=>{S.resolve(e)}),S);if(!vr(e))return x.write=async()=>!1,x.writeLine=async()=>!1,x.stop=$,setTimeout(()=>{A({error:"command 須為非空字串"})},1),x;let E,M=_i(e,r);try{E=t.spawn(M.file,M.args,{cwd:o,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:ki(i),...M.opt})}catch(e){return x.write=async()=>!1,x.writeLine=async()=>!1,x.stop=$,setTimeout(()=>{A({error:`${e.code||"UNKNOWN"}: ${e.message}`})},1),x}x.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(p)&&p(t),C(t))}),E.stdin.on("error",()=>{});let L=e=>{v=!0,ln(E.pid).catch(()=>{}),T=setTimeout(()=>{h||A({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=>{A({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(p)&&p(n),C(n));let o="";g?o=`TIMEOUT after ${l/1e3}s`:v||(t?o=`Signal: ${t}`:0!==e&&(o=`Exit code ${e}`)),A({code:e,signal:t,error:o})}),x.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},x.writeLine=e=>x.write(String(e)+"\n"),x.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},x}(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=p.get(t.id);return void(e&&(p.delete(t.id),e.pm.resolve({msg:t})))}r&&vr(t.method)?Jr(d)&&d(t,v):Jr(c)&&c(t)},onExit:e=>{f=e;for(let[t,r]of p)r.pm.resolve({exit:e});p.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(f||await v.stop(),e.notify);break}continue}let t=m;m+=1;let r=wr();if(p.set(t,{method:e.method,pm:r}),!await v.writeLine(JSON.stringify(g(t,e.method,e.params)))){p.delete(t),w=b(f||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 Ti(e,t){for(let r of t){let t=Fe(e,r,"");if(vr(t))return t}return""}function ji(e,t,r){if(!Wn(e))return null;let n=Fe(e,"limit_window_seconds",null),o=kr(n)?Fr(n):null;return hi({key:t,label:mi(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 Si(e,t,r){for(let n of[e,Fe(e,"rate_limit",null),Fe(e,"rateLimit",null)]){if(!Wn(n))continue;let e=Fe(n,t,null);if(Wn(e)||(e=Fe(n,r,null)),Wn(e))return e}return null}function xi(e){if(!Wn(e))return null;if(void 0!==Fe(e,"used_percent",void 0))return e;let t=Fe(e,"window",null);if(Wn(t))return t;let r=Fe(e,"rate_limit",null);return Wn(r)&&void 0!==Fe(r,"used_percent",void 0)?r:null}function Ai(e){let t=Ti(e,["email"]),r=Ti(e,["plan_type"]),n=[];for(let t of["primary","secondary"]){let r=ji(Fe(e,`rate_limit.${t}_window`,null),t,"");null!==r&&n.push(r)}for(let t of["primary","secondary"]){let r=ji(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(po(e))return e;if(Wn(e))return Object.keys(e).map(t=>{let r=e[t];if(!Wn(r))return r;let n=Ti(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(!Wn(t))continue;let r=Ti(t,["limit_name","metered_limit_name","name","id"]);""===r&&(r=`additional_${e+1}`);let i=Ti(t,["display_name","title","name","limit_name","metered_limit_name"]),l=""===i?r:i,u=`${r} ${i}`.toLowerCase(),a=Si(t,"primary_window","primaryWindow"),s=Si(t,"secondary_window","secondaryWindow");if(null===a&&null===s){let e=xi(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=ji(a,`${r}:primary`,l);null!==c&&n.push(c);let d=ji(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 $i=[{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 Ei(e,t,r){if(!Wn(e))return null;let n=Fe(e,"windowDurationMins",null),o=kr(n)?60*Fr(n):null;return hi({key:t,label:mi(o,r),windowSeconds:o,usedPercent:Fe(e,"usedPercent",null),resetAt:Fe(e,"resetsAt",""),scope:r})}async function Mi(t,r,n){let o=Fe(t,"env",null);yr(o)||(o=process.env);let i=e.join(r,"auth.json"),l=ci(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 p=Fe(t,"userAgent",null);vr(p)||(p="codex-cli/0.153.0");let f=Fe(t,"originator",null);vr(f)||(f="codex_cli_rs");let m={Authorization:`Bearer ${u}`,"User-Agent":p,originator:f};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 pi(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=Ai(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 Ii(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 Ni="1.1.11",Di={"5h":18e3,five_hour:18e3,"five-hour":18e3,weekly:604800,week:604800,daily:86400,day:86400};function Ci(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!==Di[t])return Di[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=fi(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"),hi({key:r,label:a,windowSeconds:l,usedPercent:o,resetAt:Fe(t,"reset_time",""),scope:i,active:!1,severity:s})}async function Li(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 ${Ni} 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 Pi={KINDS:H(Xn),NO_SIDE_EFFECT:mo,dispatchAi:ro,dispatchAiFallback:so,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={})=>yo(e,{...r,...n,providers:t}),runFanout:(e={})=>go({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runRolePipeline:(e={})=>bo({...e,providers:t,callOpt:{...r,...Fe(e,"callOpt",{})}}),runFanoutPipeline:(e={})=>async function(e={}){let t=Date.now(),r=await go(hr(e,wo));if(!r.ok)return{ok:!1,result:null,A:r,B:null,totalMs:Date.now()-t,error:`A failed: ${r.error}`};let n=await bo({...hr(e,_o),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:An,dispatchAntigravity:Mn,dispatchApiOpenaiCompat:Fn,dispatchApiOpenaiResponses:qn,dispatchApiTypesafeSystemone:Yn,providers:To,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(po(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(ti(t,e),"bestMatch.target",null):null}let a=[],s=[];for(let e of l){let t=Fe(e,"envVar",null);if(!vr(t)||po(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 p={};for(let e of a)p[e.id]=e;return{providers:a,table:p,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);po(n)||(n=["at"]);let o=Fe(t,"stamp",null);return Jr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=ri(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()};ai(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=ri(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];ai(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"),p=_n(Fe(r,"timeoutMs",null),si),f=Fe(r,"userAgent",null);vr(f)||(f="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=ci(c),v=ci(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=>yi("claude",{email:w,emailWant:i,plan:_,planTier:k,source:"anthropic-oauth-usage-api",durationMs:Date.now()-o,...e});if(!vr(b)){let e=bi.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":f,"Content-Type":"application/json"},j=await pi(h,{headers:T,timeoutMs:p,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 pi(y,{headers:T,timeoutMs:p,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 x=[],A=Fe(S,"limits",null);return x=po(A)?A.map(wi):vi.map(([e,t,r])=>function(e,t,r,n){let o=Fe(e,t,null);return null==o?null:hi({key:t,label:mi(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:x,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),si),c=!1!==Fe(r,"useAppServer",!0),d=!1!==Fe(r,"fallbackHttp",!0),p=(e,t)=>yi("codex",{emailWant:i,source:e,durationMs:Date.now()-o,...t}),f=null;if(c){let e=await async function(e){let t=Fe(e,"exe",null);vr(t)||(t="codex");let r=await Oi(t,["app-server","--stdio"],$i,{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(!Wn(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=Ei(Fe(s,"primary",null),"primary","");null!==d&&a.push(d);let p=Ei(Fe(s,"secondary",null),"secondary","");null!==p&&a.push(p);let f=Fe(o,"rateLimitsByLimitId",null);if(Wn(f))for(let e of Object.keys(f)){if(e===c)continue;let t=f[e],r=Fe(t,"limitName","");vr(r)||(r=e);for(let n of["primary","secondary"]){let o=Ei(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 p("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 p("codex-app-server",{email:e.email,plan:e.plan,error:e.error,errorType:e.errorType,raw:e.raw});if(f=e,!d)return p("codex-app-server",{error:e.error,errorType:e.errorType,raw:e.raw})}let m=await Mi(r,a,s),h=null!==f?` (app-server path failed: ${f.error})`:"";return m.ok?p("chatgpt-wham-usage-api",{email:m.email,plan:m.plan,windows:m.windows,credits:m.credits,raw:{codexHome:a,appServerError:null!==f?f.error:"",...m.raw}}):p("chatgpt-wham-usage-api",{email:m.email,plan:m.plan,error:`${m.error}${h}`,errorType:m.errorType,raw:null!==f?f.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),p=Fe(i,"withCredits",null);Ur(p)||(p=!1);let f=e=>yi("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 f({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=Ii(e),n=Ii(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,Ni);if(null===t||t<0)return f({error:`agy version [${m||"unknown"}] is below ${Ni}; 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 Li(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&&p&&(g=await Li(a,"/credits",{timeoutMs:s,cwd:c,logFile:""}))}finally{try{r.unlinkSync(h)}catch(e){}}if(!y.ok)return f({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(po(_))for(let e of _){let t=Fe(e,"buckets",null);if(po(t))for(let r of t){let t=Ci(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}),f({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 Pi});
7
7
  //# sourceMappingURL=w-dispatch-ai.umd.js.map