@agent-native/core 0.117.2 → 0.118.1

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 (776) hide show
  1. package/corpus/README.md +3 -3
  2. package/corpus/core/CHANGELOG.md +51 -0
  3. package/corpus/core/docs/content/custom-design-system.mdx +445 -0
  4. package/corpus/core/docs/content/toolkit-ui.mdx +16 -0
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/a2a/client.ts +32 -10
  7. package/corpus/core/src/a2a/types.ts +1 -0
  8. package/corpus/core/src/agent/types.ts +1 -1
  9. package/corpus/core/src/cli/index.ts +18 -10
  10. package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
  11. package/corpus/core/src/cli/templates-meta.ts +0 -12
  12. package/corpus/core/src/cli/workspace-dev.ts +1 -1
  13. package/corpus/core/src/client/AgentPanel.tsx +99 -108
  14. package/corpus/core/src/client/AssistantChat.tsx +30 -13
  15. package/corpus/core/src/client/CommandMenu.tsx +68 -178
  16. package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
  17. package/corpus/core/src/client/agent-chat-adapter.ts +3 -1
  18. package/corpus/core/src/client/app-providers.tsx +1 -1
  19. package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
  20. package/corpus/core/src/client/chat/message-components.tsx +169 -18
  21. package/corpus/core/src/client/chat/tool-call-display.tsx +50 -14
  22. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +13 -40
  23. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  24. package/corpus/core/src/client/components/ui/message-scroller.tsx +15 -1
  25. package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
  26. package/corpus/core/src/client/error-capture.ts +2 -6
  27. package/corpus/core/src/client/i18n.tsx +22 -0
  28. package/corpus/core/src/client/index.ts +17 -0
  29. package/corpus/core/src/client/org/TeamPage.tsx +257 -153
  30. package/corpus/core/src/client/progress/RunsTray.tsx +89 -88
  31. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +25 -16
  32. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -13
  33. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  34. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +20 -17
  35. package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
  36. package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
  37. package/corpus/core/src/client/session-replay.ts +3 -3
  38. package/corpus/core/src/client/settings/DemoModeSection.tsx +6 -18
  39. package/corpus/core/src/client/settings/SecretsSection.tsx +97 -52
  40. package/corpus/core/src/client/settings/SettingsPanel.tsx +217 -252
  41. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +23 -2
  42. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
  43. package/corpus/core/src/client/settings/index.ts +7 -0
  44. package/corpus/core/src/client/settings/useSettingsPanelController.ts +155 -0
  45. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
  46. package/corpus/core/src/client/setup-connections/index.ts +10 -0
  47. package/corpus/core/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
  48. package/corpus/core/src/client/sharing/ShareButton.tsx +64 -586
  49. package/corpus/core/src/client/sharing/ShareDialog.tsx +299 -633
  50. package/corpus/core/src/client/sharing/index.ts +42 -0
  51. package/corpus/core/src/client/sharing/share-controller-helpers.ts +318 -0
  52. package/corpus/core/src/client/sharing/useShareButtonController.ts +600 -0
  53. package/corpus/core/src/client/sharing/useShareDialogController.ts +559 -0
  54. package/corpus/core/src/client/sse-event-processor.ts +23 -0
  55. package/corpus/core/src/client/tool-display.ts +71 -0
  56. package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
  57. package/corpus/core/src/client/use-agent-engine-configured.ts +12 -19
  58. package/corpus/core/src/client/use-chat-threads.ts +33 -12
  59. package/corpus/core/src/deploy/build.ts +2 -1
  60. package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
  61. package/corpus/core/src/integrations/adapters/slack.ts +84 -5
  62. package/corpus/core/src/integrations/index.ts +5 -1
  63. package/corpus/core/src/localization/default-messages.ts +6 -1
  64. package/corpus/core/src/mcp-client/oauth-routes.ts +61 -14
  65. package/corpus/core/src/scripts/call-agent.ts +5 -1
  66. package/corpus/core/src/server/realtime-voice.ts +5 -2
  67. package/corpus/core/src/styles/agent-native.css +0 -24
  68. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  69. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  70. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  71. package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  72. package/corpus/core/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  73. package/corpus/core/src/templates/default/app/design-system.ts +3 -0
  74. package/corpus/core/src/templates/default/app/root.tsx +5 -2
  75. package/corpus/core/src/templates/default/package.json +1 -0
  76. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  77. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  78. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  79. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  80. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  81. package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  82. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  83. package/corpus/core/src/terminal/cli-registry.ts +1 -1
  84. package/corpus/core/src/vite/client.ts +205 -1
  85. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  86. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  87. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +22 -2
  88. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +28 -4
  89. package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +6 -1
  90. package/corpus/templates/analytics/app/design-system.ts +3 -0
  91. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
  92. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
  93. package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
  94. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  95. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  96. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +22 -2
  97. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +28 -4
  98. package/corpus/templates/assets/app/components/ui/alert.tsx +1 -0
  99. package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +6 -1
  100. package/corpus/templates/assets/app/design-system.ts +3 -0
  101. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
  102. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  103. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  104. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +22 -2
  105. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +28 -4
  106. package/corpus/templates/brain/app/components/ui/dialog.tsx +1 -0
  107. package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +6 -1
  108. package/corpus/templates/brain/app/design-system.ts +3 -0
  109. package/corpus/templates/brain/app/routes/sources.tsx +189 -122
  110. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  111. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  112. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +22 -2
  113. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +28 -4
  114. package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +6 -1
  115. package/corpus/templates/calendar/app/design-system.ts +3 -0
  116. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  117. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  118. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  119. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  120. package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  121. package/corpus/templates/chat/app/design-system.ts +3 -0
  122. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  123. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  124. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +22 -2
  125. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +28 -4
  126. package/corpus/templates/clips/AGENTS.md +8 -6
  127. package/corpus/templates/clips/actions/request-transcript.ts +90 -420
  128. package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
  129. package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
  130. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
  131. package/corpus/templates/clips/app/components/ui/toolkit-provider.tsx +6 -1
  132. package/corpus/templates/clips/app/design-system.ts +3 -0
  133. package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
  134. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
  135. package/corpus/templates/clips/app/routes/download.tsx +3 -2
  136. package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
  138. package/corpus/templates/clips/changelog/2026-07-22-fixed-windows-recordings-aborting-during-the-countdown.md +6 -0
  139. package/corpus/templates/clips/changelog/2026-07-22-permissions-and-rewind-controls-are-now-grouped-with-clearer.md +6 -0
  140. package/corpus/templates/clips/changelog/2026-07-22-the-desktop-popover-opens-centered-under-the-menu-bar-icon-o.md +6 -0
  141. package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
  142. package/corpus/templates/clips/desktop/src/app.tsx +86 -82
  143. package/corpus/templates/clips/desktop/src/styles.css +13 -0
  144. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +10 -1
  145. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +37 -2
  146. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -0
  147. package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
  148. package/corpus/templates/clips/server/register-secrets.ts +7 -6
  149. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  150. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  151. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +22 -2
  152. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +28 -4
  153. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +41 -59
  154. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
  155. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
  156. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +41 -41
  157. package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +2 -1
  158. package/corpus/templates/content/app/components/editor/database/ListView.tsx +2 -1
  159. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +9 -9
  160. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +7 -7
  161. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +11 -11
  162. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
  163. package/corpus/templates/content/app/components/ui/checkbox.tsx +1 -0
  164. package/corpus/templates/content/app/components/ui/collapsible.tsx +1 -0
  165. package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +6 -1
  166. package/corpus/templates/content/app/design-system.ts +3 -0
  167. package/corpus/templates/content/app/global.css +29 -3
  168. package/corpus/templates/content/app/i18n-data.ts +10 -0
  169. package/corpus/templates/content/changelog/2026-07-22-page-actions-are-grouped-into-the-three-dots-menu-for-a-clea.md +6 -0
  170. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  171. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  172. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +22 -2
  173. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +28 -4
  174. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
  175. package/corpus/templates/design/app/components/ui/command.tsx +1 -0
  176. package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +6 -1
  177. package/corpus/templates/design/app/design-system.ts +3 -0
  178. package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
  179. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  180. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  181. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +22 -2
  182. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +28 -4
  183. package/corpus/templates/dispatch/app/components/ui/button.tsx +1 -0
  184. package/corpus/templates/dispatch/app/components/ui/toolkit-provider.tsx +17 -0
  185. package/corpus/templates/dispatch/app/design-system.ts +3 -0
  186. package/corpus/templates/dispatch/app/root.tsx +10 -7
  187. package/corpus/templates/dispatch/package.json +1 -0
  188. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  189. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  190. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +22 -2
  191. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +28 -4
  192. package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +6 -1
  193. package/corpus/templates/forms/app/design-system.ts +3 -0
  194. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  195. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  196. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +22 -2
  197. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +28 -4
  198. package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +6 -1
  199. package/corpus/templates/macros/app/design-system.ts +3 -0
  200. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  201. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  202. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +22 -2
  203. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +28 -4
  204. package/corpus/templates/mail/app/components/email/EmailThread.tsx +134 -93
  205. package/corpus/templates/mail/app/components/email/email-iframe-document.ts +8 -2
  206. package/corpus/templates/mail/app/components/ui/textarea.tsx +1 -21
  207. package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +6 -1
  208. package/corpus/templates/mail/app/design-system.ts +3 -0
  209. package/corpus/templates/mail/changelog/2026-07-22-email-messages-no-longer-flash-with-an-unstyled-page-while-l.md +6 -0
  210. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  211. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  212. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +22 -2
  213. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +28 -4
  214. package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +1 -1
  215. package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +6 -1
  216. package/corpus/templates/plan/app/design-system.ts +3 -0
  217. package/corpus/templates/plan/app/entry.client.tsx +3 -0
  218. package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
  219. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  220. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  221. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +22 -2
  222. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +28 -4
  223. package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +6 -1
  224. package/corpus/templates/slides/app/design-system.ts +3 -0
  225. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
  226. package/corpus/templates/slides/app/pages/Index.tsx +1 -0
  227. package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
  228. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  229. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  230. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +22 -2
  231. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +28 -4
  232. package/corpus/templates/tasks/app/components/ui/toolkit-provider.tsx +17 -0
  233. package/corpus/templates/tasks/app/design-system.ts +3 -0
  234. package/corpus/templates/tasks/app/root.tsx +5 -2
  235. package/corpus/toolkit/CHANGELOG.md +23 -0
  236. package/corpus/toolkit/agent-native.eject.json +71 -0
  237. package/corpus/toolkit/package.json +31 -1
  238. package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +100 -39
  239. package/corpus/toolkit/src/chat-history/index.ts +9 -0
  240. package/corpus/toolkit/src/chat-history/useChatHistoryRailController.ts +76 -0
  241. package/corpus/toolkit/src/chat-history.css +2 -0
  242. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +11 -8
  243. package/corpus/toolkit/src/composer/PromptComposer.tsx +32 -7
  244. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
  245. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +124 -9
  246. package/corpus/toolkit/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
  247. package/corpus/toolkit/src/conformance/index.ts +3 -0
  248. package/corpus/toolkit/src/conformance/runner.tsx +862 -0
  249. package/corpus/toolkit/src/conformance/types.ts +45 -0
  250. package/corpus/toolkit/src/conformance/version.ts +22 -0
  251. package/corpus/toolkit/src/design-system/components.tsx +146 -0
  252. package/corpus/toolkit/src/design-system/context.tsx +31 -0
  253. package/corpus/toolkit/src/design-system/default-adapter.tsx +915 -0
  254. package/corpus/toolkit/src/design-system/definition.ts +14 -0
  255. package/corpus/toolkit/src/design-system/error-boundary.tsx +37 -0
  256. package/corpus/toolkit/src/design-system/index.ts +7 -0
  257. package/corpus/toolkit/src/design-system/theme.ts +145 -0
  258. package/corpus/toolkit/src/design-system/types.ts +363 -0
  259. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
  260. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
  261. package/corpus/toolkit/src/editor/index.ts +2 -0
  262. package/corpus/toolkit/src/provider.tsx +98 -5
  263. package/corpus/toolkit/src/styles.css +52 -23
  264. package/corpus/toolkit/src/ui/button.tsx +95 -6
  265. package/corpus/toolkit/src/ui/dialog.tsx +48 -23
  266. package/corpus/toolkit/src/ui/popover.tsx +16 -2
  267. package/corpus/toolkit/src/ui/select.tsx +7 -3
  268. package/corpus/toolkit/src/ui/sidebar.tsx +47 -48
  269. package/corpus/toolkit/src/ui/tooltip.tsx +7 -3
  270. package/dist/a2a/client.d.ts +3 -1
  271. package/dist/a2a/client.d.ts.map +1 -1
  272. package/dist/a2a/client.js +17 -12
  273. package/dist/a2a/client.js.map +1 -1
  274. package/dist/a2a/types.d.ts +1 -1
  275. package/dist/a2a/types.d.ts.map +1 -1
  276. package/dist/a2a/types.js.map +1 -1
  277. package/dist/agent/types.d.ts +1 -1
  278. package/dist/agent/types.d.ts.map +1 -1
  279. package/dist/agent/types.js.map +1 -1
  280. package/dist/cli/index.js +18 -8
  281. package/dist/cli/index.js.map +1 -1
  282. package/dist/cli/multi-frontier-runs.js +3 -3
  283. package/dist/cli/multi-frontier-runs.js.map +1 -1
  284. package/dist/cli/templates-meta.d.ts.map +1 -1
  285. package/dist/cli/templates-meta.js +0 -12
  286. package/dist/cli/templates-meta.js.map +1 -1
  287. package/dist/cli/workspace-dev.js +1 -1
  288. package/dist/cli/workspace-dev.js.map +1 -1
  289. package/dist/client/AgentPanel.d.ts.map +1 -1
  290. package/dist/client/AgentPanel.js +18 -15
  291. package/dist/client/AgentPanel.js.map +1 -1
  292. package/dist/client/AssistantChat.d.ts.map +1 -1
  293. package/dist/client/AssistantChat.js +26 -15
  294. package/dist/client/AssistantChat.js.map +1 -1
  295. package/dist/client/CommandMenu.d.ts.map +1 -1
  296. package/dist/client/CommandMenu.js +18 -106
  297. package/dist/client/CommandMenu.js.map +1 -1
  298. package/dist/client/RunStuckBanner.d.ts +3 -5
  299. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  300. package/dist/client/RunStuckBanner.js +17 -18
  301. package/dist/client/RunStuckBanner.js.map +1 -1
  302. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  303. package/dist/client/agent-chat-adapter.js +2 -1
  304. package/dist/client/agent-chat-adapter.js.map +1 -1
  305. package/dist/client/app-providers.d.ts.map +1 -1
  306. package/dist/client/app-providers.js +1 -1
  307. package/dist/client/app-providers.js.map +1 -1
  308. package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
  309. package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
  310. package/dist/client/chat/action-chat-ui-surface.js +10 -0
  311. package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
  312. package/dist/client/chat/message-components.d.ts +12 -1
  313. package/dist/client/chat/message-components.d.ts.map +1 -1
  314. package/dist/client/chat/message-components.js +102 -14
  315. package/dist/client/chat/message-components.js.map +1 -1
  316. package/dist/client/chat/tool-call-display.d.ts +3 -1
  317. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  318. package/dist/client/chat/tool-call-display.js +33 -14
  319. package/dist/client/chat/tool-call-display.js.map +1 -1
  320. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  321. package/dist/client/chat/widgets/InlineExtensionWidget.js +9 -12
  322. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  323. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  324. package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
  325. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  326. package/dist/client/components/ui/message-scroller.d.ts +1 -1
  327. package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
  328. package/dist/client/components/ui/message-scroller.js +4 -3
  329. package/dist/client/components/ui/message-scroller.js.map +1 -1
  330. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  331. package/dist/client/conversation/AgentConversation.js +3 -2
  332. package/dist/client/conversation/AgentConversation.js.map +1 -1
  333. package/dist/client/error-capture.d.ts.map +1 -1
  334. package/dist/client/error-capture.js +2 -2
  335. package/dist/client/error-capture.js.map +1 -1
  336. package/dist/client/i18n.d.ts.map +1 -1
  337. package/dist/client/i18n.js +9 -0
  338. package/dist/client/i18n.js.map +1 -1
  339. package/dist/client/index.d.ts +2 -2
  340. package/dist/client/index.d.ts.map +1 -1
  341. package/dist/client/index.js +2 -2
  342. package/dist/client/index.js.map +1 -1
  343. package/dist/client/org/TeamPage.d.ts.map +1 -1
  344. package/dist/client/org/TeamPage.js +41 -33
  345. package/dist/client/org/TeamPage.js.map +1 -1
  346. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  347. package/dist/client/progress/RunsTray.js +9 -10
  348. package/dist/client/progress/RunsTray.js.map +1 -1
  349. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  350. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  351. package/dist/client/resources/McpConnectionSuggestion.js +14 -12
  352. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  353. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  354. package/dist/client/resources/McpIntegrationDialog.js +10 -8
  355. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  356. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  357. package/dist/client/resources/ResourcesPanel.js +3 -1
  358. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  359. package/dist/client/resources/mcp-integration-catalog.d.ts +2 -0
  360. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  361. package/dist/client/resources/mcp-integration-catalog.js +17 -17
  362. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  363. package/dist/client/resources/mcp-integration-logos.js +2 -2
  364. package/dist/client/resources/mcp-integration-logos.js.map +1 -1
  365. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  366. package/dist/client/route-chunk-recovery.js +5 -3
  367. package/dist/client/route-chunk-recovery.js.map +1 -1
  368. package/dist/client/session-replay.js +3 -3
  369. package/dist/client/session-replay.js.map +1 -1
  370. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  371. package/dist/client/settings/DemoModeSection.js +2 -5
  372. package/dist/client/settings/DemoModeSection.js.map +1 -1
  373. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  374. package/dist/client/settings/SecretsSection.js +18 -6
  375. package/dist/client/settings/SecretsSection.js.map +1 -1
  376. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  377. package/dist/client/settings/SettingsPanel.js +53 -118
  378. package/dist/client/settings/SettingsPanel.js.map +1 -1
  379. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  380. package/dist/client/settings/SettingsTabsPage.js +16 -1
  381. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  382. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  383. package/dist/client/settings/VoiceTranscriptionSection.js +2 -5
  384. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  385. package/dist/client/settings/index.d.ts +1 -0
  386. package/dist/client/settings/index.d.ts.map +1 -1
  387. package/dist/client/settings/index.js +1 -0
  388. package/dist/client/settings/index.js.map +1 -1
  389. package/dist/client/settings/useSettingsPanelController.d.ts +22 -0
  390. package/dist/client/settings/useSettingsPanelController.d.ts.map +1 -0
  391. package/dist/client/settings/useSettingsPanelController.js +103 -0
  392. package/dist/client/settings/useSettingsPanelController.js.map +1 -0
  393. package/dist/client/setup-connections/BuilderConnectCard.d.ts +14 -6
  394. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
  395. package/dist/client/setup-connections/BuilderConnectCard.js +24 -16
  396. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
  397. package/dist/client/setup-connections/index.d.ts +2 -1
  398. package/dist/client/setup-connections/index.d.ts.map +1 -1
  399. package/dist/client/setup-connections/index.js +2 -1
  400. package/dist/client/setup-connections/index.js.map +1 -1
  401. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +34 -0
  402. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
  403. package/dist/client/setup-connections/useBuilderConnectCardController.js +39 -0
  404. package/dist/client/setup-connections/useBuilderConnectCardController.js.map +1 -0
  405. package/dist/client/sharing/ShareButton.d.ts +2 -1
  406. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  407. package/dist/client/sharing/ShareButton.js +17 -463
  408. package/dist/client/sharing/ShareButton.js.map +1 -1
  409. package/dist/client/sharing/ShareDialog.d.ts +6 -6
  410. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  411. package/dist/client/sharing/ShareDialog.js +69 -283
  412. package/dist/client/sharing/ShareDialog.js.map +1 -1
  413. package/dist/client/sharing/index.d.ts +3 -0
  414. package/dist/client/sharing/index.d.ts.map +1 -1
  415. package/dist/client/sharing/index.js +3 -0
  416. package/dist/client/sharing/index.js.map +1 -1
  417. package/dist/client/sharing/share-controller-helpers.d.ts +70 -0
  418. package/dist/client/sharing/share-controller-helpers.d.ts.map +1 -0
  419. package/dist/client/sharing/share-controller-helpers.js +224 -0
  420. package/dist/client/sharing/share-controller-helpers.js.map +1 -0
  421. package/dist/client/sharing/useShareButtonController.d.ts +91 -0
  422. package/dist/client/sharing/useShareButtonController.d.ts.map +1 -0
  423. package/dist/client/sharing/useShareButtonController.js +397 -0
  424. package/dist/client/sharing/useShareButtonController.js.map +1 -0
  425. package/dist/client/sharing/useShareDialogController.d.ts +109 -0
  426. package/dist/client/sharing/useShareDialogController.d.ts.map +1 -0
  427. package/dist/client/sharing/useShareDialogController.js +348 -0
  428. package/dist/client/sharing/useShareDialogController.js.map +1 -0
  429. package/dist/client/sse-event-processor.d.ts.map +1 -1
  430. package/dist/client/sse-event-processor.js +21 -0
  431. package/dist/client/sse-event-processor.js.map +1 -1
  432. package/dist/client/tool-display.d.ts +16 -0
  433. package/dist/client/tool-display.d.ts.map +1 -1
  434. package/dist/client/tool-display.js +52 -0
  435. package/dist/client/tool-display.js.map +1 -1
  436. package/dist/client/transcription/use-live-transcription.d.ts +3 -3
  437. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  438. package/dist/client/transcription/use-live-transcription.js +22 -11
  439. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  440. package/dist/client/use-agent-engine-configured.d.ts +3 -2
  441. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  442. package/dist/client/use-agent-engine-configured.js +7 -19
  443. package/dist/client/use-agent-engine-configured.js.map +1 -1
  444. package/dist/client/use-chat-threads.d.ts.map +1 -1
  445. package/dist/client/use-chat-threads.js +21 -8
  446. package/dist/client/use-chat-threads.js.map +1 -1
  447. package/dist/collab/routes.d.ts +1 -1
  448. package/dist/collab/struct-routes.d.ts +1 -1
  449. package/dist/deploy/build.d.ts.map +1 -1
  450. package/dist/deploy/build.js +1 -1
  451. package/dist/deploy/build.js.map +1 -1
  452. package/dist/guards/db-tool-scoping.js +1 -1
  453. package/dist/guards/db-tool-scoping.js.map +1 -1
  454. package/dist/integrations/adapters/slack.d.ts +1 -0
  455. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  456. package/dist/integrations/adapters/slack.js +61 -5
  457. package/dist/integrations/adapters/slack.js.map +1 -1
  458. package/dist/integrations/index.d.ts +1 -1
  459. package/dist/integrations/index.d.ts.map +1 -1
  460. package/dist/integrations/index.js +1 -1
  461. package/dist/integrations/index.js.map +1 -1
  462. package/dist/localization/default-messages.d.ts +4 -0
  463. package/dist/localization/default-messages.d.ts.map +1 -1
  464. package/dist/localization/default-messages.js +5 -1
  465. package/dist/localization/default-messages.js.map +1 -1
  466. package/dist/mcp-client/oauth-routes.d.ts +5 -0
  467. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  468. package/dist/mcp-client/oauth-routes.js +53 -14
  469. package/dist/mcp-client/oauth-routes.js.map +1 -1
  470. package/dist/notifications/routes.d.ts +2 -2
  471. package/dist/observability/routes.d.ts +1 -1
  472. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  473. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  474. package/dist/scripts/call-agent.d.ts.map +1 -1
  475. package/dist/scripts/call-agent.js +5 -1
  476. package/dist/scripts/call-agent.js.map +1 -1
  477. package/dist/secrets/routes.d.ts +6 -6
  478. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  479. package/dist/server/realtime-voice.d.ts.map +1 -1
  480. package/dist/server/realtime-voice.js +2 -2
  481. package/dist/server/realtime-voice.js.map +1 -1
  482. package/dist/styles/agent-native.css +0 -24
  483. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  484. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  485. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  486. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  487. package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  488. package/dist/templates/chat/app/design-system.ts +3 -0
  489. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  490. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  491. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  492. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  493. package/dist/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  494. package/dist/templates/default/app/design-system.ts +3 -0
  495. package/dist/templates/default/app/root.tsx +5 -2
  496. package/dist/templates/default/package.json +1 -0
  497. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  498. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  499. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  500. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  501. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  502. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  503. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  504. package/dist/terminal/cli-registry.js +1 -1
  505. package/dist/terminal/cli-registry.js.map +1 -1
  506. package/dist/vite/client.d.ts +11 -1
  507. package/dist/vite/client.d.ts.map +1 -1
  508. package/dist/vite/client.js +144 -2
  509. package/dist/vite/client.js.map +1 -1
  510. package/docs/content/custom-design-system.mdx +445 -0
  511. package/docs/content/toolkit-ui.mdx +16 -0
  512. package/package.json +2 -2
  513. package/src/a2a/client.ts +32 -10
  514. package/src/a2a/types.ts +1 -0
  515. package/src/agent/types.ts +1 -1
  516. package/src/cli/index.ts +18 -10
  517. package/src/cli/multi-frontier-runs.ts +5 -3
  518. package/src/cli/templates-meta.ts +0 -12
  519. package/src/cli/workspace-dev.ts +1 -1
  520. package/src/client/AgentPanel.tsx +99 -108
  521. package/src/client/AssistantChat.tsx +30 -13
  522. package/src/client/CommandMenu.tsx +68 -178
  523. package/src/client/RunStuckBanner.tsx +39 -47
  524. package/src/client/agent-chat-adapter.ts +3 -1
  525. package/src/client/app-providers.tsx +1 -1
  526. package/src/client/chat/action-chat-ui-surface.tsx +32 -0
  527. package/src/client/chat/message-components.tsx +169 -18
  528. package/src/client/chat/tool-call-display.tsx +50 -14
  529. package/src/client/chat/widgets/InlineExtensionWidget.tsx +13 -40
  530. package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  531. package/src/client/components/ui/message-scroller.tsx +15 -1
  532. package/src/client/conversation/AgentConversation.tsx +12 -1
  533. package/src/client/error-capture.ts +2 -6
  534. package/src/client/i18n.tsx +22 -0
  535. package/src/client/index.ts +17 -0
  536. package/src/client/org/TeamPage.tsx +257 -153
  537. package/src/client/progress/RunsTray.tsx +89 -88
  538. package/src/client/resources/McpConnectionSuggestion.tsx +25 -16
  539. package/src/client/resources/McpIntegrationDialog.tsx +34 -13
  540. package/src/client/resources/ResourcesPanel.tsx +5 -1
  541. package/src/client/resources/mcp-integration-catalog.ts +20 -17
  542. package/src/client/resources/mcp-integration-logos.ts +2 -2
  543. package/src/client/route-chunk-recovery.ts +5 -3
  544. package/src/client/session-replay.ts +3 -3
  545. package/src/client/settings/DemoModeSection.tsx +6 -18
  546. package/src/client/settings/SecretsSection.tsx +97 -52
  547. package/src/client/settings/SettingsPanel.tsx +217 -252
  548. package/src/client/settings/SettingsTabsPage.tsx +23 -2
  549. package/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
  550. package/src/client/settings/index.ts +7 -0
  551. package/src/client/settings/useSettingsPanelController.ts +155 -0
  552. package/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
  553. package/src/client/setup-connections/index.ts +10 -0
  554. package/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
  555. package/src/client/sharing/ShareButton.tsx +64 -586
  556. package/src/client/sharing/ShareDialog.tsx +299 -633
  557. package/src/client/sharing/index.ts +42 -0
  558. package/src/client/sharing/share-controller-helpers.ts +318 -0
  559. package/src/client/sharing/useShareButtonController.ts +600 -0
  560. package/src/client/sharing/useShareDialogController.ts +559 -0
  561. package/src/client/sse-event-processor.ts +23 -0
  562. package/src/client/tool-display.ts +71 -0
  563. package/src/client/transcription/use-live-transcription.ts +64 -45
  564. package/src/client/use-agent-engine-configured.ts +12 -19
  565. package/src/client/use-chat-threads.ts +33 -12
  566. package/src/deploy/build.ts +2 -1
  567. package/src/guards/db-tool-scoping.ts +1 -1
  568. package/src/integrations/adapters/slack.ts +84 -5
  569. package/src/integrations/index.ts +5 -1
  570. package/src/localization/default-messages.ts +6 -1
  571. package/src/mcp-client/oauth-routes.ts +61 -14
  572. package/src/scripts/call-agent.ts +5 -1
  573. package/src/server/realtime-voice.ts +5 -2
  574. package/src/styles/agent-native.css +0 -24
  575. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  576. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  577. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  578. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  579. package/src/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  580. package/src/templates/chat/app/design-system.ts +3 -0
  581. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  582. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  583. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  584. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  585. package/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  586. package/src/templates/default/app/design-system.ts +3 -0
  587. package/src/templates/default/app/root.tsx +5 -2
  588. package/src/templates/default/package.json +1 -0
  589. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  590. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  591. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  592. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  593. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  594. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  595. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  596. package/src/terminal/cli-registry.ts +1 -1
  597. package/src/vite/client.ts +205 -1
  598. package/corpus/templates/analytics/app/components/ui/calendar.tsx +0 -70
  599. package/corpus/templates/analytics/app/components/ui/chart.tsx +0 -386
  600. package/corpus/templates/calendar/app/components/ui/sonner.tsx +0 -58
  601. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
  602. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -142
  603. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
  604. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -145
  605. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  606. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
  607. package/corpus/templates/crm/.env.example +0 -5
  608. package/corpus/templates/crm/AGENTS.md +0 -120
  609. package/corpus/templates/crm/CHANGELOG.md +0 -1
  610. package/corpus/templates/crm/DEVELOPING.md +0 -66
  611. package/corpus/templates/crm/README.md +0 -106
  612. package/corpus/templates/crm/_gitignore +0 -12
  613. package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
  614. package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
  615. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
  616. package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
  617. package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
  618. package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
  619. package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
  620. package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
  621. package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
  622. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
  623. package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
  624. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
  625. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
  626. package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
  627. package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
  628. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
  629. package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
  630. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
  631. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
  632. package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
  633. package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
  634. package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
  635. package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
  636. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
  637. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
  638. package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
  639. package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
  640. package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
  641. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
  642. package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
  643. package/corpus/templates/crm/actions/navigate.ts +0 -63
  644. package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
  645. package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
  646. package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
  647. package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
  648. package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
  649. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
  650. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
  651. package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
  652. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
  653. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
  654. package/corpus/templates/crm/actions/run.ts +0 -7
  655. package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
  656. package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
  657. package/corpus/templates/crm/actions/sync-crm.ts +0 -146
  658. package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
  659. package/corpus/templates/crm/actions/view-screen.ts +0 -218
  660. package/corpus/templates/crm/agent-native.app-skill.json +0 -58
  661. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
  662. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -83
  663. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -225
  664. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -413
  665. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
  666. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
  667. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -367
  668. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -92
  669. package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -96
  670. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
  671. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
  672. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
  673. package/corpus/templates/crm/app/entry.client.tsx +0 -16
  674. package/corpus/templates/crm/app/entry.server.tsx +0 -10
  675. package/corpus/templates/crm/app/global.css +0 -167
  676. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
  677. package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
  678. package/corpus/templates/crm/app/i18n/index.ts +0 -34
  679. package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
  680. package/corpus/templates/crm/app/lib/navigation.ts +0 -54
  681. package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
  682. package/corpus/templates/crm/app/lib/types.ts +0 -172
  683. package/corpus/templates/crm/app/lib/utils.ts +0 -1
  684. package/corpus/templates/crm/app/root.tsx +0 -88
  685. package/corpus/templates/crm/app/routes/_index.tsx +0 -26
  686. package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
  687. package/corpus/templates/crm/app/routes/agent.tsx +0 -5
  688. package/corpus/templates/crm/app/routes/ask.tsx +0 -53
  689. package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
  690. package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
  691. package/corpus/templates/crm/app/routes/people.tsx +0 -41
  692. package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
  693. package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
  694. package/corpus/templates/crm/app/routes/settings.tsx +0 -63
  695. package/corpus/templates/crm/app/routes/setup.tsx +0 -308
  696. package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
  697. package/corpus/templates/crm/app/routes/views.tsx +0 -333
  698. package/corpus/templates/crm/app/routes.ts +0 -17
  699. package/corpus/templates/crm/app/vite-env.d.ts +0 -6
  700. package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
  701. package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
  702. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
  703. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
  704. package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
  705. package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
  706. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
  707. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
  708. package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
  709. package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
  710. package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
  711. package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
  712. package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  713. package/corpus/templates/crm/components.json +0 -20
  714. package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
  715. package/corpus/templates/crm/learnings.defaults.md +0 -5
  716. package/corpus/templates/crm/package.json +0 -59
  717. package/corpus/templates/crm/public/favicon.svg +0 -1
  718. package/corpus/templates/crm/public/icon-180.svg +0 -1
  719. package/corpus/templates/crm/public/manifest.json +0 -11
  720. package/corpus/templates/crm/react-router.config.ts +0 -7
  721. package/corpus/templates/crm/server/crm/adapter.ts +0 -32
  722. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
  723. package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
  724. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
  725. package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
  726. package/corpus/templates/crm/server/crm/read-through.ts +0 -207
  727. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
  728. package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
  729. package/corpus/templates/crm/server/db/index.ts +0 -169
  730. package/corpus/templates/crm/server/db/schema.ts +0 -441
  731. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
  732. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
  733. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
  734. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
  735. package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
  736. package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
  737. package/corpus/templates/crm/server/middleware/auth.ts +0 -4
  738. package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
  739. package/corpus/templates/crm/server/plugins/auth.ts +0 -14
  740. package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
  741. package/corpus/templates/crm/server/plugins/db.ts +0 -454
  742. package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
  743. package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
  744. package/corpus/templates/crm/shared/crm-contract.ts +0 -254
  745. package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
  746. package/corpus/templates/crm/ssr-entry.ts +0 -11
  747. package/corpus/templates/crm/tsconfig.json +0 -24
  748. package/corpus/templates/crm/vite.config.ts +0 -15
  749. package/corpus/templates/crm/vitest.config.ts +0 -5
  750. package/corpus/templates/forms/app/components/ui/calendar.tsx +0 -214
  751. package/corpus/templates/forms/app/components/ui/chart.tsx +0 -379
  752. package/corpus/templates/forms/app/components/ui/command.tsx +0 -153
  753. package/corpus/templates/forms/app/components/ui/context-menu.tsx +0 -198
  754. package/corpus/templates/forms/app/components/ui/menubar.tsx +0 -254
  755. package/corpus/templates/macros/app/components/ui/menubar.tsx +0 -238
  756. package/corpus/templates/macros/app/components/ui/progress.tsx +0 -26
  757. package/corpus/templates/mail/app/components/ui/calendar.tsx +0 -211
  758. package/corpus/templates/mail/app/components/ui/chart.tsx +0 -379
  759. package/corpus/templates/mail/app/components/ui/command.tsx +0 -153
  760. package/corpus/templates/mail/app/components/ui/context-menu.tsx +0 -198
  761. package/corpus/templates/mail/app/components/ui/menubar.tsx +0 -254
  762. package/corpus/templates/tasks/app/components/ui/accordion.tsx +0 -56
  763. package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +0 -5
  764. package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +0 -115
  765. package/corpus/templates/tasks/app/components/ui/calendar.tsx +0 -70
  766. package/corpus/templates/tasks/app/components/ui/carousel.tsx +0 -260
  767. package/corpus/templates/tasks/app/components/ui/chart.tsx +0 -379
  768. package/corpus/templates/tasks/app/components/ui/form.tsx +0 -177
  769. package/corpus/templates/tasks/app/components/ui/hover-card.tsx +0 -27
  770. package/corpus/templates/tasks/app/components/ui/input-otp.tsx +0 -69
  771. package/corpus/templates/tasks/app/components/ui/menubar.tsx +0 -254
  772. package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +0 -128
  773. package/corpus/templates/tasks/app/components/ui/pagination.tsx +0 -121
  774. package/corpus/templates/tasks/app/components/ui/resizable.tsx +0 -43
  775. package/corpus/templates/tasks/app/components/ui/sidebar.tsx +0 -782
  776. package/corpus/templates/tasks/app/components/ui/toggle.tsx +0 -43
