cfsa-antigravity 1.0.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/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-sdk
|
|
3
|
+
description: 'Answer questions about the AI SDK and help build AI-powered features. Use when developers: (1) Ask about AI SDK functions like generateText, streamText, ToolLoopAgent, embed, or tools, (2) Want to build AI agents, chatbots, RAG systems, or text generation features, (3) Have questions about AI providers (OpenAI, Anthropic, Google, etc.), streaming, tool calling, structured output, or embeddings, (4) Use React hooks like useChat or useCompletion. Triggers on: "AI SDK", "Vercel AI SDK", "generateText", "streamText", "add AI to my app", "build an agent", "tool calling", "structured output", "useChat".'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
Before searching docs, check if `node_modules/ai/docs/` exists. If not, install **only** the `ai` package using the project's package manager (e.g., `pnpm add ai`).
|
|
9
|
+
|
|
10
|
+
Do not install other packages at this stage. Provider packages (e.g., `@ai-sdk/openai`) and client packages (e.g., `@ai-sdk/react`) should be installed later when needed based on user requirements.
|
|
11
|
+
|
|
12
|
+
## Critical: Do Not Trust Internal Knowledge
|
|
13
|
+
|
|
14
|
+
Everything you know about the AI SDK is outdated or wrong. Your training data contains obsolete APIs, deprecated patterns, and incorrect usage.
|
|
15
|
+
|
|
16
|
+
**When working with the AI SDK:**
|
|
17
|
+
|
|
18
|
+
1. Ensure `ai` package is installed (see Prerequisites)
|
|
19
|
+
2. Search `node_modules/ai/docs/` and `node_modules/ai/src/` for current APIs
|
|
20
|
+
3. If not found locally, search ai-sdk.dev documentation (instructions below)
|
|
21
|
+
4. Never rely on memory - always verify against source code or docs
|
|
22
|
+
5. **`useChat` has changed significantly** - check [Common Errors](references/common-errors.md) before writing client code
|
|
23
|
+
6. When deciding which model and provider to use (e.g. OpenAI, Anthropic, Gemini), use the Vercel AI Gateway provider unless the user specifies otherwise. See [AI Gateway Reference](references/ai-gateway.md) for usage details.
|
|
24
|
+
7. **Always fetch current model IDs** - Never use model IDs from memory. Before writing code that uses a model, run `curl -s https://ai-gateway.vercel.sh/v1/models | jq -r '[.data[] | select(.id | startswith("provider/")) | .id] | reverse | .[]'` (replacing `provider` with the relevant provider like `anthropic`, `openai`, or `google`) to get the full list with newest models first. Use the model with the highest version number (e.g., `claude-sonnet-4-5` over `claude-sonnet-4` over `claude-3-5-sonnet`).
|
|
25
|
+
8. Run typecheck after changes to ensure code is correct
|
|
26
|
+
9. **Be minimal** - Only specify options that differ from defaults. When unsure of defaults, check docs or source rather than guessing or over-specifying.
|
|
27
|
+
|
|
28
|
+
If you cannot find documentation to support your answer, state that explicitly.
|
|
29
|
+
|
|
30
|
+
## Finding Documentation
|
|
31
|
+
|
|
32
|
+
### ai@6.0.34+
|
|
33
|
+
|
|
34
|
+
Search bundled docs and source in `node_modules/ai/`:
|
|
35
|
+
|
|
36
|
+
- **Docs**: `grep "query" node_modules/ai/docs/`
|
|
37
|
+
- **Source**: `grep "query" node_modules/ai/src/`
|
|
38
|
+
|
|
39
|
+
Provider packages include docs at `node_modules/@ai-sdk/<provider>/docs/`.
|
|
40
|
+
|
|
41
|
+
### Earlier versions
|
|
42
|
+
|
|
43
|
+
1. Search: `https://ai-sdk.dev/api/search-docs?q=your_query`
|
|
44
|
+
2. Fetch `.md` URLs from results (e.g., `https://ai-sdk.dev/docs/agents/building-agents.md`)
|
|
45
|
+
|
|
46
|
+
## When Typecheck Fails
|
|
47
|
+
|
|
48
|
+
**Before searching source code**, grep [Common Errors](references/common-errors.md) for the failing property or function name. Many type errors are caused by deprecated APIs documented there.
|
|
49
|
+
|
|
50
|
+
If not found in common-errors.md:
|
|
51
|
+
|
|
52
|
+
1. Search `node_modules/ai/src/` and `node_modules/ai/docs/`
|
|
53
|
+
2. Search ai-sdk.dev (for earlier versions or if not found locally)
|
|
54
|
+
|
|
55
|
+
## Building and Consuming Agents
|
|
56
|
+
|
|
57
|
+
### Creating Agents
|
|
58
|
+
|
|
59
|
+
Always use the `ToolLoopAgent` pattern. Search `node_modules/ai/docs/` for current agent creation APIs.
|
|
60
|
+
|
|
61
|
+
**File conventions**: See [type-safe-agents.md](references/type-safe-agents.md) for where to save agents and tools.
|
|
62
|
+
|
|
63
|
+
**Type Safety**: When consuming agents with `useChat`, always use `InferAgentUIMessage<typeof agent>` for type-safe tool results. See [reference](references/type-safe-agents.md).
|
|
64
|
+
|
|
65
|
+
### Consuming Agents (Framework-Specific)
|
|
66
|
+
|
|
67
|
+
Before implementing agent consumption:
|
|
68
|
+
|
|
69
|
+
1. Check `package.json` to detect the project's framework/stack
|
|
70
|
+
2. Search documentation for the framework's quickstart guide
|
|
71
|
+
3. Follow the framework-specific patterns for streaming, API routes, and client integration
|
|
72
|
+
|
|
73
|
+
## References
|
|
74
|
+
|
|
75
|
+
- [Common Errors](references/common-errors.md) - Renamed parameters reference (parameters → inputSchema, etc.)
|
|
76
|
+
- [AI Gateway](references/ai-gateway.md) - Gateway setup and usage
|
|
77
|
+
- [Type-Safe Agents with useChat](references/type-safe-agents.md) - End-to-end type safety with InferAgentUIMessage
|
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: langchain
|
|
3
|
+
description: |
|
|
4
|
+
Build with LangChain JS/TS — chains, agents, RAG, tool calling, memory, and LCEL pipe syntax. Use when: building LLM-powered applications with chains or agents, implementing RAG (retrieval-augmented generation), creating custom tools, composing prompts with templates, managing conversation memory, parsing structured output, integrating vector stores, or tracing/evaluating with LangSmith.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# LangChain (TypeScript)
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-16
|
|
12
|
+
**Packages**: `langchain@0.3.x`, `@langchain/core@0.3.x`, `@langchain/openai`, `@langchain/anthropic`, `@langchain/community`
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Core + OpenAI provider
|
|
20
|
+
pnpm add langchain @langchain/core @langchain/openai
|
|
21
|
+
|
|
22
|
+
# Additional providers as needed
|
|
23
|
+
pnpm add @langchain/anthropic # Anthropic Claude
|
|
24
|
+
pnpm add @langchain/community # Community integrations (Ollama, vector stores, etc.)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Core Concepts
|
|
30
|
+
|
|
31
|
+
LangChain organizes LLM applications into composable primitives:
|
|
32
|
+
|
|
33
|
+
| Concept | Purpose |
|
|
34
|
+
|---|---|
|
|
35
|
+
| **Chat Models** | Interface to LLM providers (OpenAI, Anthropic, Ollama) |
|
|
36
|
+
| **Prompt Templates** | Reusable, parameterized prompt construction |
|
|
37
|
+
| **Output Parsers** | Transform raw LLM text into structured data |
|
|
38
|
+
| **Chains (LCEL)** | Compose components with pipe syntax |
|
|
39
|
+
| **Retrievers** | Fetch relevant documents for context |
|
|
40
|
+
| **Agents** | LLMs that decide which tools to call |
|
|
41
|
+
| **Tools** | Functions the LLM can invoke |
|
|
42
|
+
| **Memory** | Persist conversation history across calls |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Chat Models
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
50
|
+
import { ChatAnthropic } from "@langchain/anthropic";
|
|
51
|
+
|
|
52
|
+
// OpenAI
|
|
53
|
+
const gpt4o = new ChatOpenAI({
|
|
54
|
+
model: "gpt-4o",
|
|
55
|
+
temperature: 0.7,
|
|
56
|
+
maxTokens: 1000,
|
|
57
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Anthropic
|
|
61
|
+
const claude = new ChatAnthropic({
|
|
62
|
+
model: "claude-sonnet-4-20250514",
|
|
63
|
+
temperature: 0.7,
|
|
64
|
+
maxTokens: 1000,
|
|
65
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Basic invocation
|
|
69
|
+
const response = await gpt4o.invoke("What is the capital of France?");
|
|
70
|
+
console.log(response.content); // "The capital of France is Paris."
|
|
71
|
+
|
|
72
|
+
// With message types
|
|
73
|
+
import { HumanMessage, SystemMessage, AIMessage } from "@langchain/core/messages";
|
|
74
|
+
|
|
75
|
+
const response = await gpt4o.invoke([
|
|
76
|
+
new SystemMessage("You are a helpful assistant."),
|
|
77
|
+
new HumanMessage("Explain quantum computing briefly."),
|
|
78
|
+
]);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## LangChain Expression Language (LCEL)
|
|
84
|
+
|
|
85
|
+
LCEL is the composition primitive. Components are piped together with `.pipe()`.
|
|
86
|
+
|
|
87
|
+
### Basic Chain
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
91
|
+
import { ChatPromptTemplate } from "@langchain/core/prompts";
|
|
92
|
+
import { StringOutputParser } from "@langchain/core/output_parsers";
|
|
93
|
+
|
|
94
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
95
|
+
["system", "You are a helpful assistant that translates {input_language} to {output_language}."],
|
|
96
|
+
["human", "{input}"],
|
|
97
|
+
]);
|
|
98
|
+
|
|
99
|
+
const model = new ChatOpenAI({ model: "gpt-4o-mini" });
|
|
100
|
+
const parser = new StringOutputParser();
|
|
101
|
+
|
|
102
|
+
// Pipe: prompt -> model -> parser
|
|
103
|
+
const chain = prompt.pipe(model).pipe(parser);
|
|
104
|
+
|
|
105
|
+
const result = await chain.invoke({
|
|
106
|
+
input_language: "English",
|
|
107
|
+
output_language: "French",
|
|
108
|
+
input: "Hello, how are you?",
|
|
109
|
+
});
|
|
110
|
+
// result: "Bonjour, comment allez-vous ?"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### RunnableSequence (Explicit)
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import { RunnableSequence, RunnablePassthrough } from "@langchain/core/runnables";
|
|
117
|
+
|
|
118
|
+
const chain = RunnableSequence.from([
|
|
119
|
+
{
|
|
120
|
+
context: retriever, // Fetches relevant docs
|
|
121
|
+
question: new RunnablePassthrough(), // Passes input through
|
|
122
|
+
},
|
|
123
|
+
prompt,
|
|
124
|
+
model,
|
|
125
|
+
parser,
|
|
126
|
+
]);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Parallel Execution (RunnableParallel)
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { RunnableParallel } from "@langchain/core/runnables";
|
|
133
|
+
|
|
134
|
+
const analysisChain = RunnableParallel.from({
|
|
135
|
+
summary: summaryChain,
|
|
136
|
+
sentiment: sentimentChain,
|
|
137
|
+
keywords: keywordsChain,
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const result = await analysisChain.invoke({ text: "Product review text..." });
|
|
141
|
+
// { summary: "...", sentiment: "positive", keywords: ["quality", "price"] }
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Branching (RunnableRouter)
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
import { RunnableBranch } from "@langchain/core/runnables";
|
|
148
|
+
|
|
149
|
+
const routerChain = RunnableBranch.from([
|
|
150
|
+
[(input) => input.topic === "technical", technicalChain],
|
|
151
|
+
[(input) => input.topic === "billing", billingChain],
|
|
152
|
+
generalChain, // Default
|
|
153
|
+
]);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Prompt Templates
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
import { ChatPromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts";
|
|
162
|
+
|
|
163
|
+
// Simple template
|
|
164
|
+
const simple = ChatPromptTemplate.fromMessages([
|
|
165
|
+
["system", "You are a {role} assistant."],
|
|
166
|
+
["human", "{question}"],
|
|
167
|
+
]);
|
|
168
|
+
|
|
169
|
+
// With conversation history
|
|
170
|
+
const withHistory = ChatPromptTemplate.fromMessages([
|
|
171
|
+
["system", "You are a helpful assistant."],
|
|
172
|
+
new MessagesPlaceholder("chat_history"), // Injects previous messages
|
|
173
|
+
["human", "{input}"],
|
|
174
|
+
]);
|
|
175
|
+
|
|
176
|
+
// Usage
|
|
177
|
+
await withHistory.invoke({
|
|
178
|
+
chat_history: [
|
|
179
|
+
new HumanMessage("Hi"),
|
|
180
|
+
new AIMessage("Hello! How can I help?"),
|
|
181
|
+
],
|
|
182
|
+
input: "What did I just say?",
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Output Parsers
|
|
189
|
+
|
|
190
|
+
### String Parser
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
import { StringOutputParser } from "@langchain/core/output_parsers";
|
|
194
|
+
|
|
195
|
+
const chain = prompt.pipe(model).pipe(new StringOutputParser());
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Structured Output with Zod
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
import { z } from "zod";
|
|
202
|
+
|
|
203
|
+
const ReviewSchema = z.object({
|
|
204
|
+
sentiment: z.enum(["positive", "negative", "neutral"]),
|
|
205
|
+
confidence: z.number().min(0).max(1),
|
|
206
|
+
summary: z.string(),
|
|
207
|
+
key_points: z.array(z.string()),
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// Method 1: withStructuredOutput (preferred — uses tool calling under the hood)
|
|
211
|
+
const structuredModel = model.withStructuredOutput(ReviewSchema);
|
|
212
|
+
const result = await structuredModel.invoke("Review: This product is amazing, great quality!");
|
|
213
|
+
// result: { sentiment: "positive", confidence: 0.95, summary: "...", key_points: [...] }
|
|
214
|
+
|
|
215
|
+
// Method 2: StructuredOutputParser (older approach, uses prompt instructions)
|
|
216
|
+
import { StructuredOutputParser } from "@langchain/core/output_parsers";
|
|
217
|
+
|
|
218
|
+
const parser = StructuredOutputParser.fromZodSchema(ReviewSchema);
|
|
219
|
+
const formatInstructions = parser.getFormatInstructions();
|
|
220
|
+
// Include formatInstructions in prompt, then parse response
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### JSON Output Parser
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
import { JsonOutputParser } from "@langchain/core/output_parsers";
|
|
227
|
+
|
|
228
|
+
const parser = new JsonOutputParser();
|
|
229
|
+
const chain = prompt.pipe(model).pipe(parser);
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Retrieval (RAG)
|
|
235
|
+
|
|
236
|
+
### Document Loading
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
|
|
240
|
+
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
|
|
241
|
+
import { WebLoader } from "@langchain/community/document_loaders/web/cheerio";
|
|
242
|
+
|
|
243
|
+
// Load PDF
|
|
244
|
+
const pdfLoader = new PDFLoader("./docs/manual.pdf");
|
|
245
|
+
const pdfDocs = await pdfLoader.load();
|
|
246
|
+
|
|
247
|
+
// Split into chunks
|
|
248
|
+
const splitter = new RecursiveCharacterTextSplitter({
|
|
249
|
+
chunkSize: 1000,
|
|
250
|
+
chunkOverlap: 200,
|
|
251
|
+
separators: ["\n\n", "\n", ". ", " ", ""],
|
|
252
|
+
});
|
|
253
|
+
const chunks = await splitter.splitDocuments(pdfDocs);
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Vector Store
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
import { OpenAIEmbeddings } from "@langchain/openai";
|
|
260
|
+
import { MemoryVectorStore } from "langchain/vectorstores/memory";
|
|
261
|
+
// For production: use Pinecone, Supabase, Chroma, etc.
|
|
262
|
+
|
|
263
|
+
const embeddings = new OpenAIEmbeddings({ model: "text-embedding-3-small" });
|
|
264
|
+
|
|
265
|
+
// Create store from documents
|
|
266
|
+
const vectorStore = await MemoryVectorStore.fromDocuments(chunks, embeddings);
|
|
267
|
+
|
|
268
|
+
// Create retriever
|
|
269
|
+
const retriever = vectorStore.asRetriever({
|
|
270
|
+
k: 4, // Number of documents to retrieve
|
|
271
|
+
searchType: "similarity", // or "mmr" for diversity
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
// Retrieve relevant docs
|
|
275
|
+
const relevantDocs = await retriever.invoke("How do I reset my password?");
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### RAG Chain
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
import { ChatPromptTemplate } from "@langchain/core/prompts";
|
|
282
|
+
import { RunnablePassthrough, RunnableSequence } from "@langchain/core/runnables";
|
|
283
|
+
import { StringOutputParser } from "@langchain/core/output_parsers";
|
|
284
|
+
import { formatDocumentsAsString } from "langchain/util/document";
|
|
285
|
+
|
|
286
|
+
const ragPrompt = ChatPromptTemplate.fromMessages([
|
|
287
|
+
[
|
|
288
|
+
"system",
|
|
289
|
+
`Answer the question based only on the following context. If the context
|
|
290
|
+
doesn't contain the answer, say "I don't have enough information to answer that."
|
|
291
|
+
|
|
292
|
+
Context: {context}`,
|
|
293
|
+
],
|
|
294
|
+
["human", "{question}"],
|
|
295
|
+
]);
|
|
296
|
+
|
|
297
|
+
const ragChain = RunnableSequence.from([
|
|
298
|
+
{
|
|
299
|
+
context: retriever.pipe(formatDocumentsAsString),
|
|
300
|
+
question: new RunnablePassthrough(),
|
|
301
|
+
},
|
|
302
|
+
ragPrompt,
|
|
303
|
+
model,
|
|
304
|
+
new StringOutputParser(),
|
|
305
|
+
]);
|
|
306
|
+
|
|
307
|
+
const answer = await ragChain.invoke("How do I reset my password?");
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Agents
|
|
313
|
+
|
|
314
|
+
### Tool-Calling Agent (Recommended)
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
318
|
+
import { createToolCallingAgent, AgentExecutor } from "langchain/agents";
|
|
319
|
+
import { ChatPromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts";
|
|
320
|
+
import { DynamicStructuredTool } from "@langchain/core/tools";
|
|
321
|
+
import { z } from "zod";
|
|
322
|
+
|
|
323
|
+
// Define tools
|
|
324
|
+
const weatherTool = new DynamicStructuredTool({
|
|
325
|
+
name: "get_weather",
|
|
326
|
+
description: "Get current weather for a city",
|
|
327
|
+
schema: z.object({
|
|
328
|
+
city: z.string().describe("City name"),
|
|
329
|
+
unit: z.enum(["celsius", "fahrenheit"]).default("celsius"),
|
|
330
|
+
}),
|
|
331
|
+
func: async ({ city, unit }) => {
|
|
332
|
+
const data = await fetchWeather(city, unit);
|
|
333
|
+
return JSON.stringify(data);
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
const searchTool = new DynamicStructuredTool({
|
|
338
|
+
name: "search_docs",
|
|
339
|
+
description: "Search internal documentation",
|
|
340
|
+
schema: z.object({
|
|
341
|
+
query: z.string().describe("Search query"),
|
|
342
|
+
}),
|
|
343
|
+
func: async ({ query }) => {
|
|
344
|
+
const results = await searchDocumentation(query);
|
|
345
|
+
return JSON.stringify(results);
|
|
346
|
+
},
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// Create agent
|
|
350
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
351
|
+
["system", "You are a helpful assistant with access to tools."],
|
|
352
|
+
new MessagesPlaceholder("chat_history"),
|
|
353
|
+
["human", "{input}"],
|
|
354
|
+
new MessagesPlaceholder("agent_scratchpad"),
|
|
355
|
+
]);
|
|
356
|
+
|
|
357
|
+
const model = new ChatOpenAI({ model: "gpt-4o", temperature: 0 });
|
|
358
|
+
const tools = [weatherTool, searchTool];
|
|
359
|
+
|
|
360
|
+
const agent = createToolCallingAgent({ llm: model, tools, prompt });
|
|
361
|
+
const executor = new AgentExecutor({ agent, tools, verbose: true });
|
|
362
|
+
|
|
363
|
+
const result = await executor.invoke({
|
|
364
|
+
input: "What's the weather in Tokyo?",
|
|
365
|
+
chat_history: [],
|
|
366
|
+
});
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Memory
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
import { BufferMemory } from "langchain/memory";
|
|
375
|
+
import { ConversationChain } from "langchain/chains";
|
|
376
|
+
|
|
377
|
+
// Buffer memory — stores all messages
|
|
378
|
+
const memory = new BufferMemory({
|
|
379
|
+
memoryKey: "chat_history",
|
|
380
|
+
returnMessages: true, // Return as Message objects (not string)
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
// With LCEL — manage history manually (recommended)
|
|
384
|
+
const messages: BaseMessage[] = [];
|
|
385
|
+
|
|
386
|
+
async function chat(userInput: string) {
|
|
387
|
+
messages.push(new HumanMessage(userInput));
|
|
388
|
+
|
|
389
|
+
const response = await chain.invoke({
|
|
390
|
+
chat_history: messages,
|
|
391
|
+
input: userInput,
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
messages.push(new AIMessage(response));
|
|
395
|
+
return response;
|
|
396
|
+
}
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### Summary Memory (For Long Conversations)
|
|
400
|
+
|
|
401
|
+
```typescript
|
|
402
|
+
import { ConversationSummaryMemory } from "langchain/memory";
|
|
403
|
+
|
|
404
|
+
const memory = new ConversationSummaryMemory({
|
|
405
|
+
llm: new ChatOpenAI({ model: "gpt-4o-mini" }),
|
|
406
|
+
memoryKey: "chat_history",
|
|
407
|
+
returnMessages: true,
|
|
408
|
+
});
|
|
409
|
+
// Summarizes older messages to stay within token limits
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## Callbacks and Streaming
|
|
415
|
+
|
|
416
|
+
```typescript
|
|
417
|
+
// Streaming with LCEL
|
|
418
|
+
const stream = await chain.stream({ question: "Explain gravity" });
|
|
419
|
+
|
|
420
|
+
for await (const chunk of stream) {
|
|
421
|
+
process.stdout.write(chunk); // Each chunk is a string token
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// Callbacks for observability
|
|
425
|
+
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
426
|
+
|
|
427
|
+
class LoggingHandler extends BaseCallbackHandler {
|
|
428
|
+
name = "logging";
|
|
429
|
+
|
|
430
|
+
async handleLLMStart(llm: any, prompts: string[]) {
|
|
431
|
+
console.log("LLM started:", prompts.length, "prompts");
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
async handleLLMEnd(output: any) {
|
|
435
|
+
console.log("LLM finished. Tokens:", output.llmOutput?.tokenUsage);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
async handleToolStart(tool: any, input: string) {
|
|
439
|
+
console.log(`Tool ${tool.name} called with:`, input);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
const result = await chain.invoke(input, {
|
|
444
|
+
callbacks: [new LoggingHandler()],
|
|
445
|
+
});
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## LangSmith Tracing
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
# Environment variables
|
|
454
|
+
LANGCHAIN_TRACING_V2=true
|
|
455
|
+
LANGCHAIN_API_KEY="ls__..."
|
|
456
|
+
LANGCHAIN_PROJECT="my-project"
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
When env vars are set, all LangChain calls are automatically traced. No code changes needed.
|
|
460
|
+
|
|
461
|
+
```typescript
|
|
462
|
+
// Custom run metadata
|
|
463
|
+
const result = await chain.invoke(input, {
|
|
464
|
+
runName: "customer-support-query",
|
|
465
|
+
metadata: { userId: "123", sessionId: "abc" },
|
|
466
|
+
tags: ["production", "support"],
|
|
467
|
+
});
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Common Patterns
|
|
473
|
+
|
|
474
|
+
### Conversational RAG
|
|
475
|
+
|
|
476
|
+
```typescript
|
|
477
|
+
// Rephrase question using chat history, then retrieve, then answer
|
|
478
|
+
const rephrasePrompt = ChatPromptTemplate.fromMessages([
|
|
479
|
+
["system", "Given the chat history, rephrase the follow-up question as a standalone question."],
|
|
480
|
+
new MessagesPlaceholder("chat_history"),
|
|
481
|
+
["human", "{input}"],
|
|
482
|
+
]);
|
|
483
|
+
|
|
484
|
+
const rephraseChain = rephrasePrompt.pipe(model).pipe(new StringOutputParser());
|
|
485
|
+
|
|
486
|
+
const conversationalRagChain = RunnableSequence.from([
|
|
487
|
+
{
|
|
488
|
+
context: rephraseChain.pipe(retriever).pipe(formatDocumentsAsString),
|
|
489
|
+
question: rephraseChain,
|
|
490
|
+
chat_history: (input: any) => input.chat_history,
|
|
491
|
+
},
|
|
492
|
+
ragPrompt,
|
|
493
|
+
model,
|
|
494
|
+
new StringOutputParser(),
|
|
495
|
+
]);
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
### Fallback Chains
|
|
499
|
+
|
|
500
|
+
```typescript
|
|
501
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
502
|
+
import { ChatAnthropic } from "@langchain/anthropic";
|
|
503
|
+
|
|
504
|
+
const primary = new ChatOpenAI({ model: "gpt-4o" });
|
|
505
|
+
const fallback = new ChatAnthropic({ model: "claude-sonnet-4-20250514" });
|
|
506
|
+
|
|
507
|
+
// If primary fails, automatically try fallback
|
|
508
|
+
const resilientModel = primary.withFallbacks({ fallbacks: [fallback] });
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## Anti-Patterns
|
|
514
|
+
|
|
515
|
+
| Anti-Pattern | Why It Breaks | Correct Approach |
|
|
516
|
+
|---|---|---|
|
|
517
|
+
| Over-engineering with chains when a single prompt works | Added complexity, more failure points | Start simple, add chains only when needed |
|
|
518
|
+
| Ignoring token limits in RAG context | Exceeds context window, errors or truncation | Track token count, truncate context intelligently |
|
|
519
|
+
| Using BufferMemory for long conversations | Memory grows unbounded, exceeds context | Use ConversationSummaryMemory or sliding window |
|
|
520
|
+
| Not validating tool outputs | LLM hallucinates tool results | Validate with Zod, handle parse errors |
|
|
521
|
+
| Chaining without error handling | One failure cascades to entire chain | Add `.withFallbacks()` or try/catch at chain level |
|
|
522
|
+
| Storing API keys in chain config | Key leakage in serialized chains | Always use environment variables |
|
|
523
|
+
| Using synchronous document loading in request handlers | Blocks event loop, slow responses | Pre-index documents, load async at startup |
|
|
524
|
+
| Not setting temperature to 0 for agents | Non-deterministic tool selection | Use `temperature: 0` for agents and structured tasks |
|
|
525
|
+
| Embedding large documents without splitting | Poor retrieval quality, token waste | Use RecursiveCharacterTextSplitter with overlap |
|
|
526
|
+
| Building custom logic that LCEL handles natively | Reinventing the wheel | Check LCEL primitives (RunnableBranch, Parallel, etc.) |
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
**Last verified**: 2026-02-16 | **Skill version**: 1.0.0
|