@timurproko/a1 0.2.7-dev.779 → 0.2.7-dev.788

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 (99) hide show
  1. package/dist/app/session-shell/session-shell-root.js +4 -3
  2. package/dist/app/session-shell/session-shell.js +5 -1
  3. package/dist/app/session-shell/shell-host.d.ts +0 -2
  4. package/dist/app/session-shell/shell-host.js +3 -20
  5. package/dist/cli/tabs.js +15 -0
  6. package/dist/composition/owned-ui.d.ts +0 -1
  7. package/dist/composition/owned-ui.js +39 -30
  8. package/dist/contracts/owned-ui/session-workflows.d.ts +4 -1
  9. package/dist/features/resident-tab/auto-name.d.ts +2 -2
  10. package/dist/features/resident-tab/auto-name.js +7 -5
  11. package/dist/features/resident-tab/index.d.ts +1 -1
  12. package/dist/features/resident-tab/index.js +1 -1
  13. package/dist/foundation/release/progress-palette.generated.d.ts +2 -2
  14. package/dist/foundation/release/progress-palette.generated.js +2 -2
  15. package/dist/foundation/startup/startup-descriptor.js +2 -2
  16. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -2
  17. package/dist/integrations/pi/components/resources/builtin-themes.js +2 -2
  18. package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
  19. package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
  20. package/dist/integrations/pi/components/shell-selectors-dialogs.js +1 -0
  21. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
  22. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +1 -1
  23. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  24. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
  25. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
  26. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
  27. package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
  28. package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
  29. package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
  30. package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
  31. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +1 -1
  32. package/dist/integrations/pi/components/upstream/components/owned-editor.js +1 -1
  33. package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
  34. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +1 -1
  35. package/dist/integrations/pi/components/upstream/components/session-footer.js +1 -1
  36. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
  37. package/dist/integrations/pi/components/upstream/components/session-selector.js +1 -1
  38. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
  39. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
  40. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +1 -1
  41. package/dist/integrations/pi/components/upstream/components/status-indicator.js +1 -1
  42. package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
  43. package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
  44. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +1 -1
  45. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +1 -1
  46. package/dist/integrations/pi/components/upstream/components/tool-execution.js +1 -1
  47. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +1 -1
  48. package/dist/integrations/pi/components/upstream/components/tree-selector.js +3 -11
  49. package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
  50. package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
  51. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +1 -1
  52. package/dist/integrations/pi/components/upstream/history/editor-core.js +1 -1
  53. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
  54. package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
  55. package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
  56. package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
  57. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
  58. package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
  59. package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
  60. package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
  61. package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
  62. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
  63. package/dist/integrations/pi/components/upstream/theme/theme.js +1 -1
  64. package/dist/integrations/pi/engine/pi-settings-metadata.json +12 -0
  65. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  66. package/dist/integrations/pi/engine/settings-bridge.js +2 -0
  67. package/dist/integrations/pi/engine/settings-port.js +10 -1
  68. package/dist/integrations/pi/engine/workflow-runner.js +64 -2
  69. package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
  70. package/dist/integrations/pi/engine/workflow-support.js +36 -0
  71. package/dist/integrations/pi/engine/workflows.d.ts +3 -1
  72. package/dist/integrations/pi/engine/workflows.js +1 -0
  73. package/dist/integrations/pi/startup-public.js +38 -35
  74. package/dist/integrations/pi/startup-public.manifest.json +110 -116
  75. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +1 -1
  76. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +1 -1
  77. package/dist/native/darwin-arm64/a1_session_lock.node +0 -0
  78. package/dist/native/darwin-arm64/manifest.json +1 -1
  79. package/dist/native/darwin-arm64/terminal-host +0 -0
  80. package/dist/native/darwin-arm64/terminal-host.manifest.json +5 -5
  81. package/dist/native/darwin-x64/a1_session_lock.node +0 -0
  82. package/dist/native/darwin-x64/manifest.json +1 -1
  83. package/dist/native/darwin-x64/terminal-host +0 -0
  84. package/dist/native/darwin-x64/terminal-host.manifest.json +5 -5
  85. package/dist/native/linux-x64/a1_session_lock.node +0 -0
  86. package/dist/native/linux-x64/manifest.json +1 -1
  87. package/dist/native/linux-x64/terminal-host +0 -0
  88. package/dist/native/linux-x64/terminal-host.manifest.json +5 -5
  89. package/dist/native/win32-x64/a1_session_lock.node +0 -0
  90. package/dist/native/win32-x64/manifest.json +2 -2
  91. package/dist/native/win32-x64/process-guardian.exe +0 -0
  92. package/dist/native/win32-x64/terminal-host.exe +0 -0
  93. package/dist/native/win32-x64/terminal-host.manifest.json +4 -4
  94. package/dist/runtime-payload-inventory.json +4242 -3716
  95. package/docs/architecture/toolchain.md +1 -1
  96. package/docs/ci-release-runbook.md +2 -2
  97. package/docs/openspec-archive-automation.md +5 -5
  98. package/docs/validation.md +9 -1
  99. package/package.json +3 -3
