@schlenkr/ragents 0.1.10 → 0.1.12

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 (748) hide show
  1. package/README.md +1 -1
  2. package/apps/server/package.json +1 -1
  3. package/apps/server/src/access-projection.ts +6 -6
  4. package/apps/server/src/access-service.ts +3 -3
  5. package/apps/server/src/access-session.ts +19 -19
  6. package/apps/server/src/api/contracts.ts +29 -29
  7. package/apps/server/src/api/core-methods.ts +17 -17
  8. package/apps/server/src/api/delivery.ts +2 -2
  9. package/apps/server/src/api/reference.ts +27 -27
  10. package/apps/server/src/api/rights.ts +18 -18
  11. package/apps/server/src/chat-handler.ts +5 -5
  12. package/apps/server/src/config-definition.ts +37 -10
  13. package/apps/server/src/config-file.ts +49 -49
  14. package/apps/server/src/config.ts +2 -0
  15. package/apps/server/src/data-directory.ts +2 -2
  16. package/apps/server/src/external-access.ts +1 -1
  17. package/apps/server/src/folder-install.ts +1 -1
  18. package/apps/server/src/help-files.ts +1 -1
  19. package/apps/server/src/host-api.json +6 -1
  20. package/apps/server/src/host-api.ts +3 -2
  21. package/apps/server/src/host-record.ts +3 -3
  22. package/apps/server/src/host-resolution-hooks.mjs +4 -4
  23. package/apps/server/src/host-version.ts +17 -17
  24. package/apps/server/src/host-web.ts +5 -5
  25. package/apps/server/src/main.ts +6 -6
  26. package/apps/server/src/missing-environment.ts +6 -6
  27. package/apps/server/src/parent-watch.ts +4 -4
  28. package/apps/server/src/plugin-build/build.ts +38 -38
  29. package/apps/server/src/plugin-build/host-api-names.ts +7 -7
  30. package/apps/server/src/plugin-build/plugin-description.ts +15 -15
  31. package/apps/server/src/plugin-build/typecheck.ts +1 -1
  32. package/apps/server/src/plugin-support/actor-programs/app-project.ts +19 -19
  33. package/apps/server/src/plugin-support/actor-programs/client-compiler.ts +4 -4
  34. package/apps/server/src/plugin-support/actor-programs/client-contracts.ts +11 -11
  35. package/apps/server/src/plugin-support/actor-programs/contract.ts +17 -17
  36. package/apps/server/src/plugin-support/actor-programs/runtime-libraries.ts +1 -1
  37. package/apps/server/src/plugin-support/actor-programs/workflow/index.ts +5 -5
  38. package/apps/server/src/plugin-support/actor-programs/workflow/prompt-reader.ts +2 -2
  39. package/apps/server/src/plugin-support/chat-display-policy.ts +2 -2
  40. package/apps/server/src/plugin-support/front-matter.ts +6 -6
  41. package/apps/server/src/plugin-support/http.ts +2 -2
  42. package/apps/server/src/plugin-support/language-server/contract.ts +8 -8
  43. package/apps/server/src/plugin-support/language-server/plugin.ts +2 -2
  44. package/apps/server/src/plugin-support/language-server/snapshot-method.ts +1 -1
  45. package/apps/server/src/plugin-support/language-server/tools.ts +11 -11
  46. package/apps/server/src/plugin-support/model-aliases.ts +30 -20
  47. package/apps/server/src/plugin-support/model-choice.ts +15 -15
  48. package/apps/server/src/plugin-support/model-completion.ts +44 -23
  49. package/apps/server/src/plugin-support/model-providers.ts +170 -0
  50. package/apps/server/src/plugin-support/model-upstreams.ts +1 -1
  51. package/apps/server/src/plugin-support/native-typescript-child.ts +4 -4
  52. package/apps/server/src/plugin-support/native-typescript-executor.ts +12 -12
  53. package/apps/server/src/plugin-support/plugin-config.ts +3 -3
  54. package/apps/server/src/plugin-support/plugin-folder.ts +2 -2
  55. package/apps/server/src/plugin-support/plugins-root.ts +2 -2
  56. package/apps/server/src/plugin-support/process-sandbox.ts +39 -39
  57. package/apps/server/src/plugin-support/product-model-settings-contract.ts +3 -3
  58. package/apps/server/src/plugin-support/product-model-settings.ts +10 -10
  59. package/apps/server/src/plugin-support/product-relay.ts +9 -9
  60. package/apps/server/src/plugin-support/product-start-options.ts +4 -4
  61. package/apps/server/src/plugin-support/prompt.ts +1 -1
  62. package/apps/server/src/plugin-support/provision.ts +8 -8
  63. package/apps/server/src/plugin-support/run-scripts.ts +17 -17
  64. package/apps/server/src/plugin-support/skills.ts +18 -18
  65. package/apps/server/src/plugin-support/start-entries-contract.ts +17 -17
  66. package/apps/server/src/plugin-support/start-options-contract.ts +5 -5
  67. package/apps/server/src/plugin-support/system-prompts.ts +11 -11
  68. package/apps/server/src/plugin-support/thinking-level.ts +2 -2
  69. package/apps/server/src/plugin-support/tool-availability.ts +2 -2
  70. package/apps/server/src/plugin-support/workspace-ownership.ts +5 -5
  71. package/apps/server/src/plugin-support/workspace-sandbox-host.ts +37 -37
  72. package/apps/server/src/plugin-support/zip.ts +7 -7
  73. package/apps/server/src/profile/bundle-manifest.ts +27 -27
  74. package/apps/server/src/profile/compose.ts +12 -7
  75. package/apps/server/src/profile/plugin-discovery.ts +14 -14
  76. package/apps/server/src/profile/provisioning.ts +5 -5
  77. package/apps/server/src/profile-target.ts +10 -10
  78. package/apps/server/src/protocol.ts +2 -2
  79. package/apps/server/src/provider.ts +62 -57
  80. package/apps/server/src/ragents/actor-chat-history.ts +8 -8
  81. package/apps/server/src/ragents/chat-text-positions.ts +2 -2
  82. package/apps/server/src/ragents/coordinator.ts +2 -2
  83. package/apps/server/src/ragents/engine.ts +23 -23
  84. package/apps/server/src/ragents/global-chat.ts +8 -8
  85. package/apps/server/src/ragents/host-services.ts +6 -3
  86. package/apps/server/src/ragents/journal-chat-events.ts +1 -1
  87. package/apps/server/src/ragents/run-owner.ts +2 -2
  88. package/apps/server/src/ragents/session.ts +49 -49
  89. package/apps/server/src/ragents/typescript-tools.ts +12 -12
  90. package/apps/server/src/ragents/workspace-runtime.ts +28 -28
  91. package/apps/server/src/rpc/dispatcher.ts +19 -19
  92. package/apps/server/src/rpc/http-transport.ts +11 -11
  93. package/apps/server/src/rpc/stdio-transport.ts +3 -3
  94. package/apps/server/src/run-preparation-input.ts +5 -5
  95. package/apps/server/src/run-preparation.ts +24 -24
  96. package/apps/server/src/run-transfer.ts +39 -39
  97. package/apps/server/src/server.ts +48 -48
  98. package/apps/server/src/settings.ts +1 -1
  99. package/apps/server/src/startup.ts +3 -3
  100. package/apps/server/src/title-compactor.ts +9 -9
  101. package/apps/server/src/title-settings.ts +3 -3
  102. package/apps/server/src/web-bundles.ts +2 -2
  103. package/apps/server/src/web-stylesheet.ts +2 -2
  104. package/apps/web/dist/assets/{highlighted-body-KPVGNVTW-BO4wLQtE.js → highlighted-body-KPVGNVTW-CpPi6QLr.js} +1 -1
  105. package/apps/web/dist/assets/main-DJmCHGzM.js +11 -0
  106. package/apps/web/dist/assets/mermaid-HWGCJPDP-q-mf1kLN.js +608 -0
  107. package/apps/web/dist/assets/runPanel-nk_aMxSn.js +21 -0
  108. package/apps/web/dist/help/guide-access.html +5 -5
  109. package/apps/web/dist/help/guide-access.md +2 -2
  110. package/apps/web/dist/help/guide-clients.html +53 -54
  111. package/apps/web/dist/help/guide-clients.md +50 -51
  112. package/apps/web/dist/help/guide-distributed.html +12 -7
  113. package/apps/web/dist/help/guide-distributed.md +9 -4
  114. package/apps/web/dist/help/guide-functions.html +3 -3
  115. package/apps/web/dist/help/guide-getting-started.html +24 -15
  116. package/apps/web/dist/help/guide-getting-started.md +22 -12
  117. package/apps/web/dist/help/guide-ideas.html +3 -3
  118. package/apps/web/dist/help/guide-plugins.html +5 -4
  119. package/apps/web/dist/help/guide-plugins.md +2 -1
  120. package/apps/web/dist/help/guide-programs.html +3 -3
  121. package/apps/web/dist/help/guide-runtime.html +6 -6
  122. package/apps/web/dist/help/guide-runtime.md +3 -3
  123. package/apps/web/dist/help/guide.html +3 -3
  124. package/apps/web/dist/help/index.html +196 -144
  125. package/apps/web/dist/help/mini-app.css +6 -0
  126. package/apps/web/dist/help/mini-app.js +14 -14
  127. package/apps/web/dist/host-web.json +91 -91
  128. package/apps/web/dist/index.html +3 -3
  129. package/apps/web/dist/run-panel.html +3 -3
  130. package/apps/web/package.json +1 -1
  131. package/apps/web/src/AccessContext.tsx +15 -15
  132. package/apps/web/src/App.tsx +13 -13
  133. package/apps/web/src/DiffCode.tsx +2 -2
  134. package/apps/web/src/HelpDialog.tsx +3 -3
  135. package/apps/web/src/Overview.tsx +13 -13
  136. package/apps/web/src/PluginActivation.ts +1 -1
  137. package/apps/web/src/PluginChat.tsx +15 -15
  138. package/apps/web/src/PluginFailureNotice.tsx +1 -1
  139. package/apps/web/src/PluginRegistry.tsx +44 -44
  140. package/apps/web/src/RunPreparationChat.tsx +11 -11
  141. package/apps/web/src/RunStore.ts +1 -1
  142. package/apps/web/src/SessionList.tsx +14 -14
  143. package/apps/web/src/SettingsModal.tsx +112 -112
  144. package/apps/web/src/StartOptions.tsx +11 -11
  145. package/apps/web/src/StartSelection.tsx +11 -11
  146. package/apps/web/src/StartTiles.tsx +8 -8
  147. package/apps/web/src/SurfaceShortcuts.tsx +3 -3
  148. package/apps/web/src/ThemeSettings.tsx +8 -8
  149. package/apps/web/src/TitleModelSettings.tsx +13 -13
  150. package/apps/web/src/WorkspacePanel.tsx +9 -9
  151. package/apps/web/src/access-session.ts +4 -4
  152. package/apps/web/src/access-token.ts +5 -5
  153. package/apps/web/src/actor-conversation.ts +3 -3
  154. package/apps/web/src/actor-programs/client-ui/DataTable.tsx +8 -8
  155. package/apps/web/src/actor-programs/client-ui/FilePicker.tsx +4 -4
  156. package/apps/web/src/actor-programs/client-ui/FlowDiagram.tsx +13 -13
  157. package/apps/web/src/actor-programs/client-ui/Viewers.tsx +4 -4
  158. package/apps/web/src/actor-programs/client-ui/WorkflowDiagram.tsx +1 -1
  159. package/apps/web/src/actor-programs/client-ui/file-contracts.d.ts +4 -4
  160. package/apps/web/src/actor-programs/client-ui/file-selection.ts +1 -1
  161. package/apps/web/src/actor-programs/client-ui/viewer-contracts.d.ts +3 -3
  162. package/apps/web/src/api.ts +7 -7
  163. package/apps/web/src/chat/QuasselHost.tsx +1 -1
  164. package/apps/web/src/chat/StoppedActorNotice.tsx +5 -5
  165. package/apps/web/src/chat/chat-target.ts +3 -3
  166. package/apps/web/src/chat/requests.ts +2 -2
  167. package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
  168. package/apps/web/src/chat-view-settings.tsx +5 -6
  169. package/apps/web/src/diff-view.css +1 -1
  170. package/apps/web/src/highlighting.css +1 -1
  171. package/apps/web/src/language-server/language-server-plugin.tsx +30 -30
  172. package/apps/web/src/lib/labels.ts +6 -6
  173. package/apps/web/src/main.tsx +4 -4
  174. package/apps/web/src/offered-machines.ts +2 -2
  175. package/apps/web/src/page-opener.tsx +1 -1
  176. package/apps/web/src/panel/ConnectionsPage.tsx +23 -23
  177. package/apps/web/src/panel/LoginForm.tsx +6 -6
  178. package/apps/web/src/panel/PanelDialogs.tsx +22 -22
  179. package/apps/web/src/panel/PanelHeader.tsx +2 -2
  180. package/apps/web/src/panel/PanelPage.tsx +1 -1
  181. package/apps/web/src/panel/RunLine.tsx +4 -4
  182. package/apps/web/src/panel/RunsPage.tsx +15 -15
  183. package/apps/web/src/panel/StartPage.tsx +26 -26
  184. package/apps/web/src/panel/connection-state.ts +9 -9
  185. package/apps/web/src/panel/contract.ts +28 -28
  186. package/apps/web/src/panel.tsx +1 -1
  187. package/apps/web/src/plugin-bootstrap.ts +5 -5
  188. package/apps/web/src/product/ModelControl.tsx +3 -3
  189. package/apps/web/src/product/ProductModelSettings.tsx +16 -16
  190. package/apps/web/src/product/SystemPromptControl.tsx +11 -11
  191. package/apps/web/src/product/model-settings.ts +2 -2
  192. package/apps/web/src/rpc/client.ts +16 -16
  193. package/apps/web/src/rpc.ts +1 -1
  194. package/apps/web/src/run-overview.ts +1 -1
  195. package/apps/web/src/run-panel/RunPanelApp.tsx +39 -39
  196. package/apps/web/src/run-panel/RunPanelHeader.tsx +6 -6
  197. package/apps/web/src/run-panel/RunPanelMenu.tsx +6 -6
  198. package/apps/web/src/run-panel/RunPanelRail.tsx +4 -4
  199. package/apps/web/src/run-panel/RunPanelWorkspace.tsx +3 -3
  200. package/apps/web/src/run-panel/clipboard.ts +3 -3
  201. package/apps/web/src/run-panel/host-contract.ts +5 -5
  202. package/apps/web/src/run-panel/host.ts +15 -15
  203. package/apps/web/src/run-panel/input-bridge.ts +1 -1
  204. package/apps/web/src/run-panel/run-panel-location.ts +5 -5
  205. package/apps/web/src/run-panel/use-session-list.ts +1 -1
  206. package/apps/web/src/run-panel/workspace-state.ts +3 -3
  207. package/apps/web/src/run-panel.tsx +4 -4
  208. package/apps/web/src/run-preparation.ts +2 -2
  209. package/apps/web/src/run-view.ts +3 -3
  210. package/apps/web/src/settings-contributions.ts +32 -32
  211. package/apps/web/src/theme.ts +9 -9
  212. package/apps/web/src/title-model-settings.ts +6 -6
  213. package/apps/web/src/ui/ListDetail.tsx +9 -9
  214. package/apps/web/src/ui/dialog.tsx +2 -2
  215. package/apps/web/src/ui/modal-controller.ts +3 -3
  216. package/apps/web/src/ui/modal.tsx +2 -2
  217. package/apps/web/src/ui/popover.tsx +1 -1
  218. package/apps/web/src/ui/relative-time.ts +8 -8
  219. package/apps/web/src/ui/startup-notice.tsx +2 -2
  220. package/apps/web/src/ui/state-icon.tsx +1 -1
  221. package/apps/web/src/ui/state-vocabulary.ts +16 -16
  222. package/apps/web/src/ui/stop-button.tsx +2 -2
  223. package/bundles/ragents.activity/ragents-bundle.json +3 -3
  224. package/bundles/ragents.activity/web/classes.json +1 -1
  225. package/bundles/ragents.activity/web/index.js +1 -1
  226. package/bundles/ragents.activity/web/index.js.map +2 -2
  227. package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
  228. package/bundles/ragents.actor-programs/server/index.js +225 -225
  229. package/bundles/ragents.actor-programs/server/index.js.map +2 -2
  230. package/bundles/ragents.actor-programs/web/classes.json +1 -1
  231. package/bundles/ragents.actor-programs/web/index.js +1 -1
  232. package/bundles/ragents.actor-programs/web/index.js.map +3 -3
  233. package/bundles/ragents.ask/ragents-bundle.json +3 -3
  234. package/bundles/ragents.ask/server/chunks/{chunk-PDJO75SQ.js → chunk-YOV27MAR.js} +2 -2
  235. package/bundles/ragents.ask/server/chunks/chunk-YOV27MAR.js.map +7 -0
  236. package/bundles/ragents.ask/server/exports/server/contract.js +1 -1
  237. package/bundles/ragents.ask/server/index.js +23 -23
  238. package/bundles/ragents.ask/server/index.js.map +2 -2
  239. package/bundles/ragents.ask/web/chunks/{chunk-WFN4374U.js → chunk-D6NNB5DS.js} +1 -1
  240. package/bundles/ragents.ask/web/chunks/chunk-D6NNB5DS.js.map +7 -0
  241. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js → chunk-IQBHK7MV.js} +2 -2
  242. package/bundles/ragents.ask/web/chunks/{chunk-MBRPS477.js.map → chunk-IQBHK7MV.js.map} +3 -3
  243. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js +2 -0
  244. package/bundles/ragents.ask/web/chunks/chunk-PWFIAMX4.js.map +7 -0
  245. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js +2 -0
  246. package/bundles/ragents.ask/web/chunks/chunk-QHGKEESD.js.map +7 -0
  247. package/bundles/ragents.ask/web/classes.json +1 -1
  248. package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
  249. package/bundles/ragents.ask/web/exports/web/QuestionCard.js +1 -1
  250. package/bundles/ragents.ask/web/exports/web/api.js +1 -1
  251. package/bundles/ragents.ask/web/index.js +1 -1
  252. package/bundles/ragents.ask/web/index.js.map +2 -2
  253. package/bundles/ragents.browser/executor/index.mjs +35 -35
  254. package/bundles/ragents.browser/executor/index.mjs.map +2 -2
  255. package/bundles/ragents.browser/ragents-bundle.json +3 -3
  256. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js → chunk-PYEISBNE.js} +1 -1
  257. package/bundles/ragents.browser/server/chunks/{chunk-CWLX4VA5.js.map → chunk-PYEISBNE.js.map} +1 -1
  258. package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
  259. package/bundles/ragents.browser/server/index.js +31 -31
  260. package/bundles/ragents.browser/server/index.js.map +2 -2
  261. package/bundles/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  262. package/bundles/ragents.documents/prompt.hbs +1 -1
  263. package/bundles/ragents.documents/ragents-bundle.json +3 -3
  264. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js → chunk-KMZWOVTI.js} +3 -3
  265. package/bundles/ragents.documents/server/chunks/{chunk-QIECRZ7C.js.map → chunk-KMZWOVTI.js.map} +2 -2
  266. package/bundles/ragents.documents/server/exports/contract.js +1 -1
  267. package/bundles/ragents.documents/server/index.js +26 -26
  268. package/bundles/ragents.documents/server/index.js.map +2 -2
  269. package/bundles/ragents.documents/web/classes.json +1 -1
  270. package/bundles/ragents.documents/web/index.js +1 -1
  271. package/bundles/ragents.documents/web/index.js.map +3 -3
  272. package/bundles/ragents.lsp-fsharp/executor/index.mjs +4 -4
  273. package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +2 -2
  274. package/bundles/ragents.lsp-fsharp/ragents-bundle.json +3 -3
  275. package/bundles/ragents.lsp-fsharp/server/index.js +5 -5
  276. package/bundles/ragents.lsp-fsharp/server/index.js.map +2 -2
  277. package/bundles/ragents.lsp-fsharp/web/index.js +1 -1
  278. package/bundles/ragents.lsp-fsharp/web/index.js.map +2 -2
  279. package/bundles/ragents.lsp-roslyn/executor/index.mjs +3 -3
  280. package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +2 -2
  281. package/bundles/ragents.lsp-roslyn/ragents-bundle.json +3 -3
  282. package/bundles/ragents.lsp-roslyn/server/index.js +17 -17
  283. package/bundles/ragents.lsp-roslyn/server/index.js.map +2 -2
  284. package/bundles/ragents.lsp-roslyn/web/index.js +1 -1
  285. package/bundles/ragents.lsp-roslyn/web/index.js.map +2 -2
  286. package/bundles/ragents.lsp-typescript/executor/index.mjs +2 -2
  287. package/bundles/ragents.lsp-typescript/executor/index.mjs.map +2 -2
  288. package/bundles/ragents.lsp-typescript/ragents-bundle.json +3 -3
  289. package/bundles/ragents.lsp-typescript/server/index.js.map +1 -1
  290. package/bundles/ragents.lsp-typescript/web/index.js +1 -1
  291. package/bundles/ragents.lsp-typescript/web/index.js.map +2 -2
  292. package/bundles/ragents.model-relay/ragents-bundle.json +8 -4
  293. package/bundles/ragents.model-relay/server/index.js +25 -21
  294. package/bundles/ragents.model-relay/server/index.js.map +2 -2
  295. package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
  296. package/bundles/ragents.orchestration/server/index.js +28 -28
  297. package/bundles/ragents.orchestration/server/index.js.map +2 -2
  298. package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js → chunk-CFMJD5ZI.js} +2 -2
  299. package/bundles/ragents.orchestration/web/chunks/chunk-HOBLI364.js +2 -0
  300. package/bundles/ragents.orchestration/web/chunks/{chunk-OQYCNYXN.js.map → chunk-HOBLI364.js.map} +2 -2
  301. package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js → chunk-UCIMT2R4.js} +2 -2
  302. package/bundles/ragents.orchestration/web/classes.json +1 -1
  303. package/bundles/ragents.orchestration/web/exports/web/program-slot.js +1 -1
  304. package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +1 -1
  305. package/bundles/ragents.orchestration/web/index.js +8 -8
  306. package/bundles/ragents.orchestration/web/index.js.map +2 -2
  307. package/bundles/ragents.overseer/ragents-bundle.json +3 -3
  308. package/bundles/ragents.overseer/server/index.js +98 -98
  309. package/bundles/ragents.overseer/server/index.js.map +2 -2
  310. package/bundles/ragents.overseer/web/classes.json +1 -1
  311. package/bundles/ragents.overseer/web/index.js +1 -1
  312. package/bundles/ragents.overseer/web/index.js.map +2 -2
  313. package/bundles/ragents.processes/ragents-bundle.json +3 -3
  314. package/bundles/ragents.processes/server/index.js +11 -11
  315. package/bundles/ragents.processes/server/index.js.map +2 -2
  316. package/bundles/ragents.processes/web/classes.json +1 -1
  317. package/bundles/ragents.processes/web/index.js +3 -3
  318. package/bundles/ragents.processes/web/index.js.map +2 -2
  319. package/bundles/ragents.product/ragents-bundle.json +3 -3
  320. package/bundles/ragents.product/server/index.js +12 -13
  321. package/bundles/ragents.product/server/index.js.map +2 -2
  322. package/bundles/ragents.product/web/classes.json +1 -1
  323. package/bundles/ragents.product/web/index.js +1 -1
  324. package/bundles/ragents.product/web/index.js.map +2 -2
  325. package/bundles/ragents.profile-distribution/ragents-bundle.json +3 -3
  326. package/bundles/ragents.profile-distribution/server/index.js +31 -31
  327. package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
  328. package/bundles/ragents.reference/ragents-bundle.json +3 -3
  329. package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  330. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  331. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  332. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  333. package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  334. package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  335. package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  336. package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  337. package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  338. package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  339. package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  340. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  341. package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  342. package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  343. package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  344. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  345. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  346. package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  347. package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  348. package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  349. package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  350. package/bundles/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  351. package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  352. package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  353. package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  354. package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  355. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  356. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  357. package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  358. package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  359. package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  360. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  361. package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  362. package/bundles/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  363. package/bundles/ragents.reference/run-scripts/word-game/package.json +2 -2
  364. package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  365. package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  366. package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  367. package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  368. package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  369. package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  370. package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  371. package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  372. package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  373. package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  374. package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  375. package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  376. package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  377. package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  378. package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  379. package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  380. package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  381. package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  382. package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  383. package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  384. package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  385. package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  386. package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  387. package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  388. package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  389. package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  390. package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  391. package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  392. package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  393. package/bundles/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  394. package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  395. package/bundles/ragents.reference/web/classes.json +1 -1
  396. package/bundles/ragents.reference/web/index.js +1 -1
  397. package/bundles/ragents.reference/web/index.js.map +2 -2
  398. package/bundles/ragents.todo/ragents-bundle.json +3 -3
  399. package/bundles/ragents.todo/server/index.js +5 -8
  400. package/bundles/ragents.todo/server/index.js.map +2 -2
  401. package/bundles/ragents.todo/web/classes.json +1 -1
  402. package/bundles/ragents.todo/web/index.js +1 -1
  403. package/bundles/ragents.todo/web/index.js.map +2 -2
  404. package/bundles/ragents.transcript/ragents-bundle.json +3 -3
  405. package/bundles/ragents.transcript/server/index.js +11 -11
  406. package/bundles/ragents.transcript/server/index.js.map +2 -2
  407. package/bundles/ragents.watch/ragents-bundle.json +3 -3
  408. package/bundles/ragents.watch/server/index.js +48 -48
  409. package/bundles/ragents.watch/server/index.js.map +2 -2
  410. package/bundles/ragents.workspace/ragents-bundle.json +3 -3
  411. package/bundles/ragents.workspace/server/index.js +83 -83
  412. package/bundles/ragents.workspace/server/index.js.map +2 -2
  413. package/bundles/ragents.workspace/web/classes.json +1 -1
  414. package/bundles/ragents.workspace/web/index.js +1 -1
  415. package/bundles/ragents.workspace/web/index.js.map +2 -2
  416. package/package.json +4 -4
  417. package/packages/agent/dist/core/model-runtime.d.ts +7 -2
  418. package/packages/agent/dist/index.d.ts +1 -1
  419. package/packages/agent/dist/loop/agent-loop.d.ts +2 -2
  420. package/packages/agent/src/core/compaction/utils.ts +1 -1
  421. package/packages/agent/src/core/model-runtime.ts +45 -5
  422. package/packages/agent/src/index.ts +1 -1
  423. package/packages/agent/src/loop/agent-loop.ts +2 -2
  424. package/packages/ai/dist/models.d.ts +1 -0
  425. package/packages/ai/dist/models.generated.d.ts +4544 -983
  426. package/packages/ai/dist/providers/openrouter.models.d.ts +4544 -983
  427. package/packages/ai/src/api/ai-sdk.ts +33 -7
  428. package/packages/ai/src/api-registry.ts +1 -1
  429. package/packages/ai/src/index.ts +2 -2
  430. package/packages/ai/src/models.generated.ts +1 -1
  431. package/packages/ai/src/models.ts +1 -1
  432. package/packages/ai/src/providers/openrouter.models.ts +3725 -552
  433. package/packages/ragents/src/access.ts +12 -12
  434. package/packages/ragents/src/agents/actor-input.ts +33 -33
  435. package/packages/ragents/src/agents/catalog.ts +1 -1
  436. package/packages/ragents/src/agents/delivery.ts +17 -17
  437. package/packages/ragents/src/agents/plugins.ts +1 -1
  438. package/packages/ragents/src/agents/scheduler.ts +7 -7
  439. package/packages/ragents/src/agents/schemas.ts +1 -1
  440. package/packages/ragents/src/agents/tool-orientation.ts +4 -4
  441. package/packages/ragents/src/agents/tools.ts +20 -20
  442. package/packages/ragents/src/agents/toolset.ts +5 -5
  443. package/packages/ragents/src/agents/workspaces.ts +1 -1
  444. package/packages/ragents/src/domain/events.ts +1 -1
  445. package/packages/ragents/src/domain/model.ts +5 -5
  446. package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
  447. package/packages/ragents/src/drivers/agent-turn.ts +4 -4
  448. package/packages/ragents/src/drivers/agent.ts +2 -2
  449. package/packages/ragents/src/drivers/attachments.ts +4 -4
  450. package/packages/ragents/src/http/contracts.ts +14 -14
  451. package/packages/ragents/src/http/methods.ts +6 -6
  452. package/packages/ragents/src/plugin-host.ts +119 -119
  453. package/packages/ragents/src/plugin-types.ts +16 -16
  454. package/packages/ragents/src/rpc/contract.ts +5 -5
  455. package/packages/ragents/src/rpc/contribution.ts +2 -2
  456. package/packages/ragents/src/rpc/peer.ts +11 -11
  457. package/packages/ragents/src/rpc/protocol.ts +2 -2
  458. package/packages/ragents/src/runtime/decisions/turns.ts +1 -1
  459. package/packages/ragents/src/runtime/journal-storage.ts +1 -1
  460. package/packages/ragents/src/runtime/journal.ts +10 -10
  461. package/packages/ragents/src/runtime/orchestration.ts +8 -8
  462. package/packages/ragents/src/runtime/stop.ts +2 -2
  463. package/packages/ragents/src/script/mediators.ts +35 -35
  464. package/packages/ragents/src/typescript/async-compiler.ts +14 -14
  465. package/packages/ragents/src/typescript/compiler-worker.ts +2 -2
  466. package/packages/ragents/src/typescript/compiler.ts +7 -7
  467. package/packages/ragents/src/typescript/snippet.ts +5 -5
  468. package/packages/workspace-executor/src/bash-launch.ts +13 -13
  469. package/packages/workspace-executor/src/commands.ts +18 -18
  470. package/packages/workspace-executor/src/context.ts +15 -15
  471. package/packages/workspace-executor/src/contributions.ts +44 -44
  472. package/packages/workspace-executor/src/errors.ts +1 -1
  473. package/packages/workspace-executor/src/executor.ts +16 -16
  474. package/packages/workspace-executor/src/files.ts +31 -31
  475. package/packages/workspace-executor/src/index.ts +1 -1
  476. package/packages/workspace-executor/src/language-server/contract.ts +2 -2
  477. package/packages/workspace-executor/src/language-server/diagnostics.ts +4 -4
  478. package/packages/workspace-executor/src/language-server/host.ts +36 -36
  479. package/packages/workspace-executor/src/language-server/json-rpc.ts +4 -4
  480. package/packages/workspace-executor/src/language-server/module.ts +11 -11
  481. package/packages/workspace-executor/src/language-server/roots.ts +3 -3
  482. package/packages/workspace-executor/src/language-server/session.ts +15 -15
  483. package/packages/workspace-executor/src/language-server/workspace-solutions.ts +3 -3
  484. package/packages/workspace-executor/src/managed-process.ts +12 -12
  485. package/packages/workspace-executor/src/module.ts +8 -8
  486. package/packages/workspace-executor/src/modules.ts +3 -3
  487. package/packages/workspace-executor/src/paths.ts +11 -11
  488. package/packages/workspace-executor/src/process-sandbox.ts +3 -3
  489. package/packages/workspace-executor/src/processes/module.ts +3 -3
  490. package/packages/workspace-executor/src/processes/process-table.ts +20 -20
  491. package/packages/workspace-executor/src/processes/scanner.ts +3 -3
  492. package/packages/workspace-executor/src/processes/snapshot.ts +2 -2
  493. package/packages/workspace-executor/src/processes/terminator.ts +13 -13
  494. package/packages/workspace-executor/src/run-folders.ts +3 -3
  495. package/packages/workspace-executor/src/safe-environment.ts +4 -4
  496. package/packages/workspace-executor/src/sandbox-tools.ts +28 -28
  497. package/packages/workspace-executor/src/session-ident.ts +2 -2
  498. package/packages/workspace-executor/src/shell-platform.ts +2 -2
  499. package/packages/workspace-executor/src/tools.ts +5 -5
  500. package/plugins/ragents.activity/web/ActivityHeader.tsx +3 -3
  501. package/plugins/ragents.activity/web/activity.ts +2 -2
  502. package/plugins/ragents.actor-programs/server/access-projections.ts +1 -1
  503. package/plugins/ragents.actor-programs/server/agent-tools.ts +2 -2
  504. package/plugins/ragents.actor-programs/server/capability-resolver.ts +3 -3
  505. package/plugins/ragents.actor-programs/server/controls-template.ts +46 -46
  506. package/plugins/ragents.actor-programs/server/controls-tool.ts +4 -4
  507. package/plugins/ragents.actor-programs/server/limits.ts +3 -3
  508. package/plugins/ragents.actor-programs/server/methods.ts +1 -1
  509. package/plugins/ragents.actor-programs/server/project-diagnostics.ts +8 -8
  510. package/plugins/ragents.actor-programs/server/routes.ts +8 -8
  511. package/plugins/ragents.actor-programs/server/runtime.ts +90 -90
  512. package/plugins/ragents.actor-programs/server/templates.ts +59 -59
  513. package/plugins/ragents.actor-programs/server/test-report.ts +5 -5
  514. package/plugins/ragents.actor-programs/server/tool-contributor.ts +1 -1
  515. package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +17 -17
  516. package/plugins/ragents.actor-programs/web/AppsPanel.tsx +26 -26
  517. package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +3 -3
  518. package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +2 -2
  519. package/plugins/ragents.actor-programs/web/FunctionForm.tsx +16 -16
  520. package/plugins/ragents.actor-programs/web/ProgramSource.tsx +5 -5
  521. package/plugins/ragents.actor-programs/web/api.ts +36 -36
  522. package/plugins/ragents.actor-programs/web/bridge.ts +8 -8
  523. package/plugins/ragents.actor-programs/web/chat-state.ts +4 -4
  524. package/plugins/ragents.actor-programs/web/context.ts +1 -1
  525. package/plugins/ragents.actor-programs/web/function-input.ts +6 -6
  526. package/plugins/ragents.actor-programs/web/index.tsx +1 -1
  527. package/plugins/ragents.actor-programs/web/program-state.ts +4 -4
  528. package/plugins/ragents.ask/ask-payload.ts +1 -1
  529. package/plugins/ragents.ask/contract.ts +5 -5
  530. package/plugins/ragents.ask/server/answer-method.ts +1 -1
  531. package/plugins/ragents.ask/server/ask-service.ts +9 -9
  532. package/plugins/ragents.ask/server/ask-tool.ts +10 -10
  533. package/plugins/ragents.ask/server/contract.ts +5 -5
  534. package/plugins/ragents.ask/web/AskActionView.tsx +1 -1
  535. package/plugins/ragents.ask/web/QuestionCard.tsx +22 -22
  536. package/plugins/ragents.ask/web/index.tsx +2 -2
  537. package/plugins/ragents.browser/executor/contract.ts +6 -6
  538. package/plugins/ragents.browser/executor/index.ts +1 -1
  539. package/plugins/ragents.browser/executor/module.ts +6 -6
  540. package/plugins/ragents.browser/executor/pages.ts +32 -32
  541. package/plugins/ragents.browser/executor/playwright.ts +8 -8
  542. package/plugins/ragents.browser/provision.ts +7 -7
  543. package/plugins/ragents.browser/server/browser.ts +14 -14
  544. package/plugins/ragents.browser/server/contract.ts +1 -1
  545. package/plugins/ragents.browser/server/index.ts +1 -1
  546. package/plugins/ragents.browser/server/tools.ts +14 -14
  547. package/plugins/ragents.browser/skills/browser-testing/SKILL.md +30 -30
  548. package/plugins/ragents.documents/contract.ts +2 -2
  549. package/plugins/ragents.documents/prompt.hbs +1 -1
  550. package/plugins/ragents.documents/server/document-write-tool.ts +12 -12
  551. package/plugins/ragents.documents/server/files-route.ts +6 -6
  552. package/plugins/ragents.documents/server/show-document-tool.ts +26 -26
  553. package/plugins/ragents.documents/server/store.ts +1 -1
  554. package/plugins/ragents.documents/web/DocumentViewer.tsx +37 -37
  555. package/plugins/ragents.documents/web/index.tsx +11 -11
  556. package/plugins/ragents.lsp-fsharp/executor.ts +7 -7
  557. package/plugins/ragents.lsp-fsharp/provision.ts +7 -7
  558. package/plugins/ragents.lsp-roslyn/executor.ts +5 -5
  559. package/plugins/ragents.lsp-roslyn/provision.ts +4 -4
  560. package/plugins/ragents.lsp-roslyn/server/index.ts +5 -5
  561. package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +13 -13
  562. package/plugins/ragents.lsp-typescript/executor.ts +3 -3
  563. package/plugins/ragents.model-relay/server/config.ts +6 -2
  564. package/plugins/ragents.model-relay/server/index.ts +2 -2
  565. package/plugins/ragents.model-relay/server/relay.ts +23 -22
  566. package/plugins/ragents.orchestration/contract.ts +8 -8
  567. package/plugins/ragents.orchestration/server/index.ts +4 -4
  568. package/plugins/ragents.orchestration/server/run-stop-tool.ts +3 -3
  569. package/plugins/ragents.orchestration/server/surface-tool.ts +5 -5
  570. package/plugins/ragents.orchestration/tiled-layout.ts +11 -11
  571. package/plugins/ragents.orchestration/web/ActorChat.tsx +3 -3
  572. package/plugins/ragents.orchestration/web/ActorChatControls.tsx +4 -5
  573. package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +1 -1
  574. package/plugins/ragents.orchestration/web/ActorPopout.tsx +1 -1
  575. package/plugins/ragents.orchestration/web/ActorShortcut.tsx +6 -6
  576. package/plugins/ragents.orchestration/web/ActorSurfaceControls.tsx +15 -15
  577. package/plugins/ragents.orchestration/web/Center.tsx +5 -5
  578. package/plugins/ragents.orchestration/web/DocumentsSection.tsx +2 -2
  579. package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +15 -15
  580. package/plugins/ragents.orchestration/web/FlowInspector.tsx +103 -103
  581. package/plugins/ragents.orchestration/web/JournalStatus.tsx +11 -11
  582. package/plugins/ragents.orchestration/web/MaterialBody.tsx +2 -2
  583. package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
  584. package/plugins/ragents.orchestration/web/TiledSurface.tsx +9 -9
  585. package/plugins/ragents.orchestration/web/actor-header-settings.ts +5 -5
  586. package/plugins/ragents.orchestration/web/constants.ts +2 -2
  587. package/plugins/ragents.orchestration/web/executions.ts +6 -6
  588. package/plugins/ragents.orchestration/web/format.ts +1 -1
  589. package/plugins/ragents.orchestration/web/index.tsx +2 -2
  590. package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +7 -7
  591. package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +8 -8
  592. package/plugins/ragents.orchestration/web/run-panel/RunPanel.tsx +22 -22
  593. package/plugins/ragents.orchestration/web/run-panel/RunPanelSettings.tsx +7 -7
  594. package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +13 -13
  595. package/plugins/ragents.orchestration/web/run-panel/run-panel-actors.ts +3 -3
  596. package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +2 -2
  597. package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +3 -3
  598. package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +7 -7
  599. package/plugins/ragents.orchestration/web/run-panel/sheet-status.ts +9 -9
  600. package/plugins/ragents.orchestration/web/surface-startup.ts +8 -8
  601. package/plugins/ragents.orchestration/web/surface-view-settings.ts +1 -1
  602. package/plugins/ragents.orchestration/web/tiled-view-settings.ts +1 -1
  603. package/plugins/ragents.overseer/contract.ts +20 -20
  604. package/plugins/ragents.overseer/server/api.ts +6 -6
  605. package/plugins/ragents.overseer/server/coordinator-prompt.ts +10 -10
  606. package/plugins/ragents.overseer/server/coordinator.ts +4 -4
  607. package/plugins/ragents.overseer/server/index.ts +24 -24
  608. package/plugins/ragents.overseer/server/orientation.ts +8 -8
  609. package/plugins/ragents.overseer/server/quick-answer.ts +9 -9
  610. package/plugins/ragents.overseer/server/run-directory.ts +5 -5
  611. package/plugins/ragents.overseer/server/settings.ts +6 -6
  612. package/plugins/ragents.overseer/server/user-location.ts +16 -16
  613. package/plugins/ragents.overseer/web/ModelSettings.tsx +9 -9
  614. package/plugins/ragents.overseer/web/index.tsx +20 -20
  615. package/plugins/ragents.overseer/web/model-settings.ts +1 -1
  616. package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
  617. package/plugins/ragents.processes/contract.ts +5 -5
  618. package/plugins/ragents.processes/server/methods.ts +4 -4
  619. package/plugins/ragents.processes/server/observer.ts +8 -8
  620. package/plugins/ragents.processes/server/run-processes.ts +2 -2
  621. package/plugins/ragents.processes/web/ProcessHeader.tsx +10 -10
  622. package/plugins/ragents.processes/web/processes.ts +10 -10
  623. package/plugins/ragents.product/server/config.ts +1 -1
  624. package/plugins/ragents.product/server/index.ts +4 -4
  625. package/plugins/ragents.product/server/runtime.ts +9 -10
  626. package/plugins/ragents.product/web/index.tsx +1 -1
  627. package/plugins/ragents.profile-distribution/contract.ts +10 -10
  628. package/plugins/ragents.profile-distribution/server/archive.ts +20 -20
  629. package/plugins/ragents.profile-distribution/server/config.ts +2 -2
  630. package/plugins/ragents.profile-distribution/server/index.ts +4 -4
  631. package/plugins/ragents.reference/examples.ts +27 -27
  632. package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +19 -19
  633. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +2 -2
  634. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +14 -14
  635. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +2 -2
  636. package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +49 -49
  637. package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +1 -1
  638. package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +9 -9
  639. package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +9 -9
  640. package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +7 -7
  641. package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +1 -1
  642. package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +13 -13
  643. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
  644. package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +8 -8
  645. package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +16 -16
  646. package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +1 -1
  647. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -1
  648. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +3 -3
  649. package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -1
  650. package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +9 -9
  651. package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +39 -39
  652. package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +7 -7
  653. package/plugins/ragents.reference/run-scripts/moderated-round/package.json +1 -1
  654. package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +9 -9
  655. package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
  656. package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +6 -6
  657. package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +12 -12
  658. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +2 -2
  659. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +3 -3
  660. package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +4 -4
  661. package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +1 -1
  662. package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +11 -11
  663. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
  664. package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +13 -13
  665. package/plugins/ragents.reference/run-scripts/word-game/RUN.md +18 -18
  666. package/plugins/ragents.reference/run-scripts/word-game/package.json +2 -2
  667. package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
  668. package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +2 -2
  669. package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +16 -16
  670. package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +39 -39
  671. package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +5 -5
  672. package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +5 -5
  673. package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +5 -5
  674. package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +5 -5
  675. package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +5 -5
  676. package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +5 -5
  677. package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +5 -5
  678. package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +5 -5
  679. package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +5 -5
  680. package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +5 -5
  681. package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +5 -5
  682. package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +5 -5
  683. package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +5 -5
  684. package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +5 -5
  685. package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +5 -5
  686. package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +5 -5
  687. package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +5 -5
  688. package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +5 -5
  689. package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +5 -5
  690. package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +5 -5
  691. package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +5 -5
  692. package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +5 -5
  693. package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +5 -5
  694. package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +5 -5
  695. package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +5 -5
  696. package/plugins/ragents.reference/skills/decision-brief/SKILL.md +24 -24
  697. package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +24 -24
  698. package/plugins/ragents.reference/walkthroughs.ts +128 -128
  699. package/plugins/ragents.reference/web/StartGuides.tsx +23 -23
  700. package/plugins/ragents.todo/contract.ts +0 -3
  701. package/plugins/ragents.todo/server/todo-tool.ts +6 -6
  702. package/plugins/ragents.todo/web/TodoSection.tsx +1 -1
  703. package/plugins/ragents.transcript/server/transcript.ts +11 -11
  704. package/plugins/ragents.watch/server/condition.ts +4 -4
  705. package/plugins/ragents.watch/server/functions.ts +27 -27
  706. package/plugins/ragents.watch/server/observation.ts +2 -2
  707. package/plugins/ragents.watch/server/service.ts +14 -14
  708. package/plugins/ragents.workspace/client/transport.ts +1 -1
  709. package/plugins/ragents.workspace/client/workspace-client.ts +63 -63
  710. package/plugins/ragents.workspace/contract.ts +46 -46
  711. package/plugins/ragents.workspace/server/binding.ts +20 -20
  712. package/plugins/ragents.workspace/server/browse-route.ts +8 -8
  713. package/plugins/ragents.workspace/server/clients.ts +50 -50
  714. package/plugins/ragents.workspace/server/config.ts +7 -7
  715. package/plugins/ragents.workspace/server/index.ts +3 -3
  716. package/plugins/ragents.workspace/server/runtime.ts +26 -26
  717. package/plugins/ragents.workspace/server/shell-platform.ts +1 -1
  718. package/plugins/ragents.workspace/web/FileBrowser.tsx +10 -10
  719. package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +24 -24
  720. package/plugins/ragents.workspace/web/index.tsx +1 -1
  721. package/ragents.config.core.ts +1 -1
  722. package/ragents.config.developer.ts +3 -3
  723. package/ragents.config.showcase.ts +2 -2
  724. package/scripts/agent/agent-cli.ts +96 -96
  725. package/scripts/agent/journal.ts +5 -5
  726. package/scripts/agent/turn-control.ts +4 -4
  727. package/scripts/package/build-package.ts +31 -31
  728. package/scripts/package/host-links.mjs +3 -3
  729. package/scripts/package/publish-package.ts +29 -29
  730. package/scripts/package/ragents.mjs +19 -19
  731. package/scripts/plugin/build-builtin-plugins.ts +5 -5
  732. package/scripts/plugin/plugin-cli.ts +14 -14
  733. package/scripts/provision/run-provision.ts +14 -15
  734. package/scripts/remote/connect.ts +49 -49
  735. package/scripts/remote/start.ts +18 -18
  736. package/scripts/workspace-client/run-workspace-client.ts +23 -23
  737. package/apps/web/dist/assets/main-DnnqWHkH.js +0 -11
  738. package/apps/web/dist/assets/mermaid-HWGCJPDP-BLLeth5_.js +0 -568
  739. package/apps/web/dist/assets/runPanel-DPm7s3KM.js +0 -21
  740. package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +0 -7
  741. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +0 -2
  742. package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +0 -7
  743. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +0 -2
  744. package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +0 -7
  745. package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +0 -7
  746. package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +0 -2
  747. /package/bundles/ragents.orchestration/web/chunks/{chunk-OSKPH6SZ.js.map → chunk-CFMJD5ZI.js.map} +0 -0
  748. /package/bundles/ragents.orchestration/web/chunks/{chunk-ODMMQGX2.js.map → chunk-UCIMT2R4.js.map} +0 -0
