cfsa-antigravity 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: desktop-app-distribution
|
|
3
|
+
description: Desktop application packaging, code signing, auto-update mechanisms, and distribution channels for macOS, Windows, and Linux. Use when building or shipping desktop applications that need reliable installation and update flows.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Desktop App Distribution
|
|
8
|
+
|
|
9
|
+
Package, sign, and distribute desktop applications with reliable auto-update across macOS, Windows, and Linux.
|
|
10
|
+
|
|
11
|
+
## Code Signing
|
|
12
|
+
|
|
13
|
+
Unsigned applications trigger security warnings and may be blocked entirely. Code signing is mandatory for production distribution.
|
|
14
|
+
|
|
15
|
+
### macOS (Apple Notarization)
|
|
16
|
+
|
|
17
|
+
| Step | What Happens | Tool |
|
|
18
|
+
|------|-------------|------|
|
|
19
|
+
| 1. Sign with Developer ID | Embeds your identity in the binary | `codesign` |
|
|
20
|
+
| 2. Submit for notarization | Apple scans for malware | `notarytool` |
|
|
21
|
+
| 3. Staple ticket | Embeds notarization result in the app | `stapler` |
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Sign the app bundle
|
|
25
|
+
codesign --deep --force --options runtime \
|
|
26
|
+
--sign "Developer ID Application: Your Name (TEAM_ID)" \
|
|
27
|
+
--entitlements entitlements.plist \
|
|
28
|
+
MyApp.app
|
|
29
|
+
|
|
30
|
+
# Submit for notarization
|
|
31
|
+
xcrun notarytool submit MyApp.dmg \
|
|
32
|
+
--apple-id "dev@example.com" \
|
|
33
|
+
--team-id "TEAM_ID" \
|
|
34
|
+
--password "@keychain:AC_PASSWORD" \
|
|
35
|
+
--wait
|
|
36
|
+
|
|
37
|
+
# Staple the notarization ticket
|
|
38
|
+
xcrun stapler staple MyApp.dmg
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Entitlements** required for notarization:
|
|
42
|
+
|
|
43
|
+
```xml
|
|
44
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
45
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "...">
|
|
46
|
+
<plist version="1.0">
|
|
47
|
+
<dict>
|
|
48
|
+
<key>com.apple.security.cs.allow-jit</key>
|
|
49
|
+
<true/>
|
|
50
|
+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
51
|
+
<true/>
|
|
52
|
+
<key>com.apple.security.cs.disable-library-validation</key>
|
|
53
|
+
<true/>
|
|
54
|
+
</dict>
|
|
55
|
+
</plist>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Rule**: Hardened runtime (`--options runtime`) is required for notarization. Test with hardened runtime early -- it can break JIT, unsigned dylibs, and memory-mapped files.
|
|
59
|
+
|
|
60
|
+
### Windows (Authenticode)
|
|
61
|
+
|
|
62
|
+
| Certificate Type | Trust Level | Cost |
|
|
63
|
+
|-----------------|-------------|------|
|
|
64
|
+
| Standard Code Signing | SmartScreen warning for new publishers | ~$70/year |
|
|
65
|
+
| EV Code Signing | Immediate SmartScreen trust | ~$300/year, requires hardware token |
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Sign with signtool (Windows SDK)
|
|
69
|
+
signtool sign /f certificate.pfx /p password \
|
|
70
|
+
/tr http://timestamp.digicert.com /td sha256 \
|
|
71
|
+
/fd sha256 MyApp.exe
|
|
72
|
+
|
|
73
|
+
# Sign with Azure Trusted Signing (no hardware token)
|
|
74
|
+
# Requires Azure subscription and Trusted Signing account
|
|
75
|
+
az trustedsigning sign \
|
|
76
|
+
--account-name my-signing-account \
|
|
77
|
+
--certificate-profile-name my-profile \
|
|
78
|
+
--file MyApp.exe
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Rule**: Always include a timestamp (`/tr`). Without it, the signature becomes invalid when the certificate expires.
|
|
82
|
+
**Rule**: EV certificates are stored on hardware tokens (USB). CI/CD requires cloud-based signing services (Azure Trusted Signing, AWS Signer, or DigiCert KeyLocker).
|
|
83
|
+
|
|
84
|
+
### Linux
|
|
85
|
+
|
|
86
|
+
Linux does not have a centralized signing authority. Options:
|
|
87
|
+
|
|
88
|
+
| Method | Use Case |
|
|
89
|
+
|--------|----------|
|
|
90
|
+
| GPG signing | Sign packages and release artifacts for manual verification |
|
|
91
|
+
| AppImage signatures | `--sign` flag with GPG key |
|
|
92
|
+
| Snap store | Automatic signing when uploading to Snap Store |
|
|
93
|
+
| Flatpak | Signed with the repository's GPG key |
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# GPG sign a release artifact
|
|
97
|
+
gpg --detach-sign --armor MyApp-1.0.0.AppImage
|
|
98
|
+
# Users verify with: gpg --verify MyApp-1.0.0.AppImage.asc
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Installer Creation
|
|
102
|
+
|
|
103
|
+
### macOS: DMG
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Create DMG with background image and Applications symlink
|
|
107
|
+
create-dmg \
|
|
108
|
+
--volname "MyApp" \
|
|
109
|
+
--volicon "icon.icns" \
|
|
110
|
+
--background "dmg-background.png" \
|
|
111
|
+
--window-pos 200 120 \
|
|
112
|
+
--window-size 600 400 \
|
|
113
|
+
--icon-size 100 \
|
|
114
|
+
--icon "MyApp.app" 150 190 \
|
|
115
|
+
--app-drop-link 450 190 \
|
|
116
|
+
--hide-extension "MyApp.app" \
|
|
117
|
+
"MyApp-1.0.0.dmg" \
|
|
118
|
+
"build/MyApp.app"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Windows: MSI / MSIX
|
|
122
|
+
|
|
123
|
+
| Format | Tooling | Features |
|
|
124
|
+
|--------|---------|----------|
|
|
125
|
+
| MSI | WiX Toolset | Traditional installer, IT-friendly, Group Policy deployment |
|
|
126
|
+
| MSIX | MSIX Packaging Tool | Modern, sandboxed, auto-update via App Installer |
|
|
127
|
+
| NSIS | NSIS compiler | Highly customizable, traditional .exe installer |
|
|
128
|
+
| Squirrel.Windows | electron-winstaller | No UAC prompt, per-user install, delta updates |
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
// electron-builder configuration for Windows
|
|
132
|
+
// electron-builder.yml
|
|
133
|
+
win:
|
|
134
|
+
target:
|
|
135
|
+
- target: nsis
|
|
136
|
+
arch: [x64, arm64]
|
|
137
|
+
sign: true
|
|
138
|
+
signingHashAlgorithms: [sha256]
|
|
139
|
+
certificateFile: ${env.WIN_CERT_FILE}
|
|
140
|
+
certificatePassword: ${env.WIN_CERT_PASSWORD}
|
|
141
|
+
|
|
142
|
+
nsis:
|
|
143
|
+
oneClick: false
|
|
144
|
+
allowToChangeInstallationDirectory: true
|
|
145
|
+
createDesktopShortcut: true
|
|
146
|
+
createStartMenuShortcut: true
|
|
147
|
+
installerIcon: build/icon.ico
|
|
148
|
+
uninstallerIcon: build/icon.ico
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Linux: AppImage, deb, rpm, snap, Flatpak
|
|
152
|
+
|
|
153
|
+
| Format | Distribution | Auto-update | Sandboxed |
|
|
154
|
+
|--------|-------------|-------------|-----------|
|
|
155
|
+
| AppImage | Direct download, no install | Via AppImageUpdate | No |
|
|
156
|
+
| .deb | Debian/Ubuntu repos, PPA | Via apt | No |
|
|
157
|
+
| .rpm | Fedora/RHEL repos, COPR | Via dnf/yum | No |
|
|
158
|
+
| Snap | Snap Store | Automatic | Yes |
|
|
159
|
+
| Flatpak | Flathub | Automatic | Yes |
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
# electron-builder.yml - Linux targets
|
|
163
|
+
linux:
|
|
164
|
+
target:
|
|
165
|
+
- target: AppImage
|
|
166
|
+
arch: [x64, arm64]
|
|
167
|
+
- target: deb
|
|
168
|
+
arch: [x64, arm64]
|
|
169
|
+
- target: rpm
|
|
170
|
+
arch: [x64]
|
|
171
|
+
- target: snap
|
|
172
|
+
arch: [x64]
|
|
173
|
+
category: Utility
|
|
174
|
+
icon: build/icons
|
|
175
|
+
desktop:
|
|
176
|
+
StartupWMClass: my-app
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Auto-Update Mechanisms
|
|
180
|
+
|
|
181
|
+
### Electron: electron-updater
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
// Main process - auto-update setup
|
|
185
|
+
import { autoUpdater } from 'electron-updater';
|
|
186
|
+
import log from 'electron-log';
|
|
187
|
+
|
|
188
|
+
autoUpdater.logger = log;
|
|
189
|
+
autoUpdater.autoDownload = false; // Let user decide
|
|
190
|
+
|
|
191
|
+
autoUpdater.on('update-available', (info) => {
|
|
192
|
+
// Notify renderer to show update UI
|
|
193
|
+
mainWindow.webContents.send('update-available', {
|
|
194
|
+
version: info.version,
|
|
195
|
+
releaseNotes: info.releaseNotes,
|
|
196
|
+
releaseDate: info.releaseDate,
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
autoUpdater.on('download-progress', (progress) => {
|
|
201
|
+
mainWindow.webContents.send('update-progress', {
|
|
202
|
+
percent: progress.percent,
|
|
203
|
+
bytesPerSecond: progress.bytesPerSecond,
|
|
204
|
+
transferred: progress.transferred,
|
|
205
|
+
total: progress.total,
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
autoUpdater.on('update-downloaded', () => {
|
|
210
|
+
mainWindow.webContents.send('update-downloaded');
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
// Check for updates periodically
|
|
214
|
+
setInterval(() => {
|
|
215
|
+
autoUpdater.checkForUpdates();
|
|
216
|
+
}, 4 * 60 * 60 * 1000); // Every 4 hours
|
|
217
|
+
|
|
218
|
+
// IPC handler for user-initiated install
|
|
219
|
+
ipcMain.handle('install-update', () => {
|
|
220
|
+
autoUpdater.quitAndInstall(false, true);
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Tauri: Built-in Updater
|
|
225
|
+
|
|
226
|
+
```rust
|
|
227
|
+
// tauri.conf.json
|
|
228
|
+
{
|
|
229
|
+
"tauri": {
|
|
230
|
+
"updater": {
|
|
231
|
+
"active": true,
|
|
232
|
+
"dialog": true,
|
|
233
|
+
"endpoints": [
|
|
234
|
+
"https://releases.example.com/{{target}}/{{arch}}/{{current_version}}"
|
|
235
|
+
],
|
|
236
|
+
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ..."
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
// Server response format for Tauri updater
|
|
244
|
+
{
|
|
245
|
+
"version": "1.2.0",
|
|
246
|
+
"notes": "Bug fixes and performance improvements",
|
|
247
|
+
"pub_date": "2026-02-16T00:00:00Z",
|
|
248
|
+
"platforms": {
|
|
249
|
+
"darwin-x86_64": {
|
|
250
|
+
"signature": "base64-signature",
|
|
251
|
+
"url": "https://releases.example.com/MyApp-1.2.0-x86_64.app.tar.gz"
|
|
252
|
+
},
|
|
253
|
+
"darwin-aarch64": {
|
|
254
|
+
"signature": "base64-signature",
|
|
255
|
+
"url": "https://releases.example.com/MyApp-1.2.0-aarch64.app.tar.gz"
|
|
256
|
+
},
|
|
257
|
+
"linux-x86_64": {
|
|
258
|
+
"signature": "base64-signature",
|
|
259
|
+
"url": "https://releases.example.com/MyApp-1.2.0-x86_64.AppImage.tar.gz"
|
|
260
|
+
},
|
|
261
|
+
"windows-x86_64": {
|
|
262
|
+
"signature": "base64-signature",
|
|
263
|
+
"url": "https://releases.example.com/MyApp-1.2.0-x64-setup.nsis.zip"
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### macOS: Sparkle
|
|
270
|
+
|
|
271
|
+
```swift
|
|
272
|
+
// Sparkle integration for non-Electron macOS apps
|
|
273
|
+
import Sparkle
|
|
274
|
+
|
|
275
|
+
let updaterController = SPUStandardUpdaterController(
|
|
276
|
+
startingUpdater: true,
|
|
277
|
+
updaterDelegate: nil,
|
|
278
|
+
userDriverDelegate: nil
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
// Appcast.xml hosted at a stable URL
|
|
282
|
+
// Sparkle checks this XML for new versions
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Delta Updates
|
|
286
|
+
|
|
287
|
+
Full downloads for every update waste bandwidth. Delta updates send only the changed bytes.
|
|
288
|
+
|
|
289
|
+
| Tool | Delta Support | Platform |
|
|
290
|
+
|------|--------------|----------|
|
|
291
|
+
| electron-updater | Yes (blockmap-based) | All |
|
|
292
|
+
| Tauri updater | No (full replacement) | All |
|
|
293
|
+
| Sparkle | Yes (binary diff) | macOS |
|
|
294
|
+
| MSIX | Yes (built-in) | Windows |
|
|
295
|
+
| Snap | Yes (built-in) | Linux |
|
|
296
|
+
|
|
297
|
+
```yaml
|
|
298
|
+
# electron-builder.yml - Enable delta updates
|
|
299
|
+
publish:
|
|
300
|
+
provider: github
|
|
301
|
+
releaseType: release
|
|
302
|
+
|
|
303
|
+
# electron-builder automatically generates .blockmap files
|
|
304
|
+
# for NSIS and DMG targets, enabling differential downloads
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Rollback Strategies
|
|
308
|
+
|
|
309
|
+
| Strategy | Implementation |
|
|
310
|
+
|----------|---------------|
|
|
311
|
+
| Keep previous version | Installer preserves previous version in backup directory |
|
|
312
|
+
| Version pinning | Users can pin to a specific version via settings |
|
|
313
|
+
| Server-side rollback | Update server returns previous version as "latest" |
|
|
314
|
+
| Staged rollout | Roll out to 5% first, expand if crash-free rate is stable |
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
// Simple rollback: keep previous version
|
|
318
|
+
import { app } from 'electron';
|
|
319
|
+
import fs from 'fs';
|
|
320
|
+
import path from 'path';
|
|
321
|
+
|
|
322
|
+
const BACKUP_DIR = path.join(app.getPath('userData'), 'previous-version');
|
|
323
|
+
|
|
324
|
+
autoUpdater.on('before-quit-for-update', () => {
|
|
325
|
+
// Save current version info for potential rollback
|
|
326
|
+
const currentInfo = {
|
|
327
|
+
version: app.getVersion(),
|
|
328
|
+
path: app.getAppPath(),
|
|
329
|
+
timestamp: Date.now(),
|
|
330
|
+
};
|
|
331
|
+
fs.writeFileSync(
|
|
332
|
+
path.join(BACKUP_DIR, 'rollback-info.json'),
|
|
333
|
+
JSON.stringify(currentInfo)
|
|
334
|
+
);
|
|
335
|
+
});
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## CI/CD for Desktop Builds
|
|
339
|
+
|
|
340
|
+
```yaml
|
|
341
|
+
# GitHub Actions - Cross-platform desktop build
|
|
342
|
+
name: Build Desktop App
|
|
343
|
+
|
|
344
|
+
on:
|
|
345
|
+
push:
|
|
346
|
+
tags: ['v*']
|
|
347
|
+
|
|
348
|
+
jobs:
|
|
349
|
+
build:
|
|
350
|
+
strategy:
|
|
351
|
+
matrix:
|
|
352
|
+
include:
|
|
353
|
+
- os: macos-latest
|
|
354
|
+
platform: mac
|
|
355
|
+
- os: windows-latest
|
|
356
|
+
platform: win
|
|
357
|
+
- os: ubuntu-latest
|
|
358
|
+
platform: linux
|
|
359
|
+
|
|
360
|
+
runs-on: ${{ matrix.os }}
|
|
361
|
+
|
|
362
|
+
steps:
|
|
363
|
+
- uses: actions/checkout@v4
|
|
364
|
+
|
|
365
|
+
- uses: actions/setup-node@v4
|
|
366
|
+
with:
|
|
367
|
+
node-version: 20
|
|
368
|
+
|
|
369
|
+
- run: npm ci
|
|
370
|
+
|
|
371
|
+
# macOS: import signing certificate
|
|
372
|
+
- name: Import macOS certs
|
|
373
|
+
if: matrix.platform == 'mac'
|
|
374
|
+
uses: apple-actions/import-codesign-certs@v2
|
|
375
|
+
with:
|
|
376
|
+
p12-file-base64: ${{ secrets.MAC_CERTS_P12 }}
|
|
377
|
+
p12-password: ${{ secrets.MAC_CERTS_PASSWORD }}
|
|
378
|
+
|
|
379
|
+
# Build and publish
|
|
380
|
+
- name: Build
|
|
381
|
+
run: npx electron-builder --${{ matrix.platform }} --publish always
|
|
382
|
+
env:
|
|
383
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
384
|
+
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
385
|
+
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
|
386
|
+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
387
|
+
WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }}
|
|
388
|
+
WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
## Distribution Channels
|
|
392
|
+
|
|
393
|
+
| Channel | Pros | Cons |
|
|
394
|
+
|---------|------|------|
|
|
395
|
+
| **Direct download** (website) | Full control, no revenue share | No auto-discovery, manual updates unless built-in |
|
|
396
|
+
| **GitHub Releases** | Free hosting, electron-updater integration | Requires GitHub account to star/watch |
|
|
397
|
+
| **Mac App Store** | Discovery, trusted, sandboxed | 30% cut, sandbox restrictions, review delays |
|
|
398
|
+
| **Microsoft Store** | Discovery, MSIX auto-update | 15% cut (reduced from 30%), limited API access |
|
|
399
|
+
| **Snap Store** | Ubuntu default, auto-update | Snap confinement can break some apps |
|
|
400
|
+
| **Flathub** | Cross-distro, sandboxed, auto-update | Flatpak runtime overhead |
|
|
401
|
+
| **Homebrew Cask** | Developer-friendly install | macOS only, requires formula maintenance |
|
|
402
|
+
| **winget** | Windows CLI install | Requires manifest in winget-pkgs repo |
|
|
403
|
+
|
|
404
|
+
## Output Checklist
|
|
405
|
+
|
|
406
|
+
- [ ] Code signed for all target platforms
|
|
407
|
+
- [ ] macOS app notarized and stapled
|
|
408
|
+
- [ ] Windows installer signed with timestamp
|
|
409
|
+
- [ ] Installers created for each platform (DMG, NSIS/MSIX, AppImage/deb)
|
|
410
|
+
- [ ] Auto-update mechanism configured and tested
|
|
411
|
+
- [ ] Delta updates enabled where supported
|
|
412
|
+
- [ ] Rollback strategy defined
|
|
413
|
+
- [ ] CI/CD pipeline builds all platforms on tag push
|
|
414
|
+
- [ ] Distribution channel selected and configured
|
|
415
|
+
- [ ] Update server or GitHub Releases configured for serving updates
|
|
416
|
+
- [ ] Crash monitoring active for post-update verification
|