gsd-pi 2.34.0-dev.bbb5216 → 2.34.0-dev.ed0bfbf

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 (204) hide show
  1. package/dist/resources/extensions/mcp-client/index.js +2 -1
  2. package/package.json +1 -1
  3. package/packages/native/dist/native.d.ts +0 -2
  4. package/packages/native/dist/native.js +0 -2
  5. package/packages/native/src/native.ts +0 -3
  6. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  7. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  8. package/packages/pi-agent-core/dist/proxy.js +1 -1
  9. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  10. package/packages/pi-agent-core/src/proxy.ts +1 -1
  11. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  12. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  13. package/packages/pi-ai/dist/api-registry.js +0 -10
  14. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  15. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  16. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  17. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  18. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  19. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  20. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  21. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  22. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  23. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  24. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  25. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  26. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  27. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  28. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  29. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  30. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  31. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  32. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  33. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  34. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  35. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  36. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  37. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  38. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  39. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  40. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  41. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  42. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  43. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  44. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  45. package/packages/pi-ai/dist/utils/validation.js +0 -14
  46. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  47. package/packages/pi-ai/src/api-registry.ts +0 -12
  48. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  49. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  50. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  51. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  52. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  53. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  54. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  55. package/packages/pi-ai/src/utils/validation.ts +0 -15
  56. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  57. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  58. package/packages/pi-coding-agent/dist/config.js +4 -8
  59. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  60. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  61. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  62. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  63. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  64. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -5
  65. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  66. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
  67. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  68. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  69. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  70. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  71. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  72. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  73. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  74. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  75. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  76. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +0 -2
  77. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  78. package/packages/pi-coding-agent/dist/core/lsp/config.js +0 -7
  79. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  80. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  81. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  82. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  83. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  84. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  85. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  86. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +1 -1
  87. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  88. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  89. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  90. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  91. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  92. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  93. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  94. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  95. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  96. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  97. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  98. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  99. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  100. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  101. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  102. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  103. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  104. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  105. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  106. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  107. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  108. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -4
  109. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  110. package/packages/pi-coding-agent/dist/core/session-manager.js +2 -4
  111. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  112. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +0 -12
  113. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  114. package/packages/pi-coding-agent/dist/core/settings-manager.js +2 -2
  115. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  116. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  117. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  118. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  119. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  120. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  121. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  122. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  123. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  124. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  125. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  126. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  127. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  128. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  129. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  130. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  131. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  132. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +0 -4
  133. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  134. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +0 -7
  135. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  136. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  137. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  138. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  139. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  140. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  141. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  142. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  143. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  144. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  145. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  146. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  147. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  148. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  149. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  150. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  151. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  152. package/packages/pi-coding-agent/src/config.ts +5 -10
  153. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  154. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -13
  155. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  156. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  157. package/packages/pi-coding-agent/src/core/lsp/config.ts +0 -11
  158. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  159. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +1 -1
  160. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  161. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  162. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  163. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  164. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  165. package/packages/pi-coding-agent/src/core/session-manager.ts +2 -4
  166. package/packages/pi-coding-agent/src/core/settings-manager.ts +2 -2
  167. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  168. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  169. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  170. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  171. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +0 -8
  172. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  173. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  174. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  175. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  176. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  177. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  178. package/packages/pi-tui/dist/components/editor.js +1 -1
  179. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  180. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  181. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  182. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  183. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  184. package/packages/pi-tui/dist/tui.d.ts +0 -22
  185. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  186. package/packages/pi-tui/dist/tui.js +6 -272
  187. package/packages/pi-tui/dist/tui.js.map +1 -1
  188. package/packages/pi-tui/dist/utils.d.ts +0 -7
  189. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  190. package/packages/pi-tui/dist/utils.js +0 -44
  191. package/packages/pi-tui/dist/utils.js.map +1 -1
  192. package/packages/pi-tui/src/components/editor.ts +1 -1
  193. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  194. package/packages/pi-tui/src/tui.ts +11 -312
  195. package/packages/pi-tui/src/utils.ts +0 -43
  196. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  197. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  198. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  199. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  200. package/pkg/dist/modes/interactive/theme/theme.d.ts +0 -4
  201. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  202. package/pkg/dist/modes/interactive/theme/theme.js +0 -7
  203. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  204. package/src/resources/extensions/mcp-client/index.ts +2 -1
@@ -192,7 +192,7 @@ const SEVERITY_NAMES: Record<DiagnosticSeverity, string> = {
192
192
  4: "hint",
193
193
  };
