aico-cli 2.1.7 → 2.1.23
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/bin/cli/README.md +1 -1
- package/bin/cli/cli.js +8672 -3345
- package/bin/cli/package.json +1 -1
- package/bin/cli/sdk-tools.d.ts +41 -5
- package/dist/chunks/simple-config.mjs +1 -1
- package/package.json +2 -2
- package/templates/skills/antfu/SKILL.md +222 -0
- package/templates/skills/antfu/references/antfu-eslint-config.md +328 -0
- package/templates/skills/antfu/references/app-development.md +60 -0
- package/templates/skills/antfu/references/github-actions.md +68 -0
- package/templates/skills/antfu/references/gitignore.md +29 -0
- package/templates/skills/antfu/references/library-development.md +85 -0
- package/templates/skills/antfu/references/monorepo.md +126 -0
- package/templates/skills/antfu/references/vscode-extensions.md +34 -0
- package/templates/skills/nuxt/GENERATION.md +5 -0
- package/templates/skills/nuxt/SKILL.md +55 -0
- package/templates/skills/nuxt/references/advanced-hooks.md +289 -0
- package/templates/skills/nuxt/references/advanced-layers.md +299 -0
- package/templates/skills/nuxt/references/advanced-module-authoring.md +554 -0
- package/templates/skills/nuxt/references/best-practices-data-fetching.md +357 -0
- package/templates/skills/nuxt/references/best-practices-ssr.md +355 -0
- package/templates/skills/nuxt/references/core-cli.md +263 -0
- package/templates/skills/nuxt/references/core-config.md +162 -0
- package/templates/skills/nuxt/references/core-data-fetching.md +236 -0
- package/templates/skills/nuxt/references/core-deployment.md +224 -0
- package/templates/skills/nuxt/references/core-directory-structure.md +269 -0
- package/templates/skills/nuxt/references/core-modules.md +292 -0
- package/templates/skills/nuxt/references/core-routing.md +226 -0
- package/templates/skills/nuxt/references/features-components-autoimport.md +328 -0
- package/templates/skills/nuxt/references/features-components.md +264 -0
- package/templates/skills/nuxt/references/features-composables.md +276 -0
- package/templates/skills/nuxt/references/features-server.md +265 -0
- package/templates/skills/nuxt/references/features-state.md +194 -0
- package/templates/skills/nuxt/references/rendering-modes.md +237 -0
- package/templates/skills/pinia/GENERATION.md +5 -0
- package/templates/skills/pinia/SKILL.md +59 -0
- package/templates/skills/pinia/references/advanced-hmr.md +61 -0
- package/templates/skills/pinia/references/advanced-nuxt.md +119 -0
- package/templates/skills/pinia/references/advanced-ssr.md +121 -0
- package/templates/skills/pinia/references/best-practices-outside-component.md +115 -0
- package/templates/skills/pinia/references/best-practices-testing.md +212 -0
- package/templates/skills/pinia/references/core-stores.md +389 -0
- package/templates/skills/pinia/references/features-composables.md +114 -0
- package/templates/skills/pinia/references/features-composing-stores.md +134 -0
- package/templates/skills/pinia/references/features-plugins.md +203 -0
- package/templates/skills/pnpm/GENERATION.md +5 -0
- package/templates/skills/pnpm/SKILL.md +42 -0
- package/templates/skills/pnpm/references/best-practices-ci.md +285 -0
- package/templates/skills/pnpm/references/best-practices-migration.md +291 -0
- package/templates/skills/pnpm/references/best-practices-performance.md +284 -0
- package/templates/skills/pnpm/references/core-cli.md +229 -0
- package/templates/skills/pnpm/references/core-config.md +188 -0
- package/templates/skills/pnpm/references/core-store.md +179 -0
- package/templates/skills/pnpm/references/core-workspaces.md +205 -0
- package/templates/skills/pnpm/references/features-aliases.md +168 -0
- package/templates/skills/pnpm/references/features-catalogs.md +159 -0
- package/templates/skills/pnpm/references/features-hooks.md +233 -0
- package/templates/skills/pnpm/references/features-overrides.md +184 -0
- package/templates/skills/pnpm/references/features-patches.md +201 -0
- package/templates/skills/pnpm/references/features-peer-deps.md +250 -0
- package/templates/skills/slidev/LICENSE.md +21 -0
- package/templates/skills/slidev/README.md +61 -0
- package/templates/skills/slidev/SKILL.md +183 -0
- package/templates/skills/slidev/SYNC.md +5 -0
- package/templates/skills/slidev/references/animation-click-marker.md +37 -0
- package/templates/skills/slidev/references/animation-drawing.md +68 -0
- package/templates/skills/slidev/references/animation-rough-marker.md +53 -0
- package/templates/skills/slidev/references/api-slide-hooks.md +37 -0
- package/templates/skills/slidev/references/build-og-image.md +36 -0
- package/templates/skills/slidev/references/build-pdf.md +40 -0
- package/templates/skills/slidev/references/build-remote-assets.md +34 -0
- package/templates/skills/slidev/references/build-seo-meta.md +43 -0
- package/templates/skills/slidev/references/code-groups.md +64 -0
- package/templates/skills/slidev/references/code-import-snippet.md +55 -0
- package/templates/skills/slidev/references/code-line-highlighting.md +50 -0
- package/templates/skills/slidev/references/code-line-numbers.md +46 -0
- package/templates/skills/slidev/references/code-magic-move.md +57 -0
- package/templates/skills/slidev/references/code-max-height.md +37 -0
- package/templates/skills/slidev/references/code-twoslash.md +42 -0
- package/templates/skills/slidev/references/core-animations.md +196 -0
- package/templates/skills/slidev/references/core-cli.md +140 -0
- package/templates/skills/slidev/references/core-components.md +197 -0
- package/templates/skills/slidev/references/core-exporting.md +148 -0
- package/templates/skills/slidev/references/core-frontmatter.md +195 -0
- package/templates/skills/slidev/references/core-global-context.md +155 -0
- package/templates/skills/slidev/references/core-headmatter.md +188 -0
- package/templates/skills/slidev/references/core-hosting.md +152 -0
- package/templates/skills/slidev/references/core-layouts.md +286 -0
- package/templates/skills/slidev/references/core-syntax.md +155 -0
- package/templates/skills/slidev/references/diagram-latex.md +55 -0
- package/templates/skills/slidev/references/diagram-mermaid.md +44 -0
- package/templates/skills/slidev/references/diagram-plantuml.md +45 -0
- package/templates/skills/slidev/references/editor-monaco-run.md +44 -0
- package/templates/skills/slidev/references/editor-monaco-write.md +24 -0
- package/templates/skills/slidev/references/editor-monaco.md +50 -0
- package/templates/skills/slidev/references/editor-prettier.md +40 -0
- package/templates/skills/slidev/references/editor-side.md +23 -0
- package/templates/skills/slidev/references/editor-vscode.md +55 -0
- package/templates/skills/slidev/references/layout-canvas-size.md +25 -0
- package/templates/skills/slidev/references/layout-draggable.md +57 -0
- package/templates/skills/slidev/references/layout-global-layers.md +50 -0
- package/templates/skills/slidev/references/layout-slots.md +75 -0
- package/templates/skills/slidev/references/layout-transform.md +33 -0
- package/templates/skills/slidev/references/layout-zoom.md +39 -0
- package/templates/skills/slidev/references/presenter-notes-ruby.md +35 -0
- package/templates/skills/slidev/references/presenter-recording.md +30 -0
- package/templates/skills/slidev/references/presenter-remote.md +40 -0
- package/templates/skills/slidev/references/presenter-timer.md +34 -0
- package/templates/skills/slidev/references/style-direction.md +34 -0
- package/templates/skills/slidev/references/style-icons.md +46 -0
- package/templates/skills/slidev/references/style-scoped.md +50 -0
- package/templates/skills/slidev/references/syntax-block-frontmatter.md +39 -0
- package/templates/skills/slidev/references/syntax-frontmatter-merging.md +49 -0
- package/templates/skills/slidev/references/syntax-importing-slides.md +60 -0
- package/templates/skills/slidev/references/syntax-mdc.md +51 -0
- package/templates/skills/slidev/references/tool-eject-theme.md +27 -0
- package/templates/skills/tech-whitepaper/SKILL.md +102 -15
- package/templates/skills/tsdown/GENERATION.md +5 -0
- package/templates/skills/tsdown/SKILL.md +59 -0
- package/templates/skills/tsdown/references/advanced-hooks.md +87 -0
- package/templates/skills/tsdown/references/advanced-plugins.md +97 -0
- package/templates/skills/tsdown/references/advanced-programmatic.md +78 -0
- package/templates/skills/tsdown/references/advanced-rolldown-options.md +114 -0
- package/templates/skills/tsdown/references/core-cli.md +116 -0
- package/templates/skills/tsdown/references/core-config.md +86 -0
- package/templates/skills/tsdown/references/core-entry.md +74 -0
- package/templates/skills/tsdown/references/features-optimization.md +83 -0
- package/templates/skills/tsdown/references/features-shims.md +92 -0
- package/templates/skills/tsdown/references/features-unbundle.md +63 -0
- package/templates/skills/tsdown/references/features-watch.md +60 -0
- package/templates/skills/tsdown/references/options-dependencies.md +88 -0
- package/templates/skills/tsdown/references/options-dts.md +104 -0
- package/templates/skills/tsdown/references/options-output.md +124 -0
- package/templates/skills/tsdown/references/options-package-exports.md +114 -0
- package/templates/skills/tsdown/references/recipes-frameworks.md +109 -0
- package/templates/skills/tsdown/references/recipes-migration.md +84 -0
- package/templates/skills/turborepo/LICENSE.md +7 -0
- package/templates/skills/turborepo/SKILL.md +914 -0
- package/templates/skills/turborepo/SYNC.md +5 -0
- package/templates/skills/turborepo/command/turborepo.md +70 -0
- package/templates/skills/turborepo/references/best-practices/README.md +241 -0
- package/templates/skills/turborepo/references/best-practices/dependencies.md +246 -0
- package/templates/skills/turborepo/references/best-practices/packages.md +335 -0
- package/templates/skills/turborepo/references/best-practices/structure.md +269 -0
- package/templates/skills/turborepo/references/boundaries/README.md +126 -0
- package/templates/skills/turborepo/references/caching/README.md +107 -0
- package/templates/skills/turborepo/references/caching/gotchas.md +169 -0
- package/templates/skills/turborepo/references/caching/remote-cache.md +127 -0
- package/templates/skills/turborepo/references/ci/README.md +79 -0
- package/templates/skills/turborepo/references/ci/github-actions.md +162 -0
- package/templates/skills/turborepo/references/ci/patterns.md +145 -0
- package/templates/skills/turborepo/references/ci/vercel.md +103 -0
- package/templates/skills/turborepo/references/cli/README.md +100 -0
- package/templates/skills/turborepo/references/cli/commands.md +297 -0
- package/templates/skills/turborepo/references/configuration/README.md +211 -0
- package/templates/skills/turborepo/references/configuration/global-options.md +195 -0
- package/templates/skills/turborepo/references/configuration/gotchas.md +348 -0
- package/templates/skills/turborepo/references/configuration/tasks.md +285 -0
- package/templates/skills/turborepo/references/environment/README.md +96 -0
- package/templates/skills/turborepo/references/environment/gotchas.md +145 -0
- package/templates/skills/turborepo/references/environment/modes.md +101 -0
- package/templates/skills/turborepo/references/filtering/README.md +148 -0
- package/templates/skills/turborepo/references/filtering/patterns.md +152 -0
- package/templates/skills/turborepo/references/watch/README.md +99 -0
- package/templates/skills/unocss/GENERATION.md +5 -0
- package/templates/skills/unocss/SKILL.md +64 -0
- package/templates/skills/unocss/references/core-config.md +187 -0
- package/templates/skills/unocss/references/core-extracting.md +137 -0
- package/templates/skills/unocss/references/core-layers.md +104 -0
- package/templates/skills/unocss/references/core-rules.md +166 -0
- package/templates/skills/unocss/references/core-safelist.md +105 -0
- package/templates/skills/unocss/references/core-shortcuts.md +89 -0
- package/templates/skills/unocss/references/core-theme.md +172 -0
- package/templates/skills/unocss/references/core-variants.md +175 -0
- package/templates/skills/unocss/references/integrations-nuxt.md +199 -0
- package/templates/skills/unocss/references/integrations-vite.md +283 -0
- package/templates/skills/unocss/references/preset-attributify.md +142 -0
- package/templates/skills/unocss/references/preset-icons.md +184 -0
- package/templates/skills/unocss/references/preset-mini.md +158 -0
- package/templates/skills/unocss/references/preset-rem-to-px.md +97 -0
- package/templates/skills/unocss/references/preset-tagify.md +134 -0
- package/templates/skills/unocss/references/preset-typography.md +95 -0
- package/templates/skills/unocss/references/preset-web-fonts.md +91 -0
- package/templates/skills/unocss/references/preset-wind3.md +194 -0
- package/templates/skills/unocss/references/preset-wind4.md +247 -0
- package/templates/skills/unocss/references/transformer-attributify-jsx.md +156 -0
- package/templates/skills/unocss/references/transformer-compile-class.md +128 -0
- package/templates/skills/unocss/references/transformer-directives.md +157 -0
- package/templates/skills/unocss/references/transformer-variant-group.md +97 -0
- package/templates/skills/vite/GENERATION.md +5 -0
- package/templates/skills/vite/SKILL.md +50 -0
- package/templates/skills/vite/references/advanced-api.md +218 -0
- package/templates/skills/vite/references/advanced-backend.md +164 -0
- package/templates/skills/vite/references/advanced-performance.md +168 -0
- package/templates/skills/vite/references/advanced-plugin-api.md +258 -0
- package/templates/skills/vite/references/build-library.md +172 -0
- package/templates/skills/vite/references/build-production.md +220 -0
- package/templates/skills/vite/references/build-ssr.md +194 -0
- package/templates/skills/vite/references/core-cli.md +137 -0
- package/templates/skills/vite/references/core-config.md +176 -0
- package/templates/skills/vite/references/core-features.md +170 -0
- package/templates/skills/vite/references/core-plugins.md +154 -0
- package/templates/skills/vite/references/features-assets.md +138 -0
- package/templates/skills/vite/references/features-css.md +215 -0
- package/templates/skills/vite/references/features-dep-bundling.md +148 -0
- package/templates/skills/vite/references/features-env.md +161 -0
- package/templates/skills/vite/references/features-glob-import.md +161 -0
- package/templates/skills/vite/references/features-hmr.md +200 -0
- package/templates/skills/vite/references/features-workers.md +115 -0
- package/templates/skills/vitepress/GENERATION.md +5 -0
- package/templates/skills/vitepress/SKILL.md +65 -0
- package/templates/skills/vitepress/references/advanced-i18n.md +299 -0
- package/templates/skills/vitepress/references/advanced-ssr.md +228 -0
- package/templates/skills/vitepress/references/core-cli.md +119 -0
- package/templates/skills/vitepress/references/core-config.md +189 -0
- package/templates/skills/vitepress/references/core-markdown.md +277 -0
- package/templates/skills/vitepress/references/core-routing.md +169 -0
- package/templates/skills/vitepress/references/features-code-blocks.md +243 -0
- package/templates/skills/vitepress/references/features-data-loading.md +220 -0
- package/templates/skills/vitepress/references/features-dynamic-routes.md +235 -0
- package/templates/skills/vitepress/references/features-vue.md +224 -0
- package/templates/skills/vitepress/references/recipes-deploy.md +240 -0
- package/templates/skills/vitepress/references/theme-config.md +315 -0
- package/templates/skills/vitepress/references/theme-custom.md +269 -0
- package/templates/skills/vitepress/references/theme-customization.md +290 -0
- package/templates/skills/vitest/GENERATION.md +5 -0
- package/templates/skills/vitest/SKILL.md +52 -0
- package/templates/skills/vitest/references/advanced-environments.md +264 -0
- package/templates/skills/vitest/references/advanced-projects.md +300 -0
- package/templates/skills/vitest/references/advanced-type-testing.md +237 -0
- package/templates/skills/vitest/references/advanced-vi.md +249 -0
- package/templates/skills/vitest/references/core-cli.md +166 -0
- package/templates/skills/vitest/references/core-config.md +174 -0
- package/templates/skills/vitest/references/core-describe.md +193 -0
- package/templates/skills/vitest/references/core-expect.md +219 -0
- package/templates/skills/vitest/references/core-hooks.md +244 -0
- package/templates/skills/vitest/references/core-test-api.md +233 -0
- package/templates/skills/vitest/references/features-concurrency.md +250 -0
- package/templates/skills/vitest/references/features-context.md +238 -0
- package/templates/skills/vitest/references/features-coverage.md +207 -0
- package/templates/skills/vitest/references/features-filtering.md +211 -0
- package/templates/skills/vitest/references/features-mocking.md +265 -0
- package/templates/skills/vitest/references/features-snapshots.md +207 -0
- package/templates/skills/vue/GENERATION.md +5 -0
- package/templates/skills/vue/SKILL.md +63 -0
- package/templates/skills/vue/references/advanced-async-suspense.md +246 -0
- package/templates/skills/vue/references/advanced-provide-inject.md +174 -0
- package/templates/skills/vue/references/components-emits.md +139 -0
- package/templates/skills/vue/references/components-lifecycle.md +192 -0
- package/templates/skills/vue/references/components-props.md +211 -0
- package/templates/skills/vue/references/components-slots.md +201 -0
- package/templates/skills/vue/references/components-v-model.md +183 -0
- package/templates/skills/vue/references/core-reactivity.md +289 -0
- package/templates/skills/vue/references/features-composables.md +262 -0
- package/templates/skills/vue/references/features-directives.md +224 -0
- package/templates/skills/vue/references/features-script-setup.md +247 -0
- package/templates/skills/vue/references/features-template-refs.md +212 -0
- package/templates/skills/vue/references/features-typescript.md +274 -0
- package/templates/skills/vue-best-practices/LICENSE.md +21 -0
- package/templates/skills/vue-best-practices/SKILL.md +38 -0
- package/templates/skills/vue-best-practices/SYNC.md +5 -0
- package/templates/skills/vue-best-practices/rules/codeactions-save-performance.md +79 -0
- package/templates/skills/vue-best-practices/rules/data-attributes-config.md +74 -0
- package/templates/skills/vue-best-practices/rules/deep-watch-numeric.md +97 -0
- package/templates/skills/vue-best-practices/rules/define-model-update-event.md +79 -0
- package/templates/skills/vue-best-practices/rules/duplicate-plugin-detection.md +102 -0
- package/templates/skills/vue-best-practices/rules/extract-component-props.md +57 -0
- package/templates/skills/vue-best-practices/rules/fallthrough-attributes.md +63 -0
- package/templates/skills/vue-best-practices/rules/hmr-vue-ssr.md +124 -0
- package/templates/skills/vue-best-practices/rules/module-resolution-bundler.md +81 -0
- package/templates/skills/vue-best-practices/rules/pinia-store-mocking.md +159 -0
- package/templates/skills/vue-best-practices/rules/script-setup-jsdoc.md +85 -0
- package/templates/skills/vue-best-practices/rules/strict-css-modules.md +68 -0
- package/templates/skills/vue-best-practices/rules/volar-3-breaking-changes.md +65 -0
- package/templates/skills/vue-best-practices/rules/vue-directive-comments.md +73 -0
- package/templates/skills/vue-best-practices/rules/vue-router-typed-params.md +81 -0
- package/templates/skills/vue-best-practices/rules/vue-tsc-strict-templates.md +69 -0
- package/templates/skills/vue-best-practices/rules/with-defaults-union-types.md +102 -0
- package/templates/skills/vueuse-functions/LICENSE.md +21 -0
- package/templates/skills/vueuse-functions/SKILL.md +418 -0
- package/templates/skills/vueuse-functions/SYNC.md +5 -0
- package/templates/skills/vueuse-functions/references/computedAsync.md +159 -0
- package/templates/skills/vueuse-functions/references/computedEager.md +62 -0
- package/templates/skills/vueuse-functions/references/computedInject.md +86 -0
- package/templates/skills/vueuse-functions/references/computedWithControl.md +100 -0
- package/templates/skills/vueuse-functions/references/createEventHook.md +86 -0
- package/templates/skills/vueuse-functions/references/createGenericProjection.md +25 -0
- package/templates/skills/vueuse-functions/references/createGlobalState.md +95 -0
- package/templates/skills/vueuse-functions/references/createInjectionState.md +215 -0
- package/templates/skills/vueuse-functions/references/createProjection.md +31 -0
- package/templates/skills/vueuse-functions/references/createRef.md +54 -0
- package/templates/skills/vueuse-functions/references/createReusableTemplate.md +357 -0
- package/templates/skills/vueuse-functions/references/createSharedComposable.md +42 -0
- package/templates/skills/vueuse-functions/references/createTemplatePromise.md +259 -0
- package/templates/skills/vueuse-functions/references/createUnrefFn.md +51 -0
- package/templates/skills/vueuse-functions/references/extendRef.md +76 -0
- package/templates/skills/vueuse-functions/references/from.md +48 -0
- package/templates/skills/vueuse-functions/references/get.md +30 -0
- package/templates/skills/vueuse-functions/references/injectLocal.md +35 -0
- package/templates/skills/vueuse-functions/references/isDefined.md +31 -0
- package/templates/skills/vueuse-functions/references/logicAnd.md +40 -0
- package/templates/skills/vueuse-functions/references/logicNot.md +36 -0
- package/templates/skills/vueuse-functions/references/logicOr.md +40 -0
- package/templates/skills/vueuse-functions/references/makeDestructurable.md +41 -0
- package/templates/skills/vueuse-functions/references/onClickOutside.md +187 -0
- package/templates/skills/vueuse-functions/references/onElementRemoval.md +64 -0
- package/templates/skills/vueuse-functions/references/onKeyStroke.md +176 -0
- package/templates/skills/vueuse-functions/references/onLongPress.md +170 -0
- package/templates/skills/vueuse-functions/references/onStartTyping.md +43 -0
- package/templates/skills/vueuse-functions/references/provideLocal.md +37 -0
- package/templates/skills/vueuse-functions/references/reactify.md +144 -0
- package/templates/skills/vueuse-functions/references/reactifyObject.md +61 -0
- package/templates/skills/vueuse-functions/references/reactiveComputed.md +34 -0
- package/templates/skills/vueuse-functions/references/reactiveOmit.md +86 -0
- package/templates/skills/vueuse-functions/references/reactivePick.md +106 -0
- package/templates/skills/vueuse-functions/references/refAutoReset.md +44 -0
- package/templates/skills/vueuse-functions/references/refDebounced.md +81 -0
- package/templates/skills/vueuse-functions/references/refDefault.md +36 -0
- package/templates/skills/vueuse-functions/references/refManualReset.md +44 -0
- package/templates/skills/vueuse-functions/references/refThrottled.md +99 -0
- package/templates/skills/vueuse-functions/references/refWithControl.md +146 -0
- package/templates/skills/vueuse-functions/references/set.md +30 -0
- package/templates/skills/vueuse-functions/references/syncRef.md +195 -0
- package/templates/skills/vueuse-functions/references/syncRefs.md +128 -0
- package/templates/skills/vueuse-functions/references/templateRef.md +86 -0
- package/templates/skills/vueuse-functions/references/toObserver.md +38 -0
- package/templates/skills/vueuse-functions/references/toReactive.md +41 -0
- package/templates/skills/vueuse-functions/references/toRef.md +75 -0
- package/templates/skills/vueuse-functions/references/toRefs.md +81 -0
- package/templates/skills/vueuse-functions/references/tryOnBeforeMount.md +34 -0
- package/templates/skills/vueuse-functions/references/tryOnBeforeUnmount.md +32 -0
- package/templates/skills/vueuse-functions/references/tryOnMounted.md +34 -0
- package/templates/skills/vueuse-functions/references/tryOnScopeDispose.md +31 -0
- package/templates/skills/vueuse-functions/references/tryOnUnmounted.md +32 -0
- package/templates/skills/vueuse-functions/references/unrefElement.md +54 -0
- package/templates/skills/vueuse-functions/references/until.md +165 -0
- package/templates/skills/vueuse-functions/references/useAbs.md +31 -0
- package/templates/skills/vueuse-functions/references/useActiveElement.md +65 -0
- package/templates/skills/vueuse-functions/references/useAnimate.md +140 -0
- package/templates/skills/vueuse-functions/references/useArrayDifference.md +84 -0
- package/templates/skills/vueuse-functions/references/useArrayEvery.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayFilter.md +63 -0
- package/templates/skills/vueuse-functions/references/useArrayFind.md +50 -0
- package/templates/skills/vueuse-functions/references/useArrayFindIndex.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayFindLast.md +52 -0
- package/templates/skills/vueuse-functions/references/useArrayIncludes.md +63 -0
- package/templates/skills/vueuse-functions/references/useArrayJoin.md +74 -0
- package/templates/skills/vueuse-functions/references/useArrayMap.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayReduce.md +81 -0
- package/templates/skills/vueuse-functions/references/useArraySome.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayUnique.md +76 -0
- package/templates/skills/vueuse-functions/references/useAsyncQueue.md +87 -0
- package/templates/skills/vueuse-functions/references/useAsyncState.md +140 -0
- package/templates/skills/vueuse-functions/references/useAsyncValidator.md +70 -0
- package/templates/skills/vueuse-functions/references/useAuth.md +114 -0
- package/templates/skills/vueuse-functions/references/useAverage.md +36 -0
- package/templates/skills/vueuse-functions/references/useAxios.md +292 -0
- package/templates/skills/vueuse-functions/references/useBase64.md +88 -0
- package/templates/skills/vueuse-functions/references/useBattery.md +67 -0
- package/templates/skills/vueuse-functions/references/useBluetooth.md +161 -0
- package/templates/skills/vueuse-functions/references/useBreakpoints.md +128 -0
- package/templates/skills/vueuse-functions/references/useBroadcastChannel.md +74 -0
- package/templates/skills/vueuse-functions/references/useBrowserLocation.md +83 -0
- package/templates/skills/vueuse-functions/references/useCached.md +53 -0
- package/templates/skills/vueuse-functions/references/useCeil.md +31 -0
- package/templates/skills/vueuse-functions/references/useChangeCase.md +79 -0
- package/templates/skills/vueuse-functions/references/useClamp.md +51 -0
- package/templates/skills/vueuse-functions/references/useClipboard.md +99 -0
- package/templates/skills/vueuse-functions/references/useClipboardItems.md +93 -0
- package/templates/skills/vueuse-functions/references/useCloned.md +91 -0
- package/templates/skills/vueuse-functions/references/useColorMode.md +171 -0
- package/templates/skills/vueuse-functions/references/useConfirmDialog.md +159 -0
- package/templates/skills/vueuse-functions/references/useCookies.md +162 -0
- package/templates/skills/vueuse-functions/references/useCountdown.md +102 -0
- package/templates/skills/vueuse-functions/references/useCounter.md +86 -0
- package/templates/skills/vueuse-functions/references/useCssVar.md +50 -0
- package/templates/skills/vueuse-functions/references/useCurrentElement.md +61 -0
- package/templates/skills/vueuse-functions/references/useCycleList.md +75 -0
- package/templates/skills/vueuse-functions/references/useDark.md +142 -0
- package/templates/skills/vueuse-functions/references/useDateFormat.md +145 -0
- package/templates/skills/vueuse-functions/references/useDebounceFn.md +100 -0
- package/templates/skills/vueuse-functions/references/useDebouncedRefHistory.md +40 -0
- package/templates/skills/vueuse-functions/references/useDeviceMotion.md +87 -0
- package/templates/skills/vueuse-functions/references/useDeviceOrientation.md +62 -0
- package/templates/skills/vueuse-functions/references/useDevicePixelRatio.md +44 -0
- package/templates/skills/vueuse-functions/references/useDevicesList.md +90 -0
- package/templates/skills/vueuse-functions/references/useDisplayMedia.md +71 -0
- package/templates/skills/vueuse-functions/references/useDocumentVisibility.md +45 -0
- package/templates/skills/vueuse-functions/references/useDraggable.md +210 -0
- package/templates/skills/vueuse-functions/references/useDrauu.md +65 -0
- package/templates/skills/vueuse-functions/references/useDropZone.md +83 -0
- package/templates/skills/vueuse-functions/references/useElementBounding.md +131 -0
- package/templates/skills/vueuse-functions/references/useElementByPoint.md +45 -0
- package/templates/skills/vueuse-functions/references/useElementHover.md +79 -0
- package/templates/skills/vueuse-functions/references/useElementSize.md +78 -0
- package/templates/skills/vueuse-functions/references/useElementVisibility.md +126 -0
- package/templates/skills/vueuse-functions/references/useEventBus.md +101 -0
- package/templates/skills/vueuse-functions/references/useEventListener.md +184 -0
- package/templates/skills/vueuse-functions/references/useEventSource.md +204 -0
- package/templates/skills/vueuse-functions/references/useExtractedObservable.md +185 -0
- package/templates/skills/vueuse-functions/references/useEyeDropper.md +71 -0
- package/templates/skills/vueuse-functions/references/useFavicon.md +67 -0
- package/templates/skills/vueuse-functions/references/useFetch.md +546 -0
- package/templates/skills/vueuse-functions/references/useFileDialog.md +91 -0
- package/templates/skills/vueuse-functions/references/useFileSystemAccess.md +162 -0
- package/templates/skills/vueuse-functions/references/useFirestore.md +104 -0
- package/templates/skills/vueuse-functions/references/useFloor.md +31 -0
- package/templates/skills/vueuse-functions/references/useFocus.md +99 -0
- package/templates/skills/vueuse-functions/references/useFocusTrap.md +245 -0
- package/templates/skills/vueuse-functions/references/useFocusWithin.md +57 -0
- package/templates/skills/vueuse-functions/references/useFps.md +28 -0
- package/templates/skills/vueuse-functions/references/useFullscreen.md +75 -0
- package/templates/skills/vueuse-functions/references/useFuse.md +107 -0
- package/templates/skills/vueuse-functions/references/useGamepad.md +223 -0
- package/templates/skills/vueuse-functions/references/useGeolocation.md +86 -0
- package/templates/skills/vueuse-functions/references/useIDBKeyval.md +93 -0
- package/templates/skills/vueuse-functions/references/useIdle.md +89 -0
- package/templates/skills/vueuse-functions/references/useImage.md +86 -0
- package/templates/skills/vueuse-functions/references/useInfiniteScroll.md +157 -0
- package/templates/skills/vueuse-functions/references/useIntersectionObserver.md +118 -0
- package/templates/skills/vueuse-functions/references/useInterval.md +69 -0
- package/templates/skills/vueuse-functions/references/useIntervalFn.md +50 -0
- package/templates/skills/vueuse-functions/references/useIpcRenderer.md +118 -0
- package/templates/skills/vueuse-functions/references/useIpcRendererInvoke.md +58 -0
- package/templates/skills/vueuse-functions/references/useIpcRendererOn.md +52 -0
- package/templates/skills/vueuse-functions/references/useJwt.md +57 -0
- package/templates/skills/vueuse-functions/references/useKeyModifier.md +87 -0
- package/templates/skills/vueuse-functions/references/useLastChanged.md +63 -0
- package/templates/skills/vueuse-functions/references/useLocalStorage.md +41 -0
- package/templates/skills/vueuse-functions/references/useMagicKeys.md +217 -0
- package/templates/skills/vueuse-functions/references/useManualRefHistory.md +204 -0
- package/templates/skills/vueuse-functions/references/useMath.md +47 -0
- package/templates/skills/vueuse-functions/references/useMax.md +36 -0
- package/templates/skills/vueuse-functions/references/useMediaControls.md +571 -0
- package/templates/skills/vueuse-functions/references/useMediaQuery.md +53 -0
- package/templates/skills/vueuse-functions/references/useMemoize.md +175 -0
- package/templates/skills/vueuse-functions/references/useMemory.md +56 -0
- package/templates/skills/vueuse-functions/references/useMin.md +36 -0
- package/templates/skills/vueuse-functions/references/useMounted.md +38 -0
- package/templates/skills/vueuse-functions/references/useMouse.md +114 -0
- package/templates/skills/vueuse-functions/references/useMouseInElement.md +123 -0
- package/templates/skills/vueuse-functions/references/useMousePressed.md +112 -0
- package/templates/skills/vueuse-functions/references/useMutationObserver.md +62 -0
- package/templates/skills/vueuse-functions/references/useNProgress.md +78 -0
- package/templates/skills/vueuse-functions/references/useNavigatorLanguage.md +57 -0
- package/templates/skills/vueuse-functions/references/useNetwork.md +106 -0
- package/templates/skills/vueuse-functions/references/useNow.md +75 -0
- package/templates/skills/vueuse-functions/references/useObjectUrl.md +55 -0
- package/templates/skills/vueuse-functions/references/useObservable.md +67 -0
- package/templates/skills/vueuse-functions/references/useOffsetPagination.md +199 -0
- package/templates/skills/vueuse-functions/references/useOnline.md +41 -0
- package/templates/skills/vueuse-functions/references/usePageLeave.md +42 -0
- package/templates/skills/vueuse-functions/references/useParallax.md +58 -0
- package/templates/skills/vueuse-functions/references/useParentElement.md +54 -0
- package/templates/skills/vueuse-functions/references/usePerformanceObserver.md +48 -0
- package/templates/skills/vueuse-functions/references/usePermission.md +78 -0
- package/templates/skills/vueuse-functions/references/usePointer.md +89 -0
- package/templates/skills/vueuse-functions/references/usePointerLock.md +60 -0
- package/templates/skills/vueuse-functions/references/usePointerSwipe.md +80 -0
- package/templates/skills/vueuse-functions/references/usePrecision.md +49 -0
- package/templates/skills/vueuse-functions/references/usePreferredColorScheme.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredContrast.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredDark.md +41 -0
- package/templates/skills/vueuse-functions/references/usePreferredLanguages.md +41 -0
- package/templates/skills/vueuse-functions/references/usePreferredReducedMotion.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredReducedTransparency.md +42 -0
- package/templates/skills/vueuse-functions/references/usePrevious.md +40 -0
- package/templates/skills/vueuse-functions/references/useProjection.md +38 -0
- package/templates/skills/vueuse-functions/references/useQRCode.md +53 -0
- package/templates/skills/vueuse-functions/references/useRTDB.md +70 -0
- package/templates/skills/vueuse-functions/references/useRafFn.md +68 -0
- package/templates/skills/vueuse-functions/references/useRefHistory.md +292 -0
- package/templates/skills/vueuse-functions/references/useResizeObserver.md +110 -0
- package/templates/skills/vueuse-functions/references/useRound.md +31 -0
- package/templates/skills/vueuse-functions/references/useRouteHash.md +27 -0
- package/templates/skills/vueuse-functions/references/useRouteParams.md +38 -0
- package/templates/skills/vueuse-functions/references/useRouteQuery.md +38 -0
- package/templates/skills/vueuse-functions/references/useSSRWidth.md +47 -0
- package/templates/skills/vueuse-functions/references/useScreenOrientation.md +96 -0
- package/templates/skills/vueuse-functions/references/useScreenSafeArea.md +60 -0
- package/templates/skills/vueuse-functions/references/useScriptTag.md +116 -0
- package/templates/skills/vueuse-functions/references/useScroll.md +238 -0
- package/templates/skills/vueuse-functions/references/useScrollLock.md +66 -0
- package/templates/skills/vueuse-functions/references/useSessionStorage.md +41 -0
- package/templates/skills/vueuse-functions/references/useShare.md +68 -0
- package/templates/skills/vueuse-functions/references/useSortable.md +177 -0
- package/templates/skills/vueuse-functions/references/useSorted.md +90 -0
- package/templates/skills/vueuse-functions/references/useSpeechRecognition.md +94 -0
- package/templates/skills/vueuse-functions/references/useSpeechSynthesis.md +105 -0
- package/templates/skills/vueuse-functions/references/useStepper.md +137 -0
- package/templates/skills/vueuse-functions/references/useStorage.md +219 -0
- package/templates/skills/vueuse-functions/references/useStorageAsync.md +134 -0
- package/templates/skills/vueuse-functions/references/useStyleTag.md +131 -0
- package/templates/skills/vueuse-functions/references/useSubject.md +52 -0
- package/templates/skills/vueuse-functions/references/useSubscription.md +33 -0
- package/templates/skills/vueuse-functions/references/useSum.md +36 -0
- package/templates/skills/vueuse-functions/references/useSupported.md +29 -0
- package/templates/skills/vueuse-functions/references/useSwipe.md +75 -0
- package/templates/skills/vueuse-functions/references/useTemplateRefsList.md +37 -0
- package/templates/skills/vueuse-functions/references/useTextDirection.md +75 -0
- package/templates/skills/vueuse-functions/references/useTextSelection.md +40 -0
- package/templates/skills/vueuse-functions/references/useTextareaAutosize.md +97 -0
- package/templates/skills/vueuse-functions/references/useThrottleFn.md +57 -0
- package/templates/skills/vueuse-functions/references/useThrottledRefHistory.md +47 -0
- package/templates/skills/vueuse-functions/references/useTimeAgo.md +152 -0
- package/templates/skills/vueuse-functions/references/useTimeAgoIntl.md +116 -0
- package/templates/skills/vueuse-functions/references/useTimeout.md +75 -0
- package/templates/skills/vueuse-functions/references/useTimeoutFn.md +51 -0
- package/templates/skills/vueuse-functions/references/useTimeoutPoll.md +47 -0
- package/templates/skills/vueuse-functions/references/useTimestamp.md +85 -0
- package/templates/skills/vueuse-functions/references/useTitle.md +113 -0
- package/templates/skills/vueuse-functions/references/useToNumber.md +54 -0
- package/templates/skills/vueuse-functions/references/useToString.md +34 -0
- package/templates/skills/vueuse-functions/references/useToggle.md +56 -0
- package/templates/skills/vueuse-functions/references/useTransition.md +265 -0
- package/templates/skills/vueuse-functions/references/useTrunc.md +33 -0
- package/templates/skills/vueuse-functions/references/useUrlSearchParams.md +121 -0
- package/templates/skills/vueuse-functions/references/useUserMedia.md +1138 -0
- package/templates/skills/vueuse-functions/references/useVModel.md +116 -0
- package/templates/skills/vueuse-functions/references/useVModels.md +67 -0
- package/templates/skills/vueuse-functions/references/useVibrate.md +83 -0
- package/templates/skills/vueuse-functions/references/useVirtualList.md +184 -0
- package/templates/skills/vueuse-functions/references/useWakeLock.md +50 -0
- package/templates/skills/vueuse-functions/references/useWebNotification.md +177 -0
- package/templates/skills/vueuse-functions/references/useWebSocket.md +268 -0
- package/templates/skills/vueuse-functions/references/useWebWorker.md +60 -0
- package/templates/skills/vueuse-functions/references/useWebWorkerFn.md +102 -0
- package/templates/skills/vueuse-functions/references/useWindowFocus.md +46 -0
- package/templates/skills/vueuse-functions/references/useWindowScroll.md +62 -0
- package/templates/skills/vueuse-functions/references/useWindowSize.md +76 -0
- package/templates/skills/vueuse-functions/references/useZoomFactor.md +53 -0
- package/templates/skills/vueuse-functions/references/useZoomLevel.md +53 -0
- package/templates/skills/vueuse-functions/references/watchArray.md +53 -0
- package/templates/skills/vueuse-functions/references/watchAtMost.md +54 -0
- package/templates/skills/vueuse-functions/references/watchDebounced.md +72 -0
- package/templates/skills/vueuse-functions/references/watchDeep.md +54 -0
- package/templates/skills/vueuse-functions/references/watchExtractedObservable.md +167 -0
- package/templates/skills/vueuse-functions/references/watchIgnorable.md +120 -0
- package/templates/skills/vueuse-functions/references/watchImmediate.md +44 -0
- package/templates/skills/vueuse-functions/references/watchOnce.md +41 -0
- package/templates/skills/vueuse-functions/references/watchPausable.md +86 -0
- package/templates/skills/vueuse-functions/references/watchThrottled.md +73 -0
- package/templates/skills/vueuse-functions/references/watchTriggerable.md +97 -0
- package/templates/skills/vueuse-functions/references/watchWithFilter.md +55 -0
- package/templates/skills/vueuse-functions/references/whenever.md +100 -0
- package/templates/skills/web-design-guidelines/SKILL.md +39 -0
- package/templates/skills/web-design-guidelines/SYNC.md +5 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# How Turborepo Caching Works
|
|
2
|
+
|
|
3
|
+
Turborepo's core principle: **never do the same work twice**.
|
|
4
|
+
|
|
5
|
+
## The Cache Equation
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
fingerprint(inputs) → stored outputs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
If inputs haven't changed, restore outputs from cache instead of re-running the task.
|
|
12
|
+
|
|
13
|
+
## What Determines the Cache Key
|
|
14
|
+
|
|
15
|
+
### Global Hash Inputs
|
|
16
|
+
|
|
17
|
+
These affect ALL tasks in the repo:
|
|
18
|
+
|
|
19
|
+
- `package-lock.json` / `yarn.lock` / `pnpm-lock.yaml`
|
|
20
|
+
- Files listed in `globalDependencies`
|
|
21
|
+
- Environment variables in `globalEnv`
|
|
22
|
+
- `turbo.json` configuration
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"globalDependencies": [".env", "tsconfig.base.json"],
|
|
27
|
+
"globalEnv": ["CI", "NODE_ENV"]
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Task Hash Inputs
|
|
32
|
+
|
|
33
|
+
These affect specific tasks:
|
|
34
|
+
|
|
35
|
+
- All files in the package (unless filtered by `inputs`)
|
|
36
|
+
- `package.json` contents
|
|
37
|
+
- Environment variables in task's `env` key
|
|
38
|
+
- Task configuration (command, outputs, dependencies)
|
|
39
|
+
- Hashes of dependent tasks (`dependsOn`)
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"tasks": {
|
|
44
|
+
"build": {
|
|
45
|
+
"dependsOn": ["^build"],
|
|
46
|
+
"inputs": ["src/**", "package.json", "tsconfig.json"],
|
|
47
|
+
"env": ["API_URL"]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## What Gets Cached
|
|
54
|
+
|
|
55
|
+
1. **File outputs** - files/directories specified in `outputs`
|
|
56
|
+
2. **Task logs** - stdout/stderr for replay on cache hit
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"tasks": {
|
|
61
|
+
"build": {
|
|
62
|
+
"outputs": ["dist/**", ".next/**"]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Local Cache Location
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
.turbo/cache/
|
|
72
|
+
├── <hash1>.tar.zst # compressed outputs
|
|
73
|
+
├── <hash2>.tar.zst
|
|
74
|
+
└── ...
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Add `.turbo` to `.gitignore`.
|
|
78
|
+
|
|
79
|
+
## Cache Restoration
|
|
80
|
+
|
|
81
|
+
On cache hit, Turborepo:
|
|
82
|
+
|
|
83
|
+
1. Extracts archived outputs to their original locations
|
|
84
|
+
2. Replays the logged stdout/stderr
|
|
85
|
+
3. Reports the task as cached (shows `FULL TURBO` in output)
|
|
86
|
+
|
|
87
|
+
## Example Flow
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# First run - executes build, caches result
|
|
91
|
+
turbo build
|
|
92
|
+
# → packages/ui: cache miss, executing...
|
|
93
|
+
# → packages/web: cache miss, executing...
|
|
94
|
+
|
|
95
|
+
# Second run - same inputs, restores from cache
|
|
96
|
+
turbo build
|
|
97
|
+
# → packages/ui: cache hit, replaying output
|
|
98
|
+
# → packages/web: cache hit, replaying output
|
|
99
|
+
# → FULL TURBO
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Key Points
|
|
103
|
+
|
|
104
|
+
- Cache is content-addressed (based on input hash, not timestamps)
|
|
105
|
+
- Empty `outputs` array means task runs but nothing is cached
|
|
106
|
+
- Tasks without `outputs` key cache nothing (use `"outputs": []` to be explicit)
|
|
107
|
+
- Cache is invalidated when ANY input changes
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Debugging Cache Issues
|
|
2
|
+
|
|
3
|
+
## Diagnostic Tools
|
|
4
|
+
|
|
5
|
+
### `--summarize`
|
|
6
|
+
|
|
7
|
+
Generates a JSON file with all hash inputs. Compare two runs to find differences.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
turbo build --summarize
|
|
11
|
+
# Creates .turbo/runs/<run-id>.json
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The summary includes:
|
|
15
|
+
|
|
16
|
+
- Global hash and its inputs
|
|
17
|
+
- Per-task hashes and their inputs
|
|
18
|
+
- Environment variables that affected the hash
|
|
19
|
+
|
|
20
|
+
**Comparing runs:**
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Run twice, compare the summaries
|
|
24
|
+
diff .turbo/runs/<first-run>.json .turbo/runs/<second-run>.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `--dry` / `--dry=json`
|
|
28
|
+
|
|
29
|
+
See what would run without executing anything:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
turbo build --dry
|
|
33
|
+
turbo build --dry=json # machine-readable output
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Shows cache status for each task without running them.
|
|
37
|
+
|
|
38
|
+
### `--force`
|
|
39
|
+
|
|
40
|
+
Skip reading cache, re-execute all tasks:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
turbo build --force
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Useful to verify tasks actually work (not just cached results).
|
|
47
|
+
|
|
48
|
+
## Unexpected Cache Misses
|
|
49
|
+
|
|
50
|
+
**Symptom:** Task runs when you expected a cache hit.
|
|
51
|
+
|
|
52
|
+
### Environment Variable Changed
|
|
53
|
+
|
|
54
|
+
Check if an env var in the `env` key changed:
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"tasks": {
|
|
59
|
+
"build": {
|
|
60
|
+
"env": ["API_URL", "NODE_ENV"]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Different `API_URL` between runs = cache miss.
|
|
67
|
+
|
|
68
|
+
### .env File Changed
|
|
69
|
+
|
|
70
|
+
`.env` files aren't tracked by default. Add to `inputs`:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"tasks": {
|
|
75
|
+
"build": {
|
|
76
|
+
"inputs": ["$TURBO_DEFAULT$", ".env", ".env.local"]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Or use `globalDependencies` for repo-wide env files:
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"globalDependencies": [".env"]
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Lockfile Changed
|
|
91
|
+
|
|
92
|
+
Installing/updating packages changes the global hash.
|
|
93
|
+
|
|
94
|
+
### Source Files Changed
|
|
95
|
+
|
|
96
|
+
Any file in the package (or in `inputs`) triggers a miss.
|
|
97
|
+
|
|
98
|
+
### turbo.json Changed
|
|
99
|
+
|
|
100
|
+
Config changes invalidate the global hash.
|
|
101
|
+
|
|
102
|
+
## Incorrect Cache Hits
|
|
103
|
+
|
|
104
|
+
**Symptom:** Cached output is stale/wrong.
|
|
105
|
+
|
|
106
|
+
### Missing Environment Variable
|
|
107
|
+
|
|
108
|
+
Task uses an env var not listed in `env`:
|
|
109
|
+
|
|
110
|
+
```javascript
|
|
111
|
+
// build.js
|
|
112
|
+
const apiUrl = process.env.API_URL; // not tracked!
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Fix: add to task config:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"tasks": {
|
|
120
|
+
"build": {
|
|
121
|
+
"env": ["API_URL"]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Missing File in Inputs
|
|
128
|
+
|
|
129
|
+
Task reads a file outside default inputs:
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"tasks": {
|
|
134
|
+
"build": {
|
|
135
|
+
"inputs": [
|
|
136
|
+
"$TURBO_DEFAULT$",
|
|
137
|
+
"../../shared-config.json" // file outside package
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Useful Flags
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Only show output for cache misses
|
|
148
|
+
turbo build --output-logs=new-only
|
|
149
|
+
|
|
150
|
+
# Show output for everything (debugging)
|
|
151
|
+
turbo build --output-logs=full
|
|
152
|
+
|
|
153
|
+
# See why tasks are running
|
|
154
|
+
turbo build --verbosity=2
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Quick Checklist
|
|
158
|
+
|
|
159
|
+
Cache miss when expected hit:
|
|
160
|
+
|
|
161
|
+
1. Run with `--summarize`, compare with previous run
|
|
162
|
+
2. Check env vars with `--dry=json`
|
|
163
|
+
3. Look for lockfile/config changes in git
|
|
164
|
+
|
|
165
|
+
Cache hit when expected miss:
|
|
166
|
+
|
|
167
|
+
1. Verify env var is in `env` array
|
|
168
|
+
2. Verify file is in `inputs` array
|
|
169
|
+
3. Check if file is outside package directory
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Remote Caching
|
|
2
|
+
|
|
3
|
+
Share cache artifacts across your team and CI pipelines.
|
|
4
|
+
|
|
5
|
+
## Benefits
|
|
6
|
+
|
|
7
|
+
- Team members get cache hits from each other's work
|
|
8
|
+
- CI gets cache hits from local development (and vice versa)
|
|
9
|
+
- Dramatically faster CI runs after first build
|
|
10
|
+
- No more "works on my machine" rebuilds
|
|
11
|
+
|
|
12
|
+
## Vercel Remote Cache
|
|
13
|
+
|
|
14
|
+
Free, zero-config when deploying on Vercel. For local dev and other CI:
|
|
15
|
+
|
|
16
|
+
### Local Development Setup
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Authenticate with Vercel
|
|
20
|
+
npx turbo login
|
|
21
|
+
|
|
22
|
+
# Link repo to your Vercel team
|
|
23
|
+
npx turbo link
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
This creates `.turbo/config.json` with your team info (gitignored by default).
|
|
27
|
+
|
|
28
|
+
### CI Setup
|
|
29
|
+
|
|
30
|
+
Set these environment variables:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
TURBO_TOKEN=<your-token>
|
|
34
|
+
TURBO_TEAM=<your-team-slug>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Get your token from Vercel dashboard → Settings → Tokens.
|
|
38
|
+
|
|
39
|
+
**GitHub Actions example:**
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
- name: Build
|
|
43
|
+
run: npx turbo build
|
|
44
|
+
env:
|
|
45
|
+
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
46
|
+
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Configuration in turbo.json
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"remoteCache": {
|
|
54
|
+
"enabled": true,
|
|
55
|
+
"signature": false
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Options:
|
|
61
|
+
|
|
62
|
+
- `enabled`: toggle remote cache (default: true when authenticated)
|
|
63
|
+
- `signature`: require artifact signing (default: false)
|
|
64
|
+
|
|
65
|
+
## Artifact Signing
|
|
66
|
+
|
|
67
|
+
Verify cache artifacts haven't been tampered with:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Set a secret key (use same key across all environments)
|
|
71
|
+
export TURBO_REMOTE_CACHE_SIGNATURE_KEY="your-secret-key"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Enable in config:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"remoteCache": {
|
|
79
|
+
"signature": true
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Signed artifacts can only be restored if the signature matches.
|
|
85
|
+
|
|
86
|
+
## Self-Hosted Options
|
|
87
|
+
|
|
88
|
+
Community implementations for running your own cache server:
|
|
89
|
+
|
|
90
|
+
- **turbo-remote-cache** (Node.js) - supports S3, GCS, Azure
|
|
91
|
+
- **turborepo-remote-cache** (Go) - lightweight, S3-compatible
|
|
92
|
+
- **ducktape** (Rust) - high-performance option
|
|
93
|
+
|
|
94
|
+
Configure with environment variables:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
TURBO_API=https://your-cache-server.com
|
|
98
|
+
TURBO_TOKEN=your-auth-token
|
|
99
|
+
TURBO_TEAM=your-team
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Cache Behavior Control
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Disable remote cache for a run
|
|
106
|
+
turbo build --remote-cache-read-only # read but don't write
|
|
107
|
+
turbo build --no-cache # skip cache entirely
|
|
108
|
+
|
|
109
|
+
# Environment variable alternative
|
|
110
|
+
TURBO_REMOTE_ONLY=true # only use remote, skip local
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Debugging Remote Cache
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Verbose output shows cache operations
|
|
117
|
+
turbo build --verbosity=2
|
|
118
|
+
|
|
119
|
+
# Check if remote cache is configured
|
|
120
|
+
turbo config
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Look for:
|
|
124
|
+
|
|
125
|
+
- "Remote caching enabled" in output
|
|
126
|
+
- Upload/download messages during runs
|
|
127
|
+
- "cache hit, replaying output" with remote cache indicator
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# CI/CD with Turborepo
|
|
2
|
+
|
|
3
|
+
General principles for running Turborepo in continuous integration environments.
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
### Always Use `turbo run` in CI
|
|
8
|
+
|
|
9
|
+
**Never use the `turbo <tasks>` shorthand in CI or scripts.** Always use `turbo run`:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# CORRECT - Always use in CI, package.json, scripts
|
|
13
|
+
turbo run build test lint
|
|
14
|
+
|
|
15
|
+
# WRONG - Shorthand is only for one-off terminal commands
|
|
16
|
+
turbo build test lint
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The shorthand `turbo <tasks>` is only for one-off invocations typed directly in terminal by humans or agents. Anywhere the command is written into code (CI, package.json, scripts), use `turbo run`.
|
|
20
|
+
|
|
21
|
+
### Enable Remote Caching
|
|
22
|
+
|
|
23
|
+
Remote caching dramatically speeds up CI by sharing cached artifacts across runs.
|
|
24
|
+
|
|
25
|
+
Required environment variables:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
TURBO_TOKEN=your_vercel_token
|
|
29
|
+
TURBO_TEAM=your_team_slug
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Use --affected for PR Builds
|
|
33
|
+
|
|
34
|
+
The `--affected` flag only runs tasks for packages changed since the base branch:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
turbo run build test --affected
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This requires Git history to compute what changed.
|
|
41
|
+
|
|
42
|
+
## Git History Requirements
|
|
43
|
+
|
|
44
|
+
### Fetch Depth
|
|
45
|
+
|
|
46
|
+
`--affected` needs access to the merge base. Shallow clones break this.
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
# GitHub Actions
|
|
50
|
+
- uses: actions/checkout@v4
|
|
51
|
+
with:
|
|
52
|
+
fetch-depth: 2 # Minimum for --affected
|
|
53
|
+
# Use 0 for full history if merge base is far
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Why Shallow Clones Break --affected
|
|
57
|
+
|
|
58
|
+
Turborepo compares the current HEAD to the merge base with `main`. If that commit isn't fetched, `--affected` falls back to running everything.
|
|
59
|
+
|
|
60
|
+
For PRs with many commits, consider:
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
fetch-depth: 0 # Full history
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Environment Variables Reference
|
|
67
|
+
|
|
68
|
+
| Variable | Purpose |
|
|
69
|
+
| ------------------- | ------------------------------------ |
|
|
70
|
+
| `TURBO_TOKEN` | Vercel access token for remote cache |
|
|
71
|
+
| `TURBO_TEAM` | Your Vercel team slug |
|
|
72
|
+
| `TURBO_REMOTE_ONLY` | Skip local cache, use remote only |
|
|
73
|
+
| `TURBO_LOG_ORDER` | Set to `grouped` for cleaner CI logs |
|
|
74
|
+
|
|
75
|
+
## See Also
|
|
76
|
+
|
|
77
|
+
- [github-actions.md](./github-actions.md) - GitHub Actions setup
|
|
78
|
+
- [vercel.md](./vercel.md) - Vercel deployment
|
|
79
|
+
- [patterns.md](./patterns.md) - CI optimization patterns
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# GitHub Actions
|
|
2
|
+
|
|
3
|
+
Complete setup guide for Turborepo with GitHub Actions.
|
|
4
|
+
|
|
5
|
+
## Basic Workflow Structure
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
name: CI
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [main]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [main]
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
with:
|
|
22
|
+
fetch-depth: 2
|
|
23
|
+
|
|
24
|
+
- uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: 20
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: npm ci
|
|
30
|
+
|
|
31
|
+
- name: Build and Test
|
|
32
|
+
run: turbo run build test lint
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Package Manager Setup
|
|
36
|
+
|
|
37
|
+
### pnpm
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
- uses: pnpm/action-setup@v3
|
|
41
|
+
with:
|
|
42
|
+
version: 9
|
|
43
|
+
|
|
44
|
+
- uses: actions/setup-node@v4
|
|
45
|
+
with:
|
|
46
|
+
node-version: 20
|
|
47
|
+
cache: 'pnpm'
|
|
48
|
+
|
|
49
|
+
- run: pnpm install --frozen-lockfile
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Yarn
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
- uses: actions/setup-node@v4
|
|
56
|
+
with:
|
|
57
|
+
node-version: 20
|
|
58
|
+
cache: 'yarn'
|
|
59
|
+
|
|
60
|
+
- run: yarn install --frozen-lockfile
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Bun
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
- uses: oven-sh/setup-bun@v1
|
|
67
|
+
with:
|
|
68
|
+
bun-version: latest
|
|
69
|
+
|
|
70
|
+
- run: bun install --frozen-lockfile
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Remote Cache Setup
|
|
74
|
+
|
|
75
|
+
### 1. Create Vercel Access Token
|
|
76
|
+
|
|
77
|
+
1. Go to [Vercel Dashboard](https://vercel.com/account/tokens)
|
|
78
|
+
2. Create a new token with appropriate scope
|
|
79
|
+
3. Copy the token value
|
|
80
|
+
|
|
81
|
+
### 2. Add Secrets and Variables
|
|
82
|
+
|
|
83
|
+
In your GitHub repository settings:
|
|
84
|
+
|
|
85
|
+
**Secrets** (Settings > Secrets and variables > Actions > Secrets):
|
|
86
|
+
|
|
87
|
+
- `TURBO_TOKEN`: Your Vercel access token
|
|
88
|
+
|
|
89
|
+
**Variables** (Settings > Secrets and variables > Actions > Variables):
|
|
90
|
+
|
|
91
|
+
- `TURBO_TEAM`: Your Vercel team slug
|
|
92
|
+
|
|
93
|
+
### 3. Add to Workflow
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
jobs:
|
|
97
|
+
build:
|
|
98
|
+
runs-on: ubuntu-latest
|
|
99
|
+
env:
|
|
100
|
+
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
101
|
+
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Alternative: actions/cache
|
|
105
|
+
|
|
106
|
+
If you can't use remote cache, cache Turborepo's local cache directory:
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
- uses: actions/cache@v4
|
|
110
|
+
with:
|
|
111
|
+
path: .turbo
|
|
112
|
+
key: turbo-${{ runner.os }}-${{ hashFiles('**/turbo.json', '**/package-lock.json') }}
|
|
113
|
+
restore-keys: |
|
|
114
|
+
turbo-${{ runner.os }}-
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Note: This is less effective than remote cache since it's per-branch.
|
|
118
|
+
|
|
119
|
+
## Complete Example
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
name: CI
|
|
123
|
+
|
|
124
|
+
on:
|
|
125
|
+
push:
|
|
126
|
+
branches: [main]
|
|
127
|
+
pull_request:
|
|
128
|
+
branches: [main]
|
|
129
|
+
|
|
130
|
+
jobs:
|
|
131
|
+
build:
|
|
132
|
+
runs-on: ubuntu-latest
|
|
133
|
+
env:
|
|
134
|
+
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
|
135
|
+
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
|
|
136
|
+
|
|
137
|
+
steps:
|
|
138
|
+
- uses: actions/checkout@v4
|
|
139
|
+
with:
|
|
140
|
+
fetch-depth: 2
|
|
141
|
+
|
|
142
|
+
- uses: pnpm/action-setup@v3
|
|
143
|
+
with:
|
|
144
|
+
version: 9
|
|
145
|
+
|
|
146
|
+
- uses: actions/setup-node@v4
|
|
147
|
+
with:
|
|
148
|
+
node-version: 20
|
|
149
|
+
cache: 'pnpm'
|
|
150
|
+
|
|
151
|
+
- name: Install dependencies
|
|
152
|
+
run: pnpm install --frozen-lockfile
|
|
153
|
+
|
|
154
|
+
- name: Build
|
|
155
|
+
run: turbo run build --affected
|
|
156
|
+
|
|
157
|
+
- name: Test
|
|
158
|
+
run: turbo run test --affected
|
|
159
|
+
|
|
160
|
+
- name: Lint
|
|
161
|
+
run: turbo run lint --affected
|
|
162
|
+
```
|