w-dispatch-ai 1.0.33 → 1.0.35

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 (57) hide show
  1. package/README.md +8 -8
  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 +1 -1
  5. package/docs/adapters.mjs.html +1 -1
  6. package/docs/budgetFor.mjs.html +1 -1
  7. package/docs/buildValidator.mjs.html +1 -1
  8. package/docs/castPintOr.mjs.html +1 -1
  9. package/docs/dfTimeoutMs.mjs.html +1 -1
  10. package/docs/dispatchAi.mjs.html +1 -1
  11. package/docs/dispatchAiFallback.mjs.html +1 -1
  12. package/docs/dispatchAiWkf.mjs.html +1 -1
  13. package/docs/dispatchAntigravity.mjs.html +1 -1
  14. package/docs/dispatchApiOpenaiCompat.mjs.html +1 -1
  15. package/docs/dispatchApiOpenaiResponses.mjs.html +1 -1
  16. package/docs/dispatchApiTypesafeSystemone.mjs.html +1 -1
  17. package/docs/dispatchClaude.mjs.html +13 -3
  18. package/docs/dispatchCodex.mjs.html +2 -2
  19. package/docs/dispatchOpencode.mjs.html +43 -11
  20. package/docs/getCliArgs.mjs.html +1 -1
  21. package/docs/getErrorResult.mjs.html +1 -1
  22. package/docs/getErrorType.mjs.html +1 -1
  23. package/docs/global.html +9 -9
  24. package/docs/index.html +1 -1
  25. package/docs/quota_dfQuotaTimeoutMs.mjs.html +1 -1
  26. package/docs/quota_fetchQuotaJson.mjs.html +1 -1
  27. package/docs/quota_fromCodexUsageHttp.mjs.html +1 -1
  28. package/docs/quota_getQuotaAntigravity.mjs.html +1 -1
  29. package/docs/quota_getQuotaClaude.mjs.html +1 -1
  30. package/docs/quota_getQuotaCodex.mjs.html +1 -1
  31. package/docs/quota_readJsonOrNull.mjs.html +1 -1
  32. package/docs/quota_toQuotaLabel.mjs.html +1 -1
  33. package/docs/quota_toQuotaResult.mjs.html +1 -1
  34. package/docs/quota_toQuotaScopedLabel.mjs.html +1 -1
  35. package/docs/quota_toQuotaWindow.mjs.html +1 -1
  36. package/docs/readEnvFile.mjs.html +1 -1
  37. package/docs/resolveProviders.mjs.html +2 -2
  38. package/docs/wkf_callAiWithFallback.mjs.html +2 -2
  39. package/docs/wkf_createFileStore.mjs.html +1 -1
  40. package/docs/wkf_createUsageCounter.mjs.html +1 -1
  41. package/docs/wkf_extractJsonLoose.mjs.html +1 -1
  42. package/docs/wkf_noSideEffectPrefix.mjs.html +4 -3
  43. package/docs/wkf_runFanout.mjs.html +1 -1
  44. package/docs/wkf_runFanoutPipeline.mjs.html +1 -1
  45. package/docs/wkf_runRolePipeline.mjs.html +1 -1
  46. package/docs/wkf_salvageTruncatedArray.mjs.html +1 -1
  47. package/package.json +1 -1
  48. package/src/dispatchClaude.mjs +12 -2
  49. package/src/dispatchCodex.mjs +1 -1
  50. package/src/dispatchOpencode.mjs +41 -9
  51. package/src/providers.mjs +41 -2
  52. package/src/resolveProviders.mjs +1 -1
  53. package/src/wkf/callAiWithFallback.mjs +1 -1
  54. package/src/wkf/noSideEffectPrefix.mjs +3 -2
  55. package/test/tools/fakeCliForTest.mjs +1 -0
  56. package/test/unit-dispatchOpencode.test.mjs +21 -0
  57. package/test/unit-providers.test.mjs +6 -1
