@timurproko/a1 0.2.7-dev.1249 → 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 (524) hide show
  1. package/README.md +11 -36
  2. package/bin/cli.js +2 -17
  3. package/bin/ui.js +10 -51
  4. package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
  5. package/dist/app/session-shell/clipboard-image.d.ts +0 -1
  6. package/dist/app/session-shell/clipboard-image.js +1 -1
  7. package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
  8. package/dist/app/session-shell/dialog-coordinator.js +3 -4
  9. package/dist/app/session-shell/dock-chrome.d.ts +11 -6
  10. package/dist/app/session-shell/dock-chrome.js +5 -8
  11. package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
  12. package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
  13. package/dist/app/session-shell/exit-notice.d.ts +3 -3
  14. package/dist/app/session-shell/exit-notice.js +10 -10
  15. package/dist/app/session-shell/extension-surface.d.ts +8 -7
  16. package/dist/app/session-shell/helper-pool.d.ts +3 -4
  17. package/dist/app/session-shell/helper-pool.js +1 -1
  18. package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
  19. package/dist/app/session-shell/image-preparation.d.ts +0 -2
  20. package/dist/app/session-shell/image-preparation.js +2 -2
  21. package/dist/app/session-shell/image-source.d.ts +2 -3
  22. package/dist/app/session-shell/image-source.js +2 -2
  23. package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
  24. package/dist/app/session-shell/input-surface-switch.js +1 -2
  25. package/dist/app/session-shell/login-interaction.d.ts +5 -4
  26. package/dist/app/session-shell/login-interaction.js +2 -3
  27. package/dist/app/session-shell/paste-executor.d.ts +4 -8
  28. package/dist/app/session-shell/paste-executor.js +2 -2
  29. package/dist/app/session-shell/paste-protocol.d.ts +2 -2
  30. package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
  31. package/dist/app/session-shell/path-chip-presentation.js +3 -3
  32. package/dist/app/session-shell/prompt-chips.d.ts +8 -7
  33. package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
  34. package/dist/app/session-shell/prompt-submission.d.ts +7 -6
  35. package/dist/app/session-shell/prompt-submission.js +7 -28
  36. package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
  37. package/dist/app/session-shell/quit-outro-effects.js +1 -4
  38. package/dist/app/session-shell/quit-outro.d.ts +9 -12
  39. package/dist/app/session-shell/quit-outro.js +11 -11
  40. package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
  41. package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
  42. package/dist/app/session-shell/response-copy-transport.js +2 -3
  43. package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
  44. package/dist/app/session-shell/session-lifecycle.js +2 -4
  45. package/dist/app/session-shell/session-shell-root.d.ts +74 -120
  46. package/dist/app/session-shell/session-shell-root.js +82 -115
  47. package/dist/app/session-shell/session-shell.d.ts +13 -16
  48. package/dist/app/session-shell/session-shell.js +149 -314
  49. package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
  50. package/dist/app/session-shell/session-viewport-controller.js +5 -8
  51. package/dist/app/session-shell/settings-bindings.d.ts +24 -2
  52. package/dist/app/session-shell/settings-bindings.js +24 -0
  53. package/dist/app/session-shell/share-operation.d.ts +3 -3
  54. package/dist/app/session-shell/share-operation.js +4 -6
  55. package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
  56. package/dist/app/session-shell/shell-clipboard.js +119 -0
  57. package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
  58. package/dist/app/session-shell/shell-editor-factory.js +13 -15
  59. package/dist/app/session-shell/shell-host.d.ts +16 -17
  60. package/dist/app/session-shell/shell-host.js +20 -37
  61. package/dist/app/session-shell/shell-layout.d.ts +2 -2
  62. package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
  63. package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
  64. package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
  65. package/dist/app/session-shell/suggestion-surface.js +1 -1
  66. package/dist/app/session-shell/system-clipboard.d.ts +2 -14
  67. package/dist/app/session-shell/system-clipboard.js +2 -7
  68. package/dist/app/session-shell/transcript-document.d.ts +12 -10
  69. package/dist/app/session-shell/transcript-document.js +15 -41
  70. package/dist/app/session-shell/viewport-layout.d.ts +2 -2
  71. package/dist/app/session-shell/workflow-output.d.ts +5 -3
  72. package/dist/app/session-shell/workflow-output.js +13 -15
  73. package/dist/app/session-shell/workflow-router.d.ts +1 -3
  74. package/dist/app/session-shell/workflow-router.js +1 -4
  75. package/dist/cli/dispatch.d.ts +1 -11
  76. package/dist/cli/dispatch.js +5 -92
  77. package/dist/cli/package-messages.d.ts +0 -1
  78. package/dist/cli/package-messages.js +1 -1
  79. package/dist/cli/session-context.d.ts +1 -1
  80. package/dist/cli/session-context.js +5 -7
  81. package/dist/cli/uninstall.d.ts +4 -7
  82. package/dist/cli/uninstall.js +6 -35
  83. package/dist/cli/version-stats.js +4 -7
  84. package/dist/composition/owned-settings.d.ts +2 -2
  85. package/dist/composition/owned-settings.js +0 -4
  86. package/dist/composition/owned-ui.d.ts +3 -25
  87. package/dist/composition/owned-ui.js +37 -113
  88. package/dist/composition/reference-selection-options.d.ts +1 -1
  89. package/dist/composition/reference-selection-options.js +1 -1
  90. package/dist/composition/release-update-observation.d.ts +4 -4
  91. package/dist/composition/release-update-observation.js +17 -47
  92. package/dist/composition/session-backend.d.ts +0 -1
  93. package/dist/composition/session-runtime-registry.d.ts +5 -4
  94. package/dist/composition/settings-route-host.d.ts +0 -7
  95. package/dist/composition/settings-route-host.js +7 -20
  96. package/dist/composition/settings-search-input.d.ts +2 -1
  97. package/dist/composition/startup-route.d.ts +2 -3
  98. package/dist/composition/startup-route.js +2 -3
  99. package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
  100. package/dist/contracts/owned-ui/index.d.ts +2 -1
  101. package/dist/contracts/owned-ui/model.d.ts +0 -3
  102. package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
  103. package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
  104. package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
  105. package/dist/contracts/presentation/component.d.ts +17 -0
  106. package/dist/contracts/presentation/component.js +8 -0
  107. package/dist/contracts/presentation/index.d.ts +6 -15
  108. package/dist/contracts/presentation/index.js +2 -0
  109. package/dist/contracts/presentation/terminal.d.ts +290 -0
  110. package/dist/contracts/presentation/theme.d.ts +46 -0
  111. package/dist/features/launch/development-launch.js +1 -2
  112. package/dist/features/launch/index.d.ts +1 -1
  113. package/dist/features/launch/intent.d.ts +1 -3
  114. package/dist/features/launch/intent.js +2 -4
  115. package/dist/features/launch/runtime-selection.d.ts +2 -2
  116. package/dist/features/launch/runtime-selection.js +2 -2
  117. package/dist/features/launch/session-context.d.ts +2 -2
  118. package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
  119. package/dist/features/owned-ui/project-trust-prompt.js +1 -1
  120. package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
  121. package/dist/features/owned-ui/reference-screen-app.js +2 -9
  122. package/dist/features/owned-ui/release-note-state.d.ts +2 -1
  123. package/dist/features/owned-ui/settings-app.d.ts +0 -6
  124. package/dist/features/owned-ui/settings-app.js +42 -254
  125. package/dist/features/owned-ui/settings-edits.d.ts +31 -0
  126. package/dist/features/owned-ui/settings-edits.js +139 -0
  127. package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
  128. package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
  129. package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
  130. package/dist/features/prompt-history/service.d.ts +3 -2
  131. package/dist/foundation/launch-context/index.d.ts +0 -12
  132. package/dist/foundation/launch-context/index.js +0 -26
  133. package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
  134. package/dist/foundation/lifecycle/claim-gate.js +37 -0
  135. package/dist/foundation/lifecycle/index.d.ts +5 -9
  136. package/dist/foundation/lifecycle/index.js +3 -4
  137. package/dist/foundation/lifecycle/model.d.ts +2 -59
  138. package/dist/foundation/lifecycle/model.js +0 -35
  139. package/dist/foundation/lifecycle/paths.d.ts +0 -24
  140. package/dist/foundation/lifecycle/paths.js +0 -40
  141. package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
  142. package/dist/foundation/lifecycle/process-liveness.js +18 -0
  143. package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
  144. package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
  145. package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
  146. package/dist/foundation/lifecycle/session-repository-context.js +2 -3
  147. package/dist/foundation/release/automatic-update.d.ts +6 -17
  148. package/dist/foundation/release/automatic-update.js +23 -44
  149. package/dist/foundation/release/bootstrap.d.ts +2 -25
  150. package/dist/foundation/release/bootstrap.js +37 -348
  151. package/dist/foundation/release/dependency-certification.d.ts +1 -2
  152. package/dist/foundation/release/dependency-certification.js +1 -1
  153. package/dist/foundation/release/early-accent.d.ts +2 -2
  154. package/dist/foundation/release/early-accent.js +1 -1
  155. package/dist/foundation/release/index.d.ts +10 -17
  156. package/dist/foundation/release/index.js +7 -11
  157. package/dist/foundation/release/latest-release.d.ts +3 -19
  158. package/dist/foundation/release/latest-release.js +11 -12
  159. package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
  160. package/dist/foundation/release/ordinary-launch-selection.js +1 -1
  161. package/dist/foundation/release/process-liveness.d.ts +2 -0
  162. package/dist/foundation/release/process-liveness.js +12 -0
  163. package/dist/foundation/release/release-gc.d.ts +13 -10
  164. package/dist/foundation/release/release-gc.js +37 -101
  165. package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
  166. package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
  167. package/dist/foundation/release/release-store.d.ts +2 -2
  168. package/dist/foundation/release/release-store.js +2 -2
  169. package/dist/foundation/release/restart-certification.js +1 -1
  170. package/dist/foundation/release/update-activation.d.ts +2 -9
  171. package/dist/foundation/release/update-activation.js +30 -45
  172. package/dist/foundation/release/update-execution-lease.d.ts +2 -3
  173. package/dist/foundation/release/update-execution-lease.js +2 -2
  174. package/dist/foundation/release/update-launch.d.ts +2 -4
  175. package/dist/foundation/release/update-launch.js +0 -7
  176. package/dist/foundation/release/update-recovery.js +1 -1
  177. package/dist/foundation/release/update-transaction.d.ts +1 -1
  178. package/dist/foundation/release/update-transaction.js +5 -2
  179. package/dist/foundation/release/update.d.ts +2 -12
  180. package/dist/foundation/release/update.js +37 -214
  181. package/dist/foundation/session-writer-lock/index.d.ts +14 -6
  182. package/dist/foundation/session-writer-lock/index.js +48 -103
  183. package/dist/foundation/startup/startup-budget.d.ts +5 -5
  184. package/dist/foundation/startup/startup-budget.js +2 -2
  185. package/dist/foundation/startup/startup-runtime.d.ts +1 -1
  186. package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
  187. package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
  188. package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
  189. package/dist/foundation/terminal-cleanup/index.js +2 -1
  190. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
  191. package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
  192. package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
  193. package/dist/integrations/pi/components/index.d.ts +15 -9
  194. package/dist/integrations/pi/components/index.js +9 -5
  195. package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
  196. package/dist/integrations/pi/components/lazy-selectors.js +1 -1
  197. package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
  198. package/dist/integrations/pi/components/modal-frame.js +3 -23
  199. package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
  200. package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
  201. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
  202. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
  203. package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
  204. package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
  205. package/dist/integrations/pi/components/shell-footer-status.js +5 -4
  206. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  207. package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
  208. package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
  209. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
  210. package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
  211. package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
  212. package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
  213. package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
  214. package/dist/integrations/pi/components/skills-command.d.ts +1 -9
  215. package/dist/integrations/pi/components/skills-command.js +5 -5
  216. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
  217. package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
  218. package/dist/integrations/pi/components/theme.d.ts +9 -2
  219. package/dist/integrations/pi/components/theme.js +17 -2
  220. package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
  221. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
  222. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
  223. package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
  224. package/dist/integrations/pi/engine/adapter.d.ts +3 -6
  225. package/dist/integrations/pi/engine/adapter.js +4 -28
  226. package/dist/integrations/pi/engine/changelog.d.ts +2 -2
  227. package/dist/integrations/pi/engine/changelog.js +3 -3
  228. package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
  229. package/dist/integrations/pi/engine/compaction-progress.js +1 -1
  230. package/dist/integrations/pi/engine/conformance.d.ts +2 -1
  231. package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
  232. package/dist/integrations/pi/engine/default-model-setting.js +1 -2
  233. package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
  234. package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
  235. package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
  236. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
  237. package/dist/integrations/pi/engine/host.js +2 -2
  238. package/dist/integrations/pi/engine/message-values.d.ts +0 -1
  239. package/dist/integrations/pi/engine/message-values.js +1 -1
  240. package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
  241. package/dist/integrations/pi/engine/pending-delivery.js +3 -3
  242. package/dist/integrations/pi/engine/ports.d.ts +7 -1
  243. package/dist/integrations/pi/engine/ports.js +4 -0
  244. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
  245. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
  246. package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
  247. package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
  248. package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
  249. package/dist/integrations/pi/engine/public-main-entry.js +1 -1
  250. package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
  251. package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
  252. package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
  253. package/dist/integrations/pi/engine/repository-pr.js +1 -1
  254. package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
  255. package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
  256. package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
  257. package/dist/integrations/pi/engine/session-runtime.js +0 -2
  258. package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
  259. package/dist/integrations/pi/engine/settings-bridge.js +1 -1
  260. package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
  261. package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
  262. package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
  263. package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
  264. package/dist/integrations/pi/engine/workflow-runner.js +1 -1
  265. package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
  266. package/dist/integrations/pi/engine/workflow-support.js +4 -18
  267. package/dist/integrations/pi/engine/workflows.d.ts +5 -5
  268. package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
  269. package/dist/integrations/pi/session-presenters/components.js +75 -0
  270. package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
  271. package/dist/integrations/pi/session-presenters/index.js +1 -0
  272. package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
  273. package/dist/integrations/pi/session-presenters/presentation.js +10 -0
  274. package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
  275. package/dist/integrations/pi/session-presenters/presenters.js +3 -1
  276. package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
  277. package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
  278. package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
  279. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
  280. package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
  281. package/dist/integrations/pi/tui-runtime/index.js +1 -0
  282. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
  283. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
  284. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
  285. package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
  286. package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
  287. package/dist/product-identity.d.ts +4 -6
  288. package/dist/product-identity.js +6 -11
  289. package/dist/product-identity.json +1 -40
  290. package/dist/runtime-payload-inventory.json +0 -3
  291. package/dist/ui/components/index.d.ts +4 -4
  292. package/dist/ui/components/index.js +2 -2
  293. package/dist/ui/components/selection-copy.d.ts +0 -1
  294. package/dist/ui/components/selection-copy.js +0 -12
  295. package/dist/ui/components/submitted-prompt.d.ts +3 -13
  296. package/dist/ui/components/submitted-prompt.js +8 -41
  297. package/dist/ui/components/theme.d.ts +4 -19
  298. package/dist/ui/components/theme.js +6 -0
  299. package/dist/ui/components/transcript-viewport.d.ts +1 -3
  300. package/dist/ui/components/transcript-viewport.js +1 -4
  301. package/dist/ui/settings/declarations.d.ts +2 -97
  302. package/dist/ui/settings/declarations.js +2 -78
  303. package/dist/ui/settings/early-accent.js +1 -1
  304. package/dist/ui/settings/index.d.ts +3 -5
  305. package/dist/ui/settings/index.js +2 -3
  306. package/dist/ui/settings/manager.d.ts +0 -4
  307. package/dist/ui/settings/manager.js +6 -62
  308. package/dist/ui/settings/resolution.d.ts +6 -18
  309. package/dist/ui/settings/resolution.js +4 -103
  310. package/dist/ui/settings/sections.d.ts +0 -4
  311. package/dist/ui/settings/sections.js +1 -1
  312. package/docs/architecture/boundaries.md +23 -40
  313. package/docs/architecture/code-documentation.md +2 -2
  314. package/docs/architecture/internal-naming.md +11 -17
  315. package/docs/architecture/project-structure.md +13 -16
  316. package/docs/architecture/resource-and-data-policy.md +16 -31
  317. package/docs/architecture/toolchain.md +14 -19
  318. package/docs/architecture/ui-reference-provenance.md +2 -2
  319. package/docs/ci-release-runbook.md +5 -5
  320. package/docs/features/launch-profiles.md +11 -17
  321. package/docs/features/prompt-history.md +10 -11
  322. package/docs/local-worktree-cleanup.md +28 -1
  323. package/docs/manual-owned-ui-checkpoint.md +0 -1
  324. package/docs/validation.md +5 -11
  325. package/docs/worktree-link-recovery.md +6 -6
  326. package/package.json +7 -20
  327. package/bin/guardian.js +0 -42
  328. package/bin/supervisor.js +0 -7
  329. package/bin/tab-launch-context.d.ts +0 -27
  330. package/bin/tab-launch-context.js +0 -94
  331. package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
  332. package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
  333. package/dist/cli/tabs-request.d.ts +0 -7
  334. package/dist/cli/tabs.d.ts +0 -14
  335. package/dist/cli/tabs.js +0 -151
  336. package/dist/composition/resident-tab-bridge.d.ts +0 -41
  337. package/dist/composition/resident-tab-bridge.js +0 -209
  338. package/dist/composition/utility-tab.d.ts +0 -28
  339. package/dist/composition/utility-tab.js +0 -244
  340. package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
  341. package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
  342. package/dist/features/resident-tab/auto-name.d.ts +0 -11
  343. package/dist/features/resident-tab/auto-name.js +0 -44
  344. package/dist/features/resident-tab/index.d.ts +0 -5
  345. package/dist/features/resident-tab/index.js +0 -7
  346. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
  347. package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
  348. package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
  349. package/dist/features/resident-tab/shortcut-declarations.js +0 -26
  350. package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
  351. package/dist/features/resident-tab/shortcut-projection.js +0 -64
  352. package/dist/features/resident-tab/status-deriver.d.ts +0 -10
  353. package/dist/features/resident-tab/status-deriver.js +0 -12
  354. package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
  355. package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
  356. package/dist/foundation/launch-guardian/index.d.ts +0 -2
  357. package/dist/foundation/launch-guardian/index.js +0 -1
  358. package/dist/foundation/launch-guardian/main.d.ts +0 -39
  359. package/dist/foundation/launch-guardian/main.js +0 -232
  360. package/dist/foundation/lifecycle/commands.d.ts +0 -40
  361. package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
  362. package/dist/foundation/lifecycle/launch-instance.js +0 -134
  363. package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
  364. package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
  365. package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
  366. package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
  367. package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
  368. package/dist/foundation/process-containment/addon-containment.js +0 -139
  369. package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
  370. package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
  371. package/dist/foundation/process-containment/addon.d.ts +0 -47
  372. package/dist/foundation/process-containment/addon.js +0 -57
  373. package/dist/foundation/process-containment/artifact.d.ts +0 -1
  374. package/dist/foundation/process-containment/artifact.js +0 -35
  375. package/dist/foundation/process-containment/contracts.d.ts +0 -33
  376. package/dist/foundation/process-containment/contracts.js +0 -35
  377. package/dist/foundation/process-containment/index.d.ts +0 -9
  378. package/dist/foundation/process-containment/index.js +0 -7
  379. package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
  380. package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
  381. package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
  382. package/dist/foundation/process-containment/native-process-inspector.js +0 -21
  383. package/dist/foundation/protocol/client.d.ts +0 -18
  384. package/dist/foundation/protocol/client.js +0 -130
  385. package/dist/foundation/protocol/index.d.ts +0 -3
  386. package/dist/foundation/protocol/index.js +0 -2
  387. package/dist/foundation/protocol/messages.d.ts +0 -90
  388. package/dist/foundation/protocol/messages.js +0 -100
  389. package/dist/foundation/release/cohort-selection.d.ts +0 -33
  390. package/dist/foundation/release/cohort-selection.js +0 -67
  391. package/dist/foundation/release/endpoint-lock.d.ts +0 -2
  392. package/dist/foundation/release/endpoint-lock.js +0 -37
  393. package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
  394. package/dist/foundation/release/endpoint-recovery.js +0 -45
  395. package/dist/foundation/release/endpoints.d.ts +0 -32
  396. package/dist/foundation/release/endpoints.js +0 -152
  397. package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
  398. package/dist/foundation/release/prepared-update-activation.js +0 -27
  399. package/dist/foundation/release/process-cleanup.d.ts +0 -14
  400. package/dist/foundation/release/process-cleanup.js +0 -76
  401. package/dist/foundation/release/supervisor-identity.d.ts +0 -15
  402. package/dist/foundation/release/supervisor-identity.js +0 -63
  403. package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
  404. package/dist/foundation/resident-tabs/boot-identity.js +0 -16
  405. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
  406. package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
  407. package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
  408. package/dist/foundation/resident-tabs/bridge-client.js +0 -327
  409. package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
  410. package/dist/foundation/resident-tabs/continuity.js +0 -63
  411. package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
  412. package/dist/foundation/resident-tabs/doctor.js +0 -166
  413. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
  414. package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
  415. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
  416. package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
  417. package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
  418. package/dist/foundation/resident-tabs/fault-injection.js +0 -26
  419. package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
  420. package/dist/foundation/resident-tabs/fixture-control.js +0 -35
  421. package/dist/foundation/resident-tabs/host-entry.js +0 -17
  422. package/dist/foundation/resident-tabs/index.d.ts +0 -15
  423. package/dist/foundation/resident-tabs/index.js +0 -10
  424. package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
  425. package/dist/foundation/resident-tabs/maintenance.js +0 -75
  426. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
  427. package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
  428. package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
  429. package/dist/foundation/resident-tabs/progress-observation.js +0 -150
  430. package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
  431. package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
  432. package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
  433. package/dist/foundation/resident-tabs/protocol.js +0 -195
  434. package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
  435. package/dist/foundation/resident-tabs/recovery.js +0 -205
  436. package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
  437. package/dist/foundation/resident-tabs/release-holds.js +0 -78
  438. package/dist/foundation/resident-tabs/routes.d.ts +0 -5
  439. package/dist/foundation/resident-tabs/routes.js +0 -5
  440. package/dist/foundation/resident-tabs/routing.d.ts +0 -11
  441. package/dist/foundation/resident-tabs/routing.js +0 -10
  442. package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
  443. package/dist/foundation/resident-tabs/runtime-control.js +0 -74
  444. package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
  445. package/dist/foundation/resident-tabs/session-sync.js +0 -37
  446. package/dist/foundation/resident-tabs/settings.d.ts +0 -16
  447. package/dist/foundation/resident-tabs/settings.js +0 -60
  448. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
  449. package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
  450. package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
  451. package/dist/foundation/resident-tabs/zip-archive.js +0 -56
  452. package/dist/foundation/storage/control-store.d.ts +0 -20
  453. package/dist/foundation/storage/control-store.js +0 -331
  454. package/dist/foundation/storage/index.d.ts +0 -1
  455. package/dist/foundation/storage/index.js +0 -1
  456. package/dist/foundation/supervision/index.d.ts +0 -3
  457. package/dist/foundation/supervision/index.js +0 -3
  458. package/dist/foundation/supervision/main.d.ts +0 -1
  459. package/dist/foundation/supervision/main.js +0 -86
  460. package/dist/foundation/supervision/paths.d.ts +0 -1
  461. package/dist/foundation/supervision/paths.js +0 -1
  462. package/dist/foundation/supervision/server.d.ts +0 -46
  463. package/dist/foundation/supervision/server.js +0 -611
  464. package/dist/integrations/pi/components/components.d.ts +0 -4
  465. package/dist/integrations/pi/components/components.js +0 -48
  466. package/dist/integrations/pi/components/conformance.d.ts +0 -18
  467. package/dist/integrations/pi/components/conformance.js +0 -70
  468. package/dist/integrations/pi/components/shell-components.d.ts +0 -7
  469. package/dist/integrations/pi/components/shell-components.js +0 -7
  470. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
  471. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
  472. package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
  473. package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
  474. package/dist/native/darwin-arm64/manifest.json +0 -23
  475. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  476. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
  477. package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
  478. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  479. package/dist/native/darwin-x64/manifest.json +0 -23
  480. package/dist/native/darwin-x64/process-guardian.node +0 -0
  481. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
  482. package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
  483. package/dist/native/darwin-x64/terminal-host.node +0 -0
  484. package/dist/native/linux-x64/manifest.json +0 -23
  485. package/dist/native/linux-x64/process-guardian.node +0 -0
  486. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
  487. package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
  488. package/dist/native/linux-x64/terminal-host.node +0 -0
  489. package/dist/native/win32-x64/manifest.json +0 -23
  490. package/dist/native/win32-x64/process-guardian.node +0 -0
  491. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
  492. package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
  493. package/dist/native/win32-x64/terminal-host.node +0 -0
  494. package/dist/ui/settings/migrations.d.ts +0 -19
  495. package/dist/ui/settings/migrations.js +0 -209
  496. package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
  497. package/dist/ui/settings/progress-palette.generated.js +0 -139
  498. package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
  499. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
  500. package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
  501. package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
  502. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
  503. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
  504. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
  505. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
  506. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
  507. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
  508. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
  509. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
  510. package/docs/architecture/native-fixture-isolation.md +0 -23
  511. package/docs/architecture/process-guardian-provenance.md +0 -36
  512. package/docs/architecture/resident-tabs-requirements.md +0 -18
  513. package/docs/architecture/resident-tabs.md +0 -668
  514. package/docs/architecture/terminal-host-proof-gate.md +0 -34
  515. package/docs/architecture/terminal-host-provenance.md +0 -81
  516. package/docs/architecture/terminal-host-spike-evidence.md +0 -39
  517. package/docs/launch-recovery.md +0 -23
  518. package/docs/manual-launch-instance-acceptance.md +0 -43
  519. package/docs/manual-resident-tabs-acceptance.md +0 -51
  520. /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
  521. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
  522. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
  523. /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
  524. /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
