@timurproko/a1 0.2.6-dev.736 → 0.2.7-dev.1221

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 (423) hide show
  1. package/README.md +41 -3
  2. package/bin/automatic-update.js +7 -0
  3. package/bin/cli.js +4 -0
  4. package/bin/guardian.js +5 -0
  5. package/bin/tab-launch-context.d.ts +27 -0
  6. package/bin/tab-launch-context.js +94 -0
  7. package/bin/ui.js +107 -59
  8. package/dist/app/session-shell/clipboard-diagnostics.js +1 -1
  9. package/dist/app/session-shell/dialog-coordinator.d.ts +42 -0
  10. package/dist/app/session-shell/dialog-coordinator.js +133 -0
  11. package/dist/app/session-shell/dock-chrome.d.ts +34 -0
  12. package/dist/app/session-shell/dock-chrome.js +109 -0
  13. package/dist/app/session-shell/exit-notice.d.ts +1 -1
  14. package/dist/app/session-shell/exit-notice.js +1 -1
  15. package/dist/app/session-shell/extension-surface.d.ts +30 -0
  16. package/dist/app/session-shell/extension-surface.js +105 -0
  17. package/dist/app/session-shell/helper-pool.d.ts +3 -5
  18. package/dist/app/session-shell/helper-pool.js +3 -5
  19. package/dist/app/session-shell/input-surface-switch.d.ts +36 -0
  20. package/dist/app/session-shell/input-surface-switch.js +85 -0
  21. package/dist/app/session-shell/login-interaction.d.ts +27 -0
  22. package/dist/app/session-shell/login-interaction.js +91 -0
  23. package/dist/app/session-shell/prompt-submission.d.ts +48 -0
  24. package/dist/app/session-shell/prompt-submission.js +276 -0
  25. package/dist/app/session-shell/resident-tab-coordinator.d.ts +38 -0
  26. package/dist/app/session-shell/resident-tab-coordinator.js +77 -0
  27. package/dist/app/session-shell/response-copy-helper.js +21 -6
  28. package/dist/app/session-shell/response-copy-protocol.d.ts +1 -1
  29. package/dist/app/session-shell/response-copy-transport.d.ts +16 -6
  30. package/dist/app/session-shell/response-copy-transport.js +69 -17
  31. package/dist/app/session-shell/session-concern.d.ts +22 -0
  32. package/dist/app/session-shell/session-concern.js +29 -0
  33. package/dist/app/session-shell/session-lifecycle.d.ts +29 -0
  34. package/dist/app/session-shell/session-lifecycle.js +49 -0
  35. package/dist/app/session-shell/session-shell-root.d.ts +42 -6
  36. package/dist/app/session-shell/session-shell-root.js +196 -908
  37. package/dist/app/session-shell/session-shell.d.ts +3 -8
  38. package/dist/app/session-shell/session-shell.js +324 -835
  39. package/dist/app/session-shell/session-viewport-controller.d.ts +2 -2
  40. package/dist/app/session-shell/session-viewport-controller.js +29 -15
  41. package/dist/app/session-shell/settings-bindings.d.ts +17 -0
  42. package/dist/app/session-shell/settings-bindings.js +91 -0
  43. package/dist/app/session-shell/shell-editor-factory.d.ts +27 -0
  44. package/dist/app/session-shell/shell-editor-factory.js +102 -0
  45. package/dist/app/session-shell/shell-host.d.ts +6 -0
  46. package/dist/app/session-shell/shell-host.js +34 -7
  47. package/dist/app/session-shell/shell-layout.d.ts +64 -0
  48. package/dist/app/session-shell/shell-layout.js +18 -0
  49. package/dist/app/session-shell/suggestion-surface.d.ts +25 -0
  50. package/dist/app/session-shell/suggestion-surface.js +63 -0
  51. package/dist/app/session-shell/transcript-document.d.ts +78 -0
  52. package/dist/app/session-shell/transcript-document.js +365 -0
  53. package/dist/app/session-shell/viewport-layout.d.ts +31 -0
  54. package/dist/app/session-shell/viewport-layout.js +160 -0
  55. package/dist/app/session-shell/workflow-output.d.ts +33 -0
  56. package/dist/app/session-shell/workflow-output.js +174 -0
  57. package/dist/app/session-shell/workflow-router.d.ts +25 -0
  58. package/dist/app/session-shell/workflow-router.js +39 -0
  59. package/dist/cli/dispatch.d.ts +11 -1
  60. package/dist/cli/dispatch.js +79 -5
  61. package/dist/cli/tabs-request.d.ts +7 -0
  62. package/dist/cli/tabs-request.js +1 -0
  63. package/dist/cli/tabs.d.ts +14 -0
  64. package/dist/cli/tabs.js +151 -0
  65. package/dist/cli/version-stats.js +38 -3
  66. package/dist/composition/owned-settings.d.ts +12 -0
  67. package/dist/composition/owned-settings.js +36 -0
  68. package/dist/composition/owned-ui.d.ts +27 -28
  69. package/dist/composition/owned-ui.js +205 -153
  70. package/dist/composition/resident-tab-bridge.d.ts +25 -0
  71. package/dist/composition/resident-tab-bridge.js +180 -0
  72. package/dist/composition/session-backend.d.ts +19 -0
  73. package/dist/composition/session-backend.js +1 -0
  74. package/dist/composition/session-runtime-registry.d.ts +20 -0
  75. package/dist/composition/session-runtime-registry.js +85 -0
  76. package/dist/composition/settings-route-host.d.ts +16 -1
  77. package/dist/composition/settings-route-host.js +29 -10
  78. package/dist/composition/settings-search-input.d.ts +9 -0
  79. package/dist/composition/settings-search-input.js +58 -0
  80. package/dist/composition/startup-route.d.ts +32 -0
  81. package/dist/composition/startup-route.js +72 -0
  82. package/dist/composition/utility-tab.d.ts +28 -0
  83. package/dist/composition/utility-tab.js +242 -0
  84. package/dist/contracts/owned-ui/index.d.ts +1 -1
  85. package/dist/contracts/owned-ui/model.d.ts +3 -0
  86. package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
  87. package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
  88. package/dist/contracts/presentation/index.d.ts +11 -0
  89. package/dist/contracts/presentation/index.js +12 -0
  90. package/dist/features/launch/development-launch.js +6 -0
  91. package/dist/features/launch/index.d.ts +1 -1
  92. package/dist/features/launch/intent.d.ts +3 -1
  93. package/dist/features/launch/intent.js +7 -4
  94. package/dist/features/launch/profile-paths.js +4 -0
  95. package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
  96. package/dist/features/owned-ui/plus-menu-dialog.js +76 -0
  97. package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
  98. package/dist/features/owned-ui/project-trust-dialog.js +6 -8
  99. package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
  100. package/dist/features/owned-ui/project-trust-prompt.js +7 -3
  101. package/dist/features/owned-ui/reference-screen-app.d.ts +2 -0
  102. package/dist/features/owned-ui/reference-screen-app.js +12 -2
  103. package/dist/features/owned-ui/resources/release-notes.json +4 -0
  104. package/dist/features/owned-ui/settings-app.d.ts +12 -2
  105. package/dist/features/owned-ui/settings-app.js +119 -84
  106. package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
  107. package/dist/features/owned-ui/settings-search-input.js +1 -0
  108. package/dist/features/prompt-history/index.d.ts +1 -1
  109. package/dist/features/prompt-history/paths.d.ts +2 -1
  110. package/dist/features/prompt-history/paths.js +10 -2
  111. package/dist/features/prompt-history/service.d.ts +5 -0
  112. package/dist/features/prompt-history/service.js +1 -1
  113. package/dist/features/resident-tab/auto-name.d.ts +11 -0
  114. package/dist/features/resident-tab/auto-name.js +44 -0
  115. package/dist/features/resident-tab/index.d.ts +5 -0
  116. package/dist/features/resident-tab/index.js +7 -0
  117. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
  118. package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
  119. package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
  120. package/dist/features/resident-tab/shortcut-declarations.js +26 -0
  121. package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
  122. package/dist/features/resident-tab/shortcut-projection.js +64 -0
  123. package/dist/features/resident-tab/status-deriver.d.ts +10 -0
  124. package/dist/features/resident-tab/status-deriver.js +12 -0
  125. package/dist/foundation/launch-context/index.d.ts +12 -0
  126. package/dist/foundation/launch-context/index.js +26 -0
  127. package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
  128. package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
  129. package/dist/foundation/launch-guardian/main.d.ts +7 -1
  130. package/dist/foundation/launch-guardian/main.js +60 -7
  131. package/dist/foundation/lifecycle/session-repository-context.js +16 -2
  132. package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
  133. package/dist/foundation/process-containment/addon-containment.js +139 -0
  134. package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
  135. package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
  136. package/dist/foundation/process-containment/addon.d.ts +42 -0
  137. package/dist/foundation/process-containment/addon.js +57 -0
  138. package/dist/foundation/process-containment/artifact.d.ts +1 -1
  139. package/dist/foundation/process-containment/artifact.js +6 -5
  140. package/dist/foundation/process-containment/contracts.d.ts +2 -0
  141. package/dist/foundation/process-containment/index.d.ts +4 -4
  142. package/dist/foundation/process-containment/index.js +3 -3
  143. package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
  144. package/dist/foundation/process-containment/native-process-inspector.js +10 -10
  145. package/dist/foundation/release/automatic-update.d.ts +37 -0
  146. package/dist/foundation/release/automatic-update.js +265 -0
  147. package/dist/foundation/release/bootstrap.d.ts +7 -9
  148. package/dist/foundation/release/bootstrap.js +107 -24
  149. package/dist/foundation/release/cohort-state.d.ts +1 -1
  150. package/dist/foundation/release/cohort-state.js +6 -3
  151. package/dist/foundation/release/dependency-certification.js +54 -19
  152. package/dist/foundation/release/early-accent.d.ts +12 -0
  153. package/dist/foundation/release/early-accent.js +59 -0
  154. package/dist/foundation/release/index.d.ts +2 -2
  155. package/dist/foundation/release/index.js +2 -2
  156. package/dist/foundation/release/latest-release.d.ts +24 -2
  157. package/dist/foundation/release/latest-release.js +51 -1
  158. package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
  159. package/dist/foundation/release/progress-palette.generated.js +137 -3
  160. package/dist/foundation/release/release-gc.d.ts +3 -0
  161. package/dist/foundation/release/release-gc.js +59 -8
  162. package/dist/foundation/release/release-store.d.ts +12 -0
  163. package/dist/foundation/release/release-store.js +124 -2
  164. package/dist/foundation/release/update-execution-lease.d.ts +48 -0
  165. package/dist/foundation/release/update-execution-lease.js +161 -0
  166. package/dist/foundation/release/update.d.ts +12 -7
  167. package/dist/foundation/release/update.js +281 -196
  168. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
  169. package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
  170. package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
  171. package/dist/foundation/resident-tabs/bridge-client.js +321 -0
  172. package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
  173. package/dist/foundation/resident-tabs/doctor.js +166 -0
  174. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
  175. package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
  176. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
  177. package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
  178. package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
  179. package/dist/foundation/resident-tabs/fault-injection.js +26 -0
  180. package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
  181. package/dist/foundation/resident-tabs/fixture-control.js +35 -0
  182. package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
  183. package/dist/foundation/resident-tabs/host-entry.js +17 -0
  184. package/dist/foundation/resident-tabs/index.d.ts +12 -0
  185. package/dist/foundation/resident-tabs/index.js +6 -0
  186. package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
  187. package/dist/foundation/resident-tabs/maintenance.js +75 -0
  188. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
  189. package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
  190. package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
  191. package/dist/foundation/resident-tabs/progress-observation.js +150 -0
  192. package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
  193. package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
  194. package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
  195. package/dist/foundation/resident-tabs/protocol.js +195 -0
  196. package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
  197. package/dist/foundation/resident-tabs/recovery.js +205 -0
  198. package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
  199. package/dist/foundation/resident-tabs/release-holds.js +75 -0
  200. package/dist/foundation/resident-tabs/routes.d.ts +5 -0
  201. package/dist/foundation/resident-tabs/routes.js +5 -0
  202. package/dist/foundation/resident-tabs/routing.d.ts +11 -0
  203. package/dist/foundation/resident-tabs/routing.js +10 -0
  204. package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
  205. package/dist/foundation/resident-tabs/session-sync.js +37 -0
  206. package/dist/foundation/resident-tabs/settings.d.ts +12 -0
  207. package/dist/foundation/resident-tabs/settings.js +58 -0
  208. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
  209. package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
  210. package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
  211. package/dist/foundation/resident-tabs/zip-archive.js +56 -0
  212. package/dist/foundation/session-writer-lock/index.d.ts +30 -0
  213. package/dist/foundation/session-writer-lock/index.js +203 -0
  214. package/dist/foundation/startup/startup-descriptor.js +2 -2
  215. package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
  216. package/dist/foundation/terminal-cleanup/index.js +1 -1
  217. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
  218. package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
  219. package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
  220. package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
  221. package/dist/integrations/pi/components/modal-frame.js +48 -9
  222. package/dist/integrations/pi/components/models-dialog.js +4 -52
  223. package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
  224. package/dist/integrations/pi/components/owned-editor-ux.js +90 -6
  225. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
  226. package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
  227. package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
  228. package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
  229. package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
  230. package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
  231. package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
  232. package/dist/integrations/pi/components/shell-footer-status.js +21 -5
  233. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  234. package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
  235. package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
  236. package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
  237. package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
  238. package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
  239. package/dist/integrations/pi/components/skills-dialog.js +2 -2
  240. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
  241. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
  242. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  243. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
  244. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
  245. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
  246. package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
  247. package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
  248. package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
  249. package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
  250. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
  251. package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
  252. package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
  253. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
  254. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
  255. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
  256. package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
  257. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
  258. package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
  259. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
  260. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
  261. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
  262. package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
  263. package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
  264. package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
  265. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
  266. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
  267. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
  268. package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
  269. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
  270. package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
  271. package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
  272. package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
  273. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
  274. package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
  275. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
  276. package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
  277. package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
  278. package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
  279. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
  280. package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
  281. package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
  282. package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
  283. package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
  284. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
  285. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
  286. package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
  287. package/dist/integrations/pi/engine/adapter.d.ts +5 -77
  288. package/dist/integrations/pi/engine/adapter.js +95 -394
  289. package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
  290. package/dist/integrations/pi/engine/command-dispatch.js +57 -0
  291. package/dist/integrations/pi/engine/host.js +2 -2
  292. package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
  293. package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
  294. package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
  295. package/dist/integrations/pi/engine/ports.d.ts +56 -0
  296. package/dist/integrations/pi/engine/ports.js +93 -0
  297. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
  298. package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
  299. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  300. package/dist/integrations/pi/engine/runtime-integration.js +102 -29
  301. package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
  302. package/dist/integrations/pi/engine/session-runtime.js +13 -5
  303. package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
  304. package/dist/integrations/pi/engine/session-selection.js +45 -9
  305. package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
  306. package/dist/integrations/pi/engine/settings-bridge.js +15 -0
  307. package/dist/integrations/pi/engine/settings-port.js +11 -15
  308. package/dist/integrations/pi/engine/view-state.d.ts +42 -0
  309. package/dist/integrations/pi/engine/view-state.js +126 -0
  310. package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
  311. package/dist/integrations/pi/engine/workflow-runner.js +73 -4
  312. package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
  313. package/dist/integrations/pi/engine/workflow-support.js +36 -0
  314. package/dist/integrations/pi/engine/workflows.d.ts +3 -1
  315. package/dist/integrations/pi/engine/workflows.js +1 -0
  316. package/dist/integrations/pi/startup-public.js +257 -310
  317. package/dist/integrations/pi/startup-public.manifest.json +564 -440
  318. package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
  319. package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
  320. package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
  321. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
  322. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
  323. package/dist/native/darwin-arm64/manifest.json +10 -7
  324. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  325. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
  326. package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
  327. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  328. package/dist/native/darwin-x64/manifest.json +23 -0
  329. package/dist/native/darwin-x64/process-guardian.node +0 -0
  330. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
  331. package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
  332. package/dist/native/darwin-x64/terminal-host.node +0 -0
  333. package/dist/native/linux-x64/manifest.json +10 -7
  334. package/dist/native/linux-x64/process-guardian.node +0 -0
  335. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
  336. package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
  337. package/dist/native/linux-x64/terminal-host.node +0 -0
  338. package/dist/native/win32-x64/manifest.json +10 -7
  339. package/dist/native/win32-x64/process-guardian.node +0 -0
  340. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
  341. package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
  342. package/dist/native/win32-x64/terminal-host.node +0 -0
  343. package/dist/product-identity.d.ts +3 -3
  344. package/dist/product-identity.js +4 -4
  345. package/dist/product-identity.json +16 -2
  346. package/dist/runtime-payload-inventory.json +6330 -6677
  347. package/dist/ui/apps/host.d.ts +2 -0
  348. package/dist/ui/apps/host.js +7 -1
  349. package/dist/ui/components/dialog-panel.js +35 -30
  350. package/dist/ui/components/index.d.ts +2 -2
  351. package/dist/ui/components/index.js +1 -1
  352. package/dist/ui/components/line-input.d.ts +4 -1
  353. package/dist/ui/components/line-input.js +3 -1
  354. package/dist/ui/components/prompt-input.d.ts +11 -8
  355. package/dist/ui/components/prompt-input.js +15 -13
  356. package/dist/ui/components/selection-copy.d.ts +2 -0
  357. package/dist/ui/components/selection-copy.js +13 -0
  358. package/dist/ui/components/spans.js +2 -2
  359. package/dist/ui/components/submitted-prompt.d.ts +9 -6
  360. package/dist/ui/components/submitted-prompt.js +20 -12
  361. package/dist/ui/components/surface.js +4 -2
  362. package/dist/ui/components/text.d.ts +3 -6
  363. package/dist/ui/components/text.js +6 -8
  364. package/dist/ui/components/transcript-viewport.d.ts +9 -2
  365. package/dist/ui/components/transcript-viewport.js +176 -55
  366. package/dist/ui/components/value-menu.d.ts +6 -3
  367. package/dist/ui/components/value-menu.js +6 -5
  368. package/dist/ui/settings/declarations.d.ts +90 -16
  369. package/dist/ui/settings/declarations.js +67 -14
  370. package/dist/ui/settings/early-accent.d.ts +81 -0
  371. package/dist/ui/settings/early-accent.js +50 -0
  372. package/dist/ui/settings/index.d.ts +4 -2
  373. package/dist/ui/settings/index.js +2 -1
  374. package/dist/ui/settings/manager.d.ts +16 -3
  375. package/dist/ui/settings/manager.js +122 -33
  376. package/dist/ui/settings/migrations.d.ts +6 -0
  377. package/dist/ui/settings/migrations.js +73 -0
  378. package/dist/ui/settings/profile-document.d.ts +26 -0
  379. package/dist/ui/settings/profile-document.js +164 -0
  380. package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
  381. package/dist/ui/settings/progress-palette.generated.js +139 -0
  382. package/dist/ui/settings/sections.d.ts +4 -0
  383. package/dist/ui/settings/sections.js +9 -3
  384. package/docs/architecture/boundaries.md +25 -10
  385. package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
  386. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
  387. package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
  388. package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
  389. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +70 -0
  390. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +32 -0
  391. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +115 -0
  392. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +48 -0
  393. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +125 -0
  394. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +56 -0
  395. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +174 -0
  396. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +18 -0
  397. package/docs/architecture/internal-naming.md +3 -1
  398. package/docs/architecture/process-guardian-provenance.md +18 -10
  399. package/docs/architecture/project-structure.md +8 -0
  400. package/docs/architecture/resident-tabs-requirements.md +18 -0
  401. package/docs/architecture/resident-tabs.md +648 -0
  402. package/docs/architecture/response-copy-delivery.md +1 -1
  403. package/docs/architecture/terminal-host-proof-gate.md +3 -1
  404. package/docs/architecture/terminal-host-provenance.md +16 -4
  405. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  406. package/docs/architecture/tool-image-presentation.md +2 -1
  407. package/docs/architecture/toolchain.md +11 -9
  408. package/docs/ci-release-runbook.md +14 -7
  409. package/docs/features/launch-profiles.md +11 -8
  410. package/docs/features/prompt-history.md +41 -20
  411. package/docs/manual-resident-tabs-acceptance.md +51 -0
  412. package/docs/openspec-archive-automation.md +49 -22
  413. package/docs/releases/0.2.6.md +44 -0
  414. package/docs/validation.md +49 -9
  415. package/package.json +19 -6
  416. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
  417. package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
  418. package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
  419. package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
  420. package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
  421. package/dist/native/darwin-arm64/process-guardian +0 -0
  422. package/dist/native/linux-x64/process-guardian +0 -0
  423. package/dist/native/win32-x64/process-guardian.exe +0 -0
