@timurproko/a1 0.2.7-dev.1252 → 0.2.7-dev.1255

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 (253) hide show
  1. package/bin/ui.js +3 -3
  2. package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
  3. package/dist/app/session-shell/clipboard-image.d.ts +0 -1
  4. package/dist/app/session-shell/clipboard-image.js +1 -1
  5. package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
  6. package/dist/app/session-shell/dialog-coordinator.js +3 -4
  7. package/dist/app/session-shell/dock-chrome.d.ts +11 -6
  8. package/dist/app/session-shell/dock-chrome.js +5 -8
  9. package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
  10. package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
  11. package/dist/app/session-shell/exit-notice.d.ts +2 -2
  12. package/dist/app/session-shell/exit-notice.js +1 -1
  13. package/dist/app/session-shell/extension-surface.d.ts +8 -7
  14. package/dist/app/session-shell/helper-pool.d.ts +3 -4
  15. package/dist/app/session-shell/helper-pool.js +1 -1
  16. package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
  17. package/dist/app/session-shell/image-preparation.d.ts +0 -2
  18. package/dist/app/session-shell/image-preparation.js +2 -2
  19. package/dist/app/session-shell/image-source.d.ts +2 -3
  20. package/dist/app/session-shell/image-source.js +2 -2
  21. package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
  22. package/dist/app/session-shell/input-surface-switch.js +1 -2
  23. package/dist/app/session-shell/login-interaction.d.ts +5 -4
  24. package/dist/app/session-shell/login-interaction.js +2 -3
  25. package/dist/app/session-shell/paste-executor.d.ts +4 -8
  26. package/dist/app/session-shell/paste-executor.js +2 -2
  27. package/dist/app/session-shell/paste-protocol.d.ts +2 -2
  28. package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
  29. package/dist/app/session-shell/path-chip-presentation.js +3 -3
  30. package/dist/app/session-shell/prompt-chips.d.ts +8 -7
  31. package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
  32. package/dist/app/session-shell/prompt-submission.d.ts +5 -2
  33. package/dist/app/session-shell/prompt-submission.js +4 -5
  34. package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
  35. package/dist/app/session-shell/quit-outro-effects.js +1 -4
  36. package/dist/app/session-shell/quit-outro.d.ts +9 -12
  37. package/dist/app/session-shell/quit-outro.js +11 -11
  38. package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
  39. package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
  40. package/dist/app/session-shell/response-copy-transport.js +1 -1
  41. package/dist/app/session-shell/session-lifecycle.d.ts +2 -1
  42. package/dist/app/session-shell/session-shell-root.d.ts +74 -89
  43. package/dist/app/session-shell/session-shell-root.js +81 -113
  44. package/dist/app/session-shell/session-shell.d.ts +13 -16
  45. package/dist/app/session-shell/session-shell.js +144 -268
  46. package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
  47. package/dist/app/session-shell/session-viewport-controller.js +2 -2
  48. package/dist/app/session-shell/settings-bindings.d.ts +24 -2
  49. package/dist/app/session-shell/settings-bindings.js +24 -0
  50. package/dist/app/session-shell/share-operation.d.ts +3 -3
  51. package/dist/app/session-shell/share-operation.js +4 -6
  52. package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
  53. package/dist/app/session-shell/shell-clipboard.js +119 -0
  54. package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
  55. package/dist/app/session-shell/shell-editor-factory.js +13 -15
  56. package/dist/app/session-shell/shell-host.d.ts +16 -17
  57. package/dist/app/session-shell/shell-host.js +18 -19
  58. package/dist/app/session-shell/shell-layout.d.ts +2 -2
  59. package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
  60. package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
  61. package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
  62. package/dist/app/session-shell/suggestion-surface.js +1 -1
  63. package/dist/app/session-shell/system-clipboard.d.ts +2 -14
  64. package/dist/app/session-shell/system-clipboard.js +2 -7
  65. package/dist/app/session-shell/transcript-document.d.ts +11 -8
  66. package/dist/app/session-shell/transcript-document.js +13 -14
  67. package/dist/app/session-shell/viewport-layout.d.ts +2 -2
  68. package/dist/app/session-shell/workflow-output.d.ts +5 -3
  69. package/dist/app/session-shell/workflow-output.js +13 -15
  70. package/dist/cli/package-messages.d.ts +0 -1
  71. package/dist/cli/package-messages.js +1 -1
  72. package/dist/cli/session-context.d.ts +1 -1
  73. package/dist/cli/uninstall.d.ts +3 -2
  74. package/dist/composition/owned-settings.d.ts +2 -1
  75. package/dist/composition/owned-settings.js +0 -3
  76. package/dist/composition/owned-ui.d.ts +1 -1
  77. package/dist/composition/owned-ui.js +27 -27
  78. package/dist/composition/reference-selection-options.d.ts +1 -1
  79. package/dist/composition/reference-selection-options.js +1 -1
  80. package/dist/composition/session-runtime-registry.d.ts +2 -1
  81. package/dist/composition/settings-route-host.js +3 -10
  82. package/dist/composition/settings-search-input.d.ts +2 -1
  83. package/dist/composition/startup-route.d.ts +2 -2
  84. package/dist/composition/startup-route.js +2 -2
  85. package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
  86. package/dist/contracts/owned-ui/index.d.ts +1 -0
  87. package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
  88. package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
  89. package/dist/contracts/owned-ui/shell-components.js +1 -0
  90. package/dist/contracts/presentation/component.d.ts +17 -0
  91. package/dist/contracts/presentation/component.js +8 -0
  92. package/dist/contracts/presentation/index.d.ts +6 -15
  93. package/dist/contracts/presentation/index.js +2 -0
  94. package/dist/contracts/presentation/terminal.d.ts +290 -0
  95. package/dist/contracts/presentation/terminal.js +1 -0
  96. package/dist/contracts/presentation/theme.d.ts +46 -0
  97. package/dist/contracts/presentation/theme.js +1 -0
  98. package/dist/features/launch/development-launch.js +1 -1
  99. package/dist/features/launch/runtime-selection.d.ts +2 -2
  100. package/dist/features/launch/runtime-selection.js +2 -2
  101. package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
  102. package/dist/features/owned-ui/project-trust-prompt.js +1 -1
  103. package/dist/features/owned-ui/release-note-state.d.ts +2 -1
  104. package/dist/features/owned-ui/settings-app.js +38 -219
  105. package/dist/features/owned-ui/settings-edits.d.ts +31 -0
  106. package/dist/features/owned-ui/settings-edits.js +139 -0
  107. package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
  108. package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
  109. package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
  110. package/dist/features/prompt-history/service.d.ts +3 -2
  111. package/dist/foundation/lifecycle/claim-gate.d.ts +2 -1
  112. package/dist/foundation/release/automatic-update.d.ts +5 -14
  113. package/dist/foundation/release/automatic-update.js +14 -14
  114. package/dist/foundation/release/bootstrap.js +4 -4
  115. package/dist/foundation/release/dependency-certification.d.ts +0 -1
  116. package/dist/foundation/release/dependency-certification.js +1 -1
  117. package/dist/foundation/release/early-accent.d.ts +2 -2
  118. package/dist/foundation/release/early-accent.js +1 -1
  119. package/dist/foundation/release/index.d.ts +2 -2
  120. package/dist/foundation/release/index.js +1 -1
  121. package/dist/foundation/release/latest-release.d.ts +3 -18
  122. package/dist/foundation/release/latest-release.js +10 -10
  123. package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
  124. package/dist/foundation/release/ordinary-launch-selection.js +1 -1
  125. package/dist/foundation/release/release-gc.d.ts +3 -3
  126. package/dist/foundation/release/release-gc.js +4 -4
  127. package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +23 -23
  128. package/dist/foundation/release/{cohort-state.js → release-state.js} +8 -8
  129. package/dist/foundation/release/update-activation.js +2 -2
  130. package/dist/foundation/release/update-execution-lease.d.ts +2 -3
  131. package/dist/foundation/release/update-execution-lease.js +1 -1
  132. package/dist/foundation/release/update-launch.d.ts +2 -2
  133. package/dist/foundation/release/update.d.ts +0 -2
  134. package/dist/foundation/release/update.js +14 -14
  135. package/dist/foundation/startup/startup-budget.d.ts +5 -5
  136. package/dist/foundation/startup/startup-budget.js +2 -2
  137. package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
  138. package/dist/integrations/pi/components/index.d.ts +15 -9
  139. package/dist/integrations/pi/components/index.js +9 -5
  140. package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
  141. package/dist/integrations/pi/components/lazy-selectors.js +1 -1
  142. package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
  143. package/dist/integrations/pi/components/modal-frame.js +3 -23
  144. package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
  145. package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
  146. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
  147. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
  148. package/dist/integrations/pi/components/shell-footer-status.d.ts +2 -2
  149. package/dist/integrations/pi/components/shell-footer-status.js +3 -2
  150. package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -5
  151. package/dist/integrations/pi/components/shell-presenters-info.js +2 -1
  152. package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
  153. package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -227
  154. package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
  155. package/dist/integrations/pi/components/skills-command.d.ts +1 -9
  156. package/dist/integrations/pi/components/skills-command.js +5 -5
  157. package/dist/integrations/pi/components/theme.d.ts +9 -2
  158. package/dist/integrations/pi/components/theme.js +17 -2
  159. package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
  160. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
  161. package/dist/integrations/pi/engine/adapter.d.ts +3 -5
  162. package/dist/integrations/pi/engine/adapter.js +3 -12
  163. package/dist/integrations/pi/engine/changelog.d.ts +2 -2
  164. package/dist/integrations/pi/engine/changelog.js +3 -3
  165. package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
  166. package/dist/integrations/pi/engine/compaction-progress.js +1 -1
  167. package/dist/integrations/pi/engine/conformance.d.ts +2 -1
  168. package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
  169. package/dist/integrations/pi/engine/default-model-setting.js +1 -2
  170. package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
  171. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
  172. package/dist/integrations/pi/engine/host.js +2 -2
  173. package/dist/integrations/pi/engine/message-values.d.ts +0 -1
  174. package/dist/integrations/pi/engine/message-values.js +1 -1
  175. package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
  176. package/dist/integrations/pi/engine/pending-delivery.js +3 -3
  177. package/dist/integrations/pi/engine/ports.d.ts +7 -1
  178. package/dist/integrations/pi/engine/ports.js +4 -0
  179. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
  180. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -2
  181. package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
  182. package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
  183. package/dist/integrations/pi/engine/public-main-entry.js +1 -1
  184. package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
  185. package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
  186. package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
  187. package/dist/integrations/pi/engine/repository-pr.js +1 -1
  188. package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
  189. package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
  190. package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
  191. package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
  192. package/dist/integrations/pi/engine/settings-bridge.js +1 -1
  193. package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
  194. package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
  195. package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
  196. package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
  197. package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
  198. package/dist/integrations/pi/engine/workflow-support.js +4 -18
  199. package/dist/integrations/pi/engine/workflows.d.ts +5 -5
  200. package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
  201. package/dist/integrations/pi/session-presenters/components.js +75 -0
  202. package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
  203. package/dist/integrations/pi/session-presenters/index.js +1 -0
  204. package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
  205. package/dist/integrations/pi/session-presenters/presentation.js +10 -0
  206. package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
  207. package/dist/integrations/pi/session-presenters/presenters.js +3 -1
  208. package/dist/integrations/pi/tui-runtime/adapter.js +21 -30
  209. package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
  210. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
  211. package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
  212. package/dist/integrations/pi/tui-runtime/index.js +1 -0
  213. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
  214. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
  215. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
  216. package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
  217. package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
  218. package/dist/ui/components/index.d.ts +2 -2
  219. package/dist/ui/components/index.js +1 -1
  220. package/dist/ui/components/selection-copy.d.ts +0 -1
  221. package/dist/ui/components/selection-copy.js +0 -12
  222. package/dist/ui/components/theme.d.ts +4 -19
  223. package/dist/ui/components/theme.js +6 -0
  224. package/dist/ui/settings/declarations.d.ts +2 -3
  225. package/dist/ui/settings/declarations.js +2 -3
  226. package/dist/ui/settings/early-accent.js +1 -1
  227. package/dist/ui/settings/index.d.ts +3 -5
  228. package/dist/ui/settings/index.js +2 -3
  229. package/dist/ui/settings/manager.d.ts +0 -4
  230. package/dist/ui/settings/manager.js +6 -62
  231. package/dist/ui/settings/resolution.d.ts +6 -18
  232. package/dist/ui/settings/resolution.js +4 -103
  233. package/dist/ui/settings/sections.d.ts +0 -4
  234. package/dist/ui/settings/sections.js +1 -1
  235. package/docs/architecture/boundaries.md +2 -2
  236. package/docs/architecture/internal-naming.md +2 -0
  237. package/docs/architecture/project-structure.md +4 -2
  238. package/docs/validation.md +1 -1
  239. package/package.json +3 -4
  240. package/dist/integrations/pi/components/components.d.ts +0 -4
  241. package/dist/integrations/pi/components/components.js +0 -48
  242. package/dist/integrations/pi/components/conformance.d.ts +0 -18
  243. package/dist/integrations/pi/components/conformance.js +0 -70
  244. package/dist/integrations/pi/components/shell-components.d.ts +0 -7
  245. package/dist/integrations/pi/components/shell-components.js +0 -7
  246. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
  247. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
  248. package/dist/ui/settings/migrations.d.ts +0 -19
  249. package/dist/ui/settings/migrations.js +0 -225
  250. package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
  251. package/dist/ui/settings/progress-palette.generated.js +0 -139
  252. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
  253. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
