@herbertgao/pi-extensions 2026.9.9 → 2026.9.11

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 (170) hide show
  1. package/README.md +1 -0
  2. package/THIRD_PARTY_NOTICES.md +26 -0
  3. package/node_modules/@herbertgao/pi-bark/package.json +2 -2
  4. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -2
  5. package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -2
  6. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -2
  7. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +12 -0
  8. package/node_modules/@herbertgao/pi-subagents/README.md +427 -120
  9. package/node_modules/@herbertgao/pi-subagents/docs/rpc.md +184 -0
  10. package/node_modules/@herbertgao/pi-subagents/docs/workflows.md +466 -0
  11. package/node_modules/@herbertgao/pi-subagents/examples/agent-tool-description.md +6 -6
  12. package/node_modules/@herbertgao/pi-subagents/examples/workflows/compose.js +52 -0
  13. package/node_modules/@herbertgao/pi-subagents/examples/workflows/fan-out-audit.js +56 -0
  14. package/node_modules/@herbertgao/pi-subagents/examples/workflows/gated-fix.js +60 -0
  15. package/node_modules/@herbertgao/pi-subagents/examples/workflows/lib/count-child.js +30 -0
  16. package/node_modules/@herbertgao/pi-subagents/examples/workflows/review-panel.js +68 -0
  17. package/node_modules/@herbertgao/pi-subagents/examples/workflows/structured-findings.js +81 -0
  18. package/node_modules/@herbertgao/pi-subagents/package.json +12 -10
  19. package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +52 -12
  20. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +837 -146
  21. package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +213 -39
  22. package/node_modules/@herbertgao/pi-subagents/src/cross-extension-rpc.ts +73 -14
  23. package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +101 -47
  24. package/node_modules/@herbertgao/pi-subagents/src/index.ts +2249 -914
  25. package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +13 -0
  26. package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +215 -0
  27. package/node_modules/@herbertgao/pi-subagents/src/mention.ts +147 -0
  28. package/node_modules/@herbertgao/pi-subagents/src/model-resolver.ts +9 -1
  29. package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +40 -26
  30. package/node_modules/@herbertgao/pi-subagents/src/output-file.ts +18 -8
  31. package/node_modules/@herbertgao/pi-subagents/src/prompts.ts +46 -9
  32. package/node_modules/@herbertgao/pi-subagents/src/schedule.ts +21 -16
  33. package/node_modules/@herbertgao/pi-subagents/src/settings.ts +137 -7
  34. package/node_modules/@herbertgao/pi-subagents/src/structured-output.ts +136 -0
  35. package/node_modules/@herbertgao/pi-subagents/src/types.ts +126 -8
  36. package/node_modules/@herbertgao/pi-subagents/src/ui/agent-mention.ts +274 -0
  37. package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +20 -5
  38. package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +10 -4
  39. package/node_modules/@herbertgao/pi-subagents/src/ui/fleet-list.ts +167 -22
  40. package/node_modules/@herbertgao/pi-subagents/src/ui/workflow-card.ts +555 -0
  41. package/node_modules/@herbertgao/pi-subagents/src/ui/workflow-dialog.ts +1304 -0
  42. package/node_modules/@herbertgao/pi-subagents/src/ui/workflow-menu.ts +226 -0
  43. package/node_modules/@herbertgao/pi-subagents/src/workflow/collisions.ts +122 -0
  44. package/node_modules/@herbertgao/pi-subagents/src/workflow/entry.ts +47 -0
  45. package/node_modules/@herbertgao/pi-subagents/src/workflow/host.ts +463 -0
  46. package/node_modules/@herbertgao/pi-subagents/src/workflow/journal.ts +164 -0
  47. package/node_modules/@herbertgao/pi-subagents/src/workflow/json-schema.ts +142 -0
  48. package/node_modules/@herbertgao/pi-subagents/src/workflow/meta.ts +401 -0
  49. package/node_modules/@herbertgao/pi-subagents/src/workflow/progress.ts +622 -0
  50. package/node_modules/@herbertgao/pi-subagents/src/workflow/runtime.ts +1399 -0
  51. package/node_modules/@herbertgao/pi-subagents/src/workflow/saved.ts +230 -0
  52. package/node_modules/@herbertgao/pi-subagents/src/workflow/task.ts +333 -0
  53. package/node_modules/@herbertgao/pi-subagents/src/workflow/tool-description.ts +200 -0
  54. package/node_modules/@herbertgao/pi-subagents/src/workflow/worker-source.ts +781 -0
  55. package/node_modules/@herbertgao/pi-subagents/src/worktree.ts +97 -95
  56. package/node_modules/@herbertgao/pi-subagents/src/xml.ts +13 -0
  57. package/node_modules/@herbertgao/resume-from/package.json +1 -1
  58. package/node_modules/@herbertgao/sol-pi/README.md +3 -3
  59. package/node_modules/@herbertgao/sol-pi/THIRD_PARTY_NOTICES.md +4 -4
  60. package/node_modules/@herbertgao/sol-pi/agents-install.md +4 -4
  61. package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +6 -6
  62. package/node_modules/@herbertgao/sol-pi/package.json +2 -2
  63. package/node_modules/@narumitw/pi-btw/dist/index.ts +39 -89
  64. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  65. package/node_modules/@narumitw/pi-btw/package.json +4 -4
  66. package/node_modules/@narumitw/pi-btw/src/btw.ts +28 -87
  67. package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +8 -0
  68. package/node_modules/@narumitw/pi-btw/src/side-thread.ts +40 -37
  69. package/node_modules/@narumitw/pi-caffeinate/README.md +21 -66
  70. package/node_modules/@narumitw/pi-caffeinate/dist/index.ts +10 -41
  71. package/node_modules/@narumitw/pi-caffeinate/dist/index.ts.map +2 -2
  72. package/node_modules/@narumitw/pi-caffeinate/package.json +50 -51
  73. package/node_modules/@narumitw/pi-caffeinate/src/caffeinate.ts +637 -663
  74. package/node_modules/@narumitw/pi-caffeinate/src/dbus-inhibit.ts +114 -120
  75. package/node_modules/@narumitw/pi-caffeinate/src/inhibitor-process.ts +29 -29
  76. package/node_modules/@narumitw/pi-caffeinate/src/inhibitors.ts +108 -126
  77. package/node_modules/@narumitw/pi-caffeinate/src/settings.ts +124 -128
  78. package/node_modules/pi-multi-account/CHANGELOG.md +1209 -0
  79. package/node_modules/pi-multi-account/CONTRIBUTING.md +61 -0
  80. package/node_modules/pi-multi-account/LICENSE +21 -0
  81. package/node_modules/pi-multi-account/README.md +197 -0
  82. package/node_modules/pi-multi-account/SECURITY.md +27 -0
  83. package/node_modules/pi-multi-account/auth-file-transaction.ts +56 -0
  84. package/node_modules/pi-multi-account/child-usability.ts +233 -0
  85. package/node_modules/pi-multi-account/compaction-summary.ts +32 -0
  86. package/node_modules/pi-multi-account/completion-route-planner.ts +224 -0
  87. package/node_modules/pi-multi-account/context-guard.ts +420 -0
  88. package/node_modules/pi-multi-account/cursor/LICENSE +21 -0
  89. package/node_modules/pi-multi-account/cursor/NOTICE +2 -0
  90. package/node_modules/pi-multi-account/cursor/auth.ts +165 -0
  91. package/node_modules/pi-multi-account/cursor/bridge-handle.ts +155 -0
  92. package/node_modules/pi-multi-account/cursor/conversation-registry.ts +104 -0
  93. package/node_modules/pi-multi-account/cursor/cursor-models-raw.json +611 -0
  94. package/node_modules/pi-multi-account/cursor/cursor-shared.ts +192 -0
  95. package/node_modules/pi-multi-account/cursor/h2-bridge.mjs +175 -0
  96. package/node_modules/pi-multi-account/cursor/index.ts +572 -0
  97. package/node_modules/pi-multi-account/cursor/message-parsing.ts +323 -0
  98. package/node_modules/pi-multi-account/cursor/prompt-usage.ts +53 -0
  99. package/node_modules/pi-multi-account/cursor/proto/agent_pb.ts +15294 -0
  100. package/node_modules/pi-multi-account/cursor/proxy.ts +2510 -0
  101. package/node_modules/pi-multi-account/cursor/session-lifecycle.ts +40 -0
  102. package/node_modules/pi-multi-account/cursor/sse-keepalive.ts +24 -0
  103. package/node_modules/pi-multi-account/cursor/stream-lifecycle.ts +193 -0
  104. package/node_modules/pi-multi-account/cursor/upstream-watchdog.ts +88 -0
  105. package/node_modules/pi-multi-account/cursor-bridge.ts +240 -0
  106. package/node_modules/pi-multi-account/cursor-model-name.ts +12 -0
  107. package/node_modules/pi-multi-account/index.ts +11825 -0
  108. package/node_modules/pi-multi-account/model-catalog.ts +354 -0
  109. package/node_modules/pi-multi-account/package.json +101 -0
  110. package/node_modules/pi-multi-account/pi-contract.ts +281 -0
  111. package/node_modules/pi-multi-account/provider-payload-stream.ts +44 -0
  112. package/node_modules/pi-multi-account/provider-priority.ts +189 -0
  113. package/node_modules/pi-multi-account/slot-proxy-auth.ts +167 -0
  114. package/node_modules/pi-multi-account/slot-proxy.ts +344 -0
  115. package/node_modules/pi-multi-account/state-file-transaction.ts +67 -0
  116. package/node_modules/pi-multi-account/usage.ts +1099 -0
  117. package/node_modules/pi-typesafe/README.md +6 -2
  118. package/node_modules/pi-typesafe/dist/client.d.ts +11 -0
  119. package/node_modules/pi-typesafe/dist/client.js +45 -10
  120. package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
  121. package/node_modules/pi-typesafe/dist/index.js +1 -1
  122. package/node_modules/pi-typesafe/package.json +2 -2
  123. package/node_modules/pi-web-access/CHANGELOG.md +36 -0
  124. package/node_modules/pi-web-access/README.md +75 -18
  125. package/node_modules/pi-web-access/anysearch.ts +4 -15
  126. package/node_modules/pi-web-access/bocha.ts +3 -22
  127. package/node_modules/pi-web-access/brave.ts +3 -21
  128. package/node_modules/pi-web-access/brightdata.ts +5 -32
  129. package/node_modules/pi-web-access/content-find.ts +168 -53
  130. package/node_modules/pi-web-access/curator-page.ts +4 -1
  131. package/node_modules/pi-web-access/curator-run.ts +2 -1
  132. package/node_modules/pi-web-access/curator-server.ts +1 -0
  133. package/node_modules/pi-web-access/dist/index.js +24620 -0
  134. package/node_modules/pi-web-access/domain-filter-normalization.ts +14 -0
  135. package/node_modules/pi-web-access/duckduckgo.ts +3 -21
  136. package/node_modules/pi-web-access/extract.ts +3 -1
  137. package/node_modules/pi-web-access/firecrawl.ts +5 -29
  138. package/node_modules/pi-web-access/gemini-search.ts +81 -32
  139. package/node_modules/pi-web-access/index.ts +149 -148
  140. package/node_modules/pi-web-access/jina-search.ts +4 -15
  141. package/node_modules/pi-web-access/kagi.ts +4 -13
  142. package/node_modules/pi-web-access/kimi-search.ts +5 -30
  143. package/node_modules/pi-web-access/mistral-search.ts +1 -15
  144. package/node_modules/pi-web-access/ollama.ts +2 -7
  145. package/node_modules/pi-web-access/openai-search.ts +174 -36
  146. package/node_modules/pi-web-access/opencode-session-headers.ts +24 -0
  147. package/node_modules/pi-web-access/package.json +10 -4
  148. package/node_modules/pi-web-access/page-query.ts +10 -2
  149. package/node_modules/pi-web-access/parallel.ts +1 -15
  150. package/node_modules/pi-web-access/pdf-extract.ts +3 -0
  151. package/node_modules/pi-web-access/querit.ts +5 -29
  152. package/node_modules/pi-web-access/search-answer-formatting.ts +11 -0
  153. package/node_modules/pi-web-access/search-result-count-normalization.ts +4 -0
  154. package/node_modules/pi-web-access/search1api.ts +5 -29
  155. package/node_modules/pi-web-access/searchinfinity.ts +5 -29
  156. package/node_modules/pi-web-access/searxng.ts +3 -21
  157. package/node_modules/pi-web-access/serpapi.ts +5 -28
  158. package/node_modules/pi-web-access/serpbase.ts +3 -22
  159. package/node_modules/pi-web-access/serpdive.ts +3 -21
  160. package/node_modules/pi-web-access/serper.ts +5 -28
  161. package/node_modules/pi-web-access/serply.ts +197 -0
  162. package/node_modules/pi-web-access/source-check.ts +11 -47
  163. package/node_modules/pi-web-access/summary-review.ts +7 -3
  164. package/node_modules/pi-web-access/tavily.ts +3 -21
  165. package/node_modules/pi-web-access/tinyfish.ts +5 -29
  166. package/node_modules/pi-web-access/utils.ts +9 -1
  167. package/node_modules/pi-web-access/valyu.ts +5 -28
  168. package/node_modules/pi-web-access/xai-search.ts +1 -15
  169. package/node_modules/pi-web-access/xcrawl.ts +5 -32
  170. package/package.json +17 -11
