@webship.co/workspace 1.0.0-beta1 → 1.0.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +339 -0
- package/README.md +28 -364
- package/core/bin/workspace.js +135 -0
- package/core/config/settings.labels.yml +514 -0
- package/core/config/settings.template.yml +292 -0
- package/core/config/style.yml +53 -0
- package/core/config/theme.default.yml +161 -0
- package/core/config/theme.dispatch.yml +166 -0
- package/core/config/theme.drupal.yml +175 -0
- package/core/config/theme.ember.yml +160 -0
- package/core/config/theme.github.yml +172 -0
- package/core/config/theme.gitlab.yml +168 -0
- package/core/config/theme.press.yml +161 -0
- package/core/config/theme.slate.yml +160 -0
- package/core/config/theme.upsun.yml +174 -0
- package/core/docs/architecture.svg +65 -0
- package/core/docs/getting-started.md +51 -0
- package/core/docs/plugins.md +27 -0
- package/core/docs/releases.md +23 -0
- package/core/docs/testing.md +15 -0
- package/core/docs/workspaces.md +25 -0
- package/core/scripts/args/arg-ai-items.sh +65 -0
- package/core/scripts/args/arg-autostart.sh +31 -0
- package/core/scripts/args/arg-avatar-agent.sh +28 -0
- package/core/scripts/args/arg-avatar-catalog.sh +12 -0
- package/core/scripts/args/arg-avatar-character.sh +68 -0
- package/core/scripts/args/arg-avatar-voice.sh +24 -0
- package/core/scripts/args/arg-avatar.sh +22 -0
- package/core/scripts/args/arg-checks.sh +36 -0
- package/core/scripts/args/arg-clone.sh +42 -0
- package/core/scripts/args/arg-commands.sh +51 -0
- package/core/scripts/args/arg-cucumber.sh +34 -0
- package/core/scripts/args/arg-distribution.sh +30 -0
- package/core/scripts/args/arg-drupal.sh +39 -0
- package/core/scripts/args/arg-drupal_cms.sh +18 -0
- package/core/scripts/args/arg-gitlab-ci-local.sh +25 -0
- package/core/scripts/args/arg-graphify.sh +36 -0
- package/core/scripts/args/arg-graphs.sh +12 -0
- package/core/scripts/args/arg-hostnames.sh +23 -0
- package/core/scripts/args/arg-milvus-backup.sh +8 -0
- package/core/scripts/args/arg-milvus-mcp.sh +12 -0
- package/core/scripts/args/arg-milvus.sh +32 -0
- package/core/scripts/args/arg-obsidian.sh +17 -0
- package/core/scripts/args/arg-odoo.sh +18 -0
- package/core/scripts/args/arg-penpot-backup.sh +8 -0
- package/core/scripts/args/arg-penpot-mcp.sh +15 -0
- package/core/scripts/args/arg-penpot-token.sh +17 -0
- package/core/scripts/args/arg-penpot.sh +44 -0
- package/core/scripts/args/arg-rag.sh +21 -0
- package/core/scripts/args/arg-ragify.sh +35 -0
- package/core/scripts/args/arg-reclaim.sh +18 -0
- package/core/scripts/args/arg-release.sh +21 -0
- package/core/scripts/args/arg-screen.sh +28 -0
- package/core/scripts/args/arg-site-template.sh +13 -0
- package/core/scripts/args/arg-spdd.sh +16 -0
- package/core/scripts/args/arg-specs.sh +22 -0
- package/core/scripts/args/arg-storage.sh +36 -0
- package/core/scripts/args/arg-testing.sh +36 -0
- package/core/scripts/args/arg-webship.sh +34 -0
- package/core/scripts/args/arg-webships-project.sh +22 -0
- package/core/scripts/args/arg-webships-site-template.sh +17 -0
- package/core/scripts/args/arg-webships.sh +34 -0
- package/core/scripts/args/arg-website-site-template.sh +17 -0
- package/core/scripts/args/arg-website.sh +25 -0
- package/core/scripts/args/arg-wordpress.sh +18 -0
- package/core/scripts/autostart-run.sh +162 -0
- package/core/scripts/autostart-stop.sh +30 -0
- package/core/scripts/autostart-watch.sh +43 -0
- package/core/scripts/autostart.sh +26 -0
- package/core/scripts/bootstrap-functions.sh +117 -0
- package/core/scripts/bootstrap-libraries.sh +10 -0
- package/core/scripts/bootstrap.sh +71 -0
- package/core/scripts/ddev-shim/ddev +122 -0
- package/core/scripts/docker-gid.sh +119 -0
- package/core/scripts/functions/arg-site-template.sh +28 -0
- package/core/scripts/functions/fun-ai-items-lock.sh +175 -0
- package/core/scripts/functions/fun-ai-items-sources.sh +298 -0
- package/core/scripts/functions/fun-ai-items.sh +621 -0
- package/core/scripts/functions/fun-ai-providers.sh +72 -0
- package/core/scripts/functions/fun-autostart.sh +429 -0
- package/core/scripts/functions/fun-avatar.sh +441 -0
- package/core/scripts/functions/fun-backup-item.sh +50 -0
- package/core/scripts/functions/fun-build-distribution.sh +226 -0
- package/core/scripts/functions/fun-build-site-template.sh +104 -0
- package/core/scripts/functions/fun-build-webships.sh +161 -0
- package/core/scripts/functions/fun-build-website.sh +199 -0
- package/core/scripts/functions/fun-checks.sh +243 -0
- package/core/scripts/functions/fun-clone-project.sh +289 -0
- package/core/scripts/functions/fun-commands.sh +521 -0
- package/core/scripts/functions/fun-database.sh +63 -0
- package/core/scripts/functions/fun-ddev-hostnames.sh +213 -0
- package/core/scripts/functions/fun-ddev-nodejs.sh +15 -0
- package/core/scripts/functions/fun-ddev-telemetry.sh +15 -0
- package/core/scripts/functions/fun-default-settings.sh +28 -0
- package/core/scripts/functions/fun-distribution-cucumber.sh +45 -0
- package/core/scripts/functions/fun-distribution-drupal.sh +25 -0
- package/core/scripts/functions/fun-distribution-drupal_cms.sh +35 -0
- package/core/scripts/functions/fun-distribution-webship.sh +28 -0
- package/core/scripts/functions/fun-distribution-webships.sh +33 -0
- package/core/scripts/functions/fun-distribution-website.sh +19 -0
- package/core/scripts/functions/fun-drush.sh +48 -0
- package/core/scripts/functions/fun-elevenlabs.sh +179 -0
- package/core/scripts/functions/fun-files.sh +19 -0
- package/core/scripts/functions/fun-git-worktrees.sh +142 -0
- package/core/scripts/functions/fun-gitlab-ci.sh +156 -0
- package/core/scripts/functions/fun-hostnames-cli.sh +88 -0
- package/core/scripts/functions/fun-milvus.sh +584 -0
- package/core/scripts/functions/fun-odoo.sh +121 -0
- package/core/scripts/functions/fun-penpot.sh +724 -0
- package/core/scripts/functions/fun-project-name.sh +20 -0
- package/core/scripts/functions/fun-rag.sh +253 -0
- package/core/scripts/functions/fun-ragify.sh +165 -0
- package/core/scripts/functions/fun-reclaim.sh +297 -0
- package/core/scripts/functions/fun-release.sh +159 -0
- package/core/scripts/functions/fun-remove-project.sh +319 -0
- package/core/scripts/functions/fun-screen.sh +96 -0
- package/core/scripts/functions/fun-spdd.sh +676 -0
- package/core/scripts/functions/fun-specs-share.sh +237 -0
- package/core/scripts/functions/fun-storage.sh +347 -0
- package/core/scripts/functions/fun-testing.sh +329 -0
- package/core/scripts/functions/fun-users.sh +87 -0
- package/core/scripts/functions/fun-version.sh +72 -0
- package/core/scripts/functions/fun-video-edit.sh +48 -0
- package/core/scripts/functions/fun-voice.sh +45 -0
- package/core/scripts/functions/fun-wordpress.sh +59 -0
- package/core/scripts/host-mounts.sh +161 -0
- package/core/scripts/install.sh +602 -0
- package/core/scripts/libs/__pycache__/video_edit.cpython-312.pyc +0 -0
- package/core/scripts/libs/argparse.sh +93 -0
- package/core/scripts/libs/bash-yaml.sh +52 -0
- package/core/scripts/libs/checks_plan.js +312 -0
- package/core/scripts/libs/elevenlabs.py +627 -0
- package/core/scripts/libs/progress-bar.sh +19 -0
- package/core/scripts/libs/rag_index.py +446 -0
- package/core/scripts/libs/video_edit.py +636 -0
- package/core/scripts/libs/voice.py +430 -0
- package/core/scripts/plugins/jira/host-install.sh +119 -0
- package/core/scripts/plugins/jira/host-mounts.txt +2 -0
- package/core/scripts/plugins/upsun/args/arg-upsun.sh +51 -0
- package/core/scripts/plugins/upsun/functions/fun-upsun.sh +304 -0
- package/core/scripts/plugins/upsun/host-install.sh +99 -0
- package/core/scripts/plugins/upsun/host-mounts.txt +1 -0
- package/core/scripts/plugins/upsun/upsun-ai.sh +133 -0
- package/core/scripts/plugins.sh +152 -0
- package/core/scripts/release.sh +69 -0
- package/core/scripts/storage.sh +39 -0
- package/core/scripts/sync-tooling.sh +246 -0
- package/core/scripts/tests/cmd-smoke-test.sh +109 -0
- package/core/scripts/trust-https.sh +257 -0
- package/core/workspace-app/.ddev/commands/web/test-dashboard +49 -0
- package/core/workspace-app/.ddev/config.yaml +400 -0
- package/core/workspace-app/.ddev/docker-compose.dood.yaml +45 -0
- package/core/workspace-app/.ddev/docker-compose.plugin-jira-twg.yaml +26 -0
- package/core/workspace-app/.ddev/docker-compose.plugin-upsun-upsun-cli.yaml +8 -0
- package/core/workspace-app/.ddev/docker-compose.screens.yaml +15 -0
- package/core/workspace-app/.ddev/nginx_full/nginx-site.conf +114 -0
- package/core/workspace-app/.ddev/web-build/Dockerfile.workspace-app +203 -0
- package/core/workspace-app/.ddev/web-build/ddev-shim-ddev +122 -0
- package/core/workspace-app/README.md +380 -0
- package/{actions → core/workspace-app/actions}/ddev.js +0 -1
- package/{actions → core/workspace-app/actions}/rag.js +0 -1
- package/{actions → core/workspace-app/actions}/testing.js +0 -1
- package/{assistant.js → core/workspace-app/assistant.js} +1 -10
- package/{git-info.js → core/workspace-app/git-info.js} +17 -1
- package/core/workspace-app/package.json +29 -0
- package/core/workspace-app/plugin-catalog.js +50 -0
- package/{plugins-page.js → core/workspace-app/plugins-page.js} +28 -2
- package/{server.js → core/workspace-app/server.js} +18 -0
- package/core/workspace-app/tests/features/actions-rail.feature +44 -0
- package/core/workspace-app/tests/features/ai-items.feature +23 -0
- package/core/workspace-app/tests/features/assistant-speech.feature +63 -0
- package/core/workspace-app/tests/features/checks.feature +39 -0
- package/core/workspace-app/tests/features/clone-project.feature +30 -0
- package/core/workspace-app/tests/features/command-authoring.feature +58 -0
- package/core/workspace-app/tests/features/dashboard.feature +57 -0
- package/core/workspace-app/tests/features/menus.feature +29 -0
- package/core/workspace-app/tests/features/plugins/jira/jira.feature +47 -0
- package/core/workspace-app/tests/features/plugins.feature +20 -0
- package/core/workspace-app/tests/features/project-actions.feature +40 -0
- package/core/workspace-app/tests/features/screens.feature +29 -0
- package/core/workspace-app/tests/features/settings.feature +46 -0
- package/core/workspace-app/tests/features/test-reports.feature +32 -0
- package/core/workspace-app/tests/features/theme.feature +40 -0
- package/core/workspace-app/tests/step-definitions/actions-post.steps.js +25 -0
- package/core/workspace-app/tests/step-definitions/assistant-speech.steps.js +152 -0
- package/core/workspace-app/tests/step-definitions/preconditions.steps.js +100 -0
- package/core/workspace-app/tests/unit/_isolated-config.js +31 -0
- package/core/workspace-app/tests/unit/accessibility.test.js +124 -0
- package/core/workspace-app/tests/unit/actions-rail-ux.test.js +56 -0
- package/core/workspace-app/tests/unit/actions-rail.test.js +51 -0
- package/core/workspace-app/tests/unit/ai-inventory.test.js +64 -0
- package/core/workspace-app/tests/unit/app-docs.test.js +64 -0
- package/core/workspace-app/tests/unit/assistant-avatar.test.js +110 -0
- package/core/workspace-app/tests/unit/assistant-cast.test.js +105 -0
- package/core/workspace-app/tests/unit/assistant-send-animation.test.js +15 -0
- package/core/workspace-app/tests/unit/assistant-suggestions.test.js +112 -0
- package/core/workspace-app/tests/unit/assistant-switches.test.js +53 -0
- package/core/workspace-app/tests/unit/assistant-views.test.js +146 -0
- package/core/workspace-app/tests/unit/assistant-working-indicator.test.js +49 -0
- package/core/workspace-app/tests/unit/assistant.test.js +61 -0
- package/core/workspace-app/tests/unit/audio-player.test.js +147 -0
- package/core/workspace-app/tests/unit/audio-voice.test.js +634 -0
- package/core/workspace-app/tests/unit/auth-google.test.js +180 -0
- package/core/workspace-app/tests/unit/autostart-watch.test.js +76 -0
- package/core/workspace-app/tests/unit/browsers.test.js +76 -0
- package/core/workspace-app/tests/unit/build-distribution.test.js +125 -0
- package/core/workspace-app/tests/unit/build-order.test.js +153 -0
- package/core/workspace-app/tests/unit/builder-args.test.js +113 -0
- package/core/workspace-app/tests/unit/builders.test.js +158 -0
- package/core/workspace-app/tests/unit/card-state-toggle.test.js +29 -0
- package/core/workspace-app/tests/unit/changelog.test.js +177 -0
- package/core/workspace-app/tests/unit/chat-thread.test.js +92 -0
- package/core/workspace-app/tests/unit/checks-plan.test.js +205 -0
- package/core/workspace-app/tests/unit/claude-args.test.js +182 -0
- package/core/workspace-app/tests/unit/claude-code-here.test.js +15 -0
- package/core/workspace-app/tests/unit/claude-resume.test.js +147 -0
- package/core/workspace-app/tests/unit/claude-screen-options.test.js +84 -0
- package/core/workspace-app/tests/unit/claude-session.test.js +41 -0
- package/core/workspace-app/tests/unit/command-flags.test.js +45 -0
- package/core/workspace-app/tests/unit/command-palette.test.js +105 -0
- package/core/workspace-app/tests/unit/commands-center.test.js +338 -0
- package/core/workspace-app/tests/unit/composer-menu.test.js +187 -0
- package/core/workspace-app/tests/unit/config-yaml.test.js +116 -0
- package/core/workspace-app/tests/unit/confirm-dialog.test.js +69 -0
- package/core/workspace-app/tests/unit/create-card.test.js +85 -0
- package/core/workspace-app/tests/unit/ddev-addons.test.js +144 -0
- package/core/workspace-app/tests/unit/ddev-auth-ssh.test.js +40 -0
- package/core/workspace-app/tests/unit/ddev-custom-commands.test.js +56 -0
- package/core/workspace-app/tests/unit/ddev-diagnose.test.js +57 -0
- package/core/workspace-app/tests/unit/ddev-domains.test.js +153 -0
- package/core/workspace-app/tests/unit/ddev-hostnames.test.js +143 -0
- package/core/workspace-app/tests/unit/ddev-import.test.js +82 -0
- package/core/workspace-app/tests/unit/ddev-mail.test.js +135 -0
- package/core/workspace-app/tests/unit/ddev-menu-and-create.test.js +28 -0
- package/core/workspace-app/tests/unit/ddev-mutagen.test.js +37 -0
- package/core/workspace-app/tests/unit/ddev-options.test.js +51 -0
- package/core/workspace-app/tests/unit/ddev-share.test.js +40 -0
- package/core/workspace-app/tests/unit/ddev-shim.test.js +57 -0
- package/core/workspace-app/tests/unit/ddev-snapshots.test.js +142 -0
- package/core/workspace-app/tests/unit/ddev-start-daemons.test.js +62 -0
- package/core/workspace-app/tests/unit/ddev-xdebug.test.js +41 -0
- package/core/workspace-app/tests/unit/deep-chat-origin.test.js +38 -0
- package/core/workspace-app/tests/unit/density.test.js +52 -0
- package/core/workspace-app/tests/unit/elevenlabs.test.js +453 -0
- package/core/workspace-app/tests/unit/event-log.test.js +102 -0
- package/core/workspace-app/tests/unit/favicon.test.js +68 -0
- package/core/workspace-app/tests/unit/files-browser.test.js +224 -0
- package/core/workspace-app/tests/unit/git-info.test.js +26 -0
- package/core/workspace-app/tests/unit/grid-and-list.test.js +103 -0
- package/core/workspace-app/tests/unit/host-tool-wrapper.test.js +18 -0
- package/core/workspace-app/tests/unit/html-patterns.test.js +51 -0
- package/core/workspace-app/tests/unit/ide-infra.test.js +28 -0
- package/core/workspace-app/tests/unit/images-ai.test.js +201 -0
- package/core/workspace-app/tests/unit/images-create.test.js +59 -0
- package/core/workspace-app/tests/unit/images-providers.test.js +248 -0
- package/core/workspace-app/tests/unit/images-svg.test.js +213 -0
- package/core/workspace-app/tests/unit/images-workspace.test.js +144 -0
- package/core/workspace-app/tests/unit/jobs-fragment.test.js +66 -0
- package/core/workspace-app/tests/unit/media-ux.test.js +164 -0
- package/core/workspace-app/tests/unit/modal-fit.test.js +87 -0
- package/core/workspace-app/tests/unit/modules-load.test.js +23 -0
- package/core/workspace-app/tests/unit/narration.test.js +186 -0
- package/core/workspace-app/tests/unit/navigation-editor.test.js +260 -0
- package/core/workspace-app/tests/unit/navigation.test.js +254 -0
- package/core/workspace-app/tests/unit/new-folder.test.js +121 -0
- package/core/workspace-app/tests/unit/new-screen-form.test.js +149 -0
- package/core/workspace-app/tests/unit/node-menu.test.js +161 -0
- package/core/workspace-app/tests/unit/notes.test.js +128 -0
- package/core/workspace-app/tests/unit/page-structure.test.js +40 -0
- package/core/workspace-app/tests/unit/page-width.test.js +59 -0
- package/core/workspace-app/tests/unit/php-version.test.js +90 -0
- package/core/workspace-app/tests/unit/plan-card.test.js +44 -0
- package/core/workspace-app/tests/unit/plugin-catalog.test.js +31 -0
- package/core/workspace-app/tests/unit/plugin-system.test.js +251 -0
- package/core/workspace-app/tests/unit/plugins-page.test.js +28 -0
- package/core/workspace-app/tests/unit/plugins.test.js +58 -0
- package/core/workspace-app/tests/unit/project-activity-filter.test.js +180 -0
- package/core/workspace-app/tests/unit/project-make.test.js +143 -0
- package/core/workspace-app/tests/unit/project-name.test.js +202 -0
- package/core/workspace-app/tests/unit/reader.test.js +62 -0
- package/core/workspace-app/tests/unit/release.test.js +92 -0
- package/core/workspace-app/tests/unit/remove-confirm.test.js +37 -0
- package/core/workspace-app/tests/unit/report-pdf.test.js +171 -0
- package/core/workspace-app/tests/unit/round-11.test.js +31 -0
- package/core/workspace-app/tests/unit/round-12.test.js +37 -0
- package/core/workspace-app/tests/unit/row-layout.test.js +585 -0
- package/core/workspace-app/tests/unit/row-menus-fold.test.js +29 -0
- package/core/workspace-app/tests/unit/rows-add-modal.test.js +68 -0
- package/core/workspace-app/tests/unit/screen-runner-queue.test.js +41 -0
- package/core/workspace-app/tests/unit/screen-window.test.js +116 -0
- package/core/workspace-app/tests/unit/screens-beside-running.test.js +19 -0
- package/core/workspace-app/tests/unit/screens-columns.test.js +79 -0
- package/core/workspace-app/tests/unit/screens-menu.test.js +84 -0
- package/core/workspace-app/tests/unit/screens-modal-overlay.test.js +14 -0
- package/core/workspace-app/tests/unit/screens-waiting.test.js +129 -0
- package/core/workspace-app/tests/unit/screens.test.js +74 -0
- package/core/workspace-app/tests/unit/second-storage.test.js +218 -0
- package/core/workspace-app/tests/unit/session-name.test.js +64 -0
- package/core/workspace-app/tests/unit/settings-file.test.js +173 -0
- package/core/workspace-app/tests/unit/settings-nested-list.test.js +54 -0
- package/core/workspace-app/tests/unit/settings-raw.test.js +177 -0
- package/core/workspace-app/tests/unit/shared-prefs.test.js +49 -0
- package/core/workspace-app/tests/unit/speech.test.js +290 -0
- package/core/workspace-app/tests/unit/static-caching.test.js +39 -0
- package/core/workspace-app/tests/unit/status-language.test.js +47 -0
- package/core/workspace-app/tests/unit/tab-modal.test.js +69 -0
- package/core/workspace-app/tests/unit/tab-title.test.js +37 -0
- package/core/workspace-app/tests/unit/template-literals.test.js +52 -0
- package/core/workspace-app/tests/unit/terminal-scrollback.test.js +61 -0
- package/core/workspace-app/tests/unit/terminal-size.test.js +103 -0
- package/core/workspace-app/tests/unit/terminal-style.test.js +84 -0
- package/core/workspace-app/tests/unit/terminal-windows.test.js +154 -0
- package/core/workspace-app/tests/unit/themes.test.js +453 -0
- package/core/workspace-app/tests/unit/tool-labels.test.js +34 -0
- package/core/workspace-app/tests/unit/topbar-icons.test.js +47 -0
- package/core/workspace-app/tests/unit/update-docker-gid.test.js +51 -0
- package/core/workspace-app/tests/unit/user-guide.test.js +60 -0
- package/core/workspace-app/tests/unit/version-check.test.js +98 -0
- package/core/workspace-app/tests/unit/version-link.test.js +50 -0
- package/core/workspace-app/tests/unit/video-borrow.test.js +198 -0
- package/core/workspace-app/tests/unit/video-edit-ask.test.js +93 -0
- package/core/workspace-app/tests/unit/video-edit-short.test.js +42 -0
- package/core/workspace-app/tests/unit/video-edit.test.js +417 -0
- package/core/workspace-app/tests/unit/video-transcript.test.js +237 -0
- package/core/workspace-app/tests/unit/waiting.test.js +48 -0
- package/core/workspace-app/tests/unit/wordpress-odoo-builders.test.js +38 -0
- package/core/workspace-app/tests/unit/workspace-bin.test.js +48 -0
- package/core/workspace-app/tests/unit/workspace-card-tools.test.js +30 -0
- package/core/workspace-app/tests/unit/workspace-delete.test.js +77 -0
- package/core/workspace-app/tests/unit/workspace-types.test.js +68 -0
- package/core/workspace-app/tests/unit/worktree-clone.test.js +250 -0
- package/package.json +38 -36
- /package/{PLUGINS.md → core/workspace-app/PLUGINS.md} +0 -0
- /package/{WORKSPACES.md → core/workspace-app/WORKSPACES.md} +0 -0
- /package/{actions → core/workspace-app/actions}/ai-items.js +0 -0
- /package/{actions → core/workspace-app/actions}/audio.js +0 -0
- /package/{actions → core/workspace-app/actions}/build-order.js +0 -0
- /package/{actions → core/workspace-app/actions}/checks.js +0 -0
- /package/{actions → core/workspace-app/actions}/claude-session.js +0 -0
- /package/{actions → core/workspace-app/actions}/commands-center.js +0 -0
- /package/{actions → core/workspace-app/actions}/composer.js +0 -0
- /package/{actions → core/workspace-app/actions}/ddev-addons.js +0 -0
- /package/{actions → core/workspace-app/actions}/ddev-mail.js +0 -0
- /package/{actions → core/workspace-app/actions}/folders.js +0 -0
- /package/{actions → core/workspace-app/actions}/images-svg.js +0 -0
- /package/{actions → core/workspace-app/actions}/images.js +0 -0
- /package/{actions → core/workspace-app/actions}/navigation.js +0 -0
- /package/{actions → core/workspace-app/actions}/node.js +0 -0
- /package/{actions → core/workspace-app/actions}/notes.js +0 -0
- /package/{actions → core/workspace-app/actions}/plugins.js +0 -0
- /package/{actions → core/workspace-app/actions}/project-make.js +0 -0
- /package/{actions → core/workspace-app/actions}/row-actions.js +0 -0
- /package/{actions → core/workspace-app/actions}/screens.js +0 -0
- /package/{actions → core/workspace-app/actions}/video-edit.js +0 -0
- /package/{ai-inventory.js → core/workspace-app/ai-inventory.js} +0 -0
- /package/{ai-items.js → core/workspace-app/ai-items.js} +0 -0
- /package/{assistant-cast.js → core/workspace-app/assistant-cast.js} +0 -0
- /package/{assistant-suggestions.js → core/workspace-app/assistant-suggestions.js} +0 -0
- /package/{audio-voice.js → core/workspace-app/audio-voice.js} +0 -0
- /package/{auth-google.js → core/workspace-app/auth-google.js} +0 -0
- /package/{build-ai.js → core/workspace-app/build-ai.js} +0 -0
- /package/{build-order-page.js → core/workspace-app/build-order-page.js} +0 -0
- /package/{build-order.js → core/workspace-app/build-order.js} +0 -0
- /package/{builder-args.js → core/workspace-app/builder-args.js} +0 -0
- /package/{changelog.js → core/workspace-app/changelog.js} +0 -0
- /package/{chat-threads.js → core/workspace-app/chat-threads.js} +0 -0
- /package/{checks.js → core/workspace-app/checks.js} +0 -0
- /package/{claude-args.js → core/workspace-app/claude-args.js} +0 -0
- /package/{claude-sessions.js → core/workspace-app/claude-sessions.js} +0 -0
- /package/{command-author.js → core/workspace-app/command-author.js} +0 -0
- /package/{command-block.js → core/workspace-app/command-block.js} +0 -0
- /package/{commands → core/workspace-app/commands}/defaults.yml +0 -0
- /package/{commands-page.js → core/workspace-app/commands-page.js} +0 -0
- /package/{commands.js → core/workspace-app/commands.js} +0 -0
- /package/{cucumber.js → core/workspace-app/cucumber.js} +0 -0
- /package/{ddev-addons-page.js → core/workspace-app/ddev-addons-page.js} +0 -0
- /package/{ddev-addons.js → core/workspace-app/ddev-addons.js} +0 -0
- /package/{ddev-custom-commands.js → core/workspace-app/ddev-custom-commands.js} +0 -0
- /package/{ddev-domains.js → core/workspace-app/ddev-domains.js} +0 -0
- /package/{ddev-import.js → core/workspace-app/ddev-import.js} +0 -0
- /package/{ddev-mail-page.js → core/workspace-app/ddev-mail-page.js} +0 -0
- /package/{ddev-mail.js → core/workspace-app/ddev-mail.js} +0 -0
- /package/{ddev-options.js → core/workspace-app/ddev-options.js} +0 -0
- /package/{ddev-snapshots.js → core/workspace-app/ddev-snapshots.js} +0 -0
- /package/{ddev.js → core/workspace-app/ddev.js} +0 -0
- /package/{docs → core/workspace-app/docs}/DEVELOPER-GUIDE.md +0 -0
- /package/{docs → core/workspace-app/docs}/README.md +0 -0
- /package/{docs → core/workspace-app/docs}/REFERENCE.md +0 -0
- /package/{docs → core/workspace-app/docs}/USER-GUIDE.md +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-board.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-coffee.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-colours.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-icons.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-moves.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-pick-cookieman.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-settings-voices.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/assistant/avatar-status.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/create-card/create-card.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/create-card/start-ai.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-address.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-off.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-clone-worktree-on.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-ddev-menu.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-domains.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-home.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-ide-menu.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-remove-refusal.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-rows-worktree.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-screens.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-settings.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/guide-workspace-page.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/home/card-settings.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/home/drag-reorder.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/home/edit-card.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/claude-code-image.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/edit-with-ai.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/gallery.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/generate-description.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/generate-plan.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/providers.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/svg-form.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/svg-result.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/images/upload.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/new-folder/2-form.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/new-folder/8-ddev-options.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/new-folder/files-folder.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/projects/ddev-custom-commands.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/projects/state-chip-stop.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dashboard-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/dev-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/docs-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/ai.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/code.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/docs.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/services.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/icons/sites.svg +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-report-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-scenarios.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/test-steps.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-dark.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/readme/videos-light.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/screens-menu.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/screens-new.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/auth-google-lists.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-1-row.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-2-confirm.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-3-type-name.png +0 -0
- /package/{docs → core/workspace-app/docs}/screenshots/settings/delete-4-type-yes.png +0 -0
- /package/{event-log.js → core/workspace-app/event-log.js} +0 -0
- /package/{files-browser.js → core/workspace-app/files-browser.js} +0 -0
- /package/{folders.js → core/workspace-app/folders.js} +0 -0
- /package/{format.js → core/workspace-app/format.js} +0 -0
- /package/{github-auth.js → core/workspace-app/github-auth.js} +0 -0
- /package/{html.js → core/workspace-app/html.js} +0 -0
- /package/{icons.js → core/workspace-app/icons.js} +0 -0
- /package/{images-ai.js → core/workspace-app/images-ai.js} +0 -0
- /package/{images-create.js → core/workspace-app/images-create.js} +0 -0
- /package/{images-page.js → core/workspace-app/images-page.js} +0 -0
- /package/{images-records.js → core/workspace-app/images-records.js} +0 -0
- /package/{images-render.js → core/workspace-app/images-render.js} +0 -0
- /package/{images-svg-core.js → core/workspace-app/images-svg-core.js} +0 -0
- /package/{images-svg-sanitize.js → core/workspace-app/images-svg-sanitize.js} +0 -0
- /package/{images-svg.js → core/workspace-app/images-svg.js} +0 -0
- /package/{images.js → core/workspace-app/images.js} +0 -0
- /package/{jobs.js → core/workspace-app/jobs.js} +0 -0
- /package/{linger.js → core/workspace-app/linger.js} +0 -0
- /package/{lists.js → core/workspace-app/lists.js} +0 -0
- /package/{media-info.js → core/workspace-app/media-info.js} +0 -0
- /package/{navigation-page.js → core/workspace-app/navigation-page.js} +0 -0
- /package/{navigation.js → core/workspace-app/navigation.js} +0 -0
- /package/{notes.js → core/workspace-app/notes.js} +0 -0
- /package/{palette-index.js → core/workspace-app/palette-index.js} +0 -0
- /package/{playwright.config.js → core/workspace-app/playwright.config.js} +0 -0
- /package/{plugin-install.js → core/workspace-app/plugin-install.js} +0 -0
- /package/{plugin-loader.js → core/workspace-app/plugin-loader.js} +0 -0
- /package/{plugin-manifest.js → core/workspace-app/plugin-manifest.js} +0 -0
- /package/{plugin-settings.js → core/workspace-app/plugin-settings.js} +0 -0
- /package/{plugins → core/workspace-app/plugins}/workspace-notes/index.js +0 -0
- /package/{project-make.js → core/workspace-app/project-make.js} +0 -0
- /package/{project-name.js → core/workspace-app/project-name.js} +0 -0
- /package/{public → core/workspace-app/public}/assistant-avatar-moves.js +0 -0
- /package/{public → core/workspace-app/public}/assistant-avatar-ui.js +0 -0
- /package/{public → core/workspace-app/public}/assistant-avatar.js +0 -0
- /package/{public → core/workspace-app/public}/avatar/druplicon.vrm +0 -0
- /package/{public → core/workspace-app/public}/css/base.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/ai-assistant.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/assistant-avatar.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/assistant-views.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/build-order.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/clone-as-a-git-worktree.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/command-palette.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/commands-center.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/confirm-dialog.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/create-card.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/ddev-menu.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/deep-chat.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/density.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/floating-assistant-workspace-pages.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/folders.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/full-height-left-assistant-sidebar-all-pages.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/full-height-right-actions-rail-pages-that-have-actions.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/grid-and-list.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/help-page.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/hero.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/images.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/layout-rhythm-and-spacing-polish.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/mic-on-any-field-that-wants-typing.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/modal-fit.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/page-width.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/plugins-page.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/project-cards.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/project-rows.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/reordering-the-workspace-cards.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/responsive-home-and-the-workspace-pages.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/running-commands-as-toasts.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/settings-editor-core-config-yml.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/short-results-as-a-toast-at-the-top.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/sound-player.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/suggest-agents-skills-commands.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/tab-modal.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/terminals.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/test-report-media-one-file-per-row-paged.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/top-toolbar-logo-breadcrumb.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/video-edit.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/web-ide-open-with.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/working-indicators.css +0 -0
- /package/{public → core/workspace-app/public}/css/components/workspace-cards.css +0 -0
- /package/{public → core/workspace-app/public}/favicon.ico +0 -0
- /package/{public → core/workspace-app/public}/favicon.png +0 -0
- /package/{public → core/workspace-app/public}/htmx.min.js +0 -0
- /package/{public → core/workspace-app/public}/logo.png +0 -0
- /package/{public → core/workspace-app/public}/media-player.js +0 -0
- /package/{public → core/workspace-app/public}/mic.js +0 -0
- /package/{public → core/workspace-app/public}/narration.js +0 -0
- /package/{public → core/workspace-app/public}/palette.js +0 -0
- /package/{public → core/workspace-app/public}/sortable.js +0 -0
- /package/{public → core/workspace-app/public}/suggest.js +0 -0
- /package/{public → core/workspace-app/public}/terminal.js +0 -0
- /package/{public → core/workspace-app/public}/themes/default/theme.css +0 -0
- /package/{public → core/workspace-app/public}/themes/ember/theme.css +0 -0
- /package/{public → core/workspace-app/public}/themes/press/theme.css +0 -0
- /package/{public → core/workspace-app/public}/themes/slate/theme.css +0 -0
- /package/{public → core/workspace-app/public}/touch-icon.png +0 -0
- /package/{public → core/workspace-app/public}/ui.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/ace.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/ext-language_tools.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/ext-searchbox.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-css.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-html.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-javascript.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-markdown.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-sh.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/mode-yaml.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/theme-textmate.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/theme-tomorrow_night.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/ace/worker-yaml.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/deep-chat.LICENSE +0 -0
- /package/{public → core/workspace-app/public}/vendor/deep-chat.bundle.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-italic.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/dm-serif-text-latin-400-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-italic.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-400-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-italic.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/figtree-latin-600-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/fonts/ubuntu-mono-latin-wght-normal.woff2 +0 -0
- /package/{public → core/workspace-app/public}/vendor/tabler-LICENSE.txt +0 -0
- /package/{public → core/workspace-app/public}/vendor/tabler-sprite.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/LICENSE +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/addons/loaders/GLTFLoader.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/addons/utils/BufferGeometryUtils.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/addons/utils/SkeletonUtils.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/three.core.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three/three.module.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/three-vrm/LICENSE +0 -0
- /package/{public → core/workspace-app/public}/vendor/three-vrm/three-vrm.module.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/uikit-icons.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/uikit.min.css +0 -0
- /package/{public → core/workspace-app/public}/vendor/uikit.min.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/bookmark-outlined.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/headset.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/menu.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/pause.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/play.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/share.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-off.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/sound-on.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/webship-icons/ui/stop.svg +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/addon-fit.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/addon-unicode11.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/addon-web-links.js +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/xterm.css +0 -0
- /package/{public → core/workspace-app/public}/vendor/xterm/xterm.js +0 -0
- /package/{rag.js → core/workspace-app/rag.js} +0 -0
- /package/{reader.js → core/workspace-app/reader.js} +0 -0
- /package/{repo-blobs.js → core/workspace-app/repo-blobs.js} +0 -0
- /package/{report-pdf.js → core/workspace-app/report-pdf.js} +0 -0
- /package/{row-layout.js → core/workspace-app/row-layout.js} +0 -0
- /package/{screenrc → core/workspace-app/screenrc} +0 -0
- /package/{screens.js → core/workspace-app/screens.js} +0 -0
- /package/{scripts → core/workspace-app/scripts}/code-server-start.sh +0 -0
- /package/{scripts → core/workspace-app/scripts}/images-claude-finish.js +0 -0
- /package/{scripts → core/workspace-app/scripts}/screen-host.sh +0 -0
- /package/{scripts → core/workspace-app/scripts}/screen-runner.js +0 -0
- /package/{scripts → core/workspace-app/scripts}/screen-then.js +0 -0
- /package/{scripts → core/workspace-app/scripts}/update.sh +0 -0
- /package/{settings-file.js → core/workspace-app/settings-file.js} +0 -0
- /package/{speech.js → core/workspace-app/speech.js} +0 -0
- /package/{tab-modal.js → core/workspace-app/tab-modal.js} +0 -0
- /package/{test-reports.js → core/workspace-app/test-reports.js} +0 -0
- /package/{themes.js → core/workspace-app/themes.js} +0 -0
- /package/{transcripts.js → core/workspace-app/transcripts.js} +0 -0
- /package/{urls.js → core/workspace-app/urls.js} +0 -0
- /package/{validate.js → core/workspace-app/validate.js} +0 -0
- /package/{version-check.js → core/workspace-app/version-check.js} +0 -0
- /package/{video-edit.js → core/workspace-app/video-edit.js} +0 -0
- /package/{waiting.js → core/workspace-app/waiting.js} +0 -0
- /package/{workspace-card-tools.js → core/workspace-app/workspace-card-tools.js} +0 -0
- /package/{workspace-delete.js → core/workspace-app/workspace-delete.js} +0 -0
- /package/{workspace-types.js → core/workspace-app/workspace-types.js} +0 -0
- /package/{workspaces.js → core/workspace-app/workspaces.js} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# The one place a project name gets cleaned up, called from every cmd-*.sh that takes one.
|
|
4
|
+
#
|
|
5
|
+
# A directory name copy-pasted or tab-completed carries a trailing slash more often than not —
|
|
6
|
+
# `cd dev/v11x00b1<TAB>` appends one, and so does copying a name straight out of a directory
|
|
7
|
+
# listing. That slash is never part of the project name, only of how it arrived, so every command
|
|
8
|
+
# that takes PROJECT_NAME as its positional trims it before using it anywhere.
|
|
9
|
+
#
|
|
10
|
+
# One real implementation rather than the same trim (and the same explanation) pasted into 42
|
|
11
|
+
# files: each command still calls it explicitly, right after its own `shift $#;`, because
|
|
12
|
+
# PROJECT_NAME does not exist until that command's own argparse has run — bootstrap.sh loads this
|
|
13
|
+
# function before that, but cannot act on a variable nothing has set yet.
|
|
14
|
+
function trim_project_name() {
|
|
15
|
+
if [ "$#" -gt 0 ] ; then
|
|
16
|
+
printf '%s' "${1%/}" ;
|
|
17
|
+
else
|
|
18
|
+
PROJECT_NAME="${PROJECT_NAME%/}" ;
|
|
19
|
+
fi
|
|
20
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# The rag workspace: the Milvus vector database that holds every project's RAG index, and the
|
|
4
|
+
# commands that read it.
|
|
5
|
+
#
|
|
6
|
+
# The split mirrors graphs/: cmd-tools-ragify.sh (in each project's own workspace folder) BUILDS
|
|
7
|
+
# an index, and this command is what you do with it afterwards — list, inspect, search, drop, and
|
|
8
|
+
# hand it to the Claude Code CLI over MCP.
|
|
9
|
+
#
|
|
10
|
+
# Unlike a graph, an index is not a file: it is rows inside Milvus. So there is nothing to move
|
|
11
|
+
# out of the project and nothing to keep in the folder — `rag/` holds the database instance
|
|
12
|
+
# itself, and the collections live in it.
|
|
13
|
+
|
|
14
|
+
# pymilvus 2.6.x is the client for a Milvus 2.6.x server. Pinned below 3: pymilvus 3.x tracks the
|
|
15
|
+
# Milvus 3.0 line released on 2026-07-29, and pairing a 3.x client with the 2.6 server this
|
|
16
|
+
# workspace installs by default is exactly the combination that fails at connect time rather than
|
|
17
|
+
# at install time.
|
|
18
|
+
RAG_PYMILVUS="pymilvus>=2.6,<3";
|
|
19
|
+
RAG_OPENAI="openai>=1.40";
|
|
20
|
+
|
|
21
|
+
# Run the Python worker (core/scripts/libs/rag_index.py).
|
|
22
|
+
#
|
|
23
|
+
# Through `uv run --with`, not an installed tool: the dependency set is resolved and cached by uv,
|
|
24
|
+
# so there is no venv of ours to create, no PATH entry to add and nothing to keep in sync with the
|
|
25
|
+
# rest of the workspace. The OpenAI client is only pulled in when a run actually asks for dense
|
|
26
|
+
# embeddings.
|
|
27
|
+
function rag_python() {
|
|
28
|
+
local extra="";
|
|
29
|
+
case " $* " in
|
|
30
|
+
*" --embedding openai "*|*" --openai-key "*) extra="--with ${RAG_OPENAI}" ;;
|
|
31
|
+
esac
|
|
32
|
+
# shellcheck disable=SC2086
|
|
33
|
+
uv run --quiet --with "${RAG_PYMILVUS}" ${extra} \
|
|
34
|
+
python3 "${WORKSPACE_SCRIPTS}/libs/rag_index.py" "$@" ;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Which Milvus instance a project's index lives in.
|
|
38
|
+
#
|
|
39
|
+
# One shared instance is the default, and that is right for almost everything: a collection is
|
|
40
|
+
# already an isolation boundary, and a second Milvus is another etcd, another MinIO and another
|
|
41
|
+
# ~2 GB of containers. A project can still be BOUND to its own — a client engagement whose vectors
|
|
42
|
+
# must be backed up and handed over on their own, or one that needs a different Milvus version.
|
|
43
|
+
#
|
|
44
|
+
# The binding lives here, not in the project, for the same reason a graph does not: half the
|
|
45
|
+
# projects worth indexing are repositories we ship, and a repo must not gain a file because
|
|
46
|
+
# somebody indexed it. One line per bound project; anything unbound simply is not in the file.
|
|
47
|
+
RAG_BINDINGS_FILE="${WORKSPACE_ROOT}/rag/bindings.yml";
|
|
48
|
+
|
|
49
|
+
function rag_binding_get() {
|
|
50
|
+
local workspace="$1" project="$2";
|
|
51
|
+
[ -f "${RAG_BINDINGS_FILE}" ] || return 0 ;
|
|
52
|
+
sed -n "s|^${workspace}/${project}:[[:space:]]*\([A-Za-z0-9_-]\+\)[[:space:]]*$|\1|p" "${RAG_BINDINGS_FILE}" | head -1 ;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function rag_binding_set() {
|
|
56
|
+
local workspace="$1" project="$2" instance="$3" tmp;
|
|
57
|
+
mkdir -p "$(dirname "${RAG_BINDINGS_FILE}")" ;
|
|
58
|
+
if [ ! -f "${RAG_BINDINGS_FILE}" ] ; then
|
|
59
|
+
cat > "${RAG_BINDINGS_FILE}" <<'HEADEREOF'
|
|
60
|
+
# Which Milvus instance holds each project's RAG index.
|
|
61
|
+
#
|
|
62
|
+
# Written by cmd-tools-ragify.sh --milvus <instance> and by the dashboard's RAG menu. A project
|
|
63
|
+
# that is not listed here uses milvus.project from core/config/workspace.rag.settings.yml.
|
|
64
|
+
#
|
|
65
|
+
# Machine-local state, like the graphs store: it describes what is built on THIS machine.
|
|
66
|
+
HEADEREOF
|
|
67
|
+
fi
|
|
68
|
+
tmp="$(mktemp)";
|
|
69
|
+
grep -v "^${workspace}/${project}:" "${RAG_BINDINGS_FILE}" > "${tmp}" 2>/dev/null ;
|
|
70
|
+
if [ -n "${instance}" ] ; then
|
|
71
|
+
printf '%s/%s: %s\n' "${workspace}" "${project}" "${instance}" >> "${tmp}" ;
|
|
72
|
+
fi
|
|
73
|
+
mv "${tmp}" "${RAG_BINDINGS_FILE}" ;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
# The instance a command should talk to: an explicit argument, then the binding, then the default.
|
|
77
|
+
function rag_resolve_instance() {
|
|
78
|
+
local workspace="$1" project="$2" given="$3" bound;
|
|
79
|
+
if [ -n "${given}" ] && [ "${given}" != '_settings_' ] ; then
|
|
80
|
+
printf '%s' "${given}" ; return 0 ;
|
|
81
|
+
fi
|
|
82
|
+
bound="$(rag_binding_get "${workspace}" "${project}")";
|
|
83
|
+
if [ -n "${bound}" ] ; then printf '%s' "${bound}" ; return 0 ; fi
|
|
84
|
+
printf '%s' "$(milvus_resolve_project '_settings_')";
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Every Milvus instance built in the rag workspace: a directory with the compose file this
|
|
88
|
+
# tooling writes. Used by `-a servers` and by the dashboard's server picker.
|
|
89
|
+
function rag_instances() {
|
|
90
|
+
local dir;
|
|
91
|
+
for dir in "${WORKSPACE_ROOT}"/rag/*/ ; do
|
|
92
|
+
[ -f "${dir}.ddev/docker-compose.milvus.yaml" ] || continue ;
|
|
93
|
+
basename "${dir}" ;
|
|
94
|
+
done
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# The collection name for one project: <prefix>_<workspace>_<project>, with everything Milvus
|
|
98
|
+
# does not allow in an identifier folded to an underscore. Deterministic, so ragify writes and
|
|
99
|
+
# this command reads the same name without keeping state anywhere.
|
|
100
|
+
function rag_collection_name() {
|
|
101
|
+
local workspace="$1" project="$2" prefix;
|
|
102
|
+
prefix="$(milvus_setting "${rag_collection_prefix}")"; prefix="${prefix:-ws}";
|
|
103
|
+
printf '%s_%s_%s' "${prefix}" "${workspace}" "${project}" | tr -c 'A-Za-z0-9_\n' '_' ;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# Resolve what the user named to a collection that exists.
|
|
107
|
+
#
|
|
108
|
+
# Accepts <workspace>/<project>, a bare <project> (matched across workspaces), or the raw
|
|
109
|
+
# collection name. Ambiguity is reported rather than resolved by sort order: drop is one of the
|
|
110
|
+
# actions here and it does not ask twice.
|
|
111
|
+
function rag_resolve_collection() {
|
|
112
|
+
local wanted="$1" uri="$2" token="$3" all matches;
|
|
113
|
+
all="$(rag_python --uri "${uri}" --token "${token}" --json collections 2>/dev/null \
|
|
114
|
+
| python3 -c "import json,sys
|
|
115
|
+
try:
|
|
116
|
+
print('\n'.join(row['collection'] for row in json.load(sys.stdin)))
|
|
117
|
+
except Exception:
|
|
118
|
+
pass")";
|
|
119
|
+
[ -n "${all}" ] || return 0 ;
|
|
120
|
+
|
|
121
|
+
case "${wanted}" in
|
|
122
|
+
*/*) matches="$(printf '%s\n' "${all}" | grep -x "$(rag_collection_name "${wanted%%/*}" "${wanted##*/}")")" ;;
|
|
123
|
+
*) matches="$(printf '%s\n' "${all}" | grep -x "${wanted}")";
|
|
124
|
+
[ -n "${matches}" ] || matches="$(printf '%s\n' "${all}" | grep -E "_${wanted}$")" ;;
|
|
125
|
+
esac
|
|
126
|
+
printf '%s' "${matches}";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# One resolved collection, or a sentence saying why not. Sets RAG_COLLECTION.
|
|
130
|
+
function rag_require_collection() {
|
|
131
|
+
local uri="$1" token="$2" count;
|
|
132
|
+
if [ "${RAG_NAME}" == '_all_' ] ; then
|
|
133
|
+
echo "Name the index: bash cmd-tools-rag.sh <workspace>/<project> -a ${RAG_ACTION}";
|
|
134
|
+
echo " (-a list shows them)";
|
|
135
|
+
return 1 ;
|
|
136
|
+
fi
|
|
137
|
+
RAG_COLLECTION="$(rag_resolve_collection "${RAG_NAME}" "${uri}" "${token}")";
|
|
138
|
+
count="$(printf '%s' "${RAG_COLLECTION}" | grep -c . )";
|
|
139
|
+
if [ "${count}" -eq 0 ] ; then
|
|
140
|
+
echo "No index matches '${RAG_NAME}'.";
|
|
141
|
+
echo " Build it: cd ${WORKSPACE_ROOT}/<workspace> && bash cmd-tools-ragify.sh ${RAG_NAME##*/}";
|
|
142
|
+
return 1 ;
|
|
143
|
+
fi
|
|
144
|
+
if [ "${count}" -gt 1 ] ; then
|
|
145
|
+
echo "'${RAG_NAME}' matches ${count} indexes — name the workspace too:";
|
|
146
|
+
printf ' %s\n' ${RAG_COLLECTION};
|
|
147
|
+
return 1 ;
|
|
148
|
+
fi
|
|
149
|
+
return 0 ;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function rag_command() {
|
|
153
|
+
local project uri token target_ws target_project;
|
|
154
|
+
|
|
155
|
+
# An index named as <workspace>/<project> resolves to the instance THAT project is bound to,
|
|
156
|
+
# which is the whole point of binding: `-a search demos/website_starter` must reach the server holding
|
|
157
|
+
# website_starter's vectors, not the default one.
|
|
158
|
+
case "${RAG_NAME}" in
|
|
159
|
+
*/*) target_ws="${RAG_NAME%%/*}"; target_project="${RAG_NAME##*/}" ;;
|
|
160
|
+
*) target_ws=""; target_project="" ;;
|
|
161
|
+
esac
|
|
162
|
+
if [ -n "${target_ws}" ] ; then
|
|
163
|
+
project="$(rag_resolve_instance "${target_ws}" "${target_project}" "${MILVUS_PROJECT}")";
|
|
164
|
+
else
|
|
165
|
+
project="$(milvus_resolve_project "${MILVUS_PROJECT}")";
|
|
166
|
+
fi
|
|
167
|
+
uri="$(milvus_uri "${project}")";
|
|
168
|
+
token="$(milvus_token)";
|
|
169
|
+
|
|
170
|
+
case "${RAG_ACTION}" in
|
|
171
|
+
list|serve|mcp-register|mcp-unregister|status|servers|bind) : ;;
|
|
172
|
+
*) milvus_require_running "${project}" || return 1 ;;
|
|
173
|
+
esac
|
|
174
|
+
|
|
175
|
+
case "${RAG_ACTION}" in
|
|
176
|
+
servers)
|
|
177
|
+
local instance bound_count;
|
|
178
|
+
printf '%-28s %-10s %-28s %s\n' "SERVER" "STATE" "URI" "BOUND PROJECTS";
|
|
179
|
+
while read -r instance ; do
|
|
180
|
+
[ -n "${instance}" ] || continue ;
|
|
181
|
+
# `grep -c` already prints 0 when it matches nothing — and exits 1 while doing so, so a
|
|
182
|
+
# `|| echo 0` fallback appended a SECOND line and the count became "0\n0", which printf
|
|
183
|
+
# then spread across two rows. The missing-file case is what the default is for.
|
|
184
|
+
bound_count="$(grep -c ": ${instance}$" "${RAG_BINDINGS_FILE}" 2>/dev/null)";
|
|
185
|
+
bound_count="${bound_count:-0}";
|
|
186
|
+
printf '%-28s %-10s %-28s %s\n' "${instance}" \
|
|
187
|
+
"$(docker ps --format '{{.Names}}' | grep -qx "ddev-${instance}-milvus-standalone" && echo running || echo stopped)" \
|
|
188
|
+
"$(milvus_uri "${instance}")" \
|
|
189
|
+
"${bound_count}$([ "${instance}" == "$(milvus_resolve_project '_settings_')" ] && echo ' (default)')";
|
|
190
|
+
done <<< "$(rag_instances)"
|
|
191
|
+
echo "";
|
|
192
|
+
echo "Build another: bash cmd-milvus-project.sh <name>";
|
|
193
|
+
echo "Bind a project: bash cmd-tools-rag.sh <workspace>/<project> -a bind -m <name>";
|
|
194
|
+
;;
|
|
195
|
+
bind)
|
|
196
|
+
if [ -z "${target_ws}" ] ; then
|
|
197
|
+
echo "Name the project as <workspace>/<project>: bash cmd-tools-rag.sh demos/website_starter -a bind -m <server>";
|
|
198
|
+
return 1 ;
|
|
199
|
+
fi
|
|
200
|
+
if [ "${MILVUS_PROJECT}" == '_settings_' ] ; then
|
|
201
|
+
echo "Name the server with -m: bash cmd-tools-rag.sh ${RAG_NAME} -a bind -m <server>";
|
|
202
|
+
echo " (-a servers lists them; -m default unbinds and falls back to the default server)";
|
|
203
|
+
return 1 ;
|
|
204
|
+
fi
|
|
205
|
+
if [ "${MILVUS_PROJECT}" == 'default' ] ; then
|
|
206
|
+
rag_binding_set "${target_ws}" "${target_project}" "" ;
|
|
207
|
+
echo "${RAG_NAME} now uses the default server ($(milvus_resolve_project '_settings_')).";
|
|
208
|
+
return 0 ;
|
|
209
|
+
fi
|
|
210
|
+
if ! printf '%s\n' "$(rag_instances)" | grep -qx "${MILVUS_PROJECT}" ; then
|
|
211
|
+
echo "No Milvus instance called '${MILVUS_PROJECT}' in ${WORKSPACE_ROOT}/rag.";
|
|
212
|
+
echo " Build it first: cd ${WORKSPACE_ROOT}/rag && bash cmd-milvus-project.sh ${MILVUS_PROJECT}";
|
|
213
|
+
return 1 ;
|
|
214
|
+
fi
|
|
215
|
+
rag_binding_set "${target_ws}" "${target_project}" "${MILVUS_PROJECT}" ;
|
|
216
|
+
echo "${RAG_NAME} is now indexed into ${MILVUS_PROJECT} ($(milvus_uri "${MILVUS_PROJECT}")).";
|
|
217
|
+
echo " Re-index it there: cd ${WORKSPACE_ROOT}/${target_ws} && bash cmd-tools-ragify.sh ${target_project}";
|
|
218
|
+
echo " The old collection stays where it was — drop it with -a remove before rebinding if it is stale.";
|
|
219
|
+
;;
|
|
220
|
+
list)
|
|
221
|
+
milvus_require_running "${project}" || return 1 ;
|
|
222
|
+
echo "Milvus ${project} on ${uri}";
|
|
223
|
+
echo "";
|
|
224
|
+
rag_python --uri "${uri}" --token "${token}" collections ;
|
|
225
|
+
;;
|
|
226
|
+
info)
|
|
227
|
+
rag_require_collection "${uri}" "${token}" || return 1 ;
|
|
228
|
+
rag_python --uri "${uri}" --token "${token}" info --collection "${RAG_COLLECTION}" ;
|
|
229
|
+
;;
|
|
230
|
+
search)
|
|
231
|
+
if [ -z "${QUERY}" ] ; then
|
|
232
|
+
echo "Give a question: bash cmd-tools-rag.sh <workspace>/<project> -a search -q \"how is the hero styled\"";
|
|
233
|
+
return 1 ;
|
|
234
|
+
fi
|
|
235
|
+
rag_require_collection "${uri}" "${token}" || return 1 ;
|
|
236
|
+
rag_python --uri "${uri}" --token "${token}" search \
|
|
237
|
+
--collection "${RAG_COLLECTION}" --query "${QUERY}" --limit "${LIMIT}" ;
|
|
238
|
+
;;
|
|
239
|
+
remove)
|
|
240
|
+
rag_require_collection "${uri}" "${token}" || return 1 ;
|
|
241
|
+
rag_python --uri "${uri}" --token "${token}" drop --collection "${RAG_COLLECTION}" ;
|
|
242
|
+
;;
|
|
243
|
+
mcp-register|mcp-unregister|serve|status)
|
|
244
|
+
# The MCP server is per INSTANCE, not per collection: its tools list and search every
|
|
245
|
+
# collection in the database, so registering one index would be registering all of them.
|
|
246
|
+
PROJECT_NAME="${project}";
|
|
247
|
+
MCP_ACTION="${RAG_ACTION#mcp-}";
|
|
248
|
+
milvus_mcp ;
|
|
249
|
+
;;
|
|
250
|
+
*)
|
|
251
|
+
echo "Unknown action '${RAG_ACTION}'." ; return 1 ;;
|
|
252
|
+
esac
|
|
253
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Index a project in this workspace into the Milvus vector database — the RAG counterpart of
|
|
4
|
+
# cmd-tools-graphify.sh.
|
|
5
|
+
#
|
|
6
|
+
# The two answer different questions, and the difference is the reason both exist:
|
|
7
|
+
#
|
|
8
|
+
# graphify parses code with tree-sitter into a graph. "What injects this service", "what
|
|
9
|
+
# extends this class". It reads no Markdown, no Twig, no *.module hooks and none of
|
|
10
|
+
# the Drupal wiring YAML — those are documents to it, and a code-only run drops them.
|
|
11
|
+
# ragify indexes the TEXT of the same tree — including exactly those files — and retrieves
|
|
12
|
+
# passages. "Where is this explained", "which template renders that", "what does the
|
|
13
|
+
# recipe set for this field".
|
|
14
|
+
#
|
|
15
|
+
# Nothing here calls an LLM. Retrieval is Milvus's built-in BM25 function: the database tokenises
|
|
16
|
+
# the text and builds the sparse vectors itself, so the default run sends nothing anywhere.
|
|
17
|
+
# `--embedding openai` is the one mode that does, and it says so.
|
|
18
|
+
|
|
19
|
+
# The chunks land in a collection named for the project, in whichever Milvus instance the rag
|
|
20
|
+
# workspace holds. Deterministic (see rag_collection_name), so a re-index overwrites its own
|
|
21
|
+
# collection and never anyone else's.
|
|
22
|
+
|
|
23
|
+
# Third-party and generated trees, reusing exactly what graphify already excludes — a built site
|
|
24
|
+
# build is 90% vendored code, and indexing it buries the project's own text under Symfony's.
|
|
25
|
+
# The scope flag means the same thing here as there:
|
|
26
|
+
# custom the project's own code only
|
|
27
|
+
# contrib custom + contrib modules, themes and profiles THE DEFAULT
|
|
28
|
+
# all everything, core and vendor included
|
|
29
|
+
function ragify_scope_excludes() {
|
|
30
|
+
graphify_scope_excludes "$1" ;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Build (or rebuild) the index of a project in this workspace.
|
|
34
|
+
function ragify_project() {
|
|
35
|
+
local project_path milvus_project uri token collection excludes embedding key model started;
|
|
36
|
+
|
|
37
|
+
project_path="${WORKSPACE_ROOT}/${doc_name}/${PROJECT_NAME}";
|
|
38
|
+
if [ ! -d "${project_path}" ] ; then
|
|
39
|
+
echo "No project ${PROJECT_NAME} in ${WORKSPACE_ROOT}/${doc_name}.";
|
|
40
|
+
return 1 ;
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# The database lives in the rag workspace, so its settings are read from there rather than from
|
|
44
|
+
# the calling workspace's own file — a module being indexed has no `milvus:` block of its own.
|
|
45
|
+
eval $(parse_yaml "${WORKSPACE_CONFIG}/workspace.rag.settings.yml" "rag_ws_");
|
|
46
|
+
milvus_project="$(milvus_setting "${rag_ws_milvus_project}")"; milvus_project="${milvus_project:-milvus}";
|
|
47
|
+
# rag_collection_name() reads the unprefixed name, so the naming rule is the same one
|
|
48
|
+
# cmd-tools-rag.sh applies when it reads the collection back.
|
|
49
|
+
rag_collection_prefix="${rag_ws_rag_collection_prefix}";
|
|
50
|
+
|
|
51
|
+
# Which RAG server. One shared instance is the default; --milvus binds this project to another
|
|
52
|
+
# one and remembers it, so every later index, search and MCP registration for it goes there.
|
|
53
|
+
if [ "${MILVUS_INSTANCE}" != '_settings_' ] ; then
|
|
54
|
+
if [ "${MILVUS_INSTANCE}" == 'default' ] ; then
|
|
55
|
+
rag_binding_set "${doc_name}" "${PROJECT_NAME}" "" ;
|
|
56
|
+
echo "Unbound ${doc_name}/${PROJECT_NAME} — it uses the default server again.";
|
|
57
|
+
elif printf '%s\n' "$(rag_instances)" | grep -qx "${MILVUS_INSTANCE}" ; then
|
|
58
|
+
rag_binding_set "${doc_name}" "${PROJECT_NAME}" "${MILVUS_INSTANCE}" ;
|
|
59
|
+
echo "Bound ${doc_name}/${PROJECT_NAME} to the ${MILVUS_INSTANCE} server.";
|
|
60
|
+
else
|
|
61
|
+
echo "No RAG server called '${MILVUS_INSTANCE}' in ${WORKSPACE_ROOT}/rag.";
|
|
62
|
+
echo " Build it first: cd ${WORKSPACE_ROOT}/rag && bash cmd-milvus-project.sh ${MILVUS_INSTANCE}";
|
|
63
|
+
return 1 ;
|
|
64
|
+
fi
|
|
65
|
+
fi
|
|
66
|
+
milvus_project="$(rag_resolve_instance "${doc_name}" "${PROJECT_NAME}" '_settings_')";
|
|
67
|
+
|
|
68
|
+
# milvus_uri()/milvus_host_port() resolve against the rag workspace folder, which is not the
|
|
69
|
+
# folder this command was run from.
|
|
70
|
+
local doc_name_saved="${doc_name}";
|
|
71
|
+
doc_name="rag";
|
|
72
|
+
uri="$(milvus_uri "${milvus_project}")";
|
|
73
|
+
token="$(milvus_token)";
|
|
74
|
+
if ! milvus_require_running "${milvus_project}" ; then
|
|
75
|
+
doc_name="${doc_name_saved}";
|
|
76
|
+
return 1 ;
|
|
77
|
+
fi
|
|
78
|
+
doc_name="${doc_name_saved}";
|
|
79
|
+
|
|
80
|
+
collection="$(rag_collection_name "${doc_name}" "${PROJECT_NAME}")";
|
|
81
|
+
excludes="$(ragify_scope_excludes "${SCOPE}")";
|
|
82
|
+
[ "${ALL}" == 'yes' ] && excludes="";
|
|
83
|
+
# argparse.sh emits an nargs='+' option as a bash ARRAY, so plain ${EXCLUDE} is its FIRST
|
|
84
|
+
# element and `--exclude a b` quietly indexed b. [0] reads the sentinel on a scalar default too.
|
|
85
|
+
if [ "${EXCLUDE[0]}" != '_none_' ] ; then
|
|
86
|
+
excludes="${excludes} ${EXCLUDE[*]}";
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
embedding="${EMBEDDING}";
|
|
90
|
+
if [ "${embedding}" == '_settings_' ] ; then
|
|
91
|
+
embedding="$(milvus_setting "${rag_ws_rag_embedding}")"; embedding="${embedding:-bm25}";
|
|
92
|
+
fi
|
|
93
|
+
model="$(milvus_setting "${rag_ws_rag_openai_model}")"; model="${model:-text-embedding-3-small}";
|
|
94
|
+
|
|
95
|
+
key="";
|
|
96
|
+
if [ "${embedding}" == 'openai' ] ; then
|
|
97
|
+
# The key the workspace already holds. A placeholder is not a key — sk-change-this would fail
|
|
98
|
+
# deep in the run with an authentication error rather than here with a sentence.
|
|
99
|
+
key="${OPENAI_API_KEY:-${ai_providers_openai_api_key}}";
|
|
100
|
+
case "${key}" in ''|CHANGE_ME|sk-change-this)
|
|
101
|
+
echo "--embedding openai needs an OpenAI key: set ai_providers.openai.api_key in";
|
|
102
|
+
echo "core/config/settings.yml, or export OPENAI_API_KEY for a one-off run.";
|
|
103
|
+
return 1 ;;
|
|
104
|
+
esac
|
|
105
|
+
echo "";
|
|
106
|
+
echo "Dense embeddings are ON: every indexed chunk of ${PROJECT_NAME} is sent to the OpenAI API";
|
|
107
|
+
echo "(${model}). The default BM25 mode sends nothing anywhere.";
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
echo "";
|
|
111
|
+
echo "Indexing ${doc_name}/${PROJECT_NAME} into ${collection}";
|
|
112
|
+
echo " Milvus ${uri}";
|
|
113
|
+
echo " Scope ${SCOPE}$([ "${ALL}" == 'yes' ] && echo ' (--all: nothing excluded)')";
|
|
114
|
+
echo " Retrieval ${embedding}";
|
|
115
|
+
echo "";
|
|
116
|
+
|
|
117
|
+
started="$(date +%s)";
|
|
118
|
+
# shellcheck disable=SC2086
|
|
119
|
+
rag_python --uri "${uri}" --token "${token}" index \
|
|
120
|
+
--collection "${collection}" \
|
|
121
|
+
--path "${project_path}" \
|
|
122
|
+
--chunk-lines "$(milvus_setting "${rag_ws_rag_chunk_lines}")" \
|
|
123
|
+
--chunk-overlap "$(milvus_setting "${rag_ws_rag_chunk_overlap}")" \
|
|
124
|
+
--max-file-kb "$(milvus_setting "${rag_ws_rag_max_file_kb}")" \
|
|
125
|
+
--embedding "${embedding}" \
|
|
126
|
+
--openai-model "${model}" \
|
|
127
|
+
${key:+--openai-key "${key}"} \
|
|
128
|
+
${APPEND:+--append} \
|
|
129
|
+
--progress \
|
|
130
|
+
${excludes:+--exclude ${excludes}} || return 1 ;
|
|
131
|
+
|
|
132
|
+
echo "";
|
|
133
|
+
echo "*---------------------------------------------------------------------*";
|
|
134
|
+
echo " Indexed in $(( $(date +%s) - started ))s.";
|
|
135
|
+
echo "";
|
|
136
|
+
echo " Ask it something:";
|
|
137
|
+
echo " cd ${WORKSPACE_ROOT}/rag && bash cmd-tools-rag.sh ${doc_name}/${PROJECT_NAME} -a search -q \"...\"";
|
|
138
|
+
echo " Give the whole database to the Claude Code CLI (all collections, one registration):";
|
|
139
|
+
echo " cd ${WORKSPACE_ROOT}/rag && bash cmd-milvus-mcp.sh -a register";
|
|
140
|
+
echo "*---------------------------------------------------------------------*";
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
# Ask an existing index a question, from the project's own workspace folder — the same search
|
|
144
|
+
# cmd-tools-rag.sh runs, without changing directory.
|
|
145
|
+
function ragify_query_project() {
|
|
146
|
+
local milvus_project uri token collection doc_name_saved;
|
|
147
|
+
|
|
148
|
+
eval $(parse_yaml "${WORKSPACE_CONFIG}/workspace.rag.settings.yml" "rag_ws_");
|
|
149
|
+
rag_collection_prefix="${rag_ws_rag_collection_prefix}";
|
|
150
|
+
milvus_project="$(rag_resolve_instance "${doc_name}" "${PROJECT_NAME}" '_settings_')";
|
|
151
|
+
|
|
152
|
+
doc_name_saved="${doc_name}";
|
|
153
|
+
doc_name="rag";
|
|
154
|
+
uri="$(milvus_uri "${milvus_project}")";
|
|
155
|
+
token="$(milvus_token)";
|
|
156
|
+
if ! milvus_require_running "${milvus_project}" ; then
|
|
157
|
+
doc_name="${doc_name_saved}";
|
|
158
|
+
return 1 ;
|
|
159
|
+
fi
|
|
160
|
+
doc_name="${doc_name_saved}";
|
|
161
|
+
|
|
162
|
+
collection="$(rag_collection_name "${doc_name}" "${PROJECT_NAME}")";
|
|
163
|
+
rag_python --uri "${uri}" --token "${token}" search \
|
|
164
|
+
--collection "${collection}" --query "${QUERY}" --limit "${LIMIT}" ;
|
|
165
|
+
}
|