@@ -1,14 +1,8 @@
1
- import { ImageAttachmentError } from "../../contracts/owned-ui/index.js";
2
1
  import { promptArrow } from "../../ui/components/prompt-input.js";
3
2
  import { composeSubmittedPromptRows, submittedPromptLayout, } from "../../ui/components/submitted-prompt.js";
4
3
  import { nativeHyperlinkStyle } from "../../ui/components/spans.js";
5
4
  import { paintTextSelection } from "../../ui/components/text-selection.js";
6
5
  import { progressStatusFrame, progressStatusText } from "../../ui/components/progress-status.js";
7
- import { createPiQueuedInputStatus, createPiShellFooter, createPiShellHeader, createPiShellLoadedResources, createPiShellStatus, } from "../../integrations/pi/components/shell-footer-status.js";
8
- import { createPiShellTranscriptComponent, } from "../../integrations/pi/components/shell-presenters-transcript.js";
9
- import { onPiThemeChange, piTheme } from "../../integrations/pi/components/upstream/theme/theme.js";
10
- import { piShellTruncateToWidth, } from "../../integrations/pi/components/shell-shared-facade.js";
11
- import {} from "../../integrations/pi/tui-runtime/input-presentation-coordinator.js";
12
6
  import { PromptChipStore } from "./prompt-chips.js";
