@tangle-network/starter-foundry 0.5.4 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -5
- package/corpus/held-out-validation.json +1 -1
- package/corpus/model-rates.json +56 -0
- package/dist/cli.js +7 -4
- package/dist/cli.js.map +1 -1
- package/dist/eval/diagnoser.d.ts +37 -0
- package/dist/eval/diagnoser.js +113 -0
- package/dist/eval/diagnoser.js.map +1 -0
- package/dist/eval/propose.d.ts +20 -0
- package/dist/eval/propose.js +75 -0
- package/dist/eval/propose.js.map +1 -0
- package/dist/eval/replay.d.ts +137 -0
- package/dist/eval/replay.js +392 -0
- package/dist/eval/replay.js.map +1 -0
- package/dist/eval/scaffold-bridge.d.ts +100 -0
- package/dist/eval/scaffold-bridge.js +492 -0
- package/dist/eval/scaffold-bridge.js.map +1 -0
- package/dist/lib/ab.d.ts +61 -0
- package/dist/lib/ab.js +80 -0
- package/dist/lib/ab.js.map +1 -0
- package/dist/lib/batch-export.js +1 -11
- package/dist/lib/batch-export.js.map +1 -1
- package/dist/lib/brand/first-turn-flows.d.ts +10 -0
- package/dist/lib/brand/first-turn-flows.js +114 -0
- package/dist/lib/brand/first-turn-flows.js.map +1 -0
- package/dist/lib/brand/i18n.d.ts +15 -0
- package/dist/lib/brand/i18n.js +100 -0
- package/dist/lib/brand/i18n.js.map +1 -0
- package/dist/lib/brand/index.d.ts +27 -0
- package/dist/lib/brand/index.js +100 -0
- package/dist/lib/brand/index.js.map +1 -0
- package/dist/lib/brand/media-manifest.d.ts +26 -0
- package/dist/lib/brand/media-manifest.js +98 -0
- package/dist/lib/brand/media-manifest.js.map +1 -0
- package/dist/lib/brand/user-segments.d.ts +7 -0
- package/dist/lib/brand/user-segments.js +81 -0
- package/dist/lib/brand/user-segments.js.map +1 -0
- package/dist/lib/brand/voice.d.ts +10 -0
- package/dist/lib/brand/voice.js +92 -0
- package/dist/lib/brand/voice.js.map +1 -0
- package/dist/lib/bridge.d.ts +38 -0
- package/dist/lib/bridge.js +130 -0
- package/dist/lib/bridge.js.map +1 -0
- package/dist/lib/build-plan.d.ts +25 -0
- package/dist/lib/build-plan.js +67 -1
- package/dist/lib/build-plan.js.map +1 -1
- package/dist/lib/buildout-traces.d.ts +70 -1
- package/dist/lib/buildout-traces.js +66 -0
- package/dist/lib/buildout-traces.js.map +1 -1
- package/dist/lib/canary.d.ts +38 -0
- package/dist/lib/canary.js +91 -0
- package/dist/lib/canary.js.map +1 -0
- package/dist/lib/capability-inferrer.d.ts +5 -4
- package/dist/lib/compose-prompt.d.ts +8 -7
- package/dist/lib/compose-prompt.js +30 -7
- package/dist/lib/compose-prompt.js.map +1 -1
- package/dist/lib/compose-seed.d.ts +15 -0
- package/dist/lib/compose-seed.js +44 -0
- package/dist/lib/compose-seed.js.map +1 -0
- package/dist/lib/compose.js +106 -1
- package/dist/lib/compose.js.map +1 -1
- package/dist/lib/cost.d.ts +53 -0
- package/dist/lib/cost.js +77 -0
- package/dist/lib/cost.js.map +1 -0
- package/dist/lib/fs.d.ts +1 -0
- package/dist/lib/fs.js +10 -0
- package/dist/lib/fs.js.map +1 -1
- package/dist/lib/index.d.ts +42 -1
- package/dist/lib/index.js +22 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/industry-flows.d.ts +6 -0
- package/dist/lib/industry-flows.js +165 -0
- package/dist/lib/industry-flows.js.map +1 -0
- package/dist/lib/keywords.js +14 -0
- package/dist/lib/keywords.js.map +1 -1
- package/dist/lib/llm.d.ts +7 -2
- package/dist/lib/llm.js +137 -8
- package/dist/lib/llm.js.map +1 -1
- package/dist/lib/planner/contracts.d.ts +2 -1
- package/dist/lib/planner/detectors.js +26 -0
- package/dist/lib/planner/detectors.js.map +1 -1
- package/dist/lib/planner/helpers.js +157 -0
- package/dist/lib/planner/helpers.js.map +1 -1
- package/dist/lib/planner/implicit-caps.js +63 -1
- package/dist/lib/planner/implicit-caps.js.map +1 -1
- package/dist/lib/planner/partner-first.d.ts +31 -0
- package/dist/lib/planner/partner-first.js +137 -0
- package/dist/lib/planner/partner-first.js.map +1 -0
- package/dist/lib/planner/projects.d.ts +2 -2
- package/dist/lib/planner/projects.js +452 -2
- package/dist/lib/planner/projects.js.map +1 -1
- package/dist/lib/planner/signals.d.ts +7 -0
- package/dist/lib/planner/signals.js +203 -1
- package/dist/lib/planner/signals.js.map +1 -1
- package/dist/lib/planner/zk-preferences.d.ts +9 -0
- package/dist/lib/planner/zk-preferences.js +91 -0
- package/dist/lib/planner/zk-preferences.js.map +1 -0
- package/dist/lib/prompt-planner.js +187 -2
- package/dist/lib/prompt-planner.js.map +1 -1
- package/dist/lib/prompt-rewriter.d.ts +4 -3
- package/dist/lib/prompt-rewriter.js +11 -0
- package/dist/lib/prompt-rewriter.js.map +1 -1
- package/dist/lib/registry-mirror.d.ts +28 -0
- package/dist/lib/registry-mirror.js +64 -0
- package/dist/lib/registry-mirror.js.map +1 -0
- package/dist/lib/release.js +1 -11
- package/dist/lib/release.js.map +1 -1
- package/dist/lib/reproducibility.d.ts +39 -0
- package/dist/lib/reproducibility.js +96 -0
- package/dist/lib/reproducibility.js.map +1 -0
- package/dist/lib/reviewer-route.d.ts +12 -0
- package/dist/lib/reviewer-route.js +99 -0
- package/dist/lib/reviewer-route.js.map +1 -0
- package/dist/lib/safety/license-check.d.ts +9 -0
- package/dist/lib/safety/license-check.js +61 -0
- package/dist/lib/safety/license-check.js.map +1 -0
- package/dist/lib/safety/secret-scan.d.ts +7 -0
- package/dist/lib/safety/secret-scan.js +67 -0
- package/dist/lib/safety/secret-scan.js.map +1 -0
- package/dist/lib/sbom.d.ts +34 -0
- package/dist/lib/sbom.js +89 -0
- package/dist/lib/sbom.js.map +1 -0
- package/dist/lib/selection.d.ts +22 -0
- package/dist/lib/selection.js +56 -1
- package/dist/lib/selection.js.map +1 -1
- package/dist/lib/semantic-router.d.ts +2 -1
- package/dist/lib/synthetic/index.d.ts +45 -0
- package/dist/lib/synthetic/index.js +101 -0
- package/dist/lib/synthetic/index.js.map +1 -0
- package/dist/lib/telemetry/stream.d.ts +52 -0
- package/dist/lib/telemetry/stream.js +153 -0
- package/dist/lib/telemetry/stream.js.map +1 -0
- package/dist/lib/telemetry.d.ts +6 -0
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/template-quality.d.ts +61 -0
- package/dist/lib/template-quality.js +84 -0
- package/dist/lib/template-quality.js.map +1 -0
- package/dist/lib/validate-plan.d.ts +10 -0
- package/dist/lib/validate-plan.js +74 -0
- package/dist/lib/validate-plan.js.map +1 -0
- package/dist/lib/vb-outcomes.d.ts +2 -1
- package/dist/lib/version-history.d.ts +15 -0
- package/dist/lib/version-history.js +40 -0
- package/dist/lib/version-history.js.map +1 -0
- package/dist/lib/visual-regression.d.ts +75 -0
- package/dist/lib/visual-regression.js +125 -0
- package/dist/lib/visual-regression.js.map +1 -0
- package/dist/training/capability_proposer/propose.d.ts +26 -0
- package/dist/training/capability_proposer/propose.js +305 -0
- package/dist/training/capability_proposer/propose.js.map +1 -0
- package/dist/training/family_proposer/propose.d.ts +35 -0
- package/dist/training/family_proposer/propose.js +664 -0
- package/dist/training/family_proposer/propose.js.map +1 -0
- package/dist/training/routing/train.d.ts +49 -0
- package/dist/training/routing/train.js +249 -0
- package/dist/training/routing/train.js.map +1 -0
- package/dist/training/template_v1/audit.d.ts +15 -0
- package/dist/training/template_v1/audit.js +83 -0
- package/dist/training/template_v1/audit.js.map +1 -0
- package/dist/training/template_v1/correctness.d.ts +25 -0
- package/dist/training/template_v1/correctness.js +194 -0
- package/dist/training/template_v1/correctness.js.map +1 -0
- package/dist/training/template_v1/harvest.d.ts +25 -0
- package/dist/training/template_v1/harvest.js +101 -0
- package/dist/training/template_v1/harvest.js.map +1 -0
- package/dist/training/template_v1/judge.d.ts +26 -0
- package/dist/training/template_v1/judge.js +104 -0
- package/dist/training/template_v1/judge.js.map +1 -0
- package/dist/training/template_v1/multi-propose.d.ts +27 -0
- package/dist/training/template_v1/multi-propose.js +34 -0
- package/dist/training/template_v1/multi-propose.js.map +1 -0
- package/dist/training/template_v1/run.d.ts +1 -0
- package/dist/training/template_v1/run.js +369 -0
- package/dist/training/template_v1/run.js.map +1 -0
- package/dist/training/template_v1/synthesize.d.ts +14 -0
- package/dist/training/template_v1/synthesize.js +101 -0
- package/dist/training/template_v1/synthesize.js.map +1 -0
- package/dist/training/variant_b/flow.d.ts +9 -14
- package/dist/training/variant_b/run-flow.d.ts +2 -1
- package/dist/types/registry-schemas.generated.d.ts +105 -0
- package/dist/types/registry-schemas.generated.js +5 -0
- package/dist/types/registry-schemas.generated.js.map +1 -0
- package/dist/types.d.ts +119 -0
- package/package.json +57 -18
- package/registry/_mirrors.json +29 -0
- package/registry/_schemas/buildhints.schema.json +30 -0
- package/registry/_schemas/family.schema.json +92 -0
- package/registry/_schemas/layer.schema.json +59 -0
- package/registry/_schemas/partner.schema.json +27 -0
- package/registry/families/agent-service-py/manifest.json +9 -0
- package/registry/families/agent-service-ts/files/package.json +8 -0
- package/registry/families/agent-service-ts/manifest.json +1 -4
- package/registry/families/agent-swarm-ts/files/package.json +31 -0
- package/registry/families/agent-swarm-ts/files/tsconfig.json +14 -0
- package/registry/families/agent-swarm-ts/files/validate-swarm.mjs +28 -0
- package/registry/families/agent-swarm-ts/manifest.json +174 -0
- package/registry/families/angular-ts/files/package.json +8 -0
- package/registry/families/aptos-move/files/README.md +45 -0
- package/registry/families/aptos-move/files/validate-aptos.mjs +33 -0
- package/registry/families/aptos-move/manifest.json +106 -0
- package/registry/families/arkworks-prover/files/Cargo.toml +25 -0
- package/registry/families/arkworks-prover/files/README.md +77 -0
- package/registry/families/arkworks-prover/files/rust-toolchain.toml +3 -0
- package/registry/families/arkworks-prover/files/src/circuit.rs +39 -0
- package/registry/families/arkworks-prover/files/src/main.rs +31 -0
- package/registry/families/arkworks-prover/files/src/prover.rs +47 -0
- package/registry/families/arkworks-prover/files/validate-arkworks.mjs +25 -0
- package/registry/families/arkworks-prover/manifest.json +84 -0
- package/registry/families/astro-static/files/package.json +28 -0
- package/registry/families/astro-static/files/tsconfig.json +5 -0
- package/registry/families/astro-static/files/validate-astro.mjs +26 -0
- package/registry/families/astro-static/manifest.json +141 -0
- package/registry/families/bevy-web/files/Cargo.toml +27 -0
- package/registry/families/bevy-web/files/Trunk.toml +20 -0
- package/registry/families/bevy-web/files/build.sh +32 -0
- package/registry/families/bevy-web/files/index.html +30 -0
- package/registry/families/bevy-web/files/validate-bevy-web.mjs +46 -0
- package/registry/families/bevy-web/manifest.json +171 -0
- package/registry/families/browser-extension-ts/files/package.json +3 -3
- package/registry/families/bun-http/files/bunfig.toml +9 -0
- package/registry/families/bun-http/files/package.json +23 -0
- package/registry/families/bun-http/files/tsconfig.json +16 -0
- package/registry/families/bun-http/files/validate-bun.mjs +21 -0
- package/registry/families/bun-http/manifest.json +163 -0
- package/registry/families/celestia-da/files/README.md +53 -0
- package/registry/families/celestia-da/files/validate-celestia.mjs +43 -0
- package/registry/families/celestia-da/manifest.json +117 -0
- package/registry/families/cli-ts/files/package.json +10 -2
- package/registry/families/cloudflare-worker-ts/files/package.json +8 -0
- package/registry/families/crm-backend/files/package.json +23 -0
- package/registry/families/crm-backend/files/tsconfig.json +14 -0
- package/registry/families/crm-backend/files/validate-crm.mjs +32 -0
- package/registry/families/crm-backend/manifest.json +132 -0
- package/registry/families/deno-edge/files/deno.json +17 -0
- package/registry/families/deno-edge/files/validate-deno.mjs +21 -0
- package/registry/families/deno-edge/manifest.json +153 -0
- package/registry/families/ecommerce-headless/files/package.json +24 -0
- package/registry/families/ecommerce-headless/files/tsconfig.json +14 -0
- package/registry/families/ecommerce-headless/files/validate-commerce.mjs +37 -0
- package/registry/families/ecommerce-headless/manifest.json +68 -0
- package/registry/families/electron-desktop-ts/files/package.json +10 -2
- package/registry/families/electron-native-os/files/package.json +35 -0
- package/registry/families/electron-native-os/files/preview-server.mjs +34 -0
- package/registry/families/electron-native-os/files/validate-types.mjs +39 -0
- package/registry/families/electron-native-os/manifest.json +200 -0
- package/registry/families/eleventy-static/files/.eleventy.js +16 -0
- package/registry/families/eleventy-static/files/package.json +23 -0
- package/registry/families/eleventy-static/files/validate-eleventy.mjs +25 -0
- package/registry/families/eleventy-static/manifest.json +106 -0
- package/registry/families/esp32-rust/files/Cargo.toml +47 -0
- package/registry/families/esp32-rust/files/build.rs +9 -0
- package/registry/families/esp32-rust/files/cargo-config.toml +22 -0
- package/registry/families/esp32-rust/files/rust-toolchain.toml +10 -0
- package/registry/families/esp32-rust/files/sdkconfig.defaults +28 -0
- package/registry/families/esp32-rust/files/validate-esp32.mjs +54 -0
- package/registry/families/esp32-rust/manifest.json +168 -0
- package/registry/families/expo-react-native-ts/files/package.json +11 -3
- package/registry/families/expo-rn-rich/files/package.json +37 -0
- package/registry/families/expo-rn-rich/files/validate-expo-rn-rich.mjs +43 -0
- package/registry/families/expo-rn-rich/manifest.json +181 -0
- package/registry/families/fintech-ledger-backend/files/package.json +30 -0
- package/registry/families/fintech-ledger-backend/files/tsconfig.json +14 -0
- package/registry/families/fintech-ledger-backend/files/validate-fintech.mjs +43 -0
- package/registry/families/fintech-ledger-backend/manifest.json +138 -0
- package/registry/families/flutter-app/files/analysis_options.yaml +17 -0
- package/registry/families/flutter-app/files/android/app/build.gradle +38 -0
- package/registry/families/flutter-app/files/ios/Runner/Info.plist +49 -0
- package/registry/families/flutter-app/files/pubspec.yaml +24 -0
- package/registry/families/flutter-app/files/validate-flutter.mjs +43 -0
- package/registry/families/flutter-app/manifest.json +189 -0
- package/registry/families/fraud-ops-console/files/.env.example +6 -0
- package/registry/families/fraud-ops-console/files/.gitkeep +0 -0
- package/registry/families/fraud-ops-console/files/README.md +43 -0
- package/registry/families/fraud-ops-console/files/index.html +12 -0
- package/registry/families/fraud-ops-console/files/package.json +37 -0
- package/registry/families/fraud-ops-console/files/src/App.tsx +19 -0
- package/registry/families/fraud-ops-console/files/src/main.tsx +9 -0
- package/registry/families/fraud-ops-console/files/tsconfig.json +12 -0
- package/registry/families/fraud-ops-console/files/validate-node.mjs +49 -0
- package/registry/families/fraud-ops-console/files/vite.config.ts +10 -0
- package/registry/families/fraud-ops-console/manifest.json +138 -0
- package/registry/families/frontend-static/files/package.json +8 -0
- package/registry/families/frontend-static/manifest.json +17 -0
- package/registry/families/fullstack-ts/files/package.json +10 -2
- package/registry/families/fullstack-ts/manifest.json +22 -0
- package/registry/families/gdpr-compliance-pack/files/docs/DPIA-template.md +55 -0
- package/registry/families/gdpr-compliance-pack/files/docs/GDPR-controls.md +65 -0
- package/registry/families/gdpr-compliance-pack/files/package.json +14 -0
- package/registry/families/gdpr-compliance-pack/files/src/components/CookieBanner.tsx +115 -0
- package/registry/families/gdpr-compliance-pack/files/src/consent.ts +71 -0
- package/registry/families/gdpr-compliance-pack/files/src/data-inventory.ts +94 -0
- package/registry/families/gdpr-compliance-pack/files/src/data-subject-rights.ts +98 -0
- package/registry/families/gdpr-compliance-pack/files/tsconfig.json +14 -0
- package/registry/families/gdpr-compliance-pack/files/validate-gdpr-pack.mjs +31 -0
- package/registry/families/gdpr-compliance-pack/manifest.json +56 -0
- package/registry/families/godot-web/files/README.md +71 -0
- package/registry/families/godot-web/files/export_presets.cfg +44 -0
- package/registry/families/godot-web/files/icon.svg +7 -0
- package/registry/families/godot-web/files/project.godot +28 -0
- package/registry/families/godot-web/files/validate-godot-web.mjs +46 -0
- package/registry/families/godot-web/manifest.json +172 -0
- package/registry/families/hardhat-contracts/files/package.json +10 -2
- package/registry/families/healthcare-hipaa-backend/files/package.json +29 -0
- package/registry/families/healthcare-hipaa-backend/files/tsconfig.json +15 -0
- package/registry/families/healthcare-hipaa-backend/files/validate-hipaa.mjs +35 -0
- package/registry/families/healthcare-hipaa-backend/manifest.json +145 -0
- package/registry/families/hipaa-compliance-pack/files/docs/BAA-template.md +60 -0
- package/registry/families/hipaa-compliance-pack/files/docs/HIPAA-controls.md +58 -0
- package/registry/families/hipaa-compliance-pack/files/package.json +14 -0
- package/registry/families/hipaa-compliance-pack/files/src/audit-log.ts +54 -0
- package/registry/families/hipaa-compliance-pack/files/src/encryption.ts +74 -0
- package/registry/families/hipaa-compliance-pack/files/src/phi-access.ts +83 -0
- package/registry/families/hipaa-compliance-pack/files/tsconfig.json +14 -0
- package/registry/families/hipaa-compliance-pack/files/validate-hipaa-pack.mjs +33 -0
- package/registry/families/hipaa-compliance-pack/manifest.json +63 -0
- package/registry/families/hls-origin/files/docker-compose.yml +32 -0
- package/registry/families/hls-origin/files/nginx.conf +68 -0
- package/registry/families/hls-origin/files/package.json +30 -0
- package/registry/families/hls-origin/files/start-stream.sh +58 -0
- package/registry/families/hls-origin/files/tsconfig.json +15 -0
- package/registry/families/hls-origin/files/validate-hls.mjs +50 -0
- package/registry/families/hls-origin/manifest.json +159 -0
- package/registry/families/hugo-static/files/config.toml +12 -0
- package/registry/families/hugo-static/files/validate-hugo.mjs +22 -0
- package/registry/families/hugo-static/manifest.json +99 -0
- package/registry/families/jupyter-book/files/_config.yml +26 -0
- package/registry/families/jupyter-book/files/_toc.yml +4 -0
- package/registry/families/jupyter-book/files/intro.md +16 -0
- package/registry/families/jupyter-book/files/requirements.txt +3 -0
- package/registry/families/jupyter-book/files/validate-jupyter-book.mjs +26 -0
- package/registry/families/jupyter-book/manifest.json +115 -0
- package/registry/families/k12-edtech/files/package.json +23 -0
- package/registry/families/k12-edtech/files/tsconfig.json +14 -0
- package/registry/families/k12-edtech/files/validate-k12.mjs +28 -0
- package/registry/families/k12-edtech/manifest.json +64 -0
- package/registry/families/kotlin-multiplatform/files/build.gradle.kts +67 -0
- package/registry/families/kotlin-multiplatform/files/gradle.properties +12 -0
- package/registry/families/kotlin-multiplatform/files/root-build.gradle.kts +12 -0
- package/registry/families/kotlin-multiplatform/files/settings.gradle.kts +30 -0
- package/registry/families/kotlin-multiplatform/files/validate-kmp.mjs +52 -0
- package/registry/families/kotlin-multiplatform/manifest.json +196 -0
- package/registry/families/kyc-onboarding/files/.env.example +6 -0
- package/registry/families/kyc-onboarding/files/.gitkeep +0 -0
- package/registry/families/kyc-onboarding/files/README.md +23 -0
- package/registry/families/kyc-onboarding/files/index.html +12 -0
- package/registry/families/kyc-onboarding/files/package.json +24 -0
- package/registry/families/kyc-onboarding/files/src/App.tsx +40 -0
- package/registry/families/kyc-onboarding/files/src/main.ts +12 -0
- package/registry/families/kyc-onboarding/files/tsconfig.json +17 -0
- package/registry/families/kyc-onboarding/files/validate-node.mjs +17 -0
- package/registry/families/kyc-onboarding/files/vite.config.ts +15 -0
- package/registry/families/kyc-onboarding/manifest.json +140 -0
- package/registry/families/legal-case-mgmt/files/package.json +24 -0
- package/registry/families/legal-case-mgmt/files/tsconfig.json +14 -0
- package/registry/families/legal-case-mgmt/files/validate-legal.mjs +12 -0
- package/registry/families/legal-case-mgmt/manifest.json +85 -0
- package/registry/families/livekit-sfu/files/.env.example +8 -0
- package/registry/families/livekit-sfu/files/docker-compose.yml +27 -0
- package/registry/families/livekit-sfu/files/livekit.yaml +30 -0
- package/registry/families/livekit-sfu/files/package.json +31 -0
- package/registry/families/livekit-sfu/files/tsconfig.json +15 -0
- package/registry/families/livekit-sfu/files/validate-livekit.mjs +46 -0
- package/registry/families/livekit-sfu/manifest.json +152 -0
- package/registry/families/lora-training/files/.env.example +8 -0
- package/registry/families/lora-training/files/README-lora.md +71 -0
- package/registry/families/lora-training/files/config/train.yaml +54 -0
- package/registry/families/lora-training/files/data/sample.jsonl +5 -0
- package/registry/families/lora-training/files/pyproject.toml +29 -0
- package/registry/families/lora-training/files/validate-lora.mjs +63 -0
- package/registry/families/lora-training/manifest.json +183 -0
- package/registry/families/move-contracts/files/validate-move.mjs +1 -1
- package/registry/families/move-contracts/manifest.json +0 -1
- package/registry/families/multimodal-agent/files/api/README.md +108 -0
- package/registry/families/multimodal-agent/files/index.html +105 -0
- package/registry/families/multimodal-agent/files/package.json +31 -0
- package/registry/families/multimodal-agent/files/tsconfig.json +15 -0
- package/registry/families/multimodal-agent/files/validate-multimodal.mjs +64 -0
- package/registry/families/multimodal-agent/files/vite.config.ts +15 -0
- package/registry/families/multimodal-agent/manifest.json +143 -0
- package/registry/families/nextjs-ts/files/package.json +15 -7
- package/registry/families/nextjs-ts/manifest.json +35 -0
- package/registry/families/nextjs-ts/prompt-fragment.md +12 -0
- package/registry/families/observable-notebook/files/index.md +23 -0
- package/registry/families/observable-notebook/files/observablehq.config.ts +15 -0
- package/registry/families/observable-notebook/files/package.json +26 -0
- package/registry/families/observable-notebook/files/tsconfig.json +13 -0
- package/registry/families/observable-notebook/files/validate-observable.mjs +24 -0
- package/registry/families/observable-notebook/manifest.json +110 -0
- package/registry/families/ollama-server/files/Modelfile +10 -0
- package/registry/families/ollama-server/files/README.md +32 -0
- package/registry/families/ollama-server/files/docker-compose.yml +23 -0
- package/registry/families/ollama-server/files/package.json +14 -0
- package/registry/families/ollama-server/files/tsconfig.json +13 -0
- package/registry/families/ollama-server/files/validate-ollama.mjs +19 -0
- package/registry/families/ollama-server/manifest.json +101 -0
- package/registry/families/pci-dss-compliance-pack/files/docs/PCI-DSS-controls.md +43 -0
- package/registry/families/pci-dss-compliance-pack/files/package.json +14 -0
- package/registry/families/pci-dss-compliance-pack/files/src/pan-redact.ts +50 -0
- package/registry/families/pci-dss-compliance-pack/files/src/tokenize.ts +39 -0
- package/registry/families/pci-dss-compliance-pack/files/tsconfig.json +14 -0
- package/registry/families/pci-dss-compliance-pack/files/validate-pci-pack.mjs +19 -0
- package/registry/families/pci-dss-compliance-pack/manifest.json +50 -0
- package/registry/families/phaser-game/files/index.html +17 -0
- package/registry/families/phaser-game/files/package.json +18 -0
- package/registry/families/phaser-game/files/tsconfig.json +15 -0
- package/registry/families/phaser-game/files/validate-phaser.mjs +19 -0
- package/registry/families/phaser-game/files/vite.config.ts +11 -0
- package/registry/families/phaser-game/manifest.json +91 -0
- package/registry/families/pixijs-game/files/index.html +16 -0
- package/registry/families/pixijs-game/files/package.json +18 -0
- package/registry/families/pixijs-game/files/tsconfig.json +13 -0
- package/registry/families/pixijs-game/files/validate-pixi.mjs +14 -0
- package/registry/families/pixijs-game/files/vite.config.ts +6 -0
- package/registry/families/pixijs-game/manifest.json +90 -0
- package/registry/families/playwright-worker/files/package.json +8 -0
- package/registry/families/polymarket-portfolio-hedging/files/.env.example +5 -0
- package/registry/families/polymarket-portfolio-hedging/files/.gitkeep +0 -0
- package/registry/families/polymarket-portfolio-hedging/files/README.md +37 -0
- package/registry/families/polymarket-portfolio-hedging/files/index.html +1 -0
- package/registry/families/polymarket-portfolio-hedging/files/package.json +32 -0
- package/registry/families/polymarket-portfolio-hedging/files/src/App.tsx +45 -0
- package/registry/families/polymarket-portfolio-hedging/files/src/main.tsx +9 -0
- package/registry/families/polymarket-portfolio-hedging/files/tsconfig.json +12 -0
- package/registry/families/polymarket-portfolio-hedging/files/validate-node.mjs +1 -0
- package/registry/families/polymarket-portfolio-hedging/files/vite.config.ts +10 -0
- package/registry/families/polymarket-portfolio-hedging/manifest.json +127 -0
- package/registry/families/python-api/manifest.json +1 -3
- package/registry/families/rag-pipeline-py/files/.env.example +20 -0
- package/registry/families/rag-pipeline-py/files/README-rag.md +57 -0
- package/registry/families/rag-pipeline-py/files/docs/sample.md +14 -0
- package/registry/families/rag-pipeline-py/files/pyproject.toml +26 -0
- package/registry/families/rag-pipeline-py/files/validate-rag.mjs +38 -0
- package/registry/families/rag-pipeline-py/manifest.json +174 -0
- package/registry/families/react-vite-ts/files/package.json +7 -7
- package/registry/families/react-vite-ts/manifest.json +31 -0
- package/registry/families/realtime-audio-ts/files/package.json +25 -0
- package/registry/families/realtime-audio-ts/files/validate-realtime-audio.mjs +43 -0
- package/registry/families/realtime-audio-ts/manifest.json +177 -0
- package/registry/families/remix-ts/files/package.json +7 -7
- package/registry/families/remix-ts/manifest.json +30 -0
- package/registry/families/risczero-zkvm/files/Cargo.toml +23 -0
- package/registry/families/risczero-zkvm/files/README.md +66 -0
- package/registry/families/risczero-zkvm/files/host/main.rs +25 -0
- package/registry/families/risczero-zkvm/files/host/prover.rs +48 -0
- package/registry/families/risczero-zkvm/files/host-Cargo.toml +16 -0
- package/registry/families/risczero-zkvm/files/methods/Cargo.toml +11 -0
- package/registry/families/risczero-zkvm/files/methods/build.rs +6 -0
- package/registry/families/risczero-zkvm/files/methods/guest/main.rs +38 -0
- package/registry/families/risczero-zkvm/files/methods/guest-Cargo.toml +12 -0
- package/registry/families/risczero-zkvm/files/methods/src-lib.rs +3 -0
- package/registry/families/risczero-zkvm/files/rust-toolchain.toml +3 -0
- package/registry/families/risczero-zkvm/files/validate-risczero.mjs +41 -0
- package/registry/families/risczero-zkvm/manifest.json +109 -0
- package/registry/families/ros2-node-py/files/README-ros2.md +46 -0
- package/registry/families/ros2-node-py/files/package.xml +28 -0
- package/registry/families/ros2-node-py/files/resource-marker +1 -0
- package/registry/families/ros2-node-py/files/setup.cfg +5 -0
- package/registry/families/ros2-node-py/files/setup.py +32 -0
- package/registry/families/ros2-node-py/files/validate-ros2-py.mjs +96 -0
- package/registry/families/ros2-node-py/manifest.json +197 -0
- package/registry/families/sglang-server/files/.env.example +21 -0
- package/registry/families/sglang-server/files/README-sglang.md +60 -0
- package/registry/families/sglang-server/files/client.py +87 -0
- package/registry/families/sglang-server/files/docker-compose.yml +46 -0
- package/registry/families/sglang-server/files/launch.sh +26 -0
- package/registry/families/sglang-server/files/requirements.txt +5 -0
- package/registry/families/sglang-server/files/validate-sglang.mjs +49 -0
- package/registry/families/sglang-server/manifest.json +182 -0
- package/registry/families/skypilot-serving/files/.env.example +12 -0
- package/registry/families/skypilot-serving/files/README-skypilot.md +73 -0
- package/registry/families/skypilot-serving/files/requirements.txt +5 -0
- package/registry/families/skypilot-serving/files/service.yaml +44 -0
- package/registry/families/skypilot-serving/files/sky-serve.yaml +25 -0
- package/registry/families/skypilot-serving/files/validate-skypilot.mjs +41 -0
- package/registry/families/skypilot-serving/manifest.json +181 -0
- package/registry/families/soc2-compliance-pack/files/docs/SOC2-controls.md +54 -0
- package/registry/families/soc2-compliance-pack/files/docs/incident-response.md +33 -0
- package/registry/families/soc2-compliance-pack/files/docs/vendor-attestations.md +36 -0
- package/registry/families/soc2-compliance-pack/files/package.json +14 -0
- package/registry/families/soc2-compliance-pack/files/src/audit.ts +46 -0
- package/registry/families/soc2-compliance-pack/files/src/change-mgmt.ts +36 -0
- package/registry/families/soc2-compliance-pack/files/tsconfig.json +14 -0
- package/registry/families/soc2-compliance-pack/files/validate-soc2-pack.mjs +25 -0
- package/registry/families/soc2-compliance-pack/manifest.json +60 -0
- package/registry/families/sp1-zkvm/files/Cargo.toml +18 -0
- package/registry/families/sp1-zkvm/files/README.md +68 -0
- package/registry/families/sp1-zkvm/files/program/main.rs +21 -0
- package/registry/families/sp1-zkvm/files/program-Cargo.toml +11 -0
- package/registry/families/sp1-zkvm/files/rust-toolchain.toml +3 -0
- package/registry/families/sp1-zkvm/files/script/main.rs +13 -0
- package/registry/families/sp1-zkvm/files/script/prover.rs +36 -0
- package/registry/families/sp1-zkvm/files/script-Cargo.toml +17 -0
- package/registry/families/sp1-zkvm/files/validate-sp1.mjs +30 -0
- package/registry/families/sp1-zkvm/manifest.json +92 -0
- package/registry/families/stm32-rust/files/Cargo.toml +69 -0
- package/registry/families/stm32-rust/files/Embed.toml +26 -0
- package/registry/families/stm32-rust/files/build.rs +24 -0
- package/registry/families/stm32-rust/files/cargo-config.toml +20 -0
- package/registry/families/stm32-rust/files/memory.x +25 -0
- package/registry/families/stm32-rust/files/validate-stm32.mjs +19 -0
- package/registry/families/stm32-rust/manifest.json +170 -0
- package/registry/families/streamlit-advanced/files/config.toml +12 -0
- package/registry/families/streamlit-advanced/files/requirements.txt +5 -0
- package/registry/families/streamlit-advanced/files/validate-streamlit.mjs +27 -0
- package/registry/families/streamlit-advanced/manifest.json +109 -0
- package/registry/families/tauri-desktop/files/package.json +6 -6
- package/registry/families/tauri-menubar/files/package.json +31 -0
- package/registry/families/tauri-menubar/files/preview-server.mjs +36 -0
- package/registry/families/tauri-menubar/files/validate-types.mjs +31 -0
- package/registry/families/tauri-menubar/manifest.json +174 -0
- package/registry/families/tauri-tray/files/package.json +23 -0
- package/registry/families/tauri-tray/files/preview-server.mjs +63 -0
- package/registry/families/tauri-tray/files/validate-types.mjs +27 -0
- package/registry/families/tauri-tray/manifest.json +174 -0
- package/registry/families/tgi-server/files/.env.example +22 -0
- package/registry/families/tgi-server/files/README-tgi.md +59 -0
- package/registry/families/tgi-server/files/client.py +78 -0
- package/registry/families/tgi-server/files/docker-compose.yml +46 -0
- package/registry/families/tgi-server/files/requirements.txt +3 -0
- package/registry/families/tgi-server/files/validate-tgi.mjs +44 -0
- package/registry/families/tgi-server/manifest.json +178 -0
- package/registry/families/threejs-game/files/index.html +16 -0
- package/registry/families/threejs-game/files/package.json +27 -0
- package/registry/families/threejs-game/files/tsconfig.json +13 -0
- package/registry/families/threejs-game/files/validate-threejs.mjs +32 -0
- package/registry/families/threejs-game/files/vite.config.ts +10 -0
- package/registry/families/threejs-game/manifest.json +164 -0
- package/registry/families/triton-server/files/README-triton.md +65 -0
- package/registry/families/triton-server/files/client.py +54 -0
- package/registry/families/triton-server/files/docker-compose.yml +41 -0
- package/registry/families/triton-server/files/model_repository/identity/1/.gitkeep +9 -0
- package/registry/families/triton-server/files/model_repository/identity/config.pbtxt +43 -0
- package/registry/families/triton-server/files/requirements.txt +2 -0
- package/registry/families/triton-server/files/validate-triton.mjs +53 -0
- package/registry/families/triton-server/manifest.json +190 -0
- package/registry/families/unity-web-proxy/files/Build/.gitkeep +17 -0
- package/registry/families/unity-web-proxy/files/README.md +68 -0
- package/registry/families/unity-web-proxy/files/package.json +24 -0
- package/registry/families/unity-web-proxy/files/scripts/build-webgl.sh +62 -0
- package/registry/families/unity-web-proxy/files/tsconfig.json +13 -0
- package/registry/families/unity-web-proxy/files/validate-unity.mjs +60 -0
- package/registry/families/unity-web-proxy/files/vite.config.ts +32 -0
- package/registry/families/unity-web-proxy/manifest.json +175 -0
- package/registry/families/vision-first-agent/files/api/README.md +92 -0
- package/registry/families/vision-first-agent/files/index.html +67 -0
- package/registry/families/vision-first-agent/files/package.json +24 -0
- package/registry/families/vision-first-agent/files/tsconfig.json +13 -0
- package/registry/families/vision-first-agent/files/validate-vision.mjs +48 -0
- package/registry/families/vision-first-agent/files/vite.config.ts +13 -0
- package/registry/families/vision-first-agent/manifest.json +142 -0
- package/registry/families/vllm-server/files/README-serving.md +60 -0
- package/registry/families/vllm-server/files/config.yaml +26 -0
- package/registry/families/vllm-server/files/requirements.txt +6 -0
- package/registry/families/vllm-server/files/validate-vllm.mjs +30 -0
- package/registry/families/vllm-server/manifest.json +165 -0
- package/registry/families/voice-first-agent/files/api/README.md +83 -0
- package/registry/families/voice-first-agent/files/index.html +59 -0
- package/registry/families/voice-first-agent/files/package.json +24 -0
- package/registry/families/voice-first-agent/files/tsconfig.json +13 -0
- package/registry/families/voice-first-agent/files/validate-voice.mjs +46 -0
- package/registry/families/voice-first-agent/files/vite.config.ts +16 -0
- package/registry/families/voice-first-agent/manifest.json +140 -0
- package/registry/families/wasm-rust/files/Cargo.toml +20 -0
- package/registry/families/wasm-rust/files/build-wasm.mjs +22 -0
- package/registry/families/wasm-rust/files/package.json +27 -0
- package/registry/families/wasm-rust/files/tsconfig.json +14 -0
- package/registry/families/wasm-rust/files/validate-wasm.mjs +30 -0
- package/registry/families/wasm-rust/files/vite.config.ts +11 -0
- package/registry/families/wasm-rust/manifest.json +156 -0
- package/registry/families/webgpu-inference/files/index.html +25 -0
- package/registry/families/webgpu-inference/files/package.json +24 -0
- package/registry/families/webgpu-inference/files/tsconfig.json +14 -0
- package/registry/families/webgpu-inference/files/validate-webgpu-inference.mjs +52 -0
- package/registry/families/webgpu-inference/files/vite.config.ts +13 -0
- package/registry/families/webgpu-inference/manifest.json +173 -0
- package/registry/families/webgpu-render/files/index.html +19 -0
- package/registry/families/webgpu-render/files/package.json +24 -0
- package/registry/families/webgpu-render/files/tsconfig.json +14 -0
- package/registry/families/webgpu-render/files/validate-webgpu-render.mjs +58 -0
- package/registry/families/webgpu-render/files/vite.config.ts +11 -0
- package/registry/families/webgpu-render/manifest.json +171 -0
- package/registry/families/zk-prover-service/manifest.json +2 -6
- package/registry/families/zola-static/files/config.toml +13 -0
- package/registry/families/zola-static/files/validate-zola.mjs +23 -0
- package/registry/families/zola-static/manifest.json +96 -0
- package/registry/layers/auth/better-auth/manifest.json +40 -18
- package/registry/layers/auth/clerk/manifest.json +40 -18
- package/registry/layers/auth/none/manifest.json +42 -18
- package/registry/layers/auth/supabase-auth/manifest.json +29 -18
- package/registry/layers/capability/agent-multi-agent/manifest.json +9 -9
- package/registry/layers/capability/ai-chat-ui/manifest.json +112 -1
- package/registry/layers/capability/banking-baas/files/banking-config.json +25 -0
- package/registry/layers/capability/banking-baas/files/banking.ts +125 -0
- package/registry/layers/capability/banking-baas/manifest.json +59 -0
- package/registry/layers/capability/chart-widget/manifest.json +69 -3
- package/registry/layers/capability/code-editor/files/code-editor.tsx +82 -0
- package/registry/layers/capability/code-editor/manifest.json +90 -0
- package/registry/layers/capability/date-utils/manifest.json +64 -0
- package/registry/layers/capability/evm-nft-mint-page/files/.gitkeep +0 -0
- package/registry/layers/capability/evm-nft-mint-page/files/evm-nft-mint.md +21 -0
- package/registry/layers/capability/evm-nft-mint-page/files/src/components/MintPage.tsx +38 -0
- package/registry/layers/capability/evm-nft-mint-page/files/src/mint-page-config.json +1 -0
- package/registry/layers/capability/evm-nft-mint-page/manifest.json +75 -0
- package/registry/layers/capability/evm-wallet-dashboard/manifest.json +6 -1
- package/registry/layers/capability/layout-admin/manifest.json +84 -14
- package/registry/layers/capability/layout-auth/manifest.json +12 -0
- package/registry/layers/capability/layout-chat/manifest.json +100 -14
- package/registry/layers/capability/layout-dashboard/manifest.json +0 -1
- package/registry/layers/capability/logging/manifest.json +10 -14
- package/registry/layers/capability/multi-tenancy/manifest.json +60 -0
- package/registry/layers/capability/passkey-onboarding/files/.gitkeep +0 -0
- package/registry/layers/capability/passkey-onboarding/files/passkey-onboarding.md +37 -0
- package/registry/layers/capability/passkey-onboarding/files/src/components/PasskeyRegister.tsx +25 -0
- package/registry/layers/capability/passkey-onboarding/files/src/components/PasskeySignIn.tsx +84 -0
- package/registry/layers/capability/passkey-onboarding/files/src/passkey-onboarding-config.json +1 -0
- package/registry/layers/capability/passkey-onboarding/manifest.json +78 -0
- package/registry/layers/capability/routing/files/router.tsx +63 -0
- package/registry/layers/capability/routing/files/routing-notes.md +33 -0
- package/registry/layers/capability/routing/manifest.json +66 -0
- package/registry/layers/capability/saas-billing/manifest.json +5 -0
- package/registry/layers/capability/shadcn/files/breadcrumb.tsx +1 -1
- package/registry/layers/capability/shadcn/files/collapsible.tsx +50 -0
- package/registry/layers/capability/shadcn/files/popover.tsx +54 -0
- package/registry/layers/capability/shadcn/manifest.json +22 -1
- package/registry/layers/capability/stripe-checkout-onetime/files/checkout.ts +60 -0
- package/registry/layers/capability/stripe-checkout-onetime/manifest.json +36 -0
- package/registry/layers/capability/stripe-connect/files/connect-api.ts +57 -0
- package/registry/layers/capability/stripe-connect/files/connect-config.json +8 -0
- package/registry/layers/capability/stripe-connect/manifest.json +40 -0
- package/registry/layers/capability/stripe-metered/files/metered.ts +43 -0
- package/registry/layers/capability/stripe-metered/manifest.json +35 -0
- package/registry/layers/capability/tailwind/manifest.json +13 -1
- package/registry/layers/capability/tangle-gpu-provider/files/gpu-config.json +14 -0
- package/registry/layers/capability/tangle-gpu-provider/manifest.json +34 -0
- package/registry/layers/capability/tangle-mpp/files/mpp-config.json +18 -0
- package/registry/layers/capability/tangle-mpp/manifest.json +30 -0
- package/registry/layers/capability/tangle-remote-provider/files/remote-config.json +28 -0
- package/registry/layers/capability/tangle-remote-provider/manifest.json +29 -0
- package/registry/layers/capability/tangle-tee/files/tee-config.json +20 -0
- package/registry/layers/capability/tangle-tee/manifest.json +31 -0
- package/registry/layers/capability/tangle-x402/files/x402-config.json +11 -0
- package/registry/layers/capability/tangle-x402/manifest.json +24 -0
- package/registry/layers/capability/webhook-processor/manifest.json +10 -14
- package/registry/layers/capability/webrtc/manifest.json +79 -10
- package/registry/layers/capability/zk-browser/files/mixer-deposit-panel.tsx +64 -0
- package/registry/layers/capability/zk-browser/files/mixer-merkle-panel.tsx +41 -0
- package/registry/layers/capability/zk-browser/files/mixer-note.ts +90 -0
- package/registry/layers/capability/zk-browser/files/mixer-verify-panel.tsx +66 -0
- package/registry/layers/capability/zk-browser/files/mixer-withdraw-panel.tsx +105 -0
- package/registry/layers/capability/zk-browser/files/zk-circuits.md +73 -0
- package/registry/layers/capability/zk-browser/files/zkproof.ts +94 -0
- package/registry/layers/capability/zk-browser/manifest.json +112 -0
- package/registry/layers/capability/zk-gnark/files/circuit.go +28 -0
- package/registry/layers/capability/zk-gnark/files/gnark-notes.md +80 -0
- package/registry/layers/capability/zk-gnark/files/prover.go +70 -0
- package/registry/layers/capability/zk-gnark/manifest.json +63 -0
- package/registry/layers/capability/zk-noir/files/circuits/Nargo.toml +7 -0
- package/registry/layers/capability/zk-noir/files/circuits/main.nr +22 -0
- package/registry/layers/capability/zk-noir/files/noir-notes.md +72 -0
- package/registry/layers/capability/zk-noir/files/prover.ts +53 -0
- package/registry/layers/capability/zk-noir/manifest.json +72 -0
- package/registry/layers/database/convex/manifest.json +12 -9
- package/registry/layers/database/mongodb/manifest.json +12 -9
- package/registry/layers/database/postgres/manifest.json +18 -9
- package/registry/layers/database/sqlite/manifest.json +18 -9
- package/registry/layers/framework/agent-swarm-ts/files/researcher.ts +30 -0
- package/registry/layers/framework/agent-swarm-ts/files/server.ts +35 -0
- package/registry/layers/framework/agent-swarm-ts/files/state.ts +33 -0
- package/registry/layers/framework/agent-swarm-ts/files/supervisor.ts +31 -0
- package/registry/layers/framework/agent-swarm-ts/files/writer.ts +27 -0
- package/registry/layers/framework/agent-swarm-ts/manifest.json +27 -0
- package/registry/layers/framework/aptos-move/files/AGENTS.md +58 -0
- package/registry/layers/framework/aptos-move/files/Move.toml +10 -0
- package/registry/layers/framework/aptos-move/files/module.move +46 -0
- package/registry/layers/framework/aptos-move/files/package.json +9 -0
- package/registry/layers/framework/aptos-move/files/scripts/deploy.sh +21 -0
- package/registry/layers/framework/aptos-move/files/test.move +30 -0
- package/registry/layers/framework/aptos-move/manifest.json +88 -0
- package/registry/layers/framework/arkworks-prover/manifest.json +6 -0
- package/registry/layers/framework/astro-static/files/astro.config.mjs +9 -0
- package/registry/layers/framework/astro-static/files/src/env.d.ts +1 -0
- package/registry/layers/framework/astro-static/files/src/layouts/Base.astro +33 -0
- package/registry/layers/framework/astro-static/files/src/pages/index.astro +18 -0
- package/registry/layers/framework/astro-static/manifest.json +75 -0
- package/registry/layers/framework/bevy-web/files/src/main.rs +79 -0
- package/registry/layers/framework/bevy-web/manifest.json +48 -0
- package/registry/layers/framework/bun-http/files/handlers.ts +25 -0
- package/registry/layers/framework/bun-http/files/server.ts +15 -0
- package/registry/layers/framework/bun-http/manifest.json +15 -0
- package/registry/layers/framework/celestia-da/files/AGENTS.md +70 -0
- package/registry/layers/framework/celestia-da/files/cmd/celestia-node/main.go +146 -0
- package/registry/layers/framework/celestia-da/files/config.toml +32 -0
- package/registry/layers/framework/celestia-da/files/docker-compose.yml +30 -0
- package/registry/layers/framework/celestia-da/files/go.mod +3 -0
- package/registry/layers/framework/celestia-da/files/go.sum +0 -0
- package/registry/layers/framework/celestia-da/files/submit-blob.sh +54 -0
- package/registry/layers/framework/celestia-da/manifest.json +65 -0
- package/registry/layers/framework/crm-backend/files/contacts.ts +93 -0
- package/registry/layers/framework/crm-backend/files/db.ts +8 -0
- package/registry/layers/framework/crm-backend/files/drizzle.config.ts +9 -0
- package/registry/layers/framework/crm-backend/files/package.json +22 -0
- package/registry/layers/framework/crm-backend/files/pipeline.ts +158 -0
- package/registry/layers/framework/crm-backend/files/reporting.ts +69 -0
- package/registry/layers/framework/crm-backend/files/schema.ts +146 -0
- package/registry/layers/framework/crm-backend/files/server.ts +42 -0
- package/registry/layers/framework/crm-backend/manifest.json +89 -0
- package/registry/layers/framework/deno-edge/files/handlers.ts +24 -0
- package/registry/layers/framework/deno-edge/files/server.ts +12 -0
- package/registry/layers/framework/deno-edge/manifest.json +15 -0
- package/registry/layers/framework/ecommerce-headless/files/.env.example +12 -0
- package/registry/layers/framework/ecommerce-headless/files/AGENTS.md +57 -0
- package/registry/layers/framework/ecommerce-headless/files/cart.ts +119 -0
- package/registry/layers/framework/ecommerce-headless/files/checkout.ts +113 -0
- package/registry/layers/framework/ecommerce-headless/files/db.ts +8 -0
- package/registry/layers/framework/ecommerce-headless/files/drizzle.config.ts +9 -0
- package/registry/layers/framework/ecommerce-headless/files/package.json +23 -0
- package/registry/layers/framework/ecommerce-headless/files/products.ts +33 -0
- package/registry/layers/framework/ecommerce-headless/files/schema.ts +160 -0
- package/registry/layers/framework/ecommerce-headless/files/server.ts +43 -0
- package/registry/layers/framework/ecommerce-headless/files/stripe-webhook.ts +148 -0
- package/registry/layers/framework/ecommerce-headless/files/tsconfig.json +14 -0
- package/registry/layers/framework/ecommerce-headless/manifest.json +81 -0
- package/registry/layers/framework/electron-native-os/files/App.tsx +87 -0
- package/registry/layers/framework/electron-native-os/files/deeplinks.ts +59 -0
- package/registry/layers/framework/electron-native-os/files/electron-builder.json +39 -0
- package/registry/layers/framework/electron-native-os/files/electron.vite.config.ts +14 -0
- package/registry/layers/framework/electron-native-os/files/index.ts +119 -0
- package/registry/layers/framework/electron-native-os/files/menu.ts +99 -0
- package/registry/layers/framework/electron-native-os/files/package.json +30 -0
- package/registry/layers/framework/electron-native-os/files/preload.ts +33 -0
- package/registry/layers/framework/electron-native-os/files/protocol.ts +56 -0
- package/registry/layers/framework/electron-native-os/files/renderer-index.html +14 -0
- package/registry/layers/framework/electron-native-os/files/renderer-main.tsx +12 -0
- package/registry/layers/framework/electron-native-os/files/styles.css +72 -0
- package/registry/layers/framework/electron-native-os/files/tsconfig.json +14 -0
- package/registry/layers/framework/electron-native-os/files/updater.ts +29 -0
- package/registry/layers/framework/electron-native-os/manifest.json +121 -0
- package/registry/layers/framework/eleventy-static/files/base.njk +23 -0
- package/registry/layers/framework/eleventy-static/files/index.md +11 -0
- package/registry/layers/framework/eleventy-static/files/src/assets/.gitkeep +0 -0
- package/registry/layers/framework/eleventy-static/manifest.json +75 -0
- package/registry/layers/framework/esp32-rust/files/.cargo/config.toml +3 -0
- package/registry/layers/framework/esp32-rust/files/Cargo.toml +11 -0
- package/registry/layers/framework/esp32-rust/files/README.md +51 -0
- package/registry/layers/framework/esp32-rust/files/build.rs +1 -0
- package/registry/layers/framework/esp32-rust/files/rust-toolchain.toml +2 -0
- package/registry/layers/framework/esp32-rust/files/src/main.rs +16 -0
- package/registry/layers/framework/esp32-rust/manifest.json +48 -0
- package/registry/layers/framework/expo-rn-rich/files/App.tsx +28 -0
- package/registry/layers/framework/expo-rn-rich/files/CanvasScreen.tsx +84 -0
- package/registry/layers/framework/expo-rn-rich/files/HomeScreen.tsx +43 -0
- package/registry/layers/framework/expo-rn-rich/files/RootNavigator.tsx +37 -0
- package/registry/layers/framework/expo-rn-rich/files/app.json +27 -0
- package/registry/layers/framework/expo-rn-rich/files/babel.config.js +10 -0
- package/registry/layers/framework/expo-rn-rich/files/metro.config.cjs +9 -0
- package/registry/layers/framework/expo-rn-rich/files/metro.config.js +14 -0
- package/registry/layers/framework/expo-rn-rich/files/tsconfig.json +12 -0
- package/registry/layers/framework/expo-rn-rich/manifest.json +101 -0
- package/registry/layers/framework/fintech-ledger-backend/files/db.ts +10 -0
- package/registry/layers/framework/fintech-ledger-backend/files/drizzle.config.ts +9 -0
- package/registry/layers/framework/fintech-ledger-backend/files/ledger/query.ts +66 -0
- package/registry/layers/framework/fintech-ledger-backend/files/money.ts +32 -0
- package/registry/layers/framework/fintech-ledger-backend/files/post.ts +141 -0
- package/registry/layers/framework/fintech-ledger-backend/files/schema.ts +87 -0
- package/registry/layers/framework/fintech-ledger-backend/files/server.ts +26 -0
- package/registry/layers/framework/fintech-ledger-backend/files/transactions-api.ts +59 -0
- package/registry/layers/framework/fintech-ledger-backend/files/tsconfig.json +17 -0
- package/registry/layers/framework/fintech-ledger-backend/manifest.json +82 -0
- package/registry/layers/framework/flutter-app/files/main.dart +189 -0
- package/registry/layers/framework/flutter-app/manifest.json +15 -0
- package/registry/layers/framework/forge-foundation/files/foundry.toml +4 -15
- package/registry/layers/framework/fraud-ops-console/manifest.json +8 -0
- package/registry/layers/framework/gdpr-compliance-pack/files/AGENTS.md +40 -0
- package/registry/layers/framework/gdpr-compliance-pack/files/package.json +19 -0
- package/registry/layers/framework/gdpr-compliance-pack/files/tsconfig.json +14 -0
- package/registry/layers/framework/gdpr-compliance-pack/manifest.json +60 -0
- package/registry/layers/framework/godot-web/files/export/web/.gitkeep +0 -0
- package/registry/layers/framework/godot-web/files/export_presets.cfg +5 -0
- package/registry/layers/framework/godot-web/files/exports/web/.gitkeep +0 -0
- package/registry/layers/framework/godot-web/files/package.json +15 -0
- package/registry/layers/framework/godot-web/files/project.godot +5 -0
- package/registry/layers/framework/godot-web/files/scenes/main.tscn +19 -0
- package/registry/layers/framework/godot-web/files/scripts/main.gd +29 -0
- package/registry/layers/framework/godot-web/files/src/main.ts +2 -0
- package/registry/layers/framework/godot-web/files/tsconfig.json +11 -0
- package/registry/layers/framework/godot-web/manifest.json +62 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/db.ts +13 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/drizzle.config.ts +11 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/encounters.ts +89 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/encryption.ts +69 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/hipaa.md +65 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/package.json +22 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/patients.ts +86 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/phi-access.ts +85 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/schema.ts +82 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/server.ts +43 -0
- package/registry/layers/framework/healthcare-hipaa-backend/files/tsconfig.json +15 -0
- package/registry/layers/framework/healthcare-hipaa-backend/manifest.json +138 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/AGENTS.md +39 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/docs/BAA-template.md +60 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/docs/HIPAA-controls.md +58 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/package.json +14 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/src/audit-log.ts +54 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/src/encryption.ts +74 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/src/phi-access.ts +83 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/tsconfig.json +14 -0
- package/registry/layers/framework/hipaa-compliance-pack/files/validate-hipaa-pack.mjs +33 -0
- package/registry/layers/framework/hipaa-compliance-pack/manifest.json +56 -0
- package/registry/layers/framework/hls-origin/files/server.ts +83 -0
- package/registry/layers/framework/hls-origin/manifest.json +72 -0
- package/registry/layers/framework/hugo-static/files/_index.md +18 -0
- package/registry/layers/framework/hugo-static/files/baseof.html +22 -0
- package/registry/layers/framework/hugo-static/files/index.html +13 -0
- package/registry/layers/framework/hugo-static/files/package.json +13 -0
- package/registry/layers/framework/hugo-static/manifest.json +70 -0
- package/registry/layers/framework/jupyter-book/files/chapter-1.md +30 -0
- package/registry/layers/framework/jupyter-book/manifest.json +63 -0
- package/registry/layers/framework/k12-edtech/files/README.md +79 -0
- package/registry/layers/framework/k12-edtech/files/classroom.ts +119 -0
- package/registry/layers/framework/k12-edtech/files/db.ts +8 -0
- package/registry/layers/framework/k12-edtech/files/drizzle.config.ts +9 -0
- package/registry/layers/framework/k12-edtech/files/gradebook.ts +161 -0
- package/registry/layers/framework/k12-edtech/files/schema.ts +171 -0
- package/registry/layers/framework/k12-edtech/files/server.ts +58 -0
- package/registry/layers/framework/k12-edtech/files/tsconfig.json +15 -0
- package/registry/layers/framework/k12-edtech/manifest.json +105 -0
- package/registry/layers/framework/kotlin-multiplatform/files/AGENTS.md +67 -0
- package/registry/layers/framework/kotlin-multiplatform/files/App.kt +46 -0
- package/registry/layers/framework/kotlin-multiplatform/files/Platform.android.kt +5 -0
- package/registry/layers/framework/kotlin-multiplatform/files/Platform.ios.kt +6 -0
- package/registry/layers/framework/kotlin-multiplatform/files/build.gradle.kts +3 -0
- package/registry/layers/framework/kotlin-multiplatform/files/pom.xml +38 -0
- package/registry/layers/framework/kotlin-multiplatform/files/settings.gradle.kts +7 -0
- package/registry/layers/framework/kotlin-multiplatform/files/src/commonMain/kotlin/App.kt +3 -0
- package/registry/layers/framework/kotlin-multiplatform/manifest.json +74 -0
- package/registry/layers/framework/kyc-onboarding/manifest.json +8 -0
- package/registry/layers/framework/legal-case-mgmt/files/.env.example +5 -0
- package/registry/layers/framework/legal-case-mgmt/files/AGENTS.md +62 -0
- package/registry/layers/framework/legal-case-mgmt/files/billing.ts +130 -0
- package/registry/layers/framework/legal-case-mgmt/files/db.ts +8 -0
- package/registry/layers/framework/legal-case-mgmt/files/drizzle.config.ts +9 -0
- package/registry/layers/framework/legal-case-mgmt/files/matter.ts +111 -0
- package/registry/layers/framework/legal-case-mgmt/files/package.json +23 -0
- package/registry/layers/framework/legal-case-mgmt/files/schema.ts +148 -0
- package/registry/layers/framework/legal-case-mgmt/files/server.ts +50 -0
- package/registry/layers/framework/legal-case-mgmt/files/tsconfig.json +16 -0
- package/registry/layers/framework/legal-case-mgmt/files/validate-legal.mjs +26 -0
- package/registry/layers/framework/legal-case-mgmt/manifest.json +79 -0
- package/registry/layers/framework/livekit-sfu/files/AGENTS.md +76 -0
- package/registry/layers/framework/livekit-sfu/files/server.ts +84 -0
- package/registry/layers/framework/livekit-sfu/manifest.json +67 -0
- package/registry/layers/framework/lora-training/files/infer.py +102 -0
- package/registry/layers/framework/lora-training/files/pyrightconfig.json +8 -0
- package/registry/layers/framework/lora-training/files/train.py +174 -0
- package/registry/layers/framework/lora-training/manifest.json +78 -0
- package/registry/layers/framework/move-package/files/Move.toml +20 -1
- package/registry/layers/framework/move-package/files/module.move +1 -1
- package/registry/layers/framework/move-package/files/test.move +4 -6
- package/registry/layers/framework/multimodal-agent/files/App.tsx +219 -0
- package/registry/layers/framework/multimodal-agent/files/main.tsx +12 -0
- package/registry/layers/framework/multimodal-agent/manifest.json +60 -0
- package/registry/layers/framework/observable-notebook/files/data/rows.json.ts +11 -0
- package/registry/layers/framework/observable-notebook/files/overview.md +28 -0
- package/registry/layers/framework/observable-notebook/files/src/observablehq.d.ts +12 -0
- package/registry/layers/framework/observable-notebook/files/tsconfig.json +13 -0
- package/registry/layers/framework/observable-notebook/manifest.json +55 -0
- package/registry/layers/framework/ollama-server/files/.env.example +6 -0
- package/registry/layers/framework/ollama-server/files/src/client.ts +52 -0
- package/registry/layers/framework/ollama-server/manifest.json +52 -0
- package/registry/layers/framework/pci-dss-compliance-pack/files/AGENTS.md +52 -0
- package/registry/layers/framework/pci-dss-compliance-pack/files/README.md +51 -0
- package/registry/layers/framework/pci-dss-compliance-pack/files/src/index.ts +3 -0
- package/registry/layers/framework/pci-dss-compliance-pack/manifest.json +50 -0
- package/registry/layers/framework/phaser-game/files/src/main.ts +19 -0
- package/registry/layers/framework/phaser-game/files/src/scenes/MainScene.ts +38 -0
- package/registry/layers/framework/phaser-game/manifest.json +55 -0
- package/registry/layers/framework/pixijs-game/files/src/main.ts +49 -0
- package/registry/layers/framework/pixijs-game/files/src/vite-env.d.ts +1 -0
- package/registry/layers/framework/pixijs-game/manifest.json +51 -0
- package/registry/layers/framework/polymarket-portfolio-hedging/manifest.json +8 -0
- package/registry/layers/framework/rag-pipeline-py/files/AGENTS.md +55 -0
- package/registry/layers/framework/rag-pipeline-py/files/__init__.py +1 -0
- package/registry/layers/framework/rag-pipeline-py/files/pipeline.py +220 -0
- package/registry/layers/framework/rag-pipeline-py/manifest.json +56 -0
- package/registry/layers/framework/react-vite-ts/files/App.tsx +9 -72
- package/registry/layers/framework/realtime-audio-ts/files/audio.ts +75 -0
- package/registry/layers/framework/realtime-audio-ts/files/index.html +34 -0
- package/registry/layers/framework/realtime-audio-ts/files/main.ts +93 -0
- package/registry/layers/framework/realtime-audio-ts/files/peer.ts +68 -0
- package/registry/layers/framework/realtime-audio-ts/files/styles.css +59 -0
- package/registry/layers/framework/realtime-audio-ts/files/tsconfig.json +12 -0
- package/registry/layers/framework/realtime-audio-ts/files/visualizer.ts +59 -0
- package/registry/layers/framework/realtime-audio-ts/files/vite.config.ts +16 -0
- package/registry/layers/framework/realtime-audio-ts/manifest.json +54 -0
- package/registry/layers/framework/risczero-zkvm/manifest.json +6 -0
- package/registry/layers/framework/ros2-node-py/files/AGENTS.md +58 -0
- package/registry/layers/framework/ros2-node-py/files/__init__.py +0 -0
- package/registry/layers/framework/ros2-node-py/files/bringup.launch.py +23 -0
- package/registry/layers/framework/ros2-node-py/files/minimal_publisher.py +43 -0
- package/registry/layers/framework/ros2-node-py/files/minimal_subscriber.py +36 -0
- package/registry/layers/framework/ros2-node-py/files/my_node.py +24 -0
- package/registry/layers/framework/ros2-node-py/files/setup.py +28 -0
- package/registry/layers/framework/ros2-node-py/manifest.json +90 -0
- package/registry/layers/framework/sglang-server/files/Makefile +22 -0
- package/registry/layers/framework/sglang-server/files/README.md +56 -0
- package/registry/layers/framework/sglang-server/files/__init__.py +1 -0
- package/registry/layers/framework/sglang-server/files/pyproject.toml +30 -0
- package/registry/layers/framework/sglang-server/manifest.json +62 -0
- package/registry/layers/framework/skypilot-serving/files/AGENTS.md +85 -0
- package/registry/layers/framework/skypilot-serving/manifest.json +68 -0
- package/registry/layers/framework/soc2-compliance-pack/files/AGENTS.md +46 -0
- package/registry/layers/framework/soc2-compliance-pack/files/README.md +61 -0
- package/registry/layers/framework/soc2-compliance-pack/files/src/index.ts +3 -0
- package/registry/layers/framework/soc2-compliance-pack/manifest.json +52 -0
- package/registry/layers/framework/sp1-zkvm/manifest.json +6 -0
- package/registry/layers/framework/stm32-rust/files/.cargo/config.toml +9 -0
- package/registry/layers/framework/stm32-rust/files/Embed.toml +27 -0
- package/registry/layers/framework/stm32-rust/files/rust-toolchain.toml +3 -0
- package/registry/layers/framework/stm32-rust/files/src/main.rs +54 -0
- package/registry/layers/framework/stm32-rust/manifest.json +66 -0
- package/registry/layers/framework/streamlit-advanced/files/.env.example +3 -0
- package/registry/layers/framework/streamlit-advanced/files/README.md +58 -0
- package/registry/layers/framework/streamlit-advanced/files/analysis.py +40 -0
- package/registry/layers/framework/streamlit-advanced/files/app.py +76 -0
- package/registry/layers/framework/streamlit-advanced/manifest.json +60 -0
- package/registry/layers/framework/tangle-blueprint/files/lib.rs +29 -15
- package/registry/layers/framework/tauri-menubar/README.md +54 -0
- package/registry/layers/framework/tauri-menubar/files/App.tsx +65 -0
- package/registry/layers/framework/tauri-menubar/files/Cargo.toml +18 -0
- package/registry/layers/framework/tauri-menubar/files/build.rs +3 -0
- package/registry/layers/framework/tauri-menubar/files/index.html +13 -0
- package/registry/layers/framework/tauri-menubar/files/lib.rs +75 -0
- package/registry/layers/framework/tauri-menubar/files/main.rs +7 -0
- package/registry/layers/framework/tauri-menubar/files/main.tsx +14 -0
- package/registry/layers/framework/tauri-menubar/files/styles.css +112 -0
- package/registry/layers/framework/tauri-menubar/files/tauri.conf.json +45 -0
- package/registry/layers/framework/tauri-menubar/files/tsconfig.json +13 -0
- package/registry/layers/framework/tauri-menubar/files/vite.config.ts +18 -0
- package/registry/layers/framework/tauri-menubar/manifest.json +92 -0
- package/registry/layers/framework/tauri-tray/files/Cargo.toml +19 -0
- package/registry/layers/framework/tauri-tray/files/build.rs +3 -0
- package/registry/layers/framework/tauri-tray/files/lib.rs +89 -0
- package/registry/layers/framework/tauri-tray/files/main.rs +5 -0
- package/registry/layers/framework/tauri-tray/files/src/main.ts +1 -0
- package/registry/layers/framework/tauri-tray/files/src/tray.ts +5 -0
- package/registry/layers/framework/tauri-tray/files/tauri.conf.json +28 -0
- package/registry/layers/framework/tauri-tray/files/tsconfig.json +11 -0
- package/registry/layers/framework/tauri-tray/manifest.json +80 -0
- package/registry/layers/framework/tgi-server/files/pyproject.toml +20 -0
- package/registry/layers/framework/tgi-server/files/src/__init__.py +1 -0
- package/registry/layers/framework/tgi-server/files/src/main.py +50 -0
- package/registry/layers/framework/tgi-server/manifest.json +41 -0
- package/registry/layers/framework/threejs-game/files/src/main.ts +62 -0
- package/registry/layers/framework/threejs-game/files/src/vite-env.d.ts +1 -0
- package/registry/layers/framework/threejs-game/manifest.json +50 -0
- package/registry/layers/framework/triton-server/files/AGENTS.md +71 -0
- package/registry/layers/framework/triton-server/files/Makefile +25 -0
- package/registry/layers/framework/triton-server/files/__init__.py +1 -0
- package/registry/layers/framework/triton-server/files/pyproject.toml +33 -0
- package/registry/layers/framework/triton-server/manifest.json +70 -0
- package/registry/layers/framework/unity-web-proxy/files/index.html +104 -0
- package/registry/layers/framework/unity-web-proxy/manifest.json +63 -0
- package/registry/layers/framework/vision-first-agent/files/main.ts +143 -0
- package/registry/layers/framework/vision-first-agent/files/vite-env.d.ts +1 -0
- package/registry/layers/framework/vision-first-agent/manifest.json +47 -0
- package/registry/layers/framework/vllm-server/files/__init__.py +0 -0
- package/registry/layers/framework/vllm-server/files/server.py +134 -0
- package/registry/layers/framework/vllm-server/manifest.json +15 -0
- package/registry/layers/framework/voice-first-agent/files/main.ts +160 -0
- package/registry/layers/framework/voice-first-agent/files/vite-env.d.ts +1 -0
- package/registry/layers/framework/voice-first-agent/manifest.json +48 -0
- package/registry/layers/framework/wasm-rust/files/index.html +12 -0
- package/registry/layers/framework/wasm-rust/files/lib.rs +43 -0
- package/registry/layers/framework/wasm-rust/files/main.ts +24 -0
- package/registry/layers/framework/wasm-rust/files/pkg/starter_foundry_wasm.d.ts +7 -0
- package/registry/layers/framework/wasm-rust/manifest.json +23 -0
- package/registry/layers/framework/webgpu-inference/files/src/main.ts +167 -0
- package/registry/layers/framework/webgpu-inference/files/src/shaders/matmul.wgsl +30 -0
- package/registry/layers/framework/webgpu-inference/manifest.json +55 -0
- package/registry/layers/framework/webgpu-render/files/src/main.ts +113 -0
- package/registry/layers/framework/webgpu-render/files/src/shaders/main.wgsl +37 -0
- package/registry/layers/framework/webgpu-render/files/src/vite-env.d.ts +1 -0
- package/registry/layers/framework/webgpu-render/manifest.json +56 -0
- package/registry/layers/framework/zola-static/files/_index.md +10 -0
- package/registry/layers/framework/zola-static/files/base.html +12 -0
- package/registry/layers/framework/zola-static/files/gitignore +3 -0
- package/registry/layers/framework/zola-static/files/index.html +26 -0
- package/registry/layers/framework/zola-static/files/main.scss +21 -0
- package/registry/layers/framework/zola-static/files/package.json +12 -0
- package/registry/layers/framework/zola-static/files/static.gitkeep +0 -0
- package/registry/layers/framework/zola-static/manifest.json +72 -0
- package/registry/layers/payments/coinbase-commerce/manifest.json +26 -17
- package/registry/layers/payments/none/manifest.json +28 -17
- package/registry/layers/payments/stripe/manifest.json +27 -17
- package/registry/layers/queue/bullmq/manifest.json +15 -13
- package/registry/layers/queue/none/manifest.json +15 -13
- package/registry/layers/queue/trigger-dev/manifest.json +15 -13
- package/registry/layers/sdk/coinbase-cdp/manifest.json +24 -17
- package/registry/layers/sdk/evm-wallet/manifest.json +24 -17
- package/registry/layers/sdk/none/manifest.json +26 -17
- package/registry/layers/sdk/solana-web3/manifest.json +24 -17
- package/registry/package-to-capability.json +16 -10
- package/registry/partners/avalanche/files/partner-config.json +14 -0
- package/registry/partners/avalanche/files/starter-brand.json +5 -0
- package/registry/partners/avalanche/manifest.json +46 -0
- package/registry/partners/chainlink/files/chainlink-config.json +29 -0
- package/registry/partners/chainlink/manifest.json +43 -0
- package/registry/partners/farcaster/files/partner-config.json +10 -0
- package/registry/partners/farcaster/files/starter-brand.json +5 -0
- package/registry/partners/farcaster/manifest.json +44 -0
- package/registry/partners/hyperliquid/files/partner-config.json +12 -0
- package/registry/partners/hyperliquid/files/starter-brand.json +5 -0
- package/registry/partners/hyperliquid/manifest.json +46 -0
- package/registry/partners/lens/files/partner-config.json +12 -0
- package/registry/partners/lens/files/starter-brand.json +5 -0
- package/registry/partners/lens/manifest.json +44 -0
- package/registry/partners/linea/files/partner-config.json +13 -0
- package/registry/partners/linea/files/starter-brand.json +5 -0
- package/registry/partners/linea/manifest.json +45 -0
- package/registry/partners/monad/files/partner-config.json +10 -0
- package/registry/partners/monad/files/starter-brand.json +5 -0
- package/registry/partners/monad/manifest.json +46 -0
- package/registry/partners/polygon/files/partner-config.json +16 -0
- package/registry/partners/polygon/files/starter-brand.json +5 -0
- package/registry/partners/polygon/manifest.json +46 -0
- package/registry/partners/sei-evm/files/partner-config.json +12 -0
- package/registry/partners/sei-evm/files/starter-brand.json +5 -0
- package/registry/partners/sei-evm/manifest.json +45 -0
- package/registry/partners/sui/files/sui-config.json +18 -0
- package/registry/partners/sui/manifest.json +41 -0
- package/registry/partners/tempo/files/tempo-config.json +26 -0
- package/registry/partners/tempo/manifest.json +46 -0
- package/registry/partners/tether/files/partner-config.json +17 -0
- package/registry/partners/tether/files/starter-brand.json +5 -0
- package/registry/partners/tether/manifest.json +49 -0
- package/registry/partners/usdc-circle/files/partner-config.json +25 -0
- package/registry/partners/usdc-circle/files/starter-brand.json +5 -0
- package/registry/partners/usdc-circle/manifest.json +50 -0
|
@@ -80,4 +80,70 @@ export const VERTICAL_TO_PARTNER = {
|
|
|
80
80
|
export function isBuildoutSlug(slug) {
|
|
81
81
|
return slug.startsWith('-private-var-folders-') && slug.includes('factory-local-phase2-');
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Append a BuildoutEvent to the pipeline. Atomic (O_APPEND) — safe to call
|
|
85
|
+
* from multiple concurrent processes. Creates the containing directory on
|
|
86
|
+
* first call.
|
|
87
|
+
*
|
|
88
|
+
* Example (blueprint-agent):
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { emitBuildoutEvent } from '@tangle-network/starter-foundry'
|
|
92
|
+
*
|
|
93
|
+
* await emitBuildoutEvent({
|
|
94
|
+
* sessionId: run.id,
|
|
95
|
+
* sourceModel: 'blueprint-agent-vb',
|
|
96
|
+
* sourcePath: run.manifestPath,
|
|
97
|
+
* scenarioId: run.scenarioId,
|
|
98
|
+
* partnerGuess: run.verticalId,
|
|
99
|
+
* replayRound: run.round,
|
|
100
|
+
* initialPrompt: run.prompt,
|
|
101
|
+
* addedPackages: run.packagesInstalled.map((n) => ({ pm: 'pnpm', name: n })),
|
|
102
|
+
* addedDirs: run.dirsCreated,
|
|
103
|
+
* rewrittenFiles: run.filesEdited,
|
|
104
|
+
* outcome: {
|
|
105
|
+
* source: 'vb-execution',
|
|
106
|
+
* allPass: run.verification.allPass,
|
|
107
|
+
* blendedScore: run.verification.blendedScore,
|
|
108
|
+
* failingLayers: run.verification.failingLayers,
|
|
109
|
+
* shotsRun: run.verification.shotsRun,
|
|
110
|
+
* shotsToConvergence: run.verification.shotsToConvergence,
|
|
111
|
+
* wallMs: run.wallMs,
|
|
112
|
+
* toolCallsTotal: run.toolCallsTotal,
|
|
113
|
+
* },
|
|
114
|
+
* })
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* Downstream: our capability-gap detector, template-rewrite analyzer, and
|
|
118
|
+
* meta-harness training data will pick up these events on the next
|
|
119
|
+
* `run-buildout-pipeline.mjs` invocation.
|
|
120
|
+
*/
|
|
121
|
+
export async function emitBuildoutEvent(input, options = {}) {
|
|
122
|
+
if (!input.sessionId)
|
|
123
|
+
throw new Error('emitBuildoutEvent: sessionId is required');
|
|
124
|
+
if (!input.sourceModel)
|
|
125
|
+
throw new Error('emitBuildoutEvent: sourceModel is required');
|
|
126
|
+
const event = {
|
|
127
|
+
schemaVersion: BUILDOUT_SCHEMA_VERSION,
|
|
128
|
+
sessionId: input.sessionId,
|
|
129
|
+
sourcePath: input.sourcePath ?? '',
|
|
130
|
+
sourceModel: input.sourceModel,
|
|
131
|
+
scenarioId: input.scenarioId ?? null,
|
|
132
|
+
partnerGuess: input.partnerGuess ?? null,
|
|
133
|
+
replayRound: input.replayRound ?? null,
|
|
134
|
+
firstTs: input.firstTs ?? null,
|
|
135
|
+
lastTs: input.lastTs ?? null,
|
|
136
|
+
initialPrompt: input.initialPrompt ?? null,
|
|
137
|
+
addedPackages: input.addedPackages ?? [],
|
|
138
|
+
addedDirs: input.addedDirs ?? [],
|
|
139
|
+
rewrittenFiles: input.rewrittenFiles ?? [],
|
|
140
|
+
outcome: input.outcome ?? null,
|
|
141
|
+
};
|
|
142
|
+
const { mkdir, appendFile } = await import('node:fs/promises');
|
|
143
|
+
const { dirname } = await import('node:path');
|
|
144
|
+
const targetPath = options.path ?? DEFAULT_PATHS.buildoutsJsonl;
|
|
145
|
+
await mkdir(dirname(targetPath), { recursive: true });
|
|
146
|
+
await appendFile(targetPath, `${JSON.stringify(event)}\n`, 'utf8');
|
|
147
|
+
return event;
|
|
148
|
+
}
|
|
83
149
|
//# sourceMappingURL=buildout-traces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildout-traces.js","sourceRoot":"","sources":["../../src/lib/buildout-traces.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,qDAAqD;AACrD,EAAE;AACF,uEAAuE;AACvE,8DAA8D;AAC9D,EAAE;AACF,6CAA6C;AAC7C,6CAA6C;AAC7C,gEAAgE;AAChE,EAAE;AACF,8DAA8D;AAC9D,6CAA6C;AAC7C,0DAA0D;AAC1D,EAAE;AACF,gCAAgC;AAChC,wCAAwC;AACxC,uEAAuE;AACvE,EAAE;AACF,uDAAuD;AACvD,uEAAuE;AACvE,yEAAyE;AACzE,wEAAwE;AACxE,qBAAqB;AACrB,0DAA0D;AAC1D,0DAA0D;AAC1D,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,yCAAyC;AAEzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"buildout-traces.js","sourceRoot":"","sources":["../../src/lib/buildout-traces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface CanaryExperiment {
|
|
2
|
+
name: string;
|
|
3
|
+
/** 0..1 — fraction of consumers routed to canary */
|
|
4
|
+
percent: number;
|
|
5
|
+
/** ISO timestamp after which the experiment is considered inactive */
|
|
6
|
+
expiresAt?: string | null;
|
|
7
|
+
/** Optional explicit consumer key allowlist (always routed to canary) */
|
|
8
|
+
force?: string[];
|
|
9
|
+
/** Optional explicit consumer key denylist (always routed to main) */
|
|
10
|
+
exclude?: string[];
|
|
11
|
+
}
|
|
12
|
+
export type CanaryBucket = 'canary' | 'main';
|
|
13
|
+
/**
|
|
14
|
+
* Core A/B decision primitive. Given a consumer key and an experiment,
|
|
15
|
+
* returns which bucket the consumer lands in.
|
|
16
|
+
*
|
|
17
|
+
* Deterministic: the same `(consumerKey, experiment.name)` tuple always
|
|
18
|
+
* produces the same bucket. Change the experiment name (not just the
|
|
19
|
+
* percentage) to re-randomize.
|
|
20
|
+
*/
|
|
21
|
+
export declare function decideCanaryBucket(consumerKey: string, experiment: CanaryExperiment): CanaryBucket;
|
|
22
|
+
/**
|
|
23
|
+
* Select the registry version (canary vs main) for a given consumer.
|
|
24
|
+
* Returns an absolute path the composer should use as its registry root.
|
|
25
|
+
*
|
|
26
|
+
* Falls back to `registry/` if:
|
|
27
|
+
* - experiment routes the consumer to main
|
|
28
|
+
* - `registry-canary/` doesn't exist on disk (guard against missing dir)
|
|
29
|
+
*/
|
|
30
|
+
export declare function selectCanaryVersion(consumerKey: string, experiment: CanaryExperiment): Promise<{
|
|
31
|
+
bucket: CanaryBucket;
|
|
32
|
+
registryRoot: string;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Default 5%-canary experiment the CI/CD pipeline promotes by name.
|
|
36
|
+
* Tests import this to exercise the canonical config.
|
|
37
|
+
*/
|
|
38
|
+
export declare const DEFAULT_CANARY_EXPERIMENT: CanaryExperiment;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canary release routing.
|
|
3
|
+
*
|
|
4
|
+
* Routes a configurable fraction of compose requests to a canary registry
|
|
5
|
+
* (parallel to `registry/` at `registry-canary/`). Decision is deterministic
|
|
6
|
+
* given a `consumerKey`, so the same consumer always lands in the same bucket
|
|
7
|
+
* for the lifetime of an experiment — no session-affinity store needed.
|
|
8
|
+
*
|
|
9
|
+
* Hash function: FNV-1a 32-bit over `experiment:consumerKey`. The output is
|
|
10
|
+
* uniformly distributed so `mod 10000 < pct*100` gives the target split to
|
|
11
|
+
* within ±0.5pp over any reasonable sample of consumer keys.
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'node:fs/promises';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { resolveRepoRoot } from './fs.js';
|
|
16
|
+
const FNV_OFFSET_32 = 0x811c9dc5;
|
|
17
|
+
const FNV_PRIME_32 = 0x01000193;
|
|
18
|
+
/**
|
|
19
|
+
* FNV-1a 32-bit. Deterministic and dependency-free. Output is [0, 2^32).
|
|
20
|
+
* Multiplication is force-truncated with Math.imul to avoid 53-bit float drift
|
|
21
|
+
* on strings > ~6 chars where the running product silently overflows.
|
|
22
|
+
*/
|
|
23
|
+
function fnv1a32(input) {
|
|
24
|
+
let hash = FNV_OFFSET_32;
|
|
25
|
+
for (let i = 0; i < input.length; i++) {
|
|
26
|
+
hash ^= input.charCodeAt(i);
|
|
27
|
+
hash = Math.imul(hash, FNV_PRIME_32);
|
|
28
|
+
}
|
|
29
|
+
return hash >>> 0;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Core A/B decision primitive. Given a consumer key and an experiment,
|
|
33
|
+
* returns which bucket the consumer lands in.
|
|
34
|
+
*
|
|
35
|
+
* Deterministic: the same `(consumerKey, experiment.name)` tuple always
|
|
36
|
+
* produces the same bucket. Change the experiment name (not just the
|
|
37
|
+
* percentage) to re-randomize.
|
|
38
|
+
*/
|
|
39
|
+
export function decideCanaryBucket(consumerKey, experiment) {
|
|
40
|
+
if (experiment.exclude?.includes(consumerKey))
|
|
41
|
+
return 'main';
|
|
42
|
+
if (experiment.force?.includes(consumerKey))
|
|
43
|
+
return 'canary';
|
|
44
|
+
if (experiment.expiresAt) {
|
|
45
|
+
const expires = Date.parse(experiment.expiresAt);
|
|
46
|
+
if (!Number.isNaN(expires) && Date.now() > expires)
|
|
47
|
+
return 'main';
|
|
48
|
+
}
|
|
49
|
+
const pct = Math.max(0, Math.min(1, experiment.percent));
|
|
50
|
+
if (pct <= 0)
|
|
51
|
+
return 'main';
|
|
52
|
+
if (pct >= 1)
|
|
53
|
+
return 'canary';
|
|
54
|
+
// 4-digit resolution — 0.01% granularity is plenty for 5% rollouts.
|
|
55
|
+
const bucket = fnv1a32(`${experiment.name}:${consumerKey}`) % 10000;
|
|
56
|
+
return bucket < Math.floor(pct * 10000) ? 'canary' : 'main';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Select the registry version (canary vs main) for a given consumer.
|
|
60
|
+
* Returns an absolute path the composer should use as its registry root.
|
|
61
|
+
*
|
|
62
|
+
* Falls back to `registry/` if:
|
|
63
|
+
* - experiment routes the consumer to main
|
|
64
|
+
* - `registry-canary/` doesn't exist on disk (guard against missing dir)
|
|
65
|
+
*/
|
|
66
|
+
export async function selectCanaryVersion(consumerKey, experiment) {
|
|
67
|
+
const repoRoot = await resolveRepoRoot();
|
|
68
|
+
const mainRoot = path.join(repoRoot, 'registry');
|
|
69
|
+
const canaryRoot = path.join(repoRoot, 'registry-canary');
|
|
70
|
+
const bucket = decideCanaryBucket(consumerKey, experiment);
|
|
71
|
+
if (bucket === 'main')
|
|
72
|
+
return { bucket, registryRoot: mainRoot };
|
|
73
|
+
try {
|
|
74
|
+
const stat = await fs.stat(canaryRoot);
|
|
75
|
+
if (!stat.isDirectory())
|
|
76
|
+
return { bucket: 'main', registryRoot: mainRoot };
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return { bucket: 'main', registryRoot: mainRoot };
|
|
80
|
+
}
|
|
81
|
+
return { bucket: 'canary', registryRoot: canaryRoot };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Default 5%-canary experiment the CI/CD pipeline promotes by name.
|
|
85
|
+
* Tests import this to exercise the canonical config.
|
|
86
|
+
*/
|
|
87
|
+
export const DEFAULT_CANARY_EXPERIMENT = {
|
|
88
|
+
name: 'registry-canary-v1',
|
|
89
|
+
percent: 0.05,
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=canary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canary.js","sourceRoot":"","sources":["../../src/lib/canary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
interface PackageCapabilityMap {
|
|
2
2
|
schemaVersion: 1;
|
|
3
3
|
mapping: Record<string, {
|
|
4
4
|
capability: string | null;
|
|
@@ -6,7 +6,7 @@ export interface PackageCapabilityMap {
|
|
|
6
6
|
note?: string;
|
|
7
7
|
}>;
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
interface BuildoutLike {
|
|
10
10
|
sessionId: string;
|
|
11
11
|
initialPrompt: string | null;
|
|
12
12
|
scenarioId: string | null;
|
|
@@ -20,13 +20,13 @@ export interface BuildoutLike {
|
|
|
20
20
|
blendedScore: number;
|
|
21
21
|
} | null;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
interface InferredCapability {
|
|
24
24
|
capability: string;
|
|
25
25
|
confidence: number;
|
|
26
26
|
source: 'package' | 'dir';
|
|
27
27
|
sourceToken: string;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
interface CapabilityMapSummary {
|
|
30
30
|
distinctPackages: number;
|
|
31
31
|
mappedPackages: number;
|
|
32
32
|
unmappedPackages: number;
|
|
@@ -38,3 +38,4 @@ export declare function loadCapabilityMap(path?: string): PackageCapabilityMap;
|
|
|
38
38
|
export declare function inferCapabilities(buildout: BuildoutLike, map: PackageCapabilityMap): InferredCapability[];
|
|
39
39
|
/** Summary stats over a mapping (for diagnostic CLIs / tests). */
|
|
40
40
|
export declare function summarizeMap(map: PackageCapabilityMap): CapabilityMapSummary;
|
|
41
|
+
export {};
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
* are React-flavored) and made them duplicate the canonical agent instruction
|
|
17
17
|
* wording across their codebase. This function is the single supported entrypoint.
|
|
18
18
|
*/
|
|
19
|
-
import
|
|
19
|
+
import { type ComposeWorkspaceResult } from './workspace.js';
|
|
20
|
+
import type { ComposeResult, ComposeSpec, WorkspaceSpec } from '../types.js';
|
|
20
21
|
export interface ComposeFromPromptOptions {
|
|
21
22
|
/** Free-text user prompt — drives family routing and industry detection. */
|
|
22
23
|
prompt: string;
|
|
@@ -34,17 +35,17 @@ export type ComposeFromPromptResult = {
|
|
|
34
35
|
contextMessage: string;
|
|
35
36
|
} | {
|
|
36
37
|
kind: 'workspace';
|
|
37
|
-
|
|
38
|
+
spec: WorkspaceSpec;
|
|
39
|
+
result: ComposeWorkspaceResult;
|
|
40
|
+
contextMessage: string;
|
|
38
41
|
} | {
|
|
39
42
|
kind: 'error';
|
|
40
43
|
error: string;
|
|
41
44
|
};
|
|
42
45
|
/**
|
|
43
|
-
* Compose a scaffold from a free-text prompt. Returns a discriminated union
|
|
44
|
-
* so callers handle workspace and error cases explicitly.
|
|
46
|
+
* Compose a scaffold from a free-text prompt. Returns a discriminated union.
|
|
45
47
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* agent build or call composeWorkspace directly.
|
|
48
|
+
* Auto-dispatches to composeStarter or composeWorkspace based on the plan
|
|
49
|
+
* kind — downstream callers don't need to branch on plan.kind themselves.
|
|
49
50
|
*/
|
|
50
51
|
export declare function composeFromPrompt(options: ComposeFromPromptOptions): Promise<ComposeFromPromptResult>;
|
|
@@ -18,14 +18,13 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { composeStarter } from './compose.js';
|
|
20
20
|
import { planPrompt } from './prompt-planner.js';
|
|
21
|
+
import { composeWorkspace } from './workspace.js';
|
|
21
22
|
import { getComposedScaffoldContext } from './agent-context.js';
|
|
22
23
|
/**
|
|
23
|
-
* Compose a scaffold from a free-text prompt. Returns a discriminated union
|
|
24
|
-
* so callers handle workspace and error cases explicitly.
|
|
24
|
+
* Compose a scaffold from a free-text prompt. Returns a discriminated union.
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* agent build or call composeWorkspace directly.
|
|
26
|
+
* Auto-dispatches to composeStarter or composeWorkspace based on the plan
|
|
27
|
+
* kind — downstream callers don't need to branch on plan.kind themselves.
|
|
29
28
|
*/
|
|
30
29
|
export async function composeFromPrompt(options) {
|
|
31
30
|
const { prompt, outDir, partner = null, projectName = 'scaffold' } = options;
|
|
@@ -39,12 +38,25 @@ export async function composeFromPrompt(options) {
|
|
|
39
38
|
catch (err) {
|
|
40
39
|
return { kind: 'error', error: `planPrompt failed: ${err.message}` };
|
|
41
40
|
}
|
|
42
|
-
if (plan.kind
|
|
41
|
+
if (plan.kind === 'workspace') {
|
|
42
|
+
const spec = plan.spec;
|
|
43
|
+
let result;
|
|
44
|
+
try {
|
|
45
|
+
result = await composeWorkspace({ spec, outDir });
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return { kind: 'error', error: `composeWorkspace failed: ${err.message}` };
|
|
49
|
+
}
|
|
43
50
|
return {
|
|
44
51
|
kind: 'workspace',
|
|
45
|
-
|
|
52
|
+
spec,
|
|
53
|
+
result,
|
|
54
|
+
contextMessage: getComposedWorkspaceContext(result),
|
|
46
55
|
};
|
|
47
56
|
}
|
|
57
|
+
if (plan.kind !== 'starter') {
|
|
58
|
+
return { kind: 'error', error: `planPrompt returned unexpected kind: ${plan.kind}` };
|
|
59
|
+
}
|
|
48
60
|
// planPrompt has already attached capabilities, industry, and family-default
|
|
49
61
|
// capabilities (tailwind + shadcn for React families). The spec is ready to compose.
|
|
50
62
|
const spec = {
|
|
@@ -65,4 +77,15 @@ export async function composeFromPrompt(options) {
|
|
|
65
77
|
contextMessage: getComposedScaffoldContext(result),
|
|
66
78
|
};
|
|
67
79
|
}
|
|
80
|
+
function getComposedWorkspaceContext(result) {
|
|
81
|
+
const lines = [
|
|
82
|
+
`Composed workspace with ${result.projectCount} project(s) at ${result.outDir}.`,
|
|
83
|
+
`Launch plan written to ${result.launchPlanPath}.`,
|
|
84
|
+
`Workspace report written to ${result.workspaceReportPath}.`,
|
|
85
|
+
'',
|
|
86
|
+
'Projects:',
|
|
87
|
+
...result.projects.map((p) => ` - ${p.id} (${p.components.family}) → ${p.path}`),
|
|
88
|
+
];
|
|
89
|
+
return lines.join('\n');
|
|
90
|
+
}
|
|
68
91
|
//# sourceMappingURL=compose-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-prompt.js","sourceRoot":"","sources":["../../src/lib/compose-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"compose-prompt.js","sourceRoot":"","sources":["../../src/lib/compose-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ComposeSpec } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derive the 32-byte replay seed for a compose spec. Pure function of
|
|
4
|
+
* the spec shape — not of time, random, or env unless the operator
|
|
5
|
+
* explicitly overrides via STARTER_FOUNDRY_SEED.
|
|
6
|
+
*/
|
|
7
|
+
export declare function deriveComposeSeed(spec: ComposeSpec, envSeed?: string): Buffer;
|
|
8
|
+
/**
|
|
9
|
+
* Convenience: first 4 bytes as uint32 (for modulo picks).
|
|
10
|
+
*/
|
|
11
|
+
export declare function seedToUint32(seed: Buffer): number;
|
|
12
|
+
/**
|
|
13
|
+
* Convenience: hex-encoded seed for logging + audit trails.
|
|
14
|
+
*/
|
|
15
|
+
export declare function seedToHex(seed: Buffer): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// compose-seed.ts — deterministic seed for bit-identical replay of
|
|
2
|
+
// composeStarter(). Every component of the compose result that's
|
|
3
|
+
// seed-dependent (variant picks, library version picks, brand-tokens
|
|
4
|
+
// hash fallback) reads a single 32-byte seed derived from:
|
|
5
|
+
//
|
|
6
|
+
// SHA-256(projectName + "|" + family + "|" + sorted(layers).join(",") + "|" + partnerId)
|
|
7
|
+
//
|
|
8
|
+
// Plus an optional STARTER_FOUNDRY_SEED env override for testing or
|
|
9
|
+
// explicit replay. Passing the same spec + same seed to composeStarter
|
|
10
|
+
// must produce byte-identical output — the reproducibility guarantee
|
|
11
|
+
// consumers need for signed audit trails + supply-chain provenance.
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
|
+
/**
|
|
14
|
+
* Derive the 32-byte replay seed for a compose spec. Pure function of
|
|
15
|
+
* the spec shape — not of time, random, or env unless the operator
|
|
16
|
+
* explicitly overrides via STARTER_FOUNDRY_SEED.
|
|
17
|
+
*/
|
|
18
|
+
export function deriveComposeSeed(spec, envSeed) {
|
|
19
|
+
const override = envSeed ?? process.env['STARTER_FOUNDRY_SEED'];
|
|
20
|
+
if (override && /^[a-f0-9]{64}$/i.test(override)) {
|
|
21
|
+
return Buffer.from(override, 'hex');
|
|
22
|
+
}
|
|
23
|
+
const layers = [...(spec.layers ?? [])].sort().join(',');
|
|
24
|
+
const parts = [
|
|
25
|
+
spec.projectName,
|
|
26
|
+
spec.family,
|
|
27
|
+
layers,
|
|
28
|
+
spec.partner ?? '',
|
|
29
|
+
];
|
|
30
|
+
return createHash('sha256').update(parts.join('|')).digest();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Convenience: first 4 bytes as uint32 (for modulo picks).
|
|
34
|
+
*/
|
|
35
|
+
export function seedToUint32(seed) {
|
|
36
|
+
return seed.readUInt32BE(0);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Convenience: hex-encoded seed for logging + audit trails.
|
|
40
|
+
*/
|
|
41
|
+
export function seedToHex(seed) {
|
|
42
|
+
return seed.toString('hex');
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=compose-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-seed.js","sourceRoot":"","sources":["../../src/lib/compose-seed.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,iEAAiE;AACjE,qEAAqE;AACrE,2DAA2D;AAC3D,EAAE;AACF,2FAA2F;AAC3F,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,OAAgB;IACnE,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC/D,IAAI,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM;QACX,MAAM;QACN,IAAI,CAAC,OAAO,IAAI,EAAE;KACnB,CAAA;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC"}
|
package/dist/lib/compose.js
CHANGED
|
@@ -2,7 +2,9 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { generateBuildPlan } from './build-plan.js';
|
|
4
4
|
import { ensureDir, sanitizePackageName, writeJson } from './fs.js';
|
|
5
|
+
import { renderIndustryFirstTurn } from './industry-flows.js';
|
|
5
6
|
import { buildVariables, resolveComponents, resolveTemplateObject } from './registry.js';
|
|
7
|
+
import { selectTemplateVersion } from './selection.js';
|
|
6
8
|
import { emit, traced } from './telemetry.js';
|
|
7
9
|
const HTML_LIKE_EXTS = new Set(['.tsx', '.jsx', '.html']);
|
|
8
10
|
function escapeHtmlChars(value) {
|
|
@@ -84,6 +86,11 @@ export async function composeStarter({ spec, outDir }) {
|
|
|
84
86
|
});
|
|
85
87
|
const layers = result.components.layers;
|
|
86
88
|
const industry = layers.find((l) => l.startsWith('industry:')) ?? null;
|
|
89
|
+
// Observe what diverse-serve would pick from the template-library for
|
|
90
|
+
// this compose. Doesn't change file resolution (registry/ is still the
|
|
91
|
+
// canonical serve path); purely a telemetry signal so we can see the
|
|
92
|
+
// env flag wiring in production traces before we flip default behavior.
|
|
93
|
+
const diverseVersion = selectTemplateVersion(spec.family, spec.projectName);
|
|
87
94
|
emit('compose', {
|
|
88
95
|
family: spec.family,
|
|
89
96
|
layers,
|
|
@@ -91,6 +98,8 @@ export async function composeStarter({ spec, outDir }) {
|
|
|
91
98
|
partner: spec.partner ?? null,
|
|
92
99
|
industry,
|
|
93
100
|
durationMs,
|
|
101
|
+
templateVersion: diverseVersion,
|
|
102
|
+
diverseServe: process.env['STARTER_FOUNDRY_DIVERSE_SERVE'] === '1' || process.env['STARTER_FOUNDRY_DIVERSE_SERVE'] === 'true',
|
|
94
103
|
});
|
|
95
104
|
return result;
|
|
96
105
|
}
|
|
@@ -115,6 +124,39 @@ async function mergeMediaManifests(outDir) {
|
|
|
115
124
|
await fs.writeFile(manifestPath, `${JSON.stringify(merged, null, 2)}\n`, 'utf8');
|
|
116
125
|
return merged.slots;
|
|
117
126
|
}
|
|
127
|
+
// Merge each applied layer's declared packageDeps into the composed
|
|
128
|
+
// package.json. Runs after every file is written so the family's package.json
|
|
129
|
+
// is on disk; we read it, merge, write back. No-op if the family has no
|
|
130
|
+
// package.json (Rust/Go/Python scaffolds).
|
|
131
|
+
async function mergeLayerPackageDeps(outDir, layers) {
|
|
132
|
+
const pkgPath = path.join(outDir, 'package.json');
|
|
133
|
+
let pkg;
|
|
134
|
+
try {
|
|
135
|
+
pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'));
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
let touched = false;
|
|
141
|
+
for (const layer of layers) {
|
|
142
|
+
const deps = layer.packageDeps;
|
|
143
|
+
if (!deps)
|
|
144
|
+
continue;
|
|
145
|
+
if (deps.dependencies) {
|
|
146
|
+
const existing = (pkg.dependencies ?? {});
|
|
147
|
+
pkg.dependencies = { ...existing, ...deps.dependencies };
|
|
148
|
+
touched = true;
|
|
149
|
+
}
|
|
150
|
+
if (deps.devDependencies) {
|
|
151
|
+
const existing = (pkg.devDependencies ?? {});
|
|
152
|
+
pkg.devDependencies = { ...existing, ...deps.devDependencies };
|
|
153
|
+
touched = true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (!touched)
|
|
157
|
+
return;
|
|
158
|
+
await fs.writeFile(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`, 'utf8');
|
|
159
|
+
}
|
|
118
160
|
async function composeStarterInner(spec, outDir) {
|
|
119
161
|
const components = await resolveComponents(spec);
|
|
120
162
|
const variables = buildVariables({
|
|
@@ -141,6 +183,7 @@ async function composeStarterInner(spec, outDir) {
|
|
|
141
183
|
filesWritten.push(resolvedTarget);
|
|
142
184
|
}
|
|
143
185
|
}
|
|
186
|
+
await mergeLayerPackageDeps(outDir, components.layers);
|
|
144
187
|
const composeReport = {
|
|
145
188
|
spec,
|
|
146
189
|
components: {
|
|
@@ -166,13 +209,40 @@ async function composeStarterInner(spec, outDir) {
|
|
|
166
209
|
// Generate llms.txt — machine-readable project description for AI agents
|
|
167
210
|
const llmsTxt = buildLlmsTxt(spec, components, composeReport.contextHints);
|
|
168
211
|
await fs.writeFile(path.join(outDir, 'llms.txt'), `${llmsTxt}\n`, 'utf8');
|
|
212
|
+
// Generate SBOM (CycloneDX) from the composed scaffold's dep manifest.
|
|
213
|
+
const { writeSbom } = await import('./sbom.js');
|
|
214
|
+
const sbomPath = await writeSbom(outDir, spec.projectName);
|
|
215
|
+
// Collect optional prompt-fragment.md files from family + partner.
|
|
216
|
+
const promptFragment = await collectPromptFragment(components);
|
|
169
217
|
return {
|
|
170
218
|
outDir,
|
|
171
219
|
filesWritten: [...new Set([...filesWritten, 'AGENTS.md', 'CLAUDE.md', 'llms.txt'])].sort(),
|
|
172
220
|
composeReportPath: path.join(outDir, '.starter-foundry', 'compose-report.json'),
|
|
173
221
|
components: composeReport.components,
|
|
222
|
+
promptFragment,
|
|
223
|
+
sbomPath,
|
|
174
224
|
};
|
|
175
225
|
}
|
|
226
|
+
async function collectPromptFragment(components) {
|
|
227
|
+
const fragments = [];
|
|
228
|
+
const familyFrag = path.join(components.family.baseDir, 'prompt-fragment.md');
|
|
229
|
+
try {
|
|
230
|
+
fragments.push(await fs.readFile(familyFrag, 'utf8'));
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Optional file — absence is fine.
|
|
234
|
+
}
|
|
235
|
+
if (components.partner) {
|
|
236
|
+
const partnerFrag = path.join(components.partner.baseDir, 'prompt-fragment.md');
|
|
237
|
+
try {
|
|
238
|
+
fragments.push(await fs.readFile(partnerFrag, 'utf8'));
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Optional.
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return fragments.join('\n\n---\n\n').trim();
|
|
245
|
+
}
|
|
176
246
|
function buildLlmsTxt(spec, components, contextHints) {
|
|
177
247
|
const lines = [
|
|
178
248
|
`# ${spec.projectName}`,
|
|
@@ -211,7 +281,12 @@ function buildAgentsMd(spec, components, contextHints, mediaSlots = []) {
|
|
|
211
281
|
// bare `pnpm install`/`pnpm dev` calls (they race the agent's edits, have
|
|
212
282
|
// no error taxonomy, and aren't tracked by the runtime).
|
|
213
283
|
lines.push('## Step 0 — Start the dev server (do this FIRST)', '', 'Before reading anything else in this file, run this command in `bash` to start the dev server. The user is waiting for a preview. This is idempotent — safe to call multiple times (returns the same pid). It auto-installs dependencies on first call, so you do NOT need to run `pnpm install` separately. Subsequent edits hot-reload via HMR; do NOT call this again to restart unless the response says you should.', '', '```bash', 'curl -fsS -X POST "http://localhost:${SIDECAR_PORT:-9000}/process/ensure-dev-server" -H "Content-Type: application/json" -H "Authorization: Bearer ${SIDECAR_AUTH_TOKEN}" -d \'{}\'', '```', '', 'The `SIDECAR_PORT` and `SIDECAR_AUTH_TOKEN` env vars are pre-set in your bash environment — you do NOT need to look them up.', '', 'CRITICAL: Do NOT run `pnpm install`, `pnpm dev`, `npm install`, `npm run dev`, `next dev`, `vite`, `cargo run`, or any other dev/install command via `bash` directly. The command above handles all of that AND tracks the dev process for the runtime so the user\'s preview pane wires up automatically. Running them directly bypasses the runtime tracking and the user will not see a preview.', '', 'The response is JSON: `{ "success": true, "data": { "pid": ..., "family": "node-pnpm", "command": "...", "startedNow": true|false, "installRan": true|false } }`. On error: `{ "success": false, "error": { "code": "...", "message": "..." } }` with codes `WORKSPACE_NOT_FOUND | NO_RUNNABLE_PROJECT | INSTALL_FAILED | DEV_COMMAND_NOT_FOUND | DEV_PROCESS_EXITED | PORT_BIND_FAILED`. React to each: `INSTALL_FAILED` → read the `log` field, fix `package.json`, call again; `DEV_COMMAND_NOT_FOUND` → add a `dev` script to `package.json`, call again; `DEV_PROCESS_EXITED` → read `log`, fix the bug in `src/`, call again.', '');
|
|
214
|
-
|
|
284
|
+
// User's prompt — echo it near the top so the agent sees its brief
|
|
285
|
+
// before the scaffold's default behavior.
|
|
286
|
+
if (spec.userPrompt) {
|
|
287
|
+
lines.push('## User\'s brief (takes priority over everything else in this file)', '', `> ${spec.userPrompt.replace(/\n/g, '\n> ')}`, '');
|
|
288
|
+
}
|
|
289
|
+
lines.push('## What\'s here', '', `This project was scaffolded by starter-foundry. The choices below were made deterministically from the user's brief.`, '', `- **Family:** \`${spec.family}\``, `- **Layers:** ${components.layers.map((l) => `\`${l.group}:${l.id}\``).join(', ')}`);
|
|
215
290
|
if (components.partner) {
|
|
216
291
|
lines.push(`- **Partner:** \`${components.partner.id}\``);
|
|
217
292
|
}
|
|
@@ -241,6 +316,34 @@ function buildAgentsMd(spec, components, contextHints, mediaSlots = []) {
|
|
|
241
316
|
lines.push(`- **Integrations:** ${buildPlan.integrations.join(', ')}`);
|
|
242
317
|
lines.push('');
|
|
243
318
|
}
|
|
319
|
+
if (buildPlan.placeholders.length > 0) {
|
|
320
|
+
lines.push('## Placeholders — MUST replace', '', 'These files ship DEFAULT content so the preview renders before your first edit. You MUST replace them with product-specific behavior for the user\'s brief. Rewriting `personalize.json` updates brand strings only — it does NOT replace the content in these files. Treat this list as required-to-rewrite.', '');
|
|
321
|
+
for (const { source, path, description } of buildPlan.placeholders) {
|
|
322
|
+
lines.push(`- \`${path}\` — ${description} _(${source})_`);
|
|
323
|
+
}
|
|
324
|
+
lines.push('');
|
|
325
|
+
}
|
|
326
|
+
// Industry first-turn flow — steers the agent toward the right first
|
|
327
|
+
// feature for the product archetype. Empty string when no industry:*
|
|
328
|
+
// layer is attached or the industry isn't in the known map.
|
|
329
|
+
const industryBlock = renderIndustryFirstTurn(components.layers.map((l) => `${l.group}:${l.id}`));
|
|
330
|
+
if (industryBlock) {
|
|
331
|
+
lines.push(industryBlock);
|
|
332
|
+
}
|
|
333
|
+
if (buildPlan.domainFirstSteps.length > 0) {
|
|
334
|
+
lines.push('## Domain first moves', '', 'Runtime-specific actions declared by the selected family + layers + partner. Do these before generic setup — they prevent the most common class of first-turn mistakes for this stack.', '');
|
|
335
|
+
for (const { source, step } of buildPlan.domainFirstSteps) {
|
|
336
|
+
lines.push(`- **[${source}]** ${step}`);
|
|
337
|
+
}
|
|
338
|
+
lines.push('');
|
|
339
|
+
}
|
|
340
|
+
if (buildPlan.domainGotchas.length > 0) {
|
|
341
|
+
lines.push('## Gotchas', '', 'Traps specific to this stack — read before you hit them.', '');
|
|
342
|
+
for (const { source, note } of buildPlan.domainGotchas) {
|
|
343
|
+
lines.push(`- **[${source}]** ${note}`);
|
|
344
|
+
}
|
|
345
|
+
lines.push('');
|
|
346
|
+
}
|
|
244
347
|
if (buildPlan.designDirective) {
|
|
245
348
|
lines.push('## Design', '', buildPlan.designDirective, '');
|
|
246
349
|
}
|
|
@@ -251,6 +354,8 @@ function buildAgentsMd(spec, components, contextHints, mediaSlots = []) {
|
|
|
251
354
|
}
|
|
252
355
|
lines.push('', 'Skip any slots that don\'t apply. Add new ones if the product needs them.', '');
|
|
253
356
|
}
|
|
357
|
+
// Progressive disclosure — turn-order sections agents pattern-match on.
|
|
358
|
+
lines.push('## Turn 1 (do these before writing features)', '', '1. Call the dev-server route from Step 0 (above). Wait for success.', '2. Read the user\'s brief (above) and the Placeholders section.', '3. Rewrite `personalize.json` + `personalize.css` (brand strings + palette). These are render-time — preview updates on next refresh, no rebuild.', '4. Delete or rewrite EVERY file in the Placeholders list. Not optional.', '5. Only after (3) + (4) do you start feature work.', '', '## Before first preview screenshot', '', '- Confirm the landing surface renders the user\'s product (no default KPI cards from a dashboard template).', '- Brand strings in `personalize.json` are product-specific, not the scaffold default.', '- Any placeholder file in the list above has been replaced or deleted.', '', '## Before shipping', '', '- Run the family\'s validate script (see Key files above).', '- Re-check Gotchas (above) against what you built — those traps bite most at ship time.', '- If you added deps, they\'re in `package.json`; if you added routes/pages, they\'re reachable.', '');
|
|
254
359
|
lines.push('## How to use this scaffold', '', 'This is a starting point, not a contract. You own every file.', '', '- **Customize freely.** Replace components, change the layout, swap the color scheme — whatever fits the user\'s product.', '- **The scaffold saves you setup time** — Tailwind, shadcn/ui, path aliases, and framework config are ready. Don\'t redo them.', '- **Check `.starter-foundry/compose-report.json`** if you want to see which layer wrote which file.', '- **Update this file** as the project evolves. Delete sections that no longer apply.');
|
|
255
360
|
return lines.join('\n');
|
|
256
361
|
}
|