@engenty/wizards-runtime 0.0.0-stage → 0.7.5
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 +110 -0
- package/README.md +214 -2
- package/apps/runtime/dist/agents/architect.js +444 -0
- package/apps/runtime/dist/agents/studio-assistant.js +883 -0
- package/apps/runtime/dist/agents/subscription.js +207 -0
- package/apps/runtime/dist/agents/thought.js +21 -0
- package/apps/runtime/dist/agents/website.js +480 -0
- package/apps/runtime/dist/app.js +359 -0
- package/apps/runtime/dist/apple/wizards-apple +0 -0
- package/apps/runtime/dist/assistant/browser.js +26 -0
- package/apps/runtime/dist/assistant/docs.js +158 -0
- package/apps/runtime/dist/assistant/knows.js +353 -0
- package/apps/runtime/dist/assistant/primer.js +26 -0
- package/apps/runtime/dist/assistant/runs.js +24 -0
- package/apps/runtime/dist/auth/account.js +175 -0
- package/apps/runtime/dist/auth/device.js +112 -0
- package/apps/runtime/dist/auth/index.js +358 -0
- package/apps/runtime/dist/auth/keys.js +55 -0
- package/apps/runtime/dist/auth/local-ticket.js +26 -0
- package/apps/runtime/dist/authoring/example.js +74 -0
- package/apps/runtime/dist/authoring/guide.js +433 -0
- package/apps/runtime/dist/authoring/ops.js +117 -0
- package/apps/runtime/dist/browser/fast/action-space.js +160 -0
- package/apps/runtime/dist/browser/fast/classifier.js +91 -0
- package/apps/runtime/dist/browser/fast/decide.js +171 -0
- package/apps/runtime/dist/browser/fast/driver.js +141 -0
- package/apps/runtime/dist/browser/fast/instructions.js +33 -0
- package/apps/runtime/dist/browser/fast/run.js +249 -0
- package/apps/runtime/dist/browser/fast/span-picker.js +153 -0
- package/apps/runtime/dist/browser/fast/text-helper.js +178 -0
- package/apps/runtime/dist/browser/snapshot.js +335 -0
- package/apps/runtime/dist/cli/account.js +385 -0
- package/apps/runtime/dist/cli/autostart.js +182 -0
- package/apps/runtime/dist/cli/autoupdate.js +221 -0
- package/apps/runtime/dist/cli/clients.js +44 -0
- package/apps/runtime/dist/cli/connect.js +540 -0
- package/apps/runtime/dist/cli/environment.js +93 -0
- package/apps/runtime/dist/cli/exec.js +45 -0
- package/apps/runtime/dist/cli/features.js +50 -0
- package/apps/runtime/dist/cli/home.js +88 -0
- package/apps/runtime/dist/cli/install-env.js +33 -0
- package/apps/runtime/dist/cli/machine.js +107 -0
- package/apps/runtime/dist/cli/main.js +222 -0
- package/apps/runtime/dist/cli/mcp.js +136 -0
- package/apps/runtime/dist/cli/menu.js +202 -0
- package/apps/runtime/dist/cli/processes.js +72 -0
- package/apps/runtime/dist/cli/report.js +66 -0
- package/apps/runtime/dist/cli/setup.js +335 -0
- package/apps/runtime/dist/cli/start.js +276 -0
- package/apps/runtime/dist/cli/status.js +203 -0
- package/apps/runtime/dist/cli/ui.js +59 -0
- package/apps/runtime/dist/cli/uninstall-main.js +20 -0
- package/apps/runtime/dist/cli/uninstall.js +231 -0
- package/apps/runtime/dist/cli/update.js +86 -0
- package/apps/runtime/dist/cli/validate.js +75 -0
- package/apps/runtime/dist/cli/versions.js +123 -0
- package/apps/runtime/dist/connectors/builtin.js +86 -0
- package/apps/runtime/dist/connectors/external.js +409 -0
- package/apps/runtime/dist/connectors/gmail.js +107 -0
- package/apps/runtime/dist/connectors/imap.js +261 -0
- package/apps/runtime/dist/connectors/index.js +325 -0
- package/apps/runtime/dist/connectors/mail.js +72 -0
- package/apps/runtime/dist/connectors/outlook.js +90 -0
- package/apps/runtime/dist/connectors/plugin-connections.js +343 -0
- package/apps/runtime/dist/connectors/via-account.js +65 -0
- package/apps/runtime/dist/credits/credits.js +100 -0
- package/apps/runtime/dist/credits/estimate.js +152 -0
- package/apps/runtime/dist/db/adopt.js +149 -0
- package/apps/runtime/dist/db/client.js +173 -0
- package/apps/runtime/dist/db/control-schema.js +133 -0
- package/apps/runtime/dist/db/migrations/control/0000_last_absorbing_man.sql +47 -0
- package/apps/runtime/dist/db/migrations/control/0001_gorgeous_nicolaos.sql +41 -0
- package/apps/runtime/dist/db/migrations/control/0002_secret_penance.sql +1 -0
- package/apps/runtime/dist/db/migrations/control/0003_nasty_mordo.sql +3 -0
- package/apps/runtime/dist/db/migrations/control/0004_breezy_eddie_brock.sql +6 -0
- package/apps/runtime/dist/db/migrations/control/0005_chilly_oracle.sql +1 -0
- package/apps/runtime/dist/db/migrations/control/0006_sleepy_mojo.sql +1 -0
- package/apps/runtime/dist/db/migrations/control/0007_common_the_hand.sql +15 -0
- package/apps/runtime/dist/db/migrations/control/0008_runner.sql +8 -0
- package/apps/runtime/dist/db/migrations/control/0009_plugin_claim.sql +9 -0
- package/apps/runtime/dist/db/migrations/control/0010_tan_snowbird.sql +6 -0
- package/apps/runtime/dist/db/migrations/control/meta/0000_snapshot.json +311 -0
- package/apps/runtime/dist/db/migrations/control/meta/0001_snapshot.json +599 -0
- package/apps/runtime/dist/db/migrations/control/meta/0002_snapshot.json +607 -0
- package/apps/runtime/dist/db/migrations/control/meta/0003_snapshot.json +311 -0
- package/apps/runtime/dist/db/migrations/control/meta/0004_snapshot.json +350 -0
- package/apps/runtime/dist/db/migrations/control/meta/0005_snapshot.json +358 -0
- package/apps/runtime/dist/db/migrations/control/meta/0006_snapshot.json +365 -0
- package/apps/runtime/dist/db/migrations/control/meta/0007_snapshot.json +460 -0
- package/apps/runtime/dist/db/migrations/control/meta/0008_snapshot.json +505 -0
- package/apps/runtime/dist/db/migrations/control/meta/0009_snapshot.json +561 -0
- package/apps/runtime/dist/db/migrations/control/meta/0010_snapshot.json +600 -0
- package/apps/runtime/dist/db/migrations/control/meta/_journal.json +83 -0
- package/apps/runtime/dist/db/migrations/tenant/0000_eminent_freak.sql +188 -0
- package/apps/runtime/dist/db/migrations/tenant/0001_salty_master_chief.sql +1 -0
- package/apps/runtime/dist/db/migrations/tenant/0002_cloudy_firebird.sql +1 -0
- package/apps/runtime/dist/db/migrations/tenant/0003_brown_warbound.sql +52 -0
- package/apps/runtime/dist/db/migrations/tenant/0004_romantic_nocturne.sql +6 -0
- package/apps/runtime/dist/db/migrations/tenant/0005_reflective_forgotten_one.sql +2 -0
- package/apps/runtime/dist/db/migrations/tenant/0006_hard_war_machine.sql +30 -0
- package/apps/runtime/dist/db/migrations/tenant/0007_space_data.sql +43 -0
- package/apps/runtime/dist/db/migrations/tenant/0008_run_event_note.sql +1 -0
- package/apps/runtime/dist/db/migrations/tenant/0009_knowledge.sql +104 -0
- package/apps/runtime/dist/db/migrations/tenant/0010_plugin_connection.sql +15 -0
- package/apps/runtime/dist/db/migrations/tenant/0011_runners.sql +2 -0
- package/apps/runtime/dist/db/migrations/tenant/0012_assistant_chat.sql +40 -0
- package/apps/runtime/dist/db/migrations/tenant/0013_run_origin.sql +1 -0
- package/apps/runtime/dist/db/migrations/tenant/0014_run_answer.sql +2 -0
- package/apps/runtime/dist/db/migrations/tenant/0015_device_calls.sql +13 -0
- package/apps/runtime/dist/db/migrations/tenant/0016_even_trish_tilby.sql +12 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0000_snapshot.json +1323 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0001_snapshot.json +1330 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0002_snapshot.json +1337 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0003_snapshot.json +1605 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0004_snapshot.json +1645 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0005_snapshot.json +1659 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0006_snapshot.json +1696 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0007_snapshot.json +2012 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0008_snapshot.json +2019 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0009_snapshot.json +2837 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0010_snapshot.json +2942 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0011_snapshot.json +2956 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0012_snapshot.json +3132 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0013_snapshot.json +3139 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0014_snapshot.json +3154 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0015_snapshot.json +3243 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0016_snapshot.json +3326 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +125 -0
- package/apps/runtime/dist/db/schema.js +602 -0
- package/apps/runtime/dist/debug.js +196 -0
- package/apps/runtime/dist/docs/dev/index.md +41 -0
- package/apps/runtime/dist/docs/dev/meta.json +7 -0
- package/apps/runtime/dist/docs/dev/plugins/connections.md +74 -0
- package/apps/runtime/dist/docs/dev/plugins/events.md +89 -0
- package/apps/runtime/dist/docs/dev/plugins/examples.md +101 -0
- package/apps/runtime/dist/docs/dev/plugins/index.md +78 -0
- package/apps/runtime/dist/docs/dev/plugins/layout.md +90 -0
- package/apps/runtime/dist/docs/dev/plugins/meta.json +28 -0
- package/apps/runtime/dist/docs/dev/plugins/quick-start.md +94 -0
- package/apps/runtime/dist/docs/dev/plugins/reference.md +348 -0
- package/apps/runtime/dist/docs/dev/plugins/reloading.md +76 -0
- package/apps/runtime/dist/docs/dev/plugins/routes.md +185 -0
- package/apps/runtime/dist/docs/dev/plugins/runners.md +230 -0
- package/apps/runtime/dist/docs/dev/plugins/server.md +281 -0
- package/apps/runtime/dist/docs/dev/plugins/shipping.md +79 -0
- package/apps/runtime/dist/docs/dev/plugins/space.md +297 -0
- package/apps/runtime/dist/docs/dev/plugins/starters.md +70 -0
- package/apps/runtime/dist/docs/dev/plugins/studio.md +363 -0
- package/apps/runtime/dist/docs/dev/plugins/styling.md +129 -0
- package/apps/runtime/dist/docs/dev/plugins/tables.md +104 -0
- package/apps/runtime/dist/docs/dev/plugins/tools.md +139 -0
- package/apps/runtime/dist/docs/dev/wizard-format.md +125 -0
- package/apps/runtime/dist/docs/meta.json +3 -0
- package/apps/runtime/dist/docs/user/ai-apps.md +112 -0
- package/apps/runtime/dist/docs/user/assistant.md +77 -0
- package/apps/runtime/dist/docs/user/build-a-wizard.md +116 -0
- package/apps/runtime/dist/docs/user/command-line.md +83 -0
- package/apps/runtime/dist/docs/user/connectors.md +90 -0
- package/apps/runtime/dist/docs/user/create-account.md +52 -0
- package/apps/runtime/dist/docs/user/data.md +66 -0
- package/apps/runtime/dist/docs/user/first-start.md +60 -0
- package/apps/runtime/dist/docs/user/index.md +49 -0
- package/apps/runtime/dist/docs/user/install.md +123 -0
- package/apps/runtime/dist/docs/user/local-only.md +42 -0
- package/apps/runtime/dist/docs/user/meta.json +32 -0
- package/apps/runtime/dist/docs/user/models.md +156 -0
- package/apps/runtime/dist/docs/user/plugins.md +71 -0
- package/apps/runtime/dist/docs/user/run.md +98 -0
- package/apps/runtime/dist/docs/user/server.md +52 -0
- package/apps/runtime/dist/docs/user/space.md +126 -0
- package/apps/runtime/dist/docs/user/steps.md +220 -0
- package/apps/runtime/dist/docs/user/test-and-share.md +224 -0
- package/apps/runtime/dist/docs/user/troubleshooting.md +67 -0
- package/apps/runtime/dist/docs/user/wordpress.md +121 -0
- package/apps/runtime/dist/documents/parse.js +246 -0
- package/apps/runtime/dist/engenty/connections-external/build-connector.js +193 -0
- package/apps/runtime/dist/engenty/connections-external/errors.js +11 -0
- package/apps/runtime/dist/engenty/connections-external/import-service.js +270 -0
- package/apps/runtime/dist/engenty/connections-external/importer/classify.js +34 -0
- package/apps/runtime/dist/engenty/connections-external/importer/map-auth.js +185 -0
- package/apps/runtime/dist/engenty/connections-external/importer/normalize-mcp.js +63 -0
- package/apps/runtime/dist/engenty/connections-external/importer/normalize-openapi.js +130 -0
- package/apps/runtime/dist/engenty/connections-external/invoke/http-invoker.js +143 -0
- package/apps/runtime/dist/engenty/connections-external/invoke/mcp-client.js +143 -0
- package/apps/runtime/dist/engenty/connections-external/net/guarded-fetch.js +119 -0
- package/apps/runtime/dist/engenty/connections-external/oauth-dcr.js +88 -0
- package/apps/runtime/dist/engenty/connections-external/registry-client.js +336 -0
- package/apps/runtime/dist/engenty/connections-external/registry-source.js +82 -0
- package/apps/runtime/dist/engenty/connections-external/types.js +7 -0
- package/apps/runtime/dist/engenty/connections-github/connector.js +209 -0
- package/apps/runtime/dist/engenty/connections-google/connectors/calendar.js +381 -0
- package/apps/runtime/dist/engenty/connections-google/connectors/contacts.js +94 -0
- package/apps/runtime/dist/engenty/connections-google/connectors/drive.js +290 -0
- package/apps/runtime/dist/engenty/connections-google/connectors/gmail.js +567 -0
- package/apps/runtime/dist/engenty/connections-google/definitions.js +11 -0
- package/apps/runtime/dist/engenty/connections-google/shared.js +73 -0
- package/apps/runtime/dist/engenty/connections-hubspot/connector.js +140 -0
- package/apps/runtime/dist/engenty/connections-microsoft/action.js +17 -0
- package/apps/runtime/dist/engenty/connections-microsoft/graph.js +114 -0
- package/apps/runtime/dist/engenty/connections-microsoft/onedrive.js +286 -0
- package/apps/runtime/dist/engenty/connections-microsoft/outlook.js +492 -0
- package/apps/runtime/dist/engenty/connections-s3/s3.js +328 -0
- package/apps/runtime/dist/engenty/connections-sdk/files-capability.js +86 -0
- package/apps/runtime/dist/engenty/connections-sdk/oauth2.js +150 -0
- package/apps/runtime/dist/engenty/connections-sdk/registry.js +89 -0
- package/apps/runtime/dist/engenty/connections-sdk/storage-capability.js +84 -0
- package/apps/runtime/dist/engenty/connections-sdk/types.js +30 -0
- package/apps/runtime/dist/engenty/connections-slack/connector.js +360 -0
- package/apps/runtime/dist/engenty/csv-import/csv-matrix.js +178 -0
- package/apps/runtime/dist/engenty/csv-import/import-sources.js +87 -0
- package/apps/runtime/dist/engenty/csv-import/parse-csv.js +129 -0
- package/apps/runtime/dist/engenty/csv-import/serialize-csv.js +20 -0
- package/apps/runtime/dist/engenty/csv-import/types.js +1 -0
- package/apps/runtime/dist/engenty/csv-import/xlsx-workbook.js +159 -0
- package/apps/runtime/dist/engenty/doc-converter/interface.js +9 -0
- package/apps/runtime/dist/engenty/doc-converter/page-break.js +92 -0
- package/apps/runtime/dist/engenty/doc-converter/providers/local/index.js +72 -0
- package/apps/runtime/dist/engenty/document-scanner/schemas/classifier.js +30 -0
- package/apps/runtime/dist/engenty/document-scanner/schemas/index.js +4 -0
- package/apps/runtime/dist/engenty/document-scanner/schemas/invoice.js +73 -0
- package/apps/runtime/dist/engenty/document-scanner/schemas/receipt.js +63 -0
- package/apps/runtime/dist/engenty/document-scanner/schemas/shared.js +40 -0
- package/apps/runtime/dist/engenty/search-index/chunks.js +164 -0
- package/apps/runtime/dist/engenty/search-index/contracts.js +9 -0
- package/apps/runtime/dist/engenty/shims/connections-sdk.js +39 -0
- package/apps/runtime/dist/engenty/shims/plugin-sdk.js +1 -0
- package/apps/runtime/dist/engenty/shims/web-ingest.js +19 -0
- package/apps/runtime/dist/engenty/web-ingest/ssrf.js +277 -0
- package/apps/runtime/dist/engine/asks.js +82 -0
- package/apps/runtime/dist/engine/decide.js +82 -0
- package/apps/runtime/dist/engine/device.js +194 -0
- package/apps/runtime/dist/engine/events.js +128 -0
- package/apps/runtime/dist/engine/input.js +208 -0
- package/apps/runtime/dist/engine/owner.js +32 -0
- package/apps/runtime/dist/engine/prepare.js +90 -0
- package/apps/runtime/dist/engine/push.js +58 -0
- package/apps/runtime/dist/engine/requirements.js +355 -0
- package/apps/runtime/dist/engine/resources.js +198 -0
- package/apps/runtime/dist/engine/runner.js +970 -0
- package/apps/runtime/dist/engine/steps.js +1000 -0
- package/apps/runtime/dist/engine/surface.js +91 -0
- package/apps/runtime/dist/engine/template.js +240 -0
- package/apps/runtime/dist/engine/types.js +4 -0
- package/apps/runtime/dist/env.js +295 -0
- package/apps/runtime/dist/features.js +123 -0
- package/apps/runtime/dist/files/blobs.js +22 -0
- package/apps/runtime/dist/files/objects.js +86 -0
- package/apps/runtime/dist/files/storage.js +120 -0
- package/apps/runtime/dist/files/web-images.js +101 -0
- package/apps/runtime/dist/film/project.js +257 -0
- package/apps/runtime/dist/film/skills.js +91 -0
- package/apps/runtime/dist/film/sounds.js +122 -0
- package/apps/runtime/dist/film/step.js +289 -0
- package/apps/runtime/dist/film/tools.js +99 -0
- package/apps/runtime/dist/geocode.js +58 -0
- package/apps/runtime/dist/harness/antigravity.js +129 -0
- package/apps/runtime/dist/harness/apple.js +270 -0
- package/apps/runtime/dist/harness/claude.js +147 -0
- package/apps/runtime/dist/harness/codex.js +229 -0
- package/apps/runtime/dist/harness/cursor.js +93 -0
- package/apps/runtime/dist/harness/env.js +124 -0
- package/apps/runtime/dist/harness/index.js +95 -0
- package/apps/runtime/dist/harness/model.js +279 -0
- package/apps/runtime/dist/harness/prompt.js +121 -0
- package/apps/runtime/dist/harness/terminal.js +194 -0
- package/apps/runtime/dist/harness/types.js +7 -0
- package/apps/runtime/dist/index.js +113 -0
- package/apps/runtime/dist/limits.js +81 -0
- package/apps/runtime/dist/link-preview.js +60 -0
- package/apps/runtime/dist/log.js +106 -0
- package/apps/runtime/dist/manage.js +249 -0
- package/apps/runtime/dist/mcp/auth.js +161 -0
- package/apps/runtime/dist/mcp/bridge.js +59 -0
- package/apps/runtime/dist/mcp/flow-app.js +97 -0
- package/apps/runtime/dist/mcp/handler.js +54 -0
- package/apps/runtime/dist/mcp/scopes.js +14 -0
- package/apps/runtime/dist/mcp/seen.js +65 -0
- package/apps/runtime/dist/mcp/tools.js +572 -0
- package/apps/runtime/dist/media/conversation.js +167 -0
- package/apps/runtime/dist/media/ffmpeg.js +121 -0
- package/apps/runtime/dist/media/generate.js +120 -0
- package/apps/runtime/dist/media/marking.js +121 -0
- package/apps/runtime/dist/media/transcribe.js +198 -0
- package/apps/runtime/dist/model-errors.js +42 -0
- package/apps/runtime/dist/models.js +1164 -0
- package/apps/runtime/dist/plugin.js +61 -0
- package/apps/runtime/dist/plugins/channels.js +78 -0
- package/apps/runtime/dist/plugins/claims.js +56 -0
- package/apps/runtime/dist/plugins/discovery.js +155 -0
- package/apps/runtime/dist/plugins/events.js +63 -0
- package/apps/runtime/dist/plugins/jobs.js +64 -0
- package/apps/runtime/dist/plugins/loader.js +508 -0
- package/apps/runtime/dist/plugins/migrations.js +69 -0
- package/apps/runtime/dist/plugins/pro-keys.js +34 -0
- package/apps/runtime/dist/plugins/pro-state.js +83 -0
- package/apps/runtime/dist/plugins/pro.js +310 -0
- package/apps/runtime/dist/plugins/public.js +44 -0
- package/apps/runtime/dist/plugins/registry.js +122 -0
- package/apps/runtime/dist/plugins/runs.js +210 -0
- package/apps/runtime/dist/render/browser-path.js +54 -0
- package/apps/runtime/dist/render/chromium.js +98 -0
- package/apps/runtime/dist/render/convert.js +158 -0
- package/apps/runtime/dist/render/downloads.js +299 -0
- package/apps/runtime/dist/render/guard.js +25 -0
- package/apps/runtime/dist/render/shaped.js +137 -0
- package/apps/runtime/dist/routes/api.js +440 -0
- package/apps/runtime/dist/routes/debug.js +42 -0
- package/apps/runtime/dist/routes/delivery.js +90 -0
- package/apps/runtime/dist/routes/internal.js +81 -0
- package/apps/runtime/dist/routes/lang.js +25 -0
- package/apps/runtime/dist/routes/marketplace.js +43 -0
- package/apps/runtime/dist/routes/plugin-public.js +113 -0
- package/apps/runtime/dist/routes/plugins.js +212 -0
- package/apps/runtime/dist/routes/runs.js +1422 -0
- package/apps/runtime/dist/routes/studio.js +1629 -0
- package/apps/runtime/dist/routes/wizard-stream.js +30 -0
- package/apps/runtime/dist/running.js +39 -0
- package/apps/runtime/dist/sandbox/docker.js +75 -0
- package/apps/runtime/dist/sandbox/index.js +23 -0
- package/apps/runtime/dist/sandbox/types.js +1 -0
- package/apps/runtime/dist/secrets/crypto.js +28 -0
- package/apps/runtime/dist/secrets/signing.js +52 -0
- package/apps/runtime/dist/secrets/vault.js +59 -0
- package/apps/runtime/dist/services/access.js +88 -0
- package/apps/runtime/dist/services/api.js +248 -0
- package/apps/runtime/dist/services/architect.js +95 -0
- package/apps/runtime/dist/services/assistant-chats.js +311 -0
- package/apps/runtime/dist/services/brand.js +85 -0
- package/apps/runtime/dist/services/cloud.js +456 -0
- package/apps/runtime/dist/services/draft-events.js +27 -0
- package/apps/runtime/dist/services/engenty-shapes.js +71 -0
- package/apps/runtime/dist/services/errors.js +29 -0
- package/apps/runtime/dist/services/files.js +178 -0
- package/apps/runtime/dist/services/knowledge-model.js +559 -0
- package/apps/runtime/dist/services/knowledge.js +721 -0
- package/apps/runtime/dist/services/links.js +16 -0
- package/apps/runtime/dist/services/marketplace.js +492 -0
- package/apps/runtime/dist/services/onboarding.js +152 -0
- package/apps/runtime/dist/services/package-file.js +82 -0
- package/apps/runtime/dist/services/package.js +170 -0
- package/apps/runtime/dist/services/profile.js +51 -0
- package/apps/runtime/dist/services/project-files.js +439 -0
- package/apps/runtime/dist/services/project-index.js +707 -0
- package/apps/runtime/dist/services/projects.js +387 -0
- package/apps/runtime/dist/services/relevance.js +58 -0
- package/apps/runtime/dist/services/runners.js +178 -0
- package/apps/runtime/dist/services/runs.js +524 -0
- package/apps/runtime/dist/services/shares.js +130 -0
- package/apps/runtime/dist/services/site.js +270 -0
- package/apps/runtime/dist/services/space-categories.js +861 -0
- package/apps/runtime/dist/services/space-data.js +792 -0
- package/apps/runtime/dist/services/space-origin.js +207 -0
- package/apps/runtime/dist/services/spaces.js +656 -0
- package/apps/runtime/dist/services/translations.js +306 -0
- package/apps/runtime/dist/services/widgets.js +34 -0
- package/apps/runtime/dist/services/wizard-icon.js +157 -0
- package/apps/runtime/dist/services/wizards.js +420 -0
- package/apps/runtime/dist/settings.js +16 -0
- package/apps/runtime/dist/store/errors.js +4 -0
- package/apps/runtime/dist/store/index.js +299 -0
- package/apps/runtime/dist/store/shared-lists.js +123 -0
- package/apps/runtime/dist/tenants/control.js +238 -0
- package/apps/runtime/dist/tenants/tenant.js +26 -0
- package/apps/runtime/dist/texts.js +207 -0
- package/apps/runtime/dist/tools/browser.js +703 -0
- package/apps/runtime/dist/tools/connector.js +204 -0
- package/apps/runtime/dist/tools/index.js +291 -0
- package/apps/runtime/dist/tools/mail.js +104 -0
- package/apps/runtime/dist/tools/net-guard.js +170 -0
- package/apps/runtime/dist/tools/pages.js +81 -0
- package/apps/runtime/dist/tools/plugin.js +180 -0
- package/apps/runtime/dist/tools/project.js +154 -0
- package/apps/runtime/dist/tools/shared.js +69 -0
- package/apps/runtime/dist/tools/store.js +238 -0
- package/apps/runtime/dist/update.js +113 -0
- package/apps/runtime/dist/widgets/bundle.js +99 -0
- package/apps/runtime/dist/widgets/render.js +329 -0
- package/apps/runtime/dist/widgets/runtime.js +108 -0
- package/apps/runtime/dist/widgets/script.js +30 -0
- package/apps/runtime/dist/widgets/step.js +223 -0
- package/apps/web/dist/ai-labels/ai-black.svg +20 -0
- package/apps/web/dist/ai-labels/ai-generated-black.svg +31 -0
- package/apps/web/dist/ai-labels/ai-generated-white.svg +32 -0
- package/apps/web/dist/ai-labels/ai-modified-black.svg +30 -0
- package/apps/web/dist/ai-labels/ai-modified-white.svg +31 -0
- package/apps/web/dist/ai-labels/ai-white.svg +21 -0
- package/apps/web/dist/assets/AboutDialog-D4mvc-zu.js +1 -0
- package/apps/web/dist/assets/ChangelogDialog-DLqpJsF6.js +1 -0
- package/apps/web/dist/assets/ChatView-3laypRcE.js +10 -0
- package/apps/web/dist/assets/EditorPage-BalA5U2Y.js +3 -0
- package/apps/web/dist/assets/FlowPreview-CusP7ci9.js +1 -0
- package/apps/web/dist/assets/Harness-BrP-ENHg.css +1 -0
- package/apps/web/dist/assets/Harness-iYLtOLaK.js +16 -0
- package/apps/web/dist/assets/NewWizardChannels-CbwJ9A56.js +1 -0
- package/apps/web/dist/assets/NewWizardPage-BOBYiB9i.js +7 -0
- package/apps/web/dist/assets/OnboardingPage-CUwCiVIr.js +1 -0
- package/apps/web/dist/assets/ProjectPage-Bb16MdYG.js +1 -0
- package/apps/web/dist/assets/PublicRunner-BCt7Q6C-.js +1 -0
- package/apps/web/dist/assets/ReadOnly-kIHX2TEy.js +1 -0
- package/apps/web/dist/assets/RunDrawer-hZ9oeSXu.js +4 -0
- package/apps/web/dist/assets/RunnerView-DUS9fPmx.js +1 -0
- package/apps/web/dist/assets/SettingsPage-BzwR50fi.js +1 -0
- package/apps/web/dist/assets/SetupPage-gAp7rPxp.js +1 -0
- package/apps/web/dist/assets/SharePage-DqZWHva_.js +1 -0
- package/apps/web/dist/assets/changelog-DugmCNSf.js +1 -0
- package/apps/web/dist/assets/engenty-eXZ-EAwd.js +1 -0
- package/apps/web/dist/assets/esm-DXeMu8Lb.js +7 -0
- package/apps/web/dist/assets/fluffy-engenty-ClRou7yu.js +456 -0
- package/apps/web/dist/assets/index-AfUa8xKD.css +1 -0
- package/apps/web/dist/assets/index-C5Sm7tTR.js +14 -0
- package/apps/web/dist/assets/jsx-runtime-BNakU3Ej.js +1 -0
- package/apps/web/dist/assets/lock-R_CfU0Xo.js +1 -0
- package/apps/web/dist/assets/oss-credits-cZ9NUaLZ.js +1 -0
- package/apps/web/dist/assets/pdfmake-Cx9scTbD.js +228 -0
- package/apps/web/dist/assets/phone-CgrIS4_-.js +1 -0
- package/apps/web/dist/assets/preload-helper-CNEI7N0N.js +1 -0
- package/apps/web/dist/assets/qr-scanner-worker.min-CJaXo3yu.js +98 -0
- package/apps/web/dist/assets/qr-scanner.min-C_UI0gH-.js +1 -0
- package/apps/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/apps/web/dist/assets/settings-menu-2IMOOlLl.js +1 -0
- package/apps/web/dist/assets/ui-dzGvc3xk.js +137 -0
- package/apps/web/dist/assets/upload-BSuTilFF.js +1 -0
- package/apps/web/dist/assets/vfs_fonts-DllDSYt1.js +1 -0
- package/apps/web/dist/embed.js +266 -0
- package/apps/web/dist/favicon.svg +1 -0
- package/apps/web/dist/icons/apple-touch-icon.png +0 -0
- package/apps/web/dist/icons/icon-192.png +0 -0
- package/apps/web/dist/icons/icon-512.png +0 -0
- package/apps/web/dist/icons/icon-maskable-512.png +0 -0
- package/apps/web/dist/index.html +48 -0
- package/apps/web/dist/install.sh +577 -0
- package/apps/web/dist/manifest.webmanifest +21 -0
- package/apps/web/dist/mcp/flow.html +980 -0
- package/apps/web/dist/sw.js +15 -0
- package/bin/wizards.mjs +288 -0
- package/modules/README.md +15 -0
- package/node_modules/@engenty/wizards/dist/plugin/index.d.ts +1150 -0
- package/node_modules/@engenty/wizards/dist/plugin/index.js +4 -0
- package/node_modules/@engenty/wizards/dist/plugin/studio.d.ts +322 -0
- package/node_modules/@engenty/wizards/dist/plugin/studio.js +4 -0
- package/node_modules/@engenty/wizards/dist/plugin/thread.d.ts +174 -0
- package/node_modules/@engenty/wizards/dist/plugin/thread.js +821 -0
- package/node_modules/@engenty/wizards/package.json +11 -0
- package/node_modules/@engenty-wizards/shared/dist/assistant.d.ts +174 -0
- package/node_modules/@engenty-wizards/shared/dist/assistant.js +65 -0
- package/node_modules/@engenty-wizards/shared/dist/changes.d.ts +22 -0
- package/node_modules/@engenty-wizards/shared/dist/changes.js +61 -0
- package/node_modules/@engenty-wizards/shared/dist/connectors.d.ts +77 -0
- package/node_modules/@engenty-wizards/shared/dist/connectors.js +2 -0
- package/node_modules/@engenty-wizards/shared/dist/decision.d.ts +76 -0
- package/node_modules/@engenty-wizards/shared/dist/decision.js +147 -0
- package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +2922 -0
- package/node_modules/@engenty-wizards/shared/dist/definition.js +1920 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-format.d.ts +5 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-format.js +132 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-value.d.ts +11 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns-value.js +209 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns.d.ts +532 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/columns.js +217 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/index.d.ts +3 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/data-tables/index.js +3 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-lexical.d.ts +14 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-lexical.js +166 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-rank.d.ts +33 -0
- package/node_modules/@engenty-wizards/shared/dist/engenty/search-index/catalog-rank.js +99 -0
- package/node_modules/@engenty-wizards/shared/dist/feature-flags.d.ts +78 -0
- package/node_modules/@engenty-wizards/shared/dist/feature-flags.js +70 -0
- package/node_modules/@engenty-wizards/shared/dist/features.d.ts +41 -0
- package/node_modules/@engenty-wizards/shared/dist/features.js +89 -0
- package/node_modules/@engenty-wizards/shared/dist/fit.d.ts +71 -0
- package/node_modules/@engenty-wizards/shared/dist/fit.js +382 -0
- package/node_modules/@engenty-wizards/shared/dist/json-schema.d.ts +14 -0
- package/node_modules/@engenty-wizards/shared/dist/json-schema.js +66 -0
- package/node_modules/@engenty-wizards/shared/dist/knowledge.d.ts +199 -0
- package/node_modules/@engenty-wizards/shared/dist/knowledge.js +68 -0
- package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.d.ts +35 -0
- package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.js +107 -0
- package/node_modules/@engenty-wizards/shared/dist/marketplace-search.d.ts +20 -0
- package/node_modules/@engenty-wizards/shared/dist/marketplace-search.js +136 -0
- package/node_modules/@engenty-wizards/shared/dist/marketplace.d.ts +227 -0
- package/node_modules/@engenty-wizards/shared/dist/marketplace.js +354 -0
- package/node_modules/@engenty-wizards/shared/dist/merge.d.ts +7 -0
- package/node_modules/@engenty-wizards/shared/dist/merge.js +40 -0
- package/node_modules/@engenty-wizards/shared/dist/numbers.d.ts +24 -0
- package/node_modules/@engenty-wizards/shared/dist/numbers.js +54 -0
- package/node_modules/@engenty-wizards/shared/dist/projects.d.ts +224 -0
- package/node_modules/@engenty-wizards/shared/dist/projects.js +319 -0
- package/node_modules/@engenty-wizards/shared/dist/providers.d.ts +101 -0
- package/node_modules/@engenty-wizards/shared/dist/providers.js +390 -0
- package/node_modules/@engenty-wizards/shared/dist/run.d.ts +680 -0
- package/node_modules/@engenty-wizards/shared/dist/run.js +620 -0
- package/node_modules/@engenty-wizards/shared/dist/runner-texts.d.ts +546 -0
- package/node_modules/@engenty-wizards/shared/dist/runner-texts.js +523 -0
- package/node_modules/@engenty-wizards/shared/dist/runners.d.ts +93 -0
- package/node_modules/@engenty-wizards/shared/dist/runners.js +146 -0
- package/node_modules/@engenty-wizards/shared/dist/shape.d.ts +102 -0
- package/node_modules/@engenty-wizards/shared/dist/shape.js +318 -0
- package/node_modules/@engenty-wizards/shared/dist/space-data.d.ts +89 -0
- package/node_modules/@engenty-wizards/shared/dist/space-data.js +47 -0
- package/node_modules/@engenty-wizards/shared/dist/store.d.ts +117 -0
- package/node_modules/@engenty-wizards/shared/dist/store.js +81 -0
- package/node_modules/@engenty-wizards/shared/dist/surface.d.ts +115 -0
- package/node_modules/@engenty-wizards/shared/dist/surface.js +442 -0
- package/node_modules/@engenty-wizards/shared/dist/texts.d.ts +45 -0
- package/node_modules/@engenty-wizards/shared/dist/texts.js +54 -0
- package/node_modules/@engenty-wizards/shared/dist/translation.d.ts +23 -0
- package/node_modules/@engenty-wizards/shared/dist/translation.js +154 -0
- package/node_modules/@engenty-wizards/shared/dist/wizard-package.d.ts +48 -0
- package/node_modules/@engenty-wizards/shared/dist/wizard-package.js +49 -0
- package/node_modules/@engenty-wizards/shared/dist/workspace.d.ts +16 -0
- package/node_modules/@engenty-wizards/shared/dist/workspace.js +51 -0
- package/node_modules/@engenty-wizards/shared/package.json +10 -0
- package/package.json +77 -4
- package/plugin/.claude-plugin/plugin.json +9 -0
- package/plugin/.mcp.json +8 -0
- package/plugin/commands/wizard.md +8 -0
- package/plugin/skills/build-wizard/SKILL.md +27 -0
- package/plugin/skills/use-wizard/SKILL.md +18 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
// SPDX-License-Identifier: FSL-1.1-MIT OR MIT
|
|
2
|
+
/**
|
|
3
|
+
* Space-table column definitions.
|
|
4
|
+
*
|
|
5
|
+
* A table is a small database, not a CSV dump: every column has a type and a
|
|
6
|
+
* display format. Agents create the definition; row writes are validated
|
|
7
|
+
* against it.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
const COLUMN_ID = /^[a-z][a-z0-9_]*$/;
|
|
11
|
+
const columnBaseSchema = z.object({
|
|
12
|
+
description: z.string().max(1024).optional(),
|
|
13
|
+
/**
|
|
14
|
+
* Where the cell is edited. Omit to use the type default:
|
|
15
|
+
* single-line text and booleans are in-field; everything else is a popout.
|
|
16
|
+
*/
|
|
17
|
+
edit: z.enum(["inline", "popout"]).optional(),
|
|
18
|
+
id: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(64)
|
|
22
|
+
.regex(COLUMN_ID, "column id must be a lowercase slug (a-z, 0-9, _)"),
|
|
23
|
+
name: z.string().min(1).max(128),
|
|
24
|
+
required: z.boolean().optional(),
|
|
25
|
+
});
|
|
26
|
+
export const numberStyleSchema = z.enum([
|
|
27
|
+
"integer",
|
|
28
|
+
"decimal",
|
|
29
|
+
"percent",
|
|
30
|
+
"currency",
|
|
31
|
+
]);
|
|
32
|
+
export const numberFormatSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
currency: z
|
|
35
|
+
.string()
|
|
36
|
+
.regex(/^[A-Z]{3}$/, "currency must be an ISO 4217 code")
|
|
37
|
+
.optional(),
|
|
38
|
+
fractionDigits: z.number().int().min(0).max(8).optional(),
|
|
39
|
+
grouping: z.boolean().optional(),
|
|
40
|
+
style: numberStyleSchema,
|
|
41
|
+
})
|
|
42
|
+
.superRefine((val, ctx) => {
|
|
43
|
+
if (val.style === "currency" && !val.currency) {
|
|
44
|
+
ctx.addIssue({
|
|
45
|
+
code: "custom",
|
|
46
|
+
message: "currency style needs an ISO 4217 code",
|
|
47
|
+
path: ["currency"],
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (val.style !== "currency" && val.currency) {
|
|
51
|
+
ctx.addIssue({
|
|
52
|
+
code: "custom",
|
|
53
|
+
message: "currency is only valid on currency columns",
|
|
54
|
+
path: ["currency"],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
export const dateKindSchema = z.enum(["date", "datetime", "time"]);
|
|
59
|
+
export const dateStyleSchema = z.enum(["short", "medium", "long", "iso"]);
|
|
60
|
+
/** `hours` is clock time with no minutes — `14` or `14:30` both store as `14:00`. */
|
|
61
|
+
export const timePrecisionSchema = z.enum(["hours", "minutes", "seconds"]);
|
|
62
|
+
export const dateFormatSchema = z.object({
|
|
63
|
+
dateStyle: dateStyleSchema.optional(),
|
|
64
|
+
kind: dateKindSchema,
|
|
65
|
+
timePrecision: timePrecisionSchema.optional(),
|
|
66
|
+
});
|
|
67
|
+
export const durationUnitSchema = z.enum([
|
|
68
|
+
"milliseconds",
|
|
69
|
+
"seconds",
|
|
70
|
+
"minutes",
|
|
71
|
+
"hours",
|
|
72
|
+
"days",
|
|
73
|
+
]);
|
|
74
|
+
export const durationDisplaySchema = z.enum([
|
|
75
|
+
"hms",
|
|
76
|
+
"hours",
|
|
77
|
+
"minutes",
|
|
78
|
+
"decimal-hours",
|
|
79
|
+
"iso",
|
|
80
|
+
]);
|
|
81
|
+
export const durationFormatSchema = z.object({
|
|
82
|
+
display: durationDisplaySchema,
|
|
83
|
+
/** Unit a writer typically types; stored value is always milliseconds. */
|
|
84
|
+
inputUnit: durationUnitSchema,
|
|
85
|
+
});
|
|
86
|
+
export const selectOptionSchema = z.object({
|
|
87
|
+
id: z.string().min(1).max(64),
|
|
88
|
+
label: z.string().min(1).max(128),
|
|
89
|
+
});
|
|
90
|
+
export const selectFormatSchema = z.object({
|
|
91
|
+
/** Values outside `options` are kept as-is instead of rejected. */
|
|
92
|
+
allowCustom: z.boolean(),
|
|
93
|
+
multiple: z.boolean().optional(),
|
|
94
|
+
options: z.array(selectOptionSchema).max(200),
|
|
95
|
+
});
|
|
96
|
+
export const textStyleSchema = z.enum(["single", "multiline", "markdown"]);
|
|
97
|
+
export const textFormatSchema = z.object({
|
|
98
|
+
/** `single` is one line; `multiline` is plain wrapping text; `markdown` is inline marks. */
|
|
99
|
+
style: textStyleSchema.default("single"),
|
|
100
|
+
});
|
|
101
|
+
export const tableColumnSchema = z.discriminatedUnion("type", [
|
|
102
|
+
columnBaseSchema.extend({
|
|
103
|
+
format: textFormatSchema.optional(),
|
|
104
|
+
type: z.literal("text"),
|
|
105
|
+
}),
|
|
106
|
+
columnBaseSchema.extend({
|
|
107
|
+
format: numberFormatSchema,
|
|
108
|
+
type: z.literal("number"),
|
|
109
|
+
}),
|
|
110
|
+
columnBaseSchema.extend({
|
|
111
|
+
format: dateFormatSchema,
|
|
112
|
+
type: z.literal("date"),
|
|
113
|
+
}),
|
|
114
|
+
columnBaseSchema.extend({
|
|
115
|
+
format: durationFormatSchema,
|
|
116
|
+
type: z.literal("duration"),
|
|
117
|
+
}),
|
|
118
|
+
columnBaseSchema.extend({
|
|
119
|
+
format: selectFormatSchema,
|
|
120
|
+
type: z.literal("select"),
|
|
121
|
+
}),
|
|
122
|
+
columnBaseSchema.extend({ type: z.literal("boolean") }),
|
|
123
|
+
]);
|
|
124
|
+
export function textColumnStyle(column) {
|
|
125
|
+
return column.type === "text" ? (column.format?.style ?? "single") : "single";
|
|
126
|
+
}
|
|
127
|
+
/** Where this cell is edited. Explicit `edit` wins; otherwise type defaults. */
|
|
128
|
+
export function columnEdit(column) {
|
|
129
|
+
if (column.edit) {
|
|
130
|
+
return column.edit;
|
|
131
|
+
}
|
|
132
|
+
if (column.type === "boolean") {
|
|
133
|
+
return "inline";
|
|
134
|
+
}
|
|
135
|
+
if (column.type === "text" && textColumnStyle(column) === "single") {
|
|
136
|
+
return "inline";
|
|
137
|
+
}
|
|
138
|
+
return "popout";
|
|
139
|
+
}
|
|
140
|
+
export const tableColumnsSchema = z
|
|
141
|
+
.array(tableColumnSchema)
|
|
142
|
+
.min(1)
|
|
143
|
+
.max(64)
|
|
144
|
+
.superRefine((columns, ctx) => {
|
|
145
|
+
const seen = new Set();
|
|
146
|
+
for (let i = 0; i < columns.length; i++) {
|
|
147
|
+
const id = columns[i]?.id;
|
|
148
|
+
if (!id) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (seen.has(id)) {
|
|
152
|
+
ctx.addIssue({
|
|
153
|
+
code: "custom",
|
|
154
|
+
message: `duplicate column id "${id}"`,
|
|
155
|
+
path: [i, "id"],
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
seen.add(id);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
/**
|
|
162
|
+
* The shape a MODEL is shown for `columns`, as opposed to the one we validate.
|
|
163
|
+
*
|
|
164
|
+
* `tableColumnsSchema` is a six-branch discriminated union that repeats the
|
|
165
|
+
* whole column base per branch. As a tool's JSON Schema that came to 14.7 KB —
|
|
166
|
+
* on its own 5% of a copilot prompt, resent on every model call of every run,
|
|
167
|
+
* whether or not a table is in play. The union earns that as a *contract*; it
|
|
168
|
+
* does not earn it as a *hint*.
|
|
169
|
+
*
|
|
170
|
+
* So the wire shape is one flat object with every format key optional, and the
|
|
171
|
+
* tool re-parses the result with `tableColumnsSchema` before doing anything.
|
|
172
|
+
* Validation is unchanged and the error the model gets back is the strict
|
|
173
|
+
* schema's own; only the advertisement shrinks. Per-type rules live in the
|
|
174
|
+
* tool description, which the model reads anyway.
|
|
175
|
+
*/
|
|
176
|
+
export const tableColumnWireSchema = z.object({
|
|
177
|
+
description: z.string().optional(),
|
|
178
|
+
edit: z.enum(["inline", "popout"]).optional(),
|
|
179
|
+
format: z
|
|
180
|
+
.object({
|
|
181
|
+
allowCustom: z.boolean().optional(),
|
|
182
|
+
currency: z.string().optional(),
|
|
183
|
+
dateStyle: z.enum(["short", "medium", "long", "iso"]).optional(),
|
|
184
|
+
display: durationDisplaySchema.optional(),
|
|
185
|
+
fractionDigits: z.number().int().optional(),
|
|
186
|
+
grouping: z.boolean().optional(),
|
|
187
|
+
inputUnit: durationUnitSchema.optional(),
|
|
188
|
+
kind: dateKindSchema.optional(),
|
|
189
|
+
multiple: z.boolean().optional(),
|
|
190
|
+
options: z.array(selectOptionSchema).optional(),
|
|
191
|
+
// `style` spans text and number columns; which values are legal follows
|
|
192
|
+
// from `type`, and the strict schema is what decides.
|
|
193
|
+
style: z
|
|
194
|
+
.enum([
|
|
195
|
+
"single",
|
|
196
|
+
"multiline",
|
|
197
|
+
"markdown",
|
|
198
|
+
"integer",
|
|
199
|
+
"decimal",
|
|
200
|
+
"percent",
|
|
201
|
+
"currency",
|
|
202
|
+
])
|
|
203
|
+
.optional(),
|
|
204
|
+
timePrecision: timePrecisionSchema.optional(),
|
|
205
|
+
})
|
|
206
|
+
.optional(),
|
|
207
|
+
id: z.string(),
|
|
208
|
+
name: z.string(),
|
|
209
|
+
required: z.boolean().optional(),
|
|
210
|
+
type: z.enum(["text", "number", "date", "duration", "select", "boolean"]),
|
|
211
|
+
});
|
|
212
|
+
export const tableColumnsWireSchema = z.array(tableColumnWireSchema);
|
|
213
|
+
export const DATA_TABLE_ARTIFACT_TYPE = "database";
|
|
214
|
+
export const DATA_TABLE_MIME_TYPE = "application/vnd.engenty.database+json";
|
|
215
|
+
export const dataTableHandleSchema = z.object({
|
|
216
|
+
table_id: z.string().uuid(),
|
|
217
|
+
});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { type ColumnEdit, columnEdit, DATA_TABLE_ARTIFACT_TYPE, DATA_TABLE_MIME_TYPE, type DataTableHandle, type DateFormat, type DateKind, type DateStyle, type DurationDisplay, type DurationFormat, type DurationUnit, dataTableHandleSchema, dateFormatSchema, durationFormatSchema, type NumberFormat, type NumberStyle, numberFormatSchema, type SelectFormat, type SelectOption, selectFormatSchema, type TableColumn, type TableColumnWire, type TextFormat, type TextStyle, type TimePrecision, tableColumnSchema, tableColumnsSchema, tableColumnsWireSchema, tableColumnWireSchema, textColumnStyle, textFormatSchema, textStyleSchema, } from "./columns.js";
|
|
2
|
+
export { formatDateCell, formatDurationCell, formatNumberCell, formatTableCell, } from "./columns-format.js";
|
|
3
|
+
export { coerceColumnValue, coerceRowValues, mergeRowValues, parseTableColumns, TableColumnValueError, } from "./columns-value.js";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { columnEdit, DATA_TABLE_ARTIFACT_TYPE, DATA_TABLE_MIME_TYPE, dataTableHandleSchema, dateFormatSchema, durationFormatSchema, numberFormatSchema, selectFormatSchema, tableColumnSchema, tableColumnsSchema, tableColumnsWireSchema, tableColumnWireSchema, textColumnStyle, textFormatSchema, textStyleSchema, } from "./columns.js";
|
|
2
|
+
export { formatDateCell, formatDurationCell, formatNumberCell, formatTableCell, } from "./columns-format.js";
|
|
3
|
+
export { coerceColumnValue, coerceRowValues, mergeRowValues, parseTableColumns, TableColumnValueError, } from "./columns-value.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type CatalogSearchEntry = Record<string, unknown>;
|
|
2
|
+
export type CatalogFieldWeights = ReadonlyArray<readonly [string, number]>;
|
|
3
|
+
export declare const CATALOG_FIELD_WEIGHTS: CatalogFieldWeights;
|
|
4
|
+
export declare function tokenizeCatalogText(value: string): string[];
|
|
5
|
+
export declare function stringifyCatalogSearchValue(value: unknown): string;
|
|
6
|
+
/**
|
|
7
|
+
* Weighted "key: value" text for an entry — the canonical input for
|
|
8
|
+
* embedding an entry when a consumer layers semantic search on top.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildCatalogSearchText(entry: CatalogSearchEntry, weights?: CatalogFieldWeights): string;
|
|
11
|
+
/** BM25-like weighted-field lexical score; 0 when the query has no overlap. */
|
|
12
|
+
export declare function scoreCatalogEntry(entry: CatalogSearchEntry, query?: string, weights?: CatalogFieldWeights): number;
|
|
13
|
+
/** Sort entries by precomputed lexical score, dropping zero-score entries. */
|
|
14
|
+
export declare function rankLexically<T extends CatalogSearchEntry>(entries: T[], lexicalScores: number[]): T[];
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// Shared lexical scoring for API-catalog-shaped entries.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from apps/core's api-catalog search so both apps/core (the
|
|
4
|
+
// `core_api_catalog_search` gateway method, lexical-only) and apps/ai
|
|
5
|
+
// (the agent-facing catalog provider, which layers semantic reranking on
|
|
6
|
+
// top) score entries the same way. Entries are plain records; callers
|
|
7
|
+
// pick which fields matter via a weight list.
|
|
8
|
+
// Default weights match the historical apps/core catalog ranking (entries
|
|
9
|
+
// produced by buildApiCatalog: HTTP routes + tool operations).
|
|
10
|
+
export const CATALOG_FIELD_WEIGHTS = [
|
|
11
|
+
["id", 8],
|
|
12
|
+
["toolId", 10],
|
|
13
|
+
["moduleId", 7],
|
|
14
|
+
["pluginId", 6],
|
|
15
|
+
["title", 6],
|
|
16
|
+
["description", 4],
|
|
17
|
+
["tags", 3],
|
|
18
|
+
["path", 3],
|
|
19
|
+
["inputSchema", 2],
|
|
20
|
+
["outputSchema", 2],
|
|
21
|
+
["request", 1],
|
|
22
|
+
["response", 1],
|
|
23
|
+
];
|
|
24
|
+
function normalizeText(value) {
|
|
25
|
+
return value
|
|
26
|
+
.normalize("NFKD")
|
|
27
|
+
.replace(/[̀-ͯ]/g, "")
|
|
28
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
29
|
+
.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
export function tokenizeCatalogText(value) {
|
|
32
|
+
return normalizeText(value)
|
|
33
|
+
.split(/[^a-z0-9]+/)
|
|
34
|
+
.map((token) => token.trim())
|
|
35
|
+
.filter((token) => token.length > 1);
|
|
36
|
+
}
|
|
37
|
+
export function stringifyCatalogSearchValue(value) {
|
|
38
|
+
if (value == null) {
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(value)) {
|
|
42
|
+
return value.map(stringifyCatalogSearchValue).filter(Boolean).join(" ");
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === "object") {
|
|
45
|
+
return Object.values(value)
|
|
46
|
+
.map(stringifyCatalogSearchValue)
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.join(" ");
|
|
49
|
+
}
|
|
50
|
+
return String(value);
|
|
51
|
+
}
|
|
52
|
+
function buildSearchDocument(entry, weights) {
|
|
53
|
+
const fields = weights
|
|
54
|
+
.map(([key, weight]) => ({
|
|
55
|
+
text: stringifyCatalogSearchValue(entry[key]),
|
|
56
|
+
weight,
|
|
57
|
+
}))
|
|
58
|
+
.filter((field) => field.text.length > 0);
|
|
59
|
+
const tokens = fields.flatMap((field) => tokenizeCatalogText(field.text));
|
|
60
|
+
return { fields, tokens };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Weighted "key: value" text for an entry — the canonical input for
|
|
64
|
+
* embedding an entry when a consumer layers semantic search on top.
|
|
65
|
+
*/
|
|
66
|
+
export function buildCatalogSearchText(entry, weights = CATALOG_FIELD_WEIGHTS) {
|
|
67
|
+
return weights
|
|
68
|
+
.map(([key]) => {
|
|
69
|
+
const value = stringifyCatalogSearchValue(entry[key]);
|
|
70
|
+
return value ? `${key}: ${value}` : "";
|
|
71
|
+
})
|
|
72
|
+
.filter(Boolean)
|
|
73
|
+
.join("\n");
|
|
74
|
+
}
|
|
75
|
+
function inflectionStems(token) {
|
|
76
|
+
const stems = [token];
|
|
77
|
+
if (token.length < 5) {
|
|
78
|
+
return stems;
|
|
79
|
+
}
|
|
80
|
+
if (token.endsWith("ing")) {
|
|
81
|
+
const base = token.slice(0, -3);
|
|
82
|
+
if (base.length >= 3) {
|
|
83
|
+
stems.push(base, `${base}e`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (token.endsWith("ies") && token.length >= 6) {
|
|
87
|
+
stems.push(`${token.slice(0, -3)}y`);
|
|
88
|
+
}
|
|
89
|
+
else if (token.endsWith("es")) {
|
|
90
|
+
stems.push(token.slice(0, -2), token.slice(0, -1));
|
|
91
|
+
}
|
|
92
|
+
else if (token.endsWith("ed")) {
|
|
93
|
+
const base = token.slice(0, -2);
|
|
94
|
+
stems.push(base, `${base}e`);
|
|
95
|
+
}
|
|
96
|
+
else if (token.endsWith("s") && !token.endsWith("ss")) {
|
|
97
|
+
stems.push(token.slice(0, -1));
|
|
98
|
+
}
|
|
99
|
+
return [...new Set(stems)];
|
|
100
|
+
}
|
|
101
|
+
function tokenMatchStrength(queryToken, candidate) {
|
|
102
|
+
if (queryToken === candidate) {
|
|
103
|
+
return 1;
|
|
104
|
+
}
|
|
105
|
+
let best = 0;
|
|
106
|
+
for (const queryStem of inflectionStems(queryToken)) {
|
|
107
|
+
for (const candidateStem of inflectionStems(candidate)) {
|
|
108
|
+
if (queryStem === candidateStem) {
|
|
109
|
+
best = Math.max(best, queryStem === queryToken && candidateStem === candidate ? 1 : 0.75);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (queryStem.length >= 2 && candidateStem.startsWith(queryStem)) {
|
|
113
|
+
best = Math.max(best, 0.55 * (queryStem.length / candidateStem.length));
|
|
114
|
+
}
|
|
115
|
+
if (candidateStem.length >= 4 && queryStem.startsWith(candidateStem)) {
|
|
116
|
+
best = Math.max(best, 0.4 * (candidateStem.length / queryStem.length));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return best;
|
|
121
|
+
}
|
|
122
|
+
function weightedTokenFrequency(tokens, queryToken) {
|
|
123
|
+
return tokens.reduce((sum, token) => sum + tokenMatchStrength(queryToken, token), 0);
|
|
124
|
+
}
|
|
125
|
+
/** BM25-like weighted-field lexical score; 0 when the query has no overlap. */
|
|
126
|
+
export function scoreCatalogEntry(entry, query, weights = CATALOG_FIELD_WEIGHTS) {
|
|
127
|
+
if (!query?.trim()) {
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
const queryTokens = tokenizeCatalogText(query);
|
|
131
|
+
if (queryTokens.length === 0) {
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
const document = buildSearchDocument(entry, weights);
|
|
135
|
+
if (document.tokens.length === 0) {
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
return queryTokens.reduce((score, token) => {
|
|
139
|
+
const termFrequency = weightedTokenFrequency(document.tokens, token);
|
|
140
|
+
if (termFrequency === 0) {
|
|
141
|
+
return score;
|
|
142
|
+
}
|
|
143
|
+
const fieldScore = document.fields.reduce((sum, field) => {
|
|
144
|
+
const fieldTokens = tokenizeCatalogText(field.text);
|
|
145
|
+
const fieldFrequency = weightedTokenFrequency(fieldTokens, token);
|
|
146
|
+
if (fieldFrequency === 0) {
|
|
147
|
+
return sum;
|
|
148
|
+
}
|
|
149
|
+
const bm25Like = (fieldFrequency * 2.2) /
|
|
150
|
+
(fieldFrequency + 1.2 + fieldTokens.length / 16);
|
|
151
|
+
return sum + field.weight * bm25Like;
|
|
152
|
+
}, 0);
|
|
153
|
+
return score + fieldScore;
|
|
154
|
+
}, 0);
|
|
155
|
+
}
|
|
156
|
+
/** Sort entries by precomputed lexical score, dropping zero-score entries. */
|
|
157
|
+
export function rankLexically(entries, lexicalScores) {
|
|
158
|
+
return entries
|
|
159
|
+
.map((entry, index) => ({
|
|
160
|
+
entry,
|
|
161
|
+
score: lexicalScores[index] ?? 0,
|
|
162
|
+
}))
|
|
163
|
+
.filter((item) => item.score > 0)
|
|
164
|
+
.sort((a, b) => b.score - a.score)
|
|
165
|
+
.map((item) => item.entry);
|
|
166
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type CatalogFieldWeights, type CatalogSearchEntry } from "./catalog-lexical.js";
|
|
2
|
+
export type CatalogRankStrategy = "hybrid" | "lexical" | "semantic";
|
|
3
|
+
/** Name/description records (space modules, skills, connections, agents). */
|
|
4
|
+
export declare const RECORD_CATALOG_FIELD_WEIGHTS: CatalogFieldWeights;
|
|
5
|
+
/**
|
|
6
|
+
* Rank name/description records by lexical BM25 (prefix + inflection).
|
|
7
|
+
* Empty query keeps input order; zero-score rows drop out.
|
|
8
|
+
*/
|
|
9
|
+
export declare function rankRecordsLexically<T>(items: readonly T[], query: string, toRecord: (item: T) => CatalogSearchEntry, weights?: CatalogFieldWeights): T[];
|
|
10
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
11
|
+
export declare function blendCatalogScores(params: {
|
|
12
|
+
lexical: number;
|
|
13
|
+
maxLexical: number;
|
|
14
|
+
semantic: number;
|
|
15
|
+
strategy: CatalogRankStrategy;
|
|
16
|
+
}): number;
|
|
17
|
+
export interface ScoredCatalogItem<T> {
|
|
18
|
+
entry: T;
|
|
19
|
+
lexical: number;
|
|
20
|
+
score: number;
|
|
21
|
+
semantic: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Sort catalog rows by blended score. Lexical hits always survive; semantic
|
|
25
|
+
* hits need to clear `minSemantic` (default 0 means any cosine > 0).
|
|
26
|
+
*/
|
|
27
|
+
export declare function rankScoredCatalog<T>(items: ReadonlyArray<{
|
|
28
|
+
entry: T;
|
|
29
|
+
lexical: number;
|
|
30
|
+
semantic: number;
|
|
31
|
+
}>, strategy: CatalogRankStrategy, options?: {
|
|
32
|
+
minSemantic?: number;
|
|
33
|
+
}): ScoredCatalogItem<T>[];
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Shared hybrid ranking for catalog-shaped records.
|
|
2
|
+
//
|
|
3
|
+
// Lexical BM25 lives in catalog-lexical.ts. This module blends those scores
|
|
4
|
+
// with cosine similarity when a consumer (apps/ai today) supplies embeddings.
|
|
5
|
+
// UI pickers can call rankScoredCatalog with semantic=0 for lexical-only.
|
|
6
|
+
import { scoreCatalogEntry, } from "./catalog-lexical.js";
|
|
7
|
+
/** Name/description records (space modules, skills, connections, agents). */
|
|
8
|
+
export const RECORD_CATALOG_FIELD_WEIGHTS = [
|
|
9
|
+
["name", 10],
|
|
10
|
+
["id", 8],
|
|
11
|
+
["title", 6],
|
|
12
|
+
["summary", 6],
|
|
13
|
+
["description", 6],
|
|
14
|
+
["category", 5],
|
|
15
|
+
["modules", 4],
|
|
16
|
+
["connectorId", 4],
|
|
17
|
+
["role", 3],
|
|
18
|
+
["tags", 3],
|
|
19
|
+
["source", 2],
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Rank name/description records by lexical BM25 (prefix + inflection).
|
|
23
|
+
* Empty query keeps input order; zero-score rows drop out.
|
|
24
|
+
*/
|
|
25
|
+
export function rankRecordsLexically(items, query, toRecord, weights = RECORD_CATALOG_FIELD_WEIGHTS) {
|
|
26
|
+
const trimmed = query.trim();
|
|
27
|
+
if (!trimmed) {
|
|
28
|
+
return [...items];
|
|
29
|
+
}
|
|
30
|
+
return items
|
|
31
|
+
.map((item) => ({
|
|
32
|
+
item,
|
|
33
|
+
score: scoreCatalogEntry(toRecord(item), trimmed, weights),
|
|
34
|
+
}))
|
|
35
|
+
.filter((row) => row.score > 0)
|
|
36
|
+
.sort((left, right) => right.score - left.score)
|
|
37
|
+
.map((row) => row.item);
|
|
38
|
+
}
|
|
39
|
+
export function cosineSimilarity(a, b) {
|
|
40
|
+
const length = Math.min(a.length, b.length);
|
|
41
|
+
if (length === 0) {
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
let dot = 0;
|
|
45
|
+
let left = 0;
|
|
46
|
+
let right = 0;
|
|
47
|
+
for (let index = 0; index < length; index += 1) {
|
|
48
|
+
const aValue = a[index] ?? 0;
|
|
49
|
+
const bValue = b[index] ?? 0;
|
|
50
|
+
dot += aValue * bValue;
|
|
51
|
+
left += aValue * aValue;
|
|
52
|
+
right += bValue * bValue;
|
|
53
|
+
}
|
|
54
|
+
const denominator = Math.sqrt(left) * Math.sqrt(right);
|
|
55
|
+
if (denominator === 0) {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
return dot / denominator;
|
|
59
|
+
}
|
|
60
|
+
export function blendCatalogScores(params) {
|
|
61
|
+
if (params.strategy === "lexical") {
|
|
62
|
+
return params.lexical;
|
|
63
|
+
}
|
|
64
|
+
if (params.strategy === "semantic") {
|
|
65
|
+
return params.semantic;
|
|
66
|
+
}
|
|
67
|
+
const normalizedLexical = params.maxLexical > 0 ? params.lexical / params.maxLexical : 0;
|
|
68
|
+
return params.semantic * 0.65 + normalizedLexical * 0.35;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Sort catalog rows by blended score. Lexical hits always survive; semantic
|
|
72
|
+
* hits need to clear `minSemantic` (default 0 means any cosine > 0).
|
|
73
|
+
*/
|
|
74
|
+
export function rankScoredCatalog(items, strategy, options = {}) {
|
|
75
|
+
const minSemantic = options.minSemantic ?? 0;
|
|
76
|
+
const maxLexical = Math.max(...items.map((item) => item.lexical), 0);
|
|
77
|
+
return items
|
|
78
|
+
.map((item) => ({
|
|
79
|
+
entry: item.entry,
|
|
80
|
+
lexical: item.lexical,
|
|
81
|
+
score: blendCatalogScores({
|
|
82
|
+
lexical: item.lexical,
|
|
83
|
+
maxLexical,
|
|
84
|
+
semantic: item.semantic,
|
|
85
|
+
strategy,
|
|
86
|
+
}),
|
|
87
|
+
semantic: item.semantic,
|
|
88
|
+
}))
|
|
89
|
+
.filter((item) => {
|
|
90
|
+
if (strategy === "lexical") {
|
|
91
|
+
return item.lexical > 0;
|
|
92
|
+
}
|
|
93
|
+
if (strategy === "semantic") {
|
|
94
|
+
return item.semantic > minSemantic;
|
|
95
|
+
}
|
|
96
|
+
return item.lexical > 0 || item.semantic > minSemantic;
|
|
97
|
+
})
|
|
98
|
+
.sort((a, b) => b.score - a.score);
|
|
99
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The feature flags of the core: the parts that ship in the code but are not on for everyone
|
|
3
|
+
* yet (`release`), and the parts a plan includes (`plan`). This file is the list – add a flag
|
|
4
|
+
* here, branch on it with `useFeature("name")` in the studio or `feature("name")` in the
|
|
5
|
+
* runtime, and delete it with its branches once its default became `true`.
|
|
6
|
+
*
|
|
7
|
+
* How a flag gets its value (defaults here → `FEATURES` env → the Manage-App → the `.features`
|
|
8
|
+
* file) lives in features.ts. A plugin's flags are declared in its manifest under `features`
|
|
9
|
+
* and are known as `<plugin id>.<name>`; they do not belong here. No public page lists these.
|
|
10
|
+
*/
|
|
11
|
+
export interface FeatureDeclaration {
|
|
12
|
+
kind: "release" | "plan";
|
|
13
|
+
/** What counts until a layer says otherwise. */
|
|
14
|
+
default: boolean;
|
|
15
|
+
/** A few words for the lists: `wizards features`, the admin's switches. */
|
|
16
|
+
label: string;
|
|
17
|
+
hint?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* One entry per flag. `kind: "release"`: on or off for everyone by default, turned on for a
|
|
21
|
+
* team or a machine before the default flips. `kind: "plan"`: on until a plan says `false`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const FEATURES: {
|
|
24
|
+
readonly account: {
|
|
25
|
+
readonly kind: "release";
|
|
26
|
+
readonly default: true;
|
|
27
|
+
readonly label: "Account in a local install";
|
|
28
|
+
readonly hint: "Linking, Settings → Account, the offer to sign in.";
|
|
29
|
+
};
|
|
30
|
+
readonly unsetConnectors: {
|
|
31
|
+
readonly kind: "release";
|
|
32
|
+
readonly default: false;
|
|
33
|
+
readonly label: "Connectors without an OAuth client";
|
|
34
|
+
readonly hint: "Built-in connectors are shown although their client is not set up.";
|
|
35
|
+
};
|
|
36
|
+
readonly site: {
|
|
37
|
+
readonly kind: "release";
|
|
38
|
+
readonly default: false;
|
|
39
|
+
readonly label: "Link to the website in the setup";
|
|
40
|
+
readonly hint: "The local install's setup links the product's site.";
|
|
41
|
+
};
|
|
42
|
+
readonly teamPlans: {
|
|
43
|
+
readonly kind: "release";
|
|
44
|
+
readonly default: false;
|
|
45
|
+
readonly label: "Team plans";
|
|
46
|
+
readonly hint: "The team page in the cloud studio, and plans that carry this switch on the account pages.";
|
|
47
|
+
};
|
|
48
|
+
readonly brandSections: {
|
|
49
|
+
readonly kind: "release";
|
|
50
|
+
readonly default: false;
|
|
51
|
+
readonly label: "Sections in Info & brand";
|
|
52
|
+
readonly hint: "Sections of logos and of colours, gradients and patterns among them.";
|
|
53
|
+
};
|
|
54
|
+
readonly brandRules: {
|
|
55
|
+
readonly kind: "release";
|
|
56
|
+
readonly default: false;
|
|
57
|
+
readonly label: "Rules in Info & brand";
|
|
58
|
+
readonly hint: "Rules for how the logos, the colours and the type may be used.";
|
|
59
|
+
};
|
|
60
|
+
readonly typography: {
|
|
61
|
+
readonly kind: "release";
|
|
62
|
+
readonly default: false;
|
|
63
|
+
readonly label: "Typography in Info & brand";
|
|
64
|
+
readonly hint: "The brand's fonts, their licences and a type scale.";
|
|
65
|
+
};
|
|
66
|
+
readonly goose: {
|
|
67
|
+
readonly kind: "release";
|
|
68
|
+
readonly default: false;
|
|
69
|
+
readonly label: "Goose";
|
|
70
|
+
readonly hint: "The studio's assistant: its chat at the foot of the page and in the sidebar.";
|
|
71
|
+
};
|
|
72
|
+
readonly ownKeys: {
|
|
73
|
+
readonly kind: "plan";
|
|
74
|
+
readonly default: true;
|
|
75
|
+
readonly label: "Own API keys";
|
|
76
|
+
readonly hint: "The team puts its providers' keys into the cloud studio instead of running on credits.";
|
|
77
|
+
};
|
|
78
|
+
};
|