shmakk 1.1.0 → 1.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 +16 -1
- package/package.json +6 -3
- package/scripts/import-skills.js +536 -0
- package/scripts/install-skills.js +64 -0
- package/skills/ai-elements.md +482 -0
- package/skills/architecture.md +151 -0
- package/skills/backend-adapter-aws-lambda.md +204 -0
- package/skills/backend-adapter-express.md +177 -0
- package/skills/backend-adapter-fastify.md +222 -0
- package/skills/backend-adapter-fetch.md +200 -0
- package/skills/backend-api-docs.md +22 -0
- package/skills/backend-aspire.md +232 -0
- package/skills/backend-aspnet-core.md +62 -0
- package/skills/backend-build-chatgpt-app.md +321 -0
- package/skills/backend-build-mcp-app.md +393 -0
- package/skills/backend-build-mcp-server.md +222 -0
- package/skills/backend-build-mcpb.md +200 -0
- package/skills/backend-building-ai-agent-on-cloudflare.md +401 -0
- package/skills/backend-caching.md +206 -0
- package/skills/backend-chatgpt-app-submission.md +157 -0
- package/skills/backend-chatgpt-apps.md +321 -0
- package/skills/backend-client-setup.md +318 -0
- package/skills/backend-containerize-aspnet-framework.md +455 -0
- package/skills/backend-create-spring-boot-java-project.md +164 -0
- package/skills/backend-create-spring-boot-kotlin-project.md +148 -0
- package/skills/backend-csharp-async.md +50 -0
- package/skills/backend-csharp-docs.md +63 -0
- package/skills/backend-csharp-mcp-server-generator.md +60 -0
- package/skills/backend-dotenv.md +201 -0
- package/skills/backend-dotenvx.md +119 -0
- package/skills/backend-env-vars.md +259 -0
- package/skills/backend-error-handling.md +254 -0
- package/skills/backend-fastapi.md +437 -0
- package/skills/backend-go-mcp-server-generator.md +335 -0
- package/skills/backend-java-mcp-server-generator.md +757 -0
- package/skills/backend-kotlin-mcp-server-generator.md +450 -0
- package/skills/backend-middlewares.md +243 -0
- package/skills/backend-multi-stage-dockerfile.md +47 -0
- package/skills/backend-nestjs.md +192 -0
- package/skills/backend-next-forge.md +375 -0
- package/skills/backend-nextjs.md +746 -0
- package/skills/backend-openapi-to-application-code.md +113 -0
- package/skills/backend-php-mcp-server-generator.md +523 -0
- package/skills/backend-python-mcp-server-generator.md +106 -0
- package/skills/backend-routing-middleware.md +251 -0
- package/skills/backend-ruby-mcp-server-generator.md +661 -0
- package/skills/backend-rust-mcp-server-generator.md +578 -0
- package/skills/backend-semantic-kernel.md +57 -0
- package/skills/backend-server-setup.md +379 -0
- package/skills/backend-server-side-calls.md +250 -0
- package/skills/backend-subscriptions.md +407 -0
- package/skills/backend-swift-mcp-server-generator.md +670 -0
- package/skills/backend-trpc-router.md +152 -0
- package/skills/backend-typescript-mcp-server-generator.md +91 -0
- package/skills/backend-validators.md +229 -0
- package/skills/backend.md +76 -0
- package/skills/backup.md +165 -0
- package/skills/budget.md +140 -0
- package/skills/business-gtm-0-to-1-launch.md +322 -0
- package/skills/business-gtm-operating-cadence.md +421 -0
- package/skills/business-gtm-positioning-strategy.md +439 -0
- package/skills/business-gtm-product-led-growth.md +340 -0
- package/skills/calendar.md +95 -0
- package/skills/code-review.md +130 -0
- package/skills/compliance.md +168 -0
- package/skills/contracts.md +130 -0
- package/skills/daily-job-run.md +46 -0
- package/skills/daily-webdesign.md +187 -0
- package/skills/database-bigquery-pipeline-audit.md +130 -0
- package/skills/database-cosmosdb-datamodeling.md +1046 -0
- package/skills/database-durable-objects.md +187 -0
- package/skills/database-ef-core.md +76 -0
- package/skills/database-fabric-lakehouse.md +107 -0
- package/skills/database-neon-postgres-egress-optimizer.md +213 -0
- package/skills/database-neon-postgres.md +218 -0
- package/skills/database-postgresql-code-review.md +213 -0
- package/skills/database-postgresql-optimization.md +405 -0
- package/skills/database-sql-code-review.md +302 -0
- package/skills/database-sql-optimization.md +297 -0
- package/skills/dependency-audit.md +165 -0
- package/skills/design-kami-landing.md +234 -0
- package/skills/design.md +221 -0
- package/skills/dev-acquire-codebase-knowledge.md +175 -0
- package/skills/dev-add-educational-comments.md +129 -0
- package/skills/dev-add-model-descriptions.md +74 -0
- package/skills/dev-adr-review.md +56 -0
- package/skills/dev-boost-prompt.md +26 -0
- package/skills/dev-build-run-debug.md +130 -0
- package/skills/dev-chunk.md +49 -0
- package/skills/dev-claude-md-improver.md +180 -0
- package/skills/dev-code-exemplars-blueprint-generator.md +127 -0
- package/skills/dev-code-tour.md +434 -0
- package/skills/dev-comment-code-generate-a-tutorial.md +27 -0
- package/skills/dev-commit.md +81 -0
- package/skills/dev-context-map.md +53 -0
- package/skills/dev-conventional-commit.md +73 -0
- package/skills/dev-create-architectural-decision-record.md +98 -0
- package/skills/dev-create-draft-pr.md +17 -0
- package/skills/dev-create-pr.md +17 -0
- package/skills/dev-create-readme.md +22 -0
- package/skills/dev-csharp-mstest.md +479 -0
- package/skills/dev-csharp-nunit.md +72 -0
- package/skills/dev-csharp-tunit.md +101 -0
- package/skills/dev-csharp-xunit.md +69 -0
- package/skills/dev-debug-failing-test.md +90 -0
- package/skills/dev-diff-analyze.md +32 -0
- package/skills/dev-diffs.md +24 -0
- package/skills/dev-dotnet-best-practices.md +86 -0
- package/skills/dev-dotnet-design-pattern-review.md +43 -0
- package/skills/dev-dotnet-timezone.md +110 -0
- package/skills/dev-dotnet-upgrade.md +117 -0
- package/skills/dev-doublecheck.md +278 -0
- package/skills/dev-explain-error.md +15 -0
- package/skills/dev-finding-discovery.md +164 -0
- package/skills/dev-fix-finding.md +111 -0
- package/skills/dev-full-file-edit.md +25 -0
- package/skills/dev-git-commit.md +125 -0
- package/skills/dev-git-flow-branch-creator.md +293 -0
- package/skills/dev-git-workflow.md +46 -0
- package/skills/dev-github-automation.md +64 -0
- package/skills/dev-github-code-review.md +1140 -0
- package/skills/dev-github-issues.md +202 -0
- package/skills/dev-gpt-5-4-prompting.md +55 -0
- package/skills/dev-investigation-mode.md +277 -0
- package/skills/dev-java-add-graalvm-native-image-support.md +450 -0
- package/skills/dev-java-docs.md +24 -0
- package/skills/dev-java-refactoring-extract-method.md +105 -0
- package/skills/dev-java-refactoring-remove-parameter.md +85 -0
- package/skills/dev-merge.md +73 -0
- package/skills/dev-migrate-create.md +36 -0
- package/skills/dev-migrate-validate.md +36 -0
- package/skills/dev-my-issues.md +9 -0
- package/skills/dev-my-pull-requests.md +15 -0
- package/skills/dev-planning-oracle-to-postgres-migration-integration-testing.md +45 -0
- package/skills/dev-playwright-generate-test.md +18 -0
- package/skills/dev-playwright.md +148 -0
- package/skills/dev-prompt-builder.md +142 -0
- package/skills/dev-pytest-coverage.md +29 -0
- package/skills/dev-python-manager-discovery.md +330 -0
- package/skills/dev-python-pypi-package-builder.md +445 -0
- package/skills/dev-readme-blueprint-generator.md +79 -0
- package/skills/dev-refactor-method-complexity-reduce.md +99 -0
- package/skills/dev-refactor-plan.md +66 -0
- package/skills/dev-refactor.md +646 -0
- package/skills/dev-review-and-refactor.md +16 -0
- package/skills/dev-reviewing-oracle-to-postgres-migration.md +68 -0
- package/skills/dev-ruff-recursive-fix.md +201 -0
- package/skills/dev-run-e2e-tests.md +126 -0
- package/skills/dev-run-pre-commit-checks.md +133 -0
- package/skills/dev-run-smoke-tests.md +127 -0
- package/skills/dev-scaffolding-oracle-to-postgres-migration-test-project.md +55 -0
- package/skills/dev-spring-boot-testing.md +190 -0
- package/skills/dev-sync-upstream.md +32 -0
- package/skills/dev-sync.md +74 -0
- package/skills/dev-tdd-workflow.md +23 -0
- package/skills/dev-terraform-azurerm-set-diff-analyzer.md +49 -0
- package/skills/dev-test-driven-development.md +372 -0
- package/skills/dev-test-gaps.md +18 -0
- package/skills/dev-test-triage.md +55 -0
- package/skills/dev-typer.md +267 -0
- package/skills/dev-typescript-setup.md +25 -0
- package/skills/dev-unified-diff-edit.md +16 -0
- package/skills/dev-unit-test-vue-pinia.md +198 -0
- package/skills/dev-using-git-worktrees.md +216 -0
- package/skills/dev-validation.md +99 -0
- package/skills/dev-verification.md +168 -0
- package/skills/dev-webapp-testing.md +134 -0
- package/skills/dev-write-coding-standards-from-file.md +317 -0
- package/skills/dev-write-tests.md +16 -0
- package/skills/devops-appinsights-instrumentation.md +49 -0
- package/skills/devops-az-cost-optimize.md +306 -0
- package/skills/devops-chronicle.md +154 -0
- package/skills/devops-deployments-cicd.md +331 -0
- package/skills/devops-devops-rollout-plan.md +118 -0
- package/skills/devops-geistdocs.md +276 -0
- package/skills/devops-observability.md +774 -0
- package/skills/devops-observe-metrics.md +35 -0
- package/skills/devops-observe-trace.md +30 -0
- package/skills/devops-phoenix-cli.md +163 -0
- package/skills/devops-phoenix-tracing.md +140 -0
- package/skills/devops-publish-to-pages.md +108 -0
- package/skills/devops-telemetry.md +87 -0
- package/skills/devops-update-avm-modules-in-bicep.md +61 -0
- package/skills/devops.md +81 -0
- package/skills/diagrams-canvas.md +204 -0
- package/skills/diagrams-draw-io-diagram-generator.md +463 -0
- package/skills/diagrams-excalidraw-diagram-generator.md +614 -0
- package/skills/diagrams-graphify.md +1277 -0
- package/skills/docs-bear-notes.md +108 -0
- package/skills/docs-create-llms.md +211 -0
- package/skills/docs-doc-gen.md +20 -0
- package/skills/docs-documentation-writer.md +46 -0
- package/skills/docs-llm-config.md +33 -0
- package/skills/docs-mkdocs-translations.md +109 -0
- package/skills/docs-obsidian-vault-maintainer.md +14 -0
- package/skills/docs-obsidian.md +82 -0
- package/skills/docs-prose.md +324 -0
- package/skills/docs-update-llms.md +217 -0
- package/skills/docs-update-markdown-file-index.md +77 -0
- package/skills/docs-wiki-maintainer.md +20 -0
- package/skills/documents.md +120 -0
- package/skills/email.md +113 -0
- package/skills/expenses.md +140 -0
- package/skills/file-ops.md +149 -0
- package/skills/files-convert-plaintext-to-md.md +363 -0
- package/skills/files-doc.md +81 -0
- package/skills/files-docx.md +594 -0
- package/skills/files-markdown-to-html.md +917 -0
- package/skills/files-nano-pdf.md +39 -0
- package/skills/files-pdf.md +315 -0
- package/skills/files-pdftk-server.md +163 -0
- package/skills/files-pptx-html-fidelity-audit.md +255 -0
- package/skills/files-pptx.md +231 -0
- package/skills/files-xlsx.md +301 -0
- package/skills/find-jobs.md +78 -0
- package/skills/format-conversion.md +157 -0
- package/skills/frontend-ai-elements.md +483 -0
- package/skills/frontend-ai-gateway.md +563 -0
- package/skills/frontend-ai-generation-persistence.md +242 -0
- package/skills/frontend-ai-sdk.md +799 -0
- package/skills/frontend-ai-visibility.md +127 -0
- package/skills/frontend-angular-developer.md +130 -0
- package/skills/frontend-aspnet-minimal-api-openapi.md +42 -0
- package/skills/frontend-bencium-innovative-ux-designer.md +719 -0
- package/skills/frontend-chat-sdk.md +666 -0
- package/skills/frontend-chrome-devtools.md +98 -0
- package/skills/frontend-frontend-app-builder.md +186 -0
- package/skills/frontend-frontend-design.md +43 -0
- package/skills/frontend-frontend-testing-debugging.md +143 -0
- package/skills/frontend-gsap-framer-scroll-animation.md +152 -0
- package/skills/frontend-internal-linking.md +109 -0
- package/skills/frontend-json-render.md +335 -0
- package/skills/frontend-keyword-clustering.md +118 -0
- package/skills/frontend-next-intl-add-language.md +20 -0
- package/skills/frontend-on-page-seo.md +112 -0
- package/skills/frontend-premium-frontend-ui.md +114 -0
- package/skills/frontend-react-best-practices.md +143 -0
- package/skills/frontend-schema-markup.md +160 -0
- package/skills/frontend-seo-audit.md +110 -0
- package/skills/frontend-swr.md +215 -0
- package/skills/frontend-technical-seo.md +162 -0
- package/skills/frontend-use-dom.md +418 -0
- package/skills/frontend-web-coder.md +564 -0
- package/skills/frontend-web-design-reviewer.md +369 -0
- package/skills/frontend-web-perf.md +202 -0
- package/skills/frontend.md +125 -0
- package/skills/general-adapter-standalone.md +199 -0
- package/skills/general-auth.md +356 -0
- package/skills/general-containerize-aspnetcore.md +393 -0
- package/skills/general-create-technical-spike.md +231 -0
- package/skills/general-cron-jobs.md +72 -0
- package/skills/general-ddd-aggregate.md +52 -0
- package/skills/general-ddd-context.md +46 -0
- package/skills/general-ddd-validate.md +51 -0
- package/skills/general-dependency-check.md +26 -0
- package/skills/general-email-marketing.md +86 -0
- package/skills/general-healthcheck.md +246 -0
- package/skills/general-import-infrastructure-as-code.md +368 -0
- package/skills/general-init.md +49 -0
- package/skills/general-java-junit.md +64 -0
- package/skills/general-java-springboot.md +66 -0
- package/skills/general-javascript-typescript-jest.md +45 -0
- package/skills/general-kotlin-springboot.md +71 -0
- package/skills/general-make-repo-contribution.md +91 -0
- package/skills/general-market-research.md +78 -0
- package/skills/general-marketplace.md +468 -0
- package/skills/general-model-recommendation.md +673 -0
- package/skills/general-payments.md +352 -0
- package/skills/general-quality-playbook.md +480 -0
- package/skills/general-run-integration-tests.md +113 -0
- package/skills/general-superjson.md +274 -0
- package/skills/general-swiftpm-macos.md +51 -0
- package/skills/general-threat-model.md +61 -0
- package/skills/invoices.md +167 -0
- package/skills/licenses.md +159 -0
- package/skills/logs.md +156 -0
- package/skills/marketing.md +139 -0
- package/skills/media-image-manipulation-image-magick.md +253 -0
- package/skills/media-imagegen.md +357 -0
- package/skills/media-openai-whisper-api.md +63 -0
- package/skills/media-openai-whisper.md +39 -0
- package/skills/media-peekaboo.md +191 -0
- package/skills/media-screenshot.md +268 -0
- package/skills/media-speech.md +145 -0
- package/skills/media-transcribe.md +82 -0
- package/skills/media-video-frames.md +47 -0
- package/skills/mobile-android-emulator-qa.md +81 -0
- package/skills/mobile-android-performance.md +280 -0
- package/skills/mobile-building-mcp-server-on-cloudflare.md +267 -0
- package/skills/mobile-building-native-ui.md +322 -0
- package/skills/mobile-expo-api-routes.md +369 -0
- package/skills/mobile-expo-cicd-workflows.md +92 -0
- package/skills/mobile-expo-deployment.md +191 -0
- package/skills/mobile-expo-dev-client.md +165 -0
- package/skills/mobile-expo-module.md +177 -0
- package/skills/mobile-expo-tailwind-setup.md +481 -0
- package/skills/mobile-expo-ui-jetpack-compose.md +41 -0
- package/skills/mobile-expo-ui-swift-ui.md +40 -0
- package/skills/mobile-ios-app-intents.md +78 -0
- package/skills/mobile-ios-debugger-agent.md +52 -0
- package/skills/mobile-ios-ettrace-performance.md +198 -0
- package/skills/mobile-ios-memgraph-leaks.md +77 -0
- package/skills/mobile-native-data-fetching.md +508 -0
- package/skills/mobile-packaging-notarization.md +48 -0
- package/skills/mobile-react-native-architecture.md +672 -0
- package/skills/mobile-react-native-mobile-design.md +438 -0
- package/skills/mobile-signing-entitlements.md +59 -0
- package/skills/mobile-swiftui-liquid-glass.md +91 -0
- package/skills/mobile-swiftui-patterns.md +210 -0
- package/skills/mobile-swiftui-performance-audit.md +108 -0
- package/skills/mobile-swiftui-ui-patterns.md +97 -0
- package/skills/mobile-swiftui-view-refactor.md +204 -0
- package/skills/mobile-upgrading-expo.md +134 -0
- package/skills/mobile.md +183 -0
- package/skills/notes.md +106 -0
- package/skills/planning-adr-create.md +62 -0
- package/skills/planning-adr-index.md +67 -0
- package/skills/planning-architecture-blueprint-generator.md +323 -0
- package/skills/planning-brainstorming.md +165 -0
- package/skills/planning-breakdown-epic-arch.md +67 -0
- package/skills/planning-breakdown-epic-pm.md +59 -0
- package/skills/planning-breakdown-feature-implementation.md +129 -0
- package/skills/planning-breakdown-feature-prd.md +62 -0
- package/skills/planning-breakdown-plan.md +510 -0
- package/skills/planning-breakdown-test.md +366 -0
- package/skills/planning-cloud-design-patterns.md +63 -0
- package/skills/planning-content-brief.md +128 -0
- package/skills/planning-content-strategy.md +138 -0
- package/skills/planning-content-translation.md +143 -0
- package/skills/planning-create-github-action-workflow-specification.md +277 -0
- package/skills/planning-create-github-issues-feature-from-implementation-plan.md +29 -0
- package/skills/planning-create-github-issues-for-unmet-specification-requirements.md +36 -0
- package/skills/planning-create-github-pull-request-from-specification.md +25 -0
- package/skills/planning-create-implementation-plan.md +158 -0
- package/skills/planning-create-specification.md +128 -0
- package/skills/planning-first-ask.md +31 -0
- package/skills/planning-folder-structure-blueprint-generator.md +406 -0
- package/skills/planning-gen-specs-as-issues.md +166 -0
- package/skills/planning-generate-snapshot.md +144 -0
- package/skills/planning-generate-status-report.md +336 -0
- package/skills/planning-metric-pack-designer.md +27 -0
- package/skills/planning-pm-spec.md +53 -0
- package/skills/planning-prd.md +144 -0
- package/skills/planning-project-assessment.md +182 -0
- package/skills/planning-project-setup-info-local.md +128 -0
- package/skills/planning-project-workflow-analysis-blueprint-generator.md +294 -0
- package/skills/planning-service-oriented-architecture.md +248 -0
- package/skills/planning-spec-to-backlog.md +544 -0
- package/skills/planning-technology-stack-blueprint-generator.md +243 -0
- package/skills/planning-update-implementation-plan.md +158 -0
- package/skills/planning-update-specification.md +128 -0
- package/skills/planning-what-context-needed.md +40 -0
- package/skills/planning-writing-plans.md +153 -0
- package/skills/prepare-application.md +81 -0
- package/skills/productivity-apple-notes.md +78 -0
- package/skills/productivity-apple-reminders.md +119 -0
- package/skills/productivity-capture-tasks-from-meeting-notes.md +680 -0
- package/skills/productivity-daily-prep.md +156 -0
- package/skills/productivity-email-drafter.md +101 -0
- package/skills/productivity-hr-onboarding.md +53 -0
- package/skills/productivity-things-mac.md +87 -0
- package/skills/productivity-update.md +169 -0
- package/skills/reminders.md +109 -0
- package/skills/research-dossier-collect.md +71 -0
- package/skills/research-kg-extract.md +37 -0
- package/skills/research-openai-docs.md +89 -0
- package/skills/research-research-add-items.md +31 -0
- package/skills/research-research-report.md +94 -0
- package/skills/research-research-synthesize.md +63 -0
- package/skills/research-summarize.md +88 -0
- package/skills/research-transformers-js.md +635 -0
- package/skills/research.md +119 -0
- package/skills/security-ai-prompt-engineering-safety-review.md +231 -0
- package/skills/security-attack-path-analysis.md +182 -0
- package/skills/security-gdpr-compliant.md +284 -0
- package/skills/security-mcp-security-audit.md +279 -0
- package/skills/security-pii-detect.md +31 -0
- package/skills/security-secret-scanning.md +243 -0
- package/skills/security-security-best-practices.md +87 -0
- package/skills/security-security-ownership-map.md +207 -0
- package/skills/security-security-review.md +169 -0
- package/skills/security-security-scan.md +138 -0
- package/skills/security-security-threat-model.md +82 -0
- package/skills/security-threat-model-analyst.md +76 -0
- package/skills/sysmon.md +181 -0
- package/skills/system-arch-linux-triage.md +32 -0
- package/skills/system-centos-linux-triage.md +32 -0
- package/skills/system-debian-linux-triage.md +32 -0
- package/skills/system-fedora-linux-triage.md +32 -0
- package/skills/system-geofeed-tuner.md +865 -0
- package/skills/system-iot-anomalies.md +15 -0
- package/skills/system-iot-firmware.md +16 -0
- package/skills/system-iot-fleet.md +14 -0
- package/skills/system-iot-register.md +19 -0
- package/skills/system-iot-witness-verify.md +15 -0
- package/skills/system-tmux.md +171 -0
- package/skills/system-window-management.md +228 -0
- package/skills/task-management.md +90 -0
- package/skills/tasks.md +102 -0
- package/skills/test-coverage.md +188 -0
- package/skills/ux-ui.md +128 -0
- package/skills/web.md +186 -0
- package/skills/workflow-act-on-feedback.md +15 -0
- package/skills/workflow-automate-this.md +245 -0
- package/skills/workflow-autoresearch.md +276 -0
- package/skills/workflow-coding-agent.md +317 -0
- package/skills/workflow-deep-research.md +44 -0
- package/skills/workflow-dispatching-parallel-agents.md +183 -0
- package/skills/workflow-eval-driven-dev.md +148 -0
- package/skills/workflow-executing-plans.md +71 -0
- package/skills/workflow-mentoring-juniors.md +311 -0
- package/skills/workflow-receiving-code-review.md +214 -0
- package/skills/workflow-repo-story-time.md +155 -0
- package/skills/workflow-requesting-code-review.md +104 -0
- package/skills/workflow-session-report.md +43 -0
- package/skills/workflow-structured-autonomy-generate.md +126 -0
- package/skills/workflow-subagent-driven-development.md +280 -0
- package/skills/writing.md +106 -0
- package/src/agent.js +0 -0
- package/src/browser.js +297 -0
- package/src/cli.js +25 -4
- package/src/code-reviewer.js +119 -0
- package/src/completions.js +1 -1
- package/src/control.js +222 -30
- package/src/coordinator.js +303 -0
- package/src/correction.js +29 -8
- package/src/edit-tracker.js +21 -0
- package/src/edit-viewer.js +414 -0
- package/src/endpoints.js +64 -15
- package/src/index.js +45 -11
- package/src/llm.js +86 -2
- package/src/mcp-client.js +416 -0
- package/src/memory.js +182 -0
- package/src/planner.js +216 -0
- package/src/rules.js +90 -0
- package/src/self-commands.js +757 -0
- package/src/services/voice.js +10 -7
- package/src/session-search.js +427 -0
- package/src/session.js +487 -99
- package/src/shmakk-server.js +91 -0
- package/src/skills.js +410 -3
- package/src/subagent.js +4 -1
- package/src/system-prompt.js +13 -5
- package/src/task-file.js +114 -0
- package/src/taskClassifier.js +246 -0
- package/src/team.js +752 -0
- package/src/tools.js +142 -21
- package/src/web.js +35 -5
- package/src/workflows.js +261 -0
- package/src/workspace-index.js +25 -6
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-generation-persistence
|
|
3
|
+
description: "AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation"
|
|
4
|
+
metadata:
|
|
5
|
+
priority: 6
|
|
6
|
+
docs:
|
|
7
|
+
- "https://sdk.vercel.ai/docs/ai-sdk-ui/storing-messages"
|
|
8
|
+
sitemap: "https://sdk.vercel.ai/sitemap.xml"
|
|
9
|
+
pathPatterns:
|
|
10
|
+
- "app/api/generate/**"
|
|
11
|
+
- "app/api/generations/**"
|
|
12
|
+
- "src/app/api/generate/**"
|
|
13
|
+
- "src/app/api/generations/**"
|
|
14
|
+
- "app/chat/[id]/**"
|
|
15
|
+
- "app/generate/[id]/**"
|
|
16
|
+
- "src/app/chat/[id]/**"
|
|
17
|
+
- "src/app/generate/[id]/**"
|
|
18
|
+
- "lib/generations/**"
|
|
19
|
+
- "src/lib/generations/**"
|
|
20
|
+
bashPatterns: []
|
|
21
|
+
importPatterns:
|
|
22
|
+
- "ai"
|
|
23
|
+
- "@ai-sdk/*"
|
|
24
|
+
- "@vercel/blob"
|
|
25
|
+
- "nanoid"
|
|
26
|
+
- "@paralleldrive/cuid2"
|
|
27
|
+
promptSignals:
|
|
28
|
+
phrases:
|
|
29
|
+
- "save generations"
|
|
30
|
+
- "persist generations"
|
|
31
|
+
- "generation history"
|
|
32
|
+
- "chat history"
|
|
33
|
+
- "save chat"
|
|
34
|
+
- "generation id"
|
|
35
|
+
- "ai chat"
|
|
36
|
+
- "chat app"
|
|
37
|
+
- "chatbot"
|
|
38
|
+
- "image generation"
|
|
39
|
+
- "text generation"
|
|
40
|
+
- "ai app"
|
|
41
|
+
allOf:
|
|
42
|
+
- [generate, save]
|
|
43
|
+
- [generate, persist]
|
|
44
|
+
- [generate, store]
|
|
45
|
+
- [ai, persist]
|
|
46
|
+
- [ai, history]
|
|
47
|
+
- [ai, database]
|
|
48
|
+
- [chat, persist]
|
|
49
|
+
- [chat, database]
|
|
50
|
+
- [chat, url]
|
|
51
|
+
- [generation, url]
|
|
52
|
+
- [generation, id]
|
|
53
|
+
- [image, generate]
|
|
54
|
+
- [stream, save]
|
|
55
|
+
- [stream, persist]
|
|
56
|
+
anyOf:
|
|
57
|
+
- "shareable"
|
|
58
|
+
- "retrievable"
|
|
59
|
+
- "permalink"
|
|
60
|
+
- "cost tracking"
|
|
61
|
+
- "token usage"
|
|
62
|
+
- "nanoid"
|
|
63
|
+
- "cuid"
|
|
64
|
+
- "openai"
|
|
65
|
+
- "anthropic"
|
|
66
|
+
- "llm"
|
|
67
|
+
- "gpt"
|
|
68
|
+
- "claude"
|
|
69
|
+
noneOf:
|
|
70
|
+
- "github actions"
|
|
71
|
+
- "ci workflow"
|
|
72
|
+
minScore: 6
|
|
73
|
+
category: frontend
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
# AI Generation Persistence
|
|
77
|
+
|
|
78
|
+
**AI generations are expensive, non-reproducible assets. Never discard them.**
|
|
79
|
+
|
|
80
|
+
Every call to an LLM costs real money and produces unique output that cannot be exactly reproduced. Treat generations like database records — assign an ID, persist immediately, and make them retrievable.
|
|
81
|
+
|
|
82
|
+
## Core Rules
|
|
83
|
+
|
|
84
|
+
1. **Generate an ID before the LLM call** — use `nanoid()` or `createId()` from `@paralleldrive/cuid2`
|
|
85
|
+
2. **Persist every generation** — text and metadata to database, images and files to Vercel Blob
|
|
86
|
+
3. **Make every generation addressable** — URL pattern: `/chat/[id]`, `/generate/[id]`, `/image/[id]`
|
|
87
|
+
4. **Track metadata** — model name, token usage, estimated cost, timestamp, user ID
|
|
88
|
+
5. **Never stream without saving** — if the user refreshes, the generation must survive
|
|
89
|
+
|
|
90
|
+
## Generate-Then-Redirect Pattern
|
|
91
|
+
|
|
92
|
+
The standard UX flow for AI features: create the resource first, then redirect to its page.
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
// app/api/chat/route.ts
|
|
96
|
+
import { nanoid } from "nanoid";
|
|
97
|
+
import { db } from "@/lib/db";
|
|
98
|
+
import { redirect } from "next/navigation";
|
|
99
|
+
|
|
100
|
+
export async function POST(req: Request) {
|
|
101
|
+
const { prompt, model } = await req.json();
|
|
102
|
+
const id = nanoid();
|
|
103
|
+
|
|
104
|
+
// Create the record BEFORE generation starts
|
|
105
|
+
await db.insert(generations).values({
|
|
106
|
+
id,
|
|
107
|
+
prompt,
|
|
108
|
+
model,
|
|
109
|
+
status: "pending",
|
|
110
|
+
createdAt: new Date(),
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Redirect to the generation page — it handles streaming
|
|
114
|
+
redirect(`/chat/${id}`);
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
```tsx
|
|
119
|
+
// app/chat/[id]/page.tsx
|
|
120
|
+
import { db } from "@/lib/db";
|
|
121
|
+
import { notFound } from "next/navigation";
|
|
122
|
+
|
|
123
|
+
export default async function ChatPage({ params }: { params: Promise<{ id: string }> }) {
|
|
124
|
+
const { id } = await params;
|
|
125
|
+
const generation = await db.query.generations.findFirst({
|
|
126
|
+
where: eq(generations.id, id),
|
|
127
|
+
});
|
|
128
|
+
if (!generation) notFound();
|
|
129
|
+
|
|
130
|
+
// Render with streaming if still pending, or show saved result
|
|
131
|
+
return <ChatView generation={generation} />;
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
This gives you: shareable URLs, back-button support, multi-tab sessions, and generation history for free.
|
|
136
|
+
|
|
137
|
+
## Persistence Schema
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
// lib/db/schema.ts
|
|
141
|
+
import { pgTable, text, integer, timestamp, jsonb } from "drizzle-orm/pg-core";
|
|
142
|
+
|
|
143
|
+
export const generations = pgTable("generations", {
|
|
144
|
+
id: text("id").primaryKey(), // nanoid
|
|
145
|
+
userId: text("user_id"), // auth user
|
|
146
|
+
model: text("model").notNull(), // "openai/gpt-5.4"
|
|
147
|
+
prompt: text("prompt"), // input text
|
|
148
|
+
result: text("result"), // generated output
|
|
149
|
+
imageUrls: jsonb("image_urls"), // Blob URLs for generated images
|
|
150
|
+
tokenUsage: jsonb("token_usage"), // { promptTokens, completionTokens }
|
|
151
|
+
estimatedCostCents: integer("estimated_cost_cents"),
|
|
152
|
+
status: text("status").default("pending"), // pending | streaming | complete | error
|
|
153
|
+
createdAt: timestamp("created_at").defaultNow(),
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Storage Strategy
|
|
158
|
+
|
|
159
|
+
| Data Type | Storage | Why |
|
|
160
|
+
|-----------|---------|-----|
|
|
161
|
+
| Text, metadata, history | Neon Postgres via Drizzle | Queryable, relational, supports search |
|
|
162
|
+
| Generated images & files | Vercel Blob (`@vercel/blob`) | Permanent URLs, CDN-backed, no expiry |
|
|
163
|
+
| Prompt dedup cache | Upstash Redis | Fast lookup, TTL-based expiry |
|
|
164
|
+
|
|
165
|
+
## Image Persistence
|
|
166
|
+
|
|
167
|
+
Never serve generated images as ephemeral base64 or temporary URLs. Save to Blob immediately:
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
import { put } from "@vercel/blob";
|
|
171
|
+
import { generateText } from "ai";
|
|
172
|
+
|
|
173
|
+
const result = await generateText({ model, prompt });
|
|
174
|
+
|
|
175
|
+
// Save every generated image to permanent storage
|
|
176
|
+
const imageUrls: string[] = [];
|
|
177
|
+
for (const file of result.files ?? []) {
|
|
178
|
+
if (file.mediaType?.startsWith("image/")) {
|
|
179
|
+
const ext = file.mediaType.split("/")[1] || "png";
|
|
180
|
+
const blob = await put(`generations/${generationId}.${ext}`, file.uint8Array, {
|
|
181
|
+
access: "public",
|
|
182
|
+
contentType: file.mediaType,
|
|
183
|
+
});
|
|
184
|
+
imageUrls.push(blob.url);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Update the generation record with permanent URLs
|
|
189
|
+
await db.update(generations)
|
|
190
|
+
.set({ imageUrls, status: "complete" })
|
|
191
|
+
.where(eq(generations.id, generationId));
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Cost Tracking
|
|
195
|
+
|
|
196
|
+
Extract usage from every generation and store it. This enables billing, budgeting, and abuse detection:
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
const result = await generateText({ model, prompt });
|
|
200
|
+
|
|
201
|
+
const usage = result.usage; // { promptTokens, completionTokens, totalTokens }
|
|
202
|
+
const estimatedCostCents = estimateCost(model, usage);
|
|
203
|
+
|
|
204
|
+
await db.update(generations).set({
|
|
205
|
+
result: result.text,
|
|
206
|
+
tokenUsage: usage,
|
|
207
|
+
estimatedCostCents,
|
|
208
|
+
status: "complete",
|
|
209
|
+
}).where(eq(generations.id, generationId));
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Prompt Dedup / Caching
|
|
213
|
+
|
|
214
|
+
Avoid paying for identical generations. Cache by content hash:
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
import { Redis } from "@upstash/redis";
|
|
218
|
+
import { createHash } from "crypto";
|
|
219
|
+
|
|
220
|
+
const redis = Redis.fromEnv();
|
|
221
|
+
|
|
222
|
+
function hashPrompt(model: string, prompt: string): string {
|
|
223
|
+
return createHash("sha256").update(`${model}:${prompt}`).digest("hex");
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Check cache before generating
|
|
227
|
+
const cacheKey = `gen:${hashPrompt(model, prompt)}`;
|
|
228
|
+
const cached = await redis.get<string>(cacheKey);
|
|
229
|
+
if (cached) return cached; // Return cached generation ID
|
|
230
|
+
|
|
231
|
+
// After generation, cache the result
|
|
232
|
+
await redis.set(cacheKey, generationId, { ex: 3600 }); // 1hr TTL
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Anti-Patterns
|
|
236
|
+
|
|
237
|
+
- **Streaming to client without saving** — generation lost on page refresh. Always write to DB as tokens arrive or on completion.
|
|
238
|
+
- **Routes without `[id]` segments** — `/api/chat` with no ID means generations aren't addressable. Use `/chat/[id]`.
|
|
239
|
+
- **Re-generating identical prompts** — check cache first. Same prompt + same model = same cost for no new value.
|
|
240
|
+
- **Ephemeral base64 images** — generated images served inline are lost when the component unmounts. Save to Vercel Blob.
|
|
241
|
+
- **Missing metadata** — always store model name, token counts, and timestamp. You need this for cost tracking and debugging.
|
|
242
|
+
- **Client-only state** — storing generations only in React state or localStorage. Use a database — generations must survive across devices and sessions.
|