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,549 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openai-sdk
|
|
3
|
+
description: |
|
|
4
|
+
Build with the OpenAI SDK — chat completions, streaming, function/tool calling, structured outputs, vision, embeddings, and moderation. Use when: integrating OpenAI models (GPT-4o, o1, o3-mini), implementing streaming chat, using function calling or tool use, generating structured JSON output, handling images with vision, creating embeddings, managing rate limits and retries, or selecting the right model for cost/quality tradeoffs.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# OpenAI SDK
|
|
9
|
+
|
|
10
|
+
**Status**: Production Ready
|
|
11
|
+
**Last Updated**: 2026-02-16
|
|
12
|
+
**Package**: `openai@4.x`
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Setup and Configuration
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pnpm add openai
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
// src/lib/openai.ts
|
|
24
|
+
import OpenAI from "openai";
|
|
25
|
+
|
|
26
|
+
export const openai = new OpenAI({
|
|
27
|
+
apiKey: process.env.OPENAI_API_KEY, // Required — never expose in client bundle
|
|
28
|
+
organization: process.env.OPENAI_ORG_ID, // Optional
|
|
29
|
+
// baseURL: "https://custom-proxy.example.com/v1", // For proxies/Azure
|
|
30
|
+
timeout: 60_000, // 60s timeout
|
|
31
|
+
maxRetries: 3, // Auto-retry on rate limits / server errors
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Environment variables — server-side only:**
|
|
36
|
+
```bash
|
|
37
|
+
OPENAI_API_KEY="sk-..."
|
|
38
|
+
OPENAI_ORG_ID="org-..." # Optional
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Chat Completions
|
|
44
|
+
|
|
45
|
+
### Basic Request
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
const response = await openai.chat.completions.create({
|
|
49
|
+
model: "gpt-4o",
|
|
50
|
+
messages: [
|
|
51
|
+
{ role: "system", content: "You are a helpful assistant." },
|
|
52
|
+
{ role: "user", content: "Explain quantum computing in one paragraph." },
|
|
53
|
+
],
|
|
54
|
+
temperature: 0.7, // 0 = deterministic, 2 = creative
|
|
55
|
+
max_tokens: 500,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const answer = response.choices[0].message.content;
|
|
59
|
+
const usage = response.usage; // { prompt_tokens, completion_tokens, total_tokens }
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Message Roles
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
type Message =
|
|
66
|
+
| { role: "system"; content: string } // Sets behavior, personality, constraints
|
|
67
|
+
| { role: "user"; content: string } // User input
|
|
68
|
+
| { role: "assistant"; content: string } // Previous model responses (for context)
|
|
69
|
+
| { role: "tool"; content: string; tool_call_id: string }; // Tool call results
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Streaming Responses
|
|
75
|
+
|
|
76
|
+
### Basic Streaming
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
const stream = await openai.chat.completions.create({
|
|
80
|
+
model: "gpt-4o",
|
|
81
|
+
messages: [{ role: "user", content: "Write a poem about coding." }],
|
|
82
|
+
stream: true,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
for await (const chunk of stream) {
|
|
86
|
+
const content = chunk.choices[0]?.delta?.content;
|
|
87
|
+
if (content) {
|
|
88
|
+
process.stdout.write(content); // Or send via SSE to client
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### SSE to Browser (Next.js API Route)
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// src/app/api/chat/route.ts
|
|
97
|
+
import { openai } from "@/lib/openai";
|
|
98
|
+
|
|
99
|
+
export async function POST(req: Request) {
|
|
100
|
+
const { messages } = await req.json();
|
|
101
|
+
|
|
102
|
+
const stream = await openai.chat.completions.create({
|
|
103
|
+
model: "gpt-4o",
|
|
104
|
+
messages,
|
|
105
|
+
stream: true,
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Convert to ReadableStream for Response
|
|
109
|
+
const encoder = new TextEncoder();
|
|
110
|
+
const readable = new ReadableStream({
|
|
111
|
+
async start(controller) {
|
|
112
|
+
for await (const chunk of stream) {
|
|
113
|
+
const content = chunk.choices[0]?.delta?.content;
|
|
114
|
+
if (content) {
|
|
115
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify({ content })}\n\n`));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
controller.enqueue(encoder.encode("data: [DONE]\n\n"));
|
|
119
|
+
controller.close();
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return new Response(readable, {
|
|
124
|
+
headers: {
|
|
125
|
+
"Content-Type": "text/event-stream",
|
|
126
|
+
"Cache-Control": "no-cache",
|
|
127
|
+
Connection: "keep-alive",
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Function Calling / Tool Use
|
|
136
|
+
|
|
137
|
+
### Defining Tools
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = [
|
|
141
|
+
{
|
|
142
|
+
type: "function",
|
|
143
|
+
function: {
|
|
144
|
+
name: "get_weather",
|
|
145
|
+
description: "Get the current weather for a location",
|
|
146
|
+
parameters: {
|
|
147
|
+
type: "object",
|
|
148
|
+
properties: {
|
|
149
|
+
location: { type: "string", description: "City and state, e.g. 'San Francisco, CA'" },
|
|
150
|
+
unit: { type: "string", enum: ["celsius", "fahrenheit"], description: "Temperature unit" },
|
|
151
|
+
},
|
|
152
|
+
required: ["location"],
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: "function",
|
|
158
|
+
function: {
|
|
159
|
+
name: "search_database",
|
|
160
|
+
description: "Search the product database by query",
|
|
161
|
+
parameters: {
|
|
162
|
+
type: "object",
|
|
163
|
+
properties: {
|
|
164
|
+
query: { type: "string" },
|
|
165
|
+
category: { type: "string", enum: ["electronics", "clothing", "food"] },
|
|
166
|
+
max_results: { type: "number" },
|
|
167
|
+
},
|
|
168
|
+
required: ["query"],
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
];
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Tool Call Loop
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
async function chatWithTools(userMessage: string) {
|
|
179
|
+
const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [
|
|
180
|
+
{ role: "system", content: "You are a helpful assistant with access to tools." },
|
|
181
|
+
{ role: "user", content: userMessage },
|
|
182
|
+
];
|
|
183
|
+
|
|
184
|
+
let response = await openai.chat.completions.create({
|
|
185
|
+
model: "gpt-4o",
|
|
186
|
+
messages,
|
|
187
|
+
tools,
|
|
188
|
+
tool_choice: "auto", // "auto" | "required" | "none" | { type: "function", function: { name: "..." } }
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Process tool calls in a loop until the model stops calling tools
|
|
192
|
+
while (response.choices[0].finish_reason === "tool_calls") {
|
|
193
|
+
const toolCalls = response.choices[0].message.tool_calls!;
|
|
194
|
+
messages.push(response.choices[0].message); // Include assistant's tool call message
|
|
195
|
+
|
|
196
|
+
for (const toolCall of toolCalls) {
|
|
197
|
+
const args = JSON.parse(toolCall.function.arguments);
|
|
198
|
+
let result: string;
|
|
199
|
+
|
|
200
|
+
switch (toolCall.function.name) {
|
|
201
|
+
case "get_weather":
|
|
202
|
+
result = JSON.stringify(await getWeather(args.location, args.unit));
|
|
203
|
+
break;
|
|
204
|
+
case "search_database":
|
|
205
|
+
result = JSON.stringify(await searchDatabase(args.query, args.category));
|
|
206
|
+
break;
|
|
207
|
+
default:
|
|
208
|
+
result = JSON.stringify({ error: "Unknown function" });
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
messages.push({
|
|
212
|
+
role: "tool",
|
|
213
|
+
tool_call_id: toolCall.id,
|
|
214
|
+
content: result,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
response = await openai.chat.completions.create({
|
|
219
|
+
model: "gpt-4o",
|
|
220
|
+
messages,
|
|
221
|
+
tools,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return response.choices[0].message.content;
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Structured Outputs
|
|
232
|
+
|
|
233
|
+
### JSON Mode
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
const response = await openai.chat.completions.create({
|
|
237
|
+
model: "gpt-4o",
|
|
238
|
+
messages: [
|
|
239
|
+
{
|
|
240
|
+
role: "system",
|
|
241
|
+
content: "Extract the product details. Respond in JSON with fields: name, price, category.",
|
|
242
|
+
},
|
|
243
|
+
{ role: "user", content: "The new iPhone 16 Pro costs $999 in the electronics category." },
|
|
244
|
+
],
|
|
245
|
+
response_format: { type: "json_object" },
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
const product = JSON.parse(response.choices[0].message.content!);
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Structured Outputs with JSON Schema (Guaranteed Shape)
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
const response = await openai.chat.completions.create({
|
|
255
|
+
model: "gpt-4o",
|
|
256
|
+
messages: [{ role: "user", content: "Extract: The iPhone 16 Pro is $999, electronics." }],
|
|
257
|
+
response_format: {
|
|
258
|
+
type: "json_schema",
|
|
259
|
+
json_schema: {
|
|
260
|
+
name: "product",
|
|
261
|
+
strict: true,
|
|
262
|
+
schema: {
|
|
263
|
+
type: "object",
|
|
264
|
+
properties: {
|
|
265
|
+
name: { type: "string" },
|
|
266
|
+
price: { type: "number" },
|
|
267
|
+
category: { type: "string", enum: ["electronics", "clothing", "food"] },
|
|
268
|
+
},
|
|
269
|
+
required: ["name", "price", "category"],
|
|
270
|
+
additionalProperties: false,
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Structured Outputs with Zod (SDK Helper)
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
import { zodResponseFormat } from "openai/helpers/zod";
|
|
281
|
+
import { z } from "zod";
|
|
282
|
+
|
|
283
|
+
const ProductSchema = z.object({
|
|
284
|
+
name: z.string(),
|
|
285
|
+
price: z.number(),
|
|
286
|
+
category: z.enum(["electronics", "clothing", "food"]),
|
|
287
|
+
features: z.array(z.string()),
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
const response = await openai.beta.chat.completions.parse({
|
|
291
|
+
model: "gpt-4o",
|
|
292
|
+
messages: [{ role: "user", content: "Extract: iPhone 16 Pro, $999, electronics, A18 chip, titanium." }],
|
|
293
|
+
response_format: zodResponseFormat(ProductSchema, "product"),
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
const product = response.choices[0].message.parsed; // Typed as z.infer<typeof ProductSchema>
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Vision (Image Inputs)
|
|
302
|
+
|
|
303
|
+
```typescript
|
|
304
|
+
const response = await openai.chat.completions.create({
|
|
305
|
+
model: "gpt-4o",
|
|
306
|
+
messages: [
|
|
307
|
+
{
|
|
308
|
+
role: "user",
|
|
309
|
+
content: [
|
|
310
|
+
{ type: "text", text: "What's in this image?" },
|
|
311
|
+
{
|
|
312
|
+
type: "image_url",
|
|
313
|
+
image_url: {
|
|
314
|
+
url: "https://example.com/photo.jpg",
|
|
315
|
+
detail: "auto", // "low" (85 tokens) | "high" (detailed, more tokens) | "auto"
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
max_tokens: 300,
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// Base64 image
|
|
325
|
+
{
|
|
326
|
+
type: "image_url",
|
|
327
|
+
image_url: {
|
|
328
|
+
url: `data:image/jpeg;base64,${base64EncodedImage}`,
|
|
329
|
+
},
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Embeddings
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
const response = await openai.embeddings.create({
|
|
339
|
+
model: "text-embedding-3-small", // or "text-embedding-3-large"
|
|
340
|
+
input: "The quick brown fox jumps over the lazy dog",
|
|
341
|
+
dimensions: 512, // Optional: reduce dimensions (only for v3 models)
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
const embedding = response.data[0].embedding; // number[] of length 512
|
|
345
|
+
|
|
346
|
+
// Batch embeddings
|
|
347
|
+
const batchResponse = await openai.embeddings.create({
|
|
348
|
+
model: "text-embedding-3-small",
|
|
349
|
+
input: ["First document", "Second document", "Third document"],
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
// Cosine similarity for search
|
|
353
|
+
function cosineSimilarity(a: number[], b: number[]): number {
|
|
354
|
+
const dot = a.reduce((sum, ai, i) => sum + ai * b[i], 0);
|
|
355
|
+
const magA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0));
|
|
356
|
+
const magB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0));
|
|
357
|
+
return dot / (magA * magB);
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Moderation API
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
const moderation = await openai.moderations.create({
|
|
367
|
+
input: userMessage,
|
|
368
|
+
model: "omni-moderation-latest",
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
const result = moderation.results[0];
|
|
372
|
+
if (result.flagged) {
|
|
373
|
+
console.log("Flagged categories:", result.categories);
|
|
374
|
+
// { hate: false, sexual: true, violence: false, ... }
|
|
375
|
+
throw new Error("Content violates usage policy");
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## Error Handling
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
import OpenAI from "openai";
|
|
385
|
+
|
|
386
|
+
try {
|
|
387
|
+
const response = await openai.chat.completions.create({ /* ... */ });
|
|
388
|
+
} catch (error) {
|
|
389
|
+
if (error instanceof OpenAI.APIError) {
|
|
390
|
+
switch (error.status) {
|
|
391
|
+
case 400:
|
|
392
|
+
console.error("Bad request:", error.message);
|
|
393
|
+
break;
|
|
394
|
+
case 401:
|
|
395
|
+
console.error("Invalid API key");
|
|
396
|
+
break;
|
|
397
|
+
case 429:
|
|
398
|
+
// Rate limited — SDK retries automatically (maxRetries)
|
|
399
|
+
console.error("Rate limited. Retry after:", error.headers?.["retry-after"]);
|
|
400
|
+
break;
|
|
401
|
+
case 500:
|
|
402
|
+
case 503:
|
|
403
|
+
console.error("OpenAI server error — retry");
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
406
|
+
} else if (error instanceof OpenAI.APIConnectionError) {
|
|
407
|
+
console.error("Network error — cannot reach OpenAI");
|
|
408
|
+
} else if (error instanceof OpenAI.RateLimitError) {
|
|
409
|
+
console.error("Rate limit exceeded");
|
|
410
|
+
}
|
|
411
|
+
throw error;
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Model Selection Guide
|
|
418
|
+
|
|
419
|
+
| Model | Best For | Speed | Cost | Context |
|
|
420
|
+
|---|---|---|---|---|
|
|
421
|
+
| `gpt-4o` | General purpose, tool use, vision, quality | Fast | Medium | 128K |
|
|
422
|
+
| `gpt-4o-mini` | Cost-sensitive tasks, high volume | Fastest | Low | 128K |
|
|
423
|
+
| `o1` | Complex reasoning, math, code | Slow | High | 200K |
|
|
424
|
+
| `o3-mini` | Reasoning at lower cost | Medium | Medium | 200K |
|
|
425
|
+
|
|
426
|
+
**Decision framework:**
|
|
427
|
+
- Default to `gpt-4o-mini` for most tasks (cost-effective, fast)
|
|
428
|
+
- Use `gpt-4o` when quality matters (user-facing, complex tool use)
|
|
429
|
+
- Use `o1` / `o3-mini` for multi-step reasoning, math proofs, code generation
|
|
430
|
+
- Use `text-embedding-3-small` for embeddings (unless retrieval quality critical, then `large`)
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Token Counting (Pre-Request)
|
|
435
|
+
|
|
436
|
+
```typescript
|
|
437
|
+
// Use tiktoken for accurate pre-request token counting
|
|
438
|
+
import { encoding_for_model } from "tiktoken";
|
|
439
|
+
|
|
440
|
+
const enc = encoding_for_model("gpt-4o");
|
|
441
|
+
const tokens = enc.encode("Your message here");
|
|
442
|
+
console.log(`Token count: ${tokens.length}`);
|
|
443
|
+
enc.free(); // Clean up WASM memory
|
|
444
|
+
|
|
445
|
+
// Rough estimate without tiktoken: ~4 chars per token for English
|
|
446
|
+
const roughEstimate = Math.ceil(text.length / 4);
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## Streaming with Function Calls
|
|
452
|
+
|
|
453
|
+
```typescript
|
|
454
|
+
const stream = await openai.chat.completions.create({
|
|
455
|
+
model: "gpt-4o",
|
|
456
|
+
messages,
|
|
457
|
+
tools,
|
|
458
|
+
stream: true,
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
let currentToolCall: { id: string; name: string; arguments: string } | null = null;
|
|
462
|
+
|
|
463
|
+
for await (const chunk of stream) {
|
|
464
|
+
const delta = chunk.choices[0]?.delta;
|
|
465
|
+
|
|
466
|
+
// Streaming content
|
|
467
|
+
if (delta?.content) {
|
|
468
|
+
process.stdout.write(delta.content);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Streaming tool call (arguments arrive in chunks)
|
|
472
|
+
if (delta?.tool_calls) {
|
|
473
|
+
for (const tc of delta.tool_calls) {
|
|
474
|
+
if (tc.id) {
|
|
475
|
+
// New tool call started
|
|
476
|
+
currentToolCall = { id: tc.id, name: tc.function!.name!, arguments: "" };
|
|
477
|
+
}
|
|
478
|
+
if (tc.function?.arguments) {
|
|
479
|
+
currentToolCall!.arguments += tc.function.arguments;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Finish reason indicates tool call complete
|
|
485
|
+
if (chunk.choices[0]?.finish_reason === "tool_calls" && currentToolCall) {
|
|
486
|
+
const args = JSON.parse(currentToolCall.arguments);
|
|
487
|
+
// Execute the tool and continue the conversation
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Prompt Engineering Patterns
|
|
495
|
+
|
|
496
|
+
### System Prompt Structure
|
|
497
|
+
|
|
498
|
+
```typescript
|
|
499
|
+
const systemPrompt = `You are a customer support agent for Acme Corp.
|
|
500
|
+
|
|
501
|
+
## Your Role
|
|
502
|
+
- Answer product questions accurately
|
|
503
|
+
- Escalate billing issues to human agents
|
|
504
|
+
- Never make up product features
|
|
505
|
+
|
|
506
|
+
## Constraints
|
|
507
|
+
- Respond in 2-3 sentences maximum
|
|
508
|
+
- If you don't know, say "I'll connect you with a specialist"
|
|
509
|
+
- Never share internal pricing or roadmap
|
|
510
|
+
|
|
511
|
+
## Output Format
|
|
512
|
+
Respond in plain text. No markdown unless the user asks for structured data.`;
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### Few-Shot Examples
|
|
516
|
+
|
|
517
|
+
```typescript
|
|
518
|
+
const messages = [
|
|
519
|
+
{ role: "system", content: "Classify customer feedback as positive, negative, or neutral." },
|
|
520
|
+
{ role: "user", content: "The product is amazing, I love it!" },
|
|
521
|
+
{ role: "assistant", content: "positive" },
|
|
522
|
+
{ role: "user", content: "It broke after two days." },
|
|
523
|
+
{ role: "assistant", content: "negative" },
|
|
524
|
+
{ role: "user", content: "It arrived on time." },
|
|
525
|
+
{ role: "assistant", content: "neutral" },
|
|
526
|
+
{ role: "user", content: actualFeedback }, // Real input
|
|
527
|
+
];
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Anti-Patterns
|
|
533
|
+
|
|
534
|
+
| Anti-Pattern | Why It Breaks | Correct Approach |
|
|
535
|
+
|---|---|---|
|
|
536
|
+
| Exposing API key in client-side code | Key theft, billing abuse | Server-side only, proxy API calls |
|
|
537
|
+
| No timeout configuration | Hung requests, resource exhaustion | Set `timeout: 60_000` on client |
|
|
538
|
+
| Ignoring `finish_reason` | Missing truncated responses | Check for `"length"` and handle |
|
|
539
|
+
| Hardcoded model names everywhere | Painful model upgrades | Centralize model config |
|
|
540
|
+
| Not validating tool call arguments | JSON parse errors, wrong types | Parse with Zod, handle malformed args |
|
|
541
|
+
| Sending PII in prompts | Privacy violations | Strip PII before sending to API |
|
|
542
|
+
| No rate limit handling | 429 errors crash the app | Use SDK's built-in `maxRetries` |
|
|
543
|
+
| Using `max_tokens` too low | Truncated, useless responses | Set based on expected output length |
|
|
544
|
+
| Streaming without error handling | Silent failures, stuck UI | Catch errors in stream loop |
|
|
545
|
+
| Not tracking token usage | Surprise bills | Log `response.usage` per request |
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
**Last verified**: 2026-02-16 | **Skill version**: 1.0.0
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: google-analytics
|
|
3
|
+
description: Analyze Google Analytics data, review website performance metrics, identify traffic patterns, and suggest data-driven improvements. Use when the user asks about analytics, website metrics, traffic analysis, conversion rates, user behavior, or performance optimization.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Google Analytics Analysis
|
|
7
|
+
|
|
8
|
+
Analyze website performance using Google Analytics data to provide actionable insights and improvement recommendations.
|
|
9
|
+
|
|
10
|
+
## Quick Start
|
|
11
|
+
|
|
12
|
+
### 1. Setup Authentication
|
|
13
|
+
|
|
14
|
+
This Skill requires Google Analytics API credentials. Set up environment variables:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
export GOOGLE_ANALYTICS_PROPERTY_ID="your-property-id"
|
|
18
|
+
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or create a `.env` file in your project root:
|
|
22
|
+
|
|
23
|
+
```env
|
|
24
|
+
GOOGLE_ANALYTICS_PROPERTY_ID=123456789
|
|
25
|
+
GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Never commit credentials to version control.** The service account JSON file should be stored securely outside your repository.
|
|
29
|
+
|
|
30
|
+
### 2. Install Required Packages
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Option 1: Install from requirements file (recommended)
|
|
34
|
+
pip install -r cli-tool/components/skills/analytics/google-analytics/requirements.txt
|
|
35
|
+
|
|
36
|
+
# Option 2: Install individually
|
|
37
|
+
pip install google-analytics-data python-dotenv pandas
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 3. Analyze Your Project
|
|
41
|
+
|
|
42
|
+
Once configured, I can:
|
|
43
|
+
- Review current traffic and user behavior metrics
|
|
44
|
+
- Identify top-performing and underperforming pages
|
|
45
|
+
- Analyze traffic sources and conversion funnels
|
|
46
|
+
- Compare performance across time periods
|
|
47
|
+
- Suggest data-driven improvements
|
|
48
|
+
|
|
49
|
+
## How to Use
|
|
50
|
+
|
|
51
|
+
Ask me questions like:
|
|
52
|
+
- "Review our Google Analytics performance for the last 30 days"
|
|
53
|
+
- "What are our top traffic sources?"
|
|
54
|
+
- "Which pages have the highest bounce rates?"
|
|
55
|
+
- "Analyze user engagement and suggest improvements"
|
|
56
|
+
- "Compare this month's performance to last month"
|
|
57
|
+
|
|
58
|
+
## Analysis Workflow
|
|
59
|
+
|
|
60
|
+
When you ask me to analyze Google Analytics data, I will:
|
|
61
|
+
|
|
62
|
+
1. **Connect to the API** using the helper script
|
|
63
|
+
2. **Fetch relevant metrics** based on your question
|
|
64
|
+
3. **Analyze the data** looking for:
|
|
65
|
+
- Traffic trends and patterns
|
|
66
|
+
- User behavior insights
|
|
67
|
+
- Performance bottlenecks
|
|
68
|
+
- Conversion opportunities
|
|
69
|
+
4. **Provide recommendations** with:
|
|
70
|
+
- Specific improvement suggestions
|
|
71
|
+
- Priority level (high/medium/low)
|
|
72
|
+
- Expected impact
|
|
73
|
+
- Implementation guidance
|
|
74
|
+
|
|
75
|
+
## Common Metrics
|
|
76
|
+
|
|
77
|
+
For detailed metric definitions and dimensions, see [REFERENCE.md](REFERENCE.md).
|
|
78
|
+
|
|
79
|
+
### Traffic Metrics
|
|
80
|
+
- Sessions, Users, New Users
|
|
81
|
+
- Page views, Screens per Session
|
|
82
|
+
- Average Session Duration
|
|
83
|
+
|
|
84
|
+
### Engagement Metrics
|
|
85
|
+
- Bounce Rate, Engagement Rate
|
|
86
|
+
- Event Count, Conversions
|
|
87
|
+
- Scroll Depth, Click-through Rate
|
|
88
|
+
|
|
89
|
+
### Acquisition Metrics
|
|
90
|
+
- Traffic Source/Medium
|
|
91
|
+
- Campaign Performance
|
|
92
|
+
- Channel Grouping
|
|
93
|
+
|
|
94
|
+
### Conversion Metrics
|
|
95
|
+
- Goal Completions
|
|
96
|
+
- E-commerce Transactions
|
|
97
|
+
- Conversion Rate by Source
|
|
98
|
+
|
|
99
|
+
## Analysis Examples
|
|
100
|
+
|
|
101
|
+
For complete analysis patterns and use cases, see [EXAMPLES.md](EXAMPLES.md).
|
|
102
|
+
|
|
103
|
+
## Scripts
|
|
104
|
+
|
|
105
|
+
The Skill includes utility scripts for API interaction:
|
|
106
|
+
|
|
107
|
+
### Fetch Current Performance
|
|
108
|
+
```bash
|
|
109
|
+
python scripts/ga_client.py --days 30 --metrics sessions,users,bounceRate
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Analyze and Generate Report
|
|
113
|
+
```bash
|
|
114
|
+
python scripts/analyze.py --period last-30-days --compare previous-period
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The scripts handle API authentication, data fetching, and basic analysis. I'll interpret the results and provide actionable recommendations.
|
|
118
|
+
|
|
119
|
+
## Troubleshooting
|
|
120
|
+
|
|
121
|
+
**Authentication Error**: Verify that:
|
|
122
|
+
- `GOOGLE_APPLICATION_CREDENTIALS` points to a valid service account JSON file
|
|
123
|
+
- The service account has "Viewer" access to your GA4 property
|
|
124
|
+
- `GOOGLE_ANALYTICS_PROPERTY_ID` matches your GA4 property ID (not the measurement ID)
|
|
125
|
+
|
|
126
|
+
**No Data Returned**: Check that:
|
|
127
|
+
- The property ID is correct (find it in GA4 Admin > Property Settings)
|
|
128
|
+
- The date range contains data
|
|
129
|
+
- The service account has been granted access in GA4
|
|
130
|
+
|
|
131
|
+
**Import Errors**: Install required packages:
|
|
132
|
+
```bash
|
|
133
|
+
pip install google-analytics-data python-dotenv pandas
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Security Notes
|
|
137
|
+
|
|
138
|
+
- **Never hardcode** API credentials or property IDs in code
|
|
139
|
+
- Store service account JSON files **outside** version control
|
|
140
|
+
- Use environment variables or `.env` files for configuration
|
|
141
|
+
- Add `.env` and credential files to `.gitignore`
|
|
142
|
+
- Rotate service account keys periodically
|
|
143
|
+
- Use least-privilege access (Viewer role only)
|
|
144
|
+
|
|
145
|
+
## Data Privacy
|
|
146
|
+
|
|
147
|
+
This Skill accesses aggregated analytics data only. It does not:
|
|
148
|
+
- Access personally identifiable information (PII)
|
|
149
|
+
- Store analytics data persistently
|
|
150
|
+
- Share data with external services
|
|
151
|
+
- Modify your Google Analytics configuration
|
|
152
|
+
|
|
153
|
+
All data is processed locally and used only to generate recommendations during the conversation.
|