@webship.co/workspace 1.0.0-alpha1 → 1.0.0-beta2

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 (634) hide show
  1. package/LICENSE +339 -0
  2. package/README.md +28 -364
  3. package/core/bin/workspace.js +135 -0
  4. package/core/config/settings.labels.yml +514 -0
  5. package/core/config/settings.template.yml +292 -0
  6. package/core/config/style.yml +53 -0
  7. package/core/config/theme.default.yml +161 -0
  8. package/core/config/theme.dispatch.yml +166 -0
  9. package/core/config/theme.drupal.yml +175 -0
  10. package/core/config/theme.ember.yml +160 -0
  11. package/core/config/theme.github.yml +172 -0
  12. package/core/config/theme.gitlab.yml +168 -0
  13. package/core/config/theme.press.yml +161 -0
  14. package/core/config/theme.slate.yml +160 -0
  15. package/core/config/theme.upsun.yml +174 -0
  16. package/core/docs/architecture.svg +65 -0
  17. package/core/docs/getting-started.md +51 -0
  18. package/core/docs/plugins.md +27 -0
  19. package/core/docs/releases.md +23 -0
  20. package/core/docs/testing.md +15 -0
  21. package/core/docs/workspaces.md +25 -0
  22. package/core/scripts/args/arg-ai-items.sh +65 -0
  23. package/core/scripts/args/arg-autostart.sh +31 -0
  24. package/core/scripts/args/arg-avatar-agent.sh +28 -0
  25. package/core/scripts/args/arg-avatar-catalog.sh +12 -0
  26. package/core/scripts/args/arg-avatar-character.sh +68 -0
  27. package/core/scripts/args/arg-avatar-voice.sh +24 -0
  28. package/core/scripts/args/arg-avatar.sh +22 -0
  29. package/core/scripts/args/arg-checks.sh +36 -0
  30. package/core/scripts/args/arg-clone.sh +42 -0
  31. package/core/scripts/args/arg-commands.sh +51 -0
  32. package/core/scripts/args/arg-cucumber.sh +34 -0
  33. package/core/scripts/args/arg-distribution.sh +30 -0
  34. package/core/scripts/args/arg-drupal.sh +39 -0
  35. package/core/scripts/args/arg-drupal_cms.sh +18 -0
  36. package/core/scripts/args/arg-gitlab-ci-local.sh +25 -0
  37. package/core/scripts/args/arg-graphify.sh +36 -0
  38. package/core/scripts/args/arg-graphs.sh +12 -0
  39. package/core/scripts/args/arg-hostnames.sh +23 -0
  40. package/core/scripts/args/arg-milvus-backup.sh +8 -0
  41. package/core/scripts/args/arg-milvus-mcp.sh +12 -0
  42. package/core/scripts/args/arg-milvus.sh +32 -0
  43. package/core/scripts/args/arg-obsidian.sh +17 -0
  44. package/core/scripts/args/arg-odoo.sh +18 -0
  45. package/core/scripts/args/arg-penpot-backup.sh +8 -0
  46. package/core/scripts/args/arg-penpot-mcp.sh +15 -0
  47. package/core/scripts/args/arg-penpot-token.sh +17 -0
  48. package/core/scripts/args/arg-penpot.sh +44 -0
  49. package/core/scripts/args/arg-rag.sh +21 -0
  50. package/core/scripts/args/arg-ragify.sh +35 -0
  51. package/core/scripts/args/arg-reclaim.sh +18 -0
  52. package/core/scripts/args/arg-release.sh +21 -0
  53. package/core/scripts/args/arg-screen.sh +28 -0
  54. package/core/scripts/args/arg-site-template.sh +13 -0
  55. package/core/scripts/args/arg-spdd.sh +16 -0
  56. package/core/scripts/args/arg-specs.sh +22 -0
  57. package/core/scripts/args/arg-storage.sh +36 -0
  58. package/core/scripts/args/arg-testing.sh +36 -0
  59. package/core/scripts/args/arg-webship.sh +34 -0
  60. package/core/scripts/args/arg-webships-project.sh +22 -0
  61. package/core/scripts/args/arg-webships-site-template.sh +17 -0
  62. package/core/scripts/args/arg-webships.sh +34 -0
  63. package/core/scripts/args/arg-website-site-template.sh +17 -0
  64. package/core/scripts/args/arg-website.sh +25 -0
  65. package/core/scripts/args/arg-wordpress.sh +18 -0
  66. package/core/scripts/autostart-run.sh +162 -0
  67. package/core/scripts/autostart-stop.sh +30 -0
  68. package/core/scripts/autostart-watch.sh +43 -0
  69. package/core/scripts/autostart.sh +26 -0
  70. package/core/scripts/bootstrap-functions.sh +117 -0
  71. package/core/scripts/bootstrap-libraries.sh +10 -0
  72. package/core/scripts/bootstrap.sh +71 -0
  73. package/core/scripts/ddev-shim/ddev +122 -0
  74. package/core/scripts/docker-gid.sh +119 -0
  75. package/core/scripts/functions/arg-site-template.sh +28 -0
  76. package/core/scripts/functions/fun-ai-items-lock.sh +175 -0
  77. package/core/scripts/functions/fun-ai-items-sources.sh +298 -0
  78. package/core/scripts/functions/fun-ai-items.sh +621 -0
  79. package/core/scripts/functions/fun-ai-providers.sh +72 -0
  80. package/core/scripts/functions/fun-autostart.sh +429 -0
  81. package/core/scripts/functions/fun-avatar.sh +441 -0
  82. package/core/scripts/functions/fun-backup-item.sh +50 -0
  83. package/core/scripts/functions/fun-build-distribution.sh +226 -0
  84. package/core/scripts/functions/fun-build-site-template.sh +104 -0
  85. package/core/scripts/functions/fun-build-webships.sh +161 -0
  86. package/core/scripts/functions/fun-build-website.sh +199 -0
  87. package/core/scripts/functions/fun-checks.sh +243 -0
  88. package/core/scripts/functions/fun-clone-project.sh +289 -0
  89. package/core/scripts/functions/fun-commands.sh +521 -0
  90. package/core/scripts/functions/fun-database.sh +63 -0
  91. package/core/scripts/functions/fun-ddev-hostnames.sh +213 -0
  92. package/core/scripts/functions/fun-ddev-nodejs.sh +15 -0
  93. package/core/scripts/functions/fun-ddev-telemetry.sh +15 -0
  94. package/core/scripts/functions/fun-default-settings.sh +28 -0
  95. package/core/scripts/functions/fun-distribution-cucumber.sh +45 -0
  96. package/core/scripts/functions/fun-distribution-drupal.sh +25 -0
  97. package/core/scripts/functions/fun-distribution-drupal_cms.sh +35 -0
  98. package/core/scripts/functions/fun-distribution-webship.sh +28 -0
  99. package/core/scripts/functions/fun-distribution-webships.sh +33 -0
  100. package/core/scripts/functions/fun-distribution-website.sh +19 -0
  101. package/core/scripts/functions/fun-drush.sh +48 -0
  102. package/core/scripts/functions/fun-elevenlabs.sh +179 -0
  103. package/core/scripts/functions/fun-files.sh +19 -0
  104. package/core/scripts/functions/fun-git-worktrees.sh +142 -0
  105. package/core/scripts/functions/fun-gitlab-ci.sh +156 -0
  106. package/core/scripts/functions/fun-hostnames-cli.sh +88 -0
  107. package/core/scripts/functions/fun-milvus.sh +584 -0
  108. package/core/scripts/functions/fun-odoo.sh +121 -0
  109. package/core/scripts/functions/fun-penpot.sh +724 -0
  110. package/core/scripts/functions/fun-project-name.sh +20 -0
  111. package/core/scripts/functions/fun-rag.sh +253 -0
  112. package/core/scripts/functions/fun-ragify.sh +165 -0
  113. package/core/scripts/functions/fun-reclaim.sh +297 -0
  114. package/core/scripts/functions/fun-release.sh +159 -0
  115. package/core/scripts/functions/fun-remove-project.sh +319 -0
  116. package/core/scripts/functions/fun-screen.sh +96 -0
  117. package/core/scripts/functions/fun-spdd.sh +676 -0
  118. package/core/scripts/functions/fun-specs-share.sh +237 -0
  119. package/core/scripts/functions/fun-storage.sh +347 -0
  120. package/core/scripts/functions/fun-testing.sh +329 -0
  121. package/core/scripts/functions/fun-users.sh +87 -0
  122. package/core/scripts/functions/fun-version.sh +72 -0
  123. package/core/scripts/functions/fun-video-edit.sh +48 -0
  124. package/core/scripts/functions/fun-voice.sh +45 -0
  125. package/core/scripts/functions/fun-wordpress.sh +59 -0
  126. package/core/scripts/host-mounts.sh +161 -0
  127. package/core/scripts/install.sh +602 -0
  128. package/core/scripts/libs/__pycache__/video_edit.cpython-312.pyc +0 -0
  129. package/core/scripts/libs/argparse.sh +93 -0
  130. package/core/scripts/libs/bash-yaml.sh +52 -0
  131. package/core/scripts/libs/checks_plan.js +312 -0
  132. package/core/scripts/libs/elevenlabs.py +627 -0
  133. package/core/scripts/libs/progress-bar.sh +19 -0
  134. package/core/scripts/libs/rag_index.py +446 -0
  135. package/core/scripts/libs/video_edit.py +636 -0
  136. package/core/scripts/libs/voice.py +430 -0
  137. package/core/scripts/plugins/jira/host-install.sh +119 -0
  138. package/core/scripts/plugins/jira/host-mounts.txt +2 -0
  139. package/core/scripts/plugins/upsun/args/arg-upsun.sh +51 -0
  140. package/core/scripts/plugins/upsun/functions/fun-upsun.sh +304 -0
  141. package/core/scripts/plugins/upsun/host-install.sh +99 -0
  142. package/core/scripts/plugins/upsun/host-mounts.txt +1 -0
  143. package/core/scripts/plugins/upsun/upsun-ai.sh +133 -0
  144. package/core/scripts/plugins.sh +152 -0
  145. package/core/scripts/release.sh +69 -0
  146. package/core/scripts/storage.sh +39 -0
  147. package/core/scripts/sync-tooling.sh +246 -0
  148. package/core/scripts/tests/cmd-smoke-test.sh +109 -0
  149. package/core/scripts/trust-https.sh +257 -0
  150. package/core/workspace-app/.ddev/commands/web/test-dashboard +49 -0
  151. package/core/workspace-app/.ddev/config.yaml +400 -0
  152. package/core/workspace-app/.ddev/docker-compose.dood.yaml +45 -0
  153. package/core/workspace-app/.ddev/docker-compose.plugin-jira-twg.yaml +26 -0
  154. package/core/workspace-app/.ddev/docker-compose.plugin-upsun-upsun-cli.yaml +8 -0
  155. package/core/workspace-app/.ddev/docker-compose.screens.yaml +15 -0
  156. package/core/workspace-app/.ddev/nginx_full/nginx-site.conf +114 -0
  157. package/core/workspace-app/.ddev/web-build/Dockerfile.workspace-app +203 -0
  158. package/core/workspace-app/.ddev/web-build/ddev-shim-ddev +122 -0
  159. package/{PLUGINS.md → core/workspace-app/PLUGINS.md} +1 -1
  160. package/core/workspace-app/README.md +380 -0
  161. package/{actions → core/workspace-app/actions}/ddev.js +0 -1
  162. package/{actions → core/workspace-app/actions}/rag.js +0 -1
  163. package/{actions → core/workspace-app/actions}/testing.js +0 -1
  164. package/{assistant.js → core/workspace-app/assistant.js} +1 -10
  165. package/{git-info.js → core/workspace-app/git-info.js} +17 -1
  166. package/core/workspace-app/package.json +29 -0
  167. package/core/workspace-app/plugin-catalog.js +50 -0
  168. package/{plugin-loader.js → core/workspace-app/plugin-loader.js} +19 -1
  169. package/{plugins-page.js → core/workspace-app/plugins-page.js} +28 -2
  170. package/{row-layout.js → core/workspace-app/row-layout.js} +0 -1
  171. package/{server.js → core/workspace-app/server.js} +26 -225
  172. package/core/workspace-app/tests/features/actions-rail.feature +44 -0
  173. package/core/workspace-app/tests/features/ai-items.feature +23 -0
  174. package/core/workspace-app/tests/features/assistant-speech.feature +63 -0
  175. package/core/workspace-app/tests/features/checks.feature +39 -0
  176. package/core/workspace-app/tests/features/clone-project.feature +30 -0
  177. package/core/workspace-app/tests/features/command-authoring.feature +58 -0
  178. package/core/workspace-app/tests/features/dashboard.feature +57 -0
  179. package/core/workspace-app/tests/features/menus.feature +29 -0
  180. package/core/workspace-app/tests/features/plugins/jira/jira.feature +47 -0
  181. package/core/workspace-app/tests/features/plugins.feature +20 -0
  182. package/core/workspace-app/tests/features/project-actions.feature +40 -0
  183. package/core/workspace-app/tests/features/screens.feature +29 -0
  184. package/core/workspace-app/tests/features/settings.feature +46 -0
  185. package/core/workspace-app/tests/features/test-reports.feature +32 -0
  186. package/core/workspace-app/tests/features/theme.feature +40 -0
  187. package/core/workspace-app/tests/step-definitions/actions-post.steps.js +25 -0
  188. package/core/workspace-app/tests/step-definitions/assistant-speech.steps.js +152 -0
  189. package/core/workspace-app/tests/step-definitions/preconditions.steps.js +100 -0
  190. package/core/workspace-app/tests/unit/_isolated-config.js +31 -0
  191. package/core/workspace-app/tests/unit/accessibility.test.js +124 -0
  192. package/core/workspace-app/tests/unit/actions-rail-ux.test.js +56 -0
  193. package/core/workspace-app/tests/unit/actions-rail.test.js +51 -0
  194. package/core/workspace-app/tests/unit/ai-inventory.test.js +64 -0
  195. package/core/workspace-app/tests/unit/app-docs.test.js +64 -0
  196. package/core/workspace-app/tests/unit/assistant-avatar.test.js +110 -0
  197. package/core/workspace-app/tests/unit/assistant-cast.test.js +105 -0
  198. package/core/workspace-app/tests/unit/assistant-send-animation.test.js +15 -0
  199. package/core/workspace-app/tests/unit/assistant-suggestions.test.js +112 -0
  200. package/core/workspace-app/tests/unit/assistant-switches.test.js +53 -0
  201. package/core/workspace-app/tests/unit/assistant-views.test.js +146 -0
  202. package/core/workspace-app/tests/unit/assistant-working-indicator.test.js +49 -0
  203. package/core/workspace-app/tests/unit/assistant.test.js +61 -0
  204. package/core/workspace-app/tests/unit/audio-player.test.js +147 -0
  205. package/core/workspace-app/tests/unit/audio-voice.test.js +634 -0
  206. package/core/workspace-app/tests/unit/auth-google.test.js +180 -0
  207. package/core/workspace-app/tests/unit/autostart-watch.test.js +76 -0
  208. package/core/workspace-app/tests/unit/browsers.test.js +76 -0
  209. package/core/workspace-app/tests/unit/build-distribution.test.js +125 -0
  210. package/core/workspace-app/tests/unit/build-order.test.js +153 -0
  211. package/core/workspace-app/tests/unit/builder-args.test.js +113 -0
  212. package/core/workspace-app/tests/unit/builders.test.js +158 -0
  213. package/core/workspace-app/tests/unit/card-state-toggle.test.js +29 -0
  214. package/core/workspace-app/tests/unit/changelog.test.js +177 -0
  215. package/core/workspace-app/tests/unit/chat-thread.test.js +92 -0
  216. package/core/workspace-app/tests/unit/checks-plan.test.js +205 -0
  217. package/core/workspace-app/tests/unit/claude-args.test.js +182 -0
  218. package/core/workspace-app/tests/unit/claude-code-here.test.js +15 -0
  219. package/core/workspace-app/tests/unit/claude-resume.test.js +147 -0
  220. package/core/workspace-app/tests/unit/claude-screen-options.test.js +84 -0
  221. package/core/workspace-app/tests/unit/claude-session.test.js +41 -0
  222. package/core/workspace-app/tests/unit/command-flags.test.js +45 -0
  223. package/core/workspace-app/tests/unit/command-palette.test.js +105 -0
  224. package/core/workspace-app/tests/unit/commands-center.test.js +338 -0
  225. package/core/workspace-app/tests/unit/composer-menu.test.js +187 -0
  226. package/core/workspace-app/tests/unit/config-yaml.test.js +116 -0
  227. package/core/workspace-app/tests/unit/confirm-dialog.test.js +69 -0
  228. package/core/workspace-app/tests/unit/create-card.test.js +85 -0
  229. package/core/workspace-app/tests/unit/ddev-addons.test.js +144 -0
  230. package/core/workspace-app/tests/unit/ddev-auth-ssh.test.js +40 -0
  231. package/core/workspace-app/tests/unit/ddev-custom-commands.test.js +56 -0
  232. package/core/workspace-app/tests/unit/ddev-diagnose.test.js +57 -0
  233. package/core/workspace-app/tests/unit/ddev-domains.test.js +153 -0
  234. package/core/workspace-app/tests/unit/ddev-hostnames.test.js +143 -0
  235. package/core/workspace-app/tests/unit/ddev-import.test.js +82 -0
  236. package/core/workspace-app/tests/unit/ddev-mail.test.js +135 -0
  237. package/core/workspace-app/tests/unit/ddev-menu-and-create.test.js +28 -0
  238. package/core/workspace-app/tests/unit/ddev-mutagen.test.js +37 -0
  239. package/core/workspace-app/tests/unit/ddev-options.test.js +51 -0
  240. package/core/workspace-app/tests/unit/ddev-share.test.js +40 -0
  241. package/core/workspace-app/tests/unit/ddev-shim.test.js +57 -0
  242. package/core/workspace-app/tests/unit/ddev-snapshots.test.js +142 -0
  243. package/core/workspace-app/tests/unit/ddev-start-daemons.test.js +62 -0
  244. package/core/workspace-app/tests/unit/ddev-xdebug.test.js +41 -0
  245. package/core/workspace-app/tests/unit/deep-chat-origin.test.js +38 -0
  246. package/core/workspace-app/tests/unit/density.test.js +52 -0
  247. package/core/workspace-app/tests/unit/elevenlabs.test.js +453 -0
  248. package/core/workspace-app/tests/unit/event-log.test.js +102 -0
  249. package/core/workspace-app/tests/unit/favicon.test.js +68 -0
  250. package/core/workspace-app/tests/unit/files-browser.test.js +224 -0
  251. package/core/workspace-app/tests/unit/git-info.test.js +26 -0
  252. package/core/workspace-app/tests/unit/grid-and-list.test.js +103 -0
  253. package/core/workspace-app/tests/unit/host-tool-wrapper.test.js +18 -0
  254. package/core/workspace-app/tests/unit/html-patterns.test.js +51 -0
  255. package/core/workspace-app/tests/unit/ide-infra.test.js +28 -0
  256. package/core/workspace-app/tests/unit/images-ai.test.js +201 -0
  257. package/core/workspace-app/tests/unit/images-create.test.js +59 -0
  258. package/core/workspace-app/tests/unit/images-providers.test.js +248 -0
  259. package/core/workspace-app/tests/unit/images-svg.test.js +213 -0
  260. package/core/workspace-app/tests/unit/images-workspace.test.js +144 -0
  261. package/core/workspace-app/tests/unit/jobs-fragment.test.js +66 -0
  262. package/core/workspace-app/tests/unit/media-ux.test.js +164 -0
  263. package/core/workspace-app/tests/unit/modal-fit.test.js +87 -0
  264. package/core/workspace-app/tests/unit/modules-load.test.js +23 -0
  265. package/core/workspace-app/tests/unit/narration.test.js +186 -0
  266. package/core/workspace-app/tests/unit/navigation-editor.test.js +260 -0
  267. package/core/workspace-app/tests/unit/navigation.test.js +254 -0
  268. package/core/workspace-app/tests/unit/new-folder.test.js +121 -0
  269. package/core/workspace-app/tests/unit/new-screen-form.test.js +149 -0
  270. package/core/workspace-app/tests/unit/node-menu.test.js +161 -0
  271. package/core/workspace-app/tests/unit/notes.test.js +128 -0
  272. package/core/workspace-app/tests/unit/page-structure.test.js +40 -0
  273. package/core/workspace-app/tests/unit/page-width.test.js +59 -0
  274. package/core/workspace-app/tests/unit/php-version.test.js +90 -0
  275. package/core/workspace-app/tests/unit/plan-card.test.js +44 -0
  276. package/core/workspace-app/tests/unit/plugin-catalog.test.js +31 -0
  277. package/core/workspace-app/tests/unit/plugin-system.test.js +251 -0
  278. package/core/workspace-app/tests/unit/plugins-page.test.js +28 -0
  279. package/core/workspace-app/tests/unit/plugins.test.js +58 -0
  280. package/core/workspace-app/tests/unit/project-activity-filter.test.js +180 -0
  281. package/core/workspace-app/tests/unit/project-make.test.js +143 -0
  282. package/core/workspace-app/tests/unit/project-name.test.js +202 -0
  283. package/core/workspace-app/tests/unit/reader.test.js +62 -0
  284. package/core/workspace-app/tests/unit/release.test.js +92 -0
  285. package/core/workspace-app/tests/unit/remove-confirm.test.js +37 -0
  286. package/core/workspace-app/tests/unit/report-pdf.test.js +171 -0
  287. package/core/workspace-app/tests/unit/round-11.test.js +31 -0
  288. package/core/workspace-app/tests/unit/round-12.test.js +37 -0
  289. package/core/workspace-app/tests/unit/row-layout.test.js +585 -0
  290. package/core/workspace-app/tests/unit/row-menus-fold.test.js +29 -0
  291. package/core/workspace-app/tests/unit/rows-add-modal.test.js +68 -0
  292. package/core/workspace-app/tests/unit/screen-runner-queue.test.js +41 -0
  293. package/core/workspace-app/tests/unit/screen-window.test.js +116 -0
  294. package/core/workspace-app/tests/unit/screens-beside-running.test.js +19 -0
  295. package/core/workspace-app/tests/unit/screens-columns.test.js +79 -0
  296. package/core/workspace-app/tests/unit/screens-menu.test.js +84 -0
  297. package/core/workspace-app/tests/unit/screens-modal-overlay.test.js +14 -0
  298. package/core/workspace-app/tests/unit/screens-waiting.test.js +129 -0
  299. package/core/workspace-app/tests/unit/screens.test.js +74 -0
  300. package/core/workspace-app/tests/unit/second-storage.test.js +218 -0
  301. package/core/workspace-app/tests/unit/session-name.test.js +64 -0
  302. package/core/workspace-app/tests/unit/settings-file.test.js +173 -0
  303. package/core/workspace-app/tests/unit/settings-nested-list.test.js +54 -0
  304. package/core/workspace-app/tests/unit/settings-raw.test.js +177 -0
  305. package/core/workspace-app/tests/unit/shared-prefs.test.js +49 -0
  306. package/core/workspace-app/tests/unit/speech.test.js +290 -0
  307. package/core/workspace-app/tests/unit/static-caching.test.js +39 -0
  308. package/core/workspace-app/tests/unit/status-language.test.js +47 -0
  309. package/core/workspace-app/tests/unit/tab-modal.test.js +69 -0
  310. package/core/workspace-app/tests/unit/tab-title.test.js +37 -0
  311. package/core/workspace-app/tests/unit/template-literals.test.js +52 -0
  312. package/core/workspace-app/tests/unit/terminal-scrollback.test.js +61 -0
  313. package/core/workspace-app/tests/unit/terminal-size.test.js +103 -0
  314. package/core/workspace-app/tests/unit/terminal-style.test.js +84 -0
  315. package/core/workspace-app/tests/unit/terminal-windows.test.js +154 -0
  316. package/core/workspace-app/tests/unit/themes.test.js +453 -0
  317. package/core/workspace-app/tests/unit/tool-labels.test.js +34 -0
  318. package/core/workspace-app/tests/unit/topbar-icons.test.js +47 -0
  319. package/core/workspace-app/tests/unit/update-docker-gid.test.js +51 -0
  320. package/core/workspace-app/tests/unit/user-guide.test.js +60 -0
  321. package/core/workspace-app/tests/unit/version-check.test.js +98 -0
  322. package/core/workspace-app/tests/unit/version-link.test.js +50 -0
  323. package/core/workspace-app/tests/unit/video-borrow.test.js +198 -0
  324. package/core/workspace-app/tests/unit/video-edit-ask.test.js +93 -0
  325. package/core/workspace-app/tests/unit/video-edit-short.test.js +42 -0
  326. package/core/workspace-app/tests/unit/video-edit.test.js +417 -0
  327. package/core/workspace-app/tests/unit/video-transcript.test.js +237 -0
  328. package/core/workspace-app/tests/unit/waiting.test.js +48 -0
  329. package/core/workspace-app/tests/unit/wordpress-odoo-builders.test.js +38 -0
  330. package/core/workspace-app/tests/unit/workspace-bin.test.js +48 -0
  331. package/core/workspace-app/tests/unit/workspace-card-tools.test.js +30 -0
  332. package/core/workspace-app/tests/unit/workspace-delete.test.js +77 -0
  333. package/core/workspace-app/tests/unit/workspace-types.test.js +68 -0
  334. package/core/workspace-app/tests/unit/worktree-clone.test.js +250 -0
  335. package/{workspace-types.js → core/workspace-app/workspace-types.js} +2 -2
  336. package/{workspaces.js → core/workspace-app/workspaces.js} +1 -5
  337. package/package.json +38 -36
  338. package/actions/graphs.js +0 -107
  339. package/actions/obsidian.js +0 -59
  340. package/graphs.js +0 -104
  341. package/obsidian.js +0 -405
  342. /package/{WORKSPACES.md → core/workspace-app/WORKSPACES.md} +0 -0
  343. /package/{actions → core/workspace-app/actions}/ai-items.js +0 -0
  344. /package/{actions → core/workspace-app/actions}/audio.js +0 -0
  345. /package/{actions → core/workspace-app/actions}/build-order.js +0 -0
  346. /package/{actions → core/workspace-app/actions}/checks.js +0 -0
  347. /package/{actions → core/workspace-app/actions}/claude-session.js +0 -0
  348. /package/{actions → core/workspace-app/actions}/commands-center.js +0 -0
  349. /package/{actions → core/workspace-app/actions}/composer.js +0 -0
  350. /package/{actions → core/workspace-app/actions}/ddev-addons.js +0 -0
  351. /package/{actions → core/workspace-app/actions}/ddev-mail.js +0 -0
  352. /package/{actions → core/workspace-app/actions}/folders.js +0 -0
  353. /package/{actions → core/workspace-app/actions}/images-svg.js +0 -0
  354. /package/{actions → core/workspace-app/actions}/images.js +0 -0
  355. /package/{actions → core/workspace-app/actions}/navigation.js +0 -0
  356. /package/{actions → core/workspace-app/actions}/node.js +0 -0
  357. /package/{actions → core/workspace-app/actions}/notes.js +0 -0
  358. /package/{actions → core/workspace-app/actions}/plugins.js +0 -0
  359. /package/{actions → core/workspace-app/actions}/project-make.js +0 -0
  360. /package/{actions → core/workspace-app/actions}/row-actions.js +0 -0
  361. /package/{actions → core/workspace-app/actions}/screens.js +0 -0
  362. /package/{actions → core/workspace-app/actions}/video-edit.js +0 -0
  363. /package/{ai-inventory.js → core/workspace-app/ai-inventory.js} +0 -0
  364. /package/{ai-items.js → core/workspace-app/ai-items.js} +0 -0
  365. /package/{assistant-cast.js → core/workspace-app/assistant-cast.js} +0 -0
  366. /package/{assistant-suggestions.js → core/workspace-app/assistant-suggestions.js} +0 -0
  367. /package/{audio-voice.js → core/workspace-app/audio-voice.js} +0 -0
  368. /package/{auth-google.js → core/workspace-app/auth-google.js} +0 -0
  369. /package/{build-ai.js → core/workspace-app/build-ai.js} +0 -0
  370. /package/{build-order-page.js → core/workspace-app/build-order-page.js} +0 -0
  371. /package/{build-order.js → core/workspace-app/build-order.js} +0 -0
  372. /package/{builder-args.js → core/workspace-app/builder-args.js} +0 -0
  373. /package/{changelog.js → core/workspace-app/changelog.js} +0 -0
  374. /package/{chat-threads.js → core/workspace-app/chat-threads.js} +0 -0
  375. /package/{checks.js → core/workspace-app/checks.js} +0 -0
  376. /package/{claude-args.js → core/workspace-app/claude-args.js} +0 -0
  377. /package/{claude-sessions.js → core/workspace-app/claude-sessions.js} +0 -0
  378. /package/{command-author.js → core/workspace-app/command-author.js} +0 -0
  379. /package/{command-block.js → core/workspace-app/command-block.js} +0 -0
  380. /package/{commands → core/workspace-app/commands}/defaults.yml +0 -0
  381. /package/{commands-page.js → core/workspace-app/commands-page.js} +0 -0
  382. /package/{commands.js → core/workspace-app/commands.js} +0 -0
  383. /package/{cucumber.js → core/workspace-app/cucumber.js} +0 -0
  384. /package/{ddev-addons-page.js → core/workspace-app/ddev-addons-page.js} +0 -0
  385. /package/{ddev-addons.js → core/workspace-app/ddev-addons.js} +0 -0
  386. /package/{ddev-custom-commands.js → core/workspace-app/ddev-custom-commands.js} +0 -0
  387. /package/{ddev-domains.js → core/workspace-app/ddev-domains.js} +0 -0
  388. /package/{ddev-import.js → core/workspace-app/ddev-import.js} +0 -0
  389. /package/{ddev-mail-page.js → core/workspace-app/ddev-mail-page.js} +0 -0
  390. /package/{ddev-mail.js → core/workspace-app/ddev-mail.js} +0 -0
  391. /package/{ddev-options.js → core/workspace-app/ddev-options.js} +0 -0
  392. /package/{ddev-snapshots.js → core/workspace-app/ddev-snapshots.js} +0 -0
  393. /package/{ddev.js → core/workspace-app/ddev.js} +0 -0
  394. /package/{docs → core/workspace-app/docs}/DEVELOPER-GUIDE.md +0 -0
  395. /package/{docs → core/workspace-app/docs}/README.md +0 -0
  396. /package/{docs → core/workspace-app/docs}/REFERENCE.md +0 -0
  397. /package/{docs → core/workspace-app/docs}/USER-GUIDE.md +0 -0
  398. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-board.png +0 -0
  399. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-coffee.png +0 -0
  400. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-colours.png +0 -0
  401. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-icons.png +0 -0
  402. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-moves.png +0 -0
  403. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-pick-cookieman.png +0 -0
  404. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-settings-voices.png +0 -0
  405. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-status.png +0 -0
  406. /package/{docs → core/workspace-app/docs}/screenshots/create-card/create-card.png +0 -0
  407. /package/{docs → core/workspace-app/docs}/screenshots/create-card/start-ai.png +0 -0
  408. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-address.png +0 -0
  409. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-off.png +0 -0
  410. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-on.png +0 -0
  411. /package/{docs → core/workspace-app/docs}/screenshots/guide-ddev-menu.png +0 -0
  412. /package/{docs → core/workspace-app/docs}/screenshots/guide-domains.png +0 -0
  413. /package/{docs → core/workspace-app/docs}/screenshots/guide-home.png +0 -0
  414. /package/{docs → core/workspace-app/docs}/screenshots/guide-ide-menu.png +0 -0
  415. /package/{docs → core/workspace-app/docs}/screenshots/guide-remove-refusal.png +0 -0
  416. /package/{docs → core/workspace-app/docs}/screenshots/guide-rows-worktree.png +0 -0
  417. /package/{docs → core/workspace-app/docs}/screenshots/guide-screens.png +0 -0
  418. /package/{docs → core/workspace-app/docs}/screenshots/guide-settings.png +0 -0
  419. /package/{docs → core/workspace-app/docs}/screenshots/guide-workspace-page.png +0 -0
  420. /package/{docs → core/workspace-app/docs}/screenshots/home/card-settings.png +0 -0
  421. /package/{docs → core/workspace-app/docs}/screenshots/home/drag-reorder.png +0 -0
  422. /package/{docs → core/workspace-app/docs}/screenshots/home/edit-card.png +0 -0
  423. /package/{docs → core/workspace-app/docs}/screenshots/images/claude-code-image.png +0 -0
  424. /package/{docs → core/workspace-app/docs}/screenshots/images/edit-with-ai.png +0 -0
  425. /package/{docs → core/workspace-app/docs}/screenshots/images/gallery.png +0 -0
  426. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-description.png +0 -0
  427. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-plan.png +0 -0
  428. /package/{docs → core/workspace-app/docs}/screenshots/images/providers.png +0 -0
  429. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-form.png +0 -0
  430. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-result.png +0 -0
  431. /package/{docs → core/workspace-app/docs}/screenshots/images/upload.png +0 -0
  432. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/2-form.png +0 -0
  433. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/8-ddev-options.png +0 -0
  434. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/files-folder.png +0 -0
  435. /package/{docs → core/workspace-app/docs}/screenshots/projects/ddev-custom-commands.png +0 -0
  436. /package/{docs → core/workspace-app/docs}/screenshots/projects/state-chip-stop.png +0 -0
  437. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-dark.png +0 -0
  438. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-light.png +0 -0
  439. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-dark.png +0 -0
  440. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-light.png +0 -0
  441. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-dark.png +0 -0
  442. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-light.png +0 -0
  443. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/ai.svg +0 -0
  444. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/code.svg +0 -0
  445. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/docs.svg +0 -0
  446. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/services.svg +0 -0
  447. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/sites.svg +0 -0
  448. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-dark.png +0 -0
  449. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-light.png +0 -0
  450. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-scenarios.png +0 -0
  451. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-steps.png +0 -0
  452. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-dark.png +0 -0
  453. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-light.png +0 -0
  454. /package/{docs → core/workspace-app/docs}/screenshots/screens-menu.png +0 -0
  455. /package/{docs → core/workspace-app/docs}/screenshots/screens-new.png +0 -0
  456. /package/{docs → core/workspace-app/docs}/screenshots/settings/auth-google-lists.png +0 -0
  457. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-1-row.png +0 -0
  458. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-2-confirm.png +0 -0
  459. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-3-type-name.png +0 -0
  460. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-4-type-yes.png +0 -0
  461. /package/{event-log.js → core/workspace-app/event-log.js} +0 -0
  462. /package/{files-browser.js → core/workspace-app/files-browser.js} +0 -0
  463. /package/{folders.js → core/workspace-app/folders.js} +0 -0
  464. /package/{format.js → core/workspace-app/format.js} +0 -0
  465. /package/{github-auth.js → core/workspace-app/github-auth.js} +0 -0
  466. /package/{html.js → core/workspace-app/html.js} +0 -0
  467. /package/{icons.js → core/workspace-app/icons.js} +0 -0
  468. /package/{images-ai.js → core/workspace-app/images-ai.js} +0 -0
  469. /package/{images-create.js → core/workspace-app/images-create.js} +0 -0
  470. /package/{images-page.js → core/workspace-app/images-page.js} +0 -0
  471. /package/{images-records.js → core/workspace-app/images-records.js} +0 -0
  472. /package/{images-render.js → core/workspace-app/images-render.js} +0 -0
  473. /package/{images-svg-core.js → core/workspace-app/images-svg-core.js} +0 -0
  474. /package/{images-svg-sanitize.js → core/workspace-app/images-svg-sanitize.js} +0 -0
  475. /package/{images-svg.js → core/workspace-app/images-svg.js} +0 -0
  476. /package/{images.js → core/workspace-app/images.js} +0 -0
  477. /package/{jobs.js → core/workspace-app/jobs.js} +0 -0
  478. /package/{linger.js → core/workspace-app/linger.js} +0 -0
  479. /package/{lists.js → core/workspace-app/lists.js} +0 -0
  480. /package/{media-info.js → core/workspace-app/media-info.js} +0 -0
  481. /package/{navigation-page.js → core/workspace-app/navigation-page.js} +0 -0
  482. /package/{navigation.js → core/workspace-app/navigation.js} +0 -0
  483. /package/{notes.js → core/workspace-app/notes.js} +0 -0
  484. /package/{palette-index.js → core/workspace-app/palette-index.js} +0 -0
  485. /package/{playwright.config.js → core/workspace-app/playwright.config.js} +0 -0
  486. /package/{plugin-install.js → core/workspace-app/plugin-install.js} +0 -0
  487. /package/{plugin-manifest.js → core/workspace-app/plugin-manifest.js} +0 -0
  488. /package/{plugin-settings.js → core/workspace-app/plugin-settings.js} +0 -0
  489. /package/{plugins → core/workspace-app/plugins}/workspace-notes/index.js +0 -0
  490. /package/{project-make.js → core/workspace-app/project-make.js} +0 -0
  491. /package/{project-name.js → core/workspace-app/project-name.js} +0 -0
  492. /package/{public → core/workspace-app/public}/assistant-avatar-moves.js +0 -0
  493. /package/{public → core/workspace-app/public}/assistant-avatar-ui.js +0 -0
  494. /package/{public → core/workspace-app/public}/assistant-avatar.js +0 -0
  495. /package/{public → core/workspace-app/public}/avatar/druplicon.vrm +0 -0
  496. /package/{public → core/workspace-app/public}/css/base.css +0 -0
  497. /package/{public → core/workspace-app/public}/css/components/ai-assistant.css +0 -0
  498. /package/{public → core/workspace-app/public}/css/components/assistant-avatar.css +0 -0
  499. /package/{public → core/workspace-app/public}/css/components/assistant-views.css +0 -0
  500. /package/{public → core/workspace-app/public}/css/components/build-order.css +0 -0
  501. /package/{public → core/workspace-app/public}/css/components/clone-as-a-git-worktree.css +0 -0
  502. /package/{public → core/workspace-app/public}/css/components/command-palette.css +0 -0
  503. /package/{public → core/workspace-app/public}/css/components/commands-center.css +0 -0
  504. /package/{public → core/workspace-app/public}/css/components/confirm-dialog.css +0 -0
  505. /package/{public → core/workspace-app/public}/css/components/create-card.css +0 -0
  506. /package/{public → core/workspace-app/public}/css/components/ddev-menu.css +0 -0
  507. /package/{public → core/workspace-app/public}/css/components/deep-chat.css +0 -0
  508. /package/{public → core/workspace-app/public}/css/components/density.css +0 -0
  509. /package/{public → core/workspace-app/public}/css/components/floating-assistant-workspace-pages.css +0 -0
  510. /package/{public → core/workspace-app/public}/css/components/folders.css +0 -0
  511. /package/{public → core/workspace-app/public}/css/components/full-height-left-assistant-sidebar-all-pages.css +0 -0
  512. /package/{public → core/workspace-app/public}/css/components/full-height-right-actions-rail-pages-that-have-actions.css +0 -0
  513. /package/{public → core/workspace-app/public}/css/components/grid-and-list.css +0 -0
  514. /package/{public → core/workspace-app/public}/css/components/help-page.css +0 -0
  515. /package/{public → core/workspace-app/public}/css/components/hero.css +0 -0
  516. /package/{public → core/workspace-app/public}/css/components/images.css +0 -0
  517. /package/{public → core/workspace-app/public}/css/components/layout-rhythm-and-spacing-polish.css +0 -0
  518. /package/{public → core/workspace-app/public}/css/components/mic-on-any-field-that-wants-typing.css +0 -0
  519. /package/{public → core/workspace-app/public}/css/components/modal-fit.css +0 -0
  520. /package/{public → core/workspace-app/public}/css/components/page-width.css +0 -0
  521. /package/{public → core/workspace-app/public}/css/components/plugins-page.css +0 -0
  522. /package/{public → core/workspace-app/public}/css/components/project-cards.css +0 -0
  523. /package/{public → core/workspace-app/public}/css/components/project-rows.css +0 -0
  524. /package/{public → core/workspace-app/public}/css/components/reordering-the-workspace-cards.css +0 -0
  525. /package/{public → core/workspace-app/public}/css/components/responsive-home-and-the-workspace-pages.css +0 -0
  526. /package/{public → core/workspace-app/public}/css/components/running-commands-as-toasts.css +0 -0
  527. /package/{public → core/workspace-app/public}/css/components/settings-editor-core-config-yml.css +0 -0
  528. /package/{public → core/workspace-app/public}/css/components/short-results-as-a-toast-at-the-top.css +0 -0
  529. /package/{public → core/workspace-app/public}/css/components/sound-player.css +0 -0
  530. /package/{public → core/workspace-app/public}/css/components/suggest-agents-skills-commands.css +0 -0
  531. /package/{public → core/workspace-app/public}/css/components/tab-modal.css +0 -0
  532. /package/{public → core/workspace-app/public}/css/components/terminals.css +0 -0
  533. /package/{public → core/workspace-app/public}/css/components/test-report-media-one-file-per-row-paged.css +0 -0
  534. /package/{public → core/workspace-app/public}/css/components/top-toolbar-logo-breadcrumb.css +0 -0
  535. /package/{public → core/workspace-app/public}/css/components/video-edit.css +0 -0
  536. /package/{public → core/workspace-app/public}/css/components/web-ide-open-with.css +0 -0
  537. /package/{public → core/workspace-app/public}/css/components/working-indicators.css +0 -0
  538. /package/{public → core/workspace-app/public}/css/components/workspace-cards.css +0 -0
  539. /package/{public → core/workspace-app/public}/favicon.ico +0 -0
  540. /package/{public → core/workspace-app/public}/favicon.png +0 -0
  541. /package/{public → core/workspace-app/public}/htmx.min.js +0 -0
  542. /package/{public → core/workspace-app/public}/logo.png +0 -0
  543. /package/{public → core/workspace-app/public}/media-player.js +0 -0
  544. /package/{public → core/workspace-app/public}/mic.js +0 -0
  545. /package/{public → core/workspace-app/public}/narration.js +0 -0
  546. /package/{public → core/workspace-app/public}/palette.js +0 -0
  547. /package/{public → core/workspace-app/public}/sortable.js +0 -0
  548. /package/{public → core/workspace-app/public}/suggest.js +0 -0
  549. /package/{public → core/workspace-app/public}/terminal.js +0 -0
  550. /package/{public → core/workspace-app/public}/themes/default/theme.css +0 -0
  551. /package/{public → core/workspace-app/public}/themes/ember/theme.css +0 -0
  552. /package/{public → core/workspace-app/public}/themes/press/theme.css +0 -0
  553. /package/{public → core/workspace-app/public}/themes/slate/theme.css +0 -0
  554. /package/{public → core/workspace-app/public}/touch-icon.png +0 -0
  555. /package/{public → core/workspace-app/public}/ui.js +0 -0
  556. /package/{public → core/workspace-app/public}/vendor/ace/LICENSE.txt +0 -0
  557. /package/{public → core/workspace-app/public}/vendor/ace/ace.js +0 -0
  558. /package/{public → core/workspace-app/public}/vendor/ace/ext-language_tools.js +0 -0
  559. /package/{public → core/workspace-app/public}/vendor/ace/ext-searchbox.js +0 -0
  560. /package/{public → core/workspace-app/public}/vendor/ace/mode-css.js +0 -0
  561. /package/{public → core/workspace-app/public}/vendor/ace/mode-html.js +0 -0
  562. /package/{public → core/workspace-app/public}/vendor/ace/mode-javascript.js +0 -0
  563. /package/{public → core/workspace-app/public}/vendor/ace/mode-markdown.js +0 -0
  564. /package/{public → core/workspace-app/public}/vendor/ace/mode-sh.js +0 -0
  565. /package/{public → core/workspace-app/public}/vendor/ace/mode-yaml.js +0 -0
  566. /package/{public → core/workspace-app/public}/vendor/ace/theme-textmate.js +0 -0
  567. /package/{public → core/workspace-app/public}/vendor/ace/theme-tomorrow_night.js +0 -0
  568. /package/{public → core/workspace-app/public}/vendor/ace/worker-yaml.js +0 -0
  569. /package/{public → core/workspace-app/public}/vendor/deep-chat.LICENSE +0 -0
  570. /package/{public → core/workspace-app/public}/vendor/deep-chat.bundle.js +0 -0
  571. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-LICENSE.txt +0 -0
  572. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
  573. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
  574. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-LICENSE.txt +0 -0
  575. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
  576. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
  577. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
  578. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
  579. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-LICENSE.txt +0 -0
  580. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  581. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-LICENSE.txt +0 -0
  582. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
  583. /package/{public → core/workspace-app/public}/vendor/tabler-LICENSE.txt +0 -0
  584. /package/{public → core/workspace-app/public}/vendor/tabler-sprite.svg +0 -0
  585. /package/{public → core/workspace-app/public}/vendor/three/LICENSE +0 -0
  586. /package/{public → core/workspace-app/public}/vendor/three/addons/loaders/GLTFLoader.js +0 -0
  587. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/BufferGeometryUtils.js +0 -0
  588. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/SkeletonUtils.js +0 -0
  589. /package/{public → core/workspace-app/public}/vendor/three/three.core.min.js +0 -0
  590. /package/{public → core/workspace-app/public}/vendor/three/three.module.min.js +0 -0
  591. /package/{public → core/workspace-app/public}/vendor/three-vrm/LICENSE +0 -0
  592. /package/{public → core/workspace-app/public}/vendor/three-vrm/three-vrm.module.min.js +0 -0
  593. /package/{public → core/workspace-app/public}/vendor/uikit-icons.min.js +0 -0
  594. /package/{public → core/workspace-app/public}/vendor/uikit.min.css +0 -0
  595. /package/{public → core/workspace-app/public}/vendor/uikit.min.js +0 -0
  596. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/bookmark-outlined.svg +0 -0
  597. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/headset.svg +0 -0
  598. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/menu.svg +0 -0
  599. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/pause.svg +0 -0
  600. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/play.svg +0 -0
  601. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/share.svg +0 -0
  602. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-off.svg +0 -0
  603. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-on.svg +0 -0
  604. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/stop.svg +0 -0
  605. /package/{public → core/workspace-app/public}/vendor/xterm/addon-fit.js +0 -0
  606. /package/{public → core/workspace-app/public}/vendor/xterm/addon-unicode11.js +0 -0
  607. /package/{public → core/workspace-app/public}/vendor/xterm/addon-web-links.js +0 -0
  608. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.css +0 -0
  609. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.js +0 -0
  610. /package/{rag.js → core/workspace-app/rag.js} +0 -0
  611. /package/{reader.js → core/workspace-app/reader.js} +0 -0
  612. /package/{repo-blobs.js → core/workspace-app/repo-blobs.js} +0 -0
  613. /package/{report-pdf.js → core/workspace-app/report-pdf.js} +0 -0
  614. /package/{screenrc → core/workspace-app/screenrc} +0 -0
  615. /package/{screens.js → core/workspace-app/screens.js} +0 -0
  616. /package/{scripts → core/workspace-app/scripts}/code-server-start.sh +0 -0
  617. /package/{scripts → core/workspace-app/scripts}/images-claude-finish.js +0 -0
  618. /package/{scripts → core/workspace-app/scripts}/screen-host.sh +0 -0
  619. /package/{scripts → core/workspace-app/scripts}/screen-runner.js +0 -0
  620. /package/{scripts → core/workspace-app/scripts}/screen-then.js +0 -0
  621. /package/{scripts → core/workspace-app/scripts}/update.sh +0 -0
  622. /package/{settings-file.js → core/workspace-app/settings-file.js} +0 -0
  623. /package/{speech.js → core/workspace-app/speech.js} +0 -0
  624. /package/{tab-modal.js → core/workspace-app/tab-modal.js} +0 -0
  625. /package/{test-reports.js → core/workspace-app/test-reports.js} +0 -0
  626. /package/{themes.js → core/workspace-app/themes.js} +0 -0
  627. /package/{transcripts.js → core/workspace-app/transcripts.js} +0 -0
  628. /package/{urls.js → core/workspace-app/urls.js} +0 -0
  629. /package/{validate.js → core/workspace-app/validate.js} +0 -0
  630. /package/{version-check.js → core/workspace-app/version-check.js} +0 -0
  631. /package/{video-edit.js → core/workspace-app/video-edit.js} +0 -0
  632. /package/{waiting.js → core/workspace-app/waiting.js} +0 -0
  633. /package/{workspace-card-tools.js → core/workspace-app/workspace-card-tools.js} +0 -0
  634. /package/{workspace-delete.js → core/workspace-app/workspace-delete.js} +0 -0
