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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/LICENSE +339 -0
  2. package/README.md +28 -364
  3. package/core/bin/workspace.js +135 -0
  4. package/core/config/settings.labels.yml +514 -0
  5. package/core/config/settings.template.yml +292 -0
  6. package/core/config/style.yml +53 -0
  7. package/core/config/theme.default.yml +161 -0
  8. package/core/config/theme.dispatch.yml +166 -0
  9. package/core/config/theme.drupal.yml +175 -0
  10. package/core/config/theme.ember.yml +160 -0
  11. package/core/config/theme.github.yml +172 -0
  12. package/core/config/theme.gitlab.yml +168 -0
  13. package/core/config/theme.press.yml +161 -0
  14. package/core/config/theme.slate.yml +160 -0
  15. package/core/config/theme.upsun.yml +174 -0
  16. package/core/docs/architecture.svg +65 -0
  17. package/core/docs/getting-started.md +51 -0
  18. package/core/docs/plugins.md +27 -0
  19. package/core/docs/releases.md +23 -0
  20. package/core/docs/testing.md +15 -0
  21. package/core/docs/workspaces.md +25 -0
  22. package/core/scripts/args/arg-ai-items.sh +65 -0
  23. package/core/scripts/args/arg-autostart.sh +31 -0
  24. package/core/scripts/args/arg-avatar-agent.sh +28 -0
  25. package/core/scripts/args/arg-avatar-catalog.sh +12 -0
  26. package/core/scripts/args/arg-avatar-character.sh +68 -0
  27. package/core/scripts/args/arg-avatar-voice.sh +24 -0
  28. package/core/scripts/args/arg-avatar.sh +22 -0
  29. package/core/scripts/args/arg-checks.sh +36 -0
  30. package/core/scripts/args/arg-clone.sh +42 -0
  31. package/core/scripts/args/arg-commands.sh +51 -0
  32. package/core/scripts/args/arg-cucumber.sh +34 -0
  33. package/core/scripts/args/arg-distribution.sh +30 -0
  34. package/core/scripts/args/arg-drupal.sh +39 -0
  35. package/core/scripts/args/arg-drupal_cms.sh +18 -0
  36. package/core/scripts/args/arg-gitlab-ci-local.sh +25 -0
  37. package/core/scripts/args/arg-graphify.sh +36 -0
  38. package/core/scripts/args/arg-graphs.sh +12 -0
  39. package/core/scripts/args/arg-hostnames.sh +23 -0
  40. package/core/scripts/args/arg-milvus-backup.sh +8 -0
  41. package/core/scripts/args/arg-milvus-mcp.sh +12 -0
  42. package/core/scripts/args/arg-milvus.sh +32 -0
  43. package/core/scripts/args/arg-obsidian.sh +17 -0
  44. package/core/scripts/args/arg-odoo.sh +18 -0
  45. package/core/scripts/args/arg-penpot-backup.sh +8 -0
  46. package/core/scripts/args/arg-penpot-mcp.sh +15 -0
  47. package/core/scripts/args/arg-penpot-token.sh +17 -0
  48. package/core/scripts/args/arg-penpot.sh +44 -0
  49. package/core/scripts/args/arg-rag.sh +21 -0
  50. package/core/scripts/args/arg-ragify.sh +35 -0
  51. package/core/scripts/args/arg-reclaim.sh +18 -0
  52. package/core/scripts/args/arg-release.sh +21 -0
  53. package/core/scripts/args/arg-screen.sh +28 -0
  54. package/core/scripts/args/arg-site-template.sh +13 -0
  55. package/core/scripts/args/arg-spdd.sh +16 -0
  56. package/core/scripts/args/arg-specs.sh +22 -0
  57. package/core/scripts/args/arg-storage.sh +36 -0
  58. package/core/scripts/args/arg-testing.sh +36 -0
  59. package/core/scripts/args/arg-webship.sh +34 -0
  60. package/core/scripts/args/arg-webships-project.sh +22 -0
  61. package/core/scripts/args/arg-webships-site-template.sh +17 -0
  62. package/core/scripts/args/arg-webships.sh +34 -0
  63. package/core/scripts/args/arg-website-site-template.sh +17 -0
  64. package/core/scripts/args/arg-website.sh +25 -0
  65. package/core/scripts/args/arg-wordpress.sh +18 -0
  66. package/core/scripts/autostart-run.sh +162 -0
  67. package/core/scripts/autostart-stop.sh +30 -0
  68. package/core/scripts/autostart-watch.sh +43 -0
  69. package/core/scripts/autostart.sh +26 -0
  70. package/core/scripts/bootstrap-functions.sh +117 -0
  71. package/core/scripts/bootstrap-libraries.sh +10 -0
  72. package/core/scripts/bootstrap.sh +71 -0
  73. package/core/scripts/ddev-shim/ddev +122 -0
  74. package/core/scripts/docker-gid.sh +119 -0
  75. package/core/scripts/functions/arg-site-template.sh +28 -0
  76. package/core/scripts/functions/fun-ai-items-lock.sh +175 -0
  77. package/core/scripts/functions/fun-ai-items-sources.sh +298 -0
  78. package/core/scripts/functions/fun-ai-items.sh +621 -0
  79. package/core/scripts/functions/fun-ai-providers.sh +72 -0
  80. package/core/scripts/functions/fun-autostart.sh +429 -0
  81. package/core/scripts/functions/fun-avatar.sh +441 -0
  82. package/core/scripts/functions/fun-backup-item.sh +50 -0
  83. package/core/scripts/functions/fun-build-distribution.sh +226 -0
  84. package/core/scripts/functions/fun-build-site-template.sh +104 -0
  85. package/core/scripts/functions/fun-build-webships.sh +161 -0
  86. package/core/scripts/functions/fun-build-website.sh +199 -0
  87. package/core/scripts/functions/fun-checks.sh +243 -0
  88. package/core/scripts/functions/fun-clone-project.sh +289 -0
  89. package/core/scripts/functions/fun-commands.sh +521 -0
  90. package/core/scripts/functions/fun-database.sh +63 -0
  91. package/core/scripts/functions/fun-ddev-hostnames.sh +213 -0
  92. package/core/scripts/functions/fun-ddev-nodejs.sh +15 -0
  93. package/core/scripts/functions/fun-ddev-telemetry.sh +15 -0
  94. package/core/scripts/functions/fun-default-settings.sh +28 -0
  95. package/core/scripts/functions/fun-distribution-cucumber.sh +45 -0
  96. package/core/scripts/functions/fun-distribution-drupal.sh +25 -0
  97. package/core/scripts/functions/fun-distribution-drupal_cms.sh +35 -0
  98. package/core/scripts/functions/fun-distribution-webship.sh +28 -0
  99. package/core/scripts/functions/fun-distribution-webships.sh +33 -0
  100. package/core/scripts/functions/fun-distribution-website.sh +19 -0
  101. package/core/scripts/functions/fun-drush.sh +48 -0
  102. package/core/scripts/functions/fun-elevenlabs.sh +179 -0
  103. package/core/scripts/functions/fun-files.sh +19 -0
  104. package/core/scripts/functions/fun-git-worktrees.sh +142 -0
  105. package/core/scripts/functions/fun-gitlab-ci.sh +156 -0
  106. package/core/scripts/functions/fun-hostnames-cli.sh +88 -0
  107. package/core/scripts/functions/fun-milvus.sh +584 -0
  108. package/core/scripts/functions/fun-odoo.sh +121 -0
  109. package/core/scripts/functions/fun-penpot.sh +724 -0
  110. package/core/scripts/functions/fun-project-name.sh +20 -0
  111. package/core/scripts/functions/fun-rag.sh +253 -0
  112. package/core/scripts/functions/fun-ragify.sh +165 -0
  113. package/core/scripts/functions/fun-reclaim.sh +297 -0
  114. package/core/scripts/functions/fun-release.sh +159 -0
  115. package/core/scripts/functions/fun-remove-project.sh +319 -0
  116. package/core/scripts/functions/fun-screen.sh +96 -0
  117. package/core/scripts/functions/fun-spdd.sh +676 -0
  118. package/core/scripts/functions/fun-specs-share.sh +237 -0
  119. package/core/scripts/functions/fun-storage.sh +347 -0
  120. package/core/scripts/functions/fun-testing.sh +329 -0
  121. package/core/scripts/functions/fun-users.sh +87 -0
  122. package/core/scripts/functions/fun-version.sh +72 -0
  123. package/core/scripts/functions/fun-video-edit.sh +48 -0
  124. package/core/scripts/functions/fun-voice.sh +45 -0
  125. package/core/scripts/functions/fun-wordpress.sh +59 -0
  126. package/core/scripts/host-mounts.sh +161 -0
  127. package/core/scripts/install.sh +602 -0
  128. package/core/scripts/libs/__pycache__/video_edit.cpython-312.pyc +0 -0
  129. package/core/scripts/libs/argparse.sh +93 -0
  130. package/core/scripts/libs/bash-yaml.sh +52 -0
  131. package/core/scripts/libs/checks_plan.js +312 -0
  132. package/core/scripts/libs/elevenlabs.py +627 -0
  133. package/core/scripts/libs/progress-bar.sh +19 -0
  134. package/core/scripts/libs/rag_index.py +446 -0
  135. package/core/scripts/libs/video_edit.py +636 -0
  136. package/core/scripts/libs/voice.py +430 -0
  137. package/core/scripts/plugins/jira/host-install.sh +119 -0
  138. package/core/scripts/plugins/jira/host-mounts.txt +2 -0
  139. package/core/scripts/plugins/upsun/args/arg-upsun.sh +51 -0
  140. package/core/scripts/plugins/upsun/functions/fun-upsun.sh +304 -0
  141. package/core/scripts/plugins/upsun/host-install.sh +99 -0
  142. package/core/scripts/plugins/upsun/host-mounts.txt +1 -0
  143. package/core/scripts/plugins/upsun/upsun-ai.sh +133 -0
  144. package/core/scripts/plugins.sh +152 -0
  145. package/core/scripts/release.sh +69 -0
  146. package/core/scripts/storage.sh +39 -0
  147. package/core/scripts/sync-tooling.sh +246 -0
  148. package/core/scripts/tests/cmd-smoke-test.sh +109 -0
  149. package/core/scripts/trust-https.sh +257 -0
  150. package/core/workspace-app/.ddev/commands/web/test-dashboard +49 -0
  151. package/core/workspace-app/.ddev/config.yaml +400 -0
  152. package/core/workspace-app/.ddev/docker-compose.dood.yaml +45 -0
  153. package/core/workspace-app/.ddev/docker-compose.plugin-jira-twg.yaml +26 -0
  154. package/core/workspace-app/.ddev/docker-compose.plugin-upsun-upsun-cli.yaml +8 -0
  155. package/core/workspace-app/.ddev/docker-compose.screens.yaml +15 -0
  156. package/core/workspace-app/.ddev/nginx_full/nginx-site.conf +114 -0
  157. package/core/workspace-app/.ddev/web-build/Dockerfile.workspace-app +203 -0
  158. package/core/workspace-app/.ddev/web-build/ddev-shim-ddev +122 -0
  159. package/{PLUGINS.md → core/workspace-app/PLUGINS.md} +1 -1
  160. package/core/workspace-app/README.md +380 -0
  161. package/{actions → core/workspace-app/actions}/ddev.js +0 -1
  162. package/{actions → core/workspace-app/actions}/rag.js +0 -1
  163. package/{actions → core/workspace-app/actions}/testing.js +0 -1
  164. package/{assistant.js → core/workspace-app/assistant.js} +1 -10
  165. package/{git-info.js → core/workspace-app/git-info.js} +17 -1
  166. package/core/workspace-app/package.json +29 -0
  167. package/core/workspace-app/plugin-catalog.js +50 -0
  168. package/{plugin-loader.js → core/workspace-app/plugin-loader.js} +19 -1
  169. package/{plugins-page.js → core/workspace-app/plugins-page.js} +28 -2
  170. package/{row-layout.js → core/workspace-app/row-layout.js} +0 -1
  171. package/{server.js → core/workspace-app/server.js} +26 -225
  172. package/core/workspace-app/tests/features/actions-rail.feature +44 -0
  173. package/core/workspace-app/tests/features/ai-items.feature +23 -0
  174. package/core/workspace-app/tests/features/assistant-speech.feature +63 -0
  175. package/core/workspace-app/tests/features/checks.feature +39 -0
  176. package/core/workspace-app/tests/features/clone-project.feature +30 -0
  177. package/core/workspace-app/tests/features/command-authoring.feature +58 -0
  178. package/core/workspace-app/tests/features/dashboard.feature +57 -0
  179. package/core/workspace-app/tests/features/menus.feature +29 -0
  180. package/core/workspace-app/tests/features/plugins/jira/jira.feature +47 -0
  181. package/core/workspace-app/tests/features/plugins.feature +20 -0
  182. package/core/workspace-app/tests/features/project-actions.feature +40 -0
  183. package/core/workspace-app/tests/features/screens.feature +29 -0
  184. package/core/workspace-app/tests/features/settings.feature +46 -0
  185. package/core/workspace-app/tests/features/test-reports.feature +32 -0
  186. package/core/workspace-app/tests/features/theme.feature +40 -0
  187. package/core/workspace-app/tests/step-definitions/actions-post.steps.js +25 -0
  188. package/core/workspace-app/tests/step-definitions/assistant-speech.steps.js +152 -0
  189. package/core/workspace-app/tests/step-definitions/preconditions.steps.js +100 -0
  190. package/core/workspace-app/tests/unit/_isolated-config.js +31 -0
  191. package/core/workspace-app/tests/unit/accessibility.test.js +124 -0
  192. package/core/workspace-app/tests/unit/actions-rail-ux.test.js +56 -0
  193. package/core/workspace-app/tests/unit/actions-rail.test.js +51 -0
  194. package/core/workspace-app/tests/unit/ai-inventory.test.js +64 -0
  195. package/core/workspace-app/tests/unit/app-docs.test.js +64 -0
  196. package/core/workspace-app/tests/unit/assistant-avatar.test.js +110 -0
  197. package/core/workspace-app/tests/unit/assistant-cast.test.js +105 -0
  198. package/core/workspace-app/tests/unit/assistant-send-animation.test.js +15 -0
  199. package/core/workspace-app/tests/unit/assistant-suggestions.test.js +112 -0
  200. package/core/workspace-app/tests/unit/assistant-switches.test.js +53 -0
  201. package/core/workspace-app/tests/unit/assistant-views.test.js +146 -0
  202. package/core/workspace-app/tests/unit/assistant-working-indicator.test.js +49 -0
  203. package/core/workspace-app/tests/unit/assistant.test.js +61 -0
  204. package/core/workspace-app/tests/unit/audio-player.test.js +147 -0
  205. package/core/workspace-app/tests/unit/audio-voice.test.js +634 -0
  206. package/core/workspace-app/tests/unit/auth-google.test.js +180 -0
  207. package/core/workspace-app/tests/unit/autostart-watch.test.js +76 -0
  208. package/core/workspace-app/tests/unit/browsers.test.js +76 -0
  209. package/core/workspace-app/tests/unit/build-distribution.test.js +125 -0
  210. package/core/workspace-app/tests/unit/build-order.test.js +153 -0
  211. package/core/workspace-app/tests/unit/builder-args.test.js +113 -0
  212. package/core/workspace-app/tests/unit/builders.test.js +158 -0
  213. package/core/workspace-app/tests/unit/card-state-toggle.test.js +29 -0
  214. package/core/workspace-app/tests/unit/changelog.test.js +177 -0
  215. package/core/workspace-app/tests/unit/chat-thread.test.js +92 -0
  216. package/core/workspace-app/tests/unit/checks-plan.test.js +205 -0
  217. package/core/workspace-app/tests/unit/claude-args.test.js +182 -0
  218. package/core/workspace-app/tests/unit/claude-code-here.test.js +15 -0
  219. package/core/workspace-app/tests/unit/claude-resume.test.js +147 -0
  220. package/core/workspace-app/tests/unit/claude-screen-options.test.js +84 -0
  221. package/core/workspace-app/tests/unit/claude-session.test.js +41 -0
  222. package/core/workspace-app/tests/unit/command-flags.test.js +45 -0
  223. package/core/workspace-app/tests/unit/command-palette.test.js +105 -0
  224. package/core/workspace-app/tests/unit/commands-center.test.js +338 -0
  225. package/core/workspace-app/tests/unit/composer-menu.test.js +187 -0
  226. package/core/workspace-app/tests/unit/config-yaml.test.js +116 -0
  227. package/core/workspace-app/tests/unit/confirm-dialog.test.js +69 -0
  228. package/core/workspace-app/tests/unit/create-card.test.js +85 -0
  229. package/core/workspace-app/tests/unit/ddev-addons.test.js +144 -0
  230. package/core/workspace-app/tests/unit/ddev-auth-ssh.test.js +40 -0
  231. package/core/workspace-app/tests/unit/ddev-custom-commands.test.js +56 -0
  232. package/core/workspace-app/tests/unit/ddev-diagnose.test.js +57 -0
  233. package/core/workspace-app/tests/unit/ddev-domains.test.js +153 -0
  234. package/core/workspace-app/tests/unit/ddev-hostnames.test.js +143 -0
  235. package/core/workspace-app/tests/unit/ddev-import.test.js +82 -0
  236. package/core/workspace-app/tests/unit/ddev-mail.test.js +135 -0
  237. package/core/workspace-app/tests/unit/ddev-menu-and-create.test.js +28 -0
  238. package/core/workspace-app/tests/unit/ddev-mutagen.test.js +37 -0
  239. package/core/workspace-app/tests/unit/ddev-options.test.js +51 -0
  240. package/core/workspace-app/tests/unit/ddev-share.test.js +40 -0
  241. package/core/workspace-app/tests/unit/ddev-shim.test.js +57 -0
  242. package/core/workspace-app/tests/unit/ddev-snapshots.test.js +142 -0
  243. package/core/workspace-app/tests/unit/ddev-start-daemons.test.js +62 -0
  244. package/core/workspace-app/tests/unit/ddev-xdebug.test.js +41 -0
  245. package/core/workspace-app/tests/unit/deep-chat-origin.test.js +38 -0
  246. package/core/workspace-app/tests/unit/density.test.js +52 -0
  247. package/core/workspace-app/tests/unit/elevenlabs.test.js +453 -0
  248. package/core/workspace-app/tests/unit/event-log.test.js +102 -0
  249. package/core/workspace-app/tests/unit/favicon.test.js +68 -0
  250. package/core/workspace-app/tests/unit/files-browser.test.js +224 -0
  251. package/core/workspace-app/tests/unit/git-info.test.js +26 -0
  252. package/core/workspace-app/tests/unit/grid-and-list.test.js +103 -0
  253. package/core/workspace-app/tests/unit/host-tool-wrapper.test.js +18 -0
  254. package/core/workspace-app/tests/unit/html-patterns.test.js +51 -0
  255. package/core/workspace-app/tests/unit/ide-infra.test.js +28 -0
  256. package/core/workspace-app/tests/unit/images-ai.test.js +201 -0
  257. package/core/workspace-app/tests/unit/images-create.test.js +59 -0
  258. package/core/workspace-app/tests/unit/images-providers.test.js +248 -0
  259. package/core/workspace-app/tests/unit/images-svg.test.js +213 -0
  260. package/core/workspace-app/tests/unit/images-workspace.test.js +144 -0
  261. package/core/workspace-app/tests/unit/jobs-fragment.test.js +66 -0
  262. package/core/workspace-app/tests/unit/media-ux.test.js +164 -0
  263. package/core/workspace-app/tests/unit/modal-fit.test.js +87 -0
  264. package/core/workspace-app/tests/unit/modules-load.test.js +23 -0
  265. package/core/workspace-app/tests/unit/narration.test.js +186 -0
  266. package/core/workspace-app/tests/unit/navigation-editor.test.js +260 -0
  267. package/core/workspace-app/tests/unit/navigation.test.js +254 -0
  268. package/core/workspace-app/tests/unit/new-folder.test.js +121 -0
  269. package/core/workspace-app/tests/unit/new-screen-form.test.js +149 -0
  270. package/core/workspace-app/tests/unit/node-menu.test.js +161 -0
  271. package/core/workspace-app/tests/unit/notes.test.js +128 -0
  272. package/core/workspace-app/tests/unit/page-structure.test.js +40 -0
  273. package/core/workspace-app/tests/unit/page-width.test.js +59 -0
  274. package/core/workspace-app/tests/unit/php-version.test.js +90 -0
  275. package/core/workspace-app/tests/unit/plan-card.test.js +44 -0
  276. package/core/workspace-app/tests/unit/plugin-catalog.test.js +31 -0
  277. package/core/workspace-app/tests/unit/plugin-system.test.js +251 -0
  278. package/core/workspace-app/tests/unit/plugins-page.test.js +28 -0
  279. package/core/workspace-app/tests/unit/plugins.test.js +58 -0
  280. package/core/workspace-app/tests/unit/project-activity-filter.test.js +180 -0
  281. package/core/workspace-app/tests/unit/project-make.test.js +143 -0
  282. package/core/workspace-app/tests/unit/project-name.test.js +202 -0
  283. package/core/workspace-app/tests/unit/reader.test.js +62 -0
  284. package/core/workspace-app/tests/unit/release.test.js +92 -0
  285. package/core/workspace-app/tests/unit/remove-confirm.test.js +37 -0
  286. package/core/workspace-app/tests/unit/report-pdf.test.js +171 -0
  287. package/core/workspace-app/tests/unit/round-11.test.js +31 -0
  288. package/core/workspace-app/tests/unit/round-12.test.js +37 -0
  289. package/core/workspace-app/tests/unit/row-layout.test.js +585 -0
  290. package/core/workspace-app/tests/unit/row-menus-fold.test.js +29 -0
  291. package/core/workspace-app/tests/unit/rows-add-modal.test.js +68 -0
  292. package/core/workspace-app/tests/unit/screen-runner-queue.test.js +41 -0
  293. package/core/workspace-app/tests/unit/screen-window.test.js +116 -0
  294. package/core/workspace-app/tests/unit/screens-beside-running.test.js +19 -0
  295. package/core/workspace-app/tests/unit/screens-columns.test.js +79 -0
  296. package/core/workspace-app/tests/unit/screens-menu.test.js +84 -0
  297. package/core/workspace-app/tests/unit/screens-modal-overlay.test.js +14 -0
  298. package/core/workspace-app/tests/unit/screens-waiting.test.js +129 -0
  299. package/core/workspace-app/tests/unit/screens.test.js +74 -0
  300. package/core/workspace-app/tests/unit/second-storage.test.js +218 -0
  301. package/core/workspace-app/tests/unit/session-name.test.js +64 -0
  302. package/core/workspace-app/tests/unit/settings-file.test.js +173 -0
  303. package/core/workspace-app/tests/unit/settings-nested-list.test.js +54 -0
  304. package/core/workspace-app/tests/unit/settings-raw.test.js +177 -0
  305. package/core/workspace-app/tests/unit/shared-prefs.test.js +49 -0
  306. package/core/workspace-app/tests/unit/speech.test.js +290 -0
  307. package/core/workspace-app/tests/unit/static-caching.test.js +39 -0
  308. package/core/workspace-app/tests/unit/status-language.test.js +47 -0
  309. package/core/workspace-app/tests/unit/tab-modal.test.js +69 -0
  310. package/core/workspace-app/tests/unit/tab-title.test.js +37 -0
  311. package/core/workspace-app/tests/unit/template-literals.test.js +52 -0
  312. package/core/workspace-app/tests/unit/terminal-scrollback.test.js +61 -0
  313. package/core/workspace-app/tests/unit/terminal-size.test.js +103 -0
  314. package/core/workspace-app/tests/unit/terminal-style.test.js +84 -0
  315. package/core/workspace-app/tests/unit/terminal-windows.test.js +154 -0
  316. package/core/workspace-app/tests/unit/themes.test.js +453 -0
  317. package/core/workspace-app/tests/unit/tool-labels.test.js +34 -0
  318. package/core/workspace-app/tests/unit/topbar-icons.test.js +47 -0
  319. package/core/workspace-app/tests/unit/update-docker-gid.test.js +51 -0
  320. package/core/workspace-app/tests/unit/user-guide.test.js +60 -0
  321. package/core/workspace-app/tests/unit/version-check.test.js +98 -0
  322. package/core/workspace-app/tests/unit/version-link.test.js +50 -0
  323. package/core/workspace-app/tests/unit/video-borrow.test.js +198 -0
  324. package/core/workspace-app/tests/unit/video-edit-ask.test.js +93 -0
  325. package/core/workspace-app/tests/unit/video-edit-short.test.js +42 -0
  326. package/core/workspace-app/tests/unit/video-edit.test.js +417 -0
  327. package/core/workspace-app/tests/unit/video-transcript.test.js +237 -0
  328. package/core/workspace-app/tests/unit/waiting.test.js +48 -0
  329. package/core/workspace-app/tests/unit/wordpress-odoo-builders.test.js +38 -0
  330. package/core/workspace-app/tests/unit/workspace-bin.test.js +48 -0
  331. package/core/workspace-app/tests/unit/workspace-card-tools.test.js +30 -0
  332. package/core/workspace-app/tests/unit/workspace-delete.test.js +77 -0
  333. package/core/workspace-app/tests/unit/workspace-types.test.js +68 -0
  334. package/core/workspace-app/tests/unit/worktree-clone.test.js +250 -0
  335. package/{workspace-types.js → core/workspace-app/workspace-types.js} +2 -2
  336. package/{workspaces.js → core/workspace-app/workspaces.js} +1 -5
  337. package/package.json +38 -36
  338. package/actions/graphs.js +0 -107
  339. package/actions/obsidian.js +0 -59
  340. package/graphs.js +0 -104
  341. package/obsidian.js +0 -405
  342. /package/{WORKSPACES.md → core/workspace-app/WORKSPACES.md} +0 -0
  343. /package/{actions → core/workspace-app/actions}/ai-items.js +0 -0
  344. /package/{actions → core/workspace-app/actions}/audio.js +0 -0
  345. /package/{actions → core/workspace-app/actions}/build-order.js +0 -0
  346. /package/{actions → core/workspace-app/actions}/checks.js +0 -0
  347. /package/{actions → core/workspace-app/actions}/claude-session.js +0 -0
  348. /package/{actions → core/workspace-app/actions}/commands-center.js +0 -0
  349. /package/{actions → core/workspace-app/actions}/composer.js +0 -0
  350. /package/{actions → core/workspace-app/actions}/ddev-addons.js +0 -0
  351. /package/{actions → core/workspace-app/actions}/ddev-mail.js +0 -0
  352. /package/{actions → core/workspace-app/actions}/folders.js +0 -0
  353. /package/{actions → core/workspace-app/actions}/images-svg.js +0 -0
  354. /package/{actions → core/workspace-app/actions}/images.js +0 -0
  355. /package/{actions → core/workspace-app/actions}/navigation.js +0 -0
  356. /package/{actions → core/workspace-app/actions}/node.js +0 -0
  357. /package/{actions → core/workspace-app/actions}/notes.js +0 -0
  358. /package/{actions → core/workspace-app/actions}/plugins.js +0 -0
  359. /package/{actions → core/workspace-app/actions}/project-make.js +0 -0
  360. /package/{actions → core/workspace-app/actions}/row-actions.js +0 -0
  361. /package/{actions → core/workspace-app/actions}/screens.js +0 -0
  362. /package/{actions → core/workspace-app/actions}/video-edit.js +0 -0
  363. /package/{ai-inventory.js → core/workspace-app/ai-inventory.js} +0 -0
  364. /package/{ai-items.js → core/workspace-app/ai-items.js} +0 -0
  365. /package/{assistant-cast.js → core/workspace-app/assistant-cast.js} +0 -0
  366. /package/{assistant-suggestions.js → core/workspace-app/assistant-suggestions.js} +0 -0
  367. /package/{audio-voice.js → core/workspace-app/audio-voice.js} +0 -0
  368. /package/{auth-google.js → core/workspace-app/auth-google.js} +0 -0
  369. /package/{build-ai.js → core/workspace-app/build-ai.js} +0 -0
  370. /package/{build-order-page.js → core/workspace-app/build-order-page.js} +0 -0
  371. /package/{build-order.js → core/workspace-app/build-order.js} +0 -0
  372. /package/{builder-args.js → core/workspace-app/builder-args.js} +0 -0
  373. /package/{changelog.js → core/workspace-app/changelog.js} +0 -0
  374. /package/{chat-threads.js → core/workspace-app/chat-threads.js} +0 -0
  375. /package/{checks.js → core/workspace-app/checks.js} +0 -0
  376. /package/{claude-args.js → core/workspace-app/claude-args.js} +0 -0
  377. /package/{claude-sessions.js → core/workspace-app/claude-sessions.js} +0 -0
  378. /package/{command-author.js → core/workspace-app/command-author.js} +0 -0
  379. /package/{command-block.js → core/workspace-app/command-block.js} +0 -0
  380. /package/{commands → core/workspace-app/commands}/defaults.yml +0 -0
  381. /package/{commands-page.js → core/workspace-app/commands-page.js} +0 -0
  382. /package/{commands.js → core/workspace-app/commands.js} +0 -0
  383. /package/{cucumber.js → core/workspace-app/cucumber.js} +0 -0
  384. /package/{ddev-addons-page.js → core/workspace-app/ddev-addons-page.js} +0 -0
  385. /package/{ddev-addons.js → core/workspace-app/ddev-addons.js} +0 -0
  386. /package/{ddev-custom-commands.js → core/workspace-app/ddev-custom-commands.js} +0 -0
  387. /package/{ddev-domains.js → core/workspace-app/ddev-domains.js} +0 -0
  388. /package/{ddev-import.js → core/workspace-app/ddev-import.js} +0 -0
  389. /package/{ddev-mail-page.js → core/workspace-app/ddev-mail-page.js} +0 -0
  390. /package/{ddev-mail.js → core/workspace-app/ddev-mail.js} +0 -0
  391. /package/{ddev-options.js → core/workspace-app/ddev-options.js} +0 -0
  392. /package/{ddev-snapshots.js → core/workspace-app/ddev-snapshots.js} +0 -0
  393. /package/{ddev.js → core/workspace-app/ddev.js} +0 -0
  394. /package/{docs → core/workspace-app/docs}/DEVELOPER-GUIDE.md +0 -0
  395. /package/{docs → core/workspace-app/docs}/README.md +0 -0
  396. /package/{docs → core/workspace-app/docs}/REFERENCE.md +0 -0
  397. /package/{docs → core/workspace-app/docs}/USER-GUIDE.md +0 -0
  398. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-board.png +0 -0
  399. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-coffee.png +0 -0
  400. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-colours.png +0 -0
  401. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-icons.png +0 -0
  402. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-moves.png +0 -0
  403. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-pick-cookieman.png +0 -0
  404. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-settings-voices.png +0 -0
  405. /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-status.png +0 -0
  406. /package/{docs → core/workspace-app/docs}/screenshots/create-card/create-card.png +0 -0
  407. /package/{docs → core/workspace-app/docs}/screenshots/create-card/start-ai.png +0 -0
  408. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-address.png +0 -0
  409. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-off.png +0 -0
  410. /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-on.png +0 -0
  411. /package/{docs → core/workspace-app/docs}/screenshots/guide-ddev-menu.png +0 -0
  412. /package/{docs → core/workspace-app/docs}/screenshots/guide-domains.png +0 -0
  413. /package/{docs → core/workspace-app/docs}/screenshots/guide-home.png +0 -0
  414. /package/{docs → core/workspace-app/docs}/screenshots/guide-ide-menu.png +0 -0
  415. /package/{docs → core/workspace-app/docs}/screenshots/guide-remove-refusal.png +0 -0
  416. /package/{docs → core/workspace-app/docs}/screenshots/guide-rows-worktree.png +0 -0
  417. /package/{docs → core/workspace-app/docs}/screenshots/guide-screens.png +0 -0
  418. /package/{docs → core/workspace-app/docs}/screenshots/guide-settings.png +0 -0
  419. /package/{docs → core/workspace-app/docs}/screenshots/guide-workspace-page.png +0 -0
  420. /package/{docs → core/workspace-app/docs}/screenshots/home/card-settings.png +0 -0
  421. /package/{docs → core/workspace-app/docs}/screenshots/home/drag-reorder.png +0 -0
  422. /package/{docs → core/workspace-app/docs}/screenshots/home/edit-card.png +0 -0
  423. /package/{docs → core/workspace-app/docs}/screenshots/images/claude-code-image.png +0 -0
  424. /package/{docs → core/workspace-app/docs}/screenshots/images/edit-with-ai.png +0 -0
  425. /package/{docs → core/workspace-app/docs}/screenshots/images/gallery.png +0 -0
  426. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-description.png +0 -0
  427. /package/{docs → core/workspace-app/docs}/screenshots/images/generate-plan.png +0 -0
  428. /package/{docs → core/workspace-app/docs}/screenshots/images/providers.png +0 -0
  429. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-form.png +0 -0
  430. /package/{docs → core/workspace-app/docs}/screenshots/images/svg-result.png +0 -0
  431. /package/{docs → core/workspace-app/docs}/screenshots/images/upload.png +0 -0
  432. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/2-form.png +0 -0
  433. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/8-ddev-options.png +0 -0
  434. /package/{docs → core/workspace-app/docs}/screenshots/new-folder/files-folder.png +0 -0
  435. /package/{docs → core/workspace-app/docs}/screenshots/projects/ddev-custom-commands.png +0 -0
  436. /package/{docs → core/workspace-app/docs}/screenshots/projects/state-chip-stop.png +0 -0
  437. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-dark.png +0 -0
  438. /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-light.png +0 -0
  439. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-dark.png +0 -0
  440. /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-light.png +0 -0
  441. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-dark.png +0 -0
  442. /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-light.png +0 -0
  443. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/ai.svg +0 -0
  444. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/code.svg +0 -0
  445. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/docs.svg +0 -0
  446. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/services.svg +0 -0
  447. /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/sites.svg +0 -0
  448. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-dark.png +0 -0
  449. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-light.png +0 -0
  450. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-scenarios.png +0 -0
  451. /package/{docs → core/workspace-app/docs}/screenshots/readme/test-steps.png +0 -0
  452. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-dark.png +0 -0
  453. /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-light.png +0 -0
  454. /package/{docs → core/workspace-app/docs}/screenshots/screens-menu.png +0 -0
  455. /package/{docs → core/workspace-app/docs}/screenshots/screens-new.png +0 -0
  456. /package/{docs → core/workspace-app/docs}/screenshots/settings/auth-google-lists.png +0 -0
  457. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-1-row.png +0 -0
  458. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-2-confirm.png +0 -0
  459. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-3-type-name.png +0 -0
  460. /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-4-type-yes.png +0 -0
  461. /package/{event-log.js → core/workspace-app/event-log.js} +0 -0
  462. /package/{files-browser.js → core/workspace-app/files-browser.js} +0 -0
  463. /package/{folders.js → core/workspace-app/folders.js} +0 -0
  464. /package/{format.js → core/workspace-app/format.js} +0 -0
  465. /package/{github-auth.js → core/workspace-app/github-auth.js} +0 -0
  466. /package/{html.js → core/workspace-app/html.js} +0 -0
  467. /package/{icons.js → core/workspace-app/icons.js} +0 -0
  468. /package/{images-ai.js → core/workspace-app/images-ai.js} +0 -0
  469. /package/{images-create.js → core/workspace-app/images-create.js} +0 -0
  470. /package/{images-page.js → core/workspace-app/images-page.js} +0 -0
  471. /package/{images-records.js → core/workspace-app/images-records.js} +0 -0
  472. /package/{images-render.js → core/workspace-app/images-render.js} +0 -0
  473. /package/{images-svg-core.js → core/workspace-app/images-svg-core.js} +0 -0
  474. /package/{images-svg-sanitize.js → core/workspace-app/images-svg-sanitize.js} +0 -0
  475. /package/{images-svg.js → core/workspace-app/images-svg.js} +0 -0
  476. /package/{images.js → core/workspace-app/images.js} +0 -0
  477. /package/{jobs.js → core/workspace-app/jobs.js} +0 -0
  478. /package/{linger.js → core/workspace-app/linger.js} +0 -0
  479. /package/{lists.js → core/workspace-app/lists.js} +0 -0
  480. /package/{media-info.js → core/workspace-app/media-info.js} +0 -0
  481. /package/{navigation-page.js → core/workspace-app/navigation-page.js} +0 -0
  482. /package/{navigation.js → core/workspace-app/navigation.js} +0 -0
  483. /package/{notes.js → core/workspace-app/notes.js} +0 -0
  484. /package/{palette-index.js → core/workspace-app/palette-index.js} +0 -0
  485. /package/{playwright.config.js → core/workspace-app/playwright.config.js} +0 -0
  486. /package/{plugin-install.js → core/workspace-app/plugin-install.js} +0 -0
  487. /package/{plugin-manifest.js → core/workspace-app/plugin-manifest.js} +0 -0
  488. /package/{plugin-settings.js → core/workspace-app/plugin-settings.js} +0 -0
  489. /package/{plugins → core/workspace-app/plugins}/workspace-notes/index.js +0 -0
  490. /package/{project-make.js → core/workspace-app/project-make.js} +0 -0
  491. /package/{project-name.js → core/workspace-app/project-name.js} +0 -0
  492. /package/{public → core/workspace-app/public}/assistant-avatar-moves.js +0 -0
  493. /package/{public → core/workspace-app/public}/assistant-avatar-ui.js +0 -0
  494. /package/{public → core/workspace-app/public}/assistant-avatar.js +0 -0
  495. /package/{public → core/workspace-app/public}/avatar/druplicon.vrm +0 -0
  496. /package/{public → core/workspace-app/public}/css/base.css +0 -0
  497. /package/{public → core/workspace-app/public}/css/components/ai-assistant.css +0 -0
  498. /package/{public → core/workspace-app/public}/css/components/assistant-avatar.css +0 -0
  499. /package/{public → core/workspace-app/public}/css/components/assistant-views.css +0 -0
  500. /package/{public → core/workspace-app/public}/css/components/build-order.css +0 -0
  501. /package/{public → core/workspace-app/public}/css/components/clone-as-a-git-worktree.css +0 -0
  502. /package/{public → core/workspace-app/public}/css/components/command-palette.css +0 -0
  503. /package/{public → core/workspace-app/public}/css/components/commands-center.css +0 -0
  504. /package/{public → core/workspace-app/public}/css/components/confirm-dialog.css +0 -0
  505. /package/{public → core/workspace-app/public}/css/components/create-card.css +0 -0
  506. /package/{public → core/workspace-app/public}/css/components/ddev-menu.css +0 -0
  507. /package/{public → core/workspace-app/public}/css/components/deep-chat.css +0 -0
  508. /package/{public → core/workspace-app/public}/css/components/density.css +0 -0
  509. /package/{public → core/workspace-app/public}/css/components/floating-assistant-workspace-pages.css +0 -0
  510. /package/{public → core/workspace-app/public}/css/components/folders.css +0 -0
  511. /package/{public → core/workspace-app/public}/css/components/full-height-left-assistant-sidebar-all-pages.css +0 -0
  512. /package/{public → core/workspace-app/public}/css/components/full-height-right-actions-rail-pages-that-have-actions.css +0 -0
  513. /package/{public → core/workspace-app/public}/css/components/grid-and-list.css +0 -0
  514. /package/{public → core/workspace-app/public}/css/components/help-page.css +0 -0
  515. /package/{public → core/workspace-app/public}/css/components/hero.css +0 -0
  516. /package/{public → core/workspace-app/public}/css/components/images.css +0 -0
  517. /package/{public → core/workspace-app/public}/css/components/layout-rhythm-and-spacing-polish.css +0 -0
  518. /package/{public → core/workspace-app/public}/css/components/mic-on-any-field-that-wants-typing.css +0 -0
  519. /package/{public → core/workspace-app/public}/css/components/modal-fit.css +0 -0
  520. /package/{public → core/workspace-app/public}/css/components/page-width.css +0 -0
  521. /package/{public → core/workspace-app/public}/css/components/plugins-page.css +0 -0
  522. /package/{public → core/workspace-app/public}/css/components/project-cards.css +0 -0
  523. /package/{public → core/workspace-app/public}/css/components/project-rows.css +0 -0
  524. /package/{public → core/workspace-app/public}/css/components/reordering-the-workspace-cards.css +0 -0
  525. /package/{public → core/workspace-app/public}/css/components/responsive-home-and-the-workspace-pages.css +0 -0
  526. /package/{public → core/workspace-app/public}/css/components/running-commands-as-toasts.css +0 -0
  527. /package/{public → core/workspace-app/public}/css/components/settings-editor-core-config-yml.css +0 -0
  528. /package/{public → core/workspace-app/public}/css/components/short-results-as-a-toast-at-the-top.css +0 -0
  529. /package/{public → core/workspace-app/public}/css/components/sound-player.css +0 -0
  530. /package/{public → core/workspace-app/public}/css/components/suggest-agents-skills-commands.css +0 -0
  531. /package/{public → core/workspace-app/public}/css/components/tab-modal.css +0 -0
  532. /package/{public → core/workspace-app/public}/css/components/terminals.css +0 -0
  533. /package/{public → core/workspace-app/public}/css/components/test-report-media-one-file-per-row-paged.css +0 -0
  534. /package/{public → core/workspace-app/public}/css/components/top-toolbar-logo-breadcrumb.css +0 -0
  535. /package/{public → core/workspace-app/public}/css/components/video-edit.css +0 -0
  536. /package/{public → core/workspace-app/public}/css/components/web-ide-open-with.css +0 -0
  537. /package/{public → core/workspace-app/public}/css/components/working-indicators.css +0 -0
  538. /package/{public → core/workspace-app/public}/css/components/workspace-cards.css +0 -0
  539. /package/{public → core/workspace-app/public}/favicon.ico +0 -0
  540. /package/{public → core/workspace-app/public}/favicon.png +0 -0
  541. /package/{public → core/workspace-app/public}/htmx.min.js +0 -0
  542. /package/{public → core/workspace-app/public}/logo.png +0 -0
  543. /package/{public → core/workspace-app/public}/media-player.js +0 -0
  544. /package/{public → core/workspace-app/public}/mic.js +0 -0
  545. /package/{public → core/workspace-app/public}/narration.js +0 -0
  546. /package/{public → core/workspace-app/public}/palette.js +0 -0
  547. /package/{public → core/workspace-app/public}/sortable.js +0 -0
  548. /package/{public → core/workspace-app/public}/suggest.js +0 -0
  549. /package/{public → core/workspace-app/public}/terminal.js +0 -0
  550. /package/{public → core/workspace-app/public}/themes/default/theme.css +0 -0
  551. /package/{public → core/workspace-app/public}/themes/ember/theme.css +0 -0
  552. /package/{public → core/workspace-app/public}/themes/press/theme.css +0 -0
  553. /package/{public → core/workspace-app/public}/themes/slate/theme.css +0 -0
  554. /package/{public → core/workspace-app/public}/touch-icon.png +0 -0
  555. /package/{public → core/workspace-app/public}/ui.js +0 -0
  556. /package/{public → core/workspace-app/public}/vendor/ace/LICENSE.txt +0 -0
  557. /package/{public → core/workspace-app/public}/vendor/ace/ace.js +0 -0
  558. /package/{public → core/workspace-app/public}/vendor/ace/ext-language_tools.js +0 -0
  559. /package/{public → core/workspace-app/public}/vendor/ace/ext-searchbox.js +0 -0
  560. /package/{public → core/workspace-app/public}/vendor/ace/mode-css.js +0 -0
  561. /package/{public → core/workspace-app/public}/vendor/ace/mode-html.js +0 -0
  562. /package/{public → core/workspace-app/public}/vendor/ace/mode-javascript.js +0 -0
  563. /package/{public → core/workspace-app/public}/vendor/ace/mode-markdown.js +0 -0
  564. /package/{public → core/workspace-app/public}/vendor/ace/mode-sh.js +0 -0
  565. /package/{public → core/workspace-app/public}/vendor/ace/mode-yaml.js +0 -0
  566. /package/{public → core/workspace-app/public}/vendor/ace/theme-textmate.js +0 -0
  567. /package/{public → core/workspace-app/public}/vendor/ace/theme-tomorrow_night.js +0 -0
  568. /package/{public → core/workspace-app/public}/vendor/ace/worker-yaml.js +0 -0
  569. /package/{public → core/workspace-app/public}/vendor/deep-chat.LICENSE +0 -0
  570. /package/{public → core/workspace-app/public}/vendor/deep-chat.bundle.js +0 -0
  571. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-LICENSE.txt +0 -0
  572. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
  573. /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
  574. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-LICENSE.txt +0 -0
  575. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
  576. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
  577. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
  578. /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
  579. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-LICENSE.txt +0 -0
  580. /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  581. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-LICENSE.txt +0 -0
  582. /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
  583. /package/{public → core/workspace-app/public}/vendor/tabler-LICENSE.txt +0 -0
  584. /package/{public → core/workspace-app/public}/vendor/tabler-sprite.svg +0 -0
  585. /package/{public → core/workspace-app/public}/vendor/three/LICENSE +0 -0
  586. /package/{public → core/workspace-app/public}/vendor/three/addons/loaders/GLTFLoader.js +0 -0
  587. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/BufferGeometryUtils.js +0 -0
  588. /package/{public → core/workspace-app/public}/vendor/three/addons/utils/SkeletonUtils.js +0 -0
  589. /package/{public → core/workspace-app/public}/vendor/three/three.core.min.js +0 -0
  590. /package/{public → core/workspace-app/public}/vendor/three/three.module.min.js +0 -0
  591. /package/{public → core/workspace-app/public}/vendor/three-vrm/LICENSE +0 -0
  592. /package/{public → core/workspace-app/public}/vendor/three-vrm/three-vrm.module.min.js +0 -0
  593. /package/{public → core/workspace-app/public}/vendor/uikit-icons.min.js +0 -0
  594. /package/{public → core/workspace-app/public}/vendor/uikit.min.css +0 -0
  595. /package/{public → core/workspace-app/public}/vendor/uikit.min.js +0 -0
  596. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/bookmark-outlined.svg +0 -0
  597. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/headset.svg +0 -0
  598. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/menu.svg +0 -0
  599. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/pause.svg +0 -0
  600. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/play.svg +0 -0
  601. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/share.svg +0 -0
  602. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-off.svg +0 -0
  603. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-on.svg +0 -0
  604. /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/stop.svg +0 -0
  605. /package/{public → core/workspace-app/public}/vendor/xterm/addon-fit.js +0 -0
  606. /package/{public → core/workspace-app/public}/vendor/xterm/addon-unicode11.js +0 -0
  607. /package/{public → core/workspace-app/public}/vendor/xterm/addon-web-links.js +0 -0
  608. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.css +0 -0
  609. /package/{public → core/workspace-app/public}/vendor/xterm/xterm.js +0 -0
  610. /package/{rag.js → core/workspace-app/rag.js} +0 -0
  611. /package/{reader.js → core/workspace-app/reader.js} +0 -0
  612. /package/{repo-blobs.js → core/workspace-app/repo-blobs.js} +0 -0
  613. /package/{report-pdf.js → core/workspace-app/report-pdf.js} +0 -0
  614. /package/{screenrc → core/workspace-app/screenrc} +0 -0
  615. /package/{screens.js → core/workspace-app/screens.js} +0 -0
  616. /package/{scripts → core/workspace-app/scripts}/code-server-start.sh +0 -0
  617. /package/{scripts → core/workspace-app/scripts}/images-claude-finish.js +0 -0
  618. /package/{scripts → core/workspace-app/scripts}/screen-host.sh +0 -0
  619. /package/{scripts → core/workspace-app/scripts}/screen-runner.js +0 -0
  620. /package/{scripts → core/workspace-app/scripts}/screen-then.js +0 -0
  621. /package/{scripts → core/workspace-app/scripts}/update.sh +0 -0
  622. /package/{settings-file.js → core/workspace-app/settings-file.js} +0 -0
  623. /package/{speech.js → core/workspace-app/speech.js} +0 -0
  624. /package/{tab-modal.js → core/workspace-app/tab-modal.js} +0 -0
  625. /package/{test-reports.js → core/workspace-app/test-reports.js} +0 -0
  626. /package/{themes.js → core/workspace-app/themes.js} +0 -0
  627. /package/{transcripts.js → core/workspace-app/transcripts.js} +0 -0
  628. /package/{urls.js → core/workspace-app/urls.js} +0 -0
  629. /package/{validate.js → core/workspace-app/validate.js} +0 -0
  630. /package/{version-check.js → core/workspace-app/version-check.js} +0 -0
  631. /package/{video-edit.js → core/workspace-app/video-edit.js} +0 -0
  632. /package/{waiting.js → core/workspace-app/waiting.js} +0 -0
  633. /package/{workspace-card-tools.js → core/workspace-app/workspace-card-tools.js} +0 -0
  634. /package/{workspace-delete.js → core/workspace-app/workspace-delete.js} +0 -0
