@webship.co/workspace 1.0.0-beta1 → 1.0.0-rc1

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 (632) 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} +9 -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/{plugins-page.js → core/workspace-app/plugins-page.js} +28 -2
  169. package/{server.js → core/workspace-app/server.js} +18 -0
  170. package/core/workspace-app/tests/features/actions-rail.feature +44 -0
  171. package/core/workspace-app/tests/features/ai-items.feature +23 -0
  172. package/core/workspace-app/tests/features/assistant-speech.feature +63 -0
  173. package/core/workspace-app/tests/features/checks.feature +40 -0
  174. package/core/workspace-app/tests/features/clone-project.feature +30 -0
  175. package/core/workspace-app/tests/features/command-authoring.feature +58 -0
  176. package/core/workspace-app/tests/features/dashboard.feature +57 -0
  177. package/core/workspace-app/tests/features/menus.feature +29 -0
  178. package/core/workspace-app/tests/features/plugins/jira/jira.feature +47 -0
  179. package/core/workspace-app/tests/features/plugins.feature +20 -0
  180. package/core/workspace-app/tests/features/project-actions.feature +41 -0
  181. package/core/workspace-app/tests/features/screens.feature +29 -0
  182. package/core/workspace-app/tests/features/settings.feature +46 -0
  183. package/core/workspace-app/tests/features/test-reports.feature +32 -0
  184. package/core/workspace-app/tests/features/theme.feature +40 -0
  185. package/core/workspace-app/tests/step-definitions/actions-post.steps.js +25 -0
  186. package/core/workspace-app/tests/step-definitions/assistant-speech.steps.js +157 -0
  187. package/core/workspace-app/tests/step-definitions/clone-project.steps.js +47 -0
  188. package/core/workspace-app/tests/step-definitions/preconditions.steps.js +168 -0
  189. package/core/workspace-app/tests/unit/_isolated-config.js +31 -0
  190. package/core/workspace-app/tests/unit/accessibility.test.js +124 -0
  191. package/core/workspace-app/tests/unit/actions-rail-ux.test.js +56 -0
  192. package/core/workspace-app/tests/unit/actions-rail.test.js +51 -0
  193. package/core/workspace-app/tests/unit/ai-inventory.test.js +64 -0
  194. package/core/workspace-app/tests/unit/app-docs.test.js +64 -0
  195. package/core/workspace-app/tests/unit/assistant-avatar.test.js +110 -0
  196. package/core/workspace-app/tests/unit/assistant-cast.test.js +105 -0
  197. package/core/workspace-app/tests/unit/assistant-send-animation.test.js +15 -0
  198. package/core/workspace-app/tests/unit/assistant-suggestions.test.js +112 -0
  199. package/core/workspace-app/tests/unit/assistant-switches.test.js +53 -0
  200. package/core/workspace-app/tests/unit/assistant-views.test.js +146 -0
  201. package/core/workspace-app/tests/unit/assistant-working-indicator.test.js +49 -0
  202. package/core/workspace-app/tests/unit/assistant.test.js +61 -0
  203. package/core/workspace-app/tests/unit/audio-player.test.js +147 -0
  204. package/core/workspace-app/tests/unit/audio-voice.test.js +634 -0
  205. package/core/workspace-app/tests/unit/auth-google.test.js +180 -0
  206. package/core/workspace-app/tests/unit/autostart-watch.test.js +76 -0
  207. package/core/workspace-app/tests/unit/browsers.test.js +76 -0
  208. package/core/workspace-app/tests/unit/build-distribution.test.js +125 -0
  209. package/core/workspace-app/tests/unit/build-order.test.js +153 -0
  210. package/core/workspace-app/tests/unit/builder-args.test.js +113 -0
  211. package/core/workspace-app/tests/unit/builders.test.js +158 -0
  212. package/core/workspace-app/tests/unit/card-state-toggle.test.js +29 -0
  213. package/core/workspace-app/tests/unit/changelog.test.js +223 -0
  214. package/core/workspace-app/tests/unit/chat-thread.test.js +92 -0
  215. package/core/workspace-app/tests/unit/checks-plan.test.js +205 -0
  216. package/core/workspace-app/tests/unit/claude-args.test.js +182 -0
  217. package/core/workspace-app/tests/unit/claude-code-here.test.js +15 -0
  218. package/core/workspace-app/tests/unit/claude-resume.test.js +147 -0
  219. package/core/workspace-app/tests/unit/claude-screen-options.test.js +84 -0
  220. package/core/workspace-app/tests/unit/claude-session.test.js +41 -0
  221. package/core/workspace-app/tests/unit/command-flags.test.js +45 -0
  222. package/core/workspace-app/tests/unit/command-palette.test.js +105 -0
  223. package/core/workspace-app/tests/unit/commands-center.test.js +338 -0
  224. package/core/workspace-app/tests/unit/composer-menu.test.js +187 -0
  225. package/core/workspace-app/tests/unit/config-yaml.test.js +116 -0
  226. package/core/workspace-app/tests/unit/confirm-dialog.test.js +69 -0
  227. package/core/workspace-app/tests/unit/create-card.test.js +85 -0
  228. package/core/workspace-app/tests/unit/ddev-addons.test.js +144 -0
  229. package/core/workspace-app/tests/unit/ddev-auth-ssh.test.js +40 -0
  230. package/core/workspace-app/tests/unit/ddev-custom-commands.test.js +56 -0
  231. package/core/workspace-app/tests/unit/ddev-diagnose.test.js +57 -0
  232. package/core/workspace-app/tests/unit/ddev-domains.test.js +179 -0
  233. package/core/workspace-app/tests/unit/ddev-hostnames.test.js +143 -0
  234. package/core/workspace-app/tests/unit/ddev-import.test.js +82 -0
  235. package/core/workspace-app/tests/unit/ddev-mail.test.js +135 -0
  236. package/core/workspace-app/tests/unit/ddev-menu-and-create.test.js +28 -0
  237. package/core/workspace-app/tests/unit/ddev-mutagen.test.js +37 -0
  238. package/core/workspace-app/tests/unit/ddev-options.test.js +51 -0
  239. package/core/workspace-app/tests/unit/ddev-share.test.js +40 -0
  240. package/core/workspace-app/tests/unit/ddev-shim.test.js +57 -0
  241. package/core/workspace-app/tests/unit/ddev-snapshots.test.js +142 -0
  242. package/core/workspace-app/tests/unit/ddev-start-daemons.test.js +62 -0
  243. package/core/workspace-app/tests/unit/ddev-xdebug.test.js +41 -0
  244. package/core/workspace-app/tests/unit/deep-chat-origin.test.js +38 -0
  245. package/core/workspace-app/tests/unit/density.test.js +52 -0
  246. package/core/workspace-app/tests/unit/elevenlabs.test.js +453 -0
  247. package/core/workspace-app/tests/unit/event-log.test.js +102 -0
  248. package/core/workspace-app/tests/unit/favicon.test.js +68 -0
  249. package/core/workspace-app/tests/unit/files-browser.test.js +224 -0
  250. package/core/workspace-app/tests/unit/git-info.test.js +26 -0
  251. package/core/workspace-app/tests/unit/grid-and-list.test.js +103 -0
  252. package/core/workspace-app/tests/unit/host-tool-wrapper.test.js +18 -0
  253. package/core/workspace-app/tests/unit/html-patterns.test.js +51 -0
  254. package/core/workspace-app/tests/unit/ide-infra.test.js +28 -0
  255. package/core/workspace-app/tests/unit/images-ai.test.js +201 -0
  256. package/core/workspace-app/tests/unit/images-create.test.js +59 -0
  257. package/core/workspace-app/tests/unit/images-providers.test.js +248 -0
  258. package/core/workspace-app/tests/unit/images-svg.test.js +213 -0
  259. package/core/workspace-app/tests/unit/images-workspace.test.js +144 -0
  260. package/core/workspace-app/tests/unit/jobs-fragment.test.js +66 -0
  261. package/core/workspace-app/tests/unit/media-ux.test.js +164 -0
  262. package/core/workspace-app/tests/unit/modal-fit.test.js +87 -0
  263. package/core/workspace-app/tests/unit/modules-load.test.js +23 -0
  264. package/core/workspace-app/tests/unit/narration.test.js +186 -0
  265. package/core/workspace-app/tests/unit/navigation-editor.test.js +260 -0
  266. package/core/workspace-app/tests/unit/navigation.test.js +254 -0
  267. package/core/workspace-app/tests/unit/new-folder.test.js +121 -0
  268. package/core/workspace-app/tests/unit/new-screen-form.test.js +149 -0
  269. package/core/workspace-app/tests/unit/node-menu.test.js +161 -0
  270. package/core/workspace-app/tests/unit/notes.test.js +128 -0
  271. package/core/workspace-app/tests/unit/page-structure.test.js +40 -0
  272. package/core/workspace-app/tests/unit/page-width.test.js +59 -0
  273. package/core/workspace-app/tests/unit/php-version.test.js +90 -0
  274. package/core/workspace-app/tests/unit/plan-card.test.js +44 -0
  275. package/core/workspace-app/tests/unit/plugin-catalog.test.js +31 -0
  276. package/core/workspace-app/tests/unit/plugin-system.test.js +251 -0
  277. package/core/workspace-app/tests/unit/plugins-page.test.js +28 -0
  278. package/core/workspace-app/tests/unit/plugins.test.js +58 -0
  279. package/core/workspace-app/tests/unit/preconditions.test.js +21 -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 +93 -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 +220 -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 +436 -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/package.json +38 -36
  336. /package/{WORKSPACES.md → core/workspace-app/WORKSPACES.md} +0 -0
  337. /package/{actions → core/workspace-app/actions}/ai-items.js +0 -0
  338. /package/{actions → core/workspace-app/actions}/audio.js +0 -0
  339. /package/{actions → core/workspace-app/actions}/build-order.js +0 -0
  340. /package/{actions → core/workspace-app/actions}/checks.js +0 -0
  341. /package/{actions → core/workspace-app/actions}/claude-session.js +0 -0
  342. /package/{actions → core/workspace-app/actions}/commands-center.js +0 -0
  343. /package/{actions → core/workspace-app/actions}/composer.js +0 -0
  344. /package/{actions → core/workspace-app/actions}/ddev-addons.js +0 -0
  345. /package/{actions → core/workspace-app/actions}/ddev-mail.js +0 -0
  346. /package/{actions → core/workspace-app/actions}/folders.js +0 -0
  347. /package/{actions → core/workspace-app/actions}/images-svg.js +0 -0
  348. /package/{actions → core/workspace-app/actions}/images.js +0 -0
  349. /package/{actions → core/workspace-app/actions}/navigation.js +0 -0
  350. /package/{actions → core/workspace-app/actions}/node.js +0 -0
  351. /package/{actions → core/workspace-app/actions}/notes.js +0 -0
  352. /package/{actions → core/workspace-app/actions}/plugins.js +0 -0
  353. /package/{actions → core/workspace-app/actions}/project-make.js +0 -0
  354. /package/{actions → core/workspace-app/actions}/row-actions.js +0 -0
  355. /package/{actions → core/workspace-app/actions}/screens.js +0 -0
  356. /package/{actions → core/workspace-app/actions}/video-edit.js +0 -0
  357. /package/{ai-inventory.js → core/workspace-app/ai-inventory.js} +0 -0
  358. /package/{ai-items.js → core/workspace-app/ai-items.js} +0 -0
  359. /package/{assistant-cast.js → core/workspace-app/assistant-cast.js} +0 -0
  360. /package/{assistant-suggestions.js → core/workspace-app/assistant-suggestions.js} +0 -0
  361. /package/{audio-voice.js → core/workspace-app/audio-voice.js} +0 -0
  362. /package/{auth-google.js → core/workspace-app/auth-google.js} +0 -0
  363. /package/{build-ai.js → core/workspace-app/build-ai.js} +0 -0
  364. /package/{build-order-page.js → core/workspace-app/build-order-page.js} +0 -0
  365. /package/{build-order.js → core/workspace-app/build-order.js} +0 -0
  366. /package/{builder-args.js → core/workspace-app/builder-args.js} +0 -0
  367. /package/{changelog.js → core/workspace-app/changelog.js} +0 -0
  368. /package/{chat-threads.js → core/workspace-app/chat-threads.js} +0 -0
  369. /package/{checks.js → core/workspace-app/checks.js} +0 -0
  370. /package/{claude-args.js → core/workspace-app/claude-args.js} +0 -0
  371. /package/{claude-sessions.js → core/workspace-app/claude-sessions.js} +0 -0
  372. /package/{command-author.js → core/workspace-app/command-author.js} +0 -0
  373. /package/{command-block.js → core/workspace-app/command-block.js} +0 -0
  374. /package/{commands → core/workspace-app/commands}/defaults.yml +0 -0
  375. /package/{commands-page.js → core/workspace-app/commands-page.js} +0 -0
  376. /package/{commands.js → core/workspace-app/commands.js} +0 -0
  377. /package/{cucumber.js → core/workspace-app/cucumber.js} +0 -0
  378. /package/{ddev-addons-page.js → core/workspace-app/ddev-addons-page.js} +0 -0
  379. /package/{ddev-addons.js → core/workspace-app/ddev-addons.js} +0 -0
  380. /package/{ddev-custom-commands.js → core/workspace-app/ddev-custom-commands.js} +0 -0
  381. /package/{ddev-domains.js → core/workspace-app/ddev-domains.js} +0 -0
  382. /package/{ddev-import.js → core/workspace-app/ddev-import.js} +0 -0
  383. /package/{ddev-mail-page.js → core/workspace-app/ddev-mail-page.js} +0 -0
  384. /package/{ddev-mail.js → core/workspace-app/ddev-mail.js} +0 -0
  385. /package/{ddev-options.js → core/workspace-app/ddev-options.js} +0 -0
  386. /package/{ddev-snapshots.js → core/workspace-app/ddev-snapshots.js} +0 -0
  387. /package/{ddev.js → core/workspace-app/ddev.js} +0 -0
  388. /package/{docs → core/workspace-app/docs}/DEVELOPER-GUIDE.md +0 -0
  389. /package/{docs → core/workspace-app/docs}/README.md +0 -0
  390. /package/{docs → core/workspace-app/docs}/REFERENCE.md +0 -0
  391. /package/{docs → core/workspace-app/docs}/USER-GUIDE.md +0 -0
  392. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-board.png +0 -0
  393. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-coffee.png +0 -0
  394. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-colours.png +0 -0
  395. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-icons.png +0 -0
  396. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-moves.png +0 -0
  397. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-pick-cookieman.png +0 -0
  398. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-settings-voices.png +0 -0
  399. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-status.png +0 -0
  400. /package/{docs → core/workspace-app/docs}/screenshots/create-card/create-card.png +0 -0
  401. /package/{docs → core/workspace-app/docs}/screenshots/create-card/start-ai.png +0 -0
  402. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-address.png +0 -0
  403. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-off.png +0 -0
  404. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-on.png +0 -0
  405. /package/{docs → core/workspace-app/docs}/screenshots/guide-ddev-menu.png +0 -0
  406. /package/{docs → core/workspace-app/docs}/screenshots/guide-domains.png +0 -0
  407. /package/{docs → core/workspace-app/docs}/screenshots/guide-home.png +0 -0
  408. /package/{docs → core/workspace-app/docs}/screenshots/guide-ide-menu.png +0 -0
  409. /package/{docs → core/workspace-app/docs}/screenshots/guide-remove-refusal.png +0 -0
  410. /package/{docs → core/workspace-app/docs}/screenshots/guide-rows-worktree.png +0 -0
  411. /package/{docs → core/workspace-app/docs}/screenshots/guide-screens.png +0 -0
  412. /package/{docs → core/workspace-app/docs}/screenshots/guide-settings.png +0 -0
  413. /package/{docs → core/workspace-app/docs}/screenshots/guide-workspace-page.png +0 -0
  414. /package/{docs → core/workspace-app/docs}/screenshots/home/card-settings.png +0 -0
  415. /package/{docs → core/workspace-app/docs}/screenshots/home/drag-reorder.png +0 -0
  416. /package/{docs → core/workspace-app/docs}/screenshots/home/edit-card.png +0 -0
  417. /package/{docs → core/workspace-app/docs}/screenshots/images/claude-code-image.png +0 -0
  418. /package/{docs → core/workspace-app/docs}/screenshots/images/edit-with-ai.png +0 -0
  419. /package/{docs → core/workspace-app/docs}/screenshots/images/gallery.png +0 -0
  420. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-description.png +0 -0
  421. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-plan.png +0 -0
  422. /package/{docs → core/workspace-app/docs}/screenshots/images/providers.png +0 -0
  423. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-form.png +0 -0
  424. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-result.png +0 -0
  425. /package/{docs → core/workspace-app/docs}/screenshots/images/upload.png +0 -0
  426. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/2-form.png +0 -0
  427. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/8-ddev-options.png +0 -0
  428. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/files-folder.png +0 -0
  429. /package/{docs → core/workspace-app/docs}/screenshots/projects/ddev-custom-commands.png +0 -0
  430. /package/{docs → core/workspace-app/docs}/screenshots/projects/state-chip-stop.png +0 -0
  431. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-dark.png +0 -0
  432. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-light.png +0 -0
  433. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-dark.png +0 -0
  434. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-light.png +0 -0
  435. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-dark.png +0 -0
  436. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-light.png +0 -0
  437. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/ai.svg +0 -0
  438. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/code.svg +0 -0
  439. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/docs.svg +0 -0
  440. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/services.svg +0 -0
  441. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/sites.svg +0 -0
  442. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-dark.png +0 -0
  443. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-light.png +0 -0
  444. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-scenarios.png +0 -0
  445. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-steps.png +0 -0
  446. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-dark.png +0 -0
  447. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-light.png +0 -0
  448. /package/{docs → core/workspace-app/docs}/screenshots/screens-menu.png +0 -0
  449. /package/{docs → core/workspace-app/docs}/screenshots/screens-new.png +0 -0
  450. /package/{docs → core/workspace-app/docs}/screenshots/settings/auth-google-lists.png +0 -0
  451. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-1-row.png +0 -0
  452. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-2-confirm.png +0 -0
  453. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-3-type-name.png +0 -0
  454. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-4-type-yes.png +0 -0
  455. /package/{event-log.js → core/workspace-app/event-log.js} +0 -0
  456. /package/{files-browser.js → core/workspace-app/files-browser.js} +0 -0
  457. /package/{folders.js → core/workspace-app/folders.js} +0 -0
  458. /package/{format.js → core/workspace-app/format.js} +0 -0
  459. /package/{github-auth.js → core/workspace-app/github-auth.js} +0 -0
  460. /package/{html.js → core/workspace-app/html.js} +0 -0
  461. /package/{icons.js → core/workspace-app/icons.js} +0 -0
  462. /package/{images-ai.js → core/workspace-app/images-ai.js} +0 -0
  463. /package/{images-create.js → core/workspace-app/images-create.js} +0 -0
  464. /package/{images-page.js → core/workspace-app/images-page.js} +0 -0
  465. /package/{images-records.js → core/workspace-app/images-records.js} +0 -0
  466. /package/{images-render.js → core/workspace-app/images-render.js} +0 -0
  467. /package/{images-svg-core.js → core/workspace-app/images-svg-core.js} +0 -0
  468. /package/{images-svg-sanitize.js → core/workspace-app/images-svg-sanitize.js} +0 -0
  469. /package/{images-svg.js → core/workspace-app/images-svg.js} +0 -0
  470. /package/{images.js → core/workspace-app/images.js} +0 -0
  471. /package/{jobs.js → core/workspace-app/jobs.js} +0 -0
  472. /package/{linger.js → core/workspace-app/linger.js} +0 -0
  473. /package/{lists.js → core/workspace-app/lists.js} +0 -0
  474. /package/{media-info.js → core/workspace-app/media-info.js} +0 -0
  475. /package/{navigation-page.js → core/workspace-app/navigation-page.js} +0 -0
  476. /package/{navigation.js → core/workspace-app/navigation.js} +0 -0
  477. /package/{notes.js → core/workspace-app/notes.js} +0 -0
  478. /package/{palette-index.js → core/workspace-app/palette-index.js} +0 -0
  479. /package/{playwright.config.js → core/workspace-app/playwright.config.js} +0 -0
  480. /package/{plugin-install.js → core/workspace-app/plugin-install.js} +0 -0
  481. /package/{plugin-loader.js → core/workspace-app/plugin-loader.js} +0 -0
  482. /package/{plugin-manifest.js → core/workspace-app/plugin-manifest.js} +0 -0
  483. /package/{plugin-settings.js → core/workspace-app/plugin-settings.js} +0 -0
  484. /package/{plugins → core/workspace-app/plugins}/workspace-notes/index.js +0 -0
  485. /package/{project-make.js → core/workspace-app/project-make.js} +0 -0
  486. /package/{project-name.js → core/workspace-app/project-name.js} +0 -0
  487. /package/{public → core/workspace-app/public}/assistant-avatar-moves.js +0 -0
  488. /package/{public → core/workspace-app/public}/assistant-avatar-ui.js +0 -0
  489. /package/{public → core/workspace-app/public}/assistant-avatar.js +0 -0
  490. /package/{public → core/workspace-app/public}/avatar/druplicon.vrm +0 -0
  491. /package/{public → core/workspace-app/public}/css/base.css +0 -0
  492. /package/{public → core/workspace-app/public}/css/components/ai-assistant.css +0 -0
  493. /package/{public → core/workspace-app/public}/css/components/assistant-avatar.css +0 -0
  494. /package/{public → core/workspace-app/public}/css/components/assistant-views.css +0 -0
  495. /package/{public → core/workspace-app/public}/css/components/build-order.css +0 -0
  496. /package/{public → core/workspace-app/public}/css/components/clone-as-a-git-worktree.css +0 -0
  497. /package/{public → core/workspace-app/public}/css/components/command-palette.css +0 -0
  498. /package/{public → core/workspace-app/public}/css/components/commands-center.css +0 -0
  499. /package/{public → core/workspace-app/public}/css/components/confirm-dialog.css +0 -0
  500. /package/{public → core/workspace-app/public}/css/components/create-card.css +0 -0
  501. /package/{public → core/workspace-app/public}/css/components/ddev-menu.css +0 -0
  502. /package/{public → core/workspace-app/public}/css/components/deep-chat.css +0 -0
  503. /package/{public → core/workspace-app/public}/css/components/density.css +0 -0
  504. /package/{public → core/workspace-app/public}/css/components/floating-assistant-workspace-pages.css +0 -0
  505. /package/{public → core/workspace-app/public}/css/components/folders.css +0 -0
  506. /package/{public → core/workspace-app/public}/css/components/full-height-left-assistant-sidebar-all-pages.css +0 -0
  507. /package/{public → core/workspace-app/public}/css/components/full-height-right-actions-rail-pages-that-have-actions.css +0 -0
  508. /package/{public → core/workspace-app/public}/css/components/grid-and-list.css +0 -0
  509. /package/{public → core/workspace-app/public}/css/components/help-page.css +0 -0
  510. /package/{public → core/workspace-app/public}/css/components/hero.css +0 -0
  511. /package/{public → core/workspace-app/public}/css/components/images.css +0 -0
  512. /package/{public → core/workspace-app/public}/css/components/layout-rhythm-and-spacing-polish.css +0 -0
  513. /package/{public → core/workspace-app/public}/css/components/mic-on-any-field-that-wants-typing.css +0 -0
  514. /package/{public → core/workspace-app/public}/css/components/modal-fit.css +0 -0
  515. /package/{public → core/workspace-app/public}/css/components/page-width.css +0 -0
  516. /package/{public → core/workspace-app/public}/css/components/plugins-page.css +0 -0
  517. /package/{public → core/workspace-app/public}/css/components/project-cards.css +0 -0
  518. /package/{public → core/workspace-app/public}/css/components/project-rows.css +0 -0
  519. /package/{public → core/workspace-app/public}/css/components/reordering-the-workspace-cards.css +0 -0
  520. /package/{public → core/workspace-app/public}/css/components/responsive-home-and-the-workspace-pages.css +0 -0
  521. /package/{public → core/workspace-app/public}/css/components/running-commands-as-toasts.css +0 -0
  522. /package/{public → core/workspace-app/public}/css/components/settings-editor-core-config-yml.css +0 -0
  523. /package/{public → core/workspace-app/public}/css/components/short-results-as-a-toast-at-the-top.css +0 -0
  524. /package/{public → core/workspace-app/public}/css/components/sound-player.css +0 -0
  525. /package/{public → core/workspace-app/public}/css/components/suggest-agents-skills-commands.css +0 -0
  526. /package/{public → core/workspace-app/public}/css/components/tab-modal.css +0 -0
  527. /package/{public → core/workspace-app/public}/css/components/terminals.css +0 -0
  528. /package/{public → core/workspace-app/public}/css/components/test-report-media-one-file-per-row-paged.css +0 -0
  529. /package/{public → core/workspace-app/public}/css/components/top-toolbar-logo-breadcrumb.css +0 -0
  530. /package/{public → core/workspace-app/public}/css/components/video-edit.css +0 -0
  531. /package/{public → core/workspace-app/public}/css/components/web-ide-open-with.css +0 -0
  532. /package/{public → core/workspace-app/public}/css/components/working-indicators.css +0 -0
  533. /package/{public → core/workspace-app/public}/css/components/workspace-cards.css +0 -0
  534. /package/{public → core/workspace-app/public}/favicon.ico +0 -0
  535. /package/{public → core/workspace-app/public}/favicon.png +0 -0
  536. /package/{public → core/workspace-app/public}/htmx.min.js +0 -0
  537. /package/{public → core/workspace-app/public}/logo.png +0 -0
  538. /package/{public → core/workspace-app/public}/media-player.js +0 -0
  539. /package/{public → core/workspace-app/public}/mic.js +0 -0
  540. /package/{public → core/workspace-app/public}/narration.js +0 -0
  541. /package/{public → core/workspace-app/public}/palette.js +0 -0
  542. /package/{public → core/workspace-app/public}/sortable.js +0 -0
  543. /package/{public → core/workspace-app/public}/suggest.js +0 -0
  544. /package/{public → core/workspace-app/public}/terminal.js +0 -0
  545. /package/{public → core/workspace-app/public}/themes/default/theme.css +0 -0
  546. /package/{public → core/workspace-app/public}/themes/ember/theme.css +0 -0
  547. /package/{public → core/workspace-app/public}/themes/press/theme.css +0 -0
  548. /package/{public → core/workspace-app/public}/themes/slate/theme.css +0 -0
  549. /package/{public → core/workspace-app/public}/touch-icon.png +0 -0
  550. /package/{public → core/workspace-app/public}/ui.js +0 -0
  551. /package/{public → core/workspace-app/public}/vendor/ace/LICENSE.txt +0 -0
  552. /package/{public → core/workspace-app/public}/vendor/ace/ace.js +0 -0
  553. /package/{public → core/workspace-app/public}/vendor/ace/ext-language_tools.js +0 -0
  554. /package/{public → core/workspace-app/public}/vendor/ace/ext-searchbox.js +0 -0
  555. /package/{public → core/workspace-app/public}/vendor/ace/mode-css.js +0 -0
  556. /package/{public → core/workspace-app/public}/vendor/ace/mode-html.js +0 -0
  557. /package/{public → core/workspace-app/public}/vendor/ace/mode-javascript.js +0 -0
  558. /package/{public → core/workspace-app/public}/vendor/ace/mode-markdown.js +0 -0
  559. /package/{public → core/workspace-app/public}/vendor/ace/mode-sh.js +0 -0
  560. /package/{public → core/workspace-app/public}/vendor/ace/mode-yaml.js +0 -0
  561. /package/{public → core/workspace-app/public}/vendor/ace/theme-textmate.js +0 -0
  562. /package/{public → core/workspace-app/public}/vendor/ace/theme-tomorrow_night.js +0 -0
  563. /package/{public → core/workspace-app/public}/vendor/ace/worker-yaml.js +0 -0
  564. /package/{public → core/workspace-app/public}/vendor/deep-chat.LICENSE +0 -0
  565. /package/{public → core/workspace-app/public}/vendor/deep-chat.bundle.js +0 -0
  566. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-LICENSE.txt +0 -0
  567. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
  568. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
  569. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-LICENSE.txt +0 -0
  570. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
  571. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
  572. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
  573. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
  574. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-LICENSE.txt +0 -0
  575. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  576. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-LICENSE.txt +0 -0
  577. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
  578. /package/{public → core/workspace-app/public}/vendor/tabler-LICENSE.txt +0 -0
  579. /package/{public → core/workspace-app/public}/vendor/tabler-sprite.svg +0 -0
  580. /package/{public → core/workspace-app/public}/vendor/three/LICENSE +0 -0
  581. /package/{public → core/workspace-app/public}/vendor/three/addons/loaders/GLTFLoader.js +0 -0
  582. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/BufferGeometryUtils.js +0 -0
  583. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/SkeletonUtils.js +0 -0
  584. /package/{public → core/workspace-app/public}/vendor/three/three.core.min.js +0 -0
  585. /package/{public → core/workspace-app/public}/vendor/three/three.module.min.js +0 -0
  586. /package/{public → core/workspace-app/public}/vendor/three-vrm/LICENSE +0 -0
  587. /package/{public → core/workspace-app/public}/vendor/three-vrm/three-vrm.module.min.js +0 -0
  588. /package/{public → core/workspace-app/public}/vendor/uikit-icons.min.js +0 -0
  589. /package/{public → core/workspace-app/public}/vendor/uikit.min.css +0 -0
  590. /package/{public → core/workspace-app/public}/vendor/uikit.min.js +0 -0
  591. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/bookmark-outlined.svg +0 -0
  592. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/headset.svg +0 -0
  593. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/menu.svg +0 -0
  594. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/pause.svg +0 -0
  595. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/play.svg +0 -0
  596. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/share.svg +0 -0
  597. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-off.svg +0 -0
  598. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-on.svg +0 -0
  599. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/stop.svg +0 -0
  600. /package/{public → core/workspace-app/public}/vendor/xterm/addon-fit.js +0 -0
  601. /package/{public → core/workspace-app/public}/vendor/xterm/addon-unicode11.js +0 -0
  602. /package/{public → core/workspace-app/public}/vendor/xterm/addon-web-links.js +0 -0
  603. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.css +0 -0
  604. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.js +0 -0
  605. /package/{rag.js → core/workspace-app/rag.js} +0 -0
  606. /package/{reader.js → core/workspace-app/reader.js} +0 -0
  607. /package/{repo-blobs.js → core/workspace-app/repo-blobs.js} +0 -0
  608. /package/{report-pdf.js → core/workspace-app/report-pdf.js} +0 -0
  609. /package/{row-layout.js → core/workspace-app/row-layout.js} +0 -0
  610. /package/{screenrc → core/workspace-app/screenrc} +0 -0
  611. /package/{screens.js → core/workspace-app/screens.js} +0 -0
  612. /package/{scripts → core/workspace-app/scripts}/code-server-start.sh +0 -0
  613. /package/{scripts → core/workspace-app/scripts}/images-claude-finish.js +0 -0
  614. /package/{scripts → core/workspace-app/scripts}/screen-host.sh +0 -0
  615. /package/{scripts → core/workspace-app/scripts}/screen-runner.js +0 -0
  616. /package/{scripts → core/workspace-app/scripts}/screen-then.js +0 -0
  617. /package/{scripts → core/workspace-app/scripts}/update.sh +0 -0
  618. /package/{settings-file.js → core/workspace-app/settings-file.js} +0 -0
  619. /package/{speech.js → core/workspace-app/speech.js} +0 -0
  620. /package/{tab-modal.js → core/workspace-app/tab-modal.js} +0 -0
  621. /package/{test-reports.js → core/workspace-app/test-reports.js} +0 -0
  622. /package/{themes.js → core/workspace-app/themes.js} +0 -0
  623. /package/{transcripts.js → core/workspace-app/transcripts.js} +0 -0
  624. /package/{urls.js → core/workspace-app/urls.js} +0 -0
  625. /package/{validate.js → core/workspace-app/validate.js} +0 -0
  626. /package/{version-check.js → core/workspace-app/version-check.js} +0 -0
  627. /package/{video-edit.js → core/workspace-app/video-edit.js} +0 -0
  628. /package/{waiting.js → core/workspace-app/waiting.js} +0 -0
  629. /package/{workspace-card-tools.js → core/workspace-app/workspace-card-tools.js} +0 -0
  630. /package/{workspace-delete.js → core/workspace-app/workspace-delete.js} +0 -0
  631. /package/{workspace-types.js → core/workspace-app/workspace-types.js} +0 -0
  632. /package/{workspaces.js → core/workspace-app/workspaces.js} +0 -0
