mixdog 1.0.11 → 1.1.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/NOTICE.md +20 -0
- package/README.md +75 -181
- package/package.json +9 -4
- package/scripts/build-shipped-history.mjs +131 -0
- package/scripts/check-changelog-locales.mjs +203 -0
- package/scripts/computer-task-cost-report.mjs +0 -4
- package/scripts/lib/run-node-tests.mjs +235 -13
- package/scripts/lib/test-failure-records.mjs +5 -0
- package/scripts/lib/test-failure-summary.mjs +9 -3
- package/scripts/lib/test-spawn-ledger.mjs +19 -0
- package/scripts/prune-embedding-runtime.mjs +9 -5
- package/scripts/sync-client-version-floors.mjs +100 -0
- package/scripts/test-direct.mjs +16 -1
- package/src/agents/advisor/AGENT.md +38 -0
- package/src/agents/advisor/agent.json +6 -0
- package/src/agents/reviewer/AGENT.md +5 -2
- package/src/agents/reviewer/agent.json +1 -1
- package/src/defaults/shipped-history.json +381 -0
- package/src/defaults/skills/docx/SKILL.md +7 -5
- package/src/defaults/skills/docx/references/html.md +9 -8
- package/src/defaults/skills/docx/references/native-authoring.md +28 -18
- package/src/defaults/skills/goal-management/SKILL.md +11 -5
- package/src/defaults/skills/local-provider/SKILL.md +2 -1
- package/src/defaults/skills/pdf/SKILL.md +9 -6
- package/src/defaults/skills/pdf/references/html.md +17 -12
- package/src/defaults/skills/pptx/SKILL.md +8 -6
- package/src/defaults/skills/pptx/references/composition.md +4 -4
- package/src/defaults/skills/pptx/references/concepts.md +168 -0
- package/src/defaults/skills/pptx/references/direction.md +5 -4
- package/src/defaults/skills/pptx/references/html.md +6 -29
- package/src/defaults/skills/pptx/references/kit-index.md +11 -3
- package/src/defaults/skills/pptx/references/kit.md +27 -5
- package/src/defaults/skills/pptx/references/review.md +6 -5
- package/src/defaults/skills/setup/SKILL.md +5 -8
- package/src/defaults/skills/setup/references/actions.md +61 -31
- package/src/defaults/skills/setup/references/surfaces.md +12 -10
- package/src/defaults/skills/xlsx/SKILL.md +8 -6
- package/src/defaults/skills/xlsx/references/html.md +8 -4
- package/src/defaults/skills/xlsx/references/model-conventions.md +2 -0
- package/src/defaults/skills/xlsx/references/report-design.md +32 -16
- package/src/help.mjs +1 -1
- package/src/lib/rules-builder.cjs +1 -1
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +3 -1
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +4 -0
- package/src/runtime/agent/orchestrator/config-presets.d.mts +1 -0
- package/src/runtime/agent/orchestrator/config-presets.mjs +44 -0
- package/src/runtime/agent/orchestrator/config-providers-merge.mjs +9 -1
- package/src/runtime/agent/orchestrator/config.mjs +102 -21
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +90 -26
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +44 -14
- package/src/runtime/agent/orchestrator/providers/anthropic-midstream-recovery.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +5 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +79 -8
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +29 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +10 -1
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +11 -2
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +9 -5
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +30 -22
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/auto-effort.mjs +28 -10
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +14 -72
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +19 -3
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +20 -10
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-sink.mjs +36 -9
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +11 -17
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +388 -0
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +92 -109
- package/src/runtime/agent/orchestrator/providers/custom-reasoning.mjs +107 -0
- package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +138 -30
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +32 -15
- package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +39 -5
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +9 -2
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +6 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +10 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/lib/note-error-usage.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +57 -0
- package/src/runtime/agent/orchestrator/providers/model-cache.mjs +12 -5
- package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +20 -15
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +14 -9
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +56 -11
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +28 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +27 -3
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +7 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +23 -8
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +26 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-state.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +34 -15
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +16 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +12 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +0 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +0 -19
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +12 -43
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +6 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +39 -9
- package/src/runtime/agent/orchestrator/providers/openai-oauth-catalog.mjs +31 -9
- package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +13 -38
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +40 -9
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +7 -39
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +28 -101
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +8 -4
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +3 -6
- package/src/runtime/agent/orchestrator/providers/openai-service-tier.mjs +19 -0
- package/src/runtime/agent/orchestrator/providers/openai-startup-prewarm.mjs +5 -195
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +9 -18
- package/src/runtime/agent/orchestrator/providers/openai-ws-events.mjs +4 -66
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +11 -5
- package/src/runtime/agent/orchestrator/providers/openai-ws-send/acquire-attempt.mjs +3 -15
- package/src/runtime/agent/orchestrator/providers/openai-ws-send/attempt-request.mjs +6 -56
- package/src/runtime/agent/orchestrator/providers/openai-ws-send/send-context.mjs +1 -19
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/attempt-context.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/handshake-failure.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/policy.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/stream-failure-stamps.mjs +0 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/stream-failure.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts.mjs +3 -5
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-outcome.mjs +10 -89
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-span.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-trace.mjs +0 -6
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +34 -11
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +0 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-watchdogs.mjs +3 -7
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +44 -19
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +40 -12
- package/src/runtime/agent/orchestrator/providers/quota-reading.mjs +70 -0
- package/src/runtime/agent/orchestrator/providers/registry.mjs +38 -3
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/retry-midstream.mjs +11 -0
- package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +31 -41
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +5 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +0 -17
- package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +0 -3
- package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +0 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-text.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +1 -2
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +18 -4
- package/src/runtime/agent/orchestrator/runtime-core/model-capabilities.mjs +8 -1
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +7 -1
- package/src/runtime/agent/orchestrator/runtime-core/session-route-policy.mjs +16 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +2 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +6 -2
- package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +7 -7
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/compact/observation-supersession.mjs +45 -2
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +5 -3
- package/src/runtime/agent/orchestrator/session/eager-dispatch/entry.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +6 -13
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +114 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/loop/usage.mjs +5 -9
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +51 -18
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +7 -4
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +0 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +6 -9
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +63 -3
- package/src/runtime/agent/orchestrator/session/manager/session-owner-liveness.mjs +10 -28
- package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +13 -0
- package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +10 -19
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +1 -3
- package/src/runtime/agent/orchestrator/stall-policy.mjs +0 -1
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +18 -8
- package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +19 -20
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +6 -11
- package/src/runtime/agent/orchestrator/tools/builtin/file-version-test-helpers.mjs +11 -0
- package/src/runtime/agent/orchestrator/tools/builtin/file-version.mjs +13 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-single-file-rescue.mjs +8 -5
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +25 -12
- package/src/runtime/agent/orchestrator/tools/builtin/raw-content-publication.mjs +17 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +136 -76
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +15 -17
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +11 -10
- package/src/runtime/agent/orchestrator/tools/builtin/read-source-windows.mjs +5 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +30 -16
- package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +4 -11
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +7 -3
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-validation.mjs +16 -19
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +14 -4
- package/src/runtime/agent/orchestrator/tools/patch/apply-patch/codex-batch.mjs +58 -8
- package/src/runtime/agent/orchestrator/tools/patch/content-guard.mjs +47 -0
- package/src/runtime/agent/orchestrator/tools/patch/delete-quarantine.mjs +155 -0
- package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-proofs.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/patch/dispatch/native-snapshots.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +19 -16
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +13 -44
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/patch/post-patch-excerpts.mjs +5 -2
- package/src/runtime/agent/orchestrator/tools/patch/replay-capture.mjs +47 -7
- package/src/runtime/agent/orchestrator/tools/patch/rollback-state.mjs +72 -8
- package/src/runtime/agent/orchestrator/tools/patch/section-coalesce.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/patch/sequence/run.mjs +9 -1
- package/src/runtime/agent/orchestrator/tools/patch/sequence/units.mjs +9 -1
- package/src/runtime/agent/orchestrator/tools/patch/sequence.mjs +6 -6
- package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +16 -4
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +35 -14
- package/src/runtime/agent/orchestrator/tools/patch/wave.mjs +42 -4
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +2 -0
- package/src/runtime/agent/orchestrator/tools/shell-codepage.mjs +296 -0
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +75 -24
- package/src/runtime/browser-bridge/tool-defs.mjs +1 -0
- package/src/runtime/channels/lib/config.mjs +3 -8
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +7 -3
- package/src/{tui → runtime/channels}/lib/voice-setup.mjs +38 -22
- package/src/runtime/channels/lib/webhook/request-handler.mjs +42 -8
- package/src/runtime/computer-bridge/actions.mjs +2 -0
- package/src/runtime/effort-judge/judge-client.mjs +125 -25
- package/src/runtime/effort-judge/judge-input.mjs +96 -0
- package/src/runtime/effort-judge/judge-worker.mjs +52 -20
- package/src/runtime/effort-judge/model-install.mjs +74 -0
- package/src/runtime/effort-judge/model-manifest.json +21 -0
- package/src/runtime/effort-judge/previous-human-request.mjs +162 -0
- package/src/runtime/effort-judge/verified-context-input.mjs +10 -0
- package/src/runtime/github/tool.mjs +214 -14
- package/src/runtime/local-provider/context-settings.mjs +15 -6
- package/src/runtime/local-provider/gguf-header.mjs +13 -5
- package/src/runtime/local-provider/hugging-face.mjs +27 -5
- package/src/runtime/local-provider/install-progress.mjs +7 -0
- package/src/runtime/local-provider/managed-runtime.mjs +2 -1
- package/src/runtime/local-provider/model-maintenance.mjs +15 -6
- package/src/runtime/local-provider/resumable-installations.mjs +40 -1
- package/src/runtime/local-provider/server.mjs +2 -0
- package/src/runtime/memory/lib/embedding-provider.mjs +12 -0
- package/src/runtime/memory/lib/http-router/session-routes.mjs +2 -1
- package/src/runtime/memory/lib/memory-config-flags.mjs +3 -2
- package/src/runtime/memory/lib/memory-embed.mjs +5 -0
- package/src/runtime/memory/lib/pg/process.mjs +57 -5
- package/src/runtime/office/README.md +13 -7
- package/src/runtime/office/authoring/docx-html-build.mjs +4 -4
- package/src/runtime/office/authoring/docx-html-measure.mjs +60 -0
- package/src/runtime/office/authoring/pdf-author-action.mjs +6 -1
- package/src/runtime/office/authoring/pptx-brief.mjs +40 -1
- package/src/runtime/office/authoring/pptx-html-build.mjs +1 -1
- package/src/runtime/office/authoring/pptx-html-measure.mjs +1 -1
- package/src/runtime/office/bench/deck-bench.mjs +1 -1
- package/src/runtime/office/com/office-com-host.ps1 +8 -0
- package/src/runtime/office/core/office-actions-render.mjs +2 -0
- package/src/runtime/office/design/design-art-direction.mjs +10 -2
- package/src/runtime/office/design/design-discipline.mjs +4 -5
- package/src/runtime/office/design/design-tokens.mjs +20 -1
- package/src/runtime/office/design/docx/design-docx/front-matter.mjs +7 -4
- package/src/runtime/office/design/docx/design-docx/section.mjs +3 -1
- package/src/runtime/office/design/docx/design-docx/writer.mjs +1 -0
- package/src/runtime/office/design/docx/design-docx-components.mjs +19 -15
- package/src/runtime/office/design/docx/design-docx.mjs +5 -6
- package/src/runtime/office/design/docx/document-typography.mjs +20 -6
- package/src/runtime/office/design/xlsx/design-xlsx.mjs +9 -2
- package/src/runtime/office/pdf/document-preview.mjs +133 -12
- package/src/runtime/office/pdf/pdf-writer.mjs +56 -22
- package/src/runtime/office/portable/portable-snapshot-docx.mjs +46 -3
- package/src/runtime/office/portable/portable-snapshot-shared.mjs +27 -1
- package/src/runtime/office/quality/assurance-rendered.mjs +21 -5
- package/src/runtime/office/quality/assurance-structure-docx.mjs +41 -9
- package/src/runtime/office/quality/design-aesthetics.mjs +4 -2
- package/src/runtime/office/quality/design-deck-diversity.mjs +15 -3
- package/src/runtime/office/quality/design-review.mjs +13 -5
- package/src/runtime/office/quality/document-brief.mjs +8 -2
- package/src/runtime/office/quality/forced-break-pages.mjs +203 -0
- package/src/runtime/office/quality/pptx-deck-rubric.mjs +21 -3
- package/src/runtime/office/quality/quality-pipeline.mjs +14 -17
- package/src/runtime/session-search/session-search-db.mjs +183 -0
- package/src/runtime/session-search/session-search-ingest.mjs +106 -0
- package/src/runtime/shared/agent-route-config.mjs +50 -2
- package/src/runtime/shared/bounded-file-read.mjs +166 -0
- package/src/runtime/shared/builtin-grandfathering.mjs +37 -0
- package/src/runtime/shared/config.mjs +24 -4
- package/src/runtime/shared/defaults-separation.mjs +263 -0
- package/src/runtime/shared/error-presentation.mjs +8 -1
- package/src/runtime/shared/llm/anthropic-effort.mjs +4 -0
- package/src/runtime/shared/llm/cost.mjs +4 -2
- package/src/runtime/shared/llm/model-catalog-projection.mjs +1 -1
- package/src/runtime/shared/llm/model-catalog.mjs +25 -0
- package/src/runtime/shared/llm/reasoning-usage.mjs +1 -2
- package/src/runtime/shared/llm/usage-accounting.mjs +14 -4
- package/src/runtime/shared/llm/usage-context.mjs +11 -1
- package/src/runtime/shared/llm/usage-ledger-repair.mjs +3 -1
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +105 -1
- package/src/runtime/shared/llm/usage-ledger-worker.mjs +2 -1
- package/src/runtime/shared/llm/usage-ledger.mjs +72 -5
- package/src/runtime/shared/onnx-runtime-support.mjs +6 -0
- package/src/runtime/shared/orchestration.mjs +14 -6
- package/src/runtime/shared/pristine-execution-contract.json +7 -2
- package/src/runtime/shared/projects.mjs +65 -48
- package/src/runtime/shared/provider-accounts.mjs +47 -6
- package/src/runtime/shared/quota-resume-store.mjs +255 -0
- package/src/runtime/shared/shipped-definitions.mjs +275 -0
- package/src/runtime/shared/tool-card-model/agent-surface.mjs +30 -9
- package/src/runtime/shared/tool-card-model/aggregate-card.mjs +7 -3
- package/src/runtime/shared/tool-card-model/background-task.mjs +17 -1
- package/src/runtime/shared/tool-card-model/card-detail.mjs +10 -4
- package/src/runtime/shared/tool-card-model/card-header.mjs +10 -4
- package/src/runtime/shared/tool-card-model/card-status.mjs +22 -5
- package/src/runtime/shared/tool-card-model/displayed-result.mjs +6 -1
- package/src/runtime/shared/tool-card-model/media-result.mjs +53 -0
- package/src/runtime/shared/tool-card-model/terminal-status.mjs +17 -1
- package/src/runtime/shared/tool-card-model.golden-cases.mjs +1 -1
- package/src/runtime/shared/tool-card-model.golden.json +75 -66
- package/src/runtime/shared/tool-card-model.mjs +1 -0
- package/src/runtime/shared/tool-output-limit.mjs +3 -0
- package/src/runtime/shared/tool-primitives.mjs +24 -18
- package/src/runtime/shared/tool-result-summary.mjs +128 -17
- package/src/runtime/shared/tool-status.mjs +20 -7
- package/src/runtime/shared/tool-surface.mjs +105 -28
- package/src/runtime/shared/tool-work-units.mjs +221 -18
- package/src/runtime/shared/transcript-metadata.mjs +2 -0
- package/src/runtime/shared/turn-review-reply.mjs +2 -0
- package/src/runtime/shared/turn-snapshot.mjs +65 -6
- package/src/runtime/shared/turn-worktree-snapshot.mjs +202 -22
- package/src/runtime/shared/worker-requests.mjs +14 -2
- package/src/runtime/terminal-bridge/client.mjs +311 -0
- package/src/runtime/terminal-bridge/tool-defs.mjs +36 -0
- package/src/runtime/web-search/lib/ssrf-guard.mjs +12 -56
- package/src/runtime/web-search/tool-defs.mjs +2 -0
- package/src/session-runtime/boot/apis.mjs +30 -5
- package/src/session-runtime/boot/config.mjs +4 -0
- package/src/session-runtime/boot/facade.mjs +4 -1
- package/src/session-runtime/boot/infrastructure.mjs +21 -2
- package/src/session-runtime/boot/session.mjs +5 -5
- package/src/session-runtime/boot/tools.mjs +2 -0
- package/src/session-runtime/builtin-features.d.mts +1 -0
- package/src/session-runtime/channel-config-api.mjs +5 -0
- package/src/session-runtime/config-lifecycle/config-writers.mjs +3 -0
- package/src/session-runtime/config-lifecycle.mjs +31 -6
- package/src/session-runtime/goal-facade-api.mjs +4 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +15 -3
- package/src/session-runtime/lifecycle/inheritance.mjs +28 -6
- package/src/session-runtime/lifecycle/session-switch/context-switch.mjs +3 -0
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +7 -1
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +9 -0
- package/src/session-runtime/lifecycle/teardown/session-close.mjs +14 -2
- package/src/session-runtime/lifecycle/teardown.mjs +5 -0
- package/src/session-runtime/local-provider-settings.mjs +10 -0
- package/src/session-runtime/media-api.mjs +32 -22
- package/src/session-runtime/model-recency.mjs +14 -0
- package/src/session-runtime/model-route/route-persist.mjs +17 -2
- package/src/session-runtime/model-route/route-tuning.mjs +16 -5
- package/src/session-runtime/model-route/set-route.mjs +55 -22
- package/src/session-runtime/model-route/web-search-route.mjs +2 -2
- package/src/session-runtime/model-route-api.mjs +2 -1
- package/src/session-runtime/notification-bus.mjs +31 -6
- package/src/session-runtime/provider-auth/login.mjs +6 -0
- package/src/session-runtime/provider-models/catalog-load.mjs +3 -1
- package/src/session-runtime/provider-models/row-hydration.mjs +36 -10
- package/src/session-runtime/quick-model-rows/model-meta.mjs +26 -0
- package/src/session-runtime/quick-model-rows/provider-rows.mjs +40 -14
- package/src/session-runtime/resource-api.mjs +8 -1
- package/src/session-runtime/route-state.mjs +9 -0
- package/src/session-runtime/runtime-core.mjs +4 -0
- package/src/session-runtime/runtime-facade.mjs +20 -1
- package/src/session-runtime/runtime-feature-gates.mjs +2 -0
- package/src/session-runtime/runtime-review-api.mjs +12 -1
- package/src/session-runtime/services/agent-tool/helpers.mjs +14 -1
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +10 -15
- package/src/session-runtime/services/agent-tool/lead-worker-index/reap-timers.mjs +6 -1
- package/src/session-runtime/services/agent-tool/lead-worker-index.mjs +20 -2
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +14 -6
- package/src/session-runtime/services/agent-tool/spawn-preset.mjs +2 -0
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +12 -1
- package/src/session-runtime/services/agent-tool/worker-index.mjs +17 -1
- package/src/session-runtime/services/agent-tool.mjs +1 -0
- package/src/session-runtime/services/channel-admin.mjs +87 -13
- package/src/session-runtime/services/provider-admin.mjs +306 -66
- package/src/session-runtime/services/seeds.mjs +73 -142
- package/src/session-runtime/services/usage-dashboard-model.mjs +29 -0
- package/src/session-runtime/services/usage-dashboard.mjs +7 -0
- package/src/session-runtime/session-address.mjs +125 -0
- package/src/session-runtime/session-create.mjs +57 -2
- package/src/session-runtime/settings-api.mjs +1 -0
- package/src/session-runtime/settings-builtin-tools-api.mjs +15 -10
- package/src/session-runtime/settings-compaction-api.mjs +13 -0
- package/src/session-runtime/setup-tool/executor.mjs +93 -40
- package/src/session-runtime/setup-tool/extended-actions.mjs +64 -5
- package/src/session-runtime/setup-tool/settings-contract.mjs +46 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +14 -6
- package/src/session-runtime/tool-surface.mjs +16 -9
- package/src/session-runtime/turn/session-ops.mjs +3 -0
- package/src/session-runtime/turn/share-ops.mjs +4 -1
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +6 -0
- package/src/session-runtime/usage-stats-api.mjs +43 -3
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +31 -5
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +6 -2
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +27 -7
- package/src/standalone/daemon-boot-coordinator.mjs +10 -0
- package/src/standalone/daemon-desktop-runtime.mjs +1 -0
- package/src/standalone/daemon-drain-policy.mjs +9 -0
- package/src/standalone/daemon-stored-session-views.mjs +7 -8
- package/src/standalone/daemon.mjs +36 -8
- package/src/standalone/local-session-runtime.mjs +11 -0
- package/src/standalone/session-client.mjs +52 -7
- package/src/standalone/session-protocol.mjs +9 -0
- package/src/standalone/session-service/agent-tree/agent-child.mjs +2 -0
- package/src/standalone/session-service/entries/lifecycle.mjs +2 -0
- package/src/standalone/session-service/entries/session-loads.mjs +9 -0
- package/src/standalone/session-service/projection/revisions.mjs +28 -4
- package/src/standalone/session-service/projection.mjs +1 -0
- package/src/standalone/session-service/quota-resume.mjs +140 -0
- package/src/standalone/session-service/session-calls/session-action.mjs +2 -2
- package/src/standalone/session-service/session-calls.mjs +10 -2
- package/src/standalone/session-service/stored-reader.mjs +26 -1
- package/src/standalone/session-service.mjs +21 -0
- package/src/standalone/session-transport/routes.mjs +2 -0
- package/src/tui/app/doctor.mjs +7 -11
- package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +3 -5
- package/src/tui/app/model-picker/model-footer.mjs +2 -2
- package/src/tui/app/model-picker/route-selection/fast-parameters.mjs +21 -2
- package/src/tui/app/model-picker/route-selection.mjs +6 -1
- package/src/tui/app/settings-picker/settings-rows.mjs +4 -6
- package/src/tui/app/settings-picker/settings-toggles/store-toggles.mjs +1 -1
- package/src/tui/app/slash-commands.mjs +1 -1
- package/src/tui/app/slash-dispatch/route-commands.mjs +5 -3
- package/src/tui/app/transcript-row-estimate.mjs +17 -5
- package/src/tui/components/ContextPanel.jsx +5 -1
- package/src/tui/components/Spinner.jsx +34 -319
- package/src/tui/components/SpinnerByline.jsx +256 -0
- package/src/tui/components/tool-execution/aggregate-card.jsx +4 -2
- package/src/tui/components/tool-execution/text-format.mjs +1 -0
- package/src/tui/components/use-spinner-progress.mjs +113 -0
- package/src/tui/dist/index.mjs +15896 -14452
- package/src/tui/session/agent-job-feed/execution-delivery.mjs +13 -1
- package/src/tui/session/agent-job-feed/notification-router.mjs +3 -0
- package/src/tui/session/agent-job-feed/pending-resume.mjs +14 -1
- package/src/tui/session/agent-job-feed.mjs +4 -0
- package/src/tui/session/context-state.mjs +13 -1
- package/src/tui/session/initial-state.mjs +6 -0
- package/src/tui/session/quota-resume.mjs +263 -0
- package/src/tui/session/session-api/intake/abort.mjs +39 -35
- package/src/tui/session/session-api/intake/submission.mjs +13 -21
- package/src/tui/session/session-api/intake.mjs +3 -3
- package/src/tui/session/session-api/integrations.mjs +5 -1
- package/src/tui/session/session-api/lifecycle/dispose.mjs +1 -0
- package/src/tui/session/session-api/lifecycle/inheritance.mjs +2 -2
- package/src/tui/session/session-api/lifecycle/session-reset.mjs +4 -0
- package/src/tui/session/session-api/lifecycle.mjs +71 -2
- package/src/tui/session/session-api/media.mjs +2 -2
- package/src/tui/session/session-api/quota-resume.mjs +21 -0
- package/src/tui/session/session-api/routes.mjs +5 -2
- package/src/tui/session/session-api/settings.mjs +2 -0
- package/src/tui/session/session-api.mjs +2 -0
- package/src/tui/session/session-flow/auto-clear.mjs +14 -6
- package/src/tui/session/session-flow/drain.mjs +52 -5
- package/src/tui/session/session-flow/queue/take-entries.mjs +9 -4
- package/src/tui/session/session-flow/queue.mjs +4 -0
- package/src/tui/session/session-flow/steering.mjs +11 -0
- package/src/tui/session/session-flow.mjs +1 -0
- package/src/tui/session/tool-approval.mjs +7 -2
- package/src/tui/session/transcript-intake.mjs +1 -0
- package/src/tui/session/turn-tool-cards.mjs +4 -6
- package/src/tui/session/turn.mjs +40 -4
- package/src/vendor/statusline/bin/statusline-route.mjs +3 -2
- package/src/vendor/statusline/src/gateway/route-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-warmup.mjs +0 -165
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Design concepts
|
|
2
|
+
|
|
3
|
+
Optional inspiration for decks, Word documents, PDFs, and Excel report sheets. The model designs from the request and content; it does not have to select an entry here. These examples group palette, type, headings, tables, emphasis, charts, chrome, and density to illustrate possibilities, not to prescribe templates or acceptable styles.
|
|
4
|
+
|
|
5
|
+
Every palette formula, face menu, ratio, and treatment below is a reference example. Adapt, combine, or ignore it; no catalogue id, prescribed colour scheme, or difference from an unrelated document is required.
|
|
6
|
+
|
|
7
|
+
## 1. How to use the examples
|
|
8
|
+
- Start with what the reader needs to understand, decide, or fill in and how they will use the file.
|
|
9
|
+
- Preserve supplied templates, brand requirements, and the conventions of files being edited.
|
|
10
|
+
- `concept:` may describe a design intent in free text or be omitted; it is not a quality gate.
|
|
11
|
+
- Share facts and requested identity across a package, while adapting each format's structure to its job.
|
|
12
|
+
- Reuse a layout when it helps comparison or a series; vary it when the content needs a different reading path. Novelty alone is not a goal.
|
|
13
|
+
- If comparing directions resolves a real uncertainty, compare representative rendered pages for reader understanding, not catalogue membership.
|
|
14
|
+
- Names such as `ink`, `line`, and `accent` in recipes mean roles in the author's palette, not compulsory values from this file.
|
|
15
|
+
|
|
16
|
+
## 2. Palette roles and deriving them
|
|
17
|
+
Roles: `paper` (the page ground), `ink` (body and headings), `muted` (captions, labels, sources), `line` (rules and hairlines), `tint` (a quiet field behind a callout, band, or banded row), `accent` (the one colour with one job — the claim, the key figure, the subject's mark), and optionally `accent2` (a second voice with its own job: the alert, the comparison series, the second subject). Hex is six digits; in CSS `#`, in office operations without. Contrast: body ink on paper ≥ 4.5:1, `muted` ≥ 4.5:1 for text, accent as text ≥ 4.5:1 (`direction.md` §5).
|
|
18
|
+
|
|
19
|
+
Start from a **seed hue** (the subject, the brand, the mood), then pick a scheme — vary it between concepts and artifacts, do not always take the complement:
|
|
20
|
+
| Scheme | accent hue vs seed | Reads as | Fits |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| mono | the seed itself, one saturation step above the neutrals | calm, disciplined | quiet-minimal, letter-memo, formal-report |
|
|
23
|
+
| analogous | seed ± 20-40° | cohesive, warm or cool throughout | formal-report, technical-reference, data-dashboard |
|
|
24
|
+
| complement | seed + 180° | high contrast, one loud mark | keynote-statement, brand-campaign, editorial-magazine |
|
|
25
|
+
| split | seed + 150° and + 210° (accent and accent2) | lively, still ordered | data-dashboard, brand-campaign, dark-tech |
|
|
26
|
+
|
|
27
|
+
Derivation, with the seed hue h: `paper` = h at S 2-8%, L 97-100% (a dark concept: S 10-25%, L 5-10%); `ink` = h at S 15-30%, L 8-16% (dark concept: L 90-96%); `muted` = h at S 10-20%, L 38-46% (dark: L 60-68%); `line` = h at S 8-15%, L 84-90% (dark: L 16-22%); `tint` = the accent's hue at S 25-45%, L 93-96% (dark: L 10-14%); `accent` = S 55-85%, L 32-48% for text use, the same hue a step brighter (L ≈ 50%) for a mark that carries no type; `accent2` the same recipe at its own hue. Neutrals are tinted toward the seed, never pure 000000/FFFFFF unless the concept is a statement or a form. A state colour (good / caution / bad) is a separate, fixed hue pair — green and red words beside their glyph — not the accent.
|
|
28
|
+
|
|
29
|
+
## 3. The concepts
|
|
30
|
+
Each entry: **Fits** (signals) · **Palette** (scheme and one example) · **Type** (Korean / Latin) · **Heading** · **Table** · **Emphasis** · **Chart** · **Chrome** · **Density**. Faces are installed with Windows/Office or are the provisioned Noto families (§5).
|
|
31
|
+
|
|
32
|
+
### formal-report
|
|
33
|
+
- **Fits**: a board, regulator, client, or committee reading at a desk; decisions, audits, annual or quarterly reports, proposals with evidence; the reader may file it.
|
|
34
|
+
- **Palette**: mono or analogous. `paper FFFFFF · ink 1C2321 · muted 5E6A66 · line D3DAD6 · tint E8F0ED · accent 1F5E4B` (seed 160°).
|
|
35
|
+
- **Type**: Korean Noto Sans KR or Malgun Gothic, headings bold; Latin Calibri or Segoe UI. A serif body (Noto Serif KR / Cambria) suits a legal or academic variant.
|
|
36
|
+
- **Heading**: numbered assertion headings, bold, a step per level; title block left-aligned with a rule under it.
|
|
37
|
+
- **Table**: bold header on a rule, hairlines between rows, figures right-aligned, a total row set apart; a tint band only on the header when the callout uses the same tint.
|
|
38
|
+
- **Emphasis**: a boxed note or tinted band for the conclusion — or none; the finding can lead as the first paragraph in bold.
|
|
39
|
+
- **Chart**: quiet bars/lines, direct value labels, the subject in `accent`, the rest `muted`/`line`.
|
|
40
|
+
- **Chrome**: running head and "n / N" folio are right for a long, filed document; a short one needs only a folio or nothing.
|
|
41
|
+
- **Density**: dense, 30-40 Hangul characters per line, generous heading space.
|
|
42
|
+
|
|
43
|
+
### editorial-magazine
|
|
44
|
+
- **Fits**: features, newsletters, thought-leadership, annual-review stories, explainers written to be read for pleasure; a point of view and a narrative, not a decision table.
|
|
45
|
+
- **Palette**: complement or split, one saturated accent used large. `paper FFFFFF · ink 161616 · muted 6A6A6A · line CFCFCB · tint F1EEE8 · accent C8102E · accent2 0B3C5D`.
|
|
46
|
+
- **Type**: serif display over sans body — Korean Noto Serif KR headings, Noto Sans KR body; Latin Georgia or Cambria headings, Calibri body. A large size contrast (headline 4× body on the opener).
|
|
47
|
+
- **Heading**: oversized opener, a deck line, section heads in the serif; drop cap or a numeral as the anchor; a short kicker is allowed where it names something, not over every heading.
|
|
48
|
+
- **Table**: open — no vertical rules, thin rule under the header only, generous row space; used sparingly.
|
|
49
|
+
- **Emphasis**: pull quote across the column, a margin note, an oversized numeral; no callout box.
|
|
50
|
+
- **Chart**: annotated on the data (a labelled event, a bracket), accent on the point the story turns on.
|
|
51
|
+
- **Chrome**: folio and section name small at the foot, or only on the inside edge; none on the opener.
|
|
52
|
+
- **Density**: airy, 2-column or measure-limited text with side column; images carry pages.
|
|
53
|
+
|
|
54
|
+
### data-dashboard
|
|
55
|
+
- **Fits**: operational status, KPI reviews, monitoring, a surface scanned in under a minute and returned to; many figures, few paragraphs.
|
|
56
|
+
- **Palette**: analogous with a warm `accent2` reserved for the alert. `paper F4F6F8 (canvas) · card FFFFFF · ink 0F1B2D · muted 5A677A · line DCE1E8 · tint E6EEF8 · accent 0A7EA4 · accent2 F2A33A`.
|
|
57
|
+
- **Type**: Korean Noto Sans KR / Malgun Gothic; Latin Segoe UI with tabular figures (`font-variant-numeric: tabular-nums`); big numerals in bold.
|
|
58
|
+
- **Heading**: small, functional labels over modules; the page title short.
|
|
59
|
+
- **Table**: compact rows, zebra or hairline, sparkline/bar cells, status cell with word + glyph; figures right-aligned.
|
|
60
|
+
- **Emphasis**: KPI cards (figure over label, delta beside it), the one off-target figure in `accent2`.
|
|
61
|
+
- **Chart**: several small charts on a grid sharing scales; direct labels; light grid allowed.
|
|
62
|
+
- **Chrome**: a header strip with period and refresh date; a footer source line; no folio on a one-screen sheet.
|
|
63
|
+
- **Density**: high; cards on a grid with a consistent gutter.
|
|
64
|
+
|
|
65
|
+
### quiet-minimal
|
|
66
|
+
- **Fits**: considered internal notes, design or research write-ups, product principles, anything where restraint signals confidence and the content is short.
|
|
67
|
+
- **Palette**: mono; the accent is barely above the neutrals or equals ink. `paper FFFFFF · ink 222222 · muted 8A8A8A · line E6E6E6 · tint F6F6F6 · accent 3A5A78`.
|
|
68
|
+
- **Type**: one family — Korean Noto Sans KR (regular body, bold heading); Latin Calibri Light / Segoe UI Light for headings where light weights exist, regular elsewhere.
|
|
69
|
+
- **Heading**: modest size, weight and space do the work; no rules, no labels.
|
|
70
|
+
- **Table**: no fills, one hairline under the header, wide row spacing; or a list instead of a table.
|
|
71
|
+
- **Emphasis**: a bold sentence or an indented paragraph; no boxes.
|
|
72
|
+
- **Chart**: single series, one accent point, no axis lines.
|
|
73
|
+
- **Chrome**: none, or a lone page number in `muted`.
|
|
74
|
+
- **Density**: low; wide margins, short lines, more white than ink.
|
|
75
|
+
|
|
76
|
+
### keynote-statement
|
|
77
|
+
- **Fits**: a pitch, a launch, a vision or all-hands deck, a poster or one-page announcement; one claim per page, read from a distance or in seconds.
|
|
78
|
+
- **Palette**: complement, high contrast, large flat fields. `paper FFFFFF · ink 0B0B0B · muted 6B6B6B · line E2E2E2 · tint FFF1EB · accent FF4F1F · accent2 FFD400` (or the inverted dark field with `ink` as paper).
|
|
79
|
+
- **Type**: Korean Noto Sans KR ExtraBold (its own family) for display, regular for support; Latin Arial Black or Bahnschrift display with Calibri support; headline-to-body ratio 4-5 on the statement pages only.
|
|
80
|
+
- **Heading**: the claim is the page; one or two lines, broken at a phrase.
|
|
81
|
+
- **Table**: avoided; a three-row comparison at most, large type.
|
|
82
|
+
- **Emphasis**: one phrase of the headline in `accent`, a numeral at hero size, a colour field behind a single sentence.
|
|
83
|
+
- **Chart**: one chart per page, one highlighted bar or point, the takeaway stated in the title.
|
|
84
|
+
- **Chrome**: none, or a tiny brand mark and number in the corner.
|
|
85
|
+
- **Density**: very low; 40-60% of the page deliberately empty.
|
|
86
|
+
|
|
87
|
+
### letter-memo
|
|
88
|
+
- **Fits**: correspondence, memos, notices, cover letters, minutes, policy statements; a person writes to a person and the text is the point.
|
|
89
|
+
- **Palette**: mono and nearly colourless; one restrained accent for the letterhead only. `paper FFFFFF · ink 202020 · muted 666666 · line BBBBBB · tint F3F3F3 · accent 6B2D3C`.
|
|
90
|
+
- **Type**: serif or conventional — Korean Noto Serif KR or 바탕 (Batang) body, or Malgun Gothic for a modern memo; Latin Cambria, Georgia, or Times New Roman.
|
|
91
|
+
- **Heading**: letterhead/sender block, then the subject line in bold; section labels (if any) are run-in bold.
|
|
92
|
+
- **Table**: a plain ruled grid for a schedule or a list of attendees; top and bottom rule only for short ones.
|
|
93
|
+
- **Emphasis**: bold or underline in the sentence; a numbered list for actions; no callouts.
|
|
94
|
+
- **Chart**: normally none.
|
|
95
|
+
- **Chrome**: sender block and date at the top, "n / N" only past one page; no running head.
|
|
96
|
+
- **Density**: moderate; letter proportions, 1.5-1.7 line height, signature space.
|
|
97
|
+
|
|
98
|
+
### technical-reference
|
|
99
|
+
- **Fits**: manuals, specs, API or process documentation, runbooks, standards, anything looked up rather than read through, with code, parameters, and warnings.
|
|
100
|
+
- **Palette**: analogous, cool-neutral with a warning hue. `paper FFFFFF · ink 1A1F24 · muted 5C6670 · line C9D1D9 · tint F0F3F6 (code ground) · accent 00796B · accent2 C2410C (warning)`.
|
|
101
|
+
- **Type**: Korean Noto Sans KR / Malgun Gothic; Latin Segoe UI body, Consolas for code, names, and parameters (the Korean text stays in its own face).
|
|
102
|
+
- **Heading**: numbered sections (1.2.3), bold, stable levels; every section findable.
|
|
103
|
+
- **Table**: full grid or banded rows, a header fill, a parameter / type / meaning layout; monospace in the name column.
|
|
104
|
+
- **Emphasis**: labelled notes (Note / Warning) as boxed notes with a left rule or glyph, code blocks on `tint`.
|
|
105
|
+
- **Chart**: schematic diagrams and flow charts in line work; value charts rare.
|
|
106
|
+
- **Chrome**: running head with document and version, folio "n / N", section name; contents list at the front.
|
|
107
|
+
- **Density**: high and regular; consistent rhythm so the eye can scan.
|
|
108
|
+
|
|
109
|
+
### form-intake
|
|
110
|
+
- **Fits**: applications, intake and registration forms, checklists, order sheets, inspection records, anything a person fills in.
|
|
111
|
+
- **Palette**: mostly neutral, high contrast, field fills that read as "type here". `paper FFFFFF · ink 1E1E1E · muted 666666 · line 8C8C8C · tint EAF2E3 (fill-in) · accent 2E6B34`.
|
|
112
|
+
- **Type**: Korean Malgun Gothic or Noto Sans KR; Latin Arial or Calibri; labels in `muted` small caps-free sentence case, entered values in `ink`.
|
|
113
|
+
- **Heading**: numbered groups of fields with a short instruction line.
|
|
114
|
+
- **Table**: the form is a table — label cell and entry cell, visible rules (`line`), entry cells on `tint`; checkboxes as real squares.
|
|
115
|
+
- **Emphasis**: required marks, a single instruction box, a signature line.
|
|
116
|
+
- **Chart**: none.
|
|
117
|
+
- **Chrome**: form title and id at top, page "n / N", a return-to line at the foot.
|
|
118
|
+
- **Density**: moderate; entry cells tall enough to write in; nothing decorative.
|
|
119
|
+
|
|
120
|
+
### brand-campaign
|
|
121
|
+
- **Fits**: brochures, campaign one-pagers, event programmes, product launches, invitations, certificates; the look is the message and a brand or mood exists.
|
|
122
|
+
- **Palette**: the brand's own colours as roles, else complement or split, with a large colour field. `paper FFFDFB · ink 1D1A31 · muted 635F78 · line E9E4EE · tint FDE9E1 · accent E4572E · accent2 17BEBB`.
|
|
123
|
+
- **Type**: the brand face when the recipient has it; otherwise Korean Noto Sans KR ExtraBold display over Noto Sans KR, or Noto Serif KR for a gentler brand; Latin Trebuchet MS, Century Gothic, or Georgia.
|
|
124
|
+
- **Heading**: display type with personality, set against a picture or colour field; sections can change field colour.
|
|
125
|
+
- **Table**: a styled list or two-column spec, a pricing grid with an accented column; rarely a data table.
|
|
126
|
+
- **Emphasis**: a colour field, a badge, a large numeral, a tilted or cropped shape; the call to action as a button-shaped block.
|
|
127
|
+
- **Chart**: infographic-style, illustrated, few numbers, brand colours.
|
|
128
|
+
- **Chrome**: logo/wordmark placement, a footer with contact; no running head.
|
|
129
|
+
- **Density**: varied by page; one page may be a single picture and a line.
|
|
130
|
+
|
|
131
|
+
### dark-tech
|
|
132
|
+
- **Fits**: engineering and product-technology audiences, developer tools, security, AI or infrastructure briefings, night-mode dashboards; screens rather than paper.
|
|
133
|
+
- **Palette**: dark ground, one luminous accent, `accent2` for a second series. `paper 0B0F14 · ink E8EDF2 · muted 8B97A5 · line 222B36 · tint 131A22 · accent 3DDC97 · accent2 7C5CFF`. Keep the accent off large fields and body text: it is the mark.
|
|
134
|
+
- **Type**: Korean Noto Sans KR; Latin Bahnschrift or Segoe UI, Consolas for labels, figures, and code.
|
|
135
|
+
- **Heading**: bold sans, tight leading, a short monospace label where it names a module or version (not over every heading).
|
|
136
|
+
- **Table**: no fills, `line` rules only, monospaced figures; header in `muted`.
|
|
137
|
+
- **Emphasis**: the accent on one figure or phrase, a thin bracket frame or glow behind one metric; a callout is a `tint` card with a 1 px `line` border.
|
|
138
|
+
- **Chart**: luminous lines on the dark ground, accent for the subject, `muted` for the rest.
|
|
139
|
+
- **Chrome**: small status line at the top or foot (version, date); page number in `muted`.
|
|
140
|
+
- **Density**: medium-high with generous dark margins. For print, invert to a light ground rather than printing the dark field.
|
|
141
|
+
|
|
142
|
+
## 4. Translation per format
|
|
143
|
+
For the chosen concept, the format carries the same roles with its own anatomy. `STYLE` is the nearest `kit.md` `STYLES` id for the script route (`deck({ style })`), and the HTML route's visual language to start from (`direction.md` §3).
|
|
144
|
+
| Concept | Deck (HTML, 1920 × 1080) | Word document | Flowing PDF | Designed PDF (`section.slide` pages) | Excel report sheet | STYLE |
|
|
145
|
+
|---|---|---|---|---|---|---|
|
|
146
|
+
| formal-report | assertion titles on paper, evidence slides with chart + commentary, text mode; accent on one object per page | numbered headings, boxed note or lead paragraph, ruled tables, running head + folio when long | `@page` running head + folio margin boxes, ruled tables, narrow column + side rail for captions | cover, key-figures page, evidence pages in the sheet's margins; folio in the slide | title block, metric strip, ruled table, one native chart; print area one page wide | data-journalism |
|
|
147
|
+
| editorial-magazine | serif headline over sans, rail or column text, pull-quote and numeral pages, one picture-led page | serif headings, pull quote, two-column section, open tables | `@page` folio at the foot only, columns, drop cap, no boxed notes | full-bleed opener, feature spreads with image and margin note | story-led report: headline cell, short insight cells beside the chart, few tables | editorial |
|
|
148
|
+
| data-dashboard | KPI card rows, small multiples, table + chart, balanced mode | landscape sections with KPI table strip, compact zebra tables, small charts | landscape `@page`, KPI strip, compact tables, header strip | one-screen dashboard page on a grid of cards | KPI cards, charts beside tables, conditional formats; the default archetype for a dashboard | data-journalism |
|
|
149
|
+
| quiet-minimal | few words per slide, wide margins, one accent point | one family, no boxes, space-only hierarchy, no running head | wide margins, no `@page` boxes or a lone folio | sparse pages, one idea each | plain title, a table with one hairline, gridlines off | swiss-minimal |
|
|
150
|
+
| keynote-statement | one claim per slide at display size, colour fields, hero numerals | a poster-like cover page then plain text; rarely long | one-page announcement: large type, a colour band; no margin boxes | full-bleed claim pages, a numeral or phrase in accent | a summary sheet with 3-4 oversized figures; no more | swiss-minimal |
|
|
151
|
+
| letter-memo | rarely a deck; a single "message" slide at most | letterhead block, subject line, plain paragraphs, signature, no running head | the same on letter/A4 with `@page` margins and a folio only past one page | rarely designed; a one-page notice with letterhead | rarely a sheet; a cover note row above a table | swiss-minimal |
|
|
152
|
+
| technical-reference | blueprint diagrams, code panels, text mode | numbered headings, labelled notes, monospace cells, contents field | running head with version, folio, contents list, code blocks on `tint` | architecture diagram pages, reference cards | parameter table, change log, one summary sheet; formulas stay native | blueprint |
|
|
153
|
+
| form-intake | rarely; a checklist slide | fields as tables (label / entry), real checkboxes, instruction box; fill with the native route when it is a template | printed form with ruled entry cells | not used for fillable forms (the browser prints controls as pictures) | input sheet: legend, example row, validation, unlocked fill cells | soft-rounded |
|
|
154
|
+
| brand-campaign | colour-field pages, picture-led, badge and big numeral, CTA closing | brochure-like cover, colour band headings, styled lists; limited by Word's flow | folded-leaflet style with named cover `@page`, bands, no margin boxes | full-bleed designed pages, field colours change per spread | a branded summary sheet with colour header and a few charts | photo-editorial |
|
|
155
|
+
| dark-tech | dark theme throughout, glow behind one metric, bracket frames | light variant: dark title band, light body (Word prints on white); `tint` code panels | light ground for print; dark cover page via named `@page` | dark pages for screen reading | dark header band and light grid, accent on the KPIs | dark-tech |
|
|
156
|
+
If the nearest STYLE does not fit the page, use `custom` and write the five columns of `direction.md` §3 yourself.
|
|
157
|
+
|
|
158
|
+
## 5. Face menu per script
|
|
159
|
+
Faces named here are installed with Windows/Office or are the provisioned Noto families. A PDF embeds the fonts it drew with, so any installed face is safe there. Word, PowerPoint, and Excel write the face name into the file: the runtime warns when a face is not one the recipient is sure to have (an advisory, not a block), and a recipient without it sees a substitute — say so in the delivery, or choose from the safe column.
|
|
160
|
+
| Script / pairing | Display / heading | Body | Figures, code | Notes |
|
|
161
|
+
|---|---|---|---|---|
|
|
162
|
+
| Korean sans | Noto Sans KR (700), Noto Sans KR ExtraBold, Malgun Gothic (bold) | Noto Sans KR, Malgun Gothic | same family; Consolas for code | one face for Hangul and digits so the two share a baseline |
|
|
163
|
+
| Korean serif | Noto Serif KR (700), 바탕 (Batang) | Noto Serif KR, 바탕 | same family | Hangul has no italic: use weight, colour, or a rule |
|
|
164
|
+
| Korean mixed | Noto Serif KR headings | Noto Sans KR body | Noto Sans KR | serif display over sans body (editorial); keep the two Latin faces in step with them |
|
|
165
|
+
| Latin sans | Segoe UI Semibold, Bahnschrift, Arial, Trebuchet MS, Century Gothic, Calibri | Calibri, Segoe UI, Arial | tabular figures; Consolas for code | Calibri and Segoe UI are in every Office install |
|
|
166
|
+
| Latin serif | Georgia, Cambria, Palatino Linotype, Times New Roman, Bookman Old Style | Cambria, Georgia | Georgia has old-style figures: use Cambria for tables | serif body suits letters and essays |
|
|
167
|
+
| Latin mixed | Georgia or Cambria heading | Calibri or Segoe UI body | Consolas for labels | the editorial pairing |
|
|
168
|
+
Set Latin and East Asian faces together (Word `name` + `nameEastAsia`, CSS `font-family` listing both). Pair them deliberately: a Latin face beside a Korean face renders figures in the Latin one, and a Hangul line next to Latin digits can print at two apparent sizes — in a Korean-led document with many figures, set both in the Korean face; a distinct Latin face is for headings and Latin-led content.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Owns what the deck decides before full-deck composition: who reads it and how (§1), how it argues (§2), how it looks (§3), which direction the representative trial supports (§4), its colors (§5) and type (§6). `composition.md` owns the page, `kit.md` owns the code.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This is an optional design reference. Reading modes, palettes, type scales, style menus, and numeric composition targets are examples, not required selections or acceptance criteria. Existing brand requirements, faithful content, legibility, and format constraints take precedence. No style score can replace inspection of the converted pages.
|
|
6
6
|
|
|
7
7
|
## 1. Reading mode — decides density before anything else
|
|
8
8
|
**Default — derive from delivery**: live projection and launches lean presentation; async review, approval, and leave-behinds lean text; hybrid review leans balanced.
|
|
@@ -45,7 +45,8 @@ A style is shape language, composition geometry, decoration density, whitespace,
|
|
|
45
45
|
| brutalist | raw structure, heavy rules, irregular columns | masthead numeral crossing column rules; heavy full-bleed rule bars; one grid cell inverted to solid ink as the focal cell | none; weight is the decoration | flat, hard |
|
|
46
46
|
| custom | write the five columns yourself | — | — | — |
|
|
47
47
|
|
|
48
|
-
**Reference — choosing**: compare the subject's own edge, corner, opening, angle, or layering logic with each style's shape language before settling on rectangles and circles; a topic word never selects a row.
|
|
48
|
+
**Reference — choosing**: compare the subject's own edge, corner, opening, angle, or layering logic with each style's shape language before settling on rectangles and circles; a topic word never selects a row. On the script route, expressive print or hand-drawn looks (zine, memphis, chalkboard, pixel) need prepared artwork the kit does not draw; on the HTML route they are CSS, inline SVG, and `images:` plans, and are available (`html.md` §8).
|
|
49
|
+
**Default — a concept is optional guidance, not a gate**: `concepts.md` offers design concepts as a vocabulary. The plan's `concept:` line is optional free text (a concept id and a reason from subject, audience, purpose, or your own words); the runtime does not require it. When you name one, it fixes palette scheme, type pairing, heading, table, emphasis, and chrome; the style below is the nearest kit vocabulary for the script route (`concepts.md` §4 names it per concept). A deck, document, and workbook of one package share whatever direction is chosen.
|
|
49
50
|
|
|
50
51
|
## 4. Select from a representative visual trial
|
|
51
52
|
**Default — compare the open decisions on actual pages**: for a new direction, render two materially different compositions of the same representative content before building the whole deck (`review.md`). Each has a coherent reading mode, argument, palette, type, and treatment, but differs in how the message becomes visible. Choose by fidelity and reading clarity, or reject both; do not force a winner or rebuild every page twice. A supplied template, approved direction, or small factual edit skips the trial. Record the candidates and visible reason in the brief (`SKILL.md` §3); runtime candidate-count readings remain advisory.
|
|
@@ -57,13 +58,13 @@ A style is shape language, composition geometry, decoration density, whitespace,
|
|
|
57
58
|
## 5. Palette — from the subject, through one seed
|
|
58
59
|
**Hard rule — contrast**: body text ≥ 4.5:1; text ≥ 18 pt or bold ≥ 14 pt ≥ 3:1; white on an accent block ≥ 3:1. Accent is never body text. Meaning never rides on color alone. → runtime `low_contrast` (saved colors), `low_visual_contrast` (render); color-only meaning → manual
|
|
59
60
|
**Hard rule — colors are 6 hex digits without `#`**; alpha in the hex corrupts the file (`transparency: 0-100` on fills and images, `opacity: 0-1` on shadows). → runtime package validation fails at finalize
|
|
60
|
-
**Default — one hue family for the neutrals, the accent on its counter hue**: the kit's `palette({ hue })` derives the whole ladder from one seed hue — ink, body, muted, the three lines (lineSubtle, line, lineStrong — `composition.md` §6), paper, paperAlt, dark, darkAlt, onDark, onDarkMuted — with adjacent steps 10-25% apart in lightness and backgrounds within ±20° of the hue, and puts the accent (accent, accentDeep, tint, onDarkAccent) on `counterHue(hue)
|
|
61
|
+
**Default — one hue family for the neutrals, the accent on its counter hue**: the kit's `palette({ hue })` derives the whole ladder from one seed hue — ink, body, muted, the three lines (lineSubtle, line, lineStrong — `composition.md` §6), paper, paperAlt, dark, darkAlt, onDark, onDarkMuted — with adjacent steps 10-25% apart in lightness and backgrounds within ±20° of the hue, and puts the accent (accent, accentDeep, tint, onDarkAccent) on `counterHue(hue)` — the complement scheme; `accentHue` overrides it for an analogous, split, or mono scheme, which `concepts.md` §2 says when each fits, so the complement is one choice and not the default of every deck. The accent is the deck's second hue and its only saturated color on type and fields, on small areas; a state mark (below) is the one other saturated form. `accentHue: hue` keeps a single-hue deck (swiss-minimal, brutalist, blueprint, a brand that owns one color), and a brief may name any accent hue. Proportion starts at 60/30/10 (field / support / accent). The extremes are tinted, never 000000/FFFFFF.
|
|
61
62
|
**Default — four state colors, each with a word**: `T.state.positive | warning | critical | informative` say better / caution / worse / note — a verdict cell, a delta, a badge, a callout — and each comes in three forms: `solid` fills a mark (a dot, a delta arrow, a bar), `weak` is the field under a state word, `text` is the word on paper, paperAlt, or its own weak field (each ≥ 4.5:1; solid ≥ 3:1 on paper). The state hues are fixed (green 150, amber 40, red 5, blue 215), not derived from the seed, so a state means the same thing in every deck; a deck uses the states its content has, never all four for variety; a state's word or glyph always stands beside its color (the kit's `tone('positive')` pairs the field and the word for `badge()`, `callout()`, and `table({ verdict, tones })`).
|
|
62
63
|
**Hard rule — a state's solid form never sits under type**: type takes the `text` form (dark, restrained) on the `weak` field; the saturated form is the mark, so the deck's saturated hue on type stays the accent. → runtime `accent_hue_overuse` (saturated hue families on text-bearing shapes)
|
|
63
64
|
**Default — the accent has a type form and a mark form**: `T.accent` is the word (darkened to 4.5:1 on paper — a kicker, an emphasis run, a hero numeral); `T.accentFill` is the mark (S ≥ 0.78, L ≈ 0.5, ≥ 2:1 on paper — the reference marks sit at 1.3-2.6:1) that the one bar, disc, dot, or band takes; a mark that carries type (a badge, an active chevron, a numbered node) takes the `T.accentLabel` pair — the bright fill where white or ink reads on it at 4.5:1, else the type form under white. A bar painted with the type form reads as mud; a word set on a mid amber fails contrast. `T.accentFill` covers 3-20% of a content page and belongs to the object the title names; everything else it could have coloured is `T.mark` gray.
|
|
64
65
|
**Reference — measured colour** (ten frontier decks, September 2026, saturated pixels of every page): each deck has one bright accent that carries 53-98% of its saturated ink (Sequoia green 165°/S 1.0/L 0.3 98%, Evans red 0°/0.75/0.6 94%, Coatue blue 210°/0.75/0.5 93%, Naver green 135°/0.75/0.6 87%, Samsung navy 225°/0.5/0.2 83%, NVIDIA green 75°/0.75/0.4 67%, Kakao yellow 60°/1.0/0.6 39% + a pink 28%); at most two hues exceed 10% of it (Kakao four — a brand with a mascot). Saturated pixels cover 3-22% of a page (median 10%); dark pages are 0-33% of a deck (Samsung a third, NVIDIA 13%, Coatue 10%, most under 5%); pale tinted fields cover under 2% of a page.
|
|
65
66
|
**Default — saturation by area**: large fields S ≤ 20%, text S ≤ 25%, the accent S 60-90% and only on small areas; projected decks read 10-15% more saturated than the screen.
|
|
66
|
-
**
|
|
67
|
+
**Default — how to choose the seed and the scheme**: the seed hue comes from what exists first — the brand's own colour, the product or place the deck is about, a colour in the supplied pictures or screenshots, the mood the concept calls for (`concepts.md`) — and only then from taste. Pick the scheme (mono, analogous, complement, split; `concepts.md` §2) for the concept, not from a subject-to-hue table: no subject owns a hue, and a hue chosen because "finance means blue" is how decks come to look alike. Check it by asking whether the same colours would work on any other deck; if so, choose again. Record the seed, scheme, and reason in the brief's `palette:` field.
|
|
67
68
|
|
|
68
69
|
## 6. Typography
|
|
69
70
|
**Default — reliable families first**: Noto Sans/Serif (including KR, SC, TC, JP), Arial, Calibri, Cambria, Times New Roman, Courier New, Bookman Old Style, Century Schoolbook, Malgun Gothic, Microsoft YaHei, and Yu Gothic are practical starting points. Brand fonts are allowed when available to the recipient and renderer. If substitution changes metrics, use a compatible face or leave extra room and disclose the preview limitation; do not claim reliable fit from an approximate render. → runtime `unsafe_font_family`, `font_family_overuse` are compatibility diagnostics
|
|
@@ -38,7 +38,7 @@ So the CSS techniques that make a page — a gradient field, a diagonal band, an
|
|
|
38
38
|
|
|
39
39
|
## 4. Text
|
|
40
40
|
- Set `word-break: keep-all; overflow-wrap: break-word` on the slide and `text-wrap: balance` on headlines, `text-wrap: pretty` on prose; wrap a name that must not break (`GPT-5.6 Sol`, `macOS x64와 ARM64`) in `white-space: nowrap`.
|
|
41
|
-
-
|
|
41
|
+
- Choose installed faces that cover the language and fit the intended use. The optional face examples in `concepts.md` §5 are not a whitelist. A recipient without a face gets a substitute: disclose the risk or use portable faces, then check the actual render.
|
|
42
42
|
- Weight has two steps in PowerPoint: 400 and 700 (a 500 becomes regular).
|
|
43
43
|
- Line height: the converter places every line on the browser's baseline within 1 px for Noto Sans KR, Noto Serif KR and Malgun Gothic from `line-height` 0.9 to 1.5; tighter than 0.9 is unmeasured. Tight display type (0.9-1.05 on 100 px+ headlines, −0.01 to −0.02 em tracking on Latin only) is available; body copy keeps 1.4-1.6.
|
|
44
44
|
- Sizes: body 24 px (12 pt) or more, captions and chrome 20 px (10 pt) or more; no tracking on Hangul beyond 0.05 em.
|
|
@@ -48,7 +48,7 @@ So the CSS techniques that make a page — a gradient field, a diagonal band, an
|
|
|
48
48
|
```html
|
|
49
49
|
<div class="chart" style="position:absolute;left:860px;top:360px;width:964px;height:140px"
|
|
50
50
|
data-chart='{"type":"bar","labels":["Mixdog","Codex CLI"],"values":[18.5,34.3],
|
|
51
|
-
"colors":["
|
|
51
|
+
"colors":["<accent>","<muted>"],"max":40,"format":"0.0\"k\"","labelColor":"<ink>","size":11}'></div>
|
|
52
52
|
```
|
|
53
53
|
`type`: `bar` (horizontal), `col`, `line`, `area`, `pie`, `doughnut`. `values` for one series or `series: [{ name, values }]` with `legend: true` for several. `colors` 6-digit hex per category (one series) or per series. `max`/`min` fix the value scale, `format` the label number format, `size` the label size in pt, `gap` the bar gap %, `stacked`, `valueAxis: true` to show the value axis, `grid: "HEX"` for gridlines, `hole` for a doughnut. Values are copied from the brief's facts line. Give a bar chart about 70 px of height per category so PowerPoint keeps every category label. `categoryAxis: false` hides the category labels (when the page labels the columns itself).
|
|
54
54
|
|
|
@@ -62,30 +62,9 @@ So the CSS techniques that make a page — a gradient field, a diagonal band, an
|
|
|
62
62
|
**Hard rule — a generated picture never stands in for evidence**: figures, charts, tables, product UI, and screenshots are never generated; a generated picture is mood, metaphor, or illustration, recorded with its lane, model, and prompt in the slide's `aside.notes`.
|
|
63
63
|
|
|
64
64
|
## 8. One-shot design pass
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
**Default — compositions** (vary them; the same layout never three times in a row): asymmetric 60/40 or 70/30 split; offset grid with a colour band or a giant numeral in the narrow third; hero metric (180 px or more) beside its context; chart with direct annotations and leader lines; full-bleed field with the claim; card cluster of two or three different sizes; annotated artifact (a window, a terminal, a document) with numbered callouts and a legend. Body slides may carry colour fields too, not only the cover and the closing. Page chrome (running head, rule, page number, source line) is small and consistent.
|
|
70
|
-
**Default — how a page holds attention** (principles, not layouts; apply them to whatever composition the plan chose):
|
|
71
|
-
- **One anchor per page**: the first thing the eye lands on is the page's claim — a numeral, a headline, a picture, a chart's marked point — and nothing else competes at its weight. The anchor takes at most about half the canvas; the rest carries its support (the evidence, the context, the consequence).
|
|
72
|
-
- **Three tiers of space**: space inside a unit < space between units < the page margin. When the three are close, grouping disappears; a unit set apart by a large field is isolated on purpose.
|
|
73
|
-
- **Proximity carries relation**: a label sits nearer its value than the next value; a caption nearer its picture than the next block.
|
|
74
|
-
- **Break the rectangle now and then**: about once every three or four pages, one shape that is not a card — a band bled past the edge, a diagonal cut, an edge that fades out, an oversized numeral with no box — made with the CSS in §3.
|
|
75
|
-
- **Material, quietly**: grain, a pattern, or a soft gradient field reads as paper or light at 4-10 % strength; stronger, it is noise. One material per deck.
|
|
76
|
-
- **Decoration never stands in for content**: if removing an ornament loses no information and no structure, remove it.
|
|
77
|
-
|
|
78
|
-
**Default — the data picks its carrier**:
|
|
79
|
-
| The data | Carrier |
|
|
80
|
-
|---|---|
|
|
81
|
-
| one figure that matters | the numeral at display size with its unit, its comparison (against what, since when), and a source line |
|
|
82
|
-
| a share of a whole | a 100-cell grid, a ring, or a single stacked bar — never a pie of more than three parts |
|
|
83
|
-
| a trend | a line with the event marked on it and a direct series label; no legend when one series |
|
|
84
|
-
| a ranking | sorted horizontal bars, the subject's bar in the accent |
|
|
85
|
-
| a comparison of two states | a split page or a dumbbell, the change written as a number |
|
|
86
|
-
| places | a map or a schematic of the places, the figure on each |
|
|
87
|
-
| steps or a process | connected nodes in reading order, one verb each |
|
|
88
|
-
| a composition of costs | a stacked bar with the parts named in order of size |
|
|
65
|
+
Start from the source material, reader, and viewing conditions. Choose the reading path, type, palette, spacing, and carriers that explain this content, then write the HTML/CSS. A concept id, signature motif, fixed margin, colour ratio, or layout rotation is not required. `concepts.md`, `direction.md`, and `composition.md` are optional inspiration, not a checklist.
|
|
66
|
+
|
|
67
|
+
Preserve meaningful relationships: labels belong with their values, chart scales and units must be honest, and a comparison must retain the conditions being compared. Use repetition for comparable pages and whitespace for hierarchy where useful. A sparse statement, a dense reference page, and an intentionally repeated series are all valid when readable and complete. Do not add cards, texture, illustrations, or extra layouts just to satisfy a score.
|
|
89
68
|
|
|
90
69
|
**Hard rule — related positions come from one source and are declared**: a marker on a line, a shape inside a shape, a connector between two blocks, a column that lines up with the row above it, a label centred on its shape — each is computed, never typed as a separate guess: flex or grid for rows and columns, `calc()` on shared custom properties for a gap's centre, related shapes in one SVG from one set of numbers, a line or band that carries markers drawn as an SVG `<line>`, `<polyline>` or `<path>` (a clipped box has no centre line). Then the relation is declared on the element, and the browser proves it before the deck lands:
|
|
91
70
|
| Declaration | Holds when |
|
|
@@ -97,9 +76,7 @@ The user asks once and receives the finished deck; no candidates are shown. **De
|
|
|
97
76
|
| `data-label="#disc"` | it is centred on that shape |
|
|
98
77
|
Ids are the slide's own. Undeclared, the page is still read for the misses a declaration would have caught: peer blocks in one container and one column or row whose visible edges or centres sit 3-24 px apart, a shape whose centre is inside another but which reaches up to 24 px past its edge, a small connector in the gap between two blocks but off its centre, a marker (64 px or less) set on a line, band, or drawing with no relation declared, and words that run partly onto an SVG drawing or a round shape (read against its real fill and stroke, not its frame) or come within 8 px of one several times their size — words wholly on a shape are its label, and a chip or card painted under the words hides what is beneath; a drawing the size of the page is ground. Each is fixed in the HTML or, when the offset is the design, marked `data-free` on the element. Any finding refuses the deck (`reason: geometry_gate`, the findings per slide with their offsets in px); nothing lands until it holds. The eye never certifies a geometric relation the gate can measure. → runtime `geometry_gate`
|
|
99
78
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
**Default — avoid the generated look** unless the brief asks for it: cream `#F4F1EA` with a serif display and a terracotta accent; near-black with one acid-green or vermilion accent; hairlines and dense columns on every page; identical rounded cards with one soft grey shadow; an all-caps tracked label above every heading; meta strings joined with middle dots; monospace data labels; gradient washes as decoration; a glowing orb as the cover's object; icon rows of identical tiles; a uniform card grid; centred everything.
|
|
79
|
+
Before rendering, check that each page answers its intended question and preserves the source content. Judge stylistic choices by this request, not a blacklist of colours, fonts, or shapes. After conversion, inspect the actual Office pages rather than treating attractive HTML or a clean lint report as proof.
|
|
103
80
|
|
|
104
81
|
## 9. Review
|
|
105
82
|
`author` returns the audit, the rendered pages, and `render.compare`. Fix what the audit measures and what the pair shows (a line that broke differently, a glyph off its disc, a label PowerPoint dropped) in the HTML and author again — **Default — fix by editing the kept `<deck>.pptx.mixdog-source.html`** with the edit tool and calling `author path:<deck.pptx>` with no `script` (no `overwrite` needed); send the whole document again only when most of it changes; the two-round limit of SKILL.md §2 step 6 applies. Then finalize as SKILL.md §5.
|
|
@@ -11,7 +11,7 @@ redefine it or when a default this index does not state decides the page.
|
|
|
11
11
|
|
|
12
12
|
Owns the code: primitives that draw what `composition.md` names, sized with `MEASURE` so text never overflows. The kit is a toolbox, not a slide catalog — no function here draws a whole slide, and every position is the author's. Draw every repeated element through one function so the deck stays consistent. Chart and table helpers are in `charts.md`, picture helpers in `pictures.md` §4.
|
|
13
13
|
|
|
14
|
-
**The runtime runs every code block of this file, `charts.md`, and `pictures.md` before the script** — the script never pastes them. A script opens with the brief, then one `deck({ style, hue, accentHue?, mode, script, pairing, fonts })` call that sets the frame the style chooses, the palette, the faces, the type scale, the zones, and the masters, then the slides. Read the blocks for the signatures and defaults; redefine a helper in the script when a page needs a different one (a later declaration wins). A script that creates its own `pres` runs without the prelude.
|
|
14
|
+
**The runtime runs every code block of this file, `charts.md`, and `pictures.md` before the script** — the script never pastes them. A script opens with the brief, then one `deck({ style, hue, accentHue?, accentMode?, mode, script, pairing, fonts })` call that sets the frame the style chooses, the palette, the faces, the type scale, the zones, and the masters, then the slides. Read the blocks for the signatures and defaults; redefine a helper in the script when a page needs a different one (a later declaration wins). A script that creates its own `pres` runs without the prelude.
|
|
15
15
|
|
|
16
16
|
**Hard rule — paragraph options sit on the first run**: the runtime keeps one `a:pPr` per paragraph (the first). `bullet`, `align`, `paraSpaceAfter`, `lineSpacingMultiple` go on the text box or on a paragraph's first run; `breakLine: true` on a paragraph's last run. → runtime (absorbed: the normalizer keeps the first `pPr`; nothing to check)
|
|
17
17
|
|
|
@@ -89,7 +89,12 @@ function counterHue(h) { … }
|
|
|
89
89
|
// at 4.5:1 (a yellow pill carries dark type, a green one white), else the type form of the accent under white (a mid
|
|
90
90
|
// amber or blue can host neither at 12 pt). Charts, arcs, dots, and bars fill with accentFill; a word in the accent,
|
|
91
91
|
// a kicker, an emphasis run, a hero numeral keep `accent`.
|
|
92
|
-
|
|
92
|
+
// accentMode: where the accent sits against the seed when accentHue is not given — 'complement' (the default: counterHue),
|
|
93
|
+
// 'analogous' (seed + 30°), 'split' (counterHue + 30°), 'mono' (the seed itself). warmth (-1..1, default 0) leans every
|
|
94
|
+
// neutral (paper, type, lines, marks) toward amber (+) or blue (-) without moving the seed or the accent.
|
|
95
|
+
function accentFor(seed, mode) { … }
|
|
96
|
+
function warmHue(h, warmth) { … }
|
|
97
|
+
function palette({ hue: seed = 205, accentHue: pickedHue, accentMode = 'complement', accentSat = 0.72, accentLight = 0.42, warmth = 0 } = {}) { … } // returns { ink, body, muted, lineSubtle, line, lineStrong, mark, markSoft, paper, paperAlt, tint, dark, darkAlt, onDark, onDarkMuted, onDarkAccent, accent, accentDeep, accentFill, accentLabel, onAccent, state }
|
|
93
98
|
const T = { ...palette({ hue: 205 }), display: '', sans: '', light: '', data: '' };
|
|
94
99
|
// deck() seeds it from the brief; faces set by typography()
|
|
95
100
|
// Type scale (direction.md §6): the reading mode sets the body anchor; every role derives from it.
|
|
@@ -154,6 +159,9 @@ function darkTheme(hue, accentHue = counterHue(hue)) { … }
|
|
|
154
159
|
// radius, the stroke a rule takes, the motif an anchor repeats, the theme, and whether the accent stays on the seed
|
|
155
160
|
// hue. Passed to deck(), two decks of the same content open on visibly different pages; left out, every deck repeats
|
|
156
161
|
// one frame — the title at the top left, the body under it, the source at the foot — whatever its brief called it.
|
|
162
|
+
// An entry may also carry palette knobs — accentMode ('complement' | 'analogous' | 'split' | 'mono'), accentSat,
|
|
163
|
+
// accentLight, warmth (-1..1) — and its type `pairing`; deck() reads them unless the call names its own. None of the
|
|
164
|
+
// built-in entries sets a knob, so they keep the counter-hue accent.
|
|
157
165
|
// `motifs` is the style's decoration set, not one device: an anchor that names no kind takes the next one, so the
|
|
158
166
|
// cover, the section marks, and the closing of one deck are not the same drawing three times (composition.md §3).
|
|
159
167
|
const STYLES = { swiss-minimal, editorial, photo-editorial, data-journalism, soft-rounded, dark-tech, glassmorphism, blueprint, brutalist, custom } each { chrome, radius, line, motifs, singleHue, pairing, titleBoost, theme };
|
|
@@ -169,7 +177,7 @@ let MOTIF_AT = 0;
|
|
|
169
177
|
// The next device in the deck's set. `motif(s, '', …)` takes it, so two anchors in a row never carry the same
|
|
170
178
|
// drawing; naming a kind (`motif(s, MOTIF, …)`) still wins when the echo is the point (a closing answering its cover).
|
|
171
179
|
function nextMotif() { … }
|
|
172
|
-
function deck({ style = 'custom', hue = 205, accentHue, accentSat, accentLight, mode = 'balanced', script = 'ko', pairing, fonts = 'noto', titleLines = 1, chrome, theme } = {}) { … }
|
|
180
|
+
function deck({ style = 'custom', hue = 205, accentHue, accentMode, accentSat, accentLight, warmth, mode = 'balanced', script = 'ko', pairing, fonts = 'noto', titleLines = 1, chrome, theme } = {}) { … }
|
|
173
181
|
// Page chrome lives on masters, not on slides: the background and, when the deck wants it, the page number.
|
|
174
182
|
// The three masters are defined from the final palette when the first slide is added, never before deck() ran.
|
|
175
183
|
function master(name, background, { number = true, color = T.muted } = {}) { … }
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Owns the code: primitives that draw what `composition.md` names, sized with `MEASURE` so text never overflows. The kit is a toolbox, not a slide catalog — no function here draws a whole slide, and every position is the author's. Draw every repeated element through one function so the deck stays consistent. Chart and table helpers are in `charts.md`, picture helpers in `pictures.md` §4.
|
|
4
4
|
|
|
5
|
-
**The runtime runs every code block of this file, `charts.md`, and `pictures.md` before the script** — the script never pastes them. A script opens with the brief, then one `deck({ style, hue, accentHue?, mode, script, pairing, fonts })` call that sets the frame the style chooses, the palette, the faces, the type scale, the zones, and the masters, then the slides. Read the blocks for the signatures and defaults; redefine a helper in the script when a page needs a different one (a later declaration wins). A script that creates its own `pres` runs without the prelude.
|
|
5
|
+
**The runtime runs every code block of this file, `charts.md`, and `pictures.md` before the script** — the script never pastes them. A script opens with the brief, then one `deck({ style, hue, accentHue?, accentMode?, mode, script, pairing, fonts })` call that sets the frame the style chooses, the palette, the faces, the type scale, the zones, and the masters, then the slides. Read the blocks for the signatures and defaults; redefine a helper in the script when a page needs a different one (a later declaration wins). A script that creates its own `pres` runs without the prelude.
|
|
6
6
|
|
|
7
7
|
**Hard rule — paragraph options sit on the first run**: the runtime keeps one `a:pPr` per paragraph (the first). `bullet`, `align`, `paraSpaceAfter`, `lineSpacingMultiple` go on the text box or on a paragraph's first run; `breakLine: true` on a paragraph's last run. → runtime (absorbed: the normalizer keeps the first `pPr`; nothing to check)
|
|
8
8
|
|
|
@@ -113,7 +113,22 @@ function counterHue(h) {
|
|
|
113
113
|
// at 4.5:1 (a yellow pill carries dark type, a green one white), else the type form of the accent under white (a mid
|
|
114
114
|
// amber or blue can host neither at 12 pt). Charts, arcs, dots, and bars fill with accentFill; a word in the accent,
|
|
115
115
|
// a kicker, an emphasis run, a hero numeral keep `accent`.
|
|
116
|
-
|
|
116
|
+
// accentMode: where the accent sits against the seed when accentHue is not given — 'complement' (the default: counterHue),
|
|
117
|
+
// 'analogous' (seed + 30°), 'split' (counterHue + 30°), 'mono' (the seed itself). warmth (-1..1, default 0) leans every
|
|
118
|
+
// neutral (paper, type, lines, marks) toward amber (+) or blue (-) without moving the seed or the accent.
|
|
119
|
+
function accentFor(seed, mode) {
|
|
120
|
+
if (mode === 'analogous') return (seed + 30) % 360;
|
|
121
|
+
if (mode === 'split') return (counterHue(seed) + 30) % 360;
|
|
122
|
+
if (mode === 'mono') return seed;
|
|
123
|
+
return counterHue(seed);
|
|
124
|
+
}
|
|
125
|
+
function warmHue(h, warmth) {
|
|
126
|
+
if (!warmth) return h;
|
|
127
|
+
const d = ((((warmth > 0 ? 40 : 220) - h + 540) % 360) - 180) * Math.min(1, Math.abs(warmth));
|
|
128
|
+
return (h + d + 360) % 360;
|
|
129
|
+
}
|
|
130
|
+
function palette({ hue: seed = 205, accentHue: pickedHue, accentMode = 'complement', accentSat = 0.72, accentLight = 0.42, warmth = 0 } = {}) {
|
|
131
|
+
const hue = warmHue(seed, warmth), accentHue = pickedHue ?? accentFor(seed, accentMode);
|
|
117
132
|
const paper = hsl(hue, 0.25, 0.975), paperAlt = hsl(hue, 0.18, 0.92), tint = hsl(accentHue, 0.35, 0.89), dark = hsl(hue, 0.42, 0.10);
|
|
118
133
|
const accent = darkenUntil(accentHue, accentSat, accentLight, ['FFFFFF', paper, tint], 4.5);
|
|
119
134
|
const ink = hsl(hue, 0.30, 0.13);
|
|
@@ -306,6 +321,9 @@ function darkTheme(hue, accentHue = counterHue(hue)) {
|
|
|
306
321
|
// radius, the stroke a rule takes, the motif an anchor repeats, the theme, and whether the accent stays on the seed
|
|
307
322
|
// hue. Passed to deck(), two decks of the same content open on visibly different pages; left out, every deck repeats
|
|
308
323
|
// one frame — the title at the top left, the body under it, the source at the foot — whatever its brief called it.
|
|
324
|
+
// An entry may also carry palette knobs — accentMode ('complement' | 'analogous' | 'split' | 'mono'), accentSat,
|
|
325
|
+
// accentLight, warmth (-1..1) — and its type `pairing`; deck() reads them unless the call names its own. None of the
|
|
326
|
+
// built-in entries sets a knob, so they keep the counter-hue accent.
|
|
309
327
|
// `motifs` is the style's decoration set, not one device: an anchor that names no kind takes the next one, so the
|
|
310
328
|
// cover, the section marks, and the closing of one deck are not the same drawing three times (composition.md §3).
|
|
311
329
|
const STYLES = {
|
|
@@ -330,7 +348,7 @@ let MOTIF_AT = 0;
|
|
|
330
348
|
// The next device in the deck's set. `motif(s, '', …)` takes it, so two anchors in a row never carry the same
|
|
331
349
|
// drawing; naming a kind (`motif(s, MOTIF, …)`) still wins when the echo is the point (a closing answering its cover).
|
|
332
350
|
function nextMotif() { const kind = MOTIFS[MOTIF_AT % MOTIFS.length]; MOTIF_AT += 1; return kind; }
|
|
333
|
-
function deck({ style = 'custom', hue = 205, accentHue, accentSat, accentLight, mode = 'balanced', script = 'ko', pairing, fonts = 'noto', titleLines = 1, chrome, theme } = {}) {
|
|
351
|
+
function deck({ style = 'custom', hue = 205, accentHue, accentMode, accentSat, accentLight, warmth, mode = 'balanced', script = 'ko', pairing, fonts = 'noto', titleLines = 1, chrome, theme } = {}) {
|
|
334
352
|
const preset = STYLES[style];
|
|
335
353
|
if (!preset) throw new Error(`deck: unknown style "${style}" — one of ${Object.keys(STYLES).join(', ')}`);
|
|
336
354
|
STYLE = { name: style, ...STYLE_DEFAULTS, ...preset };
|
|
@@ -340,8 +358,12 @@ function deck({ style = 'custom', hue = 205, accentHue, accentSat, accentLight,
|
|
|
340
358
|
MOTIF = MOTIFS[0];
|
|
341
359
|
MOTIF_AT = 0;
|
|
342
360
|
// A single-hue style (swiss-minimal, brutalist, blueprint) keeps the accent on the seed; the rest take the counter hue.
|
|
343
|
-
|
|
344
|
-
|
|
361
|
+
// A style may carry palette knobs (accentMode, accentSat, accentLight, warmth); the call's own value wins, and a style
|
|
362
|
+
// without them leaves the palette as it was (accent on the counter hue, the default saturation and lightness, no warmth).
|
|
363
|
+
const mode_ = accentMode ?? STYLE.accentMode, warm = warmth ?? STYLE.warmth;
|
|
364
|
+
const accentAt = accentHue ?? (STYLE.singleHue ? hue : accentFor(hue, mode_));
|
|
365
|
+
Object.assign(T, palette({ hue, accentHue: accentAt, accentSat: accentSat ?? STYLE.accentSat, accentLight: accentLight ?? STYLE.accentLight, warmth: warm }));
|
|
366
|
+
if ((theme ?? STYLE.theme) === 'dark') darkTheme(warmHue(hue, warm), accentAt);
|
|
345
367
|
// The face pairing is the style's too (an editorial page sets its display in the serif, a masthead in the sans),
|
|
346
368
|
// unless the brief names one here.
|
|
347
369
|
typography({ script, pairing: pairing ?? STYLE.pairing ?? 'weight', fonts });
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Direction trials and independent review
|
|
2
2
|
|
|
3
|
-
Use this procedure
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Use this optional procedure when a direction trial resolves a real uncertainty
|
|
4
|
+
or the user asks for a quality comparison. New documents do not require a
|
|
5
|
+
design contest. A factual edit inside an approved deck keeps its direction.
|
|
6
6
|
|
|
7
7
|
## Before composition
|
|
8
8
|
|
|
@@ -16,8 +16,9 @@ condition or a misleading relationship.
|
|
|
16
16
|
|
|
17
17
|
Pick one or two representative pages that expose the difficult work: a dense
|
|
18
18
|
comparison, an explanatory diagram, or the primary evidence. Draft two materially
|
|
19
|
-
different compositions of the same content at the same reading size.
|
|
20
|
-
|
|
19
|
+
different compositions of the same content at the same reading size. Candidates
|
|
20
|
+
differ in the design decision being tested — reading path, evidence treatment,
|
|
21
|
+
type, or structure — rather than requiring different catalogue concepts. Render both; do not build two
|
|
21
22
|
whole decks. Preserve the trials separately from the deliverable.
|
|
22
23
|
|
|
23
24
|
Give the trials neutral identifiers and compare:
|
|
@@ -70,8 +70,10 @@ that a call returned without transport error.
|
|
|
70
70
|
background cycles. Core Memory entries
|
|
71
71
|
are read and changed with the `memory` tool, not setup.
|
|
72
72
|
- Built-ins have installation state separate from enabled state. Browser Use,
|
|
73
|
-
Computer Use
|
|
74
|
-
Desktop
|
|
73
|
+
Computer Use actions require this conversation open in the local Desktop
|
|
74
|
+
window; voice runs on the runtime and needs no Desktop.
|
|
75
|
+
- Hook rules are before-tool policy, separate from MCP and plugins. Deleting a
|
|
76
|
+
rule is destructive; disabling preserves it.
|
|
75
77
|
- Desktop appearance changes affect the Desktop host, not a paired phone.
|
|
76
78
|
Display language is independent of profile response language. A required
|
|
77
79
|
reload is reported, never performed automatically.
|
|
@@ -82,7 +84,6 @@ that a call returned without transport error.
|
|
|
82
84
|
be scoped to selected Projects.
|
|
83
85
|
- User skills are machine-global. Enabled plugin skills and built-in skills are
|
|
84
86
|
also discoverable; project-local `.mixdog/skills` directories are ignored.
|
|
85
|
-
Use extension scope to limit where a global skill appears.
|
|
86
87
|
- `set_disabled_skills` replaces the complete disabled list; inspect the
|
|
87
88
|
current list before changing one entry.
|
|
88
89
|
|
|
@@ -93,8 +94,6 @@ that a call returned without transport error.
|
|
|
93
94
|
- For an MCP failure, inspect the reported transport error before changing
|
|
94
95
|
command, arguments, directory, environment, URL, headers, or enabled state.
|
|
95
96
|
- MCP reads intentionally omit raw connection values that may contain secrets.
|
|
96
|
-
Partial edits preserve those values. Use environment-variable names for
|
|
97
|
-
credentials; never request or echo their values.
|
|
98
97
|
- For an unavailable built-in, distinguish not installed, installed but
|
|
99
98
|
disabled, and bridge inactive.
|
|
100
99
|
- Desktop requests require a single live claimant and a confirmed receipt.
|
|
@@ -107,8 +106,6 @@ that a call returned without transport error.
|
|
|
107
106
|
|
|
108
107
|
## Finish
|
|
109
108
|
|
|
110
|
-
- Do not expose
|
|
111
|
-
options.
|
|
112
|
-
- Do not claim the current session changed when the receipt says next session.
|
|
109
|
+
- Do not expose internal-only configuration as a supported user option.
|
|
113
110
|
- Do not commit, deploy, restart, or update the app unless separately requested
|
|
114
111
|
and approved.
|