oh-my-agent-commandcode 0.0.0-stage → 20.38.4
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 +35 -2
- package/filter-test-output.sh +52 -0
- package/mods/oma.ts +347 -0
- package/package.json +30 -4
- package/skills/_shared/conditional/experiment-ledger.md +28 -0
- package/skills/_shared/conditional/exploration-loop.md +22 -0
- package/skills/_shared/conditional/quality-score.md +33 -0
- package/skills/_shared/core/anti-ai-prose.md +191 -0
- package/skills/_shared/core/api-contracts/README.md +28 -0
- package/skills/_shared/core/api-contracts/template.md +90 -0
- package/skills/_shared/core/clarification-protocol.md +23 -0
- package/skills/_shared/core/code-intelligence.md +46 -0
- package/skills/_shared/core/collaboration-policy.md +28 -0
- package/skills/_shared/core/common-checklist.md +28 -0
- package/skills/_shared/core/context-budget.md +22 -0
- package/skills/_shared/core/context-loading.md +34 -0
- package/skills/_shared/core/difficulty-guide.md +26 -0
- package/skills/_shared/core/execution-policy.md +31 -0
- package/skills/_shared/core/lessons-learned.md +33 -0
- package/skills/_shared/core/prompt-structure.md +18 -0
- package/skills/_shared/core/quality-principles.md +11 -0
- package/skills/_shared/core/session-metrics.md +35 -0
- package/skills/_shared/core/skill-routing.md +39 -0
- package/skills/_shared/core/test-approach.md +54 -0
- package/skills/_shared/core/vendor-detection.md +52 -0
- package/skills/_shared/runtime/memory-protocol.md +118 -0
- package/skills/_shared/runtime/result-contract.md +64 -0
- package/skills/_shared/ui-interaction-quality.md +133 -0
- package/skills/oma-academic-writing/SKILL.md +181 -0
- package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
- package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
- package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
- package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
- package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
- package/skills/oma-architecture/SKILL.md +203 -0
- package/skills/oma-architecture/resources/api-evolution.md +41 -0
- package/skills/oma-architecture/resources/checklist.md +42 -0
- package/skills/oma-architecture/resources/execution-protocol.md +115 -0
- package/skills/oma-architecture/resources/methodology-selection.md +92 -0
- package/skills/oma-architecture/resources/migration-patterns.md +28 -0
- package/skills/oma-architecture/resources/output-templates.md +111 -0
- package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
- package/skills/oma-backend/SKILL.md +202 -0
- package/skills/oma-backend/resources/checklist.md +45 -0
- package/skills/oma-backend/resources/error-playbook.md +97 -0
- package/skills/oma-backend/resources/execution-protocol.md +39 -0
- package/skills/oma-backend/resources/orm-reference.md +61 -0
- package/skills/oma-backend/variants/node/api-template.ts +315 -0
- package/skills/oma-backend/variants/node/snippets.md +475 -0
- package/skills/oma-backend/variants/node/stack.yaml +21 -0
- package/skills/oma-backend/variants/node/tech-stack.md +33 -0
- package/skills/oma-backend/variants/python/api-template.py +378 -0
- package/skills/oma-backend/variants/python/snippets.md +199 -0
- package/skills/oma-backend/variants/python/stack.yaml +18 -0
- package/skills/oma-backend/variants/python/tech-stack.md +45 -0
- package/skills/oma-backend/variants/rust/api-template.rs +635 -0
- package/skills/oma-backend/variants/rust/snippets.md +471 -0
- package/skills/oma-backend/variants/rust/stack.yaml +20 -0
- package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
- package/skills/oma-backend/variants/stack.schema.json +73 -0
- package/skills/oma-brainstorm/SKILL.md +166 -0
- package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
- package/skills/oma-coordination/SKILL.md +171 -0
- package/skills/oma-db/SKILL.md +201 -0
- package/skills/oma-db/resources/anti-patterns.md +177 -0
- package/skills/oma-db/resources/checklist.md +67 -0
- package/skills/oma-db/resources/document-templates.md +107 -0
- package/skills/oma-db/resources/error-playbook.md +50 -0
- package/skills/oma-db/resources/examples.md +170 -0
- package/skills/oma-db/resources/execution-protocol.md +127 -0
- package/skills/oma-db/resources/iso-controls.md +98 -0
- package/skills/oma-db/resources/migration-playbook.md +93 -0
- package/skills/oma-db/resources/query-tuning.md +57 -0
- package/skills/oma-db/resources/vector-db.md +159 -0
- package/skills/oma-debug/SKILL.md +146 -0
- package/skills/oma-debug/resources/bug-report-template.md +327 -0
- package/skills/oma-debug/resources/checklist.md +31 -0
- package/skills/oma-debug/resources/common-patterns.md +734 -0
- package/skills/oma-debug/resources/debugging-checklist.md +364 -0
- package/skills/oma-debug/resources/error-playbook.md +94 -0
- package/skills/oma-debug/resources/execution-protocol.md +40 -0
- package/skills/oma-design/SKILL.md +135 -0
- package/skills/oma-design/resources/asset-strategy.md +34 -0
- package/skills/oma-design/resources/checklist.md +63 -0
- package/skills/oma-design/resources/data-grid.md +48 -0
- package/skills/oma-design/resources/design-md-spec.md +107 -0
- package/skills/oma-design/resources/design-tokens.md +53 -0
- package/skills/oma-design/resources/error-playbook.md +18 -0
- package/skills/oma-design/resources/execution-protocol.md +95 -0
- package/skills/oma-design/resources/external-design-skills.md +130 -0
- package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
- package/skills/oma-design/resources/product-interface-review.md +59 -0
- package/skills/oma-design/resources/redesign-protocol.md +52 -0
- package/skills/oma-design/resources/stitch-integration.md +244 -0
- package/skills/oma-dev-workflow/SKILL.md +375 -0
- package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
- package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
- package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
- package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
- package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
- package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
- package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
- package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
- package/skills/oma-docs/SKILL.md +77 -0
- package/skills/oma-docs/resources/commands.md +76 -0
- package/skills/oma-explanation/SKILL.md +212 -0
- package/skills/oma-explanation/resources/document-structure.md +115 -0
- package/skills/oma-explanation/resources/draft-format.md +199 -0
- package/skills/oma-explanation/resources/html-contract.md +102 -0
- package/skills/oma-frontend/SKILL.md +227 -0
- package/skills/oma-frontend/resources/angular-rules.md +110 -0
- package/skills/oma-frontend/resources/checklist.md +76 -0
- package/skills/oma-frontend/resources/error-playbook.md +125 -0
- package/skills/oma-frontend/resources/execution-protocol.md +46 -0
- package/skills/oma-frontend/resources/snippets.md +354 -0
- package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
- package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
- package/skills/oma-frontend/resources/tech-stack.md +156 -0
- package/skills/oma-hwp/SKILL.md +166 -0
- package/skills/oma-hwp/config/hwp-config.yaml +35 -0
- package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
- package/skills/oma-hwp/resources/execution-protocol.md +145 -0
- package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
- package/skills/oma-hwp/resources/package.json +13 -0
- package/skills/oma-hwp/resources/troubleshooting.md +70 -0
- package/skills/oma-hwp/resources/tsconfig.json +10 -0
- package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
- package/skills/oma-image/SKILL.md +142 -0
- package/skills/oma-image/config/image-config.yaml +70 -0
- package/skills/oma-image/resources/checklist.md +18 -0
- package/skills/oma-image/resources/execution-protocol.md +117 -0
- package/skills/oma-image/resources/invocation.md +105 -0
- package/skills/oma-image/resources/prompt-tips.md +71 -0
- package/skills/oma-image/resources/vendor-matrix.md +90 -0
- package/skills/oma-market/SKILL.md +142 -0
- package/skills/oma-market/resources/checklist.md +12 -0
- package/skills/oma-market/resources/error-playbook.md +12 -0
- package/skills/oma-market/resources/execution-protocol.md +60 -0
- package/skills/oma-market/resources/frameworks/pestel.md +101 -0
- package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
- package/skills/oma-market/resources/frameworks/swot.md +61 -0
- package/skills/oma-market/resources/intent-rules.md +35 -0
- package/skills/oma-market/resources/output-laws.md +53 -0
- package/skills/oma-mobile/SKILL.md +168 -0
- package/skills/oma-mobile/resources/checklist.md +77 -0
- package/skills/oma-mobile/resources/error-playbook.md +198 -0
- package/skills/oma-mobile/resources/execution-protocol.md +47 -0
- package/skills/oma-mobile/resources/screen-template.dart +331 -0
- package/skills/oma-mobile/resources/screen-template.swift +239 -0
- package/skills/oma-mobile/resources/screen-template.tsx +179 -0
- package/skills/oma-mobile/resources/tech-stack.md +69 -0
- package/skills/oma-mobile/variants/README.md +45 -0
- package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
- package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
- package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
- package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
- package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
- package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
- package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
- package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
- package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
- package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
- package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
- package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
- package/skills/oma-mobile/variants/stack.schema.json +68 -0
- package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
- package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
- package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
- package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
- package/skills/oma-observability/SKILL.md +225 -0
- package/skills/oma-observability/resources/anti-patterns.md +555 -0
- package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
- package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
- package/skills/oma-observability/resources/boundaries/release.md +372 -0
- package/skills/oma-observability/resources/boundaries/slo.md +225 -0
- package/skills/oma-observability/resources/checklist.md +123 -0
- package/skills/oma-observability/resources/examples.md +448 -0
- package/skills/oma-observability/resources/execution-protocol.md +166 -0
- package/skills/oma-observability/resources/incident-forensics.md +348 -0
- package/skills/oma-observability/resources/intent-rules.md +307 -0
- package/skills/oma-observability/resources/layers/L3-network.md +281 -0
- package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
- package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
- package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
- package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
- package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
- package/skills/oma-observability/resources/layers/mesh.md +368 -0
- package/skills/oma-observability/resources/matrix.md +177 -0
- package/skills/oma-observability/resources/meta-observability.md +605 -0
- package/skills/oma-observability/resources/observability-as-code.md +666 -0
- package/skills/oma-observability/resources/signals/audit.md +310 -0
- package/skills/oma-observability/resources/signals/cost.md +303 -0
- package/skills/oma-observability/resources/signals/logs.md +263 -0
- package/skills/oma-observability/resources/signals/metrics.md +478 -0
- package/skills/oma-observability/resources/signals/privacy.md +351 -0
- package/skills/oma-observability/resources/signals/profiles.md +245 -0
- package/skills/oma-observability/resources/signals/traces.md +360 -0
- package/skills/oma-observability/resources/standards.md +214 -0
- package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
- package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
- package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
- package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
- package/skills/oma-observability/resources/vendor-categories.md +352 -0
- package/skills/oma-orchestration/SKILL.md +302 -0
- package/skills/oma-orchestration/config/cli-config.yaml +92 -0
- package/skills/oma-orchestration/resources/memory-schema.md +232 -0
- package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
- package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
- package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
- package/skills/oma-orchestration/scripts/verify.sh +20 -0
- package/skills/oma-orchestration/templates/backend-task.md +19 -0
- package/skills/oma-orchestration/templates/debug-task.md +16 -0
- package/skills/oma-orchestration/templates/frontend-task.md +18 -0
- package/skills/oma-orchestration/templates/mobile-task.md +18 -0
- package/skills/oma-orchestration/templates/qa-task.md +16 -0
- package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
- package/skills/oma-pdf/SKILL.md +162 -0
- package/skills/oma-pdf/config/pdf-config.yaml +27 -0
- package/skills/oma-pdf/resources/execution-protocol.md +127 -0
- package/skills/oma-pm/SKILL.md +157 -0
- package/skills/oma-pm/resources/error-playbook.md +75 -0
- package/skills/oma-pm/resources/examples.md +439 -0
- package/skills/oma-pm/resources/execution-protocol.md +62 -0
- package/skills/oma-pm/resources/iso-planning.md +110 -0
- package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
- package/skills/oma-pm/resources/task-template.json +86 -0
- package/skills/oma-qa/SKILL.md +141 -0
- package/skills/oma-qa/resources/checklist.md +339 -0
- package/skills/oma-qa/resources/error-playbook.md +98 -0
- package/skills/oma-qa/resources/execution-protocol.md +169 -0
- package/skills/oma-qa/resources/iso-quality.md +82 -0
- package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
- package/skills/oma-recap/SKILL.md +245 -0
- package/skills/oma-recap/resources/output-formats.md +83 -0
- package/skills/oma-refactor/SKILL.md +184 -0
- package/skills/oma-refactor/resources/definition.md +108 -0
- package/skills/oma-refactor/resources/governance.md +33 -0
- package/skills/oma-refactor/resources/hotspots.py +44 -0
- package/skills/oma-refactor/resources/measurement.md +93 -0
- package/skills/oma-scholar/SKILL.md +276 -0
- package/skills/oma-scholar/config/scholar-config.yaml +79 -0
- package/skills/oma-scholar/resources/api-endpoints.md +174 -0
- package/skills/oma-scholar/resources/checklist.md +92 -0
- package/skills/oma-scholar/resources/execution-protocol.md +224 -0
- package/skills/oma-scholar/resources/fallback-providers.md +143 -0
- package/skills/oma-scholar/resources/setup-openalex.md +85 -0
- package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
- package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
- package/skills/oma-scm/SKILL.md +103 -0
- package/skills/oma-scm/resources/cm-operations.md +56 -0
- package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
- package/skills/oma-scm/resources/conventional-commits.md +108 -0
- package/skills/oma-scm/resources/merge-risk.md +76 -0
- package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
- package/skills/oma-search/SKILL.md +125 -0
- package/skills/oma-search/resources/checklist.md +36 -0
- package/skills/oma-search/resources/error-playbook.md +66 -0
- package/skills/oma-search/resources/examples.md +80 -0
- package/skills/oma-search/resources/execution-protocol.md +86 -0
- package/skills/oma-search/resources/intent-rules.md +47 -0
- package/skills/oma-search/resources/trust-registry.md +53 -0
- package/skills/oma-security/SKILL.md +172 -0
- package/skills/oma-security/resources/artex.md +108 -0
- package/skills/oma-security/resources/ci.md +134 -0
- package/skills/oma-security/resources/cisco-source.md +108 -0
- package/skills/oma-security/resources/deepsec-config.md +45 -0
- package/skills/oma-security/resources/deepsec-matchers.md +35 -0
- package/skills/oma-security/resources/deepsec-scanning.md +45 -0
- package/skills/oma-security/resources/deepsec-setup.md +41 -0
- package/skills/oma-security/resources/findings-contract.md +408 -0
- package/skills/oma-security/resources/mcp-scanning.md +122 -0
- package/skills/oma-security/resources/skill-scanning.md +106 -0
- package/skills/oma-security/resources/validation.md +71 -0
- package/skills/oma-skill-creation/SKILL.md +84 -0
- package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
- package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
- package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
- package/skills/oma-slide/SKILL.md +277 -0
- package/skills/oma-slide/resources/animation-patterns.md +245 -0
- package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
- package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
- package/skills/oma-slide/resources/canva-integration.md +203 -0
- package/skills/oma-slide/resources/checklist.md +46 -0
- package/skills/oma-slide/resources/design-doctrine.md +260 -0
- package/skills/oma-slide/resources/fixed-stage.md +232 -0
- package/skills/oma-slide/resources/generation-protocol.md +393 -0
- package/skills/oma-slide/resources/native-pptx.md +84 -0
- package/skills/oma-slide/resources/selection-index.json +461 -0
- package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
- package/skills/oma-slide/resources/style-presets.md +520 -0
- package/skills/oma-tf-infra/SKILL.md +201 -0
- package/skills/oma-tf-infra/resources/checklist.md +53 -0
- package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
- package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
- package/skills/oma-tf-infra/resources/examples.md +38 -0
- package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
- package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
- package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
- package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
- package/skills/oma-translation/SKILL.md +229 -0
- package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
- package/skills/oma-translation/resources/lang/_template.md +73 -0
- package/skills/oma-translation/resources/lang/en.md +123 -0
- package/skills/oma-translation/resources/lang/ja.md +274 -0
- package/skills/oma-translation/resources/lang/ko.md +228 -0
- package/skills/oma-translation/resources/lang/zh.md +285 -0
- package/skills/oma-translation/resources/style-skills.md +104 -0
- package/skills/oma-translation/resources/translation-rubric.md +126 -0
- package/skills/oma-video/SKILL.md +229 -0
- package/skills/oma-video/config/video-config.yaml +60 -0
- package/skills/oma-video/resources/checklist.md +26 -0
- package/skills/oma-video/resources/execution-protocol.md +122 -0
- package/skills/oma-video/resources/existing-media.md +185 -0
- package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
- package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
- package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
- package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
- package/skills/oma-video/resources/motion-principles.md +81 -0
- package/skills/oma-video/resources/mpt/driver.py +301 -0
- package/skills/oma-video/resources/prompt-tips.md +75 -0
- package/skills/oma-video/resources/script-schema.md +81 -0
- package/skills/oma-video/resources/sound-design.md +127 -0
- package/skills/oma-video/resources/strudel/package.json +11 -0
- package/skills/oma-video/resources/strudel/page.html +87 -0
- package/skills/oma-video/resources/strudel/render.mjs +295 -0
- package/skills/oma-video/resources/vendor-matrix.md +124 -0
- package/skills/oma-voice/SKILL.md +249 -0
- package/skills/oma-voice/config/voice-config.yaml +30 -0
- package/skills/oma-voice/resources/audio-processing.md +119 -0
- package/skills/oma-voice/resources/checklist.md +47 -0
- package/skills/oma-voice/resources/execution-protocol.md +215 -0
- package/skills/oma-voice/resources/prompt-tips.md +43 -0
- package/skills/oma-voice/resources/voice-matrix.md +51 -0
- package/skills/oma-voice/resources/voicestudio.md +87 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* viewport-base.css — oma-slide fixed-stage shared CSS
|
|
3
|
+
*
|
|
4
|
+
* Usage: paste or <link> into a single-file deck, viewer.html, or any per-slide fragment.
|
|
5
|
+
* No build step required. Self-contained.
|
|
6
|
+
*
|
|
7
|
+
* Stage model: 1920×1080 px authored size.
|
|
8
|
+
* The entire .deck-stage is scaled uniformly with transform: scale() so it
|
|
9
|
+
* always fits the viewport while preserving pixel-exact geometry.
|
|
10
|
+
* Letterbox (horizontal bars) or pillarbox (vertical bars) fill the rest.
|
|
11
|
+
*
|
|
12
|
+
* NEVER reflow slides by changing the stage dimensions per viewport.
|
|
13
|
+
* NEVER use display:none / display:block to hide/show slides —
|
|
14
|
+
* later layout classes can override those and show all slides at once.
|
|
15
|
+
* Use .active / .visible (visibility + opacity + pointer-events) instead.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/* ─── Reset / base ───────────────────────────────────────────────────── */
|
|
19
|
+
*,
|
|
20
|
+
*::before,
|
|
21
|
+
*::after {
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
margin: 0;
|
|
24
|
+
padding: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* ─── Viewport container ─────────────────────────────────────────────── */
|
|
28
|
+
/*
|
|
29
|
+
* .deck-viewport fills the browser window and provides the black letterbox /
|
|
30
|
+
* pillarbox background. The stage is absolutely centred inside it.
|
|
31
|
+
*/
|
|
32
|
+
.deck-viewport {
|
|
33
|
+
position: fixed;
|
|
34
|
+
inset: 0;
|
|
35
|
+
width: 100vw;
|
|
36
|
+
height: 100vh;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
background: #000;
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
justify-content: center;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* ─── Fixed 1920×1080 stage ──────────────────────────────────────────── */
|
|
45
|
+
/*
|
|
46
|
+
* .deck-stage is always authored at exactly 1920×1080 px.
|
|
47
|
+
* deck-stage.js calculates scale = Math.min(vw/1920, vh/1080) and applies
|
|
48
|
+
* transform: scale(scale) here. transform-origin is top-left so the maths
|
|
49
|
+
* in the JS stays simple (translate the stage to centre manually).
|
|
50
|
+
*
|
|
51
|
+
* DO NOT change width/height — that would break the validator's geometry contract.
|
|
52
|
+
*/
|
|
53
|
+
.deck-stage {
|
|
54
|
+
position: relative;
|
|
55
|
+
width: 1920px;
|
|
56
|
+
height: 1080px;
|
|
57
|
+
transform-origin: top left;
|
|
58
|
+
/* transform: scale(…) injected by deck-stage.js at runtime */
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
background: #fff;
|
|
61
|
+
/* GPU compositing layer — avoids subpixel paint during scale animation */
|
|
62
|
+
will-change: transform;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* ─── Individual slides ──────────────────────────────────────────────── */
|
|
66
|
+
/*
|
|
67
|
+
* Each .slide is absolutely positioned to fill the entire stage.
|
|
68
|
+
* Visibility is controlled exclusively via .active and .visible classes —
|
|
69
|
+
* never via display:none / display:block.
|
|
70
|
+
*
|
|
71
|
+
* Base state: invisible and non-interactive.
|
|
72
|
+
*/
|
|
73
|
+
.slide {
|
|
74
|
+
position: absolute;
|
|
75
|
+
inset: 0;
|
|
76
|
+
width: 1920px;
|
|
77
|
+
height: 1080px;
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
|
|
80
|
+
/* Hidden by default — do NOT change to display:none */
|
|
81
|
+
visibility: hidden;
|
|
82
|
+
opacity: 0;
|
|
83
|
+
pointer-events: none;
|
|
84
|
+
|
|
85
|
+
/* Default transition for enter/exit (overridden per-theme) */
|
|
86
|
+
transition:
|
|
87
|
+
opacity 0.35s ease,
|
|
88
|
+
visibility 0s linear 0.35s;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
* .active — the slide scheduled to be fully visible.
|
|
93
|
+
* Applied by deck-stage.js when navigating TO this slide.
|
|
94
|
+
* visibility fires immediately; opacity transitions in.
|
|
95
|
+
*/
|
|
96
|
+
.slide.active {
|
|
97
|
+
visibility: visible;
|
|
98
|
+
opacity: 1;
|
|
99
|
+
pointer-events: auto;
|
|
100
|
+
transition:
|
|
101
|
+
opacity 0.35s ease,
|
|
102
|
+
visibility 0s linear 0s;
|
|
103
|
+
z-index: 1;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* .visible — a slide that was active and is fading out.
|
|
108
|
+
* Applied briefly during a cross-fade so the outgoing slide stays rendered
|
|
109
|
+
* while the incoming one fades in.
|
|
110
|
+
*/
|
|
111
|
+
.slide.visible {
|
|
112
|
+
visibility: visible;
|
|
113
|
+
opacity: 0;
|
|
114
|
+
pointer-events: none;
|
|
115
|
+
transition:
|
|
116
|
+
opacity 0.35s ease,
|
|
117
|
+
visibility 0s linear 0.35s;
|
|
118
|
+
z-index: 0;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* ─── Nav controls (viewer / viewer.html) ────────────────────────────── */
|
|
122
|
+
/*
|
|
123
|
+
* Minimal accessible navigation buttons injected by deck-stage.js.
|
|
124
|
+
* Visible focus states are REQUIRED (WCAG 2.4.7 / 2.4.11).
|
|
125
|
+
*/
|
|
126
|
+
.deck-nav {
|
|
127
|
+
position: fixed;
|
|
128
|
+
bottom: 1.5rem;
|
|
129
|
+
left: 50%;
|
|
130
|
+
transform: translateX(-50%);
|
|
131
|
+
display: flex;
|
|
132
|
+
gap: 0.75rem;
|
|
133
|
+
z-index: 100;
|
|
134
|
+
/* Hide during full-screen presentation; show on hover */
|
|
135
|
+
opacity: 0.15;
|
|
136
|
+
transition: opacity 0.2s ease;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.deck-nav:hover,
|
|
140
|
+
.deck-nav:focus-within {
|
|
141
|
+
opacity: 1;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.deck-nav button {
|
|
145
|
+
appearance: none;
|
|
146
|
+
border: 2px solid rgba(255, 255, 255, 0.7);
|
|
147
|
+
background: rgba(0, 0, 0, 0.55);
|
|
148
|
+
color: #fff;
|
|
149
|
+
border-radius: 0.375rem;
|
|
150
|
+
padding: 0.4rem 0.9rem;
|
|
151
|
+
font-size: 0.875rem;
|
|
152
|
+
cursor: pointer;
|
|
153
|
+
line-height: 1;
|
|
154
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.deck-nav button:hover {
|
|
158
|
+
background: rgba(0, 0, 0, 0.8);
|
|
159
|
+
border-color: #fff;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* REQUIRED: visible focus ring for keyboard nav */
|
|
163
|
+
.deck-nav button:focus-visible {
|
|
164
|
+
outline: 3px solid #4af;
|
|
165
|
+
outline-offset: 2px;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* ─── Slide counter ──────────────────────────────────────────────────── */
|
|
169
|
+
.deck-counter {
|
|
170
|
+
position: fixed;
|
|
171
|
+
bottom: 1.5rem;
|
|
172
|
+
right: 1.5rem;
|
|
173
|
+
color: rgba(255, 255, 255, 0.5);
|
|
174
|
+
font-size: 0.75rem;
|
|
175
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
176
|
+
z-index: 100;
|
|
177
|
+
letter-spacing: 0.05em;
|
|
178
|
+
pointer-events: none;
|
|
179
|
+
user-select: none;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* ─── Print / Save-as-PDF ────────────────────────────────────────────── */
|
|
183
|
+
/*
|
|
184
|
+
* Print: one slide per page at design size.
|
|
185
|
+
* deck-stage.js removes the transform scale so the browser sees
|
|
186
|
+
* a 1920×1080-equivalent layout. Each slide prints as its own page.
|
|
187
|
+
*/
|
|
188
|
+
@media print {
|
|
189
|
+
html,
|
|
190
|
+
body {
|
|
191
|
+
margin: 0;
|
|
192
|
+
padding: 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.deck-viewport {
|
|
196
|
+
position: static;
|
|
197
|
+
width: auto;
|
|
198
|
+
height: auto;
|
|
199
|
+
overflow: visible;
|
|
200
|
+
background: transparent;
|
|
201
|
+
display: block;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/*
|
|
205
|
+
* No !important needed: the only thing that could keep a transform here is the
|
|
206
|
+
* INLINE scale deck-stage.js applies, and that is cleared at the source on
|
|
207
|
+
* `beforeprint` — fired by the browser on Ctrl+P and dispatched explicitly by
|
|
208
|
+
* the headless PDF export (export/pdf.ts) before page.pdf().
|
|
209
|
+
*/
|
|
210
|
+
.deck-stage {
|
|
211
|
+
position: static;
|
|
212
|
+
width: 1920px;
|
|
213
|
+
height: 1080px;
|
|
214
|
+
transform: none;
|
|
215
|
+
overflow: visible;
|
|
216
|
+
will-change: auto;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* Deck chrome has no competing author/inline rule — plain display:none wins. */
|
|
220
|
+
.deck-nav,
|
|
221
|
+
.deck-counter {
|
|
222
|
+
display: none;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* Show all slides, each on its own page.
|
|
227
|
+
*
|
|
228
|
+
* No !important: in the MERGED viewer/bundle the per-slide author rule
|
|
229
|
+
* `.slide { position: absolute }` is scoped to `#slide-NN` (id, specificity
|
|
230
|
+
* 1,0,0) and would outrank this generic `.slide` (0,1,0). Rather than fight it
|
|
231
|
+
* with !important, the bundler (buildPrintPaginationReset in scope-css.ts)
|
|
232
|
+
* emits a matching `#slide-NN` reset AFTER the author styles, which wins by
|
|
233
|
+
* source order at equal specificity. This generic rule remains the baseline
|
|
234
|
+
* for standalone/unscoped slides and supplies the page-break declarations.
|
|
235
|
+
*/
|
|
236
|
+
.slide {
|
|
237
|
+
position: relative;
|
|
238
|
+
inset: auto;
|
|
239
|
+
visibility: visible;
|
|
240
|
+
opacity: 1;
|
|
241
|
+
pointer-events: none;
|
|
242
|
+
transition: none;
|
|
243
|
+
page-break-after: always;
|
|
244
|
+
break-after: page;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* No trailing blank page: the last slide must not force a page break. */
|
|
248
|
+
.slide:last-child {
|
|
249
|
+
page-break-after: auto;
|
|
250
|
+
break-after: auto;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.slide.active,
|
|
254
|
+
.slide.visible {
|
|
255
|
+
z-index: auto;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Canva MCP Integration — oma-slide
|
|
2
|
+
|
|
3
|
+
> Optional export/import channel connecting oma-slide decks to Canva via the Canva Remote MCP server.
|
|
4
|
+
> This channel is **never required** — all existing local export paths (HTML, PDF, PNG, PPTX) remain fully functional without it.
|
|
5
|
+
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
### Canva Remote MCP Server
|
|
9
|
+
|
|
10
|
+
- **Endpoint:** `https://mcp.canva.com/mcp`
|
|
11
|
+
- **Transport:** Streamable HTTP (remote MCP)
|
|
12
|
+
- **Authentication:** OAuth 2.0 via Canva Connect — user must authorize the MCP connection through their Canva account.
|
|
13
|
+
|
|
14
|
+
### MCP Client Configuration
|
|
15
|
+
|
|
16
|
+
The Canva Remote MCP server must be registered in the project's MCP client configuration.
|
|
17
|
+
Canva uses a **remote URL** transport — no local npm package or binary is required.
|
|
18
|
+
|
|
19
|
+
The config entry shape (inside `mcpServers`):
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
"canva": {
|
|
23
|
+
"url": "https://mcp.canva.com/mcp"
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
> **Note (Antigravity CLI):** Some agy versions use `serverUrl` instead of `url` for
|
|
28
|
+
> remote MCP servers. The auto-provisioning step detects the existing convention in
|
|
29
|
+
> the target config file and matches it.
|
|
30
|
+
|
|
31
|
+
#### Vendor-specific config file locations
|
|
32
|
+
|
|
33
|
+
| Vendor | Scope | Config file | Key path |
|
|
34
|
+
|--------|-------|-------------|----------|
|
|
35
|
+
| Claude / Cursor | project | `.mcp.json` | `mcpServers.canva` |
|
|
36
|
+
| Gemini VS Code Extension | project | `.gemini/settings.json` | `mcpServers.canva` |
|
|
37
|
+
| Antigravity CLI (agy) | project | `.agents/mcp_config.json` | `mcpServers.canva` |
|
|
38
|
+
| Antigravity CLI (agy) | user global | `~/.gemini/antigravity-cli/mcp_config.json` | `mcpServers.canva` |
|
|
39
|
+
| Antigravity shared | user global (IDE+CLI) | `~/.gemini/config/mcp_config.json` | `mcpServers.canva` |
|
|
40
|
+
| OMA shared | project | `.agents/mcp.json` | `mcpServers.canva` |
|
|
41
|
+
|
|
42
|
+
All config files use the same `{ "url": "https://mcp.canva.com/mcp" }` shape
|
|
43
|
+
(or `{ "serverUrl": ... }` for Antigravity if that convention is detected).
|
|
44
|
+
|
|
45
|
+
### Available capabilities
|
|
46
|
+
|
|
47
|
+
Use the connected server's tool list and parameter schemas as the execution contract.
|
|
48
|
+
Tool availability depends on account permissions, plan, and the current server. Do not
|
|
49
|
+
assume brand-template autofill or a particular export format is available.
|
|
50
|
+
|
|
51
|
+
## Canva MCP Tool Mapping
|
|
52
|
+
|
|
53
|
+
The following are names in the official remote server documentation. Client wrappers
|
|
54
|
+
may normalize their names; resolve the callable tools before invoking them.
|
|
55
|
+
|
|
56
|
+
| Operation | Documented remote tool | Contract |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| Browse or verify access | `search-designs` | Use the discovered query/filter schema |
|
|
59
|
+
| Read a design | `get-design` | Supply an authorized design ID |
|
|
60
|
+
| Export from Canva | `export-design` | Check supported formats in the tool schema |
|
|
61
|
+
| Import an existing deck | `import-design-from-url` | Requires a URL Canva can retrieve; a local path is not a URL |
|
|
62
|
+
| Upload an image asset | `upload-asset-from-url` | Requires a publicly accessible HTTPS asset URL |
|
|
63
|
+
|
|
64
|
+
`upload-asset-from-url` uploads an asset; it does not create a presentation or map an
|
|
65
|
+
array of asset IDs to pages. Do not invent a presentation-creation call that maps an asset-ID array to pages,
|
|
66
|
+
or pass a local filepath to a URL-upload tool.
|
|
67
|
+
|
|
68
|
+
References: [official MCP tools](https://www.canva.dev/docs/apps/mcp/tools/),
|
|
69
|
+
[URL asset upload](https://www.canva.dev/docs/apps/mcp/tools/upload-asset-from-url/).
|
|
70
|
+
|
|
71
|
+
## Export Pipeline: oma-slide → Canva
|
|
72
|
+
|
|
73
|
+
Trigger: the user requests a Canva export.
|
|
74
|
+
|
|
75
|
+
1. Discover the connected tools and probe access with `search-designs` using its schema.
|
|
76
|
+
On authentication failure, explain the required OAuth connection and retain the local deck.
|
|
77
|
+
2. Produce a local deck with `oma slide export pptx --workspace <deck-dir>`.
|
|
78
|
+
3. If `import-design-from-url` is available, inspect its accepted formats and parameters.
|
|
79
|
+
Use an existing Canva-readable URL authorized for this transfer. A local filepath cannot
|
|
80
|
+
be passed to the remote server.
|
|
81
|
+
4. If only local files exist, deliver the PPTX for manual Canva import or resolve a suitable
|
|
82
|
+
transfer destination with the user. Do not publish the file or enable public sharing merely
|
|
83
|
+
to satisfy the remote tool's URL requirement.
|
|
84
|
+
5. Follow the tool's returned status/job schema. Report the returned Canva design URL only
|
|
85
|
+
after the complete deck has imported. A missing or failed page makes the transfer incomplete;
|
|
86
|
+
report it rather than silently skipping slides.
|
|
87
|
+
|
|
88
|
+
PPTX output is raster-backed: each slide is a PNG, so importing it does not make text
|
|
89
|
+
editable. Editable Canva content requires a separately supported editing workflow.
|
|
90
|
+
|
|
91
|
+
## Import Pipeline: Canva → oma-slide
|
|
92
|
+
|
|
93
|
+
Trigger: the user supplies a Canva design URL/ID or requests an import.
|
|
94
|
+
|
|
95
|
+
1. Resolve the design ID from the supplied URL or use `search-designs` when browsing is needed.
|
|
96
|
+
2. Read the design with `get-design` and inspect available export formats.
|
|
97
|
+
3. Request PPTX through `export-design` when supported. Follow its returned status and download
|
|
98
|
+
URL schema; do not assume a fixed polling API.
|
|
99
|
+
4. Download the completed export into `<workdir>/imports/`, then use
|
|
100
|
+
`oma slide import pptx <downloaded.pptx> --workspace <deck-dir>`.
|
|
101
|
+
5. Use the imported content as the base for any requested revision. If PPTX is unavailable,
|
|
102
|
+
explain the supported alternatives before changing format.
|
|
103
|
+
|
|
104
|
+
## Browse Pipeline
|
|
105
|
+
|
|
106
|
+
Use `search-designs` with the user's query and present matching titles/URLs. Continue
|
|
107
|
+
with the selected design only within the requested operation's scope.
|
|
108
|
+
|
|
109
|
+
## Error Handling
|
|
110
|
+
|
|
111
|
+
| Error | Response |
|
|
112
|
+
|---|---|
|
|
113
|
+
| Server not configured | Offer the setup below when Canva was requested |
|
|
114
|
+
| OAuth or permission failure | Explain the missing access; retain local outputs |
|
|
115
|
+
| Local filepath supplied to URL tool | Use an authorized reachable URL or deliver a local file for manual import |
|
|
116
|
+
| Unsupported import/export format | Report the capability limit and supported alternatives |
|
|
117
|
+
| Transfer or job failure | Report the incomplete transfer; do not present skipped pages as success |
|
|
118
|
+
| Design not found | Show the requested ID and optionally search with the supplied query |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Auto-Provisioning: Canva MCP Setup
|
|
123
|
+
|
|
124
|
+
When the skill detects that Canva MCP is not configured and the user has requested a Canva
|
|
125
|
+
operation, the skill **offers** to add the Canva MCP entry to the project config files.
|
|
126
|
+
|
|
127
|
+
### Detection
|
|
128
|
+
|
|
129
|
+
The skill checks for the `canva` key in `mcpServers` across known config files:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
Project-level:
|
|
133
|
+
1. .agents/mcp.json (OMA shared SSOT)
|
|
134
|
+
2. .agents/mcp_config.json (Antigravity CLI project-scoped config)
|
|
135
|
+
3. .mcp.json (Claude / Cursor project config)
|
|
136
|
+
4. .gemini/settings.json (Gemini VS Code Extension project settings)
|
|
137
|
+
|
|
138
|
+
User-global (optional, only if project-level is absent):
|
|
139
|
+
5. ~/.gemini/antigravity-cli/mcp_config.json (agy CLI global config)
|
|
140
|
+
6. ~/.gemini/config/mcp_config.json (Antigravity shared IDE+CLI config)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
If `canva` is absent from **all** project-level files, the skill surfaces a setup prompt.
|
|
144
|
+
User-global files are checked as a fallback — if Canva is configured globally but not
|
|
145
|
+
in the project, the skill notifies instead of re-provisioning.
|
|
146
|
+
|
|
147
|
+
### Setup Prompt
|
|
148
|
+
|
|
149
|
+
Ask the user:
|
|
150
|
+
> "Canva MCP is not configured in this project. Would you like me to add it to your
|
|
151
|
+
> MCP config files? This adds `{ "url": "https://mcp.canva.com/mcp" }` to
|
|
152
|
+
> mcpServers — no local packages are installed."
|
|
153
|
+
|
|
154
|
+
Options:
|
|
155
|
+
- **Yes, add to all config files** — write to all detected config files
|
|
156
|
+
- **Yes, add to current vendor only** — write to the active vendor's config only
|
|
157
|
+
- **No, skip Canva** — proceed without Canva; use local exports
|
|
158
|
+
|
|
159
|
+
### Provisioning Steps
|
|
160
|
+
|
|
161
|
+
For each target config file:
|
|
162
|
+
|
|
163
|
+
1. **Read** the existing JSON file.
|
|
164
|
+
2. **Parse** and verify it has a `mcpServers` object.
|
|
165
|
+
3. **Add** the `canva` entry:
|
|
166
|
+
```json
|
|
167
|
+
"canva": {
|
|
168
|
+
"url": "https://mcp.canva.com/mcp"
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
4. **Write** the updated JSON back with the same formatting (2-space indent).
|
|
172
|
+
5. **Verify** the file is valid JSON after write.
|
|
173
|
+
|
|
174
|
+
### Post-Provisioning
|
|
175
|
+
|
|
176
|
+
After writing config files:
|
|
177
|
+
|
|
178
|
+
1. **Notify the user** that a session restart may be needed for the MCP client to pick up
|
|
179
|
+
the new server. Some runtimes (e.g., Gemini CLI) require a restart; others hot-reload.
|
|
180
|
+
2. **Attempt a probe** (`search-designs` using the discovered schema) — if it succeeds, continue with the Canva operation.
|
|
181
|
+
If it fails (expected on first run before OAuth), notify:
|
|
182
|
+
> "Canva MCP config added. You'll need to authenticate with Canva on first use.
|
|
183
|
+
> The OAuth flow will be triggered automatically by your MCP client."
|
|
184
|
+
3. **Record the setup** through the configured session-memory capability when available. If it is
|
|
185
|
+
unavailable, rely on the existing config file after checking it before any future prompt.
|
|
186
|
+
|
|
187
|
+
### Config File Safety
|
|
188
|
+
|
|
189
|
+
- **Never overwrite** an existing `canva` entry — if it exists with different settings, skip.
|
|
190
|
+
- **Never modify** non-`mcpServers` fields in any config file.
|
|
191
|
+
- **Backup** is not created (JSON merge is additive and reversible by removing the key).
|
|
192
|
+
- **`.agents/` SSOT rule**: the skill writes to `.agents/mcp.json` and `.agents/mcp_config.json`
|
|
193
|
+
only when the user explicitly approves. This is a config-level change, not a skill definition change.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Security Considerations
|
|
198
|
+
|
|
199
|
+
1. **OAuth tokens are managed by the MCP client** — the skill never handles or stores Canva credentials.
|
|
200
|
+
2. **Design data is sent to Canva through the MCP server** — the skill only sends/receives files and metadata.
|
|
201
|
+
3. **Uploaded assets are stored in the user's Canva account** — the skill does not control retention or sharing.
|
|
202
|
+
4. **No Canva API calls outside MCP** — all Canva interactions go through the registered MCP server tools.
|
|
203
|
+
5. **Auto-provisioning is user-approved** — the skill never writes MCP config without explicit user consent.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Pre-Delivery Checklist — oma-slide
|
|
2
|
+
|
|
3
|
+
Run this gate after Phase 5 (Review) and before Phase 6 delivery (bundle/export).
|
|
4
|
+
Every item maps to a SKILL.md guardrail or the validator contract in `fixed-stage.md`.
|
|
5
|
+
|
|
6
|
+
## Gate (must pass)
|
|
7
|
+
|
|
8
|
+
- [ ] `oma slide validate --workspace "$DECK_DIR" --output json` passes, or the surfaced diff was explicitly approved by the user after 3 auto-fix iterations
|
|
9
|
+
- [ ] Every slide root carries `data-om-validate` (validator contract)
|
|
10
|
+
- [ ] All slides authored at the fixed 1920×1080 stage in px units (no vw/vh/% layout)
|
|
11
|
+
- [ ] All `<img src>` / `<video src>` point to local `./assets/<file>` only — no remote URLs
|
|
12
|
+
- [ ] `meta.json` is current: `{ title, order[], style, density, speakerNotes }` matches the actual `slide-NN.html` set
|
|
13
|
+
|
|
14
|
+
## Accessibility
|
|
15
|
+
|
|
16
|
+
- [ ] Nav controls have visible focus states (`.deck-nav button:focus-visible`)
|
|
17
|
+
- [ ] CJK text present → Pretendard font included on those slides
|
|
18
|
+
|
|
19
|
+
## Delivery artifacts
|
|
20
|
+
|
|
21
|
+
<!-- oma-docs:ignore-start -->
|
|
22
|
+
- [ ] `oma slide bundle --workspace "$DECK_DIR"` produced `out/deck.html` and it opens in a browser
|
|
23
|
+
<!-- oma-docs:ignore-end -->
|
|
24
|
+
- [ ] If `./assets/` contains video: user was warned the bundle is not fully self-contained
|
|
25
|
+
- [ ] PPTX export (if requested) labeled **experimental** in user-facing output
|
|
26
|
+
- [ ] Canva export (if performed): design URL included in the delivery summary
|
|
27
|
+
|
|
28
|
+
## Delivery summary (Phase 6c)
|
|
29
|
+
|
|
30
|
+
<!-- oma-docs:ignore-start -->
|
|
31
|
+
- [ ] Reported: workdir path, slide file list, `out/deck.html` path, export paths, validate status
|
|
32
|
+
<!-- oma-docs:ignore-end -->
|
|
33
|
+
- [ ] Reported: any `TODO(oma-deferred)` items (e.g., unresolved image generation placeholders)
|
|
34
|
+
|
|
35
|
+
## Native PPTX route (`resources/native-pptx.md`)
|
|
36
|
+
|
|
37
|
+
Replaces the HTML gate above when Phase 0 selected `native-pptx`.
|
|
38
|
+
|
|
39
|
+
- [ ] ppt-master resolved from the runtime catalog or `bunx skills use`; source, version, and `SKILL_DIR` recorded
|
|
40
|
+
- [ ] Bundle complete and `$SKILL_DIR/scripts/attribution_guard.py` exited 0
|
|
41
|
+
- [ ] Python packages installed only after explicit user consent (or already present)
|
|
42
|
+
- [ ] Upstream final quality gate passed for the selected route
|
|
43
|
+
- [ ] PPTX present under `<project>/exports/`; project under `.agents/results/slides/<session-id>/`
|
|
44
|
+
- [ ] AI images came from oma-image via Path B, or the user explicitly chose another path
|
|
45
|
+
- [ ] No upstream file was copied, vendored, or edited
|
|
46
|
+
- [ ] Delivery summary lists the PPTX path, upstream version, route and gates, and image sources
|