@@ -0,0 +1,15 @@
1
+ # Testing
2
+
3
+ ## The core
4
+
5
+ - Unit: `node --test core/workspace-app/tests/unit/*.test.js` (Node's own runner). The plugin system has its own file, `plugin-system.test.js`, which drives `plugins.sh` against a temporary tree with `WORKSPACE_PLUGINS_NO_RESTART=1`, so a test never restarts the dashboard that serves this machine.
6
+ - Browser: `cd core/workspace-app && ddev test-dashboard browser` runs the webship-js (Playwright + cucumber-js) features under `tests/features` against the live dashboard, one scenario at a time. Every installed plugin's `features/*.feature` is placed under `tests/features/plugins/<name>/`, so the suite covers what is actually on.
7
+ - Scripts: `bash core/scripts/tests/cmd-smoke-test.sh` parses every `cmd-*.sh`.
8
+
9
+ ## A plugin
10
+
11
+ `npm test` in the plugin's folder builds it (TypeScript to `dist/`) and runs its compiled tests. Its CI workflow does the same on push.
12
+
13
+ ## The rule
14
+
15
+ A change lands through an issue and a pull request on the repository it belongs to, and is reviewed once the browser suite passes on a dashboard with the plugins installed from npm.
@@ -0,0 +1,25 @@
1
+ # Workspaces
2
+
3
+ A workspace is a folder under the workspace root with a `workspace.<key>.settings.yml` in `core/config` and a set of `cmd-*.sh` commands. `settings.yml`'s `workspaces:` list says which folders exist and in what order the dashboard shows them.
4
+
5
+ ## Types
6
+
7
+ | Type | What the folder holds | What a row offers |
8
+ | --- | --- | --- |
9
+ | `sites` | Real projects with a DDEV environment | build, start/stop, launch, back up, clone, remove, the plugins' menus |
10
+ | `code` | Repositories checked out to work on | backup, remove, the menus that make sense without a site |
11
+ | `files` | Markdown items, edited in place | open, edit |
12
+ | `media` | Recordings and images | play, review |
13
+ | `ai-items` | Agents, skills, commands and prompts | install into `~/.claude`, update from a repository |
14
+
15
+ ## Builders
16
+
17
+ A `cmd-*-project.sh` in a `sites` folder builds a project: Drupal (9 to 12), Drupal CMS, the Webship distributions. Each carries a `# workspace-name:` header the dashboard shows in its Build dropdown, declares its own distribution values, and runs everything through DDEV (`ddev config`, `ddev composer`, `ddev drush`), never against the host. Every build runs Node.js 24.
18
+
19
+ ## Commands
20
+
21
+ Every `cmd-*.sh` finds the tooling from its own path (`core/scripts/bootstrap.sh`), so a fresh workspace needs no environment variables. Tools (`cmd-tools-*.sh`) act on an existing project: back it up, restore it, run its tests, link it to a host. A plugin's command is placed into the folders its manifest names, with `__WORKSPACE__` filled in.
22
+
23
+ ## Each folder is a plugin
24
+
25
+ `@webship.co/workspace-dev`, `-test`, `-drupal-modules`, `-drupal-themes`, `-docs`, … carry the folder's settings template, commands and docs. `webship-workspace plugin require|activate|install <name>` adds one; the folder, its content and its settings stay when it is deactivated.
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('NAME',
5
+ default='_all_',
6
+ nargs='?',
7
+ help='One item by name. Default: every item.')
8
+ parser.add_argument('-s', '--status',
9
+ action='store_true',
10
+ default=False,
11
+ help='Show what each source has: this workspace folder, ~/.claude, and the shared repo.')
12
+ parser.add_argument('-l', '--list-remote',
13
+ action='store_true',
14
+ default=False,
15
+ help='List what the shared repo (webship/ai-agents) has.')
16
+ parser.add_argument('-o', '--source',
17
+ default='repo',
18
+ help='Where to read from: repo (webship/ai-agents) or claude (~/.claude). default [ repo ]')
19
+ parser.add_argument('-t', '--filter',
20
+ default='webship',
21
+ help='With --source claude, only items whose name starts with this. _all_ for every item. default [ webship ]')
22
+ parser.add_argument('-f', '--fetch',
23
+ action='store_true',
24
+ default=False,
25
+ help='Fetch from the shared repo into ~/.claude, so a session can use it now.')
26
+ parser.add_argument('-p', '--pull',
27
+ action='store_true',
28
+ default=False,
29
+ help='Pull into this workspace folder from --source (repo by default, or claude).')
30
+ parser.add_argument('-i', '--install',
31
+ action='store_true',
32
+ default=False,
33
+ help='Install from this workspace folder into ~/.claude (your own draft).')
34
+ parser.add_argument('-k', '--check',
35
+ action='store_true',
36
+ default=False,
37
+ help='Compare what is installed against its source (repo or workspace draft), without changing anything.')
38
+ parser.add_argument('-A', '--add',
39
+ default='_none_',
40
+ help='Install NAME (or every item) from any GitHub repo: owner/repo, owner/repo@ref, or a github.com URL (tree URLs pick a branch and folder). Combines with --to.')
41
+ parser.add_argument('-U', '--update',
42
+ action='store_true',
43
+ default=False,
44
+ help='Re-install every tracked item whose source moved (repo or workspace draft). Combines with --to.')
45
+ parser.add_argument('-T', '--to',
46
+ default='_none_',
47
+ help='With --install, put it in one project instead of the global ~/.claude/: dev/myproject. Default: global.')
48
+ parser.add_argument('-P', '--propose',
49
+ action='store_true',
50
+ default=False,
51
+ help='Hand NAME to the AI agent to file the issue and open the PR on the shared repo. Prints the plan unless --confirm is added.')
52
+ parser.add_argument('-m', '--summary',
53
+ default='_none_',
54
+ help='With --propose, what the item is for. Goes into the issue and the PR.')
55
+ parser.add_argument('-C', '--confirm',
56
+ action='store_true',
57
+ default=False,
58
+ help='With --propose, actually create the issue and the PR. Without it, only the plan is printed.')
59
+ parser.add_argument('-c', '--clone-to',
60
+ default='_none_',
61
+ help='Copy NAME to this new name in this workspace folder, rewriting its identity, to customise it.')
62
+ parser.add_argument('-u', '--purpose',
63
+ default='_none_',
64
+ help='With --clone-to, what the copy is for. Claude Code then tailors and reformats it for that purpose.')
65
+ ARGEOF
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('-e', '--enable',
5
+ action='store_true',
6
+ default=False,
7
+ help='Install the systemd user service that starts the configured projects at boot, and turn on lingering so it runs without anyone logging in.')
8
+ parser.add_argument('-d', '--disable',
9
+ action='store_true',
10
+ default=False,
11
+ help='Stop and remove the boot service. The domain stays as it is; only the automatic start goes.')
12
+ parser.add_argument('-o', '--domain',
13
+ default="_none_",
14
+ help='The one name the dashboard answers on, project and TLD together: workspace.ddev.site. The first label is the DDEV project name, the rest is the project TLD, and every workspace and project hostname follows from it.')
15
+ parser.add_argument('-a', '--apply',
16
+ action='store_true',
17
+ default=False,
18
+ help='Apply the domain from the settings file to DDEV now and restart, without changing what is configured.')
19
+ parser.add_argument('-n', '--now',
20
+ action='store_true',
21
+ default=False,
22
+ help='Start the configured projects immediately, exactly as the boot service would. Use it to prove the service will work before rebooting.')
23
+ parser.add_argument('-R', '--restart-all',
24
+ action='store_true',
25
+ default=False,
26
+ help='After a TLD change, restart every other running project so it answers on the new name too. Without this they are listed and left alone, because restarting a site mid-build is how a half-written database happens.')
27
+ parser.add_argument('-f', '--force',
28
+ action='store_true',
29
+ default=False,
30
+ help='Go ahead with a TLD that has no wildcard DNS, or with a project rename. Both are refused without this, and both break things in ways that are tedious to undo.')
31
+ ARGEOF
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ import re
5
+
6
+ def text(value):
7
+ # argparse-bash hands values to the shell through eval: refuse what the shell would expand.
8
+ if re.search(r'[\$\`"\\\\]', value):
9
+ raise argparse.ArgumentTypeError('may not contain quotes, dollar signs, backticks or backslashes')
10
+ return value
11
+
12
+ parser.add_argument('PROJECT_NAME',
13
+ nargs='?',
14
+ default="_none_",
15
+ help='The avatar project, e.g. my-avatar.')
16
+ parser.add_argument('-a', '--action',
17
+ choices=['list', 'link', 'create', 'check'],
18
+ default='list',
19
+ help='list the project agents and whether ~/.claude uses them (default); link them into ~/.claude; create an agent for a character; check Claude Code in the container.')
20
+ parser.add_argument('-i', '--id',
21
+ type=text,
22
+ default="_none_",
23
+ help='For create: the character the agent is the mind of (characters/<id>.json).')
24
+ parser.add_argument('-R', '--replace',
25
+ action='store_true',
26
+ default=False,
27
+ help='For create: write the agent file again even if it exists. For link: point links that use another project copy at this one.')
28
+ ARGEOF
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('-a', '--action',
5
+ choices=['voices', 'avatars'],
6
+ default='voices',
7
+ help='voices: voice engines and their licences (default); avatars: avatar libraries and their licences.')
8
+ parser.add_argument('-l', '--list',
9
+ action='store_true',
10
+ default=False,
11
+ help='With avatars: also list every public VRM in the Open Source Avatars registry, with its licence.')
12
+ ARGEOF
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ import re
5
+
6
+ def text(value):
7
+ # argparse-bash hands values to the shell through eval: refuse what the shell would expand.
8
+ if re.search(r'[\$\`"\\\\]', value):
9
+ raise argparse.ArgumentTypeError('may not contain quotes, dollar signs, backticks or backslashes')
10
+ return value
11
+
12
+ parser.add_argument('PROJECT_NAME',
13
+ nargs='?',
14
+ default="_none_",
15
+ help='The avatar project, e.g. my-avatar.')
16
+ parser.add_argument('-a', '--action',
17
+ choices=['list', 'add', 'remove'],
18
+ default='list',
19
+ help='list the characters (default), add one, or remove one (its file is moved aside, its model kept).')
20
+ parser.add_argument('-i', '--id',
21
+ type=text,
22
+ default="_none_",
23
+ help='The character id: lowercase letters, digits and hyphens, e.g. ada.')
24
+ parser.add_argument('-n', '--name',
25
+ type=text,
26
+ default="_none_",
27
+ help='The name it shows and answers to, e.g. Ada.')
28
+ parser.add_argument('-m', '--model',
29
+ type=text,
30
+ default="_none_",
31
+ help='Where its body comes from: an https URL to a .vrm, or osa:<name> from Open Source Avatars (bash cmd-tools-avatar-catalog.sh -a avatars --list). Downloaded into public/models/<id>.vrm.')
32
+ parser.add_argument('-M', '--model-file',
33
+ type=text,
34
+ default="_none_",
35
+ help='A model already in the project public/models/, e.g. my-character.vrm.')
36
+ parser.add_argument('-e', '--voice-engine',
37
+ choices=['browser', 'piper', 'elevenlabs'],
38
+ default='_settings_',
39
+ help='browser (free), piper (free, offline) or elevenlabs (spends credits). Default: avatar.voice_engine, piper.')
40
+ parser.add_argument('-v', '--voice',
41
+ type=text,
42
+ default="_settings_",
43
+ help='The voice: a Piper voice name (en_GB-alba-medium), an ElevenLabs voice id, or empty for the browser default. Default: avatar.voice, a free Piper voice.')
44
+ parser.add_argument('-L', '--language',
45
+ type=text,
46
+ default='en-US',
47
+ help='What it speaks by default, e.g. en-GB or ar-JO.')
48
+ parser.add_argument('-g', '--gender',
49
+ choices=['f', 'm'],
50
+ default="_none_",
51
+ help='Picks Arabic grammar for the page labels.')
52
+ parser.add_argument('-c', '--credit',
53
+ type=text,
54
+ default="_none_",
55
+ help='Who made the model and under which terms. Filled in from the registry for osa: models.')
56
+ parser.add_argument('-p', '--persona-file',
57
+ type=text,
58
+ default="_none_",
59
+ help='A text file with the persona: who the character is and how it speaks. Used when it has no agent.')
60
+ parser.add_argument('-G', '--agent',
61
+ type=text,
62
+ default="_none_",
63
+ help='A Claude Code agent in ~/.claude/agents/ to be its mind. Or create one: cmd-tools-avatar-agent.sh -a create.')
64
+ parser.add_argument('-R', '--replace',
65
+ action='store_true',
66
+ default=False,
67
+ help='Overwrite an existing characters/<id>.json.')
68
+ ARGEOF
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ import re
5
+
6
+ def text(value):
7
+ # argparse-bash hands values to the shell through eval: refuse what the shell would expand.
8
+ if re.search(r'[\$\`"\\\\]', value):
9
+ raise argparse.ArgumentTypeError('may not contain quotes, dollar signs, backticks or backslashes')
10
+ return value
11
+
12
+ parser.add_argument('PROJECT_NAME',
13
+ nargs='?',
14
+ default="_none_",
15
+ help='The avatar project, e.g. my-avatar. Not needed for piper-list and piper-install.')
16
+ parser.add_argument('-a', '--action',
17
+ choices=['status', 'piper-list', 'piper-install', 'elevenlabs-link', 'elevenlabs-unlink'],
18
+ default='status',
19
+ help='status of every engine (default); list or install free Piper voices; link or unlink the ElevenLabs key from settings.yml (never printed).')
20
+ parser.add_argument('-v', '--voice',
21
+ type=text,
22
+ default="_none_",
23
+ help='For piper-install: a Piper voice name, e.g. en_GB-alba-medium or ar_JO-kareem-medium.')
24
+ ARGEOF
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ nargs='?',
6
+ default="_settings_",
7
+ help='The name of the avatar project. It becomes https://<PROJECT_NAME>.ddev.site. Default: avatar.project from the workspace settings.')
8
+ parser.add_argument('-r', '--repo',
9
+ default="_settings_",
10
+ help='The avatar app repository to clone. Default: avatar.repo from the workspace settings.')
11
+ parser.add_argument('-b', '--branch',
12
+ default="_settings_",
13
+ help='The branch to clone. Default: avatar.branch.')
14
+ parser.add_argument('-A', '--link-agents',
15
+ action='store_true',
16
+ default=False,
17
+ help='Link the project Claude Code agents (claude/agents/*.md) into ~/.claude once it is up. They then point at THIS copy.')
18
+ parser.add_argument('-l', '--launch',
19
+ action='store_true',
20
+ default=False,
21
+ help='Open the avatar in a browser when it is ready.')
22
+ ARGEOF
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The project, product, module, theme, recipe or library to check.')
6
+ parser.add_argument('-l', '--list',
7
+ action='store_true',
8
+ default=False,
9
+ help='Print the plan — every check, the script the package declares for it, the command it would run, the package manager and where it would run — and stop. Runs nothing and needs no dependencies, so it is the fastest way to see what a package actually covers.')
10
+ parser.add_argument('-o', '--only',
11
+ default="_none_",
12
+ help='Run only these checks, comma separated. Ids: format, js, css, yaml, spelling, types, php, twig, e2e. Example: --only js,css')
13
+ parser.add_argument('-s', '--skip',
14
+ default="_none_",
15
+ help='Skip these checks, comma separated. Applied after --only. Example: --skip spelling')
16
+ parser.add_argument('-e', '--e2e',
17
+ action='store_true',
18
+ default=False,
19
+ help='Include the browser suite. Off by default: it needs a running site to point a browser at, and it takes minutes. On a site this hands over to cmd-tools-testing.sh rather than reimplementing it.')
20
+ parser.add_argument('-b', '--browser',
21
+ default="chromium",
22
+ choices=['chromium', 'firefox', 'webkit'],
23
+ help='Which browser the e2e check asks for [default %(default)s].')
24
+ parser.add_argument('-i', '--install',
25
+ action='store_true',
26
+ default=False,
27
+ help='Install the package dependencies first when they are missing. Off by default because installing runs the package own postinstall and prepare scripts, and several packages here write into a docroot from theirs.')
28
+ parser.add_argument('-r', '--runner',
29
+ default="_none_",
30
+ choices=['npm', 'yarn'],
31
+ help='Force the package manager instead of reading packageManager and the lockfiles. Needed only where a package carries both lockfiles.')
32
+ parser.add_argument('-F', '--fail-fast',
33
+ action='store_true',
34
+ default=False,
35
+ help='Stop at the first failing check. By default every check runs and the command exits once at the end, so one failure does not hide the rest.')
36
+ ARGEOF
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Arguments for cloning a project — folder and database — into a new name,
4
+ # here or in another workspace. Two shapes of clone, one command:
5
+ #
6
+ # the default a full independent copy (rsync + its own database)
7
+ # --worktree a git worktree of the same repository, sharing one .git
8
+ #
9
+ # --worktree is only offered where it can work: the source has to be a git
10
+ # checkout. Everything below it is worktree-only and says so, because a flag
11
+ # that silently does nothing is worse than one that refuses.
12
+ argparse "$@" <<EOF || exit 1
13
+ parser.add_argument('PROJECT_NAME',
14
+ help='The project to clone (a folder in this workspace).')
15
+ parser.add_argument('-t', '--to',
16
+ default="_none_",
17
+ help='The name of the clone. Required. Example: --to myproject-copy')
18
+ parser.add_argument('-w', '--target-workspace',
19
+ default="_none_",
20
+ help='Clone into this workspace instead of the current one. Example: --target-workspace sandboxes')
21
+ parser.add_argument('-g', '--worktree',
22
+ action='store_true',
23
+ help='Clone as a git worktree instead of copying the files: one shared .git, a branch per folder, its own DDEV project. Needs the source to be a git checkout.')
24
+ parser.add_argument('-b', '--branch',
25
+ default="_none_",
26
+ help='Worktree only. The branch to check out; created from the current HEAD when it does not exist. Defaults to the clone name.')
27
+ parser.add_argument('--no-build-copy',
28
+ action='store_true',
29
+ help='Worktree only. Do not copy the git-ignored build (vendor, contrib, files, settings) from the source — leaves you to run composer install yourself.')
30
+ # --extra-hostname, not --hostname: argparse assigns the dest as a shell variable
31
+ # and HOSTNAME is a bash builtin. Clobbering it inside a build script is the kind
32
+ # of thing that is found much later, in something unrelated.
33
+ parser.add_argument('-H', '--extra-hostname',
34
+ default="_none_",
35
+ help='Give the clone an extra address as well as its canonical one. A label, no dots: --extra-hostname staging becomes staging.ddev.site.')
36
+ parser.add_argument('-W', '--with-workspace-hostname',
37
+ action='store_true',
38
+ help='Give the clone <name>-<workspace> as an extra address, so which workspace it lives in is visible in one flat hostname.')
39
+ parser.add_argument('--no-db',
40
+ action='store_true',
41
+ help='Do not export and import the database. The clone starts with whatever an empty DDEV project has.')
42
+ EOF
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('-l', '--list',
5
+ action='store_true',
6
+ default=False,
7
+ help='List every cmd-*.sh in the workspace. This is also the default.')
8
+ parser.add_argument('-w', '--workspace',
9
+ default='_all_',
10
+ help='Limit --list to one workspace, or say where --new and --clone put the copy. default [ _all_ ]')
11
+ parser.add_argument('-r', '--list-remote',
12
+ action='store_true',
13
+ default=False,
14
+ help='List what the tooling repository has, and whether this machine has it, the same, or different.')
15
+ parser.add_argument('-p', '--pull',
16
+ default='_none_',
17
+ help='Bring one cmd-*.sh down from the tooling repository into the workspace folder it belongs to.')
18
+ parser.add_argument('-d', '--diff',
19
+ default='_none_',
20
+ help='Show one cmd-*.sh on this machine against the copy in the tooling repository.')
21
+ parser.add_argument('-c', '--clone',
22
+ default='_none_',
23
+ help='Copy an existing cmd-*.sh. Needs --to, and --workspace to retarget it elsewhere.')
24
+ parser.add_argument('-t', '--to',
25
+ default='_none_',
26
+ help='With --clone, the new file name (cmd-<something>.sh).')
27
+ parser.add_argument('-n', '--new',
28
+ default='_none_',
29
+ help='Scaffold a new cmd-*.sh with the bootstrap chain already correct. Needs --workspace.')
30
+ parser.add_argument('-b', '--label',
31
+ default='_none_',
32
+ help="With --new, the '# workspace-name:' header — the human name the dashboard shows.")
33
+ parser.add_argument('-S', '--sync',
34
+ action='store_true',
35
+ default=False,
36
+ help='Bring every command down from the tooling repository. Reports what would change; --confirm takes the ones this machine is missing.')
37
+ parser.add_argument('-O', '--overwrite',
38
+ action='store_true',
39
+ default=False,
40
+ help='With --sync --confirm, also replace the commands that differ. Each one is kept under backups/ first.')
41
+ parser.add_argument('-o', '--propose',
42
+ default='_none_',
43
+ help='Hand one cmd-*.sh to the AI agent to file the issue and open the PR on the tooling repository.')
44
+ parser.add_argument('-s', '--summary',
45
+ default='_none_',
46
+ help='With --propose, what the command is for. Goes into the issue and the PR.')
47
+ parser.add_argument('-y', '--confirm',
48
+ action='store_true',
49
+ default=False,
50
+ help='With --propose, actually create the issue and the PR. Without it, only the plan is printed.')
51
+ ARGEOF
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<EOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The name of the project.')
6
+ parser.add_argument('-i', '--install',
7
+ action='store_true',
8
+ default=False,
9
+ help='Add the install flag to install the project.')
10
+ parser.add_argument('-a', '--add-users',
11
+ action='store_true',
12
+ default=False,
13
+ help='Add default set of users to the project in the case of install')
14
+ parser.add_argument('-r', '--require',
15
+ default="_none_",
16
+ nargs='+',
17
+ help='Require more modules/themes/libraries by composer. Example: --require "drupal/ctools:~3.0 drupal/token:~1.0"')
18
+ parser.add_argument('-e', '--enable',
19
+ default="_none_",
20
+ nargs='+',
21
+ help='Enable modules right after the install. Example: --enable "media media_library ctools token"')
22
+ parser.add_argument('-s', '--skip-set-default-settings',
23
+ action='store_true',
24
+ default=False,
25
+ help='Skip set default settings file before starting the install')
26
+ parser.add_argument('-d', '--skip-drop-database',
27
+ action='store_true',
28
+ default=False,
29
+ help='Skip drop the database and create it again before starting the install')
30
+ parser.add_argument('-p', '--php-version',
31
+ default="",
32
+ choices=['8.5', '8.4', '8.3', '8.2', '8.1', '8.0', '7.4'],
33
+ help='PHP version for the project container. The seven most recent PHP releases DDEV supports; empty means the builder default. Example: --php-version 8.3')
34
+ EOF
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<EOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The name of the project.')
6
+ parser.add_argument('-i', '--install',
7
+ action='store_true',
8
+ default=False,
9
+ help='Add the install flag to install the project.')
10
+ parser.add_argument('-a', '--add-users',
11
+ action='store_true',
12
+ default=False,
13
+ help='Add default set of users to the project in the case of install')
14
+ parser.add_argument('-r', '--require',
15
+ default="_none_",
16
+ nargs='+',
17
+ help='Require more modules/themes/libraries by composer. Example: --require "drupal/ctools:~3.0 drupal/token:~1.0"')
18
+ parser.add_argument('-e', '--enable',
19
+ default="_none_",
20
+ nargs='+',
21
+ help='Enable modules right after the install. Example: --enable "media media_library ctools token"')
22
+ parser.add_argument('-s', '--skip-set-default-settings',
23
+ action='store_true',
24
+ default=False,
25
+ help='Skip set default settings file before starting the install')
26
+ parser.add_argument('-d', '--skip-drop-database',
27
+ action='store_true',
28
+ default=False,
29
+ help='Skip drop the database and create it again before starting the install')
30
+ EOF
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<EOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The name of the project.')
6
+ parser.add_argument('-i', '--install',
7
+ action='store_true',
8
+ default=False,
9
+ help='Add the install flag to install the project.')
10
+ parser.add_argument('-l', '--launch',
11
+ action='store_true',
12
+ default=False,
13
+ help='Open the site in a browser when it is ready.')
14
+ parser.add_argument('-d', '--dev',
15
+ action='store_true',
16
+ default=False,
17
+ help='Build the development branch instead of the latest release.')
18
+ parser.add_argument('-a', '--add-users',
19
+ action='store_true',
20
+ default=False,
21
+ help='Add default set of users to the project in the case of install')
22
+ parser.add_argument('-p', '--profile',
23
+ default="standard",
24
+ nargs='+',
25
+ choices=['standard', 'minimal', 'umami'],
26
+ help='Select which Drupal profile to install [default %(default)s]. Example: --profile minimal')
27
+ parser.add_argument('-r', '--require',
28
+ default="_none_",
29
+ nargs='+',
30
+ help='Require more modules/themes/libraries by composer. Example: --require "drupal/ctools:~3.0 drupal/token:~1.0"')
31
+ parser.add_argument('-e', '--enable',
32
+ default="_none_",
33
+ nargs='+',
34
+ help='Enable modules right after the install. Example: --enable "media media_library ctools token"')
35
+ parser.add_argument('--php-version',
36
+ default="",
37
+ choices=['8.5', '8.4', '8.3', '8.2', '8.1', '8.0', '7.4'],
38
+ help='PHP version for the project container. The seven most recent PHP releases DDEV supports; empty means the builder default, and DDEV\'s own default under that. Example: --php-version 8.3')
39
+ EOF
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<EOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The name of the project.')
6
+ parser.add_argument('-i', '--install',
7
+ action='store_true',
8
+ default=False,
9
+ help='Add the install flag to install the project.')
10
+ parser.add_argument('-a', '--add-users',
11
+ action='store_true',
12
+ default=False,
13
+ help='Add default set of users to the project in the case of install')
14
+ parser.add_argument('--php-version',
15
+ default="",
16
+ choices=['8.5', '8.4', '8.3', '8.2', '8.1', '8.0', '7.4'],
17
+ help='PHP version for the project container. The seven most recent PHP releases DDEV supports; empty means the builder default. Example: --php-version 8.3')
18
+ EOF
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The project directory in this workspace (a git clone with a .gitlab-ci.yml).')
6
+ parser.add_argument('JOB',
7
+ default='_none_',
8
+ nargs='?',
9
+ help='One job to run by name. Default: the whole pipeline.')
10
+ parser.add_argument('-l', '--list',
11
+ action='store_true',
12
+ default=False,
13
+ help='List the jobs and their stages instead of running.')
14
+ parser.add_argument('-s', '--slim',
15
+ action='store_true',
16
+ default=False,
17
+ help='Run the project\'s committed .gitlab-ci-local.yml (the reproducible subset) instead of the full pipeline.')
18
+ parser.add_argument('-v', '--variable',
19
+ default="_none_",
20
+ help='Pass one variable through, e.g. --variable DRUPAL_CORE=11.4.0')
21
+ parser.add_argument('-d', '--doctor',
22
+ action='store_true',
23
+ default=False,
24
+ help='Only check the setup: gitlab-ci-local, the drupal-ci-local wrapper, Docker, SSH to git.drupal.org.')
25
+ ARGEOF
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+
3
+ argparse "$@" <<ARGEOF || exit 1
4
+ parser.add_argument('PROJECT_NAME',
5
+ help='The name of the project to map.')
6
+ parser.add_argument('-q', '--query',
7
+ default="",
8
+ help='Ask the existing graph a question instead of rebuilding it. Example: --query "what does this controller depend on?"')
9
+ parser.add_argument('-d', '--deep',
10
+ action='store_true',
11
+ default=False,
12
+ help='Add the semantic pass over docs, PDFs and images. Needs an LLM backend and sends file contents to it. It does not link Drupal YAML to PHP classes.')
13
+ parser.add_argument('-f', '--force',
14
+ action='store_true',
15
+ default=False,
16
+ help='Skip the incremental manifest gate and the semantic cache. Unchanged files are still replayed from graphify-out/cache/ast — delete that directory for a true re-parse.')
17
+ parser.add_argument('-S', '--scope',
18
+ default="contrib",
19
+ choices=['custom', 'contrib', 'all'],
20
+ help='How much of the tree to map: custom code only, custom + contrib modules/themes/profiles, or everything including core and vendor [default %(default)s].')
21
+ parser.add_argument('-a', '--all',
22
+ action='store_true',
23
+ default=False,
24
+ help='Same as --scope all: do not skip vendor/, core/, contrib or libraries. Slow, and the graph ends up dominated by third-party code.')
25
+ parser.add_argument('-Y', '--no-yaml',
26
+ action='store_true',
27
+ default=False,
28
+ help='Do not mirror the YAML as JSON. graphify parses no YAML of its own, so on a recipe or a config-heavy module this leaves the graph empty.')
29
+ parser.add_argument('-s', '--store',
30
+ default='_none_',
31
+ help='Fetch a URL into the project\'s ./raw and fold it into the graph, so the AI can read it later. Example: --store https://www.drupal.org/node/3586390')
32
+ parser.add_argument('-x', '--exclude',
33
+ default="_none_",
34
+ nargs='+',
35
+ help='Extra paths to skip, on top of the defaults. Example: --exclude "web/modules/custom/legacy tests"')
36
+ ARGEOF