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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/README.md +11 -36
  2. package/bin/cli.js +2 -17
  3. package/bin/ui.js +10 -51
  4. package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
  5. package/dist/app/session-shell/clipboard-image.d.ts +0 -1
  6. package/dist/app/session-shell/clipboard-image.js +1 -1
  7. package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
  8. package/dist/app/session-shell/dialog-coordinator.js +3 -4
  9. package/dist/app/session-shell/dock-chrome.d.ts +11 -6
  10. package/dist/app/session-shell/dock-chrome.js +5 -8
  11. package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
  12. package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
  13. package/dist/app/session-shell/exit-notice.d.ts +3 -3
  14. package/dist/app/session-shell/exit-notice.js +10 -10
  15. package/dist/app/session-shell/extension-surface.d.ts +8 -7
  16. package/dist/app/session-shell/helper-pool.d.ts +3 -4
  17. package/dist/app/session-shell/helper-pool.js +1 -1
  18. package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
  19. package/dist/app/session-shell/image-preparation.d.ts +0 -2
  20. package/dist/app/session-shell/image-preparation.js +2 -2
  21. package/dist/app/session-shell/image-source.d.ts +2 -3
  22. package/dist/app/session-shell/image-source.js +2 -2
  23. package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
  24. package/dist/app/session-shell/input-surface-switch.js +1 -2
  25. package/dist/app/session-shell/login-interaction.d.ts +5 -4
  26. package/dist/app/session-shell/login-interaction.js +2 -3
  27. package/dist/app/session-shell/paste-executor.d.ts +4 -8
  28. package/dist/app/session-shell/paste-executor.js +2 -2
  29. package/dist/app/session-shell/paste-protocol.d.ts +2 -2
  30. package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
  31. package/dist/app/session-shell/path-chip-presentation.js +3 -3
  32. package/dist/app/session-shell/prompt-chips.d.ts +8 -7
  33. package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
  34. package/dist/app/session-shell/prompt-submission.d.ts +7 -6
  35. package/dist/app/session-shell/prompt-submission.js +7 -28
  36. package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
  37. package/dist/app/session-shell/quit-outro-effects.js +1 -4
  38. package/dist/app/session-shell/quit-outro.d.ts +9 -12
  39. package/dist/app/session-shell/quit-outro.js +11 -11
  40. package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
  41. package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
  42. package/dist/app/session-shell/response-copy-transport.js +2 -3
  43. package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
  44. package/dist/app/session-shell/session-lifecycle.js +2 -4
  45. package/dist/app/session-shell/session-shell-root.d.ts +74 -120
  46. package/dist/app/session-shell/session-shell-root.js +82 -115
  47. package/dist/app/session-shell/session-shell.d.ts +13 -16
  48. package/dist/app/session-shell/session-shell.js +149 -314
  49. package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
  50. package/dist/app/session-shell/session-viewport-controller.js +5 -8
  51. package/dist/app/session-shell/settings-bindings.d.ts +24 -2
  52. package/dist/app/session-shell/settings-bindings.js +24 -0
  53. package/dist/app/session-shell/share-operation.d.ts +3 -3
  54. package/dist/app/session-shell/share-operation.js +4 -6
  55. package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
  56. package/dist/app/session-shell/shell-clipboard.js +119 -0
  57. package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
  58. package/dist/app/session-shell/shell-editor-factory.js +13 -15
  59. package/dist/app/session-shell/shell-host.d.ts +16 -17
  60. package/dist/app/session-shell/shell-host.js +20 -37
  61. package/dist/app/session-shell/shell-layout.d.ts +2 -2
  62. package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
  63. package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
  64. package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
  65. package/dist/app/session-shell/suggestion-surface.js +1 -1
  66. package/dist/app/session-shell/system-clipboard.d.ts +2 -14
  67. package/dist/app/session-shell/system-clipboard.js +2 -7
  68. package/dist/app/session-shell/transcript-document.d.ts +12 -10
  69. package/dist/app/session-shell/transcript-document.js +15 -41
  70. package/dist/app/session-shell/viewport-layout.d.ts +2 -2
  71. package/dist/app/session-shell/workflow-output.d.ts +5 -3
  72. package/dist/app/session-shell/workflow-output.js +13 -15
  73. package/dist/app/session-shell/workflow-router.d.ts +1 -3
  74. package/dist/app/session-shell/workflow-router.js +1 -4
  75. package/dist/cli/dispatch.d.ts +1 -11
  76. package/dist/cli/dispatch.js +5 -92
  77. package/dist/cli/package-messages.d.ts +0 -1
  78. package/dist/cli/package-messages.js +1 -1
  79. package/dist/cli/session-context.d.ts +1 -1
  80. package/dist/cli/session-context.js +5 -7
  81. package/dist/cli/uninstall.d.ts +4 -7
  82. package/dist/cli/uninstall.js +6 -35
  83. package/dist/cli/version-stats.js +4 -7
  84. package/dist/composition/owned-settings.d.ts +2 -2
  85. package/dist/composition/owned-settings.js +0 -4
  86. package/dist/composition/owned-ui.d.ts +3 -25
  87. package/dist/composition/owned-ui.js +37 -113
  88. package/dist/composition/reference-selection-options.d.ts +1 -1
  89. package/dist/composition/reference-selection-options.js +1 -1
  90. package/dist/composition/release-update-observation.d.ts +4 -4
  91. package/dist/composition/release-update-observation.js +17 -47
  92. package/dist/composition/session-backend.d.ts +0 -1
  93. package/dist/composition/session-runtime-registry.d.ts +5 -4
  94. package/dist/composition/settings-route-host.d.ts +0 -7
  95. package/dist/composition/settings-route-host.js +7 -20
  96. package/dist/composition/settings-search-input.d.ts +2 -1
  97. package/dist/composition/startup-route.d.ts +2 -3
  98. package/dist/composition/startup-route.js +2 -3
  99. package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
  100. package/dist/contracts/owned-ui/index.d.ts +2 -1
  101. package/dist/contracts/owned-ui/model.d.ts +0 -3
  102. package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
  103. package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
  104. package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
  105. package/dist/contracts/presentation/component.d.ts +17 -0
  106. package/dist/contracts/presentation/component.js +8 -0
  107. package/dist/contracts/presentation/index.d.ts +6 -15
  108. package/dist/contracts/presentation/index.js +2 -0
  109. package/dist/contracts/presentation/terminal.d.ts +290 -0
  110. package/dist/contracts/presentation/theme.d.ts +46 -0
  111. package/dist/features/launch/development-launch.js +1 -2
  112. package/dist/features/launch/index.d.ts +1 -1
  113. package/dist/features/launch/intent.d.ts +1 -3
  114. package/dist/features/launch/intent.js +2 -4
  115. package/dist/features/launch/runtime-selection.d.ts +2 -2
  116. package/dist/features/launch/runtime-selection.js +2 -2
  117. package/dist/features/launch/session-context.d.ts +2 -2
  118. package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
  119. package/dist/features/owned-ui/project-trust-prompt.js +1 -1
  120. package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
  121. package/dist/features/owned-ui/reference-screen-app.js +2 -9
  122. package/dist/features/owned-ui/release-note-state.d.ts +2 -1
  123. package/dist/features/owned-ui/settings-app.d.ts +0 -6
  124. package/dist/features/owned-ui/settings-app.js +42 -254
  125. package/dist/features/owned-ui/settings-edits.d.ts +31 -0
  126. package/dist/features/owned-ui/settings-edits.js +139 -0
  127. package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
  128. package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
  129. package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
  130. package/dist/features/prompt-history/service.d.ts +3 -2
  131. package/dist/foundation/launch-context/index.d.ts +0 -12
  132. package/dist/foundation/launch-context/index.js +0 -26
  133. package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
  134. package/dist/foundation/lifecycle/claim-gate.js +37 -0
  135. package/dist/foundation/lifecycle/index.d.ts +5 -9
  136. package/dist/foundation/lifecycle/index.js +3 -4
  137. package/dist/foundation/lifecycle/model.d.ts +2 -59
  138. package/dist/foundation/lifecycle/model.js +0 -35
  139. package/dist/foundation/lifecycle/paths.d.ts +0 -24
  140. package/dist/foundation/lifecycle/paths.js +0 -40
  141. package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
  142. package/dist/foundation/lifecycle/process-liveness.js +18 -0
  143. package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
  144. package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
  145. package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
  146. package/dist/foundation/lifecycle/session-repository-context.js +2 -3
  147. package/dist/foundation/release/automatic-update.d.ts +6 -17
  148. package/dist/foundation/release/automatic-update.js +23 -44
  149. package/dist/foundation/release/bootstrap.d.ts +2 -25
  150. package/dist/foundation/release/bootstrap.js +37 -348
  151. package/dist/foundation/release/dependency-certification.d.ts +1 -2
  152. package/dist/foundation/release/dependency-certification.js +1 -1
  153. package/dist/foundation/release/early-accent.d.ts +2 -2
  154. package/dist/foundation/release/early-accent.js +1 -1
  155. package/dist/foundation/release/index.d.ts +10 -17
  156. package/dist/foundation/release/index.js +7 -11
  157. package/dist/foundation/release/latest-release.d.ts +3 -19
  158. package/dist/foundation/release/latest-release.js +11 -12
  159. package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
  160. package/dist/foundation/release/ordinary-launch-selection.js +1 -1
  161. package/dist/foundation/release/process-liveness.d.ts +2 -0
  162. package/dist/foundation/release/process-liveness.js +12 -0
  163. package/dist/foundation/release/release-gc.d.ts +13 -10
  164. package/dist/foundation/release/release-gc.js +37 -101
  165. package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
  166. package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
  167. package/dist/foundation/release/release-store.d.ts +2 -2
  168. package/dist/foundation/release/release-store.js +2 -2
  169. package/dist/foundation/release/restart-certification.js +1 -1
  170. package/dist/foundation/release/update-activation.d.ts +2 -9
  171. package/dist/foundation/release/update-activation.js +30 -45
  172. package/dist/foundation/release/update-execution-lease.d.ts +2 -3
  173. package/dist/foundation/release/update-execution-lease.js +2 -2
  174. package/dist/foundation/release/update-launch.d.ts +2 -4
  175. package/dist/foundation/release/update-launch.js +0 -7
  176. package/dist/foundation/release/update-recovery.js +1 -1
  177. package/dist/foundation/release/update-transaction.d.ts +1 -1
  178. package/dist/foundation/release/update-transaction.js +5 -2
  179. package/dist/foundation/release/update.d.ts +2 -12
  180. package/dist/foundation/release/update.js +37 -214
  181. package/dist/foundation/session-writer-lock/index.d.ts +14 -6
  182. package/dist/foundation/session-writer-lock/index.js +48 -103
  183. package/dist/foundation/startup/startup-budget.d.ts +5 -5
  184. package/dist/foundation/startup/startup-budget.js +2 -2
  185. package/dist/foundation/startup/startup-runtime.d.ts +1 -1
  186. package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
  187. package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
  188. package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
  189. package/dist/foundation/terminal-cleanup/index.js +2 -1
  190. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
  191. package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
  192. package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
  193. package/dist/integrations/pi/components/index.d.ts +15 -9
  194. package/dist/integrations/pi/components/index.js +9 -5
  195. package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
  196. package/dist/integrations/pi/components/lazy-selectors.js +1 -1
  197. package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
  198. package/dist/integrations/pi/components/modal-frame.js +3 -23
  199. package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
  200. package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
  201. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
  202. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
  203. package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
  204. package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
  205. package/dist/integrations/pi/components/shell-footer-status.js +5 -4
  206. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  207. package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
  208. package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
  209. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
  210. package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
  211. package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
  212. package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
  213. package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
  214. package/dist/integrations/pi/components/skills-command.d.ts +1 -9
  215. package/dist/integrations/pi/components/skills-command.js +5 -5
  216. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
  217. package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
  218. package/dist/integrations/pi/components/theme.d.ts +9 -2
  219. package/dist/integrations/pi/components/theme.js +17 -2
  220. package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
  221. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
  222. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
  223. package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
  224. package/dist/integrations/pi/engine/adapter.d.ts +3 -6
  225. package/dist/integrations/pi/engine/adapter.js +4 -28
  226. package/dist/integrations/pi/engine/changelog.d.ts +2 -2
  227. package/dist/integrations/pi/engine/changelog.js +3 -3
  228. package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
  229. package/dist/integrations/pi/engine/compaction-progress.js +1 -1
  230. package/dist/integrations/pi/engine/conformance.d.ts +2 -1
  231. package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
  232. package/dist/integrations/pi/engine/default-model-setting.js +1 -2
  233. package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
  234. package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
  235. package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
  236. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
  237. package/dist/integrations/pi/engine/host.js +2 -2
  238. package/dist/integrations/pi/engine/message-values.d.ts +0 -1
  239. package/dist/integrations/pi/engine/message-values.js +1 -1
  240. package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
  241. package/dist/integrations/pi/engine/pending-delivery.js +3 -3
  242. package/dist/integrations/pi/engine/ports.d.ts +7 -1
  243. package/dist/integrations/pi/engine/ports.js +4 -0
  244. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
  245. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
  246. package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
  247. package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
  248. package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
  249. package/dist/integrations/pi/engine/public-main-entry.js +1 -1
  250. package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
  251. package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
  252. package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
  253. package/dist/integrations/pi/engine/repository-pr.js +1 -1
  254. package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
  255. package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
  256. package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
  257. package/dist/integrations/pi/engine/session-runtime.js +0 -2
  258. package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
  259. package/dist/integrations/pi/engine/settings-bridge.js +1 -1
  260. package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
  261. package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
  262. package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
  263. package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
  264. package/dist/integrations/pi/engine/workflow-runner.js +1 -1
  265. package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
  266. package/dist/integrations/pi/engine/workflow-support.js +4 -18
  267. package/dist/integrations/pi/engine/workflows.d.ts +5 -5
  268. package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
  269. package/dist/integrations/pi/session-presenters/components.js +75 -0
  270. package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
  271. package/dist/integrations/pi/session-presenters/index.js +1 -0
  272. package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
  273. package/dist/integrations/pi/session-presenters/presentation.js +10 -0
  274. package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
  275. package/dist/integrations/pi/session-presenters/presenters.js +3 -1
  276. package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
  277. package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
  278. package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
  279. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
  280. package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
  281. package/dist/integrations/pi/tui-runtime/index.js +1 -0
  282. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
  283. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
  284. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
  285. package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
  286. package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
  287. package/dist/product-identity.d.ts +4 -6
  288. package/dist/product-identity.js +6 -11
  289. package/dist/product-identity.json +1 -40
  290. package/dist/runtime-payload-inventory.json +0 -3
  291. package/dist/ui/components/index.d.ts +4 -4
  292. package/dist/ui/components/index.js +2 -2
  293. package/dist/ui/components/selection-copy.d.ts +0 -1
  294. package/dist/ui/components/selection-copy.js +0 -12
  295. package/dist/ui/components/submitted-prompt.d.ts +3 -13
  296. package/dist/ui/components/submitted-prompt.js +8 -41
  297. package/dist/ui/components/theme.d.ts +4 -19
  298. package/dist/ui/components/theme.js +6 -0
  299. package/dist/ui/components/transcript-viewport.d.ts +1 -3
  300. package/dist/ui/components/transcript-viewport.js +1 -4
  301. package/dist/ui/settings/declarations.d.ts +2 -97
  302. package/dist/ui/settings/declarations.js +2 -78
  303. package/dist/ui/settings/early-accent.js +1 -1
  304. package/dist/ui/settings/index.d.ts +3 -5
  305. package/dist/ui/settings/index.js +2 -3
  306. package/dist/ui/settings/manager.d.ts +0 -4
  307. package/dist/ui/settings/manager.js +6 -62
  308. package/dist/ui/settings/resolution.d.ts +6 -18
  309. package/dist/ui/settings/resolution.js +4 -103
  310. package/dist/ui/settings/sections.d.ts +0 -4
  311. package/dist/ui/settings/sections.js +1 -1
  312. package/docs/architecture/boundaries.md +23 -40
  313. package/docs/architecture/code-documentation.md +2 -2
  314. package/docs/architecture/internal-naming.md +11 -17
  315. package/docs/architecture/project-structure.md +13 -16
  316. package/docs/architecture/resource-and-data-policy.md +16 -31
  317. package/docs/architecture/toolchain.md +14 -19
  318. package/docs/architecture/ui-reference-provenance.md +2 -2
  319. package/docs/ci-release-runbook.md +5 -5
  320. package/docs/features/launch-profiles.md +11 -17
  321. package/docs/features/prompt-history.md +10 -11
  322. package/docs/local-worktree-cleanup.md +28 -1
  323. package/docs/manual-owned-ui-checkpoint.md +0 -1
  324. package/docs/validation.md +5 -11
  325. package/docs/worktree-link-recovery.md +6 -6
  326. package/package.json +7 -20
  327. package/bin/guardian.js +0 -42
  328. package/bin/supervisor.js +0 -7
  329. package/bin/tab-launch-context.d.ts +0 -27
  330. package/bin/tab-launch-context.js +0 -94
  331. package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
  332. package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
  333. package/dist/cli/tabs-request.d.ts +0 -7
  334. package/dist/cli/tabs.d.ts +0 -14
  335. package/dist/cli/tabs.js +0 -151
  336. package/dist/composition/resident-tab-bridge.d.ts +0 -41
  337. package/dist/composition/resident-tab-bridge.js +0 -209
  338. package/dist/composition/utility-tab.d.ts +0 -28
  339. package/dist/composition/utility-tab.js +0 -244
  340. package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
  341. package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
  342. package/dist/features/resident-tab/auto-name.d.ts +0 -11
  343. package/dist/features/resident-tab/auto-name.js +0 -44
  344. package/dist/features/resident-tab/index.d.ts +0 -5
  345. package/dist/features/resident-tab/index.js +0 -7
  346. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
  347. package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
  348. package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
  349. package/dist/features/resident-tab/shortcut-declarations.js +0 -26
  350. package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
  351. package/dist/features/resident-tab/shortcut-projection.js +0 -64
  352. package/dist/features/resident-tab/status-deriver.d.ts +0 -10
  353. package/dist/features/resident-tab/status-deriver.js +0 -12
  354. package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
  355. package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
  356. package/dist/foundation/launch-guardian/index.d.ts +0 -2
  357. package/dist/foundation/launch-guardian/index.js +0 -1
  358. package/dist/foundation/launch-guardian/main.d.ts +0 -39
  359. package/dist/foundation/launch-guardian/main.js +0 -232
  360. package/dist/foundation/lifecycle/commands.d.ts +0 -40
  361. package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
  362. package/dist/foundation/lifecycle/launch-instance.js +0 -134
  363. package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
  364. package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
  365. package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
  366. package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
  367. package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
  368. package/dist/foundation/process-containment/addon-containment.js +0 -139
  369. package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
  370. package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
  371. package/dist/foundation/process-containment/addon.d.ts +0 -47
  372. package/dist/foundation/process-containment/addon.js +0 -57
  373. package/dist/foundation/process-containment/artifact.d.ts +0 -1
  374. package/dist/foundation/process-containment/artifact.js +0 -35
  375. package/dist/foundation/process-containment/contracts.d.ts +0 -33
  376. package/dist/foundation/process-containment/contracts.js +0 -35
  377. package/dist/foundation/process-containment/index.d.ts +0 -9
  378. package/dist/foundation/process-containment/index.js +0 -7
  379. package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
  380. package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
  381. package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
  382. package/dist/foundation/process-containment/native-process-inspector.js +0 -21
  383. package/dist/foundation/protocol/client.d.ts +0 -18
  384. package/dist/foundation/protocol/client.js +0 -130
  385. package/dist/foundation/protocol/index.d.ts +0 -3
  386. package/dist/foundation/protocol/index.js +0 -2
  387. package/dist/foundation/protocol/messages.d.ts +0 -90
  388. package/dist/foundation/protocol/messages.js +0 -100
  389. package/dist/foundation/release/cohort-selection.d.ts +0 -33
  390. package/dist/foundation/release/cohort-selection.js +0 -67
  391. package/dist/foundation/release/endpoint-lock.d.ts +0 -2
  392. package/dist/foundation/release/endpoint-lock.js +0 -37
  393. package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
  394. package/dist/foundation/release/endpoint-recovery.js +0 -45
  395. package/dist/foundation/release/endpoints.d.ts +0 -32
  396. package/dist/foundation/release/endpoints.js +0 -152
  397. package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
  398. package/dist/foundation/release/prepared-update-activation.js +0 -27
  399. package/dist/foundation/release/process-cleanup.d.ts +0 -14
  400. package/dist/foundation/release/process-cleanup.js +0 -76
  401. package/dist/foundation/release/supervisor-identity.d.ts +0 -15
  402. package/dist/foundation/release/supervisor-identity.js +0 -63
  403. package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
  404. package/dist/foundation/resident-tabs/boot-identity.js +0 -16
  405. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
  406. package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
  407. package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
  408. package/dist/foundation/resident-tabs/bridge-client.js +0 -327
  409. package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
  410. package/dist/foundation/resident-tabs/continuity.js +0 -63
  411. package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
  412. package/dist/foundation/resident-tabs/doctor.js +0 -166
  413. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
  414. package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
  415. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
  416. package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
  417. package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
  418. package/dist/foundation/resident-tabs/fault-injection.js +0 -26
  419. package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
  420. package/dist/foundation/resident-tabs/fixture-control.js +0 -35
  421. package/dist/foundation/resident-tabs/host-entry.js +0 -17
  422. package/dist/foundation/resident-tabs/index.d.ts +0 -15
  423. package/dist/foundation/resident-tabs/index.js +0 -10
  424. package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
  425. package/dist/foundation/resident-tabs/maintenance.js +0 -75
  426. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
  427. package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
  428. package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
  429. package/dist/foundation/resident-tabs/progress-observation.js +0 -150
  430. package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
  431. package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
  432. package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
  433. package/dist/foundation/resident-tabs/protocol.js +0 -195
  434. package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
  435. package/dist/foundation/resident-tabs/recovery.js +0 -205
  436. package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
  437. package/dist/foundation/resident-tabs/release-holds.js +0 -78
  438. package/dist/foundation/resident-tabs/routes.d.ts +0 -5
  439. package/dist/foundation/resident-tabs/routes.js +0 -5
  440. package/dist/foundation/resident-tabs/routing.d.ts +0 -11
  441. package/dist/foundation/resident-tabs/routing.js +0 -10
  442. package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
  443. package/dist/foundation/resident-tabs/runtime-control.js +0 -74
  444. package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
  445. package/dist/foundation/resident-tabs/session-sync.js +0 -37
  446. package/dist/foundation/resident-tabs/settings.d.ts +0 -16
  447. package/dist/foundation/resident-tabs/settings.js +0 -60
  448. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
  449. package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
  450. package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
  451. package/dist/foundation/resident-tabs/zip-archive.js +0 -56
  452. package/dist/foundation/storage/control-store.d.ts +0 -20
  453. package/dist/foundation/storage/control-store.js +0 -331
  454. package/dist/foundation/storage/index.d.ts +0 -1
  455. package/dist/foundation/storage/index.js +0 -1
  456. package/dist/foundation/supervision/index.d.ts +0 -3
  457. package/dist/foundation/supervision/index.js +0 -3
  458. package/dist/foundation/supervision/main.d.ts +0 -1
  459. package/dist/foundation/supervision/main.js +0 -86
  460. package/dist/foundation/supervision/paths.d.ts +0 -1
  461. package/dist/foundation/supervision/paths.js +0 -1
  462. package/dist/foundation/supervision/server.d.ts +0 -46
  463. package/dist/foundation/supervision/server.js +0 -611
  464. package/dist/integrations/pi/components/components.d.ts +0 -4
  465. package/dist/integrations/pi/components/components.js +0 -48
  466. package/dist/integrations/pi/components/conformance.d.ts +0 -18
  467. package/dist/integrations/pi/components/conformance.js +0 -70
  468. package/dist/integrations/pi/components/shell-components.d.ts +0 -7
  469. package/dist/integrations/pi/components/shell-components.js +0 -7
  470. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
  471. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
  472. package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
  473. package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
  474. package/dist/native/darwin-arm64/manifest.json +0 -23
  475. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  476. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
  477. package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
  478. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  479. package/dist/native/darwin-x64/manifest.json +0 -23
  480. package/dist/native/darwin-x64/process-guardian.node +0 -0
  481. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
  482. package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
  483. package/dist/native/darwin-x64/terminal-host.node +0 -0
  484. package/dist/native/linux-x64/manifest.json +0 -23
  485. package/dist/native/linux-x64/process-guardian.node +0 -0
  486. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
  487. package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
  488. package/dist/native/linux-x64/terminal-host.node +0 -0
  489. package/dist/native/win32-x64/manifest.json +0 -23
  490. package/dist/native/win32-x64/process-guardian.node +0 -0
  491. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
  492. package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
  493. package/dist/native/win32-x64/terminal-host.node +0 -0
  494. package/dist/ui/settings/migrations.d.ts +0 -19
  495. package/dist/ui/settings/migrations.js +0 -209
  496. package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
  497. package/dist/ui/settings/progress-palette.generated.js +0 -139
  498. package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
  499. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
  500. package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
  501. package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
  502. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
  503. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
  504. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
  505. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
  506. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
  507. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
  508. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
  509. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
  510. package/docs/architecture/native-fixture-isolation.md +0 -23
  511. package/docs/architecture/process-guardian-provenance.md +0 -36
  512. package/docs/architecture/resident-tabs-requirements.md +0 -18
  513. package/docs/architecture/resident-tabs.md +0 -668
  514. package/docs/architecture/terminal-host-proof-gate.md +0 -34
  515. package/docs/architecture/terminal-host-provenance.md +0 -81
  516. package/docs/architecture/terminal-host-spike-evidence.md +0 -39
  517. package/docs/launch-recovery.md +0 -23
  518. package/docs/manual-launch-instance-acceptance.md +0 -43
  519. package/docs/manual-resident-tabs-acceptance.md +0 -51
  520. /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
  521. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
  522. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
  523. /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
  524. /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
