@timurproko/a1 0.2.7-dev.1275 → 0.2.7-dev.1285

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 (220) hide show
  1. package/README.md +5 -1
  2. package/dist/app/session-shell/apps-dialog.d.ts +1 -1
  3. package/dist/app/session-shell/apps-dialog.js +2 -1
  4. package/dist/app/session-shell/dialog-coordinator.d.ts +4 -5
  5. package/dist/app/session-shell/dialog-coordinator.js +41 -12
  6. package/dist/app/session-shell/input-route.d.ts +23 -0
  7. package/dist/app/session-shell/input-route.js +59 -0
  8. package/dist/app/session-shell/session-selectors.d.ts +3 -3
  9. package/dist/app/session-shell/session-selectors.js +7 -2
  10. package/dist/app/session-shell/session-shell-root.d.ts +4 -68
  11. package/dist/app/session-shell/session-shell-root.js +6 -2
  12. package/dist/app/session-shell/session-shell.js +9 -13
  13. package/dist/app/session-shell/shell-host.js +2 -2
  14. package/dist/app/session-shell/shell-options.d.ts +65 -0
  15. package/dist/app/session-shell/shell-options.js +1 -0
  16. package/dist/app/session-shell/viewport-pointer.js +5 -1
  17. package/dist/app/session-shell/workflow-router.d.ts +4 -2
  18. package/dist/app/session-shell/workflow-router.js +12 -0
  19. package/dist/cli/dispatch.js +27 -1
  20. package/dist/cli/packages.js +18 -2
  21. package/dist/cli/session-context.js +6 -2
  22. package/dist/composition/owned-ui.js +20 -8
  23. package/dist/composition/session-naming.js +1 -1
  24. package/dist/composition/session-runtime-registry.d.ts +2 -0
  25. package/dist/composition/session-runtime-registry.js +49 -9
  26. package/dist/composition/settings-route-host.js +1 -0
  27. package/dist/contracts/agent-engine/package-ports.d.ts +10 -14
  28. package/dist/contracts/agent-engine/package-ports.js +5 -9
  29. package/dist/contracts/owned-ui/session-workflows.d.ts +6 -0
  30. package/dist/contracts/owned-ui/shell-components.d.ts +10 -0
  31. package/dist/contracts/presentation/component.d.ts +7 -0
  32. package/dist/contracts/presentation/index.d.ts +3 -0
  33. package/dist/contracts/presentation/index.js +4 -0
  34. package/dist/contracts/presentation/progress-palette.generated.d.ts +25 -1
  35. package/dist/contracts/presentation/progress-palette.generated.js +2 -135
  36. package/dist/contracts/presentation/progress-spinner.d.ts +7 -0
  37. package/dist/contracts/presentation/progress-spinner.js +1 -0
  38. package/dist/features/launch/session-context.d.ts +8 -0
  39. package/dist/features/launch/session-context.js +19 -10
  40. package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
  41. package/dist/features/owned-ui/project-trust-dialog.js +5 -5
  42. package/dist/features/owned-ui/project-trust-prompt.js +2 -2
  43. package/dist/features/owned-ui/reference-screen-app.d.ts +2 -0
  44. package/dist/features/owned-ui/reference-screen-app.js +12 -5
  45. package/dist/features/owned-ui/session-fork-prompt.d.ts +2 -1
  46. package/dist/features/owned-ui/session-fork-prompt.js +11 -5
  47. package/dist/features/owned-ui/settings-app.d.ts +1 -1
  48. package/dist/features/owned-ui/settings-app.js +20 -13
  49. package/dist/features/owned-ui/settings-model-dialog.js +3 -3
  50. package/dist/features/owned-ui/settings-spinner-preview.d.ts +9 -0
  51. package/dist/features/owned-ui/settings-spinner-preview.js +29 -0
  52. package/dist/features/session-naming/context.d.ts +17 -0
  53. package/dist/features/session-naming/context.js +39 -0
  54. package/dist/features/session-naming/controller.d.ts +1 -5
  55. package/dist/features/session-naming/controller.js +7 -4
  56. package/dist/features/session-naming/generate.d.ts +2 -1
  57. package/dist/features/session-naming/generate.js +14 -10
  58. package/dist/features/session-naming/index.d.ts +1 -1
  59. package/dist/foundation/lifecycle/index.d.ts +3 -1
  60. package/dist/foundation/lifecycle/index.js +3 -1
  61. package/dist/foundation/lifecycle/session-claim-lock.d.ts +2 -2
  62. package/dist/foundation/lifecycle/session-claim-lock.js +36 -10
  63. package/dist/foundation/lifecycle/session-context-retry.d.ts +2 -0
  64. package/dist/foundation/lifecycle/session-context-retry.js +17 -0
  65. package/dist/foundation/lifecycle/session-repository-context.d.ts +7 -1
  66. package/dist/foundation/lifecycle/session-repository-context.js +105 -39
  67. package/dist/foundation/lifecycle/session-worktree-entry.d.ts +3 -0
  68. package/dist/foundation/lifecycle/session-worktree-entry.js +87 -0
  69. package/dist/foundation/release/automatic-update.js +2 -2
  70. package/dist/foundation/release/bootstrap.js +19 -3
  71. package/dist/foundation/release/release-gc.js +20 -5
  72. package/dist/foundation/release/release-state.d.ts +12 -3
  73. package/dist/foundation/release/release-state.js +55 -24
  74. package/dist/foundation/release/release-use.d.ts +10 -0
  75. package/dist/foundation/release/release-use.js +70 -0
  76. package/dist/foundation/release/update-activation.js +2 -2
  77. package/dist/foundation/release/update-recovery.js +2 -2
  78. package/dist/foundation/release/update.js +1 -1
  79. package/dist/foundation/release/warmup.js +8 -9
  80. package/dist/foundation/session-writer-lock/index.d.ts +2 -2
  81. package/dist/foundation/session-writer-lock/index.js +82 -12
  82. package/dist/foundation/startup/startup-descriptor.js +2 -2
  83. package/dist/foundation/terminal-cleanup/fatal-diagnostic.d.ts +2 -0
  84. package/dist/foundation/terminal-cleanup/fatal-diagnostic.js +59 -0
  85. package/dist/foundation/terminal-cleanup/fatal-exit.js +1 -29
  86. package/dist/integrations/pi/components/deferred-selector.d.ts +6 -0
  87. package/dist/integrations/pi/components/deferred-selector.js +40 -0
  88. package/dist/integrations/pi/components/login-dialog-loader.d.ts +3 -0
  89. package/dist/integrations/pi/components/login-dialog-loader.js +57 -0
  90. package/dist/integrations/pi/components/login-links.d.ts +6 -0
  91. package/dist/integrations/pi/components/login-links.js +31 -0
  92. package/dist/integrations/pi/components/login-text.d.ts +7 -0
  93. package/dist/integrations/pi/components/login-text.js +17 -0
  94. package/dist/integrations/pi/components/modal-frame.d.ts +5 -0
  95. package/dist/integrations/pi/components/modal-frame.js +30 -2
  96. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -2
  97. package/dist/integrations/pi/components/resources/builtin-themes.js +2 -2
  98. package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -1
  99. package/dist/integrations/pi/components/share-operation-dialog.js +13 -5
  100. package/dist/integrations/pi/components/shell-footer-status.d.ts +2 -1
  101. package/dist/integrations/pi/components/shell-footer-status.js +15 -8
  102. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +11 -8
  103. package/dist/integrations/pi/components/shell-selectors-dialogs.js +36 -35
  104. package/dist/integrations/pi/components/shell-session-info-reference.d.ts +1 -1
  105. package/dist/integrations/pi/components/shell-session-info-reference.js +55 -49
  106. package/dist/integrations/pi/components/theme.d.ts +2 -0
  107. package/dist/integrations/pi/components/theme.js +4 -0
  108. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
  109. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +1 -1
  110. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  111. package/dist/integrations/pi/components/upstream/components/auth-url.d.ts +16 -0
  112. package/dist/integrations/pi/components/upstream/components/auth-url.js +49 -0
  113. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
  114. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
  115. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
  116. package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
  117. package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
  118. package/dist/integrations/pi/components/upstream/components/extension-selector.d.ts +1 -0
  119. package/dist/integrations/pi/components/upstream/components/extension-selector.js +22 -11
  120. package/dist/integrations/pi/components/upstream/components/login-dialog.d.ts +3 -0
  121. package/dist/integrations/pi/components/upstream/components/login-dialog.js +216 -0
  122. package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
  123. package/dist/integrations/pi/components/upstream/components/oauth-selector.d.ts +19 -0
  124. package/dist/integrations/pi/components/upstream/components/oauth-selector.js +123 -0
  125. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +1 -1
  126. package/dist/integrations/pi/components/upstream/components/owned-editor.js +1 -1
  127. package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
  128. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +1 -1
  129. package/dist/integrations/pi/components/upstream/components/session-footer.js +22 -13
  130. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
  131. package/dist/integrations/pi/components/upstream/components/session-selector.js +1 -1
  132. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
  133. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
  134. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +1 -1
  135. package/dist/integrations/pi/components/upstream/components/status-indicator.js +1 -1
  136. package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
  137. package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
  138. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +1 -1
  139. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +1 -1
  140. package/dist/integrations/pi/components/upstream/components/tool-execution.js +1 -1
  141. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +1 -1
  142. package/dist/integrations/pi/components/upstream/components/tree-selector.js +1 -1
  143. package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +2 -0
  144. package/dist/integrations/pi/components/upstream/components/trust-selector.js +30 -13
  145. package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
  146. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +1 -1
  147. package/dist/integrations/pi/components/upstream/history/editor-core.js +1 -1
  148. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
  149. package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
  150. package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
  151. package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
  152. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
  153. package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
  154. package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
  155. package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
  156. package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
  157. package/dist/integrations/pi/components/upstream/theme/theme.js +1 -1
  158. package/dist/integrations/pi/engine/adapter.d.ts +3 -1
  159. package/dist/integrations/pi/engine/adapter.js +24 -6
  160. package/dist/integrations/pi/engine/changelog.js +5 -2
  161. package/dist/integrations/pi/engine/delivery-retention.d.ts +7 -0
  162. package/dist/integrations/pi/engine/delivery-retention.js +66 -0
  163. package/dist/integrations/pi/engine/event-delivery.d.ts +17 -1
  164. package/dist/integrations/pi/engine/event-delivery.js +25 -3
  165. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
  166. package/dist/integrations/pi/engine/extension-ui-binding.js +45 -0
  167. package/dist/integrations/pi/engine/host-ports.d.ts +2 -0
  168. package/dist/integrations/pi/engine/host.d.ts +3 -0
  169. package/dist/integrations/pi/engine/host.js +2 -0
  170. package/dist/integrations/pi/engine/package-integration.js +19 -4
  171. package/dist/integrations/pi/engine/pending-delivery.d.ts +4 -1
  172. package/dist/integrations/pi/engine/pending-delivery.js +51 -18
  173. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  174. package/dist/integrations/pi/engine/runtime-integration.d.ts +8 -0
  175. package/dist/integrations/pi/engine/runtime-integration.js +58 -9
  176. package/dist/integrations/pi/engine/session-cwd-recovery.d.ts +11 -0
  177. package/dist/integrations/pi/engine/session-cwd-recovery.js +18 -0
  178. package/dist/integrations/pi/engine/session-runtime.d.ts +3 -0
  179. package/dist/integrations/pi/engine/session-runtime.js +2 -0
  180. package/dist/integrations/pi/engine/session-selection.d.ts +3 -2
  181. package/dist/integrations/pi/engine/session-selection.js +25 -5
  182. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +3 -0
  183. package/dist/integrations/pi/engine/transcript-image-assets.js +65 -14
  184. package/dist/integrations/pi/engine/view-state.d.ts +14 -0
  185. package/dist/integrations/pi/engine/view-state.js +17 -0
  186. package/dist/integrations/pi/engine/workflow-runner.d.ts +2 -0
  187. package/dist/integrations/pi/engine/workflow-runner.js +47 -26
  188. package/dist/integrations/pi/engine/worktree-tools.d.ts +4 -0
  189. package/dist/integrations/pi/engine/worktree-tools.js +26 -0
  190. package/dist/integrations/pi/session-presenters/components.d.ts +2 -1
  191. package/dist/integrations/pi/session-presenters/components.js +12 -10
  192. package/dist/integrations/pi/session-presenters/presenters.d.ts +3 -1
  193. package/dist/integrations/pi/session-presenters/presenters.js +2 -2
  194. package/dist/integrations/pi/startup-public.d.ts +1 -1
  195. package/dist/integrations/pi/startup-public.js +16 -20
  196. package/dist/integrations/pi/startup-public.manifest.json +29 -29
  197. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +1 -1
  198. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +1 -1
  199. package/dist/product-identity.json +1 -1
  200. package/dist/runtime-payload-inventory.json +5027 -5027
  201. package/dist/ui/components/index.d.ts +1 -1
  202. package/dist/ui/components/index.js +1 -1
  203. package/dist/ui/components/list-block.d.ts +2 -2
  204. package/dist/ui/components/list-block.js +4 -3
  205. package/dist/ui/components/progress-status.d.ts +7 -0
  206. package/dist/ui/components/progress-status.js +21 -0
  207. package/dist/ui/components/value-menu.d.ts +1 -1
  208. package/dist/ui/components/value-menu.js +4 -2
  209. package/dist/ui/settings/declarations.d.ts +16 -4
  210. package/dist/ui/settings/declarations.js +13 -4
  211. package/dist/ui/settings/early-accent.d.ts +24 -0
  212. package/docs/architecture/internal-naming.md +1 -1
  213. package/docs/architecture/project-structure.md +7 -11
  214. package/docs/features/session-exports.md +1 -1
  215. package/docs/features/session-naming.md +8 -6
  216. package/docs/features/worktrees.md +38 -0
  217. package/docs/local-worktree-cleanup.md +27 -4
  218. package/docs/openspec-archive-automation.md +30 -4
  219. package/docs/worktree-link-recovery.md +2 -2
  220. package/package.json +5 -5
