fimo 0.7.0-experimental.3 → 0.7.0-experimental.4
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/README.md +2 -3
- package/assets/content-templates/hooks-template.eta +27 -73
- package/assets/content-templates/types-template.eta +1 -4
- package/assets/skills/fimo/SKILL.md +3 -3
- package/assets/skills/fimo/references/assets.md +2 -2
- package/assets/skills/fimo/references/content.md +43 -47
- package/assets/skills/fimo/references/design.md +1 -1
- package/assets/skills/fimo/references/locales.md +0 -8
- package/assets/skills/fimo/references/setup-react-router.md +2 -2
- package/assets/skills/fimo/references/ui.md +1 -1
- package/assets/skills/fimo-cli/SKILL.md +1 -1
- package/assets/skills/fimo-cli/references/assets.md +24 -7
- package/assets/skills/fimo-cli/references/content.md +16 -19
- package/assets/skills/fimo-cli/references/domains.md +1 -1
- package/assets/skills/fimo-cli/references/locales.md +0 -6
- package/assets/skills/fimo-cli/references/media.md +142 -132
- package/assets/skills/fimo-migration/SKILL.md +22 -2
- package/assets/skills/fimo-migration/references/content.md +8 -0
- package/assets/skills/fimo-migration/references/manifest.md +35 -0
- package/assets/skills/fimo-migration/references/qa.md +24 -2
- package/assets/skills/fimo-migration/references/workflow.md +12 -1
- package/assets/skills/fimo-migration/references/wrap.md +582 -0
- package/assets/skills/fimo-studio/references/custom-domains.md +1 -1
- package/assets/skills/fimo-studio/references/visual-editing.md +5 -3
- package/dist/build/vite/index.d.ts.map +1 -0
- package/dist/build/vite/plugins/content-sync.d.ts.map +1 -0
- package/dist/build/vite/plugins/content-sync.test.d.ts +2 -0
- package/dist/build/vite/plugins/content-sync.test.d.ts.map +1 -0
- package/dist/build/vite/plugins/content-sync.test.js +64 -0
- package/dist/build/vite/plugins/data-id.d.ts.map +1 -0
- package/dist/build/vite/plugins/fimo-config.d.ts.map +1 -0
- package/dist/build/vite/plugins/fimo-config.test.d.ts +2 -0
- package/dist/build/vite/plugins/fimo-config.test.d.ts.map +1 -0
- package/dist/build/vite/plugins/fimo-config.test.js +46 -0
- package/dist/build/vite/plugins/overlay.d.ts.map +1 -0
- package/dist/build/vite/plugins/robots.d.ts.map +1 -0
- package/dist/build/vite/plugins/seo.d.ts.map +1 -0
- package/dist/build/vite/plugins/server-config.d.ts.map +1 -0
- package/dist/build/vite/plugins/sitemap.d.ts.map +1 -0
- package/dist/build/vite/plugins/translations.d.ts +2 -8
- package/dist/build/vite/plugins/translations.d.ts.map +1 -0
- package/dist/build/vite/plugins/translations.js +3 -121
- package/dist/build/vite/plugins/translations.test.d.ts +2 -0
- package/dist/build/vite/plugins/translations.test.d.ts.map +1 -0
- package/dist/build/vite/plugins/translations.test.js +266 -0
- package/dist/cli/bundle.json +2 -3
- package/dist/cli/index.js +117939 -1186
- package/dist/runtime/app/FimoProviders.d.ts +1 -11
- package/dist/runtime/app/FimoProviders.d.ts.map +1 -0
- package/dist/runtime/app/FimoProviders.js +2 -23
- package/dist/runtime/app/FimoScripts.d.ts.map +1 -0
- package/dist/runtime/app/index.d.ts.map +1 -0
- package/dist/runtime/app/prefetch.d.ts.map +1 -0
- package/dist/runtime/astro/index.d.ts +2 -0
- package/dist/runtime/astro/index.d.ts.map +1 -0
- package/dist/runtime/astro/index.js +3 -0
- package/dist/runtime/astro/server.d.ts +3 -0
- package/dist/runtime/astro/server.d.ts.map +1 -0
- package/dist/runtime/astro/server.js +6 -0
- package/dist/runtime/content/DataSourcesProvider.d.ts.map +1 -0
- package/dist/runtime/content/RefreshContentProvider.d.ts.map +1 -0
- package/dist/runtime/content/RefreshContentProvider.test.d.ts +2 -0
- package/dist/runtime/content/RefreshContentProvider.test.d.ts.map +1 -0
- package/dist/runtime/content/RefreshContentProvider.test.js +33 -0
- package/dist/runtime/content/parseCollectionResponse.d.ts.map +1 -0
- package/dist/runtime/content/parseCollectionResponse.test.d.ts +2 -0
- package/dist/runtime/content/parseCollectionResponse.test.d.ts.map +1 -0
- package/dist/runtime/content/parseCollectionResponse.test.js +20 -0
- package/dist/runtime/content/utils/retrieve-data-sources.d.ts +0 -1
- package/dist/runtime/content/utils/retrieve-data-sources.d.ts.map +1 -0
- package/dist/runtime/content/utils/retrieve-data-sources.js +4 -27
- package/dist/runtime/core/AppErrorBoundary.d.ts.map +1 -0
- package/dist/runtime/core/ViteLifecycles.d.ts.map +1 -0
- package/dist/runtime/i18n/FimoLocaleContext.d.ts.map +1 -0
- package/dist/runtime/i18n/FimoLocaleContext.js +1 -0
- package/dist/runtime/i18n/locale.d.ts.map +1 -0
- package/dist/runtime/i18n/locale.test.d.ts +2 -0
- package/dist/runtime/i18n/locale.test.d.ts.map +1 -0
- package/dist/runtime/i18n/locale.test.js +58 -0
- package/dist/runtime/iframe/ConsoleErrorProvider.d.ts.map +1 -0
- package/dist/runtime/iframe/ScreenshotProvider.d.ts.map +1 -0
- package/dist/runtime/iframe/runtime/overlay-hmr.d.ts.map +1 -0
- package/dist/runtime/iframe/runtime/overlay-hmr.js +0 -3
- package/dist/runtime/iframe/runtime/overlay-runtime.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +0 -3
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +0 -2
- package/dist/runtime/next/FimoNextProviders.d.ts +24 -0
- package/dist/runtime/next/FimoNextProviders.d.ts.map +1 -0
- package/dist/runtime/next/FimoNextProviders.js +20 -0
- package/dist/runtime/next/FimoNextScripts.d.ts +10 -0
- package/dist/runtime/next/FimoNextScripts.d.ts.map +1 -0
- package/dist/runtime/next/FimoNextScripts.js +19 -0
- package/dist/runtime/next/index.d.ts +14 -0
- package/dist/runtime/next/index.d.ts.map +1 -0
- package/dist/runtime/next/index.js +14 -0
- package/dist/runtime/next/server.d.ts +2 -0
- package/dist/runtime/next/server.d.ts.map +1 -0
- package/dist/runtime/next/server.js +4 -0
- package/dist/runtime/nuxt/composables.d.ts +9 -0
- package/dist/runtime/nuxt/composables.d.ts.map +1 -0
- package/dist/runtime/nuxt/composables.js +57 -0
- package/dist/runtime/nuxt/index.d.ts +3 -0
- package/dist/runtime/nuxt/index.d.ts.map +1 -0
- package/dist/runtime/nuxt/index.js +6 -0
- package/dist/runtime/nuxt/server.d.ts +3 -0
- package/dist/runtime/nuxt/server.d.ts.map +1 -0
- package/dist/runtime/nuxt/server.js +6 -0
- package/dist/runtime/paths/get-fimo-paths.d.ts.map +1 -0
- package/dist/runtime/paths/get-fimo-paths.js +5 -15
- package/dist/runtime/paths/index.d.ts.map +1 -0
- package/dist/runtime/paths/types.d.ts.map +1 -0
- package/dist/runtime/primitives/components/Boolean.d.ts.map +1 -0
- package/dist/runtime/primitives/components/Date.d.ts.map +1 -0
- package/dist/runtime/primitives/components/Image.d.ts.map +1 -0
- package/dist/runtime/primitives/components/RichText.d.ts.map +1 -0
- package/dist/runtime/primitives/components/StaticImage.d.ts.map +1 -0
- package/dist/runtime/primitives/components/Text.d.ts.map +1 -0
- package/dist/runtime/primitives/components/Video.d.ts.map +1 -0
- package/dist/runtime/primitives/components/index.d.ts.map +1 -0
- package/dist/runtime/primitives/index.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-hook.d.ts +33 -0
- package/dist/runtime/primitives/labels-hook.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-hook.js +41 -0
- package/dist/runtime/primitives/labels-store.d.ts +12 -0
- package/dist/runtime/primitives/labels-store.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-store.js +60 -0
- package/dist/runtime/primitives/labels-store.test.d.ts +2 -0
- package/dist/runtime/primitives/labels-store.test.d.ts.map +1 -0
- package/dist/runtime/primitives/labels-store.test.js +66 -0
- package/dist/runtime/primitives/lib/image-optimization.d.ts.map +1 -0
- package/dist/runtime/primitives/lib/index.d.ts.map +1 -0
- package/dist/runtime/primitives/lib/primitives.d.ts +2 -2
- package/dist/runtime/primitives/lib/primitives.d.ts.map +1 -0
- package/dist/runtime/primitives/lib/query.d.ts +3 -5
- package/dist/runtime/primitives/lib/query.d.ts.map +1 -0
- package/dist/runtime/primitives/lib/template.d.ts.map +1 -0
- package/dist/runtime/primitives/lib/useFimoLiveValue.d.ts +5 -3
- package/dist/runtime/primitives/lib/useFimoLiveValue.d.ts.map +1 -0
- package/dist/runtime/primitives/lib/useFimoLiveValue.js +11 -4
- package/dist/runtime/primitives/public-surface.test.d.ts +2 -0
- package/dist/runtime/primitives/public-surface.test.d.ts.map +1 -0
- package/dist/runtime/primitives/public-surface.test.js +45 -0
- package/dist/runtime/primitives/translations.d.ts +1 -27
- package/dist/runtime/primitives/translations.d.ts.map +1 -0
- package/dist/runtime/primitives/translations.js +7 -85
- package/dist/runtime/react/FimoSpaProviders.d.ts +36 -0
- package/dist/runtime/react/FimoSpaProviders.d.ts.map +1 -0
- package/dist/runtime/react/FimoSpaProviders.js +63 -0
- package/dist/runtime/react/index.d.ts +33 -0
- package/dist/runtime/react/index.d.ts.map +1 -0
- package/dist/runtime/react/index.js +39 -0
- package/dist/runtime/react-router/index.d.ts.map +1 -0
- package/dist/runtime/react-router/navigation-utils.d.ts.map +1 -0
- package/dist/runtime/react-router/navigation.d.ts.map +1 -0
- package/dist/runtime/react-router/navigation.test.d.ts +2 -0
- package/dist/runtime/react-router/navigation.test.d.ts.map +1 -0
- package/dist/runtime/react-router/navigation.test.js +35 -0
- package/dist/runtime/react-router/routes.d.ts.map +1 -0
- package/dist/runtime/react-router/routes.test.d.ts +2 -0
- package/dist/runtime/react-router/routes.test.d.ts.map +1 -0
- package/dist/runtime/react-router/routes.test.js +67 -0
- package/dist/runtime/remix/FimoRemixProviders.d.ts +16 -0
- package/dist/runtime/remix/FimoRemixProviders.d.ts.map +1 -0
- package/dist/runtime/remix/FimoRemixProviders.js +12 -0
- package/dist/runtime/remix/FimoRemixScripts.d.ts +10 -0
- package/dist/runtime/remix/FimoRemixScripts.d.ts.map +1 -0
- package/dist/runtime/remix/FimoRemixScripts.js +19 -0
- package/dist/runtime/remix/index.d.ts +12 -0
- package/dist/runtime/remix/index.d.ts.map +1 -0
- package/dist/runtime/remix/index.js +11 -0
- package/dist/runtime/remix/server.d.ts +2 -0
- package/dist/runtime/remix/server.d.ts.map +1 -0
- package/dist/runtime/remix/server.js +2 -0
- package/dist/runtime/routing/AppResetScrollOnNavigate.d.ts.map +1 -0
- package/dist/runtime/routing/AppRoutesProvider.d.ts.map +1 -0
- package/dist/runtime/seo/buildSeoForPath.d.ts +3 -1
- package/dist/runtime/seo/buildSeoForPath.d.ts.map +1 -0
- package/dist/runtime/seo/buildSeoForPath.js +1 -4
- package/dist/runtime/seo/htmlProps.d.ts.map +1 -0
- package/dist/runtime/seo/index.d.ts.map +1 -0
- package/dist/runtime/seo/resolver.d.ts.map +1 -0
- package/dist/runtime/shared/display-routes.d.ts +14 -0
- package/dist/runtime/shared/display-routes.d.ts.map +1 -0
- package/dist/runtime/shared/display-routes.js +25 -0
- package/dist/runtime/shared/fimo-config.server.d.ts.map +1 -0
- package/dist/runtime/shared/fimo-config.server.js +1 -0
- package/dist/runtime/shared/fimo-config.types.d.ts +2 -0
- package/dist/runtime/shared/fimo-config.types.d.ts.map +1 -0
- package/dist/runtime/shared/i18n-messages.d.ts +29 -0
- package/dist/runtime/shared/i18n-messages.d.ts.map +1 -0
- package/dist/runtime/shared/i18n-messages.js +79 -0
- package/dist/runtime/shared/i18n-messages.test.d.ts +2 -0
- package/dist/runtime/shared/i18n-messages.test.d.ts.map +1 -0
- package/dist/runtime/shared/i18n-messages.test.js +39 -0
- package/dist/runtime/shared/labels-fetch.pure.d.ts +17 -0
- package/dist/runtime/shared/labels-fetch.pure.d.ts.map +1 -0
- package/dist/runtime/shared/labels-fetch.pure.js +71 -0
- package/dist/runtime/shared/labels-fetch.server.d.ts +7 -0
- package/dist/runtime/shared/labels-fetch.server.d.ts.map +1 -0
- package/dist/runtime/shared/labels-fetch.server.js +97 -0
- package/dist/runtime/shared/labels-t.pure.d.ts +2 -0
- package/dist/runtime/shared/labels-t.pure.d.ts.map +1 -0
- package/dist/runtime/shared/labels-t.pure.js +10 -0
- package/dist/runtime/svelte/index.d.ts +3 -0
- package/dist/runtime/svelte/index.d.ts.map +1 -0
- package/dist/runtime/svelte/index.js +7 -0
- package/dist/runtime/svelte/server.d.ts +3 -0
- package/dist/runtime/svelte/server.d.ts.map +1 -0
- package/dist/runtime/svelte/server.js +6 -0
- package/dist/runtime/t/OptionalTracking.d.ts.map +1 -0
- package/dist/runtime/t/OptionalTracking.test.d.ts +2 -0
- package/dist/runtime/t/OptionalTracking.test.d.ts.map +1 -0
- package/dist/runtime/t/OptionalTracking.test.js +11 -0
- package/dist/runtime/t/Pageview.d.ts.map +1 -0
- package/dist/runtime/templates.d.ts.map +1 -0
- package/dist/runtime/vue/index.d.ts +3 -0
- package/dist/runtime/vue/index.d.ts.map +1 -0
- package/dist/runtime/vue/index.js +5 -0
- package/dist/runtime/vue/server.d.ts +3 -0
- package/dist/runtime/vue/server.d.ts.map +1 -0
- package/dist/runtime/vue/server.js +6 -0
- package/dist/runtime/wrapped/FimoFileLink.d.ts +17 -0
- package/dist/runtime/wrapped/FimoFileLink.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoFileLink.js +19 -0
- package/dist/runtime/wrapped/FimoMediaImage.d.ts +14 -0
- package/dist/runtime/wrapped/FimoMediaImage.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoMediaImage.js +20 -0
- package/dist/runtime/wrapped/FimoMediaVideo.d.ts +14 -0
- package/dist/runtime/wrapped/FimoMediaVideo.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoMediaVideo.js +20 -0
- package/dist/runtime/wrapped/FimoRichTextBlock.d.ts +23 -0
- package/dist/runtime/wrapped/FimoRichTextBlock.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoRichTextBlock.js +22 -0
- package/dist/runtime/wrapped/FimoText.d.ts +22 -0
- package/dist/runtime/wrapped/FimoText.d.ts.map +1 -0
- package/dist/runtime/wrapped/FimoText.js +20 -0
- package/dist/runtime/wrapped/WrappedContentContext.d.ts +28 -0
- package/dist/runtime/wrapped/WrappedContentContext.d.ts.map +1 -0
- package/dist/runtime/wrapped/WrappedContentContext.js +30 -0
- package/dist/runtime/wrapped/WrappedProviders.d.ts +33 -0
- package/dist/runtime/wrapped/WrappedProviders.d.ts.map +1 -0
- package/dist/runtime/wrapped/WrappedProviders.js +101 -0
- package/dist/runtime/wrapped/dom.d.ts +4 -0
- package/dist/runtime/wrapped/dom.d.ts.map +1 -0
- package/dist/runtime/wrapped/dom.js +23 -0
- package/dist/runtime/wrapped/dom.test.d.ts +2 -0
- package/dist/runtime/wrapped/dom.test.d.ts.map +1 -0
- package/dist/runtime/wrapped/dom.test.js +16 -0
- package/dist/runtime/wrapped/server.d.ts +77 -0
- package/dist/runtime/wrapped/server.d.ts.map +1 -0
- package/dist/runtime/wrapped/server.js +237 -0
- package/dist/runtime/wrapped/server.test.d.ts +2 -0
- package/dist/runtime/wrapped/server.test.d.ts.map +1 -0
- package/dist/runtime/wrapped/server.test.js +91 -0
- package/dist/scripts/apply-wrap-templates.d.ts +61 -0
- package/dist/scripts/apply-wrap-templates.js +132 -0
- package/dist/scripts/apply-wrap-templates.test.js +199 -0
- package/dist/scripts/apply-wrap.d.ts +46 -0
- package/dist/scripts/apply-wrap.js +278 -0
- package/dist/scripts/apply-wrap.test.d.ts +1 -0
- package/dist/scripts/apply-wrap.test.js +226 -0
- package/dist/scripts/cms/discover.d.ts +2 -0
- package/dist/scripts/cms/discover.js +17 -0
- package/dist/scripts/cms/example-content.d.ts +32 -0
- package/dist/scripts/cms/example-content.js +87 -0
- package/dist/scripts/cms/example-content.test.d.ts +1 -0
- package/dist/scripts/cms/example-content.test.js +57 -0
- package/dist/scripts/cms/strapi/detect.d.ts +2 -0
- package/dist/scripts/cms/strapi/detect.js +185 -0
- package/dist/scripts/cms/strapi/detect.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/detect.test.js +56 -0
- package/dist/scripts/cms/strapi/index.d.ts +3 -0
- package/dist/scripts/cms/strapi/index.js +15 -0
- package/dist/scripts/cms/strapi/list-source.d.ts +17 -0
- package/dist/scripts/cms/strapi/list-source.js +90 -0
- package/dist/scripts/cms/strapi/list-source.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/list-source.test.js +33 -0
- package/dist/scripts/cms/strapi/schema-map.d.ts +9 -0
- package/dist/scripts/cms/strapi/schema-map.js +138 -0
- package/dist/scripts/cms/strapi/schema-map.test.d.ts +1 -0
- package/dist/scripts/cms/strapi/schema-map.test.js +87 -0
- package/dist/scripts/cms/types.d.ts +76 -0
- package/dist/scripts/cms/types.js +11 -0
- package/dist/scripts/detect-framework.d.ts +39 -0
- package/dist/scripts/detect-framework.js +133 -0
- package/dist/scripts/detect-framework.test.d.ts +1 -0
- package/dist/scripts/detect-framework.test.js +122 -0
- package/dist/scripts/draft-rows.d.ts +19 -0
- package/dist/scripts/draft-rows.js +135 -0
- package/dist/scripts/draft-rows.test.d.ts +1 -0
- package/dist/scripts/draft-rows.test.js +113 -0
- package/dist/scripts/draft-schemas.d.ts +27 -0
- package/dist/scripts/draft-schemas.js +188 -0
- package/dist/scripts/draft-schemas.test.d.ts +1 -0
- package/dist/scripts/draft-schemas.test.js +152 -0
- package/dist/scripts/frameworks/astro/routes.d.ts +3 -0
- package/dist/scripts/frameworks/astro/routes.js +55 -0
- package/dist/scripts/frameworks/astro/template-style.d.ts +7 -0
- package/dist/scripts/frameworks/astro/template-style.js +19 -0
- package/dist/scripts/frameworks/discover.d.ts +70 -0
- package/dist/scripts/frameworks/discover.js +171 -0
- package/dist/scripts/frameworks/next/rewire.d.ts +30 -0
- package/dist/scripts/frameworks/next/rewire.js +258 -0
- package/dist/scripts/frameworks/next/rewire.test.d.ts +1 -0
- package/dist/scripts/frameworks/next/rewire.test.js +134 -0
- package/dist/scripts/frameworks/next/routes.d.ts +17 -0
- package/dist/scripts/frameworks/next/routes.js +134 -0
- package/dist/scripts/frameworks/next/routes.test.d.ts +1 -0
- package/dist/scripts/frameworks/next/routes.test.js +64 -0
- package/dist/scripts/frameworks/next/wiring.d.ts +26 -0
- package/dist/scripts/frameworks/next/wiring.js +163 -0
- package/dist/scripts/frameworks/next/wiring.test.d.ts +1 -0
- package/dist/scripts/frameworks/next/wiring.test.js +146 -0
- package/dist/scripts/frameworks/nuxt/routes.d.ts +3 -0
- package/dist/scripts/frameworks/nuxt/routes.js +54 -0
- package/dist/scripts/frameworks/nuxt/template-style.d.ts +9 -0
- package/dist/scripts/frameworks/nuxt/template-style.js +27 -0
- package/dist/scripts/frameworks/remix/routes.d.ts +3 -0
- package/dist/scripts/frameworks/remix/routes.js +50 -0
- package/dist/scripts/frameworks/sveltekit/routes.d.ts +3 -0
- package/dist/scripts/frameworks/sveltekit/routes.js +50 -0
- package/dist/scripts/frameworks/sveltekit/template-style.d.ts +9 -0
- package/dist/scripts/frameworks/sveltekit/template-style.js +54 -0
- package/dist/scripts/frameworks/vite/routes.d.ts +15 -0
- package/dist/scripts/frameworks/vite/routes.js +93 -0
- package/dist/scripts/frameworks/vite/routes.test.d.ts +1 -0
- package/dist/scripts/frameworks/vite/routes.test.js +73 -0
- package/dist/scripts/frameworks/vite/wiring.d.ts +10 -0
- package/dist/scripts/frameworks/vite/wiring.js +99 -0
- package/dist/scripts/frameworks/vite/wiring.test.d.ts +1 -0
- package/dist/scripts/frameworks/vite/wiring.test.js +88 -0
- package/dist/scripts/generated-types.test.d.ts +1 -0
- package/dist/scripts/generated-types.test.js +212 -0
- package/dist/scripts/lib/validation-report.d.ts +1 -0
- package/dist/scripts/lib/validation-report.js +3 -0
- package/dist/scripts/lint-translation-keys.test.d.ts +1 -0
- package/dist/scripts/lint-translation-keys.test.js +16 -0
- package/dist/scripts/render-parity/capture.d.ts +56 -0
- package/dist/scripts/render-parity/capture.js +366 -0
- package/dist/scripts/render-parity/capture.test.d.ts +1 -0
- package/dist/scripts/render-parity/capture.test.js +306 -0
- package/dist/scripts/render-parity/compare.d.ts +59 -0
- package/dist/scripts/render-parity/compare.js +0 -0
- package/dist/scripts/render-parity/compare.test.d.ts +1 -0
- package/dist/scripts/render-parity/compare.test.js +98 -0
- package/dist/scripts/render-parity/normalize-html.d.ts +13 -0
- package/dist/scripts/render-parity/normalize-html.js +223 -0
- package/dist/scripts/render-parity/normalize-html.test.d.ts +1 -0
- package/dist/scripts/render-parity/normalize-html.test.js +58 -0
- package/dist/scripts/render-parity/types.d.ts +41 -0
- package/dist/scripts/render-parity/types.js +1 -0
- package/dist/scripts/resolve-routes.js +1 -1
- package/dist/scripts/scan-wrappable.d.ts +196 -0
- package/dist/scripts/scan-wrappable.js +1221 -0
- package/dist/scripts/scan-wrappable.test.d.ts +1 -0
- package/dist/scripts/scan-wrappable.test.js +502 -0
- package/dist/scripts/sync-schemas.test.d.ts +1 -0
- package/dist/scripts/sync-schemas.test.js +124 -0
- package/dist/scripts/validate-route-metadata.js +11 -0
- package/dist/scripts/validate-route-metadata.test.d.ts +1 -0
- package/dist/scripts/validate-route-metadata.test.js +116 -0
- package/dist/scripts/validate-schemas.test.d.ts +1 -0
- package/dist/scripts/validate-schemas.test.js +263 -0
- package/package.json +85 -20
- package/scripts/add-ext.mjs +47 -0
- package/scripts/bump-version.mjs +58 -0
- package/scripts/bundle-cli.mjs +123 -0
- package/scripts/install-cli.mjs +36 -0
- package/scripts/lib/channels.mjs +70 -0
- package/scripts/lib/dev-release-state.mjs +44 -0
- package/scripts/lib/dev-release-state.test.ts +36 -0
- package/scripts/lib/postinstall-onboarding.test.ts +82 -0
- package/scripts/lib/release-core.mjs +225 -0
- package/scripts/lib/release-core.test.ts +147 -0
- package/scripts/migration-qa-gate.test.ts +155 -0
- package/scripts/publish-npm.mjs +180 -0
- package/templates/react-router/package.json +7 -10
- package/templates/react-router/src/pages/Index.tsx +1 -1
- package/dist/runtime/content/client/createContentClient.d.ts +0 -5
- package/dist/runtime/content/client/createContentClient.js +0 -300
- package/dist/runtime/content/client/createSingletonClient.d.ts +0 -5
- package/dist/runtime/content/client/createSingletonClient.js +0 -108
- package/dist/runtime/content/client/internal.d.ts +0 -44
- package/dist/runtime/content/client/internal.js +0 -236
- package/dist/runtime/content/client/types.d.ts +0 -136
- package/dist/runtime/content/client/useQueryLocale.d.ts +0 -2
- package/dist/runtime/content/client/useQueryLocale.js +0 -6
- /package/dist/{runtime/content/client/types.js → scripts/apply-wrap-templates.test.d.ts} +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> **Run via `npx fimo@latest <command>`** — always the latest CLI, no install needed.
|
|
4
4
|
|
|
5
5
|
> For how to plug returned media into UI components (`FimoMedia` shape, `<Image>` integration), see **`fimo/references/assets.md`** and **`fimo/references/ui.md`**.
|
|
6
|
-
> For **generating** new images / videos with AI, see **`references/media.md`**
|
|
6
|
+
> For **generating** new images / videos with AI, see **`references/media.md`** — the `fimo generate <model>` surface is documented there.
|
|
7
7
|
|
|
8
8
|
This file covers the **CLI workflow** for media that already exists: uploading files, browsing the library, opening an asset to inspect it, moving / deleting items.
|
|
9
9
|
|
|
@@ -39,15 +39,15 @@ Use `--folder-path` when an agent needs a non-interactive upload target and does
|
|
|
39
39
|
|
|
40
40
|
## Generate AI media
|
|
41
41
|
|
|
42
|
-
Moved to **`references/media.md`**.
|
|
42
|
+
Moved to **`references/media.md`**. The generation surface is one verb:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
fimo
|
|
46
|
-
fimo image edit --prompt "<instruction>" --images <asset-id-or-url>
|
|
47
|
-
fimo video generate --prompt "<prompt>"
|
|
45
|
+
fimo generate <model-id-or-shortname> [--flag value ...]
|
|
48
46
|
```
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
Per-model flags come from the API. `fimo models list` lists models;
|
|
49
|
+
`fimo generate <model> --help` lists that model's flags. See `media.md` for
|
|
50
|
+
the recipes block and the default-pick table.
|
|
51
51
|
|
|
52
52
|
### When to prefer generation over uploads / placeholders
|
|
53
53
|
|
|
@@ -59,6 +59,23 @@ Task flags come from the API. Run `fimo <namespace> <task> --help` for the curre
|
|
|
59
59
|
- The user has already uploaded or referenced a specific file.
|
|
60
60
|
- The image must be a real photo of a real thing (team photos, real product shots).
|
|
61
61
|
|
|
62
|
+
## Browse models — `fimo models`
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
fimo models list # all, grouped by modality
|
|
66
|
+
fimo models list --modality image # filter by modality
|
|
67
|
+
fimo models list --tag draft --tag fast # filter by tag (repeatable, AND)
|
|
68
|
+
fimo models list --provider pruna # filter by provider
|
|
69
|
+
fimo models list --json # machine-readable
|
|
70
|
+
fimo models show pruna/p-image # full detail + per-flag schema
|
|
71
|
+
fimo models show gpt-image-2 --json # JSON dump (for agents)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Model selection is **not** persisted per project. Picks live in
|
|
75
|
+
`media.md` (baseline) → `CLAUDE.md` / `AGENTS.md` (project policy) → the
|
|
76
|
+
prompt itself (highest priority). To target a specific model, name it on the
|
|
77
|
+
command: `fimo generate <model> …`.
|
|
78
|
+
|
|
62
79
|
## Browse the library — `fimo assets list`
|
|
63
80
|
|
|
64
81
|
```bash
|
|
@@ -127,6 +144,6 @@ fimo assets delete <asset-id>
|
|
|
127
144
|
|
|
128
145
|
## End-to-end workflow
|
|
129
146
|
|
|
130
|
-
1. Upload
|
|
147
|
+
1. Upload (`fimo assets upload`) OR generate (`fimo generate <model> ...`) the asset.
|
|
131
148
|
2. Keep the returned `url` (for direct use) or `id` (to attach to a `media` content-type field).
|
|
132
149
|
3. To use in JSX, see `fimo/references/ui.md` — schema media → `<Image>` / `<Video>`, hardcoded URLs → `<StaticImage>`. **Never** use raw `<img src={asset.url}>`.
|
|
@@ -11,7 +11,7 @@ This file covers the **CLI workflow** for content. Use it when the user wants to
|
|
|
11
11
|
1. Write `src/schemas/{Uid}.json` — PascalCase filename (e.g. `BlogPost.json`). For the JSON shape and field types, load `fimo/references/content.md`.
|
|
12
12
|
2. Run `fimo schemas push {Uid}`. It generates `src/schemas/{Uid}.types.ts` and `src/schemas/{Uid}.ts`, then registers the schema with Fimo. It does not run whole-project validation.
|
|
13
13
|
3. App code imports the generated client from `@/schemas/{Uid}`, not from `.types.ts` directly. See `fimo/references/content.md` for the hook API.
|
|
14
|
-
4. Seed entries via `fimo entries create`. Generate cover images first with `fimo
|
|
14
|
+
4. Seed entries via `fimo entries create`. Generate cover images first with `fimo generate <model>` if needed (see `media.md` / `assets.md`).
|
|
15
15
|
5. Write React pages that import from `@/schemas/{Uid}` and render with `fimo/ui` components.
|
|
16
16
|
|
|
17
17
|
Steps 1, 3, and 5 reference the project skill (`fimo`) for shape and React API. Steps 2 and 4 are CLI commands documented here.
|
|
@@ -20,9 +20,6 @@ Steps 1, 3, and 5 reference the project skill (`fimo`) for shape and React API.
|
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
fimo schemas push [TypeName] # push JSON to API (create or update). Omit TypeName to push all.
|
|
23
|
-
# Pushing all sends every schema as ONE atomic batch, so types that
|
|
24
|
-
# reference each other (even cycles) can be added in a single push.
|
|
25
|
-
# Files not present are never deleted — use `schemas delete` for that.
|
|
26
23
|
fimo schemas list # list all registered schemas
|
|
27
24
|
fimo schemas get <TypeName> # get a single schema
|
|
28
25
|
fimo schemas delete <TypeName> # delete a schema
|
|
@@ -32,7 +29,7 @@ The command is `fimo schemas` (plural). There is no singular `fimo schema` alias
|
|
|
32
29
|
|
|
33
30
|
All commands accept `-C, --cwd <dir>` to point at a different project directory.
|
|
34
31
|
|
|
35
|
-
Schema transitions are automatic. Adding fields and changing labels preserve content. Removing a field removes only that field's values. One-to-many reference changes wrap existing references in arrays. Field type changes, scalar/reference changes, reference target changes, and many-to-one changes clear only the changed field. Collection-to-singleton removes that type's entries and cleans inbound references; singleton-to-collection preserves its
|
|
32
|
+
Schema transitions are automatic. Adding fields and changing labels preserve content. Removing a field removes only that field's stored values. One-to-many reference changes wrap existing references in arrays. Field type changes, scalar/reference changes, reference target changes, and many-to-one changes clear only the changed field. Collection-to-singleton removes that type's entries and cleans inbound references; singleton-to-collection preserves its row. There are no reset or data-loss flags: changing the schema is the migration request. Run `fimo validate` after pushing to verify the regenerated client and whole project.
|
|
36
33
|
|
|
37
34
|
## Entries CLI commands
|
|
38
35
|
|
|
@@ -43,9 +40,9 @@ fimo entries create <TypeName> --body '<json>'
|
|
|
43
40
|
fimo entries create <TypeName> --locale es --document-id <documentId> --body '<json>'
|
|
44
41
|
fimo entries list <TypeName> [--limit N] [--offset N] [--search Q] [--where JSON] [--sort F] [--fields FIELDS] [--populate FIELDS]
|
|
45
42
|
fimo entries list <TypeName> --locale es
|
|
46
|
-
fimo entries get <TypeName> <id>
|
|
47
|
-
fimo entries update <TypeName> <id>
|
|
48
|
-
fimo entries delete <TypeName> <id>
|
|
43
|
+
fimo entries get <TypeName> <id>
|
|
44
|
+
fimo entries update <TypeName> <id> --locale es --body '<json>'
|
|
45
|
+
fimo entries delete <TypeName> <id>
|
|
49
46
|
```
|
|
50
47
|
|
|
51
48
|
`--body` is a **required** option on `create` and `update`. Its JSON shape (where `slug` goes, how `media` fields look, Tiptap richtext format) lives in `fimo/references/content.md`. **Always read that first before constructing an entry payload — slug must be inside `data`, media has a specific shape, richtext must be Tiptap JSONContent.**
|
|
@@ -65,12 +62,12 @@ fimo entries list BlogPost --fields slug,title,author --populate author
|
|
|
65
62
|
Use the canonical read query flags: `--search`, `--sort`, `--where`, `--limit`, `--offset`, `--fields`, and `--populate`.
|
|
66
63
|
`--where` is a JSON object keyed by schema field name. Simple values mean equality and stay typed inside the JSON (`{"featured":true}`, `{"category":"react"}`, `{"rank":{"$gte":3}}`); operator objects support `$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin`, `$contains`, `$startsWith`, and `$null`, subject to the field type. Public Fimo-owned metadata lives under `__fimo`; currently `__fimo.contentType` is filterable.
|
|
67
64
|
|
|
68
|
-
Reference filters take the target `
|
|
69
|
-
`--fields` is a comma-separated projection for list payloads. The API always keeps `id
|
|
65
|
+
Reference filters take the target `documentId` string even though stored values are objects (`{"author":"750e..."}`). On a to-many field, `$eq` and `$contains` mean membership, `$in` means any listed document is present, `$ne` and `$nin` mean none are present, and `$null: true` means empty or missing. Reference fields cannot be sorted; use `--sort field` / `--sort -field` on scalar fields.
|
|
66
|
+
`--fields` is a comma-separated projection for list payloads. The API always keeps `id`; pass only the fields your view needs, such as `slug,title,excerpt,coverImage`.
|
|
70
67
|
|
|
71
|
-
`--populate` is a comma-separated list of reference fields to embed. Without it, reference fields return reference objects like `{ "
|
|
68
|
+
`--populate` is a comma-separated list of reference fields to embed. Without it, reference fields return reference objects like `{ "documentId": "..." }`; with `--populate author,contributors`, those fields return the target entry objects for the requested locale. Only reference fields can be populated (scalar fields 400), and populate never selects which target fields come back. A populated target missing in the requested locale resolves to null unless you pass `localeFallbacks=true`, which falls back to the best available locale variant, marked by its `locale` field. Limits: 200 references per to-many write, 500 distinct populated documents per field per request (400 past either).
|
|
72
69
|
|
|
73
|
-
Polymorphic references declare `targets: ["Post", "Product"]` instead of `target` (never both) and their values carry both parts: `{ "contentType": "Post", "
|
|
70
|
+
Polymorphic references declare `targets: ["Post", "Product"]` instead of `target` (never both) and their values carry both parts: `{ "contentType": "Post", "documentId": "..." }`. Populate returns mixed full entries, and generated hooks expose `$type` on each populated value to branch on. `--where` on polymorphic fields is not supported yet and fails with a clear error.
|
|
74
71
|
|
|
75
72
|
In generated React code, the equivalent is `populate: ['author', 'contributors'] as const` in the schema hook/query params. Let hooks infer the result when possible; if a named TypeScript shape is needed, use the generated `BlogPostResult<TFields, TPopulate>` type documented in `fimo/references/content.md`. Writes use the separate generated `BlogPostInput` type.
|
|
76
73
|
|
|
@@ -85,30 +82,30 @@ For reference schema JSON and entry value shape, load `fimo/references/content.m
|
|
|
85
82
|
}
|
|
86
83
|
```
|
|
87
84
|
|
|
88
|
-
Entry bodies
|
|
85
|
+
Entry bodies store reference objects with target `documentId` values:
|
|
89
86
|
|
|
90
87
|
```bash
|
|
91
|
-
fimo entries create BlogPost --body '{"data":{"slug":"hello","title":"Hello","author":{"
|
|
88
|
+
fimo entries create BlogPost --body '{"data":{"slug":"hello","title":"Hello","author":{"documentId":"750e8400-e29b-41d4-a716-446655440000"},"contributors":[]}}'
|
|
92
89
|
```
|
|
93
90
|
|
|
94
|
-
Do not add `localized` or field-level `i18n` to reference fields. The reference value belongs to the entry variant
|
|
91
|
+
Do not add `localized` or field-level `i18n` to reference fields. The reference value belongs to the entry variant that stores it.
|
|
95
92
|
|
|
96
93
|
## Localized and shared content
|
|
97
94
|
|
|
98
|
-
Schemas are localized by default. Omit `--locale`
|
|
95
|
+
Schemas are localized by default. Omit `--locale` for default-locale entries. Pass `--locale <locale>` when creating, listing, reading, or updating a specific non-default locale.
|
|
99
96
|
|
|
100
97
|
When creating a localized variant of an existing entry, pass the source entry's `documentId` with `--document-id`. Keep projects single-locale unless the user asks for multilingual or localized output; when multiple locales are configured, create and update every locale explicitly.
|
|
101
98
|
|
|
102
|
-
For content shared across locales, define `"i18n": { "enabled": false }` at the schema root and create each entry once. Do not pass `--document-id` to manufacture locale variants.
|
|
99
|
+
For content shared across locales, define `"i18n": { "enabled": false }` at the schema root and create each entry once. Do not pass `--document-id` to manufacture locale variants. Shared entry responses omit `locale`; a read locale is only used to resolve populated references that target localized schemas. No other `i18n` options and no field-level localization settings are supported.
|
|
103
100
|
|
|
104
101
|
Use `"isSingleton": true` for a type with exactly one logical document. Generated singleton clients expose `get`/`update` and their React Query hooks, not collection create/remove APIs.
|
|
105
102
|
|
|
106
103
|
## "Add a blog" recipe
|
|
107
104
|
|
|
108
105
|
1. Load `fimo/references/content.md` for the JSON shape and field types.
|
|
109
|
-
2. Write `src/schemas/BlogPost.json` with fields `title`, `body` (richtext), `coverImage` (media), etc. Do NOT declare a `slug` field — `slug` (and `id`, `
|
|
106
|
+
2. Write `src/schemas/BlogPost.json` with fields `title`, `body` (richtext), `coverImage` (media), etc. Do NOT declare a `slug` field — `slug` (and `id`, `documentId`, `locale`, `createdAt`, `updatedAt`, `__fimo`) is reserved entry metadata and will be rejected; every entry gets a `slug` for free.
|
|
110
107
|
3. Run `fimo schemas push BlogPost`.
|
|
111
|
-
4. Generate cover images: `fimo image
|
|
108
|
+
4. Generate cover images: `fimo generate pruna/p-image --prompt "..."` (per-model flags come from `fimo models show <model>`; see `media.md`).
|
|
112
109
|
5. Seed entries: `fimo entries create BlogPost --body '{"data": {"slug": "first-post", "title": "...", "coverImage": {...}}}'`.
|
|
113
110
|
6. Load `fimo/references/ui.md` for the `<Text>`, `<Image>`, `<RichText>` components.
|
|
114
111
|
7. Load `fimo/references/labels.md` for wrapping labels in `t()`.
|
|
@@ -132,7 +132,7 @@ Propagation: typically 15–30 minutes, up to 48 hours rarely.
|
|
|
132
132
|
|
|
133
133
|
## Web app equivalent
|
|
134
134
|
|
|
135
|
-
For users on the dashboard, the same workflow lives at **Settings → Domains** (custom domain) and **Organization → Domains** (buy/owned). See `fimo-studio/references/custom-domains.md` and the [public docs](https://fimo.ai/
|
|
135
|
+
For users on the dashboard, the same workflow lives at **Settings → Domains** (custom domain) and **Organization → Domains** (buy/owned). See `fimo-studio/references/custom-domains.md` and the [public docs](https://docs.fimo.ai/publish/custom-domains).
|
|
136
136
|
|
|
137
137
|
## Anti-patterns
|
|
138
138
|
|
|
@@ -67,12 +67,6 @@ import { fimoRoutes } from 'fimo/react-router/routes';
|
|
|
67
67
|
|
|
68
68
|
For custom frameworks, the project may implement its own URL scheme, but it still needs to pass the active locale into Fimo and keep canonical route metadata if it wants Fimo Studio route selection to work.
|
|
69
69
|
|
|
70
|
-
## Migrate An Existing Locale System
|
|
71
|
-
|
|
72
|
-
Inspect the existing locale provider, route table, switcher, redirects, and public URLs before editing configuration. Preserve working URL behavior during the migration.
|
|
73
|
-
|
|
74
|
-
For React Router projects, prefer one contract based on `fimo-config.json`, `fimoRoutes()`, and `FimoLink`; migrate existing wrappers into the framework root instead of layering a second locale context. If that would change established URLs, keep the custom router temporarily, pass its active locale to `FimoProviders`, and ask the user to choose canonical URLs and redirects before rewriting routes.
|
|
75
|
-
|
|
76
70
|
## Labels And Content
|
|
77
71
|
|
|
78
72
|
Labels and content are separate translated surfaces:
|
|
@@ -1,171 +1,181 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Media generation
|
|
2
2
|
|
|
3
|
-
> **Run via `npx fimo@latest <command>`**
|
|
3
|
+
> **Run via `npx fimo@latest <command>`** — always the latest CLI, no install needed.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> For uploading existing files, browsing the library, and opening assets, see
|
|
6
|
+
> `references/assets.md`. This file is **only** about generating new media
|
|
7
|
+
> via AI — the `fimo generate <model>` surface.
|
|
8
|
+
|
|
9
|
+
The CLI exposes **one verb** for all media generation. The model is positional;
|
|
10
|
+
every other input is a flag declared by that model's schema.
|
|
6
11
|
|
|
7
12
|
```bash
|
|
8
|
-
fimo
|
|
9
|
-
fimo image edit --prompt "<instruction>" --images <asset-id-or-url>
|
|
10
|
-
fimo image remove-background --image <asset-id-or-url>
|
|
11
|
-
fimo image upscale --image <asset-id-or-url>
|
|
12
|
-
|
|
13
|
-
fimo video generate --prompt "<prompt>"
|
|
14
|
-
fimo video animate --video <asset-id-or-url> --image <asset-id-or-url>
|
|
15
|
-
fimo video replace --video <asset-id-or-url> --images <asset-id-or-url>
|
|
13
|
+
fimo generate <model-id-or-shortname> [--flag value ...] [--json] [--dry-run]
|
|
16
14
|
```
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
`<model>` is either a canonical id (`pruna/p-image`) or its terminal-friendly
|
|
17
|
+
shortName (`pruna-p-image`, `gpt-image-2`). The CLI fetches each model's flags
|
|
18
|
+
and base price from the API (`GET /api/models`); the server validates the
|
|
19
|
+
options. So flags, defaults, enum values, and pricing all come from one source
|
|
20
|
+
and can't drift — `fimo models show <model>` prints them.
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
---
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
- Add `--dry-run` to validate inputs and get a cost estimate without creating media.
|
|
24
|
-
- Add `--json` for structured output.
|
|
25
|
-
- Add `--name "..."` to set the media-library name.
|
|
26
|
-
- Add `--parent <folder-id>` to save into a folder.
|
|
27
|
-
- Source media can be a Fimo asset ID or an absolute URL.
|
|
28
|
-
- Repeat `--images` for tasks that accept multiple references.
|
|
29
|
-
- The response returns the created asset, cost, credits, task, and quality when applicable. Keep the asset `id` for content fields or the public `url` for direct use.
|
|
24
|
+
## Models
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
Deliberately small, curated catalog (8 image + 3 video). This file documents the **defaults and recipes** below; for the live list with prices, tags, best-for, and flags, run `fimo models list --extended` (or `fimo models show <model>` for one model's options).
|
|
32
27
|
|
|
33
|
-
|
|
28
|
+
---
|
|
34
29
|
|
|
35
|
-
|
|
36
|
-
- `standard`: default for ordinary work.
|
|
37
|
-
- `premium`: higher quality for final, prominent media.
|
|
30
|
+
## Defaults — pick the cheapest model that does the job
|
|
38
31
|
|
|
39
|
-
|
|
32
|
+
**Default to `pruna/p-image` (images) and `pruna/p-video` (video).** The cheap baseline covers the large majority of requests. For anything it can't do — img2img edit, vector/SVG, background removal, upscale, virtual try-on, image-to-video — see the **Recipes** below; each names its model.
|
|
40
33
|
|
|
41
|
-
|
|
34
|
+
**Don't reach for the expensive models (`openai/gpt-image-2`, `fal-ai/bytedance/seedream`) unless explicitly asked** (e.g. a hero or other prominent image), or the project's `AGENTS.md` / `CLAUDE.md` sets a different default.
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
fimo
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
--dry-run
|
|
49
|
-
```
|
|
36
|
+
Model selection lives here (and in project `AGENTS.md` / `CLAUDE.md`). Run `fimo models list` for the live catalog, and
|
|
37
|
+
**`fimo models show <model>` to read a model's options before you use it** —
|
|
38
|
+
options are NOT standardized across models (e.g. pruna takes `--aspect-ratio`,
|
|
39
|
+
while `gpt-image-2` / `seedream` size via `--image-size`). Don't assume a flag
|
|
40
|
+
exists on a model you haven't inspected.
|
|
50
41
|
|
|
51
|
-
|
|
42
|
+
### Parameters for the default (pruna) models
|
|
52
43
|
|
|
53
|
-
|
|
44
|
+
Inlined so you don't need `models show` for the common path. For **any other
|
|
45
|
+
model**, run `fimo models show <model>` — its options will differ. (This list is
|
|
46
|
+
a convenience snapshot; `models show` is the live source of truth.)
|
|
54
47
|
|
|
55
|
-
|
|
56
|
-
fimo image generate \
|
|
57
|
-
--prompt "editorial illustration of a quiet coastal town at sunrise" \
|
|
58
|
-
--quality standard \
|
|
59
|
-
--aspect-ratio 16:9 \
|
|
60
|
-
--name "Coastal sunrise hero"
|
|
61
|
-
```
|
|
48
|
+
**`pruna/p-image`** — text-to-image
|
|
62
49
|
|
|
63
|
-
|
|
50
|
+
- `--prompt <string>` · **required** · generation prompt
|
|
51
|
+
- `--aspect-ratio <1:1|16:9|9:16|4:3|3:4>` · default `1:1`
|
|
64
52
|
|
|
65
|
-
|
|
53
|
+
**`pruna/p-image-edit`** — img2img / prompt-driven edit
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
--images <asset-id-or-url> \
|
|
71
|
-
--aspect-ratio 16:9
|
|
72
|
-
```
|
|
55
|
+
- `--prompt <string>` · **required** · editing instruction
|
|
56
|
+
- `--source-images <asset-id|url>` · **required** · repeatable, up to 5 (an `ast_*` asset id or an absolute URL)
|
|
57
|
+
- `--aspect-ratio <1:1|16:9|9:16|4:3|3:4>` · default `1:1`
|
|
73
58
|
|
|
74
|
-
|
|
59
|
+
**`pruna/p-video`** — text-to-video (add `--source-images` to do image-to-video)
|
|
75
60
|
|
|
76
|
-
|
|
61
|
+
- `--prompt <string>` · **required**
|
|
62
|
+
- `--source-images <asset-id>` · optional · one `ast_*` asset id; passing it flips to image-to-video
|
|
63
|
+
- `--aspect-ratio <1:1|16:9|9:16|4:3|3:4|3:2|2:3>` · default `16:9`
|
|
64
|
+
- `--duration <int 1–10>` · default `5` (seconds)
|
|
65
|
+
- `--resolution <720p|1080p>` · default `720p`
|
|
66
|
+
- `--include-audio` · default off (pass the flag to enable)
|
|
77
67
|
|
|
78
|
-
|
|
79
|
-
fimo image remove-background --image <asset-id-or-url>
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Upscale an image
|
|
68
|
+
**`pruna/p-video-draft`** — same flags as `pruna/p-video`; ~4× cheaper, lower quality.
|
|
83
69
|
|
|
84
|
-
|
|
85
|
-
fimo image upscale \
|
|
86
|
-
--image <asset-id-or-url> \
|
|
87
|
-
--target-megapixels 8 \
|
|
88
|
-
--output-format png \
|
|
89
|
-
--enhance-details
|
|
90
|
-
```
|
|
70
|
+
---
|
|
91
71
|
|
|
92
|
-
|
|
72
|
+
## Recipes — user intent → exact command
|
|
93
73
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
### Generate from text
|
|
74
|
+
Each recipe is **one** command. The "Why" line tells the agent when to reach
|
|
75
|
+
for this vs. an alternative.
|
|
97
76
|
|
|
98
77
|
```bash
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
78
|
+
# "Generate an image" (default — cheapest workhorse)
|
|
79
|
+
fimo generate pruna/p-image --prompt "<prompt>"
|
|
80
|
+
# Why: fast, cheap, good enough for most cases.
|
|
81
|
+
|
|
82
|
+
# "Generate a high-quality / typography / hero image"
|
|
83
|
+
fimo generate openai/gpt-image-2 --prompt "<prompt>" --quality high
|
|
84
|
+
# Why: premium quality, typography + realism. ~10–40× the baseline cost — use
|
|
85
|
+
# only on an explicit request (e.g. hero / prominent media), never by default.
|
|
86
|
+
# --quality low/medium saves cost (metered: ~$0.22 high → ~$0.02 low).
|
|
87
|
+
|
|
88
|
+
# "Generate a 4K image" (native high resolution, no upscale needed)
|
|
89
|
+
fimo generate fal-ai/bytedance/seedream/v4.5/text-to-image \
|
|
90
|
+
--prompt "<prompt>" --image-size auto_4K
|
|
91
|
+
# Why: outputs at 4K natively — skip the clarity-upscaler step.
|
|
92
|
+
|
|
93
|
+
# "Edit an existing image with a prompt"
|
|
94
|
+
fimo generate pruna/p-image-edit \
|
|
95
|
+
--prompt "<edit instruction>" --source-images <asset-id-or-url>
|
|
96
|
+
# Why: img2img with prompt-driven transforms. Style changes,
|
|
97
|
+
# object swaps, scene relighting.
|
|
98
|
+
|
|
99
|
+
# "Try a garment on a person" (e-commerce / fashion)
|
|
100
|
+
fimo generate fal-ai/flux-pro/v1/vto \
|
|
101
|
+
--prompt "<styling instruction>" \
|
|
102
|
+
--human-image-url <person-url> --garment-image-url <garment-url>
|
|
103
|
+
# Why: virtual try-on. Specific to fashion; don't use for general edits.
|
|
104
|
+
|
|
105
|
+
# "Remove the background of an image"
|
|
106
|
+
fimo generate fal-ai/bria/background/remove --source-images <image-url>
|
|
107
|
+
# Why: deterministic transparent-PNG cutout. No prompt needed.
|
|
108
|
+
# Note: this fal model takes an image URL, not a library asset-id.
|
|
109
|
+
|
|
110
|
+
# "Upscale an image to higher resolution"
|
|
111
|
+
fimo generate fal-ai/clarity-upscaler \
|
|
112
|
+
--source-images <image-url> --upscale-factor 4
|
|
113
|
+
# Why: 2×/3×/4× super-resolution. Best quality at 2×. Takes a URL, not an asset-id.
|
|
114
|
+
|
|
115
|
+
# "Generate a vector illustration / SVG / icon"
|
|
116
|
+
fimo generate fal-ai/recraft/v3/text-to-image \
|
|
117
|
+
--prompt "<prompt>" --style vector_illustration/bold_stroke
|
|
118
|
+
# Why: only model that returns SVG. Six style variants
|
|
119
|
+
# (bold_stroke, line_art, cutout, infographical, marker_outline, seamless).
|
|
120
|
+
|
|
121
|
+
# "Generate a video from text"
|
|
122
|
+
fimo generate pruna/p-video --prompt "<prompt>" --duration 6 --aspect-ratio 16:9
|
|
123
|
+
# Why: baseline video model. Add --include-audio for sound.
|
|
124
|
+
|
|
125
|
+
# "Quick rough video preview"
|
|
126
|
+
fimo generate pruna/p-video-draft --prompt "<prompt>" --duration 4
|
|
127
|
+
# Why: ~4× cheaper than pruna/p-video. Same shape; switch to pruna/p-video for final.
|
|
128
|
+
|
|
129
|
+
# "Generate a video from an existing image"
|
|
130
|
+
fimo generate pruna/p-video \
|
|
131
|
+
--prompt "<motion description>" --source-images <asset-id-or-url>
|
|
132
|
+
# Why: same Pruna model — passing --source-images flips it to image-to-video mode.
|
|
133
|
+
|
|
134
|
+
# "Cheap image-to-video alternative"
|
|
135
|
+
fimo generate fal-ai/minimax/hailuo-02/standard/image-to-video \
|
|
136
|
+
--prompt "<motion>" --source-images <image-url> --duration 6
|
|
137
|
+
# Why: cheap i2v. Source is an image URL (not an asset-id); duration is 6 or 10.
|
|
138
|
+
# Output aspect comes from the source image.
|
|
104
139
|
```
|
|
105
140
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
### Generate from an image
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
fimo video generate \
|
|
112
|
-
--prompt "subtle wind moves the leaves, locked camera" \
|
|
113
|
-
--image <asset-id-or-url> \
|
|
114
|
-
--duration 5 \
|
|
115
|
-
--aspect-ratio 16:9
|
|
116
|
-
```
|
|
141
|
+
---
|
|
117
142
|
|
|
118
|
-
|
|
143
|
+
## Universal flags (every model)
|
|
119
144
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
145
|
+
| Flag | Default | Meaning |
|
|
146
|
+
| --------------------- | -------------- | ---------------------------------------------------------- |
|
|
147
|
+
| `--name <str>` | slug of prompt | Asset display name in the library |
|
|
148
|
+
| `--parent <asset-id>` | — | Library placement (folder asset-id) |
|
|
149
|
+
| `-C, --cwd <dir>` | current dir | Project directory to resolve the env from |
|
|
150
|
+
| `--json` | — | Machine-readable output (jq-friendly) |
|
|
151
|
+
| `--dry-run` | — | Validate flags + show resolved request, don't call the API |
|
|
127
152
|
|
|
128
|
-
|
|
153
|
+
> Cost: there is no cost flag on `generate`. Pricing lives in discovery and is
|
|
154
|
+
> shown as the provider's **per-unit rate** (e.g. `$0.045 / second`,
|
|
155
|
+
> `$0.04 / image`), not a synthesized total. `fimo models list` shows the rate
|
|
156
|
+
> per model; `fimo models show <model>` prints a `PRICING` block. With `--json`,
|
|
157
|
+
> each model carries `price: { unitPrice, unit, confidence }` (or `null`). A `~`
|
|
158
|
+
> prefix means even the rate is approximate (metered).
|
|
129
159
|
|
|
130
|
-
|
|
160
|
+
---
|
|
131
161
|
|
|
132
|
-
|
|
133
|
-
fimo video animate \
|
|
134
|
-
--video <motion-source-asset-id-or-url> \
|
|
135
|
-
--image <subject-image-asset-id-or-url> \
|
|
136
|
-
--quality standard \
|
|
137
|
-
--duration 5
|
|
138
|
-
```
|
|
162
|
+
## Discovery — read a model's options before you use it
|
|
139
163
|
|
|
140
|
-
|
|
164
|
+
Options are **not standardized across models** — each model declares its own
|
|
165
|
+
flags. Before generating with a model you haven't used, read its options to
|
|
166
|
+
understand what it can do (and what it expects): `fimo models show <model>`
|
|
167
|
+
prints every flag with its type, default, enum values, description, and a usage
|
|
168
|
+
example; `fimo generate <model> --help` prints the same flag list. Both come
|
|
169
|
+
from the API (introspected server-side from the model's schema), so they can't
|
|
170
|
+
drift. **Don't assume a flag carries across models** — e.g. `--aspect-ratio`
|
|
171
|
+
exists on pruna but not on `gpt-image-2` / `seedream` (which size via
|
|
172
|
+
`--image-size`).
|
|
141
173
|
|
|
142
174
|
```bash
|
|
143
|
-
fimo
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
175
|
+
fimo generate openai/gpt-image-2 --help
|
|
176
|
+
fimo models list --modality video
|
|
177
|
+
fimo models list --tag draft # filter by tag (repeatable, AND semantics)
|
|
178
|
+
fimo models list --extended # per-model card: alias, provider, tags, price, best-for, flags
|
|
179
|
+
fimo models show fal-ai/flux-pro/v1/vto # PRICING rate + per-flag docs with usage examples
|
|
180
|
+
fimo models show fal-ai/flux-pro/v1/vto --json # same, machine-readable (price.unitPrice / price.unit + flags)
|
|
148
181
|
```
|
|
149
|
-
|
|
150
|
-
Repeat `--images` for up to three identities. Add `--prompt` when placement needs clarification.
|
|
151
|
-
|
|
152
|
-
## When to generate
|
|
153
|
-
|
|
154
|
-
Generate when the page needs original artwork, a hero, a card thumbnail, an avatar, an empty-state illustration, or a short motion asset and the user has not supplied one.
|
|
155
|
-
|
|
156
|
-
Do not generate when:
|
|
157
|
-
|
|
158
|
-
- the user supplied or named a specific asset;
|
|
159
|
-
- the result must depict a real person, team, product, or place accurately;
|
|
160
|
-
- an existing media-library asset already fits the request.
|
|
161
|
-
|
|
162
|
-
Upload real files with `fimo assets upload`. Browse reusable media with `fimo assets list` before spending credits.
|
|
163
|
-
|
|
164
|
-
## Verification
|
|
165
|
-
|
|
166
|
-
After generation:
|
|
167
|
-
|
|
168
|
-
1. Confirm the command exited successfully and returned an asset ID.
|
|
169
|
-
2. Open or download the asset with `fimo assets open <id>`.
|
|
170
|
-
3. Verify it matches the request before inserting it into content or UI.
|
|
171
|
-
4. Use the whole media value with Fimo's `<Image>` or `<Video>` components rather than raw HTML elements.
|
|
@@ -17,7 +17,10 @@ exports, source repositories, CMS exports, media folders, or any hybrid of those
|
|
|
17
17
|
It owns intake, source inventory, URL crawl bootstrapping, ledger normalization,
|
|
18
18
|
imports, and QA so any LLM can run the work without silently dropping content.
|
|
19
19
|
|
|
20
|
-
> Run every `fimo` command as `npx fimo
|
|
20
|
+
> Run every `fimo` command as `npx fimo <command>` when the project declares a
|
|
21
|
+
> `fimo` dependency (adopted/wrapped projects pin an exact version tied to their
|
|
22
|
+
> backend — never override it with `@latest`). Only fall back to
|
|
23
|
+
> `npx fimo@latest` when the project has no `fimo` dependency.
|
|
21
24
|
|
|
22
25
|
## Non-Negotiables
|
|
23
26
|
|
|
@@ -30,6 +33,13 @@ imports, and QA so any LLM can run the work without silently dropping content.
|
|
|
30
33
|
ledger.
|
|
31
34
|
- Source exports beat inferred crawls. If CSV/XML/JSON exports, media folders, or
|
|
32
35
|
source code exist, treat the public URL as visual/SEO reference only.
|
|
36
|
+
- A working JS codebase is wrapped, not rewritten. Wrap mode
|
|
37
|
+
(`references/wrap.md`) keeps the user's routing, styling, and components
|
|
38
|
+
untouched; the diff is wiring + wrappers + config only. As the coding
|
|
39
|
+
agent you own the whole wrap loop — run `npx fimo migrate` yourself and
|
|
40
|
+
follow `references/wrap.md` § W0 (relay the recorded data-source
|
|
41
|
+
decisions to the user, then loop `npx fimo migrate wrap --check` to
|
|
42
|
+
exit 0).
|
|
33
43
|
- Builder HTML is evidence, not the final runtime. Rebuild with Fimo conventions,
|
|
34
44
|
schemas, forms, media primitives, translations, and routes.
|
|
35
45
|
- Do not report completion until the QA gate passes or every failed check is
|
|
@@ -59,7 +69,15 @@ imports, and QA so any LLM can run the work without silently dropping content.
|
|
|
59
69
|
pack.
|
|
60
70
|
- **hybrid**: source files plus public URL. Use source-backed as truth and URL
|
|
61
71
|
for route, SEO, visual, and behavior comparison.
|
|
62
|
-
4.
|
|
72
|
+
4. Pick the mode:
|
|
73
|
+
- **wrap** (default for a source-backed, working JS codebase — Next.js,
|
|
74
|
+
Vite/React, React Router): keep the user's stack, adopt the repo with
|
|
75
|
+
`fimo init`, and make content editable by wrapping it in place. Never
|
|
76
|
+
rewrite routing, styling, or components. Follow `references/wrap.md`.
|
|
77
|
+
- **rebuild**: url-only sources, builder exports/HTML dumps, non-JS
|
|
78
|
+
backends, or codebases that do not build. Follow the standard workflow
|
|
79
|
+
phases.
|
|
80
|
+
5. Create or update the canonical ledger described in
|
|
63
81
|
`references/manifest.md`.
|
|
64
82
|
|
|
65
83
|
## Workflow
|
|
@@ -96,6 +114,8 @@ node <this-skill>/scripts/write-migration-report.mjs <project-root>
|
|
|
96
114
|
## References
|
|
97
115
|
|
|
98
116
|
- `references/workflow.md` - full decision tree and phase order.
|
|
117
|
+
- `references/wrap.md` - wrap mode: adopt a working JS codebase and wrap its
|
|
118
|
+
content in place (default for source-backed JS sites).
|
|
99
119
|
- `references/manifest.md` - canonical migration ledger schema.
|
|
100
120
|
- `references/content.md` - CMS, entries, references, and source value rules.
|
|
101
121
|
- `references/media.md` - media inventory, upload, dedupe, and replacement rules.
|
|
@@ -18,6 +18,14 @@ ways:
|
|
|
18
18
|
news teasers, and feature lists are almost always collections even when the
|
|
19
19
|
source renders them inside one page.
|
|
20
20
|
|
|
21
|
+
> **Rebuild path only.** These rules apply when Fimo re-authors the site
|
|
22
|
+
> (URL/export migrations): the rebuilt code is disposable, so content belongs
|
|
23
|
+
> in collections aggressively. **Wrap mode is deliberately stricter** — the
|
|
24
|
+
> user's code stays primary, page furniture and nav stay in code with `t()`
|
|
25
|
+
> labels, and every collection candidate is confirmed with the user first.
|
|
26
|
+
> See `wrap.md` (W0 and the generated agent-prompt) — in wrap mode that
|
|
27
|
+
> guidance overrides this section.
|
|
28
|
+
|
|
21
29
|
After the source-faithful rebuild, treat **any hardcoded array of 3+ items with
|
|
22
30
|
the same shape** as a collection candidate. Do not leave it hardcoded.
|
|
23
31
|
|
|
@@ -34,6 +34,7 @@ follow-up agents, and import/QA checks.
|
|
|
34
34
|
"seo": [],
|
|
35
35
|
"unsupported": [],
|
|
36
36
|
"unresolved": [],
|
|
37
|
+
"wrap": null,
|
|
37
38
|
"qa": {
|
|
38
39
|
"status": "not-run|passed|failed|passed-with-unresolved",
|
|
39
40
|
"checks": []
|
|
@@ -41,6 +42,40 @@ follow-up agents, and import/QA checks.
|
|
|
41
42
|
}
|
|
42
43
|
```
|
|
43
44
|
|
|
45
|
+
## Wrap Block (wrap mode only)
|
|
46
|
+
|
|
47
|
+
When the migration is a wrap (see `references/wrap.md`), set
|
|
48
|
+
`source.mode: "source-backed"` and fill the `wrap` block; leave it `null` for
|
|
49
|
+
rebuild migrations:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"wrap": {
|
|
54
|
+
"mode": "wrap",
|
|
55
|
+
"framework": "next|react-router|vite",
|
|
56
|
+
"adopted": true,
|
|
57
|
+
"wired": true,
|
|
58
|
+
"coverage": {
|
|
59
|
+
"wrappable": 0,
|
|
60
|
+
"wrapped": 25,
|
|
61
|
+
"ignored": 0,
|
|
62
|
+
"unresolvedItems": 0
|
|
63
|
+
},
|
|
64
|
+
"seeded": {
|
|
65
|
+
"labels": 21,
|
|
66
|
+
"wrappedMedia": 3,
|
|
67
|
+
"wrappedRichText": 1
|
|
68
|
+
},
|
|
69
|
+
"planPath": ".fimo/migration/plan.json"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`coverage` mirrors the final `fimo migrate wrap --check` output: `wrappable`
|
|
75
|
+
must be 0 (or fully accounted for by `ignored` + `unresolvedItems`, each with a
|
|
76
|
+
ledger entry). `seeded` counts must match what `fimo labels list` /
|
|
77
|
+
`fimo entries list` report — fallback-only content is not seeded.
|
|
78
|
+
|
|
44
79
|
## Required Item Fields
|
|
45
80
|
|
|
46
81
|
Every route, content type, entry batch, media asset, form, redirect, locale, SEO
|