@@ -1,6 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { chmod, lstat, mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
3
- import { dirname, resolve } from "node:path";
2
+ import { chmod, lstat, mkdir, readFile, readdir, realpath, rename, rm, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, resolve } from "node:path";
4
4
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
5
  import { immutablePlatformPolicy } from "./immutable-platform.js";
6
6
  export const DEPENDENCY_CERTIFICATIONS_DIRECTORY = "dependency-certifications";
@@ -194,7 +194,8 @@ async function releasePublicationLock(path, token) {
194
194
  while (true) {
195
195
  try {
196
196
  if (!retired) {
197
- await assertPublicationLockOwner(path, token);
197
+ if (!await assertPublicationLockOwner(path, token))
198
+ return;
198
199
  await rename(path, released);
199
200
  retired = true;
200
201
  }
@@ -218,24 +219,58 @@ async function releasePublicationLock(path, token) {
218
219
  }
219
220
  /** Ownership uncertainty is never authority to retire a missing, linked, or replaced generation. */
220
221
  async function assertPublicationLockOwner(path, token) {
221
- try {
222
- const metadata = await lstat(path);
223
- if (!metadata.isDirectory() || metadata.isSymbolicLink() || await realpath(path) !== path)
224
- throw new Error("invalid lock directory");
225
- const ownerPath = resolve(path, "owner.json");
226
- const ownerMetadata = await lstat(ownerPath);
227
- if (!ownerMetadata.isFile() || ownerMetadata.isSymbolicLink() || await realpath(ownerPath) !== ownerPath)
228
- throw new Error("invalid owner file");
229
- const owner = JSON.parse(await readFile(ownerPath, "utf8"));
230
- if (!owner || typeof owner !== "object" || !("pid" in owner) || !("token" in owner)
231
- || owner.pid !== process.pid || owner.token !== token)
232
- throw new Error("owner generation differs");
222
+ for (let attempt = 1;; attempt += 1) {
223
+ try {
224
+ const metadata = await lstat(path);
225
+ if (!metadata.isDirectory() || metadata.isSymbolicLink() || await realpath(path) !== path)
226
+ throw new Error("invalid lock directory");
227
+ const ownerPath = resolve(path, "owner.json");
228
+ const ownerMetadata = await lstat(ownerPath);
229
+ if (!ownerMetadata.isFile() || ownerMetadata.isSymbolicLink() || await realpath(ownerPath) !== ownerPath)
230
+ throw new Error("invalid owner file");
231
+ const owner = JSON.parse(await readFile(ownerPath, "utf8"));
232
+ if (!owner || typeof owner !== "object" || !("pid" in owner) || !("token" in owner)
233
+ || owner.pid !== process.pid || owner.token !== token)
234
+ throw new Error("owner generation differs");
235
+ return true;
236
+ }
237
+ catch (error) {
238
+ // Platform: Windows can briefly hide a directory immediately after a successful rename
239
+ // when independent publishers are contending. Re-read the complete identity; never treat
240
+ // absence as ownership and never retire a generation whose token differs.
241
+ if (hasCode(error, "ENOENT") && attempt < 3) {
242
+ await new Promise(resolvePromise => setTimeout(resolvePromise, 20 * attempt));
243
+ continue;
244
+ }
245
+ // Concurrency: a delayed abandoned-owner reclaimer can move a successor generation after
246
+ // reading the predecessor. If our exact token is now in a managed tombstone, no active
247
+ // generation belongs to this release call and returning without mutation is fail-safe.
248
+ if (hasCode(error, "ENOENT") && await publicationLockWasRetired(path, token))
249
+ return false;
250
+ if (isReleaseContention(error))
251
+ throw error;
252
+ throw new Error("publication lease release ownership could not be verified", { cause: error });
253
+ }
233
254
  }
234
- catch (error) {
235
- if (isReleaseContention(error))
236
- throw error;
237
- throw new Error("publication lease release ownership could not be verified", { cause: error });
255
+ }
256
+ async function publicationLockWasRetired(path, token) {
257
+ const directory = dirname(path);
258
+ const prefix = `${basename(path)}.`;
259
+ const entries = await readdir(directory, { withFileTypes: true });
260
+ if (entries.length > 256)
261
+ return false;
262
+ for (const entry of entries) {
263
+ if (!entry.isDirectory() || entry.isSymbolicLink() || !entry.name.startsWith(prefix)
264
+ || (!entry.name.includes(".abandoned-") && !entry.name.includes(".released-")))
265
+ continue;
266
+ const ownerPath = resolve(directory, entry.name, "owner.json");
267
+ const owner = await readFile(ownerPath, "utf8")
268
+ .then(source => JSON.parse(source))
269
+ .catch(() => null);
270
+ if (owner?.pid === process.pid && owner.token === token)
271
+ return true;
238
272
  }
273
+ return false;
239
274
  }
240
275
  function isReleaseContention(error) {
241
276
  return ["EPERM", "EACCES", "EBUSY"].some(code => hasCode(error, code));
@@ -0,0 +1,12 @@
1
+ type UiAccentColor = "blue" | "purple" | "cyan" | "green" | "orange" | "pink";
2
+ export type EarlyAccentAppearance = "dark" | "light";
3
+ export type EarlyAccentMode = "truecolor" | "256color";
4
+ /** Read only global profile data, never project settings or the interactive resource pipeline. */
5
+ export declare function resolveEarlyAccentColor(environment?: NodeJS.ProcessEnv, home?: () => string): UiAccentColor;
6
+ export declare function earlyAccentPalette(color: UiAccentColor, appearance?: EarlyAccentAppearance, mode?: EarlyAccentMode): {
7
+ readonly accent: string;
8
+ readonly border: string;
9
+ };
10
+ export declare function earlyTerminalAppearance(environment?: NodeJS.ProcessEnv): EarlyAccentAppearance;
11
+ export declare function earlyTerminalColorMode(environment?: NodeJS.ProcessEnv): EarlyAccentMode;
12
+ export {};
@@ -0,0 +1,59 @@
1
+ import { readFileSync, statSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { isAbsolute, join } from "node:path";
4
+ import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
+ import { SHARED_PROGRESS_PALETTE } from "./progress-palette.generated.js";
6
+ const MAX_SETTINGS_BYTES = 256 * 1024;
7
+ /** Read only global profile data, never project settings or the interactive resource pipeline. */
8
+ export function resolveEarlyAccentColor(environment = process.env, home = homedir) {
9
+ try {
10
+ const selectedHome = environment[PRODUCT_IDENTITY.environment.profileHome] ?? home();
11
+ if (!isAbsolute(selectedHome) || selectedHome.includes("\0"))
12
+ return "blue";
13
+ const file = join(selectedHome, PRODUCT_IDENTITY.state.piAgentProfile, "settings.json");
14
+ if (statSync(file).size > MAX_SETTINGS_BYTES)
15
+ return "blue";
16
+ const raw = readFileSync(file, "utf8");
17
+ if (Buffer.byteLength(raw, "utf8") > MAX_SETTINGS_BYTES)
18
+ return "blue";
19
+ const root = JSON.parse(raw.replace(/^\uFEFF/u, ""));
20
+ if (!isRecord(root))
21
+ return "blue";
22
+ const namespace = root[PRODUCT_IDENTITY.commandName];
23
+ if (!isRecord(namespace))
24
+ return "blue";
25
+ const value = namespace.accentColor;
26
+ if (value === "default")
27
+ return "purple"; // Compatibility: preserve explicitly saved legacy defaults.
28
+ return isAccentColor(value) ? value : "blue";
29
+ }
30
+ catch {
31
+ return "blue";
32
+ }
33
+ }
34
+ export function earlyAccentPalette(color, appearance = "dark", mode = "truecolor") {
35
+ return SHARED_PROGRESS_PALETTE[color][appearance][mode];
36
+ }
37
+ export function earlyTerminalAppearance(environment = process.env) {
38
+ const index = Number.parseInt((environment.COLORFGBG ?? "").split(";").at(-1) ?? "", 10);
39
+ return Number.isInteger(index) && (index === 7 || index === 15 || index >= 231) ? "light" : "dark";
40
+ }
41
+ export function earlyTerminalColorMode(environment = process.env) {
42
+ if (environment.PI_TRUE_COLOR === "1")
43
+ return "truecolor";
44
+ if (environment.PI_TRUE_COLOR === "0")
45
+ return "256color";
46
+ const program = (environment.TERM_PROGRAM ?? "").toLowerCase();
47
+ const known = ["kitty", "ghostty", "wezterm", "rex", "warpterminal", "iterm.app", "alacritty", "vscode", "zed"];
48
+ const trueColor = /^(truecolor|24bit)$/iu.test(environment.COLORTERM ?? "")
49
+ || (environment.TERM ?? "").endsWith("-direct")
50
+ || process.platform === "win32" || environment.WT_SESSION !== undefined
51
+ || known.includes(program);
52
+ return trueColor ? "truecolor" : "256color";
53
+ }
54
+ function isRecord(value) {
55
+ return value !== null && typeof value === "object" && !Array.isArray(value);
56
+ }
57
+ function isAccentColor(value) {
58
+ return typeof value === "string" && Object.hasOwn(SHARED_PROGRESS_PALETTE, value);
59
+ }
@@ -15,13 +15,13 @@ export { PRODUCT_PACKAGE_NAME, createReleaseIdentity, deriveReleaseIdentity, dig
15
15
  export type { DiscoverReleasePayloadOptions, DiscoveredReleasePayload, ReleaseFileIdentity, ReleaseIdentity } from "./release.js";
16
16
  export { collectRelease, prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
17
17
  export type { ReleaseCleanupLimits, ReleaseCleanupOperations, ReleaseCleanupOptions, ReleaseCleanupResult, ReleaseCleanupWorkerOptions } from "./release-gc.js";
18
- export { RELEASE_MANIFEST_FILENAME, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
18
+ export { RELEASE_MANIFEST_FILENAME, ReleaseRepairUnavailableError, assertCertifiedFilesPresent, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
19
19
  export type { CertifiedReleaseRecord, MaterializeReleaseOptions, MaterializedRelease, ReadCertifiedReleaseManifestOptions, ReleaseContentOperation, ReleaseContentOperationEvent, VerifyMaterializedReleaseOptions, } from "./release-store.js";
20
20
  export { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument, restartSealDigest } from "./restart-certification.js";
21
21
  export type { RestartSeal, RestartValidationEvent } from "./restart-certification.js";
22
22
  export { STABLE_RELEASE_SCHEMA, createStableReleaseEvidence, verifyStableRegistry } from "./stable-release.js";
23
23
  export type { StableRegistryState, StableRegistryVerificationOptions, StableReleaseEvidence, StableReleaseEvidenceInput } from "./stable-release.js";
24
- export { PACKAGE_UNLOCK_PATIENCE_MS, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
24
+ export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
25
25
  export type { ProcessRequest, ProcessResult, SelfUpdateOptions, UpdateActivationPhase, UpdateChannel, UpdateFileMetadata, UpdateFileSystem, UpdateLifecycleCoordinator, UpdateMaterializationProgress, UpdateMeasuredPhase, UpdateOutput, UpdateOwnershipAction, UpdatePackageReplacementInput, UpdatePerformanceEvidence, UpdatePhaseTimingEvent, UpdateProcessRunner, UpdateTransactionJournal, UpdateUnlockPatience, } from "./update.js";
26
26
  export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
27
27
  export type { UpdateActivationCallbacks, UpdateActivationEvent, UpdateActivationRequest } from "./update-activation.js";
@@ -7,10 +7,10 @@ export { listRecordedEndpoints, liveReleaseIds, probeOwnership, readEndpointMeta
7
7
  export { cleanupProvenIdleOwner, cleanupVerifiedOwner, processIsAlive } from "./process-cleanup.js";
8
8
  export { PRODUCT_PACKAGE_NAME, createReleaseIdentity, deriveReleaseIdentity, digestManifestFiles, discoverReleasePayload, packageRootFromModule, releaseFileIdentity, resolveWithin, } from "./release.js";
9
9
  export { collectRelease, prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
10
- export { RELEASE_MANIFEST_FILENAME, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
10
+ export { RELEASE_MANIFEST_FILENAME, ReleaseRepairUnavailableError, assertCertifiedFilesPresent, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
11
11
  export { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument, restartSealDigest } from "./restart-certification.js";
12
12
  export { STABLE_RELEASE_SCHEMA, createStableReleaseEvidence, verifyStableRegistry } from "./stable-release.js";
13
- export { PACKAGE_UNLOCK_PATIENCE_MS, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
13
+ export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
14
14
  export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
15
15
  export { selectSupervisorLaunchReleaseId, selectUpdateLaunchRelease } from "./update-launch.js";
16
16
  export { UPDATE_RECOVERY_SCHEMA, cleanupUpdateRecoveryCapsules, inspectUpdateLauncherSet, npmPrefixForGlobalRoot, prepareUpdateRecoveryCapsule, readUpdateRecoveryCapsule, removeUpdateRecoveryCapsule, runProtectedPackageReplacement, updateLauncherPaths, updateNpmInstallArguments, } from "./update-recovery.js";
@@ -1,5 +1,6 @@
1
1
  /** Published release channels: stable `X.Y.Z` on dist-tag `latest`, development `X.Y.Z-dev.N` on `next`. */
2
2
  export type ReleaseChannel = "stable" | "development";
3
+ export type StartupUpdateMode = "auto" | "notify" | "no";
3
4
  export interface DistTagVersions {
4
5
  readonly release: string | null;
5
6
  readonly develop: string | null;
@@ -20,6 +21,15 @@ export interface AvailableRelease {
20
21
  }
21
22
  export declare const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
22
23
  export declare const UPDATE_CHECK_INTERVAL_MS: number;
24
+ /** One published version with the pull request its manifest records, when it records one. */
25
+ export interface PublishedVersion {
26
+ readonly version: string;
27
+ readonly pullRequest: number | null;
28
+ }
29
+ export interface PublishedVersions {
30
+ readonly versions: readonly PublishedVersion[];
31
+ readonly error: string | null;
32
+ }
23
33
  /**
24
34
  * The channel a running version updates on, or null for a version that was never published:
25
35
  * a bare `X.Y.Z-dev` only comes from a source checkout, which has nothing to update to.
@@ -31,6 +41,18 @@ export declare function distTagsUrl(registry?: string): string;
31
41
  /** Read `latest` (required) and `next` (optional) from a dist-tags object. */
32
42
  export declare function parseDistTags(metadata: unknown, source: string): DistTagVersions;
33
43
  export declare function queryRegistryDistTags(fetcher: RegistryFetcher, registry?: string): Promise<DistTagVersions>;
44
+ export declare function packageDocumentUrl(registry?: string): string;
45
+ /** The pull request a published or installed manifest records under `publication.pullRequest`, when valid. */
46
+ export declare function recordedPullRequest(manifest: unknown): number | null;
47
+ /**
48
+ * Every published version with its recorded pull request, read from the registry's full package
49
+ * document: its per-version manifests keep the publication metadata that version lists and the
50
+ * abbreviated install document leave out.
51
+ */
52
+ export declare function queryPublishedVersions(fetcher: RegistryFetcher, registry?: string): Promise<PublishedVersions>;
53
+ export declare function parsePublishedVersions(document: unknown): PublishedVersions;
54
+ /** Forget the startup release check so the next interactive launch asks the registry again. */
55
+ export declare function invalidateReleaseCheckCache(configDir: string): Promise<void>;
34
56
  export declare function unavailableDistTags(error: string): DistTagVersions;
35
57
  export declare function createRegistryFetcher(timeoutMs: number): RegistryFetcher;
36
58
  export interface StartupReleaseCheckOptions {
@@ -39,8 +61,8 @@ export interface StartupReleaseCheckOptions {
39
61
  readonly environment?: NodeJS.ProcessEnv;
40
62
  /** Whether standard output is an interactive terminal. */
41
63
  readonly interactive: boolean;
42
- /** The bare-A1 `updateCheck` setting; comparison profiles omit it. */
43
- readonly settingEnabled?: boolean;
64
+ /** The bare-A1 `updateCheck` setting; comparison profiles omit it and use auto. */
65
+ readonly settingMode?: StartupUpdateMode;
44
66
  readonly fetcher?: RegistryFetcher;
45
67
  readonly now?: () => number;
46
68
  }
@@ -9,6 +9,7 @@ const STARTUP_FETCH_TIMEOUT_MS = 3_000;
9
9
  const CACHE_FILENAME = "update-check.json";
10
10
  const CACHE_VERSION = 1;
11
11
  const MAX_CACHE_BYTES = 4096;
12
+ const MAX_PACKAGE_DOCUMENT_BYTES = 32 * 1024 * 1024;
12
13
  const DEVELOPMENT_BUILD = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)-dev\.(0|[1-9]\d*)$/u;
13
14
  const RELEASE_PAGE = "https://github.com/timurproko/a1/releases/tag/v";
14
15
  /**
@@ -57,6 +58,55 @@ export async function queryRegistryDistTags(fetcher, registry) {
57
58
  return unavailableDistTags(errorMessage(error));
58
59
  }
59
60
  }
61
+ export function packageDocumentUrl(registry = DEFAULT_NPM_REGISTRY) {
62
+ return `${registry.replace(/\/+$/u, "")}/${encodeURIComponent(PRODUCT_TEXT.packageName)}`;
63
+ }
64
+ /** The pull request a published or installed manifest records under `publication.pullRequest`, when valid. */
65
+ export function recordedPullRequest(manifest) {
66
+ if (typeof manifest !== "object" || manifest === null)
67
+ return null;
68
+ const publication = manifest.publication;
69
+ if (typeof publication !== "object" || publication === null)
70
+ return null;
71
+ const value = publication.pullRequest;
72
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
73
+ }
74
+ /**
75
+ * Every published version with its recorded pull request, read from the registry's full package
76
+ * document: its per-version manifests keep the publication metadata that version lists and the
77
+ * abbreviated install document leave out.
78
+ */
79
+ export async function queryPublishedVersions(fetcher, registry) {
80
+ try {
81
+ const response = await fetcher(packageDocumentUrl(registry));
82
+ if (!response.ok)
83
+ return { versions: [], error: `registry responded with status ${response.status}` };
84
+ const text = await response.text();
85
+ if (text.length > MAX_PACKAGE_DOCUMENT_BYTES)
86
+ return { versions: [], error: "registry package document is oversized" };
87
+ return parsePublishedVersions(JSON.parse(text));
88
+ }
89
+ catch (error) {
90
+ return { versions: [], error: errorMessage(error) };
91
+ }
92
+ }
93
+ export function parsePublishedVersions(document) {
94
+ if (typeof document !== "object" || document === null || Array.isArray(document)) {
95
+ return { versions: [], error: "registry returned a non-object package document" };
96
+ }
97
+ const manifests = document.versions;
98
+ if (typeof manifests !== "object" || manifests === null || Array.isArray(manifests)) {
99
+ return { versions: [], error: "registry package document lists no versions" };
100
+ }
101
+ const versions = Object.entries(manifests)
102
+ .filter(([version]) => validSemver(version) === version)
103
+ .map(([version, manifest]) => ({ version, pullRequest: recordedPullRequest(manifest) }));
104
+ return { versions, error: null };
105
+ }
106
+ /** Forget the startup release check so the next interactive launch asks the registry again. */
107
+ export async function invalidateReleaseCheckCache(configDir) {
108
+ await rm(join(configDir, CACHE_FILENAME), { force: true });
109
+ }
60
110
  export function unavailableDistTags(error) {
61
111
  return { release: null, develop: null, error };
62
112
  }
@@ -74,7 +124,7 @@ export function startupReleaseCheckSkipReason(options) {
74
124
  return "ci";
75
125
  if (!options.interactive)
76
126
  return "not-interactive";
77
- if (options.settingEnabled === false)
127
+ if (options.settingMode === "no")
78
128
  return "disabled-by-setting";
79
129
  if (releaseChannelOf(options.runningVersion) === null)
80
130
  return "unpublished-version";
@@ -1,5 +1,139 @@
1
1
  /**
2
- * Generated by scripts/pi/sync-progress-palette.ts from @earendil-works/pi-coding-agent 1.1.0
3
- * (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7. Do not edit directly.
2
+ * Generated by scripts/pi/sync-progress-palette.ts from A1's named accent projection
3
+ * over pinned Pi 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0. Do not edit directly.
4
4
  */
5
- export declare const SHARED_PROGRESS_ACCENT_ANSI = "\u001B[38;2;167;152;215m";
5
+ export declare const SHARED_PROGRESS_PALETTE: Readonly<{
6
+ blue: {
7
+ dark: {
8
+ truecolor: {
9
+ accent: string;
10
+ border: string;
11
+ };
12
+ "256color": {
13
+ accent: string;
14
+ border: string;
15
+ };
16
+ };
17
+ light: {
18
+ truecolor: {
19
+ accent: string;
20
+ border: string;
21
+ };
22
+ "256color": {
23
+ accent: string;
24
+ border: string;
25
+ };
26
+ };
27
+ };
28
+ purple: {
29
+ dark: {
30
+ truecolor: {
31
+ accent: string;
32
+ border: string;
33
+ };
34
+ "256color": {
35
+ accent: string;
36
+ border: string;
37
+ };
38
+ };
39
+ light: {
40
+ truecolor: {
41
+ accent: string;
42
+ border: string;
43
+ };
44
+ "256color": {
45
+ accent: string;
46
+ border: string;
47
+ };
48
+ };
49
+ };
50
+ cyan: {
51
+ dark: {
52
+ truecolor: {
53
+ accent: string;
54
+ border: string;
55
+ };
56
+ "256color": {
57
+ accent: string;
58
+ border: string;
59
+ };
60
+ };
61
+ light: {
62
+ truecolor: {
63
+ accent: string;
64
+ border: string;
65
+ };
66
+ "256color": {
67
+ accent: string;
68
+ border: string;
69
+ };
70
+ };
71
+ };
72
+ green: {
73
+ dark: {
74
+ truecolor: {
75
+ accent: string;
76
+ border: string;
77
+ };
78
+ "256color": {
79
+ accent: string;
80
+ border: string;
81
+ };
82
+ };
83
+ light: {
84
+ truecolor: {
85
+ accent: string;
86
+ border: string;
87
+ };
88
+ "256color": {
89
+ accent: string;
90
+ border: string;
91
+ };
92
+ };
93
+ };
94
+ orange: {
95
+ dark: {
96
+ truecolor: {
97
+ accent: string;
98
+ border: string;
99
+ };
100
+ "256color": {
101
+ accent: string;
102
+ border: string;
103
+ };
104
+ };
105
+ light: {
106
+ truecolor: {
107
+ accent: string;
108
+ border: string;
109
+ };
110
+ "256color": {
111
+ accent: string;
112
+ border: string;
113
+ };
114
+ };
115
+ };
116
+ pink: {
117
+ dark: {
118
+ truecolor: {
119
+ accent: string;
120
+ border: string;
121
+ };
122
+ "256color": {
123
+ accent: string;
124
+ border: string;
125
+ };
126
+ };
127
+ light: {
128
+ truecolor: {
129
+ accent: string;
130
+ border: string;
131
+ };
132
+ "256color": {
133
+ accent: string;
134
+ border: string;
135
+ };
136
+ };
137
+ };
138
+ }>;
139
+ export declare const SHARED_PROGRESS_ACCENT_ANSI: string;
@@ -1,5 +1,139 @@
1
1
  /**
2
- * Generated by scripts/pi/sync-progress-palette.ts from @earendil-works/pi-coding-agent 1.1.0
3
- * (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7. Do not edit directly.
2
+ * Generated by scripts/pi/sync-progress-palette.ts from A1's named accent projection
3
+ * over pinned Pi 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0. Do not edit directly.
4
4
  */
5
- export const SHARED_PROGRESS_ACCENT_ANSI = "\u001b[38;2;167;152;215m";
5
+ export const SHARED_PROGRESS_PALETTE = Object.freeze({
6
+ "blue": {
7
+ "dark": {
8
+ "truecolor": {
9
+ "accent": "\u001b[38;2;130;160;241m",
10
+ "border": "\u001b[38;2;116;102;197m"
11
+ },
12
+ "256color": {
13
+ "accent": "\u001b[38;5;111m",
14
+ "border": "\u001b[38;5;98m"
15
+ }
16
+ },
17
+ "light": {
18
+ "truecolor": {
19
+ "accent": "\u001b[38;2;63;96;226m",
20
+ "border": "\u001b[38;2;83;67;154m"
21
+ },
22
+ "256color": {
23
+ "accent": "\u001b[38;5;62m",
24
+ "border": "\u001b[38;5;60m"
25
+ }
26
+ }
27
+ },
28
+ "purple": {
29
+ "dark": {
30
+ "truecolor": {
31
+ "accent": "\u001b[38;2;167;152;215m",
32
+ "border": "\u001b[38;2;105;115;167m"
33
+ },
34
+ "256color": {
35
+ "accent": "\u001b[38;5;140m",
36
+ "border": "\u001b[38;5;61m"
37
+ }
38
+ },
39
+ "light": {
40
+ "truecolor": {
41
+ "accent": "\u001b[38;2;116;89;180m",
42
+ "border": "\u001b[38;2;68;77;130m"
43
+ },
44
+ "256color": {
45
+ "accent": "\u001b[38;5;97m",
46
+ "border": "\u001b[38;5;60m"
47
+ }
48
+ }
49
+ },
50
+ "cyan": {
51
+ "dark": {
52
+ "truecolor": {
53
+ "accent": "\u001b[38;2;93;179;186m",
54
+ "border": "\u001b[38;2;74;128;146m"
55
+ },
56
+ "256color": {
57
+ "accent": "\u001b[38;5;73m",
58
+ "border": "\u001b[38;5;66m"
59
+ }
60
+ },
61
+ "light": {
62
+ "truecolor": {
63
+ "accent": "\u001b[38;2;40;122;129m",
64
+ "border": "\u001b[38;2;40;89;106m"
65
+ },
66
+ "256color": {
67
+ "accent": "\u001b[38;5;30m",
68
+ "border": "\u001b[38;5;23m"
69
+ }
70
+ }
71
+ },
72
+ "green": {
73
+ "dark": {
74
+ "truecolor": {
75
+ "accent": "\u001b[38;2;104;183;141m",
76
+ "border": "\u001b[38;2;75;132;120m"
77
+ },
78
+ "256color": {
79
+ "accent": "\u001b[38;5;72m",
80
+ "border": "\u001b[38;5;66m"
81
+ }
82
+ },
83
+ "light": {
84
+ "truecolor": {
85
+ "accent": "\u001b[38;2;51;126;88m",
86
+ "border": "\u001b[38;2;41;93;82m"
87
+ },
88
+ "256color": {
89
+ "accent": "\u001b[38;5;65m",
90
+ "border": "\u001b[38;5;23m"
91
+ }
92
+ }
93
+ },
94
+ "orange": {
95
+ "dark": {
96
+ "truecolor": {
97
+ "accent": "\u001b[38;2;231;135;83m",
98
+ "border": "\u001b[38;2;178;89;79m"
99
+ },
100
+ "256color": {
101
+ "accent": "\u001b[38;5;173m",
102
+ "border": "\u001b[38;5;131m"
103
+ }
104
+ },
105
+ "light": {
106
+ "truecolor": {
107
+ "accent": "\u001b[38;2;174;80;16m",
108
+ "border": "\u001b[38;2;133;57;49m"
109
+ },
110
+ "256color": {
111
+ "accent": "\u001b[38;5;130m",
112
+ "border": "\u001b[38;5;95m"
113
+ }
114
+ }
115
+ },
116
+ "pink": {
117
+ "dark": {
118
+ "truecolor": {
119
+ "accent": "\u001b[38;2;223;122;199m",
120
+ "border": "\u001b[38;2;150;91;171m"
121
+ },
122
+ "256color": {
123
+ "accent": "\u001b[38;5;176m",
124
+ "border": "\u001b[38;5;97m"
125
+ }
126
+ },
127
+ "light": {
128
+ "truecolor": {
129
+ "accent": "\u001b[38;2;178;56;153m",
130
+ "border": "\u001b[38;2;114;61;131m"
131
+ },
132
+ "256color": {
133
+ "accent": "\u001b[38;5;132m",
134
+ "border": "\u001b[38;5;60m"
135
+ }
136
+ }
137
+ }
138
+ });
139
+ export const SHARED_PROGRESS_ACCENT_ANSI = SHARED_PROGRESS_PALETTE.blue.dark.truecolor.accent;
@@ -2,6 +2,7 @@ import { rename, rm } from "node:fs/promises";
2
2
  import { CohortStateStore, type ExternalReleaseHold, type OrphanReleaseDisposition } from "./cohort-state.js";
3
3
  import type { ProductPaths } from "../lifecycle/index.js";
4
4
  import { UpdateTransactionStore } from "./update-transaction.js";
5
+ import { type ResidentReleaseHoldReport } from "../resident-tabs/index.js";
5
6
  export interface ReleaseCleanupLimits {
6
7
  readonly maxItems: number;
7
8
  readonly maxDurationMs: number;
@@ -21,6 +22,8 @@ export interface ReleaseCleanupOptions {
21
22
  readonly operations?: ReleaseCleanupOperations;
22
23
  /** Process-start seam for scheduler and continuation tests. */
23
24
  readonly workerSpawner?: (entry: string, environment: NodeJS.ProcessEnv) => Promise<void>;
25
+ /** Resident-tab inspection seam; the default asks a verified installed terminal host. */
26
+ readonly residentHolds?: (dataDir: string, releaseRoots: readonly string[]) => Promise<ResidentReleaseHoldReport>;
24
27
  }
25
28
  export interface ReleaseCleanupWorkerOptions {
26
29
  readonly cleanup?: ReleaseCleanupOptions;