@caddis/cli 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -16
- package/bundles/antigravity-plugin-extras/plugin.json +5 -0
- package/bundles/antigravity-plugin-extras/skills/_registry.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +293 -0
- package/bundles/antigravity-plugin-extras/skills/anchor-review/SKILL.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +367 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +244 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +156 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +321 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +144 -0
- package/bundles/antigravity-plugin-extras/skills/asking-questions/SKILL.md +81 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/cross-service/credential-management.md +450 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/browser/README.md +363 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/code-interpreter/README.md +232 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/README.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deploy-template.sh +117 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deployment-strategies.md +416 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/troubleshooting-guide.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/validate-deployment.sh +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/identity/README.md +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/memory/README.md +253 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/observability/README.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/runtime/README.md +215 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +279 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/references/cdk-patterns.md +431 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/scripts/validate-stack.sh +240 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +318 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/cloudwatch-alarms.md +567 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/operations-patterns.md +394 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +758 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/deployment-best-practices.md +830 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/eda-patterns.md +1002 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/observability-best-practices.md +770 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/performance-optimization.md +671 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/security-best-practices.md +625 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/serverless-patterns.md +838 -0
- package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +139 -0
- package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +298 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +93 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +392 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/agent-patterns.md +461 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/examples.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/state-patterns.md +360 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/troubleshooting.md +362 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +266 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/examples.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +317 -0
- package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +385 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/competitive-ads-extractor/SKILL.md +294 -0
- package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +310 -0
- package/bundles/antigravity-plugin-extras/skills/content-research-writer/SKILL.md +539 -0
- package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-analysis/SKILL.md +111 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/README.md +248 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +203 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/adapter.py.template +44 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/api-router.py.template +43 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/contract-test.py.template +384 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/display-dto.py.template +39 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-service.ts.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-types.ts.template +38 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/ingestion-model.py.template +42 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/mapping-doc.md.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/normalizer.py.template +48 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_requirements.md +36 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_ui_demand.md +35 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/reconcile_mapping.md +66 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/query-catalog.md.template +62 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/consumer-driven-contracts.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/drift-check-catalog.md +305 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/layer-responsibilities.md +333 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_connections.py +170 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_sources.py +161 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/drift_check.py +171 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/extract_schema.py +1363 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_gap_report.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_mapping_doc.py +294 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/ts_dto_compare.py +214 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/validate_lineage.py +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +753 -0
- package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +220 -0
- package/bundles/antigravity-plugin-extras/skills/db-testing/SKILL.md +117 -0
- package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +259 -0
- package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +167 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +240 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/references/DESIGN-SYSTEM-TEMPLATE.md +577 -0
- package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +323 -0
- package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +378 -0
- package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +78 -0
- package/bundles/antigravity-plugin-extras/skills/domain-name-brainstormer/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/SKILL.md +193 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/element-types.md +497 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/excalidraw-schema.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/reliable-diagrams.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/README.md +60 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-arrow.py +354 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-icon-to-diagram.py +412 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/split-excalidraw-library.py +183 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/business-flow-swimlane-template.excalidraw +334 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/class-diagram-template.excalidraw +558 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/data-flow-diagram-template.excalidraw +279 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/er-diagram-template.excalidraw +662 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/flowchart-template.excalidraw +179 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/mindmap-template.excalidraw +244 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/relationship-template.excalidraw +145 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/reliable-flowchart.excalidraw +1 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/sequence-diagram-template.excalidraw +509 -0
- package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +434 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/README.md +221 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/SKILL.md +359 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/references/templates.md +90 -0
- package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/humanizer/SKILL.md +194 -0
- package/bundles/antigravity-plugin-extras/skills/image-enhancer/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/intent-writer/SKILL.md +201 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +124 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/3p-updates.md +47 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/faq-answers.md +30 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/general-comms.md +16 -0
- package/bundles/antigravity-plugin-extras/skills/invoice-organizer/SKILL.md +447 -0
- package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +182 -0
- package/bundles/antigravity-plugin-extras/skills/job-application/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/lead-research-assistant/SKILL.md +200 -0
- package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +217 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/evaluation.md +602 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/mcp_best_practices.md +915 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/node_mcp_server.md +916 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/python_mcp_server.md +752 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/connections.py +151 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/bundles/antigravity-plugin-extras/skills/meeting-insights-analyzer/SKILL.md +328 -0
- package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +267 -0
- package/bundles/antigravity-plugin-extras/skills/naming-analyzer/SKILL.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +271 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/AUTHENTICATION.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/SKILL.md +270 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/api_reference.md +309 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/troubleshooting.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/usage_patterns.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/__init__.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/ask_question.py +256 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/auth_manager.py +358 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_session.py +255 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_utils.py +107 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/cleanup_manager.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/config.py +44 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/notebook_manager.py +410 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/run.py +102 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/setup_environment.py +204 -0
- package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +371 -0
- package/bundles/antigravity-plugin-extras/skills/onboard-project/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/pipeline-state/SKILL.md +208 -0
- package/bundles/antigravity-plugin-extras/skills/plantuml/SKILL.md +228 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +142 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/linear.app.md +196 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/stripe.md +214 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/vercel.md +218 -0
- package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/raffle-winner-picker/SKILL.md +159 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/README.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +53 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/alternatives.md +258 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/anti-patterns.md +290 -0
- package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/relay/SKILL.md +246 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/code-reviewer.md +146 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +350 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/pwa-checklist.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/touch-and-interaction.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/transformation-catalogue.md +326 -0
- package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +275 -0
- package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +330 -0
- package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +104 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/SKILL.md +646 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/easing.py +230 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/typography.py +357 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/validators.py +264 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/requirements.txt +4 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/explode.py +331 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/fade.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/flip.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/morph.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/move.py +293 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/shake.py +127 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/slide.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/spin.py +269 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/bundles/antigravity-plugin-extras/skills/slides/SKILL.md +38 -0
- package/bundles/antigravity-plugin-extras/skills/state-tracking/SKILL.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +268 -0
- package/bundles/antigravity-plugin-extras/skills/svg-create/SKILL.md +251 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +59 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/theme-showcase.pdf +0 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/desert-rose.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/golden-hour.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/ui-testing/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/_sync_all.py +414 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/app-interface.csv +31 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/charts.csv +26 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/colors.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/design.csv +1776 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/draft.csv +1779 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/google-fonts.csv +1924 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/icons.csv +106 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/landing.csv +35 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/products.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/react-performance.csv +45 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/styles.csv +85 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/typography.csv +74 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ui-reasoning.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ux-guidelines.csv +100 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/core.py +247 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/design_system.py +1067 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/search.py +114 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +140 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/commands.md +252 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/graph-schema.md +116 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/pipeline.md +331 -0
- package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/verification-loop/SKILL.md +209 -0
- package/bundles/antigravity-plugin-extras/skills/video-downloader/SKILL.md +107 -0
- package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +288 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +339 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/agents/agent-interface.md +175 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/html.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/nlp-keywords.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/palettes.md +149 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/python.md +249 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/react.md +427 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/shapes.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/stopwords.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/youtube-transcript/SKILL.md +416 -0
- package/bundles/manifest.json +2 -1
- package/dist/cli.js +166 -37
- package/package.json +1 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
# State Management Patterns
|
|
2
|
+
|
|
3
|
+
Strategies for managing state in Cloudflare Agents.
|
|
4
|
+
|
|
5
|
+
## How State Works
|
|
6
|
+
|
|
7
|
+
State is automatically persisted to the `cf_agents_state` SQL table. The `this.state` getter lazily loads from storage, while `this.setState()` serializes and persists changes. State survives Durable Object evictions.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
class MyAgent extends Agent<Env, { count: number }> {
|
|
11
|
+
initialState = { count: 0 };
|
|
12
|
+
|
|
13
|
+
increment() {
|
|
14
|
+
this.setState({ count: this.state.count + 1 });
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
onStateUpdate(state: State, source: string) {
|
|
18
|
+
console.log("State updated by:", source);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## State vs SQL: When to Use Which
|
|
24
|
+
|
|
25
|
+
### Use `this.state` + `setState()` When:
|
|
26
|
+
|
|
27
|
+
- Data is small (< 1MB recommended)
|
|
28
|
+
- Needs real-time sync to all connected clients
|
|
29
|
+
- Simple key-value or object structure
|
|
30
|
+
- Frequently read, occasionally updated
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
interface State {
|
|
34
|
+
currentUser: { id: string; name: string };
|
|
35
|
+
preferences: Record<string, string>;
|
|
36
|
+
recentMessages: Message[]; // Keep limited, e.g., last 50
|
|
37
|
+
isTyping: boolean;
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Use `this.sql` When:
|
|
42
|
+
|
|
43
|
+
- Large datasets (many records)
|
|
44
|
+
- Complex queries (JOINs, aggregations, filtering)
|
|
45
|
+
- Historical data / audit logs
|
|
46
|
+
- Data that doesn't need real-time sync
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// Good for SQL
|
|
50
|
+
// - Full message history
|
|
51
|
+
// - User documents
|
|
52
|
+
// - Analytics events
|
|
53
|
+
// - Search indexes
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Hybrid Pattern
|
|
57
|
+
|
|
58
|
+
Combine both for optimal performance:
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
interface State {
|
|
62
|
+
recentMessages: Message[];
|
|
63
|
+
onlineUsers: string[];
|
|
64
|
+
currentDocument: Document | null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export class HybridAgent extends Agent<Env, State> {
|
|
68
|
+
initialState: State = {
|
|
69
|
+
recentMessages: [],
|
|
70
|
+
onlineUsers: [],
|
|
71
|
+
currentDocument: null,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
async onStart() {
|
|
75
|
+
await this.sql`
|
|
76
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
77
|
+
id TEXT PRIMARY KEY,
|
|
78
|
+
user_id TEXT NOT NULL,
|
|
79
|
+
content TEXT NOT NULL,
|
|
80
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
81
|
+
)
|
|
82
|
+
`;
|
|
83
|
+
|
|
84
|
+
const recent = await this.sql`
|
|
85
|
+
SELECT * FROM messages
|
|
86
|
+
ORDER BY created_at DESC
|
|
87
|
+
LIMIT 50
|
|
88
|
+
`;
|
|
89
|
+
|
|
90
|
+
this.setState({
|
|
91
|
+
...this.state,
|
|
92
|
+
recentMessages: recent.reverse(),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async addMessage(message: Message) {
|
|
97
|
+
await this.sql`
|
|
98
|
+
INSERT INTO messages (id, user_id, content)
|
|
99
|
+
VALUES (${message.id}, ${message.userId}, ${message.content})
|
|
100
|
+
`;
|
|
101
|
+
|
|
102
|
+
const recentMessages = [...this.state.recentMessages, message].slice(-50);
|
|
103
|
+
this.setState({ ...this.state, recentMessages });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Queue System
|
|
111
|
+
|
|
112
|
+
The SDK includes a built-in queue for background task processing. Tasks are stored in SQLite and processed in FIFO order.
|
|
113
|
+
|
|
114
|
+
### Queue Methods
|
|
115
|
+
|
|
116
|
+
| Method | Purpose |
|
|
117
|
+
|--------|---------|
|
|
118
|
+
| `queue(callback, payload)` | Add task, returns task ID |
|
|
119
|
+
| `dequeue(id)` | Remove specific task |
|
|
120
|
+
| `dequeueAll()` | Clear entire queue |
|
|
121
|
+
| `dequeueAllByCallback(name)` | Remove tasks by callback name |
|
|
122
|
+
| `getQueue(id)` | Get single task |
|
|
123
|
+
| `getQueues(key, value)` | Find tasks by payload field |
|
|
124
|
+
|
|
125
|
+
### Queue Example
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
export class TaskAgent extends Agent<Env, State> {
|
|
129
|
+
async onMessage(connection: Connection, message: string) {
|
|
130
|
+
const data = JSON.parse(message);
|
|
131
|
+
|
|
132
|
+
if (data.type === "process_later") {
|
|
133
|
+
const taskId = await this.queue("processItem", {
|
|
134
|
+
itemId: data.itemId,
|
|
135
|
+
priority: data.priority,
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
connection.send(JSON.stringify({ queued: true, taskId }));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Callback receives payload and QueueItem metadata
|
|
143
|
+
async processItem(payload: { itemId: string }, item: QueueItem) {
|
|
144
|
+
console.log(`Processing ${payload.itemId}, queued at ${item.createdAt}`);
|
|
145
|
+
// Successfully executed tasks are auto-removed
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Queue characteristics:**
|
|
151
|
+
- Sequential processing (no parallelization)
|
|
152
|
+
- Persists across agent restarts
|
|
153
|
+
- No built-in retry mechanism
|
|
154
|
+
- Payloads must be JSON-serializable
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Context Management
|
|
159
|
+
|
|
160
|
+
Custom methods automatically have full agent context. Use `getCurrentAgent()` to access context from external functions.
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
import { getCurrentAgent } from "agents";
|
|
164
|
+
|
|
165
|
+
// External utility function
|
|
166
|
+
async function logActivity(action: string) {
|
|
167
|
+
const { agent } = getCurrentAgent<MyAgent>();
|
|
168
|
+
await agent.sql`
|
|
169
|
+
INSERT INTO activity_log (action, timestamp)
|
|
170
|
+
VALUES (${action}, ${Date.now()})
|
|
171
|
+
`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export class MyAgent extends Agent<Env, State> {
|
|
175
|
+
async performAction() {
|
|
176
|
+
// Context automatically available
|
|
177
|
+
await logActivity("action_performed");
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
`getCurrentAgent<T>()` returns:
|
|
183
|
+
- `agent` - The current agent instance
|
|
184
|
+
- `connection` - Connection object (if applicable)
|
|
185
|
+
- `request` - Request object (if applicable)
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## State Synchronization
|
|
190
|
+
|
|
191
|
+
### Optimistic Updates
|
|
192
|
+
|
|
193
|
+
Update UI immediately, then persist:
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
async onMessage(connection: Connection, message: string) {
|
|
197
|
+
const data = JSON.parse(message);
|
|
198
|
+
|
|
199
|
+
if (data.type === "update_preference") {
|
|
200
|
+
this.setState({
|
|
201
|
+
...this.state,
|
|
202
|
+
preferences: {
|
|
203
|
+
...this.state.preferences,
|
|
204
|
+
[data.key]: data.value,
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
await this.sql`
|
|
209
|
+
INSERT OR REPLACE INTO preferences (key, value)
|
|
210
|
+
VALUES (${data.key}, ${data.value})
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Conflict Resolution
|
|
217
|
+
|
|
218
|
+
Handle concurrent updates with versioning:
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
interface State {
|
|
222
|
+
document: {
|
|
223
|
+
content: string;
|
|
224
|
+
version: number;
|
|
225
|
+
lastModifiedBy: string;
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
async updateDocument(userId: string, newContent: string, expectedVersion: number) {
|
|
230
|
+
if (this.state.document.version !== expectedVersion) {
|
|
231
|
+
throw new Error("Conflict: document was modified by another user");
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
this.setState({
|
|
235
|
+
...this.state,
|
|
236
|
+
document: {
|
|
237
|
+
content: newContent,
|
|
238
|
+
version: expectedVersion + 1,
|
|
239
|
+
lastModifiedBy: userId,
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Per-Connection State
|
|
246
|
+
|
|
247
|
+
Track ephemeral state for each connected client:
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
export class MultiUserAgent extends Agent<Env, State> {
|
|
251
|
+
private connectionState = new Map<string, {
|
|
252
|
+
userId: string;
|
|
253
|
+
cursor: { x: number; y: number };
|
|
254
|
+
lastActivity: number;
|
|
255
|
+
}>();
|
|
256
|
+
|
|
257
|
+
async onConnect(connection: Connection) {
|
|
258
|
+
this.connectionState.set(connection.id, {
|
|
259
|
+
userId: "",
|
|
260
|
+
cursor: { x: 0, y: 0 },
|
|
261
|
+
lastActivity: Date.now(),
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
async onClose(connection: Connection) {
|
|
266
|
+
this.connectionState.delete(connection.id);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## State Migration
|
|
274
|
+
|
|
275
|
+
When state schema changes:
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
interface StateV2 {
|
|
279
|
+
messages: Array<{ id: string; content: string; timestamp: string }>;
|
|
280
|
+
version: 2;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export class MigratingAgent extends Agent<Env, StateV2> {
|
|
284
|
+
initialState: StateV2 = {
|
|
285
|
+
messages: [],
|
|
286
|
+
version: 2,
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
async onStart() {
|
|
290
|
+
const rawState = this.state as any;
|
|
291
|
+
|
|
292
|
+
if (!rawState.version || rawState.version < 2) {
|
|
293
|
+
const migratedMessages = (rawState.messages || []).map(
|
|
294
|
+
(content: string, i: number) => ({
|
|
295
|
+
id: `migrated-${i}`,
|
|
296
|
+
content,
|
|
297
|
+
timestamp: new Date().toISOString(),
|
|
298
|
+
})
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
this.setState({
|
|
302
|
+
messages: migratedMessages,
|
|
303
|
+
version: 2,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## State Size Management
|
|
313
|
+
|
|
314
|
+
Keep state lean for performance:
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
export class LeanStateAgent extends Agent<Env, State> {
|
|
318
|
+
private readonly MAX_RECENT_MESSAGES = 100;
|
|
319
|
+
|
|
320
|
+
async addMessage(message: Message) {
|
|
321
|
+
await this.sql`INSERT INTO messages (id, content) VALUES (${message.id}, ${message.content})`;
|
|
322
|
+
|
|
323
|
+
let recentMessages = [...this.state.recentMessages, message];
|
|
324
|
+
if (recentMessages.length > this.MAX_RECENT_MESSAGES) {
|
|
325
|
+
recentMessages = recentMessages.slice(-this.MAX_RECENT_MESSAGES);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
this.setState({
|
|
329
|
+
...this.state,
|
|
330
|
+
recentMessages,
|
|
331
|
+
stats: {
|
|
332
|
+
...this.state.stats,
|
|
333
|
+
totalMessages: this.state.stats.totalMessages + 1,
|
|
334
|
+
lastActivity: new Date().toISOString(),
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Debugging State
|
|
344
|
+
|
|
345
|
+
```typescript
|
|
346
|
+
async onMessage(connection: Connection, message: string) {
|
|
347
|
+
const data = JSON.parse(message);
|
|
348
|
+
|
|
349
|
+
if (data.type === "debug_state") {
|
|
350
|
+
connection.send(JSON.stringify({
|
|
351
|
+
type: "debug_response",
|
|
352
|
+
state: this.state,
|
|
353
|
+
stateSize: JSON.stringify(this.state).length,
|
|
354
|
+
sqlTables: await this.sql`
|
|
355
|
+
SELECT name FROM sqlite_master WHERE type='table'
|
|
356
|
+
`,
|
|
357
|
+
}));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
```
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
# Agent Troubleshooting
|
|
2
|
+
|
|
3
|
+
Common issues and solutions for Cloudflare Agents.
|
|
4
|
+
|
|
5
|
+
## Connection Issues
|
|
6
|
+
|
|
7
|
+
### "WebSocket connection failed"
|
|
8
|
+
|
|
9
|
+
**Symptoms:** Client cannot connect to agent.
|
|
10
|
+
|
|
11
|
+
**Causes & Solutions:**
|
|
12
|
+
|
|
13
|
+
1. **Worker not deployed**
|
|
14
|
+
```bash
|
|
15
|
+
wrangler deployments list
|
|
16
|
+
wrangler deploy # If not deployed
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. **Wrong URL path**
|
|
20
|
+
```javascript
|
|
21
|
+
// Ensure your routing handles the agent path
|
|
22
|
+
// Client:
|
|
23
|
+
new WebSocket("wss://my-worker.workers.dev/agent/user123");
|
|
24
|
+
|
|
25
|
+
// Worker must route to agent:
|
|
26
|
+
if (url.pathname.startsWith("/agent/")) {
|
|
27
|
+
const id = url.pathname.split("/")[2];
|
|
28
|
+
return env.AGENT.get(env.AGENT.idFromName(id)).fetch(request);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. **CORS issues (browser clients)**
|
|
33
|
+
Agents handle WebSocket upgrades automatically, but ensure your entry worker doesn't block the request.
|
|
34
|
+
|
|
35
|
+
### "Connection closed unexpectedly"
|
|
36
|
+
|
|
37
|
+
1. **Agent threw an error**
|
|
38
|
+
```bash
|
|
39
|
+
wrangler tail # Check for exceptions
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. **Message handler crashed**
|
|
43
|
+
```typescript
|
|
44
|
+
async onMessage(connection: Connection, message: string) {
|
|
45
|
+
try {
|
|
46
|
+
// Your logic
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error("Message handling error:", error);
|
|
49
|
+
connection.send(JSON.stringify({ type: "error", message: error.message }));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
3. **Hibernation woke agent with stale connection**
|
|
55
|
+
Ensure you handle reconnection gracefully in client code.
|
|
56
|
+
|
|
57
|
+
## State Issues
|
|
58
|
+
|
|
59
|
+
### "State not persisting"
|
|
60
|
+
|
|
61
|
+
**Causes:**
|
|
62
|
+
|
|
63
|
+
1. **Didn't call `setState()`**
|
|
64
|
+
```typescript
|
|
65
|
+
// Wrong - direct mutation doesn't persist
|
|
66
|
+
this.state.messages.push(newMessage);
|
|
67
|
+
|
|
68
|
+
// Correct - use setState
|
|
69
|
+
this.setState({
|
|
70
|
+
...this.state,
|
|
71
|
+
messages: [...this.state.messages, newMessage],
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. **Agent crashed before state saved**
|
|
76
|
+
`setState()` is durable, but if agent crashes during processing before `setState()`, changes are lost.
|
|
77
|
+
|
|
78
|
+
3. **Wrong agent instance**
|
|
79
|
+
Each unique ID gets a separate agent. Ensure clients connect to the same ID.
|
|
80
|
+
|
|
81
|
+
### "State out of sync between clients"
|
|
82
|
+
|
|
83
|
+
`setState()` automatically syncs to all connected clients via `onStateUpdate()`. If sync isn't working:
|
|
84
|
+
|
|
85
|
+
1. **Check `onStateUpdate` is implemented**
|
|
86
|
+
```typescript
|
|
87
|
+
onStateUpdate(state: State, source: string) {
|
|
88
|
+
// This fires when state changes from any source
|
|
89
|
+
console.log("State updated:", state, "from:", source);
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
2. **Client not listening for state updates**
|
|
94
|
+
```typescript
|
|
95
|
+
// React hook handles this automatically
|
|
96
|
+
const { state } = useAgent({ agent: "my-agent", name: id });
|
|
97
|
+
|
|
98
|
+
// Manual WebSocket - listen for state messages
|
|
99
|
+
ws.onmessage = (event) => {
|
|
100
|
+
const data = JSON.parse(event.data);
|
|
101
|
+
if (data.type === "state_update") {
|
|
102
|
+
updateLocalState(data.state);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### "State too large" / Performance issues
|
|
108
|
+
|
|
109
|
+
State is serialized as JSON. Keep it small:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// Bad - storing everything in state
|
|
113
|
+
interface State {
|
|
114
|
+
allMessages: Message[]; // Could be thousands
|
|
115
|
+
allDocuments: Document[];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Good - state for hot data, SQL for cold
|
|
119
|
+
interface State {
|
|
120
|
+
recentMessages: Message[]; // Last 50 only
|
|
121
|
+
currentDocument: Document | null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Store full history in SQL
|
|
125
|
+
await this.sql`INSERT INTO messages ...`;
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## SQL Issues
|
|
129
|
+
|
|
130
|
+
### "no such table"
|
|
131
|
+
|
|
132
|
+
Table not created. Create in `onStart()`:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
async onStart() {
|
|
136
|
+
await this.sql`
|
|
137
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
138
|
+
id TEXT PRIMARY KEY,
|
|
139
|
+
content TEXT NOT NULL,
|
|
140
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
141
|
+
)
|
|
142
|
+
`;
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### "SQL logic error"
|
|
147
|
+
|
|
148
|
+
Check your query syntax. Use tagged templates correctly:
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
// Wrong - string interpolation (SQL injection risk!)
|
|
152
|
+
await this.sql`SELECT * FROM users WHERE id = '${userId}'`;
|
|
153
|
+
|
|
154
|
+
// Correct - parameterized query
|
|
155
|
+
await this.sql`SELECT * FROM users WHERE id = ${userId}`;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### SQL query returns empty
|
|
159
|
+
|
|
160
|
+
1. **Wrong table name**
|
|
161
|
+
2. **Data in different agent instance** (each agent ID has isolated storage)
|
|
162
|
+
3. **Query conditions don't match**
|
|
163
|
+
|
|
164
|
+
Debug:
|
|
165
|
+
```typescript
|
|
166
|
+
const tables = await this.sql`
|
|
167
|
+
SELECT name FROM sqlite_master WHERE type='table'
|
|
168
|
+
`;
|
|
169
|
+
console.log("Tables:", tables);
|
|
170
|
+
|
|
171
|
+
const count = await this.sql`SELECT COUNT(*) as count FROM messages`;
|
|
172
|
+
console.log("Message count:", count);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Scheduled Task Issues
|
|
176
|
+
|
|
177
|
+
### "Task never fires"
|
|
178
|
+
|
|
179
|
+
1. **Method name mismatch**
|
|
180
|
+
```typescript
|
|
181
|
+
// Schedule references method that must exist
|
|
182
|
+
await this.schedule(60, "sendReminder", { ... });
|
|
183
|
+
|
|
184
|
+
// Method must be defined on the class
|
|
185
|
+
async sendReminder(data: any) {
|
|
186
|
+
// This method MUST exist
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
2. **Cron syntax error**
|
|
191
|
+
```typescript
|
|
192
|
+
// Invalid cron
|
|
193
|
+
await this.schedule("every 5 minutes", "task", {}); // Wrong
|
|
194
|
+
|
|
195
|
+
// Valid cron
|
|
196
|
+
await this.schedule("*/5 * * * *", "task", {}); // Every 5 minutes
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
3. **Task was cancelled**
|
|
200
|
+
```typescript
|
|
201
|
+
const schedules = await this.getSchedules();
|
|
202
|
+
console.log("Active schedules:", schedules);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### "Task fires multiple times"
|
|
206
|
+
|
|
207
|
+
If you schedule in `onStart()` without checking:
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
async onStart() {
|
|
211
|
+
// Bad - schedules new task every time agent wakes
|
|
212
|
+
await this.schedule("0 9 * * *", "dailyTask", {});
|
|
213
|
+
|
|
214
|
+
// Good - check first
|
|
215
|
+
const schedules = await this.getSchedules();
|
|
216
|
+
const hasDaily = schedules.some(s => s.callback === "dailyTask");
|
|
217
|
+
if (!hasDaily) {
|
|
218
|
+
await this.schedule("0 9 * * *", "dailyTask", {});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Deployment Issues
|
|
224
|
+
|
|
225
|
+
### "Class MyAgent is not exported"
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
// src/index.ts - Must export the class
|
|
229
|
+
export { MyAgent } from "./agent";
|
|
230
|
+
|
|
231
|
+
// Or if defined in same file
|
|
232
|
+
export class MyAgent extends Agent { ... }
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### "Durable Object not found"
|
|
236
|
+
|
|
237
|
+
Check `wrangler.toml`:
|
|
238
|
+
|
|
239
|
+
```toml
|
|
240
|
+
[durable_objects]
|
|
241
|
+
bindings = [{ name = "AGENT", class_name = "MyAgent" }]
|
|
242
|
+
|
|
243
|
+
[[migrations]]
|
|
244
|
+
tag = "v1"
|
|
245
|
+
new_classes = ["MyAgent"]
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### "Migration required"
|
|
249
|
+
|
|
250
|
+
When adding new Durable Object classes:
|
|
251
|
+
|
|
252
|
+
```toml
|
|
253
|
+
[[migrations]]
|
|
254
|
+
tag = "v2" # Increment from previous
|
|
255
|
+
new_classes = ["NewAgentClass"]
|
|
256
|
+
|
|
257
|
+
# Or for renames
|
|
258
|
+
# renamed_classes = [{ from = "OldName", to = "NewName" }]
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## AI Integration Issues
|
|
262
|
+
|
|
263
|
+
### "AI binding not found"
|
|
264
|
+
|
|
265
|
+
Add to `wrangler.toml`:
|
|
266
|
+
|
|
267
|
+
```toml
|
|
268
|
+
[ai]
|
|
269
|
+
binding = "AI"
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### "Model not found" / "Rate limited"
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
// Check model name is correct
|
|
276
|
+
const response = await this.env.AI.run(
|
|
277
|
+
"@cf/meta/llama-3-8b-instruct", // Exact model name
|
|
278
|
+
{ messages: [...] }
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
// Handle rate limits
|
|
282
|
+
try {
|
|
283
|
+
const response = await this.env.AI.run(...);
|
|
284
|
+
} catch (error) {
|
|
285
|
+
if (error.message.includes("rate limit")) {
|
|
286
|
+
// Retry with backoff or use queue
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### "Streaming not working"
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
// Enable streaming
|
|
295
|
+
const stream = await this.env.AI.run("@cf/meta/llama-3-8b-instruct", {
|
|
296
|
+
messages: [...],
|
|
297
|
+
stream: true, // Must be true
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
// Iterate over stream
|
|
301
|
+
for await (const chunk of stream) {
|
|
302
|
+
connection.send(JSON.stringify({ type: "chunk", content: chunk.response }));
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Debugging Tips
|
|
307
|
+
|
|
308
|
+
### Enable Verbose Logging
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
export class MyAgent extends Agent<Env, State> {
|
|
312
|
+
async onStart() {
|
|
313
|
+
console.log("Agent starting, state:", JSON.stringify(this.state));
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
async onConnect(connection: Connection) {
|
|
317
|
+
console.log("Client connected:", connection.id);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
async onMessage(connection: Connection, message: string) {
|
|
321
|
+
console.log("Received message:", message);
|
|
322
|
+
// ... handle
|
|
323
|
+
console.log("State after:", JSON.stringify(this.state));
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
async onClose(connection: Connection) {
|
|
327
|
+
console.log("Client disconnected:", connection.id);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
View logs:
|
|
333
|
+
```bash
|
|
334
|
+
wrangler tail --format pretty
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Test Locally First
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
npm start
|
|
341
|
+
# Connect with test client or use browser console:
|
|
342
|
+
# new WebSocket("ws://localhost:8787/agent/test")
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Inspect State
|
|
346
|
+
|
|
347
|
+
Add a debug endpoint:
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
async onRequest(request: Request) {
|
|
351
|
+
const url = new URL(request.url);
|
|
352
|
+
|
|
353
|
+
if (url.pathname === "/debug") {
|
|
354
|
+
return Response.json({
|
|
355
|
+
state: this.state,
|
|
356
|
+
schedules: await this.getSchedules(),
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return new Response("Not found", { status: 404 });
|
|
361
|
+
}
|
|
362
|
+
```
|