create-principles-disciple 1.146.4 → 1.146.7

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 (350) hide show
  1. package/_release/product-identity.json +1 -1
  2. package/codex-adapter/package.json +1 -1
  3. package/core/dist/runtime-v2/evidence-triage/index.d.ts +1 -3
  4. package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -1
  5. package/core/dist/runtime-v2/evidence-triage/index.js +1 -2
  6. package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -1
  7. package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +0 -19
  8. package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -1
  9. package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +0 -25
  10. package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -1
  11. package/core/dist/runtime-v2/index.d.ts +2 -2
  12. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  13. package/core/dist/runtime-v2/index.js +1 -1
  14. package/core/dist/runtime-v2/index.js.map +1 -1
  15. package/core/dist/telemetry-event.d.ts +2 -2
  16. package/core/dist/telemetry-event.d.ts.map +1 -1
  17. package/core/dist/telemetry-event.js +4 -5
  18. package/core/dist/telemetry-event.js.map +1 -1
  19. package/core/dist/trajectory-store.d.ts.map +1 -1
  20. package/core/dist/trajectory-store.js +4 -44
  21. package/core/dist/trajectory-store.js.map +1 -1
  22. package/core/package.json +1 -1
  23. package/host-runtime/package.json +1 -1
  24. package/package.json +4 -4
  25. package/plugin/dist/bundle.js +460 -460
  26. package/plugin/dist/core/config.d.ts +0 -2
  27. package/plugin/dist/core/trajectory.d.ts +0 -6
  28. package/plugin/dist/hooks/llm.d.ts +0 -1
  29. package/plugin/dist/hooks/prompt-helpers.d.ts +2 -1
  30. package/plugin/dist/hooks/raw-observation-adapter.d.ts +6 -4
  31. package/plugin/dist/hooks/triage-adapter.d.ts +1 -1
  32. package/plugin/dist/openclaw.plugin.json +1 -1
  33. package/plugin/dist/rulehost-evidence.js +6 -6
  34. package/plugin/dist/templates/pain_settings.json +0 -2
  35. package/plugin/openclaw.plugin.json +1 -1
  36. package/plugin/package.json +1 -1
  37. package/plugin/templates/pain_settings.json +0 -2
  38. package/release-manager/package.json +4 -4
  39. package/workbuddy-adapter/package.json +1 -1
  40. package/console/dist/ui/App.d.ts +0 -1
  41. package/console/dist/ui/App.js +0 -172
  42. package/console/dist/ui/api.d.ts +0 -611
  43. package/console/dist/ui/api.js +0 -1094
  44. package/console/dist/ui/components/auth/login-form.d.ts +0 -4
  45. package/console/dist/ui/components/auth/login-form.js +0 -142
  46. package/console/dist/ui/components/auth/splash-screen.d.ts +0 -9
  47. package/console/dist/ui/components/auth/splash-screen.js +0 -22
  48. package/console/dist/ui/components/error-boundary.d.ts +0 -15
  49. package/console/dist/ui/components/error-boundary.js +0 -30
  50. package/console/dist/ui/components/focus/daily-thought-card.d.ts +0 -1
  51. package/console/dist/ui/components/focus/daily-thought-card.js +0 -41
  52. package/console/dist/ui/components/language-switcher.d.ts +0 -2
  53. package/console/dist/ui/components/language-switcher.js +0 -17
  54. package/console/dist/ui/components/layout/app-sidebar.d.ts +0 -27
  55. package/console/dist/ui/components/layout/app-sidebar.js +0 -128
  56. package/console/dist/ui/components/layout/page-loading.d.ts +0 -13
  57. package/console/dist/ui/components/layout/page-loading.js +0 -14
  58. package/console/dist/ui/components/layout/page-shell.d.ts +0 -12
  59. package/console/dist/ui/components/layout/page-shell.js +0 -11
  60. package/console/dist/ui/components/layout/section-title.d.ts +0 -10
  61. package/console/dist/ui/components/layout/section-title.js +0 -9
  62. package/console/dist/ui/components/notifications/NotificationProvider.d.ts +0 -14
  63. package/console/dist/ui/components/notifications/NotificationProvider.js +0 -136
  64. package/console/dist/ui/components/notifications/favicon-badge.d.ts +0 -3
  65. package/console/dist/ui/components/notifications/favicon-badge.js +0 -68
  66. package/console/dist/ui/components/notifications/notification-reducer.d.ts +0 -9
  67. package/console/dist/ui/components/notifications/notification-reducer.js +0 -9
  68. package/console/dist/ui/components/notifications/sound-storage.d.ts +0 -3
  69. package/console/dist/ui/components/notifications/sound-storage.js +0 -37
  70. package/console/dist/ui/components/notifications/useNotifications.d.ts +0 -1
  71. package/console/dist/ui/components/notifications/useNotifications.js +0 -9
  72. package/console/dist/ui/components/onboarding/CircuitDiagram.d.ts +0 -8
  73. package/console/dist/ui/components/onboarding/CircuitDiagram.js +0 -18
  74. package/console/dist/ui/components/onboarding/DemoResultView.d.ts +0 -22
  75. package/console/dist/ui/components/onboarding/DemoResultView.js +0 -33
  76. package/console/dist/ui/components/onboarding/SlashCommandsCard.d.ts +0 -16
  77. package/console/dist/ui/components/onboarding/SlashCommandsCard.js +0 -20
  78. package/console/dist/ui/components/onboarding/slashCommands.d.ts +0 -20
  79. package/console/dist/ui/components/onboarding/slashCommands.js +0 -22
  80. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +0 -6
  81. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +0 -66
  82. package/console/dist/ui/components/theme-provider.d.ts +0 -14
  83. package/console/dist/ui/components/theme-provider.js +0 -40
  84. package/console/dist/ui/components/theme-toggle.d.ts +0 -2
  85. package/console/dist/ui/components/theme-toggle.js +0 -11
  86. package/console/dist/ui/components/ui/alert-dialog.d.ts +0 -20
  87. package/console/dist/ui/components/ui/alert-dialog.js +0 -26
  88. package/console/dist/ui/components/ui/badge.d.ts +0 -9
  89. package/console/dist/ui/components/ui/badge.js +0 -22
  90. package/console/dist/ui/components/ui/button.d.ts +0 -11
  91. package/console/dist/ui/components/ui/button.js +0 -34
  92. package/console/dist/ui/components/ui/card.d.ts +0 -8
  93. package/console/dist/ui/components/ui/card.js +0 -16
  94. package/console/dist/ui/components/ui/charts.d.ts +0 -51
  95. package/console/dist/ui/components/ui/charts.js +0 -72
  96. package/console/dist/ui/components/ui/dialog.d.ts +0 -19
  97. package/console/dist/ui/components/ui/dialog.js +0 -22
  98. package/console/dist/ui/components/ui/input.d.ts +0 -3
  99. package/console/dist/ui/components/ui/input.js +0 -8
  100. package/console/dist/ui/components/ui/markdown.d.ts +0 -24
  101. package/console/dist/ui/components/ui/markdown.js +0 -119
  102. package/console/dist/ui/components/ui/progress-bar.d.ts +0 -20
  103. package/console/dist/ui/components/ui/progress-bar.js +0 -38
  104. package/console/dist/ui/components/ui/select.d.ts +0 -13
  105. package/console/dist/ui/components/ui/select.js +0 -26
  106. package/console/dist/ui/components/ui/separator.d.ts +0 -3
  107. package/console/dist/ui/components/ui/separator.js +0 -6
  108. package/console/dist/ui/components/ui/sheet.d.ts +0 -25
  109. package/console/dist/ui/components/ui/sheet.js +0 -37
  110. package/console/dist/ui/components/ui/shiny-text.d.ts +0 -28
  111. package/console/dist/ui/components/ui/shiny-text.js +0 -46
  112. package/console/dist/ui/components/ui/skeleton.d.ts +0 -3
  113. package/console/dist/ui/components/ui/skeleton.js +0 -6
  114. package/console/dist/ui/components/ui/sonner.d.ts +0 -3
  115. package/console/dist/ui/components/ui/sonner.js +0 -13
  116. package/console/dist/ui/components/ui/tooltip.d.ts +0 -7
  117. package/console/dist/ui/components/ui/tooltip.js +0 -10
  118. package/console/dist/ui/data/daily-thoughts.d.ts +0 -15
  119. package/console/dist/ui/data/daily-thoughts.js +0 -164
  120. package/console/dist/ui/hooks/useNotificationSound.d.ts +0 -12
  121. package/console/dist/ui/hooks/useNotificationSound.js +0 -74
  122. package/console/dist/ui/i18n/en.json +0 -2399
  123. package/console/dist/ui/i18n/index.d.ts +0 -2
  124. package/console/dist/ui/i18n/index.js +0 -32
  125. package/console/dist/ui/i18n/zh-CN.json +0 -2399
  126. package/console/dist/ui/main.d.ts +0 -1
  127. package/console/dist/ui/main.js +0 -9
  128. package/console/dist/ui/pages/ReportProblemValidators.d.ts +0 -144
  129. package/console/dist/ui/pages/ReportProblemValidators.js +0 -418
  130. package/console/dist/ui/pages/activation/ActivationPage.d.ts +0 -1
  131. package/console/dist/ui/pages/activation/ActivationPage.js +0 -512
  132. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +0 -20
  133. package/console/dist/ui/pages/activation/ActivationValidators.js +0 -160
  134. package/console/dist/ui/pages/control-center/AgentCard.d.ts +0 -31
  135. package/console/dist/ui/pages/control-center/AgentCard.js +0 -212
  136. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +0 -26
  137. package/console/dist/ui/pages/control-center/AgentGroup.js +0 -38
  138. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +0 -1
  139. package/console/dist/ui/pages/control-center/ControlCenterPage.js +0 -509
  140. package/console/dist/ui/pages/control-center/DesignGatePanel.d.ts +0 -1
  141. package/console/dist/ui/pages/control-center/DesignGatePanel.js +0 -137
  142. package/console/dist/ui/pages/control-center/RuntimeProfileManager.d.ts +0 -31
  143. package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +0 -199
  144. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +0 -17
  145. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +0 -55
  146. package/console/dist/ui/pages/debt/DebtPage.d.ts +0 -2
  147. package/console/dist/ui/pages/debt/DebtPage.js +0 -222
  148. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +0 -2
  149. package/console/dist/ui/pages/design-system/DesignSystemPage.js +0 -30
  150. package/console/dist/ui/pages/examiner/ExaminerPage.d.ts +0 -15
  151. package/console/dist/ui/pages/examiner/ExaminerPage.js +0 -158
  152. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.d.ts +0 -1
  153. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +0 -421
  154. package/console/dist/ui/pages/focus/ApprovalSubjectReading.d.ts +0 -24
  155. package/console/dist/ui/pages/focus/ApprovalSubjectReading.js +0 -133
  156. package/console/dist/ui/pages/focus/FocusPage.d.ts +0 -123
  157. package/console/dist/ui/pages/focus/FocusPage.js +0 -567
  158. package/console/dist/ui/pages/focus/OwnerDecisionCard.d.ts +0 -9
  159. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +0 -111
  160. package/console/dist/ui/pages/focus/OwnerWorkbench.d.ts +0 -19
  161. package/console/dist/ui/pages/focus/OwnerWorkbench.js +0 -75
  162. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +0 -34
  163. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +0 -298
  164. package/console/dist/ui/pages/focus/focus-validation.d.ts +0 -40
  165. package/console/dist/ui/pages/focus/focus-validation.js +0 -211
  166. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +0 -67
  167. package/console/dist/ui/pages/intent/IntentOnboarding.js +0 -289
  168. package/console/dist/ui/pages/intent/IntentPage.d.ts +0 -1
  169. package/console/dist/ui/pages/intent/IntentPage.js +0 -252
  170. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +0 -59
  171. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +0 -125
  172. package/console/dist/ui/pages/pain/PainPage.d.ts +0 -1
  173. package/console/dist/ui/pages/pain/PainPage.js +0 -420
  174. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +0 -175
  175. package/console/dist/ui/pages/pain/pain-card-helpers.js +0 -181
  176. package/console/dist/ui/pages/principles/CorePrinciplesPage.d.ts +0 -10
  177. package/console/dist/ui/pages/principles/CorePrinciplesPage.js +0 -59
  178. package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +0 -60
  179. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +0 -602
  180. package/console/dist/ui/pages/principles/PrinciplesPage.d.ts +0 -1
  181. package/console/dist/ui/pages/principles/PrinciplesPage.js +0 -327
  182. package/console/dist/ui/pages/principles/PrinciplesViewNav.d.ts +0 -8
  183. package/console/dist/ui/pages/principles/PrinciplesViewNav.js +0 -15
  184. package/console/dist/ui/pages/report-problem/ReportProblemPage.d.ts +0 -1
  185. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +0 -467
  186. package/console/dist/ui/pages/settings/SettingsPage.d.ts +0 -4
  187. package/console/dist/ui/pages/settings/SettingsPage.js +0 -457
  188. package/console/dist/ui/pages/settings/UpdatePage.d.ts +0 -1
  189. package/console/dist/ui/pages/settings/UpdatePage.js +0 -215
  190. package/console/dist/ui/pages/welcome/WelcomePage.d.ts +0 -5
  191. package/console/dist/ui/pages/welcome/WelcomePage.js +0 -187
  192. package/console/dist/ui/utils/agent-metadata.d.ts +0 -71
  193. package/console/dist/ui/utils/agent-metadata.js +0 -284
  194. package/console/dist/ui/utils/approval-review.d.ts +0 -30
  195. package/console/dist/ui/utils/approval-review.js +0 -50
  196. package/console/dist/ui/utils/approval-warning-localization.d.ts +0 -34
  197. package/console/dist/ui/utils/approval-warning-localization.js +0 -148
  198. package/console/dist/ui/utils/attention-presentation.d.ts +0 -35
  199. package/console/dist/ui/utils/attention-presentation.js +0 -46
  200. package/console/dist/ui/utils/blocker-localization.d.ts +0 -23
  201. package/console/dist/ui/utils/blocker-localization.js +0 -36
  202. package/console/dist/ui/utils/control-center-helpers.d.ts +0 -79
  203. package/console/dist/ui/utils/control-center-helpers.js +0 -189
  204. package/console/dist/ui/utils/enum-labels.d.ts +0 -50
  205. package/console/dist/ui/utils/enum-labels.js +0 -171
  206. package/console/dist/ui/utils/format-date.d.ts +0 -11
  207. package/console/dist/ui/utils/format-date.js +0 -17
  208. package/console/dist/ui/utils/onboarding-state.d.ts +0 -25
  209. package/console/dist/ui/utils/onboarding-state.js +0 -77
  210. package/console/dist/ui/utils/reading-layout.d.ts +0 -20
  211. package/console/dist/ui/utils/reading-layout.js +0 -46
  212. package/console/dist/ui/utils/rule-binding-validators.d.ts +0 -13
  213. package/console/dist/ui/utils/rule-binding-validators.js +0 -188
  214. package/console/dist/ui/utils/runtime-mode.d.ts +0 -11
  215. package/console/dist/ui/utils/runtime-mode.js +0 -11
  216. package/console/dist/ui/utils/token-storage.d.ts +0 -22
  217. package/console/dist/ui/utils/token-storage.js +0 -47
  218. package/console/dist/ui/utils/validators.d.ts +0 -1178
  219. package/console/dist/ui/utils/validators.js +0 -3297
  220. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts +0 -126
  221. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts.map +0 -1
  222. package/core/dist/runtime-v2/evidence-triage/admission-events.js +0 -159
  223. package/core/dist/runtime-v2/evidence-triage/admission-events.js.map +0 -1
  224. package/plugin/dist/core/detection-funnel.d.ts +0 -47
  225. package/plugin/dist/core/detection-service.d.ts +0 -15
  226. package/release-manager/dist/bootstrap-entry.d.ts +0 -2
  227. package/release-manager/dist/bootstrap-entry.d.ts.map +0 -1
  228. package/release-manager/dist/bootstrap-entry.js.map +0 -1
  229. package/release-manager/dist/i18n.d.ts +0 -6
  230. package/release-manager/dist/i18n.d.ts.map +0 -1
  231. package/release-manager/dist/i18n.js.map +0 -1
  232. package/release-manager/dist/index.d.ts +0 -7
  233. package/release-manager/dist/index.d.ts.map +0 -1
  234. package/release-manager/dist/index.js +0 -656
  235. package/release-manager/dist/index.js.map +0 -1
  236. package/release-manager/dist/installer.d.ts +0 -629
  237. package/release-manager/dist/installer.d.ts.map +0 -1
  238. package/release-manager/dist/installer.js.map +0 -1
  239. package/release-manager/dist/installers/codex-host-installer.d.ts +0 -39
  240. package/release-manager/dist/installers/codex-host-installer.d.ts.map +0 -1
  241. package/release-manager/dist/installers/codex-host-installer.js.map +0 -1
  242. package/release-manager/dist/installers/index.d.ts +0 -51
  243. package/release-manager/dist/installers/index.d.ts.map +0 -1
  244. package/release-manager/dist/installers/index.js.map +0 -1
  245. package/release-manager/dist/installers/openclaw-host-installer.d.ts +0 -14
  246. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +0 -1
  247. package/release-manager/dist/installers/openclaw-host-installer.js.map +0 -1
  248. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +0 -335
  249. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +0 -1
  250. package/release-manager/dist/installers/workbuddy-host-installer.js.map +0 -1
  251. package/release-manager/dist/mvp-config.d.ts +0 -233
  252. package/release-manager/dist/mvp-config.d.ts.map +0 -1
  253. package/release-manager/dist/mvp-config.js.map +0 -1
  254. package/release-manager/dist/prompts.d.ts +0 -43
  255. package/release-manager/dist/prompts.d.ts.map +0 -1
  256. package/release-manager/dist/prompts.js +0 -268
  257. package/release-manager/dist/prompts.js.map +0 -1
  258. package/release-manager/dist/skill-language.d.ts +0 -32
  259. package/release-manager/dist/skill-language.d.ts.map +0 -1
  260. package/release-manager/dist/skill-language.js.map +0 -1
  261. package/release-manager/dist/uninstaller.d.ts +0 -68
  262. package/release-manager/dist/uninstaller.d.ts.map +0 -1
  263. package/release-manager/dist/uninstaller.js +0 -746
  264. package/release-manager/dist/uninstaller.js.map +0 -1
  265. package/release-manager/dist/update/apply-payload.d.ts +0 -143
  266. package/release-manager/dist/update/apply-payload.d.ts.map +0 -1
  267. package/release-manager/dist/update/apply-payload.js.map +0 -1
  268. package/release-manager/dist/update/atomic-file.d.ts +0 -35
  269. package/release-manager/dist/update/atomic-file.d.ts.map +0 -1
  270. package/release-manager/dist/update/atomic-file.js.map +0 -1
  271. package/release-manager/dist/update/bootstrap-executor.d.ts +0 -21
  272. package/release-manager/dist/update/bootstrap-executor.d.ts.map +0 -1
  273. package/release-manager/dist/update/bootstrap-executor.js.map +0 -1
  274. package/release-manager/dist/update/bootstrap-protocol.d.ts +0 -56
  275. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +0 -1
  276. package/release-manager/dist/update/bootstrap-protocol.js.map +0 -1
  277. package/release-manager/dist/update/channel-metadata.d.ts +0 -28
  278. package/release-manager/dist/update/channel-metadata.d.ts.map +0 -1
  279. package/release-manager/dist/update/channel-metadata.js.map +0 -1
  280. package/release-manager/dist/update/channel-promotion.d.ts +0 -39
  281. package/release-manager/dist/update/channel-promotion.d.ts.map +0 -1
  282. package/release-manager/dist/update/channel-promotion.js +0 -55
  283. package/release-manager/dist/update/channel-promotion.js.map +0 -1
  284. package/release-manager/dist/update/console-surface.d.ts +0 -19
  285. package/release-manager/dist/update/console-surface.d.ts.map +0 -1
  286. package/release-manager/dist/update/console-surface.js.map +0 -1
  287. package/release-manager/dist/update/data-compatibility.d.ts +0 -35
  288. package/release-manager/dist/update/data-compatibility.d.ts.map +0 -1
  289. package/release-manager/dist/update/data-compatibility.js +0 -45
  290. package/release-manager/dist/update/data-compatibility.js.map +0 -1
  291. package/release-manager/dist/update/install-layout.d.ts +0 -105
  292. package/release-manager/dist/update/install-layout.d.ts.map +0 -1
  293. package/release-manager/dist/update/install-layout.js.map +0 -1
  294. package/release-manager/dist/update/product-identity.d.ts +0 -70
  295. package/release-manager/dist/update/product-identity.d.ts.map +0 -1
  296. package/release-manager/dist/update/product-identity.js.map +0 -1
  297. package/release-manager/dist/update/release-asset-manifest.d.ts +0 -31
  298. package/release-manager/dist/update/release-asset-manifest.d.ts.map +0 -1
  299. package/release-manager/dist/update/release-asset-manifest.js.map +0 -1
  300. package/release-manager/dist/update/release-identity.d.ts +0 -33
  301. package/release-manager/dist/update/release-identity.d.ts.map +0 -1
  302. package/release-manager/dist/update/release-identity.js.map +0 -1
  303. package/release-manager/dist/update/release-manager-authority.d.ts +0 -39
  304. package/release-manager/dist/update/release-manager-authority.d.ts.map +0 -1
  305. package/release-manager/dist/update/release-manager-authority.js.map +0 -1
  306. package/release-manager/dist/update/release-manager.d.ts +0 -156
  307. package/release-manager/dist/update/release-manager.d.ts.map +0 -1
  308. package/release-manager/dist/update/release-manager.js.map +0 -1
  309. package/release-manager/dist/update/release-metadata-publisher.d.ts +0 -199
  310. package/release-manager/dist/update/release-metadata-publisher.d.ts.map +0 -1
  311. package/release-manager/dist/update/release-metadata-publisher.js +0 -478
  312. package/release-manager/dist/update/release-metadata-publisher.js.map +0 -1
  313. package/release-manager/dist/update/release-metadata-source.d.ts +0 -85
  314. package/release-manager/dist/update/release-metadata-source.d.ts.map +0 -1
  315. package/release-manager/dist/update/release-metadata-source.js.map +0 -1
  316. package/release-manager/dist/update/release-metadata.d.ts +0 -60
  317. package/release-manager/dist/update/release-metadata.d.ts.map +0 -1
  318. package/release-manager/dist/update/release-metadata.js.map +0 -1
  319. package/release-manager/dist/update/release-policy.d.ts +0 -51
  320. package/release-manager/dist/update/release-policy.d.ts.map +0 -1
  321. package/release-manager/dist/update/release-policy.js.map +0 -1
  322. package/release-manager/dist/update/rollback-policy.d.ts +0 -56
  323. package/release-manager/dist/update/rollback-policy.d.ts.map +0 -1
  324. package/release-manager/dist/update/rollback-policy.js +0 -61
  325. package/release-manager/dist/update/rollback-policy.js.map +0 -1
  326. package/release-manager/dist/update/transaction-journal.d.ts +0 -212
  327. package/release-manager/dist/update/transaction-journal.d.ts.map +0 -1
  328. package/release-manager/dist/update/transaction-journal.js.map +0 -1
  329. package/release-manager/dist/update/trust-metadata.d.ts +0 -55
  330. package/release-manager/dist/update/trust-metadata.d.ts.map +0 -1
  331. package/release-manager/dist/update/trust-metadata.js.map +0 -1
  332. package/release-manager/dist/update/trust-root-provisioning.d.ts +0 -99
  333. package/release-manager/dist/update/trust-root-provisioning.d.ts.map +0 -1
  334. package/release-manager/dist/update/trust-root-provisioning.js.map +0 -1
  335. package/release-manager/dist/update/update-history.d.ts +0 -46
  336. package/release-manager/dist/update/update-history.d.ts.map +0 -1
  337. package/release-manager/dist/update/update-history.js +0 -123
  338. package/release-manager/dist/update/update-history.js.map +0 -1
  339. package/release-manager/dist/utils/config-file-io.d.ts +0 -34
  340. package/release-manager/dist/utils/config-file-io.d.ts.map +0 -1
  341. package/release-manager/dist/utils/config-file-io.js.map +0 -1
  342. package/release-manager/dist/utils/env.d.ts +0 -94
  343. package/release-manager/dist/utils/env.d.ts.map +0 -1
  344. package/release-manager/dist/utils/env.js.map +0 -1
  345. package/release-manager/dist/utils/logger.d.ts +0 -15
  346. package/release-manager/dist/utils/logger.d.ts.map +0 -1
  347. package/release-manager/dist/utils/logger.js.map +0 -1
  348. package/release-manager/dist/utils/workspace-divergence.d.ts +0 -36
  349. package/release-manager/dist/utils/workspace-divergence.d.ts.map +0 -1
  350. package/release-manager/dist/utils/workspace-divergence.js.map +0 -1