@@ -20,6 +20,10 @@ export function cliUsage(capabilities) {
20
20
  "uninstall [--yes] [--purge]",
21
21
  "uninstall <source>",
22
22
  "list",
23
+ "worktree enter <branch> [--base <branch>]",
24
+ "worktree attach <path>",
25
+ "worktree detach",
26
+ "worktree list",
23
27
  "session worktrees",
24
28
  "session link-worktree <path>",
25
29
  "session unlink-worktree",
@@ -51,7 +55,13 @@ export function cliHelp(capabilities) {
51
55
  ` ${command} uninstall <source>`,
52
56
  ` ${command} list`,
53
57
  "",
54
- "Session context:",
58
+ "Worktrees (successful enter/attach is authoritative; detach preserves files):",
59
+ ` ${command} worktree enter <branch> [--base <branch>]`,
60
+ ` ${command} worktree attach <path>`,
61
+ ` ${command} worktree detach`,
62
+ ` ${command} worktree list`,
63
+ "",
64
+ "Session context (compatibility aliases):",
55
65
  ` ${command} session worktrees`,
56
66
  ` ${command} session link-worktree <path>`,
57
67
  ` ${command} session unlink-worktree`,
@@ -123,6 +133,8 @@ export function parseCliCommand(arguments_, capabilities) {
123
133
  }
124
134
  if (command === "update")
125
135
  return parseUpdate(rest, capabilities.runningChannel ?? "stable");
136
+ if (command === "worktree")
137
+ return parseWorktree(rest);
126
138
  if (command === "session")
127
139
  return parseSessionContext(rest);
128
140
  if (command?.startsWith("update:"))
@@ -131,6 +143,20 @@ export function parseCliCommand(arguments_, capabilities) {
131
143
  // explicit, and a typo must never start an interactive or maintenance path.
132
144
  return { kind: "noop" };
133
145
  }
146
+ function parseWorktree(rest) {
147
+ const [action, value, flag, base, extra] = rest;
148
+ if (action === "enter" && value !== undefined && !value.startsWith("-")
149
+ && (flag === undefined || (flag === "--base" && base !== undefined && !base.startsWith("-"))) && extra === undefined) {
150
+ return { kind: "session-context", request: { action: "enter-worktree", branch: value, ...(base === undefined ? {} : { base }) } };
151
+ }
152
+ if (action === "attach" && value !== undefined && flag === undefined) {
153
+ return { kind: "session-context", request: { action: "link-worktree", path: value } };
154
+ }
155
+ if ((action === "detach" || action === "list") && value === undefined) {
156
+ return { kind: "session-context", request: { action: action === "detach" ? "unlink-worktree" : "worktrees" } };
157
+ }
158
+ return { kind: "error", message: PRODUCT_TEXT.diagnostic("worktree accepts enter <branch> [--base <branch>], attach <path>, detach, or list.") };
159
+ }
134
160
  function parseSessionContext(rest) {
135
161
  const [action, value, extra] = rest;
136
162
  if (action === "link-worktree") {
@@ -21,7 +21,7 @@ export async function runPackageCommand(request, environment) {
21
21
  const port = environment.createPort({
22
22
  profileRoot,
23
23
  cwd,
24
- onProgress: progress => stdout(style.dim(`${progress.message}\n`)),
24
+ onProgress: progress => stdout((progress.severity === "warning" ? style.yellow : style.dim)(`${progress.message}\n`)),
25
25
  onDiagnostic: diagnostic => {
26
26
  stderr(`${style.yellow(diagnostic.message)}\n`);
27
27
  if (diagnostic.detail)
@@ -60,11 +60,27 @@ export function renderPackageOutcome(outcome, style = chalk) {
60
60
  case "remove":
61
61
  return `${style.green(`Removed ${outcome.source}`)}\n`;
62
62
  case "update":
63
- return `${style.green(outcome.source === null ? "Updated packages" : `Updated ${outcome.source}`)}\n`;
63
+ return renderPackageUpdate(outcome, style);
64
64
  case "list":
65
65
  return renderPackageList(outcome, style);
66
66
  }
67
67
  }
68
+ function renderPackageUpdate(outcome, style) {
69
+ const summary = outcome.updateSummary;
70
+ if (summary?.offline)
71
+ return `${style.yellow("Skipped package updates (offline mode)")}\n`;
72
+ const changes = summary?.changes ?? [];
73
+ if (changes.length > 0) {
74
+ const heading = `Updated ${changes.length} package${changes.length === 1 ? "" : "s"}:`;
75
+ return `${style.green(heading)}\n${changes.map(change => ` ${change}\n`).join("")}`;
76
+ }
77
+ if (summary?.warningCount) {
78
+ return `${style.yellow(outcome.source
79
+ ? `${outcome.source} was not updated, see the warnings above`
80
+ : "No packages were updated, see the warnings above")}\n`;
81
+ }
82
+ return `${style.green(outcome.source ? `${outcome.source} is already up to date` : "Packages are already up to date")}\n`;
83
+ }
68
84
  function renderPackageList(outcome, style) {
69
85
  if (outcome.packages.length === 0)
70
86
  return `${style.dim("No packages installed.")}\n`;
@@ -16,7 +16,7 @@ export async function runSessionContextCommand(request, options = {}) {
16
16
  if (outcome.kind === "unlinked")
17
17
  stdout("Session worktree context cleared.\n");
18
18
  if (outcome.kind === "linked")
19
- stdout(`Session worktree context linked: ${outcome.cwd}\n`);
19
+ stdout(`Session worktree context linked: ${outcome.cwd} (${outcome.branch})\n`);
20
20
  if (outcome.kind === "worktrees") {
21
21
  for (const entry of outcome.entries) {
22
22
  // Compatibility: the primary agent is the only agent of a single-session runtime, so it stays unnamed.
@@ -44,7 +44,7 @@ function readIdentity(environment) {
44
44
  /** Known coordination failures must not expose internal paths or another session's identity. */
45
45
  function recoveryDetail(code) {
46
46
  const details = {
47
- "worktree-claim-busy": "another mutation is still running; runtime registration retries automatically, so retry this link shortly",
47
+ "worktree-claim-busy": "coordination did not settle within the operation budget; no ownership was changed; retry this link shortly if the system remains busy",
48
48
  "worktree-legacy-recovery-required": "an older-format worktree lock requires safe recovery; stop all older A1 processes, move only session-worktree-claims/mutation.lock to a backup while stopped, then start the updated A1; keep all sessions and worktree claims",
49
49
  "worktree-coordination-unavailable": "worktree coordination is unavailable; repair or update this A1 installation, then retry",
50
50
  "worktree-coordination-io": "worktree coordination could not access its files; check A1 data-directory permissions and filesystem availability, then retry",
@@ -54,6 +54,10 @@ function recoveryDetail(code) {
54
54
  "session-runtime-stopped": "this shell belongs to a stopped runtime; resume in a running A1 session before linking",
55
55
  "worktree-active-in-another-session": "another live agent owns this worktree; use a different worktree or wait for its owner to release it",
56
56
  "worktree-owner-unverifiable": "worktree ownership cannot be verified; retain the claim and use another worktree rather than forcing recovery",
57
+ "worktree-primary-checkout": "attach a task worktree, not the primary checkout; use worktree enter to create one",
58
+ "worktree-git-locked": "Git has locked this worktree; retain it and ask its owner to release the lock",
59
+ "worktree-foreign-repository": "the selected worktree belongs to a different repository; the previous attachment was preserved",
60
+ "worktree-context-changed": "the attachment changed during the operation; no ownership was overridden",
57
61
  };
58
62
  return code === null ? undefined : details[code];
59
63
  }
@@ -17,22 +17,23 @@ import { createPiTerminalBridge } from "../integrations/pi/tui-runtime/presentat
17
17
  import { createOwnedRouteHost } from "./settings-route-host.js";
18
18
  import { renderPiShellChangelogLines } from "../integrations/pi/components/shell-presenters-info.js";
19
19
  import { nativeHyperlinkStyle } from "../ui/components/spans.js";
20
- import { SessionRuntimeRegistry } from "./session-runtime-registry.js";
21
20
  import { bindAutomaticSessionNaming } from "./session-naming.js";
22
21
  import { deferStartupReleaseUpdateObservation, readPackageVersion, StartupReleaseNote } from "./startup-route.js";
23
22
  import { createOwnedSettingsManager, watchSharedSettings } from "./owned-settings.js";
24
23
  /** Production default: without an inspector the registry never registers; loaded lazily. */
25
24
  const inspectLiveProcessOnDemand = async (pid) => (await import("../foundation/lifecycle/process-liveness.js")).inspectLiveProcess(pid);
25
+ /** Load coordination only when composing a session, not while evaluating the startup facade. */
26
+ async function createSessionRuntimes(bare, inspectProcess) {
27
+ const { SessionRuntimeRegistry } = await import("./session-runtime-registry.js");
28
+ return new SessionRuntimeRegistry({ runtimeId: bare ? process.env[PRODUCT_IDENTITY.environment.sessionRuntimeId] : undefined, inspectProcess });
29
+ }
26
30
  export async function composeOwnedUiApplication(options = {}) {
27
31
  return (await composeOwnedUi(options)).application;
28
32
  }
29
33
  export async function composeOwnedUi(options = {}) {
30
34
  const cwd = options.cwd ?? process.cwd();
31
35
  const productMode = options.productMode ?? "bare", bare = productMode === "bare";
32
- const sessionRuntimes = new SessionRuntimeRegistry({
33
- runtimeId: bare ? process.env[PRODUCT_IDENTITY.environment.sessionRuntimeId] : undefined,
34
- inspectProcess: options.inspectProcess ?? inspectLiveProcessOnDemand,
35
- });
36
+ const sessionRuntimes = await createSessionRuntimes(bare, options.inspectProcess ?? inspectLiveProcessOnDemand);
36
37
  const productPaths = resolveProductPaths();
37
38
  // Rationale: the manager reads the engine's settings port lazily, after the session exists.
38
39
  let backend;
@@ -46,12 +47,14 @@ export async function composeOwnedUi(options = {}) {
46
47
  const bareSettings = bare ? settings : null;
47
48
  // Invariant: process-wide engine state has one owner. The host installs the HTTP dispatcher, applies
48
49
  // the theme singletons, and announces startup notices once; every session is created through it.
49
- const host = await (options.createEngineHost ?? createPiEngineHost)(engineHostOptions(options, productMode, bareSettings));
50
+ const host = await (options.createEngineHost ?? createPiEngineHost)(engineHostOptions(options, productMode, bareSettings, productPaths.runtimeDir));
50
51
  const sessionForkPrompt = options.sessionForkPrompt;
51
52
  try {
52
53
  backend = await host.create({
53
54
  cwd,
54
55
  ...(bare ? { repositoryContextReader: sessionRuntimes.readerFor(undefined) } : {}),
56
+ ...(bare && process.env[PRODUCT_IDENTITY.environment.sessionRuntimeId] !== undefined
57
+ ? { worktreeCwdReader: sessionRuntimes.toolReaderFor(undefined) } : {}),
55
58
  ...(options.sessionPath === undefined ? {} : { sessionPath: options.sessionPath }),
56
59
  ...(options.sessionSelection === undefined ? {} : { sessionSelection: options.sessionSelection }),
57
60
  ...(sessionForkPrompt === undefined ? {} : { sessionForkPrompt }),
@@ -127,7 +130,7 @@ export async function composeOwnedUi(options = {}) {
127
130
  let presenter;
128
131
  try {
129
132
  const presenterOptions = {
130
- presenters: createPiSessionPresenters(backend),
133
+ presenters: createPiSessionPresenters(backend, spinnerPresenterOptions(bareSettings)),
131
134
  engine: {
132
135
  backend,
133
136
  cwd: backend.identity.cwd,
@@ -201,6 +204,12 @@ export async function composeOwnedUi(options = {}) {
201
204
  };
202
205
  return { application, settings };
203
206
  }
207
+ function spinnerPresenterOptions(settings) {
208
+ return settings === null ? {} : { spinner: {
209
+ snapshot: () => settings.value("spinnerStyle"),
210
+ onChange: (listener) => settings.onChange(() => listener()),
211
+ } };
212
+ }
204
213
  /** The settings-driven ports only bare A1 receives: viewport, background, quit outro, suggestions, image limit, and skills. */
205
214
  function bareShellPorts(settings, generator, diagnostics) {
206
215
  const viewportSettings = {
@@ -235,10 +244,13 @@ function bareShellPorts(settings, generator, diagnostics) {
235
244
  },
236
245
  };
237
246
  }
238
- function engineHostOptions(options, productMode, settings) {
247
+ function engineHostOptions(options, productMode, settings, runtimeDir) {
239
248
  const bare = productMode === "bare";
240
249
  return {
241
250
  productMode,
251
+ deliveryIncident: failure => {
252
+ void import("../foundation/terminal-cleanup/index.js").then(module => module.writeFatalDiagnostic(`${runtimeDir}/crashes`, "delivery", Object.assign(new Error(), { deliveryFailure: failure }), options.packageVersion)).catch(() => undefined);
253
+ },
242
254
  availableThemes: () => getAvailablePiThemes().map(theme => theme.name),
243
255
  ...(bare ? { workflowHost: { reserveExport: async (id, format) => (await import("../foundation/lifecycle/user-exports.js")).reserveUserExport(id, format) } } : {}),
244
256
  announceStartupChangelog: !bare,
@@ -6,7 +6,7 @@ export function bindAutomaticSessionNaming(backend, settings, bare) {
6
6
  const naming = new SessionNamingController({
7
7
  backend, naming: backend.naming,
8
8
  enabled: () => settings?.value("sessionAutoName") ?? true,
9
- format: () => settings?.value("sessionNameFormat") ?? "kebab",
9
+ format: () => settings?.value("sessionNameFormat") ?? "sentence",
10
10
  withContext: async (consume, signal) => {
11
11
  const sessionId = backend.identity.currentHistorySessionId();
12
12
  const sessionFile = backend.identity.currentSessionFile();
@@ -16,6 +16,8 @@ export declare class SessionRuntimeRegistry {
16
16
  branch: string;
17
17
  revision: string;
18
18
  } | null>;
19
+ /** Strict tool cwd lookup: transient startup failure never redirects a write to primary. */
20
+ toolReaderFor(agentId: string | undefined): (sessionId: string, sessionFile: string, signal: AbortSignal) => Promise<string>;
19
21
  /** Drain publication before releasing claims; never republish after disposal. */
20
22
  dispose(): Promise<void>;
21
23
  }
@@ -2,6 +2,7 @@
2
2
  export class SessionRuntimeRegistry {
3
3
  #options;
4
4
  #identities = new Map();
5
+ #activated = new Map();
5
6
  #abort = new AbortController();
6
7
  #owner = null;
7
8
  #timer = null;
@@ -15,7 +16,9 @@ export class SessionRuntimeRegistry {
15
16
  const { runtimeId, inspectProcess } = this.#options;
16
17
  if (this.#disposed || runtimeId === undefined || inspectProcess === undefined)
17
18
  return null;
18
- const identity = { sessionId, sessionFile };
19
+ const previous = this.#identities.get(agentId);
20
+ const identity = previous?.sessionId === sessionId && previous.sessionFile === sessionFile
21
+ ? previous : { sessionId, sessionFile };
19
22
  this.#identities.set(agentId, identity);
20
23
  // Invariant: initial activation or inspection failure must not disable retries.
21
24
  this.#arm();
@@ -23,25 +26,62 @@ export class SessionRuntimeRegistry {
23
26
  const owner = await this.#ownerIdentity();
24
27
  if (owner === null || !this.#current(agentId, identity))
25
28
  return null;
26
- const { activateSessionRepositoryContext, withSessionRepositoryObservation } = await import("../foundation/lifecycle/session-repository-context.js");
29
+ const { activateSessionRepositoryContext, readActiveSessionRepositoryContext } = await import("../foundation/lifecycle/session-repository-context.js");
27
30
  if (!this.#current(agentId, identity))
28
31
  return null;
29
32
  const options = {
33
+ runtimeId,
30
34
  signal: AbortSignal.any([signal, this.#abort.signal]),
31
35
  inspectProcess,
32
36
  ...(agentId === undefined ? {} : { agentId }),
33
37
  };
34
- const selected = await activateSessionRepositoryContext(identity, runtimeId, owner, options);
35
- if (selected === null)
36
- return null;
37
- return await withSessionRepositoryObservation(identity, context => {
38
+ if (this.#activated.get(agentId) !== identity) {
39
+ await activateSessionRepositoryContext(identity, runtimeId, owner, options);
40
+ if (!this.#current(agentId, identity))
41
+ return null;
42
+ this.#activated.set(agentId, identity);
43
+ }
44
+ try {
45
+ const context = await readActiveSessionRepositoryContext(identity, options);
46
+ if (context === null)
47
+ return null;
38
48
  if (context.branch === null)
39
49
  throw new Error("associated branch unavailable");
40
50
  return { cwd: context.cwd, branch: context.branch, revision: context.revision };
41
- }, options);
51
+ }
52
+ catch (error) {
53
+ const code = error instanceof Error && "code" in error ? error.code : null;
54
+ if ((code === "session-runtime-unavailable" || code === "worktree-context-changed") && this.#current(agentId, identity)) {
55
+ this.#activated.delete(agentId);
56
+ }
57
+ throw error;
58
+ }
42
59
  });
43
60
  };
44
61
  }
62
+ /** Strict tool cwd lookup: transient startup failure never redirects a write to primary. */
63
+ toolReaderFor(agentId) {
64
+ const read = this.readerFor(agentId);
65
+ return async (sessionId, sessionFile, signal) => {
66
+ const { retrySessionCoordination } = await import("../foundation/lifecycle/session-context-retry.js");
67
+ return await retrySessionCoordination(async () => {
68
+ signal.throwIfAborted();
69
+ if (this.#disposed || this.#options.runtimeId === undefined)
70
+ throw new Error("worktree runtime is not active");
71
+ const context = await read(sessionId, sessionFile, signal);
72
+ if (this.#disposed)
73
+ throw new Error("worktree runtime is not active");
74
+ const active = this.#activated.get(agentId);
75
+ if (active?.sessionId !== sessionId || active.sessionFile !== sessionFile) {
76
+ throw Object.assign(new Error("worktree runtime registration is still recovering"), { code: "session-runtime-unavailable" });
77
+ }
78
+ if (context !== null)
79
+ return context.cwd;
80
+ const { readSessionStartupRoot } = await import("../foundation/lifecycle/session-repository-context.js");
81
+ return await readSessionStartupRoot({ sessionId, sessionFile });
82
+ }, 8_000, signal);
83
+ };
84
+ }
45
85
  /** Drain publication before releasing claims; never republish after disposal. */
46
86
  async dispose() {
47
87
  this.#disposed = true;
@@ -82,7 +122,7 @@ export class SessionRuntimeRegistry {
82
122
  #arm() {
83
123
  if (this.#timer !== null)
84
124
  return;
85
- this.#timer = setInterval(() => this.#queueRefresh(), this.#options.refreshMs ?? 30_000);
125
+ this.#timer = setInterval(() => this.#queueRefresh(), this.#options.refreshMs ?? 1_000);
86
126
  this.#timer.unref();
87
127
  }
88
128
  #queueRefresh() {
@@ -96,7 +136,7 @@ export class SessionRuntimeRegistry {
96
136
  return;
97
137
  const { registerSessionRepositoryRuntime } = await import("../foundation/lifecycle/session-repository-context.js");
98
138
  for (const [agentId, identity] of this.#identities) {
99
- if (!this.#current(agentId, identity))
139
+ if (!this.#current(agentId, identity) || this.#activated.get(agentId) === identity)
100
140
  continue;
101
141
  await registerSessionRepositoryRuntime(identity, runtimeId, owner, {
102
142
  inspectProcess,
@@ -92,6 +92,7 @@ async function loadReferenceSurface(settings, route, title, document, options) {
92
92
  id,
93
93
  title,
94
94
  document: content,
95
+ ...(route === "session" ? { presentation: "dialog" } : {}),
95
96
  scrollSettings: () => ({
96
97
  scrollbarAppearance: settings.value("scrollbarAppearance"),
97
98
  scrollbarStyle: settings.value("scrollbarStyle"),
@@ -1,17 +1,6 @@
1
- /**
2
- * Extension packages are managed outside any session: the command that installs
3
- * one runs before the runtime exists, against a profile root chosen by the caller
4
- * rather than by whatever session happens to be open. So this port stands apart
5
- * from the session-scoped service ports and names only what a package operation
6
- * needs — a root, a source, and an outcome a caller can render without knowing
7
- * which engine performed it.
8
- */
1
+ /** Non-interactive package operations use a caller-chosen profile root before any session exists. */
9
2
  export type AgentPackageOperation = "install" | "remove" | "update" | "refresh-models" | "list";
10
- /**
11
- * Why an operation ended, kept separate from the prose so callers can branch on
12
- * it. `not-found` is the one failure an engine can state structurally — the source
13
- * is not configured in this profile — rather than only in a message.
14
- */
3
+ /** Status is separate from prose; not-found means the source is unconfigured. */
15
4
  export type AgentPackageStatus = "completed" | "not-found" | "failed";
16
5
  export interface AgentPackageDescriptor {
17
6
  readonly source: string;
@@ -25,10 +14,17 @@ export interface AgentPackageOutcome {
25
14
  readonly source: string | null;
26
15
  readonly packages: readonly AgentPackageDescriptor[];
27
16
  readonly detail: string | null;
17
+ /** Update facts distinguish a checked result from skipped or warned work. */
18
+ readonly updateSummary?: {
19
+ readonly offline: boolean;
20
+ readonly warningCount: number;
21
+ readonly changes: readonly string[];
22
+ };
28
23
  }
29
24
  export interface AgentPackageProgress {
30
25
  readonly operation: AgentPackageOperation;
31
26
  readonly message: string;
27
+ readonly severity?: "warning";
32
28
  }
33
29
  export interface AgentPackagesPort {
34
30
  readonly capabilities: {
@@ -57,4 +53,4 @@ export interface AgentPackagesPortInput {
57
53
  readonly onDiagnostic?: (diagnostic: AgentPackageDiagnostic) => void;
58
54
  }
59
55
  export declare function assertAgentPackagesPort(port: AgentPackagesPort): void;
60
- export declare function agentPackageOutcome(operation: AgentPackageOperation, status: AgentPackageStatus, detail?: string | null, source?: string | null, packages?: readonly AgentPackageDescriptor[]): AgentPackageOutcome;
56
+ export declare function agentPackageOutcome(operation: AgentPackageOperation, status: AgentPackageStatus, detail?: string | null, source?: string | null, packages?: readonly AgentPackageDescriptor[], updateSummary?: AgentPackageOutcome["updateSummary"]): AgentPackageOutcome;
@@ -1,11 +1,4 @@
1
- /**
2
- * Extension packages are managed outside any session: the command that installs
3
- * one runs before the runtime exists, against a profile root chosen by the caller
4
- * rather than by whatever session happens to be open. So this port stands apart
5
- * from the session-scoped service ports and names only what a package operation
6
- * needs — a root, a source, and an outcome a caller can render without knowing
7
- * which engine performed it.
8
- */
1
+ /** Non-interactive package operations use a caller-chosen profile root before any session exists. */
9
2
  export function assertAgentPackagesPort(port) {
10
3
  if (typeof port?.capabilities !== "object" || port.capabilities === null)
11
4
  throw new TypeError("packages port capabilities are required");
@@ -20,12 +13,15 @@ export function assertAgentPackagesPort(port) {
20
13
  throw new TypeError(`packages capability ${capability} must be explicit`);
21
14
  }
22
15
  }
23
- export function agentPackageOutcome(operation, status, detail, source, packages = []) {
16
+ export function agentPackageOutcome(operation, status, detail, source, packages = [], updateSummary) {
24
17
  return Object.freeze({
25
18
  operation,
26
19
  status,
27
20
  source: source ?? null,
28
21
  packages: Object.freeze([...packages]),
29
22
  detail: detail ?? null,
23
+ ...(updateSummary === undefined ? {} : {
24
+ updateSummary: Object.freeze({ ...updateSummary, changes: Object.freeze([...updateSummary.changes]) }),
25
+ }),
30
26
  });
31
27
  }
@@ -47,6 +47,8 @@ export interface OwnedUiWorkflowRequest {
47
47
  readonly confirmed?: boolean;
48
48
  /** Recovery cwd selected after an import/resume source cwd is unavailable. */
49
49
  readonly cwdOverride?: string;
50
+ /** Explicit missing-folder recovery; cancellation never changes the active session. */
51
+ readonly cwdRecoveryChoice?: "continue" | "fork" | "cancel";
50
52
  /** Cancellation for an owned operation surface such as `/share`. */
51
53
  readonly signal?: AbortSignal;
52
54
  /** Progress label for that operation surface, e.g. when `/share` picks its upload destination. */
@@ -126,6 +128,10 @@ export interface OwnedUiWorkflowResult {
126
128
  readonly messages?: readonly OwnedUiWorkflowMessage[];
127
129
  readonly detail?: string;
128
130
  readonly selectorTitle?: string;
131
+ /** A missing-folder selector, distinct from ordinary workflow selection. */
132
+ readonly cwdRecovery?: {
133
+ readonly fallbackCwd: string;
134
+ };
129
135
  readonly options?: readonly OwnedUiWorkflowOption[];
130
136
  readonly presentation?: OwnedUiWorkflowPresentation;
131
137
  }
@@ -14,9 +14,19 @@ export interface OwnedUiShellKeybindingsHost {
14
14
  reload(): void;
15
15
  }
16
16
  export interface OwnedUiShellComponentPort {
17
+ readonly ready?: Promise<void>;
17
18
  render(width: number): readonly string[];
19
+ /** Bounds scrollable replacement inputs within the dock. */
20
+ renderInDock?(width: number, maxHeight: number): readonly string[];
18
21
  invalidate(): void;
19
22
  handleInput?(data: string): void;
23
+ /** Pointer input in one-based component-local coordinates, when supported. */
24
+ handleLocalMouse?(event: {
25
+ readonly kind: "press" | "release" | "motion" | "wheel-up" | "wheel-down";
26
+ readonly button: number;
27
+ readonly column: number;
28
+ readonly row: number;
29
+ }): void;
20
30
  setFocused?(focused: boolean): void;
21
31
  dispose?(): void;
22
32
  }
@@ -2,6 +2,13 @@ export interface PresentationComponentPort {
2
2
  render(width: number): readonly string[];
3
3
  invalidate(): void;
4
4
  handleInput?(data: string): void;
5
+ /** Optional pointer input in one-based component-local coordinates. */
6
+ handleLocalMouse?(event: {
7
+ readonly kind: "press" | "release" | "motion" | "wheel-up" | "wheel-down";
8
+ readonly button: number;
9
+ readonly column: number;
10
+ readonly row: number;
11
+ }): void;
5
12
  setFocused?(focused: boolean): void;
6
13
  dispose?(): void;
7
14
  }
@@ -1,5 +1,6 @@
1
1
  import type { PresentationComponentPort } from "./component.js";
2
2
  export type { PresentationComponentPort, PresentationPointerSurface } from "./component.js";
3
+ export type { ProgressSpinnerSource, ProgressSpinnerStyle } from "./progress-spinner.js";
3
4
  export { samePointerSurfaces } from "./component.js";
4
5
  export type { CanvasBackgroundStyle, ShellPresentationPorts, ThemeSource, UiTheme, UiThemeBackground, UiThemeToken } from "./theme.js";
5
6
  export type { TerminalComponentPort, TerminalDamageDecision, TerminalDamageDecisionReason, TerminalDamageFrameDescriptor, TerminalDamageFrameSafety, TerminalDamageOptions, TerminalDamagePort, TerminalHyperlinkInspection, TerminalInputCoordinationDecision, TerminalInputCoordinationScheduler, TerminalInputDiagnosticsEvent, TerminalInputDiagnosticsPhase, TerminalInputListener, TerminalInputListenerResult, TerminalInputSurfaceKind, TerminalLayoutEntry, TerminalLayoutNode, TerminalOverlayAnchor, TerminalOverlayHandle, TerminalOverlayMargin, TerminalOverlayOptions, TerminalOverlayUnfocusOptions, TerminalPointerSurface, TerminalPort, TerminalPreInputListener, TerminalProgramStatus, TerminalRuntimeFactory, TerminalRuntimeOptions, TerminalRuntimePort, TerminalRuntimeState, TerminalSizeValue, TerminalStopOptions, TerminalViewport, TerminalWheelScrollLines, } from "./terminal.js";
@@ -22,6 +23,8 @@ export declare const DIALOG_BACK_SHORTCUT_HINT: Readonly<{
22
23
  }>;
23
24
  /** Global inset inherited by every semantic row inside an A1-owned dialog frame. */
24
25
  export declare const DIALOG_CONTENT_PADDING_X = 1;
26
+ /** Wraps choice navigation, leaving empty lists at a safe index. */
27
+ export declare function wrapChoiceIndex(index: number, delta: number, count: number): number;
25
28
  export interface DialogFrameGeometry {
26
29
  readonly frameWidth: number;
27
30
  readonly contentPaddingX: number;
@@ -6,6 +6,10 @@ export const DIALOG_CLOSE_SHORTCUT_HINT = Object.freeze({ key: "esc", action: "c
6
6
  export const DIALOG_BACK_SHORTCUT_HINT = Object.freeze({ key: "esc", action: "back" });
7
7
  /** Global inset inherited by every semantic row inside an A1-owned dialog frame. */
8
8
  export const DIALOG_CONTENT_PADDING_X = 1;
9
+ /** Wraps choice navigation, leaving empty lists at a safe index. */
10
+ export function wrapChoiceIndex(index, delta, count) {
11
+ return count > 0 ? ((index + delta) % count + count) % count : 0;
12
+ }
9
13
  /** Shared full-width-rule/content-width geometry for string and component dialog renderers. */
10
14
  export function dialogFrameGeometry(width) {
11
15
  const frameWidth = Math.max(0, width);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Generated by scripts/pi/sync-progress-palette.ts from A1's named accent projection
3
- * over pinned Pi 1.5.1 (MIT), commit dd30101cfc5b0609411dd80b6f93adbc14db14cf. Do not edit directly.
3
+ * over pinned Pi 1.5.2 (MIT), commit b4afdddf44e059c67ccf5097e5317d913521b470. Do not edit directly.
4
4
  */
5
5
  export declare const SHARED_PROGRESS_PALETTE: Readonly<{
6
6
  blue: {
@@ -8,20 +8,24 @@ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
8
8
  truecolor: {
9
9
  accent: string;
10
10
  border: string;
11
+ selectedBg: string;
11
12
  };
12
13
  "256color": {
13
14
  accent: string;
14
15
  border: string;
16
+ selectedBg: string;
15
17
  };
16
18
  };
17
19
  light: {
18
20
  truecolor: {
19
21
  accent: string;
20
22
  border: string;
23
+ selectedBg: string;
21
24
  };
22
25
  "256color": {
23
26
  accent: string;
24
27
  border: string;
28
+ selectedBg: string;
25
29
  };
26
30
  };
27
31
  };
@@ -30,20 +34,24 @@ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
30
34
  truecolor: {
31
35
  accent: string;
32
36
  border: string;
37
+ selectedBg: string;
33
38
  };
34
39
  "256color": {
35
40
  accent: string;
36
41
  border: string;
42
+ selectedBg: string;
37
43
  };
38
44
  };
39
45
  light: {
40
46
  truecolor: {
41
47
  accent: string;
42
48
  border: string;
49
+ selectedBg: string;
43
50
  };
44
51
  "256color": {
45
52
  accent: string;
46
53
  border: string;
54
+ selectedBg: string;
47
55
  };
48
56
  };
49
57
  };
@@ -52,20 +60,24 @@ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
52
60
  truecolor: {
53
61
  accent: string;
54
62
  border: string;
63
+ selectedBg: string;
55
64
  };
56
65
  "256color": {
57
66
  accent: string;
58
67
  border: string;
68
+ selectedBg: string;
59
69
  };
60
70
  };
61
71
  light: {
62
72
  truecolor: {
63
73
  accent: string;
64
74
  border: string;
75
+ selectedBg: string;
65
76
  };
66
77
  "256color": {
67
78
  accent: string;
68
79
  border: string;
80
+ selectedBg: string;
69
81
  };
70
82
  };
71
83
  };
@@ -74,20 +86,24 @@ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
74
86
  truecolor: {
75
87
  accent: string;
76
88
  border: string;
89
+ selectedBg: string;
77
90
  };
78
91
  "256color": {
79
92
  accent: string;
80
93
  border: string;
94
+ selectedBg: string;
81
95
  };
82
96
  };
83
97
  light: {
84
98
  truecolor: {
85
99
  accent: string;
86
100
  border: string;
101
+ selectedBg: string;
87
102
  };
88
103
  "256color": {
89
104
  accent: string;
90
105
  border: string;
106
+ selectedBg: string;
91
107
  };
92
108
  };
93
109
  };
@@ -96,20 +112,24 @@ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
96
112
  truecolor: {
97
113
  accent: string;
98
114
  border: string;
115
+ selectedBg: string;
99
116
  };
100
117
  "256color": {
101
118
  accent: string;
102
119
  border: string;
120
+ selectedBg: string;
103
121
  };
104
122
  };
105
123
  light: {
106
124
  truecolor: {
107
125
  accent: string;
108
126
  border: string;
127
+ selectedBg: string;
109
128
  };
110
129
  "256color": {
111
130
  accent: string;
112
131
  border: string;
132
+ selectedBg: string;
113
133
  };
114
134
  };
115
135
  };
@@ -118,20 +138,24 @@ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
118
138
  truecolor: {
119
139
  accent: string;
120
140
  border: string;
141
+ selectedBg: string;
121
142
  };
122
143
  "256color": {
123
144
  accent: string;
124
145
  border: string;
146
+ selectedBg: string;
125
147
  };
126
148
  };
127
149
  light: {
128
150
  truecolor: {
129
151
  accent: string;
130
152
  border: string;
153
+ selectedBg: string;
131
154
  };
132
155
  "256color": {
133
156
  accent: string;
134
157
  border: string;
158
+ selectedBg: string;
135
159
  };
136
160
  };
137
161
  };