@@ -960,9 +960,10 @@ export class OwnedUiSessionShellRoot {
960
960
  return;
961
961
  }
962
962
  // Rationale: the pinned engine links both share URLs; the workflow result carries the plain URLs.
963
- const message = result.command === "share" && result.detail
964
- ? `${linkShareUrl(result.message)}\nGist: ${piShellHyperlink(result.detail)}`
965
- : result.message;
963
+ const message = result.command !== "share" ? result.message
964
+ : result.detail ? `${linkShareUrl(result.message)}\nGist: ${piShellHyperlink(result.detail)}`
965
+ // Protocol: Radius shares carry only the artifact URL.
966
+ : linkShareUrl(result.message);
966
967
  this.appendWorkflowStatus(message);
967
968
  }
968
969
  toggleThinkingVisibility() {
@@ -1391,7 +1391,11 @@ export class OwnedUiSessionPresenter {
1391
1391
  }
1392
1392
  let result;
1393
1393
  try {
1394
- result = await this.backend.workflows.executeWorkflow(shareSurface === undefined ? request : { ...request, signal: shareSurface.signal });
1394
+ result = await this.backend.workflows.executeWorkflow(shareSurface === undefined ? request : {
1395
+ ...request,
1396
+ signal: shareSurface.signal,
1397
+ onProgress: message => { shareSurface.setMessage?.(message); this.#terminal.requestRender(); },
1398
+ });
1395
1399
  }
1396
1400
  finally {
1397
1401
  if (operationSurface) {
@@ -98,8 +98,6 @@ export declare class OwnedUiTerminalHost implements OwnedUiTerminalHostContract<
98
98
  active(): OwnedUiHostedPresenter | null;
99
99
  requestRender(from: OwnedUiHostedPresenter, force?: boolean): void;
100
100
  start(): void;
101
- /** Hidden resident tabs retain engine/status work but stop producing terminal animation frames. */
102
- setPresentationVisible(visible: boolean): void;
103
101
  /** Closes one presenter. Closing the last one ends the terminal. */
104
102
  close(presenter: OwnedUiHostedPresenter): Promise<void>;
105
103
  dispose(): Promise<void>;
@@ -42,8 +42,6 @@ export class OwnedUiTerminalHost {
42
42
  #focused = false;
43
43
  #pointerReporting = false;
44
44
  #started = false;
45
- #presentationVisible = true;
46
- #releaseVisibilityHold;
47
45
  #ending;
48
46
  constructor(options) {
49
47
  this.#customViewport = options.layout === "custom-viewport";
@@ -148,8 +146,10 @@ export class OwnedUiTerminalHost {
148
146
  active() {
149
147
  return this.#active;
150
148
  }
149
+ // Invariant: resident tab visibility never gates rendering here; a hidden tab keeps painting into its
150
+ // resident terminal, and the native holder alone withholds inactive surfaces from attach clients.
151
151
  requestRender(from, force = false) {
152
- if (this.#presentationVisible && from === this.#active)
152
+ if (from === this.#active)
153
153
  this.runtime.requestRender(force);
154
154
  }
155
155
  start() {
@@ -157,26 +157,9 @@ export class OwnedUiTerminalHost {
157
157
  return;
158
158
  this.#started = true;
159
159
  this.runtime.start();
160
- if (!this.#presentationVisible)
161
- this.#releaseVisibilityHold = this.runtime.beginPresentationHold();
162
160
  if (this.#customViewport)
163
161
  this.#setPointerReporting(true);
164
162
  }
165
- /** Hidden resident tabs retain engine/status work but stop producing terminal animation frames. */
166
- setPresentationVisible(visible) {
167
- if (this.#presentationVisible === visible)
168
- return;
169
- this.#presentationVisible = visible;
170
- if (!this.#started || this.#ending !== undefined)
171
- return;
172
- if (visible) {
173
- this.#releaseVisibilityHold?.();
174
- this.#releaseVisibilityHold = undefined;
175
- }
176
- else if (this.#releaseVisibilityHold === undefined) {
177
- this.#releaseVisibilityHold = this.runtime.beginPresentationHold();
178
- }
179
- }
180
163
  /** Closes one presenter. Closing the last one ends the terminal. */
181
164
  close(presenter) {
182
165
  if (this.#ending !== undefined || !this.#presenters.has(presenter))
package/dist/cli/tabs.js CHANGED
@@ -132,9 +132,24 @@ function status(result) {
132
132
  `detachment: ${String(result.detachmentMode ?? "unknown")}${result.detachmentVerified === false ? " (not verified)" : ""}`,
133
133
  `tabs: ${String(result.tabs ?? 0)}${Object.keys(byStatus).length > 0 ? ` (${Object.entries(byStatus).map(([key, value]) => `${key} ${String(value)}`).join(", ")})` : ""}`,
134
134
  `clients: ${String(result.clients ?? 0)}`,
135
+ ...startsAndLifecycle(result),
135
136
  `limits: ${Object.entries(limits).map(([key, value]) => `${key} ${String(value)}`).join(", ")}`,
136
137
  `counters: ${Object.entries(counters).map(([key, value]) => `${key} ${String(value)}`).join(", ")}`,
137
138
  ...(Array.isArray(result.logs) ? result.logs.map(path => `log: ${String(path)}`) : []),
138
139
  ];
139
140
  return `${lines.join("\n")}\n`;
140
141
  }
142
+ /** Lifecycle work running this long means a terminal's tab requests are stuck. */
143
+ const LIFECYCLE_STALL_MS = 10_000;
144
+ function startsAndLifecycle(result) {
145
+ const lines = [];
146
+ const starts = result.starts;
147
+ if (starts)
148
+ lines.push(`starts: active ${String(starts.active ?? 0)}, waiting ${String(starts.interactiveWaiting ?? 0)}, recovering ${String(starts.recoverySlots ?? 0)}`);
149
+ const lifecycle = result.lifecycle;
150
+ if (lifecycle) {
151
+ const oldest = typeof lifecycle.oldestMs === "number" ? lifecycle.oldestMs : 0;
152
+ lines.push(`lifecycle: pending ${String(lifecycle.pending ?? 0)}, oldest ${oldest}ms${oldest > LIFECYCLE_STALL_MS ? " (stalled)" : ""}`);
153
+ }
154
+ return lines;
155
+ }
@@ -87,5 +87,4 @@ export declare function composeOwnedUiApplication(options?: OwnedUiCompositionOp
87
87
  export declare function composeOwnedUi(options?: OwnedUiCompositionOptions): Promise<OwnedUiComposition>;
88
88
  export declare function bindResidentTabBridge(tabBridge: TabBridgeClient, backend: Pick<ComposedSessionBackend, "identity" | "session" | "workflows" | "generateResidentTabName">, recovery?: Pick<ResidentTabRecovery, "settled"> | null, options?: {
89
89
  readonly autoName?: boolean;
90
- readonly onVisibility?: (visible: boolean) => void;
91
90
  }): Promise<() => void>;
@@ -164,13 +164,8 @@ export async function composeOwnedUi(options = {}) {
164
164
  const recoveredTabInput = await tabRecovery?.initialize(currentBackendSessionFile(backend), backend.identity.sessionId);
165
165
  if (tabBridge !== null && settings !== null && ownedSurfaces)
166
166
  tabBridge.accent(settings.value("accentColor"));
167
- let residentTabVisible = true;
168
- let applyResidentTabVisibility = () => { };
169
167
  let removeControllerBoundaryInput = () => { };
170
- const unsubscribeTabBridge = tabBridge === null ? () => { } : await bindResidentTabBridge(tabBridge, backend, tabRecovery, {
171
- autoName: settings?.value("tabsAutoName") ?? true,
172
- onVisibility: visible => { residentTabVisible = visible; applyResidentTabVisibility(); },
173
- });
168
+ const unsubscribeTabBridge = tabBridge === null ? () => { } : await bindResidentTabBridge(tabBridge, backend, tabRecovery, { autoName: settings?.value("tabsAutoName") ?? true });
174
169
  let releaseNotes = null;
175
170
  let releaseNotesFailure;
176
171
  if (ownedSurfaces) {
@@ -322,7 +317,6 @@ export async function composeOwnedUi(options = {}) {
322
317
  // the host and paints once attached.
323
318
  terminalHost = createdTerminalHost = new OwnedUiTerminalHost(sessionTerminalHostOptions(presenterOptions));
324
319
  if (tabBridge !== null) {
325
- applyResidentTabVisibility = () => terminalHost.setPresentationVisible(residentTabVisible);
326
320
  removeControllerBoundaryInput = terminalHost.runtime.addPreInputListener(data => ({
327
321
  data: tabBridge.consumeControllerBoundaryInput(data),
328
322
  }));
@@ -375,7 +369,6 @@ export async function composeOwnedUi(options = {}) {
375
369
  exitNotice = import("../app/session-shell/exit-notice.js")
376
370
  .then(module => module.armExitNotice(backend, exitNoticePath), () => null);
377
371
  presenter.start();
378
- applyResidentTabVisibility();
379
372
  void announceNewerRelease().catch(() => undefined);
380
373
  },
381
374
  flush: () => backend.session.flushEvents(),
@@ -420,14 +413,38 @@ export async function bindResidentTabBridge(tabBridge, backend, recovery = null,
420
413
  tabBridge.status("starting");
421
414
  const currentSessionFile = () => currentBackendSessionFile(backend);
422
415
  let pendingAutoName = null;
416
+ const isDefaultName = (name) => name == null || /^agent(?: \d+)?$/i.test(name);
417
+ const currentSessionName = () => backend.session.view().status.footer?.sessionName ?? null;
423
418
  const announceSession = () => {
424
- const name = backend.session.view().status.footer?.sessionName ?? null;
425
- const nameSource = name === pendingAutoName ? "auto" : name === null || /^agent(?: \d+)?$/i.test(name) ? "default" : "user";
419
+ const name = currentSessionName();
420
+ const nameSource = name === pendingAutoName ? "auto" : isDefaultName(name) ? "default" : "user";
426
421
  tabBridge.session(currentSessionFile(), name, nameSource);
427
422
  };
428
423
  let working = false;
429
424
  let lastTurnFailed = false;
430
425
  let autoNameAttempted = false;
426
+ let autoNameArmed = false;
427
+ // Invariant: naming launches once per tab during an agent run, as soon as its prompt is projected,
428
+ // and runs beside the turn instead of waiting for it to settle.
429
+ const launchAutoName = () => {
430
+ if (!autoNameArmed || autoNameAttempted || options.autoName !== true || !isDefaultName(currentSessionName()))
431
+ return;
432
+ const prompt = backend.session.view().transcript.find(block => block.kind === "user")?.text.trim();
433
+ if (!prompt)
434
+ return;
435
+ autoNameAttempted = true;
436
+ void import("../features/resident-tab/index.js").then(({ generateAutoName }) => generateAutoName(prompt, request => backend.generateResidentTabName(request.prompt, request.maxTokens, request.signal))).then(async (name) => {
437
+ // Invariant: a manual rename made while generation was pending owns both the session and the tab.
438
+ if (!isDefaultName(currentSessionName()))
439
+ return;
440
+ pendingAutoName = name;
441
+ const result = await backend.workflows.executeWorkflow({ command: "name", argument: name });
442
+ if (result.outcome === "completed")
443
+ tabBridge.session(currentSessionFile(), name, "auto");
444
+ else if (pendingAutoName === name)
445
+ pendingAutoName = null;
446
+ }).catch(() => { pendingAutoName = null; });
447
+ };
431
448
  const reportStatus = (lifecycle) => {
432
449
  const view = backend.session.view();
433
450
  const pendingRequests = view.dialog == null ? 0 : 1;
@@ -441,10 +458,9 @@ export async function bindResidentTabBridge(tabBridge, backend, recovery = null,
441
458
  };
442
459
  announceSession();
443
460
  const unsubscribeCommands = typeof tabBridge.onCommand === "function" ? tabBridge.onCommand(command => {
444
- if (command.type === "visibility") {
445
- options.onVisibility?.(command.visible);
446
- }
447
- else if (command.type === "rename") {
461
+ // Invariant: visibility stays decoded for generation-1 peers but never pauses rendering; a hidden tab
462
+ // keeps its resident terminal current while the holder withholds only its client surfaces.
463
+ if (command.type === "rename") {
448
464
  void backend.workflows.executeWorkflow({ command: "name", argument: command.name }).catch(() => { });
449
465
  }
450
466
  else if (command.type === "stop") {
@@ -461,24 +477,17 @@ export async function bindResidentTabBridge(tabBridge, backend, recovery = null,
461
477
  if (wasWorking && !working && recovery !== null) {
462
478
  void recovery.settled(currentSessionFile()).catch(() => tabBridge.degraded(true));
463
479
  }
464
- if (wasWorking && !working && options.autoName === true && !autoNameAttempted) {
465
- autoNameAttempted = true;
466
- const view = backend.session.view();
467
- const currentName = view.status.footer?.sessionName;
468
- const prompt = view.transcript.find(block => block.kind === "user")?.text.trim();
469
- if (prompt && (currentName == null || /^agent(?: \d+)?$/i.test(currentName))) {
470
- void import("../features/resident-tab/index.js").then(({ generateAutoName }) => generateAutoName(prompt, request => backend.generateResidentTabName(request.prompt, request.maxTokens, request.signal))).then(async (name) => {
471
- pendingAutoName = name;
472
- const result = await backend.workflows.executeWorkflow({ command: "name", argument: name });
473
- if (result.outcome === "completed")
474
- tabBridge.session(currentSessionFile(), name, "auto");
475
- else if (pendingAutoName === name)
476
- pendingAutoName = null;
477
- }).catch(() => { pendingAutoName = null; });
478
- }
479
- }
480
480
  }
481
+ if (event.type === "agent-run-started") {
482
+ autoNameArmed = true;
483
+ launchAutoName();
484
+ }
485
+ // Rationale: Pi starts the run before it projects the user message, so the prompt may arrive later.
486
+ if (event.type === "transcript-block" || event.type === "session-view")
487
+ launchAutoName();
481
488
  if (event.type === "agent-run-settled") {
489
+ launchAutoName();
490
+ autoNameArmed = false;
482
491
  lastTurnFailed = !event.successful && !event.aborted;
483
492
  tabBridge.prompt(event.aborted);
484
493
  reportStatus();
@@ -49,6 +49,8 @@ export interface OwnedUiWorkflowRequest {
49
49
  readonly cwdOverride?: string;
50
50
  /** Cancellation for an owned operation surface such as `/share`. */
51
51
  readonly signal?: AbortSignal;
52
+ /** Progress label for that operation surface, e.g. when `/share` picks its upload destination. */
53
+ readonly onProgress?: (message: string) => void;
52
54
  readonly treeSummary?: {
53
55
  readonly summarize: boolean;
54
56
  readonly customInstructions?: string;
@@ -272,6 +274,7 @@ export interface OwnedUiSessionSettingsSnapshot {
272
274
  readonly autocompleteMaxVisible: number;
273
275
  readonly quietStartup: boolean | "header";
274
276
  readonly defaultProjectTrust: "ask" | "always" | "never";
277
+ readonly sessionShareDestination: "auto" | "gist" | "radius";
275
278
  readonly clearOnShrink: boolean;
276
279
  readonly showTerminalProgress: boolean;
277
280
  readonly tuiMode: "regular" | "fullscreen";
@@ -289,7 +292,7 @@ export type OwnedUiJsonValue = null | boolean | number | string | readonly Owned
289
292
  /** The layer that installs a setting's live effect. */
290
293
  export type OwnedUiSettingOwner = "agent" | "shell" | "terminal" | "startup" | "shutdown" | "installation";
291
294
  /** Engine settings whose live effect an owner may bind. */
292
- export type OwnedUiSessionSettingKey = "autoCompact" | "showImages" | "imageWidthCells" | "autoResizeImages" | "blockImages" | "enableSkillCommands" | "steeringMode" | "followUpMode" | "transport" | "httpIdleTimeoutMs" | "cacheWarmingMode" | "modelThinkingLevels" | "theme" | "hideThinkingBlock" | "mermaidRenderingMode" | "showCacheMissNotices" | "collapseChangelog" | "enableInstallTelemetry" | "quietStartup" | "defaultProjectTrust" | "doubleEscapeAction" | "treeFilterMode" | "showHardwareCursor" | "editorPaddingX" | "outputPad" | "autocompleteMaxVisible" | "clearOnShrink" | "showTerminalProgress" | "tuiMode" | "fullscreenExitOutput" | "fullscreenScrollbar" | "fullscreenCopyOnSelect" | "fullscreenWheelScrollLines" | "warnings";
295
+ export type OwnedUiSessionSettingKey = "autoCompact" | "showImages" | "imageWidthCells" | "autoResizeImages" | "blockImages" | "enableSkillCommands" | "steeringMode" | "followUpMode" | "transport" | "httpIdleTimeoutMs" | "cacheWarmingMode" | "modelThinkingLevels" | "theme" | "hideThinkingBlock" | "mermaidRenderingMode" | "showCacheMissNotices" | "collapseChangelog" | "enableInstallTelemetry" | "quietStartup" | "defaultProjectTrust" | "sessionShareDestination" | "doubleEscapeAction" | "treeFilterMode" | "showHardwareCursor" | "editorPaddingX" | "outputPad" | "autocompleteMaxVisible" | "clearOnShrink" | "showTerminalProgress" | "tuiMode" | "fullscreenExitOutput" | "fullscreenScrollbar" | "fullscreenCopyOnSelect" | "fullscreenWheelScrollLines" | "warnings";
293
296
  export interface OwnedUiSettingEffectHandler {
294
297
  /** Install one value in the active owner. Handlers must be idempotent and reversible. */
295
298
  apply(value: OwnedUiJsonValue): void | Promise<void>;
@@ -1,6 +1,6 @@
1
1
  export declare const AUTO_NAME_MAX_LENGTH = 16;
2
- export declare const AUTO_NAME_TIMEOUT_MS = 10000;
3
- export declare const AUTO_NAME_MAX_TOKENS = 64;
2
+ export declare const AUTO_NAME_TIMEOUT_MS = 30000;
3
+ export declare const AUTO_NAME_TOKEN_BUDGETS: readonly [4096, 32768];
4
4
  export declare function normalizeAutoName(value: string): string | null;
5
5
  export declare function fallbackAutoName(prompt: string): string;
6
6
  export interface AutoNameCompletion {
@@ -1,6 +1,8 @@
1
1
  export const AUTO_NAME_MAX_LENGTH = 16;
2
- export const AUTO_NAME_TIMEOUT_MS = 10_000;
3
- export const AUTO_NAME_MAX_TOKENS = 64;
2
+ export const AUTO_NAME_TIMEOUT_MS = 30_000;
3
+ // Rationale: reasoning models can spend a small ceiling on hidden thinking and emit no title, so an
4
+ // answerless attempt retries with a larger bound; budgets stay strictly increasing, as in v2.
5
+ export const AUTO_NAME_TOKEN_BUDGETS = [4_096, 32_768];
4
6
  export function normalizeAutoName(value) {
5
7
  const normalized = value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").replace(/-+/g, "-");
6
8
  if (!normalized)
@@ -17,14 +19,14 @@ export function fallbackAutoName(prompt) {
17
19
  return normalizeAutoName(words.slice(0, 3).join("-")) ?? "new-task";
18
20
  }
19
21
  export async function generateAutoName(firstPrompt, complete, timeoutMs = AUTO_NAME_TIMEOUT_MS) {
20
- for (let attempt = 0; attempt < 2; attempt++) {
22
+ for (const maxTokens of AUTO_NAME_TOKEN_BUDGETS) {
21
23
  const controller = new AbortController();
22
24
  const timer = setTimeout(() => controller.abort(), timeoutMs);
23
25
  timer.unref?.();
24
26
  try {
25
27
  const response = await complete({
26
28
  prompt: `Name this coding task with a lowercase hyphenated title of at most ${AUTO_NAME_MAX_LENGTH} characters. Reply only with the title.\n\n${firstPrompt.slice(0, 500)}`,
27
- maxTokens: AUTO_NAME_MAX_TOKENS,
29
+ maxTokens,
28
30
  signal: controller.signal,
29
31
  });
30
32
  const name = response === null ? null : normalizeAutoName(response);
@@ -32,7 +34,7 @@ export async function generateAutoName(firstPrompt, complete, timeoutMs = AUTO_N
32
34
  return name;
33
35
  }
34
36
  catch {
35
- // Rationale: naming is best effort; one retry precedes the deterministic fallback.
37
+ // Rationale: naming is best effort; the larger bounded attempt precedes the deterministic fallback.
36
38
  }
37
39
  finally {
38
40
  clearTimeout(timer);
@@ -1,3 +1,3 @@
1
- export { AUTO_NAME_MAX_LENGTH, AUTO_NAME_MAX_TOKENS, AUTO_NAME_TIMEOUT_MS, fallbackAutoName, generateAutoName, normalizeAutoName, type AutoNameCompletion, } from "./auto-name.js";
1
+ export { AUTO_NAME_MAX_LENGTH, AUTO_NAME_TIMEOUT_MS, AUTO_NAME_TOKEN_BUDGETS, fallbackAutoName, generateAutoName, normalizeAutoName, type AutoNameCompletion, } from "./auto-name.js";
2
2
  export { RESIDENT_TAB_SHORTCUTS, residentTabShortcutRegistry, type ResidentTabAction, type ResidentTabShortcut, } from "./shortcuts.js";
3
3
  export { deriveResidentTabStatus, type ResidentTabDerivedStatus, type ResidentTabFacts, } from "./status-deriver.js";
@@ -1,3 +1,3 @@
1
- export { AUTO_NAME_MAX_LENGTH, AUTO_NAME_MAX_TOKENS, AUTO_NAME_TIMEOUT_MS, fallbackAutoName, generateAutoName, normalizeAutoName, } from "./auto-name.js";
1
+ export { AUTO_NAME_MAX_LENGTH, AUTO_NAME_TIMEOUT_MS, AUTO_NAME_TOKEN_BUDGETS, fallbackAutoName, generateAutoName, normalizeAutoName, } from "./auto-name.js";
2
2
  export { RESIDENT_TAB_SHORTCUTS, residentTabShortcutRegistry, } from "./shortcuts.js";
3
3
  export { deriveResidentTabStatus, } from "./status-deriver.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Generated by scripts/pi/sync-progress-palette.ts from @earendil-works/pi-coding-agent 1.2.0
3
- * (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff. Do not edit directly.
2
+ * Generated by scripts/pi/sync-progress-palette.ts from @earendil-works/pi-coding-agent 1.3.0
3
+ * (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0. Do not edit directly.
4
4
  */
5
5
  export declare const SHARED_PROGRESS_ACCENT_ANSI = "\u001B[38;2;167;152;215m";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Generated by scripts/pi/sync-progress-palette.ts from @earendil-works/pi-coding-agent 1.2.0
3
- * (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff. Do not edit directly.
2
+ * Generated by scripts/pi/sync-progress-palette.ts from @earendil-works/pi-coding-agent 1.3.0
3
+ * (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0. Do not edit directly.
4
4
  */
5
5
  export const SHARED_PROGRESS_ACCENT_ANSI = "\u001b[38;2;167;152;215m";
@@ -10,7 +10,7 @@ export const STARTUP_DESCRIPTOR = Object.freeze({
10
10
  ],
11
11
  "generatedArtifact": {
12
12
  "path": "dist/integrations/pi/startup-public.js",
13
- "sha256": "2e5c23263868c689b0b76648a7565fe4384f8144f4c11b64569a08fc4d3502c2"
13
+ "sha256": "bca69314139a5503ccfc0678ffc86f3b7160f57a6ca55c86239b6587d3f627a3"
14
14
  },
15
15
  "dependencyLayerIdentity": {
16
16
  "source": "A1_RELEASE_LAYERS",
@@ -19,7 +19,7 @@ export const STARTUP_DESCRIPTOR = Object.freeze({
19
19
  "compileCacheNamespace": {
20
20
  "strategy": "node-abi-version-and-ordered-layer-sha256-v1"
21
21
  },
22
- "identity": "5d1fea810b3c76b1560dd3a743dd4db0b8d03935d9f5079fd4b2da55d4f1084a"
22
+ "identity": "163053e701440c93391663404f0d4ae96c74f66773fa0ca99f98c39b68a5d37b"
23
23
  });
24
24
 
25
25
  export function loadDeclaredStartupGraph() {
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Attributed owned theme resources adapted from @earendil-works/pi-coding-agent 1.2.0 (MIT),
3
- * commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff.
2
+ * Attributed owned theme resources adapted from @earendil-works/pi-coding-agent 1.3.0 (MIT),
3
+ * commit 71023aec1546d6d677a65669c5665c0927ce0dd0.
4
4
  * Upstream dark.json SHA-256: e1f96982f8cb7d2a48eca7db03c9cb282cb1e14a243680cd855638ecd6a251b6
5
5
  * Upstream light.json SHA-256: 2dee6a4be7f765e7fd7728166b7ebf8c29e4ce313f8ec6b38ae50699e3abc2f3
6
6
  * Modifications: removed upstream schema/export metadata; runtime color data is unchanged.
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Attributed owned theme resources adapted from @earendil-works/pi-coding-agent 1.2.0 (MIT),
3
- * commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff.
2
+ * Attributed owned theme resources adapted from @earendil-works/pi-coding-agent 1.3.0 (MIT),
3
+ * commit 71023aec1546d6d677a65669c5665c0927ce0dd0.
4
4
  * Upstream dark.json SHA-256: e1f96982f8cb7d2a48eca7db03c9cb282cb1e14a243680cd855638ecd6a251b6
5
5
  * Upstream light.json SHA-256: 2dee6a4be7f765e7fd7728166b7ebf8c29e4ce313f8ec6b38ae50699e3abc2f3
6
6
  * Modifications: removed upstream schema/export metadata; runtime color data is unchanged.
@@ -1,6 +1,8 @@
1
1
  import { type PiShellComponentPort, type PiShellEditorOptions } from "./shell-shared-facade.js";
2
2
  export interface PiShellOperationLoaderPort extends PiShellComponentPort {
3
3
  readonly signal: AbortSignal;
4
+ /** Relabels the running operation; the pinned comparison loader keeps its first label. */
5
+ readonly setMessage?: (message: string) => void;
4
6
  }
5
7
  export declare function createPiShellShareOperationDialog(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">, message: string): PiShellOperationLoaderPort;
6
8
  export declare function createPiShellOperationLoader(runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">, message: string): PiShellOperationLoaderPort;
@@ -18,6 +18,7 @@ class ShareOperationDialog {
18
18
  ], new DynamicBorder(paintPiBorder));
19
19
  }
20
20
  get signal() { return this.#loader.signal; }
21
+ setMessage(message) { this.#loader.setMessage(message); }
21
22
  invalidate() { this.#frame.invalidate(); }
22
23
  render(width) { return this.#frame.render(width); }
23
24
  handleInput(data) { this.#loader.handleInput(data); }
@@ -26,7 +27,7 @@ class ShareOperationDialog {
26
27
  export function createPiShellShareOperationDialog(runtime, message) {
27
28
  ensureTheme();
28
29
  const dialog = new ShareOperationDialog(runtime, message);
29
- return { ...componentPort(dialog), signal: dialog.signal };
30
+ return { ...componentPort(dialog), signal: dialog.signal, setMessage: message => dialog.setMessage(message) };
30
31
  }
31
32
  export function createPiShellOperationLoader(runtime, message) {
32
33
  ensureTheme();
@@ -66,6 +66,7 @@ export function createPiShellSettingsSelector(options) {
66
66
  onAutocompleteMaxVisibleChange: change("onAutocompleteMaxVisibleChange"),
67
67
  onQuietStartupChange: change("onQuietStartupChange"),
68
68
  onDefaultProjectTrustChange: change("onDefaultProjectTrustChange"),
69
+ onSessionShareDestinationChange: change("onSessionShareDestinationChange"),
69
70
  onClearOnShrinkChange: change("onClearOnShrinkChange"),
70
71
  onShowTerminalProgressChange: change("onShowTerminalProgressChange"),
71
72
  onTuiModeChange: change("onTuiModeChange"),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/core/keybindings.ts.
4
4
  * Modifications: Mechanical source port with Node import prefixes, public package-root agent-directory
5
5
  * resolution, and an opt-in bare-A1 input profile including Ctrl+L level cycling, unbound model
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/core/keybindings.ts.
4
4
  * Modifications: Mechanical source port with Node import prefixes, public package-root agent-directory
5
5
  * resolution, and an opt-in bare-A1 input profile including Ctrl+L level cycling, unbound model
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "sourcePackage": "@earendil-works/pi-coding-agent",
3
- "sourceVersion": "1.2.0",
3
+ "sourceVersion": "1.3.0",
4
4
  "upstreamRepository": "https://github.com/earendil-works/pi.git",
5
- "upstreamCommit": "06a466935536f8c9bcacb2d5efc0fc021be1bdff",
5
+ "upstreamCommit": "71023aec1546d6d677a65669c5665c0927ce0dd0",
6
6
  "sourcePath": "dist/modes/interactive/assets/clankolas.png",
7
7
  "sourceSha256": "169acd0dfe6fbb8d8742ed24a3fc654fd0b2e2d4223c733249c5493723f1b72d",
8
8
  "license": "MIT",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/countdown-timer.ts.
4
4
  * Modifications: Mechanical source port with ECMAScript private fields; imports remain on the public
5
5
  * Pi TUI package root.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts.
4
4
  * Modifications: Mechanical pinned source port with private imports remapped to public package-root
5
5
  * types/APIs and A1-owned theme boundaries. The unchanged image is loaded lazily from its attributed,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/extension-editor.ts.
4
4
  * Modifications: Mechanical port: remap pi-tui to the root public singleton, use owned
5
5
  * keybindings/theme and external-editor seams, preserve editor layout, hints, focus, submission,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/extension-editor.ts.
4
4
  * Modifications: Mechanical port: remap pi-tui to the root public singleton, use owned
5
5
  * keybindings/theme and external-editor seams, preserve editor layout, hints, focus, submission,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/extension-input.ts.
4
4
  * Modifications: Mechanical port: remap public imports, use ECMAScript private fields, and route the
5
5
  * bare-A1 instruction row and chrome through the shared semantic shortcut and compact padded
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/extension-selector.ts.
4
4
  * Modifications: Mechanical port: remap public imports, use ECMAScript private fields, and route the
5
5
  * bare-A1 instruction row and chrome through the shared semantic shortcut and compact padded
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/mermaid.ts.
4
4
  * Modifications: Mechanical pinned source port with private imports remapped to public package-root
5
5
  * types/APIs and A1-owned theme boundaries; behavior remains acceptance-tested.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/custom-editor.ts.
4
4
  * Modifications: A1-owned class name and synchronized A1 keybinding contract replace the nominal
5
5
  * private upstream keybinding constructor dependency; bare A1 injects the shared Settings/agent input
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/custom-editor.ts.
4
4
  * Modifications: A1-owned class name and synchronized A1 keybinding contract replace the nominal
5
5
  * private upstream keybinding constructor dependency; bare A1 injects the shared Settings/agent input
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/pi-logo.ts.
4
4
  * Modifications: Remapped the private theme import to A1's public-backed adapter and composed the
5
5
  * fixed-color logo into the owned startup header.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/scoped-models-selector.ts.
4
4
  * Modifications: Source-synchronized scoped-model selector port: preserve session-only toggles,
5
5
  * search, bulk/provider/reorder actions, dirty state, Ctrl+S persistence, refresh status,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/footer.ts.
4
4
  * Modifications: Consumes neutral owned-UI view data instead of a fabricated concrete AgentSession;
5
5
  * preserves the latest physical route for virtual models; an explicit bare-A1 profile colors the
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/session-selector-search.ts.
4
4
  * Modifications: Source-synchronized session search port with only the public SessionInfo type import
5
5
  * remapped.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/session-selector.ts.
4
4
  * Modifications: Source-synchronized session selector port: preserve threaded/current/all scope,
5
5
  * search, sort, named/path filters, rename, delete confirmation, active-session protection,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts.
4
4
  * Modifications: Mechanical port uses A1's public pi-tui instance, owned theme boundary, and
5
5
  * root-instance keybinding registry because the public coding-agent component closes over a second
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts.
4
4
  * Modifications: Mechanical port uses A1's public pi-tui instance, owned theme boundary, and
5
5
  * root-instance keybinding registry because the public coding-agent component closes over a second
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/status-indicator.ts.
4
4
  * Modifications: Mechanical source port with public package-root keybinding, Loader, and owned
5
5
  * theme/countdown imports plus ECMAScript private fields.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.2.0 (MIT), commit 06a466935536f8c9bcacb2d5efc0fc021be1bdff,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.3.0 (MIT), commit 71023aec1546d6d677a65669c5665c0927ce0dd0,
3
3
  * packages/coding-agent/src/modes/interactive/components/status-indicator.ts.
4
4
  * Modifications: Mechanical source port with public package-root keybinding, Loader, and owned
5
5
  * theme/countdown imports plus ECMAScript private fields.