@@ -1,20 +1,16 @@
1
- export { certifyMaterializedRelease, ensureSupervisor, recordParentCertifiedRelease, releaseEnvironment, releaseVerifiedIdleOwner, runBootstrap, startSupervisor, waitForProcessExit, waitForVerifiedEndpoint, } from "./bootstrap.js";
2
- export { selectCohortLaunch } from "./cohort-selection.js";
1
+ export { certifyMaterializedRelease, recordParentCertifiedRelease, releaseEnvironment, runBootstrap, } from "./bootstrap.js";
3
2
  export { selectOrdinaryLaunchReleaseId } from "./ordinary-launch-selection.js";
4
- export { CohortStateStore, RELEASE_COHORT_SCHEMA, emptyState, planProtectedReleases } from "./cohort-state.js";
3
+ export { ReleaseStateStore, RELEASE_STATE_SCHEMA, RELEASE_RETENTION_MS, emptyState, planProtectedReleases, withinRetention } from "./release-state.js";
5
4
  export { DEPENDENCY_LAYER_MANIFEST, DEPENDENCY_LAYER_SCHEMA, RUNTIME_PAYLOAD_INVENTORY, dependencyLayerCertificationPath, dependencyReference, generateDependencyRuntimePayload, legacyDependencyLayerCertificationPath, materializeDependencyLayer, readCertifiedDependencyLayer, selectDependencyRuntimePayload, selectPublishedDependencyRuntimePayload, verifyDependencyLayer, } from "./dependency-layer.js";