194
194
 
195
- export function severityToString(severity?: DiagnosticSeverity): string {
195
+ function severityToString(severity?: DiagnosticSeverity): string {
196
196
  return SEVERITY_NAMES[severity ?? 1] ?? "unknown";
197
197
  }
198
198
 
@@ -211,21 +211,6 @@ export function sortDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {
211
211
  });
212
212
  }
213
213
 
214
- export function severityToIcon(severity?: DiagnosticSeverity): string {
215
- switch (severity ?? 1) {
216
- case 1:
217
- return "[E]";
218
- case 2:
219
- return "[W]";
220
- case 3:
221
- return "[I]";
222
- case 4:
223
- return "[H]";
224
- default:
225
- return "[E]";
226
- }
227
- }
228
-
229
214
  function stripDiagnosticNoise(message: string): string {
230
215
  return message
231
216
  .split("\n")
@@ -353,10 +338,6 @@ export function formatLocation(location: Location, cwd: string): string {
353
338
  return `${file}:${line}:${col}`;
354
339
  }
355
340
 
356
- export function formatPosition(line: number, col: number): string {
357
- return `${line}:${col}`;
358
- }
359
-
360
341
  // =============================================================================
361
342
  // WorkspaceEdit Formatting
362
343
  // =============================================================================
@@ -397,15 +378,6 @@ export function formatWorkspaceEdit(edit: WorkspaceEdit, cwd: string): string[]
397
378
  return results;
398
379
  }
399
380
 
400
- export function formatTextEdit(edit: TextEdit, maxLength = 50): string {
401
- const range = `${edit.range.start.line + 1}:${edit.range.start.character + 1}`;
402
- const preview =
403
- edit.newText.length > maxLength
404
- ? `${edit.newText.slice(0, maxLength).replace(/\n/g, "\\n")}…`
405
- : edit.newText.replace(/\n/g, "\\n");
406
- return `line ${range} -> "${preview}"`;
407
- }
408
-
409
381
  // =============================================================================
410
382
  // Symbol Formatting
411
383
  // =============================================================================
@@ -443,10 +415,6 @@ export function symbolKindToIcon(kind: SymbolKind): string {
443
415
  return `[${SYMBOL_KIND_LABELS[kind] ?? "?"}]`;
444
416
  }
445
417
 
