cuelo 0.10.78 → 0.10.80

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 (71) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +30 -30
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +3 -3
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  20. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  25. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  26. package/.next/server/app/api/auth/all-providers/route.js.nft.json +1 -1
  27. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  28. package/.next/server/app/api/auth/login/[provider]/route.js.nft.json +1 -1
  29. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  30. package/.next/server/app/api/auth/logout/[provider]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/auth/providers/route.js +1 -1
  32. package/.next/server/app/api/auth/providers/route.js.nft.json +1 -1
  33. package/.next/server/app/api/updates/route.js +1 -1
  34. package/.next/server/app/index.html +1 -1
  35. package/.next/server/app/index.rsc +5 -5
  36. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  37. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  38. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  39. package/.next/server/app/index.segments/_index.segment.rsc +3 -3
  40. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  41. package/.next/server/app/page.js +4 -4
  42. package/.next/server/app/page_client-reference-manifest.js +1 -1
  43. package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/recover.html +1 -1
  45. package/.next/server/app/recover.rsc +3 -3
  46. package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
  47. package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
  49. package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
  50. package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
  52. package/.next/server/app-paths-manifest.json +30 -30
  53. package/.next/server/chunks/4975.js +1 -1
  54. package/.next/server/chunks/9110.js +1 -0
  55. package/.next/server/middleware-build-manifest.js +1 -1
  56. package/.next/server/pages/404.html +1 -1
  57. package/.next/server/pages/500.html +1 -1
  58. package/.next/server/server-reference-manifest.json +1 -1
  59. package/.next/static/chunks/app/{layout-d98ad797913b7436.js → layout-79cffd1cbcd8a154.js} +1 -1
  60. package/.next/static/chunks/app/{page-6c35bd3f88375f6e.js → page-b25a931337734494.js} +4 -4
  61. package/.next/static/css/{3cc9ed53e13c9f59.css → f55542101d0388e8.css} +1 -1
  62. package/.next/trace +108 -108
  63. package/.next/trace-build +1 -1
  64. package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
  65. package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +2 -2
  66. package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +6 -1
  67. package/Tools/OMP_Global_Config/agent/rules/subagent.md +1 -0
  68. package/package.json +1 -1
  69. package/.next/server/chunks/877.js +0 -1
  70. /package/.next/static/{2nym4lx9Ge0zSwL5gdIKJ → zZnvGwSBRCioF7dD0eANg}/_buildManifest.js +0 -0
  71. /package/.next/static/{2nym4lx9Ge0zSwL5gdIKJ → zZnvGwSBRCioF7dD0eANg}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":59891472,"timestamp":327156,"id":14,"parentId":1,"tags":{},"startTime":1792936413723,"traceId":"6c418e0ebe2fbcbe"},{"name":"run-typescript","duration":11038564,"timestamp":60566887,"id":11047,"parentId":1,"tags":{},"startTime":1792936473962,"traceId":"6c418e0ebe2fbcbe"},{"name":"static-check","duration":2392818,"timestamp":71778909,"id":11050,"parentId":1,"tags":{},"startTime":1792936485174,"traceId":"6c418e0ebe2fbcbe"},{"name":"static-generation","duration":5757681,"timestamp":74240420,"id":11224,"parentId":1,"tags":{},"startTime":1792936487636,"traceId":"6c418e0ebe2fbcbe"},{"name":"collect-build-traces","duration":12436664,"timestamp":74225473,"id":11221,"parentId":1,"tags":{},"startTime":1792936487621,"traceId":"6c418e0ebe2fbcbe"},{"name":"telemetry-flush","duration":44,"timestamp":86665116,"id":11233,"parentId":1,"tags":{},"startTime":1792936500061,"traceId":"6c418e0ebe2fbcbe"},{"name":"next-build","duration":86395025,"timestamp":270151,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1792936413666,"traceId":"6c418e0ebe2fbcbe"}]