@@ -1,10 +1,8 @@
1
- import { closeSync, existsSync, mkdirSync, openSync, readFileSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
2
- import { createRequire } from "node:module";
1
+ import { existsSync, mkdirSync, realpathSync, statSync } from "node:fs";
3
2
  import { tmpdir } from "node:os";
4
3
  import { basename, dirname, join, resolve } from "node:path";
5
- import { fileURLToPath } from "node:url";
6
4
  import { createHash } from "node:crypto";
7
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
+ import lockfile from "proper-lockfile";
8
6
  /** Reports that a canonical session identity already has a live writer. */
9
7
  export class SessionWriterConflict extends Error {
10
8
  path;
@@ -16,107 +14,60 @@ export class SessionWriterConflict extends Error {
16
14
  this.holderKind = holderKind;
17
15
  }
18
16
  }
17
+ /**
18
+ * A crashed writer is not released by the kernel; its lock becomes stale once its holder stops
19
+ * refreshing it. The bound keeps resume after a crash a matter of seconds.
20
+ */
21
+ export const SESSION_WRITER_STALE_MS = 10_000;
19
22
  let backendOverride;
20
23
  let cachedBackend;
21
- /** Security: a release that carries its own terminal-host addon never loads one chosen by cwd. */
22
- export function nativeCandidates(moduleUrl = import.meta.url, env = process.env, cwd = process.cwd(), exists = existsSync) {
23
- const addon = `${PRODUCT_IDENTITY.artifacts.terminalHostAddon}.node`;
24
- // Invariant: this module sits at dist/foundation/session-writer-lock/ inside the release root.
25
- const own = resolve(fileURLToPath(new URL("../../../", moduleUrl)), "dist", "native", `${process.platform}-${process.arch}`, addon);
26
- const override = env[PRODUCT_IDENTITY.environment.developmentInstanceId]
27
- ? env[PRODUCT_IDENTITY.environment.terminalHostPath]?.trim() || undefined
28
- : undefined;
29
- const local = exists(own)
30
- ? [own]
31
- : [resolve(cwd, "dist", "native", `${process.platform}-${process.arch}`, addon), resolve(cwd, ".artifacts", "terminal-host", addon)];
32
- return override ? [override, ...local] : local;
33
- }
34
- function loadNativeBackend() {
35
- const require = createRequire(import.meta.url);
36
- for (const candidate of nativeCandidates()) {
37
- if (!existsSync(candidate))
38
- continue;
39
- try {
40
- const loaded = require(candidate);
41
- if (loaded.SessionLock?.acquire)
42
- return loaded.SessionLock;
43
- }
44
- catch {
45
- // Compatibility: an addon for another Node ABI is unusable; try the next location.
46
- }
47
- }
48
- return undefined;
49
- }
50
- function processIsLive(pid) {
51
- try {
52
- process.kill(pid, 0);
53
- return true;
54
- }
55
- catch {
56
- return false;
57
- }
58
- }
59
- /** Development fallback. Installed releases carry the verified Node-API lock resolved above. */
60
- function portableBackend() {
61
- const root = join(tmpdir(), "a1-session-writer-locks");
62
- mkdirSync(root, { recursive: true, mode: 0o700 });
24
+ /**
25
+ * Locks live in one per-user directory keyed by canonical identity, not beside the session, so two
26
+ * spellings of one file (case, short names, links, hard links) contend for the same lock.
27
+ */
28
+ export function lockfileBackend(root = join(tmpdir(), "a1-session-writer-locks"), staleMs = SESSION_WRITER_STALE_MS) {
63
29
  const authorityPath = (kind, key) => join(root, `${createHash("sha256").update(`${kind}\0${key}`).digest("hex")}.lock`);
30
+ // Platform: Windows file names are case-insensitive, and realpath canonicalizes only existing parents.
64
31
  const locationKey = (path) => `${realpathSync.native(dirname(path))}\0${process.platform === "win32" ? basename(path).toLowerCase() : basename(path)}`;
65
32
  const identityKey = (path) => {
66
- const physical = realpathSync.native(path);
67
- const metadata = statSync(physical, { bigint: true });
33
+ const metadata = statSync(realpathSync.native(path), { bigint: true });
68
34
  return `${metadata.dev}:${metadata.ino}`;
69
35
  };
70
36
  const acquireAuthority = (path) => {
71
- for (let attempt = 0; attempt < 2; attempt += 1) {
72
- try {
73
- const descriptor = openSync(path, "wx", 0o600);
74
- writeFileSync(descriptor, JSON.stringify({ pid: process.pid, kind: process.env.A1_TAB_ID ? "resident tab" : "another A1 process" }));
75
- closeSync(descriptor);
76
- return;
77
- }
78
- catch (error) {
79
- if (attempt === 0) {
80
- try {
81
- const record = JSON.parse(readFileSync(path, "utf8"));
82
- if (typeof record.pid === "number" && !processIsLive(record.pid)) {
83
- rmSync(path, { force: true });
84
- continue;
85
- }
86
- }
87
- catch {
88
- // Security: malformed or racing lock evidence remains authoritative and fails closed.
89
- }
90
- }
91
- throw error;
92
- }
93
- }
37
+ mkdirSync(root, { recursive: true, mode: 0o700 });
38
+ // Rationale: the lock directory is the authority; no target file exists or is needed.
39
+ return lockfile.lockSync(path, {
40
+ realpath: false,
41
+ lockfilePath: path,
42
+ stale: staleMs,
43
+ // Rationale: a missed refresh means this process stalled; the next writer takes over, and the
44
+ // stalled one must not crash for it.
45
+ onCompromised: () => { },
46
+ });
94
47
  };
95
48
  return {
96
49
  acquire(requested) {
97
50
  const absolute = resolve(requested);
98
- const location = authorityPath("location", locationKey(absolute));
99
- acquireAuthority(location);
100
- let identity;
101
- let identityAcquired = false;
51
+ let releaseCurrent = acquireAuthority(authorityPath("location", locationKey(absolute)));
102
52
  let bound = false;
103
- try {
104
- if (existsSync(absolute)) {
105
- const key = identityKey(absolute);
106
- identity = authorityPath("identity", key);
107
- acquireAuthority(identity);
108
- identityAcquired = true;
109
- if (identityKey(absolute) !== key) {
110
- throw new Error("session identity changed while its writer lock was acquired");
111
- }
112
- rmSync(location, { force: true });
113
- bound = true;
53
+ const bindTo = () => {
54
+ const key = identityKey(absolute);
55
+ const releaseIdentity = acquireAuthority(authorityPath("identity", key));
56
+ if (identityKey(absolute) !== key) {
57
+ releaseIdentity();
58
+ throw new Error("session identity changed while its writer lock was acquired");
114
59
  }
60
+ // Invariant: the identity lock is held before the location lock goes, so there is no gap.
61
+ releaseCurrent();
62
+ releaseCurrent = releaseIdentity;
63
+ bound = true;
64
+ };
65
+ try {
66
+ if (existsSync(absolute))
67
+ bindTo();
115
68
  }
116
69
  catch (error) {
117
- rmSync(location, { force: true });
118
- if (identityAcquired && identity !== undefined)
119
- rmSync(identity, { force: true });
70
+ releaseCurrent();
120
71
  throw error;
121
72
  }
122
73
  let released = false;
@@ -126,29 +77,23 @@ function portableBackend() {
126
77
  if (bound || resolve(created) !== absolute || !existsSync(absolute)) {
127
78
  throw new Error("created session does not match its reservation");
128
79
  }
129
- const key = identityKey(absolute);
130
- identity = authorityPath("identity", key);
131
- acquireAuthority(identity);
132
- if (identityKey(absolute) !== key) {
133
- rmSync(identity, { force: true });
134
- identity = undefined;
135
- throw new Error("created session identity changed during bind");
136
- }
137
- rmSync(location, { force: true });
138
- bound = true;
80
+ bindTo();
139
81
  },
140
82
  release() {
141
83
  if (released)
142
84
  throw new Error("session lock was already released");
143
85
  released = true;
144
- rmSync(bound ? identity : location, { force: true });
86
+ try {
87
+ releaseCurrent();
88
+ }
89
+ catch { /* Compatibility: a reclaimed stale lock is already gone. */ }
145
90
  },
146
91
  };
147
92
  },
148
93
  };
149
94
  }
150
95
  function backend() {
151
- return backendOverride ?? (cachedBackend ??= loadNativeBackend() ?? portableBackend());
96
+ return backendOverride ?? (cachedBackend ??= lockfileBackend());
152
97
  }
153
98
  function acquire(path) {
154
99
  const absolute = resolve(path);
@@ -157,7 +102,7 @@ function acquire(path) {
157
102
  lock = backend().acquire(absolute);
158
103
  }
159
104
  catch {
160
- throw new SessionWriterConflict(absolute, process.env.A1_TAB_ID ? "a resident tab" : "another A1 process");
105
+ throw new SessionWriterConflict(absolute);
161
106
  }
162
107
  let released = false;
163
108
  return {
@@ -196,7 +141,7 @@ export function bind(handle, createdPath) {
196
141
  export function release(handle) {
197
142
  handle.release();
198
143
  }
199
- /** Test-only backend seam; passing undefined restores native discovery. */
144
+ /** Test-only backend seam; passing undefined restores the default backend. */
200
145
  export function setSessionWriterLockBackendForTest(value) {
201
146
  backendOverride = value;
202
147
  cachedBackend = undefined;
@@ -1,7 +1,7 @@
1
1
  import type { StartupTraceEvent } from "./startup-runtime.js";
2
2
  export interface StartupPerformanceEvidence {
3
3
  readonly profileId: "a1" | "pi";
4
- readonly launchKind: "post-update" | "no-live-supervisor" | "warm";
4
+ readonly launchKind: "post-update" | "restart" | "warm";
5
5
  readonly events: readonly StartupTraceEvent[];
6
6
  readonly moduleGraph?: {
7
7
  readonly loadedFiles: number;
@@ -15,7 +15,7 @@ export interface StartupPerformanceEvidence {
15
15
  }
16
16
  export interface StartupBudgetViolation {
17
17
  readonly profileId: "a1" | "pi";
18
- readonly launchKind: "post-update" | "no-live-supervisor" | "warm";
18
+ readonly launchKind: "post-update" | "restart" | "warm";
19
19
  readonly elapsedMs: number;
20
20
  readonly budgetMs: number;
21
21
  readonly dominantPhases: readonly {
@@ -27,13 +27,13 @@ export interface StartupBudgetViolation {
27
27
  /** Resolve the declared budget for one launch kind so measurement and reporting never restate the numbers. */
28
28
  export declare function resolveStartupBudgetMs(launchKind: StartupPerformanceEvidence["launchKind"], budgets?: {
29
29
  readonly postUpdateMs: number;
30
- readonly noSupervisorMs: number;
30
+ readonly restartMs: number;
31
31
  readonly warmMs: number;
32
32
  }): number;
33
33
  /** Compare measured startup evidence with its budget without deciding whether the channel enforces it. */
34
34
  export declare function evaluateStartupPerformanceBudget(evidence: StartupPerformanceEvidence, budgets?: {
35
35
  readonly postUpdateMs: number;
36
- readonly noSupervisorMs: number;
36
+ readonly restartMs: number;
37
37
  readonly warmMs: number;
38
38
  }): StartupBudgetViolation | null;
39
39
  /** Render one budget violation as the single message used by failures, evidence, and run summaries. */
@@ -41,6 +41,6 @@ export declare function formatStartupBudgetViolation(violation: StartupBudgetVio
41
41
  /** Enforce the startup budget in a channel that fails on an overrun. */
42
42
  export declare function assertStartupPerformanceBudget(evidence: StartupPerformanceEvidence, budgets?: {
43
43
  readonly postUpdateMs: number;
44
- readonly noSupervisorMs: number;
44
+ readonly restartMs: number;
45
45
  readonly warmMs: number;
46
46
  }): void;
@@ -1,7 +1,7 @@
1
- const STARTUP_PERFORMANCE_BUDGETS = { postUpdateMs: 2_000, noSupervisorMs: 2_500, warmMs: 2_000 };
1
+ const STARTUP_PERFORMANCE_BUDGETS = { postUpdateMs: 2_000, restartMs: 2_500, warmMs: 2_000 };
2
2
  /** Resolve the declared budget for one launch kind so measurement and reporting never restate the numbers. */
3
3
  export function resolveStartupBudgetMs(launchKind, budgets = STARTUP_PERFORMANCE_BUDGETS) {
4
- return launchKind === "warm" ? budgets.warmMs : launchKind === "no-live-supervisor" ? budgets.noSupervisorMs : budgets.postUpdateMs;
4
+ return launchKind === "warm" ? budgets.warmMs : launchKind === "restart" ? budgets.restartMs : budgets.postUpdateMs;
5
5
  }
6
6
  /** Compare measured startup evidence with its budget without deciding whether the channel enforces it. */
7
7
  export function evaluateStartupPerformanceBudget(evidence, budgets = STARTUP_PERFORMANCE_BUDGETS) {
@@ -1,5 +1,5 @@
1
1
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
2
- export type StartupPhase = "command-invoked" | "bootstrap-start" | "bootstrap-selected" | "durable-validation-start" | "durable-validation-complete" | "replacement-supervisor-start" | "replacement-supervisor-ready" | "guardian-start" | "guardian-connected" | "ui-entry" | "ui-modules-loaded" | "pi-services" | "resource-discovery" | "session-created" | "settings-loaded" | "first-input-ready-render";
2
+ export type StartupPhase = "command-invoked" | "bootstrap-start" | "bootstrap-selected" | "durable-validation-start" | "durable-validation-complete" | "ui-entry" | "ui-modules-loaded" | "pi-services" | "resource-discovery" | "session-created" | "settings-loaded" | "first-input-ready-render";
3
3
  export interface StartupTraceEvent {
4
4
  readonly schema: typeof PRODUCT_IDENTITY.evidence.startupTraceSchema;
5
5
  readonly traceId: string;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The launcher's half of the unclean-exit protocol. The UI arms a notice file while it runs and
3
+ * removes it on a clean exit, so a notice that is still present when the UI ends means the UI was
4
+ * stopped unexpectedly: restore the terminal, print the notice as plain text, and consume it.
5
+ */
6
+ export declare function deliverExitNotice(path: string, write: (text: string) => void, restore?: () => void): boolean;
@@ -0,0 +1,36 @@
1
+ import { readFileSync, rmSync } from "node:fs";
2
+ import { restoreProcessTerminal } from "./terminal-reset.js";
3
+ /** Notices are a few plain lines; anything larger is not one this build wrote. */
4
+ const MAX_NOTICE_BYTES = 4096;
5
+ /**
6
+ * The launcher's half of the unclean-exit protocol. The UI arms a notice file while it runs and
7
+ * removes it on a clean exit, so a notice that is still present when the UI ends means the UI was
8
+ * stopped unexpectedly: restore the terminal, print the notice as plain text, and consume it.
9
+ */
10
+ export function deliverExitNotice(path, write, restore = restoreProcessTerminal) {
11
+ let text;
12
+ try {
13
+ const bytes = readFileSync(path);
14
+ text = bytes.byteLength > MAX_NOTICE_BYTES ? "" : bytes.toString("utf8");
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ try {
20
+ rmSync(path, { force: true });
21
+ }
22
+ catch { }
23
+ // Security: the notice is printed after the UI is gone, so it must not carry terminal controls.
24
+ const lines = text.split(/\r?\n/u).map(line => line.replace(/[\x00-\x1f\x7f-\x9f]/gu, "")).filter(line => line.length > 0);
25
+ if (lines.length === 0)
26
+ return false;
27
+ try {
28
+ restore();
29
+ }
30
+ catch { }
31
+ try {
32
+ write(`\n${lines.join("\n")}\n`);
33
+ }
34
+ catch { }
35
+ return true;
36
+ }
@@ -1,3 +1,4 @@
1
- export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET, RESIDENT_DETACH_INTERVAL_MS, boundedCleanup, restoreAfterOwnedExit, restoreProcessTerminal } from "./terminal-reset.js";
1
+ export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET, boundedCleanup, restoreAfterOwnedExit, restoreProcessTerminal } from "./terminal-reset.js";
2
+ export { deliverExitNotice } from "./exit-notice.js";
2
3
  export { installFatalExit, writeFatalDiagnostic } from "./fatal-exit.js";
3
4
  export type { FatalExitOptions } from "./fatal-exit.js";
@@ -1,2 +1,3 @@
1
- export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET, RESIDENT_DETACH_INTERVAL_MS, boundedCleanup, restoreAfterOwnedExit, restoreProcessTerminal } from "./terminal-reset.js";
1
+ export { CLEAR_EXIT_INTERVAL_MS, EMERGENCY_TERMINAL_RESET, boundedCleanup, restoreAfterOwnedExit, restoreProcessTerminal } from "./terminal-reset.js";
2
+ export { deliverExitNotice } from "./exit-notice.js";
2
3
  export { installFatalExit, writeFatalDiagnostic } from "./fatal-exit.js";
@@ -1,9 +1,4 @@
1
1
  export declare const CLEAR_EXIT_INTERVAL_MS = 500;
2
- /**
3
- * How long a first `Ctrl+C` keeps the resident attach client's detach chord armed. It matches the
4
- * owned dialogs' interrupt chord so an unhurried double press leaves resident tabs from any tab.
5
- */
6
- export declare const RESIDENT_DETACH_INTERVAL_MS = 1500;
7
2
  export declare const EMERGENCY_TERMINAL_RESET: string;
8
3
  export declare function restoreProcessTerminal(): void;
9
4
  export declare function restoreAfterOwnedExit(ownsTerminal: boolean, code: number | null, signal: string | null, restore?: () => void): number;
@@ -1,10 +1,5 @@
1
1
  import { writeSync } from "node:fs";
2
2
  export const CLEAR_EXIT_INTERVAL_MS = 500;
3
- /**
4
- * How long a first `Ctrl+C` keeps the resident attach client's detach chord armed. It matches the
5
- * owned dialogs' interrupt chord so an unhurried double press leaves resident tabs from any tab.
6
- */
7
- export const RESIDENT_DETACH_INTERVAL_MS = 1_500;
8
3
  // Protocol: reset modes on both screens; setting keyboard flags to zero is idempotent,
9
4
  // unlike repeatedly popping a keyboard-protocol stack owned by a parent application.
10
5
  // Resetting parent-screen margins homes the cursor, so preserve its restored position.
@@ -1,5 +1,6 @@
1
+ import type { OwnedUiShellEditorRecall } from "../../../contracts/owned-ui/index.js";
1
2
  import type { Editor } from "@earendil-works/pi-tui";
2
- export interface EditorInteractionState {
3
+ interface EditorInteractionState {
3
4
  lines: string[];
4
5
  cursorLine: number;
5
6
  cursorCol: number;
@@ -17,17 +18,7 @@ export interface EditorInteractionPort {
17
18
  }>;
18
19
  setSegmentTransform(transform: (text: string, mode: "word" | "grapheme", segments: Iterable<Intl.SegmentData>) => Iterable<Intl.SegmentData>): void;
19
20
  }
20
- export interface EditorRecallPort {
21
- replace(entries: readonly string[]): void;
22
- position(): {
23
- readonly index: number;
24
- readonly total: number;
25
- };
26
- observe(listener: () => void): () => void;
27
- reset(): void;
28
- /** Exit a recall browse cycle by restoring the unsent draft rather than keeping the recalled entry. */
29
- restoreDraft?(): void;
30
- }
21
+ export type EditorRecallPort = OwnedUiShellEditorRecall;
31
22
  export interface EditorSurface extends Pick<Editor, Exclude<keyof Editor, "setText" | "render" | "handleInput">> {
32
23
  setText(text: string): void;
33
24
  render(width: number): string[];
@@ -38,3 +29,4 @@ export interface EditorSurface extends Pick<Editor, Exclude<keyof Editor, "setTe
38
29
  export type SelectionEditor = Pick<Editor, "getText" | "getCursor" | "setText" | "insertTextAtCursor" | "invalidate" | "onChange" | "getPaddingX" | "isShowingAutocomplete"> & {
39
30
  readonly interaction?: EditorInteractionPort;
40
31
  };
32
+ export {};
@@ -1,16 +1,22 @@
1
- export { adaptPiAssistantMessage, adaptPiToolExecution, adaptPiUserMessage } from "./components.js";
2
1
  export { loadHistoryEditor, type HistoryEditorConstructor } from "./history-editor-loader.js";
3
- export { PiComponentConformanceError, runPiComponentConformance } from "./conformance.js";
4
- export type { PiComponentConformanceReport, PiComponentConformanceResult } from "./conformance.js";
5
2
  export { createPiShellOperationLoader, createPiShellShareOperationDialog, type PiShellOperationLoaderPort, } from "./share-operation-dialog.js";
6
- export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, componentFromPort, componentPort, createPiExtensionUiBridge, createPiQueuedInputStatus, createPiShellArmin, createPiShellAuthProviderSelector, createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellEditor, createPiShellExtensionSelector, createPiShellFooter, createPiShellHeader, createPiShellHotkeys, createPiShellLoadedResources, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionInfo, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellStatus, createPiShellThemeSelector, createPiShellTranscriptComponent, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, createTuiFacade, createPiKeybindingsHost, ensureTheme, formatSessionTokens, isAutocompleteProvider, isPiPromptStyleCompaction, isRecord, paintPiSubmittedPromptTimestamp, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateBanner, renderPiShellReleaseUpdateNotice, renderPiShellStartupDiagnostic, renderPiShellStatusText, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-components.js";
3
+ export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, createPiShellEditor, } from "./shell-editor-autocomplete.js";
4
+ export { componentFromPort, componentPort, createTuiFacade, createPiKeybindingsHost, ensureTheme, formatSessionTokens, isAutocompleteProvider, isRecord, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, } from "./shell-shared-facade.js";
5
+ export { createPiExtensionUiBridge, } from "./shell-extension-ui.js";
6
+ export { createPiQueuedInputStatus, createPiShellFooter, createPiShellHeader, createPiShellLoadedResources, createPiShellStatus, } from "./shell-footer-status.js";
7
+ export { createPiShellArmin, createPiShellAuthProviderSelector, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellExtensionSelector, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellThemeSelector, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, } from "./shell-selectors-dialogs.js";
8
+ export { createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellHotkeys, createPiShellSessionInfo, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateBanner, renderPiShellReleaseUpdateNotice, renderPiShellStatusText, } from "./shell-presenters-info.js";
9
+ export { createPiShellTranscriptComponent, isPiPromptStyleCompaction, renderPiShellStartupDiagnostic, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-presenters-transcript.js";
7
10
  export { renderPiShellHotkeySections } from "./shell-hotkey-sections.js";
8
11
  export type { PiShellHotkeySection } from "./shell-hotkey-sections.js";
9
- export type { PiExtensionUiBridge, PiExtensionUiBridgeHost, PiShellAuthProviderOption, PiShellAutocompleteCommand, PiShellClipboardContent, PiShellCommandMessagePresentation, PiShellComponentPort, PiShellEditorBodyGeometry, PiShellEditorOptions, PiShellEditorPointerEvent, PiKeybindingsHost, PiShellEditorPort, PiShellEditorTextRange, PiShellExtensionRendererResolver, PiShellHeaderOptions, PiShellHeaderPort, PiShellHotkeysPresentation, PiShellImageAssetResolver, PiShellLoadedResourcesPort, PiShellLoginDialogPort, PiShellModelSelectorOptions, PiShellModelsDialogOptions, PiShellModelsDialogPort, PiShellPasteReservation, PiShellQueuedInputPort, PiShellResourceEntry, PiShellResourceSection, PiShellScopedModelDescriptor, PiShellScopedModelsSelectorOptions, PiShellScopedModelsSelectorPort, PiShellSelectorOption, PiShellSelectorOptions, PiShellSessionInfoPresentation, PiShellSettingsSelectorOptions, PiShellStartupNotice, PiShellStatusPlacement, PiShellStatusPort, PiShellSubmittedPromptComposer, PiShellTranscriptComponentPort, PiShellViewComponentPort, } from "./shell-components.js";
10
- export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, getPiSelectListTheme, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piCanvasBackgroundAnsi, piTheme, resolvePiThemeSetting, setPiAccentColor, setPiPackageBorderProjectionEnabled, stopPiThemeWatcher, } from "./theme.js";
11
- export type { PiAccentProjection, PiColorMode, PiTerminalTheme, PiTerminalThemeDetection, PiTerminalThemeDetector, PiThemeBackground, PiThemeResult } from "./theme.js";
12
- export { OwnedPiThemeController } from "./upstream/theme/theme-controller.js";
13
- export type { PiThemeRuntimePort, PiThemeSettingsPort } from "./upstream/theme/theme-controller.js";
12
+ export type { PiExtensionUiBridge, PiExtensionUiBridgeHost, } from "./shell-extension-ui.js";
13
+ export type { PiShellAuthProviderOption, PiShellLoginDialogPort, PiShellModelSelectorOptions, PiShellModelsDialogOptions, PiShellModelsDialogPort, PiShellScopedModelDescriptor, PiShellScopedModelsSelectorOptions, PiShellScopedModelsSelectorPort, PiShellSettingsSelectorOptions, } from "./shell-selectors-dialogs.js";
14
+ export type { PiShellAutocompleteCommand, PiShellClipboardContent, PiShellComponentPort, PiShellEditorBodyGeometry, PiShellEditorOptions, PiShellEditorPointerEvent, PiKeybindingsHost, PiShellEditorPort, PiShellEditorTextRange, PiShellExtensionRendererResolver, PiShellHeaderOptions, PiShellHeaderPort, PiShellImageAssetResolver, PiShellLoadedResourcesPort, PiShellPasteReservation, PiShellQueuedInputPort, PiShellResourceEntry, PiShellResourceSection, PiShellSelectorOption, PiShellSelectorOptions, PiShellStartupNotice, PiShellStatusPlacement, PiShellStatusPort, PiShellTranscriptComponentPort, PiShellViewComponentPort, } from "./shell-shared-facade.js";
15
+ export type { PiShellCommandMessagePresentation, PiShellHotkeysPresentation, PiShellSessionInfoPresentation, } from "./shell-presenters-info.js";
16
+ export type { PiShellSubmittedPromptComposer, } from "./shell-presenters-transcript.js";
17
+ export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piCanvasBackgroundAnsi, piTheme, resolvePiThemeSetting, setPiAccentColor, setPiPackageBorderProjectionEnabled, stopPiThemeWatcher, } from "./upstream/theme/theme.js";
18
+ export type { PiAccentProjection, PiColorMode, PiTerminalTheme, PiTerminalThemeDetection, PiTerminalThemeDetector, PiThemeBackground, PiThemeResult } from "./upstream/theme/theme.js";
19
+ export { PI_THEME_SOURCE, getPiSelectListTheme, piUiTheme } from "./theme.js";
14
20
  export { PI_MODAL_CONTENT_PADDING_X, PiModalFrame, PiModalHeader, addPiModalHeader, adoptPiModalFrame, adoptPiModalHeader, } from "./modal-frame.js";
15
21
  export { ModelsDialogComponent } from "./models-dialog.js";
16
22
  export type { ModelsDialogCallbacks, ModelsDialogConfig, ModelsDialogFilter, ModelsDialogModel } from "./models-dialog.js";
@@ -1,11 +1,15 @@
1
- export { adaptPiAssistantMessage, adaptPiToolExecution, adaptPiUserMessage } from "./components.js";
2
1
  export { loadHistoryEditor } from "./history-editor-loader.js";
3
- export { PiComponentConformanceError, runPiComponentConformance } from "./conformance.js";
4
2
  export { createPiShellOperationLoader, createPiShellShareOperationDialog, } from "./share-operation-dialog.js";
5
- export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, componentFromPort, componentPort, createPiExtensionUiBridge, createPiQueuedInputStatus, createPiShellArmin, createPiShellAuthProviderSelector, createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellEditor, createPiShellExtensionSelector, createPiShellFooter, createPiShellHeader, createPiShellHotkeys, createPiShellLoadedResources, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionInfo, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellStatus, createPiShellThemeSelector, createPiShellTranscriptComponent, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, createTuiFacade, createPiKeybindingsHost, ensureTheme, formatSessionTokens, isAutocompleteProvider, isPiPromptStyleCompaction, isRecord, paintPiSubmittedPromptTimestamp, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateBanner, renderPiShellReleaseUpdateNotice, renderPiShellStartupDiagnostic, renderPiShellStatusText, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-components.js";
3
+ export { OWNED_BUILTIN_SLASH_COMMANDS, PINNED_PI_BUILTIN_SLASH_COMMANDS, createPiShellEditor, } from "./shell-editor-autocomplete.js";
4
+ export { componentFromPort, componentPort, createTuiFacade, createPiKeybindingsHost, ensureTheme, formatSessionTokens, isAutocompleteProvider, isRecord, piShellHyperlink, piShellTruncateToWidth, piShellVisibleWidth, } from "./shell-shared-facade.js";
5
+ export { createPiExtensionUiBridge, } from "./shell-extension-ui.js";
6
+ export { createPiQueuedInputStatus, createPiShellFooter, createPiShellHeader, createPiShellLoadedResources, createPiShellStatus, } from "./shell-footer-status.js";
7
+ export { createPiShellArmin, createPiShellAuthProviderSelector, createPiShellDialog, createPiShellEarendilAnnouncement, createPiShellExtensionSelector, createPiShellLoginDialog, createPiShellModelSelector, createPiShellModelsDialog, createPiShellReloadBox, createPiShellScopedModelsSelector, createPiShellSelector, createPiShellSessionSelector, createPiShellSettingsSelector, createPiShellShowImagesSelector, createPiShellSkillsSelector, createPiShellThemeSelector, createPiShellTreeSelector, createPiShellTrustSelector, createPiShellUserMessageSelector, } from "./shell-selectors-dialogs.js";
8
+ export { createPiShellChangelog, createPiShellCollapsedChangelog, createPiShellHotkeys, createPiShellSessionInfo, renderPiShellChangelogLines, renderPiShellCommandMessage, renderPiShellHotkeysLines, renderPiShellPackageUpdateNotice, renderPiShellReleaseUpdateBanner, renderPiShellReleaseUpdateNotice, renderPiShellStatusText, } from "./shell-presenters-info.js";
9
+ export { createPiShellTranscriptComponent, isPiPromptStyleCompaction, renderPiShellStartupDiagnostic, renderPiShellTranscriptBlock, validatedAssistantMessage, } from "./shell-presenters-transcript.js";
6
10
  export { renderPiShellHotkeySections } from "./shell-hotkey-sections.js";
7
- export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, getPiSelectListTheme, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piCanvasBackgroundAnsi, piTheme, resolvePiThemeSetting, setPiAccentColor, setPiPackageBorderProjectionEnabled, stopPiThemeWatcher, } from "./theme.js";
8
- export { OwnedPiThemeController } from "./upstream/theme/theme-controller.js";
11
+ export { PINNED_PI_LAYOUT, applyConfiguredPiTheme, applyPiTheme, applyPiThemeInstance, currentPiAccentColor, currentPiThemeName, derivePiAccentProjection, derivePiCanvasBackground, detectPiTerminalBackgroundFromEnv, detectPiTerminalBackgroundTheme, detectPiTerminalThemeForAuto, ensurePiTheme, getAvailablePiThemes, loadPiTheme, onPiThemeChange, parsePiAutoThemeSetting, piCanvasBackgroundAnsi, piTheme, resolvePiThemeSetting, setPiAccentColor, setPiPackageBorderProjectionEnabled, stopPiThemeWatcher, } from "./upstream/theme/theme.js";
12
+ export { PI_THEME_SOURCE, getPiSelectListTheme, piUiTheme } from "./theme.js";
9
13
  export { PI_MODAL_CONTENT_PADDING_X, PiModalFrame, PiModalHeader, addPiModalHeader, adoptPiModalFrame, adoptPiModalHeader, } from "./modal-frame.js";
10
14
  export { ModelsDialogComponent } from "./models-dialog.js";
11
15
  export { CountdownTimer } from "./upstream/components/countdown-timer.js";
@@ -1,9 +1,7 @@
1
1
  import type { PiShellComponentPort } from "./shell-shared-facade.js";
2
2
  import type { ThinkingSelectorLevel } from "./upstream/components/thinking-selector.js";
3
3
  import type { FilterMode } from "./upstream/components/tree-selector.js";
4
- type ThinkingSelectorModule = typeof import("./thinking-selector-dialog.js");
5
- type TreeSelectorModule = typeof import("./upstream/components/tree-selector.js");
6
- export interface PiShellLazyThinkingSelectorOptions {
4
+ interface PiShellLazyThinkingSelectorOptions {
7
5
  readonly currentLevel: ThinkingSelectorLevel;
8
6
  readonly availableLevels: readonly ThinkingSelectorLevel[];
9
7
  readonly onSelect: (level: ThinkingSelectorLevel) => void;
@@ -15,7 +13,7 @@ export interface PiShellLazyThinkingSelectorOptions {
15
13
  readonly cycleBinding: string | readonly string[];
16
14
  };
17
15
  }
18
- export interface PiShellLazyTreeSelectorOptions {
16
+ interface PiShellLazyTreeSelectorOptions {
19
17
  readonly tree: readonly unknown[];
20
18
  readonly currentLeafId: string | null;
21
19
  readonly terminalHeight: number;
@@ -31,12 +29,6 @@ export interface PiShellLazySelectorLoader {
31
29
  createThinking(options: PiShellLazyThinkingSelectorOptions): Promise<PiShellComponentPort>;
32
30
  createTree(options: PiShellLazyTreeSelectorOptions): Promise<PiShellComponentPort>;
33
31
  }
34
- export interface PiShellLazySelectorImports {
35
- readonly thinking: () => Promise<ThinkingSelectorModule>;
36
- readonly tree: () => Promise<TreeSelectorModule>;
37
- }
38
- /** Builds one idempotent selector loader; fulfilled, in-flight, and rejected imports remain shared. */
39
- export declare function createPiShellLazySelectorLoader(imports?: PiShellLazySelectorImports): PiShellLazySelectorLoader;
40
32
  /** Production selector loader, dynamically reached only after the first input-ready frame. */
41
33
  export declare const piShellLazySelectors: PiShellLazySelectorLoader;
42
34
  export {};
@@ -4,7 +4,7 @@ const DEFAULT_IMPORTS = {
4
4
  tree: () => import("./upstream/components/tree-selector.js"),
5
5
  };
6
6
  /** Builds one idempotent selector loader; fulfilled, in-flight, and rejected imports remain shared. */
7
- export function createPiShellLazySelectorLoader(imports = DEFAULT_IMPORTS) {
7
+ function createPiShellLazySelectorLoader(imports = DEFAULT_IMPORTS) {
8
8
  let thinkingSelectorModule;
9
9
  let treeSelectorModule;
10
10
  const loadThinkingSelector = () => thinkingSelectorModule ??= imports.thinking();
@@ -1,31 +1,13 @@
1
- import { Container, Input, type Component, type Focusable, type TUI, type TuiMouseEvent, type TuiMouseEventResult } from "@earendil-works/pi-tui";
1
+ import { Container, Input, type Component, type Focusable } from "@earendil-works/pi-tui";
2
2
  export declare const PI_MODAL_CONTENT_PADDING_X = 1;
3
3
  /** Paints the standard Pi Input prompt as a live-themed dialog-search marker. */
4
4
  export declare function renderPiModalSearchInput(input: Input, width: number): string[];
5
- /** Keeps Pi Input behavior and geometry while owning only its standard dialog-search presentation. */
6
- export declare class PiModalSearchInput implements Component, Focusable {
7
- #private;
8
- constructor(input: Input);
9
- get focused(): boolean;
10
- set focused(value: boolean);
11
- invalidate(): void;
12
- render(width: number): string[];
13
- handleMouse(event: TuiMouseEvent): TuiMouseEventResult | undefined;
14
- }
15
5
  /** Replaces one explicitly identified direct Input child with the standard search presentation. */
16
- export declare function adoptPiModalSearchInput(container: Container, input: Component): PiModalSearchInput;
6
+ export declare function adoptPiModalSearchInput(container: Container, input: Component): Component & Focusable;
17
7
  /** Adds one standard dialog-search presentation while callers retain the Input controller. */
18
- export declare function addPiModalSearchInput(container: Container, input: Input): PiModalSearchInput;
8
+ export declare function addPiModalSearchInput(container: Container, input: Input): Component & Focusable;
19
9
  /** Adds the standard navigation/select/close footer before a dependency component's bottom rule. */
20
10
  export declare function addPiModalSelectFooter(container: Container): void;
21
- /** Owned cancellable operation frame with the canonical dialog close guidance. */
22
- export declare class PiCancellableOperationFrame extends Container {
23
- #private;
24
- constructor(tui: TUI, message: string);
25
- get signal(): AbortSignal;
26
- handleInput(data: string): void;
27
- dispose(): void;
28
- }
29
11
  /** The semantic top rule/title pair used while a modal assembles its frame. */
30
12
  export declare class PiModalHeader implements Component {
31
13
  readonly rule: Component;
@@ -46,7 +28,7 @@ export declare class PiModalFrame implements Component {
46
28
  }
47
29
  /** Add compact titled-modal chrome while a component assembles its semantic body. */
48
30
  export declare function addPiModalHeader(container: Container, rule: Component, title: Component): PiModalHeader;
49
- export interface PiModalFrameAdoption {
31
+ interface PiModalFrameAdoption {
50
32
  readonly topIndex: number;
51
33
  readonly bottomIndex: number;
52
34
  readonly header?: PiModalHeader;
@@ -65,3 +47,4 @@ export declare function adoptPiModalFrame(container: Container, adoption: PiModa
65
47
  * never inspected or rewritten. The pinned comparison profile does not call this adapter.
66
48
  */
67
49
  export declare function adoptPiModalHeader(container: Container, ruleIndex: number, titleIndex: number): PiModalHeader;
50
+ export {};
@@ -1,7 +1,6 @@
1
- import { CancellableLoader, Container, Input, Spacer, Text, } from "@earendil-works/pi-tui";
1
+ import { Container, Input, Spacer, Text, } from "@earendil-works/pi-tui";
2
2
  import { DIALOG_CONTENT_PADDING_X, dialogFrameGeometry, insetDialogContent } from "../../../contracts/presentation/index.js";
3
- import { DynamicBorder } from "../startup-public.js";
4
- import { DIALOG_CLOSE_SHORTCUT_HINT, paintPiBorder, piTheme, renderPiModalShortcutHints } from "./theme.js";
3
+ import { DIALOG_CLOSE_SHORTCUT_HINT, piTheme, renderPiModalShortcutHints } from "./theme.js";
5
4
  export const PI_MODAL_CONTENT_PADDING_X = DIALOG_CONTENT_PADDING_X;
6
5
  /** Paints the standard Pi Input prompt as a live-themed dialog-search marker. */
7
6
  export function renderPiModalSearchInput(input, width) {
@@ -14,7 +13,7 @@ export function renderPiModalSearchInput(input, width) {
14
13
  });
15
14
  }
16
15
  /** Keeps Pi Input behavior and geometry while owning only its standard dialog-search presentation. */
17
- export class PiModalSearchInput {
16
+ class PiModalSearchInput {
18
17
  #input;
19
18
  constructor(input) {
20
19
  this.#input = input;
@@ -48,25 +47,6 @@ export function addPiModalSelectFooter(container) {
48
47
  { key: "↑↓", action: "navigate" }, { key: "enter", action: "select" }, DIALOG_CLOSE_SHORTCUT_HINT,
49
48
  ]), 0, 0));
50
49
  }
51
- /** Owned cancellable operation frame with the canonical dialog close guidance. */
52
- export class PiCancellableOperationFrame extends Container {
53
- #loader;
54
- constructor(tui, message) {
55
- super();
56
- const theme = piTheme();
57
- this.#loader = new CancellableLoader(tui, text => theme.fg("accent", text), text => theme.fg("muted", text), message);
58
- this.addChild(new DynamicBorder(paintPiBorder));
59
- this.addChild(this.#loader);
60
- this.addChild(new Spacer(1));
61
- this.addChild(new Text(renderPiModalShortcutHints([DIALOG_CLOSE_SHORTCUT_HINT]), 0, 0));
62
- this.addChild(new Spacer(1));
63
- this.addChild(new DynamicBorder(paintPiBorder));
64
- adoptPiModalFrame(this, { topIndex: 0, bottomIndex: this.children.length - 1 });
65
- }
66
- get signal() { return this.#loader.signal; }
67
- handleInput(data) { this.#loader.handleInput(data); }
68
- dispose() { this.#loader.dispose(); }
69
- }
70
50
  /** The semantic top rule/title pair used while a modal assembles its frame. */
71
51
  export class PiModalHeader {
72
52
  rule;
@@ -7,7 +7,7 @@ import type { PiShellClipboardContent, PiShellEditorTextRange, PiShellPasteReser
7
7
  * vanilla Pi renders. This keeps owned UX additions out of the synchronized
8
8
  * Pi editor port and gives future interactions one registration point.
9
9
  */
10
- export interface OwnedEditorUxInterceptor {
10
+ interface OwnedEditorUxInterceptor {
11
11
  handleInput(data: string, next: (data?: string) => void): void;
12
12
  render(width: number, next: () => string[]): string[];
13
13
  reset(): void;
@@ -18,7 +18,7 @@ export interface OwnedEditorUxInterceptor {
18
18
  pasteClipboard?(): boolean;
19
19
  cancelPendingPastes?(): void;
20
20
  }
21
- export interface OwnedEditorPointerEvent {
21
+ interface OwnedEditorPointerEvent {
22
22
  readonly kind: "press" | "motion" | "release";
23
23
  readonly button: number;
24
24
  readonly column: number;
@@ -45,7 +45,7 @@ export declare class OwnedEditorUxInterception {
45
45
  ownsPointer(): boolean;
46
46
  pasteClipboard(): boolean;
47
47
  }
48
- export interface PromptSelectionUxOptions {
48
+ interface PromptSelectionUxOptions {
49
49
  readonly copyText: (text: string, cut: boolean) => void;
50
50
  readonly readClipboardContent: () => Promise<PiShellClipboardContent | null>;
51
51
  readonly beginClipboardPaste?: () => PiShellPasteReservation;
@@ -77,3 +77,4 @@ export declare function createPromptSelectionInterceptor(editor: Editor, keybind
77
77
  export declare function editorInsertedText(data: string): string | undefined;
78
78
  /** Shares the existing atomic-aware body layout with prompt/menu composition. */
79
79
  export declare function editorVisualLineCount(editor: Editor, width: number): number | undefined;
80
+ export {};