@timurproko/a1 0.2.7-dev.1233 → 0.2.7-dev.1235

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 (98) hide show
  1. package/dist/app/session-shell/dock-chrome.js +8 -4
  2. package/dist/app/session-shell/transcript-document.js +1 -0
  3. package/dist/composition/release-update-observation.js +15 -7
  4. package/dist/contracts/owned-ui/session-workflows.d.ts +1 -1
  5. package/dist/foundation/release/automatic-update.d.ts +3 -1
  6. package/dist/foundation/release/automatic-update.js +29 -4
  7. package/dist/foundation/release/index.d.ts +2 -2
  8. package/dist/foundation/release/index.js +2 -2
  9. package/dist/foundation/release/prepared-update-activation.d.ts +3 -0
  10. package/dist/foundation/release/prepared-update-activation.js +27 -0
  11. package/dist/foundation/release/progress-palette.generated.d.ts +1 -1
  12. package/dist/foundation/release/progress-palette.generated.js +1 -1
  13. package/dist/foundation/release/update-activation.d.ts +7 -0
  14. package/dist/foundation/release/update-activation.js +29 -10
  15. package/dist/foundation/release/update-transaction.d.ts +1 -0
  16. package/dist/foundation/release/update-transaction.js +5 -0
  17. package/dist/foundation/release/update.d.ts +3 -0
  18. package/dist/foundation/release/update.js +30 -12
  19. package/dist/foundation/startup/startup-descriptor.js +2 -2
  20. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -2
  21. package/dist/integrations/pi/components/resources/builtin-themes.js +2 -2
  22. package/dist/integrations/pi/components/shell-footer-status.js +9 -4
  23. package/dist/integrations/pi/components/shell-shared-facade.d.ts +3 -0
  24. package/dist/integrations/pi/components/shell-shared-facade.js +8 -0
  25. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
  26. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +1 -1
  27. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  28. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
  29. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
  30. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +3 -3
  31. package/dist/integrations/pi/components/upstream/components/extension-editor.js +4 -1
  32. package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
  33. package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
  34. package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
  35. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +1 -1
  36. package/dist/integrations/pi/components/upstream/components/owned-editor.js +8 -1
  37. package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
  38. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +2 -1
  39. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +14 -3
  40. package/dist/integrations/pi/components/upstream/components/session-footer.js +1 -1
  41. package/dist/integrations/pi/components/upstream/components/session-selector-search.d.ts +4 -0
  42. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +87 -23
  43. package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +3 -2
  44. package/dist/integrations/pi/components/upstream/components/session-selector.js +18 -13
  45. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
  46. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
  47. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +1 -1
  48. package/dist/integrations/pi/components/upstream/components/status-indicator.js +1 -1
  49. package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
  50. package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
  51. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +1 -1
  52. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +1 -1
  53. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +6 -0
  54. package/dist/integrations/pi/components/upstream/components/tool-execution.js +14 -2
  55. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +2 -1
  56. package/dist/integrations/pi/components/upstream/components/tree-selector.js +5 -4
  57. package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
  58. package/dist/integrations/pi/components/upstream/external-editor.d.ts +1 -0
  59. package/dist/integrations/pi/components/upstream/external-editor.js +13 -6
  60. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +3 -1
  61. package/dist/integrations/pi/components/upstream/history/editor-core.js +9 -2
  62. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
  63. package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
  64. package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
  65. package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
  66. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
  67. package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
  68. package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
  69. package/dist/integrations/pi/components/upstream/model-search.d.ts +11 -1
  70. package/dist/integrations/pi/components/upstream/model-search.js +21 -0
  71. package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
  72. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
  73. package/dist/integrations/pi/components/upstream/theme/theme.js +1 -1
  74. package/dist/integrations/pi/engine/adapter.js +9 -1
  75. package/dist/integrations/pi/engine/diagnostics-state.d.ts +1 -0
  76. package/dist/integrations/pi/engine/diagnostics-state.js +15 -2
  77. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  78. package/dist/integrations/pi/startup-public.js +324 -309
  79. package/dist/integrations/pi/startup-public.manifest.json +1156 -846
  80. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +1 -1
  81. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +1 -1
  82. package/dist/native/darwin-arm64/manifest.json +1 -1
  83. package/dist/native/darwin-arm64/terminal-host.manifest.json +3 -3
  84. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  85. package/dist/native/darwin-x64/manifest.json +1 -1
  86. package/dist/native/darwin-x64/terminal-host.manifest.json +3 -3
  87. package/dist/native/darwin-x64/terminal-host.node +0 -0
  88. package/dist/native/linux-x64/manifest.json +1 -1
  89. package/dist/native/linux-x64/terminal-host.manifest.json +3 -3
  90. package/dist/native/linux-x64/terminal-host.node +0 -0
  91. package/dist/native/win32-x64/manifest.json +2 -2
  92. package/dist/native/win32-x64/process-guardian.node +0 -0
  93. package/dist/native/win32-x64/terminal-host.manifest.json +3 -3
  94. package/dist/native/win32-x64/terminal-host.node +0 -0
  95. package/dist/runtime-payload-inventory.json +8178 -5237
  96. package/dist/ui/settings/progress-palette.generated.d.ts +1 -1
  97. package/dist/ui/settings/progress-palette.generated.js +1 -1
  98. package/package.json +5 -5
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/components/tool-execution.ts.
4
4
  * Modifications: Retain pinned shell/public renderers. Own image conversion; replace private APIs with
