@timurproko/a1 0.1.8-dev.21b95d6 → 0.1.8-dev.226

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 (461) hide show
  1. package/README.md +107 -67
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +4 -1
  4. package/bin/module-identity.js +69 -35
  5. package/bin/pi-tui.d.ts +6 -0
  6. package/bin/pi-tui.js +28 -0
  7. package/bin/release-cleanup.js +8 -0
  8. package/bin/supervisor.js +1 -1
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +25 -6
  11. package/bin/warmup.js +18 -0
  12. package/dist/cli/capabilities.d.ts +6 -0
  13. package/dist/{src/cli → cli}/capabilities.js +1 -1
  14. package/dist/{src/cli → cli}/dispatch.d.ts +6 -0
  15. package/dist/cli/dispatch.js +202 -0
  16. package/dist/{src/cli → cli}/packages.d.ts +10 -2
  17. package/dist/{src/cli → cli}/packages.js +24 -20
  18. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  19. package/dist/cli/version-stats.js +112 -0
  20. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  21. package/dist/composition/agent-engine-bridge.js +108 -0
  22. package/dist/composition/index.d.ts +3 -0
  23. package/dist/composition/index.js +3 -0
  24. package/dist/composition/owned-ui.d.ts +28 -0
  25. package/dist/composition/owned-ui.js +64 -0
  26. package/dist/composition/process.d.ts +16 -0
  27. package/dist/composition/process.js +45 -0
  28. package/dist/composition/settings-route-host.d.ts +8 -0
  29. package/dist/composition/settings-route-host.js +75 -0
  30. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  31. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  32. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  33. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
  34. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -0
  35. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  36. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  37. package/dist/{src/features → features}/launch/index.js +0 -1
  38. package/dist/{src/features → features}/launch/intent.d.ts +3 -2
  39. package/dist/features/launch/intent.js +3 -0
  40. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  41. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  42. package/dist/{src/features → features}/launch/profile-paths.d.ts +1 -2
  43. package/dist/{src/features → features}/launch/profile-paths.js +2 -8
  44. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  45. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  46. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  47. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  48. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  49. package/dist/{src/features → features}/owned-ui/index.d.ts +1 -0
  50. package/dist/{src/features → features}/owned-ui/index.js +1 -0
  51. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  52. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  53. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  54. package/dist/{src/features → features}/owned-ui/run.js +2 -0
  55. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  56. package/dist/{src/features → features}/owned-ui/settings-app.js +103 -54
  57. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  58. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  59. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  60. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  61. package/dist/{src/features → features}/workspace/router.js +1 -0
  62. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  63. package/dist/{src/features → features}/workspace/store.js +1 -0
  64. package/dist/{src/foundation → foundation}/launch-guardian/main.js +10 -2
  65. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  66. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  67. package/dist/foundation/lifecycle/paths.d.ts +28 -0
  68. package/dist/{src/foundation → foundation}/lifecycle/paths.js +21 -0
  69. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  70. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  71. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  72. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  73. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  74. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  75. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  76. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  77. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +1 -0
  78. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +1 -0
  79. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  80. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  81. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  82. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  83. package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +14 -4
  84. package/dist/{src/foundation → foundation}/release/bootstrap.js +66 -13
  85. package/dist/foundation/release/cohort-state.d.ts +156 -0
  86. package/dist/foundation/release/cohort-state.js +471 -0
  87. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  88. package/dist/foundation/release/dependency-layer.js +487 -0
  89. package/dist/foundation/release/endpoints.d.ts +20 -0
  90. package/dist/foundation/release/endpoints.js +50 -0
  91. package/dist/{src/foundation → foundation}/release/index.d.ts +3 -0
  92. package/dist/{src/foundation → foundation}/release/index.js +3 -0
  93. package/dist/foundation/release/release-gc.d.ts +71 -0
  94. package/dist/foundation/release/release-gc.js +734 -0
  95. package/dist/{src/foundation → foundation}/release/release-store.d.ts +3 -1
  96. package/dist/{src/foundation → foundation}/release/release-store.js +60 -10
  97. package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
  98. package/dist/{src/foundation → foundation}/release/release.js +10 -3
  99. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
  100. package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
  101. package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
  102. package/dist/{src/foundation → foundation}/release/update.js +114 -54
  103. package/dist/foundation/release/warmup.d.ts +3 -0
  104. package/dist/foundation/release/warmup.js +35 -0
  105. package/dist/foundation/startup/index.d.ts +1 -0
  106. package/dist/foundation/startup/index.js +1 -0
  107. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  108. package/dist/foundation/startup/startup-runtime.js +140 -0
  109. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  110. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  111. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  112. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  113. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  114. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  115. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  116. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  117. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  118. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  119. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  120. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  121. package/dist/foundation/supervision/index.d.ts +3 -0
  122. package/dist/foundation/supervision/index.js +3 -0
  123. package/dist/{src/foundation → foundation}/supervision/main.js +11 -5
  124. package/dist/foundation/supervision/paths.d.ts +1 -0
  125. package/dist/foundation/supervision/paths.js +1 -0
  126. package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
  127. package/dist/{src/foundation → foundation}/supervision/server.js +51 -2
  128. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  129. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  130. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  131. package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
  132. package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
  133. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  134. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  135. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
  136. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  137. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +3 -3
  138. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +32 -17
  139. package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
  140. package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
  141. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
  142. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
  143. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +1 -1
  144. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +52 -8
  145. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
  146. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  147. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  148. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
  149. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
  150. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  151. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +22 -4
  152. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +289 -68
  153. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
  154. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
  155. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  156. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  157. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +3 -0
  158. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +3 -0
  159. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  160. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  161. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  162. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +2 -2
  163. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  164. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  165. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  166. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  167. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +16 -1
  168. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +39 -4
  169. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  170. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  171. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  172. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  173. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  174. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  175. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  176. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  177. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  178. package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
  179. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
  180. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
  181. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
  182. package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
  183. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  184. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +137 -0
  185. package/dist/integrations/pi/session-ui/session-shell-root.js +1106 -0
  186. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  187. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +415 -775
  188. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +44 -0
  189. package/dist/integrations/pi/session-ui/session-viewport-controller.js +434 -0
  190. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  191. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  192. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  193. package/dist/integrations/pi/session-ui/system-clipboard.js +130 -0
  194. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
  195. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
  196. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
  197. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +63 -0
  198. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +240 -0
  199. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
  200. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -0
  201. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  202. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  203. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  204. package/dist/native/darwin-arm64/manifest.json +1 -1
  205. package/dist/native/linux-x64/manifest.json +3 -3
  206. package/dist/native/linux-x64/process-guardian +0 -0
  207. package/dist/native/win32-x64/manifest.json +3 -3
  208. package/dist/native/win32-x64/process-guardian.exe +0 -0
  209. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +3 -3
  210. package/dist/{src/product-identity.js → product-identity.js} +7 -5
  211. package/dist/{src/product-identity.json → product-identity.json} +11 -6
  212. package/dist/runtime-payload-inventory.json +122328 -0
  213. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  214. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  215. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  216. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  217. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  218. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  219. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  220. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  221. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +4 -0
  222. package/dist/{src/foundation/ui-components → ui/components}/index.js +4 -0
  223. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
  224. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
  225. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  226. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  227. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  228. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +23 -0
  229. package/dist/ui/components/progress-status.d.ts +2 -0
  230. package/dist/ui/components/progress-status.js +4 -0
  231. package/dist/ui/components/prompt-row.d.ts +14 -0
  232. package/dist/ui/components/prompt-row.js +20 -0
  233. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  234. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  235. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  236. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  237. package/dist/ui/components/spans.d.ts +25 -0
  238. package/dist/ui/components/spans.js +257 -0
  239. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  240. package/dist/ui/components/submitted-prompt.js +50 -0
  241. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  242. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  243. package/dist/ui/components/text-selection.d.ts +62 -0
  244. package/dist/ui/components/text-selection.js +235 -0
  245. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  246. package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
  247. package/dist/ui/components/transcript-viewport.d.ts +146 -0
  248. package/dist/ui/components/transcript-viewport.js +629 -0
  249. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  250. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
  251. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  252. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +21 -2
  253. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  254. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +32 -23
  255. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  256. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
  257. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  258. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  259. package/docs/architecture/boundaries.md +9 -9
  260. package/docs/architecture/code-documentation.md +77 -0
  261. package/docs/architecture/project-structure.md +67 -30
  262. package/docs/architecture/resource-and-data-policy.md +1 -1
  263. package/docs/architecture/toolchain.md +10 -10
  264. package/docs/architecture/ui-reference-provenance.md +34 -5
  265. package/docs/ci-release-runbook.md +186 -79
  266. package/docs/features/launch-profiles.md +10 -19
  267. package/docs/manual-launch-instance-acceptance.md +12 -35
  268. package/docs/manual-owned-ui-checkpoint.md +78 -0
  269. package/docs/manual-pi-boundary-candidate.md +4 -5
  270. package/docs/manual-terminal-colour-check.md +4 -3
  271. package/docs/repository-governance-live-acceptance.md +77 -0
  272. package/package.json +37 -27
  273. package/dist/src/cli/capabilities.d.ts +0 -15
  274. package/dist/src/cli/dispatch.js +0 -177
  275. package/dist/src/cli/version-stats.js +0 -72
  276. package/dist/src/composition/index.d.ts +0 -48
  277. package/dist/src/composition/index.js +0 -258
  278. package/dist/src/features/launch/intent.js +0 -4
  279. package/dist/src/features/launch/profiles.d.ts +0 -12
  280. package/dist/src/features/launch/profiles.js +0 -26
  281. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  282. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  283. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  284. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  285. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -112
  286. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  287. package/dist/src/foundation/release/cohort-state.js +0 -202
  288. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  289. package/dist/src/foundation/release/release-gc.js +0 -16
  290. package/dist/src/foundation/supervision/index.d.ts +0 -3
  291. package/dist/src/foundation/supervision/index.js +0 -3
  292. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  293. package/dist/src/foundation/supervision/paths.js +0 -1
  294. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  295. package/dist/src/foundation/ui-components/spans.js +0 -59
  296. package/docs/manual-transparent-checkpoint.md +0 -53
  297. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  298. /package/dist/{src/cli → cli}/index.js +0 -0
  299. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  300. /package/dist/{src/cli → cli}/version.js +0 -0
  301. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  302. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  303. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  304. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  305. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  306. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  307. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  308. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +0 -0
  309. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  310. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  311. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  312. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  313. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  314. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  315. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  316. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  317. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  318. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  319. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  320. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  321. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  322. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  323. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  324. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  325. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  326. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  327. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  328. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  329. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  330. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  331. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  332. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  333. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  334. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  335. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  336. /package/dist/{src/features → features}/workspace/index.js +0 -0
  337. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  338. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  339. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  340. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  341. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  342. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  343. /package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +0 -0
  344. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  345. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  346. /package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +0 -0
  347. /package/dist/{src/foundation → foundation}/lifecycle/index.js +0 -0
  348. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  349. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  350. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  351. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  352. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  353. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  354. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  355. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  356. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  357. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  358. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  359. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  360. /package/dist/{src/foundation → foundation}/process-containment/index.d.ts +0 -0
  361. /package/dist/{src/foundation → foundation}/process-containment/index.js +0 -0
  362. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  363. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  364. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  365. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  366. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  367. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  368. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  369. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  370. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  371. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  372. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  373. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  374. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  375. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  376. /package/dist/{src/foundation → foundation}/supervision/main.d.ts +0 -0
  377. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  378. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +0 -0
  379. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +0 -0
  380. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  381. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  382. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  383. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  384. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +0 -0
  385. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  386. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  387. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  388. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  389. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  390. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  391. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  392. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  393. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  394. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  395. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  396. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  397. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  398. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  399. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  400. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  401. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  402. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  403. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  404. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  405. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  406. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  407. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  408. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  409. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  410. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  411. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  412. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  413. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  414. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  415. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  416. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  417. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  418. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  419. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  420. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  421. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  422. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  423. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  424. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  425. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  426. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  427. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  428. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  429. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  430. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  431. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +0 -0
  432. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  433. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/route-host.js +0 -0
  434. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  435. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  436. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  437. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  438. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  439. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  440. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  441. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  442. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  443. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  444. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  445. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  446. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  447. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  448. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  449. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  450. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  451. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  452. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  453. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  454. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  455. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  456. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  457. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  458. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  459. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  460. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  461. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,130 @@
