opencode-skills-collection 3.0.34 → 3.0.36
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/bundled-skills/.antigravity-install-manifest.json +16 -1
- package/bundled-skills/accesslint-audit/SKILL.md +115 -0
- package/bundled-skills/accesslint-diff/SKILL.md +81 -0
- package/bundled-skills/accesslint-scan/SKILL.md +47 -0
- package/bundled-skills/composition-patterns/SKILL.md +87 -0
- package/bundled-skills/composition-patterns/rules/_sections.md +29 -0
- package/bundled-skills/composition-patterns/rules/_template.md +24 -0
- package/bundled-skills/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/bundled-skills/composition-patterns/rules/architecture-compound-components.md +112 -0
- package/bundled-skills/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/bundled-skills/composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/bundled-skills/composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/bundled-skills/composition-patterns/rules/state-context-interface.md +191 -0
- package/bundled-skills/composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/bundled-skills/composition-patterns/rules/state-lift-state.md +125 -0
- package/bundled-skills/debugging-toolkit/SKILL.md +35 -0
- package/bundled-skills/deploy-to-vercel/SKILL.md +304 -0
- package/bundled-skills/deploy-to-vercel/resources/deploy-codex.sh +301 -0
- package/bundled-skills/deploy-to-vercel/resources/deploy.sh +301 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/backups/README-2026-06-02.md +687 -0
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +4 -4
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +245 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +3 -3
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/plugins.md +21 -13
- package/bundled-skills/docs/users/specialized-plugin-roadmap.md +95 -0
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/mmx-cli/SKILL.md +5 -2
- package/bundled-skills/nextjs-seo-indexing/SKILL.md +3 -3
- package/bundled-skills/polis-protocol/SKILL.md +93 -0
- package/bundled-skills/python-development/SKILL.md +35 -0
- package/bundled-skills/radix-ui-design-system/SKILL.md +2 -2
- package/bundled-skills/react-native-skills/SKILL.md +120 -0
- package/bundled-skills/react-native-skills/rules/_sections.md +86 -0
- package/bundled-skills/react-native-skills/rules/_template.md +28 -0
- package/bundled-skills/react-native-skills/rules/animation-derived-value.md +53 -0
- package/bundled-skills/react-native-skills/rules/animation-gesture-detector-press.md +95 -0
- package/bundled-skills/react-native-skills/rules/animation-gpu-properties.md +65 -0
- package/bundled-skills/react-native-skills/rules/design-system-compound-components.md +66 -0
- package/bundled-skills/react-native-skills/rules/fonts-config-plugin.md +71 -0
- package/bundled-skills/react-native-skills/rules/imports-design-system-folder.md +68 -0
- package/bundled-skills/react-native-skills/rules/js-hoist-intl.md +61 -0
- package/bundled-skills/react-native-skills/rules/list-performance-callbacks.md +44 -0
- package/bundled-skills/react-native-skills/rules/list-performance-function-references.md +132 -0
- package/bundled-skills/react-native-skills/rules/list-performance-images.md +53 -0
- package/bundled-skills/react-native-skills/rules/list-performance-inline-objects.md +97 -0
- package/bundled-skills/react-native-skills/rules/list-performance-item-expensive.md +94 -0
- package/bundled-skills/react-native-skills/rules/list-performance-item-memo.md +82 -0
- package/bundled-skills/react-native-skills/rules/list-performance-item-types.md +104 -0
- package/bundled-skills/react-native-skills/rules/list-performance-virtualize.md +67 -0
- package/bundled-skills/react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
- package/bundled-skills/react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
- package/bundled-skills/react-native-skills/rules/navigation-native-navigators.md +188 -0
- package/bundled-skills/react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
- package/bundled-skills/react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
- package/bundled-skills/react-native-skills/rules/react-state-dispatcher.md +91 -0
- package/bundled-skills/react-native-skills/rules/react-state-fallback.md +56 -0
- package/bundled-skills/react-native-skills/rules/react-state-minimize.md +65 -0
- package/bundled-skills/react-native-skills/rules/rendering-no-falsy-and.md +74 -0
- package/bundled-skills/react-native-skills/rules/rendering-text-in-text-component.md +36 -0
- package/bundled-skills/react-native-skills/rules/scroll-position-no-state.md +82 -0
- package/bundled-skills/react-native-skills/rules/state-ground-truth.md +80 -0
- package/bundled-skills/react-native-skills/rules/ui-expo-image.md +66 -0
- package/bundled-skills/react-native-skills/rules/ui-image-gallery.md +104 -0
- package/bundled-skills/react-native-skills/rules/ui-measure-views.md +78 -0
- package/bundled-skills/react-native-skills/rules/ui-menus.md +174 -0
- package/bundled-skills/react-native-skills/rules/ui-native-modals.md +77 -0
- package/bundled-skills/react-native-skills/rules/ui-pressable.md +61 -0
- package/bundled-skills/react-native-skills/rules/ui-safe-area-scroll.md +65 -0
- package/bundled-skills/react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
- package/bundled-skills/react-native-skills/rules/ui-styling.md +87 -0
- package/bundled-skills/schema-markup-generator/SKILL.md +1 -1
- package/bundled-skills/skill-issue/SKILL.md +73 -0
- package/bundled-skills/social-metadata-hardening/SKILL.md +4 -3
- package/bundled-skills/social-post-writer-seo/SKILL.md +19 -0
- package/bundled-skills/tdd-workflows/SKILL.md +35 -0
- package/bundled-skills/user-thoughts/SKILL.md +236 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/README.ai.md +13 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/define.ini +3 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/README.ai.md +25 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/backlog.md +19 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/dev-stack.md +7 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/general.md +7 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/plans.md +7 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/rules.md +7 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/ui/details.md +7 -0
- package/bundled-skills/user-thoughts/assets/Runtime-Template/mdbase/details/ui/outline.md +7 -0
- package/bundled-skills/user-thoughts/references/commands.md +54 -0
- package/bundled-skills/user-thoughts/references/edge-cases.md +84 -0
- package/bundled-skills/user-thoughts/references/safety.md +65 -0
- package/bundled-skills/user-thoughts/references/sortin.md +76 -0
- package/bundled-skills/user-thoughts/scripts/common.py +62 -0
- package/bundled-skills/user-thoughts/scripts/ignore_ops.py +125 -0
- package/bundled-skills/user-thoughts/scripts/init.py +63 -0
- package/bundled-skills/user-thoughts/scripts/show_mdbase.py +93 -0
- package/bundled-skills/user-thoughts/scripts/show_raw.py +42 -0
- package/bundled-skills/user-thoughts/scripts/sortin.py +211 -0
- package/bundled-skills/user-thoughts/scripts/status.py +56 -0
- package/bundled-skills/user-thoughts/scripts/toggle.py +68 -0
- package/bundled-skills/user-thoughts/scripts/write_raw.py +106 -0
- package/bundled-skills/vercel-cli-with-tokens/SKILL.md +361 -0
- package/bundled-skills/vercel-optimize/CONTRIBUTING.md +41 -0
- package/bundled-skills/vercel-optimize/SKILL.md +331 -0
- package/bundled-skills/vercel-optimize/lib/auth-route.mjs +23 -0
- package/bundled-skills/vercel-optimize/lib/budget-summary.mjs +182 -0
- package/bundled-skills/vercel-optimize/lib/citations.mjs +139 -0
- package/bundled-skills/vercel-optimize/lib/cost-coverage.mjs +143 -0
- package/bundled-skills/vercel-optimize/lib/dedup-recs.mjs +325 -0
- package/bundled-skills/vercel-optimize/lib/deep-dive.mjs +350 -0
- package/bundled-skills/vercel-optimize/lib/display-labels.mjs +185 -0
- package/bundled-skills/vercel-optimize/lib/extract-claims.mjs +550 -0
- package/bundled-skills/vercel-optimize/lib/framework-support.mjs +67 -0
- package/bundled-skills/vercel-optimize/lib/gates/build-minutes-fanout.mjs +69 -0
- package/bundled-skills/vercel-optimize/lib/gates/cold-start.mjs +66 -0
- package/bundled-skills/vercel-optimize/lib/gates/contract.mjs +79 -0
- package/bundled-skills/vercel-optimize/lib/gates/cwv-poor.mjs +87 -0
- package/bundled-skills/vercel-optimize/lib/gates/external-api-slow.mjs +55 -0
- package/bundled-skills/vercel-optimize/lib/gates/hard-gates.mjs +73 -0
- package/bundled-skills/vercel-optimize/lib/gates/index.mjs +45 -0
- package/bundled-skills/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -0
- package/bundled-skills/vercel-optimize/lib/gates/middleware-heavy.mjs +51 -0
- package/bundled-skills/vercel-optimize/lib/gates/observability-events-attribution.mjs +56 -0
- package/bundled-skills/vercel-optimize/lib/gates/platform-bot-protection.mjs +115 -0
- package/bundled-skills/vercel-optimize/lib/gates/platform-fluid-compute.mjs +83 -0
- package/bundled-skills/vercel-optimize/lib/gates/region-misconfig.mjs +64 -0
- package/bundled-skills/vercel-optimize/lib/gates/route-errors.mjs +80 -0
- package/bundled-skills/vercel-optimize/lib/gates/scanner-driven.mjs +122 -0
- package/bundled-skills/vercel-optimize/lib/gates/select-candidates.mjs +134 -0
- package/bundled-skills/vercel-optimize/lib/gates/slow-route.mjs +88 -0
- package/bundled-skills/vercel-optimize/lib/gates/types.d.ts +38 -0
- package/bundled-skills/vercel-optimize/lib/gates/uncached-route.mjs +93 -0
- package/bundled-skills/vercel-optimize/lib/gates/usage-spike-triage.mjs +121 -0
- package/bundled-skills/vercel-optimize/lib/grade-recommendation.mjs +155 -0
- package/bundled-skills/vercel-optimize/lib/impact-label.mjs +126 -0
- package/bundled-skills/vercel-optimize/lib/impact-magnitude.mjs +60 -0
- package/bundled-skills/vercel-optimize/lib/investigation-brief.mjs +610 -0
- package/bundled-skills/vercel-optimize/lib/observation-safety.mjs +174 -0
- package/bundled-skills/vercel-optimize/lib/project-facts.mjs +99 -0
- package/bundled-skills/vercel-optimize/lib/queries.mjs +315 -0
- package/bundled-skills/vercel-optimize/lib/reconcile-candidates.mjs +372 -0
- package/bundled-skills/vercel-optimize/lib/render-report.mjs +955 -0
- package/bundled-skills/vercel-optimize/lib/repo-root.mjs +86 -0
- package/bundled-skills/vercel-optimize/lib/route-normalize.mjs +220 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +38 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +30 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/count-correct.mjs +52 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +38 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/index.mjs +79 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +36 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/pre-release.mjs +74 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/rate-limit.mjs +67 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +38 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +78 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -0
- package/bundled-skills/vercel-optimize/lib/sanitizers/window-units.mjs +32 -0
- package/bundled-skills/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +109 -0
- package/bundled-skills/vercel-optimize/lib/scanners/edge-heavy-import.mjs +94 -0
- package/bundled-skills/vercel-optimize/lib/scanners/force-dynamic.mjs +42 -0
- package/bundled-skills/vercel-optimize/lib/scanners/headers-in-page.mjs +44 -0
- package/bundled-skills/vercel-optimize/lib/scanners/index.mjs +35 -0
- package/bundled-skills/vercel-optimize/lib/scanners/large-static-asset.mjs +92 -0
- package/bundled-skills/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +42 -0
- package/bundled-skills/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +55 -0
- package/bundled-skills/vercel-optimize/lib/scanners/missing-cache-headers.mjs +90 -0
- package/bundled-skills/vercel-optimize/lib/scanners/prisma-include-tree.mjs +42 -0
- package/bundled-skills/vercel-optimize/lib/scanners/region-pin-in-config.mjs +88 -0
- package/bundled-skills/vercel-optimize/lib/scanners/source-maps-production.mjs +36 -0
- package/bundled-skills/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +43 -0
- package/bundled-skills/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +129 -0
- package/bundled-skills/vercel-optimize/lib/scanners/unoptimized-image.mjs +113 -0
- package/bundled-skills/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +106 -0
- package/bundled-skills/vercel-optimize/lib/support-topics.mjs +355 -0
- package/bundled-skills/vercel-optimize/lib/throttle.mjs +273 -0
- package/bundled-skills/vercel-optimize/lib/util.mjs +17 -0
- package/bundled-skills/vercel-optimize/lib/vercel.mjs +784 -0
- package/bundled-skills/vercel-optimize/lib/verify-claim.mjs +1296 -0
- package/bundled-skills/vercel-optimize/lib/workspace-resolver.mjs +521 -0
- package/bundled-skills/vercel-optimize/references/candidates.md +176 -0
- package/bundled-skills/vercel-optimize/references/data-collection.md +218 -0
- package/bundled-skills/vercel-optimize/references/docs-library.json +683 -0
- package/bundled-skills/vercel-optimize/references/doctrine.md +105 -0
- package/bundled-skills/vercel-optimize/references/observability-plus.md +108 -0
- package/bundled-skills/vercel-optimize/references/playbooks/README.md +53 -0
- package/bundled-skills/vercel-optimize/references/playbooks/ai-application.md +32 -0
- package/bundled-skills/vercel-optimize/references/playbooks/api-service.md +30 -0
- package/bundled-skills/vercel-optimize/references/playbooks/content-site.md +30 -0
- package/bundled-skills/vercel-optimize/references/playbooks/ecommerce.md +30 -0
- package/bundled-skills/vercel-optimize/references/playbooks/marketing.md +30 -0
- package/bundled-skills/vercel-optimize/references/playbooks/saas.md +31 -0
- package/bundled-skills/vercel-optimize/references/playbooks/sveltekit.md +75 -0
- package/bundled-skills/vercel-optimize/references/recommendations.md +203 -0
- package/bundled-skills/vercel-optimize/references/scanner-patterns.md +251 -0
- package/bundled-skills/vercel-optimize/references/scoring.md +205 -0
- package/bundled-skills/vercel-optimize/references/support-topics/README.md +46 -0
- package/bundled-skills/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/database-egress-pooling-region.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/external-api-critical-path.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/fluid-compute-caveats.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/function-duration-io-and-after.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/function-invocation-reduction.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/image-optimization-cost-control.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/post-response-work-waituntil.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/route-error-durable-offload.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/route-error-runtime-limits.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/usage-spike-triage.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +23 -0
- package/bundled-skills/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +22 -0
- package/bundled-skills/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +23 -0
- package/bundled-skills/vercel-optimize/references/verification.md +102 -0
- package/bundled-skills/vercel-optimize/references/voice.md +76 -0
- package/bundled-skills/vercel-optimize/scripts/budget-summary.mjs +56 -0
- package/bundled-skills/vercel-optimize/scripts/build-docs.mjs +74 -0
- package/bundled-skills/vercel-optimize/scripts/check-citations.mjs +81 -0
- package/bundled-skills/vercel-optimize/scripts/check-docs-fresh.mjs +93 -0
- package/bundled-skills/vercel-optimize/scripts/collect-signals.mjs +576 -0
- package/bundled-skills/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +296 -0
- package/bundled-skills/vercel-optimize/scripts/deep-dive.mjs +319 -0
- package/bundled-skills/vercel-optimize/scripts/gate-investigations.mjs +166 -0
- package/bundled-skills/vercel-optimize/scripts/merge-signals.mjs +192 -0
- package/bundled-skills/vercel-optimize/scripts/prepare-investigation-brief.mjs +231 -0
- package/bundled-skills/vercel-optimize/scripts/reconcile-candidates.mjs +62 -0
- package/bundled-skills/vercel-optimize/scripts/render-report.mjs +437 -0
- package/bundled-skills/vercel-optimize/scripts/scan-codebase.mjs +313 -0
- package/bundled-skills/vercel-optimize/scripts/verify-and-regen.mjs +346 -0
- package/bundled-skills/vercel-optimize/scripts/verify-finding.mjs +19 -0
- package/bundled-skills/vercel-react-view-transitions/SKILL.md +327 -0
- package/bundled-skills/vercel-react-view-transitions/references/css-recipes.md +242 -0
- package/bundled-skills/vercel-react-view-transitions/references/implementation.md +182 -0
- package/bundled-skills/vercel-react-view-transitions/references/nextjs.md +176 -0
- package/bundled-skills/vercel-react-view-transitions/references/patterns.md +262 -0
- package/bundled-skills/vibe-code-cleanup/SKILL.md +4 -4
- package/bundled-skills/vibecode-production-qa-validator/SKILL.md +3 -2
- package/package.json +1 -1
- package/skills_index.json +338 -4
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Vercel Deployment Script for Codex (via claimable deploy endpoint)
|
|
4
|
+
# Usage: ./deploy-codex.sh [project-path]
|
|
5
|
+
# Returns: JSON with previewUrl, claimUrl, deploymentId, projectId
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
DEPLOY_ENDPOINT="https://codex-deploy-skills.vercel.sh/api/deploy"
|
|
10
|
+
|
|
11
|
+
# Detect framework from package.json
|
|
12
|
+
detect_framework() {
|
|
13
|
+
local pkg_json="$1"
|
|
14
|
+
|
|
15
|
+
if [ ! -f "$pkg_json" ]; then
|
|
16
|
+
echo "null"
|
|
17
|
+
return
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
local content=$(cat "$pkg_json")
|
|
21
|
+
|
|
22
|
+
# Helper to check if a package exists in dependencies or devDependencies.
|
|
23
|
+
# Use exact matching by default, with a separate prefix matcher for scoped
|
|
24
|
+
# package families like "@remix-run/".
|
|
25
|
+
has_dep_exact() {
|
|
26
|
+
echo "$content" | grep -q "\"$1\""
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
has_dep_prefix() {
|
|
30
|
+
echo "$content" | grep -q "\"$1"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Order matters - check more specific frameworks first
|
|
34
|
+
|
|
35
|
+
# Blitz
|
|
36
|
+
if has_dep_exact "blitz"; then echo "blitzjs"; return; fi
|
|
37
|
+
|
|
38
|
+
# Next.js
|
|
39
|
+
if has_dep_exact "next"; then echo "nextjs"; return; fi
|
|
40
|
+
|
|
41
|
+
# Gatsby
|
|
42
|
+
if has_dep_exact "gatsby"; then echo "gatsby"; return; fi
|
|
43
|
+
|
|
44
|
+
# Remix
|
|
45
|
+
if has_dep_prefix "@remix-run/"; then echo "remix"; return; fi
|
|
46
|
+
|
|
47
|
+
# React Router (v7 framework mode)
|
|
48
|
+
if has_dep_prefix "@react-router/"; then echo "react-router"; return; fi
|
|
49
|
+
|
|
50
|
+
# TanStack Start
|
|
51
|
+
if has_dep_exact "@tanstack/start"; then echo "tanstack-start"; return; fi
|
|
52
|
+
|
|
53
|
+
# Astro
|
|
54
|
+
if has_dep_exact "astro"; then echo "astro"; return; fi
|
|
55
|
+
|
|
56
|
+
# Hydrogen (Shopify)
|
|
57
|
+
if has_dep_exact "@shopify/hydrogen"; then echo "hydrogen"; return; fi
|
|
58
|
+
|
|
59
|
+
# SvelteKit
|
|
60
|
+
if has_dep_exact "@sveltejs/kit"; then echo "sveltekit-1"; return; fi
|
|
61
|
+
|
|
62
|
+
# Svelte (standalone)
|
|
63
|
+
if has_dep_exact "svelte"; then echo "svelte"; return; fi
|
|
64
|
+
|
|
65
|
+
# Nuxt
|
|
66
|
+
if has_dep_exact "nuxt"; then echo "nuxtjs"; return; fi
|
|
67
|
+
|
|
68
|
+
# Vue with Vitepress
|
|
69
|
+
if has_dep_exact "vitepress"; then echo "vitepress"; return; fi
|
|
70
|
+
|
|
71
|
+
# Vue with Vuepress
|
|
72
|
+
if has_dep_exact "vuepress"; then echo "vuepress"; return; fi
|
|
73
|
+
|
|
74
|
+
# Gridsome
|
|
75
|
+
if has_dep_exact "gridsome"; then echo "gridsome"; return; fi
|
|
76
|
+
|
|
77
|
+
# SolidStart
|
|
78
|
+
if has_dep_exact "@solidjs/start"; then echo "solidstart-1"; return; fi
|
|
79
|
+
|
|
80
|
+
# Docusaurus
|
|
81
|
+
if has_dep_exact "@docusaurus/core"; then echo "docusaurus-2"; return; fi
|
|
82
|
+
|
|
83
|
+
# RedwoodJS
|
|
84
|
+
if has_dep_prefix "@redwoodjs/"; then echo "redwoodjs"; return; fi
|
|
85
|
+
|
|
86
|
+
# Hexo
|
|
87
|
+
if has_dep_exact "hexo"; then echo "hexo"; return; fi
|
|
88
|
+
|
|
89
|
+
# Eleventy
|
|
90
|
+
if has_dep_exact "@11ty/eleventy"; then echo "eleventy"; return; fi
|
|
91
|
+
|
|
92
|
+
# Angular / Ionic Angular
|
|
93
|
+
if has_dep_exact "@ionic/angular"; then echo "ionic-angular"; return; fi
|
|
94
|
+
if has_dep_exact "@angular/core"; then echo "angular"; return; fi
|
|
95
|
+
|
|
96
|
+
# Ionic React
|
|
97
|
+
if has_dep_exact "@ionic/react"; then echo "ionic-react"; return; fi
|
|
98
|
+
|
|
99
|
+
# Create React App
|
|
100
|
+
if has_dep_exact "react-scripts"; then echo "create-react-app"; return; fi
|
|
101
|
+
|
|
102
|
+
# Ember
|
|
103
|
+
if has_dep_exact "ember-cli" || has_dep_exact "ember-source"; then echo "ember"; return; fi
|
|
104
|
+
|
|
105
|
+
# Dojo
|
|
106
|
+
if has_dep_exact "@dojo/framework"; then echo "dojo"; return; fi
|
|
107
|
+
|
|
108
|
+
# Polymer
|
|
109
|
+
if has_dep_prefix "@polymer/"; then echo "polymer"; return; fi
|
|
110
|
+
|
|
111
|
+
# Preact
|
|
112
|
+
if has_dep_exact "preact"; then echo "preact"; return; fi
|
|
113
|
+
|
|
114
|
+
# Stencil
|
|
115
|
+
if has_dep_exact "@stencil/core"; then echo "stencil"; return; fi
|
|
116
|
+
|
|
117
|
+
# UmiJS
|
|
118
|
+
if has_dep_exact "umi"; then echo "umijs"; return; fi
|
|
119
|
+
|
|
120
|
+
# Sapper (legacy Svelte)
|
|
121
|
+
if has_dep_exact "sapper"; then echo "sapper"; return; fi
|
|
122
|
+
|
|
123
|
+
# Saber
|
|
124
|
+
if has_dep_exact "saber"; then echo "saber"; return; fi
|
|
125
|
+
|
|
126
|
+
# Sanity
|
|
127
|
+
if has_dep_exact "sanity"; then echo "sanity-v3"; return; fi
|
|
128
|
+
if has_dep_prefix "@sanity/"; then echo "sanity"; return; fi
|
|
129
|
+
|
|
130
|
+
# Storybook
|
|
131
|
+
if has_dep_prefix "@storybook/"; then echo "storybook"; return; fi
|
|
132
|
+
|
|
133
|
+
# NestJS
|
|
134
|
+
if has_dep_exact "@nestjs/core"; then echo "nestjs"; return; fi
|
|
135
|
+
|
|
136
|
+
# Elysia
|
|
137
|
+
if has_dep_exact "elysia"; then echo "elysia"; return; fi
|
|
138
|
+
|
|
139
|
+
# Hono
|
|
140
|
+
if has_dep_exact "hono"; then echo "hono"; return; fi
|
|
141
|
+
|
|
142
|
+
# Fastify
|
|
143
|
+
if has_dep_exact "fastify"; then echo "fastify"; return; fi
|
|
144
|
+
|
|
145
|
+
# h3
|
|
146
|
+
if has_dep_exact "h3"; then echo "h3"; return; fi
|
|
147
|
+
|
|
148
|
+
# Nitro
|
|
149
|
+
if has_dep_exact "nitropack"; then echo "nitro"; return; fi
|
|
150
|
+
|
|
151
|
+
# Express
|
|
152
|
+
if has_dep_exact "express"; then echo "express"; return; fi
|
|
153
|
+
|
|
154
|
+
# Vite (generic - check last among JS frameworks)
|
|
155
|
+
if has_dep_exact "vite"; then echo "vite"; return; fi
|
|
156
|
+
|
|
157
|
+
# Parcel
|
|
158
|
+
if has_dep_exact "parcel"; then echo "parcel"; return; fi
|
|
159
|
+
|
|
160
|
+
# No framework detected
|
|
161
|
+
echo "null"
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# Parse arguments
|
|
165
|
+
INPUT_PATH="${1:-.}"
|
|
166
|
+
|
|
167
|
+
# Create temp directory for packaging
|
|
168
|
+
TEMP_DIR=$(mktemp -d)
|
|
169
|
+
TARBALL="$TEMP_DIR/project.tgz"
|
|
170
|
+
STAGING_DIR="$TEMP_DIR/staging"
|
|
171
|
+
CLEANUP_TEMP=true
|
|
172
|
+
|
|
173
|
+
cleanup() {
|
|
174
|
+
if [ "$CLEANUP_TEMP" = true ]; then
|
|
175
|
+
rm -rf "$TEMP_DIR"
|
|
176
|
+
fi
|
|
177
|
+
}
|
|
178
|
+
trap cleanup EXIT
|
|
179
|
+
|
|
180
|
+
echo "Preparing deployment..." >&2
|
|
181
|
+
|
|
182
|
+
# Check if input is a .tgz file or a directory
|
|
183
|
+
FRAMEWORK="null"
|
|
184
|
+
|
|
185
|
+
if [ -f "$INPUT_PATH" ] && [[ "$INPUT_PATH" == *.tgz ]]; then
|
|
186
|
+
# Input is already a tarball, use it directly
|
|
187
|
+
echo "Using provided tarball..." >&2
|
|
188
|
+
TARBALL="$INPUT_PATH"
|
|
189
|
+
CLEANUP_TEMP=false
|
|
190
|
+
# Can't detect framework from tarball, leave as null
|
|
191
|
+
elif [ -d "$INPUT_PATH" ]; then
|
|
192
|
+
# Input is a directory, need to tar it
|
|
193
|
+
PROJECT_PATH=$(cd "$INPUT_PATH" && pwd)
|
|
194
|
+
|
|
195
|
+
# Detect framework from package.json
|
|
196
|
+
FRAMEWORK=$(detect_framework "$PROJECT_PATH/package.json")
|
|
197
|
+
|
|
198
|
+
# Stage files into a temporary directory to avoid mutating the source tree.
|
|
199
|
+
mkdir -p "$STAGING_DIR"
|
|
200
|
+
echo "Staging project files..." >&2
|
|
201
|
+
tar -C "$PROJECT_PATH" \
|
|
202
|
+
--exclude='node_modules' \
|
|
203
|
+
--exclude='.git' \
|
|
204
|
+
--exclude='.env' \
|
|
205
|
+
--exclude='.env.*' \
|
|
206
|
+
-cf - . | tar -C "$STAGING_DIR" -xf -
|
|
207
|
+
|
|
208
|
+
# Check if this is a static HTML project (no package.json)
|
|
209
|
+
if [ ! -f "$PROJECT_PATH/package.json" ]; then
|
|
210
|
+
# Find HTML files in root
|
|
211
|
+
HTML_FILES=$(find "$STAGING_DIR" -maxdepth 1 -name "*.html" -type f)
|
|
212
|
+
HTML_COUNT=$(printf '%s\n' "$HTML_FILES" | sed '/^$/d' | wc -l | tr -d '[:space:]')
|
|
213
|
+
|
|
214
|
+
# If there's exactly one HTML file and it's not index.html, rename it
|
|
215
|
+
if [ "$HTML_COUNT" -eq 1 ]; then
|
|
216
|
+
HTML_FILE=$(echo "$HTML_FILES" | head -1)
|
|
217
|
+
BASENAME=$(basename "$HTML_FILE")
|
|
218
|
+
if [ "$BASENAME" != "index.html" ]; then
|
|
219
|
+
echo "Renaming $BASENAME to index.html..." >&2
|
|
220
|
+
mv "$HTML_FILE" "$STAGING_DIR/index.html"
|
|
221
|
+
fi
|
|
222
|
+
fi
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
# Create tarball from the staging directory
|
|
226
|
+
echo "Creating deployment package..." >&2
|
|
227
|
+
tar -czf "$TARBALL" -C "$STAGING_DIR" .
|
|
228
|
+
else
|
|
229
|
+
echo "Error: Input must be a directory or a .tgz file" >&2
|
|
230
|
+
exit 1
|
|
231
|
+
fi
|
|
232
|
+
|
|
233
|
+
if [ "$FRAMEWORK" != "null" ]; then
|
|
234
|
+
echo "Detected framework: $FRAMEWORK" >&2
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
# Deploy
|
|
238
|
+
echo "Deploying..." >&2
|
|
239
|
+
RESPONSE=$(curl -s -X POST "$DEPLOY_ENDPOINT" -F "file=@$TARBALL" -F "framework=$FRAMEWORK")
|
|
240
|
+
|
|
241
|
+
# Check for error in response
|
|
242
|
+
if echo "$RESPONSE" | grep -q '"error"'; then
|
|
243
|
+
ERROR_MSG=$(echo "$RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
|
|
244
|
+
echo "Error: $ERROR_MSG" >&2
|
|
245
|
+
exit 1
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
# Extract URLs from response
|
|
249
|
+
PREVIEW_URL=$(echo "$RESPONSE" | grep -o '"previewUrl":"[^"]*"' | cut -d'"' -f4)
|
|
250
|
+
CLAIM_URL=$(echo "$RESPONSE" | grep -o '"claimUrl":"[^"]*"' | cut -d'"' -f4)
|
|
251
|
+
|
|
252
|
+
if [ -z "$PREVIEW_URL" ]; then
|
|
253
|
+
echo "Error: Could not extract preview URL from response" >&2
|
|
254
|
+
echo "$RESPONSE" >&2
|
|
255
|
+
exit 1
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
echo "Deployment started. Waiting for build to complete..." >&2
|
|
259
|
+
echo "Preview URL: $PREVIEW_URL" >&2
|
|
260
|
+
|
|
261
|
+
# Poll the preview URL until it returns a non-5xx response (5xx = still building)
|
|
262
|
+
MAX_ATTEMPTS=60 # 5 minutes max (60 * 5 seconds)
|
|
263
|
+
ATTEMPT=0
|
|
264
|
+
|
|
265
|
+
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|
266
|
+
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$PREVIEW_URL")
|
|
267
|
+
|
|
268
|
+
if [ "$HTTP_STATUS" -eq 200 ]; then
|
|
269
|
+
echo "" >&2
|
|
270
|
+
echo "Deployment ready!" >&2
|
|
271
|
+
break
|
|
272
|
+
elif [ "$HTTP_STATUS" -ge 500 ]; then
|
|
273
|
+
# 5xx means still building/deploying
|
|
274
|
+
echo "Building... (attempt $((ATTEMPT + 1))/$MAX_ATTEMPTS)" >&2
|
|
275
|
+
sleep 5
|
|
276
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
277
|
+
elif [ "$HTTP_STATUS" -ge 400 ] && [ "$HTTP_STATUS" -lt 500 ]; then
|
|
278
|
+
# 4xx might be an error or the app itself returns 4xx - it's responding
|
|
279
|
+
echo "" >&2
|
|
280
|
+
echo "Deployment ready (returned $HTTP_STATUS)!" >&2
|
|
281
|
+
break
|
|
282
|
+
else
|
|
283
|
+
# Any other status, assume it's ready
|
|
284
|
+
echo "" >&2
|
|
285
|
+
echo "Deployment ready!" >&2
|
|
286
|
+
break
|
|
287
|
+
fi
|
|
288
|
+
done
|
|
289
|
+
|
|
290
|
+
if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
|
|
291
|
+
echo "" >&2
|
|
292
|
+
echo "Warning: Timed out waiting for deployment, but it may still be building." >&2
|
|
293
|
+
fi
|
|
294
|
+
|
|
295
|
+
echo "" >&2
|
|
296
|
+
echo "Preview URL: $PREVIEW_URL" >&2
|
|
297
|
+
echo "Claim URL: $CLAIM_URL" >&2
|
|
298
|
+
echo "" >&2
|
|
299
|
+
|
|
300
|
+
# Output JSON for programmatic use
|
|
301
|
+
echo "$RESPONSE"
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Vercel Deployment Script (via claimable deploy endpoint)
|
|
4
|
+
# Usage: ./deploy.sh [project-path]
|
|
5
|
+
# Returns: JSON with previewUrl, claimUrl, deploymentId, projectId
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
DEPLOY_ENDPOINT="https://claude-skills-deploy.vercel.com/api/deploy"
|
|
10
|
+
|
|
11
|
+
# Detect framework from package.json
|
|
12
|
+
detect_framework() {
|
|
13
|
+
local pkg_json="$1"
|
|
14
|
+
|
|
15
|
+
if [ ! -f "$pkg_json" ]; then
|
|
16
|
+
echo "null"
|
|
17
|
+
return
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
local content=$(cat "$pkg_json")
|
|
21
|
+
|
|
22
|
+
# Helper to check if a package exists in dependencies or devDependencies.
|
|
23
|
+
# Use exact matching by default, with a separate prefix matcher for scoped
|
|
24
|
+
# package families like "@remix-run/".
|
|
25
|
+
has_dep_exact() {
|
|
26
|
+
echo "$content" | grep -q "\"$1\""
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
has_dep_prefix() {
|
|
30
|
+
echo "$content" | grep -q "\"$1"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Order matters - check more specific frameworks first
|
|
34
|
+
|
|
35
|
+
# Blitz
|
|
36
|
+
if has_dep_exact "blitz"; then echo "blitzjs"; return; fi
|
|
37
|
+
|
|
38
|
+
# Next.js
|
|
39
|
+
if has_dep_exact "next"; then echo "nextjs"; return; fi
|
|
40
|
+
|
|
41
|
+
# Gatsby
|
|
42
|
+
if has_dep_exact "gatsby"; then echo "gatsby"; return; fi
|
|
43
|
+
|
|
44
|
+
# Remix
|
|
45
|
+
if has_dep_prefix "@remix-run/"; then echo "remix"; return; fi
|
|
46
|
+
|
|
47
|
+
# React Router (v7 framework mode)
|
|
48
|
+
if has_dep_prefix "@react-router/"; then echo "react-router"; return; fi
|
|
49
|
+
|
|
50
|
+
# TanStack Start
|
|
51
|
+
if has_dep_exact "@tanstack/start"; then echo "tanstack-start"; return; fi
|
|
52
|
+
|
|
53
|
+
# Astro
|
|
54
|
+
if has_dep_exact "astro"; then echo "astro"; return; fi
|
|
55
|
+
|
|
56
|
+
# Hydrogen (Shopify)
|
|
57
|
+
if has_dep_exact "@shopify/hydrogen"; then echo "hydrogen"; return; fi
|
|
58
|
+
|
|
59
|
+
# SvelteKit
|
|
60
|
+
if has_dep_exact "@sveltejs/kit"; then echo "sveltekit-1"; return; fi
|
|
61
|
+
|
|
62
|
+
# Svelte (standalone)
|
|
63
|
+
if has_dep_exact "svelte"; then echo "svelte"; return; fi
|
|
64
|
+
|
|
65
|
+
# Nuxt
|
|
66
|
+
if has_dep_exact "nuxt"; then echo "nuxtjs"; return; fi
|
|
67
|
+
|
|
68
|
+
# Vue with Vitepress
|
|
69
|
+
if has_dep_exact "vitepress"; then echo "vitepress"; return; fi
|
|
70
|
+
|
|
71
|
+
# Vue with Vuepress
|
|
72
|
+
if has_dep_exact "vuepress"; then echo "vuepress"; return; fi
|
|
73
|
+
|
|
74
|
+
# Gridsome
|
|
75
|
+
if has_dep_exact "gridsome"; then echo "gridsome"; return; fi
|
|
76
|
+
|
|
77
|
+
# SolidStart
|
|
78
|
+
if has_dep_exact "@solidjs/start"; then echo "solidstart-1"; return; fi
|
|
79
|
+
|
|
80
|
+
# Docusaurus
|
|
81
|
+
if has_dep_exact "@docusaurus/core"; then echo "docusaurus-2"; return; fi
|
|
82
|
+
|
|
83
|
+
# RedwoodJS
|
|
84
|
+
if has_dep_prefix "@redwoodjs/"; then echo "redwoodjs"; return; fi
|
|
85
|
+
|
|
86
|
+
# Hexo
|
|
87
|
+
if has_dep_exact "hexo"; then echo "hexo"; return; fi
|
|
88
|
+
|
|
89
|
+
# Eleventy
|
|
90
|
+
if has_dep_exact "@11ty/eleventy"; then echo "eleventy"; return; fi
|
|
91
|
+
|
|
92
|
+
# Angular / Ionic Angular
|
|
93
|
+
if has_dep_exact "@ionic/angular"; then echo "ionic-angular"; return; fi
|
|
94
|
+
if has_dep_exact "@angular/core"; then echo "angular"; return; fi
|
|
95
|
+
|
|
96
|
+
# Ionic React
|
|
97
|
+
if has_dep_exact "@ionic/react"; then echo "ionic-react"; return; fi
|
|
98
|
+
|
|
99
|
+
# Create React App
|
|
100
|
+
if has_dep_exact "react-scripts"; then echo "create-react-app"; return; fi
|
|
101
|
+
|
|
102
|
+
# Ember
|
|
103
|
+
if has_dep_exact "ember-cli" || has_dep_exact "ember-source"; then echo "ember"; return; fi
|
|
104
|
+
|
|
105
|
+
# Dojo
|
|
106
|
+
if has_dep_exact "@dojo/framework"; then echo "dojo"; return; fi
|
|
107
|
+
|
|
108
|
+
# Polymer
|
|
109
|
+
if has_dep_prefix "@polymer/"; then echo "polymer"; return; fi
|
|
110
|
+
|
|
111
|
+
# Preact
|
|
112
|
+
if has_dep_exact "preact"; then echo "preact"; return; fi
|
|
113
|
+
|
|
114
|
+
# Stencil
|
|
115
|
+
if has_dep_exact "@stencil/core"; then echo "stencil"; return; fi
|
|
116
|
+
|
|
117
|
+
# UmiJS
|
|
118
|
+
if has_dep_exact "umi"; then echo "umijs"; return; fi
|
|
119
|
+
|
|
120
|
+
# Sapper (legacy Svelte)
|
|
121
|
+
if has_dep_exact "sapper"; then echo "sapper"; return; fi
|
|
122
|
+
|
|
123
|
+
# Saber
|
|
124
|
+
if has_dep_exact "saber"; then echo "saber"; return; fi
|
|
125
|
+
|
|
126
|
+
# Sanity
|
|
127
|
+
if has_dep_exact "sanity"; then echo "sanity-v3"; return; fi
|
|
128
|
+
if has_dep_prefix "@sanity/"; then echo "sanity"; return; fi
|
|
129
|
+
|
|
130
|
+
# Storybook
|
|
131
|
+
if has_dep_prefix "@storybook/"; then echo "storybook"; return; fi
|
|
132
|
+
|
|
133
|
+
# NestJS
|
|
134
|
+
if has_dep_exact "@nestjs/core"; then echo "nestjs"; return; fi
|
|
135
|
+
|
|
136
|
+
# Elysia
|
|
137
|
+
if has_dep_exact "elysia"; then echo "elysia"; return; fi
|
|
138
|
+
|
|
139
|
+
# Hono
|
|
140
|
+
if has_dep_exact "hono"; then echo "hono"; return; fi
|
|
141
|
+
|
|
142
|
+
# Fastify
|
|
143
|
+
if has_dep_exact "fastify"; then echo "fastify"; return; fi
|
|
144
|
+
|
|
145
|
+
# h3
|
|
146
|
+
if has_dep_exact "h3"; then echo "h3"; return; fi
|
|
147
|
+
|
|
148
|
+
# Nitro
|
|
149
|
+
if has_dep_exact "nitropack"; then echo "nitro"; return; fi
|
|
150
|
+
|
|
151
|
+
# Express
|
|
152
|
+
if has_dep_exact "express"; then echo "express"; return; fi
|
|
153
|
+
|
|
154
|
+
# Vite (generic - check last among JS frameworks)
|
|
155
|
+
if has_dep_exact "vite"; then echo "vite"; return; fi
|
|
156
|
+
|
|
157
|
+
# Parcel
|
|
158
|
+
if has_dep_exact "parcel"; then echo "parcel"; return; fi
|
|
159
|
+
|
|
160
|
+
# No framework detected
|
|
161
|
+
echo "null"
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# Parse arguments
|
|
165
|
+
INPUT_PATH="${1:-.}"
|
|
166
|
+
|
|
167
|
+
# Create temp directory for packaging
|
|
168
|
+
TEMP_DIR=$(mktemp -d)
|
|
169
|
+
TARBALL="$TEMP_DIR/project.tgz"
|
|
170
|
+
STAGING_DIR="$TEMP_DIR/staging"
|
|
171
|
+
CLEANUP_TEMP=true
|
|
172
|
+
|
|
173
|
+
cleanup() {
|
|
174
|
+
if [ "$CLEANUP_TEMP" = true ]; then
|
|
175
|
+
rm -rf "$TEMP_DIR"
|
|
176
|
+
fi
|
|
177
|
+
}
|
|
178
|
+
trap cleanup EXIT
|
|
179
|
+
|
|
180
|
+
echo "Preparing deployment..." >&2
|
|
181
|
+
|
|
182
|
+
# Check if input is a .tgz file or a directory
|
|
183
|
+
FRAMEWORK="null"
|
|
184
|
+
|
|
185
|
+
if [ -f "$INPUT_PATH" ] && [[ "$INPUT_PATH" == *.tgz ]]; then
|
|
186
|
+
# Input is already a tarball, use it directly
|
|
187
|
+
echo "Using provided tarball..." >&2
|
|
188
|
+
TARBALL="$INPUT_PATH"
|
|
189
|
+
CLEANUP_TEMP=false
|
|
190
|
+
# Can't detect framework from tarball, leave as null
|
|
191
|
+
elif [ -d "$INPUT_PATH" ]; then
|
|
192
|
+
# Input is a directory, need to tar it
|
|
193
|
+
PROJECT_PATH=$(cd "$INPUT_PATH" && pwd)
|
|
194
|
+
|
|
195
|
+
# Detect framework from package.json
|
|
196
|
+
FRAMEWORK=$(detect_framework "$PROJECT_PATH/package.json")
|
|
197
|
+
|
|
198
|
+
# Stage files into a temporary directory to avoid mutating the source tree.
|
|
199
|
+
mkdir -p "$STAGING_DIR"
|
|
200
|
+
echo "Staging project files..." >&2
|
|
201
|
+
tar -C "$PROJECT_PATH" \
|
|
202
|
+
--exclude='node_modules' \
|
|
203
|
+
--exclude='.git' \
|
|
204
|
+
--exclude='.env' \
|
|
205
|
+
--exclude='.env.*' \
|
|
206
|
+
-cf - . | tar -C "$STAGING_DIR" -xf -
|
|
207
|
+
|
|
208
|
+
# Check if this is a static HTML project (no package.json)
|
|
209
|
+
if [ ! -f "$PROJECT_PATH/package.json" ]; then
|
|
210
|
+
# Find HTML files in root
|
|
211
|
+
HTML_FILES=$(find "$STAGING_DIR" -maxdepth 1 -name "*.html" -type f)
|
|
212
|
+
HTML_COUNT=$(printf '%s\n' "$HTML_FILES" | sed '/^$/d' | wc -l | tr -d '[:space:]')
|
|
213
|
+
|
|
214
|
+
# If there's exactly one HTML file and it's not index.html, rename it
|
|
215
|
+
if [ "$HTML_COUNT" -eq 1 ]; then
|
|
216
|
+
HTML_FILE=$(echo "$HTML_FILES" | head -1)
|
|
217
|
+
BASENAME=$(basename "$HTML_FILE")
|
|
218
|
+
if [ "$BASENAME" != "index.html" ]; then
|
|
219
|
+
echo "Renaming $BASENAME to index.html..." >&2
|
|
220
|
+
mv "$HTML_FILE" "$STAGING_DIR/index.html"
|
|
221
|
+
fi
|
|
222
|
+
fi
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
# Create tarball from the staging directory
|
|
226
|
+
echo "Creating deployment package..." >&2
|
|
227
|
+
tar -czf "$TARBALL" -C "$STAGING_DIR" .
|
|
228
|
+
else
|
|
229
|
+
echo "Error: Input must be a directory or a .tgz file" >&2
|
|
230
|
+
exit 1
|
|
231
|
+
fi
|
|
232
|
+
|
|
233
|
+
if [ "$FRAMEWORK" != "null" ]; then
|
|
234
|
+
echo "Detected framework: $FRAMEWORK" >&2
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
# Deploy
|
|
238
|
+
echo "Deploying..." >&2
|
|
239
|
+
RESPONSE=$(curl -s -X POST "$DEPLOY_ENDPOINT" -F "file=@$TARBALL" -F "framework=$FRAMEWORK")
|
|
240
|
+
|
|
241
|
+
# Check for error in response
|
|
242
|
+
if echo "$RESPONSE" | grep -q '"error"'; then
|
|
243
|
+
ERROR_MSG=$(echo "$RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
|
|
244
|
+
echo "Error: $ERROR_MSG" >&2
|
|
245
|
+
exit 1
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
# Extract URLs from response
|
|
249
|
+
PREVIEW_URL=$(echo "$RESPONSE" | grep -o '"previewUrl":"[^"]*"' | cut -d'"' -f4)
|
|
250
|
+
CLAIM_URL=$(echo "$RESPONSE" | grep -o '"claimUrl":"[^"]*"' | cut -d'"' -f4)
|
|
251
|
+
|
|
252
|
+
if [ -z "$PREVIEW_URL" ]; then
|
|
253
|
+
echo "Error: Could not extract preview URL from response" >&2
|
|
254
|
+
echo "$RESPONSE" >&2
|
|
255
|
+
exit 1
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
echo "Deployment started. Waiting for build to complete..." >&2
|
|
259
|
+
echo "Preview URL: $PREVIEW_URL" >&2
|
|
260
|
+
|
|
261
|
+
# Poll the preview URL until it returns a non-5xx response (5xx = still building)
|
|
262
|
+
MAX_ATTEMPTS=60 # 5 minutes max (60 * 5 seconds)
|
|
263
|
+
ATTEMPT=0
|
|
264
|
+
|
|
265
|
+
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|
266
|
+
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$PREVIEW_URL")
|
|
267
|
+
|
|
268
|
+
if [ "$HTTP_STATUS" -eq 200 ]; then
|
|
269
|
+
echo "" >&2
|
|
270
|
+
echo "Deployment ready!" >&2
|
|
271
|
+
break
|
|
272
|
+
elif [ "$HTTP_STATUS" -ge 500 ]; then
|
|
273
|
+
# 5xx means still building/deploying
|
|
274
|
+
echo "Building... (attempt $((ATTEMPT + 1))/$MAX_ATTEMPTS)" >&2
|
|
275
|
+
sleep 5
|
|
276
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
277
|
+
elif [ "$HTTP_STATUS" -ge 400 ] && [ "$HTTP_STATUS" -lt 500 ]; then
|
|
278
|
+
# 4xx might be an error or the app itself returns 4xx - it's responding
|
|
279
|
+
echo "" >&2
|
|
280
|
+
echo "Deployment ready (returned $HTTP_STATUS)!" >&2
|
|
281
|
+
break
|
|
282
|
+
else
|
|
283
|
+
# Any other status, assume it's ready
|
|
284
|
+
echo "" >&2
|
|
285
|
+
echo "Deployment ready!" >&2
|
|
286
|
+
break
|
|
287
|
+
fi
|
|
288
|
+
done
|
|
289
|
+
|
|
290
|
+
if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
|
|
291
|
+
echo "" >&2
|
|
292
|
+
echo "Warning: Timed out waiting for deployment, but it may still be building." >&2
|
|
293
|
+
fi
|
|
294
|
+
|
|
295
|
+
echo "" >&2
|
|
296
|
+
echo "Preview URL: $PREVIEW_URL" >&2
|
|
297
|
+
echo "Claim URL: $CLAIM_URL" >&2
|
|
298
|
+
echo "" >&2
|
|
299
|
+
|
|
300
|
+
# Output JSON for programmatic use
|
|
301
|
+
echo "$RESPONSE"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Jetski/Cortex + Gemini Integration Guide
|
|
3
|
-
description: "Use antigravity-awesome-skills with Jetski/Cortex without hitting context-window overflow with 1,
|
|
3
|
+
description: "Use antigravity-awesome-skills with Jetski/Cortex without hitting context-window overflow with 1,508+ skills."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Jetski/Cortex + Gemini: safe integration with 1,
|
|
6
|
+
# Jetski/Cortex + Gemini: safe integration with 1,508+ skills
|
|
7
7
|
|
|
8
8
|
This guide shows how to integrate the `antigravity-awesome-skills` repository with an agent based on **Jetski/Cortex + Gemini** (or similar frameworks) **without exceeding the model context window**.
|
|
9
9
|
|
|
@@ -23,7 +23,7 @@ Never do:
|
|
|
23
23
|
- concatenate all `SKILL.md` content into a single system prompt;
|
|
24
24
|
- re-inject the entire library for **every** request.
|
|
25
25
|
|
|
26
|
-
With 1,
|
|
26
|
+
With 1,508+ skills, this approach fills the context window before user messages are even added, causing truncation.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -21,7 +21,7 @@ This example shows one way to integrate **antigravity-awesome-skills** with a Je
|
|
|
21
21
|
- How to enforce a **maximum number of skills per turn** via `maxSkillsPerTurn`.
|
|
22
22
|
- How to choose whether to **truncate or error** when too many skills are requested via `overflowBehavior`.
|
|
23
23
|
|
|
24
|
-
This pattern avoids context overflow when you have 1,
|
|
24
|
+
This pattern avoids context overflow when you have 1,508+ skills installed.
|
|
25
25
|
|
|
26
26
|
Manifest contract references:
|
|
27
27
|
|