@voltro/cli 0.28.0 → 0.30.0
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/CHANGELOG.md +655 -0
- package/THIRD-PARTY-NOTICES.md +90 -4
- package/dist/{apiBuild-eUM32r1u.js → apiBuild-BceikpQf.js} +3 -3
- package/dist/apiBuild-CxvR1Dwt.js +2 -0
- package/dist/bin.js +3 -3
- package/dist/checkCommand-BMr-X48w.js +2427 -0
- package/dist/checkCommand-BOk9y264.js +2 -0
- package/dist/cliRuntime-Oh517vCV.js +96 -0
- package/dist/{commands-CSkrUI1h.js → commands-D4Y1-Nlu.js} +8575 -9366
- package/dist/{dbCommand-CpYgmSw4.js → dbCommand-C7hbl5pk.js} +345 -266
- package/dist/dbCommand-D8nhyppR.js +2 -0
- package/dist/{dev-DlBWWnJQ.js → dev-Cr-teYsz.js} +1 -1
- package/dist/{dev-CEZwJhmb.js → dev-DmnkH-wr.js} +2939 -1832
- package/dist/fileConventions-Cof68_BL.js +33 -0
- package/dist/{frameworkTableAssembly-BwHU9Euq.js → frameworkTableAssembly-BzAajuUv.js} +115 -99
- package/dist/frameworkTableAssembly-DU0aOxjL.js +2 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.js +1 -1
- package/dist/{inspect-CUCCzw2I.js → inspect-BUUjt773.js} +349 -192
- package/dist/inspect-mmBuRXmy.js +2 -0
- package/dist/{inspectMetrics-BU90mvJN.js → inspectMetrics-BeJdP_3b.js} +1068 -978
- package/dist/{manifestBuild-BnzAxp2O.js → manifestBuild-BLrVuSlM.js} +1 -1
- package/dist/manifestBuild-Dj8Jjoto.js +2 -0
- package/dist/sdkgen-CqpOq_fy.js +582 -0
- package/dist/serveCommand-Ciq_wIY8.js +1577 -0
- package/dist/serveEntry.js +2 -2
- package/dist/{start-BGXIf6zT.js → start-ocqB1seX.js} +283 -270
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/AGENTS.core.md +50 -0
- package/templates/AGENTS.md +54 -2
- package/templates/agent-docs/_index.md +4 -2
- package/templates/agent-docs/_manifest.json +26 -5
- package/templates/agent-docs/ai.md +191 -0
- package/templates/agent-docs/cli.md +143 -6
- package/templates/agent-docs/configuration.md +32 -0
- package/templates/agent-docs/data.md +282 -0
- package/templates/agent-docs/database/migrations.md +47 -0
- package/templates/agent-docs/database/misc.md +57 -0
- package/templates/agent-docs/database/schema.md +3 -1
- package/templates/agent-docs/internationalization.md +169 -8
- package/templates/agent-docs/local-first-mobile.md +426 -0
- package/templates/agent-docs/routing.md +94 -3
- package/templates/agent-docs/schema-driven-ui.md +12 -0
- package/templates/agent-docs/security.md +17 -0
- package/templates/agent-docs/templates/apibackends.md +210 -1
- package/templates/agent-docs/templates/appshells.md +144 -1
- package/templates/agent-docs/templates/mobile.md +60 -0
- package/templates/agent-docs/templates/overview.md +17 -7
- package/templates/agent-docs/whats-new.md +238 -158
- package/templates/agent-docs/workflows.md +376 -0
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/.env.example +19 -0
- package/templates/apps/api-backend-sqlite/README.md +38 -0
- package/templates/apps/api-backend-sqlite/app.config.ts +35 -0
- package/templates/apps/api-backend-sqlite/database/schema.ts +54 -0
- package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.server.ts +19 -0
- package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.ts +37 -0
- package/templates/apps/api-backend-sqlite/package.json +30 -0
- package/templates/apps/api-backend-sqlite/queries/notes.query.server.ts +14 -0
- package/templates/apps/api-backend-sqlite/queries/notes.query.ts +20 -0
- package/templates/apps/api-backend-sqlite/template.json +6 -0
- package/templates/apps/api-backend-sqlite/tests/notes.create.test.ts +50 -0
- package/templates/apps/api-backend-sqlite/tsconfig.json +5 -0
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/README.md +104 -0
- package/templates/apps/api-cms/actions/content.get.action.server.ts +27 -0
- package/templates/apps/api-cms/actions/content.get.action.ts +19 -0
- package/templates/apps/api-cms/actions/content.types.action.server.ts +26 -0
- package/templates/apps/api-cms/actions/content.types.action.ts +40 -0
- package/templates/apps/api-cms/actions/me.action.server.ts +18 -0
- package/templates/apps/api-cms/actions/me.action.ts +16 -0
- package/templates/apps/api-cms/app.config.ts +61 -0
- package/templates/apps/api-cms/content/blogPost.contentType.ts +39 -0
- package/templates/apps/api-cms/content/index.ts +18 -0
- package/templates/apps/api-cms/content/page.contentType.ts +24 -0
- package/templates/apps/api-cms/database/schema.ts +64 -0
- package/templates/apps/api-cms/mutations/content.publish.mutation.server.ts +19 -0
- package/templates/apps/api-cms/mutations/content.publish.mutation.ts +15 -0
- package/templates/apps/api-cms/mutations/content.saveDraft.mutation.server.ts +36 -0
- package/templates/apps/api-cms/mutations/content.saveDraft.mutation.ts +32 -0
- package/templates/apps/api-cms/mutations/content.unpublish.mutation.server.ts +19 -0
- package/templates/apps/api-cms/mutations/content.unpublish.mutation.ts +11 -0
- package/templates/apps/api-cms/package.json +32 -0
- package/templates/apps/api-cms/queries/content.list.query.server.ts +0 -0
- package/templates/apps/api-cms/queries/content.list.query.ts +27 -0
- package/templates/apps/api-cms/template.json +6 -0
- package/templates/apps/api-cms/tests/content.descriptors.test.ts +64 -0
- package/templates/apps/api-cms/tests/content.write.test.ts +85 -0
- package/templates/apps/api-cms/tsconfig.json +5 -0
- package/templates/apps/api-collab/README.md +70 -0
- package/templates/apps/api-collab/app.config.ts +28 -0
- package/templates/apps/api-collab/database/schema.ts +63 -0
- package/templates/apps/api-collab/mutations/documents.create.mutation.server.ts +19 -0
- package/templates/apps/api-collab/mutations/documents.create.mutation.ts +36 -0
- package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +20 -0
- package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +30 -0
- package/templates/apps/api-collab/package.json +30 -0
- package/templates/apps/api-collab/queries/documents.query.server.ts +16 -0
- package/templates/apps/api-collab/queries/documents.query.ts +23 -0
- package/templates/apps/api-collab/template.json +6 -0
- package/templates/apps/api-collab/tests/documents.setBody.test.ts +89 -0
- package/templates/apps/api-collab/tsconfig.json +5 -0
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/README.md +103 -0
- package/templates/apps/api-saas-starter/actions/me.action.server.ts +18 -0
- package/templates/apps/api-saas-starter/actions/me.action.ts +20 -0
- package/templates/apps/api-saas-starter/app.config.ts +87 -0
- package/templates/apps/api-saas-starter/database/schema.ts +57 -0
- package/templates/apps/api-saas-starter/mutations/invites.create.mutation.server.ts +26 -0
- package/templates/apps/api-saas-starter/mutations/invites.create.mutation.ts +18 -0
- package/templates/apps/api-saas-starter/mutations/projects.create.mutation.server.ts +29 -0
- package/templates/apps/api-saas-starter/mutations/projects.create.mutation.ts +18 -0
- package/templates/apps/api-saas-starter/package.json +32 -0
- package/templates/apps/api-saas-starter/queries/invites.list.query.server.ts +14 -0
- package/templates/apps/api-saas-starter/queries/invites.list.query.ts +17 -0
- package/templates/apps/api-saas-starter/queries/projects.list.query.server.ts +14 -0
- package/templates/apps/api-saas-starter/queries/projects.list.query.ts +18 -0
- package/templates/apps/api-saas-starter/template.json +6 -0
- package/templates/apps/api-saas-starter/tests/projects.create.test.ts +62 -0
- package/templates/apps/api-saas-starter/tests/session.test.ts +33 -0
- package/templates/apps/api-saas-starter/tsconfig.json +5 -0
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/README.md +88 -0
- package/templates/apps/api-status/app.config.ts +36 -0
- package/templates/apps/api-status/authz.ts +33 -0
- package/templates/apps/api-status/database/schema.ts +70 -0
- package/templates/apps/api-status/mutations/components.create.mutation.server.ts +19 -0
- package/templates/apps/api-status/mutations/components.create.mutation.ts +16 -0
- package/templates/apps/api-status/mutations/incidents.create.mutation.server.ts +25 -0
- package/templates/apps/api-status/mutations/incidents.create.mutation.ts +22 -0
- package/templates/apps/api-status/mutations/incidents.resolve.mutation.server.ts +24 -0
- package/templates/apps/api-status/mutations/incidents.resolve.mutation.ts +19 -0
- package/templates/apps/api-status/mutations/incidents.update.mutation.server.ts +26 -0
- package/templates/apps/api-status/mutations/incidents.update.mutation.ts +21 -0
- package/templates/apps/api-status/package.json +30 -0
- package/templates/apps/api-status/queries/components.list.query.server.ts +14 -0
- package/templates/apps/api-status/queries/components.list.query.ts +13 -0
- package/templates/apps/api-status/queries/incidents.live.query.server.ts +14 -0
- package/templates/apps/api-status/queries/incidents.live.query.ts +20 -0
- package/templates/apps/api-status/queries/updates.list.query.server.ts +14 -0
- package/templates/apps/api-status/queries/updates.list.query.ts +17 -0
- package/templates/apps/api-status/template.json +6 -0
- package/templates/apps/api-status/tests/status.test.ts +70 -0
- package/templates/apps/api-status/tsconfig.json +5 -0
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/app.config.ts +1 -1
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-admin/src/locales/index.ts +1 -1
- package/templates/apps/frontend-app/app.config.ts +1 -1
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-app/src/locales/index.ts +1 -1
- package/templates/apps/frontend-app/src/pages/layout.tsx +1 -1
- package/templates/apps/frontend-app/src/pages/page.tsx +1 -1
- package/templates/apps/frontend-auth/README.md +78 -0
- package/templates/apps/frontend-auth/app.config.ts +34 -0
- package/templates/apps/frontend-auth/package.json +32 -0
- package/templates/apps/frontend-auth/src/components/AuthShell.tsx +35 -0
- package/templates/apps/frontend-auth/src/components/PasswordStrength.tsx +33 -0
- package/templates/apps/frontend-auth/src/config.ts +11 -0
- package/templates/apps/frontend-auth/src/globals.css +105 -0
- package/templates/apps/frontend-auth/src/globals.d.ts +6 -0
- package/templates/apps/frontend-auth/src/lib/auth.ts +34 -0
- package/templates/apps/frontend-auth/src/lib/redirect.test.ts +24 -0
- package/templates/apps/frontend-auth/src/lib/redirect.ts +29 -0
- package/templates/apps/frontend-auth/src/locales/de.ts +66 -0
- package/templates/apps/frontend-auth/src/locales/en.ts +76 -0
- package/templates/apps/frontend-auth/src/locales/index.ts +14 -0
- package/templates/apps/frontend-auth/src/pages/forgot/page.tsx +51 -0
- package/templates/apps/frontend-auth/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-auth/src/pages/login/page.test.tsx +53 -0
- package/templates/apps/frontend-auth/src/pages/login/page.tsx +67 -0
- package/templates/apps/frontend-auth/src/pages/logout/page.tsx +28 -0
- package/templates/apps/frontend-auth/src/pages/magic/page.tsx +51 -0
- package/templates/apps/frontend-auth/src/pages/page.tsx +26 -0
- package/templates/apps/frontend-auth/src/pages/reset/page.test.tsx +51 -0
- package/templates/apps/frontend-auth/src/pages/reset/page.tsx +63 -0
- package/templates/apps/frontend-auth/src/pages/signup/page.tsx +60 -0
- package/templates/apps/frontend-auth/src/pages/verify/page.tsx +50 -0
- package/templates/apps/frontend-auth/template.json +6 -0
- package/templates/apps/frontend-auth/tsconfig.json +5 -0
- package/templates/apps/frontend-blank/app.config.ts +1 -1
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-blank/src/locales/index.ts +1 -1
- package/templates/apps/frontend-blank/src/pages/layout.tsx +1 -1
- package/templates/apps/frontend-blank/src/pages/page.tsx +1 -1
- package/templates/apps/frontend-cms/README.md +47 -0
- package/templates/apps/frontend-cms/app.config.ts +37 -0
- package/templates/apps/frontend-cms/package.json +33 -0
- package/templates/apps/frontend-cms/src/config.ts +8 -0
- package/templates/apps/frontend-cms/src/globals.css +105 -0
- package/templates/apps/frontend-cms/src/globals.d.ts +6 -0
- package/templates/apps/frontend-cms/src/lib/api.ts +58 -0
- package/templates/apps/frontend-cms/src/locales/de.ts +50 -0
- package/templates/apps/frontend-cms/src/locales/en.ts +55 -0
- package/templates/apps/frontend-cms/src/locales/index.ts +14 -0
- package/templates/apps/frontend-cms/src/pages/(app)/error.tsx +18 -0
- package/templates/apps/frontend-cms/src/pages/(app)/layout.test.tsx +31 -0
- package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +62 -0
- package/templates/apps/frontend-cms/src/pages/(app)/not-found.tsx +14 -0
- package/templates/apps/frontend-cms/src/pages/(app)/page.test.tsx +110 -0
- package/templates/apps/frontend-cms/src/pages/(app)/page.tsx +159 -0
- package/templates/apps/frontend-cms/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-cms/src/pages/login/page.test.tsx +58 -0
- package/templates/apps/frontend-cms/src/pages/login/page.tsx +93 -0
- package/templates/apps/frontend-cms/template.json +6 -0
- package/templates/apps/frontend-cms/tsconfig.json +5 -0
- package/templates/apps/frontend-collab/README.md +80 -0
- package/templates/apps/frontend-collab/app.config.ts +38 -0
- package/templates/apps/frontend-collab/package.json +33 -0
- package/templates/apps/frontend-collab/src/locales/de.ts +29 -0
- package/templates/apps/frontend-collab/src/locales/en.ts +31 -0
- package/templates/apps/frontend-collab/src/locales/index.ts +15 -0
- package/templates/apps/frontend-collab/src/pages/layout.tsx +39 -0
- package/templates/apps/frontend-collab/src/pages/page.test.tsx +150 -0
- package/templates/apps/frontend-collab/src/pages/page.tsx +186 -0
- package/templates/apps/frontend-collab/template.json +6 -0
- package/templates/apps/frontend-collab/tsconfig.json +11 -0
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/app.config.ts +1 -1
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-dashboard/src/locales/index.ts +1 -1
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/README.md +71 -0
- package/templates/apps/frontend-portal/app.config.ts +37 -0
- package/templates/apps/frontend-portal/package.json +32 -0
- package/templates/apps/frontend-portal/src/config.ts +8 -0
- package/templates/apps/frontend-portal/src/globals.css +93 -0
- package/templates/apps/frontend-portal/src/globals.d.ts +6 -0
- package/templates/apps/frontend-portal/src/lib/api.ts +62 -0
- package/templates/apps/frontend-portal/src/locales/de.ts +86 -0
- package/templates/apps/frontend-portal/src/locales/en.ts +93 -0
- package/templates/apps/frontend-portal/src/locales/index.ts +14 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/api-keys/page.test.tsx +71 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/api-keys/page.tsx +124 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/billing/page.test.tsx +86 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/billing/page.tsx +97 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/error.tsx +19 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/invoices/page.tsx +45 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.test.tsx +31 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +63 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/not-found.tsx +15 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/page.tsx +39 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/profile/page.tsx +79 -0
- package/templates/apps/frontend-portal/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-portal/src/pages/login/page.test.tsx +58 -0
- package/templates/apps/frontend-portal/src/pages/login/page.tsx +96 -0
- package/templates/apps/frontend-portal/template.json +6 -0
- package/templates/apps/frontend-portal/tsconfig.json +5 -0
- package/templates/apps/frontend-saas/README.md +73 -0
- package/templates/apps/frontend-saas/app.config.ts +46 -0
- package/templates/apps/frontend-saas/package.json +32 -0
- package/templates/apps/frontend-saas/src/config.ts +8 -0
- package/templates/apps/frontend-saas/src/globals.css +85 -0
- package/templates/apps/frontend-saas/src/globals.d.ts +6 -0
- package/templates/apps/frontend-saas/src/lib/api.ts +47 -0
- package/templates/apps/frontend-saas/src/locales/de.ts +72 -0
- package/templates/apps/frontend-saas/src/locales/en.ts +81 -0
- package/templates/apps/frontend-saas/src/locales/index.ts +14 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +30 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/login/page.test.tsx +58 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/login/page.tsx +96 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/page.tsx +27 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/billing/page.tsx +72 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/error.tsx +20 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.test.tsx +32 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +69 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/not-found.tsx +17 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/page.test.tsx +113 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/page.tsx +76 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/team/page.tsx +73 -0
- package/templates/apps/frontend-saas/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-saas/template.json +6 -0
- package/templates/apps/frontend-saas/tsconfig.json +5 -0
- package/templates/apps/frontend-spa/app.config.ts +1 -1
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-spa/src/locales/index.ts +1 -1
- package/templates/apps/frontend-spa/src/pages/layout.tsx +1 -1
- package/templates/apps/frontend-spa/src/pages/page.tsx +1 -1
- package/templates/apps/frontend-ssr/app.config.ts +1 -1
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr/src/locales/index.ts +1 -1
- package/templates/apps/frontend-ssr/src/pages/layout.tsx +1 -1
- package/templates/apps/frontend-ssr/src/pages/page.tsx +1 -1
- package/templates/apps/frontend-ssr-api/app.config.ts +1 -1
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-ssr-api/src/locales/index.ts +1 -1
- package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +1 -1
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/README.md +51 -0
- package/templates/apps/frontend-status/app.config.ts +39 -0
- package/templates/apps/frontend-status/package.json +32 -0
- package/templates/apps/frontend-status/src/config.ts +7 -0
- package/templates/apps/frontend-status/src/globals.css +70 -0
- package/templates/apps/frontend-status/src/globals.d.ts +6 -0
- package/templates/apps/frontend-status/src/lib/status.ts +81 -0
- package/templates/apps/frontend-status/src/locales/de.ts +41 -0
- package/templates/apps/frontend-status/src/locales/en.ts +45 -0
- package/templates/apps/frontend-status/src/locales/index.ts +13 -0
- package/templates/apps/frontend-status/src/pages/layout.tsx +27 -0
- package/templates/apps/frontend-status/src/pages/page.test.tsx +123 -0
- package/templates/apps/frontend-status/src/pages/page.tsx +136 -0
- package/templates/apps/frontend-status/template.json +6 -0
- package/templates/apps/frontend-status/tsconfig.json +11 -0
- package/templates/apps/mobile-app/README.md +58 -0
- package/templates/apps/mobile-app/app.config.ts +33 -0
- package/templates/apps/mobile-app/babel.config.js +5 -0
- package/templates/apps/mobile-app/metro.config.js +20 -0
- package/templates/apps/mobile-app/package.json +33 -0
- package/templates/apps/mobile-app/src/app/_layout.tsx +61 -0
- package/templates/apps/mobile-app/src/app/index.tsx +62 -0
- package/templates/apps/mobile-app/src/app/orders/[id].tsx +19 -0
- package/templates/apps/mobile-app/src/app/settings.tsx +51 -0
- package/templates/apps/mobile-app/src/client.ts +74 -0
- package/templates/apps/mobile-app/src/lib/deeplinks.ts +39 -0
- package/templates/apps/mobile-app/src/lib/notifications.ts +31 -0
- package/templates/apps/mobile-app/src/lib/sync.ts +29 -0
- package/templates/apps/mobile-app/src/persistence.ts +38 -0
- package/templates/apps/mobile-app/template.json +6 -0
- package/templates/apps/mobile-app/tests/deeplinks.test.ts +32 -0
- package/templates/apps/mobile-app/tests/notifications.test.ts +26 -0
- package/templates/apps/mobile-app/tests/sync.test.ts +34 -0
- package/templates/apps/mobile-app/tsconfig.json +10 -0
- package/templates/apps/mobile-app/voltro.mobile.ts +11 -0
- package/templates/baselines/compose/docker-compose.prod.yml +15 -0
- package/templates/baselines/compose-mariadb/docker-compose.prod.yml +15 -0
- package/templates/patches/@effect__cluster@0.60.0.patch +6 -6
- package/dist/apiBuild-DgBS9ayv.js +0 -2
- package/dist/dbCommand-DvguqlzF.js +0 -2
- package/dist/fileConventions-3bffWssN.js +0 -30
- package/dist/frameworkTableAssembly-lrjZtk0G.js +0 -2
- package/dist/inspect-gt8bq-Tz.js +0 -2
- package/dist/manifestBuild-ifczArzr.js +0 -2
- package/dist/serveCommand-ZTn-dPFa.js +0 -1425
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//#region src/fileConventions.ts
|
|
2
|
+
var e = /\.(query|mutation|action|stream)\.ts$/, t = /\.(query|mutation|action|stream)\.server\.ts$/, n = /\.event\.ts$/, r = /\.workflow\.tsx$/, i = /\.workflow\.server\.tsx$/, a = /\.workflow\.tsx?$/, o = /\.trigger\.tsx?$/, s = /\.cron\.tsx?$/, c = /\.webhook\.tsx?$/, l = /\.outbox\.tsx?$/, u = /\.subscribe\.tsx?$/, d = /\.reaction\.tsx?$/, f = /\.aggregate\.tsx?$/, p = /\.expectation\.ts$/, m = /\.budget\.ts$/, h = /\.experiment\.ts$/, g = /\.startup\.tsx?$/, _ = /\.seed\.ts$/, v = /\.relations\.ts$/, y = /\.entity\.ts$|\.schema\.ts$|^schema\.ts$/, b = (e) => a.test(e) && !r.test(e) && !i.test(e), x = /(?:^|\/)page\.tsx$/, S = /\.island\.tsx?$/, C = /\.component\.tsx$/, w = /\.component\.ui\.tsx$/, T = /\.hook\.tsx?$/, E = /\.internal\.tsx?$/, D = /\.types\.tsx?$/, O = /\.fixture\.tsx?$/, k = /\.tracking\.tsx?$/, A = /\.store\.tsx?$/, j = /\.client\.tsx?$/, M = /\.(test|spec)\.tsx?$/, N = [
|
|
3
|
+
e,
|
|
4
|
+
t,
|
|
5
|
+
a,
|
|
6
|
+
i,
|
|
7
|
+
o,
|
|
8
|
+
s,
|
|
9
|
+
c,
|
|
10
|
+
l,
|
|
11
|
+
u,
|
|
12
|
+
d,
|
|
13
|
+
f,
|
|
14
|
+
g,
|
|
15
|
+
p,
|
|
16
|
+
m,
|
|
17
|
+
h,
|
|
18
|
+
_,
|
|
19
|
+
v,
|
|
20
|
+
y,
|
|
21
|
+
/\.route\.tsx?$/,
|
|
22
|
+
n,
|
|
23
|
+
A,
|
|
24
|
+
j,
|
|
25
|
+
/\.(agent|tool|email|connection|serverless|server|config|generated)\.tsx?$/
|
|
26
|
+
], P = (e) => N.some((t) => t.test(e)), F = /* @__PURE__ */ new Set([
|
|
27
|
+
"layout.tsx",
|
|
28
|
+
"error.tsx",
|
|
29
|
+
"loading.tsx",
|
|
30
|
+
"not-found.tsx"
|
|
31
|
+
]);
|
|
32
|
+
//#endregion
|
|
33
|
+
export { r as A, A as C, o as D, k as E, i as M, P as N, D as O, b as P, g as S, M as T, t as _, s as a, y as b, h as c, E as d, S as f, e as g, F as h, w as i, a as j, c as k, O as l, x as m, m as n, n as o, l as p, C as r, p as s, f as t, T as u, d as v, u as w, _ as x, v as y };
|
|
@@ -1,41 +1,45 @@
|
|
|
1
1
|
import { n as e } from "./appModuleLoader-C9r9mxZt.js";
|
|
2
|
-
import {
|
|
2
|
+
import { D as t, a as n, j as r, k as i, p as a } from "./fileConventions-Cof68_BL.js";
|
|
3
3
|
import { basename as o, join as s } from "node:path";
|
|
4
4
|
import { pathToFileURL as c } from "node:url";
|
|
5
5
|
import { Effect as l } from "effect";
|
|
6
6
|
import { promises as u } from "node:fs";
|
|
7
|
-
import { _voltroConnectionGrantsTable as d, _voltroConnectionsTable as f, _voltroScheduleClaimsTable as p, _voltroScheduleRunsTable as m, _voltroTracesTable as h, _voltroUndoLogTable as ee, _voltroWakeupsTable as
|
|
8
|
-
import { SqlClient as
|
|
9
|
-
import { _voltroWorkflowRunEventsTable as
|
|
10
|
-
import { agentMessagesTable as
|
|
11
|
-
import { _voltroApiKeysTable as
|
|
12
|
-
import { _voltroWebhookDeliveriesTable as
|
|
13
|
-
import { _voltroStorageBlobsTable as
|
|
14
|
-
import { defineAction as
|
|
7
|
+
import { _voltroConnectionGrantsTable as d, _voltroConnectionsTable as f, _voltroScheduleClaimsTable as p, _voltroScheduleRunsTable as m, _voltroTracesTable as h, _voltroUndoLogTable as ee, _voltroWakeupsTable as te, _voltroWorkflowEventDeliveriesTable as ne, _voltroWorkflowEventsTable as re, outboxAttemptsTable as ie, outboxTable as ae, undoCaptureEnabled as oe } from "@voltro/runtime";
|
|
8
|
+
import { SqlClient as g } from "@effect/sql";
|
|
9
|
+
import { _voltroWorkflowAdmissionsTable as se, _voltroWorkflowPausesTable as ce, _voltroWorkflowPendingTable as le, _voltroWorkflowRunEventsTable as ue, _voltroWorkflowRunStepsTable as de, _voltroWorkflowRunsTable as fe, _voltroWorkflowStartContextsTable as pe, _voltroWorkflowWatermarksTable as me } from "@voltro/workflow";
|
|
10
|
+
import { agentMessagesTable as he, agentThreadsTable as _, aiBudgetTable as v, aiInferencesTable as y, aiUsageTable as b, isAgentDescriptor as x, isAgentExecutor as S, resolveToolModuleHandlers as C } from "@voltro/ai";
|
|
11
|
+
import { _voltroApiKeysTable as w, _voltroCdcOffsetsTable as T, _voltroIdempotencyTable as E, _voltroKvTable as D, _voltroMigrationPlansTable as O, _voltroMigrationsTable as k, _voltroMssqlCdcOffsetsTable as A, _voltroSeedsTable as j, lt as M } from "@voltro/database";
|
|
12
|
+
import { _voltroWebhookDeliveriesTable as N, _voltroWebhookTargetsTable as P } from "@voltro/plugin-webhooks/mixin";
|
|
13
|
+
import { _voltroStorageBlobsTable as F, _voltroStorageGrantsTable as I, _voltroStorageRefsTable as L, _voltroStorageUsageTable as R } from "@voltro/plugin-storage";
|
|
14
|
+
import { defineAction as ge, defineMutation as _e, defineQuery as ve } from "@voltro/protocol";
|
|
15
15
|
//#region src/frameworkTables.ts
|
|
16
|
-
var
|
|
16
|
+
var ye = [
|
|
17
17
|
{
|
|
18
|
-
table:
|
|
18
|
+
table: k,
|
|
19
19
|
when: "always"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
table:
|
|
22
|
+
table: j,
|
|
23
23
|
when: "always"
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
table:
|
|
26
|
+
table: O,
|
|
27
27
|
when: "always"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
table:
|
|
30
|
+
table: fe,
|
|
31
31
|
when: "workflows"
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
|
-
table:
|
|
34
|
+
table: de,
|
|
35
|
+
when: "workflows"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
table: ue,
|
|
35
39
|
when: "workflows"
|
|
36
40
|
},
|
|
37
41
|
{
|
|
38
|
-
table:
|
|
42
|
+
table: pe,
|
|
39
43
|
when: "workflows"
|
|
40
44
|
},
|
|
41
45
|
{
|
|
@@ -43,11 +47,23 @@ var R = [
|
|
|
43
47
|
when: "workflows"
|
|
44
48
|
},
|
|
45
49
|
{
|
|
46
|
-
table:
|
|
50
|
+
table: se,
|
|
47
51
|
when: "workflows"
|
|
48
52
|
},
|
|
49
53
|
{
|
|
50
|
-
table:
|
|
54
|
+
table: ce,
|
|
55
|
+
when: "workflows"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
table: me,
|
|
59
|
+
when: "workflows"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
table: re,
|
|
63
|
+
when: "workflows"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
table: ne,
|
|
51
67
|
when: "workflows"
|
|
52
68
|
},
|
|
53
69
|
{
|
|
@@ -59,11 +75,11 @@ var R = [
|
|
|
59
75
|
when: "schedules"
|
|
60
76
|
},
|
|
61
77
|
{
|
|
62
|
-
table:
|
|
78
|
+
table: P,
|
|
63
79
|
when: "webhooks"
|
|
64
80
|
},
|
|
65
81
|
{
|
|
66
|
-
table:
|
|
82
|
+
table: N,
|
|
67
83
|
when: "webhooks"
|
|
68
84
|
},
|
|
69
85
|
{
|
|
@@ -75,11 +91,11 @@ var R = [
|
|
|
75
91
|
when: "undo"
|
|
76
92
|
},
|
|
77
93
|
{
|
|
78
|
-
table:
|
|
94
|
+
table: ae,
|
|
79
95
|
when: "outbox"
|
|
80
96
|
},
|
|
81
97
|
{
|
|
82
|
-
table:
|
|
98
|
+
table: ie,
|
|
83
99
|
when: "outbox"
|
|
84
100
|
},
|
|
85
101
|
{
|
|
@@ -91,85 +107,85 @@ var R = [
|
|
|
91
107
|
when: "connections"
|
|
92
108
|
},
|
|
93
109
|
{
|
|
94
|
-
table:
|
|
110
|
+
table: te,
|
|
95
111
|
when: "always"
|
|
96
112
|
},
|
|
97
113
|
{
|
|
98
|
-
table:
|
|
114
|
+
table: L,
|
|
99
115
|
when: "always"
|
|
100
116
|
},
|
|
101
117
|
{
|
|
102
|
-
table:
|
|
118
|
+
table: I,
|
|
103
119
|
when: "always"
|
|
104
120
|
},
|
|
105
121
|
{
|
|
106
|
-
table:
|
|
122
|
+
table: F,
|
|
107
123
|
when: "always"
|
|
108
124
|
},
|
|
109
125
|
{
|
|
110
|
-
table:
|
|
126
|
+
table: R,
|
|
111
127
|
when: "always"
|
|
112
128
|
},
|
|
113
129
|
{
|
|
114
|
-
table:
|
|
130
|
+
table: E,
|
|
115
131
|
when: "always"
|
|
116
132
|
},
|
|
117
133
|
{
|
|
118
|
-
table:
|
|
134
|
+
table: w,
|
|
119
135
|
when: "always"
|
|
120
136
|
},
|
|
121
137
|
{
|
|
122
|
-
table:
|
|
138
|
+
table: D,
|
|
123
139
|
when: "always"
|
|
124
140
|
}
|
|
125
141
|
], z = (e) => {
|
|
126
|
-
let t =
|
|
127
|
-
return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ?
|
|
142
|
+
let t = ye.filter((t) => t.when === "always" || t.when === "workflows" && e.workflows || t.when === "schedules" && e.schedules || t.when === "webhooks" && e.webhooks || t.when === "traces" && e.traces || t.when === "undo" && e.undo === !0 || t.when === "outbox" && e.outbox === !0 || t.when === "connections" && e.connections === !0).map((e) => e.table);
|
|
143
|
+
return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ? A : T), t;
|
|
128
144
|
}, B = (e) => {
|
|
129
145
|
let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
|
|
130
146
|
return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/-([a-zA-Z0-9])/g, (e, t) => t.toUpperCase());
|
|
131
|
-
},
|
|
147
|
+
}, be = (e) => {
|
|
132
148
|
let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
|
|
133
149
|
return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/#/g, "--").replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
134
|
-
},
|
|
150
|
+
}, xe = (e, t) => t.name.includes(".") ? t.name : `${B(e.name)}.${t.name}`, Se = (e, t, n) => {
|
|
135
151
|
switch (e) {
|
|
136
|
-
case "query": return
|
|
152
|
+
case "query": return ve({
|
|
137
153
|
name: t,
|
|
138
154
|
input: n.input,
|
|
139
155
|
output: n.output,
|
|
140
156
|
...n.error === void 0 ? {} : { error: n.error },
|
|
141
157
|
...n.source === void 0 ? {} : { source: n.source }
|
|
142
158
|
});
|
|
143
|
-
case "mutation": return
|
|
159
|
+
case "mutation": return _e({
|
|
144
160
|
name: t,
|
|
145
161
|
input: n.input,
|
|
146
162
|
output: n.output,
|
|
147
163
|
...n.error === void 0 ? {} : { error: n.error }
|
|
148
164
|
});
|
|
149
|
-
case "action": return
|
|
165
|
+
case "action": return ge({
|
|
150
166
|
name: t,
|
|
151
167
|
input: n.input,
|
|
152
168
|
output: n.output,
|
|
153
169
|
...n.error === void 0 ? {} : { error: n.error }
|
|
154
170
|
});
|
|
155
171
|
}
|
|
156
|
-
},
|
|
172
|
+
}, Ce = (e) => (t, n) => l.suspend(() => {
|
|
157
173
|
let r = { request: {
|
|
158
174
|
subject: n.request.subject,
|
|
159
175
|
traceId: n.request.traceId
|
|
160
176
|
} };
|
|
161
177
|
return e.execute(t, r);
|
|
162
|
-
}),
|
|
178
|
+
}), we = (e) => {
|
|
163
179
|
let t = [];
|
|
164
180
|
for (let n of e) {
|
|
165
181
|
let e = n.routes ?? [];
|
|
166
182
|
for (let r of e) {
|
|
167
|
-
let e =
|
|
183
|
+
let e = xe(n, r), i = Se(r.kind, e, r);
|
|
168
184
|
t.push({
|
|
169
185
|
kind: r.kind,
|
|
170
186
|
file: `plugin:${n.name}`,
|
|
171
187
|
descriptor: i,
|
|
172
|
-
executor:
|
|
188
|
+
executor: Ce(r),
|
|
173
189
|
plugin: {
|
|
174
190
|
name: n.name,
|
|
175
191
|
version: n.version
|
|
@@ -178,7 +194,7 @@ var R = [
|
|
|
178
194
|
}
|
|
179
195
|
}
|
|
180
196
|
return t;
|
|
181
|
-
},
|
|
197
|
+
}, V = (e, t, n = /* @__PURE__ */ new Set()) => {
|
|
182
198
|
let r = /* @__PURE__ */ new Map();
|
|
183
199
|
for (let e of t) r.set(e, "user-route");
|
|
184
200
|
let i = [];
|
|
@@ -190,9 +206,9 @@ var R = [
|
|
|
190
206
|
}
|
|
191
207
|
}
|
|
192
208
|
return i;
|
|
193
|
-
},
|
|
194
|
-
yield* (yield*
|
|
195
|
-
CREATE TABLE IF NOT EXISTS ${
|
|
209
|
+
}, H = "_voltro_plugin_migrations", Te = () => l.gen(function* () {
|
|
210
|
+
yield* (yield* g.SqlClient).unsafe(`
|
|
211
|
+
CREATE TABLE IF NOT EXISTS ${H} (
|
|
196
212
|
id TEXT PRIMARY KEY,
|
|
197
213
|
plugin_name TEXT NOT NULL,
|
|
198
214
|
migration_id TEXT NOT NULL,
|
|
@@ -200,25 +216,25 @@ var R = [
|
|
|
200
216
|
applied_at TEXT NOT NULL
|
|
201
217
|
);
|
|
202
218
|
`).pipe(l.orDie);
|
|
203
|
-
}),
|
|
204
|
-
let e = yield*
|
|
219
|
+
}), Ee = (e, t) => `${B(e)}__${t}`, De = () => l.gen(function* () {
|
|
220
|
+
let e = yield* g.SqlClient, t = yield* e`SELECT id FROM ${e(H)}`.pipe(l.orDie);
|
|
205
221
|
return new Set(t.map((e) => e.id));
|
|
206
|
-
}),
|
|
207
|
-
let t = yield*
|
|
222
|
+
}), Oe = (e) => l.gen(function* () {
|
|
223
|
+
let t = yield* g.SqlClient, n = (/* @__PURE__ */ new Date()).toISOString();
|
|
208
224
|
yield* t`
|
|
209
|
-
INSERT INTO ${t(
|
|
225
|
+
INSERT INTO ${t(H)} (id, plugin_name, migration_id, description, applied_at)
|
|
210
226
|
VALUES (${e.key}, ${e.pluginName}, ${e.migration.id}, ${e.migration.description ?? null}, ${n})
|
|
211
227
|
`.pipe(l.orDie);
|
|
212
|
-
}),
|
|
228
|
+
}), ke = (e) => l.gen(function* () {
|
|
213
229
|
let t = e.flatMap((e) => (e.extendSchema?.migrations ?? []).map((t) => ({
|
|
214
230
|
plugin: e,
|
|
215
231
|
migration: t
|
|
216
232
|
})));
|
|
217
233
|
if (t.length === 0) return [];
|
|
218
|
-
yield*
|
|
219
|
-
let n = yield*
|
|
234
|
+
yield* Te();
|
|
235
|
+
let n = yield* De(), r = [];
|
|
220
236
|
for (let { plugin: e, migration: i } of t) {
|
|
221
|
-
let t =
|
|
237
|
+
let t = Ee(e.name, i.id), a = Date.now();
|
|
222
238
|
if (n.has(t)) {
|
|
223
239
|
r.push({
|
|
224
240
|
pluginName: e.name,
|
|
@@ -228,9 +244,9 @@ var R = [
|
|
|
228
244
|
});
|
|
229
245
|
continue;
|
|
230
246
|
}
|
|
231
|
-
let o = yield*
|
|
247
|
+
let o = yield* g.SqlClient;
|
|
232
248
|
try {
|
|
233
|
-
yield* i.up(o).pipe(l.mapError((e) => e)), yield*
|
|
249
|
+
yield* i.up(o).pipe(l.mapError((e) => e)), yield* Oe({
|
|
234
250
|
key: t,
|
|
235
251
|
pluginName: e.name,
|
|
236
252
|
migration: i
|
|
@@ -251,24 +267,24 @@ var R = [
|
|
|
251
267
|
}
|
|
252
268
|
}
|
|
253
269
|
return r;
|
|
254
|
-
}),
|
|
270
|
+
}), Ae = (e) => e.filter((e) => e.extendSchema && (e.extendSchema.tables?.length ?? 0) + (e.extendSchema.migrations?.length ?? 0) > 0).map((e) => ({
|
|
255
271
|
pluginName: e.name,
|
|
256
272
|
pluginAlias: B(e.name),
|
|
257
273
|
tables: e.extendSchema.tables?.length ?? 0,
|
|
258
274
|
migrations: e.extendSchema.migrations?.length ?? 0
|
|
259
|
-
})),
|
|
275
|
+
})), je = (e) => e.flatMap((e) => e.extendSchema?.tables ?? []), U = /(?<!\.server)\.agent\.tsx?$/, Me = /\.agent\.server\.tsx?$/, W = /\.tool\.tsx?$/, Ne = async (t, n) => {
|
|
260
276
|
let r = 0;
|
|
261
|
-
for (let i of t) if (
|
|
277
|
+
for (let i of t) if (W.test(i)) try {
|
|
262
278
|
let t = await e(i);
|
|
263
|
-
r +=
|
|
279
|
+
r += C(t);
|
|
264
280
|
} catch (e) {
|
|
265
281
|
n.warn("tool: failed to import — handler not wired", { file: i }, e);
|
|
266
282
|
}
|
|
267
283
|
return r;
|
|
268
|
-
},
|
|
284
|
+
}, Pe = (e) => e.replace(/\.agent\.(tsx?)$/, ".agent.server.$1"), Fe = async (t, n) => {
|
|
269
285
|
let r = [], i = /* @__PURE__ */ new Set();
|
|
270
286
|
for (let a of t) {
|
|
271
|
-
if (!
|
|
287
|
+
if (!U.test(a)) continue;
|
|
272
288
|
let t;
|
|
273
289
|
try {
|
|
274
290
|
t = await e(a);
|
|
@@ -276,7 +292,7 @@ var R = [
|
|
|
276
292
|
n.warn("agent: failed to import descriptor", { file: a }, e);
|
|
277
293
|
continue;
|
|
278
294
|
}
|
|
279
|
-
let o = Object.values(t).find(
|
|
295
|
+
let o = Object.values(t).find(x);
|
|
280
296
|
if (o === void 0) {
|
|
281
297
|
n.warn("agent: no defineAgent() descriptor export found", { file: a });
|
|
282
298
|
continue;
|
|
@@ -288,7 +304,7 @@ var R = [
|
|
|
288
304
|
});
|
|
289
305
|
continue;
|
|
290
306
|
}
|
|
291
|
-
let s =
|
|
307
|
+
let s = Pe(a), c;
|
|
292
308
|
try {
|
|
293
309
|
c = await e(s);
|
|
294
310
|
} catch (e) {
|
|
@@ -300,7 +316,7 @@ var R = [
|
|
|
300
316
|
continue;
|
|
301
317
|
}
|
|
302
318
|
let l = c.default;
|
|
303
|
-
if (!
|
|
319
|
+
if (!S(l)) {
|
|
304
320
|
n.warn("agent: executor file must default-export defineAgentExecutor(descriptor, {...})", {
|
|
305
321
|
file: s,
|
|
306
322
|
name: o.name
|
|
@@ -315,7 +331,7 @@ var R = [
|
|
|
315
331
|
});
|
|
316
332
|
}
|
|
317
333
|
return { agents: r };
|
|
318
|
-
},
|
|
334
|
+
}, G = /\.connection\.tsx?$/, Ie = (e) => e.replace(G, ""), Le = async (t, n) => {
|
|
319
335
|
let r = [], i = /* @__PURE__ */ new Map();
|
|
320
336
|
for (let a of t) {
|
|
321
337
|
let t;
|
|
@@ -358,26 +374,26 @@ var R = [
|
|
|
358
374
|
}
|
|
359
375
|
return r.length > 0 && n.info("discovered connections", {
|
|
360
376
|
connections: r.map((e) => `${e.definition.id} (${e.definition.kind})`),
|
|
361
|
-
files: r.map((e) =>
|
|
377
|
+
files: r.map((e) => Ie(o(e.file)))
|
|
362
378
|
}), r;
|
|
363
|
-
},
|
|
379
|
+
}, K = (e) => typeof e.attributes["framework.kind"] == "string" && e.attributes["framework.kind"].startsWith("subscription."), q = (e) => {
|
|
364
380
|
if (e.name.includes("_voltro_traces")) return !0;
|
|
365
381
|
for (let t in e.attributes) {
|
|
366
382
|
let n = e.attributes[t];
|
|
367
383
|
if (typeof n == "string" && n.includes("_voltro_traces")) return !0;
|
|
368
384
|
}
|
|
369
385
|
return !1;
|
|
370
|
-
},
|
|
386
|
+
}, Re = (e) => typeof e.attributes["framework.kind"] == "string" && e.attributes["framework.kind"].startsWith("subscription"), ze = 1e3, Be = 500, Ve = 50, J = class {
|
|
371
387
|
capacity;
|
|
372
388
|
buffer = [];
|
|
373
|
-
constructor(e =
|
|
389
|
+
constructor(e = ze) {
|
|
374
390
|
this.capacity = e;
|
|
375
391
|
}
|
|
376
392
|
append(e) {
|
|
377
393
|
this.buffer.push(e), this.buffer.length > this.capacity && this.buffer.shift();
|
|
378
394
|
}
|
|
379
395
|
query(e = {}) {
|
|
380
|
-
let t = e.since ?? 0, n = e.until ?? Date.now(), r = Math.min(e.max ??
|
|
396
|
+
let t = e.since ?? 0, n = e.until ?? Date.now(), r = Math.min(e.max ?? Be, this.capacity), i = e.traceId, a = e.minDurationMs, o = e.status, s = e.name?.toLowerCase(), c = [];
|
|
381
397
|
for (let e = this.buffer.length - 1; e >= 0 && c.length < r; e--) {
|
|
382
398
|
let r = this.buffer[e];
|
|
383
399
|
r.startMs < t || r.startMs > n || i !== void 0 && r.traceId !== i || a !== void 0 && r.durationMs < a || o !== void 0 && r.status !== o || s !== void 0 && !r.name.toLowerCase().includes(s) || c.push(r);
|
|
@@ -385,7 +401,7 @@ var R = [
|
|
|
385
401
|
return c.reverse();
|
|
386
402
|
}
|
|
387
403
|
queryGrouped(e = {}) {
|
|
388
|
-
let t = e.since ?? 0, n = e.maxTraces ??
|
|
404
|
+
let t = e.since ?? 0, n = e.maxTraces ?? Ve, r = e.onlyErrors ?? !1, i = /* @__PURE__ */ new Map();
|
|
389
405
|
for (let e of this.buffer) {
|
|
390
406
|
if (e.startMs < t) continue;
|
|
391
407
|
let n = i.get(e.traceId);
|
|
@@ -396,7 +412,7 @@ var R = [
|
|
|
396
412
|
t.sort((e, t) => e.startMs - t.startMs);
|
|
397
413
|
let n = t.some((e) => e.status === "error");
|
|
398
414
|
if (r && !n) continue;
|
|
399
|
-
let i = t[0].startMs, o = t.reduce((e, t) => t.endMs > e ? t.endMs : e, i), s = t.filter(
|
|
415
|
+
let i = t[0].startMs, o = t.reduce((e, t) => t.endMs > e ? t.endMs : e, i), s = t.filter(K), c = s.length > 0 || t.some(Re), l = s.reduce((e, t) => e === void 0 || t.startMs > e.startMs ? t : e, void 0);
|
|
400
416
|
a.push({
|
|
401
417
|
traceId: e,
|
|
402
418
|
rootName: t[0].name,
|
|
@@ -421,7 +437,7 @@ var R = [
|
|
|
421
437
|
clear() {
|
|
422
438
|
this.buffer = [];
|
|
423
439
|
}
|
|
424
|
-
},
|
|
440
|
+
}, Y = null, He = () => (Y === null && (Y = new J()), Y), Ue = /* @__PURE__ */ new Set([
|
|
425
441
|
"off",
|
|
426
442
|
"errors",
|
|
427
443
|
"interesting",
|
|
@@ -429,61 +445,61 @@ var R = [
|
|
|
429
445
|
]), X = (e, t, n, r) => {
|
|
430
446
|
let i = Number(e);
|
|
431
447
|
return Number.isFinite(i) ? Math.min(r, Math.max(n, i)) : t;
|
|
432
|
-
},
|
|
448
|
+
}, We = (e) => e !== void 0 && [
|
|
433
449
|
"1",
|
|
434
450
|
"true",
|
|
435
451
|
"yes",
|
|
436
452
|
"on"
|
|
437
|
-
].includes(e.toLowerCase()),
|
|
453
|
+
].includes(e.toLowerCase()), Ge = (e) => {
|
|
438
454
|
let t = Number(e);
|
|
439
455
|
return Number.isFinite(t) && t > 0 ? t : 24;
|
|
440
456
|
}, Z = (e = process.env) => {
|
|
441
457
|
let t = (e.VOLTRO_TRACING_BUFFER ?? "").toLowerCase() === "off", n = X(e.VOLTRO_TRACING_SAMPLE, 1, 0, 1), r = (e.VOLTRO_TRACING_PERSIST ?? "").toLowerCase(), i = e.NODE_ENV === "production" ? "off" : "interesting";
|
|
442
458
|
return {
|
|
443
|
-
mode:
|
|
459
|
+
mode: Ue.has(r) ? r : n <= 0 ? "off" : i,
|
|
444
460
|
sampleRate: n,
|
|
445
461
|
slowMs: X(e.VOLTRO_TRACING_SLOW_MS, 500, 0, 2 ** 53 - 1),
|
|
446
|
-
ttlHours:
|
|
447
|
-
persistDelivery:
|
|
462
|
+
ttlHours: Ge(e.VOLTRO_TRACING_TTL_HOURS),
|
|
463
|
+
persistDelivery: We(e.VOLTRO_TRACING_PERSIST_DELIVERY),
|
|
448
464
|
bufferDisabled: t
|
|
449
465
|
};
|
|
450
466
|
}, Q = (e = process.env) => {
|
|
451
467
|
let t = Z(e);
|
|
452
468
|
return !t.bufferDisabled && t.mode !== "off";
|
|
453
|
-
},
|
|
469
|
+
}, Ke = (e, t) => {
|
|
454
470
|
if (t >= 1) return !0;
|
|
455
471
|
if (t <= 0) return !1;
|
|
456
472
|
let n = 2166136261;
|
|
457
473
|
for (let t = 0; t < e.length; t++) n ^= e.charCodeAt(t), n = Math.imul(n, 16777619);
|
|
458
474
|
return (n >>> 0) % 1e3 < t * 1e3;
|
|
459
|
-
},
|
|
460
|
-
if (t.mode === "off" ||
|
|
475
|
+
}, qe = (e, t) => {
|
|
476
|
+
if (t.mode === "off" || q(e) || K(e) && !t.persistDelivery) return !1;
|
|
461
477
|
let n = e.status === "error";
|
|
462
478
|
if (t.mode === "errors") return n;
|
|
463
479
|
if (n) return !0;
|
|
464
|
-
if (!
|
|
480
|
+
if (!Ke(e.traceId, t.sampleRate)) return !1;
|
|
465
481
|
if (t.mode === "all") return !0;
|
|
466
482
|
let r = e.parentSpanId === null || e.parentSpanId === void 0 || e.parentSpanId === "", i = typeof e.durationMs == "number" && e.durationMs >= t.slowMs;
|
|
467
483
|
return r || i;
|
|
468
|
-
},
|
|
484
|
+
}, Je = (e) => {
|
|
469
485
|
if (e.bufferDisabled) return "durable traces: OFF (VOLTRO_TRACING_BUFFER=off)";
|
|
470
486
|
if (e.mode === "off") return "durable traces: OFF — _voltro_traces not created (prod default; set VOLTRO_TRACING_PERSIST=interesting to enable, or use OTLP)";
|
|
471
487
|
let t = e.mode === "interesting" ? ` (errors + slow≥${e.slowMs}ms + roots)` : e.mode === "errors" ? " (errors only)" : "";
|
|
472
488
|
return `durable traces: mode=${e.mode}${t}` + (e.sampleRate < 1 ? ` · sample=${e.sampleRate}` : "") + (e.persistDelivery ? " · +delivery" : "") + ` · ttl=${e.ttlHours}h`;
|
|
473
|
-
},
|
|
489
|
+
}, Ye = (e = 30 * 6e4) => {
|
|
474
490
|
let t = /* @__PURE__ */ new Map();
|
|
475
491
|
return (n, r) => {
|
|
476
492
|
let i = t.get(n);
|
|
477
493
|
return i !== void 0 && r - i < e ? !1 : (t.set(n, r), !0);
|
|
478
494
|
};
|
|
479
|
-
},
|
|
495
|
+
}, Xe = (e) => {
|
|
480
496
|
let { store: t, log: n } = e, r = e.policy ?? Z();
|
|
481
|
-
n.info(
|
|
482
|
-
let i =
|
|
497
|
+
n.info(Je(r));
|
|
498
|
+
let i = Ye(), a = [], o = () => {};
|
|
483
499
|
if (r.mode !== "off") {
|
|
484
500
|
let e = [], s = 0;
|
|
485
501
|
o = (t) => {
|
|
486
|
-
|
|
502
|
+
qe(t, r) && (e.length >= 5e3 && (e.shift(), s += 1, i("flush-drop", Date.now()) && (n.warn(`trace flush queue saturated — dropping durable spans (${s}+ since last warning). Durable inflow exceeds write throughput; reduce it with VOLTRO_TRACING_PERSIST=errors|interesting or VOLTRO_TRACING_SAMPLE<1.`), s = 0)), e.push(t));
|
|
487
503
|
};
|
|
488
504
|
let c = async () => {
|
|
489
505
|
if (e.length === 0) return;
|
|
@@ -525,7 +541,7 @@ var R = [
|
|
|
525
541
|
let n = await t.query({
|
|
526
542
|
table: "_voltro_traces",
|
|
527
543
|
order: [],
|
|
528
|
-
predicate:
|
|
544
|
+
predicate: M("startedAt", e),
|
|
529
545
|
projection: ["id"],
|
|
530
546
|
skip: void 0,
|
|
531
547
|
take: c
|
|
@@ -549,7 +565,7 @@ var R = [
|
|
|
549
565
|
for (let e of a) clearInterval(e);
|
|
550
566
|
}
|
|
551
567
|
};
|
|
552
|
-
},
|
|
568
|
+
}, Ze = async (e) => {
|
|
553
569
|
let o = !1, c = !1, l = !1, d = !1, f = !1, p = !1, m = async (e) => {
|
|
554
570
|
let h = await u.readdir(e, { withFileTypes: !0 }).catch(() => []);
|
|
555
571
|
for (let u of h) if (u.isDirectory()) {
|
|
@@ -557,7 +573,7 @@ var R = [
|
|
|
557
573
|
await m(s(e, u.name));
|
|
558
574
|
} else {
|
|
559
575
|
let e = u.name;
|
|
560
|
-
(
|
|
576
|
+
(r.test(e) || t.test(e)) && (o = !0), n.test(e) && (c = !0), i.test(e) && (l = !0), U.test(e) && (d = !0), a.test(e) && (f = !0), G.test(e) && (p = !0);
|
|
561
577
|
}
|
|
562
578
|
};
|
|
563
579
|
return await m(e), {
|
|
@@ -568,7 +584,7 @@ var R = [
|
|
|
568
584
|
outbox: f,
|
|
569
585
|
connections: p
|
|
570
586
|
};
|
|
571
|
-
},
|
|
587
|
+
}, Qe = async (e) => {
|
|
572
588
|
try {
|
|
573
589
|
return (await import(c(s(e, "app.config.ts")).href)).default?.plugins ?? [];
|
|
574
590
|
} catch {
|
|
@@ -585,15 +601,15 @@ var R = [
|
|
|
585
601
|
traces: Q(),
|
|
586
602
|
cdc: e.cdc,
|
|
587
603
|
...e.cdcDialect ? { cdcDialect: e.cdcDialect } : {},
|
|
588
|
-
undo:
|
|
604
|
+
undo: oe(),
|
|
589
605
|
outbox: e.mix.outbox,
|
|
590
606
|
connections: e.mix.connections
|
|
591
607
|
})) n(t);
|
|
592
|
-
e.mix.agents && (n(
|
|
593
|
-
for (let t of
|
|
608
|
+
e.mix.agents && (n(_), n(he), n(b), n(v)), e.mix.workflows && n(y);
|
|
609
|
+
for (let t of je(e.plugins)) n(t);
|
|
594
610
|
return [...t.values()];
|
|
595
|
-
},
|
|
596
|
-
let t = await
|
|
611
|
+
}, $e = async (e) => {
|
|
612
|
+
let t = await Ze(e.root), n = await Qe(e.root), r = (process.env.DB_DIALECT ?? "postgres").toLowerCase(), i = r === "mariadb" ? "mariadb" : r === "mssql" ? "mssql" : void 0;
|
|
597
613
|
return $({
|
|
598
614
|
mix: t,
|
|
599
615
|
plugins: n,
|
|
@@ -602,4 +618,4 @@ var R = [
|
|
|
602
618
|
});
|
|
603
619
|
};
|
|
604
620
|
//#endregion
|
|
605
|
-
export {
|
|
621
|
+
export { V as _, J as a, be as b, G as c, Me as d, W as f, Ae as g, ke as h, Q as i, Le as l, Ne as m, $ as n, He as o, Fe as p, Xe as r, q as s, $e as t, U as u, we as v, z as x, B as y };
|
package/dist/index.d.ts
CHANGED
|
@@ -52,8 +52,13 @@ export declare interface TemplateInfo extends TemplateManifest {
|
|
|
52
52
|
* - `api` — a long-running backend (app.config `type: 'api'`).
|
|
53
53
|
* - `web` — a frontend (app.config `type: 'web'`); gets a dev-server port.
|
|
54
54
|
* - `serverless` — a standalone `*.serverless.ts` function bundle deployed
|
|
55
|
-
* SEPARATELY via `voltro serverless` (no long-running server, no port).
|
|
56
|
-
|
|
55
|
+
* SEPARATELY via `voltro serverless` (no long-running server, no port).
|
|
56
|
+
* - `mobile` — an Expo (React Native) app. NOT run by `voltro dev` (Expo owns
|
|
57
|
+
* Metro / `expo start`); the scaffolder registers it in the workspace so the
|
|
58
|
+
* sibling api's typed rpc surface resolves, but allocates NO port and adds it
|
|
59
|
+
* to NO dev-orchestration set. `app.config.ts` is Expo's config, not
|
|
60
|
+
* Voltro's `type:` config. See `plans/open/mobile/01-template-and-expo-toolchain.md`. */
|
|
61
|
+
declare type TemplateKind = 'api' | 'web' | 'serverless' | 'mobile';
|
|
57
62
|
|
|
58
63
|
declare interface TemplateManifest {
|
|
59
64
|
/** Stable id matching the directory name. */
|
package/dist/index.js
CHANGED