13
7
  import { SessionViewportController } from "./session-viewport-controller.js";
14
8
  import { createShellEditor } from "./shell-editor-factory.js";
@@ -18,14 +12,15 @@ import { WorkflowOutput } from "./workflow-output.js";
18
12
  import { InputSurfaceSwitch } from "./input-surface-switch.js";
19
13
  import { PinnedLayout } from "./shell-layout.js";
20
14
  import { ViewportLayout } from "./viewport-layout.js";
21
- import { nativeTranscriptLinkColor, TranscriptDocument } from "./transcript-document.js";
15
+ import { transcriptLinkColor, TranscriptDocument } from "./transcript-document.js";
22
16
  /** Composes session state into the owned transcript, viewport, editor, and dock. */
23
17
  export class OwnedUiSessionShellRoot {
24
18
  editor;
25
19
  header;
26
20
  resources;
27
21
  #cwd;
28
- #document;
22
+ /** The transcript's semantic rows, caches, and engine-backed block renderers. */
23
+ transcript;
29
24
  #themeUnsubscribe;
30
25
  #view;
31
26
  #status;
@@ -47,11 +42,13 @@ export class OwnedUiSessionShellRoot {
47
42
  #showImages = true;
48
43
  #imageWidthCells = 80;
49
44
  #outputPad = 1;
50
- #workflowOutput;
45
+ /** Workflow results, messages, and status lines appended to the transcript. */
46
+ workflow;
51
47
  #input;
52
48
  #layout;
53
49
  #extensions = new ExtensionSurface();
54
- #dockChrome;
50
+ /** The dock's notices, copy acknowledgement, and release banner. */
51
+ chrome;
55
52
  #imageSubmissionsSending = 0;
56
53
  constructor(view, cwd, handlers, startup = {}, agentDir, extensionRenderers = {
57
54
  getMessageRenderer: () => undefined,
@@ -64,26 +61,26 @@ export class OwnedUiSessionShellRoot {
64
61
  ...(handlers.pasteDiagnostics === undefined ? {} : { onEvent: handlers.pasteDiagnostics }),
65
62
  ...(handlers.pastePreparation === undefined ? {} : { preparation: handlers.pastePreparation }),
66
63
  ...(handlers.promptImageLimit === undefined ? {} : { imageLimit: handlers.promptImageLimit }) });
67
- this.#submittedPromptComposer = this.#customViewport ? this.#createSubmittedPromptComposer() : undefined;
64
+ this.#submittedPromptComposer = this.#customViewport ? this.#createSubmittedPromptComposer(handlers.presentation.theme) : undefined;
68
65
  this.#cwd = cwd;
69
- this.#document = this.#createDocument(cwd);
66
+ this.transcript = this.#createDocument(cwd, handlers.presentation.theme, handlers.components);
70
67
  this.#extensionRenderers = extensionRenderers;
71
68
  this.#imageAssets = imageAssets;
72
69
  this.#componentRuntime = handlers;
73
70
  this.#onPromptSuggestionEligibilityChanged = handlers.onPromptSuggestionEligibilityChanged;
74
- this.header = createPiShellHeader({
71
+ this.header = handlers.components.chrome.header({
75
72
  ...startup,
76
73
  ...(this.#customViewport ? { getKeybindings: () => this.editor.keybindingConfig() } : {}),
77
74
  });
78
- this.resources = createPiShellLoadedResources(startup.resources ?? [], startup.expanded ?? false);
79
- this.#status = createPiShellStatus(view, {
75
+ this.resources = handlers.components.chrome.loadedResources(startup.resources ?? [], startup.expanded ?? false);
76
+ this.#status = handlers.components.chrome.status(view, {
80
77
  text: (message, mode) => progressStatusText(message, mode === "custom-viewport" ? "…" : "..."),
81
78
  frame: progressStatusFrame,
82
79
  }, handlers);
83
80
  this.#status.setProgressPresentation(this.#customViewport ? "custom-viewport" : "pinned");
84
- this.#footer = createPiShellFooter(this.#extensions.withStatuses(view), cwd, this.#customViewport ? "a1" : "pi", () => this.#footerLevel);
81
+ this.#footer = handlers.components.chrome.footer(this.#extensions.withStatuses(view), cwd, this.#customViewport ? "a1" : "pi", () => this.#footerLevel);
85
82
  this.editor = createShellEditor({
86
- handlers,
83
+ handlers, theme: handlers.presentation.theme, components: handlers.components,
87
84
  customViewport: this.#customViewport,
88
85
  cwd,
89
86
  ...(agentDir === undefined ? {} : { agentDir }),
@@ -92,7 +89,7 @@ export class OwnedUiSessionShellRoot {
92
89
  nextPasteDiagnosticRequest: () => --this.#pasteDiagnosticId,
93
90
  toggleToolsExpanded: () => this.#setToolsExpanded(!this.#toolsExpanded),
94
91
  });
95
- this.#queued = createPiQueuedInputStatus(view.editor.queuedSubmissions, this.#customViewport ? "custom-viewport" : "pinned", this.#customViewport ? () => this.editor.keybindingConfig() : undefined);
92
+ this.#queued = handlers.components.chrome.queuedInput(view.editor.queuedSubmissions, this.#customViewport ? "custom-viewport" : "pinned", this.#customViewport ? () => this.editor.keybindingConfig() : undefined);
96
93
  this.#viewportController = new SessionViewportController({
97
94
  enabled: this.#customViewport,
98
95
  editor: this.editor,
@@ -102,15 +99,15 @@ export class OwnedUiSessionShellRoot {
102
99
  ...(handlers.pasteDiagnostics === undefined ? {} : { pasteDiagnostics: handlers.pasteDiagnostics }),
103
100
  nextPasteDiagnosticRequest: () => --this.#pasteDiagnosticId,
104
101
  });
105
- this.#dockChrome = new DockChrome({
102
+ this.chrome = new DockChrome({ theme: handlers.presentation.theme, outputPad: handlers.presentation.pinnedOutputPad, components: handlers.components,
106
103
  invalidateChrome: () => this.#invalidateChrome(),
107
104
  requestRender: () => this.#componentRuntime.requestRender(),
108
105
  viewport: this.#viewportController,
109
106
  });
110
- this.#workflowOutput = new WorkflowOutput({
111
- customViewport: this.#customViewport,
112
- document: this.#document,
113
- dock: this.#dockChrome,
107
+ this.workflow = new WorkflowOutput({
108
+ customViewport: this.#customViewport, components: handlers.components,
109
+ document: this.transcript,
110
+ dock: this.chrome,
114
111
  transcriptLength: () => this.#view.transcript.length,
115
112
  outputPad: () => this.#outputPad,
116
113
  hotkeysPresentation: () => this.hotkeysPresentation(),
@@ -119,26 +116,27 @@ export class OwnedUiSessionShellRoot {
119
116
  });
120
117
  this.editor.setThinkingLevel(view.thinkingLevel);
121
118
  this.#input = new InputSurfaceSwitch(this.editor, {
122
- dockInputReuse: this.#customViewport && (handlers.enableDockInputReuse ?? true),
119
+ dockInputReuse: this.#customViewport && (handlers.enableDockInputReuse ?? true), classifyInput: handlers.presentation.terminalRuntime.classifyInput,
123
120
  viewport: this.#viewportController,
124
121
  ...(handlers.onInputSurfaceChanged === undefined ? {} : { onChanged: handlers.onInputSurfaceChanged }),
125
122
  });
126
- this.#layout = this.#createLayout(handlers.onViewportFrame);
123
+ this.#layout = this.#createLayout(handlers.onViewportFrame, createViewportTheme(handlers.presentation.theme));
127
124
  for (const block of view.transcript) {
128
125
  if (block.kind === "user")
129
126
  this.editor.addToHistory(block.text);
130
127
  }
131
- this.#document.sync(view.transcript);
128
+ this.transcript.sync(view.transcript);
132
129
  // Invariant: rendered rows expire when
133
130
  // their active theme changes.
134
- this.#themeUnsubscribe = onPiThemeChange(() => {
131
+ this.#themeUnsubscribe = handlers.presentation.theme.onChange(() => {
135
132
  this.invalidate();
136
133
  this.#componentRuntime.requestRender(true);
137
134
  });
138
135
  }