446
- export function symbolKindToName(kind: SymbolKind): string {
447
- return SYMBOL_KIND_LABELS[kind] ?? "Unknown";
448
- }
449
-
450
418
  export function formatDocumentSymbol(symbol: DocumentSymbol, indent = 0): string[] {
451
419
  const prefix = " ".repeat(indent);
452
420
  const icon = symbolKindToIcon(symbol.kind);
@@ -8,20 +8,20 @@
8
8
  import type { AgentMessage } from "@gsd/pi-agent-core";
9
9
  import type { ImageContent, Message, TextContent } from "@gsd/pi-ai";
10
10
 
11
- export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
11
+ const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
12
12
 
13
13
  <summary>
14
14
  `;
15
15
 
16
- export const COMPACTION_SUMMARY_SUFFIX = `
16
+ const COMPACTION_SUMMARY_SUFFIX = `
17
17
  </summary>`;
18
18
 
19
- export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
19
+ const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
20
20
 
21
21
  <summary>
22
22
  `;
23
23
 
24
- export const BRANCH_SUMMARY_SUFFIX = `</summary>`;
24
+ const BRANCH_SUMMARY_SUFFIX = `</summary>`;
25
25
 
26
26
  /**
27
27
  * Message type for bash executions via the ! command.
@@ -79,7 +79,7 @@ declare module "@gsd/pi-agent-core" {
79
79
  /**
80
80
  * Convert a BashExecutionMessage to user message text for LLM context.
81
81
  */
82
- export function bashExecutionToText(msg: BashExecutionMessage): string {
82
+ function bashExecutionToText(msg: BashExecutionMessage): string {
83
83
  let text = `Ran \`${msg.command}\`\n`;
84
84
  if (msg.output) {
85
85
  text += `\`\`\`\n${msg.output}\n\`\`\``;
@@ -216,8 +216,6 @@ function applyModelOverride(model: Model<Api>, override: ModelOverride): Model<A
216
216
  return result;
217
217
  }
218
218
 
219
- /** Clear the config value command cache. Exported for testing. */
220
- export const clearApiKeyCache = clearConfigValueCache;
221
219
 
222
220
  /**
223
221
  * Model registry - loads and manages models, resolves API keys via AuthStorage.
@@ -11,7 +11,7 @@ import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
11
11
  import type { ModelRegistry } from "./model-registry.js";
12
12
 
13
13
  /** Default model IDs for each known provider */
14
- export const defaultModelPerProvider: Record<KnownProvider, string> = {
14
+ const defaultModelPerProvider: Record<KnownProvider, string> = {
15
15
  "amazon-bedrock": "us.anthropic.claude-opus-4-6-v1",
16
16
  anthropic: "claude-opus-4-6[1m]",
17
17
  openai: "gpt-5.4",
@@ -143,9 +143,9 @@ function buildFallbackModel(provider: string, modelId: string, availableModels:
143
143
  * - If suffix is valid thinking level, use it and recurse on prefix
144
144
  * - If suffix is invalid, warn and recurse on prefix with "off"
145
145
  *
146
- * @internal Exported for testing
146
+ * @internal
147
147
  */
148
- export function parseModelPattern(
148
+ function parseModelPattern(
149
149
  pattern: string,
150
150
  availableModels: Model<Api>[],
151
151
  options?: { allowInvalidThinkingLevelFallback?: boolean },
@@ -546,77 +546,3 @@ export async function findInitialModel(options: {
546
546
  // 5. No model found
547
547
  return { model: undefined, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };
548
548
  }
549
-
550
- /**
551
- * Restore model from session, with fallback to available models
552
- */
553
- export async function restoreModelFromSession(
554
- savedProvider: string,
555
- savedModelId: string,
556
- currentModel: Model<Api> | undefined,
557
- shouldPrintMessages: boolean,
558
- modelRegistry: ModelRegistry,
559
- ): Promise<{ model: Model<Api> | undefined; fallbackMessage: string | undefined }> {
560
- const restoredModel = modelRegistry.find(savedProvider, savedModelId);
561
-
562
- // Check if restored model exists and has a valid API key
563
- const hasApiKey = restoredModel ? !!(await modelRegistry.getApiKey(restoredModel)) : false;
564
-
565
- if (restoredModel && hasApiKey) {
566
- if (shouldPrintMessages) {
567
- console.log(chalk.dim(`Restored model: ${savedProvider}/${savedModelId}`));
568
- }
569
- return { model: restoredModel, fallbackMessage: undefined };
570
- }
571
-
572
- // Model not found or no API key - fall back
573
- const reason = !restoredModel ? "model no longer exists" : "no API key available";
574
-
575
- if (shouldPrintMessages) {
576
- console.error(chalk.yellow(`Warning: Could not restore model ${savedProvider}/${savedModelId} (${reason}).`));
577
- }
578
-
579
- // If we already have a model, use it as fallback
580
- if (currentModel) {
581
- if (shouldPrintMessages) {
582
- console.log(chalk.dim(`Falling back to: ${currentModel.provider}/${currentModel.id}`));
583
- }
584
- return {
585
- model: currentModel,
586
- fallbackMessage: `Could not restore model ${savedProvider}/${savedModelId} (${reason}). Using ${currentModel.provider}/${currentModel.id}.`,
587
- };
588
- }
589
-
590
- // Try to find any available model
591
- const availableModels = await modelRegistry.getAvailable();
592
-
593
- if (availableModels.length > 0) {
594
- // Try to find a default model from known providers
595
- let fallbackModel: Model<Api> | undefined;
596
- for (const provider of Object.keys(defaultModelPerProvider) as KnownProvider[]) {
597
- const defaultId = defaultModelPerProvider[provider];
598
- const match = availableModels.find((m) => m.provider === provider && m.id === defaultId);
599
- if (match) {
600
- fallbackModel = match;
601
- break;
602
- }
603
- }
604
-
605
- // If no default found, use first available
606
- if (!fallbackModel) {
607
- fallbackModel = availableModels[0];
608
- }
609
-
610
- if (shouldPrintMessages) {
611
- console.log(chalk.dim(`Falling back to: ${fallbackModel.provider}/${fallbackModel.id}`));
612
- }
613
-
614
- return {
615
- model: fallbackModel,
616
- fallbackMessage: `Could not restore model ${savedProvider}/${savedModelId} (${reason}). Using ${fallbackModel.provider}/${fallbackModel.id}.`,
617
- };
618
- }
619
-
620
- // No models available
621
- return { model: undefined, fallbackMessage: undefined };
622
- }
@@ -19,7 +19,7 @@ export interface PromptTemplate {
19
19
  * Parse command arguments respecting quoted strings (bash-style)
20
20
  * Returns array of arguments
21
21
  */
22
- export function parseCommandArgs(argsString: string): string[] {
22
+ function parseCommandArgs(argsString: string): string[] {
23
23
  const args: string[] = [];
24
24
  let current = "";
25
25
  let inQuote: string | null = null;
@@ -63,7 +63,7 @@ export function parseCommandArgs(argsString: string): string[] {
63
63
  * Note: Replacement happens on the template string only. Argument values
64
64
  * containing patterns like $1, $@, or $ARGUMENTS are NOT recursively substituted.
65
65
  */
66
- export function substituteArgs(content: string, args: string[]): string {
66
+ function substituteArgs(content: string, args: string[]): string {
67
67
  let result = content;
68
68
 
69
69
  // Replace $1, $2, etc. with positional args FIRST (before wildcards)
@@ -577,8 +577,7 @@ function resolveBlobRefsInEntries(entries: FileEntry[], blobStore: BlobStore): v
577
577
  }
578
578
  }
579
579
 
580
- /** Exported for testing */
581
- export function loadEntriesFromFile(filePath: string): FileEntry[] {
580
+ function loadEntriesFromFile(filePath: string): FileEntry[] {
582
581
  if (!existsSync(filePath)) return [];
583
582
 
584
583
  const content = readFileSync(filePath, "utf8");
@@ -620,8 +619,7 @@ function isValidSessionFile(filePath: string): boolean {
620
619
  }
621
620
  }
622
621
 
623
- /** Exported for testing */
624
- export function findMostRecentSession(sessionDir: string): string | null {
622
+ function findMostRecentSession(sessionDir: string): string | null {
625
623
  try {
626
624
  const files = readdirSync(sessionDir)
627
625
  .filter((f) => f.endsWith(".jsonl"))
@@ -195,7 +195,7 @@ export interface SettingsError {
195
195
  error: Error;
196
196
  }
197
197
 
198
- export class FileSettingsStorage implements SettingsStorage {
198
+ class FileSettingsStorage implements SettingsStorage {
199
199
  private globalSettingsPath: string;
200
200
  private projectSettingsPath: string;
201
201
 
@@ -262,7 +262,7 @@ export class FileSettingsStorage implements SettingsStorage {
262
262
  }
263
263
  }
264
264
 
265
- export class InMemorySettingsStorage implements SettingsStorage {
265
+ class InMemorySettingsStorage implements SettingsStorage {
266
266
  private global: string | undefined;
267
267
  private project: string | undefined;
268
268
 
@@ -16,7 +16,7 @@ const EXTENSIONS_DOC_URL = "https://github.com/badlogic/pi-mono/blob/main/packag
16
16
  *
17
17
  * @returns Array of provider names that were migrated
18
18
  */
19
- export function migrateAuthToAuthJson(): string[] {
19
+ function migrateAuthToAuthJson(): string[] {
20
20
  const agentDir = getAgentDir();
21
21
  const authPath = join(agentDir, "auth.json");
22
22
  const oauthPath = join(agentDir, "oauth.json");
@@ -79,7 +79,7 @@ export function migrateAuthToAuthJson(): string[] {
79
79
  *
80
80
  * See: https://github.com/badlogic/pi-mono/issues/320
81
81
  */
82
- export function migrateSessionsFromAgentRoot(): void {
82
+ function migrateSessionsFromAgentRoot(): void {
83
83
  const agentDir = getAgentDir();
84
84
 
85
85
  // Find all .jsonl files directly in agentDir (not in subdirectories)
@@ -36,7 +36,7 @@ function matchesNameFilter(session: SessionInfo, filter: NameFilter): boolean {
36
36
  return hasSessionName(session);
37
37
  }
38
38
 
39
- export function parseSearchQuery(query: string): ParsedSearchQuery {
39
+ function parseSearchQuery(query: string): ParsedSearchQuery {
40
40
  const trimmed = query.trim();
41
41
  if (!trimmed) {
42
42
  return { mode: "tokens", tokens: [], regex: null };
@@ -113,7 +113,7 @@ export function parseSearchQuery(query: string): ParsedSearchQuery {
113
113
  return { mode: "tokens", tokens, regex: null };
114
114
  }
115
115
 
116
- export function matchSession(session: SessionInfo, parsed: ParsedSearchQuery): MatchResult {
116
+ function matchSession(session: SessionInfo, parsed: ParsedSearchQuery): MatchResult {
117
117
  const text = getSessionSearchText(session);
118
118
 
119
119
  if (parsed.mode === "regex") {