@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,353 @@
|
|
|
1
|
+
import { createTool } from "@mastra/core/tools";
|
|
2
|
+
import { and, desc, eq, inArray } from "drizzle-orm";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { accountOverview, accountToken, linkedAccount } from "../auth/account.js";
|
|
5
|
+
import { authoringGuide } from "../authoring/guide.js";
|
|
6
|
+
import { listConnectors } from "../connectors/external.js";
|
|
7
|
+
import { db, schema } from "../db/client.js";
|
|
8
|
+
import { env } from "../env.js";
|
|
9
|
+
import { detectHarnesses } from "../harness/index.js";
|
|
10
|
+
import { managed, publicPlans, tenantInfo, tenantUsage } from "../manage.js";
|
|
11
|
+
import { classWays, waysIn } from "../models.js";
|
|
12
|
+
import { pluginToolsOf } from "../plugins/registry.js";
|
|
13
|
+
import { earlierChats, readChat, searchChats } from "../services/assistant-chats.js";
|
|
14
|
+
import { asLang, marketplaceDetail, searchMarketplace } from "../services/marketplace.js";
|
|
15
|
+
import { listWizards } from "../services/wizards.js";
|
|
16
|
+
import { serverText } from "../texts.js";
|
|
17
|
+
import { attempt } from "../tools/shared.js";
|
|
18
|
+
import { readDoc, searchDocs } from "./docs.js";
|
|
19
|
+
/** Where the account lives: the runtime's Manage-App, or the account a local install links. */
|
|
20
|
+
const accountBase = () => (managed ? env.manage.url : env.local.accountUrl);
|
|
21
|
+
async function usageOf(tenantId) {
|
|
22
|
+
if (managed) {
|
|
23
|
+
return tenantUsage(tenantId, 3);
|
|
24
|
+
}
|
|
25
|
+
const token = await accountToken();
|
|
26
|
+
if (!token) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const res = await fetch(`${env.local.accountUrl}/v1/me/usage?months=3`, {
|
|
30
|
+
headers: { authorization: `Bearer ${token}` },
|
|
31
|
+
signal: AbortSignal.timeout(10_000),
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
throw new Error(`The account answered ${res.status}.`);
|
|
35
|
+
}
|
|
36
|
+
return (await res.json());
|
|
37
|
+
}
|
|
38
|
+
const NOT_LINKED = "This install is not linked to an account. Settings › Account signs one in; then credits, cloud publishing and plans apply. Docs and the gallery work without one.";
|
|
39
|
+
export function knowsTools(ctx) {
|
|
40
|
+
const { user } = ctx;
|
|
41
|
+
// The entries this turn's searches found, so show_templates needs no second request.
|
|
42
|
+
const found = new Map();
|
|
43
|
+
return {
|
|
44
|
+
docs_search: createTool({
|
|
45
|
+
id: "docs_search",
|
|
46
|
+
description: "Search the engenty wizards user guide and plugin guide of this installed version. Gives the best sections with an excerpt and their engenty.ai/docs link. Use it before you explain how something works.",
|
|
47
|
+
inputSchema: z.object({ query: z.string().min(2).max(200) }),
|
|
48
|
+
execute: async ({ query }) => {
|
|
49
|
+
ctx.doing(serverText(ctx.lang, "doingReadGuide"));
|
|
50
|
+
return { hits: searchDocs(query) };
|
|
51
|
+
},
|
|
52
|
+
}),
|
|
53
|
+
docs_read: createTool({
|
|
54
|
+
id: "docs_read",
|
|
55
|
+
description: "Read one page of the guides by its id from docs_search (user/steps, dev/plugins/tools), from a character on.",
|
|
56
|
+
inputSchema: z.object({
|
|
57
|
+
page: z.string().min(1).max(200),
|
|
58
|
+
from: z.number().int().min(0).optional(),
|
|
59
|
+
}),
|
|
60
|
+
execute: async ({ page, from }) => {
|
|
61
|
+
ctx.doing(serverText(ctx.lang, "doingReadGuide"));
|
|
62
|
+
return readDoc(page, from ?? 0);
|
|
63
|
+
},
|
|
64
|
+
}),
|
|
65
|
+
authoring_guide: createTool({
|
|
66
|
+
id: "authoring_guide",
|
|
67
|
+
description: "The authoring guide the wizard editor and AI apps build with: how a wizard is written (steps, fields, flows, tools, outputs, model classes). Long: read it in parts with `from`.",
|
|
68
|
+
inputSchema: z.object({ from: z.number().int().min(0).optional() }),
|
|
69
|
+
execute: ({ from }) => attempt(async () => {
|
|
70
|
+
ctx.doing(serverText(ctx.lang, "doingAuthoringGuide"));
|
|
71
|
+
const guide = authoringGuide(ctx.project?.mcpServers ?? [], ctx.project ? await listConnectors(ctx.project.id) : [], await pluginToolsOf(user.tenantId));
|
|
72
|
+
const start = Math.min(from ?? 0, guide.length);
|
|
73
|
+
return {
|
|
74
|
+
text: guide.slice(start, start + 14_000),
|
|
75
|
+
next: start + 14_000 < guide.length ? start + 14_000 : null,
|
|
76
|
+
};
|
|
77
|
+
}),
|
|
78
|
+
}),
|
|
79
|
+
gallery_search: createTool({
|
|
80
|
+
id: "gallery_search",
|
|
81
|
+
description: "Search the gallery of wizard templates (engenty.ai/wizards and the plugins' starters): title, pitch, what it needs that this install has no model for, and its price per run in credits.",
|
|
82
|
+
inputSchema: z.object({ query: z.string().max(200).optional() }),
|
|
83
|
+
execute: ({ query }) => attempt(async () => {
|
|
84
|
+
ctx.doing(serverText(ctx.lang, "doingGallery"));
|
|
85
|
+
const hits = await searchMarketplace({
|
|
86
|
+
q: query ?? "",
|
|
87
|
+
lang: asLang(ctx.lang),
|
|
88
|
+
limit: 8,
|
|
89
|
+
});
|
|
90
|
+
for (const e of hits.entries) {
|
|
91
|
+
found.set(e.id, e);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
total: hits.total,
|
|
95
|
+
offline: hits.offline,
|
|
96
|
+
entries: hits.entries.map((e) => ({
|
|
97
|
+
id: e.id,
|
|
98
|
+
title: e.title,
|
|
99
|
+
pitch: e.pitch,
|
|
100
|
+
formats: e.formats,
|
|
101
|
+
steps: e.steps,
|
|
102
|
+
credits: e.credits,
|
|
103
|
+
missing: e.missing,
|
|
104
|
+
needsPlugins: e.needs ?? [],
|
|
105
|
+
plugin: e.plugin?.name,
|
|
106
|
+
})),
|
|
107
|
+
};
|
|
108
|
+
}),
|
|
109
|
+
}),
|
|
110
|
+
gallery_detail: createTool({
|
|
111
|
+
id: "gallery_detail",
|
|
112
|
+
description: "One template of the gallery: what it does, its steps, what it makes and needs.",
|
|
113
|
+
inputSchema: z.object({ id: z.string().min(1).max(120) }),
|
|
114
|
+
execute: ({ id }) => attempt(async () => {
|
|
115
|
+
const detail = await marketplaceDetail(id, asLang(ctx.lang));
|
|
116
|
+
if (!detail) {
|
|
117
|
+
return { error: "No such template." };
|
|
118
|
+
}
|
|
119
|
+
const { terms: _terms, hash: _hash, ...rest } = detail;
|
|
120
|
+
return rest;
|
|
121
|
+
}),
|
|
122
|
+
}),
|
|
123
|
+
show_templates: createTool({
|
|
124
|
+
id: "show_templates",
|
|
125
|
+
description: "Show templates of the gallery as cards under your answer, in the order given. A card shows the title, the pitch, the time, the cost and what it makes; the person opens it to see the steps and make a wizard of it.",
|
|
126
|
+
inputSchema: z.object({ ids: z.array(z.string().min(1).max(120)).min(1).max(6) }),
|
|
127
|
+
execute: ({ ids }) => attempt(async () => {
|
|
128
|
+
const entries = [];
|
|
129
|
+
for (const id of new Set(ids)) {
|
|
130
|
+
const entry = found.get(id) ?? (await marketplaceDetail(id, asLang(ctx.lang)));
|
|
131
|
+
if (!entry) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
// The card needs the entry, not the outline the dialog loads by itself.
|
|
135
|
+
const { terms: _terms, hash: _hash, description: _description, outline: _outline, results: _results, files: _files, ...shown } = entry;
|
|
136
|
+
entries.push(shown);
|
|
137
|
+
}
|
|
138
|
+
if (!entries.length) {
|
|
139
|
+
return { error: "None of these templates is in the gallery." };
|
|
140
|
+
}
|
|
141
|
+
ctx.card({ plugin: "", tool: "templates", data: { entries } });
|
|
142
|
+
return { shown: entries.map((e) => e.title) };
|
|
143
|
+
}),
|
|
144
|
+
}),
|
|
145
|
+
plans: createTool({
|
|
146
|
+
id: "plans",
|
|
147
|
+
description: "The plans teams can be on (Free, Pro, Team): price a month, monthly credits, limits, and the credit packages to buy on top. Live from the account service.",
|
|
148
|
+
inputSchema: z.object({}),
|
|
149
|
+
execute: () => attempt(async () => {
|
|
150
|
+
ctx.doing(serverText(ctx.lang, "doingPlans"));
|
|
151
|
+
const plans = await publicPlans(accountBase());
|
|
152
|
+
return { ...plans, billingPage: `${accountBase()}/billing` };
|
|
153
|
+
}),
|
|
154
|
+
}),
|
|
155
|
+
account: createTool({
|
|
156
|
+
id: "account",
|
|
157
|
+
description: "The person, their team, their role, the team's plan, the credit balance and credits that end on a date.",
|
|
158
|
+
inputSchema: z.object({}),
|
|
159
|
+
execute: () => attempt(async () => {
|
|
160
|
+
ctx.doing(serverText(ctx.lang, "doingAccount"));
|
|
161
|
+
if (managed) {
|
|
162
|
+
const info = await tenantInfo(user.tenantId, true);
|
|
163
|
+
return {
|
|
164
|
+
person: { name: user.name, email: user.email, role: user.role },
|
|
165
|
+
team: { name: info.name, plan: info.plan?.name ?? null, status: info.status },
|
|
166
|
+
balanceCredits: Math.floor(info.balanceCredits),
|
|
167
|
+
limits: info.limits,
|
|
168
|
+
billingPage: `${env.manage.url}/billing`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
if (!(await linkedAccount())) {
|
|
172
|
+
return { linked: false, note: NOT_LINKED };
|
|
173
|
+
}
|
|
174
|
+
const overview = await accountOverview();
|
|
175
|
+
if (!overview) {
|
|
176
|
+
return {
|
|
177
|
+
linked: true,
|
|
178
|
+
signedIn: false,
|
|
179
|
+
note: "The sign-in ran out: Settings › Account signs in again.",
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
linked: true,
|
|
184
|
+
person: overview.user,
|
|
185
|
+
team: { name: overview.tenant.name, role: overview.tenant.role },
|
|
186
|
+
plan: overview.tenant.plan?.name ?? null,
|
|
187
|
+
balanceCredits: Math.floor(overview.tenant.balanceCredits),
|
|
188
|
+
expiring: overview.tenant.expiring ?? [],
|
|
189
|
+
billingPage: `${env.local.accountUrl}/billing`,
|
|
190
|
+
};
|
|
191
|
+
}),
|
|
192
|
+
}),
|
|
193
|
+
usage: createTool({
|
|
194
|
+
id: "usage",
|
|
195
|
+
description: "Credits the team used per month (the last three), and the runs and wizards that cost the most.",
|
|
196
|
+
inputSchema: z.object({}),
|
|
197
|
+
execute: () => attempt(async () => {
|
|
198
|
+
ctx.doing(serverText(ctx.lang, "doingUsage"));
|
|
199
|
+
if (!(managed || (await linkedAccount()))) {
|
|
200
|
+
return { linked: false, note: NOT_LINKED };
|
|
201
|
+
}
|
|
202
|
+
const usage = await usageOf(user.tenantId);
|
|
203
|
+
if (!usage) {
|
|
204
|
+
return { note: "The sign-in ran out: Settings › Account signs in again." };
|
|
205
|
+
}
|
|
206
|
+
const runIds = [...new Set(usage.months.flatMap((m) => m.runs.map((r) => r.runId)))];
|
|
207
|
+
const runs = runIds.length
|
|
208
|
+
? await db
|
|
209
|
+
.select({ id: schema.run.id, wizard: schema.wizard.title, mode: schema.run.mode })
|
|
210
|
+
.from(schema.run)
|
|
211
|
+
.innerJoin(schema.wizard, eq(schema.wizard.id, schema.run.wizardId))
|
|
212
|
+
.where(inArray(schema.run.id, runIds))
|
|
213
|
+
: [];
|
|
214
|
+
const byRun = new Map(runs.map((r) => [r.id, r]));
|
|
215
|
+
return {
|
|
216
|
+
months: usage.months.map((m) => {
|
|
217
|
+
const perWizard = new Map();
|
|
218
|
+
for (const r of m.runs) {
|
|
219
|
+
const title = byRun.get(r.runId)?.wizard ?? "(a run of another install)";
|
|
220
|
+
perWizard.set(title, (perWizard.get(title) ?? 0) + r.credits);
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
month: m.month,
|
|
224
|
+
credits: m.credits,
|
|
225
|
+
wizards: [...perWizard.entries()]
|
|
226
|
+
.map(([wizard, credits]) => ({
|
|
227
|
+
wizard,
|
|
228
|
+
credits: Math.round(credits * 100) / 100,
|
|
229
|
+
}))
|
|
230
|
+
.sort((a, b) => b.credits - a.credits)
|
|
231
|
+
.slice(0, 10),
|
|
232
|
+
};
|
|
233
|
+
}),
|
|
234
|
+
};
|
|
235
|
+
}),
|
|
236
|
+
}),
|
|
237
|
+
wizards: createTool({
|
|
238
|
+
id: "wizards",
|
|
239
|
+
description: "The space's wizards: title, description, published or draft, whether its link is on, steps, last change.",
|
|
240
|
+
inputSchema: z.object({}),
|
|
241
|
+
execute: () => attempt(async () => {
|
|
242
|
+
if (!ctx.project) {
|
|
243
|
+
return { note: "No space is open." };
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
wizards: (await listWizards(user.id, ctx.project.id)).map((w) => ({
|
|
247
|
+
id: w.id,
|
|
248
|
+
title: w.title,
|
|
249
|
+
description: w.description,
|
|
250
|
+
published: w.published,
|
|
251
|
+
linkOn: w.shareEnabled,
|
|
252
|
+
steps: w.stepCount,
|
|
253
|
+
updatedAt: w.updatedAt,
|
|
254
|
+
editor: `/edit/${w.id}`,
|
|
255
|
+
})),
|
|
256
|
+
};
|
|
257
|
+
}),
|
|
258
|
+
}),
|
|
259
|
+
runs: createTool({
|
|
260
|
+
id: "runs",
|
|
261
|
+
description: "The space's latest runs, newest first: wizard, test or live, status, the error of a failed one.",
|
|
262
|
+
inputSchema: z.object({
|
|
263
|
+
status: z.enum(["failed", "done", "running", "waiting_input", "cancelled"]).optional(),
|
|
264
|
+
limit: z.number().int().min(1).max(40).optional(),
|
|
265
|
+
}),
|
|
266
|
+
execute: ({ status, limit }) => attempt(async () => {
|
|
267
|
+
if (!ctx.project) {
|
|
268
|
+
return { note: "No space is open." };
|
|
269
|
+
}
|
|
270
|
+
const rows = await db
|
|
271
|
+
.select({
|
|
272
|
+
id: schema.run.id,
|
|
273
|
+
wizard: schema.wizard.title,
|
|
274
|
+
wizardId: schema.wizard.id,
|
|
275
|
+
mode: schema.run.mode,
|
|
276
|
+
status: schema.run.status,
|
|
277
|
+
error: schema.run.error,
|
|
278
|
+
runner: schema.run.runner,
|
|
279
|
+
createdAt: schema.run.createdAt,
|
|
280
|
+
})
|
|
281
|
+
.from(schema.run)
|
|
282
|
+
.innerJoin(schema.wizard, eq(schema.wizard.id, schema.run.wizardId))
|
|
283
|
+
.where(and(eq(schema.wizard.projectId, ctx.project.id), status ? eq(schema.run.status, status) : undefined))
|
|
284
|
+
.orderBy(desc(schema.run.createdAt))
|
|
285
|
+
.limit(limit ?? 15);
|
|
286
|
+
return {
|
|
287
|
+
runs: rows.map((r) => ({
|
|
288
|
+
...r,
|
|
289
|
+
error: r.error?.slice(0, 400) ?? null,
|
|
290
|
+
createdAt: r.createdAt.toISOString(),
|
|
291
|
+
})),
|
|
292
|
+
};
|
|
293
|
+
}),
|
|
294
|
+
}),
|
|
295
|
+
models: createTool({
|
|
296
|
+
id: "models",
|
|
297
|
+
description: "What thinks and makes for this install, per model class: an installed AI client, an own key, a local model, credits, or nothing (with the problem). Also which AI clients are installed and signed in.",
|
|
298
|
+
inputSchema: z.object({}),
|
|
299
|
+
execute: () => attempt(async () => {
|
|
300
|
+
ctx.doing(serverText(ctx.lang, "doingModels"));
|
|
301
|
+
return {
|
|
302
|
+
classes: waysIn(await classWays(), "en"),
|
|
303
|
+
clients: managed
|
|
304
|
+
? []
|
|
305
|
+
: (await detectHarnesses()).map((h) => ({
|
|
306
|
+
id: h.id,
|
|
307
|
+
installed: Boolean(h.version),
|
|
308
|
+
signedIn: h.auth !== "none",
|
|
309
|
+
})),
|
|
310
|
+
page: "/settings/models",
|
|
311
|
+
};
|
|
312
|
+
}),
|
|
313
|
+
}),
|
|
314
|
+
chats_search: createTool({
|
|
315
|
+
id: "chats_search",
|
|
316
|
+
description: "Search the person's earlier chats with you (their messages and summaries) for words: what was asked, changed or decided before.",
|
|
317
|
+
inputSchema: z.object({ query: z.string().min(3).max(200) }),
|
|
318
|
+
execute: ({ query }) => attempt(async () => {
|
|
319
|
+
ctx.doing(serverText(ctx.lang, "doingEarlierChats"));
|
|
320
|
+
const hits = (await searchChats(user, query)).filter((h) => h.chatId !== ctx.chatId);
|
|
321
|
+
return {
|
|
322
|
+
hits,
|
|
323
|
+
recent: hits.length
|
|
324
|
+
? undefined
|
|
325
|
+
: (await earlierChats(user, 10)).map((c) => ({
|
|
326
|
+
id: c.id,
|
|
327
|
+
title: c.title,
|
|
328
|
+
closedAt: c.closedAt,
|
|
329
|
+
})),
|
|
330
|
+
};
|
|
331
|
+
}),
|
|
332
|
+
}),
|
|
333
|
+
chat_read: createTool({
|
|
334
|
+
id: "chat_read",
|
|
335
|
+
description: "Read one earlier chat by its id (from chats_search): its summary and messages.",
|
|
336
|
+
inputSchema: z.object({ id: z.string().min(1).max(40) }),
|
|
337
|
+
execute: ({ id }) => attempt(async () => {
|
|
338
|
+
const chat = await readChat(user, id);
|
|
339
|
+
return {
|
|
340
|
+
title: chat.title,
|
|
341
|
+
summary: chat.summary,
|
|
342
|
+
startedAt: chat.startedAt,
|
|
343
|
+
closedAt: chat.closedAt,
|
|
344
|
+
messages: chat.messages.slice(-40).map((m) => ({
|
|
345
|
+
role: m.role,
|
|
346
|
+
text: m.content.slice(0, 2000),
|
|
347
|
+
at: m.createdAt,
|
|
348
|
+
})),
|
|
349
|
+
};
|
|
350
|
+
}),
|
|
351
|
+
}),
|
|
352
|
+
};
|
|
353
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What engenty wizards is, on one page, in every turn of the studio assistant. Written from the
|
|
3
|
+
* user guide (docs/content/user/index.md and the pages it links); the details are a docs_search
|
|
4
|
+
* away.
|
|
5
|
+
*/
|
|
6
|
+
export const PRIMER = `ENGENTY WIZARDS IN ONE PAGE
|
|
7
|
+
engenty wizards turns something done again and again into a wizard: pages that ask what it needs, AI steps that do the work, and a link to share. It runs on the person's own computer (a "local install" at ~/.engenty/wizards, studio at /studio) or in the cloud at engenty.ai with an account.
|
|
8
|
+
|
|
9
|
+
Words
|
|
10
|
+
- Studio: where wizards are built. Home lists the space's wizards; the editor (/edit/<id>) shows a wizard's flow as a diagram with its own chat (the architect) that builds and changes it.
|
|
11
|
+
- Wizard: a flow of steps a person walks through on a link. Step kinds: a page (fields to fill in), an AI step (an agent with tools: web search, reading files, writing documents, images, video, pages, other services), a review, and the result.
|
|
12
|
+
- Run: one person going through a wizard once. Results lists every run that reached its result.
|
|
13
|
+
- Space: what all wizards of a team know. Its page has four parts: Info & brand (title, about, logos, colours, assets, facts), Knowledge (pages, tables and files the AI steps look things up in, kept apart by typed categories), Data (tables and pages the wizards keep) and Results (finished runs).
|
|
14
|
+
- Model class: the kind of model a step needs (Classifier, Standard, High, Highest for text; Image, Video, Speech, Audio). Which model serves a class is a setting (Settings › Models), not part of the wizard.
|
|
15
|
+
|
|
16
|
+
Thinking: an installed AI client on the person's subscription (Claude Code, Codex, Antigravity, Cursor Agent), own API keys (OpenAI, Anthropic, Google, fal.ai, ElevenLabs, Replicate, Vercel AI Gateway), a local model (Ollama), or engenty credits from an account. Settings › Models shows which way serves each class and what is missing.
|
|
17
|
+
|
|
18
|
+
Sharing: Test runs a draft. Publish makes a version live behind a link. Share holds the link, the tag for a website, a QR code, channels (the page, the chat, and what plugins add: WhatsApp, SMS, calls) and the link's settings (on/off, runs per day, a new address). With an account, what is published on a local install also runs in the cloud, on the account's credits, while the computer is off.
|
|
19
|
+
|
|
20
|
+
AI apps: the install is an MCP server; Claude Desktop, Cursor, Codex and others build and run wizards through it (Settings › AI apps).
|
|
21
|
+
|
|
22
|
+
Plugins add pages to the studio (a Shop, a Termin-Planer), settings sections, sections of the space page, tools for AI steps and for this assistant, and channels. Settings › Plugins lists what is installed.
|
|
23
|
+
|
|
24
|
+
Account and plans: an account is optional on a local install; it brings credits, cloud publishing, sync and Pro modules. In the cloud, teams are on a plan (Free, Pro, Team) with monthly credits; credits can be topped up on the account's billing page. Plans, prices and the balance come from the account (tools: plans, account, usage), never from memory.
|
|
25
|
+
|
|
26
|
+
Studio addresses: / (home), /new (a new wizard), /edit/<id> (the editor), /space/info, /space/knowledge, /space/data, /space/results, /settings/account, /settings/team (cloud), /settings/connectors, /settings/models, /settings/integrate (AI apps), /settings/plugins, and the pages plugins add.`;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const running = new Map();
|
|
2
|
+
export function startRun(runId, userId) {
|
|
3
|
+
running.set(runId, { userId, inbox: [] });
|
|
4
|
+
}
|
|
5
|
+
export function endRun(runId) {
|
|
6
|
+
running.delete(runId);
|
|
7
|
+
}
|
|
8
|
+
/** Puts a message into the person's running turn; false when that turn is over. */
|
|
9
|
+
export function signalRun(userId, runId, signal) {
|
|
10
|
+
const run = running.get(runId);
|
|
11
|
+
if (!run || run.userId !== userId) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
run.inbox.push(signal);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
/** The messages that came in since the turn last looked, oldest first. */
|
|
18
|
+
export function takeSignals(runId) {
|
|
19
|
+
const run = running.get(runId);
|
|
20
|
+
if (!run?.inbox.length) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return run.inbox.splice(0);
|
|
24
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { env } from "../env.js";
|
|
3
|
+
import { discovery, tokenRequest, unverifiedClaims } from "../manage.js";
|
|
4
|
+
import { seal, unseal } from "../secrets/crypto.js";
|
|
5
|
+
import { vaultDelete, vaultGet, vaultSet } from "../secrets/vault.js";
|
|
6
|
+
import { deleteSetting, readSetting, writeSetting } from "../settings.js";
|
|
7
|
+
/**
|
|
8
|
+
* The account a runtime that runs alone is linked to: sign-in (or sign-up) happens in the system
|
|
9
|
+
* browser at the Manage-App, the code comes back to this server on the loopback interface. The
|
|
10
|
+
* account is optional; it unlocks credits through the gateway and publishing to the cloud.
|
|
11
|
+
*/
|
|
12
|
+
export const CLIENT = { id: "wizards-desktop" };
|
|
13
|
+
const REFRESH = "account.refresh";
|
|
14
|
+
export const SCOPE = "openid profile email offline_access wizards:read wizards:write wizards:publish";
|
|
15
|
+
/** The team of the linked account as the Manage-App last named it, for lines that must not wait on it. */
|
|
16
|
+
const TEAM = "account.team";
|
|
17
|
+
/** Loopback redirect on the port this server listens on (RFC 8252). */
|
|
18
|
+
function redirectUri() {
|
|
19
|
+
return `http://127.0.0.1:${env.port}/api/auth/callback`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The address that links an account. `signup`: the person has none yet — the account's sign-up
|
|
23
|
+
* page takes the invitation code (`code` fills it in) and goes on to the same sign-in.
|
|
24
|
+
*/
|
|
25
|
+
export async function startLink(options = {}) {
|
|
26
|
+
const d = await discovery(env.local.accountUrl);
|
|
27
|
+
const verifier = randomBytes(32).toString("base64url");
|
|
28
|
+
const state = { verifier, redirect: redirectUri(), exp: Date.now() + 15 * 60_000 };
|
|
29
|
+
const url = new URL(d.authorization_endpoint);
|
|
30
|
+
url.search = new URLSearchParams({
|
|
31
|
+
response_type: "code",
|
|
32
|
+
client_id: CLIENT.id,
|
|
33
|
+
redirect_uri: state.redirect,
|
|
34
|
+
scope: SCOPE,
|
|
35
|
+
resource: env.local.cloudUrl,
|
|
36
|
+
code_challenge: createHash("sha256").update(verifier).digest("base64url"),
|
|
37
|
+
code_challenge_method: "S256",
|
|
38
|
+
state: seal(state),
|
|
39
|
+
}).toString();
|
|
40
|
+
if (!options.signup) {
|
|
41
|
+
return url.toString();
|
|
42
|
+
}
|
|
43
|
+
const signUp = new URL("/sign-up", env.local.accountUrl);
|
|
44
|
+
const code = options.code?.trim();
|
|
45
|
+
if (code) {
|
|
46
|
+
signUp.searchParams.set("code", code);
|
|
47
|
+
}
|
|
48
|
+
// The sign-up page goes on only to a path of its own origin.
|
|
49
|
+
signUp.searchParams.set("next", url.pathname + url.search);
|
|
50
|
+
return signUp.toString();
|
|
51
|
+
}
|
|
52
|
+
let cached = null;
|
|
53
|
+
/**
|
|
54
|
+
* Keeps what the token endpoint handed out: the refresh token in the vault, the account in the
|
|
55
|
+
* settings. The browser flow (finishLink) and the device flow (device.ts) end here alike.
|
|
56
|
+
*/
|
|
57
|
+
export async function keep(tokens) {
|
|
58
|
+
const claims = unverifiedClaims(tokens.access_token);
|
|
59
|
+
if (!claims) {
|
|
60
|
+
throw new Error("The account's token names no tenant.");
|
|
61
|
+
}
|
|
62
|
+
if (tokens.refresh_token) {
|
|
63
|
+
await vaultSet(REFRESH, tokens.refresh_token);
|
|
64
|
+
}
|
|
65
|
+
cached = {
|
|
66
|
+
token: tokens.access_token,
|
|
67
|
+
expiresAt: Date.now() + (tokens.expires_in ?? 600) * 1000,
|
|
68
|
+
};
|
|
69
|
+
const account = {
|
|
70
|
+
userId: claims.userId,
|
|
71
|
+
tenantId: claims.tenantId,
|
|
72
|
+
name: claims.name,
|
|
73
|
+
email: claims.email,
|
|
74
|
+
};
|
|
75
|
+
await writeSetting("account", account);
|
|
76
|
+
return account;
|
|
77
|
+
}
|
|
78
|
+
export async function finishLink(code, rawState) {
|
|
79
|
+
const state = unseal(rawState);
|
|
80
|
+
if (!state || state.exp < Date.now()) {
|
|
81
|
+
throw new Error("This sign-in has expired.");
|
|
82
|
+
}
|
|
83
|
+
const tokens = await tokenRequest({
|
|
84
|
+
grant_type: "authorization_code",
|
|
85
|
+
code,
|
|
86
|
+
redirect_uri: state.redirect,
|
|
87
|
+
code_verifier: state.verifier,
|
|
88
|
+
resource: env.local.cloudUrl,
|
|
89
|
+
}, CLIENT, env.local.accountUrl);
|
|
90
|
+
return keep(tokens);
|
|
91
|
+
}
|
|
92
|
+
export function linkedAccount() {
|
|
93
|
+
return readSetting("account");
|
|
94
|
+
}
|
|
95
|
+
/** A fresh access token of the linked account, or null when none is linked (or it was revoked). */
|
|
96
|
+
export async function accountToken() {
|
|
97
|
+
if (cached && cached.expiresAt - Date.now() > 60_000) {
|
|
98
|
+
return cached.token;
|
|
99
|
+
}
|
|
100
|
+
// One refresh at a time: a refresh token is used once, a second caller would be refused.
|
|
101
|
+
refreshing ??= refreshAccount().finally(() => {
|
|
102
|
+
refreshing = null;
|
|
103
|
+
});
|
|
104
|
+
return refreshing;
|
|
105
|
+
}
|
|
106
|
+
let refreshing = null;
|
|
107
|
+
async function refreshAccount() {
|
|
108
|
+
const refresh = await vaultGet(REFRESH);
|
|
109
|
+
if (!refresh) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const tokens = await tokenRequest({ grant_type: "refresh_token", refresh_token: refresh, resource: env.local.cloudUrl }, CLIENT, env.local.accountUrl);
|
|
114
|
+
await keep(tokens);
|
|
115
|
+
return tokens.access_token;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export async function unlink() {
|
|
122
|
+
const refresh = await vaultGet(REFRESH);
|
|
123
|
+
if (refresh) {
|
|
124
|
+
const d = await discovery(env.local.accountUrl).catch(() => null);
|
|
125
|
+
if (d?.revocation_endpoint) {
|
|
126
|
+
await fetch(d.revocation_endpoint, {
|
|
127
|
+
method: "POST",
|
|
128
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
129
|
+
body: new URLSearchParams({ token: refresh, client_id: CLIENT.id }),
|
|
130
|
+
signal: AbortSignal.timeout(10_000),
|
|
131
|
+
}).catch(() => undefined);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
cached = null;
|
|
135
|
+
await vaultDelete(REFRESH);
|
|
136
|
+
await deleteSetting("account");
|
|
137
|
+
await deleteSetting(TEAM);
|
|
138
|
+
}
|
|
139
|
+
/** The team as the Manage-App last named it: `wizards status` and the menu show it without a round trip. */
|
|
140
|
+
export function knownTeam() {
|
|
141
|
+
return readSetting(TEAM);
|
|
142
|
+
}
|
|
143
|
+
let rememberedTeam = null;
|
|
144
|
+
async function rememberTeam(tenant) {
|
|
145
|
+
const same = `${tenant.id}\n${tenant.name}\n${tenant.balanceCredits}`;
|
|
146
|
+
if (same === rememberedTeam) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
rememberedTeam = same;
|
|
150
|
+
await writeSetting(TEAM, {
|
|
151
|
+
tenantId: tenant.id,
|
|
152
|
+
name: tenant.name,
|
|
153
|
+
balanceCredits: tenant.balanceCredits,
|
|
154
|
+
at: new Date().toISOString(),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/** Balance and tenants of the linked account, straight from the Manage-App. */
|
|
158
|
+
export async function accountOverview() {
|
|
159
|
+
const token = await accountToken();
|
|
160
|
+
if (!token) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const res = await fetch(`${env.local.accountUrl}/v1/me`, {
|
|
164
|
+
headers: { authorization: `Bearer ${token}` },
|
|
165
|
+
signal: AbortSignal.timeout(10_000),
|
|
166
|
+
}).catch(() => null);
|
|
167
|
+
if (!res?.ok) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
const overview = (await res.json());
|
|
171
|
+
if (overview?.tenant) {
|
|
172
|
+
await rememberTeam(overview.tenant).catch(() => undefined);
|
|
173
|
+
}
|
|
174
|
+
return overview;
|
|
175
|
+
}
|