@@ -1,478 +0,0 @@
1
- /**
2
- * Release metadata publisher (PRI-727) — the production supply side of the
3
- * read contracts in release-metadata-source.ts / trust-metadata.ts.
4
- *
5
- * For one release this module emits EXACTLY the byte set ReleaseManager
6
- * already consumes (see apply-payload.ts and release-manager.ts):
7
- *
8
- * root.json / timestamp.json / snapshot.json / targets.json TUF chain
9
- * targets/channels/<channel>.json signed channel pointer payload
10
- * targets/releases/<releaseId>/metadata.json release metadata payload
11
- * targets/releases/<releaseId>/release-asset-<platform>-<arch>.tar.gz
12
- *
13
- * No second release identity: releaseId and the canonical digests come from
14
- * deriveReleaseId/buildReleaseMetadata, and both produced documents are
15
- * re-validated with the SAME strict parsers the ReleaseManager uses, so a
16
- * publisher-side defect fails here instead of at an install. Publication is
17
- * byte-deterministic: the same identity inputs, the same signing key and the
18
- * same previous-state TUF versions re-emit identical files (idempotent
19
- * re-publish of one release is a no-op, not a mutation).
20
- *
21
- * Advance discipline: the channel pointer is only produced together with the
22
- * artifact target whose sha256 is bound into the release metadata — there is
23
- * no API shape that advances the pointer without the verifiable artifact
24
- * existing in the same file set. Monotonicity against the currently
25
- * published channel pointer (`previous`) is enforced here, fail-loud, before
26
- * any bytes are emitted.
27
- *
28
- * Trust material: one ed25519 key signs all four TUF roles — the same
29
- * single-key shape the ReleaseManager test suite verifies against. The
30
- * install side pins root.json at install time, so this module never rotates
31
- * the root (root version stays 1; rotation is separate governance work).
32
- */
33
- import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, sign as cryptoSign } from 'node:crypto';
34
- import { gzipSync } from 'node:zlib';
35
- import { Key, Metadata, MetadataKind, MetaFile, Root, Signature, Snapshot, TargetFile, Targets, Timestamp, } from '@tufjs/models';
36
- import { parseChannelMetadata } from './channel-metadata.js';
37
- import { buildReleaseMetadata, } from './release-metadata.js';
38
- import { isReleaseChannelName, } from './product-identity.js';
39
- import { canonicalJson } from './release-identity.js';
40
- export const RELEASE_PUBLICATION_TUF_SPEC_VERSION = '1.0.31';
41
- export class ReleasePublicationError extends Error {
42
- code;
43
- field;
44
- nextAction;
45
- // eslint-disable-next-line @typescript-eslint/max-params -- (code, field, message, nextAction) mirrors the four fields of the consumer refusal contract (same shape as ReleaseManagerError / ReleaseTrustError)
46
- constructor(code, field, message, nextAction) {
47
- super(message);
48
- this.name = 'ReleasePublicationError';
49
- this.code = code;
50
- this.field = field;
51
- this.nextAction = nextAction;
52
- }
53
- }
54
- const RFC3339_UTC_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$/;
55
- function isPlainObject(value) {
56
- return typeof value === 'object' && value !== null && !Array.isArray(value);
57
- }
58
- function requirePositiveInteger(value, field) {
59
- if (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0) {
60
- throw new ReleasePublicationError('invalid_input', field, `${field} must be a positive safe integer, got: ${JSON.stringify(value)}`, 'Pass an explicit monotonic value and retry the publication.');
61
- }
62
- return value;
63
- }
64
- function requireExpiresAt(value) {
65
- if (typeof value !== 'string' || !RFC3339_UTC_PATTERN.test(value) || Number.isNaN(Date.parse(value))) {
66
- throw new ReleasePublicationError('invalid_input', 'expiresAt', `expiresAt must be an RFC3339 UTC timestamp ending in Z, got: ${JSON.stringify(value)}`, 'Pass an explicit expiry (for example 2026-12-01T00:00:00Z); implicit defaults would break reproducible re-publication.');
67
- }
68
- if (Date.parse(value) <= Date.now()) {
69
- throw new ReleasePublicationError('expires_not_future', 'expiresAt', `expiresAt must be in the future, got: ${value}`, 'Publish with an expiry ahead of the release window; clients refuse expired metadata.');
70
- }
71
- return value;
72
- }
73
- function requireSigner(signingKeyPem) {
74
- if (typeof signingKeyPem !== 'string' || signingKeyPem.trim().length === 0) {
75
- throw new ReleasePublicationError('signing_key_invalid', 'signingKeyPem', 'The release signing key is empty.', 'Provide the ed25519 private key PEM (CI secret) that matches the pinned trust root.');
76
- }
77
- let privateKey;
78
- try {
79
- privateKey = createPrivateKey(signingKeyPem);
80
- }
81
- catch (error) {
82
- throw new ReleasePublicationError('signing_key_invalid', 'signingKeyPem', `The release signing key is not a parseable private key: ${error instanceof Error ? error.message : String(error)}`, 'Provide a PEM-encoded ed25519 private key.');
83
- }
84
- if (privateKey.asymmetricKeyType !== 'ed25519') {
85
- throw new ReleasePublicationError('signing_key_invalid', 'signingKeyPem', `The release signing key must be an ed25519 key, got: ${String(privateKey.asymmetricKeyType)}`, 'Generate an ed25519 key for the release trust material.');
86
- }
87
- const publicKeyPem = createPublicKey(privateKey).export({ type: 'spki', format: 'pem' }).toString();
88
- // Deterministic key id derived from the public key material, so the same
89
- // key always produces the same root.json bytes (reproducibility).
90
- const keyId = createHash('sha256').update(publicKeyPem).digest('hex');
91
- return { keyId, privateKey };
92
- }
93
- function signedTufMetadata(signed, signer) {
94
- const metadata = new Metadata(signed);
95
- metadata.sign((data) => new Signature({ keyID: signer.keyId, sig: cryptoSign(null, data, signer.privateKey).toString('hex') }), false);
96
- return Buffer.from(JSON.stringify(metadata.toJSON()), 'utf8');
97
- }
98
- function deterministicJsonBytes(value) {
99
- return Buffer.from(`${JSON.stringify(value, null, 2)}\n`, 'utf8');
100
- }
101
- function sha256Hex(bytes) {
102
- return createHash('sha256').update(bytes).digest('hex');
103
- }
104
- function withFileDigests(files) {
105
- return files.map((file) => ({ path: file.path, sha256: sha256Hex(file.bytes), sizeBytes: file.bytes.length }));
106
- }
107
- /**
108
- * Gzip wrapper for a built release archive. Node's zlib emits a deterministic
109
- * gzip header (no embedded mtime or file name), so the same archive bytes
110
- * always produce the same published artifact bytes — the CLI `gzip` would not
111
- * (it stores name + mtime in the header).
112
- */
113
- export function gzipReleaseArchive(archiveBytes) {
114
- return gzipSync(archiveBytes);
115
- }
116
- /**
117
- * Parses a `sha256sum`-style digest file (`<hex>` or `<hex> <name>`) into
118
- * the lowercase hex digest, failing loud on anything else.
119
- */
120
- export function parseSha256DigestFile(content) {
121
- const firstToken = content.trim().split(/\s+/, 1)[0] ?? '';
122
- if (!/^[a-f0-9]{64}$/i.test(firstToken)) {
123
- throw new ReleasePublicationError('invalid_input', 'digestFile', `The release archive digest file does not contain a sha256 hex digest: ${JSON.stringify(firstToken.slice(0, 72))}`, 'Regenerate the release asset so its .sha256 sidecar exists, then retry.');
124
- }
125
- return firstToken.toLowerCase();
126
- }
127
- /**
128
- * True when the input is a syntactically valid RFC3339 UTC timestamp
129
- * (`...Z`). Exported for CLI argument validation before any IO happens.
130
- */
131
- export function isRfc3339UtcTimestamp(value) {
132
- return typeof value === 'string' && RFC3339_UTC_PATTERN.test(value) && !Number.isNaN(Date.parse(value));
133
- }
134
- function resolvePreviousState(input, channelPayload) {
135
- const { previous } = input;
136
- if (previous === undefined || previous === null) {
137
- return { previousChannel: null, versions: { root: 1, timestamp: 1, snapshot: 1, targets: 1 } };
138
- }
139
- if (previous.channelPayload !== undefined && previous.channelPayload !== null) {
140
- if (!isPlainObject(previous.channelPayload)) {
141
- throw new ReleasePublicationError('invalid_input', 'previous.channelPayload', 'The previously published channel payload is not a JSON object.', 'Inspect the published metadata repository; a corrupt pointer must be repaired before publishing.');
142
- }
143
- // A published pointer without its TUF versions would let this publication
144
- // emit metadata versions the published repository already superseded —
145
- // a rollback clients must reject. Require the full previous state.
146
- const versions = previous.tufVersions;
147
- if (versions === undefined || versions.root === undefined || versions.timestamp === undefined
148
- || versions.snapshot === undefined || versions.targets === undefined) {
149
- throw new ReleasePublicationError('invalid_input', 'previous.tufVersions', 'Publishing over an existing metadata repository requires the published TUF metadata versions (root/timestamp/snapshot/targets).', 'Read the versions from the currently published repository and pass them as the previous state.');
150
- }
151
- // Strict parse: a corrupt previous pointer fails the publication instead
152
- // of being silently treated as absent (rc-3).
153
- const previousChannel = parseChannelMetadata(previous.channelPayload);
154
- if (previousChannel.channel !== input.channel) {
155
- throw new ReleasePublicationError('invalid_input', 'previous.channelPayload', `The previously published pointer is for channel "${previousChannel.channel}", not "${input.channel}".`, 'Read the previous state of the channel being published.');
156
- }
157
- const sameRelease = previousChannel.releaseId === channelPayload.releaseId;
158
- if (sameRelease) {
159
- // Re-publishing one release is only legitimate as an exact no-op: any
160
- // content change (sequence, pointer version, expiry) would mutate an
161
- // immutable release identity. Equality is checked on the canonical
162
- // channel payload so formatting cannot fake or break it.
163
- if (canonicalJson(previous.channelPayload) !== canonicalJson(channelPayload)) {
164
- throw new ReleasePublicationError('publication_conflict', 'releaseId', `Release ${channelPayload.releaseId.slice(0, 12)} is already published with different pointer content (publicationSequence ${previousChannel.publicationSequence} vs ${channelPayload.publicationSequence}, pointer version ${previousChannel.version} vs ${channelPayload.version}).`, 'Re-publish with the identical inputs that produced the published release, or publish a NEW release with a strictly higher publication sequence.');
165
- }
166
- }
167
- else {
168
- if (channelPayload.publicationSequence <= previousChannel.publicationSequence) {
169
- throw new ReleasePublicationError('publication_not_monotonic', 'publicationSequence', `The new publicationSequence (${channelPayload.publicationSequence}) must be strictly greater than the published one (${previousChannel.publicationSequence}).`, 'Advance the publication sequence; the channel pointer must never move backwards.');
170
- }
171
- if (channelPayload.version <= previousChannel.version) {
172
- throw new ReleasePublicationError('publication_not_monotonic', 'channelVersion', `The new channel pointer version (${channelPayload.version}) must be strictly greater than the published one (${previousChannel.version}).`, 'Advance the channel pointer version; signed pointer versions must never repeat or regress.');
173
- }
174
- }
175
- return {
176
- previousChannel,
177
- versions: {
178
- root: versions.root,
179
- // An identical re-publish keeps the SAME TUF metadata versions (the
180
- // emitted bytes must stay identical); an advance bumps every
181
- // non-root role so clients see fresh metadata.
182
- timestamp: sameRelease ? versions.timestamp : versions.timestamp + 1,
183
- snapshot: sameRelease ? versions.snapshot : versions.snapshot + 1,
184
- targets: sameRelease ? versions.targets : versions.targets + 1,
185
- },
186
- };
187
- }
188
- const versions = previous.tufVersions ?? {};
189
- return {
190
- previousChannel: null,
191
- versions: { root: versions.root ?? 1, timestamp: (versions.timestamp ?? 0) + 1, snapshot: (versions.snapshot ?? 0) + 1, targets: (versions.targets ?? 0) + 1 },
192
- };
193
- }
194
- /**
195
- * PRI-854: the content-addressed asset file name shared by the metadata url
196
- * stamping and the upload manifest (single naming truth — review P3).
197
- */
198
- export function contentAddressedAssetName(input) {
199
- return `release-asset-${input.platform}-${input.arch}-abi${input.nodeAbi}-${input.digestHex.slice(0, 12)}.tar.gz`;
200
- }
201
- /**
202
- * Builds the complete signed release publication. Pure: no filesystem or
203
- * network IO — callers (the publish script / CI) own byte transport.
204
- */
205
- export function buildReleasePublication(input) {
206
- if (!isReleaseChannelName(input.channel)) {
207
- throw new ReleasePublicationError('invalid_input', 'channel', `channel must be "stable" or "candidate", got: ${JSON.stringify(input.channel)}`, 'Publish to a configured release channel.');
208
- }
209
- requirePositiveInteger(input.channelVersion, 'channelVersion');
210
- requirePositiveInteger(input.publicationSequence, 'publicationSequence');
211
- requireExpiresAt(input.expiresAt);
212
- if (!Array.isArray(input.archives) || input.archives.length === 0) {
213
- throw new ReleasePublicationError('invalid_input', 'archives', 'The release publication must declare at least one platform archive.', 'Build the self-contained release asset first; nothing is published without the artifact bytes.');
214
- }
215
- const PLATFORM_ARCH_PATTERN = /^[a-z0-9-]+$/;
216
- const sortedArchives = [...input.archives].sort((a, b) => {
217
- const keyA = `${a.platform}/${a.arch}/abi${a.nodeAbi}`;
218
- const keyB = `${b.platform}/${b.arch}/abi${b.nodeAbi}`;
219
- return keyA < keyB ? -1 : keyA > keyB ? 1 : 0;
220
- });
221
- // PRI-852 review fix: the duplicate key is the FULL asset identity —
222
- // platform + arch + Node ABI. Two runtimes on one platform are DISTINCT
223
- // assets with distinct target paths; only a true triple collision
224
- // (same platform/arch/ABI twice) is a publication error.
225
- const seenAssetTargets = new Set();
226
- for (const [index, archive] of sortedArchives.entries()) {
227
- for (const [field, value] of [['platform', archive.platform], ['arch', archive.arch]]) {
228
- if (typeof value !== 'string' || value.length === 0 || !PLATFORM_ARCH_PATTERN.test(value)) {
229
- throw new ReleasePublicationError('invalid_input', `archives[${index}].${field}`, `archives[${index}].${field} must be a non-empty lowercase identifier, got: ${JSON.stringify(value)}`, 'Pass the platform/arch triple the CI matrix job built the archive for.');
230
- }
231
- }
232
- if (typeof archive.nodeAbi !== 'string' || !/^\d+$/.test(archive.nodeAbi)) {
233
- throw new ReleasePublicationError('invalid_input', `archives[${index}].nodeAbi`, `archives[${index}].nodeAbi must be a numeric Node ABI string (e.g. "137"), got: ${JSON.stringify(archive.nodeAbi)}`, 'Pass the Node ABI the archive was built against.');
234
- }
235
- if (!Buffer.isBuffer(archive.bytes) || archive.bytes.length === 0) {
236
- throw new ReleasePublicationError('invalid_input', `archives[${index}].bytes`, 'The release archive is empty or missing.', 'Build the self-contained release asset first; nothing is published without the artifact bytes.');
237
- }
238
- const assetTarget = `${archive.platform}/${archive.arch}/abi${archive.nodeAbi}`;
239
- if (seenAssetTargets.has(assetTarget)) {
240
- throw new ReleasePublicationError('invalid_input', `archives[${index}]`, `Duplicate asset identity: ${assetTarget} — two archives claim the same platform, architecture and Node ABI.`, 'Pass exactly one archive per platform/arch/ABI triple; different runtimes must publish their own ABI-qualified assets.');
241
- }
242
- seenAssetTargets.add(assetTarget);
243
- }
244
- const signer = requireSigner(input.signingKeyPem);
245
- // Artifact bytes are finalized FIRST: the release metadata binds their
246
- // digests, the channel binds the metadata digest. By construction the
247
- // emitted channel pointer can never reference an artifact that is not part
248
- // of the same publication.
249
- const artifacts = sortedArchives.map((archive) => ({
250
- platform: archive.platform,
251
- arch: archive.arch,
252
- nodeAbi: archive.nodeAbi,
253
- bytes: archive.bytes,
254
- sha256: sha256Hex(archive.bytes),
255
- ...(archive.url !== undefined ? { url: archive.url } : {}),
256
- }));
257
- const releaseMetadata = buildReleaseMetadata({
258
- productVersion: input.productVersion,
259
- sourceCommit: input.sourceCommit,
260
- minBootstrapVersion: input.minBootstrapVersion,
261
- publicationSequence: input.publicationSequence,
262
- expiresAt: input.expiresAt,
263
- assets: artifacts.map((artifact) => ({
264
- platform: artifact.platform,
265
- arch: artifact.arch,
266
- nodeAbi: artifact.nodeAbi,
267
- archiveSha256: artifact.sha256,
268
- archiveSizeBytes: artifact.bytes.length,
269
- ...(artifact.url !== undefined ? { url: artifact.url } : {}),
270
- })),
271
- dataSchemaForwardReadableFrom: input.dataSchemaForwardReadableFrom,
272
- });
273
- const channelPayload = {
274
- schemaVersion: 1,
275
- channel: input.channel,
276
- version: input.channelVersion,
277
- expiresAt: input.expiresAt,
278
- releaseMetadataDigest: releaseMetadata.metadataDigest,
279
- releaseId: releaseMetadata.releaseId,
280
- productVersion: releaseMetadata.productVersion,
281
- publicationSequence: releaseMetadata.publicationSequence,
282
- };
283
- // Consume-side strict re-validation: if the publisher ever produces a
284
- // document the ReleaseManager would refuse, refuse here instead.
285
- parseChannelMetadata(channelPayload);
286
- const { versions } = resolvePreviousState(input, channelPayload);
287
- const channelTargetPath = `channels/${input.channel}.json`;
288
- const metadataTargetPath = `releases/${releaseMetadata.releaseId}/metadata.json`;
289
- const channelPayloadBytes = deterministicJsonBytes(channelPayload);
290
- const releaseMetadataBytes = deterministicJsonBytes(releaseMetadata);
291
- const artifactTargets = {};
292
- const artifactFiles = [];
293
- const manifestArtifacts = artifacts.map((artifact) => {
294
- // PRI-854 (option A): when the archive carries a delivery url, the bytes
295
- // are served from that location (GitHub Release attachment) and are NOT
296
- // written into the metadata repository — only their signed digest travels
297
- // with the metadata. artifactTargetPath stays the conventional relative
298
- // path shape in BOTH modes (single semantic, review P2); the actual byte
299
- // carrier is artifactUrl when present. Without a url, the legacy in-repo
300
- // target is used.
301
- const conventionalPath = `releases/${releaseMetadata.releaseId}/release-asset-${artifact.platform}-${artifact.arch}-abi${artifact.nodeAbi}.tar.gz`;
302
- if (artifact.url !== undefined) {
303
- return {
304
- platform: artifact.platform,
305
- arch: artifact.arch,
306
- nodeAbi: artifact.nodeAbi,
307
- artifactSha256: artifact.sha256,
308
- artifactSizeBytes: artifact.bytes.length,
309
- artifactTargetPath: conventionalPath,
310
- artifactUrl: artifact.url,
311
- };
312
- }
313
- artifactTargets[conventionalPath] = new TargetFile({
314
- path: conventionalPath,
315
- length: artifact.bytes.length,
316
- hashes: { sha256: artifact.sha256 },
317
- unrecognizedFields: {
318
- custom: { releaseId: releaseMetadata.releaseId, channel: input.channel, platform: artifact.platform },
319
- },
320
- });
321
- artifactFiles.push({ path: `targets/${conventionalPath}`, bytes: artifact.bytes });
322
- return {
323
- platform: artifact.platform,
324
- arch: artifact.arch,
325
- nodeAbi: artifact.nodeAbi,
326
- artifactSha256: artifact.sha256,
327
- artifactSizeBytes: artifact.bytes.length,
328
- artifactTargetPath: conventionalPath,
329
- };
330
- });
331
- const targets = new Targets({
332
- version: versions.targets,
333
- specVersion: RELEASE_PUBLICATION_TUF_SPEC_VERSION,
334
- expires: input.expiresAt,
335
- targets: {
336
- [channelTargetPath]: new TargetFile({
337
- path: channelTargetPath,
338
- length: channelPayloadBytes.length,
339
- hashes: { sha256: sha256Hex(channelPayloadBytes) },
340
- unrecognizedFields: {
341
- custom: { releaseId: releaseMetadata.releaseId, channel: input.channel, platform: 'metadata' },
342
- },
343
- }),
344
- [metadataTargetPath]: new TargetFile({
345
- path: metadataTargetPath,
346
- length: releaseMetadataBytes.length,
347
- hashes: { sha256: sha256Hex(releaseMetadataBytes) },
348
- unrecognizedFields: {
349
- custom: { releaseId: releaseMetadata.releaseId, channel: input.channel, platform: 'metadata' },
350
- },
351
- }),
352
- ...artifactTargets,
353
- },
354
- });
355
- const root = new Root({
356
- version: versions.root,
357
- specVersion: RELEASE_PUBLICATION_TUF_SPEC_VERSION,
358
- expires: input.expiresAt,
359
- consistentSnapshot: false,
360
- });
361
- const signingKey = new Key({
362
- keyID: signer.keyId,
363
- keyType: 'ed25519',
364
- scheme: 'ed25519',
365
- keyVal: { public: createPublicKey(signer.privateKey).export({ type: 'spki', format: 'pem' }).toString() },
366
- });
367
- for (const role of ['root', 'timestamp', 'snapshot', 'targets'])
368
- root.addKey(signingKey, role);
369
- const files = [
370
- { path: 'root.json', bytes: signedTufMetadata(root, signer) },
371
- { path: 'timestamp.json', bytes: signedTufMetadata(new Timestamp({
372
- version: versions.timestamp,
373
- specVersion: RELEASE_PUBLICATION_TUF_SPEC_VERSION,
374
- expires: input.expiresAt,
375
- snapshotMeta: new MetaFile({ version: versions.snapshot }),
376
- }), signer) },
377
- { path: 'snapshot.json', bytes: signedTufMetadata(new Snapshot({
378
- version: versions.snapshot,
379
- specVersion: RELEASE_PUBLICATION_TUF_SPEC_VERSION,
380
- expires: input.expiresAt,
381
- meta: { 'targets.json': new MetaFile({ version: versions.targets }) },
382
- }), signer) },
383
- { path: 'targets.json', bytes: signedTufMetadata(targets, signer) },
384
- { path: `targets/${channelTargetPath}`, bytes: channelPayloadBytes },
385
- { path: `targets/${metadataTargetPath}`, bytes: releaseMetadataBytes },
386
- ...artifactFiles,
387
- ];
388
- const manifest = {
389
- releaseId: releaseMetadata.releaseId,
390
- productVersion: releaseMetadata.productVersion,
391
- channel: input.channel,
392
- artifacts: manifestArtifacts,
393
- sourceCommit: input.sourceCommit,
394
- keyId: signer.keyId,
395
- signingScheme: 'ed25519',
396
- publicationSequence: input.publicationSequence,
397
- channelVersion: input.channelVersion,
398
- expiresAt: input.expiresAt,
399
- files: withFileDigests(files),
400
- };
401
- // PRI-854 (option A): archives with a delivery url are uploaded to the
402
- // release host by the workflow — the publisher hands the exact gzipped
403
- // bytes back under their content-addressed names.
404
- const assetUploads = artifacts
405
- .filter((artifact) => artifact.url !== undefined)
406
- .map((artifact) => ({
407
- name: contentAddressedAssetName({ platform: artifact.platform, arch: artifact.arch, nodeAbi: artifact.nodeAbi, digestHex: artifact.sha256 }),
408
- bytes: artifact.bytes,
409
- }));
410
- return { manifest, releaseMetadata, channelPayload, files, assetUploads };
411
- }
412
- /** Ephemeral ed25519 key PEM for dry-run pipelines without configured trust material. */
413
- export function generateEphemeralSigningKeyPem() {
414
- return generateKeyPairSync('ed25519')
415
- .privateKey
416
- .export({ type: 'pkcs8', format: 'pem' })
417
- .toString();
418
- }
419
- /**
420
- * PRI-732 publish-side guard: a REAL publication must be verifiable by the
421
- * pinned trust root installs actually carry. The current publisher signs
422
- * root, timestamp, snapshot AND targets with the single signing key and emits
423
- * one signature per role, so the key must be authorized for ALL FOUR roles
424
- * under the current threshold-1 publishing contract — a key that can merely
425
- * sign root would produce timestamp/snapshot/targets metadata no existing
426
- * install can verify.
427
- * (Dry-run/ephemeral pipelines simply do not call this.)
428
- */
429
- export function verifySigningKeyMatchesPinnedRoot(signingKeyPem, pinnedRootJson) {
430
- const signer = requireSigner(signingKeyPem);
431
- const requiredRoles = ['root', 'timestamp', 'snapshot', 'targets'];
432
- const missingRoleError = (roleName) => new ReleasePublicationError('signing_key_invalid', 'pinnedTrustRoot', `The pinned trust root carries no ${roleName} role — the publisher cannot produce ${roleName} metadata any pinned install can verify.`, 'Repair packages/create-principles-disciple/trust/root.json (re-run the trust root ceremony only as an explicit governance decision).');
433
- // @tufjs/metadata refuses to deserialize a root that lacks any required
434
- // top-level role, which would mask the precise diagnosis behind a generic
435
- // parse refusal. Pre-scan the raw document so a missing role is reported
436
- // as itself; everything else still goes through the full parse below.
437
- const rawSignedRoles = (() => {
438
- try {
439
- const { signed } = JSON.parse(pinnedRootJson);
440
- if (signed === null || typeof signed !== 'object' || !Object.hasOwn(signed, 'roles'))
441
- return undefined;
442
- const { roles } = signed;
443
- return roles !== null && typeof roles === 'object' ? roles : undefined;
444
- }
445
- catch {
446
- return undefined; // malformed JSON — the canonical parse error surfaces below
447
- }
448
- })();
449
- if (rawSignedRoles !== undefined) {
450
- for (const roleName of requiredRoles) {
451
- if (!Object.hasOwn(rawSignedRoles, roleName))
452
- throw missingRoleError(roleName);
453
- }
454
- }
455
- let pinnedRoot;
456
- try {
457
- pinnedRoot = (Metadata.fromJSON(MetadataKind.Root, JSON.parse(pinnedRootJson))).signed;
458
- }
459
- catch {
460
- throw new ReleasePublicationError('signing_key_invalid', 'pinnedTrustRoot', 'The pinned trust root is not a parseable TUF Root document.', 'Repair packages/create-principles-disciple/trust/root.json (re-run the trust root ceremony only as an explicit governance decision).');
461
- }
462
- for (const roleName of requiredRoles) {
463
- const role = pinnedRoot.roles[roleName];
464
- if (role === undefined)
465
- throw missingRoleError(roleName);
466
- if (role.threshold !== 1) {
467
- throw new ReleasePublicationError('signing_key_invalid', 'pinnedTrustRoot', `The pinned trust root ${roleName} role has threshold ${role.threshold}; the current publisher emits a single signature per role and can only satisfy the threshold-1 publishing contract.`, 'Repair packages/create-principles-disciple/trust/root.json (re-run the trust root ceremony only as an explicit governance decision).');
468
- }
469
- if (!role.keyIDs.includes(signer.keyId)) {
470
- throw new ReleasePublicationError('signing_key_invalid', 'signingKeyPem', `The signing key (${signer.keyId.slice(0, 16)}…) is not authorized for the pinned trust root ${roleName} role (authorized: ${role.keyIDs.map((keyId) => keyId.slice(0, 16)).join(', ')}…). The single publisher key must be authorized for root, timestamp, snapshot and targets alike.`, 'Set PD_RELEASE_SIGNING_KEY to the private key matching the pinned trust root (packages/create-principles-disciple/trust/root.json).');
471
- }
472
- }
473
- const rootRole = pinnedRoot.roles.root;
474
- if (rootRole === undefined)
475
- throw missingRoleError('root'); // rc-3: fail loud (defensive; the loop above already enforces this for every required role)
476
- return { keyId: signer.keyId, pinnedRootKeyIds: rootRole.keyIDs };
477
- }
478
- //# sourceMappingURL=release-metadata-publisher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-metadata-publisher.js","sourceRoot":"","sources":["../../src/update/release-metadata-publisher.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /**
2
- * Release metadata source contract (PRI-709 P0-1).
3
- *
4
- * PRI-698 Phase 0 Audit finding F-4: `PD_RELEASE_METADATA_URL` had no supply
5
- * side anywhere in the repository — every consumer read the process env
6
- * directly, so a ReleaseManager install could only ever become ready inside
7
- * the single shell that exported the variable. There was no durable,
8
- * installer-owned answer to "where does signed release metadata come from?".
9
- *
10
- * This module is that answer. It is a READ-SIDE contract only: it resolves
11
- * the base URL of the signed release metadata repository and refuses to guess
12
- * one. It does not publish, sign, mirror or cache metadata (scope boundary —
13
- * the publishing pipeline is out of scope for PRI-709).
14
- *
15
- * Resolution order (highest precedence first):
16
- *
17
- * 1. `explicit` — caller-supplied override. The Console passes the
18
- * operator's process-level env value here, so an
19
- * operator override always wins over install state.
20
- * 2. `env` — `PD_RELEASE_METADATA_URL` read by this module.
21
- * 3. `install_config` — `~/.pd/install.json` → `releaseMetadataUrl`,
22
- * written by the installer at install time. This is
23
- * the durable tier: it survives new shells, new
24
- * processes and Console restarts.
25
- * 4. `unconfigured` — no source exists. `metadataBaseUrl` is `undefined`
26
- * and the caller's fallback semantics are UNCHANGED
27
- * (ADR-0024 §2.4 — refusal with a stable reason, never
28
- * a guessed endpoint).
29
- *
30
- * `invalid` short-circuits: a candidate source that exists but is not a usable
31
- * http(s) base URL is reported, never silently skipped in favour of a lower
32
- * tier. An operator who misconfigures the override must see the
33
- * misconfiguration, not a surprising fallback to install state.
34
- *
35
- * This module deliberately imports nothing from `install-layout.js`: callers
36
- * pass the already-read install config in. That keeps the layering one-way
37
- * (install-layout → this module) with no cycle.
38
- */
39
- /** Operator override environment variable for the metadata repository base URL. */
40
- export declare const RELEASE_METADATA_URL_ENV = "PD_RELEASE_METADATA_URL";
41
- export type ReleaseMetadataSourceKind =
42
- /** Caller-supplied override (Console passes the process-level env value). */
43
- 'explicit'
44
- /** `PD_RELEASE_METADATA_URL` resolved by this module. */
45
- | 'env'
46
- /** Durable install-time source: `~/.pd/install.json` → `releaseMetadataUrl`. */
47
- | 'install_config'
48
- /** A candidate source exists but is not a usable http(s) base URL. */
49
- | 'invalid'
50
- /** No source configured; fallback semantics unchanged. */
51
- | 'unconfigured';
52
- export interface ReleaseMetadataSource {
53
- readonly kind: ReleaseMetadataSourceKind;
54
- /** `undefined` for `invalid` and `unconfigured` — never a guessed URL. */
55
- readonly metadataBaseUrl: string | undefined;
56
- /** Stable machine-readable detail for `invalid`; null otherwise. */
57
- readonly detail: string | null;
58
- }
59
- export interface ResolveReleaseMetadataSourceOptions {
60
- /** Caller-supplied override; empty string is treated as absent. */
61
- readonly explicit?: string | undefined;
62
- /** Defaults to `process.env.PD_RELEASE_METADATA_URL`. */
63
- readonly env?: string | undefined;
64
- /** Already-read install config; null when install state is corrupt. */
65
- readonly installConfig?: {
66
- readonly releaseMetadataUrl?: string;
67
- } | null;
68
- }
69
- /**
70
- * Strict validator for a metadata repository base URL.
71
- *
72
- * Returns the trimmed URL, or `null` when the value is not a non-empty
73
- * `http(s)` URL. Whitespace-only input is absent, not valid — the ReleaseManager
74
- * must never be handed a URL it would have to repair.
75
- */
76
- export declare function normalizeReleaseMetadataUrl(raw: unknown): string | null;
77
- /** True when the value is a usable metadata repository base URL. */
78
- export declare function isReleaseMetadataUrl(raw: unknown): raw is string;
79
- /**
80
- * Resolve the release metadata source. Never throws: an unusable source is a
81
- * reported outcome (`invalid` / `unconfigured`), so readiness probing stays
82
- * side-effect free and observable.
83
- */
84
- export declare function resolveReleaseMetadataSource(options?: ResolveReleaseMetadataSourceOptions): ReleaseMetadataSource;
85
- //# sourceMappingURL=release-metadata-source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-metadata-source.d.ts","sourceRoot":"","sources":["../../src/update/release-metadata-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,MAAM,MAAM,yBAAyB;AACnC,6EAA6E;AAC3E,UAAU;AACZ,yDAAyD;GACvD,KAAK;AACP,gFAAgF;GAC9E,gBAAgB;AAClB,sEAAsE;GACpE,SAAS;AACX,0DAA0D;GACxD,cAAc,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,mCAAmC;IAClD,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,yDAAyD;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC1E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAYvE;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,mCAAwC,GAChD,qBAAqB,CA4BvB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-metadata-source.js","sourceRoot":"","sources":["../../src/update/release-metadata-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AA+BlE;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,OAAO,2BAA2B,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAO,GAAwC,EAAE;IAEjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS;QACnC,CAAC,CAAC,OAAO,CAAC,GAAG;QACb,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAE1C,MAAM,UAAU,GAA+F;QAC7G,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC3C,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;QACzB,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,OAAO,CAAC,aAAa,EAAE,kBAAkB,EAAE;KAC3E,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI;YAAE,SAAS;QACpE,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACrF,MAAM,UAAU,GAAG,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,uEAAuE;YACvE,gDAAgD;YAChD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,eAAe,EAAE,SAAS;gBAC1B,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,cAAc;aACxC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC5E,CAAC"}