@@ -1 +1 @@
1
- {"version":3,"file":"multi-frontier-runs.js","sourceRoot":"","sources":["../../src/cli/multi-frontier-runs.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n appendUniqueJsonLineAtomically,\n withFileLockSync,\n writeJsonFileAtomically,\n writeTextFileAtomically,\n} from \"./atomic-json-file.js\";\nimport { codeAgentStoreRoot } from \"./code-agent-runs.js\";\n\nexport type MultiFrontierPhase =\n | \"proposing\"\n | \"cross_review\"\n | \"converging\"\n | \"awaiting_go\"\n | \"implementing\"\n | \"checkpoint_review\"\n | \"paused\"\n | \"completed\"\n | \"failed\"\n | \"canceled\";\n\nexport type MultiFrontierParticipantRole = \"driver\" | \"watchdog\";\nexport type MultiFrontierParticipantPermission =\n | \"read_only\"\n | \"workspace_write\";\nexport type MultiFrontierParticipantStatus =\n | \"idle\"\n | \"running\"\n | \"waiting\"\n | \"failed\"\n | \"completed\";\nexport type MultiFrontierApprovalState =\n | \"not_required\"\n | \"pending\"\n | \"approved\"\n | \"rejected\";\nexport type MultiFrontierRecoveryReason =\n | \"main_process_restarted\"\n | \"driver_crashed\"\n | \"watchdog_crashed\"\n | \"app_quit\"\n | \"canceled\";\n\nexport interface MultiFrontierParticipantState {\n participantId: string;\n provider: string;\n runtime: string;\n model?: string;\n capabilities?: string[];\n sessionRef?: string;\n role: MultiFrontierParticipantRole;\n permission: MultiFrontierParticipantPermission;\n status: MultiFrontierParticipantStatus;\n}\n\nexport interface MultiFrontierDriverLease {\n participantId: string;\n generation: number;\n leaseState: \"inactive\" | \"active\" | \"revoked\";\n}\n\nexport interface MultiFrontierApproval {\n state: MultiFrontierApprovalState;\n proposalId?: string;\n reviewPacketId?: string;\n}\n\nexport interface MultiFrontierRecovery {\n reason: MultiFrontierRecoveryReason;\n recoveredAt: string;\n resumablePhase: MultiFrontierPhase;\n checkpointId?: string;\n}\n\n/**\n * The durable state contract shared by the main process and every participant.\n * Only the main-process coordinator writes it through this module.\n */\nexport interface MultiFrontierRunState {\n schemaVersion: 1;\n collaborationId: string;\n /** Opaque local workspace handle; never a filesystem path. */\n workspaceId?: string;\n phase: MultiFrontierPhase;\n participants: MultiFrontierParticipantState[];\n driver: MultiFrontierDriverLease | null;\n approval: MultiFrontierApproval;\n checkpointIds: string[];\n round: number;\n proposalIds: string[];\n reviewIds: string[];\n /** Opt-in policy; explicit GO remains the durable default. */\n autoContinueAfterAgreement: boolean;\n recovery?: MultiFrontierRecovery;\n}\n\nexport interface CreateMultiFrontierRunInput {\n collaborationId: string;\n workspaceId?: string;\n phase?: MultiFrontierPhase;\n participants: MultiFrontierParticipantState[];\n approval?: MultiFrontierApproval;\n checkpointIds?: string[];\n autoContinueAfterAgreement?: boolean;\n}\n\nexport interface RecoverMultiFrontierRunInput {\n now: string;\n reason: MultiFrontierRecoveryReason;\n}\n\nexport interface MultiFrontierParticipantEvent {\n participantId: string;\n generation?: number;\n permission: MultiFrontierParticipantPermission;\n}\n\nexport interface PersistedMultiFrontierParticipantEvent extends MultiFrontierParticipantEvent {\n schemaVersion: 1;\n id: string;\n collaborationId: string;\n createdAt: string;\n status?: MultiFrontierParticipantStatus;\n}\n\nexport type MultiFrontierArtifactKind = \"proposal\" | \"review\" | \"checkpoint\";\n\nexport interface MultiFrontierArtifactTestSummary {\n name: string;\n status: \"passed\" | \"failed\" | \"skipped\";\n summary?: string;\n}\n\n/** A bounded, redacted projection used only for Desktop orchestrator recovery. */\nexport interface MultiFrontierOrchestrationArtifact {\n id: string;\n kind:\n | \"proposal\"\n | \"cross_review\"\n | \"revision\"\n | \"synthesis\"\n | \"checkpoint\"\n | \"watchdog_review\"\n | \"finding_disposition\"\n | \"completion\";\n round: number;\n participantId?: string;\n text: string;\n attribution: { participantIds: string[]; sourceArtifactIds: string[] };\n supersedesArtifactId?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * A deliberately narrow coordination record. Full diffs, transcripts, and\n * provider payloads stay in their owning runtime rather than this durable\n * cross-provider index.\n */\nexport interface PersistedMultiFrontierArtifact {\n schemaVersion: 1;\n id: string;\n collaborationId: string;\n kind: MultiFrontierArtifactKind;\n createdAt: string;\n participantId?: string;\n title: string;\n summary: string;\n supersedesArtifactId?: string;\n contentHash?: string;\n fileRefs?: string[];\n testSummary?: MultiFrontierArtifactTestSummary[];\n orchestration?: MultiFrontierOrchestrationArtifact;\n}\n\nexport interface AppendMultiFrontierArtifactInput {\n id: string;\n collaborationId: string;\n kind: MultiFrontierArtifactKind;\n createdAt?: string;\n participantId?: string;\n title: string;\n summary: string;\n supersedesArtifactId?: string;\n contentHash?: string;\n fileRefs?: string[];\n testSummary?: MultiFrontierArtifactTestSummary[];\n orchestration?: MultiFrontierOrchestrationArtifact;\n}\n\nexport interface MultiFrontierParticipantEventRetention {\n schemaVersion: 1;\n retainedEventCount: number;\n retainedByteCount: number;\n droppedEventCount: number;\n droppedByteCount: number;\n truncated: boolean;\n replay: {\n requiresSnapshot: boolean;\n firstRetainedEventId?: string;\n };\n}\n\nexport interface MultiFrontierParticipantEventRetentionLimits {\n maxEventCount: number;\n maxBytes: number;\n}\n\nexport interface AppendMultiFrontierParticipantEventInput extends MultiFrontierParticipantEvent {\n id: string;\n collaborationId: string;\n createdAt?: string;\n status?: MultiFrontierParticipantStatus;\n}\n\nexport interface MultiFrontierStoredRun extends MultiFrontierRunState {\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * The desktop main-process coordinator is the sole caller of this transition\n * boundary. Its callback receives a detached snapshot, never renderer input.\n */\nexport type MultiFrontierCoordinatorTransition = (\n current: MultiFrontierStoredRun,\n) => MultiFrontierRunState | MultiFrontierStoredRun | null;\n\nexport type AppendMultiFrontierParticipantEventResult =\n | {\n accepted: true;\n deduplicated: boolean;\n event: PersistedMultiFrontierParticipantEvent;\n run: MultiFrontierStoredRun;\n }\n | {\n accepted: false;\n reason:\n | \"missing-run\"\n | \"stale-driver\"\n | \"missing-participant\"\n | \"event-conflict\"\n | \"terminal-participant\";\n run: MultiFrontierStoredRun | null;\n };\n\nexport type AppendMultiFrontierArtifactResult =\n | {\n accepted: true;\n deduplicated: boolean;\n artifact: PersistedMultiFrontierArtifact;\n run: MultiFrontierStoredRun;\n }\n | {\n accepted: false;\n reason:\n | \"missing-run\"\n | \"artifact-conflict\"\n | \"missing-participant\"\n | \"missing-superseded-artifact\"\n | \"artifact-limit-reached\";\n run: MultiFrontierStoredRun | null;\n };\n\nconst TERMINAL_PHASES = new Set<MultiFrontierPhase>([\n \"completed\",\n \"failed\",\n \"canceled\",\n]);\nconst SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,191}$/;\nconst SAFE_CONTENT_HASH = /^[a-f0-9]{64}$/;\nconst SAFE_FILE_REF = /^(?!\\/)(?!.*(?:^|\\/)\\.\\.(?:\\/|$))[A-Za-z0-9._/@+-]+$/;\nconst MAX_ARTIFACT_TITLE_BYTES = 280;\nconst MAX_ARTIFACT_SUMMARY_BYTES = 8 * 1024;\nconst MAX_ARTIFACT_FILE_REFS = 40;\nconst MAX_ARTIFACT_TEST_SUMMARIES = 40;\nconst MAX_ARTIFACT_TEST_NAME_BYTES = 280;\nconst MAX_ARTIFACT_TEST_SUMMARY_BYTES = 2 * 1024;\nexport const MAX_MULTI_FRONTIER_ARTIFACTS_PER_RUN = 200;\nexport const DEFAULT_MULTI_FRONTIER_PARTICIPANT_EVENT_RETENTION: MultiFrontierParticipantEventRetentionLimits =\n {\n maxEventCount: 2_000,\n maxBytes: 1_000_000,\n };\n\n/** All multi-frontier state stays alongside the existing local Code store. */\nexport function multiFrontierRunsStoreRoot(): string {\n return path.join(codeAgentStoreRoot(), \"multi-frontier\");\n}\n\nexport function multiFrontierRunsDir(): string {\n return path.join(multiFrontierRunsStoreRoot(), \"runs\");\n}\n\nexport function multiFrontierParticipantEventsDir(): string {\n return path.join(multiFrontierRunsStoreRoot(), \"events\");\n}\n\nexport function multiFrontierArtifactsDir(): string {\n return path.join(multiFrontierRunsStoreRoot(), \"artifacts\");\n}\n\nexport function createMultiFrontierRun(\n input: CreateMultiFrontierRunInput,\n): MultiFrontierStoredRun {\n assertSafeId(input.collaborationId, \"collaboration id\");\n if (input.workspaceId !== undefined) {\n assertSafeId(input.workspaceId, \"workspace id\");\n }\n assertParticipants(input.participants);\n if (getMultiFrontierRun(input.collaborationId)) {\n throw new Error(\n `Multi-frontier run already exists: ${input.collaborationId}`,\n );\n }\n const now = new Date().toISOString();\n const state: MultiFrontierStoredRun = {\n schemaVersion: 1,\n collaborationId: input.collaborationId,\n ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),\n phase: input.phase ?? \"proposing\",\n participants: input.participants.map((participant) => ({\n ...participant,\n capabilities: [...(participant.capabilities ?? [])],\n role: \"watchdog\",\n permission: \"read_only\",\n })),\n driver: null,\n approval: { ...(input.approval ?? { state: \"not_required\" }) },\n checkpointIds: [...(input.checkpointIds ?? [])],\n round: 1,\n proposalIds: [],\n reviewIds: [],\n autoContinueAfterAgreement: input.autoContinueAfterAgreement ?? false,\n createdAt: now,\n updatedAt: now,\n };\n writeNewMultiFrontierRun(state);\n return state;\n}\n\nexport function getMultiFrontierRun(\n collaborationId: string,\n): MultiFrontierStoredRun | null {\n if (!SAFE_ID.test(collaborationId)) return null;\n return readStoredRun(multiFrontierRunPath(collaborationId));\n}\n\nexport function listMultiFrontierRuns(): MultiFrontierStoredRun[] {\n const directory = multiFrontierRunsDir();\n if (!fs.existsSync(directory)) return [];\n return fs\n .readdirSync(directory)\n .filter((file) => file.endsWith(\".json\"))\n .map((file) => readStoredRun(path.join(directory, file)))\n .filter((run): run is MultiFrontierStoredRun => run !== null)\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));\n}\n\n/**\n * Recovery never resumes a native participant automatically. Any in-flight\n * driver lease is revoked and requires an explicit, newly fenced activation.\n */\nexport function recoverMultiFrontierRun(\n state: MultiFrontierRunState,\n input: RecoverMultiFrontierRunInput,\n): MultiFrontierRunState {\n assertTimestamp(input.now, \"recovery time\");\n if (TERMINAL_PHASES.has(state.phase) || state.phase === \"paused\") {\n return state;\n }\n\n const checkpointId = state.checkpointIds.at(-1);\n return {\n ...state,\n phase: \"paused\",\n participants: state.participants.map((participant) => ({\n ...participant,\n role: \"watchdog\",\n permission: \"read_only\",\n status: participant.status === \"running\" ? \"waiting\" : participant.status,\n })),\n driver: state.driver ? { ...state.driver, leaseState: \"revoked\" } : null,\n recovery: {\n reason: input.reason,\n recoveredAt: input.now,\n resumablePhase: state.phase,\n ...(checkpointId ? { checkpointId } : {}),\n },\n };\n}\n\n/** Persist the recovery decision made by the main-process coordinator. */\nexport function recoverStoredMultiFrontierRun(\n collaborationId: string,\n input: RecoverMultiFrontierRunInput,\n): MultiFrontierStoredRun | null {\n return mutateStoredMultiFrontierRun(collaborationId, input.now, (current) => {\n const recovered = recoverMultiFrontierRun(current, input);\n return recovered === current ? current : recovered;\n });\n}\n\n/**\n * Applies one durable coordinator-owned state transition under the run lock.\n * A state-shaped result retains proposal and review references by default;\n * returning a full stored record is the explicit escape hatch for a\n * coordinator operation that intentionally changes those references.\n */\nexport function transitionStoredMultiFrontierRun(\n collaborationId: string,\n updatedAt: string,\n transition: MultiFrontierCoordinatorTransition,\n): MultiFrontierStoredRun | null {\n assertSafeId(collaborationId, \"collaboration id\");\n assertTimestamp(updatedAt, \"transition time\");\n if (typeof transition !== \"function\") {\n throw new Error(\"Invalid multi-frontier coordinator transition.\");\n }\n\n return mutateStoredMultiFrontierRun(collaborationId, updatedAt, (current) => {\n const candidate = transition(cloneStoredMultiFrontierRun(current));\n if (candidate === null) return null;\n if (isThenable(candidate)) {\n throw new Error(\n \"Multi-frontier coordinator transitions must be synchronous.\",\n );\n }\n if (\n !candidate ||\n typeof candidate !== \"object\" ||\n Array.isArray(candidate)\n ) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n\n const isFullStoredRun = hasStoredRunTimestamps(candidate);\n if (\n !isFullStoredRun &&\n (Object.hasOwn(candidate, \"createdAt\") ||\n Object.hasOwn(candidate, \"updatedAt\"))\n ) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n if (\n candidate.schemaVersion !== current.schemaVersion ||\n candidate.collaborationId !== current.collaborationId\n ) {\n throw new Error(\n \"Multi-frontier coordinator transitions cannot change run identity.\",\n );\n }\n if (isFullStoredRun) {\n if (!isCompleteMultiFrontierStoredRun(candidate)) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n if (candidate.createdAt !== current.createdAt) {\n throw new Error(\n \"Multi-frontier coordinator transitions cannot change creation time.\",\n );\n }\n }\n\n const nextState: MultiFrontierRunState = {\n ...candidate,\n ...(isFullStoredRun\n ? {}\n : {\n proposalIds: [...current.proposalIds],\n reviewIds: [...current.reviewIds],\n }),\n };\n if (!isCompleteMultiFrontierRunState(nextState)) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n return nextState;\n });\n}\n\n/**\n * Coordinators must call this before applying a participant event. Write\n * events are accepted only from the active driver generation.\n */\nexport function canApplyMultiFrontierParticipantEvent(\n state: MultiFrontierRunState,\n event: MultiFrontierParticipantEvent,\n): boolean {\n if (TERMINAL_PHASES.has(state.phase) || state.phase === \"paused\") {\n return false;\n }\n if (\n !state.participants.some(\n (candidate) => candidate.participantId === event.participantId,\n )\n ) {\n return false;\n }\n if (event.permission === \"read_only\") return true;\n const driver = state.driver;\n return Boolean(\n state.phase === \"implementing\" &&\n driver?.leaseState === \"active\" &&\n driver.participantId === event.participantId &&\n driver.generation === event.generation,\n );\n}\n\n/**\n * Explicitly restores a write lease after recovery. The generation increments\n * so an event from the interrupted process can never regain write authority.\n */\nexport function reactivateMultiFrontierDriver(\n state: MultiFrontierRunState,\n participantId: string,\n): MultiFrontierRunState | null {\n if (\n state.phase !== \"paused\" ||\n !state.recovery ||\n state.recovery.resumablePhase !== \"implementing\" ||\n state.approval.state === \"pending\"\n ) {\n return null;\n }\n const participant = state.participants.find(\n (candidate) => candidate.participantId === participantId,\n );\n if (!participant || participant.status === \"failed\") return null;\n\n const nextGeneration = (state.driver?.generation ?? 0) + 1;\n return {\n ...state,\n phase: state.recovery.resumablePhase,\n participants: state.participants.map((candidate) => ({\n ...candidate,\n role: candidate.participantId === participantId ? \"driver\" : \"watchdog\",\n permission:\n candidate.participantId === participantId\n ? \"workspace_write\"\n : \"read_only\",\n status:\n candidate.participantId === participantId\n ? \"waiting\"\n : candidate.status,\n })),\n driver: {\n participantId,\n generation: nextGeneration,\n leaseState: \"active\",\n },\n recovery: undefined,\n };\n}\n\n/** Assign the first explicit write lease for an implementing run. */\nexport function activateMultiFrontierDriver(\n state: MultiFrontierRunState,\n participantId: string,\n): MultiFrontierRunState | null {\n if (\n state.phase !== \"implementing\" ||\n state.approval.state === \"pending\" ||\n state.driver?.leaseState === \"active\"\n ) {\n return null;\n }\n const participant = state.participants.find(\n (candidate) => candidate.participantId === participantId,\n );\n if (!participant || participant.status === \"failed\") return null;\n\n return {\n ...state,\n participants: state.participants.map((candidate) => ({\n ...candidate,\n role: candidate.participantId === participantId ? \"driver\" : \"watchdog\",\n permission:\n candidate.participantId === participantId\n ? \"workspace_write\"\n : \"read_only\",\n })),\n driver: {\n participantId,\n generation: (state.driver?.generation ?? 0) + 1,\n leaseState: \"active\",\n },\n };\n}\n\n/** Persist the first explicit driver activation from the main-process coordinator. */\nexport function activateStoredMultiFrontierDriver(\n collaborationId: string,\n participantId: string,\n now = new Date().toISOString(),\n): MultiFrontierStoredRun | null {\n assertTimestamp(now, \"activation time\");\n return mutateStoredMultiFrontierRun(collaborationId, now, (current) =>\n activateMultiFrontierDriver(current, participantId),\n );\n}\n\n/** Persist an explicit driver reactivation after the human-approved resume. */\nexport function reactivateStoredMultiFrontierDriver(\n collaborationId: string,\n participantId: string,\n now = new Date().toISOString(),\n): MultiFrontierStoredRun | null {\n assertTimestamp(now, \"reactivation time\");\n return mutateStoredMultiFrontierRun(collaborationId, now, (current) =>\n reactivateMultiFrontierDriver(current, participantId),\n );\n}\n\n/**\n * Appends an idempotent participant event after the coordinator has fenced it.\n * The event journal is diagnostic; state is mutated only through this guarded\n * coordinator entry point.\n */\nexport function appendMultiFrontierParticipantEvent(\n input: AppendMultiFrontierParticipantEventInput,\n): AppendMultiFrontierParticipantEventResult {\n assertSafeId(input.id, \"event id\");\n assertSafeId(input.collaborationId, \"collaboration id\");\n assertSafeId(input.participantId, \"participant id\");\n const createdAt = input.createdAt ?? new Date().toISOString();\n assertTimestamp(createdAt, \"event time\");\n\n const runPath = multiFrontierRunPath(input.collaborationId);\n return withFileLockSync(runPath, () => {\n const current = readStoredRun(runPath);\n if (!current) return { accepted: false, reason: \"missing-run\", run: null };\n const existing = listMultiFrontierParticipantEvents(\n input.collaborationId,\n ).find((event) => event.id === input.id);\n if (existing) {\n if (!isMatchingParticipantEvent(existing, input)) {\n return { accepted: false, reason: \"event-conflict\", run: current };\n }\n return {\n accepted: true,\n deduplicated: true,\n event: existing,\n run: current,\n };\n }\n if (\n !current.participants.some(\n (candidate) => candidate.participantId === input.participantId,\n )\n ) {\n return { accepted: false, reason: \"missing-participant\", run: current };\n }\n if (!canApplyMultiFrontierParticipantEvent(current, input)) {\n return { accepted: false, reason: \"stale-driver\", run: current };\n }\n const participant = current.participants.find(\n (candidate) => candidate.participantId === input.participantId,\n );\n if (\n input.status !== undefined &&\n (participant?.status === \"completed\" ||\n participant?.status === \"failed\") &&\n input.status !== participant.status\n ) {\n return { accepted: false, reason: \"terminal-participant\", run: current };\n }\n\n const event: PersistedMultiFrontierParticipantEvent = {\n schemaVersion: 1,\n id: input.id,\n collaborationId: input.collaborationId,\n participantId: input.participantId,\n permission: input.permission,\n createdAt,\n ...(input.generation === undefined\n ? {}\n : { generation: input.generation }),\n ...(input.status === undefined ? {} : { status: input.status }),\n };\n appendParticipantEvent(event);\n compactParticipantEventJournal(input.collaborationId);\n const status = input.status;\n const participants = status\n ? current.participants.map((candidate) =>\n candidate.participantId === input.participantId\n ? { ...candidate, status }\n : candidate,\n )\n : current.participants;\n const run = writeNextStoredRun(\n current,\n { ...current, participants },\n createdAt,\n );\n return { accepted: true, deduplicated: false, event, run };\n });\n}\n\n/**\n * Appends a bounded proposal, review, or checkpoint index record. The\n * coordinator owns both the artifact and its run-state reference under one\n * run lock, so a reader never observes a durable reference without its record.\n */\nexport function appendMultiFrontierArtifact(\n input: AppendMultiFrontierArtifactInput,\n): AppendMultiFrontierArtifactResult {\n assertArtifactInput(input);\n const createdAt = input.createdAt ?? new Date().toISOString();\n assertTimestamp(createdAt, \"artifact time\");\n const artifact = toPersistedArtifact(input, createdAt);\n const runPath = multiFrontierRunPath(input.collaborationId);\n return withFileLockSync(runPath, () => {\n const current = readStoredRun(runPath);\n if (!current) return { accepted: false, reason: \"missing-run\", run: null };\n if (\n input.participantId !== undefined &&\n !current.participants.some(\n (participant) => participant.participantId === input.participantId,\n )\n ) {\n return { accepted: false, reason: \"missing-participant\", run: current };\n }\n if (\n input.supersedesArtifactId !== undefined &&\n !readStoredArtifact(\n multiFrontierArtifactPath(\n input.collaborationId,\n input.supersedesArtifactId,\n ),\n )\n ) {\n return {\n accepted: false,\n reason: \"missing-superseded-artifact\",\n run: current,\n };\n }\n\n const artifactPath = multiFrontierArtifactPath(\n input.collaborationId,\n input.id,\n );\n const existing = readStoredArtifact(artifactPath);\n if (existing) {\n if (!isMatchingArtifact(existing, artifact)) {\n return { accepted: false, reason: \"artifact-conflict\", run: current };\n }\n const ids = artifactIdsForKind(current, existing.kind);\n const run = ids.includes(existing.id)\n ? current\n : writeNextStoredRun(\n current,\n withArtifactId(current, existing.kind, existing.id),\n new Date().toISOString(),\n );\n return {\n accepted: true,\n deduplicated: true,\n artifact: existing,\n run,\n };\n }\n if (fs.existsSync(artifactPath)) {\n return { accepted: false, reason: \"artifact-conflict\", run: current };\n }\n if (\n listMultiFrontierArtifacts(input.collaborationId).length >=\n MAX_MULTI_FRONTIER_ARTIFACTS_PER_RUN\n ) {\n return {\n accepted: false,\n reason: \"artifact-limit-reached\",\n run: current,\n };\n }\n\n writeJsonFileAtomically(artifactPath, artifact, { mode: 0o600 });\n const ids = artifactIdsForKind(current, artifact.kind);\n const next = ids.includes(artifact.id)\n ? current\n : withArtifactId(current, artifact.kind, artifact.id);\n const run = writeNextStoredRun(current, next, createdAt);\n return { accepted: true, deduplicated: false, artifact, run };\n });\n}\n\nexport function getMultiFrontierArtifact(\n collaborationId: string,\n artifactId: string,\n): PersistedMultiFrontierArtifact | null {\n if (!SAFE_ID.test(collaborationId) || !SAFE_ID.test(artifactId)) return null;\n return readStoredArtifact(\n multiFrontierArtifactPath(collaborationId, artifactId),\n );\n}\n\nexport function listMultiFrontierArtifacts(\n collaborationId: string,\n): PersistedMultiFrontierArtifact[] {\n if (!SAFE_ID.test(collaborationId)) return [];\n const directory = multiFrontierArtifactsRunDir(collaborationId);\n if (!fs.existsSync(directory)) return [];\n return fs\n .readdirSync(directory)\n .filter((file) => file.endsWith(\".json\"))\n .map((file) => readStoredArtifact(path.join(directory, file)))\n .filter(\n (artifact): artifact is PersistedMultiFrontierArtifact =>\n artifact !== null,\n )\n .sort((left, right) => left.createdAt.localeCompare(right.createdAt));\n}\n\nexport function listMultiFrontierParticipantEvents(\n collaborationId: string,\n): PersistedMultiFrontierParticipantEvent[] {\n if (!SAFE_ID.test(collaborationId)) return [];\n const eventPath = multiFrontierParticipantEventsPath(collaborationId);\n if (!fs.existsSync(eventPath)) return [];\n return fs\n .readFileSync(eventPath, \"utf-8\")\n .split(/\\r?\\n/)\n .filter(Boolean)\n .map(readParticipantEvent)\n .filter(\n (event): event is PersistedMultiFrontierParticipantEvent =>\n event !== null,\n );\n}\n\nexport function getMultiFrontierParticipantEventRetention(\n collaborationId: string,\n): MultiFrontierParticipantEventRetention | null {\n if (!SAFE_ID.test(collaborationId)) return null;\n return readParticipantEventRetention(\n multiFrontierParticipantEventRetentionPath(collaborationId),\n );\n}\n\n/**\n * Coordinator maintenance for a bounded event journal. It deliberately keeps\n * the newest contiguous tail and a replay marker instead of deleting run state.\n */\nexport function compactMultiFrontierParticipantEvents(\n collaborationId: string,\n limits = DEFAULT_MULTI_FRONTIER_PARTICIPANT_EVENT_RETENTION,\n): MultiFrontierParticipantEventRetention | null {\n assertSafeId(collaborationId, \"collaboration id\");\n assertRetentionLimits(limits);\n const runPath = multiFrontierRunPath(collaborationId);\n return withFileLockSync(runPath, () => {\n if (!readStoredRun(runPath)) return null;\n return compactParticipantEventJournal(collaborationId, limits);\n });\n}\n\nfunction writeMultiFrontierRun(run: MultiFrontierStoredRun): void {\n writeJsonFileAtomically(multiFrontierRunPath(run.collaborationId), run);\n}\n\nfunction writeNewMultiFrontierRun(run: MultiFrontierStoredRun): void {\n const filePath = multiFrontierRunPath(run.collaborationId);\n withFileLockSync(filePath, () => {\n if (fs.existsSync(filePath)) {\n throw new Error(\n `Multi-frontier run already exists: ${run.collaborationId}`,\n );\n }\n writeJsonFileAtomically(filePath, run);\n });\n}\n\nfunction writeNextStoredRun(\n current: MultiFrontierStoredRun,\n nextState: MultiFrontierRunState,\n updatedAt: string,\n): MultiFrontierStoredRun {\n const next: MultiFrontierStoredRun = {\n ...nextState,\n createdAt: current.createdAt,\n updatedAt,\n };\n writeMultiFrontierRun(next);\n return next;\n}\n\nfunction appendParticipantEvent(\n event: PersistedMultiFrontierParticipantEvent,\n): void {\n appendUniqueJsonLineAtomically(\n multiFrontierParticipantEventsPath(event.collaborationId),\n event,\n readParticipantEventValue,\n { mode: 0o600 },\n );\n}\n\nfunction compactParticipantEventJournal(\n collaborationId: string,\n limits = DEFAULT_MULTI_FRONTIER_PARTICIPANT_EVENT_RETENTION,\n): MultiFrontierParticipantEventRetention {\n const eventPath = multiFrontierParticipantEventsPath(collaborationId);\n return withFileLockSync(eventPath, () => {\n const previous = readParticipantEventRetention(\n multiFrontierParticipantEventRetentionPath(collaborationId),\n );\n const events = listMultiFrontierParticipantEvents(collaborationId);\n const retained: PersistedMultiFrontierParticipantEvent[] = [];\n let retainedByteCount = 0;\n for (const event of [...events].reverse()) {\n const bytes = eventLineByteLength(event);\n if (\n retained.length >= limits.maxEventCount ||\n retainedByteCount + bytes > limits.maxBytes\n ) {\n break;\n }\n retained.push(event);\n retainedByteCount += bytes;\n }\n retained.reverse();\n const retainedIds = new Set(retained.map((event) => event.id));\n const dropped = events.filter((event) => !retainedIds.has(event.id));\n if (dropped.length > 0) {\n writeTextFileAtomically(\n eventPath,\n retained.map((event) => `${JSON.stringify(event)}\\n`).join(\"\"),\n );\n }\n const retention: MultiFrontierParticipantEventRetention = {\n schemaVersion: 1,\n retainedEventCount: retained.length,\n retainedByteCount,\n droppedEventCount: (previous?.droppedEventCount ?? 0) + dropped.length,\n droppedByteCount:\n (previous?.droppedByteCount ?? 0) +\n dropped.reduce((total, event) => total + eventLineByteLength(event), 0),\n truncated: (previous?.truncated ?? false) || dropped.length > 0,\n replay: {\n requiresSnapshot: (previous?.truncated ?? false) || dropped.length > 0,\n ...(retained[0] ? { firstRetainedEventId: retained[0].id } : {}),\n },\n };\n writeJsonFileAtomically(\n multiFrontierParticipantEventRetentionPath(collaborationId),\n retention,\n { mode: 0o600 },\n );\n return retention;\n });\n}\n\nfunction mutateStoredMultiFrontierRun(\n collaborationId: string,\n updatedAt: string,\n mutate: (current: MultiFrontierStoredRun) => MultiFrontierRunState | null,\n): MultiFrontierStoredRun | null {\n const filePath = multiFrontierRunPath(collaborationId);\n return withFileLockSync(filePath, () => {\n const current = readStoredRun(filePath);\n if (!current) return null;\n const nextState = mutate(current);\n if (!nextState) return null;\n const next: MultiFrontierStoredRun = {\n ...nextState,\n createdAt: current.createdAt,\n updatedAt,\n };\n writeMultiFrontierRun(next);\n return next;\n });\n}\n\nfunction multiFrontierRunPath(collaborationId: string): string {\n return path.join(multiFrontierRunsDir(), `${collaborationId}.json`);\n}\n\nfunction multiFrontierParticipantEventsPath(collaborationId: string): string {\n return path.join(\n multiFrontierParticipantEventsDir(),\n `${collaborationId}.jsonl`,\n );\n}\n\nfunction multiFrontierParticipantEventRetentionPath(\n collaborationId: string,\n): string {\n return path.join(\n multiFrontierParticipantEventsDir(),\n `${collaborationId}.retention.json`,\n );\n}\n\nfunction multiFrontierArtifactsRunDir(collaborationId: string): string {\n return path.join(multiFrontierArtifactsDir(), collaborationId);\n}\n\nfunction multiFrontierArtifactPath(\n collaborationId: string,\n artifactId: string,\n): string {\n return path.join(\n multiFrontierArtifactsRunDir(collaborationId),\n `${artifactId}.json`,\n );\n}\n\nfunction readStoredRun(filePath: string): MultiFrontierStoredRun | null {\n try {\n const raw = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as unknown;\n const normalized = normalizeStoredRunDefaults(raw);\n return isCompleteMultiFrontierStoredRun(normalized) ? normalized : null;\n } catch {\n return null;\n }\n}\n\nfunction isCompleteMultiFrontierStoredRun(\n value: unknown,\n): value is MultiFrontierStoredRun {\n if (!hasStoredRunTimestamps(value)) return false;\n return (\n isCompleteMultiFrontierRunState(value) &&\n !Number.isNaN(Date.parse(value.createdAt)) &&\n !Number.isNaN(Date.parse(value.updatedAt))\n );\n}\n\nfunction isCompleteMultiFrontierRunState(\n value: unknown,\n): value is MultiFrontierRunState {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const run = value as Partial<MultiFrontierRunState>;\n return (\n run.schemaVersion === 1 &&\n typeof run.collaborationId === \"string\" &&\n SAFE_ID.test(run.collaborationId) &&\n (run.workspaceId === undefined ||\n (typeof run.workspaceId === \"string\" && SAFE_ID.test(run.workspaceId))) &&\n isPhase(run.phase) &&\n isStoredRunParticipantsAndDriverValid(run.participants, run.driver) &&\n isApproval(run.approval) &&\n Array.isArray(run.checkpointIds) &&\n run.checkpointIds.every(\n (checkpointId) => typeof checkpointId === \"string\",\n ) &&\n typeof run.round === \"number\" &&\n Number.isInteger(run.round) &&\n run.round >= 1 &&\n isStringArray(run.proposalIds) &&\n isStringArray(run.reviewIds) &&\n typeof run.autoContinueAfterAgreement === \"boolean\" &&\n (run.recovery === undefined || isRecovery(run.recovery))\n );\n}\n\nfunction normalizeStoredRunDefaults(value: unknown): unknown {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return value;\n if (!Object.hasOwn(value, \"autoContinueAfterAgreement\")) {\n return { ...value, autoContinueAfterAgreement: false };\n }\n return value;\n}\n\nfunction hasStoredRunTimestamps(\n value: unknown,\n): value is MultiFrontierStoredRun {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const run = value as Partial<MultiFrontierStoredRun>;\n return typeof run.createdAt === \"string\" && typeof run.updatedAt === \"string\";\n}\n\nfunction cloneStoredMultiFrontierRun(\n run: MultiFrontierStoredRun,\n): MultiFrontierStoredRun {\n return JSON.parse(JSON.stringify(run)) as MultiFrontierStoredRun;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return (\n Boolean(value) &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction readParticipantEvent(\n line: string,\n): PersistedMultiFrontierParticipantEvent | null {\n try {\n return readParticipantEventValue(JSON.parse(line) as unknown);\n } catch {\n return null;\n }\n}\n\nfunction readParticipantEventValue(\n raw: unknown,\n): PersistedMultiFrontierParticipantEvent | null {\n try {\n if (!raw || typeof raw !== \"object\") return null;\n const event = raw as Partial<PersistedMultiFrontierParticipantEvent>;\n if (\n event.schemaVersion !== 1 ||\n typeof event.id !== \"string\" ||\n typeof event.collaborationId !== \"string\" ||\n typeof event.participantId !== \"string\" ||\n !isPermission(event.permission) ||\n (event.generation !== undefined &&\n typeof event.generation !== \"number\") ||\n (event.status !== undefined && !isParticipantStatus(event.status)) ||\n typeof event.createdAt !== \"string\" ||\n Number.isNaN(Date.parse(event.createdAt))\n ) {\n return null;\n }\n return event as PersistedMultiFrontierParticipantEvent;\n } catch {\n return null;\n }\n}\n\nfunction readStoredArtifact(\n filePath: string,\n): PersistedMultiFrontierArtifact | null {\n try {\n return readArtifactValue(\n JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as unknown,\n );\n } catch {\n return null;\n }\n}\n\nfunction readArtifactValue(\n raw: unknown,\n): PersistedMultiFrontierArtifact | null {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return null;\n const artifact = raw as Partial<PersistedMultiFrontierArtifact>;\n if (\n artifact.schemaVersion !== 1 ||\n !isSafeId(artifact.id) ||\n !isSafeId(artifact.collaborationId) ||\n !isArtifactKind(artifact.kind) ||\n typeof artifact.createdAt !== \"string\" ||\n Number.isNaN(Date.parse(artifact.createdAt)) ||\n (artifact.participantId !== undefined &&\n !isSafeId(artifact.participantId)) ||\n !isBoundedText(artifact.title, MAX_ARTIFACT_TITLE_BYTES) ||\n !isArtifactSummary(artifact.summary) ||\n (artifact.supersedesArtifactId !== undefined &&\n !isSafeId(artifact.supersedesArtifactId)) ||\n (artifact.contentHash !== undefined &&\n !SAFE_CONTENT_HASH.test(artifact.contentHash)) ||\n !isArtifactFileRefs(artifact.fileRefs) ||\n !isArtifactTestSummaries(artifact.testSummary) ||\n !isOrchestrationArtifact(artifact.orchestration)\n ) {\n return null;\n }\n return artifact as PersistedMultiFrontierArtifact;\n}\n\nfunction readParticipantEventRetention(\n filePath: string,\n): MultiFrontierParticipantEventRetention | null {\n try {\n const raw = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as unknown;\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return null;\n const retention = raw as Partial<MultiFrontierParticipantEventRetention>;\n if (\n retention.schemaVersion !== 1 ||\n !isNonNegativeInteger(retention.retainedEventCount) ||\n !isNonNegativeInteger(retention.retainedByteCount) ||\n !isNonNegativeInteger(retention.droppedEventCount) ||\n !isNonNegativeInteger(retention.droppedByteCount) ||\n typeof retention.truncated !== \"boolean\" ||\n !retention.replay ||\n typeof retention.replay !== \"object\" ||\n typeof retention.replay.requiresSnapshot !== \"boolean\" ||\n (retention.replay.firstRetainedEventId !== undefined &&\n !isSafeId(retention.replay.firstRetainedEventId))\n ) {\n return null;\n }\n return retention as MultiFrontierParticipantEventRetention;\n } catch {\n return null;\n }\n}\n\nfunction assertArtifactInput(input: AppendMultiFrontierArtifactInput): void {\n assertAllowlistedArtifactInput(input);\n assertSafeId(input.id, \"artifact id\");\n assertSafeId(input.collaborationId, \"collaboration id\");\n if (!isArtifactKind(input.kind))\n throw new Error(\"Invalid multi-frontier artifact kind.\");\n if (input.participantId !== undefined) {\n assertSafeId(input.participantId, \"participant id\");\n }\n assertBoundedText(input.title, MAX_ARTIFACT_TITLE_BYTES, \"artifact title\");\n if (!isArtifactSummary(input.summary)) {\n throw new Error(\"Invalid multi-frontier artifact summary.\");\n }\n if (input.supersedesArtifactId !== undefined) {\n assertSafeId(input.supersedesArtifactId, \"superseded artifact id\");\n }\n if (\n input.contentHash !== undefined &&\n !SAFE_CONTENT_HASH.test(input.contentHash)\n ) {\n throw new Error(\"Invalid multi-frontier artifact content hash.\");\n }\n if (!isArtifactFileRefs(input.fileRefs)) {\n throw new Error(\"Invalid multi-frontier artifact file references.\");\n }\n if (!isArtifactTestSummaries(input.testSummary)) {\n throw new Error(\"Invalid multi-frontier artifact test summary.\");\n }\n if (!isOrchestrationArtifact(input.orchestration)) {\n throw new Error(\"Invalid multi-frontier orchestration artifact.\");\n }\n}\n\nfunction assertAllowlistedArtifactInput(\n input: AppendMultiFrontierArtifactInput,\n): void {\n const allowed = new Set([\n \"id\",\n \"collaborationId\",\n \"kind\",\n \"createdAt\",\n \"participantId\",\n \"title\",\n \"summary\",\n \"supersedesArtifactId\",\n \"contentHash\",\n \"fileRefs\",\n \"testSummary\",\n \"orchestration\",\n ]);\n if (\n !input ||\n typeof input !== \"object\" ||\n Array.isArray(input) ||\n Object.keys(input).some((key) => !allowed.has(key))\n ) {\n throw new Error(\n \"Multi-frontier artifacts only accept allowlisted summary fields.\",\n );\n }\n}\n\nfunction toPersistedArtifact(\n input: AppendMultiFrontierArtifactInput,\n createdAt: string,\n): PersistedMultiFrontierArtifact {\n return {\n schemaVersion: 1,\n id: input.id,\n collaborationId: input.collaborationId,\n kind: input.kind,\n createdAt,\n title: input.title,\n summary: input.summary,\n ...(input.participantId === undefined\n ? {}\n : { participantId: input.participantId }),\n ...(input.supersedesArtifactId === undefined\n ? {}\n : { supersedesArtifactId: input.supersedesArtifactId }),\n ...(input.contentHash === undefined\n ? {}\n : { contentHash: input.contentHash }),\n ...(input.fileRefs === undefined ? {} : { fileRefs: [...input.fileRefs] }),\n ...(input.testSummary === undefined\n ? {}\n : {\n testSummary: input.testSummary.map((summary) => ({ ...summary })),\n }),\n ...(input.orchestration === undefined\n ? {}\n : { orchestration: cloneOrchestrationArtifact(input.orchestration) }),\n };\n}\n\nfunction artifactIdsForKind(\n run: MultiFrontierStoredRun,\n kind: MultiFrontierArtifactKind,\n): string[] {\n if (kind === \"proposal\") return run.proposalIds;\n if (kind === \"review\") return run.reviewIds;\n return run.checkpointIds;\n}\n\nfunction withArtifactId(\n run: MultiFrontierStoredRun,\n kind: MultiFrontierArtifactKind,\n artifactId: string,\n): MultiFrontierStoredRun {\n if (kind === \"proposal\") {\n return { ...run, proposalIds: [...run.proposalIds, artifactId] };\n }\n if (kind === \"review\") {\n return { ...run, reviewIds: [...run.reviewIds, artifactId] };\n }\n return { ...run, checkpointIds: [...run.checkpointIds, artifactId] };\n}\n\nfunction isMatchingArtifact(\n existing: PersistedMultiFrontierArtifact,\n candidate: PersistedMultiFrontierArtifact,\n): boolean {\n return JSON.stringify(existing) === JSON.stringify(candidate);\n}\n\nfunction isArtifactKind(value: unknown): value is MultiFrontierArtifactKind {\n return value === \"proposal\" || value === \"review\" || value === \"checkpoint\";\n}\n\nfunction isArtifactSummary(value: unknown): value is string {\n return (\n isBoundedText(value, MAX_ARTIFACT_SUMMARY_BYTES) &&\n !/(?:^|\\n)diff --git\\s|(?:^|\\n)@@\\s+-\\d+/m.test(value)\n );\n}\n\nfunction isArtifactFileRefs(value: unknown): value is string[] | undefined {\n return (\n value === undefined ||\n (Array.isArray(value) &&\n value.length <= MAX_ARTIFACT_FILE_REFS &&\n value.every(\n (fileRef) =>\n typeof fileRef === \"string\" &&\n Buffer.byteLength(fileRef, \"utf-8\") <= 512 &&\n SAFE_FILE_REF.test(fileRef),\n ))\n );\n}\n\nfunction isArtifactTestSummaries(\n value: unknown,\n): value is MultiFrontierArtifactTestSummary[] | undefined {\n return (\n value === undefined ||\n (Array.isArray(value) &&\n value.length <= MAX_ARTIFACT_TEST_SUMMARIES &&\n value.every(\n (summary) =>\n Boolean(summary) &&\n typeof summary === \"object\" &&\n isBoundedText(\n (summary as MultiFrontierArtifactTestSummary).name,\n MAX_ARTIFACT_TEST_NAME_BYTES,\n ) &&\n [\"passed\", \"failed\", \"skipped\"].includes(\n (summary as MultiFrontierArtifactTestSummary).status,\n ) &&\n ((summary as MultiFrontierArtifactTestSummary).summary ===\n undefined ||\n isBoundedText(\n (summary as MultiFrontierArtifactTestSummary).summary,\n MAX_ARTIFACT_TEST_SUMMARY_BYTES,\n )),\n ))\n );\n}\n\nfunction isOrchestrationArtifact(\n value: unknown,\n): value is MultiFrontierOrchestrationArtifact | undefined {\n if (value === undefined) return true;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const artifact = value as Partial<MultiFrontierOrchestrationArtifact>;\n return (\n hasExactKeys(artifact, [\n \"id\",\n \"kind\",\n \"round\",\n \"participantId\",\n \"text\",\n \"attribution\",\n \"supersedesArtifactId\",\n \"metadata\",\n ]) &&\n isSafeId(artifact.id) &&\n [\n \"proposal\",\n \"cross_review\",\n \"revision\",\n \"synthesis\",\n \"checkpoint\",\n \"watchdog_review\",\n \"finding_disposition\",\n \"completion\",\n ].includes(artifact.kind ?? \"\") &&\n Number.isSafeInteger(artifact.round) &&\n artifact.round! >= 1 &&\n artifact.round! <= 3 &&\n (artifact.participantId === undefined ||\n isSafeId(artifact.participantId)) &&\n isSafeOrchestrationText(artifact.text) &&\n isOrchestrationAttribution(artifact.attribution) &&\n (artifact.supersedesArtifactId === undefined ||\n isSafeId(artifact.supersedesArtifactId)) &&\n isSafeOrchestrationMetadata(artifact.kind!, artifact.metadata)\n );\n}\n\nfunction hasExactKeys(value: object, allowed: readonly string[]): boolean {\n return Object.keys(value).every((key) => allowed.includes(key));\n}\n\nfunction isOrchestrationAttribution(\n value: unknown,\n): value is MultiFrontierOrchestrationArtifact[\"attribution\"] {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const attribution = value as Partial<\n MultiFrontierOrchestrationArtifact[\"attribution\"]\n >;\n return (\n hasExactKeys(attribution as Record<string, unknown>, [\n \"participantIds\",\n \"sourceArtifactIds\",\n ]) &&\n isSafeIdArray(attribution.participantIds, 2) &&\n isSafeIdArray(\n attribution.sourceArtifactIds,\n MAX_MULTI_FRONTIER_ARTIFACTS_PER_RUN,\n )\n );\n}\n\nfunction isSafeIdArray(value: unknown, max: number): value is string[] {\n return (\n Array.isArray(value) &&\n value.length <= max &&\n value.every((item) => isSafeId(item))\n );\n}\n\nfunction isSafeOrchestrationText(value: unknown): value is string {\n return (\n isArtifactSummary(value) &&\n !/(?:bearer\\s+|api[_-]?key\\s*[:=]|authorization\\s*[:=]|(?:sk|rk|pk)[_-][A-Za-z0-9_-]{12,}|(?:access|refresh)[_-]?token\\s*[:=])/i.test(\n value,\n )\n );\n}\n\nfunction isSafeOrchestrationMetadata(\n kind: NonNullable<MultiFrontierOrchestrationArtifact[\"kind\"]>,\n value: unknown,\n): value is Record<string, unknown> | undefined {\n const allowedKeys = metadataKeysForOrchestrationKind(kind);\n if (allowedKeys.length === 0) return value === undefined;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const entries = Object.entries(value);\n if (\n entries.length === 0 ||\n entries.some(([key]) => !allowedKeys.includes(key)) ||\n entries.some(([key]) =>\n /(token|secret|authorization|credential|password|email|organization|account)/i.test(\n key,\n ),\n )\n ) {\n return false;\n }\n try {\n return (\n isArtifactSummary(JSON.stringify(value)) &&\n isValidOrchestrationMetadata(kind, value as Record<string, unknown>)\n );\n } catch {\n return false;\n }\n}\n\nfunction isValidOrchestrationMetadata(\n kind: NonNullable<MultiFrontierOrchestrationArtifact[\"kind\"]>,\n metadata: Record<string, unknown>,\n): boolean {\n if (kind === \"synthesis\") {\n return (\n typeof metadata.agreed === \"boolean\" &&\n typeof metadata.deterministicallyResolved === \"boolean\" &&\n (metadata.reversibleResolution === undefined ||\n isReversibleResolution(metadata.reversibleResolution))\n );\n }\n if (kind === \"checkpoint\") return isCheckpointBundle(metadata.bundle);\n if (kind === \"cross_review\" || kind === \"watchdog_review\") {\n return isFindingList(metadata.findings);\n }\n if (kind === \"finding_disposition\") {\n return isFindingDispositionList(metadata.dispositions);\n }\n if (kind === \"completion\") {\n return (\n isCompletionTests(metadata.tests) &&\n isSafeTextList(metadata.proofRefs, 40) &&\n isSafeTextList(metadata.remainingRisks, 40)\n );\n }\n return false;\n}\n\nfunction isFindingList(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length <= 40 &&\n value.every((finding) => {\n if (!finding || typeof finding !== \"object\" || Array.isArray(finding))\n return false;\n const item = finding as Record<string, unknown>;\n return (\n hasExactKeys(item, [\n \"id\",\n \"category\",\n \"summary\",\n \"rawFindingId\",\n \"reviewerParticipantId\",\n ]) &&\n isSafeId(item.id) &&\n isSafeOrchestrationText(item.summary) &&\n isSafeId(item.rawFindingId) &&\n isSafeId(item.reviewerParticipantId) &&\n [\n \"reversible_technical\",\n \"intent_or_scope\",\n \"destructive_action\",\n \"security_or_privacy\",\n \"outward_effect\",\n \"meaningful_cost_expansion\",\n \"irreversible_architecture\",\n ].includes(item.category as string)\n );\n })\n );\n}\n\nfunction isFindingDispositionList(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length <= 40 &&\n value.every((disposition) => {\n if (\n !disposition ||\n typeof disposition !== \"object\" ||\n Array.isArray(disposition)\n )\n return false;\n const item = disposition as Record<string, unknown>;\n return (\n hasExactKeys(item, [\"findingId\", \"disposition\", \"reason\"]) &&\n isSafeId(item.findingId) &&\n [\"addressed\", \"rejected\", \"deferred\"].includes(\n item.disposition as string,\n ) &&\n isSafeOrchestrationText(item.reason)\n );\n })\n );\n}\n\nfunction isReversibleResolution(value: unknown): boolean {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const item = value as Record<string, unknown>;\n return (\n hasExactKeys(item, [\n \"alternatives\",\n \"comparator\",\n \"selected\",\n \"reversibility\",\n ]) &&\n isSafeTextList(item.alternatives, 8) &&\n isSafeOrchestrationText(item.comparator) &&\n isSafeOrchestrationText(item.selected) &&\n isSafeOrchestrationText(item.reversibility)\n );\n}\n\nfunction isCheckpointBundle(value: unknown): boolean {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const item = value as Record<string, unknown>;\n return (\n hasExactKeys(item, [\n \"requestSummary\",\n \"requestRef\",\n \"acceptedPlanArtifactId\",\n \"contentRef\",\n \"contentHash\",\n \"testOutput\",\n \"driverSummary\",\n \"openRisks\",\n \"unresolvedFindingIds\",\n ]) &&\n isSafeOrchestrationText(item.requestSummary) &&\n (item.requestRef === undefined || isSafeId(item.requestRef)) &&\n isSafeId(item.acceptedPlanArtifactId) &&\n typeof item.contentRef === \"string\" &&\n /^(?!\\/)(?!.*\\.\\.)[A-Za-z0-9._/@:-]{1,512}$/.test(item.contentRef) &&\n typeof item.contentHash === \"string\" &&\n SAFE_CONTENT_HASH.test(item.contentHash) &&\n isSafeOrchestrationText(item.testOutput) &&\n isSafeOrchestrationText(item.driverSummary) &&\n isSafeTextList(item.openRisks, 40) &&\n isSafeIdArray(item.unresolvedFindingIds, 40)\n );\n}\n\nfunction isCompletionTests(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length <= 40 &&\n value.every((test) => {\n if (!test || typeof test !== \"object\" || Array.isArray(test))\n return false;\n const item = test as Record<string, unknown>;\n return (\n hasExactKeys(item, [\"name\", \"status\", \"evidence\"]) &&\n isSafeOrchestrationText(item.name) &&\n [\"passed\", \"failed\", \"skipped\"].includes(item.status as string) &&\n isSafeOrchestrationText(item.evidence)\n );\n })\n );\n}\n\nfunction isSafeTextList(value: unknown, max: number): boolean {\n return (\n Array.isArray(value) &&\n value.length <= max &&\n value.every((item) => isSafeOrchestrationText(item))\n );\n}\n\nfunction metadataKeysForOrchestrationKind(\n kind: NonNullable<MultiFrontierOrchestrationArtifact[\"kind\"]>,\n): string[] {\n if (kind === \"synthesis\") {\n return [\"agreed\", \"deterministicallyResolved\", \"reversibleResolution\"];\n }\n if (kind === \"checkpoint\") return [\"bundle\"];\n if (kind === \"cross_review\" || kind === \"watchdog_review\") {\n return [\"findings\"];\n }\n if (kind === \"finding_disposition\") return [\"dispositions\"];\n if (kind === \"completion\") return [\"tests\", \"proofRefs\", \"remainingRisks\"];\n return [];\n}\n\nfunction containsUnsafeOrchestrationValue(\n value: unknown,\n depth: number,\n): boolean {\n if (depth > 8) return true;\n if (typeof value === \"string\") return !isSafeOrchestrationText(value);\n if (\n value === null ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n ) {\n return false;\n }\n if (Array.isArray(value)) {\n return (\n value.length > 40 ||\n value.some((item) => containsUnsafeOrchestrationValue(item, depth + 1))\n );\n }\n if (!value || typeof value !== \"object\") return true;\n const entries = Object.entries(value);\n return (\n entries.length > 40 ||\n entries.some(\n ([key, item]) =>\n !isBoundedText(key, 160) ||\n /(token|secret|authorization|credential|password|email|organization|account)/i.test(\n key,\n ) ||\n containsUnsafeOrchestrationValue(item, depth + 1),\n )\n );\n}\n\nfunction cloneOrchestrationArtifact(\n artifact: MultiFrontierOrchestrationArtifact,\n): MultiFrontierOrchestrationArtifact {\n return JSON.parse(\n JSON.stringify(artifact),\n ) as MultiFrontierOrchestrationArtifact;\n}\n\nfunction isBoundedText(value: unknown, maxBytes: number): value is string {\n return (\n typeof value === \"string\" &&\n value.trim().length > 0 &&\n Buffer.byteLength(value, \"utf-8\") <= maxBytes\n );\n}\n\nfunction assertBoundedText(\n value: unknown,\n maxBytes: number,\n label: string,\n): void {\n if (!isBoundedText(value, maxBytes)) {\n throw new Error(`Invalid multi-frontier ${label}.`);\n }\n}\n\nfunction assertRetentionLimits(\n limits: MultiFrontierParticipantEventRetentionLimits,\n): void {\n if (\n !isNonNegativeInteger(limits.maxEventCount) ||\n limits.maxEventCount < 1 ||\n !isNonNegativeInteger(limits.maxBytes) ||\n limits.maxBytes < 512\n ) {\n throw new Error(\n \"Invalid multi-frontier participant event retention limits.\",\n );\n }\n}\n\nfunction eventLineByteLength(\n event: PersistedMultiFrontierParticipantEvent,\n): number {\n return Buffer.byteLength(`${JSON.stringify(event)}\\n`, \"utf-8\");\n}\n\nfunction isSafeId(value: unknown): value is string {\n return typeof value === \"string\" && SAFE_ID.test(value);\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 0;\n}\n\nfunction assertParticipants(\n participants: MultiFrontierParticipantState[],\n): void {\n if (participants.length === 0) {\n throw new Error(\"A multi-frontier run needs at least one participant.\");\n }\n const participantIds = new Set<string>();\n for (const participant of participants) {\n if (!isParticipant(participant))\n throw new Error(\"Invalid multi-frontier participant.\");\n assertSafeId(participant.participantId, \"participant id\");\n if (participantIds.has(participant.participantId)) {\n throw new Error(\n `Duplicate multi-frontier participant id: ${participant.participantId}`,\n );\n }\n participantIds.add(participant.participantId);\n }\n}\n\nfunction isParticipant(value: unknown): value is MultiFrontierParticipantState {\n if (!value || typeof value !== \"object\") return false;\n const participant = value as Partial<MultiFrontierParticipantState>;\n return (\n typeof participant.participantId === \"string\" &&\n SAFE_ID.test(participant.participantId) &&\n typeof participant.provider === \"string\" &&\n participant.provider.length > 0 &&\n typeof participant.runtime === \"string\" &&\n participant.runtime.length > 0 &&\n (participant.model === undefined ||\n typeof participant.model === \"string\") &&\n (participant.capabilities === undefined ||\n isStringArray(participant.capabilities)) &&\n (participant.sessionRef === undefined ||\n typeof participant.sessionRef === \"string\") &&\n (participant.role === \"driver\" || participant.role === \"watchdog\") &&\n isPermission(participant.permission) &&\n isParticipantStatus(participant.status)\n );\n}\n\nfunction areStoredParticipantsValid(\n value: unknown,\n): value is MultiFrontierParticipantState[] {\n if (\n !Array.isArray(value) ||\n value.length === 0 ||\n !value.every(isParticipant)\n ) {\n return false;\n }\n return (\n new Set(value.map((participant) => participant.participantId)).size ===\n value.length\n );\n}\n\nfunction isStoredRunParticipantsAndDriverValid(\n participants: unknown,\n driver: unknown,\n): participants is MultiFrontierParticipantState[] {\n if (!areStoredParticipantsValid(participants) || !isDriver(driver)) {\n return false;\n }\n if (driver?.leaseState !== \"active\") {\n return participants.every(\n (participant) => participant.permission === \"read_only\",\n );\n }\n if (\n !participants.some(\n (participant) => participant.participantId === driver.participantId,\n )\n ) {\n return false;\n }\n return participants.every((participant) => {\n if (participant.participantId !== driver.participantId) {\n return (\n participant.role === \"watchdog\" &&\n participant.permission === \"read_only\"\n );\n }\n return (\n participant.role === \"driver\" &&\n participant.permission === \"workspace_write\"\n );\n });\n}\n\nfunction isDriver(value: unknown): value is MultiFrontierDriverLease | null {\n if (value === null) return true;\n if (!value || typeof value !== \"object\") return false;\n const driver = value as Partial<MultiFrontierDriverLease>;\n return (\n typeof driver.participantId === \"string\" &&\n typeof driver.generation === \"number\" &&\n (driver.leaseState === \"inactive\" ||\n driver.leaseState === \"active\" ||\n driver.leaseState === \"revoked\")\n );\n}\n\nfunction isApproval(value: unknown): value is MultiFrontierApproval {\n if (!value || typeof value !== \"object\") return false;\n const approval = value as Partial<MultiFrontierApproval>;\n return (\n (approval.state === \"not_required\" ||\n approval.state === \"pending\" ||\n approval.state === \"approved\" ||\n approval.state === \"rejected\") &&\n (approval.proposalId === undefined ||\n typeof approval.proposalId === \"string\") &&\n (approval.reviewPacketId === undefined ||\n typeof approval.reviewPacketId === \"string\")\n );\n}\n\nfunction isRecovery(value: unknown): value is MultiFrontierRecovery {\n if (!value || typeof value !== \"object\") return false;\n const recovery = value as Partial<MultiFrontierRecovery>;\n return (\n isRecoveryReason(recovery.reason) &&\n typeof recovery.recoveredAt === \"string\" &&\n !Number.isNaN(Date.parse(recovery.recoveredAt)) &&\n isPhase(recovery.resumablePhase) &&\n (recovery.checkpointId === undefined ||\n typeof recovery.checkpointId === \"string\")\n );\n}\n\nfunction isPhase(value: unknown): value is MultiFrontierPhase {\n return (\n typeof value === \"string\" &&\n [\n \"proposing\",\n \"cross_review\",\n \"converging\",\n \"awaiting_go\",\n \"implementing\",\n \"checkpoint_review\",\n \"paused\",\n \"completed\",\n \"failed\",\n \"canceled\",\n ].includes(value)\n );\n}\n\nfunction isParticipantStatus(\n value: unknown,\n): value is MultiFrontierParticipantStatus {\n return (\n value === \"idle\" ||\n value === \"running\" ||\n value === \"waiting\" ||\n value === \"failed\" ||\n value === \"completed\"\n );\n}\n\nfunction isPermission(\n value: unknown,\n): value is MultiFrontierParticipantPermission {\n return value === \"read_only\" || value === \"workspace_write\";\n}\n\nfunction isMatchingParticipantEvent(\n existing: PersistedMultiFrontierParticipantEvent,\n input: AppendMultiFrontierParticipantEventInput,\n): boolean {\n return (\n existing.collaborationId === input.collaborationId &&\n existing.participantId === input.participantId &&\n existing.permission === input.permission &&\n existing.generation === input.generation &&\n existing.status === input.status &&\n (input.createdAt === undefined || existing.createdAt === input.createdAt)\n );\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return (\n Array.isArray(value) && value.every((item) => typeof item === \"string\")\n );\n}\n\nfunction isRecoveryReason(\n value: unknown,\n): value is MultiFrontierRecoveryReason {\n return (\n value === \"main_process_restarted\" ||\n value === \"driver_crashed\" ||\n value === \"watchdog_crashed\" ||\n value === \"app_quit\" ||\n value === \"canceled\"\n );\n}\n\nfunction assertSafeId(value: string, label: string): void {\n if (!SAFE_ID.test(value)) throw new Error(`Invalid multi-frontier ${label}.`);\n}\n\nfunction assertTimestamp(value: string, label: string): void {\n if (Number.isNaN(Date.parse(value))) {\n throw new Error(`Invalid multi-frontier ${label}.`);\n }\n}\n"]}
1
+ {"version":3,"file":"multi-frontier-runs.js","sourceRoot":"","sources":["../../src/cli/multi-frontier-runs.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n appendUniqueJsonLineAtomically,\n withFileLockSync,\n writeJsonFileAtomically,\n writeTextFileAtomically,\n} from \"./atomic-json-file.js\";\nimport { codeAgentStoreRoot } from \"./code-agent-runs.js\";\n\nexport type MultiFrontierPhase =\n | \"proposing\"\n | \"cross_review\"\n | \"converging\"\n | \"awaiting_go\"\n | \"implementing\"\n | \"checkpoint_review\"\n | \"paused\"\n | \"completed\"\n | \"failed\"\n | \"canceled\";\n\nexport type MultiFrontierParticipantRole = \"driver\" | \"watchdog\";\nexport type MultiFrontierParticipantPermission =\n | \"read_only\"\n | \"workspace_write\";\nexport type MultiFrontierParticipantStatus =\n | \"idle\"\n | \"running\"\n | \"waiting\"\n | \"failed\"\n | \"completed\";\nexport type MultiFrontierApprovalState =\n | \"not_required\"\n | \"pending\"\n | \"approved\"\n | \"rejected\";\nexport type MultiFrontierRecoveryReason =\n | \"main_process_restarted\"\n | \"driver_crashed\"\n | \"watchdog_crashed\"\n | \"app_quit\"\n | \"canceled\";\n\nexport interface MultiFrontierParticipantState {\n participantId: string;\n provider: string;\n runtime: string;\n model?: string;\n capabilities?: string[];\n sessionRef?: string;\n role: MultiFrontierParticipantRole;\n permission: MultiFrontierParticipantPermission;\n status: MultiFrontierParticipantStatus;\n}\n\nexport interface MultiFrontierDriverLease {\n participantId: string;\n generation: number;\n leaseState: \"inactive\" | \"active\" | \"revoked\";\n}\n\nexport interface MultiFrontierApproval {\n state: MultiFrontierApprovalState;\n proposalId?: string;\n reviewPacketId?: string;\n}\n\nexport interface MultiFrontierRecovery {\n reason: MultiFrontierRecoveryReason;\n recoveredAt: string;\n resumablePhase: MultiFrontierPhase;\n checkpointId?: string;\n}\n\n/**\n * The durable state contract shared by the main process and every participant.\n * Only the main-process coordinator writes it through this module.\n */\nexport interface MultiFrontierRunState {\n schemaVersion: 1;\n collaborationId: string;\n /** Opaque local workspace handle; never a filesystem path. */\n workspaceId?: string;\n phase: MultiFrontierPhase;\n participants: MultiFrontierParticipantState[];\n driver: MultiFrontierDriverLease | null;\n approval: MultiFrontierApproval;\n checkpointIds: string[];\n round: number;\n proposalIds: string[];\n reviewIds: string[];\n /** Opt-in policy; explicit GO remains the durable default. */\n autoContinueAfterAgreement: boolean;\n recovery?: MultiFrontierRecovery;\n}\n\nexport interface CreateMultiFrontierRunInput {\n collaborationId: string;\n workspaceId?: string;\n phase?: MultiFrontierPhase;\n participants: MultiFrontierParticipantState[];\n approval?: MultiFrontierApproval;\n checkpointIds?: string[];\n autoContinueAfterAgreement?: boolean;\n}\n\nexport interface RecoverMultiFrontierRunInput {\n now: string;\n reason: MultiFrontierRecoveryReason;\n}\n\nexport interface MultiFrontierParticipantEvent {\n participantId: string;\n generation?: number;\n permission: MultiFrontierParticipantPermission;\n}\n\nexport interface PersistedMultiFrontierParticipantEvent extends MultiFrontierParticipantEvent {\n schemaVersion: 1;\n id: string;\n collaborationId: string;\n createdAt: string;\n status?: MultiFrontierParticipantStatus;\n}\n\nexport type MultiFrontierArtifactKind = \"proposal\" | \"review\" | \"checkpoint\";\n\nexport interface MultiFrontierArtifactTestSummary {\n name: string;\n status: \"passed\" | \"failed\" | \"skipped\";\n summary?: string;\n}\n\n/** A bounded, redacted projection used only for Desktop orchestrator recovery. */\nexport interface MultiFrontierOrchestrationArtifact {\n id: string;\n kind:\n | \"proposal\"\n | \"cross_review\"\n | \"revision\"\n | \"synthesis\"\n | \"checkpoint\"\n | \"watchdog_review\"\n | \"finding_disposition\"\n | \"completion\";\n round: number;\n participantId?: string;\n text: string;\n attribution: { participantIds: string[]; sourceArtifactIds: string[] };\n supersedesArtifactId?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * A deliberately narrow coordination record. Full diffs, transcripts, and\n * provider payloads stay in their owning runtime rather than this durable\n * cross-provider index.\n */\nexport interface PersistedMultiFrontierArtifact {\n schemaVersion: 1;\n id: string;\n collaborationId: string;\n kind: MultiFrontierArtifactKind;\n createdAt: string;\n participantId?: string;\n title: string;\n summary: string;\n supersedesArtifactId?: string;\n contentHash?: string;\n fileRefs?: string[];\n testSummary?: MultiFrontierArtifactTestSummary[];\n orchestration?: MultiFrontierOrchestrationArtifact;\n}\n\nexport interface AppendMultiFrontierArtifactInput {\n id: string;\n collaborationId: string;\n kind: MultiFrontierArtifactKind;\n createdAt?: string;\n participantId?: string;\n title: string;\n summary: string;\n supersedesArtifactId?: string;\n contentHash?: string;\n fileRefs?: string[];\n testSummary?: MultiFrontierArtifactTestSummary[];\n orchestration?: MultiFrontierOrchestrationArtifact;\n}\n\nexport interface MultiFrontierParticipantEventRetention {\n schemaVersion: 1;\n retainedEventCount: number;\n retainedByteCount: number;\n droppedEventCount: number;\n droppedByteCount: number;\n truncated: boolean;\n replay: {\n requiresSnapshot: boolean;\n firstRetainedEventId?: string;\n };\n}\n\nexport interface MultiFrontierParticipantEventRetentionLimits {\n maxEventCount: number;\n maxBytes: number;\n}\n\nexport interface AppendMultiFrontierParticipantEventInput extends MultiFrontierParticipantEvent {\n id: string;\n collaborationId: string;\n createdAt?: string;\n status?: MultiFrontierParticipantStatus;\n}\n\nexport interface MultiFrontierStoredRun extends MultiFrontierRunState {\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * The desktop main-process coordinator is the sole caller of this transition\n * boundary. Its callback receives a detached snapshot, never renderer input.\n */\nexport type MultiFrontierCoordinatorTransition = (\n current: MultiFrontierStoredRun,\n) => MultiFrontierRunState | MultiFrontierStoredRun | null;\n\nexport type AppendMultiFrontierParticipantEventResult =\n | {\n accepted: true;\n deduplicated: boolean;\n event: PersistedMultiFrontierParticipantEvent;\n run: MultiFrontierStoredRun;\n }\n | {\n accepted: false;\n reason:\n | \"missing-run\"\n | \"stale-driver\"\n | \"missing-participant\"\n | \"event-conflict\"\n | \"terminal-participant\";\n run: MultiFrontierStoredRun | null;\n };\n\nexport type AppendMultiFrontierArtifactResult =\n | {\n accepted: true;\n deduplicated: boolean;\n artifact: PersistedMultiFrontierArtifact;\n run: MultiFrontierStoredRun;\n }\n | {\n accepted: false;\n reason:\n | \"missing-run\"\n | \"artifact-conflict\"\n | \"missing-participant\"\n | \"missing-superseded-artifact\"\n | \"artifact-limit-reached\";\n run: MultiFrontierStoredRun | null;\n };\n\nconst TERMINAL_PHASES = new Set<MultiFrontierPhase>([\n \"completed\",\n \"failed\",\n \"canceled\",\n]);\nconst SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,191}$/;\nconst SAFE_CONTENT_HASH = /^[a-f0-9]{64}$/;\nconst SAFE_FILE_REF = /^(?!\\/)(?!.*(?:^|\\/)\\.\\.(?:\\/|$))[A-Za-z0-9._/@+-]+$/;\nconst MAX_ARTIFACT_TITLE_BYTES = 280;\nconst MAX_ARTIFACT_SUMMARY_BYTES = 8 * 1024;\nconst MAX_ARTIFACT_FILE_REFS = 40;\nconst MAX_ARTIFACT_TEST_SUMMARIES = 40;\nconst MAX_ARTIFACT_TEST_NAME_BYTES = 280;\nconst MAX_ARTIFACT_TEST_SUMMARY_BYTES = 2 * 1024;\nexport const MAX_MULTI_FRONTIER_ARTIFACTS_PER_RUN = 200;\nexport const DEFAULT_MULTI_FRONTIER_PARTICIPANT_EVENT_RETENTION: MultiFrontierParticipantEventRetentionLimits =\n {\n maxEventCount: 2_000,\n maxBytes: 1_000_000,\n };\n\n/** All multi-frontier state stays alongside the existing local Code store. */\nexport function multiFrontierRunsStoreRoot(): string {\n return path.join(codeAgentStoreRoot(), \"multi-frontier\");\n}\n\nexport function multiFrontierRunsDir(): string {\n return path.join(multiFrontierRunsStoreRoot(), \"runs\");\n}\n\nexport function multiFrontierParticipantEventsDir(): string {\n return path.join(multiFrontierRunsStoreRoot(), \"events\");\n}\n\nexport function multiFrontierArtifactsDir(): string {\n return path.join(multiFrontierRunsStoreRoot(), \"artifacts\");\n}\n\nexport function createMultiFrontierRun(\n input: CreateMultiFrontierRunInput,\n): MultiFrontierStoredRun {\n assertSafeId(input.collaborationId, \"collaboration id\");\n if (input.workspaceId !== undefined) {\n assertSafeId(input.workspaceId, \"workspace id\");\n }\n assertParticipants(input.participants);\n if (getMultiFrontierRun(input.collaborationId)) {\n throw new Error(\n `Multi-frontier run already exists: ${input.collaborationId}`,\n );\n }\n const now = new Date().toISOString();\n const state: MultiFrontierStoredRun = {\n schemaVersion: 1,\n collaborationId: input.collaborationId,\n ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),\n phase: input.phase ?? \"proposing\",\n participants: input.participants.map((participant) => ({\n ...participant,\n capabilities: [...(participant.capabilities ?? [])],\n role: \"watchdog\",\n permission: \"read_only\",\n })),\n driver: null,\n approval: { ...(input.approval ?? { state: \"not_required\" }) },\n checkpointIds: [...(input.checkpointIds ?? [])],\n round: 1,\n proposalIds: [],\n reviewIds: [],\n autoContinueAfterAgreement: input.autoContinueAfterAgreement ?? false,\n createdAt: now,\n updatedAt: now,\n };\n writeNewMultiFrontierRun(state);\n return state;\n}\n\nexport function getMultiFrontierRun(\n collaborationId: string,\n): MultiFrontierStoredRun | null {\n if (!SAFE_ID.test(collaborationId)) return null;\n return readStoredRun(multiFrontierRunPath(collaborationId));\n}\n\nexport function listMultiFrontierRuns(): MultiFrontierStoredRun[] {\n const directory = multiFrontierRunsDir();\n if (!fs.existsSync(directory)) return [];\n return fs\n .readdirSync(directory)\n .filter((file) => file.endsWith(\".json\"))\n .map((file) => readStoredRun(path.join(directory, file)))\n .filter((run): run is MultiFrontierStoredRun => run !== null)\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));\n}\n\n/**\n * Recovery never resumes a native participant automatically. Any in-flight\n * driver lease is revoked and requires an explicit, newly fenced activation.\n */\nexport function recoverMultiFrontierRun(\n state: MultiFrontierRunState,\n input: RecoverMultiFrontierRunInput,\n): MultiFrontierRunState {\n assertTimestamp(input.now, \"recovery time\");\n if (TERMINAL_PHASES.has(state.phase) || state.phase === \"paused\") {\n return state;\n }\n\n const checkpointId = state.checkpointIds.at(-1);\n return {\n ...state,\n phase: \"paused\",\n participants: state.participants.map((participant) => ({\n ...participant,\n role: \"watchdog\",\n permission: \"read_only\",\n status: participant.status === \"running\" ? \"waiting\" : participant.status,\n })),\n driver: state.driver ? { ...state.driver, leaseState: \"revoked\" } : null,\n recovery: {\n reason: input.reason,\n recoveredAt: input.now,\n resumablePhase: state.phase,\n ...(checkpointId ? { checkpointId } : {}),\n },\n };\n}\n\n/** Persist the recovery decision made by the main-process coordinator. */\nexport function recoverStoredMultiFrontierRun(\n collaborationId: string,\n input: RecoverMultiFrontierRunInput,\n): MultiFrontierStoredRun | null {\n return mutateStoredMultiFrontierRun(collaborationId, input.now, (current) => {\n const recovered = recoverMultiFrontierRun(current, input);\n return recovered === current ? current : recovered;\n });\n}\n\n/**\n * Applies one durable coordinator-owned state transition under the run lock.\n * A state-shaped result retains proposal and review references by default;\n * returning a full stored record is the explicit escape hatch for a\n * coordinator operation that intentionally changes those references.\n */\nexport function transitionStoredMultiFrontierRun(\n collaborationId: string,\n updatedAt: string,\n transition: MultiFrontierCoordinatorTransition,\n): MultiFrontierStoredRun | null {\n assertSafeId(collaborationId, \"collaboration id\");\n assertTimestamp(updatedAt, \"transition time\");\n if (typeof transition !== \"function\") {\n throw new Error(\"Invalid multi-frontier coordinator transition.\");\n }\n\n return mutateStoredMultiFrontierRun(collaborationId, updatedAt, (current) => {\n const candidate = transition(cloneStoredMultiFrontierRun(current));\n if (candidate === null) return null;\n if (isThenable(candidate)) {\n throw new Error(\n \"Multi-frontier coordinator transitions must be synchronous.\",\n );\n }\n if (\n !candidate ||\n typeof candidate !== \"object\" ||\n Array.isArray(candidate)\n ) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n\n const isFullStoredRun = hasStoredRunTimestamps(candidate);\n if (\n !isFullStoredRun &&\n (Object.prototype.hasOwnProperty.call(candidate, \"createdAt\") ||\n Object.prototype.hasOwnProperty.call(candidate, \"updatedAt\"))\n ) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n if (\n candidate.schemaVersion !== current.schemaVersion ||\n candidate.collaborationId !== current.collaborationId\n ) {\n throw new Error(\n \"Multi-frontier coordinator transitions cannot change run identity.\",\n );\n }\n if (isFullStoredRun) {\n if (!isCompleteMultiFrontierStoredRun(candidate)) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n if (candidate.createdAt !== current.createdAt) {\n throw new Error(\n \"Multi-frontier coordinator transitions cannot change creation time.\",\n );\n }\n }\n\n const nextState: MultiFrontierRunState = {\n ...candidate,\n ...(isFullStoredRun\n ? {}\n : {\n proposalIds: [...current.proposalIds],\n reviewIds: [...current.reviewIds],\n }),\n };\n if (!isCompleteMultiFrontierRunState(nextState)) {\n throw new Error(\"Invalid multi-frontier coordinator transition state.\");\n }\n return nextState;\n });\n}\n\n/**\n * Coordinators must call this before applying a participant event. Write\n * events are accepted only from the active driver generation.\n */\nexport function canApplyMultiFrontierParticipantEvent(\n state: MultiFrontierRunState,\n event: MultiFrontierParticipantEvent,\n): boolean {\n if (TERMINAL_PHASES.has(state.phase) || state.phase === \"paused\") {\n return false;\n }\n if (\n !state.participants.some(\n (candidate) => candidate.participantId === event.participantId,\n )\n ) {\n return false;\n }\n if (event.permission === \"read_only\") return true;\n const driver = state.driver;\n return Boolean(\n state.phase === \"implementing\" &&\n driver?.leaseState === \"active\" &&\n driver.participantId === event.participantId &&\n driver.generation === event.generation,\n );\n}\n\n/**\n * Explicitly restores a write lease after recovery. The generation increments\n * so an event from the interrupted process can never regain write authority.\n */\nexport function reactivateMultiFrontierDriver(\n state: MultiFrontierRunState,\n participantId: string,\n): MultiFrontierRunState | null {\n if (\n state.phase !== \"paused\" ||\n !state.recovery ||\n state.recovery.resumablePhase !== \"implementing\" ||\n state.approval.state === \"pending\"\n ) {\n return null;\n }\n const participant = state.participants.find(\n (candidate) => candidate.participantId === participantId,\n );\n if (!participant || participant.status === \"failed\") return null;\n\n const nextGeneration = (state.driver?.generation ?? 0) + 1;\n return {\n ...state,\n phase: state.recovery.resumablePhase,\n participants: state.participants.map((candidate) => ({\n ...candidate,\n role: candidate.participantId === participantId ? \"driver\" : \"watchdog\",\n permission:\n candidate.participantId === participantId\n ? \"workspace_write\"\n : \"read_only\",\n status:\n candidate.participantId === participantId\n ? \"waiting\"\n : candidate.status,\n })),\n driver: {\n participantId,\n generation: nextGeneration,\n leaseState: \"active\",\n },\n recovery: undefined,\n };\n}\n\n/** Assign the first explicit write lease for an implementing run. */\nexport function activateMultiFrontierDriver(\n state: MultiFrontierRunState,\n participantId: string,\n): MultiFrontierRunState | null {\n if (\n state.phase !== \"implementing\" ||\n state.approval.state === \"pending\" ||\n state.driver?.leaseState === \"active\"\n ) {\n return null;\n }\n const participant = state.participants.find(\n (candidate) => candidate.participantId === participantId,\n );\n if (!participant || participant.status === \"failed\") return null;\n\n return {\n ...state,\n participants: state.participants.map((candidate) => ({\n ...candidate,\n role: candidate.participantId === participantId ? \"driver\" : \"watchdog\",\n permission:\n candidate.participantId === participantId\n ? \"workspace_write\"\n : \"read_only\",\n })),\n driver: {\n participantId,\n generation: (state.driver?.generation ?? 0) + 1,\n leaseState: \"active\",\n },\n };\n}\n\n/** Persist the first explicit driver activation from the main-process coordinator. */\nexport function activateStoredMultiFrontierDriver(\n collaborationId: string,\n participantId: string,\n now = new Date().toISOString(),\n): MultiFrontierStoredRun | null {\n assertTimestamp(now, \"activation time\");\n return mutateStoredMultiFrontierRun(collaborationId, now, (current) =>\n activateMultiFrontierDriver(current, participantId),\n );\n}\n\n/** Persist an explicit driver reactivation after the human-approved resume. */\nexport function reactivateStoredMultiFrontierDriver(\n collaborationId: string,\n participantId: string,\n now = new Date().toISOString(),\n): MultiFrontierStoredRun | null {\n assertTimestamp(now, \"reactivation time\");\n return mutateStoredMultiFrontierRun(collaborationId, now, (current) =>\n reactivateMultiFrontierDriver(current, participantId),\n );\n}\n\n/**\n * Appends an idempotent participant event after the coordinator has fenced it.\n * The event journal is diagnostic; state is mutated only through this guarded\n * coordinator entry point.\n */\nexport function appendMultiFrontierParticipantEvent(\n input: AppendMultiFrontierParticipantEventInput,\n): AppendMultiFrontierParticipantEventResult {\n assertSafeId(input.id, \"event id\");\n assertSafeId(input.collaborationId, \"collaboration id\");\n assertSafeId(input.participantId, \"participant id\");\n const createdAt = input.createdAt ?? new Date().toISOString();\n assertTimestamp(createdAt, \"event time\");\n\n const runPath = multiFrontierRunPath(input.collaborationId);\n return withFileLockSync(runPath, () => {\n const current = readStoredRun(runPath);\n if (!current) return { accepted: false, reason: \"missing-run\", run: null };\n const existing = listMultiFrontierParticipantEvents(\n input.collaborationId,\n ).find((event) => event.id === input.id);\n if (existing) {\n if (!isMatchingParticipantEvent(existing, input)) {\n return { accepted: false, reason: \"event-conflict\", run: current };\n }\n return {\n accepted: true,\n deduplicated: true,\n event: existing,\n run: current,\n };\n }\n if (\n !current.participants.some(\n (candidate) => candidate.participantId === input.participantId,\n )\n ) {\n return { accepted: false, reason: \"missing-participant\", run: current };\n }\n if (!canApplyMultiFrontierParticipantEvent(current, input)) {\n return { accepted: false, reason: \"stale-driver\", run: current };\n }\n const participant = current.participants.find(\n (candidate) => candidate.participantId === input.participantId,\n );\n if (\n input.status !== undefined &&\n (participant?.status === \"completed\" ||\n participant?.status === \"failed\") &&\n input.status !== participant.status\n ) {\n return { accepted: false, reason: \"terminal-participant\", run: current };\n }\n\n const event: PersistedMultiFrontierParticipantEvent = {\n schemaVersion: 1,\n id: input.id,\n collaborationId: input.collaborationId,\n participantId: input.participantId,\n permission: input.permission,\n createdAt,\n ...(input.generation === undefined\n ? {}\n : { generation: input.generation }),\n ...(input.status === undefined ? {} : { status: input.status }),\n };\n appendParticipantEvent(event);\n compactParticipantEventJournal(input.collaborationId);\n const status = input.status;\n const participants = status\n ? current.participants.map((candidate) =>\n candidate.participantId === input.participantId\n ? { ...candidate, status }\n : candidate,\n )\n : current.participants;\n const run = writeNextStoredRun(\n current,\n { ...current, participants },\n createdAt,\n );\n return { accepted: true, deduplicated: false, event, run };\n });\n}\n\n/**\n * Appends a bounded proposal, review, or checkpoint index record. The\n * coordinator owns both the artifact and its run-state reference under one\n * run lock, so a reader never observes a durable reference without its record.\n */\nexport function appendMultiFrontierArtifact(\n input: AppendMultiFrontierArtifactInput,\n): AppendMultiFrontierArtifactResult {\n assertArtifactInput(input);\n const createdAt = input.createdAt ?? new Date().toISOString();\n assertTimestamp(createdAt, \"artifact time\");\n const artifact = toPersistedArtifact(input, createdAt);\n const runPath = multiFrontierRunPath(input.collaborationId);\n return withFileLockSync(runPath, () => {\n const current = readStoredRun(runPath);\n if (!current) return { accepted: false, reason: \"missing-run\", run: null };\n if (\n input.participantId !== undefined &&\n !current.participants.some(\n (participant) => participant.participantId === input.participantId,\n )\n ) {\n return { accepted: false, reason: \"missing-participant\", run: current };\n }\n if (\n input.supersedesArtifactId !== undefined &&\n !readStoredArtifact(\n multiFrontierArtifactPath(\n input.collaborationId,\n input.supersedesArtifactId,\n ),\n )\n ) {\n return {\n accepted: false,\n reason: \"missing-superseded-artifact\",\n run: current,\n };\n }\n\n const artifactPath = multiFrontierArtifactPath(\n input.collaborationId,\n input.id,\n );\n const existing = readStoredArtifact(artifactPath);\n if (existing) {\n if (!isMatchingArtifact(existing, artifact)) {\n return { accepted: false, reason: \"artifact-conflict\", run: current };\n }\n const ids = artifactIdsForKind(current, existing.kind);\n const run = ids.includes(existing.id)\n ? current\n : writeNextStoredRun(\n current,\n withArtifactId(current, existing.kind, existing.id),\n new Date().toISOString(),\n );\n return {\n accepted: true,\n deduplicated: true,\n artifact: existing,\n run,\n };\n }\n if (fs.existsSync(artifactPath)) {\n return { accepted: false, reason: \"artifact-conflict\", run: current };\n }\n if (\n listMultiFrontierArtifacts(input.collaborationId).length >=\n MAX_MULTI_FRONTIER_ARTIFACTS_PER_RUN\n ) {\n return {\n accepted: false,\n reason: \"artifact-limit-reached\",\n run: current,\n };\n }\n\n writeJsonFileAtomically(artifactPath, artifact, { mode: 0o600 });\n const ids = artifactIdsForKind(current, artifact.kind);\n const next = ids.includes(artifact.id)\n ? current\n : withArtifactId(current, artifact.kind, artifact.id);\n const run = writeNextStoredRun(current, next, createdAt);\n return { accepted: true, deduplicated: false, artifact, run };\n });\n}\n\nexport function getMultiFrontierArtifact(\n collaborationId: string,\n artifactId: string,\n): PersistedMultiFrontierArtifact | null {\n if (!SAFE_ID.test(collaborationId) || !SAFE_ID.test(artifactId)) return null;\n return readStoredArtifact(\n multiFrontierArtifactPath(collaborationId, artifactId),\n );\n}\n\nexport function listMultiFrontierArtifacts(\n collaborationId: string,\n): PersistedMultiFrontierArtifact[] {\n if (!SAFE_ID.test(collaborationId)) return [];\n const directory = multiFrontierArtifactsRunDir(collaborationId);\n if (!fs.existsSync(directory)) return [];\n return fs\n .readdirSync(directory)\n .filter((file) => file.endsWith(\".json\"))\n .map((file) => readStoredArtifact(path.join(directory, file)))\n .filter(\n (artifact): artifact is PersistedMultiFrontierArtifact =>\n artifact !== null,\n )\n .sort((left, right) => left.createdAt.localeCompare(right.createdAt));\n}\n\nexport function listMultiFrontierParticipantEvents(\n collaborationId: string,\n): PersistedMultiFrontierParticipantEvent[] {\n if (!SAFE_ID.test(collaborationId)) return [];\n const eventPath = multiFrontierParticipantEventsPath(collaborationId);\n if (!fs.existsSync(eventPath)) return [];\n return fs\n .readFileSync(eventPath, \"utf-8\")\n .split(/\\r?\\n/)\n .filter(Boolean)\n .map(readParticipantEvent)\n .filter(\n (event): event is PersistedMultiFrontierParticipantEvent =>\n event !== null,\n );\n}\n\nexport function getMultiFrontierParticipantEventRetention(\n collaborationId: string,\n): MultiFrontierParticipantEventRetention | null {\n if (!SAFE_ID.test(collaborationId)) return null;\n return readParticipantEventRetention(\n multiFrontierParticipantEventRetentionPath(collaborationId),\n );\n}\n\n/**\n * Coordinator maintenance for a bounded event journal. It deliberately keeps\n * the newest contiguous tail and a replay marker instead of deleting run state.\n */\nexport function compactMultiFrontierParticipantEvents(\n collaborationId: string,\n limits = DEFAULT_MULTI_FRONTIER_PARTICIPANT_EVENT_RETENTION,\n): MultiFrontierParticipantEventRetention | null {\n assertSafeId(collaborationId, \"collaboration id\");\n assertRetentionLimits(limits);\n const runPath = multiFrontierRunPath(collaborationId);\n return withFileLockSync(runPath, () => {\n if (!readStoredRun(runPath)) return null;\n return compactParticipantEventJournal(collaborationId, limits);\n });\n}\n\nfunction writeMultiFrontierRun(run: MultiFrontierStoredRun): void {\n writeJsonFileAtomically(multiFrontierRunPath(run.collaborationId), run);\n}\n\nfunction writeNewMultiFrontierRun(run: MultiFrontierStoredRun): void {\n const filePath = multiFrontierRunPath(run.collaborationId);\n withFileLockSync(filePath, () => {\n if (fs.existsSync(filePath)) {\n throw new Error(\n `Multi-frontier run already exists: ${run.collaborationId}`,\n );\n }\n writeJsonFileAtomically(filePath, run);\n });\n}\n\nfunction writeNextStoredRun(\n current: MultiFrontierStoredRun,\n nextState: MultiFrontierRunState,\n updatedAt: string,\n): MultiFrontierStoredRun {\n const next: MultiFrontierStoredRun = {\n ...nextState,\n createdAt: current.createdAt,\n updatedAt,\n };\n writeMultiFrontierRun(next);\n return next;\n}\n\nfunction appendParticipantEvent(\n event: PersistedMultiFrontierParticipantEvent,\n): void {\n appendUniqueJsonLineAtomically(\n multiFrontierParticipantEventsPath(event.collaborationId),\n event,\n readParticipantEventValue,\n { mode: 0o600 },\n );\n}\n\nfunction compactParticipantEventJournal(\n collaborationId: string,\n limits = DEFAULT_MULTI_FRONTIER_PARTICIPANT_EVENT_RETENTION,\n): MultiFrontierParticipantEventRetention {\n const eventPath = multiFrontierParticipantEventsPath(collaborationId);\n return withFileLockSync(eventPath, () => {\n const previous = readParticipantEventRetention(\n multiFrontierParticipantEventRetentionPath(collaborationId),\n );\n const events = listMultiFrontierParticipantEvents(collaborationId);\n const retained: PersistedMultiFrontierParticipantEvent[] = [];\n let retainedByteCount = 0;\n for (const event of [...events].reverse()) {\n const bytes = eventLineByteLength(event);\n if (\n retained.length >= limits.maxEventCount ||\n retainedByteCount + bytes > limits.maxBytes\n ) {\n break;\n }\n retained.push(event);\n retainedByteCount += bytes;\n }\n retained.reverse();\n const retainedIds = new Set(retained.map((event) => event.id));\n const dropped = events.filter((event) => !retainedIds.has(event.id));\n if (dropped.length > 0) {\n writeTextFileAtomically(\n eventPath,\n retained.map((event) => `${JSON.stringify(event)}\\n`).join(\"\"),\n );\n }\n const retention: MultiFrontierParticipantEventRetention = {\n schemaVersion: 1,\n retainedEventCount: retained.length,\n retainedByteCount,\n droppedEventCount: (previous?.droppedEventCount ?? 0) + dropped.length,\n droppedByteCount:\n (previous?.droppedByteCount ?? 0) +\n dropped.reduce((total, event) => total + eventLineByteLength(event), 0),\n truncated: (previous?.truncated ?? false) || dropped.length > 0,\n replay: {\n requiresSnapshot: (previous?.truncated ?? false) || dropped.length > 0,\n ...(retained[0] ? { firstRetainedEventId: retained[0].id } : {}),\n },\n };\n writeJsonFileAtomically(\n multiFrontierParticipantEventRetentionPath(collaborationId),\n retention,\n { mode: 0o600 },\n );\n return retention;\n });\n}\n\nfunction mutateStoredMultiFrontierRun(\n collaborationId: string,\n updatedAt: string,\n mutate: (current: MultiFrontierStoredRun) => MultiFrontierRunState | null,\n): MultiFrontierStoredRun | null {\n const filePath = multiFrontierRunPath(collaborationId);\n return withFileLockSync(filePath, () => {\n const current = readStoredRun(filePath);\n if (!current) return null;\n const nextState = mutate(current);\n if (!nextState) return null;\n const next: MultiFrontierStoredRun = {\n ...nextState,\n createdAt: current.createdAt,\n updatedAt,\n };\n writeMultiFrontierRun(next);\n return next;\n });\n}\n\nfunction multiFrontierRunPath(collaborationId: string): string {\n return path.join(multiFrontierRunsDir(), `${collaborationId}.json`);\n}\n\nfunction multiFrontierParticipantEventsPath(collaborationId: string): string {\n return path.join(\n multiFrontierParticipantEventsDir(),\n `${collaborationId}.jsonl`,\n );\n}\n\nfunction multiFrontierParticipantEventRetentionPath(\n collaborationId: string,\n): string {\n return path.join(\n multiFrontierParticipantEventsDir(),\n `${collaborationId}.retention.json`,\n );\n}\n\nfunction multiFrontierArtifactsRunDir(collaborationId: string): string {\n return path.join(multiFrontierArtifactsDir(), collaborationId);\n}\n\nfunction multiFrontierArtifactPath(\n collaborationId: string,\n artifactId: string,\n): string {\n return path.join(\n multiFrontierArtifactsRunDir(collaborationId),\n `${artifactId}.json`,\n );\n}\n\nfunction readStoredRun(filePath: string): MultiFrontierStoredRun | null {\n try {\n const raw = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as unknown;\n const normalized = normalizeStoredRunDefaults(raw);\n return isCompleteMultiFrontierStoredRun(normalized) ? normalized : null;\n } catch {\n return null;\n }\n}\n\nfunction isCompleteMultiFrontierStoredRun(\n value: unknown,\n): value is MultiFrontierStoredRun {\n if (!hasStoredRunTimestamps(value)) return false;\n return (\n isCompleteMultiFrontierRunState(value) &&\n !Number.isNaN(Date.parse(value.createdAt)) &&\n !Number.isNaN(Date.parse(value.updatedAt))\n );\n}\n\nfunction isCompleteMultiFrontierRunState(\n value: unknown,\n): value is MultiFrontierRunState {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const run = value as Partial<MultiFrontierRunState>;\n return (\n run.schemaVersion === 1 &&\n typeof run.collaborationId === \"string\" &&\n SAFE_ID.test(run.collaborationId) &&\n (run.workspaceId === undefined ||\n (typeof run.workspaceId === \"string\" && SAFE_ID.test(run.workspaceId))) &&\n isPhase(run.phase) &&\n isStoredRunParticipantsAndDriverValid(run.participants, run.driver) &&\n isApproval(run.approval) &&\n Array.isArray(run.checkpointIds) &&\n run.checkpointIds.every(\n (checkpointId) => typeof checkpointId === \"string\",\n ) &&\n typeof run.round === \"number\" &&\n Number.isInteger(run.round) &&\n run.round >= 1 &&\n isStringArray(run.proposalIds) &&\n isStringArray(run.reviewIds) &&\n typeof run.autoContinueAfterAgreement === \"boolean\" &&\n (run.recovery === undefined || isRecovery(run.recovery))\n );\n}\n\nfunction normalizeStoredRunDefaults(value: unknown): unknown {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return value;\n if (\n !Object.prototype.hasOwnProperty.call(value, \"autoContinueAfterAgreement\")\n ) {\n return { ...value, autoContinueAfterAgreement: false };\n }\n return value;\n}\n\nfunction hasStoredRunTimestamps(\n value: unknown,\n): value is MultiFrontierStoredRun {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const run = value as Partial<MultiFrontierStoredRun>;\n return typeof run.createdAt === \"string\" && typeof run.updatedAt === \"string\";\n}\n\nfunction cloneStoredMultiFrontierRun(\n run: MultiFrontierStoredRun,\n): MultiFrontierStoredRun {\n return JSON.parse(JSON.stringify(run)) as MultiFrontierStoredRun;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return (\n Boolean(value) &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction readParticipantEvent(\n line: string,\n): PersistedMultiFrontierParticipantEvent | null {\n try {\n return readParticipantEventValue(JSON.parse(line) as unknown);\n } catch {\n return null;\n }\n}\n\nfunction readParticipantEventValue(\n raw: unknown,\n): PersistedMultiFrontierParticipantEvent | null {\n try {\n if (!raw || typeof raw !== \"object\") return null;\n const event = raw as Partial<PersistedMultiFrontierParticipantEvent>;\n if (\n event.schemaVersion !== 1 ||\n typeof event.id !== \"string\" ||\n typeof event.collaborationId !== \"string\" ||\n typeof event.participantId !== \"string\" ||\n !isPermission(event.permission) ||\n (event.generation !== undefined &&\n typeof event.generation !== \"number\") ||\n (event.status !== undefined && !isParticipantStatus(event.status)) ||\n typeof event.createdAt !== \"string\" ||\n Number.isNaN(Date.parse(event.createdAt))\n ) {\n return null;\n }\n return event as PersistedMultiFrontierParticipantEvent;\n } catch {\n return null;\n }\n}\n\nfunction readStoredArtifact(\n filePath: string,\n): PersistedMultiFrontierArtifact | null {\n try {\n return readArtifactValue(\n JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as unknown,\n );\n } catch {\n return null;\n }\n}\n\nfunction readArtifactValue(\n raw: unknown,\n): PersistedMultiFrontierArtifact | null {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return null;\n const artifact = raw as Partial<PersistedMultiFrontierArtifact>;\n if (\n artifact.schemaVersion !== 1 ||\n !isSafeId(artifact.id) ||\n !isSafeId(artifact.collaborationId) ||\n !isArtifactKind(artifact.kind) ||\n typeof artifact.createdAt !== \"string\" ||\n Number.isNaN(Date.parse(artifact.createdAt)) ||\n (artifact.participantId !== undefined &&\n !isSafeId(artifact.participantId)) ||\n !isBoundedText(artifact.title, MAX_ARTIFACT_TITLE_BYTES) ||\n !isArtifactSummary(artifact.summary) ||\n (artifact.supersedesArtifactId !== undefined &&\n !isSafeId(artifact.supersedesArtifactId)) ||\n (artifact.contentHash !== undefined &&\n !SAFE_CONTENT_HASH.test(artifact.contentHash)) ||\n !isArtifactFileRefs(artifact.fileRefs) ||\n !isArtifactTestSummaries(artifact.testSummary) ||\n !isOrchestrationArtifact(artifact.orchestration)\n ) {\n return null;\n }\n return artifact as PersistedMultiFrontierArtifact;\n}\n\nfunction readParticipantEventRetention(\n filePath: string,\n): MultiFrontierParticipantEventRetention | null {\n try {\n const raw = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as unknown;\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return null;\n const retention = raw as Partial<MultiFrontierParticipantEventRetention>;\n if (\n retention.schemaVersion !== 1 ||\n !isNonNegativeInteger(retention.retainedEventCount) ||\n !isNonNegativeInteger(retention.retainedByteCount) ||\n !isNonNegativeInteger(retention.droppedEventCount) ||\n !isNonNegativeInteger(retention.droppedByteCount) ||\n typeof retention.truncated !== \"boolean\" ||\n !retention.replay ||\n typeof retention.replay !== \"object\" ||\n typeof retention.replay.requiresSnapshot !== \"boolean\" ||\n (retention.replay.firstRetainedEventId !== undefined &&\n !isSafeId(retention.replay.firstRetainedEventId))\n ) {\n return null;\n }\n return retention as MultiFrontierParticipantEventRetention;\n } catch {\n return null;\n }\n}\n\nfunction assertArtifactInput(input: AppendMultiFrontierArtifactInput): void {\n assertAllowlistedArtifactInput(input);\n assertSafeId(input.id, \"artifact id\");\n assertSafeId(input.collaborationId, \"collaboration id\");\n if (!isArtifactKind(input.kind))\n throw new Error(\"Invalid multi-frontier artifact kind.\");\n if (input.participantId !== undefined) {\n assertSafeId(input.participantId, \"participant id\");\n }\n assertBoundedText(input.title, MAX_ARTIFACT_TITLE_BYTES, \"artifact title\");\n if (!isArtifactSummary(input.summary)) {\n throw new Error(\"Invalid multi-frontier artifact summary.\");\n }\n if (input.supersedesArtifactId !== undefined) {\n assertSafeId(input.supersedesArtifactId, \"superseded artifact id\");\n }\n if (\n input.contentHash !== undefined &&\n !SAFE_CONTENT_HASH.test(input.contentHash)\n ) {\n throw new Error(\"Invalid multi-frontier artifact content hash.\");\n }\n if (!isArtifactFileRefs(input.fileRefs)) {\n throw new Error(\"Invalid multi-frontier artifact file references.\");\n }\n if (!isArtifactTestSummaries(input.testSummary)) {\n throw new Error(\"Invalid multi-frontier artifact test summary.\");\n }\n if (!isOrchestrationArtifact(input.orchestration)) {\n throw new Error(\"Invalid multi-frontier orchestration artifact.\");\n }\n}\n\nfunction assertAllowlistedArtifactInput(\n input: AppendMultiFrontierArtifactInput,\n): void {\n const allowed = new Set([\n \"id\",\n \"collaborationId\",\n \"kind\",\n \"createdAt\",\n \"participantId\",\n \"title\",\n \"summary\",\n \"supersedesArtifactId\",\n \"contentHash\",\n \"fileRefs\",\n \"testSummary\",\n \"orchestration\",\n ]);\n if (\n !input ||\n typeof input !== \"object\" ||\n Array.isArray(input) ||\n Object.keys(input).some((key) => !allowed.has(key))\n ) {\n throw new Error(\n \"Multi-frontier artifacts only accept allowlisted summary fields.\",\n );\n }\n}\n\nfunction toPersistedArtifact(\n input: AppendMultiFrontierArtifactInput,\n createdAt: string,\n): PersistedMultiFrontierArtifact {\n return {\n schemaVersion: 1,\n id: input.id,\n collaborationId: input.collaborationId,\n kind: input.kind,\n createdAt,\n title: input.title,\n summary: input.summary,\n ...(input.participantId === undefined\n ? {}\n : { participantId: input.participantId }),\n ...(input.supersedesArtifactId === undefined\n ? {}\n : { supersedesArtifactId: input.supersedesArtifactId }),\n ...(input.contentHash === undefined\n ? {}\n : { contentHash: input.contentHash }),\n ...(input.fileRefs === undefined ? {} : { fileRefs: [...input.fileRefs] }),\n ...(input.testSummary === undefined\n ? {}\n : {\n testSummary: input.testSummary.map((summary) => ({ ...summary })),\n }),\n ...(input.orchestration === undefined\n ? {}\n : { orchestration: cloneOrchestrationArtifact(input.orchestration) }),\n };\n}\n\nfunction artifactIdsForKind(\n run: MultiFrontierStoredRun,\n kind: MultiFrontierArtifactKind,\n): string[] {\n if (kind === \"proposal\") return run.proposalIds;\n if (kind === \"review\") return run.reviewIds;\n return run.checkpointIds;\n}\n\nfunction withArtifactId(\n run: MultiFrontierStoredRun,\n kind: MultiFrontierArtifactKind,\n artifactId: string,\n): MultiFrontierStoredRun {\n if (kind === \"proposal\") {\n return { ...run, proposalIds: [...run.proposalIds, artifactId] };\n }\n if (kind === \"review\") {\n return { ...run, reviewIds: [...run.reviewIds, artifactId] };\n }\n return { ...run, checkpointIds: [...run.checkpointIds, artifactId] };\n}\n\nfunction isMatchingArtifact(\n existing: PersistedMultiFrontierArtifact,\n candidate: PersistedMultiFrontierArtifact,\n): boolean {\n return JSON.stringify(existing) === JSON.stringify(candidate);\n}\n\nfunction isArtifactKind(value: unknown): value is MultiFrontierArtifactKind {\n return value === \"proposal\" || value === \"review\" || value === \"checkpoint\";\n}\n\nfunction isArtifactSummary(value: unknown): value is string {\n return (\n isBoundedText(value, MAX_ARTIFACT_SUMMARY_BYTES) &&\n !/(?:^|\\n)diff --git\\s|(?:^|\\n)@@\\s+-\\d+/m.test(value)\n );\n}\n\nfunction isArtifactFileRefs(value: unknown): value is string[] | undefined {\n return (\n value === undefined ||\n (Array.isArray(value) &&\n value.length <= MAX_ARTIFACT_FILE_REFS &&\n value.every(\n (fileRef) =>\n typeof fileRef === \"string\" &&\n Buffer.byteLength(fileRef, \"utf-8\") <= 512 &&\n SAFE_FILE_REF.test(fileRef),\n ))\n );\n}\n\nfunction isArtifactTestSummaries(\n value: unknown,\n): value is MultiFrontierArtifactTestSummary[] | undefined {\n return (\n value === undefined ||\n (Array.isArray(value) &&\n value.length <= MAX_ARTIFACT_TEST_SUMMARIES &&\n value.every(\n (summary) =>\n Boolean(summary) &&\n typeof summary === \"object\" &&\n isBoundedText(\n (summary as MultiFrontierArtifactTestSummary).name,\n MAX_ARTIFACT_TEST_NAME_BYTES,\n ) &&\n [\"passed\", \"failed\", \"skipped\"].includes(\n (summary as MultiFrontierArtifactTestSummary).status,\n ) &&\n ((summary as MultiFrontierArtifactTestSummary).summary ===\n undefined ||\n isBoundedText(\n (summary as MultiFrontierArtifactTestSummary).summary,\n MAX_ARTIFACT_TEST_SUMMARY_BYTES,\n )),\n ))\n );\n}\n\nfunction isOrchestrationArtifact(\n value: unknown,\n): value is MultiFrontierOrchestrationArtifact | undefined {\n if (value === undefined) return true;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const artifact = value as Partial<MultiFrontierOrchestrationArtifact>;\n return (\n hasExactKeys(artifact, [\n \"id\",\n \"kind\",\n \"round\",\n \"participantId\",\n \"text\",\n \"attribution\",\n \"supersedesArtifactId\",\n \"metadata\",\n ]) &&\n isSafeId(artifact.id) &&\n [\n \"proposal\",\n \"cross_review\",\n \"revision\",\n \"synthesis\",\n \"checkpoint\",\n \"watchdog_review\",\n \"finding_disposition\",\n \"completion\",\n ].includes(artifact.kind ?? \"\") &&\n Number.isSafeInteger(artifact.round) &&\n artifact.round! >= 1 &&\n artifact.round! <= 3 &&\n (artifact.participantId === undefined ||\n isSafeId(artifact.participantId)) &&\n isSafeOrchestrationText(artifact.text) &&\n isOrchestrationAttribution(artifact.attribution) &&\n (artifact.supersedesArtifactId === undefined ||\n isSafeId(artifact.supersedesArtifactId)) &&\n isSafeOrchestrationMetadata(artifact.kind!, artifact.metadata)\n );\n}\n\nfunction hasExactKeys(value: object, allowed: readonly string[]): boolean {\n return Object.keys(value).every((key) => allowed.includes(key));\n}\n\nfunction isOrchestrationAttribution(\n value: unknown,\n): value is MultiFrontierOrchestrationArtifact[\"attribution\"] {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const attribution = value as Partial<\n MultiFrontierOrchestrationArtifact[\"attribution\"]\n >;\n return (\n hasExactKeys(attribution as Record<string, unknown>, [\n \"participantIds\",\n \"sourceArtifactIds\",\n ]) &&\n isSafeIdArray(attribution.participantIds, 2) &&\n isSafeIdArray(\n attribution.sourceArtifactIds,\n MAX_MULTI_FRONTIER_ARTIFACTS_PER_RUN,\n )\n );\n}\n\nfunction isSafeIdArray(value: unknown, max: number): value is string[] {\n return (\n Array.isArray(value) &&\n value.length <= max &&\n value.every((item) => isSafeId(item))\n );\n}\n\nfunction isSafeOrchestrationText(value: unknown): value is string {\n return (\n isArtifactSummary(value) &&\n !/(?:bearer\\s+|api[_-]?key\\s*[:=]|authorization\\s*[:=]|(?:sk|rk|pk)[_-][A-Za-z0-9_-]{12,}|(?:access|refresh)[_-]?token\\s*[:=])/i.test(\n value,\n )\n );\n}\n\nfunction isSafeOrchestrationMetadata(\n kind: NonNullable<MultiFrontierOrchestrationArtifact[\"kind\"]>,\n value: unknown,\n): value is Record<string, unknown> | undefined {\n const allowedKeys = metadataKeysForOrchestrationKind(kind);\n if (allowedKeys.length === 0) return value === undefined;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const entries = Object.entries(value);\n if (\n entries.length === 0 ||\n entries.some(([key]) => !allowedKeys.includes(key)) ||\n entries.some(([key]) =>\n /(token|secret|authorization|credential|password|email|organization|account)/i.test(\n key,\n ),\n )\n ) {\n return false;\n }\n try {\n return (\n isArtifactSummary(JSON.stringify(value)) &&\n isValidOrchestrationMetadata(kind, value as Record<string, unknown>)\n );\n } catch {\n return false;\n }\n}\n\nfunction isValidOrchestrationMetadata(\n kind: NonNullable<MultiFrontierOrchestrationArtifact[\"kind\"]>,\n metadata: Record<string, unknown>,\n): boolean {\n if (kind === \"synthesis\") {\n return (\n typeof metadata.agreed === \"boolean\" &&\n typeof metadata.deterministicallyResolved === \"boolean\" &&\n (metadata.reversibleResolution === undefined ||\n isReversibleResolution(metadata.reversibleResolution))\n );\n }\n if (kind === \"checkpoint\") return isCheckpointBundle(metadata.bundle);\n if (kind === \"cross_review\" || kind === \"watchdog_review\") {\n return isFindingList(metadata.findings);\n }\n if (kind === \"finding_disposition\") {\n return isFindingDispositionList(metadata.dispositions);\n }\n if (kind === \"completion\") {\n return (\n isCompletionTests(metadata.tests) &&\n isSafeTextList(metadata.proofRefs, 40) &&\n isSafeTextList(metadata.remainingRisks, 40)\n );\n }\n return false;\n}\n\nfunction isFindingList(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length <= 40 &&\n value.every((finding) => {\n if (!finding || typeof finding !== \"object\" || Array.isArray(finding))\n return false;\n const item = finding as Record<string, unknown>;\n return (\n hasExactKeys(item, [\n \"id\",\n \"category\",\n \"summary\",\n \"rawFindingId\",\n \"reviewerParticipantId\",\n ]) &&\n isSafeId(item.id) &&\n isSafeOrchestrationText(item.summary) &&\n isSafeId(item.rawFindingId) &&\n isSafeId(item.reviewerParticipantId) &&\n [\n \"reversible_technical\",\n \"intent_or_scope\",\n \"destructive_action\",\n \"security_or_privacy\",\n \"outward_effect\",\n \"meaningful_cost_expansion\",\n \"irreversible_architecture\",\n ].includes(item.category as string)\n );\n })\n );\n}\n\nfunction isFindingDispositionList(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length <= 40 &&\n value.every((disposition) => {\n if (\n !disposition ||\n typeof disposition !== \"object\" ||\n Array.isArray(disposition)\n )\n return false;\n const item = disposition as Record<string, unknown>;\n return (\n hasExactKeys(item, [\"findingId\", \"disposition\", \"reason\"]) &&\n isSafeId(item.findingId) &&\n [\"addressed\", \"rejected\", \"deferred\"].includes(\n item.disposition as string,\n ) &&\n isSafeOrchestrationText(item.reason)\n );\n })\n );\n}\n\nfunction isReversibleResolution(value: unknown): boolean {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const item = value as Record<string, unknown>;\n return (\n hasExactKeys(item, [\n \"alternatives\",\n \"comparator\",\n \"selected\",\n \"reversibility\",\n ]) &&\n isSafeTextList(item.alternatives, 8) &&\n isSafeOrchestrationText(item.comparator) &&\n isSafeOrchestrationText(item.selected) &&\n isSafeOrchestrationText(item.reversibility)\n );\n}\n\nfunction isCheckpointBundle(value: unknown): boolean {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const item = value as Record<string, unknown>;\n return (\n hasExactKeys(item, [\n \"requestSummary\",\n \"requestRef\",\n \"acceptedPlanArtifactId\",\n \"contentRef\",\n \"contentHash\",\n \"testOutput\",\n \"driverSummary\",\n \"openRisks\",\n \"unresolvedFindingIds\",\n ]) &&\n isSafeOrchestrationText(item.requestSummary) &&\n (item.requestRef === undefined || isSafeId(item.requestRef)) &&\n isSafeId(item.acceptedPlanArtifactId) &&\n typeof item.contentRef === \"string\" &&\n /^(?!\\/)(?!.*\\.\\.)[A-Za-z0-9._/@:-]{1,512}$/.test(item.contentRef) &&\n typeof item.contentHash === \"string\" &&\n SAFE_CONTENT_HASH.test(item.contentHash) &&\n isSafeOrchestrationText(item.testOutput) &&\n isSafeOrchestrationText(item.driverSummary) &&\n isSafeTextList(item.openRisks, 40) &&\n isSafeIdArray(item.unresolvedFindingIds, 40)\n );\n}\n\nfunction isCompletionTests(value: unknown): boolean {\n return (\n Array.isArray(value) &&\n value.length <= 40 &&\n value.every((test) => {\n if (!test || typeof test !== \"object\" || Array.isArray(test))\n return false;\n const item = test as Record<string, unknown>;\n return (\n hasExactKeys(item, [\"name\", \"status\", \"evidence\"]) &&\n isSafeOrchestrationText(item.name) &&\n [\"passed\", \"failed\", \"skipped\"].includes(item.status as string) &&\n isSafeOrchestrationText(item.evidence)\n );\n })\n );\n}\n\nfunction isSafeTextList(value: unknown, max: number): boolean {\n return (\n Array.isArray(value) &&\n value.length <= max &&\n value.every((item) => isSafeOrchestrationText(item))\n );\n}\n\nfunction metadataKeysForOrchestrationKind(\n kind: NonNullable<MultiFrontierOrchestrationArtifact[\"kind\"]>,\n): string[] {\n if (kind === \"synthesis\") {\n return [\"agreed\", \"deterministicallyResolved\", \"reversibleResolution\"];\n }\n if (kind === \"checkpoint\") return [\"bundle\"];\n if (kind === \"cross_review\" || kind === \"watchdog_review\") {\n return [\"findings\"];\n }\n if (kind === \"finding_disposition\") return [\"dispositions\"];\n if (kind === \"completion\") return [\"tests\", \"proofRefs\", \"remainingRisks\"];\n return [];\n}\n\nfunction containsUnsafeOrchestrationValue(\n value: unknown,\n depth: number,\n): boolean {\n if (depth > 8) return true;\n if (typeof value === \"string\") return !isSafeOrchestrationText(value);\n if (\n value === null ||\n typeof value === \"boolean\" ||\n (typeof value === \"number\" && Number.isFinite(value))\n ) {\n return false;\n }\n if (Array.isArray(value)) {\n return (\n value.length > 40 ||\n value.some((item) => containsUnsafeOrchestrationValue(item, depth + 1))\n );\n }\n if (!value || typeof value !== \"object\") return true;\n const entries = Object.entries(value);\n return (\n entries.length > 40 ||\n entries.some(\n ([key, item]) =>\n !isBoundedText(key, 160) ||\n /(token|secret|authorization|credential|password|email|organization|account)/i.test(\n key,\n ) ||\n containsUnsafeOrchestrationValue(item, depth + 1),\n )\n );\n}\n\nfunction cloneOrchestrationArtifact(\n artifact: MultiFrontierOrchestrationArtifact,\n): MultiFrontierOrchestrationArtifact {\n return JSON.parse(\n JSON.stringify(artifact),\n ) as MultiFrontierOrchestrationArtifact;\n}\n\nfunction isBoundedText(value: unknown, maxBytes: number): value is string {\n return (\n typeof value === \"string\" &&\n value.trim().length > 0 &&\n Buffer.byteLength(value, \"utf-8\") <= maxBytes\n );\n}\n\nfunction assertBoundedText(\n value: unknown,\n maxBytes: number,\n label: string,\n): void {\n if (!isBoundedText(value, maxBytes)) {\n throw new Error(`Invalid multi-frontier ${label}.`);\n }\n}\n\nfunction assertRetentionLimits(\n limits: MultiFrontierParticipantEventRetentionLimits,\n): void {\n if (\n !isNonNegativeInteger(limits.maxEventCount) ||\n limits.maxEventCount < 1 ||\n !isNonNegativeInteger(limits.maxBytes) ||\n limits.maxBytes < 512\n ) {\n throw new Error(\n \"Invalid multi-frontier participant event retention limits.\",\n );\n }\n}\n\nfunction eventLineByteLength(\n event: PersistedMultiFrontierParticipantEvent,\n): number {\n return Buffer.byteLength(`${JSON.stringify(event)}\\n`, \"utf-8\");\n}\n\nfunction isSafeId(value: unknown): value is string {\n return typeof value === \"string\" && SAFE_ID.test(value);\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 0;\n}\n\nfunction assertParticipants(\n participants: MultiFrontierParticipantState[],\n): void {\n if (participants.length === 0) {\n throw new Error(\"A multi-frontier run needs at least one participant.\");\n }\n const participantIds = new Set<string>();\n for (const participant of participants) {\n if (!isParticipant(participant))\n throw new Error(\"Invalid multi-frontier participant.\");\n assertSafeId(participant.participantId, \"participant id\");\n if (participantIds.has(participant.participantId)) {\n throw new Error(\n `Duplicate multi-frontier participant id: ${participant.participantId}`,\n );\n }\n participantIds.add(participant.participantId);\n }\n}\n\nfunction isParticipant(value: unknown): value is MultiFrontierParticipantState {\n if (!value || typeof value !== \"object\") return false;\n const participant = value as Partial<MultiFrontierParticipantState>;\n return (\n typeof participant.participantId === \"string\" &&\n SAFE_ID.test(participant.participantId) &&\n typeof participant.provider === \"string\" &&\n participant.provider.length > 0 &&\n typeof participant.runtime === \"string\" &&\n participant.runtime.length > 0 &&\n (participant.model === undefined ||\n typeof participant.model === \"string\") &&\n (participant.capabilities === undefined ||\n isStringArray(participant.capabilities)) &&\n (participant.sessionRef === undefined ||\n typeof participant.sessionRef === \"string\") &&\n (participant.role === \"driver\" || participant.role === \"watchdog\") &&\n isPermission(participant.permission) &&\n isParticipantStatus(participant.status)\n );\n}\n\nfunction areStoredParticipantsValid(\n value: unknown,\n): value is MultiFrontierParticipantState[] {\n if (\n !Array.isArray(value) ||\n value.length === 0 ||\n !value.every(isParticipant)\n ) {\n return false;\n }\n return (\n new Set(value.map((participant) => participant.participantId)).size ===\n value.length\n );\n}\n\nfunction isStoredRunParticipantsAndDriverValid(\n participants: unknown,\n driver: unknown,\n): participants is MultiFrontierParticipantState[] {\n if (!areStoredParticipantsValid(participants) || !isDriver(driver)) {\n return false;\n }\n if (driver?.leaseState !== \"active\") {\n return participants.every(\n (participant) => participant.permission === \"read_only\",\n );\n }\n if (\n !participants.some(\n (participant) => participant.participantId === driver.participantId,\n )\n ) {\n return false;\n }\n return participants.every((participant) => {\n if (participant.participantId !== driver.participantId) {\n return (\n participant.role === \"watchdog\" &&\n participant.permission === \"read_only\"\n );\n }\n return (\n participant.role === \"driver\" &&\n participant.permission === \"workspace_write\"\n );\n });\n}\n\nfunction isDriver(value: unknown): value is MultiFrontierDriverLease | null {\n if (value === null) return true;\n if (!value || typeof value !== \"object\") return false;\n const driver = value as Partial<MultiFrontierDriverLease>;\n return (\n typeof driver.participantId === \"string\" &&\n typeof driver.generation === \"number\" &&\n (driver.leaseState === \"inactive\" ||\n driver.leaseState === \"active\" ||\n driver.leaseState === \"revoked\")\n );\n}\n\nfunction isApproval(value: unknown): value is MultiFrontierApproval {\n if (!value || typeof value !== \"object\") return false;\n const approval = value as Partial<MultiFrontierApproval>;\n return (\n (approval.state === \"not_required\" ||\n approval.state === \"pending\" ||\n approval.state === \"approved\" ||\n approval.state === \"rejected\") &&\n (approval.proposalId === undefined ||\n typeof approval.proposalId === \"string\") &&\n (approval.reviewPacketId === undefined ||\n typeof approval.reviewPacketId === \"string\")\n );\n}\n\nfunction isRecovery(value: unknown): value is MultiFrontierRecovery {\n if (!value || typeof value !== \"object\") return false;\n const recovery = value as Partial<MultiFrontierRecovery>;\n return (\n isRecoveryReason(recovery.reason) &&\n typeof recovery.recoveredAt === \"string\" &&\n !Number.isNaN(Date.parse(recovery.recoveredAt)) &&\n isPhase(recovery.resumablePhase) &&\n (recovery.checkpointId === undefined ||\n typeof recovery.checkpointId === \"string\")\n );\n}\n\nfunction isPhase(value: unknown): value is MultiFrontierPhase {\n return (\n typeof value === \"string\" &&\n [\n \"proposing\",\n \"cross_review\",\n \"converging\",\n \"awaiting_go\",\n \"implementing\",\n \"checkpoint_review\",\n \"paused\",\n \"completed\",\n \"failed\",\n \"canceled\",\n ].includes(value)\n );\n}\n\nfunction isParticipantStatus(\n value: unknown,\n): value is MultiFrontierParticipantStatus {\n return (\n value === \"idle\" ||\n value === \"running\" ||\n value === \"waiting\" ||\n value === \"failed\" ||\n value === \"completed\"\n );\n}\n\nfunction isPermission(\n value: unknown,\n): value is MultiFrontierParticipantPermission {\n return value === \"read_only\" || value === \"workspace_write\";\n}\n\nfunction isMatchingParticipantEvent(\n existing: PersistedMultiFrontierParticipantEvent,\n input: AppendMultiFrontierParticipantEventInput,\n): boolean {\n return (\n existing.collaborationId === input.collaborationId &&\n existing.participantId === input.participantId &&\n existing.permission === input.permission &&\n existing.generation === input.generation &&\n existing.status === input.status &&\n (input.createdAt === undefined || existing.createdAt === input.createdAt)\n );\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return (\n Array.isArray(value) && value.every((item) => typeof item === \"string\")\n );\n}\n\nfunction isRecoveryReason(\n value: unknown,\n): value is MultiFrontierRecoveryReason {\n return (\n value === \"main_process_restarted\" ||\n value === \"driver_crashed\" ||\n value === \"watchdog_crashed\" ||\n value === \"app_quit\" ||\n value === \"canceled\"\n );\n}\n\nfunction assertSafeId(value: string, label: string): void {\n if (!SAFE_ID.test(value)) throw new Error(`Invalid multi-frontier ${label}.`);\n}\n\nfunction assertTimestamp(value: string, label: string): void {\n if (Number.isNaN(Date.parse(value))) {\n throw new Error(`Invalid multi-frontier ${label}.`);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"templates-meta.d.ts","sourceRoot":"","sources":["../../src/cli/templates-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,SAAS,EAAE,YAAY,EA0MnC,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED,gFAAgF;AAChF,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQlE;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C"}
1
+ {"version":3,"file":"templates-meta.d.ts","sourceRoot":"","sources":["../../src/cli/templates-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,SAAS,EAAE,YAAY,EA8LnC,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED,gFAAgF;AAChF,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQlE;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C"}
@@ -192,18 +192,6 @@ export const TEMPLATES = [
192
192
  hidden: true,
193
193
  core: false,
194
194
  },
195
- {
196
- name: "crm",
197
- label: "CRM",
198
- hint: "Agent-native CRM companion with scoped HubSpot intelligence, workflows, and write proposals",
199
- icon: "Users",
200
- color: "#2563EB",
201
- colorRgb: "37 99 235",
202
- devPort: 8107,
203
- hidden: true,
204
- defaultMode: "dev",
205
- core: false,
206
- },
207
195
  {
208
196
  name: "macros",
209
197
  label: "Macros",