@bastani/atomic 0.9.11-alpha.6 → 0.9.11-alpha.8
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/CHANGELOG.md +38 -0
- package/README.md +3 -5
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/sampling-handler.ts +1 -5
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +1 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +33 -129
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +11 -3
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +26 -0
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +35 -0
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +72 -189
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +10 -9
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +19 -108
- package/dist/builtin/workflows/skills/impeccable/reference/clarify.md +59 -253
- package/dist/builtin/workflows/skills/impeccable/reference/colorize.md +51 -222
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +45 -0
- package/dist/builtin/workflows/skills/impeccable/reference/craft.md +3 -121
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +28 -20
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +97 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +23 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +32 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/dist/builtin/workflows/skills/impeccable/reference/delight.md +47 -279
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +53 -0
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +60 -73
- package/dist/builtin/workflows/skills/impeccable/reference/harden.md +1 -12
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +17 -4
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +64 -163
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/layout.md +52 -153
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +44 -32
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +105 -0
- package/dist/builtin/workflows/skills/impeccable/reference/{product.md → operate.md} +6 -5
- package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +4 -4
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -4
- package/dist/builtin/workflows/skills/impeccable/reference/polish.md +68 -212
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/routing.md +18 -0
- package/dist/builtin/workflows/skills/impeccable/reference/shape.md +38 -144
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +48 -269
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +38 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +584 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +117 -9
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +486 -59
- package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +16 -45
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +96 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +143 -26
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +181 -12
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +3187 -182
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +102 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +282 -70
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +183 -15
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +22 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/findings.mjs +7 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +16 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +155 -42
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2988 -155
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/constants.mjs +11 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +336 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +232 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +90 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +410 -78
- package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +25 -8
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +165 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +329 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +20 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-paths.mjs +16 -8
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/provider.mjs +1 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +455 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +457 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/completion.mjs +10 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +15 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +109 -32
- package/dist/builtin/workflows/skills/impeccable/scripts/live/source-lock.mjs +105 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/source-search.mjs +105 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +8 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +208 -68
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +563 -112
- package/dist/builtin/workflows/skills/impeccable/scripts/live-commit-manual-edits.mjs +3 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +198 -13
- package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +24 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +6 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +44 -14
- package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +398 -33
- package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +9 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +81 -67
- package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +7 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/palette.mjs +76 -81
- package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +890 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/surface-brief.mjs +74 -0
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +1 -24
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +232 -50
- package/dist/builtin/workflows/src/extension/workflow-model-catalog.ts +26 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +3 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +23 -9
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +1 -0
- package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +20 -5
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +10 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +86 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +6 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +24 -18
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +8 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +3 -3
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +2 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +16 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +121 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +42 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +16 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +4 -0
- package/dist/cli/list-models.d.ts +2 -2
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +5 -5
- package/dist/cli/list-models.js.map +1 -1
- package/dist/core/agent-session-accessors.js +1 -1
- package/dist/core/agent-session-accessors.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +2 -5
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-compaction.js +1 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +5 -5
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +4 -4
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-models.d.ts +1 -1
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +18 -14
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.js +2 -4
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +3 -7
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.js +1 -1
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.d.ts +3 -3
- package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
- package/dist/core/agent-session-runtime-auth.js +4 -14
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -3
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +3 -8
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +16 -23
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +2 -1
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -2
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage-backends.d.ts +1 -0
- package/dist/core/auth-storage-backends.d.ts.map +1 -1
- package/dist/core/auth-storage-backends.js +18 -4
- package/dist/core/auth-storage-backends.js.map +1 -1
- package/dist/core/auth-storage.d.ts +12 -139
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +68 -374
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/copilot-env-routing.d.ts +36 -0
- package/dist/core/copilot-env-routing.d.ts.map +1 -0
- package/dist/core/copilot-env-routing.js +94 -0
- package/dist/core/copilot-env-routing.js.map +1 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +10 -2
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +0 -40
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/fallback-models.d.ts +4 -4
- package/dist/core/fallback-models.d.ts.map +1 -1
- package/dist/core/fallback-models.js +3 -3
- package/dist/core/fallback-models.js.map +1 -1
- package/dist/core/model-config.d.ts +542 -0
- package/dist/core/model-config.d.ts.map +1 -0
- package/dist/core/{model-registry-schemas.js → model-config.js} +85 -34
- package/dist/core/model-config.js.map +1 -0
- package/dist/core/model-registry.d.ts +25 -85
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +65 -388
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts +2 -2
- package/dist/core/model-resolver-cli.d.ts.map +1 -1
- package/dist/core/model-resolver-cli.js +2 -2
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +4 -4
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js +17 -17
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +3 -3
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +4 -4
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-runtime-auth.d.ts +7 -0
- package/dist/core/model-runtime-auth.d.ts.map +1 -0
- package/dist/core/model-runtime-auth.js +14 -0
- package/dist/core/model-runtime-auth.js.map +1 -0
- package/dist/core/model-runtime-providers.d.ts +6 -0
- package/dist/core/model-runtime-providers.d.ts.map +1 -0
- package/dist/core/model-runtime-providers.js +22 -0
- package/dist/core/model-runtime-providers.js.map +1 -0
- package/dist/core/model-runtime-restoration.d.ts +6 -0
- package/dist/core/model-runtime-restoration.d.ts.map +1 -0
- package/dist/core/model-runtime-restoration.js +21 -0
- package/dist/core/model-runtime-restoration.js.map +1 -0
- package/dist/core/model-runtime-snapshot.d.ts +16 -0
- package/dist/core/model-runtime-snapshot.d.ts.map +1 -0
- package/dist/core/model-runtime-snapshot.js +52 -0
- package/dist/core/model-runtime-snapshot.js.map +1 -0
- package/dist/core/model-runtime-streaming.d.ts +17 -0
- package/dist/core/model-runtime-streaming.d.ts.map +1 -0
- package/dist/core/model-runtime-streaming.js +66 -0
- package/dist/core/model-runtime-streaming.js.map +1 -0
- package/dist/core/model-runtime-types.d.ts +21 -0
- package/dist/core/model-runtime-types.d.ts.map +1 -0
- package/dist/core/model-runtime-types.js +2 -0
- package/dist/core/model-runtime-types.js.map +1 -0
- package/dist/core/model-runtime.d.ts +50 -29
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +330 -90
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +2 -10
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -29
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/oauth-login.d.ts +24 -0
- package/dist/core/oauth-login.d.ts.map +1 -0
- package/dist/core/oauth-login.js +87 -0
- package/dist/core/oauth-login.js.map +1 -0
- package/dist/core/oauth-provider-metadata.d.ts +5 -0
- package/dist/core/oauth-provider-metadata.d.ts.map +1 -0
- package/dist/core/oauth-provider-metadata.js +19 -0
- package/dist/core/oauth-provider-metadata.js.map +1 -0
- package/dist/core/provider-composer-internal.d.ts +53 -0
- package/dist/core/provider-composer-internal.d.ts.map +1 -0
- package/dist/core/provider-composer-internal.js +273 -0
- package/dist/core/provider-composer-internal.js.map +1 -0
- package/dist/core/provider-composer.d.ts +16 -0
- package/dist/core/provider-composer.d.ts.map +1 -0
- package/dist/core/provider-composer.js +108 -0
- package/dist/core/provider-composer.js.map +1 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +74 -122
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +8 -7
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +26 -23
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +16 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -0
- package/dist/core/runtime-credentials.js +42 -0
- package/dist/core/runtime-credentials.js.map +1 -0
- package/dist/core/sdk-types.d.ts +1 -7
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +27 -28
- package/dist/core/sdk.js.map +1 -1
- package/dist/extensions/llama/index.js +1 -1
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +2 -4
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +25 -17
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/main-runtime-api-key.d.ts +6 -0
- package/dist/main-runtime-api-key.d.ts.map +1 -0
- package/dist/main-runtime-api-key.js +6 -0
- package/dist/main-runtime-api-key.js.map +1 -0
- package/dist/main-session-options.d.ts +2 -2
- package/dist/main-session-options.d.ts.map +1 -1
- package/dist/main-session-options.js +3 -3
- package/dist/main-session-options.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +9 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +2 -14
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +9 -0
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +25 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.js +53 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +13 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +22 -1
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +1 -3
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +4 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -73
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +4 -3
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +15 -24
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +10 -4
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +20 -31
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +21 -47
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +3 -3
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +8 -8
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +2 -1
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.js +2 -2
- package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +11 -11
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +1 -1
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +2 -2
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +1 -1
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-auth.d.ts +2 -2
- package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-auth.js +4 -3
- package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +4 -3
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts +0 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js +11 -50
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +26 -19
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-oauth-client.d.ts +1 -1
- package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-oauth-client.js +1 -1
- package/dist/modes/rpc/rpc-oauth-client.js.map +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.d.ts +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.js +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts +4 -5
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js +19 -66
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +1 -1
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +7 -4
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +5 -7
- package/dist/package-manager-cli.js.map +1 -1
- package/docs/changelog.mdx +1 -1
- package/docs/custom-provider.md +1 -1
- package/docs/models.md +4 -6
- package/docs/providers.md +13 -0
- package/docs/quickstart.md +2 -1
- package/docs/sdk.md +32 -49
- package/docs/tui.md +7 -2
- package/docs/workflows.md +4 -4
- package/examples/sdk/02-custom-model.ts +8 -10
- package/examples/sdk/09-api-keys-and-oauth.ts +17 -23
- package/examples/sdk/12-full-control.ts +9 -11
- package/examples/sdk/README.md +17 -21
- package/npm-shrinkwrap.json +23 -23
- package/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/brand.md +0 -108
- package/dist/builtin/workflows/skills/impeccable/reference/codex.md +0 -105
- package/dist/builtin/workflows/skills/impeccable/reference/interaction-design.md +0 -189
- package/dist/core/model-registry-auth.d.ts +0 -10
- package/dist/core/model-registry-auth.d.ts.map +0 -1
- package/dist/core/model-registry-auth.js +0 -98
- package/dist/core/model-registry-auth.js.map +0 -1
- package/dist/core/model-registry-builtins.d.ts +0 -8
- package/dist/core/model-registry-builtins.d.ts.map +0 -1
- package/dist/core/model-registry-builtins.js +0 -104
- package/dist/core/model-registry-builtins.js.map +0 -1
- package/dist/core/model-registry-custom-loader.d.ts +0 -3
- package/dist/core/model-registry-custom-loader.d.ts.map +0 -1
- package/dist/core/model-registry-custom-loader.js +0 -255
- package/dist/core/model-registry-custom-loader.js.map +0 -1
- package/dist/core/model-registry-dynamic.d.ts +0 -7
- package/dist/core/model-registry-dynamic.d.ts.map +0 -1
- package/dist/core/model-registry-dynamic.js +0 -189
- package/dist/core/model-registry-dynamic.js.map +0 -1
- package/dist/core/model-registry-extension-refresh.d.ts +0 -23
- package/dist/core/model-registry-extension-refresh.d.ts.map +0 -1
- package/dist/core/model-registry-extension-refresh.js +0 -32
- package/dist/core/model-registry-extension-refresh.js.map +0 -1
- package/dist/core/model-registry-loader.d.ts +0 -5
- package/dist/core/model-registry-loader.d.ts.map +0 -1
- package/dist/core/model-registry-loader.js +0 -29
- package/dist/core/model-registry-loader.js.map +0 -1
- package/dist/core/model-registry-schemas.d.ts +0 -1399
- package/dist/core/model-registry-schemas.d.ts.map +0 -1
- package/dist/core/model-registry-schemas.js.map +0 -1
- package/dist/core/model-registry-types.d.ts +0 -91
- package/dist/core/model-registry-types.d.ts.map +0 -1
- package/dist/core/model-registry-types.js +0 -2
- package/dist/core/model-registry-types.js.map +0 -1
- package/dist/core/model-registry-validation.d.ts +0 -7
- package/dist/core/model-registry-validation.d.ts.map +0 -1
- package/dist/core/model-registry-validation.js +0 -12
- package/dist/core/model-registry-validation.js.map +0 -1
- package/dist/core/oauth-compat.d.ts +0 -17
- package/dist/core/oauth-compat.d.ts.map +0 -1
- package/dist/core/oauth-compat.js +0 -2
- package/dist/core/oauth-compat.js.map +0 -1
- package/dist/core/oauth-provider-bridge.d.ts +0 -63
- package/dist/core/oauth-provider-bridge.d.ts.map +0 -1
- package/dist/core/oauth-provider-bridge.js +0 -232
- package/dist/core/oauth-provider-bridge.js.map +0 -1
|
@@ -1,288 +1,94 @@
|
|
|
1
|
-
> **Additional context needed**: audience
|
|
1
|
+
> **Additional context needed**: audience knowledge and emotional state.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Rewrite unclear interface text so users understand what happened, what matters, and what to do next. Preserve factual meaning, product terminology, and brand voice.
|
|
4
4
|
|
|
5
|
+
## Audit the language
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
Read the entire interaction path, not isolated strings. Identify:
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
- ambiguous nouns, verbs, and actions;
|
|
10
|
+
- internal jargon or assumed knowledge;
|
|
11
|
+
- vague labels, outcomes, and system states;
|
|
12
|
+
- missing consequences, recovery, or timing;
|
|
13
|
+
- inconsistent terminology and capitalization;
|
|
14
|
+
- redundant headings, intros, helper text, and confirmations;
|
|
15
|
+
- text that breaks at realistic widths or in translation;
|
|
16
|
+
- tone that ignores stress, risk, success, or urgency.
|
|
9
17
|
|
|
10
|
-
|
|
18
|
+
Infer audience and task from product context and surrounding UI. Ask before changing factual claims, legal meaning, or a term that may be domain-specific.
|
|
11
19
|
|
|
12
|
-
|
|
13
|
-
- **Jargon**: Technical terms users won't understand
|
|
14
|
-
- **Ambiguity**: Multiple interpretations possible
|
|
15
|
-
- **Passive voice**: "Your file has been uploaded" vs "We uploaded your file"
|
|
16
|
-
- **Length**: Too wordy or too terse
|
|
17
|
-
- **Assumptions**: Assuming user knowledge they don't have
|
|
18
|
-
- **Missing context**: Users don't know what to do or why
|
|
19
|
-
- **Tone mismatch**: Too formal, too casual, or inappropriate for situation
|
|
20
|
+
## Set the message hierarchy
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
- Who's the audience? (Technical? General? First-time users?)
|
|
23
|
-
- What's the user's mental state? (Stressed during error? Confident during success?)
|
|
24
|
-
- What's the action? (What do we want users to do?)
|
|
25
|
-
- What's the constraint? (Character limits? Space limitations?)
|
|
22
|
+
For each state, decide:
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
1. the one fact the user needs now;
|
|
25
|
+
2. the action available next;
|
|
26
|
+
3. supporting context that changes the decision;
|
|
27
|
+
4. the appropriate tone for this moment.
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
Say each idea once. If the heading already explains the state, the introduction should add new information or disappear.
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
## Rewrite by function
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
- **Action needed**: What should users do next (if anything)?
|
|
35
|
-
- **Tone**: How should this feel? (Helpful? Apologetic? Encouraging?)
|
|
36
|
-
- **Constraints**: Length limits, brand voice, localization considerations
|
|
33
|
+
### Actions and navigation
|
|
37
34
|
|
|
38
|
-
|
|
35
|
+
Use a specific verb and object when the outcome is not already obvious. Labels should describe what will happen, not the gesture used to trigger it. Keep the same noun and verb for the same concept throughout the product.
|
|
39
36
|
|
|
40
|
-
|
|
37
|
+
For destructive actions, name the object and consequence. Prefer undo over confirmation when recovery is safe. When confirmation is necessary, name the action on both the message and button instead of using `Yes`, `No`, `OK`, or `Submit`.
|
|
41
38
|
|
|
42
|
-
|
|
39
|
+
### Forms
|
|
43
40
|
|
|
44
|
-
|
|
45
|
-
**Bad**: "Error 403: Forbidden"
|
|
46
|
-
**Good**: "You don't have permission to view this page. Contact your admin for access."
|
|
41
|
+
Use persistent labels; placeholders are examples, not labels. Put format and eligibility requirements before submission. Explain why information is requested only when it is not obvious. Required and optional treatment should be consistent.
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
**Good**: "Email addresses need an @ symbol. Try: name@example.com"
|
|
43
|
+
Validation says what needs attention and how to correct it without blaming the user. Keep related instructions near the field and announce errors accessibly.
|
|
50
44
|
|
|
51
|
-
|
|
52
|
-
- Explain what went wrong in plain language
|
|
53
|
-
- Suggest how to fix it
|
|
54
|
-
- Don't blame the user
|
|
55
|
-
- Include examples when helpful
|
|
56
|
-
- Link to help/support if applicable
|
|
57
|
-
|
|
58
|
-
### Form Labels & Instructions
|
|
59
|
-
**Bad**: "DOB (MM/DD/YYYY)"
|
|
60
|
-
**Good**: "Date of birth" (with placeholder showing format)
|
|
61
|
-
|
|
62
|
-
**Bad**: "Enter value here"
|
|
63
|
-
**Good**: "Your email address" or "Company name"
|
|
64
|
-
|
|
65
|
-
**Principles**:
|
|
66
|
-
- Use clear, specific labels (not generic placeholders)
|
|
67
|
-
- Show format expectations with examples
|
|
68
|
-
- Explain why you're asking (when not obvious)
|
|
69
|
-
- Put instructions before the field, not after
|
|
70
|
-
- Keep required field indicators clear
|
|
71
|
-
|
|
72
|
-
### Button & CTA Text
|
|
73
|
-
**Bad**: "Click here" | "Submit" | "OK"
|
|
74
|
-
**Good**: "Create account" | "Save changes" | "Got it, thanks"
|
|
45
|
+
### Errors and permissions
|
|
75
46
|
|
|
76
|
-
|
|
77
|
-
- Describe the action specifically
|
|
78
|
-
- Use active voice (verb + noun)
|
|
79
|
-
- Match user's mental model
|
|
80
|
-
- Be specific ("Save" is better than "OK")
|
|
47
|
+
An actionable error answers:
|
|
81
48
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
49
|
+
1. what failed;
|
|
50
|
+
2. why, when known and useful;
|
|
51
|
+
3. how to recover or what alternative remains.
|
|
85
52
|
|
|
86
|
-
|
|
87
|
-
- Add value (don't just repeat the label)
|
|
88
|
-
- Answer the implicit question ("What is this?" or "Why do you need this?")
|
|
89
|
-
- Keep it brief but complete
|
|
90
|
-
- Link to detailed docs if needed
|
|
53
|
+
Do not expose internal codes as the primary message. Do not promise a cause or resolution the system cannot know. Treat privacy, payment, deletion, access loss, and blocked work seriously; warmth is welcome, jokes are not.
|
|
91
54
|
|
|
92
|
-
###
|
|
93
|
-
**Bad**: "No items"
|
|
94
|
-
**Good**: "No projects yet. Create your first project to get started."
|
|
55
|
+
### Loading, empty, and success states
|
|
95
56
|
|
|
96
|
-
|
|
97
|
-
- Explain why it's empty (if not obvious)
|
|
98
|
-
- Show next action clearly
|
|
99
|
-
- Make it welcoming, not dead-end
|
|
57
|
+
Loading text names the real operation and sets an honest expectation when the wait is meaningful. Show determinate progress when available; never invent progress.
|
|
100
58
|
|
|
101
|
-
|
|
102
|
-
**Bad**: "Success"
|
|
103
|
-
**Good**: "Settings saved! Your changes will take effect immediately."
|
|
59
|
+
An empty state distinguishes first use, no results, filters, permissions, and failure. Explain the state and provide the next useful action.
|
|
104
60
|
|
|
105
|
-
|
|
106
|
-
- Confirm what happened
|
|
107
|
-
- Explain what happens next (if relevant)
|
|
108
|
-
- Be brief but complete
|
|
109
|
-
- Match the user's emotional moment (celebrate big wins)
|
|
110
|
-
|
|
111
|
-
### Loading States
|
|
112
|
-
**Bad**: "Loading..." (for 30+ seconds)
|
|
113
|
-
**Good**: "Analyzing your data... this usually takes 30-60 seconds"
|
|
114
|
-
|
|
115
|
-
**Principles**:
|
|
116
|
-
- Set expectations (how long?)
|
|
117
|
-
- Explain what's happening (when it's not obvious)
|
|
118
|
-
- Show progress when possible
|
|
119
|
-
- Offer escape hatch if appropriate ("Cancel")
|
|
61
|
+
Success confirms the completed outcome and mentions the next consequence only when it changes what the user should do. Routine success should be brief.
|
|
120
62
|
|
|
121
|
-
###
|
|
122
|
-
**Bad**: "Are you sure?"
|
|
123
|
-
**Good**: "Delete 'Project Alpha'? This can't be undone."
|
|
63
|
+
### Help and instructional text
|
|
124
64
|
|
|
125
|
-
|
|
126
|
-
- State the specific action
|
|
127
|
-
- Explain consequences (especially for destructive actions)
|
|
128
|
-
- Use clear button labels ("Delete project" not "Yes")
|
|
129
|
-
- Don't overuse confirmations (only for risky actions)
|
|
65
|
+
Helper text answers an implicit question instead of restating the control. Use progressive disclosure for uncommon detail. Link text must make sense out of context; icon-only controls need accessible names.
|
|
130
66
|
|
|
131
|
-
|
|
132
|
-
**Bad**: Generic labels like "Items" | "Things" | "Stuff"
|
|
133
|
-
**Good**: Specific labels like "Your projects" | "Team members" | "Settings"
|
|
67
|
+
## Voice, accessibility, and localization
|
|
134
68
|
|
|
135
|
-
|
|
136
|
-
- Be specific and descriptive
|
|
137
|
-
- Use language users understand (not internal jargon)
|
|
138
|
-
- Make hierarchy clear
|
|
139
|
-
- Consider information scent (breadcrumbs, current location)
|
|
69
|
+
Voice stays consistent; tone adapts to the moment. Use plain language without flattening terminology the audience genuinely knows.
|
|
140
70
|
|
|
141
|
-
|
|
71
|
+
- Write complete translatable messages rather than concatenated fragments.
|
|
72
|
+
- Keep variables and numbers structured so translators can reorder them.
|
|
73
|
+
- Allow expansion instead of abbreviating prematurely.
|
|
74
|
+
- Make alt text convey the image's information; use empty alt for decoration.
|
|
75
|
+
- Keep screen-reader names aligned with visible labels and outcomes.
|
|
76
|
+
- Do not rely on punctuation, color, or iconography to carry the message alone.
|
|
142
77
|
|
|
143
|
-
|
|
78
|
+
Maintain a short terminology glossary when inconsistency spans the product. Do not vary words for literary effect in an interface.
|
|
144
79
|
|
|
145
|
-
|
|
146
|
-
2. **Be concise**: Cut unnecessary words (but don't sacrifice clarity)
|
|
147
|
-
3. **Be active**: "Save changes" not "Changes will be saved"
|
|
148
|
-
4. **Be human**: "Oops, something went wrong" not "System error encountered"
|
|
149
|
-
5. **Tell users what to do**, not just what happened
|
|
150
|
-
6. **Be consistent**: Use same terms throughout (don't vary for variety)
|
|
80
|
+
## Verify
|
|
151
81
|
|
|
152
|
-
|
|
153
|
-
- Use jargon without explanation
|
|
154
|
-
- Blame users ("You made an error" → "This field is required")
|
|
155
|
-
- Be vague ("Something went wrong" without explanation)
|
|
156
|
-
- Use passive voice unnecessarily
|
|
157
|
-
- Write overly long explanations (be concise)
|
|
158
|
-
- Use humor for errors (be empathetic instead)
|
|
159
|
-
- Assume technical knowledge
|
|
160
|
-
- Vary terminology (pick one term and stick with it)
|
|
161
|
-
- Repeat information (headers restating intros, redundant explanations)
|
|
162
|
-
- Use placeholders as the only labels (they disappear when users type)
|
|
82
|
+
Read the flow in context and test:
|
|
163
83
|
|
|
164
|
-
|
|
84
|
+
- comprehension without hidden product knowledge;
|
|
85
|
+
- actionability at errors, empty states, and decision points;
|
|
86
|
+
- factual accuracy and consistent terminology;
|
|
87
|
+
- scanability at target widths and 200% zoom;
|
|
88
|
+
- long names, localization expansion, pluralization, and dynamic values;
|
|
89
|
+
- accessible names and announced state changes;
|
|
90
|
+
- tone appropriate to consequence and emotional context.
|
|
165
91
|
|
|
166
|
-
|
|
92
|
+
The final copy is as short as it can be without removing meaning or recovery.
|
|
167
93
|
|
|
168
|
-
|
|
169
|
-
- **Actionability**: Do users know what to do next?
|
|
170
|
-
- **Brevity**: Is it as short as possible while remaining clear?
|
|
171
|
-
- **Consistency**: Does it match terminology elsewhere?
|
|
172
|
-
- **Tone**: Is it appropriate for the situation?
|
|
173
|
-
|
|
174
|
-
When the copy reads cleanly, hand off to `$impeccable polish` for the final pass.
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## Reference Material
|
|
179
|
-
|
|
180
|
-
The sections below were previously `ux-writing.md` and live inline now so the clarify flow has its deep UX-writing reference in one place.
|
|
181
|
-
|
|
182
|
-
### UX Writing
|
|
183
|
-
|
|
184
|
-
#### The Button Label Problem
|
|
185
|
-
|
|
186
|
-
**Never use "OK", "Submit", or "Yes/No".** These are lazy and ambiguous. Use specific verb + object patterns:
|
|
187
|
-
|
|
188
|
-
| Bad | Good | Why |
|
|
189
|
-
|-----|------|-----|
|
|
190
|
-
| OK | Save changes | Says what will happen |
|
|
191
|
-
| Submit | Create account | Outcome-focused |
|
|
192
|
-
| Yes | Delete message | Confirms the action |
|
|
193
|
-
| Cancel | Keep editing | Clarifies what "cancel" means |
|
|
194
|
-
| Click here | Download PDF | Describes the destination |
|
|
195
|
-
|
|
196
|
-
**For destructive actions**, name the destruction:
|
|
197
|
-
- "Delete" not "Remove" (delete is permanent, remove implies recoverable)
|
|
198
|
-
- "Delete 5 items" not "Delete selected" (show the count)
|
|
199
|
-
|
|
200
|
-
#### Error Messages: The Formula
|
|
201
|
-
|
|
202
|
-
Every error message should answer: (1) What happened? (2) Why? (3) How to fix it? Example: "Email address isn't valid. Please include an @ symbol." not "Invalid input".
|
|
203
|
-
|
|
204
|
-
##### Error Message Templates
|
|
205
|
-
|
|
206
|
-
| Situation | Template |
|
|
207
|
-
|-----------|----------|
|
|
208
|
-
| **Format error** | "[Field] needs to be [format]. Example: [example]" |
|
|
209
|
-
| **Missing required** | "Please enter [what's missing]" |
|
|
210
|
-
| **Permission denied** | "You don't have access to [thing]. [What to do instead]" |
|
|
211
|
-
| **Network error** | "We couldn't reach [thing]. Check your connection and [action]." |
|
|
212
|
-
| **Server error** | "Something went wrong on our end. We're looking into it. [Alternative action]" |
|
|
213
|
-
|
|
214
|
-
##### Don't Blame the User
|
|
215
|
-
|
|
216
|
-
Reframe errors: "Please enter a date in MM/DD/YYYY format" not "You entered an invalid date".
|
|
217
|
-
|
|
218
|
-
#### Empty States Are Opportunities
|
|
219
|
-
|
|
220
|
-
Empty states are onboarding moments: (1) Acknowledge briefly, (2) Explain the value of filling it, (3) Provide a clear action. "No projects yet. Create your first one to get started." not just "No items".
|
|
221
|
-
|
|
222
|
-
#### Voice vs Tone
|
|
223
|
-
|
|
224
|
-
**Voice** is your brand's personality, consistent everywhere.
|
|
225
|
-
**Tone** adapts to the moment.
|
|
226
|
-
|
|
227
|
-
| Moment | Tone Shift |
|
|
228
|
-
|--------|------------|
|
|
229
|
-
| Success | Celebratory, brief: "Done! Your changes are live." |
|
|
230
|
-
| Error | Empathetic, helpful: "That didn't work. Here's what to try..." |
|
|
231
|
-
| Loading | Reassuring: "Saving your work..." |
|
|
232
|
-
| Destructive confirm | Serious, clear: "Delete this project? This can't be undone." |
|
|
233
|
-
|
|
234
|
-
**Never use humor for errors.** Users are already frustrated. Be helpful, not cute.
|
|
235
|
-
|
|
236
|
-
#### Writing for Accessibility
|
|
237
|
-
|
|
238
|
-
**Link text** must have standalone meaning: "View pricing plans" not "Click here". **Alt text** describes information, not the image: "Revenue increased 40% in Q4" not "Chart". Use `alt=""` for decorative images. **Icon buttons** need `aria-label` for screen reader context.
|
|
239
|
-
|
|
240
|
-
#### Writing for Translation
|
|
241
|
-
|
|
242
|
-
##### Plan for Expansion
|
|
243
|
-
|
|
244
|
-
German text is ~30% longer than English. Allocate space:
|
|
245
|
-
|
|
246
|
-
| Language | Expansion |
|
|
247
|
-
|----------|-----------|
|
|
248
|
-
| German | +30% |
|
|
249
|
-
| French | +20% |
|
|
250
|
-
| Finnish | +30-40% |
|
|
251
|
-
| Chinese | -30% (fewer chars, but same width) |
|
|
252
|
-
|
|
253
|
-
##### Translation-Friendly Patterns
|
|
254
|
-
|
|
255
|
-
Keep numbers separate ("New messages: 3" not "You have 3 new messages"). Use full sentences as single strings (word order varies by language). Avoid abbreviations ("5 minutes ago" not "5 mins ago"). Give translators context about where strings appear.
|
|
256
|
-
|
|
257
|
-
#### Consistency: The Terminology Problem
|
|
258
|
-
|
|
259
|
-
Pick one term and stick with it:
|
|
260
|
-
|
|
261
|
-
| Inconsistent | Consistent |
|
|
262
|
-
|--------------|------------|
|
|
263
|
-
| Delete / Remove / Trash | Delete |
|
|
264
|
-
| Settings / Preferences / Options | Settings |
|
|
265
|
-
| Sign in / Log in / Enter | Sign in |
|
|
266
|
-
| Create / Add / New | Create |
|
|
267
|
-
|
|
268
|
-
Build a terminology glossary and enforce it. Variety creates confusion.
|
|
269
|
-
|
|
270
|
-
#### Avoid Redundant Copy
|
|
271
|
-
|
|
272
|
-
If the heading explains it, the intro is redundant. If the button is clear, don't explain it again. Say it once, say it well.
|
|
273
|
-
|
|
274
|
-
#### Loading States
|
|
275
|
-
|
|
276
|
-
Be specific: "Saving your draft..." not "Loading...". For long waits, set expectations ("This usually takes 30 seconds") or show progress.
|
|
277
|
-
|
|
278
|
-
#### Confirmation Dialogs: Use Sparingly
|
|
279
|
-
|
|
280
|
-
Most confirmation dialogs are design failures; consider undo instead. When you must confirm: name the action, explain consequences, use specific button labels ("Delete project" / "Keep project", not "Yes" / "No").
|
|
281
|
-
|
|
282
|
-
#### Form Instructions
|
|
283
|
-
|
|
284
|
-
Show format with placeholders, not instructions. For non-obvious fields, explain why you're asking.
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
**Avoid**: Jargon without explanation. Blaming users ("You made an error" → "This field is required"). Vague errors ("Something went wrong"). Varying terminology for variety. Humor for errors.
|
|
94
|
+
When the language reads cleanly, hand off to `$impeccable polish` for the final pass.
|