@@ -2,11 +2,7 @@
2
2
  // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
3
3
 
4
4
  // src/btw.ts
5
- import {
6
- clampThinkingLevel,
7
- getSupportedThinkingLevels as getSupportedThinkingLevels2
8
- } from "@earendil-works/pi-ai";
9
- import { BorderedLoader as BorderedLoader2 } from "@earendil-works/pi-coding-agent";
5
+ import { clampThinkingLevel, getSupportedThinkingLevels as getSupportedThinkingLevels2 } from "@earendil-works/pi-ai";
10
6
 
11
7
  // src/bring-to-main.ts
12
8
  import { Key, matchesKey, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
@@ -1352,7 +1348,11 @@ async function completeSideThreadTurn({
1352
1348
  const response = await completeSimple(
1353
1349
  model,
1354
1350
  { systemPrompt: SYSTEM_PROMPT, messages: buildSideThreadMessages(thread, question) },
1355
- buildStreamOptions(auth, { thinkingLevel, signal, model, sessionId })
1351
+ buildStreamOptions(
1352
+ auth,
1353
+ { thinkingLevel, signal, model, sessionId },
1354
+ completeSimple.appliesRequestHeaderTransforms === true
1355
+ )
1356
1356
  );
1357
1357
  if (signal?.aborted || response?.stopReason === "aborted") return { kind: "aborted" };
1358
1358
  if (!isAssistantMessage(response)) {
@@ -1405,34 +1405,25 @@ function createUserMessage(text) {
1405
1405
  timestamp: Date.now()
1406
1406
  };
1407
1407
  }
1408
- var OPENCODE_HOST = "opencode.ai";
1409
- function matchesOpencodeHost(baseUrl) {
1410
- if (!baseUrl) return false;
1411
- try {
1412
- return new URL(baseUrl).hostname === OPENCODE_HOST;
1413
- } catch {
1414
- return false;
1415
- }
1416
- }
1417
1408
  function getOpencodeSessionHeaders(model, sessionId) {
1418
- if (!sessionId) return void 0;
1419
- if (model.provider !== "opencode" && model.provider !== "opencode-go" && !matchesOpencodeHost(model.baseUrl)) {
1420
- return void 0;
1421
- }
1409
+ if (!sessionId || model.provider !== "opencode" && model.provider !== "opencode-go") return void 0;
1422
1410
  return { "x-opencode-session": sessionId, "x-opencode-client": "pi" };
1423
1411
  }
1424
1412
  function mergeSessionHeaders(authHeaders, sessionHeaders) {
1425
1413
  if (!sessionHeaders && !authHeaders) return void 0;
1426
1414
  return { ...sessionHeaders, ...authHeaders };
1427
1415
  }
1428
- function buildStreamOptions(auth, { thinkingLevel, signal, model, sessionId }) {
1416
+ function buildStreamOptions(auth, { thinkingLevel, signal, model, sessionId }, applyRequestHeaderTransforms) {
1429
1417
  const sessionHeaders = model ? getOpencodeSessionHeaders(model, sessionId) : void 0;
1430
1418
  const options = {
1431
- apiKey: auth.apiKey,
1432
- headers: mergeSessionHeaders(auth.headers, sessionHeaders),
1433
- env: auth.env,
1419
+ apiKey: auth?.apiKey,
1420
+ headers: applyRequestHeaderTransforms ? auth?.headers : mergeSessionHeaders(auth?.headers, sessionHeaders),
1421
+ env: auth?.env,
1434
1422
  signal
1435
1423
  };
1424
+ if (applyRequestHeaderTransforms && sessionHeaders) {
1425
+ options.transformHeaders = (headers) => mergeSessionHeaders(headers, sessionHeaders) ?? {};
1426
+ }
1436
1427
  if (thinkingLevel !== "off") options.reasoning = thinkingLevel;
1437
1428
  return options;
1438
1429
  }
@@ -2413,6 +2404,14 @@ function sanitizeEntryForDisplay(entry) {
2413
2404
  ...entry,
2414
2405
  name: entry.name === void 0 ? void 0 : sanitizeSingleLine(entry.name)
2415
2406
  };
2407
+ case "usage":
2408
+ return {
2409
+ ...entry,
2410
+ kind: sanitizeSingleLine(entry.kind),
2411
+ provider: sanitizeSingleLine(entry.provider),
2412
+ model: sanitizeSingleLine(entry.model),
2413
+ note: entry.note === void 0 ? void 0 : sanitizeSingleLine(entry.note)
2414
+ };
2416
2415
  }
2417
2416
  }
2418
2417
  function sanitizeDisplayContent(content) {
@@ -3107,11 +3106,9 @@ function escapeTerminalControls2(text) {
3107
3106
  // src/btw.ts
3108
3107
  var MAX_CONTEXT_CHARS = 4e4;
3109
3108
  function createModelRegistryCompleteSimple(modelRegistry) {
3110
- return async (model, context, options) => {
3111
- const provider = modelRegistry.getProvider(model.provider);
3112
- if (!provider) throw new Error(`No provider registered for model provider: ${model.provider}`);
3113
- return provider.streamSimple(model, context, options).result();
3114
- };
3109
+ const completeSimple = async (model, context, options) => modelRegistry.streamSimple(model, context, options).result();
3110
+ completeSimple.appliesRequestHeaderTransforms = true;
3111
+ return completeSimple;
3115
3112
  }
3116
3113
  async function resolveBtwModel({
3117
3114
  settings,
@@ -3120,6 +3117,8 @@ async function resolveBtwModel({
3120
3117
  warn
3121
3118
  }) {
3122
3119
  const reportWarning = (message) => warn?.(sanitizeSingleLine(message));
3120
+ const availableModels = modelRegistry.getAvailable();
3121
+ const isAvailable = (model) => availableModels.some((candidate) => candidate.provider === model.provider && candidate.id === model.id);
3123
3122
  if (settings.model) {
3124
3123
  const fallback = currentModel ? `${currentModel.provider}/${currentModel.id}` : "the current model";
3125
3124
  const reference = parseBtwModelReference(settings.model);
@@ -3130,45 +3129,16 @@ async function resolveBtwModel({
3130
3129
  const configuredModel = modelRegistry.find(reference.provider, reference.modelId);
3131
3130
  if (!configuredModel) {
3132
3131
  reportWarning(`pi-btw model ${settings.model} was not found; falling back to ${fallback}.`);
3132
+ } else if (isAvailable(configuredModel)) {
3133
+ return { model: configuredModel };
3133
3134
  } else {
3134
3135
  const sameAsCurrent = configuredModel === currentModel || configuredModel.provider === currentModel?.provider && configuredModel.id === currentModel.id;
3135
3136
  const fallbackAction = sameAsCurrent ? "no distinct current model is available" : `falling back to ${fallback}`;
3136
- try {
3137
- const auth = await modelRegistry.getApiKeyAndHeaders(configuredModel);
3138
- if (auth.ok && hasRequestAuth(auth)) {
3139
- return {
3140
- model: auth.baseUrl ? { ...configuredModel, baseUrl: auth.baseUrl } : configuredModel,
3141
- auth
3142
- };
3143
- }
3144
- const reason = auth.ok ? "has no request credentials" : auth.error;
3145
- reportWarning(`pi-btw model ${settings.model} is unavailable (${reason}); ${fallbackAction}.`);
3146
- } catch (error) {
3147
- reportWarning(`pi-btw model ${settings.model} credentials failed (${formatError5(error)}); ${fallbackAction}.`);
3148
- }
3137
+ reportWarning(`pi-btw model ${settings.model} is unavailable; ${fallbackAction}.`);
3149
3138
  if (sameAsCurrent) return void 0;
3150
3139
  }
3151
3140
  }
3152
- if (!currentModel) return void 0;
3153
- try {
3154
- const auth = await modelRegistry.getApiKeyAndHeaders(currentModel);
3155
- if (auth.ok && hasRequestAuth(auth)) {
3156
- return {
3157
- model: auth.baseUrl ? { ...currentModel, baseUrl: auth.baseUrl } : currentModel,
3158
- auth
3159
- };
3160
- }
3161
- } catch {
3162
- }
3163
- return void 0;
3164
- }
3165
- function hasRequestAuth(auth) {
3166
- return Boolean(
3167
- auth.apiKey || providerHeadersHaveValue(auth.headers) || auth.env && Object.keys(auth.env).length > 0
3168
- );
3169
- }
3170
- function providerHeadersHaveValue(headers) {
3171
- return headers !== void 0 && Object.values(headers).some((value) => value !== null);
3141
+ return currentModel && isAvailable(currentModel) ? { model: currentModel } : void 0;
3172
3142
  }
3173
3143
  function formatError5(error) {
3174
3144
  return error instanceof Error ? error.message : String(error);
@@ -3189,7 +3159,7 @@ function btw(pi, dependencies = {}) {
3189
3159
  const showCommandMenu = dependencies.showCommandMenu ?? showCommandMenuForBtw;
3190
3160
  const pickEntry = dependencies.pickMainEntry ?? pickMainEntry;
3191
3161
  const loadSettings = dependencies.loadSettings ?? loadSettingsForCommand;
3192
- const resolveModel = dependencies.resolveModel ?? resolveBtwModelWithLoader;
3162
+ const resolveModel = dependencies.resolveModel ?? resolveBtwModelForCommand;
3193
3163
  const runThread = dependencies.runThread ?? runBtwThread;
3194
3164
  const runFullscreen = dependencies.runFullscreen ?? runBtwFullscreen;
3195
3165
  const resumableThreads = /* @__PURE__ */ new Map();
@@ -3308,33 +3278,14 @@ async function loadSettingsForCommand(ctx) {
3308
3278
  }
3309
3279
  return {};
3310
3280
  }
3311
- async function resolveBtwModelWithLoader(settings, ctx) {
3312
- return ctx.ui.custom((tui, theme, _keybindings, done) => {
3313
- const loader = new BorderedLoader2(tui, theme, "Resolving /btw model credentials...");
3314
- let settled = false;
3315
- loader.onAbort = () => {
3316
- if (settled) return;
3317
- settled = true;
3318
- done({ kind: "cancelled" });
3319
- };
3320
- resolveBtwModel({
3321
- settings,
3322
- currentModel: ctx.model,
3323
- modelRegistry: ctx.modelRegistry,
3324
- warn: (message) => {
3325
- if (!settled) notifySafely3(ctx, message, "warning");
3326
- }
3327
- }).then((selected) => {
3328
- if (settled) return;
3329
- settled = true;
3330
- done(selected ? { kind: "selected", selected } : { kind: "unavailable" });
3331
- }).catch(() => {
3332
- if (settled) return;
3333
- settled = true;
3334
- done({ kind: "unavailable" });
3335
- });
3336
- return loader;
3281
+ async function resolveBtwModelForCommand(settings, ctx) {
3282
+ const selected = await resolveBtwModel({
3283
+ settings,
3284
+ currentModel: ctx.model,
3285
+ modelRegistry: ctx.modelRegistry,
3286
+ warn: (message) => notifySafely3(ctx, message, "warning")
3337
3287
  });
3288
+ return selected ? { kind: "selected", selected } : { kind: "unavailable" };
3338
3289
  }
3339
3290
  async function runBtwThread({
3340
3291
  initialQuestion,
@@ -3684,7 +3635,6 @@ async function askThreadQuestion(thread, question, selected, thinkingLevel, ctx,
3684
3635
  question,
3685
3636
  model: selected.model,
3686
3637
  thinkingLevel,
3687
- auth: selected.auth,
3688
3638
  signal: view.signal,
3689
3639
  completeSimple: createModelRegistryCompleteSimple(ctx.modelRegistry),
3690
3640
  sessionId: readBtwSessionId(ctx)