@@ -40,9 +40,10 @@ a { color: inherit; text-underline-offset: 4px; }
40
40
  .masthead nav { display: flex; gap: 26px; align-items: center; font-weight: 600; font-size: 15px; }
41
41
  .masthead nav a { transition: color .2s, background .2s, border-color .2s; }
42
42
  .masthead nav a:not(.nav-github):hover { color: var(--accent); }
43
+ .nav-menu { display: none; }
43
44
  .nav-github { display: inline-flex; align-items: center; gap: 8px; padding: 7px 14px; border: 1.5px solid var(--line); border-radius: 8px; }
44
45
  .nav-github svg { width: 17px; height: 17px; }
45
- .nav-menu { display: none; }
46
+ .nav-icon { display: none; width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
46
47
  .nav-github:hover { background: var(--hover); }
47
48
  .chapters { position: relative; display: flex; justify-content: center; align-items: center; gap: 10px; padding: 0 16px 10px; }
48
49
  .chapters-list { display: flex; gap: 2px; min-width: 0; overflow: hidden; }
@@ -179,7 +180,7 @@ a { color: inherit; text-underline-offset: 4px; }
179
180
  .limits h2 { font-size: clamp(22px, 2vw, 26px); }
180
181
  .limits p { color: var(--muted); font-size: 15.5px; line-height: 1.7; }
181
182
  .site-footer { padding: 64px 0 32px; background: var(--deep); color: var(--muted); border-top: 1px solid var(--track); }
182
- .footer-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr; gap: 40px; padding-bottom: 44px; border-bottom: 1px solid var(--track); }
183
+ .footer-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr; gap: 40px; padding-bottom: 44px; border-bottom: 1px solid var(--track); }
183
184
  .footer-brand { display: inline-flex; align-items: center; gap: 12px; color: var(--text); font-size: 24px; font-weight: 750; letter-spacing: -.04em; text-decoration: none; }
