@bastani/atomic 0.9.13 → 0.9.14-alpha.2
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 +58 -0
- package/README.md +3 -3
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +14 -0
- package/dist/builtin/subagents/README.md +6 -4
- package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
- package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
- package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
- package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
- package/dist/builtin/subagents/agents/debugger.md +1 -1
- package/dist/builtin/subagents/agents/worker.md +1 -1
- package/dist/builtin/subagents/package.json +6 -5
- package/dist/builtin/subagents/src/agents/agent-discovery.ts +17 -11
- package/dist/builtin/subagents/src/agents/agent-loaders.ts +115 -43
- package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +10 -8
- package/dist/builtin/subagents/src/agents/agent-management.ts +8 -7
- package/dist/builtin/subagents/src/agents/agent-overrides.ts +2 -2
- package/dist/builtin/subagents/src/agents/agent-scope.ts +1 -1
- package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +24 -3
- package/dist/builtin/subagents/src/agents/agent-types.ts +3 -1
- package/dist/builtin/subagents/src/agents/agents.ts +7 -5
- package/dist/builtin/subagents/src/agents/frontmatter.ts +67 -22
- package/dist/builtin/subagents/src/agents/identity.ts +1 -1
- package/dist/builtin/subagents/src/agents/skills-paths.ts +1 -1
- package/dist/builtin/subagents/src/agents/skills.ts +64 -6
- package/dist/builtin/subagents/src/extension/config.ts +1 -1
- package/dist/builtin/subagents/src/extension/control-notices.ts +2 -2
- package/dist/builtin/subagents/src/extension/doctor.ts +15 -5
- package/dist/builtin/subagents/src/extension/fanout-child.ts +12 -12
- package/dist/builtin/subagents/src/extension/index.ts +23 -23
- package/dist/builtin/subagents/src/extension/notification-content.ts +1 -1
- package/dist/builtin/subagents/src/extension/schemas.ts +1 -1
- package/dist/builtin/subagents/src/extension/startup-maintenance.ts +3 -3
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +3 -3
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +1 -1
- package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/completion-notification.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +1 -1
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +27 -11
- package/dist/builtin/subagents/src/runs/foreground/notify.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -11
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +3 -3
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +15 -14
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +19 -19
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -13
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +9 -9
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +7 -7
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +6 -6
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +24 -23
- package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +1 -1
- package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/index.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +17 -8
- package/dist/builtin/subagents/src/runs/inprocess/runner.ts +60 -12
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +8 -8
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +4 -4
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +4 -4
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +5 -5
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +3 -3
- package/dist/builtin/subagents/src/runs/inprocess.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +3 -3
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +2 -2
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +1 -1
- package/dist/builtin/subagents/src/shared/artifacts.ts +2 -2
- package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +1 -1
- package/dist/builtin/subagents/src/shared/fast-mode.ts +1 -1
- package/dist/builtin/subagents/src/shared/formatters.ts +2 -2
- package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -1
- package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
- package/dist/builtin/subagents/src/shared/session-tokens.ts +1 -1
- package/dist/builtin/subagents/src/shared/settings.ts +4 -4
- package/dist/builtin/subagents/src/shared/status-format.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-config.ts +16 -4
- package/dist/builtin/subagents/src/shared/types-depth.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-nested.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-output.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-results.ts +1 -1
- package/dist/builtin/subagents/src/shared/types-runtime.ts +1 -1
- package/dist/builtin/subagents/src/shared/types.ts +6 -6
- package/dist/builtin/subagents/src/shared/utils.ts +3 -3
- package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +1 -1
- package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
- package/dist/builtin/subagents/src/slash/slash-commands.ts +6 -6
- package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -3
- package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-layout.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-progress.ts +2 -2
- package/dist/builtin/subagents/src/tui/render-result-compact.ts +7 -7
- package/dist/builtin/subagents/src/tui/render-result.ts +10 -10
- package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -1
- package/dist/builtin/subagents/src/tui/render-status-progress.ts +5 -5
- package/dist/builtin/subagents/src/tui/render.ts +4 -4
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +57 -0
- package/dist/builtin/workflows/README.md +39 -8
- package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
- package/dist/builtin/workflows/builtin/adversarial-verification.ts +4 -0
- package/dist/builtin/workflows/builtin/classify-and-act.ts +4 -0
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +4 -0
- package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
- package/dist/builtin/workflows/builtin/generate-and-filter.ts +4 -0
- package/dist/builtin/workflows/builtin/goal-models.ts +8 -10
- package/dist/builtin/workflows/builtin/goal.ts +4 -0
- package/dist/builtin/workflows/builtin/index.d.ts +0 -4
- package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +4 -2
- package/dist/builtin/workflows/builtin/loop-until-done.ts +4 -0
- package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +305 -0
- package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +115 -171
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +9 -25
- package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +19 -86
- package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -6
- package/dist/builtin/workflows/builtin/open-claude-design.d.ts +0 -5
- package/dist/builtin/workflows/builtin/open-claude-design.ts +11 -15
- package/dist/builtin/workflows/builtin/ralph-models.ts +24 -29
- package/dist/builtin/workflows/builtin/ralph.ts +4 -0
- package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
- package/dist/builtin/workflows/builtin/tournament.ts +4 -0
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +25 -31
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +1 -0
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +16 -10
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_manual_edit_applier.toml +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +3 -0
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +3 -1
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +6 -1
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +18 -2
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +24 -30
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +16 -10
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +1 -0
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/extract.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +12 -6
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +12 -3
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/live-setup.md +102 -0
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +113 -521
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +39 -26
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/polish.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +25 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +332 -221
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +10 -19
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +91 -38
- package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +19 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +56 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +10 -16
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +140 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +1174 -694
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns.mjs +1 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +5 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +431 -45
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +10 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +47 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +23 -22
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +0 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +384 -384
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/color.mjs +466 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +2 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/embed-prompt.mjs +270 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +51 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +70 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +336 -90
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +38 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +77 -11
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/design-parser.mjs +102 -19
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +44 -59
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +3 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/open-system-browser.mjs +57 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/roll-selection.mjs +369 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +31 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +73 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-css.mjs +617 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-verify.mjs +71 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/browser-script-parts.mjs +29 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +54 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +157 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/journal.mjs +205 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nuxt.mjs +170 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/script-src.mjs +26 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/instructions.mjs +169 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/roots.mjs +670 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +232 -35
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-ast.mjs +969 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +621 -74
- package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +66 -28
- package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +12 -12
- package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-surfaces.mjs +75 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/vocabulary.mjs +135 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +23 -37
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +945 -115
- package/dist/builtin/workflows/skills/impeccable/scripts/live-complete.mjs +33 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-copy-edit-agent.mjs +132 -15
- package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +173 -425
- package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +2 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +16 -3
- package/dist/builtin/workflows/skills/impeccable/scripts/live-resume.mjs +39 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +194 -27
- package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +10 -4
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +50 -31
- package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +91 -28
- package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +8 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +759 -109
- package/dist/builtin/workflows/src/authoring/workflow.ts +9 -0
- package/dist/builtin/workflows/src/authoring.d.ts +3 -0
- package/dist/builtin/workflows/src/durable/completed-catalog.ts +23 -2
- package/dist/builtin/workflows/src/durable/dbos-backend.ts +30 -17
- package/dist/builtin/workflows/src/durable/dbos-envelope.ts +14 -0
- package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +60 -57
- package/dist/builtin/workflows/src/durable/dbos-process-owner.ts +87 -0
- package/dist/builtin/workflows/src/durable/dbos-registration-diagnostics.ts +113 -0
- package/dist/builtin/workflows/src/durable/factory.ts +11 -8
- package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +5 -0
- package/dist/builtin/workflows/src/durable/tool-primitive.ts +186 -20
- package/dist/builtin/workflows/src/durable/types.ts +4 -0
- package/dist/builtin/workflows/src/durable/workflow-heartbeat-anchor.ts +153 -0
- package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +28 -0
- package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +9 -1
- package/dist/builtin/workflows/src/engine/run.ts +1 -0
- package/dist/builtin/workflows/src/extension/adopt-session-run-state.ts +20 -0
- package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +9 -30
- package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
- package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +28 -10
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +138 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +3365 -1341
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-delivery.ts +197 -0
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-notice.ts +115 -0
- package/dist/builtin/workflows/src/extension/workflow-heartbeat-scheduler.ts +962 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +4 -1
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +29 -5
- package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +32 -1
- package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +10 -1
- package/dist/builtin/workflows/src/runs/background/job-tracker.ts +10 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +16 -11
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +31 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +41 -10
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +48 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +4 -1
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +45 -12
- package/dist/builtin/workflows/src/sdk-surface.ts +9 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +10 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +10 -0
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +12 -0
- package/dist/builtin/workflows/src/shared/prompt-answer.ts +130 -0
- package/dist/builtin/workflows/src/shared/session-scoped-singleton.ts +98 -0
- package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +9 -1
- package/dist/builtin/workflows/src/shared/store-factory.ts +9 -1
- package/dist/builtin/workflows/src/shared/store-public-types.ts +2 -1
- package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +7 -0
- package/dist/builtin/workflows/src/shared/store-types.ts +18 -1
- package/dist/builtin/workflows/src/shared/tool-payload-bounds.ts +576 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +1 -0
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.d.ts +21 -0
- package/dist/builtin/workflows/src/shared/workflow-heartbeat-contract.ts +25 -0
- package/dist/builtin/workflows/src/tui/graph-theme.ts +8 -1
- package/dist/builtin/workflows/src/tui/graph-view-constants.ts +11 -0
- package/dist/builtin/workflows/src/tui/graph-view-input.ts +100 -5
- package/dist/builtin/workflows/src/tui/graph-view-layout.ts +42 -11
- package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +55 -6
- package/dist/builtin/workflows/src/tui/graph-view-render.ts +71 -6
- package/dist/builtin/workflows/src/tui/graph-view-state.ts +43 -0
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +2 -0
- package/dist/builtin/workflows/src/tui/node-card.ts +5 -1
- package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +11 -2
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +36 -10
- package/dist/builtin/workflows/src/tui/switcher.ts +11 -4
- package/dist/builtin/workflows/src/tui/tool-detail.ts +348 -0
- package/dist/builtin/workflows/src/tui/workflow-status.ts +5 -2
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/credential-print.d.ts +1 -1
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +9 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +7 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.js +2 -2
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-export.d.ts +6 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +6 -3
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +6 -4
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +5 -2
- 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-prompt.d.ts +12 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +31 -10
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-skill-block.d.ts +1 -0
- package/dist/core/agent-session-skill-block.d.ts.map +1 -1
- package/dist/core/agent-session-skill-block.js +18 -2
- package/dist/core/agent-session-skill-block.js.map +1 -1
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +2 -1
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -1
- 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 +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.js +2 -2
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/builtin-packages.d.ts.map +1 -1
- package/dist/core/builtin-packages.js +0 -6
- package/dist/core/builtin-packages.js.map +1 -1
- package/dist/core/cloudflare-gateway-binding.d.ts +11 -0
- package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -0
- package/dist/core/cloudflare-gateway-binding.js +11 -0
- package/dist/core/cloudflare-gateway-binding.js.map +1 -0
- package/dist/core/codex-fast-mode-transport.d.ts +12 -0
- package/dist/core/codex-fast-mode-transport.d.ts.map +1 -0
- package/dist/core/codex-fast-mode-transport.js +130 -0
- package/dist/core/codex-fast-mode-transport.js.map +1 -0
- package/dist/core/codex-fast-mode.d.ts +20 -6
- package/dist/core/codex-fast-mode.d.ts.map +1 -1
- package/dist/core/codex-fast-mode.js +111 -3
- package/dist/core/codex-fast-mode.js.map +1 -1
- package/dist/core/diagnostics.d.ts +4 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/event-bus.d.ts +12 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +22 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/experimental.d.ts +25 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +24 -0
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/template-js/tree-filter-render.js +4 -3
- package/dist/core/export-html/template.js +4 -3
- package/dist/core/extension-session-state.d.ts +28 -0
- package/dist/core/extension-session-state.d.ts.map +1 -0
- package/dist/core/extension-session-state.js +55 -0
- package/dist/core/extension-session-state.js.map +1 -0
- package/dist/core/extensions/api-types.d.ts +6 -0
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +4 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -0
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +16 -10
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +12 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +2 -0
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +8 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +3 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +3 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +26 -0
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js +17 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +5 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/keybindings.d.ts +24 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +6 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +1 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts +1 -1
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +3 -3
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +1 -1
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +1 -1
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-runtime.d.ts +54 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +96 -13
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/oauth-login.js.map +1 -1
- package/dist/core/project-trust.d.ts +10 -0
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +12 -0
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/resource-loader-assets.d.ts.map +1 -1
- package/dist/core/resource-loader-assets.js +14 -5
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +3 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +5 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +2 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +2 -0
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +2 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +1 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk-types.d.ts +7 -6
- 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 +17 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +7 -1
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +11 -2
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +2 -2
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js +6 -4
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/session-manager-list.d.ts.map +1 -1
- package/dist/core/session-manager-list.js +5 -1
- package/dist/core/session-manager-list.js.map +1 -1
- package/dist/core/session-manager-types.d.ts +25 -2
- package/dist/core/session-manager-types.d.ts.map +1 -1
- package/dist/core/session-manager-types.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +8 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +9 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-types.d.ts +4 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/skill-catalog.d.ts +35 -0
- package/dist/core/skill-catalog.d.ts.map +1 -0
- package/dist/core/skill-catalog.js +264 -0
- package/dist/core/skill-catalog.js.map +1 -0
- package/dist/core/skills-async.d.ts.map +1 -1
- package/dist/core/skills-async.js +12 -6
- package/dist/core/skills-async.js.map +1 -1
- package/dist/core/skills.d.ts +2 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +8 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.js +2 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts +25 -2
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +47 -18
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +5 -2
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js +3 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +8 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -0
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +3 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/hashline-engine/format.d.ts +2 -0
- package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/format.js +4 -2
- package/dist/core/tools/hashline-engine/format.js.map +1 -1
- package/dist/core/tools/hashline-engine/messages.d.ts +2 -0
- package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/messages.js +4 -2
- package/dist/core/tools/hashline-engine/messages.js.map +1 -1
- package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/parser.js +16 -4
- package/dist/core/tools/hashline-engine/parser.js.map +1 -1
- package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
- package/dist/core/tools/hashline-engine/tokenizer.js +37 -27
- package/dist/core/tools/hashline-engine/tokenizer.js.map +1 -1
- package/dist/core/tools/hashline.d.ts.map +1 -1
- package/dist/core/tools/hashline.js +8 -2
- package/dist/core/tools/hashline.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +2 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +8 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/search.d.ts.map +1 -1
- package/dist/core/tools/search.js +2 -0
- package/dist/core/tools/search.js.map +1 -1
- package/dist/core/tools/todos.d.ts +3 -12
- package/dist/core/tools/todos.d.ts.map +1 -1
- package/dist/core/tools/todos.js +19 -4
- package/dist/core/tools/todos.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +2 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/main-runtime-api-key.d.ts +1 -1
- package/dist/main-runtime-api-key.js.map +1 -1
- package/dist/main-session-options.d.ts +1 -1
- package/dist/main-session-options.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +8 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +8 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +26 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +38 -0
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.d.ts +37 -0
- package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +54 -1
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js +1 -1
- package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/reserved-bottom-overlay.d.ts +95 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.d.ts.map +1 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.js +234 -0
- package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +4 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +7 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +12 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +5 -4
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +2 -2
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +94 -6
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +41 -3
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +80 -11
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +8 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.js +13 -3
- package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +3 -4
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +6 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +2 -2
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +7 -3
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +7 -1
- package/dist/modes/interactive/interactive-session-runtime.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.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +34 -9
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +21 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +140 -38
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts +17 -0
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
- package/dist/modes/interactive/model-catalog-refresh.js +84 -0
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +2 -0
- package/dist/modes/interactive/theme/light.json +2 -0
- package/dist/modes/interactive/theme/theme-class.d.ts +12 -3
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +6 -1
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +23 -10
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +1 -0
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.d.ts +8 -0
- package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +3 -1
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +9 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +2 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +1 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +1 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts +3 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +3 -2
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/json-event.d.ts +6 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +17 -2
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +5 -4
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-responses.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/create-harness.d.ts.map +1 -1
- package/dist/server/create-harness.js +11 -0
- package/dist/server/create-harness.js.map +1 -1
- package/dist/utils/abort.d.ts +9 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +19 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +16 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +19 -19
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +9 -8
- package/docs/development.md +0 -1
- package/docs/docs.json +0 -1
- package/docs/environment-variables.md +3 -0
- package/docs/extensions.md +100 -2
- package/docs/json.md +3 -1
- package/docs/keybindings.md +8 -3
- package/docs/models/artificial-analysis-index.md +2 -2
- package/docs/models/model-selection.md +32 -23
- package/docs/models/pareto-efficiency.md +25 -24
- package/docs/providers.md +95 -2
- package/docs/quickstart.md +4 -2
- package/docs/rpc.md +21 -7
- package/docs/sdk.md +26 -1
- package/docs/session-format.md +5 -2
- package/docs/settings.md +34 -3
- package/docs/skills.md +16 -1
- package/docs/terminal-setup.md +15 -2
- package/docs/themes.md +22 -4
- package/docs/tools.md +3 -1
- package/docs/tui.md +2 -0
- package/docs/usage.md +5 -4
- package/docs/workflows.md +96 -19
- package/npm-shrinkwrap.json +211 -232
- package/package.json +8 -8
- package/dist/builtin/i-have-adhd/CHANGELOG.md +0 -30
- package/dist/builtin/i-have-adhd/LICENSE +0 -21
- package/dist/builtin/i-have-adhd/README.md +0 -18
- package/dist/builtin/i-have-adhd/index.ts +0 -238
- package/dist/builtin/i-have-adhd/package.json +0 -56
- package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +0 -140
- package/dist/builtin/workflows/builtin/open-claude-design-feedback.ts +0 -359
- package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-core.mjs +0 -180
- package/docs/i-have-adhd.md +0 -36
|
@@ -22,7 +22,7 @@ import path from 'node:path';
|
|
|
22
22
|
import { fileURLToPath } from 'node:url';
|
|
23
23
|
import { execFileSync } from 'node:child_process';
|
|
24
24
|
import { loadContext, extractPlatform } from './context.mjs';
|
|
25
|
-
import {
|
|
25
|
+
import { readLatestSnapshotAcrossTargets } from './critique-storage.mjs';
|
|
26
26
|
|
|
27
27
|
/** Is there code here at all, or just context files / an empty repo? */
|
|
28
28
|
function hasCode(cwd) {
|
|
@@ -34,34 +34,25 @@ function hasCode(cwd) {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
* timestamp-prefixed (`<iso>__<slug>.md`), so a lexical sort is chronological.
|
|
39
|
-
* Parses the small frontmatter for score + P0/P1 counts.
|
|
37
|
+
* Summarize the most recent critique snapshot across all targets.
|
|
40
38
|
*/
|
|
41
39
|
function latestCritique(cwd) {
|
|
42
40
|
try {
|
|
43
|
-
const
|
|
44
|
-
if (!
|
|
45
|
-
const
|
|
46
|
-
if (!files.length) return null;
|
|
47
|
-
const newest = files[files.length - 1];
|
|
48
|
-
const text = fs.readFileSync(path.join(dir, newest), 'utf-8');
|
|
49
|
-
const front = text.split('---')[1] || '';
|
|
50
|
-
const get = (k) => {
|
|
51
|
-
const m = front.match(new RegExp(`^${k}:\\s*(.+)$`, 'm'));
|
|
52
|
-
return m ? m[1].trim() : null;
|
|
53
|
-
};
|
|
41
|
+
const latest = readLatestSnapshotAcrossTargets({ cwd });
|
|
42
|
+
if (!latest) return null;
|
|
43
|
+
const get = (key) => latest.meta[key] ?? null;
|
|
54
44
|
const num = (v) => {
|
|
45
|
+
if (v == null || (typeof v === 'string' && v.trim() === '')) return null;
|
|
55
46
|
const n = Number(v);
|
|
56
47
|
return Number.isFinite(n) ? n : null;
|
|
57
48
|
};
|
|
58
49
|
return {
|
|
59
50
|
slug: get('slug'),
|
|
60
|
-
score: num(get('score')),
|
|
61
|
-
p0: num(get('p0')),
|
|
62
|
-
p1: num(get('p1')),
|
|
51
|
+
score: num(get('total_score') ?? get('score')),
|
|
52
|
+
p0: num(get('p0_count') ?? get('p0')),
|
|
53
|
+
p1: num(get('p1_count') ?? get('p1')),
|
|
63
54
|
timestamp: get('timestamp'),
|
|
64
|
-
file: path.relative(cwd, path
|
|
55
|
+
file: path.relative(cwd, latest.path),
|
|
65
56
|
};
|
|
66
57
|
} catch {
|
|
67
58
|
return null;
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* shape rather than the markdown block.
|
|
28
28
|
*/
|
|
29
29
|
import fs from 'node:fs';
|
|
30
|
+
import { spawnSync } from 'node:child_process';
|
|
30
31
|
import os from 'node:os';
|
|
31
32
|
import path from 'node:path';
|
|
32
33
|
import { fileURLToPath } from 'node:url';
|
|
@@ -1014,14 +1015,22 @@ async function fetchLatestSkillVersion() {
|
|
|
1014
1015
|
}
|
|
1015
1016
|
}
|
|
1016
1017
|
|
|
1018
|
+
// Two instructions used to sit in one directive: ask, and "if they agree, run
|
|
1019
|
+
// it". Nothing gated the second on an answer, and the same sentence said to
|
|
1020
|
+
// continue without waiting, so a run that could never establish agreement was
|
|
1021
|
+
// still spelled out as the next command. The offer stays; the command leaves
|
|
1022
|
+
// this turn entirely, because installing over the skill mid-session changes
|
|
1023
|
+
// files the session is reading and only takes effect in the next one anyway.
|
|
1017
1024
|
function buildUpdateDirective(localVersion, latestVersion) {
|
|
1018
1025
|
return (
|
|
1019
1026
|
`UPDATE_AVAILABLE: A newer Impeccable skill is available ` +
|
|
1020
1027
|
`(installed v${localVersion}, latest v${latestVersion}). ` +
|
|
1021
|
-
`
|
|
1028
|
+
`Mention it once, in this form: "A newer Impeccable (v${latestVersion}) is available. ` +
|
|
1022
1029
|
`Update now? It runs \`npx impeccable update\`." ` +
|
|
1023
|
-
`
|
|
1024
|
-
`
|
|
1030
|
+
`Do not run \`npx impeccable update\` in this turn, whatever the user answers: it rewrites the skill files ` +
|
|
1031
|
+
`this session is reading, and the update only takes effect in the next session, so there is nothing to gain now. ` +
|
|
1032
|
+
`Run it in a later turn, only after the user has asked for it in their own words. ` +
|
|
1033
|
+
`Continue the current task now without waiting, and do not raise this again.`
|
|
1025
1034
|
);
|
|
1026
1035
|
}
|
|
1027
1036
|
|
|
@@ -1045,38 +1054,17 @@ function updateCheckDisabledByConfig(cwd = process.cwd()) {
|
|
|
1045
1054
|
}
|
|
1046
1055
|
|
|
1047
1056
|
async function computeUpdateDirective(now = Date.now()) {
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
const latest = await fetchLatestSkillVersion();
|
|
1060
|
-
cache.lastCheck = now;
|
|
1061
|
-
if (latest) cache.latestVersion = latest;
|
|
1062
|
-
writeUpdateCache(cache);
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
const latest = cache.latestVersion;
|
|
1066
|
-
if (!latest || compareSemver(latest, localVersion) <= 0) return null;
|
|
1067
|
-
|
|
1068
|
-
// Anti-nag: surface a given version at most once per RENOTIFY window.
|
|
1069
|
-
if (cache.notifiedVersion === latest && cache.notifiedAt && now - cache.notifiedAt < RENOTIFY_INTERVAL_MS) {
|
|
1070
|
-
return null;
|
|
1071
|
-
}
|
|
1072
|
-
cache.notifiedVersion = latest;
|
|
1073
|
-
cache.notifiedAt = now;
|
|
1074
|
-
writeUpdateCache(cache);
|
|
1075
|
-
|
|
1076
|
-
return buildUpdateDirective(localVersion, latest);
|
|
1077
|
-
} catch {
|
|
1078
|
-
return null;
|
|
1079
|
-
}
|
|
1057
|
+
// Atomic divergence: the upstream update check GETs /api/version once a day
|
|
1058
|
+
// and then tells the user to run `npx impeccable update`. Atomic vendors this
|
|
1059
|
+
// skill, so that command would rewrite files the package owns and the version
|
|
1060
|
+
// is Atomic's to bump, not the user's. The check is therefore removed: it is
|
|
1061
|
+
// an outbound request on every session that can only ever produce advice the
|
|
1062
|
+
// user must not follow. Skill updates ship through Atomic releases.
|
|
1063
|
+
//
|
|
1064
|
+
// Nothing is fetched, cached, or notified. The helpers this used to call are
|
|
1065
|
+
// left in place so a future sync conflicts here rather than silently
|
|
1066
|
+
// restoring the call.
|
|
1067
|
+
return null;
|
|
1080
1068
|
}
|
|
1081
1069
|
|
|
1082
1070
|
async function cli() {
|
|
@@ -1143,11 +1131,13 @@ async function cli() {
|
|
|
1143
1131
|
parts.push(buildResolvedContextDirective(ctx, cliOptions, { targetExists }));
|
|
1144
1132
|
appendDetectorFallback(parts, ctx);
|
|
1145
1133
|
appendImageGenDirective(parts);
|
|
1134
|
+
appendBuildPathDirective(parts, ctx);
|
|
1146
1135
|
appendAutonomyCounterDirective(parts);
|
|
1147
1136
|
appendSubagentAuthorizationDirective(parts);
|
|
1148
1137
|
if (shouldWarnMissingTarget(ctx, targetProvided, targetExists)) {
|
|
1149
1138
|
parts.push(buildMissingTargetDirective());
|
|
1150
1139
|
}
|
|
1140
|
+
appendImageToolsDirective(parts);
|
|
1151
1141
|
appendStalenessDirective(parts, ctx, cliOptions);
|
|
1152
1142
|
if (updateDirective) parts.push(updateDirective);
|
|
1153
1143
|
process.stdout.write(parts.join('\n\n---\n\n') + '\n');
|
|
@@ -1161,6 +1151,7 @@ async function cli() {
|
|
|
1161
1151
|
parts.push(buildResolvedContextDirective(ctx, cliOptions, { targetExists }));
|
|
1162
1152
|
appendDetectorFallback(parts, ctx);
|
|
1163
1153
|
appendImageGenDirective(parts);
|
|
1154
|
+
appendBuildPathDirective(parts, ctx);
|
|
1164
1155
|
appendAutonomyCounterDirective(parts);
|
|
1165
1156
|
appendSubagentAuthorizationDirective(parts);
|
|
1166
1157
|
if (shouldWarnMissingTarget(ctx, targetProvided, targetExists)) {
|
|
@@ -1182,6 +1173,7 @@ async function cli() {
|
|
|
1182
1173
|
`# NATIVE PLATFORM REFERENCE: ${reference.name.toUpperCase()} (reference/${reference.name}.md)\n\n${reference.content.trim()}`,
|
|
1183
1174
|
);
|
|
1184
1175
|
}
|
|
1176
|
+
appendImageToolsDirective(parts);
|
|
1185
1177
|
appendStalenessDirective(parts, ctx, cliOptions);
|
|
1186
1178
|
if (!ctx.platform) {
|
|
1187
1179
|
// A `## Platform` section that names something we don't recognize (a
|
|
@@ -1266,6 +1258,53 @@ function automaticHookMode(ctx) {
|
|
|
1266
1258
|
}
|
|
1267
1259
|
|
|
1268
1260
|
|
|
1261
|
+
// Build-path preference: a workflow setting (comp-led vs code-led), read here
|
|
1262
|
+
// so every session starts knowing it without a file hunt. It rides the unified
|
|
1263
|
+
// config beside the hook and detector settings, and the gitignored local file
|
|
1264
|
+
// wins, because whether a machine has an image tool is a property of that
|
|
1265
|
+
// machine, not of the team's committed default. Absence stays silent;
|
|
1266
|
+
// new-work's own default applies, and the decision page toggle can flip the
|
|
1267
|
+
// value for a single session.
|
|
1268
|
+
function readBuildPathAt(root) {
|
|
1269
|
+
let value = null;
|
|
1270
|
+
let source = null;
|
|
1271
|
+
for (const name of ['config.json', 'config.local.json']) {
|
|
1272
|
+
const raw = readJson(path.join(root, '.impeccable', name));
|
|
1273
|
+
if (raw?.buildPath === 'comp' || raw?.buildPath === 'code') {
|
|
1274
|
+
value = raw.buildPath;
|
|
1275
|
+
source = `.impeccable/${name}`;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
return value ? { value, source } : null;
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
// Roots in precedence order, nearest first: the resolved project decides, and
|
|
1282
|
+
// the repo root is the fallback a monorepo commits once for every app in it.
|
|
1283
|
+
// `checkBuildPathUnset` reads exactly these two, and the pair has to match:
|
|
1284
|
+
// when they disagree the finding goes silent because a value exists while the
|
|
1285
|
+
// directive never names it, which is the one combination nobody can debug.
|
|
1286
|
+
//
|
|
1287
|
+
// The invoking directory is deliberately not in the chain. With `--target`
|
|
1288
|
+
// selecting another workspace, cwd is the caller's app, not the target's, and
|
|
1289
|
+
// letting it rank above the repo root hands one workspace another's workflow.
|
|
1290
|
+
// It stands in only when no project resolved at all.
|
|
1291
|
+
function appendBuildPathDirective(parts, ctx) {
|
|
1292
|
+
const roots = [...new Set(
|
|
1293
|
+
[ctx?.projectRoot || process.cwd(), ctx?.repoRoot].filter(Boolean).map((root) => path.resolve(root)),
|
|
1294
|
+
)];
|
|
1295
|
+
for (const root of roots) {
|
|
1296
|
+
const found = readBuildPathAt(root);
|
|
1297
|
+
if (!found) continue;
|
|
1298
|
+
// "Never written back" is scoped by the fact that this directive exists at
|
|
1299
|
+
// all: it is emitted only where a value is already recorded, which is the
|
|
1300
|
+
// case where a flip really is session-only. Saying so inline because the
|
|
1301
|
+
// bare absolute reads as a rule that overrides new-work's one-time offer,
|
|
1302
|
+
// which is exactly how the same wording misfired in serve-question.
|
|
1303
|
+
parts.push(`BUILD_PATH_DEFAULT: ${found.value} (from ${found.source}). Author direction and surface rounds with this as buildPath.value and toggle: true; a flip on the page binds that session only and is never written back, because a default is already recorded here. New-work's one-time offer to record a flipped value applies only where no default exists, which is why you are not seeing this line on those projects.`);
|
|
1304
|
+
return;
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1269
1308
|
// Image generation availability: harness-native tools always win, but when the
|
|
1270
1309
|
// environment carries an OpenAI key the API fallback works everywhere. The
|
|
1271
1310
|
// flag only reports capability, positively: absence stays silent, because a
|
|
@@ -1275,9 +1314,10 @@ function appendImageGenDirective(parts) {
|
|
|
1275
1314
|
if (!process.env.OPENAI_API_KEY) return;
|
|
1276
1315
|
const scriptsPath = path.dirname(fileURLToPath(import.meta.url));
|
|
1277
1316
|
parts.push([
|
|
1278
|
-
'IMAGE_GEN_AVAILABLE:
|
|
1279
|
-
|
|
1280
|
-
|
|
1317
|
+
'IMAGE_GEN_AVAILABLE: your harness-native image tool is always the first choice for generation; use it whenever one exists.',
|
|
1318
|
+
'This environment also carries an OpenAI key as the fallback for harnesses with no native tool:',
|
|
1319
|
+
`\`node ${scriptsPath}/generate-image.mjs --prompt "..." --out <file>\` (gpt-image-2, billed to the user's key; say so before the first render, and never reach for it when a native tool exists).`,
|
|
1320
|
+
'Visualizing a direction before building it measurably strengthens the result.',
|
|
1281
1321
|
].join(' '));
|
|
1282
1322
|
}
|
|
1283
1323
|
|
|
@@ -1332,6 +1372,19 @@ function appendDetectorFallback(parts, ctx) {
|
|
|
1332
1372
|
// markdown already in memory, a bounded set of stats, or one of the small JSON
|
|
1333
1373
|
// files the boot reads regardless. The deep pass (git drift, token divergence,
|
|
1334
1374
|
// cross-workspace sweep) belongs to the doctor command, not to every session.
|
|
1375
|
+
// One boot-time probe replaces every session re-deriving its image toolchain:
|
|
1376
|
+
// harnesses and OSes differ (cwebp, sips on macOS, magick, ffmpeg), and the
|
|
1377
|
+
// agent should read this line instead of running command -v per image.
|
|
1378
|
+
function appendImageToolsDirective(parts) {
|
|
1379
|
+
const probe = process.platform === 'win32' ? 'where' : 'which';
|
|
1380
|
+
const found = ['cwebp', 'sips', 'magick', 'ffmpeg'].filter((tool) => {
|
|
1381
|
+
try { return spawnSync(probe, [tool], { stdio: 'ignore' }).status === 0; } catch { return false; }
|
|
1382
|
+
});
|
|
1383
|
+
parts.push(found.length
|
|
1384
|
+
? `IMAGE_TOOLS: available image converters on this machine: ${found.join(', ')}. Use the first suitable one; never probe again this session.`
|
|
1385
|
+
: 'IMAGE_TOOLS: no image converter found (cwebp, sips, magick, ffmpeg). Ship PNG output unconverted rather than probing per image.');
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1335
1388
|
function appendStalenessDirective(parts, ctx, options) {
|
|
1336
1389
|
const projectRoot = ctx.projectRoot || process.cwd();
|
|
1337
1390
|
if (stalenessCheckDisabled([projectRoot, ctx.repoRoot])) return;
|
|
@@ -105,28 +105,37 @@ function parseFrontmatter(text) {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
|
-
* Return
|
|
108
|
+
* Return snapshot files matching `suffix`, sorted oldest → newest.
|
|
109
109
|
*/
|
|
110
|
-
|
|
110
|
+
const SNAPSHOT_FILENAME = /^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}Z__.+\.md$/;
|
|
111
|
+
|
|
112
|
+
function listSnapshots(suffix, cwd) {
|
|
111
113
|
const dir = getCritiqueDir(cwd);
|
|
112
114
|
if (!fs.existsSync(dir)) return [];
|
|
113
|
-
const suffix = `__${slug}.md`;
|
|
114
115
|
return fs.readdirSync(dir)
|
|
115
|
-
.filter((f) => f.endsWith(suffix))
|
|
116
|
+
.filter((f) => SNAPSHOT_FILENAME.test(f) && f.endsWith(suffix))
|
|
116
117
|
.sort()
|
|
117
118
|
.map((f) => path.join(dir, f));
|
|
118
119
|
}
|
|
119
120
|
|
|
121
|
+
function readLatestSnapshotMatching(suffix, cwd) {
|
|
122
|
+
const filePath = listSnapshots(suffix, cwd).at(-1);
|
|
123
|
+
if (!filePath) return null;
|
|
124
|
+
const body = fs.readFileSync(filePath, 'utf-8');
|
|
125
|
+
return { path: filePath, body, meta: parseFrontmatter(body) };
|
|
126
|
+
}
|
|
127
|
+
|
|
120
128
|
/**
|
|
121
129
|
* Return the most recent snapshot for `slug`, or null. Polish reads this
|
|
122
130
|
* to find its fix backlog when the slug matches.
|
|
123
131
|
*/
|
|
124
132
|
export function readLatestSnapshot(slug, { cwd = process.cwd() } = {}) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
133
|
+
return readLatestSnapshotMatching(`__${slug}.md`, cwd);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Return the most recent snapshot across all targets, or null. */
|
|
137
|
+
export function readLatestSnapshotAcrossTargets({ cwd = process.cwd() } = {}) {
|
|
138
|
+
return readLatestSnapshotMatching('.md', cwd);
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
/**
|
|
@@ -134,7 +143,7 @@ export function readLatestSnapshot(slug, { cwd = process.cwd() } = {}) {
|
|
|
134
143
|
* Critique appends a one-line trend to its output using this.
|
|
135
144
|
*/
|
|
136
145
|
export function readTrend(slug, { limit = 5, cwd = process.cwd() } = {}) {
|
|
137
|
-
const all =
|
|
146
|
+
const all = listSnapshots(`__${slug}.md`, cwd);
|
|
138
147
|
const slice = all.slice(-limit);
|
|
139
148
|
return slice.map((file) => parseFrontmatter(fs.readFileSync(file, 'utf-8')));
|
|
140
149
|
}
|
package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs
CHANGED
|
@@ -683,6 +683,10 @@ if (IS_BROWSER) {
|
|
|
683
683
|
|
|
684
684
|
const reasons = collectVisualContrastReasons(el, style);
|
|
685
685
|
if (reasons.length === 0) continue;
|
|
686
|
+
// Image-only mode filters here, inside the cap: gradient/opacity/filter
|
|
687
|
+
// candidates earlier in DOM order must not consume the budget and
|
|
688
|
+
// starve the url()-backed texts this mode exists to sample.
|
|
689
|
+
if (options.imageOnly && !reasons.includes('image background')) continue;
|
|
686
690
|
|
|
687
691
|
const textColor = parseRgb(style.color);
|
|
688
692
|
const fontSize = parseFloat(style.fontSize) || 16;
|
|
@@ -1175,6 +1179,7 @@ if (IS_BROWSER) {
|
|
|
1175
1179
|
}
|
|
1176
1180
|
|
|
1177
1181
|
async function analyzeVisualContrast(options = {}) {
|
|
1182
|
+
// imageOnly is enforced inside the collector, before the candidate cap.
|
|
1178
1183
|
const candidates = collectVisualContrastCandidates(options);
|
|
1179
1184
|
const results = [];
|
|
1180
1185
|
const shouldScrollOffscreen = options.scrollOffscreen === true;
|
|
@@ -1260,9 +1265,16 @@ if (IS_BROWSER) {
|
|
|
1260
1265
|
|
|
1261
1266
|
function addBrowserFindings(groupMap, el, findings) {
|
|
1262
1267
|
if (!findings || findings.length === 0) return;
|
|
1268
|
+
// Element-scoped waivers: a data-impeccable-ignore ancestor suppresses
|
|
1269
|
+
// matching findings for its whole subtree. Applied at this choke point so
|
|
1270
|
+
// every per-element attribution (checks, layout, occlusion, rhythm)
|
|
1271
|
+
// honors it; page-level findings attributed to <body> pass through
|
|
1272
|
+
// untouched, since body has no ignoring ancestor.
|
|
1273
|
+
const kept = findings.filter(f => !scopedIgnoreActive(el, f.type));
|
|
1274
|
+
if (kept.length === 0) return;
|
|
1263
1275
|
const existing = groupMap.get(el);
|
|
1264
|
-
if (existing) existing.push(...
|
|
1265
|
-
else groupMap.set(el, [...
|
|
1276
|
+
if (existing) existing.push(...kept);
|
|
1277
|
+
else groupMap.set(el, [...kept]);
|
|
1266
1278
|
}
|
|
1267
1279
|
|
|
1268
1280
|
function browserFindingsFromMap(groupMap) {
|
|
@@ -1620,9 +1632,27 @@ if (IS_BROWSER) {
|
|
|
1620
1632
|
for (const node of docClone.querySelectorAll('[id^="impeccable-live-"]')) {
|
|
1621
1633
|
node.remove();
|
|
1622
1634
|
}
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1635
|
+
// Regex findings that name a live selector resolve against the real DOM:
|
|
1636
|
+
// pseudo-element/class segments are stripped (the host element is the
|
|
1637
|
+
// anchor), a selector that matches nothing on this page drops the finding
|
|
1638
|
+
// (the CSS ships here, but the pattern never renders — the live DOM is
|
|
1639
|
+
// ground truth in the browser), and a match under a data-impeccable-ignore
|
|
1640
|
+
// ancestor is waived. Selector-less findings stay page-level.
|
|
1641
|
+
const scopedHtmlFindings = checkHtmlPatterns(docClone.outerHTML).filter(f => {
|
|
1642
|
+
if (!f.selector) return true;
|
|
1643
|
+
const query = String(f.selector).replace(/::?[a-zA-Z-]+(\([^)]*\))?/g, '').trim().replace(/,\s*(?=,|$)/g, '');
|
|
1644
|
+
if (!query || /^[,\s]*$/.test(query)) return true;
|
|
1645
|
+
let matches;
|
|
1646
|
+
try {
|
|
1647
|
+
matches = document.querySelectorAll(query);
|
|
1648
|
+
} catch {
|
|
1649
|
+
return true;
|
|
1650
|
+
}
|
|
1651
|
+
if (matches.length === 0) return false;
|
|
1652
|
+
return [...matches].some(el => !scopedIgnoreActive(el, f.id));
|
|
1653
|
+
});
|
|
1654
|
+
if (scopedHtmlFindings.length > 0) {
|
|
1655
|
+
const mapped = scopedHtmlFindings.map(f => {
|
|
1626
1656
|
const item = { type: f.id, detail: f.snippet };
|
|
1627
1657
|
if (f.severity) {
|
|
1628
1658
|
item.severity = f.severity;
|
|
@@ -1652,8 +1682,27 @@ if (IS_BROWSER) {
|
|
|
1652
1682
|
};
|
|
1653
1683
|
}
|
|
1654
1684
|
|
|
1685
|
+
// Visual contrast has three modes. Explicit true runs the full sampled
|
|
1686
|
+
// pass; explicit false disables it entirely (the deterministic-only mode
|
|
1687
|
+
// the test suites use). Unset — the default overlay run — samples ONLY
|
|
1688
|
+
// image-backed text: the one class the analytic walk deliberately skips,
|
|
1689
|
+
// because a url() layer's pixels are unknowable without looking. In-page
|
|
1690
|
+
// sampling draws the source image alone to a canvas (glyph ink never
|
|
1691
|
+
// pollutes it), and a cross-origin image without CORS reports unresolved
|
|
1692
|
+
// instead of guessing.
|
|
1693
|
+
function visualContrastMode(options = {}) {
|
|
1694
|
+
const explicit = typeof options.visualContrast === 'boolean'
|
|
1695
|
+
? options.visualContrast
|
|
1696
|
+
: typeof window.__IMPECCABLE_CONFIG__?.visualContrast === 'boolean'
|
|
1697
|
+
? window.__IMPECCABLE_CONFIG__.visualContrast
|
|
1698
|
+
: null;
|
|
1699
|
+
if (explicit === true) return 'full';
|
|
1700
|
+
if (explicit === false) return false;
|
|
1701
|
+
return 'image-only';
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1655
1704
|
function shouldRunVisualContrast(options = {}) {
|
|
1656
|
-
return options
|
|
1705
|
+
return visualContrastMode(options) !== false;
|
|
1657
1706
|
}
|
|
1658
1707
|
|
|
1659
1708
|
function visualContrastOptions(options = {}) {
|
|
@@ -1830,6 +1879,7 @@ if (IS_BROWSER) {
|
|
|
1830
1879
|
return [];
|
|
1831
1880
|
}
|
|
1832
1881
|
const resolvedOptions = visualContrastOptions(options);
|
|
1882
|
+
if (visualContrastMode(options) === 'image-only') resolvedOptions.imageOnly = true;
|
|
1833
1883
|
const analyses = await analyzeVisualContrast(resolvedOptions);
|
|
1834
1884
|
if (runtime.generation && runtime.generation !== scanGeneration) return analyses;
|
|
1835
1885
|
lastVisualContrastAnalyses = analyses;
|
|
@@ -105,6 +105,13 @@ function formatFindings(findings, jsonMode) {
|
|
|
105
105
|
// `optionsFor` maps a local path to scan options carrying that path's own
|
|
106
106
|
// project design system (or base options when null). Falls back to a plain
|
|
107
107
|
// object so direct/legacy callers still work.
|
|
108
|
+
async function detectLocalFile(filePath, options) {
|
|
109
|
+
if (HTML_EXTENSIONS.has(path.extname(filePath).toLowerCase())) {
|
|
110
|
+
return detectHtml(filePath, options);
|
|
111
|
+
}
|
|
112
|
+
return detectText(fs.readFileSync(filePath, 'utf-8'), filePath, options);
|
|
113
|
+
}
|
|
114
|
+
|
|
108
115
|
async function handleStdin(optionsFor = () => ({})) {
|
|
109
116
|
const resolve = typeof optionsFor === 'function' ? optionsFor : () => optionsFor;
|
|
110
117
|
const chunks = [];
|
|
@@ -114,9 +121,7 @@ async function handleStdin(optionsFor = () => ({})) {
|
|
|
114
121
|
const parsed = JSON.parse(input);
|
|
115
122
|
const fp = parsed?.tool_input?.file_path;
|
|
116
123
|
if (fp && fs.existsSync(fp)) {
|
|
117
|
-
|
|
118
|
-
return HTML_EXTENSIONS.has(path.extname(fp).toLowerCase())
|
|
119
|
-
? detectHtml(fp, options) : detectText(fs.readFileSync(fp, 'utf-8'), fp, options);
|
|
124
|
+
return detectLocalFile(fp, resolve(fp));
|
|
120
125
|
}
|
|
121
126
|
} catch { /* not JSON */ }
|
|
122
127
|
return detectText(input, '<stdin>', resolve(null));
|
|
@@ -374,16 +379,10 @@ async function detectCli() {
|
|
|
374
379
|
}
|
|
375
380
|
|
|
376
381
|
for (const file of files) {
|
|
377
|
-
const ext = path.extname(file).toLowerCase();
|
|
378
382
|
// Each file resolves its own project design system (cached by root),
|
|
379
383
|
// so a scan spanning sibling projects applies the right rules per file.
|
|
380
384
|
const fileOptions = scanOptionsFor(file);
|
|
381
|
-
|
|
382
|
-
if (HTML_EXTENSIONS.has(ext)) {
|
|
383
|
-
fileFindings = await detectHtml(file, fileOptions);
|
|
384
|
-
} else {
|
|
385
|
-
fileFindings = detectText(fs.readFileSync(file, 'utf-8'), file, fileOptions);
|
|
386
|
-
}
|
|
385
|
+
const fileFindings = await detectLocalFile(file, fileOptions);
|
|
387
386
|
// Annotate findings with import context
|
|
388
387
|
const importers = importedByMap.get(file);
|
|
389
388
|
if (importers && importers.size > 0) {
|
|
@@ -396,13 +395,8 @@ async function detectCli() {
|
|
|
396
395
|
}
|
|
397
396
|
} else if (stat.isFile()) {
|
|
398
397
|
if (shouldIgnoreDetectionFile(resolved, process.cwd(), detectionConfig)) continue;
|
|
399
|
-
const ext = path.extname(resolved).toLowerCase();
|
|
400
398
|
const fileOptions = scanOptionsFor(resolved);
|
|
401
|
-
|
|
402
|
-
allFindings.push(...await detectHtml(resolved, fileOptions));
|
|
403
|
-
} else {
|
|
404
|
-
allFindings.push(...detectText(fs.readFileSync(resolved, 'utf-8'), resolved, fileOptions));
|
|
405
|
-
}
|
|
399
|
+
allFindings.push(...await detectLocalFile(resolved, fileOptions));
|
|
406
400
|
}
|
|
407
401
|
}
|
|
408
402
|
} finally {
|