5
5
  * public/local equivalents. Use bare-A1 secondary-accent read ranges and concise collapse shortcut
@@ -122,6 +122,8 @@ export class ToolExecutionComponent extends Container {
122
122
  cwd;
123
123
  executionStarted = false;
124
124
  argsComplete = false;
125
+ /** `updateArgs()` ran since the last display update; the next render applies it. */
126
+ argsPending = false;
125
127
  result;
126
128
  hideComponent = false;
127
129
  constructor(toolName, toolCallId, args, options = {}, toolDefinition, ui, cwd) {
@@ -179,6 +181,8 @@ export class ToolExecutionComponent extends Container {
179
181
  isError: this.result?.isError ?? false,
180
182
  durationMs: this.isPartial ? undefined : this.result?.durationMs,
181
183
  outputPad: this.outputPad,
184
+ keyText,
185
+ keyHint,
182
186
  };
183
187
  }
184
188
  createCallFallback() {
@@ -206,9 +210,14 @@ export class ToolExecutionComponent extends Container {
206
210
  return { handled: true };
207
211
  });
208
212
  }
213
+ /**
214
+ * Show new partial arguments. Applied at the next render, so a call streaming many argument deltas between two
215
+ * frames runs its renderer once per frame, not once per delta (#9265).
216
+ */
209
217
  updateArgs(args) {
210
218
  this.args = args;
211
- this.updateDisplay();
219
+ this.argsPending = true;
220
+ this.ui.requestRender();
212
221
  }
