@geraldmaron/construct 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -18
- package/bin/construct +392 -91
- package/bin/construct-postinstall.mjs +30 -2
- package/examples/distribution/README.md +42 -0
- package/examples/distribution/manifest.json +53 -0
- package/examples/distribution/sources/adr.md +84 -0
- package/examples/distribution/sources/deck-one-pager.md +65 -0
- package/examples/distribution/sources/prd-platform.md +161 -0
- package/examples/distribution/sources/research-brief.md +80 -0
- package/examples/distribution/sources/rfc-platform.md +82 -0
- package/examples/distribution/sources/runbook.md +103 -0
- package/examples/distribution/sources/strategy.md +88 -0
- package/lib/adapters-sync.mjs +67 -0
- package/lib/artifact-gate-notice.mjs +38 -0
- package/lib/artifact-manifest.mjs +112 -0
- package/lib/artifact-release-gate.mjs +171 -0
- package/lib/artifact-reviewers.mjs +68 -0
- package/lib/artifact-type-from-path.mjs +79 -0
- package/lib/audit-skills.mjs +4 -0
- package/lib/audit-specialists.mjs +285 -0
- package/lib/audit-trail.mjs +77 -10
- package/lib/auto-docs.mjs +87 -18
- package/lib/beads/drift.mjs +27 -6
- package/lib/beads-client.mjs +49 -121
- package/lib/beads-optimistic.mjs +5 -12
- package/lib/brand-fonts.mjs +93 -0
- package/lib/brand-prose.mjs +214 -0
- package/lib/brand-tokens.mjs +92 -0
- package/lib/bridges/copilot-proxy.mjs +13 -26
- package/lib/capability-ledger.mjs +156 -0
- package/lib/certification/artifact-fixtures.mjs +132 -0
- package/lib/certification/artifact-gates.mjs +63 -0
- package/lib/certification/artifact-provenance.mjs +97 -0
- package/lib/certification/canonical-scenarios.mjs +78 -0
- package/lib/certification/cli.mjs +191 -0
- package/lib/certification/dashboard-api.mjs +71 -0
- package/lib/certification/demo-parity.mjs +116 -0
- package/lib/certification/document-io-fixtures.mjs +246 -0
- package/lib/certification/document-workflow.mjs +97 -0
- package/lib/certification/eval-bridge.mjs +77 -0
- package/lib/certification/model-routing.mjs +149 -0
- package/lib/certification/prompt-budget.mjs +119 -0
- package/lib/certification/rc-gate.mjs +206 -0
- package/lib/certification/real-llm-scenarios.mjs +303 -0
- package/lib/certification/role-cards.mjs +113 -0
- package/lib/certification/role-overlays.mjs +117 -0
- package/lib/certification/run.mjs +122 -0
- package/lib/certification/runner.mjs +323 -0
- package/lib/certification/scenarios.mjs +51 -0
- package/lib/certification/skill-inventory.mjs +289 -0
- package/lib/certification/skill-scenarios.mjs +147 -0
- package/lib/certification/specialist-contracts.mjs +85 -0
- package/lib/certification/specialist-scenarios.mjs +175 -0
- package/lib/certification/stale-impact.mjs +146 -0
- package/lib/certification/status.mjs +252 -0
- package/lib/certification/store.mjs +77 -0
- package/lib/chat/cli.mjs +333 -0
- package/lib/chat/command-suggest.mjs +161 -0
- package/lib/chat/commands.mjs +215 -0
- package/lib/chat/config.mjs +142 -0
- package/lib/chat/context-compactor.mjs +250 -0
- package/lib/chat/context-continuation.mjs +253 -0
- package/lib/chat/continuation-source.mjs +58 -0
- package/lib/chat/demo-guide.mjs +61 -0
- package/lib/chat/design-tokens.mjs +91 -0
- package/lib/chat/desktop-binary.mjs +79 -0
- package/lib/chat/desktop-build.mjs +130 -0
- package/lib/chat/desktop-launcher.mjs +133 -0
- package/lib/chat/evidence.mjs +145 -0
- package/lib/chat/export.mjs +74 -0
- package/lib/chat/harness/driver.mjs +91 -0
- package/lib/chat/list-picker.mjs +112 -0
- package/lib/chat/model-picker.mjs +356 -0
- package/lib/chat/openrouter-fallback.mjs +151 -0
- package/lib/chat/permission-prompt.mjs +33 -0
- package/lib/chat/picker-catalog.mjs +45 -0
- package/lib/chat/policy-telemetry.mjs +34 -0
- package/lib/chat/present.mjs +245 -0
- package/lib/chat/session-context.mjs +39 -0
- package/lib/chat/session-persist.mjs +73 -0
- package/lib/chat/session-restore.mjs +71 -0
- package/lib/chat/session-settings.mjs +53 -0
- package/lib/chat/system-prompt.mjs +52 -0
- package/lib/chat/transparency.mjs +93 -0
- package/lib/chat/tui/color-scheme.mjs +42 -0
- package/lib/chat/tui/markdown.mjs +123 -0
- package/lib/chat/tui/presentation.mjs +100 -0
- package/lib/chat/tui/render.mjs +500 -0
- package/lib/chat/tui/turn-block.mjs +284 -0
- package/lib/chat/tui/turn-present.mjs +18 -0
- package/lib/chat/tui/turn-state.mjs +88 -0
- package/lib/chat/tui/usage.mjs +122 -0
- package/lib/chat/web-commands.mjs +146 -0
- package/lib/chat/web-launcher.mjs +63 -0
- package/lib/chat/web-picker-keys.mjs +46 -0
- package/lib/chat/web-session.mjs +159 -0
- package/lib/cli-commands.mjs +232 -11
- package/lib/comment-lint.mjs +6 -4
- package/lib/config/schema.mjs +36 -5
- package/lib/contract-schemas/decision.json +50 -0
- package/lib/contract-schemas/implementation.json +51 -0
- package/lib/contract-schemas/review-report.json +32 -0
- package/lib/contract-schemas/test-report.json +43 -0
- package/lib/contracts/construct-handoff.mjs +60 -0
- package/lib/contracts/validate.mjs +32 -3
- package/lib/contracts/violation-log.mjs +58 -5
- package/lib/dashboard-demo.mjs +71 -0
- package/lib/dashboard-static.mjs +19 -5
- package/lib/decisions/registry.mjs +5 -3
- package/lib/deck-export-pptx.mjs +1152 -0
- package/lib/demo-recording.mjs +142 -0
- package/lib/demo-script.mjs +114 -0
- package/lib/demo-surface.mjs +249 -0
- package/lib/demo.mjs +703 -0
- package/lib/diagram-export.mjs +192 -0
- package/lib/diagram.mjs +302 -0
- package/lib/docs-verify.mjs +25 -7
- package/lib/doctor/index.mjs +4 -2
- package/lib/doctor/project-adapters.mjs +44 -0
- package/lib/doctor/watchers/cx-budget.mjs +98 -0
- package/lib/doctor/watchers/graph-staleness.mjs +52 -0
- package/lib/doctor/watchers/process-pressure.mjs +4 -3
- package/lib/doctor/watchers/service-health.mjs +1 -1
- package/lib/document-export.mjs +360 -36
- package/lib/document-extract.mjs +88 -0
- package/lib/document-ingest.mjs +32 -18
- package/lib/embed/cli.mjs +2 -2
- package/lib/embed/daemon.mjs +18 -46
- package/lib/embed/semantic.mjs +5 -2
- package/lib/embed/worker.mjs +2 -2
- package/lib/embedded-contract/model-resolve.mjs +10 -9
- package/lib/env-config.mjs +26 -0
- package/lib/evals/dataset.mjs +137 -0
- package/lib/evals/gates.mjs +175 -0
- package/lib/graph/build-co-change.mjs +54 -0
- package/lib/graph/build-from-registry.mjs +136 -0
- package/lib/graph/build-import-graph.mjs +153 -0
- package/lib/graph/cli.mjs +110 -0
- package/lib/graph/impact-cli.mjs +89 -0
- package/lib/graph/impact.mjs +108 -0
- package/lib/graph/staleness.mjs +44 -0
- package/lib/graph/store.mjs +172 -0
- package/lib/handoffs/cleanup.mjs +1 -1
- package/lib/health-check.mjs +90 -76
- package/lib/hooks/artifact-release-gate.mjs +43 -0
- package/lib/hooks/audit-trail.mjs +14 -28
- package/lib/hooks/brand-prose-lint.mjs +38 -0
- package/lib/hooks/graph-impact-advisory.mjs +62 -0
- package/lib/hooks/session-optimize.mjs +84 -207
- package/lib/hooks/session-start.mjs +4 -5
- package/lib/host-disposition.mjs +7 -0
- package/lib/improvement/cli.mjs +189 -0
- package/lib/improvement/controller.mjs +137 -0
- package/lib/improvement/proposal.mjs +120 -0
- package/lib/improvement/specialist-loop.mjs +192 -0
- package/lib/improvement/store.mjs +89 -0
- package/lib/improvement/surface.mjs +219 -0
- package/lib/ingest-tooling.mjs +97 -0
- package/lib/init/doc-lanes.mjs +165 -0
- package/lib/init-docs.mjs +31 -178
- package/lib/init-unified.mjs +27 -97
- package/lib/init-update-guide.mjs +102 -0
- package/lib/init-update.mjs +32 -1
- package/lib/init.mjs +8 -0
- package/lib/install/desktop-binary-download.mjs +85 -0
- package/lib/install/legacy-global-cleanup.mjs +189 -0
- package/lib/intake/daemon.mjs +2 -0
- package/lib/intake/git-queue.mjs +9 -8
- package/lib/intake/queue.mjs +2 -1
- package/lib/intake/session-prelude.mjs +90 -1
- package/lib/libreoffice-export.mjs +97 -0
- package/lib/logging/rotate.mjs +9 -0
- package/lib/maintenance/docker-reclaim.mjs +206 -0
- package/lib/mcp/external-schema-cost.mjs +74 -0
- package/lib/mcp/server.mjs +84 -9
- package/lib/mcp/stdio-mcp-probe.mjs +188 -0
- package/lib/mcp/tool-budget.mjs +55 -4
- package/lib/mcp/tools/document.mjs +18 -4
- package/lib/mcp/tools/skills.mjs +32 -3
- package/lib/mcp/tools/workflow.mjs +13 -1
- package/lib/model-free-selector.mjs +18 -0
- package/lib/model-registry.mjs +13 -229
- package/lib/model-router.mjs +425 -93
- package/lib/models/behavior-matrix.mjs +289 -0
- package/lib/models/catalog.mjs +209 -0
- package/lib/models/execution-capability-profile.mjs +196 -0
- package/lib/models/execution-policy.mjs +307 -0
- package/lib/models/provider-poll.mjs +383 -0
- package/lib/npm-spawn-env.mjs +17 -0
- package/lib/ollama/installed-models.mjs +129 -0
- package/lib/oracle/actions.mjs +187 -0
- package/lib/oracle/artifact-gate.mjs +99 -0
- package/lib/oracle/cli.mjs +204 -0
- package/lib/oracle/daemon-entry.mjs +14 -0
- package/lib/oracle/dispatch.mjs +81 -0
- package/lib/oracle/execute.mjs +143 -0
- package/lib/oracle/gaps.mjs +76 -0
- package/lib/oracle/index.mjs +84 -0
- package/lib/oracle/issues.mjs +164 -0
- package/lib/oracle/org-graph.mjs +170 -0
- package/lib/oracle/policy.mjs +80 -0
- package/lib/oracle/read-model.mjs +398 -0
- package/lib/oracle/reconcile.mjs +191 -0
- package/lib/oracle/routing.mjs +89 -0
- package/lib/oracle/synthesize.mjs +384 -0
- package/lib/oracle/verdicts.mjs +51 -0
- package/lib/orchestration/worker.mjs +88 -27
- package/lib/orchestration-policy.mjs +50 -0
- package/lib/parity.mjs +96 -2
- package/lib/persona-sections.mjs +66 -0
- package/lib/playwright-demo.mjs +252 -0
- package/lib/project-init-shared.mjs +4 -1
- package/lib/prompt-composer.js +9 -4
- package/lib/prompt-validation-contract.mjs +24 -0
- package/lib/provider-capabilities.js +57 -11
- package/lib/providers/contract/adapters/confluence/index.mjs +181 -0
- package/lib/providers/contract/adapters/git/index.mjs +115 -0
- package/lib/providers/contract/adapters/github/index.mjs +166 -0
- package/lib/providers/contract/adapters/jira/index.mjs +187 -0
- package/lib/providers/contract/adapters/slack/index.mjs +175 -0
- package/lib/providers/contract/contract-tests.mjs +57 -0
- package/lib/providers/contract/errors.mjs +48 -0
- package/lib/providers/contract/interface.mjs +50 -0
- package/lib/providers/contract/registry.mjs +102 -0
- package/lib/providers/copilot-auth.mjs +297 -0
- package/lib/providers/credential-bootstrap.mjs +178 -0
- package/lib/providers/credential-catalog.mjs +46 -0
- package/lib/providers/credential-sources.mjs +63 -0
- package/lib/providers/creds.mjs +5 -2
- package/lib/providers/op-run.mjs +59 -0
- package/lib/providers/secret-resolver.mjs +159 -0
- package/lib/publish-template.mjs +163 -0
- package/lib/publish-tooling.mjs +119 -0
- package/lib/publish.mjs +305 -0
- package/lib/registry/cli.mjs +82 -0
- package/lib/registry/consolidation.mjs +147 -0
- package/lib/registry/generate-docs.mjs +75 -0
- package/lib/registry/skill-verification.mjs +57 -0
- package/lib/registry/surface-map.mjs +76 -0
- package/lib/registry/validate.mjs +135 -0
- package/lib/resources/budget.mjs +82 -0
- package/lib/resources/process-budget.mjs +45 -0
- package/lib/rules-delivery.mjs +9 -2
- package/lib/rules-read.mjs +26 -0
- package/lib/runtime-env.mjs +23 -0
- package/lib/runtime-pressure.mjs +51 -7
- package/lib/schema-infer.mjs +13 -2
- package/lib/server/chat-loop.mjs +622 -0
- package/lib/server/demo-preview.mjs +63 -0
- package/lib/server/index.mjs +229 -8
- package/lib/server/langfuse-login.mjs +3 -3
- package/lib/service-manager.mjs +61 -9
- package/lib/session-store.mjs +1 -1
- package/lib/setup.mjs +102 -2
- package/lib/specialists/prompt-schema.mjs +19 -10
- package/lib/specialists/roster.mjs +43 -0
- package/lib/specialists/scaffold.mjs +56 -0
- package/lib/storage/backend.mjs +6 -6
- package/lib/storage/embeddings-local.mjs +6 -3
- package/lib/storage/file-lock.mjs +18 -11
- package/lib/storage/hybrid-query.mjs +7 -4
- package/lib/storage/state-source.mjs +5 -5
- package/lib/storage/sync.mjs +2 -3
- package/lib/telemetry/rule-calls.mjs +52 -0
- package/lib/template-registry.mjs +2 -2
- package/lib/templates/visual-requirements.mjs +27 -51
- package/lib/test-corpus-inventory.mjs +313 -0
- package/lib/uninstall/uninstall.mjs +19 -7
- package/lib/update.mjs +12 -0
- package/lib/upgrade.mjs +14 -0
- package/lib/wireframe.mjs +20 -14
- package/lib/worker/run.mjs +17 -4
- package/lib/worker/trace.mjs +11 -3
- package/package.json +29 -13
- package/personas/construct.md +13 -13
- package/platforms/claude/settings.template.json +36 -0
- package/rules/common/patterns.md +1 -1
- package/rules/common/release-gates.md +4 -3
- package/scripts/sync-specialists.mjs +187 -60
- package/skills/devops/data-engineering.md +1 -1
- package/skills/docs/adr-workflow.md +1 -0
- package/skills/docs/backlog-proposal-workflow.md +1 -0
- package/skills/docs/codebase-research-workflow.md +40 -0
- package/skills/docs/customer-profile-workflow.md +1 -0
- package/skills/docs/document-ingest-workflow.md +1 -0
- package/skills/docs/evidence-ingest-workflow.md +1 -0
- package/skills/docs/init-docs.md +2 -2
- package/skills/docs/init-project.md +8 -3
- package/skills/docs/prd-workflow.md +24 -1
- package/skills/docs/prfaq-workflow.md +1 -0
- package/skills/docs/product-intelligence-workflow.md +1 -0
- package/skills/docs/product-signal-workflow.md +1 -0
- package/skills/docs/research-workflow.md +54 -37
- package/skills/docs/runbook-workflow.md +1 -0
- package/skills/docs/strategy-workflow.md +1 -0
- package/skills/docs/user-research-workflow.md +40 -0
- package/skills/operating/orchestration-reference.md +1 -1
- package/skills/roles/architect.md +5 -0
- package/skills/roles/operator.docs.md +4 -0
- package/skills/routing.md +4 -2
- package/specialists/artifact-manifest.json +480 -0
- package/specialists/artifact-manifest.schema.json +53 -0
- package/specialists/audit-enrichments.json +454 -0
- package/specialists/contracts.json +37 -25
- package/specialists/prompts/_shared/validation-contract.md +26 -0
- package/specialists/prompts/cx-accessibility.md +21 -2
- package/specialists/prompts/cx-ai-engineer.md +24 -1
- package/specialists/prompts/cx-architect.md +4 -1
- package/specialists/prompts/cx-business-strategist.md +23 -2
- package/specialists/prompts/cx-data-analyst.md +22 -1
- package/specialists/prompts/cx-data-engineer.md +23 -2
- package/specialists/prompts/cx-debugger.md +21 -2
- package/specialists/prompts/cx-designer.md +26 -3
- package/specialists/prompts/cx-devil-advocate.md +19 -2
- package/specialists/prompts/cx-docs-keeper.md +28 -1
- package/specialists/prompts/cx-engineer.md +22 -1
- package/specialists/prompts/cx-evaluator.md +18 -1
- package/specialists/prompts/cx-explorer.md +21 -2
- package/specialists/prompts/cx-legal-compliance.md +21 -2
- package/specialists/prompts/cx-operations.md +21 -2
- package/specialists/prompts/cx-oracle.md +94 -0
- package/specialists/prompts/cx-orchestrator.md +20 -1
- package/specialists/prompts/cx-platform-engineer.md +25 -2
- package/specialists/prompts/cx-product-manager.md +32 -1
- package/specialists/prompts/cx-qa.md +24 -2
- package/specialists/prompts/cx-rd-lead.md +23 -2
- package/specialists/prompts/cx-release-manager.md +23 -2
- package/specialists/prompts/cx-researcher.md +22 -2
- package/specialists/prompts/cx-reviewer.md +18 -1
- package/specialists/prompts/cx-security.md +22 -2
- package/specialists/prompts/cx-sre.md +30 -3
- package/specialists/prompts/cx-test-automation.md +7 -1
- package/specialists/prompts/cx-trace-reviewer.md +22 -3
- package/specialists/prompts/cx-ux-researcher.md +21 -2
- package/specialists/registry.json +52 -173
- package/specialists/tone-profiles.json +42 -0
- package/templates/demos/playwright/demo-recording.config.mjs +47 -0
- package/templates/demos/recordings/agentic-platforms-prd.json +19 -0
- package/templates/demos/scripts/agentic-platforms-prd.json +44 -0
- package/templates/demos/specs/_helpers/scroll-artifact.ts +89 -0
- package/templates/demos/tapes/agentic-platforms-prd.tape +49 -0
- package/templates/demos/tapes/resource-guard-rails.tape +49 -0
- package/templates/demos/vhs/construct-cockpit.json +24 -0
- package/templates/distribution/construct-brand.typ +446 -0
- package/templates/distribution/construct-decision.typ +38 -0
- package/templates/distribution/construct-deck.html +95 -0
- package/templates/distribution/construct-pdf.typ +38 -0
- package/templates/distribution/construct-prd.typ +38 -0
- package/templates/distribution/construct-research.typ +38 -0
- package/templates/distribution/construct-web.html +92 -0
- package/templates/distribution/fonts/Geist-Bold.ttf +0 -0
- package/templates/distribution/fonts/Geist-Medium.ttf +0 -0
- package/templates/distribution/fonts/Geist-Regular.ttf +0 -0
- package/templates/distribution/fonts/Geist-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/GeistMono-Medium.ttf +0 -0
- package/templates/distribution/fonts/GeistMono-Regular.ttf +0 -0
- package/templates/distribution/fonts/GeistMono-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/IBMPlexMono-Regular.otf +0 -0
- package/templates/distribution/fonts/JetBrainsMono-Medium.ttf +0 -0
- package/templates/distribution/fonts/JetBrainsMono-Regular.ttf +0 -0
- package/templates/distribution/fonts/JetBrainsMono-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-Bold.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-Medium.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-Regular.ttf +0 -0
- package/templates/distribution/fonts/PlusJakartaSans-SemiBold.ttf +0 -0
- package/templates/distribution/fonts/README.md +36 -0
- package/templates/distribution/fonts/SpaceGrotesk-Variable.ttf +0 -0
- package/templates/distribution/fonts/handwritten/Caveat.ttf +0 -0
- package/templates/distribution/fonts/legacy/IBMPlexMono-Regular.otf +0 -0
- package/templates/distribution/fonts/legacy/Inter-Medium.otf +0 -0
- package/templates/distribution/fonts/legacy/Inter-Regular.otf +0 -0
- package/templates/distribution/fonts/legacy/Inter-SemiBold.otf +0 -0
- package/templates/distribution/fonts/legacy/InterDisplay-SemiBold.otf +0 -0
- package/templates/distribution/fonts/legacy/SourceSerif4-Regular.otf +0 -0
- package/templates/distribution/fonts/legacy/SourceSerif4-Semibold.otf +0 -0
- package/templates/distribution/icons/activity.svg +15 -0
- package/templates/distribution/icons/alert-triangle.svg +17 -0
- package/templates/distribution/icons/book-open.svg +16 -0
- package/templates/distribution/icons/bot.svg +20 -0
- package/templates/distribution/icons/brain.svg +22 -0
- package/templates/distribution/icons/circle-check.svg +16 -0
- package/templates/distribution/icons/clipboard-check.svg +17 -0
- package/templates/distribution/icons/cpu.svg +28 -0
- package/templates/distribution/icons/database.svg +17 -0
- package/templates/distribution/icons/eye.svg +16 -0
- package/templates/distribution/icons/file-text.svg +19 -0
- package/templates/distribution/icons/gauge.svg +16 -0
- package/templates/distribution/icons/git-branch.svg +17 -0
- package/templates/distribution/icons/key.svg +17 -0
- package/templates/distribution/icons/layers.svg +17 -0
- package/templates/distribution/icons/list-checks.svg +19 -0
- package/templates/distribution/icons/lock.svg +16 -0
- package/templates/distribution/icons/message-square.svg +15 -0
- package/templates/distribution/icons/network.svg +19 -0
- package/templates/distribution/icons/route.svg +17 -0
- package/templates/distribution/icons/scale.svg +19 -0
- package/templates/distribution/icons/search.svg +16 -0
- package/templates/distribution/icons/send.svg +16 -0
- package/templates/distribution/icons/server.svg +18 -0
- package/templates/distribution/icons/shield-check.svg +16 -0
- package/templates/distribution/icons/users.svg +18 -0
- package/templates/distribution/icons/webhook.svg +17 -0
- package/templates/distribution/icons/workflow.svg +17 -0
- package/templates/distribution/icons/wrench.svg +15 -0
- package/templates/distribution/run.mjs +18 -1
- package/templates/docs/adr.md +7 -0
- package/templates/docs/construct_guide.md +10 -10
- package/templates/docs/customer-profile.md +4 -0
- package/templates/docs/one-pager.md +4 -0
- package/templates/docs/postmortem.md +31 -0
- package/templates/docs/prd-platform.md +19 -0
- package/templates/docs/prd.md +15 -0
- package/templates/docs/prfaq.md +7 -0
- package/templates/docs/qa-strategy.md +103 -0
- package/templates/docs/research-brief.md +8 -0
- package/templates/docs/rfc-platform.md +12 -0
- package/templates/docs/test-plan.md +7 -0
- package/lib/ingest/chunker.mjs +0 -94
- package/lib/ingest/pipeline.mjs +0 -53
- package/lib/ingest/store.mjs +0 -82
- package/lib/mode-commands.mjs +0 -122
- package/lib/policy/unified-gates.mjs +0 -96
- package/lib/profiles/validate-custom.mjs +0 -114
- package/lib/services/telemetry-backend.mjs +0 -177
- package/lib/storage/fusion.mjs +0 -95
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
templates/distribution/construct-deck.html — Construct branded 16:9 slide deck
|
|
3
|
+
HTML for `construct export --to=deck`. Pandoc emits section divs (--section-divs)
|
|
4
|
+
from markdown slides separated by ---; Space Grotesk via Google Fonts; monochrome ink
|
|
5
|
+
tokens mirror construct-brand.typ. Metadata variables fill the title slide.
|
|
6
|
+
-->
|
|
7
|
+
<!DOCTYPE html>
|
|
8
|
+
<html lang="en">
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="utf-8">
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
12
|
+
<title>$if(title)$$title$$else$Construct deck$endif$</title>
|
|
13
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
14
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
15
|
+
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
16
|
+
<style>
|
|
17
|
+
:root {
|
|
18
|
+
--ink:#0a0c10; --ink-strong:#16191f; --ink-body:#23272e; --muted:#565c66; --faint:#9499a2;
|
|
19
|
+
--hairline:#e3e4e8; --hairline-strong:#cdd0d6; --surface:#fafafa; --surface-alt:#f3f4f6; --paper:#ffffff;
|
|
20
|
+
--sans:'Space Grotesk',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
|
|
21
|
+
--mono:'JetBrains Mono',ui-monospace,'SF Mono',Menlo,monospace;
|
|
22
|
+
--slide-w:1280px;
|
|
23
|
+
--slide-h:720px;
|
|
24
|
+
}
|
|
25
|
+
* { box-sizing:border-box; }
|
|
26
|
+
html { scroll-behavior:smooth; -webkit-text-size-adjust:100%; }
|
|
27
|
+
body { margin:0; background:#e8e9ec; color:var(--ink-body); font-family:var(--sans); font-size:22px; line-height:1.45; -webkit-font-smoothing:antialiased; }
|
|
28
|
+
.deck { display:flex; flex-direction:column; align-items:center; gap:32px; padding:40px 24px 80px; }
|
|
29
|
+
section.slide {
|
|
30
|
+
width:min(100%, var(--slide-w));
|
|
31
|
+
aspect-ratio:16/9;
|
|
32
|
+
background:var(--paper);
|
|
33
|
+
border:1px solid var(--hairline);
|
|
34
|
+
border-radius:8px;
|
|
35
|
+
box-shadow:0 18px 48px rgba(10,12,16,.08);
|
|
36
|
+
padding:56px 64px 48px;
|
|
37
|
+
overflow:hidden;
|
|
38
|
+
display:flex;
|
|
39
|
+
flex-direction:column;
|
|
40
|
+
position:relative;
|
|
41
|
+
}
|
|
42
|
+
section.slide::after {
|
|
43
|
+
content:"";
|
|
44
|
+
position:absolute;
|
|
45
|
+
left:0; right:0; bottom:0;
|
|
46
|
+
height:4px;
|
|
47
|
+
background:linear-gradient(90deg, var(--ink) 46px, var(--hairline) 46px);
|
|
48
|
+
}
|
|
49
|
+
section.slide.title-slide { justify-content:center; }
|
|
50
|
+
section.slide.title-slide h1 { font-size:52px; line-height:1.06; letter-spacing:-.024em; margin:0 0 16px; color:var(--ink); font-weight:600; }
|
|
51
|
+
section.slide.title-slide .subtitle { font-size:26px; color:var(--muted); margin:0 0 28px; letter-spacing:-.005em; }
|
|
52
|
+
section.slide.title-slide .meta { font-size:15px; color:var(--muted); letter-spacing:.04em; text-transform:uppercase; font-weight:600; }
|
|
53
|
+
section.slide.title-slide .meta .sep { color:var(--faint); font-weight:400; }
|
|
54
|
+
section.slide h1 { font-size:40px; line-height:1.08; letter-spacing:-.02em; margin:0 0 20px; color:var(--ink); font-weight:600; }
|
|
55
|
+
section.slide h1::after { content:""; display:block; width:36px; height:3px; background:var(--ink); margin-top:14px; }
|
|
56
|
+
section.slide h2 { font-size:28px; font-weight:600; color:var(--ink-strong); margin:28px 0 12px; letter-spacing:-.01em; }
|
|
57
|
+
section.slide h3 { font-size:22px; font-weight:600; color:var(--ink-strong); margin:20px 0 8px; }
|
|
58
|
+
section.slide p { margin:0 0 14px; max-width:52em; }
|
|
59
|
+
section.slide ul, section.slide ol { margin:0 0 16px; padding-left:1.2em; }
|
|
60
|
+
section.slide li { margin:0 0 10px; }
|
|
61
|
+
section.slide li::marker { color:var(--ink); }
|
|
62
|
+
section.slide strong { color:var(--ink); font-weight:600; }
|
|
63
|
+
section.slide code { font-family:var(--mono); font-size:.84em; background:var(--surface-alt); padding:1px 6px; border-radius:4px; }
|
|
64
|
+
section.slide pre { background:var(--surface); border:1px solid var(--hairline); border-radius:8px; padding:16px 18px; overflow:auto; font-size:17px; }
|
|
65
|
+
section.slide pre code { background:none; padding:0; }
|
|
66
|
+
section.slide blockquote { margin:16px 0; padding:14px 18px; background:var(--surface-alt); border-left:3px solid var(--ink); border-radius:0 4px 4px 0; }
|
|
67
|
+
section.slide table { width:100%; border-collapse:collapse; font-size:18px; margin:12px 0; }
|
|
68
|
+
section.slide th, section.slide td { text-align:left; padding:8px 12px; border-bottom:1px solid var(--hairline); }
|
|
69
|
+
section.slide thead th { font-weight:700; color:var(--ink); border-bottom:2px solid var(--ink); }
|
|
70
|
+
section.slide figure { margin:16px 0; text-align:center; }
|
|
71
|
+
section.slide figure img { max-width:58%; max-height:42vh; width:auto; height:auto; object-fit:contain; border:1px solid var(--hairline); border-radius:6px; padding:8px; }
|
|
72
|
+
.slide-foot { margin-top:auto; padding-top:16px; font-size:13px; color:var(--faint); display:flex; justify-content:space-between; align-items:center; }
|
|
73
|
+
.slide-foot b { color:var(--ink); font-weight:600; }
|
|
74
|
+
@media print {
|
|
75
|
+
body { background:var(--paper); }
|
|
76
|
+
.deck { gap:0; padding:0; }
|
|
77
|
+
section.slide { box-shadow:none; border:none; border-radius:0; page-break-after:always; width:100%; height:100vh; }
|
|
78
|
+
}
|
|
79
|
+
</style>
|
|
80
|
+
</head>
|
|
81
|
+
<body>
|
|
82
|
+
<div class="deck">
|
|
83
|
+
$if(title)$
|
|
84
|
+
<section class="slide title-slide">
|
|
85
|
+
$if(artifactType)$<div class="meta">$artifactType$$if(docId)$ <span class="sep">·</span> $docId$$endif$$if(version)$ <span class="sep">·</span> v$version$$endif$</div>$endif$
|
|
86
|
+
<h1>$title$</h1>
|
|
87
|
+
$if(subtitle)$<p class="subtitle">$subtitle$</p>$endif$
|
|
88
|
+
$if(owner)$<p class="meta">$owner$$if(date)$ <span class="sep">·</span> $date$$endif$$if(status)$ <span class="sep">·</span> $status$$endif$</p>$endif$
|
|
89
|
+
<div class="slide-foot"><span><b>Construct</b>$if(classification)$ · $classification$$endif$</span></div>
|
|
90
|
+
</section>
|
|
91
|
+
$endif$
|
|
92
|
+
$body$
|
|
93
|
+
</div>
|
|
94
|
+
</body>
|
|
95
|
+
</html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* templates/distribution/construct-pdf.typ — Construct distribution PDF.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import "construct-brand.typ": *
|
|
6
|
+
|
|
7
|
+
#show: construct-theme
|
|
8
|
+
|
|
9
|
+
#set page(
|
|
10
|
+
paper: "a4",
|
|
11
|
+
margin: (x: 2cm, top: 1.8cm, bottom: 2.2cm),
|
|
12
|
+
numbering: "1",
|
|
13
|
+
header: construct-running-header(
|
|
14
|
+
"$if(title)$$title$$endif$",
|
|
15
|
+
doc-id: "$if(docId)$$docId$$endif$",
|
|
16
|
+
version: "$if(version)$$version$$endif$",
|
|
17
|
+
),
|
|
18
|
+
footer: construct-running-footer(
|
|
19
|
+
"Construct brief",
|
|
20
|
+
classification: "$if(classification)$$classification$$endif$",
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
$if(title)$
|
|
25
|
+
#construct-masthead(
|
|
26
|
+
"$title$",
|
|
27
|
+
"$if(subtitle)$$subtitle$$endif$",
|
|
28
|
+
"$if(status)$$status$$endif$",
|
|
29
|
+
"$if(owner)$$owner$$endif$",
|
|
30
|
+
"$if(date)$$date$$endif$",
|
|
31
|
+
"$if(artifactType)$$artifactType$$endif$",
|
|
32
|
+
version: "$if(version)$$version$$endif$",
|
|
33
|
+
doc-id: "$if(docId)$$docId$$endif$",
|
|
34
|
+
classification: "$if(classification)$$classification$$endif$",
|
|
35
|
+
)
|
|
36
|
+
$endif$
|
|
37
|
+
|
|
38
|
+
$body$
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* templates/distribution/construct-prd.typ — Construct distribution PDF.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import "construct-brand.typ": *
|
|
6
|
+
|
|
7
|
+
#show: construct-theme
|
|
8
|
+
|
|
9
|
+
#set page(
|
|
10
|
+
paper: "a4",
|
|
11
|
+
margin: (x: 2cm, top: 1.8cm, bottom: 2.2cm),
|
|
12
|
+
numbering: "1",
|
|
13
|
+
header: construct-running-header(
|
|
14
|
+
"$if(title)$$title$$endif$",
|
|
15
|
+
doc-id: "$if(docId)$$docId$$endif$",
|
|
16
|
+
version: "$if(version)$$version$$endif$",
|
|
17
|
+
),
|
|
18
|
+
footer: construct-running-footer(
|
|
19
|
+
"Editorial brief",
|
|
20
|
+
classification: "$if(classification)$$classification$$endif$",
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
$if(title)$
|
|
25
|
+
#construct-masthead(
|
|
26
|
+
"$title$",
|
|
27
|
+
"$if(subtitle)$$subtitle$$endif$",
|
|
28
|
+
"$if(status)$$status$$endif$",
|
|
29
|
+
"$if(owner)$$owner$$endif$",
|
|
30
|
+
"$if(date)$$date$$endif$",
|
|
31
|
+
"$if(artifactType)$$artifactType$$endif$",
|
|
32
|
+
version: "$if(version)$$version$$endif$",
|
|
33
|
+
doc-id: "$if(docId)$$docId$$endif$",
|
|
34
|
+
classification: "$if(classification)$$classification$$endif$",
|
|
35
|
+
)
|
|
36
|
+
$endif$
|
|
37
|
+
|
|
38
|
+
$body$
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* templates/distribution/construct-research.typ — Construct distribution PDF.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#import "construct-brand.typ": *
|
|
6
|
+
|
|
7
|
+
#show: construct-theme
|
|
8
|
+
|
|
9
|
+
#set page(
|
|
10
|
+
paper: "a4",
|
|
11
|
+
margin: (x: 1.85cm, top: 1.75cm, bottom: 2.1cm),
|
|
12
|
+
numbering: "1",
|
|
13
|
+
header: construct-running-header(
|
|
14
|
+
"$if(title)$$title$$endif$",
|
|
15
|
+
doc-id: "$if(docId)$$docId$$endif$",
|
|
16
|
+
version: "$if(version)$$version$$endif$",
|
|
17
|
+
),
|
|
18
|
+
footer: construct-running-footer(
|
|
19
|
+
"Research analytics",
|
|
20
|
+
classification: "$if(classification)$$classification$$endif$",
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
$if(title)$
|
|
25
|
+
#construct-masthead(
|
|
26
|
+
"$title$",
|
|
27
|
+
"$if(subtitle)$$subtitle$$endif$",
|
|
28
|
+
"$if(status)$$status$$endif$",
|
|
29
|
+
"$if(owner)$$owner$$endif$",
|
|
30
|
+
"$if(date)$$date$$endif$",
|
|
31
|
+
"$if(artifactType)$$artifactType$$endif$",
|
|
32
|
+
version: "$if(version)$$version$$endif$",
|
|
33
|
+
doc-id: "$if(docId)$$docId$$endif$",
|
|
34
|
+
classification: "$if(classification)$$classification$$endif$",
|
|
35
|
+
)
|
|
36
|
+
$endif$
|
|
37
|
+
|
|
38
|
+
$body$
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
templates/distribution/construct-web.html — Construct branded standalone HTML
|
|
3
|
+
template for `construct export --to=html`. Monochrome design mirroring the PDF
|
|
4
|
+
brand (construct-brand.typ): Space Grotesk webfont, masthead from frontmatter metadata,
|
|
5
|
+
bold-header hairline tables, callout blockquotes, framed figures. Pandoc fills
|
|
6
|
+
$title$/$subtitle$/$status$/$owner$/$date$/$artifactType$/$version$/$docId$/
|
|
7
|
+
$classification$ and $body$; export runs with --embed-resources so diagrams and
|
|
8
|
+
fonts inline into a single portable file.
|
|
9
|
+
-->
|
|
10
|
+
<!DOCTYPE html>
|
|
11
|
+
<html lang="en">
|
|
12
|
+
<head>
|
|
13
|
+
<meta charset="utf-8">
|
|
14
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
15
|
+
<title>$if(title)$$title$$else$Construct document$endif$</title>
|
|
16
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
17
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
18
|
+
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
19
|
+
<style>
|
|
20
|
+
:root {
|
|
21
|
+
--ink:#0a0c10; --ink-strong:#16191f; --ink-body:#23272e; --muted:#565c66; --faint:#9499a2;
|
|
22
|
+
--hairline:#e3e4e8; --hairline-strong:#cdd0d6; --surface:#fafafa; --surface-alt:#f3f4f6; --paper:#ffffff;
|
|
23
|
+
--sans:'Space Grotesk',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
|
|
24
|
+
--mono:'JetBrains Mono',ui-monospace,'SF Mono',Menlo,monospace;
|
|
25
|
+
}
|
|
26
|
+
* { box-sizing:border-box; }
|
|
27
|
+
html { -webkit-text-size-adjust:100%; }
|
|
28
|
+
body { margin:0; background:var(--paper); color:var(--ink-body); font-family:var(--sans); font-size:16px; line-height:1.62; -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility; }
|
|
29
|
+
.doc { max-width:760px; margin:0 auto; padding:64px 28px 120px; }
|
|
30
|
+
|
|
31
|
+
.masthead { margin-bottom:8px; }
|
|
32
|
+
.chips { font-size:12px; font-weight:700; letter-spacing:.08em; color:var(--ink); text-transform:uppercase; margin-bottom:14px; }
|
|
33
|
+
.chips .sep { color:var(--faint); font-weight:400; }
|
|
34
|
+
.masthead .title { font-size:38px; line-height:1.08; letter-spacing:-.022em; font-weight:600; color:var(--ink); margin:0; }
|
|
35
|
+
.masthead .subtitle { font-size:18px; color:var(--muted); margin:12px 0 0; letter-spacing:-.005em; }
|
|
36
|
+
.byline { display:flex; align-items:center; gap:10px; margin-top:20px; font-size:14px; color:var(--muted); }
|
|
37
|
+
.byline .sep { color:var(--faint); }
|
|
38
|
+
.pill { font-size:11px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; padding:3px 8px; border-radius:4px; border:1px solid var(--hairline-strong); color:var(--muted); }
|
|
39
|
+
.rule { position:relative; height:1px; background:var(--hairline); margin:24px 0 6px; }
|
|
40
|
+
.rule::before { content:""; position:absolute; left:0; top:-1px; width:46px; height:3px; background:var(--ink); }
|
|
41
|
+
|
|
42
|
+
h1,h2,h3,h4 { font-family:var(--sans); }
|
|
43
|
+
h2 { font-size:24px; font-weight:600; letter-spacing:-.015em; color:var(--ink); margin:54px 0 4px; }
|
|
44
|
+
h2::after { content:""; display:block; width:26px; height:2px; background:var(--ink); margin-top:10px; }
|
|
45
|
+
h3 { font-size:18px; font-weight:600; color:var(--ink-strong); margin:34px 0 8px; }
|
|
46
|
+
h4 { font-size:13px; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--muted); margin:28px 0 8px; }
|
|
47
|
+
p { margin:0 0 16px; }
|
|
48
|
+
strong { color:var(--ink); font-weight:600; }
|
|
49
|
+
em { font-style:italic; }
|
|
50
|
+
a { color:var(--ink); text-decoration:underline; text-decoration-color:var(--hairline-strong); text-underline-offset:2px; }
|
|
51
|
+
a:hover { text-decoration-color:var(--ink); }
|
|
52
|
+
ul,ol { padding-left:22px; margin:0 0 18px; }
|
|
53
|
+
li { margin:0 0 9px; }
|
|
54
|
+
li::marker { color:var(--ink); }
|
|
55
|
+
|
|
56
|
+
code { font-family:var(--mono); font-size:.86em; background:var(--surface-alt); padding:1px 5px; border-radius:4px; color:var(--ink-strong); }
|
|
57
|
+
pre { background:var(--surface); border:1px solid var(--hairline); border-radius:8px; padding:14px 16px; overflow:auto; }
|
|
58
|
+
pre code { background:none; padding:0; }
|
|
59
|
+
|
|
60
|
+
blockquote { margin:20px 0; padding:14px 18px; background:var(--surface-alt); border-left:3px solid var(--ink); border-radius:0 4px 4px 0; color:var(--ink-body); }
|
|
61
|
+
blockquote p:last-child { margin:0; }
|
|
62
|
+
|
|
63
|
+
table { width:100%; border-collapse:collapse; margin:20px 0; font-size:15px; }
|
|
64
|
+
th,td { text-align:left; padding:9px 12px; border-bottom:1px solid var(--hairline); vertical-align:top; }
|
|
65
|
+
thead th { font-weight:700; color:var(--ink); border-bottom:2px solid var(--ink); }
|
|
66
|
+
tbody tr td:first-child { font-weight:600; color:var(--ink-strong); }
|
|
67
|
+
|
|
68
|
+
figure { margin:26px 0; text-align:center; }
|
|
69
|
+
figure img { max-width:58%; max-height:2.35in; width:auto; height:auto; object-fit:contain; border:1px solid var(--hairline); border-radius:6px; padding:8px; background:var(--paper); }
|
|
70
|
+
figcaption { font-size:13px; color:var(--muted); margin-top:8px; }
|
|
71
|
+
img { max-width:100%; }
|
|
72
|
+
|
|
73
|
+
.doc-foot { margin-top:64px; padding-top:16px; border-top:1px solid var(--hairline); font-size:12px; color:var(--faint); text-align:center; }
|
|
74
|
+
.doc-foot b { color:var(--ink); font-weight:600; }
|
|
75
|
+
</style>
|
|
76
|
+
</head>
|
|
77
|
+
<body>
|
|
78
|
+
<main class="doc">
|
|
79
|
+
$if(title)$
|
|
80
|
+
<header class="masthead">
|
|
81
|
+
$if(artifactType)$ <div class="chips">$artifactType$$if(docId)$ <span class="sep">·</span> $docId$$endif$$if(version)$ <span class="sep">·</span> v$version$$endif$$if(classification)$ <span class="sep">·</span> $classification$$endif$</div>
|
|
82
|
+
$endif$ <div class="title">$title$</div>
|
|
83
|
+
$if(subtitle)$ <p class="subtitle">$subtitle$</p>
|
|
84
|
+
$endif$ <div class="byline">$if(status)$<span class="pill">$status$</span>$endif$$if(owner)$<span>$owner$</span>$endif$$if(date)$<span class="sep">·</span><span>$date$</span>$endif$</div>
|
|
85
|
+
</header>
|
|
86
|
+
<div class="rule"></div>
|
|
87
|
+
$endif$
|
|
88
|
+
$body$
|
|
89
|
+
<div class="doc-foot"><b>Construct</b>$if(classification)$ · $classification$$endif$</div>
|
|
90
|
+
</main>
|
|
91
|
+
</body>
|
|
92
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Distribution PDF fonts
|
|
2
|
+
|
|
3
|
+
Bundled for offline Typst export via `--font-path`. Family names must match Typst discovery (`Space Grotesk`, `JetBrains Mono`).
|
|
4
|
+
|
|
5
|
+
**Active `--font-path` faces** (only these belong at this directory root):
|
|
6
|
+
|
|
7
|
+
| File | Role | License |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| SpaceGrotesk-Variable.ttf | Body, masthead, headings, deck/PPTX embed (weight axis 300–700) | [OFL-1.1](https://github.com/floriankarsten/space-grotesk/blob/master/OFL.txt) (Florian Karsten) |
|
|
10
|
+
| JetBrainsMono-*.ttf | Code, IDs, monospace (Regular/Medium/SemiBold) | [OFL-1.1](https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt) (JetBrains) |
|
|
11
|
+
|
|
12
|
+
**Not active** — kept for reference or diagram labels only; do not copy back to the root unless re-promoting:
|
|
13
|
+
|
|
14
|
+
| Location | Contents |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `legacy/` | Inter, Source Serif, older IBM Plex Mono copies |
|
|
17
|
+
| `PlusJakartaSans-*.ttf`, `Geist-*.ttf`, `GeistMono-*.ttf`, `IBMPlexMono-Regular.otf` | Pre-Space-Grotesk sans/mono (retired from brand) |
|
|
18
|
+
| `handwritten/Caveat.ttf` | Mermaid/D2 hand-drawn diagram labels |
|
|
19
|
+
|
|
20
|
+
Refresh the brand faces from upstream:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
DIR=templates/distribution/fonts
|
|
24
|
+
curl -fsSL -o "$DIR/SpaceGrotesk-Variable.ttf" \
|
|
25
|
+
"https://github.com/google/fonts/raw/main/ofl/spacegrotesk/SpaceGrotesk%5Bwght%5D.ttf"
|
|
26
|
+
JB=https://github.com/JetBrains/JetBrainsMono/raw/master/fonts/ttf
|
|
27
|
+
for f in JetBrainsMono-Regular.ttf JetBrainsMono-Medium.ttf JetBrainsMono-SemiBold.ttf; do
|
|
28
|
+
curl -fsSL -o "$DIR/$f" "$JB/$f"
|
|
29
|
+
done
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Space Grotesk ships as a single weight-axis variable TTF; Typst interpolates the 400/500/600/700 weights the brand references. Export passes `--font-path`, `--ignore-system-fonts`, and `--ignore-embedded-fonts` so Typst does not fall back to Libertinus Serif or DejaVu Sans Mono.
|
|
33
|
+
|
|
34
|
+
PPTX export embeds the Space Grotesk and JetBrains Mono TTF files via optional `pptx-embed-fonts` when `pptxgenjs` is installed.
|
|
35
|
+
|
|
36
|
+
Deck/PPTX **preview artifacts** are not stored here — run `npm run examples:deck` to write gitignored outputs under `.tmp/distribution-examples/`.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-activity"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" />
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-alert-triangle"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" />
|
|
15
|
+
<path d="M12 9v4" />
|
|
16
|
+
<path d="M12 17h.01" />
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-book-open"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 7v14" />
|
|
15
|
+
<path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-bot"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 8V4H8" />
|
|
15
|
+
<rect width="16" height="12" x="4" y="8" rx="2" />
|
|
16
|
+
<path d="M2 14h2" />
|
|
17
|
+
<path d="M20 14h2" />
|
|
18
|
+
<path d="M15 13v2" />
|
|
19
|
+
<path d="M9 13v2" />
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-brain"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 18V5" />
|
|
15
|
+
<path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4" />
|
|
16
|
+
<path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5" />
|
|
17
|
+
<path d="M17.997 5.125a4 4 0 0 1 2.526 5.77" />
|
|
18
|
+
<path d="M18 18a4 4 0 0 0 2-7.464" />
|
|
19
|
+
<path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517" />
|
|
20
|
+
<path d="M6 18a4 4 0 0 1-2-7.464" />
|
|
21
|
+
<path d="M6.003 5.125a4 4 0 0 0-2.526 5.77" />
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-circle-check"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<circle cx="12" cy="12" r="10" />
|
|
15
|
+
<path d="m9 12 2 2 4-4" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-clipboard-check"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<rect width="8" height="4" x="8" y="2" rx="1" ry="1" />
|
|
15
|
+
<path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" />
|
|
16
|
+
<path d="m9 14 2 2 4-4" />
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-cpu"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M12 20v2" />
|
|
15
|
+
<path d="M12 2v2" />
|
|
16
|
+
<path d="M17 20v2" />
|
|
17
|
+
<path d="M17 2v2" />
|
|
18
|
+
<path d="M2 12h2" />
|
|
19
|
+
<path d="M2 17h2" />
|
|
20
|
+
<path d="M2 7h2" />
|
|
21
|
+
<path d="M20 12h2" />
|
|
22
|
+
<path d="M20 17h2" />
|
|
23
|
+
<path d="M20 7h2" />
|
|
24
|
+
<path d="M7 20v2" />
|
|
25
|
+
<path d="M7 2v2" />
|
|
26
|
+
<rect x="4" y="4" width="16" height="16" rx="2" />
|
|
27
|
+
<rect x="8" y="8" width="8" height="8" rx="1" />
|
|
28
|
+
</svg>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-database"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
|
15
|
+
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
|
16
|
+
<path d="M3 12A9 3 0 0 0 21 12" />
|
|
17
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-eye"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" />
|
|
15
|
+
<circle cx="12" cy="12" r="3" />
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-file-text"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" />
|
|
15
|
+
<path d="M14 2v5a1 1 0 0 0 1 1h5" />
|
|
16
|
+
<path d="M10 9H8" />
|
|
17
|
+
<path d="M16 13H8" />
|
|
18
|
+
<path d="M16 17H8" />
|
|
19
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- @license lucide-static v1.21.0 - ISC -->
|
|
2
|
+
<svg
|
|
3
|
+
class="lucide lucide-gauge"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="24"
|
|
6
|
+
height="24"
|
|
7
|
+
viewBox="0 0 24 24"
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="#0a0c10"
|
|
10
|
+
stroke-width="2"
|
|
11
|
+
stroke-linecap="round"
|
|
12
|
+
stroke-linejoin="round"
|
|
13
|
+
>
|
|
14
|
+
<path d="m12 14 4-4" />
|
|
15
|
+
<path d="M3.34 19a10 10 0 1 1 17.32 0" />
|
|
16
|
+
</svg>
|