@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,202 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import * as p from "@clack/prompts";
|
|
4
|
+
import { updateStatus } from "../update.js";
|
|
5
|
+
import { accountMenu, accountState, describeAccount } from "./account.js";
|
|
6
|
+
import { autostartForStatus, setAutostart } from "./autostart.js";
|
|
7
|
+
import { connectCommand } from "./connect.js";
|
|
8
|
+
import { command, packageRoot, packageVersion, readInstallNote } from "./home.js";
|
|
9
|
+
import { setup } from "./setup.js";
|
|
10
|
+
import { open, runningRuntime, settings, start } from "./start.js";
|
|
11
|
+
import { restart, status, stop } from "./status.js";
|
|
12
|
+
import { badge, busy, cmd, cyan, dim, no, ok } from "./ui.js";
|
|
13
|
+
import { update } from "./update.js";
|
|
14
|
+
async function look(paths) {
|
|
15
|
+
const { dataDir } = settings(paths);
|
|
16
|
+
const [running, atLogin, release, account] = await Promise.all([
|
|
17
|
+
runningRuntime(dataDir),
|
|
18
|
+
autostartForStatus(paths),
|
|
19
|
+
updateStatus().catch(() => null),
|
|
20
|
+
accountState(),
|
|
21
|
+
]);
|
|
22
|
+
return { running, atLogin, release, account };
|
|
23
|
+
}
|
|
24
|
+
function report({ running, atLogin, release, account }) {
|
|
25
|
+
const lines = [
|
|
26
|
+
running
|
|
27
|
+
? `${ok} running ${cyan(running.url)} ${dim(`pid ${running.pid}, since ${new Date(running.startedAt).toLocaleString()}`)}`
|
|
28
|
+
: `${no} not running`,
|
|
29
|
+
];
|
|
30
|
+
if (!("unavailable" in atLogin)) {
|
|
31
|
+
lines.push(atLogin.on ? `${ok} starts at login` : `${no} doesn’t start at login`);
|
|
32
|
+
}
|
|
33
|
+
lines.push(account.kind === "linked"
|
|
34
|
+
? `${ok} signed in as ${describeAccount(account)}`
|
|
35
|
+
: `${no} ${describeAccount(account)}`);
|
|
36
|
+
if (release?.newer) {
|
|
37
|
+
lines.push(`${cyan("↑")} ${release.latest} is out ${dim(`(you have ${release.current})`)}`);
|
|
38
|
+
}
|
|
39
|
+
return lines.join("\n");
|
|
40
|
+
}
|
|
41
|
+
function choices({ running, atLogin, release, account }) {
|
|
42
|
+
const options = running
|
|
43
|
+
? [
|
|
44
|
+
{ value: "open", label: "Open the studio", hint: "in your browser" },
|
|
45
|
+
{ value: "restart", label: "Restart" },
|
|
46
|
+
{ value: "stop", label: "Stop", hint: "your data is kept" },
|
|
47
|
+
]
|
|
48
|
+
: [
|
|
49
|
+
{ value: "start", label: "Start in the background", hint: "and open the studio" },
|
|
50
|
+
{ value: "foreground", label: "Start in this terminal", hint: "Ctrl-C stops it" },
|
|
51
|
+
];
|
|
52
|
+
options.push({
|
|
53
|
+
value: "update",
|
|
54
|
+
label: "Update",
|
|
55
|
+
hint: release?.newer ? `${release.latest} is out` : release?.latest ? "up to date" : undefined,
|
|
56
|
+
});
|
|
57
|
+
if (!("unavailable" in atLogin)) {
|
|
58
|
+
options.push({
|
|
59
|
+
value: "service",
|
|
60
|
+
label: "Start at login",
|
|
61
|
+
hint: atLogin.on ? "on" : "off",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
options.push({
|
|
65
|
+
value: "connect",
|
|
66
|
+
label: "Connect AI apps",
|
|
67
|
+
hint: "add your wizards as an MCP server in Claude, Cursor, Codex…",
|
|
68
|
+
}, {
|
|
69
|
+
value: "account",
|
|
70
|
+
label: "Account",
|
|
71
|
+
hint: account.kind === "linked"
|
|
72
|
+
? `signed in as ${describeAccount(account)}`
|
|
73
|
+
: describeAccount(account),
|
|
74
|
+
}, { value: "status", label: "Status", hint: "what’s installed, and any problems" }, { value: "setup", label: "Setup", hint: "account, AI client, ffmpeg, start at login" }, {
|
|
75
|
+
value: "uninstall",
|
|
76
|
+
label: "Uninstall",
|
|
77
|
+
hint: "remove it from this computer; asks about your data first",
|
|
78
|
+
}, { value: "help", label: "Help", hint: "every command" }, { value: "quit", label: "Quit", hint: running ? "engenty wizards keeps running" : undefined });
|
|
79
|
+
return options;
|
|
80
|
+
}
|
|
81
|
+
/** Whether it starts at login. Esc goes back to the menu. */
|
|
82
|
+
async function serviceSettings(paths, atLogin) {
|
|
83
|
+
if ("unavailable" in atLogin) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const on = await p.select({
|
|
87
|
+
message: "Start at login?",
|
|
88
|
+
initialValue: atLogin.on,
|
|
89
|
+
options: [
|
|
90
|
+
{
|
|
91
|
+
value: true,
|
|
92
|
+
label: "Yes",
|
|
93
|
+
hint: "runs in the background whenever you log in to this computer",
|
|
94
|
+
},
|
|
95
|
+
{ value: false, label: "No", hint: "only when you start it" },
|
|
96
|
+
],
|
|
97
|
+
});
|
|
98
|
+
if (p.isCancel(on) || on === atLogin.on) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
await setAutostart(paths, on);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
p.log.warn(`Couldn’t change start at login: ${error.message}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** The commands used most, for when the menu ends. */
|
|
109
|
+
function commands() {
|
|
110
|
+
const name = command();
|
|
111
|
+
return [
|
|
112
|
+
[`${name} start`, "start engenty wizards and open the studio"],
|
|
113
|
+
[`${name} studio`, "open the studio, starting engenty wizards if needed"],
|
|
114
|
+
[`${name} stop`, "stop engenty wizards (your data is kept)"],
|
|
115
|
+
[`${name} status`, "show what’s installed and running"],
|
|
116
|
+
[`${name} update`, "install the latest version"],
|
|
117
|
+
[`${name} --version`, "print the version you have"],
|
|
118
|
+
[`${name} help`, "list every command"],
|
|
119
|
+
]
|
|
120
|
+
.map(([line, what]) => `${cyan(line.padEnd(name.length + 12))}${dim(what)}`)
|
|
121
|
+
.join("\n");
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* `wizards` on a terminal: what runs, and a menu of what the commands do. The first time, the
|
|
125
|
+
* setup runs first. Returns the exit code; "Start in this terminal" ends it with the runtime in the
|
|
126
|
+
* foreground.
|
|
127
|
+
*/
|
|
128
|
+
export async function menu(paths, setupOptions, help) {
|
|
129
|
+
if (!readInstallNote(paths).setupAt) {
|
|
130
|
+
if (!(await setup(paths, { ...setupOptions, next: "menu" }))) {
|
|
131
|
+
return 130;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
p.intro(`${badge("engenty wizards")} ${dim(packageVersion())}`);
|
|
135
|
+
for (;;) {
|
|
136
|
+
const spinner = busy("Checking status…");
|
|
137
|
+
const state = await look(paths);
|
|
138
|
+
spinner.stop(report(state));
|
|
139
|
+
const action = await p.select({
|
|
140
|
+
message: "What would you like to do?",
|
|
141
|
+
options: choices(state),
|
|
142
|
+
});
|
|
143
|
+
if (p.isCancel(action) || action === "quit") {
|
|
144
|
+
p.outro(dim(`${cmd()} opens this menu again. ${cmd("help")} lists every command.`));
|
|
145
|
+
return 0;
|
|
146
|
+
}
|
|
147
|
+
switch (action) {
|
|
148
|
+
case "start":
|
|
149
|
+
await start(paths, { open: true, background: true });
|
|
150
|
+
break;
|
|
151
|
+
case "foreground":
|
|
152
|
+
p.outro("Starting engenty wizards here…");
|
|
153
|
+
return start(paths, { open: true });
|
|
154
|
+
case "open":
|
|
155
|
+
await open(paths, false);
|
|
156
|
+
break;
|
|
157
|
+
case "restart":
|
|
158
|
+
await restart(paths);
|
|
159
|
+
break;
|
|
160
|
+
case "stop":
|
|
161
|
+
await stop(paths);
|
|
162
|
+
break;
|
|
163
|
+
case "update": {
|
|
164
|
+
// What runs restarts into the new version.
|
|
165
|
+
if ((await update(paths, { restart: true })) !== 0) {
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
// This menu is still the old version, so it ends here.
|
|
169
|
+
p.note(commands(), "Updated");
|
|
170
|
+
p.outro(dim(`${cmd()} opens this menu again, in the new version.`));
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
case "service":
|
|
174
|
+
await serviceSettings(paths, state.atLogin);
|
|
175
|
+
break;
|
|
176
|
+
case "connect":
|
|
177
|
+
await connectCommand(paths, [], false);
|
|
178
|
+
break;
|
|
179
|
+
case "account":
|
|
180
|
+
await accountMenu(paths);
|
|
181
|
+
break;
|
|
182
|
+
case "status":
|
|
183
|
+
await status(paths, true);
|
|
184
|
+
break;
|
|
185
|
+
case "setup":
|
|
186
|
+
await setup(paths, setupOptions);
|
|
187
|
+
break;
|
|
188
|
+
case "uninstall": {
|
|
189
|
+
// Its own process, as `wizards uninstall` is: this one's modules write to the install.
|
|
190
|
+
const { status: code } = spawnSync(process.execPath, [join(packageRoot, "bin", "wizards.mjs"), "uninstall"], { stdio: "inherit" });
|
|
191
|
+
// 130: the person said no, so the menu goes on.
|
|
192
|
+
if (code !== 130) {
|
|
193
|
+
return code ?? 1;
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case "help":
|
|
198
|
+
console.log(help);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { sep } from "node:path";
|
|
3
|
+
/** Every process, as `ps` lists it; empty where there is no `ps` (Windows). */
|
|
4
|
+
function listProcesses() {
|
|
5
|
+
try {
|
|
6
|
+
return execFileSync("ps", ["-axww", "-o", "pid=,ppid=,command="], { encoding: "utf8" })
|
|
7
|
+
.split("\n")
|
|
8
|
+
.map((line) => line.match(/^\s*(\d+)\s+(\d+)\s+(.*)$/))
|
|
9
|
+
.filter((match) => match !== null)
|
|
10
|
+
.map((match) => ({ pid: Number(match[1]), ppid: Number(match[2]), command: match[3] }));
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The processes in `list` that run from `home`, apart from `self` and the processes that started
|
|
18
|
+
* it (npx, a shell).
|
|
19
|
+
*/
|
|
20
|
+
export function wizardsProcesses(home, list, self = process.pid) {
|
|
21
|
+
const parents = new Map(list.map((entry) => [entry.pid, entry.ppid]));
|
|
22
|
+
const skip = new Set();
|
|
23
|
+
for (let at = self; at && !skip.has(at); at = parents.get(at)) {
|
|
24
|
+
skip.add(at);
|
|
25
|
+
}
|
|
26
|
+
return list
|
|
27
|
+
.filter((entry) => !skip.has(entry.pid) && entry.command.includes(home + sep))
|
|
28
|
+
.map(({ pid, command }) => {
|
|
29
|
+
const args = command.split(/\s+/);
|
|
30
|
+
const kind = /apps[\\/]runtime[\\/]dist[\\/]index\.js/.test(command)
|
|
31
|
+
? "runtime"
|
|
32
|
+
: args.includes("mcp")
|
|
33
|
+
? "mcp"
|
|
34
|
+
: args.includes("start")
|
|
35
|
+
? "start"
|
|
36
|
+
: "other";
|
|
37
|
+
return { pid, kind };
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export const findWizardsProcesses = (home) => wizardsProcesses(home, listProcesses());
|
|
41
|
+
const alive = (pid) => {
|
|
42
|
+
try {
|
|
43
|
+
process.kill(pid, 0);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return error.code === "EPERM";
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/** SIGTERM, then SIGKILL after 8 seconds; the processes still there after that. */
|
|
51
|
+
export async function stopProcesses(pids) {
|
|
52
|
+
const signal = (name) => {
|
|
53
|
+
for (const pid of pids.filter(alive)) {
|
|
54
|
+
try {
|
|
55
|
+
process.kill(pid, name);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// gone meanwhile, or not ours: the check below tells
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const wait = async (ms) => {
|
|
63
|
+
for (let waited = 0; waited < ms && pids.some(alive); waited += 100) {
|
|
64
|
+
await new Promise((done) => setTimeout(done, 100));
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
signal("SIGTERM");
|
|
68
|
+
await wait(8000);
|
|
69
|
+
signal("SIGKILL");
|
|
70
|
+
await wait(2000);
|
|
71
|
+
return pids.filter(alive);
|
|
72
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { LOCAL_MCP_HEADER, mintLocalTicket } from "../auth/local-ticket.js";
|
|
3
|
+
import { readSecret, runningRuntime, settings } from "./start.js";
|
|
4
|
+
import { bad, cmd, dim, ok, tilde } from "./ui.js";
|
|
5
|
+
/**
|
|
6
|
+
* `wizards logs` shows the last lines the running runtime printed; `wizards report` sends its
|
|
7
|
+
* status, model settings and those lines to the linked account, where an operator reads them
|
|
8
|
+
* (docs/plans/remote-debug.md). Both talk to the running process, signed with the data folder's
|
|
9
|
+
* secret as `wizards mcp` does; neither sends anything by itself.
|
|
10
|
+
*/
|
|
11
|
+
async function ask(paths, method, path) {
|
|
12
|
+
const { dataDir } = settings(paths);
|
|
13
|
+
const running = await runningRuntime(dataDir);
|
|
14
|
+
if (!running) {
|
|
15
|
+
return `engenty wizards isn’t running. To start it: ${cmd("start")}`;
|
|
16
|
+
}
|
|
17
|
+
const secret = readSecret(paths);
|
|
18
|
+
if (!secret) {
|
|
19
|
+
return `Couldn’t read the data folder’s secret (${tilde(join(dataDir, "secret"))}).`;
|
|
20
|
+
}
|
|
21
|
+
const res = await fetch(`http://127.0.0.1:${running.port}/api/local/debug${path}`, {
|
|
22
|
+
method,
|
|
23
|
+
headers: { [LOCAL_MCP_HEADER]: mintLocalTicket(secret, Date.now(), "local-debug") },
|
|
24
|
+
signal: AbortSignal.timeout(30_000),
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
status: res.status,
|
|
28
|
+
body: (await res.json().catch(() => ({}))),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** The last lines of the running runtime; `value` may name how many (default 100). */
|
|
32
|
+
export async function logsCommand(paths, value) {
|
|
33
|
+
const limit = Math.min(Math.max(1, Number(value) || 100), 2000);
|
|
34
|
+
const answer = await ask(paths, "GET", `/logs?limit=${limit}`);
|
|
35
|
+
if (typeof answer === "string") {
|
|
36
|
+
console.error(answer);
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
const lines = answer.body.lines ?? [];
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
const at = new Date(line.at).toISOString().slice(11, 19);
|
|
42
|
+
const level = line.level === "info" ? " " : line.level.padEnd(5);
|
|
43
|
+
console.log(`${dim(at)} ${level} ${line.text}`);
|
|
44
|
+
}
|
|
45
|
+
if (!lines.length) {
|
|
46
|
+
console.log(dim("No log lines yet."));
|
|
47
|
+
}
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
export async function reportCommand(paths) {
|
|
51
|
+
const answer = await ask(paths, "POST", "/report");
|
|
52
|
+
if (typeof answer === "string") {
|
|
53
|
+
console.error(answer);
|
|
54
|
+
return 1;
|
|
55
|
+
}
|
|
56
|
+
if (answer.status === 409) {
|
|
57
|
+
console.error(`${bad} This computer isn’t connected to an account. Sign in under Settings → Account in the studio, or with ${cmd("account sign-in")}. Then try again.`);
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
if (answer.status !== 200) {
|
|
61
|
+
console.error(`${bad} ${answer.body.error ?? `engenty wizards responded with an error (${answer.status}).`}`);
|
|
62
|
+
return 1;
|
|
63
|
+
}
|
|
64
|
+
console.log(`${ok} Sent report ${answer.body.id} to ${answer.body.to}. Quote this ID when you ask for help.`);
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { delimiter, join } from "node:path";
|
|
4
|
+
import * as p from "@clack/prompts";
|
|
5
|
+
import { accountStep } from "./account.js";
|
|
6
|
+
import { autostartForStatus, setAutostart } from "./autostart.js";
|
|
7
|
+
import { installClient, installCommand } from "./clients.js";
|
|
8
|
+
import { appStates, connectApps } from "./connect.js";
|
|
9
|
+
import { runLogged } from "./exec.js";
|
|
10
|
+
import { command, installedByScript, isCheckout, packageVersion, readInstallNote, writeInstallNote, } from "./home.js";
|
|
11
|
+
import { CLIENTS, detectClients, findChrome, findFfmpeg, findOnPath, suggestedClient, vendorApp, } from "./machine.js";
|
|
12
|
+
import { runningRuntime, settings } from "./start.js";
|
|
13
|
+
import { badge, busy, cmd, cyan, dim, tilde } from "./ui.js";
|
|
14
|
+
/** The studio as an app of its own: Chrome (or Edge) installs it from the page. */
|
|
15
|
+
const CHROME_APP = "Tip: in Chrome or Edge you can install the studio as an app, with its own window and icon. Use the offer at the top of the studio, or the install icon in the address bar.";
|
|
16
|
+
function cancelled(value) {
|
|
17
|
+
if (p.isCancel(value)) {
|
|
18
|
+
p.cancel(`Setup stopped. To run it again: ${cmd("setup")}`);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
async function install(client, paths) {
|
|
24
|
+
const task = p.taskLog({ title: `Installing ${client.name}`, limit: 6 });
|
|
25
|
+
task.message(dim(installCommand(client, paths)));
|
|
26
|
+
const { code, tail } = await installClient(client, paths, (line) => task.message(line));
|
|
27
|
+
const installed = (await detectClients(paths)).find((state) => state.client.id === client.id);
|
|
28
|
+
if (code === 0 && installed?.path) {
|
|
29
|
+
task.success(`${client.name} ${installed.version ?? ""} installed`.trim());
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
task.error(`${client.name} didn’t install${code === 0 ? ": its command isn’t on the PATH" : ""}. ${tail.split("\n").pop() ?? ""}`);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
async function clientsStep(paths, options, interactive) {
|
|
36
|
+
const spinner = busy("Looking for AI clients on this computer…");
|
|
37
|
+
const found = await detectClients(paths);
|
|
38
|
+
const installed = found.filter((state) => state.path);
|
|
39
|
+
const missing = found.filter((state) => !state.path);
|
|
40
|
+
spinner.stop(installed.length
|
|
41
|
+
? `Found AI clients: ${installed.map((s) => `${s.client.name} ${s.version}`).join(", ")}.`
|
|
42
|
+
: "No AI client on this computer yet.");
|
|
43
|
+
if (!installed.length) {
|
|
44
|
+
p.log.message(dim("engenty wizards runs its AI through an AI client, like Claude Code or Codex, on a subscription you already have."));
|
|
45
|
+
}
|
|
46
|
+
let wanted = missing.filter((s) => options.clients.includes(s.client.id));
|
|
47
|
+
// With a client already here, setup asks nothing more; another one is a `--client` away.
|
|
48
|
+
if (interactive && !installed.length && missing.length && !wanted.length) {
|
|
49
|
+
const suggested = suggestedClient(missing);
|
|
50
|
+
// A client whose app is on this Mac comes first: its subscription is most likely paid for.
|
|
51
|
+
const offered = [...missing].sort((a, b) => Number(!vendorApp(a.client)) - Number(!vendorApp(b.client)));
|
|
52
|
+
const answer = await p.multiselect({
|
|
53
|
+
message: "Which AI client should be installed? (space to choose, enter to continue)",
|
|
54
|
+
options: offered.map(({ client }) => {
|
|
55
|
+
const app = vendorApp(client);
|
|
56
|
+
return {
|
|
57
|
+
value: client.id,
|
|
58
|
+
label: client.name,
|
|
59
|
+
hint: [
|
|
60
|
+
`${client.account} subscription`,
|
|
61
|
+
app ? `the ${app} app is on this Mac` : "",
|
|
62
|
+
client.id === suggested?.client.id ? "recommended" : "",
|
|
63
|
+
]
|
|
64
|
+
.filter(Boolean)
|
|
65
|
+
.join(", "),
|
|
66
|
+
};
|
|
67
|
+
}),
|
|
68
|
+
initialValues: suggested ? [suggested.client.id] : [],
|
|
69
|
+
required: false,
|
|
70
|
+
});
|
|
71
|
+
if (cancelled(answer)) {
|
|
72
|
+
return "cancelled";
|
|
73
|
+
}
|
|
74
|
+
wanted = missing.filter((s) => answer.includes(s.client.id));
|
|
75
|
+
}
|
|
76
|
+
let any = installed.length > 0;
|
|
77
|
+
for (const { client } of wanted) {
|
|
78
|
+
any = (await install(client, paths)) || any;
|
|
79
|
+
}
|
|
80
|
+
if (any) {
|
|
81
|
+
p.log.info("Sign in to the AI client on the first page of the studio.");
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
p.log.warn(`No AI client yet. The first page of the studio can install one, or you can use an API key (Vercel AI Gateway, OpenAI, Anthropic) or a local model (Ollama).\n${dim(`To install ${CLIENTS.map((c) => c.name).join(", ")} here later: ${cmd("setup")}`)}`);
|
|
85
|
+
}
|
|
86
|
+
return any;
|
|
87
|
+
}
|
|
88
|
+
async function toolsStep(interactive) {
|
|
89
|
+
const chrome = findChrome();
|
|
90
|
+
if (chrome) {
|
|
91
|
+
p.log.success(`Browser for PDF and PNG exports: ${dim(tilde(chrome))}`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
p.log.warn("No Chrome, Edge or Chromium found. PDF and PNG exports and browser steps need one.\nhttps://www.google.com/chrome");
|
|
95
|
+
}
|
|
96
|
+
const ffmpeg = await findFfmpeg();
|
|
97
|
+
if (ffmpeg.path) {
|
|
98
|
+
p.log.success(`ffmpeg ${ffmpeg.version ?? ""} for videos`.replace(" ", " "));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const brew = findOnPath("brew", process.env.PATH ?? "");
|
|
102
|
+
if (!interactive || !brew) {
|
|
103
|
+
p.log.warn(`No ffmpeg found. MP4 videos of animated widgets need it.${brew ? `\n${dim(`To install it: ${cyan("brew install ffmpeg")}`)}` : ""}`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const answer = await p.confirm({
|
|
107
|
+
message: "No ffmpeg (for MP4 videos of animated widgets). Install it with Homebrew?",
|
|
108
|
+
initialValue: false,
|
|
109
|
+
});
|
|
110
|
+
if (cancelled(answer)) {
|
|
111
|
+
return "cancelled";
|
|
112
|
+
}
|
|
113
|
+
if (answer) {
|
|
114
|
+
const task = p.taskLog({ title: "Installing ffmpeg", limit: 6 });
|
|
115
|
+
const { code, tail } = await runLogged(brew, ["install", "ffmpeg"], {
|
|
116
|
+
onLine: (line) => task.message(line),
|
|
117
|
+
});
|
|
118
|
+
if (code === 0) {
|
|
119
|
+
task.success("ffmpeg installed");
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
task.error(`ffmpeg didn’t install. ${tail.split("\n").pop() ?? ""}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Starting at login: on a Mac a LaunchAgent starts the runtime, on Linux a systemd user
|
|
128
|
+
* service does. Asked, never assumed; `autostart off` undoes it.
|
|
129
|
+
*/
|
|
130
|
+
async function autostartStep(paths, interactive) {
|
|
131
|
+
const state = await autostartForStatus(paths);
|
|
132
|
+
if ("unavailable" in state) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (state.on) {
|
|
136
|
+
p.log.success(`Starts when you log in to this computer: ${dim(state.how)}`);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!interactive) {
|
|
140
|
+
p.log.info(dim(`To start it when you log in to this computer: ${cmd("autostart on")}`));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const answer = await p.confirm({
|
|
144
|
+
message: "Start engenty wizards when you log in to this computer? It runs as a background process, without a terminal window, so links and your AI apps can always reach it.",
|
|
145
|
+
initialValue: true,
|
|
146
|
+
});
|
|
147
|
+
if (cancelled(answer)) {
|
|
148
|
+
return "cancelled";
|
|
149
|
+
}
|
|
150
|
+
if (!answer) {
|
|
151
|
+
p.log.info(dim(`To do it later: ${cmd("autostart on")}`));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
const after = await setAutostart(paths, true);
|
|
156
|
+
if ("on" in after && after.on) {
|
|
157
|
+
p.log.success(`Starts when you log in to this computer: ${dim(after.how)}`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
p.log.warn("Couldn’t set it to start when you log in.");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
p.log.warn(`Couldn’t set it to start when you log in. ${error.message}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The wizards in the person's AI apps (Claude Desktop, Cursor, Codex …): offered for each app on
|
|
169
|
+
* this machine that does not have them yet. Asked, never assumed; `disconnect` undoes it.
|
|
170
|
+
*/
|
|
171
|
+
async function appsStep(paths, interactive) {
|
|
172
|
+
const states = await appStates(paths);
|
|
173
|
+
const connected = states.filter((s) => s.connected);
|
|
174
|
+
const offered = states.filter((s) => s.installed && !s.connected);
|
|
175
|
+
if (connected.length) {
|
|
176
|
+
p.log.success(`Already in your AI apps: ${connected.map((s) => s.name).join(", ")}`);
|
|
177
|
+
}
|
|
178
|
+
if (!offered.length) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (!interactive) {
|
|
182
|
+
p.log.info(dim(`To use your wizards in ${offered.map((s) => s.name).join(", ")}: ${cmd("connect")}`));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const answer = await p.multiselect({
|
|
186
|
+
message: "Add your wizards to these AI apps, as an MCP server in each app’s settings? (space to choose, enter to continue)",
|
|
187
|
+
options: offered.map((s) => ({ value: s.id, label: s.name })),
|
|
188
|
+
initialValues: offered.map((s) => s.id),
|
|
189
|
+
required: false,
|
|
190
|
+
});
|
|
191
|
+
if (cancelled(answer)) {
|
|
192
|
+
return "cancelled";
|
|
193
|
+
}
|
|
194
|
+
if (!answer.length) {
|
|
195
|
+
p.log.info(dim(`To do it later: ${cmd("connect")}`));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
for (const { app, outcome } of await connectApps(paths, answer)) {
|
|
199
|
+
if (outcome.ok) {
|
|
200
|
+
p.log.success(`${app.name}: ${dim(outcome.message)}`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
p.log.warn(`${app.name}: ${outcome.message}${outcome.snippet ? `\n${outcome.snippet}` : ""}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
p.log.info(dim("Restart those apps to see the wizards in them."));
|
|
207
|
+
}
|
|
208
|
+
/** The line that puts `~/.local/bin` on the PATH, and the shell file it belongs in. */
|
|
209
|
+
function pathLine() {
|
|
210
|
+
const shell = process.env.SHELL ?? "";
|
|
211
|
+
if (shell.endsWith("fish")) {
|
|
212
|
+
return {
|
|
213
|
+
file: join(homedir(), ".config/fish/config.fish"),
|
|
214
|
+
line: "fish_add_path ~/.local/bin",
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
const file = shell.endsWith("zsh")
|
|
218
|
+
? ".zshrc"
|
|
219
|
+
: process.platform === "darwin"
|
|
220
|
+
? ".bash_profile"
|
|
221
|
+
: ".bashrc";
|
|
222
|
+
return { file: join(homedir(), file), line: 'export PATH="$HOME/.local/bin:$PATH"' };
|
|
223
|
+
}
|
|
224
|
+
/** An install made by install.sh has its command in `~/.local/bin`: is that on the PATH? */
|
|
225
|
+
async function pathStep(interactive) {
|
|
226
|
+
const local = join(homedir(), ".local", "bin");
|
|
227
|
+
if (!installedByScript() || (process.env.PATH ?? "").split(delimiter).includes(local)) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const { file, line } = pathLine();
|
|
231
|
+
if (existsSync(file) && readFileSync(file, "utf8").includes(".local/bin")) {
|
|
232
|
+
p.log.info(`Open a new terminal to use the ${cyan("wizards")} command.`);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const hint = `Until then, use ${cyan(tilde(join(local, "wizards")))}`;
|
|
236
|
+
if (!interactive) {
|
|
237
|
+
p.log.warn(`~/.local/bin isn’t on your PATH. Add this to ${tilde(file)}:\n${line}\n${dim(hint)}`);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const answer = await p.confirm({
|
|
241
|
+
message: `The wizards command is in ~/.local/bin, which isn’t on your PATH. Add it in ${tilde(file)}?`,
|
|
242
|
+
initialValue: true,
|
|
243
|
+
});
|
|
244
|
+
if (cancelled(answer)) {
|
|
245
|
+
return "cancelled";
|
|
246
|
+
}
|
|
247
|
+
if (answer) {
|
|
248
|
+
appendFileSync(file, `\n# engenty wizards\n${line}\n`);
|
|
249
|
+
p.log.success(`Added to ${tilde(file)}. Open a new terminal to use it.\n${dim(hint)}`);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
p.log.info(hint);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** What runs now, and the commands to start, stop and check it from now on. */
|
|
256
|
+
async function howToUse(paths) {
|
|
257
|
+
const [running, atLogin] = await Promise.all([
|
|
258
|
+
runningRuntime(settings(paths).dataDir),
|
|
259
|
+
autostartForStatus(paths),
|
|
260
|
+
]);
|
|
261
|
+
const wizards = command();
|
|
262
|
+
const row = (what, cmd, note = "") => `${what.padEnd(9)}${cyan(cmd.padEnd(wizards.length + 12))}${note ? dim(note) : ""}`;
|
|
263
|
+
p.log.message([
|
|
264
|
+
running
|
|
265
|
+
? `engenty wizards is running: ${cyan(running.url)}`
|
|
266
|
+
: "engenty wizards isn’t running yet.",
|
|
267
|
+
"unavailable" in atLogin || !atLogin.on
|
|
268
|
+
? ""
|
|
269
|
+
: dim("It starts automatically when you log in to this computer."),
|
|
270
|
+
]
|
|
271
|
+
.filter(Boolean)
|
|
272
|
+
.join("\n"));
|
|
273
|
+
p.outro([
|
|
274
|
+
"From now on, in a terminal:",
|
|
275
|
+
"",
|
|
276
|
+
row("Start", `${wizards} start`, "runs in this terminal; Ctrl-C stops it"),
|
|
277
|
+
row("", `${wizards} start -s`, "runs in the background; the terminal stays free"),
|
|
278
|
+
row("Studio", `${wizards} studio`, "opens the studio, starting it first if needed"),
|
|
279
|
+
row("Stop", `${wizards} stop`, "your data is kept"),
|
|
280
|
+
row("Check", `${wizards} status`, "shows what’s running and where"),
|
|
281
|
+
row("Restart", `${wizards} restart`),
|
|
282
|
+
row("Menu", wizards, "everything in one menu"),
|
|
283
|
+
"",
|
|
284
|
+
dim("It’s installed, so there’s no need to run the installer again. To update: ") +
|
|
285
|
+
cmd("update"),
|
|
286
|
+
].join("\n"));
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* The guided setup: the account this computer joins, then what this machine has, what is
|
|
290
|
+
* missing, and what to install — an AI client to think with, ffmpeg, starting at login. It
|
|
291
|
+
* starts nothing; it ends with what runs and how to start, stop and check it. Returns false
|
|
292
|
+
* when it was stopped.
|
|
293
|
+
*/
|
|
294
|
+
export async function setup(paths, options) {
|
|
295
|
+
const interactive = !options.yes && Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
296
|
+
const version = packageVersion();
|
|
297
|
+
p.intro(`${badge("engenty wizards")} ${dim(version)}`);
|
|
298
|
+
p.log.message([
|
|
299
|
+
`Install ${tilde(paths.home)}${installedByScript() ? "" : dim(` (data; the code runs from ${isCheckout() ? "this checkout" : "npm"})`)}`,
|
|
300
|
+
`Node ${process.version} ${dim(tilde(process.execPath))}`,
|
|
301
|
+
].join("\n"));
|
|
302
|
+
if ((await accountStep(paths, options, interactive)) === "cancelled") {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
if ((await clientsStep(paths, options, interactive)) === "cancelled") {
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
if ((await toolsStep(interactive)) === "cancelled") {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
if ((await autostartStep(paths, interactive)) === "cancelled") {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
if ((await appsStep(paths, interactive)) === "cancelled") {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
if ((await pathStep(interactive)) === "cancelled") {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
writeInstallNote({
|
|
321
|
+
...readInstallNote(paths),
|
|
322
|
+
setupAt: new Date().toISOString(),
|
|
323
|
+
version,
|
|
324
|
+
unattended: !process.stdout.isTTY,
|
|
325
|
+
}, paths);
|
|
326
|
+
p.log.info(CHROME_APP);
|
|
327
|
+
if (options.next) {
|
|
328
|
+
p.outro(options.next === "start"
|
|
329
|
+
? "Setup is done. Starting engenty wizards…"
|
|
330
|
+
: `Setup is done. ${dim(`${cmd("help")} lists every command.`)}`);
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
333
|
+
await howToUse(paths);
|
|
334
|
+
return true;
|
|
335
|
+
}
|