@@ -0,0 +1,292 @@
1
+ # Paths are not listed here: the tooling locates itself from the checkout, for
2
+ # whoever is running it. Add root/path/scripts/config/backups only to override
3
+ # that (or export WORKSPACE_ROOT/PATH/SCRIPTS/CONFIG).
4
+ # The admin user a fresh install is given — Drupal, Webship, Drupal CMS and anything else
5
+ # built here. These are local development sites, so `pass` is deliberately NOT treated as a
6
+ # secret: the settings form shows it, because checking what you will log in with is the whole
7
+ # point of the field.
8
+ account:
9
+ name: webmaster
10
+ pass: CHANGE_ME
11
+ mail: info@webship.co
12
+
13
+ # Who contributions are credited to — on webship/workspace, webship/ai-agents and every
14
+ # drupal.org issue, merge request and pull request this tooling opens. Per machine: this live
15
+ # copy holds your real values, the committed one ships CHANGE_ME.
16
+ # After bootstrap.sh these are $contributor_name and $contributor_email in any
17
+ # cmd-*.sh. The Webship agents read them too — see webship/ai-agents
18
+ # .claude/agents/RULES.md, "Contributor identity".
19
+ contributor:
20
+ name: CHANGE_ME
21
+ email: CHANGE_ME
22
+
23
+ # AI provider keys for the sites this workspace builds. When a built site has
24
+ # the AI stack (Drupal CMS AI, Webship AI), set_ai_provider_keys wires these
25
+ # in after install. Placeholders are skipped; real keys live ONLY in your own
26
+ # checkout — never commit them. parse_yaml flattens each to
27
+ # $ai_providers_<provider>_api_key.
28
+ git:
29
+ # One block per forge: GitHub, drupal.org's GitLab at git.drupalcode.org, and Bitbucket. Each
30
+ # holds the host, the account name that forge knows you by, the address commits carry there,
31
+ # and its token. `drupal` IS a GitLab instance, which is why there is no separate gitlab entry.
32
+ #
33
+ # `token` renders as an empty password field: the value is never sent back to the browser,
34
+ # never echoed into a job log, never written to actions.log. The commit NAME comes from
35
+ # contributor.name above; only the address varies per forge.
36
+ github:
37
+ host: github.com
38
+ # Authenticate with the `gh` CLI's own login when it works, and only fall back to the token
39
+ # below. Inside the dashboard container gh is not signed in — it reads the same ~/.config/gh
40
+ # but the token lives in the host keyring, which the container cannot read. That is what the
41
+ # token is for.
42
+ use_gh_cli: true
43
+ username: CHANGE_ME
44
+ email: CHANGE_ME
45
+ token: CHANGE_ME
46
+ drupal:
47
+ host: git.drupalcode.org
48
+ username: CHANGE_ME
49
+ email: CHANGE_ME
50
+ token: CHANGE_ME
51
+ bitbucket:
52
+ host: bitbucket.org
53
+ username: CHANGE_ME
54
+ email: CHANGE_ME
55
+ token: CHANGE_ME
56
+
57
+ sources:
58
+ # Where a sync pulls from, and where a proposed change is filed. Change these to work from a
59
+ # fork or a different host — nothing here is hardcoded. An env var still wins for a one-off run.
60
+ tooling:
61
+ # This workspace's own commands, scripts and dashboard.
62
+ host: github.com
63
+ repo: webship/workspace
64
+ ref: 1.0.x
65
+ ai_items:
66
+ # The shared AI Agents, AI Skills and Prompts.
67
+ host: github.com
68
+ repo: webship/ai-agents
69
+ ref: main
70
+
71
+ ai_providers:
72
+ # The local Claude Code CLI comes first and is the default: it needs no key of its own —
73
+ # it uses this machine's own Claude Code login — so nothing is sent to a third-party API
74
+ # and there is no key to leak. Set active: false to fall through to the keyed providers
75
+ # below, in the order they appear. An ANTHROPIC_API_KEY/OPENAI_API_KEY/GEMINI_API_KEY in
76
+ # the environment still wins over all of this, for a one-off run.
77
+ claude_code_cli:
78
+ active: true
79
+ openai:
80
+ api_key: sk-change-this
81
+ anthropic:
82
+ api_key: sk-change-this
83
+ gemini:
84
+ api_key: sk-change-this
85
+ xai:
86
+ api_key: sk-change-this
87
+ stability:
88
+ api_key: sk-change-this
89
+ workspaces: []
90
+ # Workspace folders are plugins (dev, test, drupal-modules, …): `webship-workspace plugin require <name>`
91
+ # puts one on this list when you activate it. See Settings → Plugins, or `webship-workspace catalog`.
92
+
93
+ # The base domain every dashboard URL is built from, and what DDEV routes.
94
+ #
95
+ # <project>.<tld> the first label is the DDEV project name, the rest is the project TLD
96
+ # workspace.ddev.site the dashboard
97
+ # dev.workspace.ddev.site a workspace page
98
+ # blog1.dev.workspace... a project's site
99
+ #
100
+ # Change it with the command, never by hand — it applies the TLD to DDEV as well, and editing this
101
+ # line alone leaves the dashboard's links and DDEV's routing pointing at different places:
102
+ #
103
+ # bash ~/workspace/core/scripts/autostart.sh --domain workspace.ddev.site
104
+ #
105
+ # Keep ddev.site on a laptop: *.ddev.site resolves to 127.0.0.1 at ANY depth, which is the only
106
+ # reason the nested scheme works with an empty /etc/hosts, and /etc/hosts cannot hold wildcards.
107
+ # On a Docker host or dedicated server, use your own domain and point *.<domain> at the host.
108
+ # ~/workspace with the DDEV project name `workspace` is the blessed default —
109
+ # leave this as is there. Additional side-by-side checkouts (~/webship-workspace,
110
+ # ~/un-workspace, …) each need their own identity: in that checkout run
111
+ # cd core/workspace-app && ddev config --project-name=<folder-name>
112
+ # and set hub_domain to <folder-name>.ddev.site (or delete the key — it then
113
+ # derives from the DDEV project name). Screen logs, backups and graphs already
114
+ # live inside each checkout, so nothing else collides.
115
+ hub_domain: workspace.ddev.site
116
+
117
+ # The Workspace's default language: what the AI Assistant answers in, listens for and speaks.
118
+ # en-US, en-GB, ar-JO, ar-SA, ar-AE, ar-EG, fr-FR, de-DE, es-ES or tr-TR. assistant.speech_language,
119
+ # when set, still pins the microphone and the voice on their own.
120
+ language: en-US
121
+
122
+ # Second storage: a folder on another disk that whole workspace folders can live on, each one a
123
+ # symlink from this tree. Per machine and never synced, like contributor:. Empty means none.
124
+ # Managed with core/scripts/storage.sh (--status, --move, --back, --mounts).
125
+ storage:
126
+ second: ""
127
+
128
+ # Whether the dashboard comes back on its own after a reboot.
129
+ # Install the boot service with: bash ~/workspace/core/scripts/autostart.sh --enable
130
+ dashboard:
131
+ # Which projects start at boot. A word, not only a list:
132
+ # workspace just the dashboard — the default; seconds to boot, everything else one click away
133
+ # running whatever was running at the last clean shutdown
134
+ # all every registered project (each is a web + db container competing for RAM)
135
+ # dev1,test2 exactly those, in that order
136
+ # The dashboard is always started first and always included, whatever this says.
137
+ autostart: workspace
138
+
139
+ # The AI assistant panel, and its voice. Last in this file because it is the longest block and the
140
+ # least often edited — the things above it are the ones you come here to change.
141
+ #
142
+ # Speech is the browser's own, in both directions: no key, no service, nothing leaves the machine.
143
+ # Every value below is optional and the defaults are what ships.
144
+ assistant:
145
+ intro: true
146
+ # What the assistant is CALLED, everywhere it is named: the panel's heading, the control in the
147
+ # navigation, the launcher and the full page at /assistant. This is the default — the home
148
+ # dashboard and every page that belongs to no workspace. A workspace overrides it with its own
149
+ # `assistant: name:` in workspace.<name>.settings.yml.
150
+ name: AI Assistant
151
+ # What the composer says when it is empty. `none` (or off / default / auto) means no placeholder,
152
+ # which is what ships: an empty field with a cursor in it already says "type here", and a prompt
153
+ # that suggests what to ask narrows what gets asked. Overridable per workspace the same way.
154
+ placeholder: none
155
+ # The assistant's avatar: the one the robot icon in the panel shows first, one of `avatars`, hidden
156
+ # (and silent) with the next click. `none` takes the icon away.
157
+ avatar: druplicon
158
+ # The avatars that can be picked in the panel's avatar settings. druplicon ships with the dashboard;
159
+ # any other name is a character (characters/<name>.json) or a model (public/models/<name>.vrm) in an
160
+ # avatars workspace project, served from there and never copied here. Licences are per model: add
161
+ # only what you may use, and a fan-made model only on your own machine.
162
+ avatars:
163
+ - druplicon
164
+ # Per avatar, optional: the hair colour it starts with (#rrggbb; each browser can pick another), and the
165
+ # Claude Code agent it brings while shown (used only when installed in ~/.claude/agents), e.g.
166
+ # avatar_hair:
167
+ # labiba-meme: "#0074e0"
168
+ # avatar_agents:
169
+ # druplicon: avatar-druplicon
170
+ # Where the assistant keeps what the team teaches it (MEMORY.md), relative to the workspace root.
171
+ # Private to this machine: gitignored, and never copied by sync-tooling or the updater.
172
+ memory: core/workspace-app/.memory
173
+ # The Claude Code agent the assistant runs as, when it is installed in ~/.claude/agents: its rules
174
+ # and skills on top of the dashboard's own. `none` runs the assistant without one.
175
+ agent: webship-workspace
176
+
177
+ # Voice IN — the browser's own speech recognition.
178
+ # false removes the microphone rather than leaving a button that does nothing.
179
+ voice_input: true
180
+ # Send on its own after this many ms of silence. 0 = never; you press send.
181
+ submit_after_silence: 2500
182
+ # Pin the recogniser's language, e.g. en-US, en-GB, ar-JO. Ships as en-US; `auto` follows the browser instead.
183
+ # Worth setting if you dictate anything but your browser's language: a recogniser left on the
184
+ # wrong one does not fail, it returns confident nonsense.
185
+ speech_language: en-US
186
+ # Show words as they are guessed, before the recogniser settles on them.
187
+ interim_results: true
188
+ # Stop listening once the message is sent.
189
+ stop_after_submit: true
190
+
191
+ # Voice OUT — the assistant reads its answer aloud. Browser synthesis, so no key either.
192
+ voice_output: true
193
+ # A voice by name, as the browser lists it (Chrome: "Google US English"; the exact names differ
194
+ # per browser and per OS). `default` uses the browser default; an unknown name falls back to it.
195
+ voice_name: default
196
+ speech_rate: 1
197
+ speech_pitch: 1
198
+ speech_volume: 1
199
+
200
+ # Spoken words that ACT instead of being typed. true listens for the command's own word —
201
+ # command_stop: true listens for "stop". Each one costs you that word in ordinary dictation, so
202
+ # describing a submit button would send the message; that is why they are all off.
203
+ # A phrase of your own works too, and is the only way to have one in another language:
204
+ # command_stop: توقف
205
+ command_submit: false
206
+ command_stop: false
207
+ command_pause: false
208
+ command_resume: false
209
+ command_clear: false
210
+
211
+ # Optional dashboard features, per plugin — folders under core/workspace-app/plugins/ or npm
212
+ # modules (module: <require-name>). `workspaces` limits which folders get the feature; empty or
213
+ # absent means all of them. See core/workspace-app/PLUGINS.md to write one.
214
+ plugins: {}
215
+ # Every optional feature is an npm package @webship.co/workspace-<name>; `plugins.sh --activate` adds
216
+ # its block here. Nothing is added until you ask for it.
217
+
218
+ # ElevenLabs, for the final voiceover of a narrated video (videos/cmd-tools-elevenlabs.sh). Nothing is
219
+ # sent to ElevenLabs unless a person agrees to a run, and the stage is not offered without a real key.
220
+ # ELEVENLABS_API_KEY in the environment wins over api_key. voice_id `ask` means choose one each time.
221
+ # region: global | us | eu | in | sg (an isolated residency environment is a separate account and key).
222
+ elevenlabs:
223
+ api_key: CHANGE_ME
224
+ voice_id: ask
225
+ model_id: eleven_v4
226
+ region: global
227
+ pronunciation: ""
228
+
229
+ # Short codes for the name the Build form proposes.
230
+ #
231
+ # A name is `<code><major>x<minor><patch>b<n>`:
232
+ #
233
+ # w11x0xb1 Webship, the 11.0.x branch, first build
234
+ # w11x00b1 Webship, the ~11.0.0 release
235
+ #
236
+ # The code comes from the product's TITLE. Several words give their initials — Haven is `h`,
237
+ # Website Starter is `ws`, Drupal CMS is `dc`. A single word keeps its word, because reducing it to a
238
+ # letter is where a code stops being readable and starts being a puzzle, and because it collides:
239
+ # Haven and Healthcare would both be `h`.
240
+ #
241
+ # Override any of them here. The three below are the ones the derivation gets wrong or that are typed
242
+ # often enough to have earned a letter.
243
+ short_codes:
244
+ webship: w
245
+ drupal: d
246
+ # Webship's own site templates: their initials all come out as `ws`, so each gets a code.
247
+ website_starter: wst
248
+ webship_starter: wsh
249
+ webship_portal: wpo
250
+ webapi_starter: wapi
251
+ webships_starter: wss
252
+ webships_project: wsp
253
+
254
+ # Sign in with Google for the dashboard itself. Off, which is right on a laptop where the dashboard answers
255
+ # only that laptop. Turn it on for a remote hub (hub_domain set to a public domain): every page, action and
256
+ # terminal then needs a Google account whose verified email is in allowed_domains (or allowed_emails).
257
+ # It uses the same OAuth client as the Google Drive plugin (plugin.google-drive-sync.settings.yml); add this
258
+ # redirect URI to that client:
259
+ # https://<hub_domain>/auth/google/callback
260
+ # Nothing allowed means nobody is let in. Locked out? Set enabled back to false here; it applies at once.
261
+ auth:
262
+ google:
263
+ enabled: false
264
+ allowed_domains: []
265
+ # allowed_emails:
266
+ # - someone@example.org
267
+ # How long a sign-in lasts, in hours (1 to 720).
268
+ session_hours: 12
269
+
270
+ # Default styling for the dashboard. Every value is optional — the defaults below are what
271
+ # ships, and /settings rewrites only the line you change.
272
+ # mode light | dark | system (system follows the OS setting)
273
+ # editor_theme auto | light | dark (auto follows mode)
274
+ # theme a directory under core/workspace-app/public/themes — the palette every
275
+ # component asks for. `mode` chooses which half of it you see.
276
+ # logo a filename in core/workspace-app/public — not a path or a URL, because
277
+ # everything the dashboard loads is served from itself
278
+ # logo_on_dark the mark to swap in on a dark page; defaults to `logo`
279
+ # favicon the browser-tab icon; defaults to `logo`
280
+ #
281
+ # mode and editor_theme are DEFAULTS, for someone who has not used the theme toggle. A stored
282
+ # choice always wins over them.
283
+ style:
284
+ workspace_name: workspace
285
+ mode: light
286
+ editor_theme: auto
287
+ theme: default
288
+ logo:
289
+ logo_on_dark:
290
+ favicon:
291
+ page_size: 50
292
+ page_sort: newest
@@ -0,0 +1,53 @@
1
+ # How the dashboard LOOKS — core/config/style.yml
2
+ #
3
+ # Styling is its own concern, so it has its own file. Which palette, which mode, the logos and
4
+ # favicons, how wide a page runs, how the assistant is shown. It used to sit inside settings.yml
5
+ # under a `style:` key, in a file that is otherwise about where projects are built, who commits,
6
+ # and which API keys this machine holds — so the one file nobody should open casually was also the
7
+ # file you had to open to change a logo.
8
+ #
9
+ # A theme's own TOKENS are not here either: they live in core/config/theme.<name>.yml, one file per
10
+ # theme. This file chooses the theme; that file sets its colours, sizes and spacing.
11
+ #
12
+ # Everything here is a DEFAULT, not an override. A mode, a width or an assistant view chosen from
13
+ # the interface is remembered in that browser and wins — which is the difference between a default
14
+ # and a setting that argues with the person using it.
15
+ #
16
+ # `style:` in settings.yml still works and fills in anything this file does not set, so a machine
17
+ # that has not moved its block yet keeps the appearance it had. Where both set the same key, this
18
+ # file wins.
19
+
20
+ # The word beside the logo in the toolbar.
21
+ workspace_name: Workspace
22
+
23
+ # Which palette the dashboard wears: a directory under core/workspace-app/public/themes/.
24
+ # `default` is the Webship palette. The Settings screen lists every theme on disk, so this comment
25
+ # does not name them — a list here goes stale the first time one is added.
26
+ theme: default
27
+
28
+ # light | dark | system. A default: someone who has used the toggle keeps their choice.
29
+ mode: light
30
+ # The code editor, independently of the page: auto | light | dark. A code editor is somewhere people
31
+ # often want dark even on a light page.
32
+ editor_theme: auto
33
+
34
+ # How the AI assistant is shown, and whether it starts open: sidebar | wide | float | full,
35
+ # and yes | no. Quoted, because unquoted `yes` is a BOOLEAN in YAML 1.1.
36
+ assistant_view: sidebar
37
+ assistant_open: "yes"
38
+
39
+ # How much of the window a page's content may use: comfortable (a 900px reading width) | wide | full.
40
+ page_width: comfortable
41
+
42
+ # Rows before a list pages, and how it is sorted to begin with.
43
+ page_size: 50
44
+ page_sort: newest
45
+
46
+ # Brand assets, from core/workspace-app/public/. One blue mark reads on a light and a dark page, so both point at the same file.
47
+ logo_on_light: logo.png
48
+ logo_on_dark: logo.png
49
+ favicon_svg:
50
+ favicon_png: favicon.png
51
+ # A separate, larger file: a home-screen icon is 180px, and the 32px tab icon blown up to that is a
52
+ # blurry tile.
53
+ touch_icon: touch-icon.png
@@ -0,0 +1,161 @@
1
+ # Every token the "default" theme sets — core/config/theme.default.yml
2
+ #
3
+ # Webship. A theme is a palette: it declares custom properties and selects nothing, so every
4
+ # value in it is configuration. They are all here, editable on the Settings screen, rather than
5
+ # only by editing a stylesheet inside the app.
6
+ #
7
+ # Names go without the leading dashes. `tokens:` applies to both halves; `dark:` applies to the
8
+ # dark half only, exactly like the html.dark block in a theme file. Anything here overrides the
9
+ # theme CSS, which is what you get with no YAML at all.
10
+
11
+ tokens:
12
+ brand-primary: "#0074e0"
13
+ brand-secondary: "#2b447c"
14
+ brand-accent: "#e4dcff"
15
+ brand-dark: "#000000"
16
+ brand-light: "#ebe8e5"
17
+ subtle-light: "#f5f3f2"
18
+ subtle-brand: "#deedff"
19
+ subtle-accent: "#f6f3ff"
20
+ text-default: "#000000"
21
+ text-subtle: "#4d4d4d"
22
+ text-inverse: "#ffffff"
23
+ text-light: "#ebe8e5"
24
+ text-brand: "var(--brand-primary)"
25
+ text-accent: "var(--brand-accent)"
26
+ font-primary: "Figtree, \"Helvetica Neue\", Arial, sans-serif"
27
+ font-secondary: "\"DM Serif Text\", Georgia, serif"
28
+ font-code: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace"
29
+ weight-regular: 400
30
+ weight-semibold: 600
31
+ leading-heading: 1.4
32
+ leading-display: 1.3
33
+ leading-body: 1.6
34
+ tracking-wide: 0.0625em
35
+ size-h1: 2rem
36
+ size-h2: 1.625rem
37
+ size-h3: 1.5rem
38
+ size-h4: 1.25rem
39
+ size-h5: 1.125rem
40
+ size-h6: 1rem
41
+ size-body: 0.9375rem
42
+ size-small: 0.875rem
43
+ type-h1: "var(--weight-regular) var(--size-h1)/1.15 var(--font-secondary)"
44
+ type-h2: "var(--weight-regular) var(--size-h2)/1.2 var(--font-secondary)"
45
+ type-h3: "var(--weight-semibold) var(--size-h3)/1.25 var(--font-primary)"
46
+ type-h4: "var(--weight-semibold) var(--size-h4)/1.3 var(--font-primary)"
47
+ type-h5: "var(--weight-semibold) var(--size-h5)/1.35 var(--font-primary)"
48
+ type-h6: "var(--weight-semibold) var(--size-h6)/1 var(--font-primary)"
49
+ type-body: "var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-primary)"
50
+ type-body-sm: "var(--weight-regular) var(--size-small)/1.45 var(--font-primary)"
51
+ type-label: "var(--weight-semibold) var(--size-body)/1 var(--font-primary)"
52
+ type-caption: "var(--weight-regular) var(--size-small)/1.35 var(--font-primary)"
53
+ type-mono: "var(--weight-regular) var(--size-body)/1.5 var(--font-code)"
54
+ type-mono-sm: "var(--weight-regular) var(--size-small)/1.4 var(--font-code)"
55
+ tracking-h1: normal
56
+ tracking-h2: normal
57
+ tracking-h3: normal
58
+ tracking-h4: normal
59
+ tracking-h5: normal
60
+ tracking-h6: "var(--tracking-wide)"
61
+ surface: "var(--subtle-light)"
62
+ surface-card: "#ffffff"
63
+ surface-muted: "#f1eef9"
64
+ surface-input: "#ffffff"
65
+ text-subtle-2: "#333333"
66
+ line: "#e2ddd8"
67
+ line-strong: "#c9c2ba"
68
+ link: "#0063c0"
69
+ brand-pressed: "#0063c0"
70
+ brand-2-pressed: "#22355f"
71
+ focus-ring: "rgba(0, 116, 224, .35)"
72
+ ok: "#146c43"
73
+ ok-soft: "#d0e2d9"
74
+ pcard-tool-label: 0rem
75
+ ok-ink: "#14532d"
76
+ danger: "#e71139"
77
+ danger-soft: "#facfd7"
78
+ danger-ink: "#7d1a2e"
79
+ danger-armed: "#a4133c"
80
+ danger-text: "#c20f31"
81
+ warning: "#fdd26e"
82
+ warning-soft: "#fef1d3"
83
+ warning-ink: "#5c4300"
84
+ info: "#0dcaf0"
85
+ info-soft: "#cff4fc"
86
+ info-ink: "#055160"
87
+ success: "#146c43"
88
+ success-soft: "#d0e2d9"
89
+ success-ink: "#0f5132"
90
+ busy-soft: "var(--subtle-brand)"
91
+ busy-ink: "var(--brand-secondary)"
92
+ accent-soft: "var(--subtle-accent)"
93
+ accent-ink: "#4b3fa8"
94
+ chip-bg: "var(--brand-primary)"
95
+ chip-ink: "var(--text-inverse)"
96
+ shadow-card: "0 4px 16px rgba(35, 41, 70, .06)"
97
+ shadow-card-hover: "0 12px 28px rgba(43, 68, 124, .16)"
98
+ shadow-float: "0 1.5rem 3rem rgba(43, 68, 124, .28)"
99
+ shadow-toast: "0 14px 34px rgba(35, 41, 70, .26)"
100
+ toast-ring: "rgba(255, 255, 255, .9)"
101
+ code-bg: "#1f2437"
102
+ code-ink: "#e6e9f5"
103
+ terminal-ink: "#c9f7d4"
104
+ media-bg: "#000000"
105
+ paper: "#ffffff"
106
+ checker-a: "#dcdcdc"
107
+ checker-b: "#d8d8d8"
108
+ checker-bg: "#f4f4f4"
109
+ overlay: "rgba(0, 0, 0, .6)"
110
+ brand-1: "var(--brand-primary)"
111
+ brand-2: "var(--brand-secondary)"
112
+ brand-3: "var(--brand-accent)"
113
+ brand-grad: "linear-gradient(135deg, var(--brand-primary), var(--brand-secondary))"
114
+ ink: "var(--brand-secondary)"
115
+
116
+ # The dark half. Only the tokens that differ at night are listed.
117
+ dark:
118
+ surface: "#0f1626"
119
+ surface-card: "#172033"
120
+ surface-muted: "#1f2a42"
121
+ surface-input: "#0f1729"
122
+ text-default: "#e8edf6"
123
+ text-subtle-2: "#c2cbdd"
124
+ text-subtle: "#93a0b8"
125
+ line: "#27334d"
126
+ line-strong: "#3b4a6d"
127
+ link: "#57a8ff"
128
+ brand-pressed: "#2f8fe8"
129
+ brand-2-pressed: "#1b2b4d"
130
+ focus-ring: "rgba(87, 168, 255, .40)"
131
+ ok-soft: "#10261a"
132
+ ok-ink: "#a8e6b8"
133
+ danger-soft: "#2a1620"
134
+ danger-ink: "#ffd0da"
135
+ danger-armed: "#e0466b"
136
+ danger-text: "#ff8fa3"
137
+ warning-soft: "#2e2610"
138
+ warning-ink: "#fde4a3"
139
+ info-soft: "#0c2a33"
140
+ info-ink: "#9eeaf9"
141
+ success-soft: "#10291d"
142
+ success-ink: "#a3d9bd"
143
+ busy-soft: "#1a2440"
144
+ busy-ink: "#b9c9ff"
145
+ accent-soft: "#2c2550"
146
+ accent-ink: "#d9d2ff"
147
+ chip-bg: "#33406e"
148
+ chip-ink: "#e8edf6"
149
+ subtle-light: "#131b2c"
150
+ subtle-brand: "#10243d"
151
+ subtle-accent: "#221f3a"
152
+ shadow-card: "0 4px 16px rgba(0, 0, 0, .35)"
153
+ shadow-card-hover: "0 12px 28px rgba(0, 0, 0, .50)"
154
+ shadow-float: "0 1.5rem 3rem rgba(0, 0, 0, .55)"
155
+ shadow-toast: "0 14px 34px rgba(0, 0, 0, .50)"
156
+ toast-ring: "rgba(0, 0, 0, .5)"
157
+ checker-a: "#2a3550"
158
+ checker-b: "#26314a"
159
+ checker-bg: "#131b2c"
160
+ overlay: "rgba(0, 0, 0, .72)"
161
+ ink: "var(--text-default)"
@@ -0,0 +1,166 @@
1
+ # Dispatch — core/config/theme.dispatch.yml
2
+ #
3
+ # A style in the shape of Upsun Dispatch: OKLCH colour throughout, a violet primary, a lime accent,
4
+ # and Open Sans for text with Space Mono for code. The type is its scale — 36/30/24/20/18 with the
5
+ # line height tightening as the size grows, and tracking from -0.02em down.
6
+ #
7
+ # The colour values were read out of the product's own stylesheet rather than sampled from a
8
+ # screenshot, so they are the values it actually ships.
9
+ #
10
+ # The two families are NOT vendored here — nothing in public/vendor/fonts holds them — so a machine
11
+ # without them falls back through the stack. That is deliberate: a style is a set of values, and
12
+ # shipping two more typefaces to look like somebody else's product is a different decision.
13
+
14
+ name: Dispatch
15
+
16
+ tokens:
17
+ brand-primary: "oklch(54.7% .257 280.028)"
18
+ brand-secondary: "oklch(38.1% .171 280.684)"
19
+ brand-accent: "oklch(92.8% .196 119.528)"
20
+ brand-dark: "oklch(14.1% .004 285.823)"
21
+ brand-light: "oklch(96.7% .001 286.375)"
22
+ subtle-light: "oklch(96.7% .001 286.375)"
23
+ subtle-brand: "oklch(97% .014 254.604)"
24
+ subtle-accent: "oklch(98.2% .03 119.528)"
25
+ text-default: "oklch(0% 0 0)"
26
+ text-subtle: "oklch(55.2% .014 285.938)"
27
+ text-inverse: "oklch(100% 0 0)"
28
+ text-light: "#ebe8e5"
29
+ text-brand: "var(--brand-primary)"
30
+ text-accent: "var(--brand-accent)"
31
+ font-primary: "Open Sans, \"Open Sans Variable\", ui-sans-serif, system-ui, \"Segoe UI\", Helvetica, Arial, sans-serif"
32
+ font-secondary: "Open Sans, \"Open Sans Variable\", ui-sans-serif, system-ui, \"Segoe UI\", Helvetica, Arial, sans-serif"
33
+ font-code: "\"Space Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"
34
+ weight-regular: 400
35
+ weight-semibold: 600
36
+ leading-heading: 1.4
37
+ leading-display: 1.3
38
+ leading-body: 1.5
39
+ tracking-wide: 0.0625em
40
+ size-h1: 2.25rem
41
+ size-h2: 1.875rem
42
+ size-h3: 1.5rem
43
+ size-h4: 1.25rem
44
+ size-h5: 1.125rem
45
+ size-h6: 0.8125rem
46
+ size-body: 1.0625rem
47
+ size-small: 0.875rem
48
+ type-h1: "var(--weight-bold, 700) var(--size-h1)/1.1 var(--font-primary)"
49
+ type-h2: "var(--weight-bold, 700) var(--size-h2)/1.15 var(--font-primary)"
50
+ type-h3: "var(--weight-semibold) var(--size-h3)/1.25 var(--font-primary)"
51
+ type-h4: "var(--weight-semibold) var(--size-h4)/1.3 var(--font-primary)"
52
+ type-h5: "var(--weight-semibold) var(--size-h5)/1.35 var(--font-primary)"
53
+ type-h6: "var(--weight-semibold) var(--size-h6)/1 var(--font-primary)"
54
+ type-body: "var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-primary)"
55
+ type-body-sm: "var(--weight-regular) var(--size-small)/1.45 var(--font-primary)"
56
+ type-label: "var(--weight-semibold) var(--size-body)/1 var(--font-primary)"
57
+ type-caption: "var(--weight-regular) var(--size-small)/1.35 var(--font-primary)"
58
+ type-mono: "var(--weight-regular) var(--size-body)/1.5 var(--font-code)"
59
+ type-mono-sm: "var(--weight-regular) var(--size-small)/1.4 var(--font-code)"
60
+ tracking-h1: -0.02em
61
+ tracking-h2: -0.015em
62
+ tracking-h3: -0.01em
63
+ tracking-h4: -0.01em
64
+ tracking-h5: -0.005em
65
+ tracking-h6: 0.08em
66
+ surface: "oklch(100% 0 0)"
67
+ surface-card: "oklch(100% 0 0)"
68
+ surface-muted: "oklch(96.7% .001 286.375)"
69
+ surface-input: "oklch(100% 0 0)"
70
+ text-subtle-2: "oklch(37% .012 285.805)"
71
+ line: "oklch(92% .004 286.32)"
72
+ line-strong: "oklch(87.1% .006 286.286)"
73
+ link: "oklch(54.7% .257 280.028)"
74
+ brand-pressed: "oklch(47.3% .247 278.19)"
75
+ brand-2-pressed: "#22355f"
76
+ focus-ring: "oklch(63.7% .204 285.403 / .40)"
77
+ ok: "oklch(70.9% .115 194.873)"
78
+ ok-soft: "#d0e2d9"
79
+ pcard-tool-label: 0rem
80
+ ok-ink: "#14532d"
81
+ danger: "oklch(57.7% .215 27.325)"
82
+ danger-soft: "#facfd7"
83
+ danger-ink: "#7d1a2e"
84
+ danger-armed: "#a4133c"
85
+ danger-text: "#c20f31"
86
+ warning: "oklch(77.9% .162 79.562)"
87
+ warning-soft: "#fef1d3"
88
+ warning-ink: "#5c4300"
89
+ info: "oklch(54.6% .245 262.881)"
90
+ info-soft: "#cff4fc"
91
+ info-ink: "#055160"
92
+ success: "#146c43"
93
+ success-soft: "#d0e2d9"
94
+ success-ink: "#0f5132"
95
+ busy-soft: "var(--subtle-brand)"
96
+ busy-ink: "var(--brand-secondary)"
97
+ accent-soft: "var(--subtle-accent)"
98
+ accent-ink: "#4b3fa8"
99
+ chip-bg: "oklch(54.7% .257 280.028)"
100
+ chip-ink: "var(--text-inverse)"
101
+ shadow-card: "0 4px 16px rgba(35, 41, 70, .06)"
102
+ shadow-card-hover: "0 12px 28px rgba(43, 68, 124, .16)"
103
+ shadow-float: "0 1.5rem 3rem rgba(43, 68, 124, .28)"
104
+ shadow-toast: "0 14px 34px rgba(35, 41, 70, .26)"
105
+ toast-ring: "rgba(255, 255, 255, .9)"
106
+ code-bg: "#1f2437"
107
+ code-ink: "#e6e9f5"
108
+ terminal-ink: "#c9f7d4"
109
+ media-bg: "#000000"
110
+ paper: "#ffffff"
111
+ checker-a: "#dcdcdc"
112
+ checker-b: "#d8d8d8"
113
+ checker-bg: "#f4f4f4"
114
+ overlay: "rgba(0, 0, 0, .6)"
115
+ brand-1: "var(--brand-primary)"
116
+ brand-2: "var(--brand-secondary)"
117
+ brand-3: "var(--brand-accent)"
118
+ brand-grad: "linear-gradient(135deg, var(--brand-primary), var(--brand-secondary))"
119
+ ink: "var(--brand-secondary)"
120
+
121
+ # The dark half.
122
+ dark:
123
+ surface: "oklch(14.1% .004 285.823)"
124
+ surface-card: "oklch(21% .006 285.885)"
125
+ surface-muted: "oklch(27.4% .005 286.033)"
126
+ surface-input: "oklch(21% .006 285.885)"
127
+ text-default: "oklch(98.5% 0 0)"
128
+ text-subtle-2: "oklch(87.1% .006 286.286)"
129
+ text-subtle: "oklch(71.2% .013 286.067)"
130
+ line: "oklch(27.4% .005 286.033)"
131
+ line-strong: "oklch(37% .012 285.805)"
132
+ link: "oklch(72.6% .151 288.094)"
133
+ brand-pressed: "oklch(63.7% .204 285.403)"
134
+ brand-2-pressed: "#1b2b4d"
135
+ focus-ring: "oklch(63.7% .204 285.403 / .40)"
136
+ ok-soft: "#10261a"
137
+ ok-ink: "#a8e6b8"
138
+ danger-soft: "#2a1620"
139
+ danger-ink: "#ffd0da"
140
+ danger-armed: "#e0466b"
141
+ danger-text: "#ff8fa3"
142
+ warning-soft: "#2e2610"
143
+ warning-ink: "#fde4a3"
144
+ info-soft: "#0c2a33"
145
+ info-ink: "#9eeaf9"
146
+ success-soft: "#10291d"
147
+ success-ink: "#a3d9bd"
148
+ busy-soft: "#1a2440"
149
+ busy-ink: "#b9c9ff"
150
+ accent-soft: "#2c2550"
151
+ accent-ink: "#d9d2ff"
152
+ chip-bg: "oklch(37% .013 285.805)"
153
+ chip-ink: "#e8edf6"
154
+ subtle-light: "oklch(21% .006 285.885)"
155
+ subtle-brand: "oklch(28.2% .091 267.935)"
156
+ subtle-accent: "oklch(29% .075 132)"
157
+ shadow-card: "0 4px 16px rgba(0, 0, 0, .35)"
158
+ shadow-card-hover: "0 12px 28px rgba(0, 0, 0, .50)"
159
+ shadow-float: "0 1.5rem 3rem rgba(0, 0, 0, .55)"
160
+ shadow-toast: "0 14px 34px rgba(0, 0, 0, .50)"
161
+ toast-ring: "rgba(0, 0, 0, .5)"
162
+ checker-a: "#2a3550"
163
+ checker-b: "#26314a"
164
+ checker-bg: "#131b2c"
165
+ overlay: "rgba(0, 0, 0, .72)"
166
+ ink: "var(--text-default)"