1
+ [{"name":"run-webpack","duration":83366962,"timestamp":490319,"id":14,"parentId":1,"tags":{},"startTime":1792939418153,"traceId":"e6ecdabca5c3dd6c"},{"name":"run-typescript","duration":18421830,"timestamp":84246695,"id":11050,"parentId":1,"tags":{},"startTime":1792939501909,"traceId":"e6ecdabca5c3dd6c"},{"name":"static-check","duration":3264408,"timestamp":102743056,"id":11053,"parentId":1,"tags":{},"startTime":1792939520405,"traceId":"e6ecdabca5c3dd6c"},{"name":"static-generation","duration":8680620,"timestamp":106095336,"id":11227,"parentId":1,"tags":{},"startTime":1792939523758,"traceId":"e6ecdabca5c3dd6c"},{"name":"collect-build-traces","duration":18808917,"timestamp":106073468,"id":11224,"parentId":1,"tags":{},"startTime":1792939523736,"traceId":"e6ecdabca5c3dd6c"},{"name":"telemetry-flush","duration":74,"timestamp":124887314,"id":11236,"parentId":1,"tags":{},"startTime":1792939542550,"traceId":"e6ecdabca5c3dd6c"},{"name":"next-build","duration":124475114,"timestamp":412297,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1792939418075,"traceId":"e6ecdabca5c3dd6c"}]
@@ -9,7 +9,7 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
9
9
  const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
10
10
  const EXPECTED = {
11
11
  name: 'cuelo',
12
- version: '0.10.78',
12
+ version: '0.10.80',
13
13
  distribution: 'cuelo',
14
14
  coreVersion: '18.12.6',
15
15
  };
@@ -545,7 +545,7 @@ const HARD_FOCUS_PROFILES: Readonly<Record<string, string>> = {
545
545
  };
546
546
 
547
547
  /** NORMAL이지만 일반 소진 대체 대상이 아니라 Main이 ROUTING_REASON으로 고르는 후보. */
548
- const EXPLICIT_ONLY_NORMAL_PROFILES: Readonly<Record<string, true>> = { NORMAL_OPUS: true, NORMAL_DAYBREAK: true };
548
+ const EXPLICIT_ONLY_NORMAL_PROFILES: Readonly<Record<string, true>> = { NORMAL_OPUS: true, NORMAL_DAYBREAK: true, NORMAL_GEMINI: true, NORMAL_GLM: true };
549
549
 
