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,274 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: superjson
|
|
3
|
+
description: >
|
|
4
|
+
Configure SuperJSON transformer on both server initTRPC.create({ transformer:
|
|
5
|
+
superjson }) and every client terminating link (httpBatchLink, httpLink, wsLink,
|
|
6
|
+
httpSubscriptionLink) to support Date, Map, Set, BigInt over the wire. Transformer
|
|
7
|
+
must match on both sides. In v11, transformer goes on individual links, not the
|
|
8
|
+
client constructor.
|
|
9
|
+
type: composition
|
|
10
|
+
library: trpc
|
|
11
|
+
library_version: '11.15.1'
|
|
12
|
+
requires:
|
|
13
|
+
- server-setup
|
|
14
|
+
- client-setup
|
|
15
|
+
sources:
|
|
16
|
+
- www/docs/server/data-transformers.md
|
|
17
|
+
category: general
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# tRPC -- SuperJSON Transformer
|
|
21
|
+
|
|
22
|
+
## Setup
|
|
23
|
+
|
|
24
|
+
### 1. Install superjson
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install superjson
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2. Add to initTRPC on the server
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// server/trpc.ts
|
|
34
|
+
import { initTRPC } from '@trpc/server';
|
|
35
|
+
import superjson from 'superjson';
|
|
36
|
+
|
|
37
|
+
const t = initTRPC.create({
|
|
38
|
+
transformer: superjson,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export const router = t.router;
|
|
42
|
+
export const publicProcedure = t.procedure;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3. Add to every terminating link on the client
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
// client.ts
|
|
49
|
+
import { createTRPCClient, httpBatchLink } from '@trpc/client';
|
|
50
|
+
import superjson from 'superjson';
|
|
51
|
+
import type { AppRouter } from './server/trpc';
|
|
52
|
+
|
|
53
|
+
const client = createTRPCClient<AppRouter>({
|
|
54
|
+
links: [
|
|
55
|
+
httpBatchLink({
|
|
56
|
+
url: 'http://localhost:3000/trpc',
|
|
57
|
+
transformer: superjson,
|
|
58
|
+
}),
|
|
59
|
+
],
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Now Date, Map, Set, BigInt, RegExp, undefined, and other non-JSON types survive the round trip.
|
|
64
|
+
|
|
65
|
+
## Core Patterns
|
|
66
|
+
|
|
67
|
+
### SuperJSON with splitLink and Subscriptions
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import {
|
|
71
|
+
createTRPCClient,
|
|
72
|
+
httpBatchLink,
|
|
73
|
+
httpSubscriptionLink,
|
|
74
|
+
splitLink,
|
|
75
|
+
} from '@trpc/client';
|
|
76
|
+
import superjson from 'superjson';
|
|
77
|
+
import type { AppRouter } from './server/trpc';
|
|
78
|
+
|
|
79
|
+
const client = createTRPCClient<AppRouter>({
|
|
80
|
+
links: [
|
|
81
|
+
splitLink({
|
|
82
|
+
condition: (op) => op.type === 'subscription',
|
|
83
|
+
true: httpSubscriptionLink({
|
|
84
|
+
url: 'http://localhost:3000/trpc',
|
|
85
|
+
transformer: superjson,
|
|
86
|
+
}),
|
|
87
|
+
false: httpBatchLink({
|
|
88
|
+
url: 'http://localhost:3000/trpc',
|
|
89
|
+
transformer: superjson,
|
|
90
|
+
}),
|
|
91
|
+
}),
|
|
92
|
+
],
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Every terminating link in every branch must have `transformer: superjson`.
|
|
97
|
+
|
|
98
|
+
### SuperJSON with wsLink
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
import { createTRPCClient, createWSClient, wsLink } from '@trpc/client';
|
|
102
|
+
import superjson from 'superjson';
|
|
103
|
+
import type { AppRouter } from './server/trpc';
|
|
104
|
+
|
|
105
|
+
const wsClient = createWSClient({
|
|
106
|
+
url: 'ws://localhost:3000',
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
const client = createTRPCClient<AppRouter>({
|
|
110
|
+
links: [
|
|
111
|
+
wsLink<AppRouter>({
|
|
112
|
+
client: wsClient,
|
|
113
|
+
transformer: superjson,
|
|
114
|
+
}),
|
|
115
|
+
],
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Returning Dates from Procedures
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
// server
|
|
123
|
+
import { z } from 'zod';
|
|
124
|
+
import { publicProcedure, router } from './trpc';
|
|
125
|
+
|
|
126
|
+
const appRouter = router({
|
|
127
|
+
getEvent: publicProcedure
|
|
128
|
+
.input(z.object({ id: z.string() }))
|
|
129
|
+
.query(({ input }) => {
|
|
130
|
+
return {
|
|
131
|
+
id: input.id,
|
|
132
|
+
name: 'Launch Party',
|
|
133
|
+
date: new Date('2025-01-01T00:00:00Z'),
|
|
134
|
+
};
|
|
135
|
+
}),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
export type AppRouter = typeof appRouter;
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
// client
|
|
143
|
+
const event = await client.getEvent.query({ id: '1' });
|
|
144
|
+
console.log(event.date instanceof Date); // true
|
|
145
|
+
console.log(event.date.getFullYear()); // 2025
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Without superjson, `event.date` would be a string like `"2025-01-01T00:00:00.000Z"`.
|
|
149
|
+
|
|
150
|
+
## Common Mistakes
|
|
151
|
+
|
|
152
|
+
### [CRITICAL] Transformer on server but missing from client link
|
|
153
|
+
|
|
154
|
+
Wrong:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
// Server
|
|
158
|
+
const t = initTRPC.create({ transformer: superjson });
|
|
159
|
+
|
|
160
|
+
// Client
|
|
161
|
+
const client = createTRPCClient<AppRouter>({
|
|
162
|
+
links: [httpBatchLink({ url: 'http://localhost:3000/trpc' })],
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Correct:
|
|
167
|
+
|
|
168
|
+
```ts
|
|
169
|
+
// Server
|
|
170
|
+
const t = initTRPC.create({ transformer: superjson });
|
|
171
|
+
|
|
172
|
+
// Client
|
|
173
|
+
const client = createTRPCClient<AppRouter>({
|
|
174
|
+
links: [
|
|
175
|
+
httpBatchLink({
|
|
176
|
+
url: 'http://localhost:3000/trpc',
|
|
177
|
+
transformer: superjson,
|
|
178
|
+
}),
|
|
179
|
+
],
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Server encodes with superjson but client tries to parse raw JSON, causing "Unable to transform response" or garbled data.
|
|
184
|
+
|
|
185
|
+
Source: www/docs/server/data-transformers.md
|
|
186
|
+
|
|
187
|
+
### [CRITICAL] Transformer goes on individual links, not createTRPCClient
|
|
188
|
+
|
|
189
|
+
The `transformer` option is on individual terminating links:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
createTRPCClient<AppRouter>({
|
|
193
|
+
links: [
|
|
194
|
+
httpBatchLink({
|
|
195
|
+
url: 'http://localhost:3000/trpc',
|
|
196
|
+
transformer: superjson,
|
|
197
|
+
}),
|
|
198
|
+
],
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
In v11, `transformer` was moved from the client constructor to individual links. Passing it to `createTRPCClient` throws a TypeError.
|
|
203
|
+
|
|
204
|
+
Source: packages/client/src/internals/TRPCUntypedClient.ts
|
|
205
|
+
|
|
206
|
+
### [CRITICAL] Transformer on only some terminating links in splitLink
|
|
207
|
+
|
|
208
|
+
Wrong:
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
splitLink({
|
|
212
|
+
condition: (op) => op.type === 'subscription',
|
|
213
|
+
true: httpSubscriptionLink({
|
|
214
|
+
url: 'http://localhost:3000/trpc',
|
|
215
|
+
// missing transformer!
|
|
216
|
+
}),
|
|
217
|
+
false: httpBatchLink({
|
|
218
|
+
url: 'http://localhost:3000/trpc',
|
|
219
|
+
transformer: superjson,
|
|
220
|
+
}),
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Correct:
|
|
225
|
+
|
|
226
|
+
```ts
|
|
227
|
+
splitLink({
|
|
228
|
+
condition: (op) => op.type === 'subscription',
|
|
229
|
+
true: httpSubscriptionLink({
|
|
230
|
+
url: 'http://localhost:3000/trpc',
|
|
231
|
+
transformer: superjson,
|
|
232
|
+
}),
|
|
233
|
+
false: httpBatchLink({
|
|
234
|
+
url: 'http://localhost:3000/trpc',
|
|
235
|
+
transformer: superjson,
|
|
236
|
+
}),
|
|
237
|
+
});
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Every terminating link must have the same transformer. A missing transformer on one branch causes deserialization failures only for operations routed through that branch.
|
|
241
|
+
|
|
242
|
+
Source: www/docs/server/data-transformers.md
|
|
243
|
+
|
|
244
|
+
### [HIGH] Using transformer on client but not on server
|
|
245
|
+
|
|
246
|
+
Wrong:
|
|
247
|
+
|
|
248
|
+
```ts
|
|
249
|
+
// Server -- no transformer
|
|
250
|
+
const t = initTRPC.create();
|
|
251
|
+
|
|
252
|
+
// Client
|
|
253
|
+
httpBatchLink({ url, transformer: superjson });
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Correct:
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
// Server
|
|
260
|
+
const t = initTRPC.create({ transformer: superjson });
|
|
261
|
+
|
|
262
|
+
// Client
|
|
263
|
+
httpBatchLink({ url, transformer: superjson });
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
The transformer must be configured on both `initTRPC.create()` and every client link. Client-only transformer corrupts the request encoding because the server expects plain JSON.
|
|
267
|
+
|
|
268
|
+
Source: www/docs/server/data-transformers.md
|
|
269
|
+
|
|
270
|
+
## See Also
|
|
271
|
+
|
|
272
|
+
- `client-setup` -- create the tRPC client and configure links
|
|
273
|
+
- `links` -- detailed options for each link type including transformer
|
|
274
|
+
- `server-setup` -- initTRPC.create() where the server transformer is configured
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swiftpm-macos
|
|
3
|
+
description: Build, run, and test pure SwiftPM-based macOS packages and executables. Use when the repo is package-first, when there is no Xcode project, or when Swift package workflows are the fastest path to diagnosis.
|
|
4
|
+
category: general
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SwiftPM for macOS
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
Use this skill when `Package.swift` is the primary entrypoint or when SwiftPM is
|
|
12
|
+
the fastest path to a reproducible result.
|
|
13
|
+
|
|
14
|
+
## Workflow
|
|
15
|
+
|
|
16
|
+
1. Inspect the package.
|
|
17
|
+
- Read `Package.swift`.
|
|
18
|
+
- Identify executable, library, and test products.
|
|
19
|
+
|
|
20
|
+
2. Build with SwiftPM.
|
|
21
|
+
- Use `swift build` by default.
|
|
22
|
+
- Use release mode only when the user explicitly needs it.
|
|
23
|
+
|
|
24
|
+
3. Run the right product.
|
|
25
|
+
- Use `swift run <product>` when an executable exists.
|
|
26
|
+
- If multiple executables exist, explain the default choice.
|
|
27
|
+
|
|
28
|
+
4. Test narrowly.
|
|
29
|
+
- Use `swift test`.
|
|
30
|
+
- Apply filters when a specific test target or case is known.
|
|
31
|
+
|
|
32
|
+
5. Summarize failures.
|
|
33
|
+
- Module/import resolution
|
|
34
|
+
- Package graph or dependency issue
|
|
35
|
+
- Linker failure
|
|
36
|
+
- Runtime failure
|
|
37
|
+
- Test regression
|
|
38
|
+
|
|
39
|
+
## Guardrails
|
|
40
|
+
|
|
41
|
+
- Prefer SwiftPM over Xcode when both exist and the package path is clearly simpler.
|
|
42
|
+
- Do not assume an app bundle exists in a pure package workflow.
|
|
43
|
+
- Explain when the package is library-only and therefore not directly runnable.
|
|
44
|
+
|
|
45
|
+
## Output Expectations
|
|
46
|
+
|
|
47
|
+
Provide:
|
|
48
|
+
- the package products you found
|
|
49
|
+
- the command you ran
|
|
50
|
+
- whether build, run, or test succeeded
|
|
51
|
+
- the top blocker if not
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: threat-model
|
|
3
|
+
description: Use when Codex is already in the threat-modeling phase of a security scan, the user explicitly invokes $threat-model, or the user explicitly asks to create, update, or persist a repository threat model. Do not use as the primary trigger for full PR, commit, branch, patch, or repository scans.
|
|
4
|
+
metadata:
|
|
5
|
+
short-description: Build a repository threat model
|
|
6
|
+
category: general
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Security Threat Model
|
|
10
|
+
|
|
11
|
+
## Objective
|
|
12
|
+
|
|
13
|
+
Establish the repository-scoped threat model at the path defined in `../../references/scan-artifacts.md`. If this already exists, stop here. If a threat model or clearly authoritative security scan guidance is provided or already exists, persist it unchanged to this file, then stop here.
|
|
14
|
+
|
|
15
|
+
`AGENTS.md` can be that authoritative source when it is sufficiently specific about the repository's product surfaces, trust boundaries, attacker-controlled inputs, assumptions, or security scan guidance to serve as the threat model.
|
|
16
|
+
|
|
17
|
+
If no threat model is provided, generate a repository-scoped threat model to be used in future bug discovery. The threat model should holistically cover the entire repository and should make it obvious:
|
|
18
|
+
|
|
19
|
+
- what assets or privileges matter
|
|
20
|
+
- what trust boundaries exist
|
|
21
|
+
- what inputs are attacker-controlled
|
|
22
|
+
- what invariants the code must preserve
|
|
23
|
+
- what repository-wide failure modes would matter most
|
|
24
|
+
|
|
25
|
+
## Artifact Resolution
|
|
26
|
+
|
|
27
|
+
The path references in this skill are the default locations for this phase.
|
|
28
|
+
If the user explicitly provides a different path for a required input or output, use the user-provided path instead of the corresponding default path referenced in this skill.
|
|
29
|
+
If a required input is still missing, stop and ask the user for it before continuing.
|
|
30
|
+
Use the shared scan artifact path conventions in `../../references/scan-artifacts.md`.
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
1. Resolve `repo_name`, `security_scans_dir`, and the repository-scoped threat model path using `../../references/scan-artifacts.md`.
|
|
35
|
+
2. If the repository-scoped threat model already exists, stop here.
|
|
36
|
+
3. If a threat model or authoritative security scan guidance is provided or referenced:
|
|
37
|
+
- write it exactly to the repository-scoped threat model path
|
|
38
|
+
- treat that file as the only threat model source of truth
|
|
39
|
+
- do not expand, summarize, or reinterpret it
|
|
40
|
+
- `AGENTS.md` is acceptable here when it is clearly being used as the security scan guidance or threat model source for this scan and is sufficiently repository-specific to stand in for a threat model
|
|
41
|
+
4. Otherwise, generate a repository-scoped threat model using the checklist below.
|
|
42
|
+
5. Before finalizing this phase, sanity-check that:
|
|
43
|
+
- the threat model is repository-scoped rather than being centered around any specific scan target
|
|
44
|
+
- it describes repository-wide primary product or runtime surfaces and trust boundaries before covering any narrower examples
|
|
45
|
+
- any vulnerability-class discussion is about repository-context classes, not findings about any current diff
|
|
46
|
+
6. Write the exact threat model to the repository-scoped threat model path.
|
|
47
|
+
|
|
48
|
+
## Threat Model Generation Guidance
|
|
49
|
+
|
|
50
|
+
Generate and structure the threat model using `references/threat-model-guidance.md`.
|
|
51
|
+
|
|
52
|
+
## Hard Rules
|
|
53
|
+
|
|
54
|
+
- A provided threat model or authoritative security scan guidance is authoritative.
|
|
55
|
+
- Threat model generation must stay at repository scope unless the user explicitly asks for narrower scope.
|
|
56
|
+
- Do not turn this phase into findings about any current diff.
|
|
57
|
+
- Do not let the current scan target, touched subsystem, or changed directories become the center of gravity for this phase unless the user explicitly asks for that narrower scope.
|
|
58
|
+
- In large monorepos, avoid centering `personal/`, `test/`, `tests/`, `docs/`, `examples/`, or one-off developer tooling unless repository evidence shows those are real deployed or privileged workflow surfaces.
|
|
59
|
+
- Call out trust boundaries and assumptions explicitly.
|
|
60
|
+
- Keep references to vulnerability types at the level of repository-context classes, rather than any diff findings.
|
|
61
|
+
- Persist the threat model output to the repository-scoped threat model path from `../../references/scan-artifacts.md`.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: invoices
|
|
3
|
+
version: 1
|
|
4
|
+
category: business
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Invoice Generation
|
|
8
|
+
|
|
9
|
+
Create professional invoices in PDF or markdown format from a template and line items.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to create an invoice for a client
|
|
14
|
+
- User wants to generate a recurring invoice
|
|
15
|
+
- User asks about billing, invoicing, payment request
|
|
16
|
+
- User mentions "invoice", "bill the client", "send invoice"
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
which pandoc wkhtmltopdf 2>/dev/null
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- `pandoc` — converts markdown to PDF (via LaTeX or wkhtmltopdf)
|
|
25
|
+
- `wkhtmltopdf` — HTML to PDF (alternative to LaTeX for simpler output)
|
|
26
|
+
|
|
27
|
+
If neither: create a clean markdown file the user can export manually.
|
|
28
|
+
|
|
29
|
+
## Procedure
|
|
30
|
+
|
|
31
|
+
### Step 1: Gather invoice details
|
|
32
|
+
|
|
33
|
+
Ask the user for (or infer from context):
|
|
34
|
+
- **Your info**: name/company, address, email, payment details (bank, PayPal, etc.)
|
|
35
|
+
- **Client info**: client name/company, address
|
|
36
|
+
- **Invoice number**: use a sequential numbering scheme (INV-2024-001)
|
|
37
|
+
- **Issue date and due date** (typically net 30 days)
|
|
38
|
+
- **Line items**: description, quantity, unit price
|
|
39
|
+
- **Tax rate** (if applicable)
|
|
40
|
+
- **Notes** (payment instructions, late fees, etc.)
|
|
41
|
+
|
|
42
|
+
### Step 2: Calculate totals
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
items = [
|
|
46
|
+
{"description": "Website development", "qty": 1, "unit": 5000},
|
|
47
|
+
{"description": "Hosting setup", "qty": 1, "unit": 200},
|
|
48
|
+
{"description": "Monthly maintenance", "qty": 3, "unit": 150},
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
subtotal = sum(item["qty"] * item["unit"] for item in items)
|
|
52
|
+
tax_rate = 0.20 # 20% VAT
|
|
53
|
+
tax = subtotal * tax_rate
|
|
54
|
+
total = subtotal + tax
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Step 3: Generate invoice markdown
|
|
58
|
+
|
|
59
|
+
Write to `invoices/INV-2024-001.md`:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
# INVOICE
|
|
63
|
+
|
|
64
|
+
**From:**
|
|
65
|
+
Marcus Bader
|
|
66
|
+
123 Main Street, Stockholm, Sweden
|
|
67
|
+
marcus@example.com
|
|
68
|
+
|
|
69
|
+
**To:**
|
|
70
|
+
Client Company Name
|
|
71
|
+
456 Client Street, London, UK
|
|
72
|
+
billing@client.com
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
| | |
|
|
77
|
+
|---|---|
|
|
78
|
+
| **Invoice #** | INV-2024-001 |
|
|
79
|
+
| **Issue Date** | 15 January 2024 |
|
|
80
|
+
| **Due Date** | 14 February 2024 |
|
|
81
|
+
| **Status** | Due |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Services
|
|
86
|
+
|
|
87
|
+
| Description | Qty | Unit Price | Total |
|
|
88
|
+
|---|---|---|---|
|
|
89
|
+
| Website development | 1 | €5,000.00 | €5,000.00 |
|
|
90
|
+
| Hosting setup | 1 | €200.00 | €200.00 |
|
|
91
|
+
| Monthly maintenance | 3 | €150.00 | €450.00 |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
| | |
|
|
96
|
+
|---|---|
|
|
97
|
+
| **Subtotal** | €5,650.00 |
|
|
98
|
+
| **VAT (20%)** | €1,130.00 |
|
|
99
|
+
| **Total Due** | **€6,780.00** |
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Payment Details
|
|
104
|
+
|
|
105
|
+
Bank: Example Bank
|
|
106
|
+
IBAN: SE00 0000 0000 0000 0000
|
|
107
|
+
BIC: EXAMPLEXX
|
|
108
|
+
|
|
109
|
+
Please reference invoice number **INV-2024-001** with your payment.
|
|
110
|
+
|
|
111
|
+
Late payments are subject to 1.5% monthly interest after due date.
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Step 4: Convert to PDF
|
|
115
|
+
|
|
116
|
+
With pandoc + wkhtmltopdf:
|
|
117
|
+
```
|
|
118
|
+
pandoc INV-2024-001.md -o INV-2024-001.pdf --pdf-engine=wkhtmltopdf
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
With pandoc + LaTeX (better typography):
|
|
122
|
+
```
|
|
123
|
+
pandoc INV-2024-001.md -o INV-2024-001.pdf
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
With a CSS stylesheet for better styling:
|
|
127
|
+
```
|
|
128
|
+
pandoc INV-2024-001.md -o INV-2024-001.pdf --pdf-engine=wkhtmltopdf --css=invoice.css
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Step 5: Track invoice
|
|
132
|
+
|
|
133
|
+
Update an invoice log file (`~/invoices/log.csv`):
|
|
134
|
+
```
|
|
135
|
+
date,invoice_no,client,amount,status,due_date
|
|
136
|
+
2024-01-15,INV-2024-001,Client Company,6780.00,sent,2024-02-14
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Output format
|
|
140
|
+
|
|
141
|
+
After creating the invoice, summarize:
|
|
142
|
+
```
|
|
143
|
+
INVOICE CREATED: INV-2024-001
|
|
144
|
+
|
|
145
|
+
Client: Client Company Name
|
|
146
|
+
Amount: €6,780.00 (incl. 20% VAT)
|
|
147
|
+
Due: 14 February 2024
|
|
148
|
+
|
|
149
|
+
Files:
|
|
150
|
+
Markdown: ~/invoices/INV-2024-001.md
|
|
151
|
+
PDF: ~/invoices/INV-2024-001.pdf
|
|
152
|
+
|
|
153
|
+
Next steps:
|
|
154
|
+
• Send PDF to billing@client.com
|
|
155
|
+
• Log entry added to ~/invoices/log.csv
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Pitfalls
|
|
159
|
+
|
|
160
|
+
- Always confirm the amounts with the user before generating PDF
|
|
161
|
+
- Use the same invoice numbering scheme consistently — don't restart the sequence
|
|
162
|
+
- Keep copies of all invoices (don't overwrite)
|
|
163
|
+
- For international clients, be clear about currency; for EU B2B, include VAT numbers
|
|
164
|
+
|
|
165
|
+
## Verification
|
|
166
|
+
|
|
167
|
+
After generating: open/read the PDF or markdown to verify totals are correct before sending.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: licenses
|
|
3
|
+
version: 1
|
|
4
|
+
category: business
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Software License Analysis
|
|
8
|
+
|
|
9
|
+
Analyze dependency licenses for compatibility, generate NOTICE files, and flag compliance risks.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to know what licenses their dependencies use
|
|
14
|
+
- User wants to check if licenses are compatible with their project's license
|
|
15
|
+
- User wants to generate a NOTICE or ATTRIBUTIONS file
|
|
16
|
+
- User is preparing for open-source release or commercial distribution
|
|
17
|
+
- User mentions "license", "GPL", "MIT", "open source compliance", "attribution"
|
|
18
|
+
|
|
19
|
+
## License Compatibility Quick Reference
|
|
20
|
+
|
|
21
|
+
| Dependency License | Can use in MIT project? | Can use in commercial closed-source? |
|
|
22
|
+
|-------------------|------------------------|-------------------------------------|
|
|
23
|
+
| MIT | ✅ Yes | ✅ Yes (attribution required) |
|
|
24
|
+
| ISC | ✅ Yes | ✅ Yes (attribution required) |
|
|
25
|
+
| Apache-2.0 | ✅ Yes | ✅ Yes (attribution + NOTICE required)|
|
|
26
|
+
| BSD-2/3-Clause | ✅ Yes | ✅ Yes (attribution required) |
|
|
27
|
+
| MPL-2.0 | ⚠️ Check | ⚠️ Modified MPL files must stay open |
|
|
28
|
+
| LGPL-2.1/3.0 | ⚠️ Check | ⚠️ OK if dynamically linked, complex otherwise |
|
|
29
|
+
| GPL-2.0/3.0 | ❌ Copyleft | ❌ Forces project to go GPL |
|
|
30
|
+
| AGPL-3.0 | ❌ Strong copyleft | ❌ Also covers network use |
|
|
31
|
+
| CC-BY-SA | ❌ For data/content | ❌ Copyleft, requires same license |
|
|
32
|
+
| Proprietary | ❌ Check terms | ❌ Need commercial license |
|
|
33
|
+
|
|
34
|
+
## Procedure
|
|
35
|
+
|
|
36
|
+
### Step 1: Extract all dependency licenses
|
|
37
|
+
|
|
38
|
+
**npm / Node.js:**
|
|
39
|
+
```
|
|
40
|
+
npx license-checker --json --out licenses.json
|
|
41
|
+
npx license-checker --summary
|
|
42
|
+
npx license-checker --csv --out licenses.csv
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Python:**
|
|
46
|
+
```
|
|
47
|
+
pip install pip-licenses 2>/dev/null
|
|
48
|
+
pip-licenses --format=json --output-file=licenses.json
|
|
49
|
+
pip-licenses --format=table
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Go:**
|
|
53
|
+
```
|
|
54
|
+
go-licenses report ./... 2>/dev/null
|
|
55
|
+
# or: golicense .
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Cargo (Rust):**
|
|
59
|
+
```
|
|
60
|
+
cargo license
|
|
61
|
+
cargo license --json
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Step 2: Check for problematic licenses
|
|
65
|
+
|
|
66
|
+
**npm — fail on copyleft:**
|
|
67
|
+
```
|
|
68
|
+
npx license-checker --failOn "GPL-2.0;GPL-3.0;AGPL-3.0;LGPL-2.1;LGPL-3.0"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Scan the output JSON for anything that isn't in the safe list:**
|
|
72
|
+
|
|
73
|
+
Safe licenses (permissive): MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0, CC0-1.0, Unlicense, 0BSD
|
|
74
|
+
|
|
75
|
+
Review carefully: MPL-2.0, LGPL-*, CC-BY-*, EUPL-1.2
|
|
76
|
+
|
|
77
|
+
Red flag: GPL-*, AGPL-*, CC-BY-SA-*, SSPL
|
|
78
|
+
|
|
79
|
+
### Step 3: Investigate "Unknown" licenses
|
|
80
|
+
|
|
81
|
+
For packages with unknown or unusual licenses:
|
|
82
|
+
1. Find the package's repository URL
|
|
83
|
+
2. Look for a LICENSE or COPYING file in the repo root
|
|
84
|
+
3. Identify the license and add it to your records
|
|
85
|
+
|
|
86
|
+
### Step 4: Generate NOTICE / ATTRIBUTIONS file
|
|
87
|
+
|
|
88
|
+
For projects using Apache-licensed dependencies (required) or for general attribution:
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
import json
|
|
92
|
+
|
|
93
|
+
with open('licenses.json') as f:
|
|
94
|
+
deps = json.load(f)
|
|
95
|
+
|
|
96
|
+
lines = ["THIRD-PARTY SOFTWARE NOTICES\n", "=" * 40 + "\n\n"]
|
|
97
|
+
for name, info in sorted(deps.items()):
|
|
98
|
+
lines.append(f"Package: {name}\n")
|
|
99
|
+
if info.get('licenseFile'):
|
|
100
|
+
lines.append(f"License: {info.get('licenses', 'Unknown')}\n")
|
|
101
|
+
lines.append(f"Repository: {info.get('repository', 'N/A')}\n")
|
|
102
|
+
lines.append("\n")
|
|
103
|
+
|
|
104
|
+
with open('NOTICE', 'w') as f:
|
|
105
|
+
f.writelines(lines)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Step 5: For LGPL dependencies
|
|
109
|
+
|
|
110
|
+
LGPL is acceptable IF:
|
|
111
|
+
- You dynamically link to the library (not statically embed it)
|
|
112
|
+
- You allow users to relink with a modified version of the library
|
|
113
|
+
- You include a copy of the LGPL license text
|
|
114
|
+
|
|
115
|
+
Verify your build system uses dynamic linking for LGPL packages.
|
|
116
|
+
|
|
117
|
+
## Output format
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
LICENSE ANALYSIS: my-project (MIT)
|
|
121
|
+
|
|
122
|
+
SUMMARY
|
|
123
|
+
Total packages: 142
|
|
124
|
+
License types: MIT (89), ISC (23), Apache-2.0 (18), BSD-3-Clause (8), Other (4)
|
|
125
|
+
|
|
126
|
+
✅ COMPATIBLE — No action needed
|
|
127
|
+
MIT, ISC, BSD-*, Apache-2.0 packages are all compatible with MIT license.
|
|
128
|
+
|
|
129
|
+
⚠️ REVIEW REQUIRED
|
|
130
|
+
• lodash-addons@2.4.2 — license: "Unlicense" — generally permissive, but verify.
|
|
131
|
+
• uuid-tool@1.0.0 — license listed as "WTFPL" — effectively public domain, but
|
|
132
|
+
double-check company policy.
|
|
133
|
+
|
|
134
|
+
❌ POTENTIAL ISSUES
|
|
135
|
+
• analytics-lib@3.1.0 — GPL-3.0 — INCOMPATIBLE with closed-source commercial use.
|
|
136
|
+
Alternatives: consider mixpanel-browser (MIT) or custom implementation.
|
|
137
|
+
|
|
138
|
+
REQUIRED ATTRIBUTIONS
|
|
139
|
+
Apache-2.0 packages require inclusion of NOTICE file in distributions:
|
|
140
|
+
• typescript-eslint@6.0.0 (Apache-2.0)
|
|
141
|
+
• @aws-sdk/client-s3@3.0.0 (Apache-2.0)
|
|
142
|
+
|
|
143
|
+
ACTION ITEMS
|
|
144
|
+
1. Replace analytics-lib with a MIT/Apache-2.0 alternative
|
|
145
|
+
2. Generate NOTICE file before next commercial release
|
|
146
|
+
3. Verify Unlicense/WTFPL packages are acceptable under company IP policy
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Pitfalls
|
|
150
|
+
|
|
151
|
+
- "MIT OR Apache-2.0" means you can choose either — pick MIT for simplicity
|
|
152
|
+
- Some packages declare one license in package.json but include a different LICENSE file — the file takes precedence
|
|
153
|
+
- LGPL compliance is complex: consult legal counsel for commercial products that embed LGPL libraries
|
|
154
|
+
- This analysis informs decisions but is not legal advice — for significant commercial products, have a lawyer review
|
|
155
|
+
|
|
156
|
+
## Verification
|
|
157
|
+
|
|
158
|
+
After generating NOTICE file: verify it includes entries for all Apache-2.0 packages (which require it).
|
|
159
|
+
Cross-check the flagged GPL packages actually appear in `npm ls` to confirm they're truly in your dependency tree (not just listed in package.json but tree-shaken).
|