184
185
  .footer-logo { width: 38px; height: 38px; }
185
186
  .footer-about p { max-width: 300px; margin: 14px 0 0; font-size: 15px; line-height: 1.6; }
@@ -194,11 +195,20 @@ a { color: inherit; text-underline-offset: 4px; }
194
195
  .ext-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
195
196
  .closing { grid-template-columns: 1fr; gap: 40px; }
196
197
  .closing section + section { padding: 40px 0 0; border-left: 0; border-top: 1px solid var(--track); }
197
- .footer-grid { grid-template-columns: 1fr 1fr 1fr; }
198
+ .footer-grid { grid-template-columns: 1fr 1fr; }
198
199
  .footer-about { grid-column: 1 / -1; }
199
200
  }
200
201
  @media (max-width: 860px) {
201
- .chapters .play, .end { display: none; }
202
+ .end { display: none; }
203
+ .top { display: flex; align-items: center; gap: 14px; padding: 9px 16px; }
204
+ .masthead { display: contents; }
205
+ .masthead nav { order: 2; margin-left: auto; gap: 20px; font-size: 14px; }
206
+ .nav-github { padding: 5px 11px; }
207
+ .chapters { order: 1; position: static; flex: 0 1 auto; justify-content: flex-start; gap: 8px; min-width: 0; padding: 0; }
208
+ .chapters .play { display: none; }
209
+ .chapters .chapters-toggle { flex: 0 1 auto; min-width: 0; }
210
+ .chapters[data-compact] .chapters-toggle { grid-template-columns: minmax(0, auto) auto; }
211
+ .chapters-toggle span { overflow: hidden; text-overflow: ellipsis; }
202
212
  .hero { position: relative; top: 0; }
203
213
  .lane { -webkit-mask-image: none; mask-image: none; }
204
214
  .copy[data-centered] { top: var(--intro-top, 40%); left: 16px; width: calc(100% - 32px); transform: none; }
@@ -206,8 +216,9 @@ a { color: inherit; text-underline-offset: 4px; }
206
216
  .actions { gap: 10px; margin-top: 26px; }
207
217
  .button { min-height: 44px; padding: 9px 16px; font-size: 15px; }
208
218
  .story.sr-only { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto; clip-path: none; white-space: normal; }
209
- .story article { position: relative; padding-top: 76px; scroll-margin-top: var(--top, 150px); }
210
- .story article > :not(h2, .stage) { position: absolute; top: 0; left: 0; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
219
+ .story article { position: relative; padding-top: 56px; scroll-margin-top: var(--top, 150px); }
220
+ .story article > :not(.pin, .run) { position: absolute; top: 0; left: 0; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
221
+ .pin { position: sticky; top: var(--top, 150px); padding-top: 20px; }
211
222
  .story h2 { width: calc(100% - 32px); margin: 0 auto; font-size: clamp(29px, 7.6vw, 44px); font-weight: 650; line-height: 1.06; letter-spacing: -.045em; }
212
223
  .story h2::before { content: ''; display: block; width: 34px; height: 3px; margin-bottom: 14px; border-radius: 2px; background: var(--kick); }
213
224
  .story h2 > span { display: block; text-wrap: balance; }
@@ -217,12 +228,14 @@ a { color: inherit; text-underline-offset: 4px; }
217
228
  .note, .note[data-side] { max-width: min(calc(100% - 32px), 24em); font-size: 15px; }
218
229
  }
219
230
  @media (max-width: 640px) {
220
- .masthead { padding: 10px 0 6px; }
221
- .brand { gap: 7px; font-size: 20px; }
222
- .brand-icon { width: 22px; height: 22px; }
223
- .masthead nav { gap: 16px; font-size: 14px; }
224
- .nav-github { padding: 5px 11px; }
225
- .chapters { padding-bottom: 8px; }
231
+ .top { gap: 6px; padding: 8px 12px; }
232
+ .brand-name, .nav-label, .gh-label { display: none; }
233
+ .brand-icon { width: 24px; height: 24px; }
234
+ .masthead nav { gap: 0; }
235
+ .masthead nav a { display: grid; place-items: center; width: 30px; height: 32px; border-radius: 8px; }
236
+ .nav-icon { display: block; }
237
+ .nav-github { padding: 0; border: 0; }
238
+ .nav-github svg { width: 19px; height: 19px; }
226
239
  .where-section { padding: 72px 0 8px; }
227
240
  .where-frame { margin-top: 28px; border: 0; border-radius: 0; background: none; overflow: visible; }
228
241
  .where, .where tbody, .where tr, .where th, .where td { display: block; width: auto; }
@@ -248,10 +261,10 @@ a { color: inherit; text-underline-offset: 4px; }
248
261
  <a class="skip" href="#main">Skip to content</a>
249
262
  <div class="top" data-top>
250
263
  <header class="masthead shell">
251
- <a class="brand" href="#main" aria-label="RAgents, back to top"><svg class="brand-icon" aria-hidden="true" viewBox="0 0 787 787"><path id="ragents-mark" fill="currentColor" fill-rule="evenodd" d="M368.5 750.9C366.3 750.3 358.9 749.5 352.0 749.0C334.5 747.8 322.0 743.4 307.5 733.2C296.2 725.2 206.9 639.0 201.7 630.9C200.6 629.3 199.4 623.8 198.5 617.4C197.2 607.2 196.5 596.8 194.0 550.5C193.5 540.6 192.8 531.5 192.4 530.3C192.1 529.0 189.5 526.4 186.8 524.5C179.8 519.4 178.0 515.1 178.0 502.4L178.0 492.2L175.0 491.0C170.5 489.1 161.0 478.4 156.8 470.5C146.0 449.8 138.5 409.7 139.2 375.7C139.5 357.1 140.3 354.0 146.7 344.8C149.7 340.4 149.4 339.7 142.3 334.9C135.2 330.0 134.7 328.1 134.2 306.9C133.6 281.6 134.5 280.0 151.6 277.7L160.1 276.5L159.3 268.5C157.8 253.3 158.4 210.6 160.3 198.0C167.2 153.3 183.0 118.8 207.4 95.3C239.3 64.4 297.6 42.0 359.3 37.0C375.9 35.7 410.4 35.7 426.7 37.1C490.2 42.4 550.0 66.4 582.7 99.6C606.6 123.9 623.1 163.0 628.1 206.9C629.1 215.8 628.9 264.5 627.8 274.0C627.5 276.3 627.8 276.5 635.7 277.6C653.6 280.2 656.2 286.2 653.0 316.8C651.8 328.2 650.5 330.8 643.5 336.0C640.5 338.2 638.0 340.3 638.0 340.6C638.0 340.8 639.5 343.3 641.4 346.0C647.7 355.1 648.5 359.2 648.4 380.0C648.1 433.8 633.2 480.1 612.8 490.9L608.5 493.2L608.8 501.8C609.3 513.1 607.6 517.5 600.5 523.7C593.7 529.5 593.4 530.7 592.0 559.6C589.8 605.2 588.0 625.3 585.4 630.3C582.2 636.4 502.3 715.1 484.3 729.7C469.1 742.1 452.8 748.3 430.5 750.2C413.2 751.6 373.5 752.1 368.5 750.9ZM411.7 734.7C412.4 734.3 412.6 733.0 412.1 731.2L411.4 728.5L393.2 728.2C375.6 728.0 375.0 728.0 374.9 730.0C374.8 731.1 374.7 732.5 374.6 733.2C374.5 733.9 375.6 734.7 377.0 735.1C380.2 736.1 410.1 735.7 411.7 734.7ZM361.1 715.3C363.8 704.6 366.2 696.8 367.2 695.8C368.8 694.2 371.4 694.0 393.2 694.0C406.6 694.0 418.0 694.4 418.6 694.8C420.6 696.1 421.7 699.4 425.6 715.9C428.0 726.3 429.9 732.4 430.8 732.8C435.2 734.5 460.2 724.8 467.5 718.5L470.5 716.0L467.5 717.2C462.2 719.2 446.2 718.7 440.8 716.3C435.2 713.8 433.9 711.9 429.9 700.9C423.5 683.1 417.8 669.1 416.7 668.1C415.2 666.9 377.6 665.4 373.7 666.4C369.9 667.3 368.8 669.5 360.6 690.9C356.5 701.4 352.5 711.1 351.5 712.6C348.4 717.4 342.1 719.3 330.4 718.8C324.8 718.6 320.4 718.8 320.6 719.2C321.8 721.1 335.0 727.5 342.8 730.1C357.4 734.8 356.1 735.9 361.1 715.3ZM407.3 711.0C406.8 709.0 406.1 709.0 393.1 709.2C381.1 709.5 379.5 709.7 379.2 711.2C378.9 712.9 380.1 713.0 393.3 713.0C407.4 713.0 407.8 712.9 407.3 711.0ZM337.9 700.6C338.4 700.0 341.8 691.6 345.4 682.0C353.4 660.8 355.7 656.2 359.3 653.6C362.0 651.6 363.7 651.5 392.3 651.2C432.3 650.9 429.1 649.1 439.5 677.0C443.1 686.6 446.6 695.8 447.2 697.3C447.8 698.8 449.7 700.8 451.3 701.7L454.4 703.3L451.7 700.1C447.8 695.4 446.8 690.7 447.2 678.8C447.5 668.7 447.7 667.9 450.8 663.5L454.0 658.9L454.0 645.1C454.0 621.2 457.4 606.9 464.3 601.9L468.3 599.0L464.9 599.6C463.0 600.0 460.3 601.3 458.8 602.6C455.2 605.6 451.1 606.8 441.5 607.9C437.1 608.4 431.5 609.6 429.0 610.6C424.2 612.4 414.2 612.7 376.5 611.9C360.0 611.5 358.2 611.3 354.7 609.2C351.9 607.6 349.3 607.0 345.2 607.0C337.6 607.0 332.3 605.4 327.8 601.9C325.7 600.3 322.9 599.0 321.3 599.0L318.5 599.0L321.6 600.9C328.8 605.3 331.9 617.0 332.7 643.0C333.2 657.4 333.5 659.9 335.2 662.3C342.1 672.0 341.5 690.9 334.0 700.1L331.0 703.9L333.9 702.9C335.6 702.3 337.3 701.3 337.9 700.6ZM286.2 664.0C287.6 661.5 290.8 658.1 293.2 656.3C300.5 651.1 302.7 640.5 299.5 626.0C298.7 622.4 298.1 616.0 298.0 611.7C298.0 604.3 298.2 603.7 300.9 600.9C303.5 598.4 304.6 598.0 309.7 598.0L315.5 598.0L312.2 596.3C310.4 595.5 307.7 593.3 306.1 591.5C304.5 589.7 302.2 587.9 300.9 587.5C296.2 586.1 290.2 582.0 288.2 578.8L286.1 575.5L284.7 579.0C281.7 586.4 281.7 586.8 284.7 587.2C287.3 587.5 287.5 587.8 287.8 592.9C288.0 595.9 287.6 599.5 287.0 601.0C286.0 603.3 286.5 605.2 290.0 614.6C294.1 625.2 294.2 625.8 293.8 635.0C293.4 644.0 293.0 645.3 287.3 658.5C279.2 677.0 278.3 680.6 280.7 683.2C282.5 685.2 282.5 685.0 283.0 676.9C283.4 670.2 284.0 667.6 286.2 664.0ZM506.5 677.2C505.9 674.6 502.8 666.6 499.7 659.4C490.6 638.2 490.1 632.9 495.6 617.5C497.5 612.0 500.5 603.7 502.2 599.0C505.4 590.1 505.3 587.2 502.0 578.6L500.9 575.7L498.6 579.1C496.3 582.4 487.7 588.0 484.8 588.0C484.0 588.0 482.4 589.4 481.1 591.1C479.9 592.7 477.5 594.9 475.9 595.9L472.9 597.7L478.5 598.2C489.1 599.1 491.0 605.4 487.0 626.5C484.8 638.3 484.9 640.5 487.6 649.2C488.7 652.6 490.1 654.5 492.5 656.0C499.6 660.4 504.0 669.4 504.0 679.8C504.0 685.1 504.1 685.3 505.9 683.6C507.6 682.0 507.7 681.4 506.5 677.2ZM547.0 643.3C559.3 630.8 569.8 619.1 570.5 617.5C572.0 614.0 573.5 599.2 575.1 572.5C576.9 540.7 576.0 540.1 571.6 570.5C569.5 585.4 567.1 599.1 566.3 601.0C565.4 603.2 556.0 613.2 540.4 628.5L515.8 652.5L518.4 658.7C519.8 662.2 521.0 665.7 521.0 666.5C521.0 669.4 524.5 666.3 547.0 643.3ZM267.4 659.9C268.8 656.3 270.0 652.9 270.0 652.3C270.0 651.7 259.2 640.7 245.9 627.9C232.7 615.1 221.2 603.4 220.5 601.9C219.7 600.5 217.5 588.8 215.6 575.9C209.8 537.9 210.0 538.8 210.6 554.0C211.3 573.9 213.9 607.7 215.1 613.6C216.0 618.5 217.0 619.6 240.2 642.8C253.5 656.1 264.4 666.9 264.6 666.7C264.7 666.6 265.9 663.5 267.4 659.9ZM531.9 606.2C532.5 603.2 533.0 598.9 533.0 596.8L533.0 593.0L527.0 593.0C521.3 593.0 521.0 593.1 521.0 595.5C521.0 596.9 518.3 605.3 515.1 614.3C511.8 623.2 508.9 631.4 508.5 632.5C508.1 633.6 512.9 629.4 519.3 623.1C530.2 612.3 530.8 611.5 531.9 606.2ZM272.5 617.4C269.4 609.2 266.6 600.4 266.3 597.8L265.7 593.0L259.9 593.0C256.7 593.0 253.9 593.4 253.6 593.9C253.2 594.4 253.5 598.4 254.1 602.7L255.3 610.5L266.3 621.7C272.4 627.9 277.5 632.8 277.7 632.6C277.9 632.4 275.5 625.6 272.5 617.4ZM417.7 596.4C422.2 595.5 423.0 593.5 423.0 583.0L423.0 573.2L413.2 573.7C399.8 574.4 400.9 573.3 401.2 585.2C401.5 595.0 401.6 595.5 404.0 596.7C406.3 597.9 411.1 597.8 417.7 596.4ZM384.2 595.3C386.4 593.3 386.9 575.2 384.8 574.5C384.1 574.3 378.9 573.9 373.2 573.5L363.0 572.9L363.0 581.4C363.0 594.7 364.8 596.8 376.4 596.9C380.6 597.0 382.9 596.5 384.2 595.3ZM240.3 574.9C241.2 571.9 243.6 566.8 245.6 563.5L249.2 557.5L248.0 550.0C245.6 534.6 238.0 490.3 236.9 485.2L235.9 480.0L230.9 480.0C223.9 480.0 219.4 477.8 212.5 471.0L206.5 465.1L206.4 471.9L206.3 478.8L210.2 479.3C223.5 481.1 230.3 496.7 225.4 514.1C223.9 519.4 223.9 520.6 226.0 535.1C231.4 573.4 234.2 589.6 235.8 592.0C237.5 594.5 237.5 594.4 238.1 587.4C238.5 583.5 239.5 577.9 240.3 574.9ZM552.0 589.2C552.6 587.2 555.3 570.5 558.0 552.2C562.6 520.3 562.8 518.7 561.3 514.4C559.0 507.6 559.9 493.6 562.9 488.6C565.9 483.9 571.7 480.0 576.9 479.3L581.0 478.7L581.0 471.6L581.0 464.5L575.7 470.1C568.4 477.9 565.9 479.3 557.7 479.9L550.6 480.5L548.8 490.5C547.8 496.0 544.8 513.3 542.1 529.0L537.1 557.5L540.0 561.9C545.0 569.4 548.7 582.3 549.0 592.8C549.0 595.2 550.9 593.0 552.0 589.2ZM447.0 588.5C449.2 586.2 449.5 585.0 449.9 576.9L450.2 567.9L446.4 568.6C437.7 570.2 438.0 569.7 438.0 581.6L438.0 592.2L441.2 591.6C443.0 591.2 445.6 589.8 447.0 588.5ZM348.0 580.6C348.0 569.1 348.5 569.8 340.6 568.4L336.8 567.7L337.1 577.0C337.5 585.6 337.7 586.3 340.3 588.6C341.8 589.9 344.2 591.0 345.6 591.0C348.0 591.0 348.0 591.0 348.0 580.6ZM467.9 578.7C469.3 576.6 470.8 561.0 469.7 561.0C469.4 561.0 467.9 561.5 466.5 562.2C464.1 563.3 464.0 563.6 464.0 572.6C464.0 582.4 464.8 583.7 467.9 578.7ZM321.8 562.5C321.6 562.4 320.4 561.9 319.1 561.5L316.8 560.8L317.1 568.8C317.4 575.0 317.9 577.3 319.5 579.0L321.5 581.2L321.8 572.0C321.9 566.9 321.9 562.6 321.8 562.5ZM267.9 575.0C268.9 571.9 268.4 566.0 267.0 566.0C266.1 566.0 259.0 575.0 259.0 576.1C259.0 576.9 261.4 577.7 264.7 577.9C266.2 578.0 267.1 577.1 267.9 575.0ZM527.4 577.2C528.1 576.0 520.8 566.0 519.5 566.4C518.1 566.8 517.7 572.1 518.9 575.3C519.8 577.5 520.6 578.0 523.4 578.0C525.3 578.0 527.1 577.6 527.4 577.2ZM487.0 558.2C487.0 554.3 486.6 552.9 485.8 553.2C484.9 553.5 484.4 556.2 484.3 561.1C484.0 568.0 484.1 568.3 485.5 566.0C486.3 564.6 486.9 561.1 487.0 558.2ZM302.0 559.5C302.0 555.8 301.6 553.0 301.0 553.0C299.9 553.0 299.7 560.1 300.6 563.8C301.6 567.5 302.0 566.3 302.0 559.5ZM284.6 548.2C283.2 522.4 282.9 499.0 284.0 497.1C286.5 492.4 297.7 490.6 306.6 493.5C308.5 494.1 308.8 493.3 311.5 481.8C314.8 467.9 314.8 467.1 312.4 463.5C309.3 458.7 308.6 458.7 288.4 465.2C278.0 468.5 269.1 471.5 268.7 472.0C268.2 472.4 271.3 491.9 275.4 515.4C279.6 538.9 283.0 558.3 283.0 558.5C283.0 558.8 283.5 559.0 284.1 559.0C284.8 559.0 284.9 555.5 284.6 548.2ZM385.8 550.0C386.5 531.9 384.1 527.7 372.5 526.5C366.5 525.8 365.5 526.0 364.3 527.6C362.5 530.1 362.4 554.3 364.2 555.8C365.7 556.9 377.9 558.9 382.5 558.6L385.5 558.5L385.8 550.0ZM419.8 557.1L422.5 556.4L422.8 542.6C423.1 525.9 422.9 525.6 415.1 526.5C402.6 527.9 401.0 530.3 401.0 547.5L401.0 559.2L409.1 558.5C413.6 558.1 418.4 557.5 419.8 557.1ZM506.4 542.8C507.9 533.8 511.4 514.4 514.1 499.5C516.8 484.7 518.6 472.3 518.2 471.9C517.8 471.5 509.0 468.5 498.6 465.1C484.4 460.6 479.2 459.3 477.9 460.1C475.5 461.3 473.0 466.2 473.0 469.5C473.0 471.7 477.0 489.5 478.5 493.7C478.8 494.6 479.7 494.6 482.4 493.5C489.8 490.4 500.0 492.2 502.5 497.1C504.5 500.8 504.6 534.2 502.7 537.9C501.4 540.5 501.5 559.0 502.9 559.0C503.3 559.0 504.9 551.7 506.4 542.8ZM347.5 526.3C346.8 523.5 339.6 521.0 337.7 522.9C336.0 524.6 335.4 546.6 337.0 548.5C337.7 549.4 340.3 550.6 342.9 551.4L347.5 552.7L347.8 540.6C347.9 533.9 347.8 527.5 347.5 526.3ZM444.1 551.9C449.6 550.0 449.8 549.5 450.2 536.3C450.5 522.1 450.1 521.2 444.3 523.0C438.4 524.9 438.0 525.9 438.0 540.2C438.0 554.2 437.9 553.9 444.1 551.9ZM471.4 539.5C472.2 537.3 472.2 517.5 471.3 516.7C470.9 516.3 469.4 517.2 467.8 518.7C465.1 521.3 465.0 521.6 465.0 532.7L465.0 544.1L467.9 542.6C469.5 541.7 471.0 540.3 471.4 539.5ZM318.9 518.4C317.6 517.1 316.3 516.0 315.8 516.0C314.8 516.0 314.7 538.1 315.8 539.6C316.2 540.2 317.4 541.2 318.5 541.8C320.4 542.8 320.5 542.5 320.8 531.8C321.0 521.5 320.9 520.5 318.9 518.4ZM488.8 518.7C489.0 510.2 488.9 509.7 487.6 512.0C485.6 515.3 485.3 531.1 487.2 529.2C488.0 528.4 488.6 524.4 488.8 518.7ZM299.1 511.2C298.3 510.0 298.1 511.5 298.0 517.2C298.0 527.7 299.4 530.6 299.8 520.7C300.0 516.5 299.6 512.2 299.1 511.2ZM408.2 511.5C414.4 510.7 421.8 510.0 424.5 510.0C427.2 510.0 432.4 509.1 435.8 508.0C439.3 506.9 445.0 506.0 448.5 506.0C452.6 506.0 455.1 505.5 455.9 504.6C456.5 503.8 458.3 502.7 459.9 502.0L462.7 500.9L460.3 491.2C457.5 479.5 456.3 463.2 457.9 457.3C460.5 448.0 467.9 443.1 479.6 443.0C485.7 443.0 489.8 444.0 507.1 449.6C540.9 460.4 554.0 464.1 555.8 463.1C556.8 462.6 565.1 454.5 574.3 445.2C586.8 432.6 590.9 427.9 590.4 426.6C589.8 425.1 589.5 425.1 588.1 426.3C585.0 429.1 572.0 435.0 564.8 436.9C540.1 443.5 497.9 443.1 473.8 435.9C438.4 425.4 417.1 399.2 405.0 351.2C403.6 345.9 400.2 343.5 393.9 343.5C386.0 343.5 384.3 345.6 379.9 360.1C362.0 419.5 331.1 442.0 267.3 442.0C237.5 442.0 213.7 436.7 199.8 426.8C197.0 424.9 197.0 424.9 197.0 426.9C197.0 428.9 227.3 461.0 231.1 463.1C232.9 464.0 251.2 458.9 288.3 447.1C302.2 442.6 312.1 441.7 318.3 444.4C322.6 446.1 327.6 452.0 328.9 456.7C331.3 465.2 329.4 483.0 324.4 499.2C324.1 500.4 324.4 501.0 325.3 501.0C326.1 501.0 327.9 501.9 329.3 503.0C331.0 504.4 333.3 505.0 336.8 505.0C339.5 505.0 345.7 506.1 350.4 507.5C355.2 508.9 361.6 510.0 364.9 510.0C371.8 510.0 389.3 512.5 391.7 513.9C392.8 514.5 394.1 514.5 395.2 513.9C396.1 513.4 401.9 512.3 408.2 511.5ZM366.2 486.0C361.0 484.8 359.6 482.8 353.6 468.6C345.8 450.0 345.8 449.6 355.9 424.9C370.3 389.6 375.9 376.7 377.5 375.1C378.7 373.8 382.0 373.4 392.9 373.2C406.2 372.9 406.8 372.9 409.3 375.2C411.1 376.8 415.9 387.4 425.4 410.9C442.1 451.9 441.8 449.5 432.9 469.8C425.9 485.9 425.7 486.0 413.5 486.8C404.6 487.3 405.2 487.6 398.5 479.2C394.6 474.5 392.1 475.0 386.5 481.5L381.8 487.0L375.7 486.9C372.3 486.8 368.0 486.4 366.2 486.0ZM190.6 468.1C188.8 454.9 177.0 428.2 169.5 420.3C165.1 415.8 165.0 415.7 163.0 417.5C159.8 420.4 159.8 422.1 163.0 434.6C167.3 451.4 173.3 463.5 181.1 471.2L187.2 477.4L189.2 475.0C190.8 473.0 191.1 471.6 190.6 468.1ZM607.1 471.1C615.1 462.8 624.5 440.6 626.6 425.2C627.1 421.4 626.8 420.0 625.3 418.1C623.4 415.8 623.3 415.8 620.7 417.5C611.3 423.6 593.7 465.1 597.1 473.2C598.8 477.3 601.7 476.7 607.1 471.1ZM382.5 461.4L385.9 460.8L386.2 451.6L386.5 442.5L393.5 442.5L400.5 442.5L401.0 451.4C401.5 460.3 401.5 460.4 404.4 461.1C406.0 461.6 408.8 463.4 410.6 465.1C412.5 466.9 414.2 468.2 414.4 467.9C414.6 467.7 416.4 463.5 418.4 458.7L422.1 449.8L410.4 421.2C396.1 385.9 397.7 388.8 393.4 389.2C389.3 389.5 390.6 387.0 374.5 426.7L365.1 449.9L368.1 457.2C369.8 461.2 371.6 465.5 372.1 466.8C373.0 469.1 373.0 469.1 376.1 465.6C378.0 463.4 380.4 461.8 382.5 461.4ZM172.2 391.0C165.9 377.7 165.8 377.6 158.5 381.9C155.6 383.6 155.5 383.9 155.8 389.6C156.3 400.4 155.9 400.0 164.8 400.0C171.5 400.0 173.3 400.4 177.7 402.9C177.8 403.0 175.3 397.6 172.2 391.0ZM623.3 400.0L630.7 400.0L631.4 395.4C632.8 384.6 632.5 383.7 626.7 380.8L621.5 378.2L615.5 390.5L609.5 402.8L612.7 401.4C614.5 400.6 619.3 400.0 623.3 400.0ZM609.6 357.0C618.5 333.9 621.0 329.6 629.5 322.7C636.4 317.2 636.5 317.0 637.4 306.5C638.4 294.2 638.6 294.4 611.4 291.5C586.2 288.9 551.7 289.9 516.6 294.3C507.3 295.4 508.8 295.5 540.1 295.5C568.5 295.5 574.5 295.8 580.2 297.2C593.1 300.5 599.9 305.1 604.3 313.4C606.2 316.9 606.5 319.5 606.8 332.2C607.2 348.3 605.2 362.2 600.6 375.6C599.3 379.4 597.9 383.4 597.5 384.5C594.8 392.9 603.3 373.5 609.6 357.0ZM187.5 377.9C182.9 365.1 180.6 351.7 180.6 336.0C180.5 313.9 183.5 307.2 196.4 301.1C207.4 295.8 217.4 294.7 251.0 295.2L280.5 295.5L266.5 293.8C244.1 291.1 226.7 290.0 207.4 290.0C184.6 290.0 153.3 293.3 150.6 296.0C149.4 297.2 149.7 311.4 151.1 315.7C151.6 317.4 153.3 319.6 154.7 320.5C164.9 327.2 169.0 333.8 177.6 356.9C182.9 371.1 189.0 385.3 189.6 384.7C189.8 384.6 188.8 381.5 187.5 377.9ZM430.5 368.4C425.2 352.0 424.3 327.1 428.8 319.7C433.0 313.0 441.1 308.7 457.5 304.4C470.5 301.1 466.7 301.5 440.1 306.2C417.0 310.4 416.1 310.5 394.0 310.5C372.0 310.5 371.0 310.4 347.7 306.2C320.6 301.4 317.7 301.1 330.9 304.5C349.1 309.2 357.7 315.0 360.5 324.4C363.3 333.8 361.6 355.1 357.0 368.4C355.9 371.7 355.2 374.5 355.4 374.7C355.9 375.3 362.6 357.2 365.0 348.5C370.0 330.4 374.6 327.0 394.0 327.0C412.4 327.0 417.6 330.8 422.0 347.2C424.2 355.4 431.9 376.4 432.5 375.8C432.7 375.6 431.8 372.3 430.5 368.4ZM155.8 316.0C153.2 314.0 153.0 313.3 153.0 307.2C153.0 297.4 154.7 296.0 166.3 296.0C177.0 296.0 179.0 297.7 179.0 306.9C179.0 316.1 177.6 317.4 166.6 317.8C159.5 318.1 158.2 317.9 155.8 316.0ZM612.5 316.8C609.0 314.9 608.0 312.8 608.0 306.9C608.0 297.7 609.6 296.5 621.5 296.5C630.5 296.5 631.3 296.7 633.1 298.9C636.9 303.5 635.2 314.7 630.3 316.9C627.2 318.3 615.1 318.3 612.5 316.8ZM409.4 293.9C409.7 293.7 410.3 289.8 410.9 285.2C412.9 269.2 416.5 266.2 448.6 253.5C489.0 237.5 529.6 225.0 541.3 225.0L545.5 225.0L550.3 196.4C553.0 180.7 554.9 167.5 554.6 167.2C554.3 166.9 554.0 167.8 554.0 169.2C554.0 173.3 549.8 180.1 546.0 182.1C539.3 185.7 518.3 184.3 509.4 179.7C505.1 177.5 500.3 171.7 499.1 167.3C497.2 160.6 497.8 137.8 500.2 123.5C502.2 111.0 502.3 110.6 500.5 109.5C499.5 109.0 497.0 107.1 495.1 105.3C491.5 102.2 491.5 102.1 491.5 94.2C491.5 81.0 495.3 77.5 508.7 78.2C517.9 78.6 521.0 81.2 521.0 88.4C521.0 98.4 521.1 98.5 534.3 105.1C557.6 116.8 558.0 117.3 558.0 133.8C558.0 140.0 557.5 148.2 556.9 152.1C554.7 166.6 556.7 160.4 559.9 142.8C563.7 122.4 564.0 121.6 568.2 118.0L571.2 115.4L563.7 108.3C545.4 90.9 514.8 74.9 480.1 64.6L475.0 63.1L469.7 73.8L464.4 84.5L467.7 90.5C472.8 99.9 472.5 102.0 461.7 134.5C450.7 167.5 450.1 168.6 441.5 177.0L434.9 183.5L428.7 183.5C425.3 183.5 406.8 183.4 387.7 183.2L352.8 183.0L346.4 176.8C342.8 173.4 339.1 169.2 338.0 167.5C337.0 165.8 331.8 151.6 326.6 136.0C315.4 102.9 315.0 99.9 320.0 90.0L323.0 84.1L318.0 73.6C314.4 65.9 312.6 63.0 311.3 63.0C310.3 63.0 303.0 65.2 295.0 67.9C263.2 78.5 239.2 91.8 220.8 108.8L215.0 114.2L219.1 117.9C222.9 121.2 223.3 122.2 225.1 130.9C227.3 141.7 238.3 203.4 240.2 216.0L241.5 224.5L246.0 224.8C258.3 225.5 266.7 227.5 297.5 237.7C320.3 245.2 340.6 253.0 355.8 260.1C371.7 267.5 375.3 272.2 376.7 287.4C377.2 293.4 377.5 293.9 379.9 294.4C383.3 294.9 408.7 294.6 409.4 293.9ZM361.0 289.8C361.0 289.1 360.0 286.7 358.7 284.5C356.1 279.7 347.1 274.9 324.0 265.7C298.1 255.5 252.9 241.0 246.8 241.0C241.7 241.0 214.0 267.6 214.0 272.6C214.0 273.3 219.2 273.9 229.5 274.4C257.6 275.6 302.8 281.0 341.5 287.9C360.5 291.3 361.0 291.4 361.0 289.8ZM447.8 287.5C493.8 279.8 529.3 275.6 557.5 274.4C566.0 274.0 573.0 273.4 573.0 273.0C573.0 269.2 569.4 264.8 556.8 253.5L542.7 240.8L538.6 241.4C526.1 243.4 453.0 269.3 437.2 277.4C431.5 280.3 428.2 283.7 427.0 287.8C426.5 289.6 426.4 291.0 426.7 291.0C426.9 291.0 436.5 289.4 447.8 287.5ZM192.0 274.0L197.7 274.0L198.4 268.1C198.8 264.9 200.0 259.7 201.0 256.6C206.3 241.7 199.6 182.4 191.5 172.4L189.1 169.5L186.1 172.5C178.1 180.3 171.8 228.4 174.9 257.5C176.9 276.3 176.5 275.3 181.8 274.6C184.3 274.3 188.9 274.0 192.0 274.0ZM610.4 272.8C614.9 252.2 613.5 212.8 607.4 188.0C603.6 172.7 600.2 168.0 596.1 172.4C587.2 181.8 580.7 242.9 586.8 259.7C588.0 263.1 589.0 267.7 589.0 269.9L589.0 273.9L596.8 274.3C601.0 274.4 605.7 274.7 607.2 274.8C609.3 275.0 610.1 274.5 610.4 272.8ZM360.2 257.2C359.1 256.3 355.5 251.0 352.1 245.6C346.9 237.1 346.0 235.0 346.0 230.9C346.0 224.7 347.7 223.0 353.8 223.0C359.8 223.0 359.6 222.8 366.4 233.8L372.3 243.0L393.7 243.0L415.0 243.0L417.8 238.4C425.5 225.3 427.2 223.5 432.2 223.2C439.5 222.7 441.0 224.0 441.0 230.7C441.0 235.9 440.5 237.0 434.4 246.7C430.7 252.4 426.9 257.5 425.9 258.0C424.9 258.6 411.2 259.0 393.2 259.0C365.1 259.0 362.0 258.8 360.2 257.2ZM224.9 233.7C226.0 232.3 225.4 221.0 224.3 221.0C224.0 221.0 222.5 221.9 220.9 223.1C218.2 225.0 218.0 225.6 218.0 232.1L218.0 239.1L220.8 237.1C222.4 236.0 224.2 234.5 224.9 233.7ZM566.3 223.4C563.1 220.8 562.6 221.3 561.6 228.0C560.9 232.2 561.1 232.6 564.7 235.6L568.5 238.8L568.8 232.2C569.1 226.1 568.9 225.5 566.3 223.4ZM220.3 196.7C208.7 128.4 207.3 123.9 200.9 134.3C198.1 138.6 191.0 152.5 191.0 153.5C191.0 153.8 192.5 154.0 194.4 154.0C204.6 154.0 211.4 167.1 215.1 194.3L216.3 203.1L218.5 201.0C219.9 199.7 220.6 198.1 220.3 196.7ZM575.1 178.5C579.2 161.4 584.8 154.0 593.6 154.0L596.0 154.0L592.9 147.8C591.2 144.3 588.2 138.9 586.3 135.7L582.8 129.9L580.5 132.0C578.1 134.3 577.0 138.9 570.0 178.5C566.5 198.4 566.5 198.8 568.7 201.3C570.4 203.1 570.5 202.9 571.7 195.4C572.4 191.0 574.0 183.4 575.1 178.5ZM244.5 183.0C240.8 181.9 237.5 179.0 235.5 175.0C233.3 170.8 230.0 150.4 229.3 136.9C228.3 118.2 229.9 116.2 256.1 103.5C261.2 101.0 265.7 98.4 266.2 97.7C266.6 97.1 267.0 93.5 267.0 89.8C267.0 83.6 267.2 83.0 270.1 80.6C272.8 78.3 274.0 78.0 281.4 78.0C290.7 78.0 293.4 79.2 295.6 84.6C299.1 93.0 296.4 103.6 289.7 108.0C286.1 110.3 285.9 110.7 286.4 114.0C290.5 138.3 290.9 160.2 287.5 168.7C283.8 178.0 273.7 183.0 257.5 183.6C252.0 183.8 246.1 183.5 244.5 183.0ZM536.1 166.4L538.5 163.8L532.0 157.7C528.4 154.3 522.7 150.0 519.2 148.2L513.0 144.9L513.0 149.7C513.1 159.3 517.4 164.9 526.7 167.5C533.3 169.3 533.4 169.3 536.1 166.4ZM265.3 165.2C268.1 164.0 270.7 161.9 271.9 160.0C274.0 156.5 275.6 147.2 274.3 145.9C273.0 144.6 261.5 151.6 254.9 157.7L248.9 163.3L251.2 165.7C253.9 168.6 257.9 168.5 265.3 165.2ZM430.8 161.6L436.8 155.2L445.4 129.2L454.1 103.1L452.1 99.3C448.2 91.6 448.8 91.9 431.9 90.4C408.2 88.3 353.5 89.0 341.5 91.5C340.3 91.7 338.3 94.1 336.6 97.3L333.7 102.6L342.0 127.6C350.9 154.6 351.7 156.4 358.2 162.7L362.5 167.0L385.0 167.3C397.4 167.4 411.4 167.6 416.1 167.8L424.8 168.0L430.8 161.6ZM263.2 130.7C271.9 126.6 272.0 126.5 271.5 123.5C270.1 116.5 270.8 116.6 259.7 122.1C246.1 128.9 245.0 130.0 245.0 136.7L245.0 142.0L249.7 138.4C252.2 136.5 258.3 133.0 263.2 130.7ZM542.9 134.7C543.0 130.9 540.2 128.6 528.7 122.5C518.3 117.1 517.6 117.1 516.7 123.2L516.1 127.0L523.4 130.3C527.4 132.2 533.1 135.3 536.1 137.4C542.0 141.3 542.8 141.0 542.9 134.7ZM367.6 73.9C392.0 72.8 436.6 73.8 445.9 75.6C448.5 76.1 448.8 75.8 452.4 67.6C454.6 62.8 456.1 58.8 455.9 58.6C455.0 57.7 428.4 54.0 415.5 52.9C393.1 51.0 358.3 52.9 337.0 57.1C333.7 57.7 331.0 58.4 331.0 58.5C331.0 58.6 332.8 62.6 335.1 67.4C337.8 73.2 339.6 76.0 340.5 75.6C341.2 75.4 353.4 74.6 367.6 73.9Z"/></svg>RAgents</a>
264
+ <a class="brand" href="#main" aria-label="RAgents, back to top"><svg class="brand-icon" aria-hidden="true" viewBox="0 0 787 787"><path id="ragents-mark" fill="currentColor" fill-rule="evenodd" d="M368.5 750.9C366.3 750.3 358.9 749.5 352.0 749.0C334.5 747.8 322.0 743.4 307.5 733.2C296.2 725.2 206.9 639.0 201.7 630.9C200.6 629.3 199.4 623.8 198.5 617.4C197.2 607.2 196.5 596.8 194.0 550.5C193.5 540.6 192.8 531.5 192.4 530.3C192.1 529.0 189.5 526.4 186.8 524.5C179.8 519.4 178.0 515.1 178.0 502.4L178.0 492.2L175.0 491.0C170.5 489.1 161.0 478.4 156.8 470.5C146.0 449.8 138.5 409.7 139.2 375.7C139.5 357.1 140.3 354.0 146.7 344.8C149.7 340.4 149.4 339.7 142.3 334.9C135.2 330.0 134.7 328.1 134.2 306.9C133.6 281.6 134.5 280.0 151.6 277.7L160.1 276.5L159.3 268.5C157.8 253.3 158.4 210.6 160.3 198.0C167.2 153.3 183.0 118.8 207.4 95.3C239.3 64.4 297.6 42.0 359.3 37.0C375.9 35.7 410.4 35.7 426.7 37.1C490.2 42.4 550.0 66.4 582.7 99.6C606.6 123.9 623.1 163.0 628.1 206.9C629.1 215.8 628.9 264.5 627.8 274.0C627.5 276.3 627.8 276.5 635.7 277.6C653.6 280.2 656.2 286.2 653.0 316.8C651.8 328.2 650.5 330.8 643.5 336.0C640.5 338.2 638.0 340.3 638.0 340.6C638.0 340.8 639.5 343.3 641.4 346.0C647.7 355.1 648.5 359.2 648.4 380.0C648.1 433.8 633.2 480.1 612.8 490.9L608.5 493.2L608.8 501.8C609.3 513.1 607.6 517.5 600.5 523.7C593.7 529.5 593.4 530.7 592.0 559.6C589.8 605.2 588.0 625.3 585.4 630.3C582.2 636.4 502.3 715.1 484.3 729.7C469.1 742.1 452.8 748.3 430.5 750.2C413.2 751.6 373.5 752.1 368.5 750.9ZM411.7 734.7C412.4 734.3 412.6 733.0 412.1 731.2L411.4 728.5L393.2 728.2C375.6 728.0 375.0 728.0 374.9 730.0C374.8 731.1 374.7 732.5 374.6 733.2C374.5 733.9 375.6 734.7 377.0 735.1C380.2 736.1 410.1 735.7 411.7 734.7ZM361.1 715.3C363.8 704.6 366.2 696.8 367.2 695.8C368.8 694.2 371.4 694.0 393.2 694.0C406.6 694.0 418.0 694.4 418.6 694.8C420.6 696.1 421.7 699.4 425.6 715.9C428.0 726.3 429.9 732.4 430.8 732.8C435.2 734.5 460.2 724.8 467.5 718.5L470.5 716.0L467.5 717.2C462.2 719.2 446.2 718.7 440.8 716.3C435.2 713.8 433.9 711.9 429.9 700.9C423.5 683.1 417.8 669.1 416.7 668.1C415.2 666.9 377.6 665.4 373.7 666.4C369.9 667.3 368.8 669.5 360.6 690.9C356.5 701.4 352.5 711.1 351.5 712.6C348.4 717.4 342.1 719.3 330.4 718.8C324.8 718.6 320.4 718.8 320.6 719.2C321.8 721.1 335.0 727.5 342.8 730.1C357.4 734.8 356.1 735.9 361.1 715.3ZM407.3 711.0C406.8 709.0 406.1 709.0 393.1 709.2C381.1 709.5 379.5 709.7 379.2 711.2C378.9 712.9 380.1 713.0 393.3 713.0C407.4 713.0 407.8 712.9 407.3 711.0ZM337.9 700.6C338.4 700.0 341.8 691.6 345.4 682.0C353.4 660.8 355.7 656.2 359.3 653.6C362.0 651.6 363.7 651.5 392.3 651.2C432.3 650.9 429.1 649.1 439.5 677.0C443.1 686.6 446.6 695.8 447.2 697.3C447.8 698.8 449.7 700.8 451.3 701.7L454.4 703.3L451.7 700.1C447.8 695.4 446.8 690.7 447.2 678.8C447.5 668.7 447.7 667.9 450.8 663.5L454.0 658.9L454.0 645.1C454.0 621.2 457.4 606.9 464.3 601.9L468.3 599.0L464.9 599.6C463.0 600.0 460.3 601.3 458.8 602.6C455.2 605.6 451.1 606.8 441.5 607.9C437.1 608.4 431.5 609.6 429.0 610.6C424.2 612.4 414.2 612.7 376.5 611.9C360.0 611.5 358.2 611.3 354.7 609.2C351.9 607.6 349.3 607.0 345.2 607.0C337.6 607.0 332.3 605.4 327.8 601.9C325.7 600.3 322.9 599.0 321.3 599.0L318.5 599.0L321.6 600.9C328.8 605.3 331.9 617.0 332.7 643.0C333.2 657.4 333.5 659.9 335.2 662.3C342.1 672.0 341.5 690.9 334.0 700.1L331.0 703.9L333.9 702.9C335.6 702.3 337.3 701.3 337.9 700.6ZM286.2 664.0C287.6 661.5 290.8 658.1 293.2 656.3C300.5 651.1 302.7 640.5 299.5 626.0C298.7 622.4 298.1 616.0 298.0 611.7C298.0 604.3 298.2 603.7 300.9 600.9C303.5 598.4 304.6 598.0 309.7 598.0L315.5 598.0L312.2 596.3C310.4 595.5 307.7 593.3 306.1 591.5C304.5 589.7 302.2 587.9 300.9 587.5C296.2 586.1 290.2 582.0 288.2 578.8L286.1 575.5L284.7 579.0C281.7 586.4 281.7 586.8 284.7 587.2C287.3 587.5 287.5 587.8 287.8 592.9C288.0 595.9 287.6 599.5 287.0 601.0C286.0 603.3 286.5 605.2 290.0 614.6C294.1 625.2 294.2 625.8 293.8 635.0C293.4 644.0 293.0 645.3 287.3 658.5C279.2 677.0 278.3 680.6 280.7 683.2C282.5 685.2 282.5 685.0 283.0 676.9C283.4 670.2 284.0 667.6 286.2 664.0ZM506.5 677.2C505.9 674.6 502.8 666.6 499.7 659.4C490.6 638.2 490.1 632.9 495.6 617.5C497.5 612.0 500.5 603.7 502.2 599.0C505.4 590.1 505.3 587.2 502.0 578.6L500.9 575.7L498.6 579.1C496.3 582.4 487.7 588.0 484.8 588.0C484.0 588.0 482.4 589.4 481.1 591.1C479.9 592.7 477.5 594.9 475.9 595.9L472.9 597.7L478.5 598.2C489.1 599.1 491.0 605.4 487.0 626.5C484.8 638.3 484.9 640.5 487.6 649.2C488.7 652.6 490.1 654.5 492.5 656.0C499.6 660.4 504.0 669.4 504.0 679.8C504.0 685.1 504.1 685.3 505.9 683.6C507.6 682.0 507.7 681.4 506.5 677.2ZM547.0 643.3C559.3 630.8 569.8 619.1 570.5 617.5C572.0 614.0 573.5 599.2 575.1 572.5C576.9 540.7 576.0 540.1 571.6 570.5C569.5 585.4 567.1 599.1 566.3 601.0C565.4 603.2 556.0 613.2 540.4 628.5L515.8 652.5L518.4 658.7C519.8 662.2 521.0 665.7 521.0 666.5C521.0 669.4 524.5 666.3 547.0 643.3ZM267.4 659.9C268.8 656.3 270.0 652.9 270.0 652.3C270.0 651.7 259.2 640.7 245.9 627.9C232.7 615.1 221.2 603.4 220.5 601.9C219.7 600.5 217.5 588.8 215.6 575.9C209.8 537.9 210.0 538.8 210.6 554.0C211.3 573.9 213.9 607.7 215.1 613.6C216.0 618.5 217.0 619.6 240.2 642.8C253.5 656.1 264.4 666.9 264.6 666.7C264.7 666.6 265.9 663.5 267.4 659.9ZM531.9 606.2C532.5 603.2 533.0 598.9 533.0 596.8L533.0 593.0L527.0 593.0C521.3 593.0 521.0 593.1 521.0 595.5C521.0 596.9 518.3 605.3 515.1 614.3C511.8 623.2 508.9 631.4 508.5 632.5C508.1 633.6 512.9 629.4 519.3 623.1C530.2 612.3 530.8 611.5 531.9 606.2ZM272.5 617.4C269.4 609.2 266.6 600.4 266.3 597.8L265.7 593.0L259.9 593.0C256.7 593.0 253.9 593.4 253.6 593.9C253.2 594.4 253.5 598.4 254.1 602.7L255.3 610.5L266.3 621.7C272.4 627.9 277.5 632.8 277.7 632.6C277.9 632.4 275.5 625.6 272.5 617.4ZM417.7 596.4C422.2 595.5 423.0 593.5 423.0 583.0L423.0 573.2L413.2 573.7C399.8 574.4 400.9 573.3 401.2 585.2C401.5 595.0 401.6 595.5 404.0 596.7C406.3 597.9 411.1 597.8 417.7 596.4ZM384.2 595.3C386.4 593.3 386.9 575.2 384.8 574.5C384.1 574.3 378.9 573.9 373.2 573.5L363.0 572.9L363.0 581.4C363.0 594.7 364.8 596.8 376.4 596.9C380.6 597.0 382.9 596.5 384.2 595.3ZM240.3 574.9C241.2 571.9 243.6 566.8 245.6 563.5L249.2 557.5L248.0 550.0C245.6 534.6 238.0 490.3 236.9 485.2L235.9 480.0L230.9 480.0C223.9 480.0 219.4 477.8 212.5 471.0L206.5 465.1L206.4 471.9L206.3 478.8L210.2 479.3C223.5 481.1 230.3 496.7 225.4 514.1C223.9 519.4 223.9 520.6 226.0 535.1C231.4 573.4 234.2 589.6 235.8 592.0C237.5 594.5 237.5 594.4 238.1 587.4C238.5 583.5 239.5 577.9 240.3 574.9ZM552.0 589.2C552.6 587.2 555.3 570.5 558.0 552.2C562.6 520.3 562.8 518.7 561.3 514.4C559.0 507.6 559.9 493.6 562.9 488.6C565.9 483.9 571.7 480.0 576.9 479.3L581.0 478.7L581.0 471.6L581.0 464.5L575.7 470.1C568.4 477.9 565.9 479.3 557.7 479.9L550.6 480.5L548.8 490.5C547.8 496.0 544.8 513.3 542.1 529.0L537.1 557.5L540.0 561.9C545.0 569.4 548.7 582.3 549.0 592.8C549.0 595.2 550.9 593.0 552.0 589.2ZM447.0 588.5C449.2 586.2 449.5 585.0 449.9 576.9L450.2 567.9L446.4 568.6C437.7 570.2 438.0 569.7 438.0 581.6L438.0 592.2L441.2 591.6C443.0 591.2 445.6 589.8 447.0 588.5ZM348.0 580.6C348.0 569.1 348.5 569.8 340.6 568.4L336.8 567.7L337.1 577.0C337.5 585.6 337.7 586.3 340.3 588.6C341.8 589.9 344.2 591.0 345.6 591.0C348.0 591.0 348.0 591.0 348.0 580.6ZM467.9 578.7C469.3 576.6 470.8 561.0 469.7 561.0C469.4 561.0 467.9 561.5 466.5 562.2C464.1 563.3 464.0 563.6 464.0 572.6C464.0 582.4 464.8 583.7 467.9 578.7ZM321.8 562.5C321.6 562.4 320.4 561.9 319.1 561.5L316.8 560.8L317.1 568.8C317.4 575.0 317.9 577.3 319.5 579.0L321.5 581.2L321.8 572.0C321.9 566.9 321.9 562.6 321.8 562.5ZM267.9 575.0C268.9 571.9 268.4 566.0 267.0 566.0C266.1 566.0 259.0 575.0 259.0 576.1C259.0 576.9 261.4 577.7 264.7 577.9C266.2 578.0 267.1 577.1 267.9 575.0ZM527.4 577.2C528.1 576.0 520.8 566.0 519.5 566.4C518.1 566.8 517.7 572.1 518.9 575.3C519.8 577.5 520.6 578.0 523.4 578.0C525.3 578.0 527.1 577.6 527.4 577.2ZM487.0 558.2C487.0 554.3 486.6 552.9 485.8 553.2C484.9 553.5 484.4 556.2 484.3 561.1C484.0 568.0 484.1 568.3 485.5 566.0C486.3 564.6 486.9 561.1 487.0 558.2ZM302.0 559.5C302.0 555.8 301.6 553.0 301.0 553.0C299.9 553.0 299.7 560.1 300.6 563.8C301.6 567.5 302.0 566.3 302.0 559.5ZM284.6 548.2C283.2 522.4 282.9 499.0 284.0 497.1C286.5 492.4 297.7 490.6 306.6 493.5C308.5 494.1 308.8 493.3 311.5 481.8C314.8 467.9 314.8 467.1 312.4 463.5C309.3 458.7 308.6 458.7 288.4 465.2C278.0 468.5 269.1 471.5 268.7 472.0C268.2 472.4 271.3 491.9 275.4 515.4C279.6 538.9 283.0 558.3 283.0 558.5C283.0 558.8 283.5 559.0 284.1 559.0C284.8 559.0 284.9 555.5 284.6 548.2ZM385.8 550.0C386.5 531.9 384.1 527.7 372.5 526.5C366.5 525.8 365.5 526.0 364.3 527.6C362.5 530.1 362.4 554.3 364.2 555.8C365.7 556.9 377.9 558.9 382.5 558.6L385.5 558.5L385.8 550.0ZM419.8 557.1L422.5 556.4L422.8 542.6C423.1 525.9 422.9 525.6 415.1 526.5C402.6 527.9 401.0 530.3 401.0 547.5L401.0 559.2L409.1 558.5C413.6 558.1 418.4 557.5 419.8 557.1ZM506.4 542.8C507.9 533.8 511.4 514.4 514.1 499.5C516.8 484.7 518.6 472.3 518.2 471.9C517.8 471.5 509.0 468.5 498.6 465.1C484.4 460.6 479.2 459.3 477.9 460.1C475.5 461.3 473.0 466.2 473.0 469.5C473.0 471.7 477.0 489.5 478.5 493.7C478.8 494.6 479.7 494.6 482.4 493.5C489.8 490.4 500.0 492.2 502.5 497.1C504.5 500.8 504.6 534.2 502.7 537.9C501.4 540.5 501.5 559.0 502.9 559.0C503.3 559.0 504.9 551.7 506.4 542.8ZM347.5 526.3C346.8 523.5 339.6 521.0 337.7 522.9C336.0 524.6 335.4 546.6 337.0 548.5C337.7 549.4 340.3 550.6 342.9 551.4L347.5 552.7L347.8 540.6C347.9 533.9 347.8 527.5 347.5 526.3ZM444.1 551.9C449.6 550.0 449.8 549.5 450.2 536.3C450.5 522.1 450.1 521.2 444.3 523.0C438.4 524.9 438.0 525.9 438.0 540.2C438.0 554.2 437.9 553.9 444.1 551.9ZM471.4 539.5C472.2 537.3 472.2 517.5 471.3 516.7C470.9 516.3 469.4 517.2 467.8 518.7C465.1 521.3 465.0 521.6 465.0 532.7L465.0 544.1L467.9 542.6C469.5 541.7 471.0 540.3 471.4 539.5ZM318.9 518.4C317.6 517.1 316.3 516.0 315.8 516.0C314.8 516.0 314.7 538.1 315.8 539.6C316.2 540.2 317.4 541.2 318.5 541.8C320.4 542.8 320.5 542.5 320.8 531.8C321.0 521.5 320.9 520.5 318.9 518.4ZM488.8 518.7C489.0 510.2 488.9 509.7 487.6 512.0C485.6 515.3 485.3 531.1 487.2 529.2C488.0 528.4 488.6 524.4 488.8 518.7ZM299.1 511.2C298.3 510.0 298.1 511.5 298.0 517.2C298.0 527.7 299.4 530.6 299.8 520.7C300.0 516.5 299.6 512.2 299.1 511.2ZM408.2 511.5C414.4 510.7 421.8 510.0 424.5 510.0C427.2 510.0 432.4 509.1 435.8 508.0C439.3 506.9 445.0 506.0 448.5 506.0C452.6 506.0 455.1 505.5 455.9 504.6C456.5 503.8 458.3 502.7 459.9 502.0L462.7 500.9L460.3 491.2C457.5 479.5 456.3 463.2 457.9 457.3C460.5 448.0 467.9 443.1 479.6 443.0C485.7 443.0 489.8 444.0 507.1 449.6C540.9 460.4 554.0 464.1 555.8 463.1C556.8 462.6 565.1 454.5 574.3 445.2C586.8 432.6 590.9 427.9 590.4 426.6C589.8 425.1 589.5 425.1 588.1 426.3C585.0 429.1 572.0 435.0 564.8 436.9C540.1 443.5 497.9 443.1 473.8 435.9C438.4 425.4 417.1 399.2 405.0 351.2C403.6 345.9 400.2 343.5 393.9 343.5C386.0 343.5 384.3 345.6 379.9 360.1C362.0 419.5 331.1 442.0 267.3 442.0C237.5 442.0 213.7 436.7 199.8 426.8C197.0 424.9 197.0 424.9 197.0 426.9C197.0 428.9 227.3 461.0 231.1 463.1C232.9 464.0 251.2 458.9 288.3 447.1C302.2 442.6 312.1 441.7 318.3 444.4C322.6 446.1 327.6 452.0 328.9 456.7C331.3 465.2 329.4 483.0 324.4 499.2C324.1 500.4 324.4 501.0 325.3 501.0C326.1 501.0 327.9 501.9 329.3 503.0C331.0 504.4 333.3 505.0 336.8 505.0C339.5 505.0 345.7 506.1 350.4 507.5C355.2 508.9 361.6 510.0 364.9 510.0C371.8 510.0 389.3 512.5 391.7 513.9C392.8 514.5 394.1 514.5 395.2 513.9C396.1 513.4 401.9 512.3 408.2 511.5ZM366.2 486.0C361.0 484.8 359.6 482.8 353.6 468.6C345.8 450.0 345.8 449.6 355.9 424.9C370.3 389.6 375.9 376.7 377.5 375.1C378.7 373.8 382.0 373.4 392.9 373.2C406.2 372.9 406.8 372.9 409.3 375.2C411.1 376.8 415.9 387.4 425.4 410.9C442.1 451.9 441.8 449.5 432.9 469.8C425.9 485.9 425.7 486.0 413.5 486.8C404.6 487.3 405.2 487.6 398.5 479.2C394.6 474.5 392.1 475.0 386.5 481.5L381.8 487.0L375.7 486.9C372.3 486.8 368.0 486.4 366.2 486.0ZM190.6 468.1C188.8 454.9 177.0 428.2 169.5 420.3C165.1 415.8 165.0 415.7 163.0 417.5C159.8 420.4 159.8 422.1 163.0 434.6C167.3 451.4 173.3 463.5 181.1 471.2L187.2 477.4L189.2 475.0C190.8 473.0 191.1 471.6 190.6 468.1ZM607.1 471.1C615.1 462.8 624.5 440.6 626.6 425.2C627.1 421.4 626.8 420.0 625.3 418.1C623.4 415.8 623.3 415.8 620.7 417.5C611.3 423.6 593.7 465.1 597.1 473.2C598.8 477.3 601.7 476.7 607.1 471.1ZM382.5 461.4L385.9 460.8L386.2 451.6L386.5 442.5L393.5 442.5L400.5 442.5L401.0 451.4C401.5 460.3 401.5 460.4 404.4 461.1C406.0 461.6 408.8 463.4 410.6 465.1C412.5 466.9 414.2 468.2 414.4 467.9C414.6 467.7 416.4 463.5 418.4 458.7L422.1 449.8L410.4 421.2C396.1 385.9 397.7 388.8 393.4 389.2C389.3 389.5 390.6 387.0 374.5 426.7L365.1 449.9L368.1 457.2C369.8 461.2 371.6 465.5 372.1 466.8C373.0 469.1 373.0 469.1 376.1 465.6C378.0 463.4 380.4 461.8 382.5 461.4ZM172.2 391.0C165.9 377.7 165.8 377.6 158.5 381.9C155.6 383.6 155.5 383.9 155.8 389.6C156.3 400.4 155.9 400.0 164.8 400.0C171.5 400.0 173.3 400.4 177.7 402.9C177.8 403.0 175.3 397.6 172.2 391.0ZM623.3 400.0L630.7 400.0L631.4 395.4C632.8 384.6 632.5 383.7 626.7 380.8L621.5 378.2L615.5 390.5L609.5 402.8L612.7 401.4C614.5 400.6 619.3 400.0 623.3 400.0ZM609.6 357.0C618.5 333.9 621.0 329.6 629.5 322.7C636.4 317.2 636.5 317.0 637.4 306.5C638.4 294.2 638.6 294.4 611.4 291.5C586.2 288.9 551.7 289.9 516.6 294.3C507.3 295.4 508.8 295.5 540.1 295.5C568.5 295.5 574.5 295.8 580.2 297.2C593.1 300.5 599.9 305.1 604.3 313.4C606.2 316.9 606.5 319.5 606.8 332.2C607.2 348.3 605.2 362.2 600.6 375.6C599.3 379.4 597.9 383.4 597.5 384.5C594.8 392.9 603.3 373.5 609.6 357.0ZM187.5 377.9C182.9 365.1 180.6 351.7 180.6 336.0C180.5 313.9 183.5 307.2 196.4 301.1C207.4 295.8 217.4 294.7 251.0 295.2L280.5 295.5L266.5 293.8C244.1 291.1 226.7 290.0 207.4 290.0C184.6 290.0 153.3 293.3 150.6 296.0C149.4 297.2 149.7 311.4 151.1 315.7C151.6 317.4 153.3 319.6 154.7 320.5C164.9 327.2 169.0 333.8 177.6 356.9C182.9 371.1 189.0 385.3 189.6 384.7C189.8 384.6 188.8 381.5 187.5 377.9ZM430.5 368.4C425.2 352.0 424.3 327.1 428.8 319.7C433.0 313.0 441.1 308.7 457.5 304.4C470.5 301.1 466.7 301.5 440.1 306.2C417.0 310.4 416.1 310.5 394.0 310.5C372.0 310.5 371.0 310.4 347.7 306.2C320.6 301.4 317.7 301.1 330.9 304.5C349.1 309.2 357.7 315.0 360.5 324.4C363.3 333.8 361.6 355.1 357.0 368.4C355.9 371.7 355.2 374.5 355.4 374.7C355.9 375.3 362.6 357.2 365.0 348.5C370.0 330.4 374.6 327.0 394.0 327.0C412.4 327.0 417.6 330.8 422.0 347.2C424.2 355.4 431.9 376.4 432.5 375.8C432.7 375.6 431.8 372.3 430.5 368.4ZM155.8 316.0C153.2 314.0 153.0 313.3 153.0 307.2C153.0 297.4 154.7 296.0 166.3 296.0C177.0 296.0 179.0 297.7 179.0 306.9C179.0 316.1 177.6 317.4 166.6 317.8C159.5 318.1 158.2 317.9 155.8 316.0ZM612.5 316.8C609.0 314.9 608.0 312.8 608.0 306.9C608.0 297.7 609.6 296.5 621.5 296.5C630.5 296.5 631.3 296.7 633.1 298.9C636.9 303.5 635.2 314.7 630.3 316.9C627.2 318.3 615.1 318.3 612.5 316.8ZM409.4 293.9C409.7 293.7 410.3 289.8 410.9 285.2C412.9 269.2 416.5 266.2 448.6 253.5C489.0 237.5 529.6 225.0 541.3 225.0L545.5 225.0L550.3 196.4C553.0 180.7 554.9 167.5 554.6 167.2C554.3 166.9 554.0 167.8 554.0 169.2C554.0 173.3 549.8 180.1 546.0 182.1C539.3 185.7 518.3 184.3 509.4 179.7C505.1 177.5 500.3 171.7 499.1 167.3C497.2 160.6 497.8 137.8 500.2 123.5C502.2 111.0 502.3 110.6 500.5 109.5C499.5 109.0 497.0 107.1 495.1 105.3C491.5 102.2 491.5 102.1 491.5 94.2C491.5 81.0 495.3 77.5 508.7 78.2C517.9 78.6 521.0 81.2 521.0 88.4C521.0 98.4 521.1 98.5 534.3 105.1C557.6 116.8 558.0 117.3 558.0 133.8C558.0 140.0 557.5 148.2 556.9 152.1C554.7 166.6 556.7 160.4 559.9 142.8C563.7 122.4 564.0 121.6 568.2 118.0L571.2 115.4L563.7 108.3C545.4 90.9 514.8 74.9 480.1 64.6L475.0 63.1L469.7 73.8L464.4 84.5L467.7 90.5C472.8 99.9 472.5 102.0 461.7 134.5C450.7 167.5 450.1 168.6 441.5 177.0L434.9 183.5L428.7 183.5C425.3 183.5 406.8 183.4 387.7 183.2L352.8 183.0L346.4 176.8C342.8 173.4 339.1 169.2 338.0 167.5C337.0 165.8 331.8 151.6 326.6 136.0C315.4 102.9 315.0 99.9 320.0 90.0L323.0 84.1L318.0 73.6C314.4 65.9 312.6 63.0 311.3 63.0C310.3 63.0 303.0 65.2 295.0 67.9C263.2 78.5 239.2 91.8 220.8 108.8L215.0 114.2L219.1 117.9C222.9 121.2 223.3 122.2 225.1 130.9C227.3 141.7 238.3 203.4 240.2 216.0L241.5 224.5L246.0 224.8C258.3 225.5 266.7 227.5 297.5 237.7C320.3 245.2 340.6 253.0 355.8 260.1C371.7 267.5 375.3 272.2 376.7 287.4C377.2 293.4 377.5 293.9 379.9 294.4C383.3 294.9 408.7 294.6 409.4 293.9ZM361.0 289.8C361.0 289.1 360.0 286.7 358.7 284.5C356.1 279.7 347.1 274.9 324.0 265.7C298.1 255.5 252.9 241.0 246.8 241.0C241.7 241.0 214.0 267.6 214.0 272.6C214.0 273.3 219.2 273.9 229.5 274.4C257.6 275.6 302.8 281.0 341.5 287.9C360.5 291.3 361.0 291.4 361.0 289.8ZM447.8 287.5C493.8 279.8 529.3 275.6 557.5 274.4C566.0 274.0 573.0 273.4 573.0 273.0C573.0 269.2 569.4 264.8 556.8 253.5L542.7 240.8L538.6 241.4C526.1 243.4 453.0 269.3 437.2 277.4C431.5 280.3 428.2 283.7 427.0 287.8C426.5 289.6 426.4 291.0 426.7 291.0C426.9 291.0 436.5 289.4 447.8 287.5ZM192.0 274.0L197.7 274.0L198.4 268.1C198.8 264.9 200.0 259.7 201.0 256.6C206.3 241.7 199.6 182.4 191.5 172.4L189.1 169.5L186.1 172.5C178.1 180.3 171.8 228.4 174.9 257.5C176.9 276.3 176.5 275.3 181.8 274.6C184.3 274.3 188.9 274.0 192.0 274.0ZM610.4 272.8C614.9 252.2 613.5 212.8 607.4 188.0C603.6 172.7 600.2 168.0 596.1 172.4C587.2 181.8 580.7 242.9 586.8 259.7C588.0 263.1 589.0 267.7 589.0 269.9L589.0 273.9L596.8 274.3C601.0 274.4 605.7 274.7 607.2 274.8C609.3 275.0 610.1 274.5 610.4 272.8ZM360.2 257.2C359.1 256.3 355.5 251.0 352.1 245.6C346.9 237.1 346.0 235.0 346.0 230.9C346.0 224.7 347.7 223.0 353.8 223.0C359.8 223.0 359.6 222.8 366.4 233.8L372.3 243.0L393.7 243.0L415.0 243.0L417.8 238.4C425.5 225.3 427.2 223.5 432.2 223.2C439.5 222.7 441.0 224.0 441.0 230.7C441.0 235.9 440.5 237.0 434.4 246.7C430.7 252.4 426.9 257.5 425.9 258.0C424.9 258.6 411.2 259.0 393.2 259.0C365.1 259.0 362.0 258.8 360.2 257.2ZM224.9 233.7C226.0 232.3 225.4 221.0 224.3 221.0C224.0 221.0 222.5 221.9 220.9 223.1C218.2 225.0 218.0 225.6 218.0 232.1L218.0 239.1L220.8 237.1C222.4 236.0 224.2 234.5 224.9 233.7ZM566.3 223.4C563.1 220.8 562.6 221.3 561.6 228.0C560.9 232.2 561.1 232.6 564.7 235.6L568.5 238.8L568.8 232.2C569.1 226.1 568.9 225.5 566.3 223.4ZM220.3 196.7C208.7 128.4 207.3 123.9 200.9 134.3C198.1 138.6 191.0 152.5 191.0 153.5C191.0 153.8 192.5 154.0 194.4 154.0C204.6 154.0 211.4 167.1 215.1 194.3L216.3 203.1L218.5 201.0C219.9 199.7 220.6 198.1 220.3 196.7ZM575.1 178.5C579.2 161.4 584.8 154.0 593.6 154.0L596.0 154.0L592.9 147.8C591.2 144.3 588.2 138.9 586.3 135.7L582.8 129.9L580.5 132.0C578.1 134.3 577.0 138.9 570.0 178.5C566.5 198.4 566.5 198.8 568.7 201.3C570.4 203.1 570.5 202.9 571.7 195.4C572.4 191.0 574.0 183.4 575.1 178.5ZM244.5 183.0C240.8 181.9 237.5 179.0 235.5 175.0C233.3 170.8 230.0 150.4 229.3 136.9C228.3 118.2 229.9 116.2 256.1 103.5C261.2 101.0 265.7 98.4 266.2 97.7C266.6 97.1 267.0 93.5 267.0 89.8C267.0 83.6 267.2 83.0 270.1 80.6C272.8 78.3 274.0 78.0 281.4 78.0C290.7 78.0 293.4 79.2 295.6 84.6C299.1 93.0 296.4 103.6 289.7 108.0C286.1 110.3 285.9 110.7 286.4 114.0C290.5 138.3 290.9 160.2 287.5 168.7C283.8 178.0 273.7 183.0 257.5 183.6C252.0 183.8 246.1 183.5 244.5 183.0ZM536.1 166.4L538.5 163.8L532.0 157.7C528.4 154.3 522.7 150.0 519.2 148.2L513.0 144.9L513.0 149.7C513.1 159.3 517.4 164.9 526.7 167.5C533.3 169.3 533.4 169.3 536.1 166.4ZM265.3 165.2C268.1 164.0 270.7 161.9 271.9 160.0C274.0 156.5 275.6 147.2 274.3 145.9C273.0 144.6 261.5 151.6 254.9 157.7L248.9 163.3L251.2 165.7C253.9 168.6 257.9 168.5 265.3 165.2ZM430.8 161.6L436.8 155.2L445.4 129.2L454.1 103.1L452.1 99.3C448.2 91.6 448.8 91.9 431.9 90.4C408.2 88.3 353.5 89.0 341.5 91.5C340.3 91.7 338.3 94.1 336.6 97.3L333.7 102.6L342.0 127.6C350.9 154.6 351.7 156.4 358.2 162.7L362.5 167.0L385.0 167.3C397.4 167.4 411.4 167.6 416.1 167.8L424.8 168.0L430.8 161.6ZM263.2 130.7C271.9 126.6 272.0 126.5 271.5 123.5C270.1 116.5 270.8 116.6 259.7 122.1C246.1 128.9 245.0 130.0 245.0 136.7L245.0 142.0L249.7 138.4C252.2 136.5 258.3 133.0 263.2 130.7ZM542.9 134.7C543.0 130.9 540.2 128.6 528.7 122.5C518.3 117.1 517.6 117.1 516.7 123.2L516.1 127.0L523.4 130.3C527.4 132.2 533.1 135.3 536.1 137.4C542.0 141.3 542.8 141.0 542.9 134.7ZM367.6 73.9C392.0 72.8 436.6 73.8 445.9 75.6C448.5 76.1 448.8 75.8 452.4 67.6C454.6 62.8 456.1 58.8 455.9 58.6C455.0 57.7 428.4 54.0 415.5 52.9C393.1 51.0 358.3 52.9 337.0 57.1C333.7 57.7 331.0 58.4 331.0 58.5C331.0 58.6 332.8 62.6 335.1 67.4C337.8 73.2 339.6 76.0 340.5 75.6C341.2 75.4 353.4 74.6 367.6 73.9Z"/></svg><span class="brand-name">RAgents</span></a>
252
265
  <nav id="main-navigation" aria-label="Main navigation">
253
- <a href="index.html">Product</a>
254
- <a href="guide.html">Guide</a>
266
+ <a href="index.html" aria-label="Product"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3 4 7.5v9L12 21l8-4.5v-9Z"/><path d="m4 7.5 8 4.5 8-4.5M12 12v9"/></svg><span class="nav-label">Product</span></a>
267
+ <a href="guide.html" aria-label="Guide"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6.5C10 5 7 4.5 3.5 5v13c3.5-.5 6.5 0 8.5 1.5 2-1.5 5-2 8.5-1.5V5C17 4.5 14 5 12 6.5Z"/><path d="M12 6.5v13"/></svg><span class="nav-label">Guide</span></a>
255
268
  <a class="nav-github" href="https://github.com/SchlenkR/RAgents" aria-label="GitHub"><svg class="gh-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M12 2a10 10 0 0 0-3.2 19.5c.5.1.7-.2.7-.5v-1.7c-2.8.6-3.4-1.3-3.4-1.3-.5-1.2-1.1-1.5-1.1-1.5-.9-.6.1-.6.1-.6 1 .1 1.5 1 1.5 1 .9 1.6 2.4 1.1 3 .9.1-.7.4-1.1.6-1.4-2.2-.3-4.6-1.1-4.6-5 0-1.1.4-2 1-2.7-.1-.3-.4-1.3.1-2.7 0 0 .8-.3 2.8 1a9.6 9.6 0 0 1 5 0c1.9-1.3 2.8-1 2.8-1 .5 1.4.2 2.4.1 2.7.6.7 1 1.6 1 2.7 0 3.9-2.4 4.7-4.6 5 .4.3.7.9.7 1.9V21c0 .3.2.6.7.5A10 10 0 0 0 12 2Z"/></svg><span class="gh-label">GitHub</span></a>
256
269
  </nav>
257
270
  <button class="nav-menu" type="button" aria-expanded="false" aria-controls="main-navigation"><span data-menu-label>Menu</span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button>
@@ -278,7 +291,7 @@ a { color: inherit; text-underline-offset: 4px; }
278
291
  </div>
279
292
  <div class="sr-only story" data-story>
280
293
  <article data-chapter="workspace" id="setups" data-anchor="setups"><h2><span>Tailor a workspace</span> <span>for a task</span></h2><p>The script builds the workspace, so the agents start with everything in place.</p><ul class="bullets"><li>A setup script creates agents, scripts and mini-apps</li><li>Start it again with one click</li><li>Ask for inputs before the run starts</li></ul><p class="how"><span class="how-label">How it works</span> A setup is a tested TypeScript package that appears as a start card. Its script starts agents, TypeScript programs and mini-apps through the same functions the AI uses. A setup dialog can ask for values, such as a repository or a topic, before the run starts.</p></article>
281
- <article data-chapter="agents" id="agents" data-anchor="agents"><h2><span>Everyone talks</span> <span>to everyone</span></h2><p>Agents write plain text to each other, addressed by handle, such as @agent1.</p><ul class="bullets"><li>Agents hand work to each other</li><li>Agents talk to scripts, scripts answer</li><li>People talk to agents and mini-apps</li><li>Mini-apps talk to people and agents</li><li class="wink">... you get the idea :)</li></ul><p class="how"><span class="how-label">How it works</span> Each agent has its own model, prompt, history and handle. A coordinator takes the task and hands out work. A helper starts with no tools, a picked list, or all tools. When an agent asks you something, the choices appear right above the chat input and your answer goes back to that agent.</p></article>
294
+ <article data-chapter="agents" id="agents" data-anchor="agents"><h2><span>Everyone talks</span> <span>to everyone</span></h2><p>Agents write plain text to each other, addressed by handle, such as @agent1.</p><ul class="bullets"><li>Agents hand work to each other</li><li>Agents talk to scripts, scripts answer</li><li>People talk to agents and mini-apps</li><li>Mini-apps talk to people and agents</li><li class="wink">... you get the idea :)</li></ul><p class="how"><span class="how-label">How it works</span> Each agent has its own model, prompt, history and handle. A coordinator takes the task and hands out work. A helper starts with no tools, a picked list, or all tools. When an agent asks you something, the choices appear in the chat and your answer goes back to that agent.</p></article>
282
295
  <article data-chapter="ui" id="ui" data-anchor="ui"><h2><span>Agents with</span> <span>their own UI</span></h2><p>People are used to working with interfaces. A UI shows what the agent is doing, and you step in with a click.</p><ul class="bullets"><li>The AI builds a UI while it works</li><li>Extensions ship UIs ready to use</li><li>You and the agent use the same UI and state</li><li>Your click goes straight to the agent</li><li>A new UI goes live after its tests pass</li></ul><p class="how"><span class="how-label">How it works</span> A mini-app is a React view on the state of an agent or a TypeScript program. Its buttons call the program's typed functions directly. The AI type-checks and tests a new view before it goes live; if a rebuild fails, the old version stays active. In VS Code, a mini-app opens in its own editor tab.</p></article>
283
296
  <article data-chapter="typescript" id="typescript" data-anchor="typescript"><h2><span>Tools are</span> <span>TypeScript functions</span></h2><ul class="bullets"><li>Register a typed function once, from your own plugin</li><li>Agents get it as a tool</li><li>AI-written code calls it, type-checked first</li><li>A button calls it without a model</li><li>Programs call it when events arrive</li></ul><p class="how"><span class="how-label">How it works</span> A snippet runs once and returns its result to the model. A program keeps its state and reacts to later messages. A setup starts agents, programs and UIs. All of them call the same typed functions, with the same permission checks.</p></article>
284
297
  <article data-chapter="events" id="events" data-anchor="events"><h2><span>Event-driven</span> <span>journal</span></h2><p>Every step of a run is an event in the journal. Agents and programs subscribe to the events they care about.</p><ul class="bullets"><li>An agent starts when another one finishes</li><li>Replies arrive later as new input, nobody waits</li><li>A watcher without a model wakes an agent that hangs</li><li>Agents read the run's journal</li><li>Fork an agent with its memory</li></ul><p class="how"><span class="how-label">How it works</span> A subscription turns matching events, such as another agent's finished turn, into new input. A watcher is a TypeScript condition without a model, for example no progress for 120 seconds. Agents query the journal themselves and read other agents' transcripts for handoffs.</p></article>
@@ -338,7 +351,7 @@ a { color: inherit; text-underline-offset: 4px; }
338
351
  <section class="shell limits" id="applications" aria-labelledby="limits-title"><h2 id="limits-title">Current status and limits</h2><p>RAgents is under active development. Actor programs, their functions, state, and mini-apps belong to one run. Events and time-based triggers need an agent or TypeScript actor. Schedules, a user-management interface, and several people in the same run are not available yet. Profiles may require sign-in or run without it. General user permissions can limit new runs to approved setups and hide settings, models, and technical views while keeping chats and mini-apps usable.</p></section>
339
352
  </div>
340
353
  </main>
341
- <footer class="site-footer"><div class="shell footer-grid"><div class="footer-about"><a class="footer-brand" href="#main"><svg class="footer-logo" aria-hidden="true" viewBox="0 0 787 787"><use href="#ragents-mark"/></svg>RAgents</a><p>Tailored AI Workspaces for your teams or your clients.</p></div><nav class="footer-col" aria-label="Product"><h3>Product</h3><a href="#setups">Setups</a><a href="#agents">Agents</a><a href="#ui">Mini-apps</a><a href="#distributed">Distributed</a><a href="#extensions">Extensions</a></nav><nav class="footer-col" aria-label="Docs"><h3>Docs</h3><a href="guide.html">Guide</a><a href="guide-getting-started.html">Getting started</a><a href="guide-plugins.html">Plugins</a><a href="guide-clients.html">Web, VS Code and CLI</a></nav><nav class="footer-col" aria-label="Project"><h3>Project</h3><a href="https://github.com/SchlenkR/RAgents">GitHub</a><a href="https://github.com/SchlenkR/RAgents/issues">Issues</a><a href="https://marketplace.visualstudio.com/items?itemName=purestate.ragents-vscode">VS Code Marketplace</a><a href="https://github.com/SchlenkR/RAgents/blob/main/LICENSE">License</a></nav></div><div class="shell footer-bottom"><p>Licensed under <a href="https://github.com/SchlenkR/RAgents/blob/main/LICENSE">PolyForm Shield 1.0.0</a>: free to use, not for building a competing product.</p><p>Alpha, September 2026</p></div></footer>
354
+ <footer class="site-footer"><div class="shell footer-grid"><div class="footer-about"><a class="footer-brand" href="#main"><svg class="footer-logo" aria-hidden="true" viewBox="0 0 787 787"><use href="#ragents-mark"/></svg>RAgents</a><p>Tailored AI Workspaces for your teams or your clients.</p><p>Made by Ronald Schlenker, Pure State IT Consulting</p></div><nav class="footer-col" aria-label="Docs"><h3>Docs</h3><a href="guide.html">Guide</a><a href="guide-getting-started.html">Getting started</a><a href="guide-plugins.html">Plugins</a><a href="guide-clients.html">Web, VS Code and CLI</a></nav><nav class="footer-col" aria-label="Project"><h3>Project</h3><a href="https://github.com/SchlenkR/RAgents">GitHub</a><a href="https://github.com/SchlenkR/RAgents/issues">Issues</a><a href="https://marketplace.visualstudio.com/items?itemName=purestate.ragents-vscode">VS Code Marketplace</a><a href="https://github.com/SchlenkR/RAgents/blob/main/LICENSE">License</a></nav></div><div class="shell footer-bottom"><p>Licensed under <a href="https://github.com/SchlenkR/RAgents/blob/main/LICENSE">PolyForm Shield 1.0.0</a>: free to use, not for building a competing product.</p><p>Alpha, September 2026</p></div></footer>
342
355
  <script>
343
356
  (() => {
344
357
  const host = document.querySelector('[data-layers]');
@@ -349,9 +362,19 @@ a { color: inherit; text-underline-offset: 4px; }
349
362
  measureTop();
350
363
  addEventListener('resize', measureTop);
351
364
  const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;
352
- const narrow = matchMedia('(max-width: 860px)');
353
- let compact = narrow.matches;
365
+ const slim = () => getComputedStyle(hero).position !== 'sticky';
366
+ let compact = slim();
354
367
  const dpr = Math.min(devicePixelRatio || 1, 2);
368
+ let rested = false;
369
+ const density = (width, height, most, sharp = dpr) => !slim() ? sharp : rested ? 0 : Math.min(sharp, Math.sqrt(most / Math.max(1, width * height)));
370
+ const scrap = items => items.forEach(item => {
371
+ item.canvas.width = 0;
372
+ item.canvas.height = 0;
373
+ });
374
+ const discard = map => {
375
+ scrap(map);
376
+ map.clear();
377
+ };
355
378
  const ease = t => t < 0 ? 0 : t > 1 ? 1 : t * t * (3 - 2 * t);
356
379
  const clamp = (value, low = 0, high = 1) => Math.min(high, Math.max(low, value));
357
380
  const lerp = (a, b, t) => a + (b - a) * t;
@@ -409,17 +432,27 @@ a { color: inherit; text-underline-offset: 4px; }
409
432
  const rainContext = rain.getContext('2d');
410
433
  const layers = specs.map(spec => {
411
434
  const atlas = document.createElement('canvas');
412
- const pad = Math.ceil(spec.blur * 3) + 2;
413
- const slot = [Math.ceil((spec.font * .8 + pad * 2) * dpr), Math.ceil((spec.font * 1.4 + pad * 2) * dpr)];
414
- atlas.width = slot[0] * 16;
415
- atlas.height = slot[1] * 12;
416
- return { ...spec, atlas, atlasContext: atlas.getContext('2d'), slot, glyphs: new Map(), columns: [], rows: 0, w: 0, h: 0 };
435
+ return { ...spec, atlas, atlasContext: atlas.getContext('2d'), pad: Math.ceil(spec.blur * 3) + 2, slot: [0, 0], room: 0, glyphs: new Map(), columns: [], rows: 0, w: 0, h: 0 };
417
436
  });
418
437
  const ink = document.createElement('canvas').getContext('2d', { willReadFrequently: true });
419
- ink.canvas.width = Math.max(...layers.map(({ slot }) => slot[0]));
420
- ink.canvas.height = Math.max(...layers.map(({ slot }) => slot[1]));
421
- const plane = new Float32Array(ink.canvas.width * ink.canvas.height);
422
- const strip = new Float32Array(Math.max(ink.canvas.width, ink.canvas.height));
438
+ let plane = new Float32Array(0);
439
+ let strip = new Float32Array(0);
440
+ let rainRatio = 0;
441
+ const sharpen = ratio => {
442
+ rainRatio = ratio;
443
+ const lines = slim() ? 5 : 12;
444
+ layers.forEach(layer => {
445
+ layer.slot = [Math.ceil((layer.font * .8 + layer.pad * 2) * ratio), Math.ceil((layer.font * 1.4 + layer.pad * 2) * ratio)];
446
+ layer.room = 16 * lines;
447
+ layer.atlas.width = layer.slot[0] * 16;
448
+ layer.atlas.height = layer.slot[1] * lines;
449
+ layer.glyphs.clear();
450
+ });
451
+ ink.canvas.width = Math.max(...layers.map(({ slot }) => slot[0]));
452
+ ink.canvas.height = Math.max(...layers.map(({ slot }) => slot[1]));
453
+ plane = new Float32Array(ink.canvas.width * ink.canvas.height);
454
+ strip = new Float32Array(Math.max(ink.canvas.width, ink.canvas.height));
455
+ };
423
456
  const stream = (layer, top) => ({ top, head: top, entries: [], seed: Math.random() * 1000, speed: layer.speed * .4 * 5 ** Math.random() });
424
457
  const grow = (layer, current) => {
425
458
  const last = current.entries[current.entries.length - 1];
@@ -459,9 +492,11 @@ a { color: inherit; text-underline-offset: 4px; }
459
492
  };
460
493
  const resize = () => {
461
494
  const box = rain.getBoundingClientRect();
462
- if (layers[0].w === box.width && layers[0].h === box.height) return;
463
- rain.width = Math.round(box.width * dpr);
464
- rain.height = Math.round(box.height * dpr);
495
+ const ratio = density(box.width, box.height, 1.2e6);
496
+ if (layers[0].w === box.width && layers[0].h === box.height && ratio === rainRatio) return;
497
+ if (ratio !== rainRatio) sharpen(ratio);
498
+ rain.width = Math.round(box.width * ratio);
499
+ rain.height = Math.round(box.height * ratio);
465
500
  layers.forEach(layer => build(layer, box));
466
501
  };
467
502
  resize();
@@ -507,16 +542,16 @@ a { color: inherit; text-underline-offset: 4px; }
507
542
  const key = color + character;
508
543
  if (layer.glyphs.has(key)) return layer.glyphs.get(key);
509
544
  const [width, height] = layer.slot;
510
- if (layer.glyphs.size >= 192) layer.glyphs.clear();
545
+ if (layer.glyphs.size >= layer.room) layer.glyphs.clear();
511
546
  const origin = [layer.glyphs.size % 16 * width, Math.floor(layer.glyphs.size / 16) * height];
512
547
  ink.clearRect(0, 0, width, height);
513
- ink.font = mono(layer.font * dpr, 600);
548
+ ink.font = mono(layer.font * rainRatio, 600);
514
549
  ink.textAlign = 'center';
515
550
  ink.textBaseline = 'middle';
516
551
  ink.fillStyle = color;
517
552
  ink.fillText(character, width / 2, height / 2);
518
553
  const image = ink.getImageData(0, 0, width, height);
519
- soften(image, layer.blur * dpr);
554
+ soften(image, layer.blur * rainRatio);
520
555
  layer.atlasContext.putImageData(image, origin[0], origin[1]);
521
556
  layer.glyphs.set(key, origin);
522
557
  return origin;
@@ -566,7 +601,7 @@ a { color: inherit; text-underline-offset: 4px; }
566
601
  const character = step < flips ? noise[Math.floor(hash(current.seed + row, step + 3) * noise.length)] : text[index];
567
602
  const [sx, sy] = glyph(layer, character, behind < 1 ? theme.head : tail);
568
603
  rainContext.globalAlpha = strength;
569
- rainContext.drawImage(atlas, sx, sy, width, height, Math.round(column.x * dpr - width / 2), Math.round(y * dpr - height / 2), width, height);
604
+ rainContext.drawImage(atlas, sx, sy, width, height, Math.round(column.x * rainRatio - width / 2), Math.round(y * rainRatio - height / 2), width, height);
570
605
  }
571
606
  });