@@ -0,0 +1,400 @@
1
+ name: workspace
2
+ type: generic
3
+ docroot: public
4
+ php_version: "8.3"
5
+ webserver_type: nginx-fpm
6
+ xdebug_enabled: false
7
+ additional_hostnames:
8
+ - "*.workspace"
9
+ - "*.products.workspace"
10
+ - "*.dev.workspace"
11
+ - "*.test.workspace"
12
+ - "*.demos.workspace"
13
+ - "*.sandboxes.workspace"
14
+ - "*.profiles.workspace"
15
+ - "*.site-templates.workspace"
16
+ - "*.modules.workspace"
17
+ - "*.themes.workspace"
18
+ - "*.libraries.workspace"
19
+ - "*.recipes.workspace"
20
+ - "*.projects.workspace"
21
+ - "*.specs.workspace"
22
+ - "*.graphs.workspace"
23
+ - "*.rag.workspace"
24
+ - "*.ai-agents.workspace"
25
+ - "*.ai-skills.workspace"
26
+ - "*.ai-commands.workspace"
27
+ - "*.ai-prompts.workspace"
28
+ - "*.designs.workspace"
29
+ - "*.images.workspace"
30
+ - "*.videos.workspace"
31
+ - "*.audio.workspace"
32
+ - "*.avatars.workspace"
33
+ - "*.docs.workspace"
34
+ - "*.commands.workspace"
35
+ - "*.worklogs.workspace"
36
+ additional_fqdns: []
37
+
38
+ # Every URL this project serves is https, signed by mkcert's local CA. A machine
39
+ # that has never run mkcert has no CA, so the first thing a new install sees is
40
+ # ERR_CERT_AUTHORITY_INVALID rather than the dashboard — and `ddev start` says so
41
+ # only in a warning, in the middle of a long build log, where it is missed.
42
+ #
43
+ # exec-host, because trust stores live on the host, not in the container. The
44
+ # script is idempotent and silent when there is nothing to do, so it costs a
45
+ # fraction of a second on every later start.
46
+ hooks:
47
+ # BEFORE the container exists: Docker creates any missing bind-mount source as a
48
+ # root-owned directory, which quietly breaks the tool it was meant to share — and
49
+ # takes ~/.local/bin with it, so nothing can install a user binary there either.
50
+ # Creating those paths as you first, and dropping the twg mount while twg is not
51
+ # installed, is what keeps a fresh machine clean.
52
+ pre-start:
53
+ # `|| true`: this reports damage it cannot fix without root, and a start must not
54
+ # fail because a path needs a chown. The message is the point, not the exit code.
55
+ - exec-host: bash "${DDEV_APPROOT}/../scripts/host-mounts.sh" --quiet || true
56
+ post-start:
57
+ - exec-host: bash "${DDEV_APPROOT}/../scripts/trust-https.sh" --quiet
58
+ # Every web_extra_daemon that is not running, started. Normally a no-op.
59
+ #
60
+ # DDEV starts these itself at the end of `ddev start` — and that step RACES supervisord
61
+ # coming up. When it loses, ddev prints
62
+ #
63
+ # Unable to start web_extra_daemons using supervisorctl,
64
+ # stdout=error: <class 'http.client.RemoteDisconnected'> …
65
+ #
66
+ # and then says **Successfully started workspace** anyway. The daemons are left
67
+ # "Not started", so nginx answers **502 Bad Gateway** — the proxy is up and the thing
68
+ # behind it never came up. A start that reports success and leaves the dashboard dead is
69
+ # the worst shape a failure can take, because nothing suggests the start is where to look.
70
+ # Reproduced on this machine, and fixed by this line.
71
+ #
72
+ # supervisord is asked which daemons are actually down rather than everything being
73
+ # started blindly, so a healthy start does nothing; `|| true` because a daemon that will
74
+ # not come up is still not a reason to fail the project's start — the 502 says the rest.
75
+ - exec: supervisorctl status webextradaemons:* 2>/dev/null | grep -v RUNNING | awk '{print $1}' | xargs -r supervisorctl start || true
76
+ database:
77
+ type: mariadb
78
+ version: "10.11"
79
+ use_dns_when_possible: true
80
+ composer_version: "2"
81
+ web_environment: []
82
+ # The workspace packages are Yarn Berry: 63 of them carry `packageManager: yarn@4.9.3`, and yarn
83
+ # refuses to run their scripts under the 1.22 shim without corepack. This container is where a
84
+ # PACKAGE's checks run — a product, a module or a theme has no DDEV project of its own — so the
85
+ # checks verb cannot work here without it.
86
+ corepack_enable: true
87
+ omit_containers: [db]
88
+ nodejs_version: "24"
89
+ webimage_extra_packages: [screen]
90
+ web_extra_daemons:
91
+ - name: "workspace-app"
92
+ # `sg docker` runs the app with the container's "docker" group (GID matched
93
+ # to the host's in the Dockerfile) actually ACTIVE — supervisord launches
94
+ # daemons without initgroups(), so group membership listed in /etc/group
95
+ # alone never applies, and DDEV's start scripts reset any primary-GID
96
+ # change made at image build time. The ddev binary refuses to run as root,
97
+ # so sudo is not an option here.
98
+ command: "sg docker -c 'npm install && npm start'"
99
+ directory: /var/www/html
100
+ # The Web IDE: VS Code in the browser, at https://ide.workspace.ddev.site.
101
+ #
102
+ # Bound to LOOPBACK on purpose — the only way in is the ide.* vhost in
103
+ # .ddev/nginx_full/nginx-site.conf, so it is reachable exactly where the dashboard is and
104
+ # nowhere else. `--auth none` because the dashboard itself has no login: adding a second
105
+ # password in front of one door of an unauthenticated tool would be theatre, and the
106
+ # dashboard already offers a browser terminal at /terminal/<session>. If the hub is ever
107
+ # put on a public domain, BOTH need real auth in front of them — see the README.
108
+ #
109
+ # Its state lives under the workspace tree (gitignored) rather than in the container, so
110
+ # settings, keybindings and installed extensions survive an image rebuild.
111
+ - name: "code-server"
112
+ # The flags live in the script, which also seeds default settings on a machine that
113
+ # has none — including turning Workspace Trust off, without which the terminal
114
+ # refuses to start until a prompt is answered for every folder.
115
+ command: "bash scripts/code-server-start.sh"
116
+ directory: /var/www/html
117
+
118
+ # Key features of DDEV's config.yaml:
119
+
120
+ # name: <projectname> # Name of the project, automatically provides
121
+ # http://projectname.ddev.site and https://projectname.ddev.site
122
+ # If the name is omitted, the project will take the name of the enclosing directory,
123
+ # which is useful if you want to have a copy of the project side by side with this one.
124
+
125
+ # type: <projecttype> # backdrop, cakephp, craftcms, drupal, drupal6, drupal7, drupal8, drupal9, drupal10, drupal11, generic, laravel, magento, magento2, php, shopware6, silverstripe, symfony, typo3, wordpress
126
+ # See https://ddev.readthedocs.io/en/stable/users/quickstart/ for more
127
+ # information on the different project types
128
+
129
+ # docroot: <relative_path> # Relative path to the directory containing index.php.
130
+
131
+ # php_version: "8.3" # PHP version to use, "5.6" through "8.4"
132
+
133
+ # You can explicitly specify the webimage but this
134
+ # is not recommended, as the images are often closely tied to DDEV's' behavior,
135
+ # so this can break upgrades.
136
+
137
+ # webimage: <docker_image> # nginx/php docker image.
138
+
139
+ # database:
140
+ # type: <dbtype> # mysql, mariadb, postgres
141
+ # version: <version> # database version, like "10.11" or "8.0"
142
+ # MariaDB versions can be 5.5-10.8, 10.11, 11.4, 11.8
143
+ # MySQL versions can be 5.5-8.0, 8.4
144
+ # PostgreSQL versions can be 9-17
145
+
146
+ # router_http_port: <port> # Port to be used for http (defaults to global configuration, usually 80)
147
+ # router_https_port: <port> # Port for https (defaults to global configuration, usually 443)
148
+
149
+ # xdebug_enabled: false # Set to true to enable Xdebug and "ddev start" or "ddev restart"
150
+ # Note that for most people the commands
151
+ # "ddev xdebug" to enable Xdebug and "ddev xdebug off" to disable it work better,
152
+ # as leaving Xdebug enabled all the time is a big performance hit.
153
+
154
+ # xhgui_https_port: 8142
155
+ # Can be used to change the router https port for xhgui application
156
+ # Very rarely used
157
+
158
+ # xhgui_http_port: 8143
159
+ # Can be used to change the router http port for xhgui application
160
+ # Very rarely used
161
+
162
+ # host_xhgui_port: 8142
163
+ # Can be used to change the host binding port of the xhgui
164
+ # application. Rarely used; only when port conflict and
165
+ # bind_all_ports is used (normally with router disabled)
166
+
167
+ # xhprof_enabled: false # Set to true to enable Xhprof and "ddev start" or "ddev restart"
168
+ # Note that for most people the commands
169
+ # "ddev xhprof" to enable Xhprof and "ddev xhprof off" to disable it work better,
170
+ # as leaving Xhprof enabled all the time is a big performance hit.
171
+
172
+ # xhprof_mode: [prepend|xhgui|global]
173
+ # Set to "xhgui" to enable XHGui features
174
+ # "xhgui" will become default in a future major release
175
+
176
+ # webserver_type: nginx-fpm, apache-fpm, generic
177
+
178
+ # timezone: Europe/Berlin
179
+ # If timezone is unset, DDEV will attempt to derive it from the host system timezone
180
+ # using the $TZ environment variable or the /etc/localtime symlink.
181
+ # This is the timezone used in the containers and by PHP;
182
+ # it can be set to any valid timezone,
183
+ # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
184
+ # For example Europe/Dublin or MST7MDT
185
+
186
+ # composer_root: <relative_path>
187
+ # Relative path to the Composer root directory from the project root. This is
188
+ # the directory which contains the composer.json and where all Composer related
189
+ # commands are executed.
190
+
191
+ # composer_version: "2"
192
+ # You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1
193
+ # to use the latest major version available at the time your container is built.
194
+ # It is also possible to use each other Composer version channel. This includes:
195
+ # - 2.2 (latest Composer LTS version)
196
+ # - stable
197
+ # - preview
198
+ # - snapshot
199
+ # Alternatively, an explicit Composer version may be specified, for example "2.2.18".
200
+ # To reinstall Composer after the image was built, run "ddev debug rebuild".
201
+
202
+ # nodejs_version: "22"
203
+ # change from the default system Node.js version to any other version.
204
+ # See https://ddev.readthedocs.io/en/stable/users/configuration/config/#nodejs_version for more information
205
+ # and https://www.npmjs.com/package/n#specifying-nodejs-versions for the full documentation,
206
+ # Note that using of 'ddev nvm' is discouraged because "nodejs_version" is much easier to use,
207
+ # can specify any version, and is more robust than using 'nvm'.
208
+
209
+ # corepack_enable: false
210
+ # Change to 'true' to 'corepack enable' and gain access to latest versions of yarn/pnpm
211
+
212
+ # additional_hostnames:
213
+ # - somename
214
+ # - someothername
215
+ # would provide http and https URLs for "somename.ddev.site"
216
+ # and "someothername.ddev.site".
217
+
218
+ # additional_fqdns:
219
+ # - example.com
220
+ # - sub1.example.com
221
+ # would provide http and https URLs for "example.com" and "sub1.example.com"
222
+ # Please take care with this because it can cause great confusion.
223
+
224
+ # upload_dirs: "custom/upload/dir"
225
+ #
226
+ # upload_dirs:
227
+ # - custom/upload/dir
228
+ # - ../private
229
+ #
230
+ # would set the destination paths for ddev import-files to <docroot>/custom/upload/dir
231
+ # When Mutagen is enabled this path is bind-mounted so that all the files
232
+ # in the upload_dirs don't have to be synced into Mutagen.
233
+
234
+ # disable_upload_dirs_warning: false
235
+ # If true, turns off the normal warning that says
236
+ # "You have Mutagen enabled and your 'php' project type doesn't have upload_dirs set"
237
+
238
+ # ddev_version_constraint: ""
239
+ # Example:
240
+ # ddev_version_constraint: ">= 1.22.4"
241
+ # This will enforce that the running ddev version is within this constraint.
242
+ # See https://github.com/Masterminds/semver#checking-version-constraints for
243
+ # supported constraint formats
244
+
245
+ # working_dir:
246
+ # web: /var/www/html
247
+ # db: /home
248
+ # would set the default working directory for the web and db services.
249
+ # These values specify the destination directory for ddev ssh and the
250
+ # directory in which commands passed into ddev exec are run.
251
+
252
+ # omit_containers: [db, ddev-ssh-agent]
253
+ # Currently only these containers are supported. Some containers can also be
254
+ # omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit
255
+ # the "db" container, several standard features of DDEV that access the
256
+ # database container will be unusable. In the global configuration it is also
257
+ # possible to omit ddev-router, but not here.
258
+
259
+ # performance_mode: "global"
260
+ # DDEV offers performance optimization strategies to improve the filesystem
261
+ # performance depending on your host system. Should be configured globally.
262
+ #
263
+ # If set, will override the global config. Possible values are:
264
+ # - "global": uses the value from the global config.
265
+ # - "none": disables performance optimization for this project.
266
+ # - "mutagen": enables Mutagen for this project.
267
+ # - "nfs": enables NFS for this project.
268
+ #
269
+ # See https://ddev.readthedocs.io/en/stable/users/install/performance/#nfs
270
+ # See https://ddev.readthedocs.io/en/stable/users/install/performance/#mutagen
271
+
272
+ # fail_on_hook_fail: False
273
+ # Decide whether 'ddev start' should be interrupted by a failing hook
274
+
275
+ # host_https_port: "59002"
276
+ # The host port binding for https can be explicitly specified. It is
277
+ # dynamic unless otherwise specified.
278
+ # This is not used by most people, most people use the *router* instead
279
+ # of the localhost port.
280
+
281
+ # host_webserver_port: "59001"
282
+ # The host port binding for the ddev-webserver can be explicitly specified. It is
283
+ # dynamic unless otherwise specified.
284
+ # This is not used by most people, most people use the *router* instead
285
+ # of the localhost port.
286
+
287
+ # host_db_port: "59002"
288
+ # The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic
289
+ # unless explicitly specified.
290
+
291
+ # mailpit_http_port: "8025"
292
+ # mailpit_https_port: "8026"
293
+ # The Mailpit ports can be changed from the default 8025 and 8026
294
+
295
+ # host_mailpit_port: "8025"
296
+ # The mailpit port is not normally bound on the host at all, instead being routed
297
+ # through ddev-router, but it can be bound directly to localhost if specified here.
298
+
299
+ # webimage_extra_packages: [php7.4-tidy, php-bcmath]
300
+ # Extra Debian packages that are needed in the webimage can be added here
301
+
302
+ # dbimage_extra_packages: [telnet,netcat]
303
+ # Extra Debian packages that are needed in the dbimage can be added here
304
+
305
+ # use_dns_when_possible: true
306
+ # If the host has internet access and the domain configured can
307
+ # successfully be looked up, DNS will be used for hostname resolution
308
+ # instead of editing /etc/hosts
309
+ # Defaults to true
310
+
311
+ # project_tld: ddev.site
312
+ # The top-level domain used for project URLs
313
+ # The default "ddev.site" allows DNS lookup via a wildcard
314
+ # If you prefer you can change this to "ddev.local" to preserve
315
+ # pre-v1.9 behavior.
316
+
317
+ # ngrok_args: --basic-auth username:pass1234
318
+ # Provide extra flags to the "ngrok http" command, see
319
+ # https://ngrok.com/docs/agent/config/v3/#agent-configuration or run "ngrok http -h"
320
+
321
+ # disable_settings_management: false
322
+ # If true, DDEV will not create CMS-specific settings files like
323
+ # Drupal's settings.php/settings.ddev.php or TYPO3's additional.php
324
+ # In this case the user must provide all such settings.
325
+
326
+ # You can inject environment variables into the web container with:
327
+ # web_environment:
328
+ # - SOMEENV=somevalue
329
+ # - SOMEOTHERENV=someothervalue
330
+
331
+ # no_project_mount: false
332
+ # (Experimental) If true, DDEV will not mount the project into the web container;
333
+ # the user is responsible for mounting it manually or via a script.
334
+ # This is to enable experimentation with alternate file mounting strategies.
335
+ # For advanced users only!
336
+
337
+ # bind_all_interfaces: false
338
+ # If true, host ports will be bound on all network interfaces,
339
+ # not the localhost interface only. This means that ports
340
+ # will be available on the local network if the host firewall
341
+ # allows it.
342
+
343
+ # default_container_timeout: 120
344
+ # The default time that DDEV waits for all containers to become ready can be increased from
345
+ # the default 120. This helps in importing huge databases, for example.
346
+
347
+ #web_extra_exposed_ports:
348
+ #- name: nodejs
349
+ # container_port: 3000
350
+ # http_port: 2999
351
+ # https_port: 3000
352
+ #- name: something
353
+ # container_port: 4000
354
+ # https_port: 4000
355
+ # http_port: 3999
356
+ # Allows a set of extra ports to be exposed via ddev-router
357
+ # Fill in all three fields even if you don’t intend to use the https_port!
358
+ # If you don’t add https_port, then it defaults to 0 and ddev-router will fail to start.
359
+ #
360
+ # The port behavior on the ddev-webserver must be arranged separately, for example
361
+ # using web_extra_daemons.
362
+ # For example, with a web app on port 3000 inside the container, this config would
363
+ # expose that web app on https://<project>.ddev.site:9999 and http://<project>.ddev.site:9998
364
+ # web_extra_exposed_ports:
365
+ # - name: myapp
366
+ # container_port: 3000
367
+ # http_port: 9998
368
+ # https_port: 9999
369
+
370
+ #web_extra_daemons:
371
+ #- name: "http-1"
372
+ # command: "/var/www/html/node_modules/.bin/http-server -p 3000"
373
+ # directory: /var/www/html
374
+ #- name: "http-2"
375
+ # command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000"
376
+ # directory: /var/www/html
377
+
378
+ # override_config: false
379
+ # By default, config.*.yaml files are *merged* into the configuration
380
+ # But this means that some things can't be overridden
381
+ # For example, if you have 'use_dns_when_possible: true'' you can't override it with a merge
382
+ # and you can't erase existing hooks or all environment variables.
383
+ # However, with "override_config: true" in a particular config.*.yaml file,
384
+ # 'use_dns_when_possible: false' can override the existing values, and
385
+ # hooks:
386
+ # post-start: []
387
+ # or
388
+ # web_environment: []
389
+ # or
390
+ # additional_hostnames: []
391
+ # can have their intended affect. 'override_config' affects only behavior of the
392
+ # config.*.yaml file it exists in.
393
+
394
+ # Many DDEV commands can be extended to run tasks before or after the
395
+ # DDEV command is executed, for example "post-start", "post-import-db",
396
+ # "pre-composer", "post-composer"
397
+ # See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more
398
+ # information on the commands that can be extended and the tasks you can define
399
+ # for them. Example:
400
+ #hooks:
@@ -0,0 +1,45 @@
1
+ services:
2
+ web:
3
+ # Docker-outside-of-Docker needs this process to be in the host's docker
4
+ # group, and DDEV pins the container to `user: 1000:1000` — which overrides
5
+ # whatever the Dockerfile did to /etc/passwd, so a build-time `usermod -g`
6
+ # never reaches the running process. group_add is granted by the kernel at
7
+ # container start, so it is in the process credentials before supervisord
8
+ # starts and is inherited by every daemon it spawns.
9
+ #
10
+ # The number is this machine's docker GID, so it is written by
11
+ # core/scripts/docker-gid.sh — install.sh runs it during setup and
12
+ # sync-tooling.sh runs it after mirroring, because this file is mirrored.
13
+ group_add:
14
+ - "999"
15
+ volumes:
16
+ # Docker-outside-of-Docker: talk to the host's real docker daemon so
17
+ # `ddev`/bash cmd-*.sh scripts run from inside this container manage
18
+ # sibling ddev projects exactly like they would on the host.
19
+ - /var/run/docker.sock:/var/run/docker.sock
20
+ # DDEV's project registry. Without it the `ddev` in here has its own empty
21
+ # ~/.ddev and knows only the project it is standing in — so `ddev list`
22
+ # returns 1 project instead of 12, and the dashboard reports every other
23
+ # project as Stopped no matter what it is really doing. The daemon is the
24
+ # host's; the registry that says where the projects live has to be too.
25
+ # Safe to share because the tree is bind-mounted at the SAME absolute path,
26
+ # so every approot in it resolves identically on both sides.
27
+ - ${HOME}/.ddev:${HOME}/.ddev
28
+ # Bind the whole workspace tree at the SAME absolute path the host
29
+ # uses, so WORKSPACE_ROOT and every cmd-*.sh script's
30
+ # references resolve identically whether run on the host or in here.
31
+ # ${HOME} is interpolated on the HOST when ddev invokes docker compose.
32
+ - ${HOME}/workspace:${HOME}/workspace
33
+ # Claude Code auth/config for the AI assistant chat.
34
+ - ${HOME}/.claude:${HOME}/.claude
35
+ - ${HOME}/.claude.json:${HOME}/.claude.json
36
+ # gh's auth, for reading and fetching from the private dev-ai-agents repo.
37
+ - ${HOME}/.config/gh:${HOME}/.config/gh
38
+ environment:
39
+ - WORKSPACE_ROOT=${HOME}/workspace
40
+ - WORKSPACE_PATH=${HOME}/workspace/core
41
+ - WORKSPACE_SCRIPTS=${HOME}/workspace/core/scripts
42
+ - WORKSPACE_CONFIG=${HOME}/workspace/core/config
43
+ # Without this, the `ddev` binary can't find its global config/project
44
+ # registry and fails with "Could not connect to a Docker provider".
45
+ - HOME=${HOME}
@@ -0,0 +1,26 @@
1
+ # The Teamwork Graph CLI, shared FROM THE HOST instead of copied into the image:
2
+ # one binary, one OAuth session. Copying the config once split the rotating
3
+ # refresh token between two installations and each invalidated the other —
4
+ # mounting keeps a single owner, `twg login` on the host reaches the container
5
+ # instantly, and both survive image rebuilds.
6
+ #
7
+ # The BIN DIRECTORY is mounted, not the twg file itself, and that is the whole
8
+ # point of this shape. A single-file bind mount binds an INODE: `twg update`
9
+ # on the host writes a new file, the container keeps pointing at the old one,
10
+ # and the dashboard goes on running a version the server has stopped accepting
11
+ # — visible only as "Update required" inside a workitems list, with nothing
12
+ # saying the host binary was already current. Mounting the directory means the
13
+ # container resolves the name on every call, so an update is live immediately.
14
+ #
15
+ # /usr/local/bin/twg in the image is a wrapper that execs this (see
16
+ # .ddev/web-build/Dockerfile.workspace-app), so PATH still finds `twg` and a
17
+ # machine with no twg installed simply has nothing at the far end — which the
18
+ # dashboard's availability gate reports as absent. This also removes an old
19
+ # footgun: Docker CREATES a missing bind source, so the previous file mount
20
+ # made a root-owned DIRECTORY at ~/.local/bin/twg on a machine without twg,
21
+ # which then blocked installing it there.
22
+ services:
23
+ web:
24
+ volumes:
25
+ - "${HOME}/.local/bin:/host-local-bin:ro"
26
+ - "${HOME}/.config/twg:/home/${USER}/.config/twg:rw"
@@ -0,0 +1,8 @@
1
+ # The upsun CLI session, shared FROM THE HOST like the twg one: one login, token
2
+ # refreshes land on the host, rebuilds keep it. This is what turns the Upsun
3
+ # branch-and-data commands from shown-to-copy into runnable dashboard actions.
4
+ # A machine without a session mounts an empty dir and the actions say so.
5
+ services:
6
+ web:
7
+ volumes:
8
+ - "${HOME}/.upsun-cli:/home/${USER}/.upsun-cli:rw"
@@ -0,0 +1,15 @@
1
+ # Screen sessions live on the machine, not in here — so `screen -r` in a real
2
+ # terminal reaches them and a browser an agent opens is a window on the desktop.
3
+ # The dashboard still has to list and attach them, and the host is unreachable
4
+ # over the network (ufw drops the docker bridges), so it goes through the
5
+ # sockets screen itself uses. Same screen version, same user, same default
6
+ # socket directory, so `screen -ls` and `screen -x` work straight across.
7
+ services:
8
+ web:
9
+ # screen's attach hands a pty over the socket and then signals the session
10
+ # process — so the client has to be able to name that process. Sharing the
11
+ # machine's pid namespace is what makes `screen -x` work from in here; the
12
+ # app runs as the same user, so it can reach nothing that user could not.
13
+ pid: "host"
14
+ volumes:
15
+ - "/run/screen:/run/screen"
@@ -0,0 +1,114 @@
1
+ # The Node/Express-style app runs inside THIS container (web_extra_daemon).
2
+ # Three vhost tiers:
3
+ # 1. <project>.<workspace>.workspace.ddev.site — cosmetic hierarchical
4
+ # alias for a project's own site: proxied straight to the ddev-router
5
+ # with the Host rewritten to <project>.ddev.site.
6
+ # 2. <workspace>.workspace.ddev.site — that workspace's dashboard page
7
+ # (the Node app maps the host to the workspace).
8
+ # 3. workspace.ddev.site — the dashboard home.
9
+
10
+ # $connection_upgrade: "upgrade" while a request is upgrading, "close" otherwise. A
11
+ # websocket proxy needs it; a plain `Connection upgrade` on every request breaks keepalive.
12
+ map $http_upgrade $connection_upgrade {
13
+ default upgrade;
14
+ '' close;
15
+ }
16
+
17
+ # Tier 0: the Web IDE — code-server (VS Code in the browser) on its OWN hostname.
18
+ #
19
+ # A hostname and not a subpath: code-server is a single-page app that builds absolute
20
+ # URLs for its workers, its websocket and its static assets, and serving it under /ide/
21
+ # means rewriting all of them. Upstream's own guidance is a dedicated (sub)domain, and it
22
+ # costs nothing here — `*.workspace` is already in additional_hostnames, so DDEV's router
23
+ # routes ide.workspace.ddev.site and its certificate already covers it.
24
+ #
25
+ # An EXACT server_name, so it wins over the regex block below (nginx prefers an exact
26
+ # match to a regex however they are ordered) — otherwise these requests would go to the
27
+ # Node dashboard, which knows nothing about them.
28
+ server {
29
+ listen 80;
30
+ listen 443 ssl;
31
+ server_name ide.workspace.ddev.site;
32
+
33
+ ssl_certificate /etc/ssl/certs/master.crt;
34
+ ssl_certificate_key /etc/ssl/certs/master.key;
35
+
36
+ # An IDE moves whole directories and opens large files.
37
+ client_max_body_size 0;
38
+
39
+ location / {
40
+ proxy_pass http://127.0.0.1:8443;
41
+ proxy_http_version 1.1;
42
+ proxy_set_header Host $host;
43
+ proxy_set_header X-Real-IP $remote_addr;
44
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
45
+ proxy_set_header X-Forwarded-Proto $scheme;
46
+ # The terminal, the extension host and the file watcher are all websockets.
47
+ # Without these the editor loads and then hangs with "reconnecting…".
48
+ proxy_set_header Upgrade $http_upgrade;
49
+ proxy_set_header Connection $connection_upgrade;
50
+ # A build, a composer install or a long terminal command must not be cut off
51
+ # mid-stream by a proxy read timeout.
52
+ proxy_read_timeout 86400s;
53
+ proxy_send_timeout 86400s;
54
+ proxy_buffering off;
55
+ }
56
+ }
57
+
58
+ # Tier 1: project passthrough (two labels before workspace.)
59
+ server {
60
+ listen 80;
61
+ listen 443 ssl;
62
+ server_name ~^(?<proj>[a-z0-9-]+)\.(?<ws>[a-z0-9_-]+)\.workspace\.ddev\.site$;
63
+
64
+ ssl_certificate /etc/ssl/certs/master.crt;
65
+ ssl_certificate_key /etc/ssl/certs/master.key;
66
+
67
+ # Resolve ddev-router at REQUEST time, not at startup: nginx resolves a
68
+ # literal upstream host when it loads the config and refuses to start if
69
+ # it cannot ("host not found in upstream"). On a cold Docker the router
70
+ # does not exist yet -- ddev only starts it after this container is
71
+ # healthy -- so a literal name deadlocks `ddev start`. A variable in
72
+ # proxy_pass defers the lookup to Docker's embedded DNS per request.
73
+ resolver 127.0.0.11 valid=10s ipv6=off;
74
+ set $ddev_router ddev-router;
75
+
76
+ location / {
77
+ # Resolve ddev-router at request time via Docker DNS — a literal
78
+ # upstream is resolved at config load and kills nginx on cold start,
79
+ # when ddev only launches the router after this container is healthy.
80
+ resolver 127.0.0.11 valid=10s;
81
+ set $ddev_router http://ddev-router:80;
82
+ proxy_pass $ddev_router;
83
+ proxy_http_version 1.1;
84
+ proxy_set_header Host $proj.ddev.site;
85
+ proxy_set_header X-Real-IP $remote_addr;
86
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
87
+ proxy_set_header X-Forwarded-Proto $scheme;
88
+ proxy_redirect ~^https?://([a-z0-9-]+)\.ddev\.site(/.*)$ $scheme://$proj.$ws.workspace.ddev.site$2;
89
+ }
90
+ }
91
+
92
+ # Tiers 2+3: the dashboard app (Node maps <ws>.workspace hosts itself)
93
+ server {
94
+ listen 80 default_server;
95
+ listen 443 ssl default_server;
96
+
97
+ server_name workspace.ddev.site ~^[a-z0-9_-]+\.workspace\.ddev\.site$;
98
+
99
+ ssl_certificate /etc/ssl/certs/master.crt;
100
+ ssl_certificate_key /etc/ssl/certs/master.key;
101
+
102
+ include /etc/nginx/monitoring.conf;
103
+
104
+ location / {
105
+ proxy_pass http://127.0.0.1:3000;
106
+ proxy_http_version 1.1;
107
+ proxy_set_header Host $host;
108
+ proxy_set_header X-Real-IP $remote_addr;
109
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
110
+ proxy_set_header X-Forwarded-Proto $scheme;
111
+ proxy_set_header Upgrade $http_upgrade;
112
+ proxy_set_header Connection "upgrade";
113
+ }
114
+ }