139
136
  // Invariant: the document reads the shell's chrome lazily, so it may be built before the header and viewport.
140
- #createDocument(cwd) {
137
+ #createDocument(cwd, theme, components) {
141
138
  return new TranscriptDocument({
139
+ theme, components,
142
140
  customViewport: this.#customViewport,
143
141
  cwd,
144
142
  mount: block => this.#mountTranscript(block),
@@ -153,33 +151,34 @@ export class OwnedUiSessionShellRoot {
153
151
  });
154
152
  }
155
153
  // Invariant: one layout per root; the render path never consults the layout mode again.
156
- #createLayout(onFrame) {
154
+ #createLayout(onFrame, theme) {
157
155
  const ports = {
158
156
  viewport: this.#viewportController,
159
157
  input: this.#input,
160
158
  editor: this.editor,
161
159
  promptChips: this.#promptChips,
162
- dockChrome: this.#dockChrome,
163
- theme: VIEWPORT_THEME,
160
+ dockChrome: this.chrome,
161
+ theme,
164
162
  ...(onFrame === undefined ? {} : { onFrame }),
165
163
  rows: () => this.#componentRuntime.getRows(),
166
164
  dock: width => this.#renderDockLayout(width),
167
- document: width => this.#document.layout(width),
165
+ document: width => this.transcript.layout(width),
168
166
  queued: width => this.#renderQueued(width),
169
167
  liveStatus: width => this.#renderStatus(width),
170
168
  diagnostics: () => this.#view.diagnostics,
171
169
  };
172
170
  return this.#customViewport ? new ViewportLayout(ports) : new PinnedLayout(ports);