package/README.md CHANGED
@@ -144,7 +144,7 @@ let test = async () => {
144
144
  //未知供應商回傳error結果物件, 不會reject
145
145
  let r4 = await wdi.dispatchAi('gemini', prompt)
146
146
  console.log('invalid kind:', r4.ok, r4.error)
147
- // => invalid kind: false unknown ai kind: "gemini" (available: opencode, claude, codex, antigravity, api-openai-compat)
147
+ // => invalid kind: false unknown ai kind: "gemini" (available: opencode, claude, codex, antigravity, api-openai-compat, api-openai-responses, api-typesafe-systemone)
148
148
 
149
149
  //prompt非有效字串亦回傳error結果物件
150
150
  let r5 = await wdi.dispatchClaude('')
@@ -218,7 +218,7 @@ await test()
218
218
  | `model` | String | `''` | 模型ID,未給予則不帶模型旗標,由CLI自行決定 |
219
219
  | `extraArgs` | Array | `[]` | 額外命令列旗標字串陣列,接於固定旗標之後 |
220
220
  | `timeoutMs` | Integer | `300000` | 逾時毫秒,逾時將強制關閉子進程及其子孫程序;**全套件統一預設**(所有轉接器與各層一致,單一來源`dfTimeoutMs.mjs`),由opt傳入即可覆寫 |
221
- | `cwd` | String | `process.cwd()` | 子進程工作目錄 |
221
+ | `cwd` | String | `process.cwd()` | 子進程工作目錄。**`dispatchOpencode` 另會把其絕對路徑同步注入環境變數 `PWD`**(覆寫呼叫端 `env` 內之同名變數):opencode 以**繼承之 `PWD`** 優先於子進程真實 cwd 決定 session 目錄(原始碼 `run.ts`:`process.env.PWD ?? process.cwd()`),而 Git Bash 與 Linux/macOS 的 shell 都會設 `PWD`;2026-09-23 實測未同步時 opencode 會在父程序目錄讀寫(讀相對路徑回 NOTFOUND 且 `ok: true`,允許寫檔時檔案落在父程序目錄)。claude/codex 同組探針遵循 cwd,不受影響 |
222
222
  | `validate` | String\|Function | `undefined` | `stdout`驗證規則,可用`'nonempty'`、`'json'`、`'min:100'`,多規則以逗號串接,亦可給予`(stdout)=>Boolean` |
223
223
  | `maxRetries` | Integer | `0` | 失敗後最大重試次數,遇`ENOENT`或exit code 2視為不可重試而立即中止 |
224
224
 
@@ -236,7 +236,7 @@ await test()
236
236
  #### Options only for dispatchClaude:
237
237
  | key | type | default | description |
238
238
  | --- | --- | --- | --- |
239
- | `skipPermissions` | Boolean | `true` | 是否帶`--dangerously-skip-permissions`旗標,`false`代表保留CLI權限閘門(見上方Security說明) |
239
+ | `skipPermissions` | Boolean | `true` | 是否帶`--dangerously-skip-permissions`旗標,`false`代表保留CLI權限閘門(見上方Security說明)。`extraArgs` **勿帶 `--bare`**:bare 模式不讀 OAuth 登入會直接認證失敗,且官方預告 `--bare` 將成為 `-p` 之預設(屆時訂閱條目會一併失效,見 `dispatchClaude.mjs` 檔頭);帶 `--restricted` 時本欄須為 `false`(restricted 拒絕 bypassPermissions,2026-09-23 實測同時帶即報錯) |
240
240
 
241
241
  #### Options only for dispatchCodex:
242
242
  | key | type | default | description |
@@ -248,7 +248,7 @@ await test()
248
248
  Codex 0.149 起 Windows 預設走 elevated 沙箱(專用使用者 `CodexSandboxOffline`/`CodexSandboxOnline`+WFP 網路過濾+家目錄 read ACL),**需一次性管理員設定**;設定未完成時 execpolicy 會在 spawn 前拒絕**所有** shell 命令(含 `Get-Content`、`rg` 等唯讀命令),錯誤形如 `CreateProcess { message: "Rejected(\"... blocked by policy\")" }`——Codex 讀檔即是執行 shell,等同完全不能讀檔。
249
249
 
250
250
  - **判別**:`~/.codex/.sandbox/setup_marker.json` 不存在、且 `~/.codex/.sandbox/sandbox.<日期>.log` 只有 `START` 沒有 `SUCCESS` = 設定未完成。
251
- - **正解**:以互動模式跑一次 `codex` 完成設定(會要求 UAC 提權),完成後 `setup_marker.json` 出現,`read-only`/`workspace-write` 皆可正常執行命令(2026-08-26 於 Codex 0.149.0+Windows 11 26200 實測:設定完成前全擋、完成後五種設定全通)。
251
+ - **正解**:以互動模式跑一次 `codex` 完成設定(會要求 UAC 提權),完成後 `setup_marker.json` 出現,`read-only`/`workspace-write` 皆可正常執行命令(2026-08-26 於 Codex 0.149.0+Windows 11 26200 實測:設定完成前全擋、完成後五種設定全通)。2026-09-23 補:`windows.sandbox` 於 0.156.1 之官方 config reference 仍為 `unelevated | elevated`;新版 Windows sandbox 文件另載明 elevated 設定失敗時 Codex 會改用 unelevated(「Codex switched me to the unelevated sandbox」),「全擋」為 0.149 之觀察、未於未設定之機器以新版重測。
252
252
  - **臨時繞道**:`extraArgs: ['--config', 'windows.sandbox="unelevated"']`——跳過管理員設定即可執行,但**隔離較弱**(無專用使用者與網路過濾);本套件**刻意不**將此設為 Windows 預設,避免在已完成設定的機器上默默降級沙箱。
253
253
  - **靜默失敗警語**:被擋時 Codex 常回「請貼上檔案內容」之合法字串,會通過 `validate: 'nonempty'` 被當成功。凡需 Codex 讀檔的任務,`validate`/工作流 `check` 應要求回覆**引用指定行原文**,不要只驗非空;派長任務前先以「讀一個檔並引用第 N 行」做最小探測。
254
254
 
@@ -389,7 +389,7 @@ let r = await wdi.dispatchAiFallback(state, { providers: jev, questions })
389
389
  | `minAttemptMs` | Integer | `20000` | 單次嘗試之最低剩餘預算,低於此值即停止並回報`budget exhausted` |
390
390
  | `store` | Object | 行程內記憶體 | 狀態持久化`{get:()=>state, set:(state)=>{}}`,state含`cursors`(逐群組游標)與`cooling`(供應商冷卻時間戳,僅啟用cooldownMs時使用);假定單行程序列調用。跨行程持久化可直接用`createFileStore`;自行實作時**務必整包原封存還**,白名單式挑欄位會在套件擴充state時靜默丟棄新欄位 |
391
391
  | `cooldownMs` | Integer | `0`不啟用 | 供應商冷卻視窗:條目(限有明給id者)遭遇**限流(HTTP 429,僅api類可偵測)或逾時(TIMEOUT)**後,於視窗內之後續呼叫中被**移至鏈尾(只降序不移除)**——前面全敗時仍會被嘗試、任一次成功立即解除,故不存在把已恢復服務冰住的問題。多階段工作流可大幅省去逐階段重踩已失效供應商的成本(使用端實測107s→15s)。注意啟用時providers順序會被暫時重排,此即機制目的 |
392
- | `coolDetect` | Function | 無 | 冷卻觸發之**注入判定**`(r)=>Boolean`,收完整失敗結果(含`stdout`、`stderr`、`code`、`error`),回傳`true`即視同冷卻觸發(內建429/TIMEOUT觸發不受影響)。CLI類限流埋在stderr且各家字樣不同、隨版本漂移,**簽章表由觀察到字樣的呼叫端維護**,如`(r) => /FreeUsageLimitError/i.test(r.stderr \|\| '')`;漏判僅退回現狀(每階段重探一次)、誤判也只是降尾非移除,兩邊代價都有上限。僅`cooldownMs>0`時有效;回調拋出例外視同`false` |
392
+ | `coolDetect` | Function | 無 | 冷卻觸發之**注入判定**`(r)=>Boolean`,收完整失敗結果(含`stdout`、`stderr`、`code`、`error`),回傳`true`即視同冷卻觸發(內建429/TIMEOUT觸發不受影響)。CLI類限流字樣各家不同、隨版本漂移,且不一定在stderr(Claude Code之執行期失敗以result印在stdout,官方headless文件),**簽章表由觀察到字樣的呼叫端維護**,如`(r) => /FreeUsageLimitError/i.test(r.stderr \|\| '')`(注意:opencode 1.18.32 遇 Zen 免費層 429 時 `run` **不會結束**、stderr 只有 session 標頭,直到逾時才以 `TIMEOUT` 回報——內建 TIMEOUT 觸發已涵蓋;要讓字樣出現在 stderr 須於 `extraArgs` 加 `--print-logs --log-level ERROR`,2026-09-23 實測 DEBUG log 內為 `AI_APICallError: Rate limit exceeded`;不經本套件的原始 CLI 亦同);漏判僅退回現狀(每階段重探一次)、誤判也只是降尾非移除,兩邊代價都有上限。僅`cooldownMs>0`時有效;回調拋出例外視同`false` |
393
393
  | `shouldStop` | Function | 無 | 中止判定`()=>Boolean`,於**每次嘗試之間**檢查,`true`即停止遞補回報`ABORTED`——供成果已無人接收時(如server端客戶端斷線)止損,把「斷線後仍空耗整條鏈」縮成「至多再耗當前這一家」。**不中止進行中之嘗試**(不殺子進程/不斷開請求,見Known design notes)。經工作流層原樣轉傳:中止後每個後續呼叫進門即回`ABORTED`,整條工作流自然快速收束,無須逐層處理;回調拋出例外視同`false` |
394
394
  | `meta` | any | 無 | 保留鍵,同`providers[].meta`,永不轉傳 |
395
395
  | `onEvent` | Function | 無 | 事件回調`(ev)=>{}`,`ev.type`為`'try'`、`'ok'`、`'next-key'`、`'skip-group'`、`'budget-out'`、`'aborted'`、`'cooled'`(冷卻觸發,帶`error`與`cooldownMs`,僅啟用cooldownMs時出現);失敗事件另帶`errorType`、`stdout`(被拒回覆)與`stderr`(錯誤輸出,皆已截斷)供診斷;回調拋出例外不影響主流程 |
@@ -665,8 +665,8 @@ let a = await wdi.getQuotaAntigravity() // source: 'agy-print-usage'; windows
665
665
 
666
666
  | kind | 條目防寫欄位 | 機制 | 實測依據 |
667
667
  | --- | --- | --- | --- |
668
- | `opencode` | `config.permission: { edit: 'deny', bash: 'ask' }` | `edit` deny 涵蓋 write/edit/patch;`bash` 用 `ask` 而非 `deny`——`opencode run` 為非互動,`ask` 一律自動拒絕(stderr:`The user rejected permission`)。**不可改成 `bash: 'deny'`**:Zen 免費層閘門以「工具清單含不含 bash」判定是否為 opencode 本體,deny 會被判非 opencode 而回 403 FreeTierError;呼叫端也勿另傳 `--auto` | 2026-09-18 金絲雀實測(寫檔與 shell 建檔皆未落地) |
669
- | `claude` | `extraArgs: ['--disallowedTools', 'Write,Edit,NotebookEdit,Bash']` | CLI停用寫入類工具 | 2026-08 實測 |
668
+ | `opencode` | `config.permission: { edit: 'deny', bash: 'ask' }` | `edit` deny 涵蓋 write/edit/patch;`bash` 用 `ask` 而非 `deny`——`opencode run` 為非互動,`ask` 一律自動拒絕(stderr:`The user rejected permission`)。**不可改成 `bash: 'deny'`**:Zen 免費層閘門以「工具清單含不含 bash」判定是否為 opencode 本體,deny 會被判非 opencode 而回 403 FreeTierError;呼叫端也勿另傳 `--auto`(2026-09-23 實測:帶上即自動核准 bash,模型以 node 寫檔落地) | 2026-09-18 金絲雀實測(寫檔與 shell 建檔皆未落地);2026-09-23 於 1.18.32 重驗仍自動拒絕 |
669
+ | `claude` | `extraArgs: ['--tools', 'Read,Glob,Grep', '--strict-mcp-config']` | **白名單**:只開放讀檔三工具,並排除所有 MCP 工具。原本的黑名單 `--disallowedTools Write,Edit,NotebookEdit,Bash` **已失效**:Windows 版 Claude Code 另有 `PowerShell` 工具不在黑名單內,模型改用它寫檔;工具清單另含 Workflow、Cron、SendMessage 等及 claude.ai 連接器之 MCP 寫入工具。只用 `--tools` 不夠,MCP 工具須再加 `--strict-mcp-config` 才會排除。代價是沒有 WebFetch/WebSearch,需要時於條目覆寫。**邊界**:此鎖只管模型可用之工具;資料夾未受信任時 `-p` 仍會執行該專案 `.claude/settings.json` 的 hooks 與 `env`(官方 permissions 文件列為「Used」),在不信任的目錄派工可於條目另加 `--setting-sources user`(2026-09-23 實測可與本鎖及 skip 並用) | 2026-09-23 金絲雀實測(Claude Code 2.1.280:黑名單下 opus-5.5 與 sonnet 皆經 PowerShell 寫檔落地;白名單下工具清單恰為 Glob/Grep/Read、寫檔未落地、讀檔正常) |
670
670
  | `codex` | `sandbox: 'read-only'` | Codex沙箱唯讀模式 | 2026-08-26 於 Codex 0.149.0 實測可執行唯讀命令;前提是 Windows elevated 沙箱之一次性設定已完成,否則所有命令 `blocked by policy`(診斷見「Options only for dispatchCodex」) |
671
671
  | `antigravity` | `skipPermissions: false` | 保留agy權限閘門(不送`--dangerously-skip-permissions`) | 2026-08-15 canary實測:無此鎖時要求建檔**會真的落地**;`false`之下寫入被擋且**不卡逾時**(6.4s正常返回)、唯讀工具照常 |
672
672
 
@@ -677,7 +677,7 @@ let a = await wdi.getQuotaAntigravity() // source: 'agy-print-usage'; windows
677
677
  - `dispatchAi(kind, prompt, opt)`會把整個`opt`原樣轉傳對應轉接器,該轉接器用不到的鍵(例如輪替條目物件內的`kind`)會被忽略,故「供應商條目物件直接當`opt`」是預期用法;`dispatchAiFallback`之providers條目沿用同一約定。
678
678
  - `dispatchAiFallback`為單向單輪:全數群組試畢即回傳最後一筆失敗結果與`tried`歷程,不回頭重試已敗的組。跨次執行僅記憶游標,不設金鑰停用清單(理由見上方失敗分流說明);需跨次跳過特定金鑰時,由呼叫端依`tried`/`onEvent`內之`error`與`stderr`自行決策。
679
679
  - `shouldStop`**只在嘗試邊界檢查,不中止進行中之嘗試**(不殺子進程、不斷開HTTP請求):進行中嘗試之強制中止需侵入execCli層與各轉接器,屬已知設計取捨——最小版已把斷線後的損失從「整條鏈」縮成「至多再耗當前這一家」;如有實測場景證明不足再議完整版。
680
- - CLI類限流簽章**不進套件**:各家stderr字樣不同且隨CLI版本漂移,套件維護簽章表等同養一個自己驗證不了的分類器(與否決金鑰停用清單同一理由)。偵測經`coolDetect`依賴注入,由觀察到字樣的呼叫端維護。
680
+ - CLI類限流簽章**不進套件**:各家字樣(stdout或stderr)不同且隨CLI版本漂移,套件維護簽章表等同養一個自己驗證不了的分類器(與否決金鑰停用清單同一理由)。偵測經`coolDetect`依賴注入,由觀察到字樣的呼叫端維護。
681
681
  - `dispatchOpencode`之`key`與`provider`須同時給予才會注入金鑰;只給其一(或範例中`.env`缺鍵導致`key`為`undefined`)時不會報錯,而是靜默沿用CLI既有登入狀態。
682
682
  - 範例中之`process.loadEnvFile`需Node.js >= 20.12,僅範例使用,套件本身無此限制。
683
683
  - `config`以`OPENCODE_CONFIG_CONTENT`注入後,與使用者既有`opencode.jsonc`為覆蓋或合併關係未經實測確認;建議`config`內含該次調用所需之完整provider定義,不依賴與既有設定檔之合併行為。
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * w-dispatch-ai v1.0.33
2
+ * w-dispatch-ai v1.0.35
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("child_process"),require("path"),require("fs"),require("os"),require("crypto")):"function"==typeof define&&define.amd?define(["child_process","path","fs","os","crypto"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["w-dispatch-ai"]=t(e.child_process,e.path,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,T=j&&"object"==typeof module&&module&&!module.nodeType&&module,S=T&&T.exports===j?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 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 H(e){return null!=e&&M(e.length)&&!K(e)}function G(e){return H(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 Te,Se,xe,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/\\(\\)?/g,Me=(Te=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=je(Te,function(e){return 500===xe.size&&xe.clear(),e}),xe=Se.cache,Se),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 He=Object.prototype.hasOwnProperty;function Ge(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&&He.call(e,n))&&r.push(n);return r}function Ye(e){return H(e)?F(e,!0):Ge(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,G,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),Tt=oe(ht),St=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 Tt:return bt;case St: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,G(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:G)(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 Ht(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 Gt=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&&!Gt.call(e,"__proto__"))return!1;if(("constructor"===o||"prototype"===o)&&r<n-1)return!1}var i=Ht(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 Tr=/^\s+/;function Sr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&jr.test(e.charAt(t)););return t}(e)+1).replace(Tr,""):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=Sr(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 Hr(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 Gr(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Hr(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=e,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(e){let n=Fe(sn(e,{fs:r}),"success","");if(!vr(n))return null;let o=n.match(/%dp0%\\(node_modules\\[^"]+)"/i);if(!o)return null;let i=t.dirname(e),l=t.join(i,o[1]);return 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(t.isAbsolute(r))return r;try{let t=e.execFileSync("where",[r],{encoding:"utf8",timeout:5e3,windowsHide:!0,shell:!1,stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/),n=t.find(e=>/\.cmd$/i.test(e));return n||(t.find(e=>/\.exe$/i.test(e))||t[0]||r)}catch{return r}}(r);if(/\.exe$/i.test(o))return{file:o,args:n,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(t,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=Gr(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(t,r),g=e.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(e,t={}){if(!vr(e))return vn("prompt must be a non-empty string");let r=Fe(t,"exe",null);vr(r)||(r="opencode");let n=Fe(t,"model",null),o=Fe(t,"agent",null);vr(o)||(o="build");let i=Fe(t,"extraArgs",null),l=gn("run",["--agent",o],vr(n)?["-m",n]:[],i),u=Fe(t,"env",null);yr(u)||(u=void 0);let a=Fe(t,"config",null);yr(a)&&(a=JSON.stringify(a)),vr(a)&&(u={...u,OPENCODE_CONFIG_CONTENT:a});let s=Fe(t,"key",null),c=Fe(t,"provider",null),d=!1!==Fe(t,"useStoredAuth",null);vr(s)&&vr(c)?u={...u,OPENCODE_AUTH_CONTENT:JSON.stringify({[c]:{type:"api",key:s}})}:d||(u={...u,OPENCODE_AUTH_CONTENT:"{}"});let f=_n(Fe(t,"timeoutMs",null),kn),p=hr(t,On);return wn(await yn(r,l,{...p,input:e,env:u,timeoutMs:f}))}let Tn=["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,Tn);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=Gr(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:Sn,codex:An,antigravity:En,"api-openai-compat":Ln,"api-openai-responses":zn,"api-typesafe-systemone":Wn};function Hn(e){return e!=e}function Gn(e){return null==e?[]:function(e,t){return Ie(t,function(t){return e[t]})}(e,G(e))}var Yn=Math.max;function Xn(e,t,r,n){e=H(e)?e:Gn(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,Hn,r)}(e,t,r)>-1}async function Qn(e,t,r={}){let n=G(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 T=k>0?k:1,S=!1;for(let t=0;t<T&&!S;t++){if(f())return m({type:"aborted",providerId:o,keyIndex:null,keyId:o}),y.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...vn("ABORTED","aborted"),tried:y};let r=k>0?(j+t)%k:null,n=null===r?o:`${o}#${r}`,w={...h,...O};k>0&&(w.key=_[r]);let T=_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};T=Math.min(T,e)}w.timeoutMs=T,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}:{}}),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}:{}}))}}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=[{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:"agy:gemini-3.8-flash-high",model:"gemini-3.8-flash-high",kind:"antigravity",addDirs:["."],skipPermissions:!1},{id:"claude:sonnet",model:"sonnet",kind:"claude",extraArgs:["--disallowedTools","Write,Edit,NotebookEdit,Bash"]},{id:"codex:gpt-5.6-luna",model:"gpt-5.6-luna",kind:"codex",sandbox:"read-only"},{id:"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}}}];var bo=Array.prototype.join;function wo(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Oe;++t<r;)this.add(e[t])}function _o(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function ko(e,t){return e.has(t)}wo.prototype.add=wo.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},wo.prototype.has=function(e){return this.__data__.has(e)};function Oo(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 wo:void 0;for(i.set(e,t),i.set(t,e);++d<u;){var m=e[d],h=t[d];if(n)var y=l?n(h,m,d,t,e,i):n(m,h,d,e,t,i);if(void 0!==y){if(y)continue;f=!1;break}if(p){if(!_o(t,function(e,t){if(!ko(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 jo(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 So=a?a.prototype:void 0,xo=So?So.valueOf:void 0;var Ao=Object.prototype.hasOwnProperty;var $o="[object Arguments]",Mo="[object Array]",Eo="[object Object]",Io=Object.prototype.hasOwnProperty;function No(e,t,r,n,o,i){var l=O(e),u=O(t),a=l?Mo:At(e),s=u?Mo:At(t),c=(a=a==$o?Eo:a)==Eo,d=(s=s==$o?Eo:s)==Eo,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)?Oo(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=jo;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=Oo(u(e),u(t),n,o,i,l);return l.delete(e),c;case"[object Symbol]":if(xo)return xo.call(e)==xo.call(t)}return!1}(e,t,a,r,n,o,i);if(!(1&r)){var p=c&&Io.call(e,"__wrapped__"),m=d&&Io.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:Ao.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 Do(e,t,r,n,o){return e===t||(null==e||null==t||!y(e)&&!y(t)?e!=e&&t!=t:No(e,t,r,n,Do,o))}function Co(e){return e==e&&!W(e)}function Lo(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}function Po(e){var t=function(e){for(var t=G(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Co(o)]}return t}(e);return 1==t.length&&t[0][2]?Lo(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?Do(c,s,3,n,d):f))return!1}}return!0}(r,e,t)}}function Ro(e,t){return null!=e&&t in Object(e)}function Uo(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,Ro)}function Fo(e){return Z(e)?(t=Re(e),function(e){return null==e?void 0:e[t]}):function(e){return function(t){return Ue(t,e)}}(e);var t}function zo(e){return"function"==typeof e?e:null==e?ar:"object"==typeof e?O(e)?function(e,t){return Z(e)&&Co(t)?Lo(Re(e),t):function(r){var n=Fe(r,e);return void 0===n&&n===t?Uo(r,e):Do(t,n,3)}}(e[0],e[1]):Po(e):Fo(e)}var Bo,Jo=function(e,t,r){for(var n=-1,o=Object(e),i=r(e),l=i.length;l--;){var u=i[Bo?l:++n];if(!1===t(o[u],u,o))break}return e};var qo=function(e,t){return function(r,n){if(null==r)return r;if(!H(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&&Jo(e,t,G)}),Vo=qo;function Wo(e,t){var r=-1,n=H(e)?Array(e.length):[];return Vo(e,function(e,o,i){n[++r]=t(e,o,i)}),n}function Ko(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 Go(e,t){let r="";if(vr(e)||kr(e))r=Ho(e);else{if(!lo(e))return{};o="",r=null==(n=e)?"":bo.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=Ko(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:Wo)(i,zo(l)))):{}}function Yo(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 Xo(e,t){return vr(e)&&Wr(t)?0===(t=zr(t))?e:Kr(e,e.length-t):""}function Qo(e){if(!vr(e))return{path:"",isRoot:!1};for(;e.indexOf("\\\\")>=0;)e=e.replace("\\\\","\\");for(;e.indexOf("//")>=0;)e=e.replace("//","/");if(":"===Hr(e,1))return{path:`${e}\\`,isRoot:!0};if("\\"===Hr(e,1)){let t=Xo(e,1);return":"===Hr(t,1)?{path:e,isRoot:!0}:{path:t,isRoot:!1}}if("/"===Hr(e,1)){let t=Xo(e,1);return 0===t.length?{path:e,isRoot:!0}:{path:t,isRoot:!1}}return{path:e,isRoot:!1}}function Zo(e){if(!vr(e))return"";let t=Qo(e);if(t.isRoot)return t.path;let r=function(e){if(!vr(e))return"";let t=Qo(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=Qo(e=Xo(e,r.length));return n.isRoot,n.path}function ei(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 ti(e,t,r={}){let n=null,o=Fe(r,"fs"),i=Zo(e);ei(i,{fs:o})||function(e,t={}){let r=Fe(t,"fs");if(ei(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 ri(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}:ti(e,l,{fs:r})}let ni=2e4;function oi(e){return Fe(Yo(e),"success",null)}function ii(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 li(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),ni),a=_n(Fe(t,"maxBodyBytes",null),1048576),s=Fe(t,"redact",null);lo(s)||(s=[]);let c=e=>ii(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: ${ii(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: ${ii(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 ui(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 ai(e,t){if(!vr(t))return"";let r=ui(e);return""===r?t:`${r}(${t})`}function si(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=ui(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 ci(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 di=604800,fi=[["five_hour",18e3,""],["seven_day",di,""],["seven_day_opus",di,"Opus"],["seven_day_sonnet",di,"Sonnet"],["seven_day_cowork",di,"Cowork"],["seven_day_oauth_apps",di,"OAuth apps"]],pi=["ANTHROPIC_API_KEY","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX"];function mi(e){let t=Fe(e,"group",""),r=null;"session"===t?r=18e3:"weekly"===t&&(r=di);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 si({key:Fe(e,"kind",""),label:ai(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:hi,buildSpawnEnv:yi}=dn;async function gi(t,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(t))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(t,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,T=wr(),S=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),T.resolve(y))},$=()=>S||(S=wr(),T.then(e=>{S.resolve(e)}),S);if(!vr(t))return x.write=async()=>!1,x.writeLine=async()=>!1,x.stop=$,setTimeout(()=>{A({error:"command 須為非空字串"})},1),x;let M,E=hi(t,r);try{M=e.spawn(E.file,E.args,{cwd:o,stdio:["pipe","pipe","pipe"],windowsHide:!0,env:yi(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(S)return S;if(S=wr(),h)return S.resolve(y),S;b=!0;try{M.stdin.end()}catch{}return O=setTimeout(()=>{h||L("STOP_TIMEOUT(子進程未能結束)")},u),T.then(e=>{S.resolve(e)}),S},x}(t,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 vi(e,t){for(let r of t){let t=Fe(e,r,"");if(vr(t))return t}return""}function bi(e,t,r){if(!Bn(e))return null;let n=Fe(e,"limit_window_seconds",null),o=kr(n)?Fr(n):null;return si({key:t,label:ai(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 wi(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 _i(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 ki(e){let t=vi(e,["email"]),r=vi(e,["plan_type"]),n=[];for(let t of["primary","secondary"]){let r=bi(Fe(e,`rate_limit.${t}_window`,null),t,"");null!==r&&n.push(r)}for(let t of["primary","secondary"]){let r=bi(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=vi(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=vi(t,["limit_name","metered_limit_name","name","id"]);""===r&&(r=`additional_${e+1}`);let i=vi(t,["display_name","title","name","limit_name","metered_limit_name"]),l=""===i?r:i,u=`${r} ${i}`.toLowerCase(),a=wi(t,"primary_window","primaryWindow"),s=wi(t,"secondary_window","secondaryWindow");if(null===a&&null===s){let e=_i(t);if(null!==e){let t=Fe(e,"limit_window_seconds",null);/weekly|secondary|reserve/.test(u)||kr(t)&&Fr(t)>=518400?s=e:a=e}}let c=bi(a,`${r}:primary`,l);null!==c&&n.push(c);let d=bi(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 Oi=[{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 ji(e,t,r){if(!Bn(e))return null;let n=Fe(e,"windowDurationMins",null),o=kr(n)?60*Fr(n):null;return si({key:t,label:ai(o,r),windowSeconds:o,usedPercent:Fe(e,"usedPercent",null),resetAt:Fe(e,"resetsAt",""),scope:r})}async function Ti(e,r,n){let o=Fe(e,"env",null);yr(o)||(o=process.env);let i=t.join(r,"auth.json"),l=oi(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(e,"userAgent",null);vr(f)||(f="codex-cli/0.153.0");let p=Fe(e,"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(e,"usageUrl",null);vr(h)||(h="https://chatgpt.com/backend-api/wham/usage");let y=await li(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=ki(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 Si(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 xi="1.1.11",Ai={"5h":18e3,five_hour:18e3,"five-hour":18e3,weekly:604800,week:604800,daily:86400,day:86400};function $i(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!==Ai[t])return Ai[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=ui(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"),si({key:r,label:a,windowSeconds:l,usedPercent:o,resetAt:Fe(t,"reset_time",""),scope:i,active:!1,severity:s})}async function Mi(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 ${xi} 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 Ei={KINDS:G(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:Sn,dispatchCodex:An,dispatchAntigravity:En,dispatchApiOpenaiCompat:Ln,dispatchApiOpenaiResponses:zn,dispatchApiTypesafeSystemone:Wn,providers:vo,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(Go(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(e={}){let r=Fe(e,"file",null);if(!vr(r)){let n=Fe(e,"dir",null);if(!vr(n))throw new Error("createFileStore: file or dir is required");let o=Fe(e,"name",null);r=t.join(n,vr(o)?o:"ai-cursor.json")}let n=Fe(e,"ownKeys",null);lo(n)||(n=["at"]);let o=Fe(e,"stamp",null);return Jr(o)||(o=()=>(new Date).toISOString()),{file:r,get:()=>{let e=Yo(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()};ri(r,t,{useFormat:!0})}}},createUsageCounter:function(e={}){let r=Fe(e,"file",null);if(!vr(r)){let n=Fe(e,"dir",null);if(!vr(n))throw new Error("createUsageCounter: file or dir is required");let o=Fe(e,"name",null);r=t.join(n,vr(o)?o:"ai-usage.json")}let n=Fe(e,"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(e,"keepDays",null);Vr(o)||(o=14);let i=Fe(e,"keyOf",null);Jr(i)||(i=e=>Fe(e,"keyId",null)||Fe(e,"providerId",""));let l=()=>{let e=Yo(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];ri(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(e="",r={}){let o=Date.now(),i=vr(e)?e:"",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=t.join(u,".claude"),s=!1));let c=t.join(a,".credentials.json"),d=s?t.join(a,".claude.json"):t.join(u,".claude.json"),f=_n(Fe(r,"timeoutMs",null),ni),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=oi(c),v=oi(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=>ci("claude",{email:w,emailWant:i,plan:_,planTier:k,source:"anthropic-oauth-usage-api",durationMs:Date.now()-o,...e});if(!vr(b)){let e=pi.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"},T=await li(h,{headers:j,timeoutMs:f,redact:[b]});if(!T.ok){let e=T.error;if("auth"===T.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"===T.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:T.errorType})}let S=T.data;if(""===w&&m){let e=await li(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(S,"limits",null);return x=lo(A)?A.map(mi):fi.map(([e,t,r])=>function(e,t,r,n){let o=Fe(e,t,null);return null==o?null:si({key:t,label:ai(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(e="",r={}){let o=Date.now(),i=vr(e)?e:"",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=t.join(u,".codex")));let s=_n(Fe(r,"timeoutMs",null),ni),c=!1!==Fe(r,"useAppServer",!0),d=!1!==Fe(r,"fallbackHttp",!0),f=(e,t)=>ci("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 gi(t,["app-server","--stdio"],Oi,{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=ji(Fe(s,"primary",null),"primary","");null!==d&&a.push(d);let f=ji(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=ji(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(e="",i={}){let l=Date.now(),u=vr(e)?e:"",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=>ci("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=Si(e),n=Si(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,xi);if(null===t||t<0)return p({error:`agy version [${m||"unknown"}] is below ${xi}; 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=t.join(n.tmpdir(),`w-dispatch-ai-agy-${process.pid}-${o.randomBytes(4).toString("hex")}.log`),y=null,g=null,v="",b="";try{y=await Mi(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 Mi(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=$i(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 Ei});
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,T=j&&"object"==typeof module&&module&&!module.nodeType&&module,S=T&&T.exports===j?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 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 Te,Se,xe,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$e=/\\(\\)?/g,Me=(Te=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=je(Te,function(e){return 500===xe.size&&xe.clear(),e}),xe=Se.cache,Se),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),Tt=oe(ht),St=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 Tt:return bt;case St: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 Tr=/^\s+/;function Sr(e){return e?e.slice(0,function(e){for(var t=e.length;t--&&jr.test(e.charAt(t)););return t}(e)+1).replace(Tr,""):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=Sr(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 Tn=["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,Tn);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:Sn,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 T=k>0?k:1,S=!1;for(let t=0;t<T&&!S;t++){if(f())return m({type:"aborted",providerId:o,keyIndex:null,keyId:o}),y.push({providerId:o,keyIndex:null,keyId:o,outcome:"aborted"}),{...vn("ABORTED","aborted"),tried:y};let r=k>0?(j+t)%k:null,n=null===r?o:`${o}#${r}`,w={...h,...O};k>0&&(w.key=_[r]);let T=_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};T=Math.min(T,e)}w.timeoutMs=T,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}:{}}),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}:{}}))}}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:"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}}}];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 To(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}function So(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=To;case"[object Set]":var a=1&n;if(u||(u=So),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,T=wr(),S=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),T.resolve(y))},$=()=>S||(S=wr(),T.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 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(S)return S;if(S=wr(),h)return S.resolve(y),S;b=!0;try{M.stdin.end()}catch{}return O=setTimeout(()=>{h||L("STOP_TIMEOUT(子進程未能結束)")},u),T.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=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 Ti(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 Si(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:Sn,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"},T=await ui(h,{headers:j,timeoutMs:f,redact:[b]});if(!T.ok){let e=T.error;if("auth"===T.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"===T.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:T.errorType})}let S=T.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(S,"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})}(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),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=Ti(Fe(s,"primary",null),"primary","");null!==d&&a.push(d);let f=Ti(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=Ti(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 Si(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});
7
7
  //# sourceMappingURL=w-dispatch-ai.umd.js.map