1
+ import { execFile } from "node:child_process";
2
+ import { canonicalizeClipboardImage } from "./clipboard-image.js";
3
+ const MAX_CLIPBOARD_BYTES = 16 * 1024 * 1024;
4
+ let nativeClipboardPromise;
5
+ let pendingClipboardWrite = Promise.resolve();
6
+ /** Load the native adapter during shell startup so the first paste is warm. */
7
+ export function preloadSystemClipboard() {
8
+ if (process.platform === "win32" || process.platform === "darwin")
9
+ void nativeClipboard();
10
+ }
11
+ /**
12
+ * Reads plain text through platform clipboard commands without importing Pi's
13
+ * private clipboard module. Failures are deliberately non-fatal: a denied or
14
+ * unavailable clipboard simply makes the paste action a no-op.
15
+ */
16
+ export async function readSystemClipboardContent() {
17
+ await pendingClipboardWrite;
18
+ const native = await nativeClipboard();
19
+ if (native !== null) {
20
+ try {
21
+ if (process.platform === "win32" && native.availableFormats().some(isFileDropFormat)) {
22
+ const files = await readSystemClipboardText();
23
+ if (files !== null)
24
+ return { kind: "text", text: files };
25
+ }
26
+ const image = await readSystemClipboardImage(native);
27
+ if (image !== null)
28
+ return { kind: "image", ...image };
29
+ }
30
+ catch {
31
+ // Compatibility: fall through to text and platform readers.
32
+ }
33
+ }
34
+ const text = await readSystemClipboardText();
35
+ return text === null ? null : { kind: "text", text };
36
+ }
37
+ export async function readSystemClipboardImage(reader) {
38
+ if (!reader.hasImage())
39
+ return null;
40
+ if (reader.getImageBinary !== undefined) {
41
+ try {
42
+ const bytes = await reader.getImageBinary();
43
+ if (bytes.length > 0 && bytes.every(byte => Number.isInteger(byte) && byte >= 0 && byte <= 255)) {
44
+ return canonicalizeClipboardImage({
45
+ data: Buffer.from(bytes).toString("base64"),
46
+ mimeType: "image/png",
47
+ });
48
+ }
49
+ }
50
+ catch {
51
+ // Compatibility: older or partially available native bindings may still expose base64.
52
+ }
53
+ }
54
+ if (reader.getImageBase64 !== undefined) {
55
+ try {
56
+ return canonicalizeClipboardImage({
57
+ data: await reader.getImageBase64(),
58
+ mimeType: "image/png",
59
+ });
60
+ }
61
+ catch {
62
+ // Compatibility: fall through to the caller's text path.
63
+ }
64
+ }
65
+ return null;
66
+ }
67
+ export async function readSystemClipboardText() {
68
+ // Concurrency: Ctrl+C/Ctrl+X and Ctrl+V can arrive in adjacent input turns. Serialize the
69
+ // read behind our native write so paste never observes the previous value.
70
+ await pendingClipboardWrite;
71
+ if (process.platform === "win32" || process.platform === "darwin") {
72
+ const native = await nativeClipboard();
73
+ if (native !== null) {
74
+ try {
75
+ const text = await native.getText();
76
+ if (text.length > 0)
77
+ return text;
78
+ }
79
+ catch {
80
+ // Compatibility: fall through to the platform command.
81
+ }
82
+ }
83
+ }
84
+ if (process.platform === "win32") {
85
+ const script = [
86
+ "[Console]::OutputEncoding=[System.Text.Encoding]::UTF8",
87
+ "$t=Get-Clipboard -Raw -ErrorAction SilentlyContinue",
88
+ "if ($null -ne $t -and $t.Length -gt 0) {[Console]::Out.Write($t)} else {$f=Get-Clipboard -Format FileDropList -ErrorAction SilentlyContinue; if ($f) {[Console]::Out.Write(($f | ForEach-Object {$_.FullName}) -join [Environment]::NewLine)}}",
89
+ ].join("; ");
90
+ return execClipboard("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", script]);
91
+ }
92
+ if (process.platform === "darwin")
93
+ return execClipboard("pbpaste", []);
94
+ return (await execClipboard("wl-paste", ["--no-newline", "--type", "text"]))
95
+ ?? execClipboard("xclip", ["-selection", "clipboard", "-o"]);
96
+ }
97
+ export function writeSystemClipboardText(text) {
98
+ const write = async () => {
99
+ const native = await nativeClipboard();
100
+ if (native !== null) {
101
+ try {
102
+ await native.setText(text);
103
+ return;
104
+ }
105
+ catch {
106
+ // Compatibility: the caller still emits its terminal clipboard fallback.
107
+ }
108
+ }
109
+ };
110
+ const operation = pendingClipboardWrite.then(write, write);
111
+ pendingClipboardWrite = operation.catch(() => { });
112
+ return operation;
113
+ }
114
+ function nativeClipboard() {
115
+ nativeClipboardPromise ??= import("@mariozechner/clipboard").catch(() => null);
116
+ return nativeClipboardPromise;
117
+ }
118
+ function isFileDropFormat(format) {
119
+ return /(?:filedrop|hdrop|shell idlist)/iu.test(format);
120
+ }
121
+ function execClipboard(command, args) {
122
+ return new Promise(resolve => {
123
+ execFile(command, args, {
124
+ encoding: "utf8",
125
+ maxBuffer: MAX_CLIPBOARD_BYTES,
126
+ timeout: 5_000,
127
+ windowsHide: true,
128
+ }, (error, stdout) => resolve(error || stdout.length === 0 ? null : stdout));
129
+ });
130
+ }
@@ -1,9 +1,11 @@
1
- import type { PiTuiComponentPort, PiTuiInputListener, PiTuiOverlayHandle, PiTuiOverlayOptions, PiTuiRuntimeAdapterOptions, PiTuiRuntimeState, PiTuiScrollState, PiTuiStopOptions, PiTuiViewport } from "./contracts.js";
1
+ import type { PiTuiComponentPort, PiTuiInputListener, PiTuiOverlayHandle, PiTuiOverlayOptions, PiTuiPreInputListener, PiTuiRuntimeAdapterOptions, PiTuiRuntimeState, PiTuiScrollState, PiTuiStopOptions, PiTuiViewport } from "./contracts.js";
2
2
  export type PiTuiRuntimeErrorStage = "construction" | "start" | "input-drain" | "restoration";