6
- export { listRecordedEndpoints, liveReleaseIds, probeOwnership, readEndpointMetadata, removeEndpointArtifacts, sweepDeadEndpoints } from "./endpoints.js";
7
- export { currentSupervisorStartIdentity, observeSupervisorProcess, supervisorProcessState } from "./supervisor-identity.js";
8
- export { withEndpointLock } from "./endpoint-lock.js";
9
- export { cleanupProvenIdleOwner, cleanupVerifiedOwner, processIsAlive } from "./process-cleanup.js";
5
+ export { processIsAlive } from "./process-liveness.js";
10
6
  export { PRODUCT_PACKAGE_NAME, createReleaseIdentity, deriveReleaseIdentity, digestManifestFiles, discoverReleasePayload, packageRootFromModule, releaseFileIdentity, resolveWithin, } from "./release.js";
11
- export { collectRelease, prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
7
+ export { prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
12
8
  export { RELEASE_MANIFEST_FILENAME, ReleaseRepairUnavailableError, assertCertifiedFilesPresent, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
13
9
  export { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument, restartSealDigest } from "./restart-certification.js";
14
10
  export { STABLE_RELEASE_SCHEMA, createStableReleaseEvidence, verifyStableRegistry } from "./stable-release.js";
15
- export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ACTIVATION_BLOCKED_EXIT_CODE, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
16
- export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, UpdateActivationBlockedError, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
17
- export { selectSupervisorLaunchReleaseId, selectUpdateLaunchRelease } from "./update-launch.js";
11
+ export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
12
+ export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
13
+ export { selectUpdateLaunchRelease } from "./update-launch.js";
18
14
  export { UPDATE_RECOVERY_SCHEMA, cleanupUpdateRecoveryCapsules, inspectUpdateLauncherSet, npmPrefixForGlobalRoot, prepareUpdateRecoveryCapsule, readUpdateRecoveryCapsule, removeUpdateRecoveryCapsule, resolveNpmCli, runProtectedPackageReplacement, updateLauncherPaths, updateNpmInstallArguments, } from "./update-recovery.js";
19
15
  export { UPDATE_JOURNAL_SCHEMA, UpdateTransactionStore } from "./update-transaction.js";
20
16
  export { warmMaterializedRelease } from "./warmup.js";
@@ -1,11 +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";
4
- export interface DistTagVersions {
5
- readonly release: string | null;
6
- readonly develop: string | null;
7
- readonly error: string | null;
8
- }
3
+ export type StartupUpdateMode = "auto" | "manual";
9
4
  export type RegistryFetcher = (url: string) => Promise<{
10
5
  readonly ok: boolean;
11
6
  readonly status: number;
@@ -19,15 +14,13 @@ export interface AvailableRelease {
19
14
  /** The GitHub Release page; development releases have none. */
20
15
  readonly changelogUrl: string | null;
21
16
  }
22
- export declare const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
23
17
  export declare const UPDATE_CHECK_INTERVAL_MS: number;
24
- export declare const NOTIFY_CHECK_INTERVAL_MS: number;
25
18
  /** One published version with the pull request its manifest records, when it records one. */
26
19
  export interface PublishedVersion {
27
20
  readonly version: string;
28
21
  readonly pullRequest: number | null;
29
22
  }
30
- export interface PublishedVersions {
23
+ interface PublishedVersions {
31
24
  readonly versions: readonly PublishedVersion[];
32
25
  readonly error: string | null;
33
26
  }
@@ -38,23 +31,14 @@ export interface PublishedVersions {
38
31
  export declare function releaseChannelOf(version: string): ReleaseChannel | null;
39
32
  /** True only when both versions are valid semver and the candidate sorts strictly above the current one. */
40
33
  export declare function isNewerRelease(candidate: string, current: string): boolean;
41
- export declare function distTagsUrl(registry?: string): string;
42
- /** Read `latest` (required) and `next` (optional) from a dist-tags object. */
43
- export declare function parseDistTags(metadata: unknown, source: string): DistTagVersions;
44
- export declare function queryRegistryDistTags(fetcher: RegistryFetcher, registry?: string): Promise<DistTagVersions>;
45
- export declare function packageDocumentUrl(registry?: string): string;
46
- /** The pull request a published or installed manifest records under `publication.pullRequest`, when valid. */
47
- export declare function recordedPullRequest(manifest: unknown): number | null;
48
34
  /**
49
35
  * Every published version with its recorded pull request, read from the registry's full package
50
36
  * document: its per-version manifests keep the publication metadata that version lists and the
51
37
  * abbreviated install document leave out.
52
38
  */
53
39
  export declare function queryPublishedVersions(fetcher: RegistryFetcher, registry?: string): Promise<PublishedVersions>;
54
- export declare function parsePublishedVersions(document: unknown): PublishedVersions;
55
40
  /** Forget the startup release check so the next interactive launch asks the registry again. */
56
41
  export declare function invalidateReleaseCheckCache(configDir: string): Promise<void>;
57
- export declare function unavailableDistTags(error: string): DistTagVersions;
58
42
  export declare function createRegistryFetcher(timeoutMs: number, signal?: AbortSignal): RegistryFetcher;
59
43
  export interface StartupReleaseCheckOptions {
60
44
  readonly runningVersion: string;
@@ -78,4 +62,4 @@ export declare function startupReleaseCheckSkipReason(options: StartupReleaseChe
78
62
  * answer replaces the cache. Every failure resolves to null: the notice is best-effort.
79
63
  */
80
64
  export declare function checkForNewerRelease(options: StartupReleaseCheckOptions): Promise<AvailableRelease | null>;
81
- export declare function availableRelease(channel: ReleaseChannel, version: string): AvailableRelease;
65
+ export {};
@@ -4,9 +4,8 @@ import { join } from "node:path";
4
4
  import { gt, prerelease, valid as validSemver } from "semver";
5
5
  import lockfile from "proper-lockfile";
6
6
  import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
7
- export const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
7
+ const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
8
8
  export const UPDATE_CHECK_INTERVAL_MS = 15 * 60_000;
9
- export const NOTIFY_CHECK_INTERVAL_MS = 24 * 60 * 60_000;
10
9
  const STARTUP_FETCH_TIMEOUT_MS = 3_000;
11
10
  const CACHE_FILENAME = "update-check.json";
12
11
  const CACHE_VERSION = 2;
@@ -31,11 +30,11 @@ export function isNewerRelease(candidate, current) {
31
30
  const right = validSemver(current);
32
31
  return left !== null && right !== null && gt(left, right);
33
32
  }
34
- export function distTagsUrl(registry = DEFAULT_NPM_REGISTRY) {
33
+ function distTagsUrl(registry = DEFAULT_NPM_REGISTRY) {
35
34
  return `${registry.replace(/\/+$/u, "")}/-/package/${encodeURIComponent(PRODUCT_TEXT.packageName)}/dist-tags`;
36
35
  }
37
36
  /** Read `latest` (required) and `next` (optional) from a dist-tags object. */
38
- export function parseDistTags(metadata, source) {
37
+ function parseDistTags(metadata, source) {
39
38
  if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata)) {
40
39
  return unavailableDistTags(`${source} returned a non-object dist-tags value`);
41
40
  }
@@ -49,7 +48,7 @@ export function parseDistTags(metadata, source) {
49
48
  return unavailableDistTags(errorMessage(error));
50
49
  }
51
50
  }
52
- export async function queryRegistryDistTags(fetcher, registry) {
51
+ async function queryRegistryDistTags(fetcher, registry) {
53
52
  try {
54
53
  const response = await fetcher(distTagsUrl(registry));
55
54
  if (!response.ok)
@@ -60,11 +59,11 @@ export async function queryRegistryDistTags(fetcher, registry) {
60
59
  return unavailableDistTags(errorMessage(error));
61
60
  }
62
61
  }
63
- export function packageDocumentUrl(registry = DEFAULT_NPM_REGISTRY) {
62
+ function packageDocumentUrl(registry = DEFAULT_NPM_REGISTRY) {
64
63
  return `${registry.replace(/\/+$/u, "")}/${encodeURIComponent(PRODUCT_TEXT.packageName)}`;
65
64
  }
66
65
  /** The pull request a published or installed manifest records under `publication.pullRequest`, when valid. */
67
- export function recordedPullRequest(manifest) {
66
+ function recordedPullRequest(manifest) {
68
67
  if (typeof manifest !== "object" || manifest === null)
69
68
  return null;
70
69
  const publication = manifest.publication;
@@ -92,7 +91,7 @@ export async function queryPublishedVersions(fetcher, registry) {
92
91
  return { versions: [], error: errorMessage(error) };
93
92
  }
94
93
  }
95
- export function parsePublishedVersions(document) {
94
+ function parsePublishedVersions(document) {
96
95
  if (typeof document !== "object" || document === null || Array.isArray(document)) {
97
96
  return { versions: [], error: "registry returned a non-object package document" };
98
97
  }
@@ -109,7 +108,7 @@ export function parsePublishedVersions(document) {
109
108
  export async function invalidateReleaseCheckCache(configDir) {
110
109
  await withCacheLock(configDir, async () => { await rm(join(configDir, CACHE_FILENAME), { force: true }); });
111
110
  }
112
- export function unavailableDistTags(error) {
111
+ function unavailableDistTags(error) {
113
112
  return { release: null, develop: null, error };
114
113
  }
115
114
  export function createRegistryFetcher(timeoutMs, signal) {
@@ -127,7 +126,7 @@ export function startupReleaseCheckSkipReason(options) {
127
126
  return "ci";
128
127
  if (!options.interactive)
129
128
  return "not-interactive";
130
- if (options.settingMode === "no")
129
+ if (options.settingMode === "manual")
131
130
  return "disabled-by-setting";
132
131
  if (releaseChannelOf(options.runningVersion) === null)
133
132
  return "unpublished-version";
@@ -146,7 +145,7 @@ export async function checkForNewerRelease(options) {
146
145
  const now = options.now ?? Date.now;
147
146
  const cachePath = join(options.configDir, CACHE_FILENAME);
148
147
  try {
149
- const interval = options.settingMode === "notify" ? NOTIFY_CHECK_INTERVAL_MS : UPDATE_CHECK_INTERVAL_MS;
148
+ const interval = UPDATE_CHECK_INTERVAL_MS;
150
149
  const latest = await withCacheLock(options.configDir, async () => {
151
150
  if (options.signal?.aborted)
152
151
  return null;
@@ -171,7 +170,7 @@ export async function checkForNewerRelease(options) {
171
170
  return null;
172
171
  }
173
172
  }
174
- export function availableRelease(channel, version) {
173
+ function availableRelease(channel, version) {
175
174
  return {
176
175
  channel,
177
176
  version,
@@ -8,7 +8,7 @@ interface ApprovedOrdinaryLaunchRelease extends OrdinaryLaunchRelease {
8
8
  /**
9
9
  * Ordinary launch has no rollback authority: it may advance to its installed package, but an
10
10
  * older package installation must follow a newer approved active release instead of moving the
11
- * shared selector backward. Explicit update/rollback uses CohortStateStore.activate directly.
11
+ * shared selector backward. Explicit update/rollback uses ReleaseStateStore.activate directly.
12
12
  */
13
13
  export declare function selectOrdinaryLaunchReleaseId(candidate: OrdinaryLaunchRelease, active?: ApprovedOrdinaryLaunchRelease): string;
14
14
  export {};
@@ -2,7 +2,7 @@ import { compare, valid as validSemver } from "semver";
2
2
  /**
3
3
  * Ordinary launch has no rollback authority: it may advance to its installed package, but an
4
4
  * older package installation must follow a newer approved active release instead of moving the
5
- * shared selector backward. Explicit update/rollback uses CohortStateStore.activate directly.
5
+ * shared selector backward. Explicit update/rollback uses ReleaseStateStore.activate directly.
6
6
  */
7
7
  export function selectOrdinaryLaunchReleaseId(candidate, active) {
8
8
  if (!active || active.approval !== "approved")
@@ -0,0 +1,2 @@
1
+ /** Whether a process with this id exists; a permission refusal still proves it is running. */
2
+ export declare function processIsAlive(pid: number): boolean;
@@ -0,0 +1,12 @@
1
+ /** Whether a process with this id exists; a permission refusal still proves it is running. */
2
+ export function processIsAlive(pid) {
3
+ if (!Number.isSafeInteger(pid) || pid <= 0)
4
+ return false;
5
+ try {
6
+ process.kill(pid, 0);
7
+ return true;
8
+ }
9
+ catch (error) {
10
+ return error instanceof Error && "code" in error && error.code === "EPERM";
11
+ }
12
+ }
@@ -1,8 +1,7 @@
1
1
  import { rename, rm } from "node:fs/promises";
2
- import { CohortStateStore, type ExternalReleaseHold, type OrphanReleaseDisposition } from "./cohort-state.js";
2
+ import { ReleaseStateStore, type OrphanReleaseDisposition } from "./release-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";
6
5
  export interface ReleaseCleanupLimits {
7
6
  readonly maxItems: number;
8
7
  readonly maxDurationMs: number;
@@ -13,7 +12,15 @@ export interface ReleaseCleanupOperations {
13
12
  readonly remove?: typeof rm;
14
13
  }
15
14
  export interface ReleaseCleanupOptions {
16
- readonly externalHolds?: readonly ExternalReleaseHold[];
15
+ /**
16
+ * Releases the command that started cleanup runs from. Defaults to the release named by this
17
+ * process's launch context, so a command never collects the files it is running.
18
+ */
19
+ readonly ownReleaseIds?: readonly string[];
20
+ /** Age window measured from approval; defaults to seven days. */
21
+ readonly retentionMs?: number;
22
+ /** Wall clock the retention window is measured against; `now` only paces a batch. */
23
+ readonly wallClock?: () => number;
17
24
  readonly transactionStore?: Pick<UpdateTransactionStore, "read">;
18
25
  readonly limits?: Partial<ReleaseCleanupLimits>;
19
26
  readonly candidateAgeMs?: number;
@@ -22,8 +29,6 @@ export interface ReleaseCleanupOptions {
22
29
  readonly operations?: ReleaseCleanupOperations;
23
30
  /** Process-start seam for scheduler and continuation tests. */
24
31
  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>;
27
32
  }
28
33
  export interface ReleaseCleanupWorkerOptions {
29
34
  readonly cleanup?: ReleaseCleanupOptions;
@@ -53,11 +58,11 @@ interface DiscoveredCleanupInputs {
53
58
  }[];
54
59
  }
55
60
  /**
56
- * Reconcile current ownership under the cohort-state lock and durably detach obsolete releases.
61
+ * Reconcile age-based retention under the release-state lock and durably detach obsolete releases.
57
62
  * This operation intentionally reads only manifests and directory metadata, never payload bytes.
58
63
  */
59
- export declare function prepareReleaseCleanup(dataDir: string, paths?: ProductPaths, options?: ReleaseCleanupOptions): Promise<{
60
- readonly store: CohortStateStore;
64
+ export declare function prepareReleaseCleanup(dataDir: string, _paths?: ProductPaths, options?: ReleaseCleanupOptions): Promise<{
65
+ readonly store: ReleaseStateStore;
61
66
  readonly discovered: DiscoveredCleanupInputs;
62
67
  }>;
63
68
  /** Run a bounded, restart-safe physical cleanup pass over detached releases and abandoned artifacts. */
@@ -69,6 +74,4 @@ export declare function runBoundedReleaseCleanup(dataDir: string, paths?: Produc
69
74
  export declare function scheduleReleaseCleanup(dataDir: string, paths: ProductPaths, options?: ReleaseCleanupOptions): Promise<void>;
70
75
  /** Entry used by the private cleanup executable shipped in every immutable release. */
71
76
  export declare function runReleaseCleanupWorker(environment?: NodeJS.ProcessEnv, workerOptions?: ReleaseCleanupWorkerOptions): Promise<ReleaseCleanupResult>;
72
- /** Compatibility helper: detach one requested release and execute a one-item pass. */
73
- export declare function collectRelease(store: CohortStateStore, dataDir: string, releaseId: string, externalReferences: readonly string[], paths?: ProductPaths): Promise<void>;
74
77
  export {};
@@ -3,8 +3,7 @@ import { spawn } from "node:child_process";
3
3
  import { lstat, mkdir, open, readFile, readdir, realpath, rename, rm, stat } from "node:fs/promises";
4
4
  import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
- import { CohortStateStore, } from "./cohort-state.js";
7
- import { liveReleaseIds } from "./endpoints.js";
6
+ import { ReleaseStateStore, } from "./release-state.js";
8
7
  import { resolveProductPaths } from "../lifecycle/index.js";
9
8
  import { RELEASE_MANIFEST_FILENAME } from "./release-store.js";
10
9
  import { DEPENDENCY_LAYER_MANIFEST, readCertifiedDependencyLayer } from "./dependency-layer.js";
@@ -14,24 +13,25 @@ import { UpdateTransactionStore } from "./update-transaction.js";
14
13
  import { cleanupUpdateRecoveryCapsules } from "./update-recovery.js";
15
14
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
16
15
  import { collectCompileCaches, startupCompileCachePath } from "../startup/index.js";
17
- import { readResidentReleaseHolds } from "../resident-tabs/index.js";
16
+ import { readLaunchContext } from "../launch-context/index.js";
17
+ import { processIsAlive } from "./process-liveness.js";
18
18
  const DEFAULT_CANDIDATE_AGE_MS = 60 * 60 * 1_000;
19
19
  const DEFAULT_LIMITS = { maxItems: 8, maxDurationMs: 2_000, concurrency: 1 };
20
20
  const DEFAULT_WORKER_DURATION_MS = 10 * 60 * 1_000;
21
21
  const DEFAULT_NO_PROGRESS_BATCHES = 5;
22
22
  const DEFAULT_RETRY_DELAY_MS = 500;
23
- const WORKER_HOLDS_ENV = "RELEASE_CLEANUP_HOLDS";
23
+ const WORKER_KEEP_ENV = "RELEASE_CLEANUP_KEEP";
24
24
  const WORKER_RUN_ID_ENV = "RELEASE_CLEANUP_RUN_ID";
25
25
  const WORKER_LEASE_FILENAME = "release-cleanup-worker.lock";
26
26
  /**
27
- * Reconcile current ownership under the cohort-state lock and durably detach obsolete releases.
27
+ * Reconcile age-based retention under the release-state lock and durably detach obsolete releases.
28
28
  * This operation intentionally reads only manifests and directory metadata, never payload bytes.
29
29
  */
30
- export async function prepareReleaseCleanup(dataDir, paths, options = {}) {
31
- const store = new CohortStateStore(dataDir);
30
+ export async function prepareReleaseCleanup(dataDir, _paths, options = {}) {
31
+ const store = new ReleaseStateStore(dataDir);
32
32
  const discovered = await discoverCleanupInputs(dataDir, store, options);
33
33
  const transactionStore = options.transactionStore ?? new UpdateTransactionStore(dataDir);
34
- await store.reconcileRetention(async () => await protectionInputs(dataDir, paths, transactionStore, options.externalHolds ?? [], options.residentHolds), discovered.orphans);
34
+ await store.reconcileRetention(async () => await protectionInputs(transactionStore, options), discovered.orphans);
35
35
  for (const diagnostic of discovered.diagnostics.slice(0, 16)) {
36
36
  await store.recordCleanupFailure(diagnostic.releaseId, diagnostic.stage, diagnostic.error);
37
37
  }
@@ -42,7 +42,7 @@ export async function runBoundedReleaseCleanup(dataDir, paths, options = {}) {
42
42
  const now = options.now ?? Date.now;
43
43
  const limits = normalizeLimits(options.limits);
44
44
  const { store, discovered } = await prepareReleaseCleanup(dataDir, paths, options);
45
- // Performance: The physical-work allowance begins after discovery, ownership probes, and the
45
+ // Performance: The physical-work allowance begins after discovery and the
46
46
  // durable reconciliation write. A slow preparation phase must not starve every worker invocation.
47
47
  const startedAt = now();
48
48
  const initial = await store.read();
@@ -67,7 +67,7 @@ export async function runBoundedReleaseCleanup(dataDir, paths, options = {}) {
67
67
  pendingOffset += size;
68
68
  maximum -= size;
69
69
  attempted += batch.length;
70
- const results = await Promise.all(batch.map(async (disposition) => await collectDisposition(store, dataDir, paths, disposition, options)));
70
+ const results = await Promise.all(batch.map(async (disposition) => await collectDisposition(store, dataDir, disposition, options)));
71
71
  completed += results.filter(Boolean).length;
72
72
  guaranteed = false;
73
73
  }
@@ -78,7 +78,7 @@ export async function runBoundedReleaseCleanup(dataDir, paths, options = {}) {
78
78
  maximum -= 1;
79
79
  const certificationId = certificationReleaseId(artifact);
80
80
  if (certificationId !== null) {
81
- const inputs = await protectionInputs(dataDir, paths, transactionStore, options.externalHolds ?? [], options.residentHolds);
81
+ const inputs = await protectionInputs(transactionStore, options);
82
82
  if (isProtectedDetachedRelease(await store.read(), inputs, certificationId))
83
83
  continue;
84
84
  }
@@ -137,7 +137,7 @@ export async function scheduleReleaseCleanup(dataDir, paths, options = {}) {
137
137
  ...process.env,
138
138
  [PRODUCT_IDENTITY.environment.dataDir]: dataDir,
139
139
  [PRODUCT_IDENTITY.environment.runtimeDir]: paths.runtimeDir,
140
- [WORKER_HOLDS_ENV]: JSON.stringify(options.externalHolds ?? []),
140
+ [WORKER_KEEP_ENV]: JSON.stringify(ownReleaseIds(options)),
141
141
  [WORKER_RUN_ID_ENV]: runId,
142
142
  };
143
143
  try {
@@ -152,13 +152,13 @@ export async function scheduleReleaseCleanup(dataDir, paths, options = {}) {
152
152
  /** Entry used by the private cleanup executable shipped in every immutable release. */
153
153
  export async function runReleaseCleanupWorker(environment = process.env, workerOptions = {}) {
154
154
  const paths = resolveProductPaths(environment);
155
- const store = new CohortStateStore(paths.dataDir);
155
+ const store = new ReleaseStateStore(paths.dataDir);
156
156
  const runId = environment[WORKER_RUN_ID_ENV] ?? randomUUID();
157
157
  const now = workerOptions.now ?? Date.now;
158
158
  const sleep = workerOptions.sleep ?? (async (durationMs) => await new Promise(resolvePromise => setTimeout(resolvePromise, durationMs)));
159
159
  const cleanupOptions = {
160
160
  ...workerOptions.cleanup,
161
- externalHolds: workerOptions.cleanup?.externalHolds ?? parseWorkerHolds(environment[WORKER_HOLDS_ENV]),
161
+ ownReleaseIds: workerOptions.cleanup?.ownReleaseIds ?? parseWorkerKeep(environment[WORKER_KEEP_ENV]),
162
162
  };
163
163
  const summary = { batches: 0, attempted: 0, completed: 0, remaining: Object.keys((await store.read()).cleanup.pending).length };
164
164
  let lease = null;
@@ -227,24 +227,10 @@ export async function runReleaseCleanupWorker(environment = process.env, workerO
227
227
  durationMs: Math.max(0, now() - startedAt),
228
228
  };
229
229
  }
230
- /** Compatibility helper: detach one requested release and execute a one-item pass. */
231
- export async function collectRelease(store, dataDir, releaseId, externalReferences, paths) {
232
- const holds = externalReferences.map(referenced => ({ authority: "migration", releaseId: referenced }));
233
- const state = await store.read();
234
- if (!state.releases[releaseId])
235
- throw new Error(`unknown release ${releaseId}`);
236
- await store.reconcileRetention(async () => ({ ...(await protectionInputs(dataDir, paths, new UpdateTransactionStore(dataDir), holds)) }));
237
- const disposition = (await store.read()).cleanup.pending[releaseId];
238
- if (!disposition)
239
- throw new Error(`release ${releaseId} is still referenced and cannot be collected`);
240
- const removed = await collectDisposition(store, dataDir, paths, disposition, { externalHolds: holds, limits: { maxItems: 1 } });
241
- if (!removed)
242
- throw new Error(`release ${releaseId} could not be collected`);
243
- }
244
- async function collectDisposition(store, dataDir, paths, disposition, options) {
230
+ async function collectDisposition(store, dataDir, disposition, options) {
245
231
  const releaseId = disposition.release.releaseId;
246
232
  try {
247
- const inputs = await protectionInputs(dataDir, paths, options.transactionStore ?? new UpdateTransactionStore(dataDir), options.externalHolds ?? [], options.residentHolds);
233
+ const inputs = await protectionInputs(options.transactionStore ?? new UpdateTransactionStore(dataDir), options);
248
234
  const current = await store.read();
249
235
  if (isProtectedDetachedRelease(current, inputs, releaseId))
250
236
  return false;
@@ -285,67 +271,30 @@ async function collectDisposition(store, dataDir, paths, disposition, options) {
285
271
  function isProtectedDetachedRelease(state, inputs, releaseId) {
286
272
  const selected = [state.references.active, state.references.pending, state.references.approved, state.references.rollback]
287
273
  .some(reference => reference === releaseId);
274
+ // Concurrency: a launch may have recorded the same release again after it was detached.
288
275
  return selected
289
- || (inputs.liveReleaseIds ?? []).includes(releaseId)
290
- || (inputs.externalHolds ?? []).some(hold => hold.releaseId === releaseId)
276
+ || state.releases[releaseId] !== undefined
277
+ || (inputs.ownReleaseIds ?? []).includes(releaseId)
291
278
  || (inputs.transaction?.status === "active" && inputs.transaction.priorActiveReleaseId === releaseId);
292
279
  }
293
- async function protectionInputs(dataDir, paths, transactionStore, externalHolds, residentHolds) {
294
- const [liveIds, transaction, resident] = await Promise.all([
295
- paths ? liveReleaseIds(paths) : Promise.resolve([]),
296
- transactionStore.read(),
297
- residentReleaseHolds(dataDir, residentHolds),
298
- ]);
299
- return { liveReleaseIds: liveIds, externalHolds: [...externalHolds, ...resident], transaction: transactionReference(transaction) };
280
+ async function protectionInputs(transactionStore, options) {
281
+ return {
282
+ ownReleaseIds: ownReleaseIds(options),
283
+ transaction: transactionReference(await transactionStore.read()),
284
+ now: (options.wallClock ?? Date.now)(),
285
+ ...(options.retentionMs === undefined ? {} : { retentionMs: options.retentionMs }),
286
+ };
300
287
  }
301
- /**
302
- * Holds every release a live resident server, holder, or tab child runs from. Retention fails
303
- * closed: an incomplete report, or a recorded root inside the release store that names no known
304
- * release, holds every known release.
305
- */
306
- async function residentReleaseHolds(dataDir, reader) {
307
- const state = await new CohortStateStore(dataDir).read();
308
- const records = [
309
- ...Object.values(state.releases),
310
- ...Object.values(state.cleanup.pending).map(disposition => disposition.release),
311
- ];
312
- const preferred = [state.references.active, state.references.rollback]
313
- .flatMap(id => id && state.releases[id] ? [state.releases[id].releaseRoot] : []);
314
- const roots = [...new Set([...preferred, ...Object.values(state.releases).map(record => record.releaseRoot)])];
315
- const report = await (reader ?? ((directory, releaseRoots) => readResidentReleaseHolds({ dataDir: directory, releaseRoots })))(dataDir, roots);
316
- const everything = () => [...new Set(records.map(record => record.releaseId))].map(releaseId => ({ authority: "resident", releaseId }));
317
- if (!report.complete)
318
- return everything();
319
- if (report.releaseRoots.length === 0)
288
+ function ownReleaseIds(options) {
289
+ if (options.ownReleaseIds !== undefined)
290
+ return options.ownReleaseIds;
291
+ try {
292
+ const own = readLaunchContext(process.env).releaseId;
293
+ return own === undefined ? [] : [own];
294
+ }
295
+ catch {
320
296
  return [];
321
- // Rationale: native Windows extended paths and Unix aliases must match the catalog's spelling.
322
- const byRoot = new Map();
323
- for (const record of records) {
324
- const canonical = await realpath(record.releaseRoot).catch(() => record.releaseRoot);
325
- byRoot.set(comparablePath(canonical), record.releaseId);
326
- }
327
- const directory = await realpath(resolve(dataDir, "releases")).catch(() => null);
328
- if (directory === null)
329
- return everything();
330
- const store = comparablePath(directory);
331
- const holds = new Set();
332
- for (const root of report.releaseRoots) {
333
- // Security: an unresolved live root may alias managed content; uncertainty must retain it.
334
- const canonical = await realpath(root).catch(() => null);
335
- if (canonical === null)
336
- return everything();
337
- const key = comparablePath(canonical);
338
- const releaseId = byRoot.get(key);
339
- if (releaseId)
340
- holds.add(releaseId);
341
- else if (key.startsWith(`${store}${sep}`))
342
- return everything();
343
- }
344
- return [...holds].sort().map(releaseId => ({ authority: "resident", releaseId }));
345
- }
346
- function comparablePath(path) {
347
- const absolute = resolve(path);
348
- return process.platform === "win32" ? absolute.toLowerCase() : absolute;
297
+ }
349
298
  }
350
299
  function transactionReference(transaction) {
351
300
  return transaction === null ? null : { status: transaction.status, priorActiveReleaseId: transaction.priorActiveReleaseId };
@@ -779,25 +728,12 @@ async function readWorkerLease(path) {
779
728
  return null;
780
729
  }
781
730
  }
782
- function processIsAlive(pid) {
783
- try {
784
- process.kill(pid, 0);
785
- return true;
786
- }
787
- catch (error) {
788
- return error instanceof Error && "code" in error && error.code === "EPERM";
789
- }
790
- }
791
- function parseWorkerHolds(value) {
731
+ function parseWorkerKeep(value) {
792
732
  if (!value)
793
733
  return [];
794
734
  try {
795
735
  const parsed = JSON.parse(value);
796
- if (!Array.isArray(parsed))
797
- return [];
798
- return parsed.filter((hold) => Boolean(hold) && typeof hold === "object"
799
- && ["agent", "migration", "resident"].includes(hold.authority)
800
- && typeof hold.releaseId === "string");
736
+ return Array.isArray(parsed) ? parsed.filter((id) => typeof id === "string" && id.length > 0) : [];
801
737
  }
802
738
  catch {
803
739
  return [];