synabun 2.0.9 → 2.0.10

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 (252) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/THIRD-PARTY-LICENSES.md +46 -4
  4. package/launcher.mjs +9 -3
  5. package/lib/start-launcher.js +6 -1
  6. package/mcp-server/package-lock.json +2 -2
  7. package/mcp-server/package.json +1 -1
  8. package/neural-interface/i18n/en.json +218 -7
  9. package/neural-interface/i18n/pt-BR.json +220 -9
  10. package/neural-interface/lib/account-usage.js +5 -3
  11. package/neural-interface/lib/app-controls-api.js +161 -0
  12. package/neural-interface/lib/assistant-api.js +21 -7
  13. package/neural-interface/lib/assistant-brains/opencode.js +13 -1
  14. package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +44 -0
  15. package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +57 -0
  16. package/neural-interface/lib/assistant-catalog.js +17 -2
  17. package/neural-interface/lib/assistant-dispatch.js +3 -0
  18. package/neural-interface/lib/assistant-envelope.js +19 -1
  19. package/neural-interface/lib/assistant-runtime.js +127 -8
  20. package/neural-interface/lib/claude-model-catalog.js +64 -14
  21. package/neural-interface/lib/codex-settings-schema.js +109 -47
  22. package/neural-interface/lib/editor-completion-opencode.js +132 -35
  23. package/neural-interface/lib/exec-loop-command.js +8 -1
  24. package/neural-interface/lib/launch-cache.js +293 -0
  25. package/neural-interface/lib/login-start.js +524 -0
  26. package/neural-interface/lib/native-loop-providers.js +18 -3
  27. package/neural-interface/lib/native-loop-runtime.js +19 -0
  28. package/neural-interface/lib/opencode-db-schema.js +75 -0
  29. package/neural-interface/lib/opencode-history.js +16 -1
  30. package/neural-interface/lib/opencode-protocol.js +173 -0
  31. package/neural-interface/lib/opencode-provider-view.js +81 -0
  32. package/neural-interface/lib/opencode-runtime-config.js +10 -3
  33. package/neural-interface/lib/opencode-serve-records.js +606 -0
  34. package/neural-interface/lib/opencode-v2-client.js +33 -6
  35. package/neural-interface/lib/opencode-v2-ws-requests.js +19 -5
  36. package/neural-interface/lib/opencode-worker-activity.js +229 -0
  37. package/neural-interface/lib/opencode2-client.js +760 -0
  38. package/neural-interface/lib/opencode2-proxy.js +116 -0
  39. package/neural-interface/lib/opencode2-translate.js +1008 -0
  40. package/neural-interface/lib/process-identity.js +361 -0
  41. package/neural-interface/lib/session-cache-builder.js +26 -5
  42. package/neural-interface/lib/session-title-generator.js +18 -0
  43. package/neural-interface/lib/style-guide/api.js +4 -3
  44. package/neural-interface/lib/untrusted-file-headers.js +27 -0
  45. package/neural-interface/package-lock.json +1343 -45
  46. package/neural-interface/package.json +5 -1
  47. package/neural-interface/public/index.html +2 -2
  48. package/neural-interface/public/shared/agent-runtime-options.js +55 -11
  49. package/neural-interface/public/shared/assistant/asst-agents-dock.js +172 -17
  50. package/neural-interface/public/shared/assistant/asst-api.js +11 -3
  51. package/neural-interface/public/shared/assistant/asst-brain-picker.js +195 -80
  52. package/neural-interface/public/shared/assistant/asst-composer.js +1 -1
  53. package/neural-interface/public/shared/assistant/asst-hosts.js +49 -2
  54. package/neural-interface/public/shared/assistant/asst-menu.js +77 -6
  55. package/neural-interface/public/shared/assistant/asst-panel.js +197 -33
  56. package/neural-interface/public/shared/assistant/asst-rack-styles.js +28 -10
  57. package/neural-interface/public/shared/assistant/asst-redact.js +186 -0
  58. package/neural-interface/public/shared/assistant/asst-render.js +382 -36
  59. package/neural-interface/public/shared/assistant/asst-run-stage.js +231 -0
  60. package/neural-interface/public/shared/assistant/asst-sanitize.js +193 -3
  61. package/neural-interface/public/shared/assistant/asst-scene-styles.js +273 -0
  62. package/neural-interface/public/shared/assistant/asst-scenes.js +528 -0
  63. package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +3 -15
  64. package/neural-interface/public/shared/assistant/asst-state.js +14 -0
  65. package/neural-interface/public/shared/assistant/asst-styles.js +43 -0
  66. package/neural-interface/public/shared/assistant/asst-tool-kinds.js +13 -1
  67. package/neural-interface/public/shared/cc-dropdown.js +480 -0
  68. package/neural-interface/public/shared/cdx/cdx-panel.js +13 -1
  69. package/neural-interface/public/shared/cdx/cdx-render.js +15 -3
  70. package/neural-interface/public/shared/cdx/cdx-styles.js +4 -0
  71. package/neural-interface/public/shared/cdx/cdx-tabs.js +149 -35
  72. package/neural-interface/public/shared/cp/cp-markdown.js +4 -57
  73. package/neural-interface/public/shared/data-cache.js +223 -0
  74. package/neural-interface/public/shared/desktop-bridge.js +11 -0
  75. package/neural-interface/public/shared/desktop-titlebar-view.js +78 -1
  76. package/neural-interface/public/shared/desktop-titlebar.js +214 -28
  77. package/neural-interface/public/shared/desktop-update-view.js +15 -5
  78. package/neural-interface/public/shared/file-links.js +73 -8
  79. package/neural-interface/public/shared/html-shell.js +74 -80
  80. package/neural-interface/public/shared/launch-prefetch.js +59 -0
  81. package/neural-interface/public/shared/ocp-v2/ocp-v2-caps.js +3 -2
  82. package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +7 -2
  83. package/neural-interface/public/shared/ocp-v2/ocp-v2-modelpicker.js +54 -17
  84. package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +93 -2
  85. package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +3 -2
  86. package/neural-interface/public/shared/ocp-v2/ocp-v2-providers.js +11 -9
  87. package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +15 -4
  88. package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +1 -1
  89. package/neural-interface/public/shared/ocp-v2/ocp-v2-send-logic.js +401 -0
  90. package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +16 -9
  91. package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +60 -0
  92. package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +48 -19
  93. package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +195 -19
  94. package/neural-interface/public/shared/opencode-providers.js +39 -0
  95. package/neural-interface/public/shared/schedules-view.js +318 -0
  96. package/neural-interface/public/shared/settings/settings-app-pane.js +335 -0
  97. package/neural-interface/public/shared/settings/settings-app.js +243 -0
  98. package/neural-interface/public/shared/settings/settings-data.js +88 -0
  99. package/neural-interface/public/shared/settings/settings-ia.js +17 -0
  100. package/neural-interface/public/shared/sidepanel-session-status.js +49 -0
  101. package/neural-interface/public/shared/styles.css +540 -371
  102. package/neural-interface/public/shared/ui-assistant.js +27 -5
  103. package/neural-interface/public/shared/ui-automation-studio.js +67 -27
  104. package/neural-interface/public/shared/ui-bookmarks.js +2 -1
  105. package/neural-interface/public/shared/ui-claude-panel.js +76 -8
  106. package/neural-interface/public/shared/ui-codex-panel.js +1 -0
  107. package/neural-interface/public/shared/ui-detail.js +6 -6
  108. package/neural-interface/public/shared/ui-file-links.js +1 -0
  109. package/neural-interface/public/shared/ui-image-gallery.js +6 -5
  110. package/neural-interface/public/shared/ui-invite.js +18 -2
  111. package/neural-interface/public/shared/ui-link.js +9 -9
  112. package/neural-interface/public/shared/ui-menubar.js +232 -33
  113. package/neural-interface/public/shared/ui-native-loop-router.js +2 -0
  114. package/neural-interface/public/shared/ui-opencode-panel-v2.js +1 -0
  115. package/neural-interface/public/shared/ui-schedules-studio.js +2099 -869
  116. package/neural-interface/public/shared/ui-sessions.js +15 -4
  117. package/neural-interface/public/shared/ui-settings.js +87 -36
  118. package/neural-interface/public/shared/ui-sidebar.js +4 -4
  119. package/neural-interface/public/shared/ui-sidepanel-session-entry.js +13 -0
  120. package/neural-interface/public/shared/ui-sidepanel-sessions.js +55 -4
  121. package/neural-interface/public/shared/ui-sidepanel-tray.js +84 -8
  122. package/neural-interface/public/shared/ui-skills.js +70 -12
  123. package/neural-interface/public/shared/ui-sync.js +7 -0
  124. package/neural-interface/public/shared/ui-terminal.js +36 -20
  125. package/neural-interface/public/shared/ui-trash.js +8 -1
  126. package/neural-interface/public/shared/ui-tutorial-steps.js +7 -3
  127. package/neural-interface/public/shared/ui-tutorial.js +15 -5
  128. package/neural-interface/public/shared/ui-update.js +83 -14
  129. package/neural-interface/public/shared/ui-whiteboard.js +2 -1
  130. package/neural-interface/public/variant/2d/main.js +4 -1
  131. package/neural-interface/public/variant/3d/main.js +3 -0
  132. package/neural-interface/public/vendor/highlight/LICENSE +29 -0
  133. package/neural-interface/public/vendor/highlight/github-dark-dimmed-11.12.0.min.css +9 -0
  134. package/neural-interface/public/vendor/highlight/highlight-11.12.0.min.js +1262 -0
  135. package/neural-interface/public/vendor/highlight/manifest.json +5 -0
  136. package/neural-interface/public/vendor/html2canvas/LICENSE +22 -0
  137. package/neural-interface/public/vendor/html2canvas/html2canvas-1.4.1.min.js +20 -0
  138. package/neural-interface/public/vendor/html2canvas/manifest.json +4 -0
  139. package/neural-interface/public/vendor/marked/LICENSE.md +44 -0
  140. package/neural-interface/public/vendor/marked/manifest.json +4 -0
  141. package/neural-interface/public/vendor/marked/marked-14.1.4.esm.js +2502 -0
  142. package/neural-interface/public/vendor/mermaid/LICENSE +21 -0
  143. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/abnfDiagram-PAR5IXJI.mjs +1 -0
  144. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/architecture-7GRP2DOG-M7G3SWCO.mjs +1 -0
  145. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/architectureDiagram-2PNWDENW.mjs +36 -0
  146. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/blockDiagram-PUWGUBOA.mjs +129 -0
  147. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/c4Diagram-3NLNHZP5.mjs +38 -0
  148. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-2NMSUPJH.mjs +1 -0
  149. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-32MCUW2P.mjs +206 -0
  150. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-3NPNU5GP.mjs +1 -0
  151. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-3SMGFRGC.mjs +1 -0
  152. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-4CAJECRU.mjs +14 -0
  153. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-4OADUZ5Q.mjs +10 -0
  154. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5IMINLNL.mjs +1 -0
  155. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5IQCK5RY.mjs +3 -0
  156. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5MVFYWFU.mjs +1 -0
  157. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-AQ6EADP3.mjs +1 -0
  158. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-AZZRMDJM.mjs +15 -0
  159. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-CLS4B6BI.mjs +168 -0
  160. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-DZP67EKU.mjs +70 -0
  161. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-EICP7K5X.mjs +1 -0
  162. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-GDY2UAB4.mjs +1 -0
  163. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-H7VHZCWX.mjs +1 -0
  164. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-IJBDOHL6.mjs +1 -0
  165. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JFFVMJIA.mjs +1 -0
  166. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JQRUD6KW.mjs +1 -0
  167. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JZGDI5JK.mjs +1 -0
  168. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-KD6SPIPN.mjs +2 -0
  169. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-NF366YI6.mjs +231 -0
  170. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-NUDPKBEF.mjs +32 -0
  171. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-OJINMHTS.mjs +1 -0
  172. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-Q6NGPIAH.mjs +2 -0
  173. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-QJSWEUOL.mjs +132 -0
  174. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-R7JDMUKV.mjs +1 -0
  175. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-RCXAM2GK.mjs +1 -0
  176. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-RT4MAWR3.mjs +1 -0
  177. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-SFMINX4W.mjs +1 -0
  178. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-SLDQ463B.mjs +88 -0
  179. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-STOV2HOB.mjs +1 -0
  180. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-T5OCTHI4.mjs +1 -0
  181. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-TCEHX7R3.mjs +1 -0
  182. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VQC2EELJ.mjs +1 -0
  183. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VRZKL3EH.mjs +1 -0
  184. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VTHDQ7BV.mjs +1 -0
  185. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VY2OSTJR.mjs +2 -0
  186. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-WUBWJARI.mjs +1 -0
  187. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-YBMQ5JGJ.mjs +2 -0
  188. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-YDMLL4PJ.mjs +1 -0
  189. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-Z6V44ARX.mjs +62 -0
  190. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZJJ7VQJP.mjs +339 -0
  191. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZNLK7HRR.mjs +1 -0
  192. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZQN7UHIL.mjs +1 -0
  193. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZS6VBONO.mjs +174 -0
  194. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZUNWM646.mjs +1 -0
  195. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-FGAMPOII.mjs +1 -0
  196. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-v2-AI5RJEK4.mjs +1 -0
  197. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cose-bilkent-Q72C2OJ3.mjs +1 -0
  198. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cynefin-OW5HDTMX-6OCTWOGG.mjs +1 -0
  199. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cynefinDiagram-2OOWUY4M.mjs +62 -0
  200. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/dagre-MPVFI544.mjs +4 -0
  201. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-AE4NWXFW.mjs +24 -0
  202. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-BUJID5UG.mjs +41 -0
  203. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-C44CZ5NI.mjs +24 -0
  204. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-EYOLEXXS.mjs +30 -0
  205. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-P7B6PWOJ.mjs +3 -0
  206. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ebnfDiagram-FTPZ3PV6.mjs +1 -0
  207. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/erDiagram-H3ERR26V.mjs +99 -0
  208. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/eventmodeling-NTZA5JFV-WKSWQHFS.mjs +1 -0
  209. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/flowDiagram-YHGXBVSY.mjs +1 -0
  210. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ganttDiagram-RWFTB7ED.mjs +292 -0
  211. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/gitGraph-4MIJSDKK-JH2HKYUO.mjs +1 -0
  212. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/gitGraphDiagram-MAR6GKOP.mjs +106 -0
  213. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/info-A6RAGUB7-3TX3OFWW.mjs +1 -0
  214. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/infoDiagram-LV547AFH.mjs +2 -0
  215. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ishikawaDiagram-PUJQGNDS.mjs +70 -0
  216. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/journeyDiagram-EW5QJT4W.mjs +139 -0
  217. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/kanban-definition-JSQERAZB.mjs +89 -0
  218. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/katex-CZ4GXH2S.mjs +257 -0
  219. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/mindmap-definition-VBJCLQLM.mjs +96 -0
  220. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/packet-AYTQ26CC-MKII6P3Y.mjs +1 -0
  221. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pegDiagram-7WILOQTJ.mjs +1 -0
  222. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pie-WAS4IAKB-6B4OPMJ5.mjs +1 -0
  223. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pieDiagram-EFA7CBSB.mjs +39 -0
  224. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/quadrantDiagram-WARVYA7P.mjs +7 -0
  225. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/radar-RG4KPBEZ-UPTR3XUL.mjs +1 -0
  226. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-74A4TZTK-MEFUPFMS.mjs +1 -0
  227. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-abnf-HS5TGJTU-R5YG2S5D.mjs +1 -0
  228. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-ebnf-LZEXJU2U-G5QEX2L6.mjs +1 -0
  229. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-peg-WCYAUIDC-H5I2ZRY2.mjs +1 -0
  230. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroadDiagram-5NIQVNLQ.mjs +1 -0
  231. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/requirementDiagram-SXREGOKZ.mjs +84 -0
  232. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sankeyDiagram-VV74M2VP.mjs +40 -0
  233. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sequenceDiagram-52ZFIFDL.mjs +162 -0
  234. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sizeCapture-FGA5AGYP.mjs +1 -0
  235. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-3QAKPIVI.mjs +1 -0
  236. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-v2-HN2P4RDZ.mjs +1 -0
  237. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/swimlanes-QLVP42QD.mjs +1 -0
  238. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/swimlanesDiagram-JKPDBFCN.mjs +8 -0
  239. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/timeline-definition-GS45XAXW.mjs +120 -0
  240. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/treeView-Q6P3EWNA-ZRJGANNQ.mjs +1 -0
  241. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/treemap-WGGIJYW6-K64VN5AS.mjs +1 -0
  242. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/vennDiagram-QIQU2ZRJ.mjs +34 -0
  243. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/wardley-WFR3VGLG-D67OWCCH.mjs +1 -0
  244. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/wardleyDiagram-U6YNM66N.mjs +78 -0
  245. package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/xychartDiagram-XJAZEDNM.mjs +7 -0
  246. package/neural-interface/public/vendor/mermaid/manifest.json +4 -0
  247. package/neural-interface/public/vendor/mermaid/mermaid-11.17.2.esm.min.mjs +14 -0
  248. package/neural-interface/scripts/build-vendor.mjs +84 -3
  249. package/neural-interface/server.js +1099 -286
  250. package/npm-shrinkwrap.json +2 -2
  251. package/package.json +1 -1
  252. package/skills/synabun/modules/schedule.md +1 -1