213
222
  markExecutionStarted() {
214
223
  this.executionStarted = true;
@@ -257,6 +266,8 @@ export class ToolExecutionComponent extends Container {
257
266
  this.updateDisplay();
258
267
  }
259
268
  render(width) {
269
+ if (this.argsPending)
270
+ this.updateDisplay();
260
271
  if (this.hideComponent) {
261
272
  return [];
262
273
  }
@@ -336,6 +347,7 @@ export class ToolExecutionComponent extends Container {
336
347
  }
337
348
  composeDisplay() {
338
349
  const theme = piTheme();
350
+ this.argsPending = false;
339
351
  const bgFn = enclosingToolBackground(theme, this.isPartial ? "toolPendingBg"
340
352
  : this.result?.isError ? "toolErrorBg" : "toolSuccessBg");
341
353
  let hasContent = false;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/components/tree-selector.ts.
4
4
  * Modifications: Port remaps public types/components plus owned keybindings/theme helpers while
5
5
  * preserving tree behavior; bare A1 uses compact modal chrome and label editing, four-mode
@@ -106,6 +106,7 @@ export declare class TreeSelectorComponent extends Container implements Focusabl
106
106
  private restoreTreeContent;
107
107
  private showLabelInput;
108
108
  private hideLabelInput;
109
+ get capturesViewportInput(): boolean;
109
110
  handleInput(keyData: string): void;
110
111
  getTreeList(): TreeList;
111
112
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/components/tree-selector.ts.
4
4
  * Modifications: Port remaps public types/components plus owned keybindings/theme helpers while
5
5
  * preserving tree behavior; bare A1 uses compact modal chrome and label editing, four-mode
@@ -807,9 +807,7 @@ class TreeList {
807
807
  formatToolCall(name, args) {
808
808
  const shortenPath = (p) => {
809
809
  const home = process.env.HOME || process.env.USERPROFILE || "";
810
- if (home && p.startsWith(home))
811
- return `~${p.slice(home.length)}`;
812
- return p;
810
+ return home && p.startsWith(home) ? `~${p.slice(home.length)}` : p;
813
811
  };
814
812
  switch (name) {
815
813
  case "read": {
@@ -1322,6 +1320,9 @@ export class TreeSelectorComponent extends Container {
1322
1320
  this.labelInputContainer.clear();
1323
1321
  this.restoreTreeContent();
1324
1322
  }
1323
+ get capturesViewportInput() {
1324
+ return this.labelInput === null;
1325
+ }
1325
1326
  handleInput(keyData) {
1326
1327
  if (this.labelInput) {
1327
1328
  this.labelInput.handleInput(keyData);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/components/trust-selector.ts.
4
4
  * Modifications: Mechanical source-synchronized trust selector port with injected public
5
5
  * ProjectTrustStore-derived options, remapped owned theme imports, the shared bare-A1 modal shortcut
@@ -6,4 +6,5 @@ export declare function editInExternalEditor(options: {
6
6
  readonly content: string;
7
7
  } | {
8
8
  readonly status: "failed";
9
+ readonly message: string;
9
10
  }>;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/external-editor.ts.
4
4
  * Modifications: Mechanical port: retain temporary prompt file, asynchronous inherited-stdio editor
5
5
  * process, completion readback, and best-effort cleanup behind the owned extension-editor component.
@@ -16,18 +16,25 @@ export async function editInExternalEditor(options) {
16
16
  writeFileSync(filePath, options.content, "utf-8");
17
17
  const [editor, ...editorArgs] = options.command.split(" ");
18
18
  if (!editor)
19
- return { status: "failed" };
19
+ return { status: "failed", message: "No external editor command is configured" };
20
20
  process.stdout.write(`Launching external editor: ${options.command}\nPi will resume when the editor exits.\n`);
21
- const exitCode = await new Promise(resolve => {
21
+ const exit = await new Promise(resolve => {
22
22
  const child = spawn(editor, [...editorArgs, filePath], {
23
23
  stdio: "inherit",
24
24
  shell: process.platform === "win32",
25
25
  });
26
26
  child.on("error", () => resolve(null));
27
- child.on("close", code => resolve(code));
27
+ child.on("close", (code, signal) => resolve(code ?? signal));
28
28
  });
29
- if (exitCode !== 0)
30
- return { status: "failed" };
29
+ if (exit === null) {
30
+ return { status: "failed", message: `Failed to launch external editor: ${options.command}` };
31
+ }
32
+ if (exit !== 0) {
33
+ return {
34
+ status: "failed",
35
+ message: `External editor exited with ${typeof exit === "number" ? `code ${exit}` : exit}; prompt unchanged`,
36
+ };
37
+ }
31
38
  // Rationale: upstream strips the BOM through a private util the package does not export; the check lives here.
32
39
  const edited = readFileSync(filePath, "utf-8");
33
40
  return { status: "complete", content: (edited.startsWith("") ? edited.slice(1) : edited).replace(/\n$/, "") };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/components/editor.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, semantic border state with the user-approved numeric-only
@@ -48,6 +48,8 @@ export declare class HistoryEditorCore implements Component, Focusable {
48
48
  private state;
49
49
  /** Focusable interface - set by TUI when focus changes */
50
50
  focused: boolean;
51
+ /** The open autocomplete menu receives fullscreen viewport keys, such as PageUp/PageDown. */
52
+ get capturesViewportInput(): boolean;
51
53
  protected tui: TUI;
52
54
  private theme;
53
55
  private paddingX;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/components/editor.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, semantic border state with the user-approved numeric-only
@@ -243,6 +243,10 @@ export class HistoryEditorCore {
243
243
  };
244
244
  /** Focusable interface - set by TUI when focus changes */
245
245
  focused = false;
246
+ /** The open autocomplete menu receives fullscreen viewport keys, such as PageUp/PageDown. */
247
+ get capturesViewportInput() {
248
+ return this.autocompleteState !== null;
249
+ }
246
250
  tui;
247
251
  theme;
248
252
  paddingX = 0;
@@ -734,7 +738,10 @@ export class HistoryEditorCore {
734
738
  this.cancelAutocomplete();
735
739
  return;
736
740
  }
737
- if (kb.matches(data, "tui.select.up") || kb.matches(data, "tui.select.down")) {
741
+ if (kb.matches(data, "tui.select.up") ||
742
+ kb.matches(data, "tui.select.down") ||
743
+ kb.matches(data, "tui.select.pageUp") ||
744
+ kb.matches(data, "tui.select.pageDown")) {
738
745
  this.autocompleteList.handleInput(data);
739
746
  return;
740
747
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/kill-ring.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/kill-ring.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/keys.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/utils.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/undo-stack.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/undo-stack.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-tui 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-tui 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/tui/src/word-navigation.ts.
4
4
  * Modifications: Owned editor core or minimal editor-local helper subset; public imports, strict
5
5
  * types, typed persistent-history hooks, and semantic border state. Public terminal runtime/exports
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/model-search.ts.
4
4
  * Modifications: Mechanical source-synchronized port preserving pinned model search terms for stateful
5
5
  * scoped-model filtering.
@@ -11,6 +11,16 @@ export interface ModelSearchItem {
11
11
  name?: string;
12
12
  }
13
13
  export declare function getModelSearchText(item: ModelSearchItem): string;
14
+ /**
15
+ * Returns the model name when it has words the ID does not, e.g. a renamed override like
16
+ * "MiniMax M3 [rasmus@openrouter, parasail]" for "minimax/minimax-m3". Names that only
17
+ * restate the ID with different casing, separators, or a dropped namespace/version suffix
18
+ * ("Claude Sonnet 4.5 (EU)" for "eu.anthropic.claude-sonnet-4-5-20250929-v1:0") return undefined.
19
+ */
20
+ export declare function getDistinctModelName(item: {
21
+ id: string;
22
+ name?: string;
23
+ }): string | undefined;
14
24
  /**
15
25
  * The /model selector search should rank exact provider-prefixed queries before proxy-provider IDs
16
26
  * like openrouter/openai/gpt-5, so keep the bare model ID out of the leading position.
@@ -3,6 +3,27 @@ export function getModelSearchText(item) {
3
3
  const name = item.name ? ` ${item.name}` : "";
4
4
  return `${id} ${provider} ${provider}/${id} ${provider} ${id}${name}`;
5
5
  }
6
+ const splitModelLabel = (value) => value
7
+ .toLowerCase()
8
+ .split(/[^\p{L}\p{N}]+/u)
9
+ .filter(Boolean);
10
+ /**
11
+ * Returns the model name when it has words the ID does not, e.g. a renamed override like
12
+ * "MiniMax M3 [rasmus@openrouter, parasail]" for "minimax/minimax-m3". Names that only
13
+ * restate the ID with different casing, separators, or a dropped namespace/version suffix
14
+ * ("Claude Sonnet 4.5 (EU)" for "eu.anthropic.claude-sonnet-4-5-20250929-v1:0") return undefined.
15
+ */
16
+ export function getDistinctModelName(item) {
17
+ const name = item.name?.trim();
18
+ if (!name)
19
+ return undefined;
20
+ const idWords = splitModelLabel(item.id);
21
+ const idTokens = new Set(idWords);
22
+ const compactId = idWords.join("");
23
+ // Single-character words must match a whole ID token: "4" is not covered by "mistral-small-2603".
24
+ const isCovered = (word) => idTokens.has(word) || (word.length > 1 && compactId.includes(word));
25
+ return splitModelLabel(name).every(isCovered) ? undefined : name;
26
+ }
6
27
  /**
7
28
  * The /model selector search should rank exact provider-prefixed queries before proxy-provider IDs
8
29
  * like openrouter/openai/gpt-5, so keep the bare model ID out of the leading position.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/program-status-reporter.ts.
4
4
  * Modifications: Remap Pi session events to A1's neutral run events, inject the terminal reporter, use
5
5
  * A1's application identity, and clear dialog state when the owned session changes.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/theme/theme-controller.ts.
4
4
  * Modifications: Source-synchronized controller port: renamed owner class, injected dependency-free
5
5
  * settings/runtime ports, remapped private theme helpers to the public-backed A1 theme adapter, and
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.5.0 (MIT), commit f9a26365568127461c47a07a37dcb42c140a3ac5,
3
3
  * packages/coding-agent/src/modes/interactive/theme/theme.ts.
4
4
  * Modifications: Source-synchronized theme port: retain pinned theme schema, variable/color
5
5
  * resolution, built-in and custom loading, terminal detection, and layout defaults while constructing
@@ -217,9 +217,17 @@ export class PiEngineAdapter {
217
217
  return;
218
218
  }
219
219
  if (release.status === "installed") {
220
+ this.#state.diagnosticsState.clearCodes(["release-update-installed", "release-update-blocked"]);
220
221
  this.#addDiagnostic("info", "release-update-installed", `Update ${release.version} installed; restart to update.`, true);
221
222
  }
222
- else {
223
+ else if (release.status === "blocked") {
224
+ this.#state.diagnosticsState.clearCodes(["release-update-installed", "release-update-blocked"]);
225
+ this.#addDiagnostic("info", "release-update-blocked", `Update ${release.version} prepared; activation blocked.`, true);
226
+ }
227
+ else if (release.status === "blocked-cleared") {
228
+ this.#state.diagnosticsState.clearCodes(["release-update-blocked"]);
229
+ }
230
+ else if (release.status === undefined || release.status === "available") {
223
231
  const changelog = release.changelogUrl === null ? "" : `\nChangelog: ${release.changelogUrl}`;
224
232
  this.#addDiagnostic("info", "release-update", `New version ${release.version} is available. Run ${release.command}${changelog}`, true);
225
233
  }
@@ -5,5 +5,6 @@ export declare class EngineDiagnostics {
5
5
  get values(): readonly OwnedUiDiagnostics[];
6
6
  get messages(): readonly string[];
7
7
  record(severity: OwnedUiDiagnostics["severity"], code: string, message: string, recoverable: boolean): OwnedUiDiagnostics;
8
+ clearCodes(codes: readonly string[]): boolean;
8
9
  acknowledgeClientVersion(version: string): boolean;
9
10
  }
@@ -14,14 +14,27 @@ export class EngineDiagnostics {
14
14
  this.#messages = [...this.#messages, message].slice(-8);
15
15
  return diagnostic;
16
16
  }
17
+ clearCodes(codes) {
18
+ const selected = new Set(codes);
19
+ return this.#remove(diagnostic => selected.has(diagnostic.code));
20
+ }
17
21
  acknowledgeClientVersion(version) {
18
22
  if (validSemver(version) === null)
19
23
  return false;
24
+ return this.#remove(diagnostic => {
25
+ const target = diagnostic.code === "release-update-installed"
26
+ ? /^Update (\S+) installed; restart to update\.$/u.exec(diagnostic.message)?.[1]
27
+ : diagnostic.code === "release-update-blocked"
28
+ ? /^Update (\S+) prepared; activation blocked\.$/u.exec(diagnostic.message)?.[1]
29
+ : undefined;
30
+ return target !== undefined && validSemver(target) !== null && gte(version, target);
31
+ });
32
+ }
33
+ #remove(predicate) {
20
34
  const removed = new Set();
21
35
  for (let index = this.#values.length - 1; index >= 0; index--) {
22
36
  const diagnostic = this.#values[index];
23
- const installed = diagnostic.code === "release-update-installed" ? /^Update (\S+) installed; restart to update\.$/u.exec(diagnostic.message)?.[1] : undefined;
24
- if (installed !== undefined && validSemver(installed) !== null && gte(version, installed)) {
37
+ if (predicate(diagnostic)) {
25
38
  removed.add(diagnostic.message);
26
39
  this.#values.splice(index, 1);
27
40
  }