173
171
  }
174
- #createSubmittedPromptComposer() {
172
+ #createSubmittedPromptComposer(theme) {
173
+ const linkColor = transcriptLinkColor(theme);
175
174
  return {
176
175
  layout: width => submittedPromptLayout(width),
177
- compose: (rows, width, style) => composeSubmittedPromptRows(rows, width, { ...style, prefix: text => promptArrow(text, piTheme()) }).map(row => nativeHyperlinkStyle(row, nativeTranscriptLinkColor)),
176
+ compose: (rows, width, style) => composeSubmittedPromptRows(rows, width, { ...style, prefix: text => promptArrow(text, theme.current()) }).map(row => nativeHyperlinkStyle(row, linkColor)),
178
177
  };
179
178
  }
180
179
  setEditorPaddingX(padding) {
181
180
  this.editor.setPaddingX(padding);
182
- this.#document.invalidate("editor-padding");
181
+ this.transcript.invalidate("editor-padding");
183
182
  }
184
183
  setAutocompleteMaxVisible(maxVisible) {
185
184
  this.editor.setAutocompleteMaxVisible(maxVisible);
@@ -189,7 +188,7 @@ export class OwnedUiSessionShellRoot {
189
188
  return;
190
189
  this.#outputPad = padding;
191
190
  this.#status.setOutputPad(padding);
192
- for (const component of this.#document.components())
191
+ for (const component of this.transcript.components())
193
192
  component.setOutputPad(padding);
194
193
  this.#invalidateTranscriptPresentation();
195
194
  }
@@ -197,7 +196,7 @@ export class OwnedUiSessionShellRoot {
197
196
  if (this.#thinkingVisible === !hidden)
198
197
  return;
199
198
  this.#thinkingVisible = !hidden;
200
- for (const component of this.#document.components())
199
+ for (const component of this.transcript.components())
201
200
  component.setHideThinkingBlock(hidden);
202
201
  this.#invalidateTranscriptPresentation();
203
202
  }
@@ -205,7 +204,7 @@ export class OwnedUiSessionShellRoot {
205
204
  if (this.#mermaidRenderingMode === mode)
206
205
  return;
207
206
  this.#mermaidRenderingMode = mode;
208
- for (const component of this.#document.components())
207
+ for (const component of this.transcript.components())
209
208
  component.setMermaidRenderingMode(mode);
210
209
  this.#invalidateTranscriptPresentation();
211
210
  }
@@ -214,7 +213,7 @@ export class OwnedUiSessionShellRoot {
214
213
  return;
215
214
  this.#showImages = showImages;
216
215
  this.#imageWidthCells = imageWidthCells;
217
- for (const component of this.#document.components())
216
+ for (const component of this.transcript.components())
218
217
  component.setImagePresentation(showImages, imageWidthCells);
219
218
  this.#invalidateTranscriptPresentation();
220
219
  }
@@ -234,9 +233,9 @@ export class OwnedUiSessionShellRoot {
234
233
  return this.#promptChips.prepareSubmission(text);
235
234
  }
236
235
  reconcilePromptImageLimitNotice(text = this.editor.getText()) {
237
- if (this.#dockChrome.notice?.errorCode !== "image-count" || !this.#promptChips.imageLimitState(text).corrected)
236
+ if (this.chrome.notice?.errorCode !== "image-count" || !this.#promptChips.imageLimitState(text).corrected)
238
237
  return false;
239
- this.dismissNotice();
238
+ this.chrome.dismissNotice();
240
239
  return true;
241
240
  }
242
241
  hasPendingPastes(text) { return this.#promptChips.hasPending(text); }
@@ -280,14 +279,14 @@ export class OwnedUiSessionShellRoot {
280
279
  const becameReady = this.#view.lifecycle !== "ready" && view.lifecycle === "ready";
281
280
  if (view.diagnostics.length !== this.#view.diagnostics.length
282
281
  || view.diagnostics.some((diagnostic, index) => diagnostic.sequence !== this.#view.diagnostics[index]?.sequence)) {
283
- this.#document.invalidate("diagnostics");
282
+ this.transcript.invalidate("diagnostics");
284
283
  }
285
284
  const promptAccepted = this.#view.lifecycle !== "busy" && view.lifecycle === "busy";
286
285
  this.#view = view;
287
286
  // Invariant: the idle new-session confirmation yields to the first truthful live status;
288
287
  // ordinary dock notices deliberately remain visible below Working during a run.
289
- if (promptAccepted && this.#dockChrome.notice?.kind === "new-session")
290
- this.#dockChrome.forgetNotice();
288
+ if (promptAccepted && this.chrome.notice?.kind === "new-session")
289
+ this.chrome.forgetNotice();
291
290
  if (promptAccepted && this.#imageSubmissionsSending > 0) {
292
291
  this.#imageSubmissionsSending = 0;
293
292
  this.#syncWorkingOverride();
@@ -295,7 +294,7 @@ export class OwnedUiSessionShellRoot {
295
294
  this.#status.update(view);
296
295
  this.#footer.update(this.#extensions.withStatuses(view));
297
296
  this.#queued.update(view.editor.queuedSubmissions);
298
- this.#document.sync(view.transcript);
297
+ this.transcript.sync(view.transcript);
299
298
  this.editor.setSubmitEnabled(view.lifecycle !== "stopping" && view.lifecycle !== "stopped" && view.lifecycle !== "failed");
300
299
  this.editor.setThinkingLevel(view.thinkingLevel);
301
300
  // Performance: semantic updates already invalidate affected transcript blocks. Chrome is a separate authority.
@@ -303,23 +302,15 @@ export class OwnedUiSessionShellRoot {
303
302
  if (becameReady)
304
303
  this.#onPromptSuggestionEligibilityChanged?.();
305
304
  }
306
- /**
307
- * Applies one block: its component is created or updated in place and the order grows
308
- * only when the block is new. A streamed chunk costs one component update rather than a
309
- * walk of the whole transcript.
310
- */
311
- applyTranscriptBlock(block) {
312
- this.#document.apply(block);
313
- }
314
305
  #mountTranscript(block) {
315
306
  // Invariant: the notice answers the reader's last command, so only their next prompt or
316
307
  // shell command retires it; assistant, tool, and compaction blocks streaming in keep it.
317
308
  if (block.kind === "user" || block.kind === "bash")
318
- this.dismissNotice();
319
- const created = createPiShellTranscriptComponent(block, this.#cwd, this.#extensionRenderers, this.#submittedPromptComposer, this.#outputPad, !this.#thinkingVisible, this.#mermaidRenderingMode, this.#showImages, this.#imageWidthCells, this.#imageAssets, { ...this.#componentRuntime, changed: () => {
320
- if (this.#document.component(block.id) !== created)
309
+ this.chrome.dismissNotice();
310
+ const created = this.#componentRuntime.components.transcript.component(block, this.#cwd, this.#extensionRenderers, this.#submittedPromptComposer, this.#outputPad, !this.#thinkingVisible, this.#mermaidRenderingMode, this.#showImages, this.#imageWidthCells, this.#imageAssets, { ...this.#componentRuntime, changed: () => {
311
+ if (this.transcript.component(block.id) !== created)
321
312
  return;
322
- this.#document.blockChanged(block.id);
313
+ this.transcript.blockChanged(block.id);
323
314
  this.#layout.invalidate();
324
315
  this.#input.clearDockInputCandidate();
325
316
  this.#componentRuntime.requestRender();
@@ -361,26 +352,19 @@ export class OwnedUiSessionShellRoot {
361
352
  }
362
353
  setViewportConfig(config) {
363
354
  if (this.#viewportController.setConfig(config)) {
364
- this.#document.invalidate("viewport-config");
355
+ this.transcript.invalidate("viewport-config");
365
356
  this.#layout.invalidate();
366
357
  }
367
358
  }
368
359
  setFullscreenCopyOnSelect(enabled) {
369
360
  this.#viewportController.setCopyOnSelect(enabled);
370
361
  }
371
- showCopyAcknowledgement(message) {
372
- this.#dockChrome.showCopyAcknowledgement(message);
373
- }
374
362
  resumeViewportFollowing() {
375
363
  this.#viewportController.resumeFollowing();
376
364
  }
377
365
  noteCompletedAssistantMessage() {
378
366
  this.#viewportController.noteCompletedAssistantMessage();
379
367
  }
380
- /** A new session binding owns new mounts even when it reuses semantic invocation ids. */
381
- resetTranscript() {
382
- this.#document.reset();
383
- }
384
368
  resetViewport() {
385
369
  this.#viewportController.reset();
386
370
  }
@@ -400,7 +384,7 @@ export class OwnedUiSessionShellRoot {
400
384
  #renderDockLayout(width) {
401
385
  const queued = this.#customViewport ? [] : this.#renderQueued(width);
402
386
  const statusRows = this.#customViewport ? this.#status.renderDock(width) : this.#renderStatus(width);
403
- const noticeRows = this.#dockChrome.renderNotice(width, this.#outputPad);
387
+ const noticeRows = this.chrome.renderNotice(width, this.#outputPad);
404
388
  const transientRows = [...queued, ...statusRows, ...noticeRows];
405
389
  const messageStart = queued.length;
406
390
  const copyableMessageRows = Array.from({ length: statusRows.length + noticeRows.length }, (_value, index) => ({ row: messageStart + index }));
@@ -420,9 +404,6 @@ export class OwnedUiSessionShellRoot {
420
404
  copyableMessageRows,
421
405
  };
422
406
  }
423
- dismissNotice() {
424
- this.#dockChrome.dismissNotice();
425
- }
426
407
  #renderQueued(width) {
427
408
  return this.#view.editor.queuedSubmissions.length === 0 ? [] : this.#queued.render(width);
428
409
  }
@@ -439,22 +420,7 @@ export class OwnedUiSessionShellRoot {
439
420
  };
440
421
  }
441
422
  #renderDocument(width) {
442
- return this.#document.layout(width).rows;
443
- }
444
- transcriptComponent(id) {
445
- return this.#document.component(id);
446
- }
447
- exitTranscript(width) {
448
- return this.#document.exitTranscript(width);
449
- }
450
- appendWorkflowStatus(message) {
451
- this.#workflowOutput.appendStatus(message);
452
- }
453
- appendWorkflowMessage(message, errorCode) {
454
- this.#workflowOutput.appendMessage(message, errorCode);
455
- }
456
- appendWorkflowResult(result, errorCode) {
457
- this.#workflowOutput.appendResult(result, errorCode);
423
+ return this.transcript.layout(width).rows;
458
424
  }
459
425
  toggleThinkingVisibility() {
460
426
  this.setHideThinkingBlock(this.#thinkingVisible);
@@ -471,7 +437,7 @@ export class OwnedUiSessionShellRoot {
471
437
  }
472
438
  setExtensionHeader(component) {
473
439
  this.#extensions.replaceHeader(component);
474
- this.#document.invalidate("extension-header");
440
+ this.transcript.invalidate("extension-header");
475
441
  this.invalidate();
476
442
  }
477
443
  setExtensionFooter(component) {
@@ -516,9 +482,9 @@ export class OwnedUiSessionShellRoot {
516
482
  };
517
483
  }
518
484
  resetWorkflowPresentation() {
519
- this.#dockChrome.forgetNotice();
520
- this.#dockChrome.clearCopyAcknowledgement(false);
521
- this.#workflowOutput.reset();
485
+ this.chrome.forgetNotice();
486
+ this.chrome.clearCopyAcknowledgement(false);
487
+ this.workflow.reset();
522
488
  this.invalidate();
523
489
  }
524
490
  resetExtensionUi() {
@@ -526,15 +492,15 @@ export class OwnedUiSessionShellRoot {
526
492
  this.#syncWorkingOverride();
527
493
  this.#footer.update(this.#extensions.withStatuses(this.#view));
528
494
  // Invariant: an extension renderer may have drawn transcript blocks that are now unrendered by it.
529
- this.#document.invalidate("extension-renderers");
495
+ this.transcript.invalidate("extension-renderers");
530
496
  this.invalidate();
531
497
  }
532
498
  addExtensionNotification(message, type) {
533
499
  if (type === "info") {
534
- this.appendWorkflowStatus(message);
500
+ this.workflow.appendStatus(message);
535
501
  return;
536
502
  }
537
- this.appendWorkflowMessage({ kind: type, message });
503
+ this.workflow.appendMessage({ kind: type, message });
538
504
  }
539
505
  extensionFooterData() {
540
506
  return {
@@ -554,7 +520,7 @@ export class OwnedUiSessionShellRoot {
554
520
  return this.#layout.compositions();
555
521
  }
556
522
  transcriptRenderCount() {
557
- return this.#document.renderCount;
523
+ return this.transcript.renderCount;
558
524
  }
559
525
  setFooterLevel(visible) { this.#footerLevel = visible; }
560
526
  setInputSurface(component, disposePrevious = true, coordination = "owned") {
@@ -565,7 +531,7 @@ export class OwnedUiSessionShellRoot {
565
531
  this.#input.handleInput(data);
566
532
  }
567
533
  invalidate() {
568
- this.#document.invalidate("repaint");
534
+ this.transcript.invalidate("repaint");
569
535
  this.#invalidateChrome();
570
536
  }
571
537
  #invalidateChrome() {
@@ -585,12 +551,12 @@ export class OwnedUiSessionShellRoot {
585
551
  this.#onPromptSuggestionEligibilityChanged?.();
586
552
  }
587
553
  dispose() {
588
- this.#dockChrome.clearCopyAcknowledgement(false);
554
+ this.chrome.clearCopyAcknowledgement(false);
589
555
  this.clearViewportPointerState();
590
556
  this.#themeUnsubscribe();
591
557
  this.header.dispose?.();
592
558
  this.resources.dispose?.();
593
- this.#document.dispose();
559
+ this.transcript.dispose();
594
560
  this.#layout.invalidate();
595
561
  this.#input.dispose();
596
562
  this.#extensions.dispose();
@@ -600,7 +566,7 @@ export class OwnedUiSessionShellRoot {
600
566
  this.#queued.dispose?.();
601
567
  }
602
568
  #invalidateTranscriptPresentation() {
603
- this.#document.invalidate("block-presentation");
569
+ this.transcript.invalidate("block-presentation");
604
570
  this.invalidate();
605
571
  }
606
572
  #renderStatus(width) {
@@ -611,16 +577,16 @@ export class OwnedUiSessionShellRoot {
611
577
  if (!this.#customViewport)
612
578
  return footer.render(width);
613
579
  width = Math.max(0, width - 2);
614
- return footer.render(width).map(row => ` ${piShellTruncateToWidth(row, width)}`);
580
+ return footer.render(width).map(row => ` ${this.#componentRuntime.components.text.truncateToWidth(row, width)}`);
615
581
  }
616
582
  #setToolsExpanded(expanded) {
617
583
  this.#toolsExpanded = expanded;
618
584
  this.header.setExpanded(expanded);
619
585
  this.resources.setExpanded(expanded);
620
- for (const component of this.#document.components())
586
+ for (const component of this.transcript.components())
621
587
  component.setExpanded(expanded);
622
588
  // Invariant: expansion changes what a block draws without changing its revision.
623
- this.#document.invalidate("tools-expanded");
589
+ this.transcript.invalidate("tools-expanded");
624
590
  this.invalidate();
625
591
  }
626
592
  }
@@ -634,7 +600,7 @@ function withoutTerminalBackground(text) {
634
600
  * The pinned-profile screen: a followed transcript scroll above the dock. The runtime mounts one such layout,
635
601
  * so its single `transcript` scroll view is shared by whichever session the parts currently resolve to.
636
602
  */
637
- export function pinnedLayoutRoot(parts) {
603
+ export function pinnedLayoutRoot(parts, theme) {
638
604
  return {
639
605
  type: "stack",
640
606
  direction: "vertical",
@@ -651,8 +617,8 @@ export function pinnedLayoutRoot(parts) {
651
617
  primary: true,
652
618
  overscroll: "chain",
653
619
  scrollbar: "auto",
654
- scrollbarTrackStyle: text => piTheme().fg("scrollbarTrack", text),
655
- scrollbarThumbStyle: text => piTheme().fg("scrollbarThumb", text),
620
+ scrollbarTrackStyle: text => theme.current().fg("scrollbarTrack", text),
621
+ scrollbarThumbStyle: text => theme.current().fg("scrollbarThumb", text),
656
622
  child: { type: "component", component: parts.document },
657
623
  },
658
624
  },
@@ -839,13 +805,15 @@ function isPackageExtensionSource(sourceInfo) {
839
805
  const source = sourceInfo?.source ?? "";
840
806
  return source.startsWith("npm:") || source.startsWith("git:");
841
807
  }
842
- // Performance: stable painter identities let the neutral viewport retain row-level
843
- // selection variants while each callback still resolves the live Pi theme.
844
- const VIEWPORT_THEME = {
845
- track: text => `${SCROLLBAR_CELL_RESET}${piTheme().fg("dim", text)}`,
846
- thumb: text => `${SCROLLBAR_CELL_RESET}${piTheme().fg("accent", text)}`,
847
- sticky: (text, hovered) => piTheme().bg(hovered ? "selectedBg" : "toolPendingBg", piTheme().fg("text", withoutTerminalBackground(text))),
848
- quietSticky: text => `\u001b[2m${text.replace(/\u001b\[(?:0|22)m/g, "$&\u001b[2m")}\u001b[22m`,
849
- bottomControl: (text, hovered) => piTheme().bg(hovered ? "selectedBg" : "toolPendingBg", piTheme().fg("text", text)),
850
- selection: paintTextSelection,
851
- };
808
+ // Performance: one painter set per root keeps identities stable, so the neutral viewport retains row-level
809
+ // selection variants while each callback still resolves the live theme.
810
+ function createViewportTheme(source) {
811
+ return {
812
+ track: text => `${SCROLLBAR_CELL_RESET}${source.current().fg("dim", text)}`,
813
+ thumb: text => `${SCROLLBAR_CELL_RESET}${source.current().fg("accent", text)}`,
814
+ sticky: (text, hovered) => source.current().background(hovered ? "selectedBg" : "toolPendingBg", source.current().fg("text", withoutTerminalBackground(text))),
815
+ quietSticky: text => `\u001b[2m${text.replace(/\u001b\[(?:0|22)m/g, "$&\u001b[2m")}\u001b[22m`,
816
+ bottomControl: (text, hovered) => source.current().background(hovered ? "selectedBg" : "toolPendingBg", source.current().fg("text", text)),
817
+ selection: paintTextSelection,
818
+ };
819
+ }
@@ -1,11 +1,8 @@
1
+ import type { OwnedUiShellSelectorOption } from "../../contracts/owned-ui/index.js";
2
+ import type { TerminalComponentPort, TerminalInputListenerResult, TerminalInputSurfaceKind, TerminalOverlayHandle, TerminalPointerSurface } from "../../contracts/presentation/index.js";
1
3
  import type { OwnedUiCommandResult, OwnedUiSessionBackend, OwnedUiSessionViewModel, OwnedUiThinkingLevel, OwnedUiWorkflowRequest } from "../../contracts/owned-ui/index.js";
2
- import { type PiShellSkillSummary } from "../../integrations/pi/components/skills-command.js";
3
- import type { PiShellHotkeysPresentation } from "../../integrations/pi/components/shell-presenters-info.js";
4
- import type { PiShellSelectorOption } from "../../integrations/pi/components/shell-shared-facade.js";
5
- import type { PiTuiDamageDecision } from "../../integrations/pi/tui-runtime/damage-aware-terminal.js";
6
- import type { PiTuiRuntimeAdapter } from "../../integrations/pi/tui-runtime/adapter.js";
7
- import type { PiTuiInputSurfaceKind } from "../../integrations/pi/tui-runtime/input-presentation-coordinator.js";
8
- import type { PiTuiComponentPort, PiTuiInputListenerResult, PiTuiOverlayHandle, PiTuiPointerSurface } from "../../integrations/pi/tui-runtime/contracts.js";
4
+ import type { OwnedUiShellHotkeysPresentation, OwnedUiShellSkillSummary } from "../../contracts/owned-ui/index.js";
5
+ import type { TerminalDamageDecision, TerminalRuntimePort } from "../../contracts/presentation/index.js";
9
6
  import { OwnedUiTerminalHost, type OwnedUiHostedPresenter, type OwnedUiPresenterRelease } from "./shell-host.js";
10
7
  import { OwnedUiSessionShellRoot, type OwnedUiSessionShellOptions, type PinnedLayoutPart } from "./session-shell-root.js";
11
8
  export { OwnedUiSessionShellRoot, type OwnedUiSessionShellOptions, type OwnedUiShellDiagnosticOptions, type OwnedUiShellEngineOptions, type OwnedUiShellHistoryOptions, type OwnedUiShellPresentationOptions, type OwnedUiShellPromptImagesOptions, type OwnedUiShellSharedServices, type OwnedUiShellSkillsOptions, type OwnedUiShellSuggestionOptions, } from "./session-shell-root.js";
@@ -26,12 +23,12 @@ export declare class OwnedUiSessionPresenter implements OwnedUiHostedPresenter {
26
23
  handleInput(data: string): void;
27
24
  invalidate(): void;
28
25
  setFocused(focused: boolean): void;
29
- inputCoordinationSurface(): PiTuiInputSurfaceKind;
30
- setOverlaySurfaces(surfaces: readonly PiTuiPointerSurface[] | null): void;
26
+ inputCoordinationSurface(): TerminalInputSurfaceKind;
27
+ setOverlaySurfaces(surfaces: readonly TerminalPointerSurface[] | null): void;
31
28
  noteImmediatePresentation(): void;
32
- layoutPart(part: PinnedLayoutPart): PiTuiComponentPort;
29
+ layoutPart(part: PinnedLayoutPart): TerminalComponentPort;
33
30
  activated(): void;
34
- handleViewportInput(data: string): PiTuiInputListenerResult | undefined;
31
+ handleViewportInput(data: string): TerminalInputListenerResult | undefined;
35
32
  start(): void;
36
33
  onView(listener: (view: OwnedUiSessionViewModel) => void): () => void;
37
34
  waitUntilStopped(): Promise<void>;
@@ -49,10 +46,10 @@ export declare class OwnedUiSessionPresenter implements OwnedUiHostedPresenter {
49
46
  cycleModel(direction: "forward" | "backward"): Promise<OwnedUiCommandResult>;
50
47
  queueFollowUp(): Promise<OwnedUiCommandResult>;
51
48
  restoreQueuedInput(): void;
52
- showSelector(title: string, options: readonly PiShellSelectorOption[], onSelect: (id: string) => void, onCancel?: () => void): PiTuiOverlayHandle;
49
+ showSelector(title: string, options: readonly OwnedUiShellSelectorOption[], onSelect: (id: string) => void, onCancel?: () => void): TerminalOverlayHandle;
53
50
  showThinkingSelector(): Promise<void>;
54
51
  /** The Skills dialog: a replacement input like the model selector, applying the chosen skill through the prompt path. */
55
- showSkillsSelector(skills?: readonly PiShellSkillSummary[]): void;
52
+ showSkillsSelector(skills?: readonly OwnedUiShellSkillSummary[]): void;
56
53
  showModelSelector(initialSearchInput?: string): void;
57
54
  showForkSelector(): void;
58
55
  showLogoutSelector(): Promise<void>;
@@ -74,7 +71,7 @@ export declare class OwnedUiSessionPresenter implements OwnedUiHostedPresenter {
74
71
  readonly columns: number;
75
72
  }): OwnedUiPresenterRelease;
76
73
  openOwnedRoute(route: string): void;
77
- hotkeysPresentation(): PiShellHotkeysPresentation;
74
+ hotkeysPresentation(): OwnedUiShellHotkeysPresentation;
78
75
  }
79
76
  /**
80
77
  * One session on a terminal of its own: a terminal host with this presenter attached. Disposing it ends the
@@ -82,6 +79,6 @@ export declare class OwnedUiSessionPresenter implements OwnedUiHostedPresenter {
82
79
  */
83
80
  export declare class OwnedUiSessionShell extends OwnedUiSessionPresenter {
84
81
  constructor(options: OwnedUiSessionShellOptions);
85
- get runtime(): PiTuiRuntimeAdapter;
86
- damagePresentationDecision(): PiTuiDamageDecision | null;
82
+ get runtime(): TerminalRuntimePort;
83
+ damagePresentationDecision(): TerminalDamageDecision | null;
87
84
  }