@@ -31,7 +31,7 @@ const NAMES = {
31
31
  apps: ['[data-menu="apps"] > .menubar-label', 'nav.apps'],
32
32
  browser: ['#menu-terminal-browser', 'menu.apps.browser'],
33
33
  studio: ['#menu-open-automation-studio', 'menu.automations.studio'],
34
- schedules: ['#menu-automations-schedules', 'tutorial.names.schedules'],
34
+ schedules: ['#menubar-schedules-btn', 'tutorial.names.schedules'],
35
35
  keybinds: ['#topright-keybinds-btn', 'tutorial.names.keybinds'],
36
36
  settings: ['#menubar-settings-btn', 'nav.settings'],
37
37
  projects: [null, 'settings.redesign.nav.projects.label'],
@@ -81,7 +81,8 @@ function names() {
81
81
  // A tooltip may end in its shortcut: "Focus Mode (V)".
82
82
  out[name] = label?.replace(/\s*\([^)]*\)\s*$/, '').trim() || t(key);
83
83
  }
84
- out.menu = document.querySelector('[data-menu="graph"] > .menubar-label')?.textContent.trim()
84
+ // 2D: the Graph menu's label. 3D: the label of the Map row in Apps, which opens its submenu.
85
+ out.menu = document.querySelector('[data-menu="graph"] > .menubar-label, #menu-map-label')?.textContent.trim()
85
86
  || t(getVariant() === '2d' ? 'nav.graph' : 'nav.map');