572
607
  if (!alive(current) && current.head > current.top + 1) {
@@ -576,35 +611,37 @@ a { color: inherit; text-underline-offset: 4px; }
576
611
  });
577
612
  };
578
613
 
579
- const debrisLayer = (blur, alpha, ratio) => {
614
+ const debrisLayer = (blur, alpha, sharp) => {
580
615
  const canvas = document.createElement('canvas');
581
616
  canvas.className = 'panel';
582
617
  canvas.style.filter = `blur(${blur}px)`;
583
618
  canvas.style.opacity = String(alpha);
584
619
  host.append(canvas);
585
- return { canvas, context: canvas.getContext('2d'), ratio, w: 0, h: 0 };
620
+ return { canvas, context: canvas.getContext('2d'), sharp, most: 0, ratio: 0, w: 0, h: 0 };
586
621
  };
587
622
  const far = debrisLayer(.6, .8, dpr);
588
623
  const players = [0, 1].map(() => {
589
624
  const canvas = document.createElement('canvas');
590
625
  canvas.className = 'panel';
591
626
  host.append(canvas);
592
- return { canvas, context: canvas.getContext('2d'), ratio: dpr, w: 0, h: 0, story: null, t: 0, emitted: 0, spot: null, depth: .4, target: .4, mirror: false, debris: new Map(), placements: new Map(), sprites: new Map() };
627
+ return { canvas, context: canvas.getContext('2d'), sharp: dpr, most: 2e6, ratio: 0, w: 0, h: 0, story: null, t: 0, emitted: 0, spot: null, depth: .4, target: .4, mirror: false, debris: new Map(), placements: new Map(), sprites: new Map() };
593
628
  });
594
629
  const near = debrisLayer(1.8, .92, 1);
595
630
  const forget = () => players.forEach(player => {
596
- player.debris.clear();
631
+ discard(player.debris);
597
632
  player.placements.clear();
598
633
  });
599
634
  const sizePlayers = () => {
600
635
  [...players, far, near].forEach(layer => {
601
636
  const box = layer.canvas.getBoundingClientRect();
602
- if (layer.w === box.width && layer.h === box.height) return;
637
+ const ratio = slim() && layer.story === null ? 0 : density(box.width, box.height, layer.most, layer.sharp);
638
+ if (layer.w === box.width && layer.h === box.height && layer.ratio === ratio) return;
603
639
  layer.w = box.width;
604
640
  layer.h = box.height;
605
- layer.canvas.width = Math.round(box.width * layer.ratio);
606
- layer.canvas.height = Math.round(box.height * layer.ratio);
607
- layer.context.setTransform(layer.ratio, 0, 0, layer.ratio, 0, 0);
641
+ layer.ratio = ratio;
642
+ layer.canvas.width = Math.round(box.width * ratio);
643
+ layer.canvas.height = Math.round(box.height * ratio);
644
+ layer.context.setTransform(ratio, 0, 0, ratio, 0, 0);
608
645
  });
609
646
  forget();
610
647
  };
@@ -632,7 +669,8 @@ a { color: inherit; text-underline-offset: 4px; }
632
669
  let warmedAt = 0;
633
670
  const drawDebris = (player, debris, light, t) => {
634
671
  const { particles, pool, cx, cy, base } = debris;
635
- const targets = [far, { context: player.context, ratio: dpr }, near];
672
+ const own = { context: player.context, ratio: player.ratio ?? dpr };
673
+ const targets = player.region ? [own, own, own] : [far, own, near];
636
674
  const tail = tailColor();
637
675
  [0, 1, 2].forEach(layer => {
638
676
  const target = targets[layer];
@@ -670,7 +708,8 @@ a { color: inherit; text-underline-offset: 4px; }
670
708
  };
671
709
  const drawShot = (c, debris, light, t) => {
672
710
  const { canvas, left, top, width, height, cell, cols, cells, from } = debris;
673
- if (t > from + .62 || !debris.particles.length) return;
711
+ if (t > from + .62) scrap([debris]);
712
+ if (!canvas.width || !debris.particles.length) return;
674
713
  c.save();
675
714
  c.globalAlpha = light;
676
715
  c.beginPath();
@@ -839,7 +878,7 @@ a { color: inherit; text-underline-offset: 4px; }
839
878
  return pens.get(context);
840
879
  };
841
880
  const sprite = (player, name, c, draw) => {
842
- if (!player.sprites) return draw();
881
+ if (!player.sprites || compact) return draw();
843
882
  const { route } = c;
844
883
  const real = route.target;
845
884
  if (traits.some(trait => typeof real[trait] === 'object')) return draw();
@@ -1032,7 +1071,7 @@ a { color: inherit; text-underline-offset: 4px; }
1032
1071
  };
1033
1072
  const kit = (player, solo = '') => {
1034
1073
  const { w, h, story } = player;
1035
- const c = solo || !player.sprites ? player.context : pen(player.context);
1074
+ const c = solo || !player.sprites || compact ? player.context : pen(player.context);
1036
1075
  const t = player.t;
1037
1076
  const s = .62 + player.depth * .45;
1038
1077
  const mirrored = player.mirror;
@@ -3229,7 +3268,12 @@ a { color: inherit; text-underline-offset: 4px; }
3229
3268
  c.clearRect(0, 0, pixels, pixels);
3230
3269
  c.setTransform(zoom, 0, 0, zoom, pixels / 2 - cx * zoom, pixels / 2 - cy * zoom);
3231
3270
  drawScene(player, k);
3271
+ scrap(player.debris);
3232
3272
  };
3273
+ const dropBubbles = () => planes.forEach(plane => plane.slots.forEach(slot => {
3274
+ scrap([slot]);
3275
+ slot.key = '';
3276
+ }));
3233
3277
  const drawBubbles = sources => {
3234
3278
  const { w: width, h: height } = players[0];
3235
3279
  if (arrangement.key !== `${width}x${height}`) arrangement = arrange(width, height);
@@ -3498,11 +3542,11 @@ a { color: inherit; text-underline-offset: 4px; }
3498
3542
 
3499
3543
  let last = performance.now();
3500
3544
  const frame = now => {
3545
+ requestAnimationFrame(frame);
3501
3546
  const delta = Math.max(0, Math.min(.05, (now - last) / 1000));
3502
3547
  last = now;
3503
3548
  if (mobile) {
3504
3549
  glance(delta);
3505
- requestAnimationFrame(frame);
3506
3550
  return;
3507
3551
  }
3508
3552
  let moved = 0;
@@ -3528,7 +3572,6 @@ a { color: inherit; text-underline-offset: 4px; }
3528
3572
  drawBubbles([front, back].filter(player => player.story === intro));
3529
3573
  [far, near].forEach(layer => { layer.canvas.style.visibility = layer.used ? 'visible' : 'hidden'; });
3530
3574
  if (feed.length > 40) feed.splice(0, feed.length - 40);
3531
- requestAnimationFrame(frame);
3532
3575
  };
3533
3576
 
3534
3577
  const note = (text, target, light, place) => ({ text, target, light, place });
@@ -3551,7 +3594,6 @@ a { color: inherit; text-underline-offset: 4px; }
3551
3594
  target.toggleAttribute('data-centered', next.centered);
3552
3595
  target.dataset.side = next.side;
3553
3596
  };
3554
- const pace = 1 / 3;
3555
3597
  const blocks = new Map();
3556
3598
  let stageHeight = 0;
3557
3599
  let copyShift = 0;
@@ -3569,13 +3611,16 @@ a { color: inherit; text-underline-offset: 4px; }
3569
3611
  const leave = leaveAt(index, height);
3570
3612
  const q = index === playlist.length - 1 ? Math.min(0, p / scroll - .5) : p / scroll - .5;
3571
3613
  const reach = .7 * out;
3572
- const slow = .5 * Math.min(pace * scroll, reach);
3573
- const y = story.centered ? -Math.max(0, p - leave) * (top + height) / Math.max(1, scroll - leave)
3574
- : -(slow * q + 8 * (reach - slow / 2) * q ** 3);
3614
+ const settle = 40;
3615
+ const rest = -.2;
3616
+ const exit = .25;
3617
+ const outward = -out * clamp((q - exit) / (.5 - exit)) ** 2;
3618
+ const inward = q < rest ? settle + (reach - settle) * (1 - clamp((q + .5) / (rest + .5))) ** 2 : settle * clamp((exit - q) / (exit - rest));
3619
+ const y = story.centered ? -Math.max(0, p - leave) * (top + height) / Math.max(1, scroll - leave) : q > exit ? outward : inward;
3575
3620
  const shown = clamp((Math.min(stageHeight, top + y + height) - Math.max(0, top + y)) / Math.max(1, height));
3576
3621
  if (story.centered) return [y, shown, y, 1, 1];
3577
3622
  const arrive = ease(clamp((q + .5) / .08));
3578
- return [y, q > 0 ? clamp((.5 - q) / .1) * shown : 1, Math.min(y, 0) + 100 * (1 - arrive), arrive, ease(clamp((q + .5) / .15))];
3623
+ return [y, q > exit ? shown : 1, q > exit ? outward : 100 * (1 - arrive), arrive, ease(clamp((q + .5) / .15))];
3579
3624
  };
3580
3625
  const placeCopy = () => {
3581
3626
  const [y, fade, titleY, titleFade, bodyFade] = driftAt(front.story, front.index, front.t);
@@ -3679,9 +3724,10 @@ a { color: inherit; text-underline-offset: 4px; }
3679
3724
  const sizeWire = () => {
3680
3725
  wireKey = '';
3681
3726
  const box = wire.getBoundingClientRect();
3682
- wire.width = Math.round(box.width * dpr);
3683
- wire.height = Math.round(box.height * dpr);
3684
- wireContext.setTransform(dpr, 0, 0, dpr, 0, 0);
3727
+ const ratio = slim() ? 0 : dpr;
3728
+ wire.width = Math.round(box.width * ratio);
3729
+ wire.height = Math.round(box.height * ratio);
3730
+ wireContext.setTransform(ratio, 0, 0, ratio, 0, 0);
3685
3731
  };
3686
3732
  sizeWire();
3687
3733
  addEventListener('resize', sizeWire);
@@ -3939,27 +3985,31 @@ a { color: inherit; text-underline-offset: 4px; }
3939
3985
  const after = document.querySelector('.after');
3940
3986
  const sections = playlist.map(name => [name, sheet.querySelector(`[data-chapter="${name}"]`)]).filter(([, node]) => node).map(([name, node]) => {
3941
3987
  const story = scenes[name];
3988
+ const pin = document.createElement('div');
3942
3989
  const stage = document.createElement('div');
3943
3990
  const canvas = document.createElement('canvas');
3944
3991
  const label = document.createElement('div');
3992
+ const run = document.createElement('div');
3993
+ pin.className = 'pin';
3994
+ run.className = 'run';
3945
3995
  stage.className = 'stage';
3946
3996
  stage.setAttribute('aria-hidden', 'true');
3947
3997
  label.className = 'note out';
3948
3998
  label.dataset.side = 'free';
3949
3999
  stage.append(canvas, label);
3950
- node.append(stage);
4000
+ pin.append(node.querySelector('h2'), stage);
4001
+ node.prepend(pin);
4002
+ node.append(run);
3951
4003
  node.style.setProperty('--kick', story.color);
3952
4004
  return {
3953
- story, stage, label,
4005
+ name, node, pin, run, story, stage, label,
3954
4006
  rest: story.end - .85,
3955
- player: { canvas, context: canvas.getContext('2d'), story, w: 0, h: 0, t: 0, depth: 1, mirror: false, spot: null, wide: 1, second: [], region: null, debris: new Map(), sprites: new Map() },
3956
- bands: [], edges: [0, 0], step: null, text: '', size: [0, 0], shownAt: 0, shift: '', painted: false, done: true, top: 0, bottom: 0,
4007
+ player: { canvas, context: canvas.getContext('2d'), story, w: 0, h: 0, ratio: 0, t: 0, depth: 1, mirror: false, spot: null, wide: 1, second: [], region: null, debris: new Map(), sprites: null },
4008
+ bands: [], edges: [0, 0], step: null, showing: null, text: '', size: [0, 0], shownAt: 0, shift: '', painted: false, growing: false, progress: -1, start: 0, span: 0, top: 0, bottom: 0,
3957
4009
  };
3958
4010
  });
3959
4011
  Promise.all(Object.values(pictures).map(image => image.decode())).then(() => sections.forEach(section => {
3960
- section.player.sprites.clear();
3961
4012
  section.painted = false;
3962
- if (section === live) section.done = false;
3963
4013
  }));
3964
4014
  const heightOf = (story, name) => {
3965
4015
  const [, fy, , sy = 0] = stationOf(story, name);
@@ -3995,11 +4045,21 @@ a { color: inherit; text-underline-offset: 4px; }
3995
4045
  player.region = { zoom: scale / 1.07, x: (l + r) / 2, y: (t + b) / 2, cx: width / 2, cy: top + (b - t) * scale / 2 };
3996
4046
  player.w = width;
3997
4047
  player.h = height;
3998
- player.canvas.width = Math.round(width * dpr);
3999
- player.canvas.height = Math.round(height * dpr);
4000
- player.context.setTransform(dpr, 0, 0, dpr, 0, 0);
4001
- player.sprites.clear();
4048
+ player.ratio = Math.min(dpr, Math.sqrt(2e6 / Math.max(1, width * height)));
4002
4049
  section.shift = '';
4050
+ drop(section);
4051
+ };
4052
+ const mount = ({ player }) => {
4053
+ const width = Math.round(player.w * player.ratio);
4054
+ const height = Math.round(player.h * player.ratio);
4055
+ if (player.canvas.width === width && player.canvas.height === height) return;
4056
+ player.canvas.width = width;
4057
+ player.canvas.height = height;
4058
+ player.context.setTransform(player.ratio, 0, 0, player.ratio, 0, 0);
4059
+ };
4060
+ const drop = section => {
4061
+ scrap([section.player]);
4062
+ discard(section.player.debris);
4003
4063
  section.painted = false;
4004
4064
  };
4005
4065
  const showStep = (section, step, instant) => {
@@ -4009,6 +4069,7 @@ a { color: inherit; text-underline-offset: 4px; }
4009
4069
  const fill = () => {
4010
4070
  if (section.step !== step) return;
4011
4071
  section.text = step.label || step.text;
4072
+ section.showing = step;
4012
4073
  label.textContent = section.text;
4013
4074
  section.size = [label.offsetWidth, label.offsetHeight];
4014
4075
  label.classList.toggle('out', !section.text);
@@ -4023,7 +4084,7 @@ a { color: inherit; text-underline-offset: 4px; }
4023
4084
  setTimeout(fill, 360);
4024
4085
  };
4025
4086
  const pointers = (section, k, grow) => {
4026
- const { player, story, label, step } = section;
4087
+ const { player, story, label, showing: step } = section;
4027
4088
  if (!step || !section.text) return;
4028
4089
  const [width, height] = section.size;
4029
4090
  const aims = step.target.filter(([name]) => story.stations[name]).map(item => frameOf(k, story, item));
@@ -4050,77 +4111,56 @@ a { color: inherit; text-underline-offset: 4px; }
4050
4111
  c.restore();
4051
4112
  };
4052
4113
  const stepAt = (story, time) => story.steps.filter(step => step.at <= time).pop() ?? story.steps[0];
4053
- const still = section => {
4054
- const { player, story, rest } = section;
4055
- showStep(section, stepAt(story, rest), true);
4056
- player.t = rest;
4057
- player.wide = 1;
4058
- player.debris = new Map();
4059
- player.spot = kit(player).focusTarget(rest);
4060
- const view = { ...player, second: [], sprites: null };
4061
- const k = kit(view);
4062
- player.context.clearRect(0, 0, player.w, player.h);
4063
- drawScene(view, k);
4064
- pointers(section, k, 1);
4065
- section.painted = true;
4066
- section.done = true;
4067
- };
4068
- const start = section => {
4069
- const { player } = section;
4070
- player.t = preroll;
4071
- player.spot = null;
4072
- player.wide = 1;
4073
- player.debris = new Map();
4074
- section.done = false;
4075
- };
4076
- const play = (section, moved) => {
4114
+ const landing = .88;
4115
+ const pace = 1.8;
4116
+ const scrubSection = (section, progress) => {
4077
4117
  const { player, story, rest } = section;
4078
- player.t = Math.min(rest, player.t + moved);
4079
- const step = stepAt(story, player.t);
4080
- showStep(section, step, false);
4081
- const k = kit(player);
4082
- const target = k.focusTarget(player.t);
4083
- if (player.t < rest) player.wide += ((k.focusName(player.t) === '*' ? 1 : 0) - player.wide) * (1 - Math.exp(-moved * 3));
4084
- else player.wide = Math.min(1, player.wide + moved / .8);
4085
- player.second = [...step.target, ...step.light.map(name => [name])].filter(([name]) => story.stations[name]).map(([name]) => k.pos(name));
4086
- const follow = 1 - Math.exp(-moved * 7);
4087
- player.spot = player.spot ? [lerp(player.spot[0], target[0], follow), lerp(player.spot[1], target[1], follow)] : target;
4118
+ const time = preroll + clamp(progress / landing) * (rest - preroll);
4119
+ const calm = clamp((progress - landing) / (1 - landing));
4120
+ const fresh = !section.painted;
4121
+ const moved = time - player.t;
4122
+ if (fresh || moved < 0) {
4123
+ discard(player.debris);
4124
+ player.spot = null;
4125
+ }
4126
+ player.t = time;
4127
+ const step = stepAt(story, time);
4128
+ showStep(section, step, fresh);
4129
+ const probe = kit(player);
4130
+ const target = probe.focusTarget(time);
4131
+ const wide = probe.focusName(time) === '*' ? 1 : 0;
4132
+ const ahead = Math.max(0, moved);
4133
+ player.wide = player.spot ? player.wide + (wide - player.wide) * (1 - Math.exp(-ahead * 3)) : wide;
4134
+ player.spot = player.spot ? [lerp(player.spot[0], target[0], 1 - Math.exp(-ahead * 7)), lerp(player.spot[1], target[1], 1 - Math.exp(-ahead * 7))] : target;
4135
+ player.second = [...step.target, ...step.light.map(name => [name])].filter(([name]) => story.stations[name]).map(([name]) => probe.pos(name));
4136
+ const look = { ...player, wide: lerp(player.wide, 1, calm) };
4137
+ const k = kit(look);
4088
4138
  const grow = ease(clamp((performance.now() - section.shownAt) / 600));
4139
+ mount(section);
4089
4140
  player.context.clearRect(0, 0, player.w, player.h);
4090
- drawScene(player, k);
4141
+ drawScene(look, k);
4091
4142
  pointers(section, k, grow);
4092
4143
  section.painted = true;
4093
- section.done = player.t >= rest && player.wide >= 1 && grow >= 1;
4144
+ section.growing = grow < 1;
4145
+ section.progress = progress;
4094
4146
  };
4095
- let live = null;
4147
+ const progressOf = section => reduce ? 1 : clamp((scrollY - section.start) / Math.max(1, section.span));
4096
4148
  let heroSpan = 0;
4097
4149
  let introClock = 0;
4098
4150
  let mobileKey = '';
4099
4151
  let afterTop = 0;
4100
4152
  let view = [0, 0];
4101
4153
  const cycle = bubbles.length * bubbleGap;
4102
- const seen = section => {
4103
- const top = scrollY + topHeight;
4104
- const bottom = scrollY + innerHeight;
4105
- return Math.max(0, Math.min(bottom, section.bottom) - Math.max(top, section.top)) / Math.max(1, Math.min(section.bottom - section.top, bottom - top));
4106
- };
4107
- const choose = () => {
4108
- if (reduce || (live && seen(live) >= .55)) return;
4109
- const next = sections.map(section => [section, seen(section)]).filter(([, share]) => share >= .55).sort((a, b) => b[1] - a[1])[0]?.[0] ?? null;
4110
- if (next === live) return;
4111
- if (live && !live.done) still(live);
4112
- live = next;
4113
- if (live) start(live);
4114
- };
4115
- const prepare = () => {
4116
- const from = scrollY - innerHeight;
4117
- const to = scrollY + innerHeight * 2.5;
4118
- const next = sections.find(section => !section.painted && section !== live && section.bottom > from && section.top < to);
4119
- if (next) still(next);
4154
+ const restHero = state => {
4155
+ rested = state;
4156
+ resize();
4157
+ sizePlayers();
4158
+ if (state) dropBubbles();
4120
4159
  };
4121
4160
  const glance = delta => {
4122
4161
  view = [scrollY, innerHeight];
4123
- const moved = paused || held || reduce ? 0 : delta * speed;
4162
+ const moved = paused || reduce ? 0 : delta * speed;
4163
+ if (rested ? scrollY < heroSpan + innerHeight * .25 : scrollY > heroSpan + innerHeight * .5) restHero(!rested);
4124
4164
  if (scrollY < heroSpan) {
4125
4165
  introClock += moved;
4126
4166
  front.t = Math.min(introClock, intro.end - 1);
@@ -4138,32 +4178,40 @@ a { color: inherit; text-underline-offset: 4px; }
4138
4178
  drawBubbles([-1, 0, 1].map(round => Math.floor(introClock / cycle) + round).filter(round => round >= 0).map(round => ({ t: introClock - round * cycle, old: false, depth: 1 })));
4139
4179
  [far, near].forEach(layer => { layer.canvas.style.visibility = layer.used ? 'visible' : 'hidden'; });
4140
4180
  }
4141
- choose();
4142
- if (live && !live.done) play(live, moved);
4143
- prepare();
4181
+ sections.forEach(section => {
4182
+ const within = (above, below) => section.bottom > scrollY - innerHeight * above && section.top < scrollY + innerHeight * below;
4183
+ if (!within(.25, 1.25)) {
4184
+ if (section.player.canvas.width && !within(.75, 1.75)) drop(section);
4185
+ return;
4186
+ }
4187
+ const progress = progressOf(section);
4188
+ if (!section.painted || section.growing || progress !== section.progress) scrubSection(section, progress);
4189
+ });
4144
4190
  };
4145
4191
  const offsetOf = node => node.getBoundingClientRect().top + scrollY - parseFloat(getComputedStyle(node).scrollMarginTop || 0);
4146
4192
  const shape = () => {
4147
4193
  const width = sheet.clientWidth;
4148
4194
  const room = hero.clientHeight;
4149
- sections.forEach(section => shapeSection(section, width, room));
4195
+ sections.forEach(section => shapeSection(section, width, room - section.pin.offsetHeight + section.stage.offsetHeight - 12));
4150
4196
  sections.forEach(section => {
4151
- section.top = section.stage.getBoundingClientRect().top + scrollY;
4152
- section.bottom = section.top + section.stage.offsetHeight;
4197
+ section.span = reduce ? 0 : Math.round(reels[playlist.indexOf(section.name)] * pace * room);
4198
+ section.run.style.height = `${section.span}px`;
4153
4199
  });
4154
- marks = playlist.map((name, index) => index ? Math.round(offsetOf(document.querySelector(`[data-chapter="${name}"]`))) : 0);
4200
+ sections.forEach(section => {
4201
+ const box = section.node.getBoundingClientRect();
4202
+ section.start = Math.round(section.run.getBoundingClientRect().top + scrollY - section.pin.offsetHeight - topHeight);
4203
+ section.top = box.top + scrollY;
4204
+ section.bottom = box.bottom + scrollY;
4205
+ });
4206
+ marks = playlist.map((name, index) => index ? sections.find(section => section.name === name)?.start ?? Math.round(offsetOf(document.querySelector(`[data-chapter="${name}"]`))) : 0);
4155
4207
  heroSpan = hero.offsetHeight;
4156
4208
  afterTop = after.offsetTop;
4157
4209
  view = [scrollY, innerHeight];
4158
- if (live) live.done = false;
4159
4210
  };
4160
4211
  const release = () => {
4161
- live = null;
4162
4212
  sections.forEach(section => {
4163
- section.player.canvas.width = 0;
4164
- section.player.canvas.height = 0;
4165
- section.painted = false;
4166
- section.done = true;
4213
+ drop(section);
4214
+ section.run.style.height = '';
4167
4215
  });
4168
4216
  menu.style.removeProperty('--kick');
4169
4217
  };
@@ -4202,14 +4250,14 @@ a { color: inherit; text-underline-offset: 4px; }
4202
4250
  const from = was ? Math.max(0, marks.findLastIndex(value => value <= seenTop + (seenHeight - topHeight) * .35)) : front.index;
4203
4251
  const offset = was ? seenTop - marks[from] : 0;
4204
4252
  menu.removeAttribute('data-compact');
4205
- menu.toggleAttribute('data-compact', list.scrollWidth > list.clientWidth);
4253
+ menu.toggleAttribute('data-compact', slim() || list.scrollWidth > list.clientWidth);
4206
4254
  if (!menu.hasAttribute('data-compact')) open(false);
4207
4255
  if (topBar.offsetHeight !== topHeight) {
4208
4256
  topHeight = topBar.offsetHeight;
4209
4257
  dispatchEvent(new Event('resize'));
4210
4258
  return;
4211
4259
  }
4212
- compact = narrow.matches;
4260
+ compact = slim();
4213
4261
  mobile = compact;
4214
4262
  if (mobile) {
4215
4263
  const key = `${innerWidth}:${topHeight}`;
@@ -4234,19 +4282,23 @@ a { color: inherit; text-underline-offset: 4px; }
4234
4282
  arrangement = { key: '' };
4235
4283
  marked = -1;
4236
4284
  if (!was) {
4285
+ players.forEach(player => discard(player.sprites));
4237
4286
  restart();
4238
4287
  introClock = reduce ? 6 : 0;
4239
4288
  follow(true);
4240
- wireContext.clearRect(0, 0, wire.width, wire.height);
4241
4289
  wireKey = '';
4242
4290
  }
4291
+ sizePlayers();
4243
4292
  shape();
4244
4293
  if (below) scrollTo(0, after.offsetTop - innerHeight + past);
4245
4294
  else if (was !== null) scrollTo(0, marks[from] + Math.max(0, offset));
4246
4295
  return;
4247
4296
  }
4248
4297
  mobileKey = '';
4249
- if (was) release();
4298
+ if (was) {
4299
+ release();
4300
+ restHero(false);
4301
+ }
4250
4302
  unit = hero.offsetHeight * 2 / .75 / .75;
4251
4303
  stageHeight = hero.clientHeight;
4252
4304
  reel.style.height = `${topHeight + hero.offsetHeight + unit * reelTotal}px`;
@@ -4290,7 +4342,7 @@ a { color: inherit; text-underline-offset: 4px; }
4290
4342
  badge.removeAttribute('data-on');
4291
4343
  };
4292
4344
  document.addEventListener('pointerdown', event => {
4293
- const place = event.isPrimary && event.button === 0 ? event.target.closest('.hero, .stage') : null;
4345
+ const place = !mobile && event.isPrimary && event.button === 0 ? event.target.closest('.hero') : null;
4294
4346
  if (!place || event.target.closest('a, button')) return;
4295
4347
  letGo();
4296
4348
  press = { id: event.pointerId, x: event.clientX, y: event.clientY, timer: 0 };
@@ -4313,6 +4365,7 @@ a { color: inherit; text-underline-offset: 4px; }
4313
4365
  dispatchEvent(new Event('resize'));
4314
4366
  follow(false);
4315
4367
  const tick = () => {
4368
+ requestAnimationFrame(tick);
4316
4369
  if (mobile) markScroll();
4317
4370
  else {
4318
4371
  placeCopy();
@@ -4321,7 +4374,6 @@ a { color: inherit; text-underline-offset: 4px; }
4321
4374
  drawNote();
4322
4375
  showFinale();
4323
4376
  }
4324
- requestAnimationFrame(tick);
4325
4377
  };
4326
4378
  requestAnimationFrame(frame);
4327
4379
  requestAnimationFrame(tick);
@@ -4337,7 +4389,7 @@ a { color: inherit; text-underline-offset: 4px; }
4337
4389
  jump(index, time);
4338
4390
  follow(true);
4339
4391
  };
4340
- window.__state = () => ({ index: front.index, t: front.t, where: where(), steering, scroll: scrollY, unit, head: slots.a.textContent, mirror: front.mirror, concealed, mobile, live: live ? live.story.nav : '', liveT: live ? live.player.t : 0, held });
4392
+ window.__state = () => ({ index: front.index, t: front.t, where: where(), steering, scroll: scrollY, unit, head: slots.a.textContent, mirror: front.mirror, concealed, mobile, sections: sections.map(section => ({ nav: section.story.nav, progress: section.progress, t: section.player.t, painted: section.painted, pixels: section.player.canvas.width * section.player.canvas.height })), held });
4341
4393
  window.__plan = () => playlist.map(name => {
4342
4394
  const { steps, end } = scenes[name];
4343
4395
  const times = steps.map(step => step.at + 2.1);