@webship.co/workspace 1.0.0-beta1 → 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 (630) 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/core/workspace-app/README.md +380 -0
  160. package/{actions → core/workspace-app/actions}/ddev.js +0 -1
  161. package/{actions → core/workspace-app/actions}/rag.js +0 -1
  162. package/{actions → core/workspace-app/actions}/testing.js +0 -1
  163. package/{assistant.js → core/workspace-app/assistant.js} +1 -10
  164. package/{git-info.js → core/workspace-app/git-info.js} +17 -1
  165. package/core/workspace-app/package.json +29 -0
  166. package/core/workspace-app/plugin-catalog.js +50 -0
  167. package/{plugins-page.js → core/workspace-app/plugins-page.js} +28 -2
  168. package/{server.js → core/workspace-app/server.js} +18 -0
  169. package/core/workspace-app/tests/features/actions-rail.feature +44 -0
  170. package/core/workspace-app/tests/features/ai-items.feature +23 -0
  171. package/core/workspace-app/tests/features/assistant-speech.feature +63 -0
  172. package/core/workspace-app/tests/features/checks.feature +39 -0
  173. package/core/workspace-app/tests/features/clone-project.feature +30 -0
  174. package/core/workspace-app/tests/features/command-authoring.feature +58 -0
  175. package/core/workspace-app/tests/features/dashboard.feature +57 -0
  176. package/core/workspace-app/tests/features/menus.feature +29 -0
  177. package/core/workspace-app/tests/features/plugins/jira/jira.feature +47 -0
  178. package/core/workspace-app/tests/features/plugins.feature +20 -0
  179. package/core/workspace-app/tests/features/project-actions.feature +40 -0
  180. package/core/workspace-app/tests/features/screens.feature +29 -0
  181. package/core/workspace-app/tests/features/settings.feature +46 -0
  182. package/core/workspace-app/tests/features/test-reports.feature +32 -0
  183. package/core/workspace-app/tests/features/theme.feature +40 -0
  184. package/core/workspace-app/tests/step-definitions/actions-post.steps.js +25 -0
  185. package/core/workspace-app/tests/step-definitions/assistant-speech.steps.js +152 -0
  186. package/core/workspace-app/tests/step-definitions/preconditions.steps.js +100 -0
  187. package/core/workspace-app/tests/unit/_isolated-config.js +31 -0
  188. package/core/workspace-app/tests/unit/accessibility.test.js +124 -0
  189. package/core/workspace-app/tests/unit/actions-rail-ux.test.js +56 -0
  190. package/core/workspace-app/tests/unit/actions-rail.test.js +51 -0
  191. package/core/workspace-app/tests/unit/ai-inventory.test.js +64 -0
  192. package/core/workspace-app/tests/unit/app-docs.test.js +64 -0
  193. package/core/workspace-app/tests/unit/assistant-avatar.test.js +110 -0
  194. package/core/workspace-app/tests/unit/assistant-cast.test.js +105 -0
  195. package/core/workspace-app/tests/unit/assistant-send-animation.test.js +15 -0
  196. package/core/workspace-app/tests/unit/assistant-suggestions.test.js +112 -0
  197. package/core/workspace-app/tests/unit/assistant-switches.test.js +53 -0
  198. package/core/workspace-app/tests/unit/assistant-views.test.js +146 -0
  199. package/core/workspace-app/tests/unit/assistant-working-indicator.test.js +49 -0
  200. package/core/workspace-app/tests/unit/assistant.test.js +61 -0
  201. package/core/workspace-app/tests/unit/audio-player.test.js +147 -0
  202. package/core/workspace-app/tests/unit/audio-voice.test.js +634 -0
  203. package/core/workspace-app/tests/unit/auth-google.test.js +180 -0
  204. package/core/workspace-app/tests/unit/autostart-watch.test.js +76 -0
  205. package/core/workspace-app/tests/unit/browsers.test.js +76 -0
  206. package/core/workspace-app/tests/unit/build-distribution.test.js +125 -0
  207. package/core/workspace-app/tests/unit/build-order.test.js +153 -0
  208. package/core/workspace-app/tests/unit/builder-args.test.js +113 -0
  209. package/core/workspace-app/tests/unit/builders.test.js +158 -0
  210. package/core/workspace-app/tests/unit/card-state-toggle.test.js +29 -0
  211. package/core/workspace-app/tests/unit/changelog.test.js +177 -0
  212. package/core/workspace-app/tests/unit/chat-thread.test.js +92 -0
  213. package/core/workspace-app/tests/unit/checks-plan.test.js +205 -0
  214. package/core/workspace-app/tests/unit/claude-args.test.js +182 -0
  215. package/core/workspace-app/tests/unit/claude-code-here.test.js +15 -0
  216. package/core/workspace-app/tests/unit/claude-resume.test.js +147 -0
  217. package/core/workspace-app/tests/unit/claude-screen-options.test.js +84 -0
  218. package/core/workspace-app/tests/unit/claude-session.test.js +41 -0
  219. package/core/workspace-app/tests/unit/command-flags.test.js +45 -0
  220. package/core/workspace-app/tests/unit/command-palette.test.js +105 -0
  221. package/core/workspace-app/tests/unit/commands-center.test.js +338 -0
  222. package/core/workspace-app/tests/unit/composer-menu.test.js +187 -0
  223. package/core/workspace-app/tests/unit/config-yaml.test.js +116 -0
  224. package/core/workspace-app/tests/unit/confirm-dialog.test.js +69 -0
  225. package/core/workspace-app/tests/unit/create-card.test.js +85 -0
  226. package/core/workspace-app/tests/unit/ddev-addons.test.js +144 -0
  227. package/core/workspace-app/tests/unit/ddev-auth-ssh.test.js +40 -0
  228. package/core/workspace-app/tests/unit/ddev-custom-commands.test.js +56 -0
  229. package/core/workspace-app/tests/unit/ddev-diagnose.test.js +57 -0
  230. package/core/workspace-app/tests/unit/ddev-domains.test.js +153 -0
  231. package/core/workspace-app/tests/unit/ddev-hostnames.test.js +143 -0
  232. package/core/workspace-app/tests/unit/ddev-import.test.js +82 -0
  233. package/core/workspace-app/tests/unit/ddev-mail.test.js +135 -0
  234. package/core/workspace-app/tests/unit/ddev-menu-and-create.test.js +28 -0
  235. package/core/workspace-app/tests/unit/ddev-mutagen.test.js +37 -0
  236. package/core/workspace-app/tests/unit/ddev-options.test.js +51 -0
  237. package/core/workspace-app/tests/unit/ddev-share.test.js +40 -0
  238. package/core/workspace-app/tests/unit/ddev-shim.test.js +57 -0
  239. package/core/workspace-app/tests/unit/ddev-snapshots.test.js +142 -0
  240. package/core/workspace-app/tests/unit/ddev-start-daemons.test.js +62 -0
  241. package/core/workspace-app/tests/unit/ddev-xdebug.test.js +41 -0
  242. package/core/workspace-app/tests/unit/deep-chat-origin.test.js +38 -0
  243. package/core/workspace-app/tests/unit/density.test.js +52 -0
  244. package/core/workspace-app/tests/unit/elevenlabs.test.js +453 -0
  245. package/core/workspace-app/tests/unit/event-log.test.js +102 -0
  246. package/core/workspace-app/tests/unit/favicon.test.js +68 -0
  247. package/core/workspace-app/tests/unit/files-browser.test.js +224 -0
  248. package/core/workspace-app/tests/unit/git-info.test.js +26 -0
  249. package/core/workspace-app/tests/unit/grid-and-list.test.js +103 -0
  250. package/core/workspace-app/tests/unit/host-tool-wrapper.test.js +18 -0
  251. package/core/workspace-app/tests/unit/html-patterns.test.js +51 -0
  252. package/core/workspace-app/tests/unit/ide-infra.test.js +28 -0
  253. package/core/workspace-app/tests/unit/images-ai.test.js +201 -0
  254. package/core/workspace-app/tests/unit/images-create.test.js +59 -0
  255. package/core/workspace-app/tests/unit/images-providers.test.js +248 -0
  256. package/core/workspace-app/tests/unit/images-svg.test.js +213 -0
  257. package/core/workspace-app/tests/unit/images-workspace.test.js +144 -0
  258. package/core/workspace-app/tests/unit/jobs-fragment.test.js +66 -0
  259. package/core/workspace-app/tests/unit/media-ux.test.js +164 -0
  260. package/core/workspace-app/tests/unit/modal-fit.test.js +87 -0
  261. package/core/workspace-app/tests/unit/modules-load.test.js +23 -0
  262. package/core/workspace-app/tests/unit/narration.test.js +186 -0
  263. package/core/workspace-app/tests/unit/navigation-editor.test.js +260 -0
  264. package/core/workspace-app/tests/unit/navigation.test.js +254 -0
  265. package/core/workspace-app/tests/unit/new-folder.test.js +121 -0
  266. package/core/workspace-app/tests/unit/new-screen-form.test.js +149 -0
  267. package/core/workspace-app/tests/unit/node-menu.test.js +161 -0
  268. package/core/workspace-app/tests/unit/notes.test.js +128 -0
  269. package/core/workspace-app/tests/unit/page-structure.test.js +40 -0
  270. package/core/workspace-app/tests/unit/page-width.test.js +59 -0
  271. package/core/workspace-app/tests/unit/php-version.test.js +90 -0
  272. package/core/workspace-app/tests/unit/plan-card.test.js +44 -0
  273. package/core/workspace-app/tests/unit/plugin-catalog.test.js +31 -0
  274. package/core/workspace-app/tests/unit/plugin-system.test.js +251 -0
  275. package/core/workspace-app/tests/unit/plugins-page.test.js +28 -0
  276. package/core/workspace-app/tests/unit/plugins.test.js +58 -0
  277. package/core/workspace-app/tests/unit/project-activity-filter.test.js +180 -0
  278. package/core/workspace-app/tests/unit/project-make.test.js +143 -0
  279. package/core/workspace-app/tests/unit/project-name.test.js +202 -0
  280. package/core/workspace-app/tests/unit/reader.test.js +62 -0
  281. package/core/workspace-app/tests/unit/release.test.js +92 -0
  282. package/core/workspace-app/tests/unit/remove-confirm.test.js +37 -0
  283. package/core/workspace-app/tests/unit/report-pdf.test.js +171 -0
  284. package/core/workspace-app/tests/unit/round-11.test.js +31 -0
  285. package/core/workspace-app/tests/unit/round-12.test.js +37 -0
  286. package/core/workspace-app/tests/unit/row-layout.test.js +585 -0
  287. package/core/workspace-app/tests/unit/row-menus-fold.test.js +29 -0
  288. package/core/workspace-app/tests/unit/rows-add-modal.test.js +68 -0
  289. package/core/workspace-app/tests/unit/screen-runner-queue.test.js +41 -0
  290. package/core/workspace-app/tests/unit/screen-window.test.js +116 -0
  291. package/core/workspace-app/tests/unit/screens-beside-running.test.js +19 -0
  292. package/core/workspace-app/tests/unit/screens-columns.test.js +79 -0
  293. package/core/workspace-app/tests/unit/screens-menu.test.js +84 -0
  294. package/core/workspace-app/tests/unit/screens-modal-overlay.test.js +14 -0
  295. package/core/workspace-app/tests/unit/screens-waiting.test.js +129 -0
  296. package/core/workspace-app/tests/unit/screens.test.js +74 -0
  297. package/core/workspace-app/tests/unit/second-storage.test.js +218 -0
  298. package/core/workspace-app/tests/unit/session-name.test.js +64 -0
  299. package/core/workspace-app/tests/unit/settings-file.test.js +173 -0
  300. package/core/workspace-app/tests/unit/settings-nested-list.test.js +54 -0
  301. package/core/workspace-app/tests/unit/settings-raw.test.js +177 -0
  302. package/core/workspace-app/tests/unit/shared-prefs.test.js +49 -0
  303. package/core/workspace-app/tests/unit/speech.test.js +290 -0
  304. package/core/workspace-app/tests/unit/static-caching.test.js +39 -0
  305. package/core/workspace-app/tests/unit/status-language.test.js +47 -0
  306. package/core/workspace-app/tests/unit/tab-modal.test.js +69 -0
  307. package/core/workspace-app/tests/unit/tab-title.test.js +37 -0
  308. package/core/workspace-app/tests/unit/template-literals.test.js +52 -0
  309. package/core/workspace-app/tests/unit/terminal-scrollback.test.js +61 -0
  310. package/core/workspace-app/tests/unit/terminal-size.test.js +103 -0
  311. package/core/workspace-app/tests/unit/terminal-style.test.js +84 -0
  312. package/core/workspace-app/tests/unit/terminal-windows.test.js +154 -0
  313. package/core/workspace-app/tests/unit/themes.test.js +453 -0
  314. package/core/workspace-app/tests/unit/tool-labels.test.js +34 -0
  315. package/core/workspace-app/tests/unit/topbar-icons.test.js +47 -0
  316. package/core/workspace-app/tests/unit/update-docker-gid.test.js +51 -0
  317. package/core/workspace-app/tests/unit/user-guide.test.js +60 -0
  318. package/core/workspace-app/tests/unit/version-check.test.js +98 -0
  319. package/core/workspace-app/tests/unit/version-link.test.js +50 -0
  320. package/core/workspace-app/tests/unit/video-borrow.test.js +198 -0
  321. package/core/workspace-app/tests/unit/video-edit-ask.test.js +93 -0
  322. package/core/workspace-app/tests/unit/video-edit-short.test.js +42 -0
  323. package/core/workspace-app/tests/unit/video-edit.test.js +417 -0
  324. package/core/workspace-app/tests/unit/video-transcript.test.js +237 -0
  325. package/core/workspace-app/tests/unit/waiting.test.js +48 -0
  326. package/core/workspace-app/tests/unit/wordpress-odoo-builders.test.js +38 -0
  327. package/core/workspace-app/tests/unit/workspace-bin.test.js +48 -0
  328. package/core/workspace-app/tests/unit/workspace-card-tools.test.js +30 -0
  329. package/core/workspace-app/tests/unit/workspace-delete.test.js +77 -0
  330. package/core/workspace-app/tests/unit/workspace-types.test.js +68 -0
  331. package/core/workspace-app/tests/unit/worktree-clone.test.js +250 -0
  332. package/package.json +38 -36
  333. /package/{PLUGINS.md → core/workspace-app/PLUGINS.md} +0 -0
  334. /package/{WORKSPACES.md → core/workspace-app/WORKSPACES.md} +0 -0
  335. /package/{actions → core/workspace-app/actions}/ai-items.js +0 -0
  336. /package/{actions → core/workspace-app/actions}/audio.js +0 -0
  337. /package/{actions → core/workspace-app/actions}/build-order.js +0 -0
  338. /package/{actions → core/workspace-app/actions}/checks.js +0 -0
  339. /package/{actions → core/workspace-app/actions}/claude-session.js +0 -0
  340. /package/{actions → core/workspace-app/actions}/commands-center.js +0 -0
  341. /package/{actions → core/workspace-app/actions}/composer.js +0 -0
  342. /package/{actions → core/workspace-app/actions}/ddev-addons.js +0 -0
  343. /package/{actions → core/workspace-app/actions}/ddev-mail.js +0 -0
  344. /package/{actions → core/workspace-app/actions}/folders.js +0 -0
  345. /package/{actions → core/workspace-app/actions}/images-svg.js +0 -0
  346. /package/{actions → core/workspace-app/actions}/images.js +0 -0
  347. /package/{actions → core/workspace-app/actions}/navigation.js +0 -0
  348. /package/{actions → core/workspace-app/actions}/node.js +0 -0
  349. /package/{actions → core/workspace-app/actions}/notes.js +0 -0
  350. /package/{actions → core/workspace-app/actions}/plugins.js +0 -0
  351. /package/{actions → core/workspace-app/actions}/project-make.js +0 -0
  352. /package/{actions → core/workspace-app/actions}/row-actions.js +0 -0
  353. /package/{actions → core/workspace-app/actions}/screens.js +0 -0
  354. /package/{actions → core/workspace-app/actions}/video-edit.js +0 -0
  355. /package/{ai-inventory.js → core/workspace-app/ai-inventory.js} +0 -0
  356. /package/{ai-items.js → core/workspace-app/ai-items.js} +0 -0
  357. /package/{assistant-cast.js → core/workspace-app/assistant-cast.js} +0 -0
  358. /package/{assistant-suggestions.js → core/workspace-app/assistant-suggestions.js} +0 -0
  359. /package/{audio-voice.js → core/workspace-app/audio-voice.js} +0 -0
  360. /package/{auth-google.js → core/workspace-app/auth-google.js} +0 -0
  361. /package/{build-ai.js → core/workspace-app/build-ai.js} +0 -0
  362. /package/{build-order-page.js → core/workspace-app/build-order-page.js} +0 -0
  363. /package/{build-order.js → core/workspace-app/build-order.js} +0 -0
  364. /package/{builder-args.js → core/workspace-app/builder-args.js} +0 -0
  365. /package/{changelog.js → core/workspace-app/changelog.js} +0 -0
  366. /package/{chat-threads.js → core/workspace-app/chat-threads.js} +0 -0
  367. /package/{checks.js → core/workspace-app/checks.js} +0 -0
  368. /package/{claude-args.js → core/workspace-app/claude-args.js} +0 -0
  369. /package/{claude-sessions.js → core/workspace-app/claude-sessions.js} +0 -0
  370. /package/{command-author.js → core/workspace-app/command-author.js} +0 -0
  371. /package/{command-block.js → core/workspace-app/command-block.js} +0 -0
  372. /package/{commands → core/workspace-app/commands}/defaults.yml +0 -0
  373. /package/{commands-page.js → core/workspace-app/commands-page.js} +0 -0
  374. /package/{commands.js → core/workspace-app/commands.js} +0 -0
  375. /package/{cucumber.js → core/workspace-app/cucumber.js} +0 -0
  376. /package/{ddev-addons-page.js → core/workspace-app/ddev-addons-page.js} +0 -0
  377. /package/{ddev-addons.js → core/workspace-app/ddev-addons.js} +0 -0
  378. /package/{ddev-custom-commands.js → core/workspace-app/ddev-custom-commands.js} +0 -0
  379. /package/{ddev-domains.js → core/workspace-app/ddev-domains.js} +0 -0
  380. /package/{ddev-import.js → core/workspace-app/ddev-import.js} +0 -0
  381. /package/{ddev-mail-page.js → core/workspace-app/ddev-mail-page.js} +0 -0
  382. /package/{ddev-mail.js → core/workspace-app/ddev-mail.js} +0 -0
  383. /package/{ddev-options.js → core/workspace-app/ddev-options.js} +0 -0
  384. /package/{ddev-snapshots.js → core/workspace-app/ddev-snapshots.js} +0 -0
  385. /package/{ddev.js → core/workspace-app/ddev.js} +0 -0
  386. /package/{docs → core/workspace-app/docs}/DEVELOPER-GUIDE.md +0 -0
  387. /package/{docs → core/workspace-app/docs}/README.md +0 -0
  388. /package/{docs → core/workspace-app/docs}/REFERENCE.md +0 -0
  389. /package/{docs → core/workspace-app/docs}/USER-GUIDE.md +0 -0
  390. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-board.png +0 -0
  391. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-coffee.png +0 -0
  392. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-colours.png +0 -0
  393. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-icons.png +0 -0
  394. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-moves.png +0 -0
  395. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-pick-cookieman.png +0 -0
  396. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-settings-voices.png +0 -0
  397. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-status.png +0 -0
  398. /package/{docs → core/workspace-app/docs}/screenshots/create-card/create-card.png +0 -0
  399. /package/{docs → core/workspace-app/docs}/screenshots/create-card/start-ai.png +0 -0
  400. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-address.png +0 -0
  401. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-off.png +0 -0
  402. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-on.png +0 -0
  403. /package/{docs → core/workspace-app/docs}/screenshots/guide-ddev-menu.png +0 -0
  404. /package/{docs → core/workspace-app/docs}/screenshots/guide-domains.png +0 -0
  405. /package/{docs → core/workspace-app/docs}/screenshots/guide-home.png +0 -0
  406. /package/{docs → core/workspace-app/docs}/screenshots/guide-ide-menu.png +0 -0
  407. /package/{docs → core/workspace-app/docs}/screenshots/guide-remove-refusal.png +0 -0
  408. /package/{docs → core/workspace-app/docs}/screenshots/guide-rows-worktree.png +0 -0
  409. /package/{docs → core/workspace-app/docs}/screenshots/guide-screens.png +0 -0
  410. /package/{docs → core/workspace-app/docs}/screenshots/guide-settings.png +0 -0
  411. /package/{docs → core/workspace-app/docs}/screenshots/guide-workspace-page.png +0 -0
  412. /package/{docs → core/workspace-app/docs}/screenshots/home/card-settings.png +0 -0
  413. /package/{docs → core/workspace-app/docs}/screenshots/home/drag-reorder.png +0 -0
  414. /package/{docs → core/workspace-app/docs}/screenshots/home/edit-card.png +0 -0
  415. /package/{docs → core/workspace-app/docs}/screenshots/images/claude-code-image.png +0 -0
  416. /package/{docs → core/workspace-app/docs}/screenshots/images/edit-with-ai.png +0 -0
  417. /package/{docs → core/workspace-app/docs}/screenshots/images/gallery.png +0 -0
  418. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-description.png +0 -0
  419. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-plan.png +0 -0
  420. /package/{docs → core/workspace-app/docs}/screenshots/images/providers.png +0 -0
  421. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-form.png +0 -0
  422. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-result.png +0 -0
  423. /package/{docs → core/workspace-app/docs}/screenshots/images/upload.png +0 -0
  424. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/2-form.png +0 -0
  425. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/8-ddev-options.png +0 -0
  426. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/files-folder.png +0 -0
  427. /package/{docs → core/workspace-app/docs}/screenshots/projects/ddev-custom-commands.png +0 -0
  428. /package/{docs → core/workspace-app/docs}/screenshots/projects/state-chip-stop.png +0 -0
  429. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-dark.png +0 -0
  430. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-light.png +0 -0
  431. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-dark.png +0 -0
  432. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-light.png +0 -0
  433. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-dark.png +0 -0
  434. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-light.png +0 -0
  435. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/ai.svg +0 -0
  436. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/code.svg +0 -0
  437. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/docs.svg +0 -0
  438. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/services.svg +0 -0
  439. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/sites.svg +0 -0
  440. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-dark.png +0 -0
  441. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-light.png +0 -0
  442. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-scenarios.png +0 -0
  443. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-steps.png +0 -0
  444. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-dark.png +0 -0
  445. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-light.png +0 -0
  446. /package/{docs → core/workspace-app/docs}/screenshots/screens-menu.png +0 -0
  447. /package/{docs → core/workspace-app/docs}/screenshots/screens-new.png +0 -0
  448. /package/{docs → core/workspace-app/docs}/screenshots/settings/auth-google-lists.png +0 -0
  449. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-1-row.png +0 -0
  450. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-2-confirm.png +0 -0
  451. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-3-type-name.png +0 -0
  452. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-4-type-yes.png +0 -0
  453. /package/{event-log.js → core/workspace-app/event-log.js} +0 -0
  454. /package/{files-browser.js → core/workspace-app/files-browser.js} +0 -0
  455. /package/{folders.js → core/workspace-app/folders.js} +0 -0
  456. /package/{format.js → core/workspace-app/format.js} +0 -0
  457. /package/{github-auth.js → core/workspace-app/github-auth.js} +0 -0
  458. /package/{html.js → core/workspace-app/html.js} +0 -0
  459. /package/{icons.js → core/workspace-app/icons.js} +0 -0
  460. /package/{images-ai.js → core/workspace-app/images-ai.js} +0 -0
  461. /package/{images-create.js → core/workspace-app/images-create.js} +0 -0
  462. /package/{images-page.js → core/workspace-app/images-page.js} +0 -0
  463. /package/{images-records.js → core/workspace-app/images-records.js} +0 -0
  464. /package/{images-render.js → core/workspace-app/images-render.js} +0 -0
  465. /package/{images-svg-core.js → core/workspace-app/images-svg-core.js} +0 -0
  466. /package/{images-svg-sanitize.js → core/workspace-app/images-svg-sanitize.js} +0 -0
  467. /package/{images-svg.js → core/workspace-app/images-svg.js} +0 -0
  468. /package/{images.js → core/workspace-app/images.js} +0 -0
  469. /package/{jobs.js → core/workspace-app/jobs.js} +0 -0
  470. /package/{linger.js → core/workspace-app/linger.js} +0 -0
  471. /package/{lists.js → core/workspace-app/lists.js} +0 -0
  472. /package/{media-info.js → core/workspace-app/media-info.js} +0 -0
  473. /package/{navigation-page.js → core/workspace-app/navigation-page.js} +0 -0
  474. /package/{navigation.js → core/workspace-app/navigation.js} +0 -0
  475. /package/{notes.js → core/workspace-app/notes.js} +0 -0
  476. /package/{palette-index.js → core/workspace-app/palette-index.js} +0 -0
  477. /package/{playwright.config.js → core/workspace-app/playwright.config.js} +0 -0
  478. /package/{plugin-install.js → core/workspace-app/plugin-install.js} +0 -0
  479. /package/{plugin-loader.js → core/workspace-app/plugin-loader.js} +0 -0
  480. /package/{plugin-manifest.js → core/workspace-app/plugin-manifest.js} +0 -0
  481. /package/{plugin-settings.js → core/workspace-app/plugin-settings.js} +0 -0
  482. /package/{plugins → core/workspace-app/plugins}/workspace-notes/index.js +0 -0
  483. /package/{project-make.js → core/workspace-app/project-make.js} +0 -0
  484. /package/{project-name.js → core/workspace-app/project-name.js} +0 -0
  485. /package/{public → core/workspace-app/public}/assistant-avatar-moves.js +0 -0
  486. /package/{public → core/workspace-app/public}/assistant-avatar-ui.js +0 -0
  487. /package/{public → core/workspace-app/public}/assistant-avatar.js +0 -0
  488. /package/{public → core/workspace-app/public}/avatar/druplicon.vrm +0 -0
  489. /package/{public → core/workspace-app/public}/css/base.css +0 -0
  490. /package/{public → core/workspace-app/public}/css/components/ai-assistant.css +0 -0
  491. /package/{public → core/workspace-app/public}/css/components/assistant-avatar.css +0 -0
  492. /package/{public → core/workspace-app/public}/css/components/assistant-views.css +0 -0
  493. /package/{public → core/workspace-app/public}/css/components/build-order.css +0 -0
  494. /package/{public → core/workspace-app/public}/css/components/clone-as-a-git-worktree.css +0 -0
  495. /package/{public → core/workspace-app/public}/css/components/command-palette.css +0 -0
  496. /package/{public → core/workspace-app/public}/css/components/commands-center.css +0 -0
  497. /package/{public → core/workspace-app/public}/css/components/confirm-dialog.css +0 -0
  498. /package/{public → core/workspace-app/public}/css/components/create-card.css +0 -0
  499. /package/{public → core/workspace-app/public}/css/components/ddev-menu.css +0 -0
  500. /package/{public → core/workspace-app/public}/css/components/deep-chat.css +0 -0
  501. /package/{public → core/workspace-app/public}/css/components/density.css +0 -0
  502. /package/{public → core/workspace-app/public}/css/components/floating-assistant-workspace-pages.css +0 -0
  503. /package/{public → core/workspace-app/public}/css/components/folders.css +0 -0
  504. /package/{public → core/workspace-app/public}/css/components/full-height-left-assistant-sidebar-all-pages.css +0 -0
  505. /package/{public → core/workspace-app/public}/css/components/full-height-right-actions-rail-pages-that-have-actions.css +0 -0
  506. /package/{public → core/workspace-app/public}/css/components/grid-and-list.css +0 -0
  507. /package/{public → core/workspace-app/public}/css/components/help-page.css +0 -0
  508. /package/{public → core/workspace-app/public}/css/components/hero.css +0 -0
  509. /package/{public → core/workspace-app/public}/css/components/images.css +0 -0
  510. /package/{public → core/workspace-app/public}/css/components/layout-rhythm-and-spacing-polish.css +0 -0
  511. /package/{public → core/workspace-app/public}/css/components/mic-on-any-field-that-wants-typing.css +0 -0
  512. /package/{public → core/workspace-app/public}/css/components/modal-fit.css +0 -0
  513. /package/{public → core/workspace-app/public}/css/components/page-width.css +0 -0
  514. /package/{public → core/workspace-app/public}/css/components/plugins-page.css +0 -0
  515. /package/{public → core/workspace-app/public}/css/components/project-cards.css +0 -0
  516. /package/{public → core/workspace-app/public}/css/components/project-rows.css +0 -0
  517. /package/{public → core/workspace-app/public}/css/components/reordering-the-workspace-cards.css +0 -0
  518. /package/{public → core/workspace-app/public}/css/components/responsive-home-and-the-workspace-pages.css +0 -0
  519. /package/{public → core/workspace-app/public}/css/components/running-commands-as-toasts.css +0 -0
  520. /package/{public → core/workspace-app/public}/css/components/settings-editor-core-config-yml.css +0 -0
  521. /package/{public → core/workspace-app/public}/css/components/short-results-as-a-toast-at-the-top.css +0 -0
  522. /package/{public → core/workspace-app/public}/css/components/sound-player.css +0 -0
  523. /package/{public → core/workspace-app/public}/css/components/suggest-agents-skills-commands.css +0 -0
  524. /package/{public → core/workspace-app/public}/css/components/tab-modal.css +0 -0
  525. /package/{public → core/workspace-app/public}/css/components/terminals.css +0 -0
  526. /package/{public → core/workspace-app/public}/css/components/test-report-media-one-file-per-row-paged.css +0 -0
  527. /package/{public → core/workspace-app/public}/css/components/top-toolbar-logo-breadcrumb.css +0 -0
  528. /package/{public → core/workspace-app/public}/css/components/video-edit.css +0 -0
  529. /package/{public → core/workspace-app/public}/css/components/web-ide-open-with.css +0 -0
  530. /package/{public → core/workspace-app/public}/css/components/working-indicators.css +0 -0
  531. /package/{public → core/workspace-app/public}/css/components/workspace-cards.css +0 -0
  532. /package/{public → core/workspace-app/public}/favicon.ico +0 -0
  533. /package/{public → core/workspace-app/public}/favicon.png +0 -0
  534. /package/{public → core/workspace-app/public}/htmx.min.js +0 -0
  535. /package/{public → core/workspace-app/public}/logo.png +0 -0
  536. /package/{public → core/workspace-app/public}/media-player.js +0 -0
  537. /package/{public → core/workspace-app/public}/mic.js +0 -0
  538. /package/{public → core/workspace-app/public}/narration.js +0 -0
  539. /package/{public → core/workspace-app/public}/palette.js +0 -0
  540. /package/{public → core/workspace-app/public}/sortable.js +0 -0
  541. /package/{public → core/workspace-app/public}/suggest.js +0 -0
  542. /package/{public → core/workspace-app/public}/terminal.js +0 -0
  543. /package/{public → core/workspace-app/public}/themes/default/theme.css +0 -0
  544. /package/{public → core/workspace-app/public}/themes/ember/theme.css +0 -0
  545. /package/{public → core/workspace-app/public}/themes/press/theme.css +0 -0
  546. /package/{public → core/workspace-app/public}/themes/slate/theme.css +0 -0
  547. /package/{public → core/workspace-app/public}/touch-icon.png +0 -0
  548. /package/{public → core/workspace-app/public}/ui.js +0 -0
  549. /package/{public → core/workspace-app/public}/vendor/ace/LICENSE.txt +0 -0
  550. /package/{public → core/workspace-app/public}/vendor/ace/ace.js +0 -0
  551. /package/{public → core/workspace-app/public}/vendor/ace/ext-language_tools.js +0 -0
  552. /package/{public → core/workspace-app/public}/vendor/ace/ext-searchbox.js +0 -0
  553. /package/{public → core/workspace-app/public}/vendor/ace/mode-css.js +0 -0
  554. /package/{public → core/workspace-app/public}/vendor/ace/mode-html.js +0 -0
  555. /package/{public → core/workspace-app/public}/vendor/ace/mode-javascript.js +0 -0
  556. /package/{public → core/workspace-app/public}/vendor/ace/mode-markdown.js +0 -0
  557. /package/{public → core/workspace-app/public}/vendor/ace/mode-sh.js +0 -0
  558. /package/{public → core/workspace-app/public}/vendor/ace/mode-yaml.js +0 -0
  559. /package/{public → core/workspace-app/public}/vendor/ace/theme-textmate.js +0 -0
  560. /package/{public → core/workspace-app/public}/vendor/ace/theme-tomorrow_night.js +0 -0
  561. /package/{public → core/workspace-app/public}/vendor/ace/worker-yaml.js +0 -0
  562. /package/{public → core/workspace-app/public}/vendor/deep-chat.LICENSE +0 -0
  563. /package/{public → core/workspace-app/public}/vendor/deep-chat.bundle.js +0 -0
  564. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-LICENSE.txt +0 -0
  565. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
  566. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
  567. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-LICENSE.txt +0 -0
  568. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
  569. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
  570. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
  571. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
  572. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-LICENSE.txt +0 -0
  573. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  574. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-LICENSE.txt +0 -0
  575. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
  576. /package/{public → core/workspace-app/public}/vendor/tabler-LICENSE.txt +0 -0
  577. /package/{public → core/workspace-app/public}/vendor/tabler-sprite.svg +0 -0
  578. /package/{public → core/workspace-app/public}/vendor/three/LICENSE +0 -0
  579. /package/{public → core/workspace-app/public}/vendor/three/addons/loaders/GLTFLoader.js +0 -0
  580. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/BufferGeometryUtils.js +0 -0
  581. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/SkeletonUtils.js +0 -0
  582. /package/{public → core/workspace-app/public}/vendor/three/three.core.min.js +0 -0
  583. /package/{public → core/workspace-app/public}/vendor/three/three.module.min.js +0 -0
  584. /package/{public → core/workspace-app/public}/vendor/three-vrm/LICENSE +0 -0
  585. /package/{public → core/workspace-app/public}/vendor/three-vrm/three-vrm.module.min.js +0 -0
  586. /package/{public → core/workspace-app/public}/vendor/uikit-icons.min.js +0 -0
  587. /package/{public → core/workspace-app/public}/vendor/uikit.min.css +0 -0
  588. /package/{public → core/workspace-app/public}/vendor/uikit.min.js +0 -0
  589. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/bookmark-outlined.svg +0 -0
  590. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/headset.svg +0 -0
  591. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/menu.svg +0 -0
  592. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/pause.svg +0 -0
  593. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/play.svg +0 -0
  594. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/share.svg +0 -0
  595. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-off.svg +0 -0
  596. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-on.svg +0 -0
  597. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/stop.svg +0 -0
  598. /package/{public → core/workspace-app/public}/vendor/xterm/addon-fit.js +0 -0
  599. /package/{public → core/workspace-app/public}/vendor/xterm/addon-unicode11.js +0 -0
  600. /package/{public → core/workspace-app/public}/vendor/xterm/addon-web-links.js +0 -0
  601. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.css +0 -0
  602. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.js +0 -0
  603. /package/{rag.js → core/workspace-app/rag.js} +0 -0
  604. /package/{reader.js → core/workspace-app/reader.js} +0 -0
  605. /package/{repo-blobs.js → core/workspace-app/repo-blobs.js} +0 -0
  606. /package/{report-pdf.js → core/workspace-app/report-pdf.js} +0 -0
  607. /package/{row-layout.js → core/workspace-app/row-layout.js} +0 -0
  608. /package/{screenrc → core/workspace-app/screenrc} +0 -0
  609. /package/{screens.js → core/workspace-app/screens.js} +0 -0
  610. /package/{scripts → core/workspace-app/scripts}/code-server-start.sh +0 -0
  611. /package/{scripts → core/workspace-app/scripts}/images-claude-finish.js +0 -0
  612. /package/{scripts → core/workspace-app/scripts}/screen-host.sh +0 -0
  613. /package/{scripts → core/workspace-app/scripts}/screen-runner.js +0 -0
  614. /package/{scripts → core/workspace-app/scripts}/screen-then.js +0 -0
  615. /package/{scripts → core/workspace-app/scripts}/update.sh +0 -0
  616. /package/{settings-file.js → core/workspace-app/settings-file.js} +0 -0
  617. /package/{speech.js → core/workspace-app/speech.js} +0 -0
  618. /package/{tab-modal.js → core/workspace-app/tab-modal.js} +0 -0
  619. /package/{test-reports.js → core/workspace-app/test-reports.js} +0 -0
  620. /package/{themes.js → core/workspace-app/themes.js} +0 -0
  621. /package/{transcripts.js → core/workspace-app/transcripts.js} +0 -0
  622. /package/{urls.js → core/workspace-app/urls.js} +0 -0
  623. /package/{validate.js → core/workspace-app/validate.js} +0 -0
  624. /package/{version-check.js → core/workspace-app/version-check.js} +0 -0
  625. /package/{video-edit.js → core/workspace-app/video-edit.js} +0 -0
  626. /package/{waiting.js → core/workspace-app/waiting.js} +0 -0
  627. /package/{workspace-card-tools.js → core/workspace-app/workspace-card-tools.js} +0 -0
  628. /package/{workspace-delete.js → core/workspace-app/workspace-delete.js} +0 -0
  629. /package/{workspace-types.js → core/workspace-app/workspace-types.js} +0 -0
  630. /package/{workspaces.js → core/workspace-app/workspaces.js} +0 -0
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ################################################################################
4
+ ## Extra hostnames for a project — the same site at another address.
5
+ ################################################################################
6
+ ## A DDEV project answers at `<name>.<project_tld>` because the NAME decides the
7
+ ## address, and the workspace hands out a second, hierarchical one
8
+ ## (`<project>.<workspace>.workspace.ddev.site`) through its own nginx tier. What
9
+ ## neither gives you is a THIRD shape people keep asking for: the same project
10
+ ## name in two workspaces, told apart in one flat hostname —
11
+ ## `test3-dev.ddev.site` and `test3-test.ddev.site`.
12
+ ##
13
+ ## That is DDEV's `additional_hostnames`, and it is deliberately what this uses
14
+ ## rather than renaming the project:
15
+ ##
16
+ ## * ADDING a hostname is reversible and costs nothing. RENAMING kills the old
17
+ ## URL, recreates the containers and volumes under the new name, and leaves
18
+ ## the DDEV project name no longer matching the folder — which is precisely
19
+ ## what makes a git worktree collide with its source (fun-clone-project.sh).
20
+ ## * Several addresses can coexist. A rename gives you exactly one, and takes
21
+ ## one away.
22
+ ## * Every link already printed, bookmarked or written in a doc keeps working.
23
+ ##
24
+ ## Written through `ddev config --additional-hostnames=`, never by editing the
25
+ ## YAML: DDEV owns that file, validates the names and rewrites the router
26
+ ## configuration. The list is REPLACED by that flag, so anything here that adds
27
+ ## one reads the current list first and writes it back whole — an add that
28
+ ## silently dropped the other hostnames would be worse than no add at all.
29
+ ##
30
+ ## A change only reaches the router on the next start, so these functions say so
31
+ ## and offer to do it rather than leaving a hostname that resolves to nothing.
32
+ ################################################################################
33
+
34
+ # The additional_hostnames a project currently declares, one per line.
35
+ # Read from the project's own config.yaml, which is the file the flag writes, so
36
+ # what is read and what is written cannot disagree.
37
+ function ddev_hostnames_list() {
38
+ local dir="${1:-}" cfg
39
+ cfg="${dir}/.ddev/config.yaml"
40
+ [ -f "${cfg}" ] || return 0
41
+ # The block is `additional_hostnames:` followed by `- name` lines, or an inline
42
+ # `[a, b]`. Both shapes are legal YAML and DDEV writes the first.
43
+ python3 - "${cfg}" <<'PY' 2>/dev/null
44
+ import sys, re
45
+ try:
46
+ lines = open(sys.argv[1], encoding='utf-8').read().split('\n')
47
+ except Exception:
48
+ sys.exit(0)
49
+ out, inblock = [], False
50
+ for ln in lines:
51
+ if re.match(r'^additional_hostnames:', ln):
52
+ rest = ln.split(':', 1)[1].strip()
53
+ if rest.startswith('['):
54
+ out += [x.strip().strip('"\'') for x in rest.strip('[]').split(',') if x.strip()]
55
+ else:
56
+ inblock = True
57
+ continue
58
+ if inblock:
59
+ m = re.match(r'^\s+-\s*(.+?)\s*$', ln)
60
+ if m:
61
+ out.append(m.group(1).strip().strip('"\''))
62
+ continue
63
+ if ln.strip() == '' or ln.startswith(' '):
64
+ continue
65
+ inblock = False
66
+ for h in out:
67
+ if h and h != '[]':
68
+ print(h)
69
+ PY
70
+ }
71
+
72
+ # The hostname a project would get from its workspace: <project>-<workspace>.
73
+ # One flat name that is unique across workspaces, which is the whole point —
74
+ # `test3` in dev and `test3` in test cannot both be `test3.ddev.site`.
75
+ function ddev_workspace_hostname() {
76
+ local project="${1:-}" workspace="${2:-}"
77
+ [ -n "${project}" ] && [ -n "${workspace}" ] || return 0
78
+ # DDEV allows letters, digits and hyphens in a hostname; a workspace key can
79
+ # carry a hyphen already (site-templates), which is fine, and nothing else.
80
+ echo "${project}-${workspace}" | tr -c 'a-zA-Z0-9-\n' '-'
81
+ }
82
+
83
+ # Is this a hostname DDEV will accept? Refused here rather than after a failed
84
+ # `ddev config`, because the message DDEV gives is about its whole config file.
85
+ function ddev_hostname_valid() {
86
+ local h="${1:-}"
87
+ [ -n "${h}" ] || return 1
88
+ # A label, not an FQDN: additional_hostnames gets project_tld appended. A dot
89
+ # here would silently produce name.example.com.ddev.site.
90
+ echo "${h}" | grep -qE '^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$'
91
+ }
92
+
93
+ # Add one or more hostnames, keeping the ones already there.
94
+ function ddev_hostnames_add() {
95
+ local dir="${1}" ; shift
96
+ local cfg="${dir}/.ddev/config.yaml" tld existing all h added=0
97
+ if [ ! -f "${cfg}" ] ; then
98
+ echo "Not a DDEV project: ${dir}" ; return 1 ;
99
+ fi
100
+ existing="$(ddev_hostnames_list "${dir}")"
101
+ all="${existing}"
102
+ for h in "$@" ; do
103
+ [ -n "${h}" ] || continue
104
+ if ! ddev_hostname_valid "${h}" ; then
105
+ echo " '${h}' is not a hostname label — letters, digits and hyphens only, and no dots" ;
106
+ echo " (the project's TLD is appended, so a dot here would give name.example.com.<tld>)." ;
107
+ return 1 ;
108
+ fi
109
+ if echo "${existing}" | grep -qx "${h}" ; then
110
+ echo " ${h} is already there." ; continue ;
111
+ fi
112
+ # Two projects claiming one hostname is a router conflict, and it is invisible
113
+ # one project at a time: whichever started last wins, and the other simply
114
+ # stops answering at an address that used to work. Checked across the whole
115
+ # tree, not just this workspace, because the router is one thing for all of
116
+ # them — and against DDEV's project NAMES too, since the canonical hostname
117
+ # comes from the name and would be shadowed just the same.
118
+ local owner
119
+ owner="$(ddev_hostname_owner "${h}" "${dir}")"
120
+ if [ -n "${owner}" ] ; then
121
+ echo " '${h}' is already taken by ${owner}." ;
122
+ echo " Two projects on one hostname is a router conflict: the last one to" ;
123
+ echo " start wins and the other quietly stops answering. Pick another." ;
124
+ return 1 ;
125
+ fi
126
+ all="$(printf '%s\n%s' "${all}" "${h}")"
127
+ added=$((added+1)) ;
128
+ done
129
+ [ "${added}" -eq 0 ] && return 0 ;
130
+
131
+ # Written whole, because the flag replaces the list.
132
+ local joined
133
+ joined="$(echo "${all}" | grep -v '^$' | paste -sd, -)"
134
+ ( cd "${dir}" && ddev config --additional-hostnames="${joined}" > /dev/null ) || {
135
+ echo " ddev refused the hostname list: ${joined}" ; return 1 ;
136
+ }
137
+ tld="$(ddev_project_tld)"
138
+ echo " Hostnames for this project are now:" ;
139
+ ddev_hostnames_list "${dir}" | sed "s|^| https://|; s|\$|.${tld}|" ;
140
+ echo "" ;
141
+ echo " A hostname reaches the router only on the next start:" ;
142
+ echo " cd ${dir} && ddev start" ;
143
+ }
144
+
145
+ # Remove one hostname, leaving the rest.
146
+ function ddev_hostnames_remove() {
147
+ local dir="${1}" h="${2}" cfg="${dir}/.ddev/config.yaml" kept
148
+ [ -f "${cfg}" ] || { echo "Not a DDEV project: ${dir}" ; return 1 ; }
149
+ if ! ddev_hostnames_list "${dir}" | grep -qx "${h}" ; then
150
+ echo " ${h} is not one of this project's additional hostnames." ; return 1 ;
151
+ fi
152
+ kept="$(ddev_hostnames_list "${dir}" | grep -vx "${h}" | paste -sd, -)"
153
+ ( cd "${dir}" && ddev config --additional-hostnames="${kept}" > /dev/null ) || return 1 ;
154
+ echo " Removed ${h}. Remaining: ${kept:-none}" ;
155
+ echo " The router still holds the old route until the next start." ;
156
+ }
157
+
158
+ # Which project, anywhere in the tree, already answers at this hostname label —
159
+ # whether as its DDEV name or as one of its additional hostnames. Empty when the
160
+ # label is free. `skip_dir` is the project asking, so it does not find itself.
161
+ function ddev_hostname_owner() {
162
+ local h="${1}" skip_dir="${2:-}" d p n
163
+ local skip_real
164
+ skip_real="$( (cd "${skip_dir}" 2>/dev/null && pwd -P) || echo "${skip_dir}")"
165
+ for d in "${WORKSPACE_ROOT}"/*/*/ ; do
166
+ [ -f "${d}/.ddev/config.yaml" ] || continue
167
+ [ "$( (cd "${d}" && pwd -P) )" == "${skip_real}" ] && continue
168
+ n="$(ddev_project_name "${d}" 2>/dev/null)"
169
+ p="$(basename "$(dirname "${d}")")/$(basename "${d}")"
170
+ if [ "${n}" == "${h}" ] ; then
171
+ echo "${p} (it is that project's own name)" ; return 0 ;
172
+ fi
173
+ if ddev_hostnames_list "${d}" | grep -qx "${h}" ; then
174
+ echo "${p} (an additional hostname there)" ; return 0 ;
175
+ fi
176
+ done
177
+ return 0
178
+ }
179
+
180
+ # The TLD every project hostname is under. Global unless the project overrides it.
181
+ function ddev_project_tld() {
182
+ local dir="${1:-}" tld=''
183
+ if [ -n "${dir}" ] && [ -f "${dir}/.ddev/config.yaml" ] ; then
184
+ tld="$(sed -n 's/^project_tld:[[:space:]]*"\{0,1\}\([^"#]*\)"\{0,1\}[[:space:]]*$/\1/p' "${dir}/.ddev/config.yaml" | head -1 | tr -d '[:space:]')"
185
+ fi
186
+ if [ -z "${tld}" ] ; then
187
+ tld="$(ddev config global 2>/dev/null | sed -n 's/^project-tld=//p' | head -1 | tr -d '[:space:]')"
188
+ fi
189
+ echo "${tld:-ddev.site}"
190
+ }
191
+
192
+ # Everything one project answers at, for a report or a confirmation.
193
+ function ddev_hostnames_report() {
194
+ local dir="${1}" project="${2:-}" workspace="${3:-}" tld name
195
+ tld="$(ddev_project_tld "${dir}")"
196
+ name="$(ddev_project_name "${dir}" 2>/dev/null)"
197
+ echo " canonical https://${name:-${project}}.${tld}" ;
198
+ [ -n "${workspace}" ] && echo " hierarchical https://${project}.${workspace}.$(workspace_hub_domain)" ;
199
+ local extra
200
+ extra="$(ddev_hostnames_list "${dir}")"
201
+ if [ -n "${extra}" ] ; then
202
+ echo " additional:" ;
203
+ echo "${extra}" | sed "s|^| https://|; s|\$|.${tld}|" ;
204
+ else
205
+ echo " additional none" ;
206
+ fi
207
+ }
208
+
209
+ # The hub domain the dashboard hands out, from settings.yml — one field, and the
210
+ # only place the hierarchical URLs come from.
211
+ function workspace_hub_domain() {
212
+ echo "${hub_domain:-workspace.ddev.site}"
213
+ }
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ ## The Node.js every project this workspace builds runs on.
3
+ ##
4
+ ## 24, in line with Drupal core, whose package.json asks for "node": ">= 24.0".
5
+ ## The major only: DDEV installs the latest 24.x when the container is built, so a
6
+ ## security release arrives with the next build and nothing here changes.
7
+ ##
8
+ ## A builder that needs another declares site_nodejs_version, the way it declares
9
+ ## site_php_version. Passed as --nodejs-version on EVERY `ddev config` that creates a
10
+ ## project and on the one that follows a create-project: a project template ships its
11
+ ## own .ddev/config.yaml, and an older release of one pins an older Node.
12
+
13
+ function ddev_nodejs_version() {
14
+ echo "${site_nodejs_version:-24}" ;
15
+ }
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ ## Keep Drupal CMS install telemetry off in every project this workspace builds.
3
+ ##
4
+ ## Drupal CMS reports anonymous install analytics. It skips GitLab CI, GitHub
5
+ ## Actions and Tugboat by environment, but not a local DDEV site, so test builds
6
+ ## here were counted as real installs. DRUPAL_CMS_TELEMETRY=0 in the web container
7
+ ## turns it off before the installer runs.
8
+ ##
9
+ ## Written through `ddev config --web-environment-add`, never by editing the YAML,
10
+ ## and called after EVERY `ddev config` that follows a create-project: a project
11
+ ## template ships its own .ddev/config.yaml and can replace the list.
12
+
13
+ function ddev_telemetry_off() {
14
+ ddev config --web-environment-add=DRUPAL_CMS_TELEMETRY=0 > /dev/null ;
15
+ }
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # DDEV owns the database connection: it generates settings.php and
4
+ # settings.ddev.php (db host "db") for drupal-type projects itself. This
5
+ # function no longer writes any $databases block — it only makes sure the
6
+ # config sync directory is configured and stamps the build time.
7
+ function set_default_settings() {
8
+ echo "Ensure DDEV-managed settings plus the config sync directory.";
9
+
10
+ local settings_file="${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME}/${distribution_webroot}/sites/default/settings.php" ;
11
+
12
+ # Create the config/sync folder.
13
+ mkdir -p ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME}/config/sync ;
14
+
15
+ if [ -f "${settings_file}" ]; then
16
+ # Fixed, not a setting: it has to match the config/sync created above.
17
+ if ! grep -q "config_sync_directory" "${settings_file}" ; then
18
+ # Defaulted here rather than asked for in the settings: ../config/sync is the Drupal
19
+ # convention and the folder created just above. Setting config_sync_directory in
20
+ # settings.yml still overrides it.
21
+ echo "\$settings['config_sync_directory'] = '${config_sync_directory:-../config/sync}';" >> "${settings_file}" ;
22
+ fi
23
+ build_time=$( date '+%Y-%m-%d %H-%M-%S' );
24
+ echo "// Built time: ${build_time}" >> "${settings_file}" ;
25
+ else
26
+ echo "settings.php not found yet — DDEV will generate it on start/install." ;
27
+ fi
28
+ }
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Install Cucumber with Drush.
4
+ function install_cucumber_with_drush() {
5
+ echo "Install Cucumber with Drush.";
6
+ ddev drush site:install cucumber --yes --site-name="${doc_name} ${PROJECT_NAME}" --account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" --db-url="mysql://db:db@db/db" ;
7
+ }
8
+
9
+ # Enable Cucumber extra components.
10
+ function enable_cucumber_extra_components() {
11
+ echo "Enable Cucumber extra components.";
12
+ }
13
+
14
+ # The default set of users `add_users` creates for Cucumber (--add-users).
15
+ function set_cucumber_users() {
16
+ users=(authenticated developer tester analyst coordinator product_owner administrator);
17
+ user_authenticated_name="Authenticated user";
18
+ user_authenticated_mail="test.authenticated@webship.org";
19
+ user_authenticated_password="dD.123123ddd";
20
+ user_authenticated_role="_none_";
21
+ user_developer_name="Developer";
22
+ user_developer_mail="test.developer@webship.org";
23
+ user_developer_password="dD.123123ddd";
24
+ user_developer_role="developer";
25
+ user_tester_name="Tester";
26
+ user_tester_mail="test.tester@webship.org";
27
+ user_tester_password="dD.123123ddd";
28
+ user_tester_role="tester";
29
+ user_analyst_name="Analyst";
30
+ user_analyst_mail="test.analyst@webship.org";
31
+ user_analyst_password="dD.123123ddd";
32
+ user_analyst_role="analyst";
33
+ user_coordinator_name="Coordinator";
34
+ user_coordinator_mail="test.coordinator@webship.org";
35
+ user_coordinator_password="dD.123123ddd";
36
+ user_coordinator_role="coordinator";
37
+ user_product_owner_name="Product Owner";
38
+ user_product_owner_mail="test.product_owner@webship.org";
39
+ user_product_owner_password="dD.123123ddd";
40
+ user_product_owner_role="product_owner";
41
+ user_administrator_name="Administrator";
42
+ user_administrator_mail="test.administrator@webship.org";
43
+ user_administrator_password="dD.123123ddd";
44
+ user_administrator_role="administrator";
45
+ }
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Install Drupal with Drush.
4
+ function install_drupal_with_drush() {
5
+ echo "Install Drupal with Drush.";
6
+ ddev drush site:install ${PROFILE[*]} --yes --site-name="${doc_name} ${PROJECT_NAME}" --account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" --db-url="mysql://db:db@db/db" --locale="en" install_configure_form.enable_update_status_emails=NULL --debug -vvv ;
7
+ }
8
+
9
+ # Enable Drupal extra components.
10
+ function enable_drupal_extra_components() {
11
+ echo "Enable Drupal extra components.";
12
+
13
+ }
14
+ # The default set of users `add_users` creates for Drupal (--add-users).
15
+ function set_drupal_users() {
16
+ users=(authenticated administrator);
17
+ user_authenticated_name="Authenticated user";
18
+ user_authenticated_mail="test.authenticated@webship.org";
19
+ user_authenticated_password="dD.123123ddd";
20
+ user_authenticated_role="_none_";
21
+ user_administrator_name="Administrator";
22
+ user_administrator_mail="test.administrator@webship.org";
23
+ user_administrator_password="dD.123123ddd";
24
+ user_administrator_role="administrator";
25
+ }
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Install Drupal CMS with Drush.
4
+ #
5
+ # Drupal CMS ships the `drupal_cms_installer` profile, whose install tasks are
6
+ # ordinary forms, so they can be driven non-interactively. The site-template step
7
+ # (`installer_site_template_form`) settles on `drupal_cms_starter` by itself on a
8
+ # non-interactive install, which is what a plain Drupal CMS build wants.
9
+ #
10
+ # Choosing a different template is what the site-templates workspace is for: those
11
+ # builders require the template package and name it to the same form.
12
+ function install_drupal_cms_with_drush() {
13
+ echo "Install Drupal CMS with Drush.";
14
+
15
+ ddev drush site:install drupal_cms_installer --yes --site-name="${doc_name} ${PROJECT_NAME}" --account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" --db-url="mysql://db:db@db/db" --locale="en" installer_site_name_form.site_name="${doc_name} ${PROJECT_NAME}" ;
16
+ }
17
+
18
+ # Enable Drupal CMS extra components.
19
+ function enable_drupal_cms_extra_components() {
20
+ echo "Enable Drupal CMS extra components.";
21
+
22
+ }
23
+
24
+ # The default set of users `add_users` creates for Drupal CMS (--add-users).
25
+ function set_drupal_cms_users() {
26
+ users=(authenticated administrator);
27
+ user_authenticated_name="Authenticated user";
28
+ user_authenticated_mail="test.authenticated@webship.org";
29
+ user_authenticated_password="dD.123123ddd";
30
+ user_authenticated_role="_none_";
31
+ user_administrator_name="Administrator";
32
+ user_administrator_mail="test.administrator@webship.org";
33
+ user_administrator_password="dD.123123ddd";
34
+ user_administrator_role="administrator";
35
+ }
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Install Webship with Drush.
4
+ function install_webship_with_drush() {
5
+ echo "Install Webship with Drush.";
6
+ ddev drush site:install webship --yes --site-name="${doc_name} ${PROJECT_NAME}" --account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" --db-url="mysql://db:db@db/db" ;
7
+ }
8
+
9
+ # Enable Webship extra components.
10
+ function enable_webship_extra_components() {
11
+ echo "Enable Webship extra components.";
12
+ }
13
+ # The default set of users `add_users` creates for Webship (--add-users).
14
+ function set_webship_users() {
15
+ users=(authenticated content_editor administrator);
16
+ user_authenticated_name="Authenticated user";
17
+ user_authenticated_mail="test.authenticated@webship.org";
18
+ user_authenticated_password="dD.123123ddd";
19
+ user_authenticated_role="_none_";
20
+ user_content_editor_name="Content editor";
21
+ user_content_editor_mail="test.content_editor@webship.org";
22
+ user_content_editor_password="dD.123123ddd";
23
+ user_content_editor_role="content_editor";
24
+ user_administrator_name="Webmaster";
25
+ user_administrator_mail="test.Webmaster@webship.org";
26
+ user_administrator_password="dD.123123ddd";
27
+ user_administrator_role="administrator";
28
+ }
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Install Webships with Drush.
4
+ function install_webships_with_drush() {
5
+ echo "Install Webships with Drush.";
6
+ ddev drush site:install webships --yes --site-name="${doc_name} ${PROJECT_NAME}" --account-name="${account_name}" --account-pass="${account_pass}" --account-mail="${account_mail}" --db-url="mysql://db:db@db/db" ;
7
+ }
8
+
9
+ # Enable Webships extra components.
10
+ function enable_webships_extra_components() {
11
+ echo "Enable Webships extra components.";
12
+ }
13
+
14
+ # The default set of users `add_users` creates for Webships (--add-users).
15
+ function set_webships_users() {
16
+ users=(authenticated app_admin api_admin administrator);
17
+ user_authenticated_name="Authenticated user";
18
+ user_authenticated_mail="test.authenticated@webship.org";
19
+ user_authenticated_password="dD.123123ddd";
20
+ user_authenticated_role="_none_";
21
+ user_app_admin_name="App Admin";
22
+ user_app_admin_mail="test.app_admin@webship.org";
23
+ user_app_admin_password="dD.123123ddd";
24
+ user_app_admin_role="api_admin";
25
+ user_api_admin_name="API Admin";
26
+ user_api_admin_mail="test.api_admin@webship.org";
27
+ user_api_admin_password="dD.123123ddd";
28
+ user_api_admin_role="api_admin";
29
+ user_administrator_name="Super Admin";
30
+ user_administrator_mail="test.administrator@webship.org";
31
+ user_administrator_password="dD.123123ddd";
32
+ user_administrator_role="administrator";
33
+ }
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # The default set of users `add_users` creates for the Website stack (--add-users).
4
+ # The site templates build on the Standard recipe roles.
5
+ function set_website_users() {
6
+ users=(authenticated content_editor administrator);
7
+ user_authenticated_name="Authenticated user";
8
+ user_authenticated_mail="test.authenticated@webship.org";
9
+ user_authenticated_password="dD.123123ddd";
10
+ user_authenticated_role="_none_";
11
+ user_content_editor_name="Content editor";
12
+ user_content_editor_mail="test.content_editor@webship.org";
13
+ user_content_editor_password="dD.123123ddd";
14
+ user_content_editor_role="content_editor";
15
+ user_administrator_name="Webmaster";
16
+ user_administrator_mail="test.webmaster@webship.org";
17
+ user_administrator_password="dD.123123ddd";
18
+ user_administrator_role="administrator";
19
+ }
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Add Drush if it was not in the system.
4
+ function add_drush() {
5
+ echo "Add Drush if it was not in the system.";
6
+ if [ ! -d "${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME}/vendor/drush/drush" ]; then
7
+ cd ${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME};
8
+ # Which Drush a core can take is a fact about that core, so a builder may declare it
9
+ # and the rest keep what they have always had. Drupal 12 needs its own: core 12
10
+ # requires guzzle 8, every tagged Drush (through 13) requires guzzle ^7, and the
11
+ # resolver refuses the pair — which surfaces LATER as "drush is not available" at
12
+ # site:install, three steps from the line that caused it.
13
+ ddev composer require "drush/drush:${site_drush_version:-~11 || ~13}";
14
+ fi
15
+
16
+ # DDEV rewrites its shared command directory whenever ANY project on this machine starts, and `ddev drush`
17
+ # is missing from it for a moment. Wait for it, instead of failing the install on its very first line.
18
+ local attempt;
19
+ for attempt in 1 2 3 4 5 6 7 8 9 10 ; do
20
+ ddev drush --version > /dev/null 2>&1 && return 0 ;
21
+ echo "ddev drush is not available yet (attempt ${attempt} of 10), waiting." ;
22
+ sleep 6 ;
23
+ done
24
+ echo "ddev drush is still not available — the install cannot start." ;
25
+ return 1 ;
26
+ }
27
+
28
+ # Cache Rebuilding ...
29
+ function drush_cr() {
30
+ echo "Cache Rebuilding ..."
31
+ ddev drush cache:rebuild ;
32
+ }
33
+
34
+ # Set Aggrigation off and error level all
35
+ function drush_set_debug_on() {
36
+ echo "Set Aggrigation off and error_level on";
37
+ ddev drush config:set system.performance css.preprocess 0 --yes ;
38
+ ddev drush config:set system.performance js.preprocess 0 --yes ;
39
+ ddev drush config:set system.logging error_level all --yes ;
40
+ }
41
+
42
+ # Set Aggrigation ON and error level OFF
43
+ function drush_set_debug_off() {
44
+ echo "Set Aggrigation ON and error_level OFF";
45
+ ddev drush config:set system.performance css.preprocess 1 --yes ;
46
+ ddev drush config:set system.performance js.preprocess 1 --yes ;
47
+ ddev drush config:set system.logging error_level 0 --yes ;
48
+ }