3
+ /** Identifies the Pi TUI lifecycle stage that failed while preserving the original cause. */
3
4
  export declare class PiTuiRuntimeError extends Error {
4
5
  readonly stage: PiTuiRuntimeErrorStage;
5
6
  constructor(stage: PiTuiRuntimeErrorStage, cause: unknown);
6
7
  }
8
+ /** Bridges neutral presentation ports to one Pi TUI instance and owns terminal restoration on stop. */
7
9
  export declare class PiTuiRuntimeAdapter {
8
10
  #private;
9
11
  constructor(options: PiTuiRuntimeAdapterOptions);
@@ -26,11 +28,16 @@ export declare class PiTuiRuntimeAdapter {
26
28
  * the transparent and pinned paths never call it.
27
29
  */
28
30
  writeControl(data: string): void;
31
+ addPreInputListener(listener: PiTuiPreInputListener): () => void;
29
32
  addInputListener(listener: PiTuiInputListener): () => void;
30
33
  switchMode(mode: "regular" | "fullscreen"): boolean;
31
34
  setHardwareCursor(enabled: boolean): void;
32
35
  getHardwareCursor(): boolean;
36
+ setClearOnShrink(enabled: boolean): void;
37
+ getClearOnShrink(): boolean;
38
+ setTerminalProgress(active: boolean): void;
33
39
  setTitle(title: string): void;
40
+ writeAfterStop(text: string): void;
34
41
  invalidate(): void;
35
42
  requestRender(force?: boolean): void;
36
43
  renderNow(force?: boolean): void;
@@ -1,4 +1,6 @@
1
1
  import { HStack, ProcessTerminal, ScrollView, TuiAltScreen, TuiMainScreen, VStack, visibleWidth, } from "#pi-tui";
2
+ import { InputPresentationCoordinator, } from "./input-presentation-coordinator.js";
3
+ /** Identifies the Pi TUI lifecycle stage that failed while preserving the original cause. */
2
4
  export class PiTuiRuntimeError extends Error {
3
5
  stage;
4
6
  constructor(stage, cause) {
@@ -9,9 +11,11 @@ export class PiTuiRuntimeError extends Error {
9
11
  }
10
12
  class ComponentBridge {
11
13
  port;
14
+ traceComposition;
12
15
  #focused = false;
13
- constructor(port) {
16
+ constructor(port, traceComposition) {
14
17
  this.port = port;
18
+ this.traceComposition = traceComposition;
15
19
  }
16
20
  get focused() {
17
21
  return this.#focused;
@@ -24,12 +28,18 @@ class ComponentBridge {
24
28
  return this.port.wantsKeyRelease ?? false;
25
29
  }
26
30
  render(width) {
27
- const lines = [...this.port.render(width)];
28
- const overflow = lines.findIndex(line => visibleWidth(line) > width);
29
- if (overflow >= 0) {
30
- throw new RangeError(`Pi TUI component row ${overflow} exceeds available width ${width}`);
31
+ this.traceComposition?.("composition-start");
32
+ try {
33
+ const lines = [...this.port.render(width)];
34
+ const overflow = lines.findIndex(line => visibleWidth(line) > width);
35
+ if (overflow >= 0) {
36
+ throw new RangeError(`Pi TUI component row ${overflow} exceeds available width ${width}`);
37
+ }
38
+ return lines;
39
+ }
40
+ finally {
41
+ this.traceComposition?.("composition-end");
31
42
  }
32
- return lines;
33
43
  }
34
44
  handleInput(data) {
35
45
  this.port.handleInput?.(data);
@@ -79,8 +89,10 @@ class OverlayHandleBridge {
79
89
  return !this.#disposed && this.handle.isFocused();
80
90
  }
81
91
  }
92
+ /** Bridges neutral presentation ports to one Pi TUI instance and owns terminal restoration on stop. */
82
93
  export class PiTuiRuntimeAdapter {
83
94
  #terminal;
95
+ #tuiTerminal;
84
96
  #tui;
85
97
  #root;
86
98
  #layoutRoot;
@@ -91,16 +103,53 @@ export class PiTuiRuntimeAdapter {
91
103
  #mountedComponents = new Set();
92
104
  #scrollViews = new Map();
93
105
  #overlayDisposers = new Set();
106
+ #overlayInputCoordination = new Map();
94
107
  #inputListeners = new Map();
108
+ #preInputListeners = new Set();
109
+ #inputCoordinator;
110
+ #inputDiagnostics;
111
+ #diagnosticNow;
112
+ #inputSink;
95
113
  #state = "idle";
96
114
  #stopPromise;
97
115
  #rootDisposed = false;
116
+ #terminalProgress = false;
98
117
  constructor(options) {
99
118
  this.#root = options.root;
100
119
  this.#terminal = options.terminal ?? new ProcessTerminal();
120
+ this.#inputDiagnostics = options.inputDiagnostics;
121
+ this.#diagnosticNow = options.inputDiagnostics?.now ?? (() => performance.now());
122
+ const tracedTerminal = options.inputDiagnostics === undefined
123
+ ? this.#terminal
124
+ : diagnosticTerminal(this.#terminal, phase => this.#traceRuntimePhase(phase));
125
+ const decoratedTerminal = options.decorateTerminal?.(tracedTerminal) ?? tracedTerminal;
126
+ const coordination = options.inputCoordination ?? (options.inputDiagnostics === undefined
127
+ ? undefined
128
+ : { classify: () => "barrier" });
129
+ this.#inputCoordinator = coordination === undefined
130
+ ? undefined
131
+ : new InputPresentationCoordinator({
132
+ classify: data => coordination.classify(data, this.#focusedOverlayInputCoordination()),
133
+ deliver: data => {
134
+ const routed = this.#routePreInput(data);
135
+ if (routed.length > 0)
136
+ this.#inputSink?.(routed);
137
+ },
138
+ ...(coordination.onReceipt === undefined ? {} : { onReceipt: coordination.onReceipt }),
139
+ ...(coordination.scheduler === undefined ? {} : { scheduler: coordination.scheduler }),
140
+ now: this.#diagnosticNow,
141
+ ...(options.inputDiagnostics === undefined ? {} : {
142
+ onTrace: event => this.#traceInputCoordination(event),
143
+ }),
144
+ });
145
+ this.#tuiTerminal = this.#inputCoordinator === undefined
146
+ ? preInputTerminal(decoratedTerminal, data => this.#routePreInput(data))
147
+ : coordinatedInputTerminal(decoratedTerminal, this.#inputCoordinator, sink => { this.#inputSink = sink; });
101
148
  this.#layoutRoot = options.layoutRoot;
102
149
  this.#logDirectory = options.logDirectory;
103
- this.#rootBridge = new ComponentBridge(options.root);
150
+ this.#rootBridge = new ComponentBridge(options.root, options.inputDiagnostics === undefined
151
+ ? undefined
152
+ : phase => this.#traceRuntimePhase(phase));
104
153
  this.#bridges.set(options.root, this.#rootBridge);
105
154
  this.#mountedComponents.add(options.root);
106
155
  try {
@@ -220,10 +269,12 @@ export class PiTuiRuntimeAdapter {
220
269
  return;
221
270
  hidden = true;
222
271
  this.#overlayDisposers.delete(dispose);
272
+ this.#overlayInputCoordination.delete(bridge);
223
273
  this.#bridges.delete(component);
224
274
  component.dispose?.();
225
275
  };
226
276
  this.#overlayDisposers.add(dispose);
277
+ this.#overlayInputCoordination.set(bridge, options?.inputCoordination ?? "opaque");
227
278
  const handle = this.#tui.showOverlay(bridge, toOverlayOptions(options));
228
279
  return new OverlayHandleBridge(handle, target => this.#bridgeFor(target), dispose);
229
280
  }
@@ -239,6 +290,12 @@ export class PiTuiRuntimeAdapter {
239
290
  this.#assertRunning("control sequence");
240
291
  this.#terminal.write(data);
241
292
  }
293
+ addPreInputListener(listener) {
294
+ if (this.#preInputListeners.has(listener))
295
+ throw new TypeError("Pi TUI pre-input listener is already registered");
296
+ this.#preInputListeners.add(listener);
297
+ return () => this.#preInputListeners.delete(listener);
298
+ }
242
299
  addInputListener(listener) {
243
300
  this.#assertRunning("input listener");
244
301
  if (this.#inputListeners.has(listener))
@@ -292,9 +349,26 @@ export class PiTuiRuntimeAdapter {
292
349
  getHardwareCursor() {
293
350
  return this.#tui.getShowHardwareCursor();
294
351
  }
352
+ setClearOnShrink(enabled) {
353
+ this.#tui.setClearOnShrink(enabled);
354
+ }
355
+ getClearOnShrink() {
356
+ return this.#tui.getClearOnShrink();
357
+ }
358
+ setTerminalProgress(active) {
359
+ if (this.#terminalProgress === active)
360
+ return;
361
+ this.#terminal.setProgress(active);
362
+ this.#terminalProgress = active;
363
+ }
295
364
  setTitle(title) {
296
365
  this.#terminal.setTitle(title);
297
366
  }
367
+ writeAfterStop(text) {
368
+ if (this.#state !== "stopped")
369
+ throw new Error("terminal output requires a stopped Pi TUI runtime");
370
+ this.#terminal.write(text);
371
+ }
298
372
  invalidate() {
299
373
  this.#tui.invalidate();
300
374
  if (this.active)
@@ -313,6 +387,8 @@ export class PiTuiRuntimeAdapter {
313
387
  return this.#stopPromise;
314
388
  if (this.#state === "idle") {
315
389
  this.#state = "stopped";
390
+ this.#clearTerminalProgress();
391
+ this.#preInputListeners.clear();
316
392
  this.#disposeRoot();
317
393
  return Promise.resolve();
318
394
  }
@@ -326,6 +402,7 @@ export class PiTuiRuntimeAdapter {
326
402
  }
327
403
  async #stop(options) {
328
404
  this.#state = "stopping";
405
+ this.#inputCoordinator?.flush();
329
406
  let failure;
330
407
  if (options.drainInput !== false) {
331
408
  try {
@@ -344,6 +421,7 @@ export class PiTuiRuntimeAdapter {
344
421
  this.#bestEffortTerminalRestore();
345
422
  }
346
423
  finally {
424
+ this.#clearTerminalProgress();
347
425
  this.#disposeComponents();
348
426
  }
349
427
  this.#state = failure === undefined ? "stopped" : "failed";
@@ -352,8 +430,44 @@ export class PiTuiRuntimeAdapter {
352
430
  }
353
431
  #createTui(mode, hardwareCursor) {
354
432
  return mode === "fullscreen"
355
- ? new TuiAltScreen(this.#terminal, hardwareCursor, this.#logDirectory, this.#tuiOptions)
356
- : new TuiMainScreen(this.#terminal, hardwareCursor, this.#logDirectory);
433
+ ? new TuiAltScreen(this.#tuiTerminal, hardwareCursor, this.#logDirectory, this.#tuiOptions)
434
+ : new TuiMainScreen(this.#tuiTerminal, hardwareCursor, this.#logDirectory);
435
+ }
436
+ #routePreInput(data) {
437
+ let current = data;
438
+ for (const listener of this.#preInputListeners) {
439
+ if (current.length === 0)
440
+ break;
441
+ const result = listener(current);
442
+ if (result?.data !== undefined)
443
+ current = result.data;
444
+ else if (result?.consume === true)
445
+ current = "";
446
+ }
447
+ return current;
448
+ }
449
+ #focusedOverlayInputCoordination() {
450
+ for (const [bridge, coordination] of this.#overlayInputCoordination) {
451
+ if (bridge.focused)
452
+ return coordination;
453
+ }
454
+ return undefined;
455
+ }
456
+ #traceInputCoordination(event) {
457
+ this.#inputDiagnostics?.onEvent(event);
458
+ }
459
+ #traceRuntimePhase(phase) {
460
+ if (this.#inputDiagnostics === undefined)
461
+ return;
462
+ const coordinator = this.#inputCoordinator;
463
+ this.#inputDiagnostics.onEvent({
464
+ phase,
465
+ revision: coordinator?.appliedRevision ?? 0,
466
+ atMs: this.#diagnosticNow(),
467
+ pendingDepth: coordinator?.pendingDepth ?? 0,
468
+ pendingPresentationDepth: coordinator?.pendingPresentation === true ? 1 : 0,
469
+ appliedRevision: coordinator?.appliedRevision ?? 0,
470
+ });
357
471
  }
358
472
  #mountTui(tui) {
359
473
  tui.addChild(this.#rootBridge);
@@ -436,7 +550,15 @@ export class PiTuiRuntimeAdapter {
436
550
  this.#bestEffortTerminalRestore();
437
551
  }
438
552
  }
553
+ #clearTerminalProgress() {
554
+ try {
555
+ this.#terminal.setProgress(false);
556
+ }
557
+ catch { }
558
+ this.#terminalProgress = false;
559
+ }
439
560
  #bestEffortTerminalRestore() {
561
+ this.#clearTerminalProgress();
440
562
  try {
441
563
  this.#terminal.showCursor();
442
564
  }
@@ -455,14 +577,99 @@ export class PiTuiRuntimeAdapter {
455
577
  this.#mountedComponents.clear();
456
578
  }
457
579
  #disposeComponents() {
580
+ this.#inputCoordinator?.dispose(false);
581
+ this.#inputSink = undefined;
458
582
  for (const remove of this.#inputListeners.values())
459
583
  remove();
460
584
  this.#inputListeners.clear();
585
+ this.#preInputListeners.clear();
461
586
  for (const dispose of [...this.#overlayDisposers])
462
587
  dispose();
588
+ this.#overlayInputCoordination.clear();
463
589
  this.#disposeRoot();
464
590
  }
465
591
  }
592
+ function coordinatedInputTerminal(terminal, coordinator, setSink) {
593
+ return {
594
+ get columns() { return terminal.columns; },
595
+ get rows() { return terminal.rows; },
596
+ get kittyProtocolActive() { return terminal.kittyProtocolActive; },
597
+ start(onInput, onResize) {
598
+ setSink(onInput);
599
+ terminal.start(data => coordinator.accept(data), () => {
600
+ coordinator.flush();
601
+ onResize();
602
+ });
603
+ },
604
+ stop() {
605
+ coordinator.flush();
606
+ setSink(undefined);
607
+ terminal.stop();
608
+ },
609
+ drainInput: (maxMs, idleMs) => terminal.drainInput(maxMs, idleMs),
610
+ write: data => terminal.write(data),
611
+ moveBy: lines => terminal.moveBy(lines),
612
+ hideCursor: () => terminal.hideCursor(),
613
+ showCursor: () => terminal.showCursor(),
614
+ clearLine: () => terminal.clearLine(),
615
+ clearFromCursor: () => terminal.clearFromCursor(),
616
+ clearScreen: () => terminal.clearScreen(),
617
+ setTitle: title => terminal.setTitle(title),
618
+ setProgress: active => terminal.setProgress(active),
619
+ };
620
+ }
621
+ function diagnosticTerminal(terminal, trace) {
622
+ return {
623
+ get columns() { return terminal.columns; },
624
+ get rows() { return terminal.rows; },
625
+ get kittyProtocolActive() { return terminal.kittyProtocolActive; },
626
+ start: (onInput, onResize) => terminal.start(onInput, onResize),
627
+ stop: () => terminal.stop(),
628
+ drainInput: (maxMs, idleMs) => terminal.drainInput(maxMs, idleMs),
629
+ write(data) {
630
+ trace("write-start");
631
+ try {
632
+ terminal.write(data);
633
+ }
634
+ finally {
635
+ trace("write-end");
636
+ }
637
+ },
638
+ moveBy: lines => terminal.moveBy(lines),
639
+ hideCursor: () => terminal.hideCursor(),
640
+ showCursor: () => terminal.showCursor(),
641
+ clearLine: () => terminal.clearLine(),
642
+ clearFromCursor: () => terminal.clearFromCursor(),
643
+ clearScreen: () => terminal.clearScreen(),
644
+ setTitle: title => terminal.setTitle(title),
645
+ setProgress: active => terminal.setProgress(active),
646
+ };
647
+ }
648
+ function preInputTerminal(terminal, route) {
649
+ return {
650
+ get columns() { return terminal.columns; },
651
+ get rows() { return terminal.rows; },
652
+ get kittyProtocolActive() { return terminal.kittyProtocolActive; },
653
+ start(onInput, onResize) {
654
+ terminal.start(data => {
655
+ const routed = route(data);
656
+ if (routed.length > 0)
657
+ onInput(routed);
658
+ }, onResize);
659
+ },
660
+ stop: () => terminal.stop(),
661
+ drainInput: (maxMs, idleMs) => terminal.drainInput(maxMs, idleMs),
662
+ write: data => terminal.write(data),
663
+ moveBy: lines => terminal.moveBy(lines),
664
+ hideCursor: () => terminal.hideCursor(),
665
+ showCursor: () => terminal.showCursor(),
666
+ clearLine: () => terminal.clearLine(),
667
+ clearFromCursor: () => terminal.clearFromCursor(),
668
+ clearScreen: () => terminal.clearScreen(),
669
+ setTitle: title => terminal.setTitle(title),
670
+ setProgress: active => terminal.setProgress(active),
671
+ };
672
+ }
466
673
  function toOverlayOptions(options) {
467
674
  if (options === undefined)
468
675
  return undefined;
@@ -1,3 +1,5 @@
1
+ import type { PresentationComponentPort } from "../../../contracts/presentation/index.js";
2
+ import type { PiTuiInputCoordinationDecision, PiTuiInputCoordinationScheduler, PiTuiInputSurfaceKind } from "./input-presentation-coordinator.js";
1
3
  export type PiTuiRuntimeState = "idle" | "running" | "stopping" | "stopped" | "failed";
2
4
  export interface PiTuiViewport {
3
5
  readonly columns: number;
@@ -9,13 +11,8 @@ export interface PiTuiScrollState {
9
11
  readonly followingEnd: boolean;
10
12
  readonly scrollbarVisible: boolean;
11
13
  }
12
- export interface PiTuiComponentPort {
13
- render(width: number): readonly string[];
14
- invalidate(): void;
15
- handleInput?(data: string): void;
14
+ export interface PiTuiComponentPort extends PresentationComponentPort {
16
15
  readonly wantsKeyRelease?: boolean;
17
- setFocused?(focused: boolean): void;
18
- dispose?(): void;
19
16
  }
20
17
  export interface PiTuiTerminalPort {
21
18
  start(onInput: (data: string) => void, onResize: () => void): void;
@@ -54,6 +51,8 @@ export interface PiTuiOverlayOptions {
54
51
  readonly margin?: PiTuiOverlayMargin | number;
55
52
  readonly visible?: (columns: number, rows: number) => boolean;
56
53
  readonly nonCapturing?: boolean;
54
+ /** A1-owned input scheduling declaration; omitted extension overlays fail closed. */
55
+ readonly inputCoordination?: Exclude<PiTuiInputSurfaceKind, "editor">;
57
56
  }
58
57
  export interface PiTuiOverlayUnfocusOptions {
59
58
  readonly target: PiTuiComponentPort | null;
@@ -71,6 +70,8 @@ export interface PiTuiInputListenerResult {
71
70
  readonly data?: string;
72
71
  }
73
72
  export type PiTuiInputListener = (data: string) => PiTuiInputListenerResult | undefined;
73
+ /** Runs at the terminal bridge before Pi TUI receives physical input. */
74
+ export type PiTuiPreInputListener = PiTuiInputListener;
74
75
  export interface PiTuiLayoutEntry {
75
76
  readonly node: PiTuiLayoutNode;
76
77
  readonly basis?: number | "auto";
@@ -100,11 +101,33 @@ export type PiTuiLayoutNode = {
100
101
  readonly scrollbarStyle?: (text: string) => string;
101
102
  readonly scrollbarHideDelayMs?: number;
102
103
  };
104
+ export type PiTuiInputDiagnosticsPhase = "receipt" | "semantic-start" | "semantic-end" | "composition-start" | "composition-end" | "write-start" | "write-end";
105
+ export interface PiTuiInputDiagnosticsEvent {
106
+ readonly phase: PiTuiInputDiagnosticsPhase;
107
+ readonly revision: number;
108
+ readonly atMs: number;
109
+ readonly pendingDepth: number;
110
+ readonly pendingPresentationDepth: 0 | 1;
111
+ readonly appliedRevision: number;
112
+ }
103
113
  export interface PiTuiRuntimeAdapterOptions {
104
114
  readonly root: PiTuiComponentPort;
105
115
  readonly mode?: "regular" | "fullscreen";
106
116
  readonly layoutRoot?: PiTuiLayoutNode;
107
117
  readonly terminal?: PiTuiTerminalPort;
118
+ /** A1-owned public-boundary decorator; comparison paths omit it. */
119
+ readonly decorateTerminal?: (terminal: PiTuiTerminalPort) => PiTuiTerminalPort;
120
+ /** Bare-custom-viewport scheduling policy; comparison paths omit it. */
121
+ readonly inputCoordination?: {
122
+ readonly classify: (data: string, focusedOverlay?: Exclude<PiTuiInputSurfaceKind, "editor">) => PiTuiInputCoordinationDecision;
123
+ readonly onReceipt?: () => void;
124
+ readonly scheduler?: PiTuiInputCoordinationScheduler;
125
+ };
126
+ /** Optional bounded evidence hook. Production composition omits it. */
127
+ readonly inputDiagnostics?: {
128
+ readonly onEvent: (event: PiTuiInputDiagnosticsEvent) => void;
129
+ readonly now?: () => number;
130
+ };
108
131
  readonly hardwareCursor?: boolean;
109
132
  readonly mouse?: boolean;
110
133
  readonly wheelScrollLines?: number;
@@ -0,0 +1,63 @@
1
+ import type { PiTuiTerminalPort } from "./contracts.js";
2
+ export declare const PINNED_PI_TUI_DAMAGE_GRAMMAR = "@earendil-works/pi-tui@0.84.2:tui-alt-screen-one-write-v1";
3
+ export interface PiTuiDamageFrameDescriptor {
4
+ readonly frameId: number;
5
+ readonly width: number;
6
+ readonly height: number;
7
+ readonly transcript: {
8
+ readonly rowStart: number;
9
+ readonly rowEnd: number;
10
+ } | null;
11
+ readonly dock: {
12
+ readonly rowStart: number;
13
+ readonly rowEnd: number;
14
+ } | null;
15
+ readonly verticalShiftRows: number;
16
+ readonly safeVerticalShift: boolean;
17
+ readonly cause: string;
18
+ }
19
+ export interface PiTuiDamageFrameSafety {
20
+ readonly overlayActive: boolean;
21
+ readonly selectionActive: boolean;
22
+ readonly replacementSurfaceActive: boolean;
23
+ }
24
+ export type PiTuiDamageDecisionReason = "transformed" | "suppressed-redundant-clear" | "not-armed" | "unsafe-frame" | "stale-frame" | "unsupported-region-scroll" | "geometry-mismatch" | "grammar-mismatch" | "unsafe-terminal-content" | "incomplete-prior-frame" | "excessive-real-damage";
25
+ export interface PiTuiDamageDecision {
26
+ readonly frameId: number | null;
27
+ readonly transformed: boolean;
28
+ readonly reason: PiTuiDamageDecisionReason;
29
+ readonly shiftRows: number;
30
+ readonly paintedRows: readonly number[];
31
+ }
32
+ export interface DamageAwareTerminalOptions {
33
+ readonly regionalScroll: boolean;
34
+ readonly onResize?: () => void;
35
+ }
36
+ /**
37
+ * A fail-closed adapter for one pinned Pi fullscreen write grammar. Semantic
38
+ * viewport metadata authorizes a shift; bytes are inspected only to validate
39
+ * and preserve Pi's complete row paint and cursor syntax.
40
+ */
41
+ export declare class DamageAwareTerminalAdapter implements PiTuiTerminalPort {
42
+ #private;
43
+ readonly inner: PiTuiTerminalPort;
44
+ readonly options: DamageAwareTerminalOptions;
45
+ constructor(inner: PiTuiTerminalPort, options: DamageAwareTerminalOptions);
46
+ get columns(): number;
47
+ get rows(): number;
48
+ get kittyProtocolActive(): boolean;
49
+ get lastDecision(): PiTuiDamageDecision;
50
+ arm(descriptor: PiTuiDamageFrameDescriptor, safety: PiTuiDamageFrameSafety): void;
51
+ start(onInput: (data: string) => void, onResize: () => void): void;
52
+ stop(): void;
53
+ drainInput(maxMs?: number, idleMs?: number): Promise<void>;
54
+ write(data: string): void;
55
+ moveBy(lines: number): void;
56
+ hideCursor(): void;
57
+ showCursor(): void;
58
+ clearLine(): void;
59
+ clearFromCursor(): void;
60
+ clearScreen(): void;
61
+ setTitle(title: string): void;
62
+ setProgress(active: boolean): void;
63
+ }