86
87
  out.view = out.menu.toLocaleLowerCase();
87
88
  return out;
@@ -111,10 +112,18 @@ function resolveStep(step) {
111
112
 
112
113
  // ── What the tour changes to show a step, and puts back ──
113
114
 
115
+ // The dropdown a step opens, which can differ per variant ({ '3d': 'apps' }).
116
+ const stepMenu = (step) => (step.menu && typeof step.menu === 'object' ? step.menu[getVariant()] : step.menu) || null;
117
+ // The submenu of that dropdown the step opens, by its data-submenu name ({ '3d': 'map' }).
118
+ const stepSubmenu = (step) => (step.submenu && typeof step.submenu === 'object' ? step.submenu[getVariant()] : step.submenu) || null;
119
+
114
120
  function showStage(step) {
121
+ const menu = stepMenu(step);
115
122
  for (const [el, open] of menuState) {
116
- if (el.isConnected) el.classList.toggle('open', step.menu ? el.dataset.menu === step.menu : open);
123
+ if (el.isConnected) el.classList.toggle('open', menu ? el.dataset.menu === menu : open);
117
124
  }
125
+ // ui-menubar.js opens it beside its row, or closes the one a previous step opened.
126
+ emit('menubar:submenu', menu ? stepSubmenu(step) : null);
118
127
  if (step.panel !== 'assistant') { hidePanelPeek(); return; }
119
128
  // With no session tab, opening the Assistant starts a session: its button is annotated instead.
120
129
  if (panelPeek || isAssistantPanelOpen() || !assistantPanelPeekable()) return;
@@ -135,6 +144,7 @@ function hidePanelPeek() {
135
144
  state.lastActivePanel = peek.lastActivePanel; state.lastActiveSidepanel = peek.lastActiveSidepanel;
136
145
  }
137
146
  function restoreStage() {
147
+ emit('menubar:submenu', null);
138
148
  for (const [el, open] of menuState) if (el.isConnected) el.classList.toggle('open', open);
139
149
  hidePanelPeek();
140
150
  }
@@ -352,7 +362,7 @@ function renderStep() {
352
362
  }
353
363
  // A menu or panel the tour just opened is still moving: draw once the target holds still.
354
364
  function settle(step, done) {
355
- const staged = !!step.menu || (step.panel === 'assistant' && isAssistantPanelOpen());
365
+ const staged = !!stepMenu(step) || (step.panel === 'assistant' && isAssistantPanelOpen());
356
366
  // Staged, the target is the control inside the menu or panel, not the fallback outside it.
357
367
  const inside = step.targets ? step.targets.length - (step.panel ? 1 : 0) : 0;
358
368
  const started = performance.now();
@@ -441,7 +451,7 @@ function layout(animate) {
441
451
 
442
452
  const rects = (selectors) => selectors.flatMap(s => [...document.querySelectorAll(s)])
443
453
  .filter(shown).map(el => el.getBoundingClientRect()).filter(r => r.width > 0 && r.height > 0);
444
- const avoid = rects(['.menubar-item.open .menubar-dropdown']), keep = rects(KEEP_CLEAR);
454
+ const avoid = rects(['.menubar-item.open .menubar-dropdown', '.menubar-item.open .menubar-submenu.open']), keep = rects(KEEP_CLEAR);
445
455
  const key = (...values) => values.map(v => Math.round(v)).join(',');
446
456
  const flat = (list) => list.flatMap(r => [r.left, r.top, r.width, r.height]);
447
457
  // The app redraws itself all the time: nothing the note depends on moved, nothing to do.
@@ -30,6 +30,31 @@ let _pollWired = false;
30
30
  let _desktopState = null;
31
31
  let _desktopDialog = null;
32
32
 
33
+ // One update dialog on the page, whichever surface asks for it (the badge, the toast, Notifications, Settings >
34
+ // App, the sessions list, the app's menu or tray, the notice's Details): while one is open another request leaves
35
+ // it as it is, and one still fading out goes at once before the next is drawn, so two never share the page or the
36
+ // ids their labels point at.
37
+ let _updateDialogOverlay = null;
38
+ const _closingUpdateDialogs = new Set();
39
+
40
+ function updateDialogOpen() {
41
+ return !!_updateDialogOverlay;
42
+ }
43
+
44
+ function claimUpdateDialog(overlay) {
45
+ for (const leaving of _closingUpdateDialogs) leaving.remove();
46
+ _closingUpdateDialogs.clear();
47
+ _updateDialogOverlay = overlay;
48
+ }
49
+
50
+ function releaseUpdateDialog(overlay) {
51
+ if (_updateDialogOverlay !== overlay) return;
52
+ _updateDialogOverlay = null;
53
+ _closingUpdateDialogs.add(overlay);
54
+ overlay.classList.add('closing');
55
+ setTimeout(() => { overlay.remove(); _closingUpdateDialogs.delete(overlay); }, 150);
56
+ }
57
+
33
58
  /** Where an update comes from, as the badge, the toast and the menu name it. */
34
59
  export function synabunUpdateSourceLabel(data) {
35
60
  const src = data?.source;
@@ -97,12 +122,15 @@ export async function initUpdate() {
97
122
  if (!res.ok) return;
98
123
  _versionData = await res.json();
99
124
  applyTopRightButton(_versionData);
100
- maybeShowUpdateAlert(_versionData);
125
+ // Settings > App: with automatic updates off the server looks only when asked, and the page does not ask by itself.
126
+ if (_versionData?.autoCheck !== false) maybeShowUpdateAlert(_versionData);
101
127
 
102
128
  if (!_pollWired) {
103
129
  _pollWired = true;
104
130
  setInterval(() => {
105
- forceCheckSynabunUpdate({ alert: true }).catch(() => {});
131
+ if (_versionData?.autoCheck === false) return;
132
+ // Passive: with the automatic check off (another tab may have turned it off) the server asks nothing.
133
+ forceCheckSynabunUpdate({ alert: true, passive: true }).catch(() => {});
106
134
  }, 30 * 60 * 1000);
107
135
  }
108
136
  } catch { /* silent — no update UI if check fails */ }
@@ -110,8 +138,11 @@ export async function initUpdate() {
110
138
 
111
139
  // Force a fresh server-side check (bypasses 1h cache via ?force=1) and
112
140
  // re-applies the top-right button + badge state. Returns the latest
113
- // _synabunUpdateCache shape so callers can compose toasts.
114
- export async function forceCheckSynabunUpdate({ alert = false } = {}) {
141
+ // _synabunUpdateCache shape so callers can compose toasts. `passive` (a timer,
142
+ // a drawer that refreshes itself, not a person asking): with the automatic
143
+ // check off (Settings > App) the server answers what it last saw and asks npm
144
+ // and GitHub nothing.
145
+ export async function forceCheckSynabunUpdate({ alert = false, passive = false } = {}) {
115
146
  // Inside the desktop app the app checks its own release feed; an error is
116
147
  // null here, as a failed request is, so callers list it under the errors.
117
148
  const desktop = desktopBridge();
@@ -124,7 +155,7 @@ export async function forceCheckSynabunUpdate({ alert = false } = {}) {
124
155
  }
125
156
  }
126
157
  try {
127
- const res = await fetch('/api/system/version?force=1');
158
+ const res = await fetch(`/api/system/version?force=1${passive ? '&passive=1' : ''}`);
128
159
  if (!res.ok) return null;
129
160
  _versionData = await res.json();
130
161
  applyTopRightButton(_versionData);
@@ -142,7 +173,7 @@ export async function forceCheckSynabunUpdate({ alert = false } = {}) {
142
173
  */
143
174
  export async function syncSynabunUpdateData() {
144
175
  const desktop = desktopBridge();
145
- if (!desktop) return forceCheckSynabunUpdate();
176
+ if (!desktop) return forceCheckSynabunUpdate({ passive: true });
146
177
  try {
147
178
  return applyDesktopState(await desktop.updates.state(), { alert: false });
148
179
  } catch {
@@ -150,11 +181,41 @@ export async function syncSynabunUpdateData() {
150
181
  }
151
182
  }
152
183
 
184
+ /**
185
+ * The update state as it is, without a check (Settings > App): the desktop
186
+ * app's last report, or the server's last look. Published to the badge and the
187
+ * dialog, so what a page shows is what Install update opens.
188
+ */
189
+ export async function refreshSynabunUpdateData() {
190
+ if (desktopBridge()) return syncSynabunUpdateData();
191
+ try {
192
+ const res = await fetch('/api/system/version');
193
+ if (!res.ok) return _versionData;
194
+ _versionData = await res.json();
195
+ applyTopRightButton(_versionData);
196
+ return _versionData;
197
+ } catch {
198
+ return _versionData;
199
+ }
200
+ }
201
+
153
202
  export function openSynabunUpdateModal() {
154
203
  if (!_versionData?.updateAvailable) return;
155
204
  openUpdateModal();
156
205
  }
157
206
 
207
+ /** Settings > App > Updates (the page id is its deep link: settings-ia.js). */
208
+ export function openUpdateSettings() {
209
+ import('./ui-settings.js')
210
+ .then((settings) => settings.openSettingsModal({ tab: 'app', scrollTo: 'stg-sec-app-updates', expand: ['stg-sec-app-updates'] }))
211
+ .catch((error) => console.warn('[update] could not open Settings', error));
212
+ }
213
+
214
+ /** Settings > App changed the automatic update check of an npm or Git install: the half-hourly look follows it. */
215
+ export function noteSynabunAutoCheck(auto) {
216
+ if (_versionData && !_versionData.desktop) _versionData = { ..._versionData, autoCheck: auto !== false };
217
+ }
218
+
158
219
  // Read-only accessor for the Notifications drawer to mirror SynaBun core
159
220
  // update state without re-fetching. May be null until initUpdate() resolves.
160
221
  export function getSynabunUpdateData() {
@@ -209,7 +270,8 @@ function applyDesktopState(state, { alert = true } = {}) {
209
270
  // An offer that waits for the user (macOS: a copy to move to Applications, or one in a folder SynaBun
210
271
  // cannot write): one toast per version and session. Every other update downloads and installs by
211
272
  // itself, and the notice speaks when there is something to say.
212
- if (alert && _versionData.updateAvailable && _versionData.status === 'available' && _versionData.install !== 'restart') maybeShowUpdateAlert(_versionData);
273
+ // With automatic updates off (Settings > App) every offer waits for the user, so it is said too.
274
+ if (alert && _versionData.updateAvailable && _versionData.status === 'available' && (_versionData.install !== 'restart' || _versionData.autoUpdate === false)) maybeShowUpdateAlert(_versionData);
213
275
  emit('synabun-update:changed', _versionData);
214
276
  _desktopDialog?.update(_desktopState);
215
277
  renderDesktopNotice();
@@ -373,7 +435,8 @@ function renderDesktopStep(view) {
373
435
  const actions = view.actions.length ? `
374
436
  <div class="tag-delete-modal-actions" style="margin-top:14px">
375
437
  ${view.actions.map(item => `<button class="action-btn action-btn--${item.kind}" type="button" data-desktop-action="${item.id}" id="desktop-update-${item.id}">${esc(item.label)}</button>`).join('')}
376
- </div>` : '';
438
+ </div>
439
+ <p style="margin:10px 0 0"><button class="update-notice-link" type="button" data-desktop-action="settings" id="desktop-update-settings" style="background:none;border:0;padding:0;cursor:pointer;font:inherit;font-size:11px">${esc(desktopT('update.settingsLink'))}</button></p>` : '';
377
440
  return `
378
441
  <h3 class="update-modal-title" id="desktop-update-title">${working}${esc(view.title)}${pill}</h3>
379
442
  ${diff}
@@ -396,7 +459,7 @@ function openDesktopUpdateModal() {
396
459
  const desktop = desktopBridge();
397
460
  if (!desktop) return;
398
461
  // One dialog: a second request (the badge, the menu, the tray) leaves the open one as it is.
399
- if (_desktopDialog) return;
462
+ if (_desktopDialog || updateDialogOpen()) return;
400
463
  const viewOf = (state) => desktopUpdateView(state, { t: desktopT, number: desktopNumber, time: desktopTime });
401
464
  const first = viewOf(_desktopState);
402
465
  if (first.step === 'none') return;
@@ -590,6 +653,8 @@ function openDesktopUpdateModal() {
590
653
 
591
654
  async function act(id) {
592
655
  if (working) return;
656
+ // Settings > App > Updates: automatic updates, the version, a check.
657
+ if (id === 'settings') { close(); openUpdateSettings(); return; }
593
658
  // Later on a ready update postpones its restart; everywhere else it only closes the dialog.
594
659
  if (id === 'later' && view?.step === 'downloaded') {
595
660
  close();
@@ -686,8 +751,7 @@ function openDesktopUpdateModal() {
686
751
  _desktopDialog = null;
687
752
  keepTicking(false);
688
753
  window.removeEventListener('keydown', onKey, true);
689
- overlay.classList.add('closing');
690
- setTimeout(() => overlay.remove(), 150);
754
+ releaseUpdateDialog(overlay);
691
755
  }
692
756
 
693
757
  overlay.addEventListener('click', (e) => {
@@ -695,6 +759,7 @@ function openDesktopUpdateModal() {
695
759
  });
696
760
  window.addEventListener('keydown', onKey, true);
697
761
  _desktopDialog = { overlay, update, close };
762
+ claimUpdateDialog(overlay);
698
763
  document.body.appendChild(overlay);
699
764
  setStep(first);
700
765
  keepTicking(first.ticking);
@@ -705,6 +770,7 @@ function openDesktopUpdateModal() {
705
770
  function openUpdateModal() {
706
771
  if (!_versionData) return;
707
772
  if (_versionData.desktop) { openDesktopUpdateModal(); return; }
773
+ if (updateDialogOpen()) return;
708
774
 
709
775
  let step = 1;
710
776
  let backupDone = false;
@@ -871,7 +937,8 @@ function openUpdateModal() {
871
937
  <span class="update-ver update-ver--new">v${esc(_versionData.latest)}</span>
872
938
  </div>
873
939
  <p style="font-size:12px;color:var(--t-muted);margin:12px 0 6px">${srcCopy}</p>
874
- <p style="font-size:11px;color:var(--t-muted);opacity:.75;margin:0 0 18px">${npmStable}${npmBeta}${gitBit}</p>
940
+ <p style="font-size:11px;color:var(--t-muted);opacity:.75;margin:0 0 6px">${npmStable}${npmBeta}${gitBit}</p>
941
+ <p style="margin:0 0 18px"><button class="update-notice-link" type="button" id="update-settings" style="background:none;border:0;padding:0;cursor:pointer;font:inherit;font-size:11px">Update settings</button></p>
875
942
  <div class="tag-delete-modal-actions">
876
943
  <button class="action-btn action-btn--ghost" id="update-cancel">Cancel</button>
877
944
  <button class="action-btn action-btn--primary" id="update-next">Next</button>
@@ -972,6 +1039,8 @@ function openUpdateModal() {
972
1039
  // Cancel / Done
973
1040
  scope.querySelector('#update-cancel')?.addEventListener('click', close);
974
1041
  scope.querySelector('#update-done')?.addEventListener('click', close);
1042
+ // Settings > App > Updates: the automatic check, the version, a check now.
1043
+ scope.querySelector('#update-settings')?.addEventListener('click', () => { close(); openUpdateSettings(); });
975
1044
 
976
1045
  // Next
977
1046
  scope.querySelector('#update-next')?.addEventListener('click', () => {
@@ -1167,14 +1236,14 @@ function openUpdateModal() {
1167
1236
  }
1168
1237
 
1169
1238
  function close() {
1170
- overlay.classList.add('closing');
1171
- setTimeout(() => overlay.remove(), 150);
1239
+ releaseUpdateDialog(overlay);
1172
1240
  }
1173
1241
 
1174
1242
  // Boot: attach shell once, wire overlay-click-to-close, render initial step.
1175
1243
  overlay.addEventListener('click', (e) => {
1176
1244
  if (e.target === overlay) close();
1177
1245
  });
1246
+ claimUpdateDialog(overlay);
1178
1247
  document.body.appendChild(overlay);
1179
1248
  syncStepDots();
1180
1249
  setStep(1);
@@ -903,7 +903,8 @@ function updateElementDOM(dom, el) {
903
903
  svg.setAttribute('viewBox', `0 0 ${w} ${h}`);
904
904
  svg.setAttribute('width', w);
905
905
  svg.setAttribute('height', h);
906
- const sc = el.color || 'rgba(255,255,255,0.8)';
906
+ // The colour is whatever whiteboard_add / whiteboard_update was given: an attribute value, never markup.
907
+ const sc = String(el.color || 'rgba(255,255,255,0.8)').replace(/[&"<>]/g, (c) => ({ '&': '&amp;', '"': '&quot;', '<': '&lt;', '>': '&gt;' })[c]);
907
908
  if (shape === 'drawn-circle') {
908
909
  svg.innerHTML = `<path d="${generateDrawnCirclePath(w, h, el.id)}" fill="none" stroke="${sc}" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>`;
909
910
  } else {
@@ -46,7 +46,8 @@ import { initCostWidget } from '../../shared/ui-cost-widget.js';
46
46
  import { initGames, clearGameOnLoad } from '../../shared/ui-games.js';
47
47
  import { initWorkspaces } from '../../shared/ui-workspaces.js';
48
48
  import { initInvite } from '../../shared/ui-invite.js';
49
- import { initSync } from '../../shared/ui-sync.js';
49
+ import { initSync, isGuest } from '../../shared/ui-sync.js';
50
+ import { startLaunchPrefetch } from '../../shared/launch-prefetch.js';
50
51
  import { initKeybinds, registerAction, getDisplayKey } from '../../shared/ui-keybinds.js';
51
52
  import { initTutorial } from '../../shared/ui-tutorial.js';
52
53
  import { initImageGallery } from '../../shared/ui-image-gallery.js';
@@ -401,6 +402,8 @@ async function boot() {
401
402
 
402
403
  // Mark boot complete
403
404
  _bootComplete = true;
405
+ // Painted: what the windows, menus and Settings wait for is read now, in idle time (launch-prefetch.js).
406
+ startLaunchPrefetch({ isGuest });
404
407
 
405
408
  // Focus mode restored at load: the viz:toggle emitted by applyIfaceConfig
406
409
  // ran before boot and was ignored above, so apply the persisted state to
@@ -46,6 +46,7 @@ import { initGames, clearGameOnLoad } from '../../shared/ui-games.js';
46
46
  import { initWorkspaces } from '../../shared/ui-workspaces.js';
47
47
  import { initInvite } from '../../shared/ui-invite.js';
48
48
  import { initSync, isGuest } from '../../shared/ui-sync.js';
49
+ import { startLaunchPrefetch } from '../../shared/launch-prefetch.js';
49
50
  import { initKeybinds, registerAction } from '../../shared/ui-keybinds.js';
50
51
  import { initTutorial } from '../../shared/ui-tutorial.js';
51
52
  import { initImageGallery } from '../../shared/ui-image-gallery.js';
@@ -465,6 +466,8 @@ async function boot() {
465
466
  try { emit('trash:refresh'); } catch {}
466
467
  hideLoading(400);
467
468
  _bootComplete = true;
469
+ // Painted: what the windows, menus and Settings wait for is read now, in idle time (launch-prefetch.js).
470
+ startLaunchPrefetch({ isGuest });
468
471
  } catch (err) {
469
472
  console.error('Init error:', err);
470
473
  const isNetworkError = err.message === 'Failed to fetch' || err.name === 'TypeError';
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2006, Ivan Sagalaev.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ * Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,9 @@
1
+ pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
2
+ Theme: GitHub Dark Dimmed
3
+ Description: Dark dimmed theme as seen on github.com
4
+ Author: github.com
5
+ Maintainer: @Hirse
6
+ Updated: 2021-05-15
7
+
8
+ Colors taken from GitHub's CSS
9
+ */.hljs{color:#adbac7;background:#22272e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#f47067}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#dcbdfb}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#6cb6ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#96d0ff}.hljs-built_in,.hljs-symbol{color:#f69d50}.hljs-code,.hljs-comment,.hljs-formula{color:#768390}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#8ddb8c}.hljs-subst{color:#adbac7}.hljs-section{color:#316dca;font-weight:700}.hljs-bullet{color:#eac55f}.hljs-emphasis{color:#adbac7;font-style:italic}.hljs-strong{color:#adbac7;font-weight:700}.hljs-addition{color:#b4f1b4;background-color:#1b4721}.hljs-deletion{color:#ffd8d3;background-color:#78191b}