550
550
  /**
551
551
  * 비-UI NORMAL 후보 순서. 기본은 Sonnet → DeepSeek(Hive 1017) → 코드 후보(Astra)다(2026-10-18 사용자 결정으로 2026-10-11의
@@ -1309,7 +1309,7 @@ export function registerMakerRouting(pi: ExtensionAPI, deps: RoutingDeps) {
1309
1309
  const toolParameters = parameters as unknown as ToolDefinition["parameters"];
1310
1310
  pi.registerTool({
1311
1311
  name: "maker_route", label: "Maker Route", loadMode: "essential", approval: "read",
1312
- description: `Main 전용 발주 준비. Jev가 위임 적합성·NORMAL/HARD 난이도·UI/UX 경계·HARD 지배 분야·owner 중복·Main의 결과 대기 여부(mainWaits)를 기존 한 배치에서 독립 판단한다. NORMAL UI/UX는 NORMAL_OPUS, 비-UI NORMAL의 기본 추천은 NORMAL_SONNET이며 ${DEEPSEEK_TRIGGER_NOTE}. 설정된 코드 후보 NORMAL_SOL(호환 식별자, 실제 모델은 후보 selector를 따름)은 NORMAL_SONNET과 NORMAL_DEEPSEEK를 모두 쓸 수 없을 때만 추천하고, Sonnet이 사용 불가·관측 소진이면 NORMAL_DEEPSEEK를 먼저 추천한다. 한도 미관측은 소진이 아니다. Sonnet 또는 NORMAL_DEEPSEEK가 사용 가능한데 NORMAL_SOL을 고르는 것은 추천 변경이라 ROUTING_REASON이 필요하다. 한도 여유·과거 성공률로 우월성을 추정하지 않는다. HARD_UI_OPUS·HARD_CODE_OPUS는 분야에 따른다. HARD_CODE_SONNET·HARD_CODE_ASTRA·명시 선택 전용 Daybreak Blue 후보(NORMAL_DAYBREAK·HARD_CODE_DAYBREAK, 자동 추천·폴백 순서에는 없음)·명시 NORMAL Opus와 추천 변경은 ROUTING_REASON이 필요하다. Maker는 '<후보 selector>:auto'로만 발주하며 강도는 child auto가 solutionSpace와 이후 Main 지시로 그 모델의 전체 단계(Opus는 max까지) 안에서 고른다. 새 UI/UX 경계는 기존 비-Opus owner를 freeze해 이관하되 실행 중 모델을 바꾸지 않는다. 소유권·warm/exact pin을 보존한다. Opus unavailable을 조용히 대체하지 않는다. 난이도를 Opus 선택 수단으로 부풀리지 않는다. history는 advisory이고 routing_verdict는 실제 spawn identity를 쓴다. task 원문을 Jev에 보내거나 동일 브리프를 중복 판단하지 않는다.`,
1312
+ description: `Main 전용 발주 준비. Jev가 위임 적합성·NORMAL/HARD 난이도·UI/UX 경계·HARD 지배 분야·owner 중복·Main의 결과 대기 여부(mainWaits)를 기존 한 배치에서 독립 판단한다. NORMAL UI/UX는 NORMAL_OPUS, 비-UI NORMAL의 기본 추천은 NORMAL_SONNET이며 ${DEEPSEEK_TRIGGER_NOTE}. 설정된 코드 후보 NORMAL_SOL(호환 식별자, 실제 모델은 후보 selector를 따름)은 NORMAL_SONNET과 NORMAL_DEEPSEEK를 모두 쓸 수 없을 때만 추천하고, Sonnet이 사용 불가·관측 소진이면 NORMAL_DEEPSEEK를 먼저 추천한다. 한도 미관측은 소진이 아니다. Sonnet 또는 NORMAL_DEEPSEEK가 사용 가능한데 NORMAL_SOL을 고르는 것은 추천 변경이라 ROUTING_REASON이 필요하다. 한도 여유·과거 성공률로 우월성을 추정하지 않는다. HARD_UI_OPUS·HARD_CODE_OPUS는 분야에 따른다. HARD_CODE_SONNET·HARD_CODE_ASTRA·명시 선택 전용 Daybreak Blue 후보(NORMAL_DAYBREAK·HARD_CODE_DAYBREAK, 자동 추천·폴백 순서에는 없음)·명시 선택 전용 Gemini·GLM 후보(NORMAL_GEMINI·HARD_CODE_GEMINI·NORMAL_GLM·HARD_CODE_GLM, 같은 방식)·명시 NORMAL Opus와 추천 변경은 ROUTING_REASON이 필요하다. Maker는 '<후보 selector>:auto'로만 발주하며 강도는 child auto가 solutionSpace와 이후 Main 지시로 그 모델의 전체 단계(Opus는 max까지) 안에서 고른다. 새 UI/UX 경계는 기존 비-Opus owner를 freeze해 이관하되 실행 중 모델을 바꾸지 않는다. 소유권·warm/exact pin을 보존한다. Opus unavailable을 조용히 대체하지 않는다. 난이도를 Opus 선택 수단으로 부풀리지 않는다. history는 advisory이고 routing_verdict는 실제 spawn identity를 쓴다. task 원문을 Jev에 보내거나 동일 브리프를 중복 판단하지 않는다.`,
1313
1313
  parameters: toolParameters,
1314
1314
  async execute(callId, params, signal, _onUpdate, ctx) {
1315
1315
  // core가 위 schema로 검증한 입력이며 SDK generic 경계에서 소실된 타입만 복원한다.
@@ -920,7 +920,11 @@
920
920
  "NORMAL_SOL": { "modelConfigPath": "modelRoles.implSol", "workClass": "NORMAL" },
921
921
  "HARD_CODE_ASTRA": { "modelConfigPath": "modelRoles.makerHardCodeAstra", "workClass": "HARD" },
922
922
  "NORMAL_DAYBREAK": { "modelConfigPath": "modelRoles.implDaybreak", "workClass": "NORMAL" },
923
- "HARD_CODE_DAYBREAK": { "modelConfigPath": "modelRoles.implDaybreak", "workClass": "HARD" }
923
+ "HARD_CODE_DAYBREAK": { "modelConfigPath": "modelRoles.implDaybreak", "workClass": "HARD" },
924
+ "NORMAL_GEMINI": { "modelConfigPath": "modelRoles.implGemini", "workClass": "NORMAL" },
925
+ "HARD_CODE_GEMINI": { "modelConfigPath": "modelRoles.implGemini", "workClass": "HARD" },
926
+ "NORMAL_GLM": { "modelConfigPath": "modelRoles.implGlm", "workClass": "NORMAL" },
927
+ "HARD_CODE_GLM": { "modelConfigPath": "modelRoles.implGlm", "workClass": "HARD" }
924
928
  },
925
929
  "candidateResolution": "each-candidate-lists-the-levels-its-registry-model-declares-for-maker-auto-a-model-without-declared-levels-is-unavailable-the-task-hook-accepts-only-the-auto-suffix-and-resolves-a-shared-model-to-the-recommended-profile-then-a-profile-of-the-recommended-work-class-then-its-first-profile",
926
930
  "criteria": {
@@ -954,6 +958,7 @@
954
958
  "override": "main-may-override-the-prepared-recommendation-with-ROUTING_REASON-without-another-judge-call"
955
959
  },
956
960
  "hardSelection": {
961
+ "explicitOnly": "user-decision-2026-10-25-the-four-profiles-sharing-the-implGemini-and-implGlm-slots-are-explicit-only-worker-or-verifier-candidates-never-recommended-excluded-from-the-NORMAL-fallback-and-trigger-first-orders-and-require-ROUTING_REASON-the-UI-UX-Opus-boundary-and-all-roles-are-unchanged",
957
962
  "selection": "expertise-first-hardFocus-UI_UX-selects-HARD_UI_OPUS-and-CODE_SYSTEM-selects-HARD_CODE_OPUS-regardless-of-main-model-family-HARD_CODE_SONNET-and-HARD_CODE_ASTRA-are-offered-only-as-alternatives-and-require-ROUTING_REASON-HARD_CODE_DAYBREAK-is-an-explicit-only-Sol-plus-automatic-Daybreak-alternative-user-decision-2026-10-22-also-requiring-ROUTING_REASON-NORMAL_DAYBREAK-shares-its-slot-is-never-recommended-and-is-excluded-from-the-NORMAL-fallback-order-eligibility-follows-the-account-access-program-and-is-never-forced-HARD_CODE_ASTRA-is-for-complex-non-UI-code-or-system-reasoning-when-main-wants-that-model-family-existing-eval-evidence-is-small-n-and-older-main-benchmarks-and-never-proves-Astra-dominance",
958
963
  "unknown": "mixed-or-unknown-focus-requires-main-to-select-and-record-ROUTING_REASON",
959
964
  "independence": "cross-frontier-is-an-exception-only-when-a-concrete-independent-judgment-from-the-main-is-required-main-records-that-need-in-ROUTING_REASON-never-mix-an-implementation-maker-with-an-implicit-independent-review-role",
@@ -64,6 +64,7 @@ description: SubAgent 위임 판단, 병렬 실행, 검수 계약과 Git·통신
64
64
  HARD는 `HARD_UI_OPUS`(`makerHardUiOpus`)·`HARD_CODE_OPUS`(`makerHardCodeOpus`)를 분야에 따라 고른다.
65
65
  `HARD_CODE_SONNET`(`makerHardCodeSonnet`)·`HARD_CODE_ASTRA`(`makerHardCodeAstra`)는 명시적 대안이며 `ROUTING_REASON`이 필요하다.
66
66
  GPT-6 Sol + 자동 Daybreak(`implDaybreak`, `openai-codex/gpt-6-sol:auto`)은 `NORMAL_DAYBREAK`(비-UI NORMAL)·`HARD_CODE_DAYBREAK`(HARD 코드)로 Main이 명시 선택할 때만 쓰며 `ROUTING_REASON`이 필요하다(2026-10-22 사용자 결정). 자동 추천·NORMAL 폴백 순서·UI/UX Opus 경계는 그대로다. daybreak_blue program은 core가 계정별 발견 자격에 따라 붙이며 강제하지 않는다(자격이 없으면 일반 Sol 호출).
67
+ Gemini 3.8 Flash(`implGemini`, `NORMAL_GEMINI`·`HARD_CODE_GEMINI`)와 GLM 5.3 Flash(`implGlm`, `NORMAL_GLM`·`HARD_CODE_GLM`)도 같은 명시 선택 전용 후보다(2026-10-25 사용자 결정: 역할은 그대로 두고, 사용자가 그 모델을 작업자·검증자로 지목하면 우회 경로 없이 Maker로 발주한다). `ROUTING_REASON`이 필요하고 자동 추천·폴백 순서·UI/UX Opus 경계는 그대로다.
67
68
  `HARD_CODE_ASTRA`는 복잡한 비-UI 코드·시스템 추론에서 그 모델 계열을 쓰려 할 때 Main이 명시적으로 고른다.
68
69
  기존 eval은 소표본(n=1)과 오래된 Main 벤치라 어느 쪽도 우월하다는 근거가 아니며 자동 승격·상시 게이트를 만들지 않는다.
69
70
  강도 하한·상한은 정책에 두지 않는다. 별도 접근 모드는 쓰지 않는다. Main 계열만으로
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cuelo",
3
- "version": "0.10.78",
3
+ "version": "0.10.80",
4
4
  "description": "CUELO — open-source AI coding agent workspace and harness for omp (oh-my-pi)",
5
5
  "homepage": "https://github.com/gim47656-ship-it/CUELO#readme",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- exports.id=877,exports.ids=[877,8741],exports.modules={5908:(a,b,c)=>{"use strict";function d(a,b={}){let c=b.intervalMs??6e4,e=b.now??Date.now,f=new Map,g=new Map;return{recover:(b,d={})=>{let h=g.get(b);if(h)return h.then(a=>({...a,shared:!0}));let i=e(),j=f.get(b);if(!d.force&&void 0!==j&&i-j<c)return Promise.resolve({outcome:"throttled",shared:!1});f.set(b,i);let k=a.refreshProvider(b,"online").then(()=>({outcome:"refreshed",shared:!1})).catch(a=>({outcome:"failed",shared:!1,error:function(a){let b=[],c=a;for(let a=0;a<3&&void 0!==c;a+=1){if(c instanceof Error){b.push(c.message),c=c.cause;continue}if("object"==typeof c&&null!==c){let a=c;"string"==typeof a.message&&b.push(a.message),"string"==typeof a.code&&b.push(a.code),"number"==typeof a.status&&b.push(`HTTP ${a.status}`),c=a.cause;continue}b.push(String(c));break}let d=b.join(" "),e=d.match(/\b(?:HTTP\s*)?([45]\d{2})\b/i)?.[1];if("401"===e||"403"===e||/\b(?:api[- ]?key|credential|authentication|unauthorized|forbidden)\b/i.test(d))return e?`provider authentication failed (HTTP ${e})`:"provider authentication failed";let f=d.match(/\b(EAI_AGAIN|ECONNREFUSED|ECONNRESET|ENETUNREACH|ENOTFOUND|ETIMEDOUT|UND_ERR_CONNECT_TIMEOUT|UND_ERR_HEADERS_TIMEOUT|UND_ERR_BODY_TIMEOUT)\b/i)?.[1];return f?f.toUpperCase():/\b(?:timed?\s*out|timeout)\b/i.test(d)?"request timed out":e?`HTTP ${e}`:"discovery request failed"}(a)})).finally(()=>{g.get(b)===k&&g.delete(b)});return g.set(b,k),k}}}function e(a){return a.providerKnown?"failed"===a.recovery.outcome?`Model ${a.selector} is not in the model list and the discovery refresh for provider "${a.provider}" failed: ${a.recovery.error??"unknown error"}.`:"throttled"===a.recovery.outcome?`Model ${a.selector} is not in the model list. Discovery for provider "${a.provider}" was refreshed recently, so this lookup did not fetch again.`:`Model ${a.selector} is not in the model list after refreshing discovery for provider "${a.provider}".`:`Unknown model provider "${a.provider}" for ${a.selector}: the provider is not registered.`}c.d(b,{fw:()=>d,zX:()=>e})},19225:(a,b,c)=>{"use strict";a.exports=c(44870)},28247:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{G:()=>j,z:()=>i});var e=c(87998),f=c(29843),g=c(38741),h=a([e,f,g]);async function i(){let{modelRegistry:a,authStorage:b}=await (0,g.getOmpRuntime)(),c=a.getAll(),d=new Map;for(let a of c)d.set(a.provider,(d.get(a.provider)??0)+1);let h=new Map;for(let a of(0,e.getOAuthProviders)())a.available&&h.set(a.storeCredentialsAs??a.id,{id:a.id,name:a.name});let i=new Map(f.PROVIDER_DESCRIPTORS.map(a=>[a.providerId,a])),j=new Set([...d.keys(),...h.keys(),...i.keys()]),k=new Map;for(let a of j){let c=b.credentials.list(a),d=c.some(a=>"oauth"===a.credential.type)?"oauth":c.length>0?"api_key":void 0;d&&k.set(a,d)}return[...j].sort().map(a=>{let c=h.get(a),e=b.keys.source(a);return{id:a,name:c?.name??a,hasApiKeyLogin:i.has(a)||d.has(a),hasOAuth:!!c,...c?.name?{oauthName:c.name}:{},status:{configured:void 0!==e,...e?.kind?{source:e.kind}:{}},...k.has(a)?{credentialType:k.get(a)}:{},modelCount:d.get(a)??0}})}function j(a){for(let b of(0,e.getOAuthProviders)())if(b.available&&(b.storeCredentialsAs??b.id)===a)return b.id}[e,f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},38741:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{findModelWithRecovery:()=>m,getOmpRuntime:()=>i,getSettingsForCwd:()=>j,invalidateOmpRuntime:()=>k,missingModelRecoveryFor:()=>l,recoverMissingModelRefs:()=>n});var e=c(92582),f=c(5908),g=a([e]);async function h(){let a=(0,e.getAgentDir)(),b=await e.Settings.init({agentDir:a}),c=await (0,e.discoverAuthStorage)(a),d=new e.ModelRegistry(c);return await d.refresh("online-if-uncached"),{agentDir:a,settings:b,authStorage:c,modelRegistry:d}}function i(){return globalThis.__ompRuntimePromise??=h().catch(a=>{throw globalThis.__ompRuntimePromise=void 0,a}),globalThis.__ompRuntimePromise}async function j(a){let{settings:b}=await i();return a&&b.getCwd()!==a?b.cloneForCwd(a):b}function k(){globalThis.__ompRuntimePromise=void 0}function l(a){let b=globalThis.__ompMissingModelRecovery??=new WeakMap,c=b.get(a);return c||(c=(0,f.fw)(a),b.set(a,c)),c}async function m(a,b,c,d={}){let e=a.find(b,c);if(e)return{model:e};let f=await l(a).recover(b,{force:d.forceDiscovery}),g=a.find(b,c);return g?{model:g}:{miss:{selector:`${b}/${c}`,provider:b,providerKnown:a.hasProvider(b),recovery:f}}}async function n(a,b){let c=new Set;for(let d of b)d.provider&&d.modelId&&(a.find(d.provider,d.modelId)||c.add(d.provider));0!==c.size&&await Promise.all([...c].map(b=>l(a).recover(b)))}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},78335:()=>{},89950:(a,b,c)=>{"use strict";c.d(b,{l:()=>h,z:()=>g});let d=new Set(["models_json_key","models_json_command"]),e={"openai-codex":"ChatGPT Plus/Pro","github-copilot":"GitHub Copilot"};function f(a){let b=new Set,c=[];for(let d of a)b.has(d.id)||(b.add(d.id),c.push(d));return c}function g(a){let b=[];for(let c of f(a)){if(!c.hasApiKeyLogin||c.status.source&&d.has(c.status.source))continue;let a=c.status.configured&&"oauth"!==c.credentialType;b.push({id:c.id,displayName:c.name,configured:a,...a&&c.status.source?{source:c.status.source}:{},modelCount:c.modelCount,supportsOAuth:c.hasOAuth})}return b}function h(a){let b=[];for(let c of f(a))c.hasOAuth&&b.push({id:c.id,name:e[c.id]??c.oauthName??c.name,usesCallbackServer:!1,loggedIn:"oauth"===c.credentialType,supportsApiKey:c.hasApiKeyLogin});return b}},92280:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},96487:()=>{}};