@bastani/atomic 0.9.14-alpha.1 → 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 +46 -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 +45 -0
- package/dist/builtin/workflows/README.md +30 -8
- package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
- package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
- package/dist/builtin/workflows/builtin/goal-models.ts +8 -10
- 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/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 +7 -15
- package/dist/builtin/workflows/builtin/ralph-models.ts +24 -29
- package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
- 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/durable/completed-catalog.ts +10 -0
- 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/engine/run-tool-control-registry.ts +9 -1
- 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/index.bundle.mjs +2680 -1418
- 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/shared/authoring-contract-ui.d.ts +9 -0
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -0
- package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
- 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/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/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/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 +4 -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 +13 -9
- package/dist/core/tools/ask-user-question/ask-user-question.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.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/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 +2 -2
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +38 -3
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +75 -10
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +7 -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 +18 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +126 -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/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 +73 -2
- package/docs/json.md +3 -1
- package/docs/keybindings.md +7 -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 +62 -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
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* open-claude-design ⇄ impeccable live protocol.
|
|
3
|
+
*
|
|
4
|
+
* In a chat session the agent owns the live poll loop, and "the review is over"
|
|
5
|
+
* needs no ceremony because the user simply keeps talking. A workflow stage
|
|
6
|
+
* boundary is a commit point, and the live contract's `"timeout" -> LOOP` is an
|
|
7
|
+
* instruction to a model rather than a constraint: a stage that concludes on a
|
|
8
|
+
* poll timeout would end a review the user never finished.
|
|
9
|
+
*
|
|
10
|
+
* So the workflow drives the protocol instead. Polling and replying are durable
|
|
11
|
+
* `ctx.tool` nodes; the model is invoked only for the events that need it
|
|
12
|
+
* (`generate`, `steer`, `manual_edit_apply`, and mount failures). Termination
|
|
13
|
+
* stops being a judgment and becomes the helper's own `exit` event.
|
|
14
|
+
*
|
|
15
|
+
* `timeout` is absorbed here rather than surfaced, so an idle hour costs no
|
|
16
|
+
* graph nodes. Every poll/reply invocation must, however, exit successfully;
|
|
17
|
+
* helper failures are surfaced instead of being mistaken for another timeout.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { spawn } from "node:child_process";
|
|
21
|
+
import { fileURLToPath } from "node:url";
|
|
22
|
+
|
|
23
|
+
/** JSON values emitted by the live helper. */
|
|
24
|
+
export type JsonValue = string | number | boolean | null | readonly JsonValue[] | { readonly [key: string]: JsonValue };
|
|
25
|
+
|
|
26
|
+
/** Events the live helper delivers. Anything unknown is treated as ignorable. */
|
|
27
|
+
export type LiveEventType =
|
|
28
|
+
| "generate"
|
|
29
|
+
| "steer"
|
|
30
|
+
| "accept"
|
|
31
|
+
| "discard"
|
|
32
|
+
| "prefetch"
|
|
33
|
+
| "manual_edit_apply"
|
|
34
|
+
| "variant_mounted"
|
|
35
|
+
| "variant_mount_failed"
|
|
36
|
+
| "timeout"
|
|
37
|
+
| "exit";
|
|
38
|
+
|
|
39
|
+
export type LiveEvent = {
|
|
40
|
+
readonly type: LiveEventType | string;
|
|
41
|
+
readonly id?: string;
|
|
42
|
+
readonly variant?: number;
|
|
43
|
+
readonly variantId?: string;
|
|
44
|
+
readonly url?: string;
|
|
45
|
+
readonly pageUrl?: string;
|
|
46
|
+
readonly error?: string;
|
|
47
|
+
readonly file?: string;
|
|
48
|
+
readonly sourceFile?: string;
|
|
49
|
+
readonly message?: string;
|
|
50
|
+
readonly data?: JsonValue;
|
|
51
|
+
readonly screenshot?: string;
|
|
52
|
+
readonly raw: string;
|
|
53
|
+
/** Preserve additional upstream event fields without narrowing their JSON shape. */
|
|
54
|
+
readonly [key: string]: JsonValue | undefined;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** Events the model must handle before the loop may reply and poll again. */
|
|
58
|
+
const MODEL_EVENTS = new Set<string>(["generate", "steer", "manual_edit_apply", "variant_mount_failed"]);
|
|
59
|
+
|
|
60
|
+
export function needsModel(event: LiveEvent): boolean {
|
|
61
|
+
return MODEL_EVENTS.has(event.type);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Reply status the helper expects for each model-handled event. */
|
|
65
|
+
export function replyTokenFor(event: LiveEvent): string {
|
|
66
|
+
if (event.type === "steer") return "steer_done";
|
|
67
|
+
return "done";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const LEGACY_REPLY_STATUSES = new Set(["done", "error", "complete", "discard", "discarded"]);
|
|
71
|
+
|
|
72
|
+
function isJsonObject(value: JsonValue): value is { readonly [key: string]: JsonValue } {
|
|
73
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Last JSON object printed by a live script, which is the event payload. */
|
|
77
|
+
export function parseLiveEvent(stdout: string): LiveEvent {
|
|
78
|
+
const lines = stdout.split(/\r?\n/).filter((line) => line.trim().startsWith("{"));
|
|
79
|
+
for (const line of [...lines].reverse()) {
|
|
80
|
+
try {
|
|
81
|
+
const parsed = JSON.parse(line) as JsonValue;
|
|
82
|
+
if (!isJsonObject(parsed) || typeof parsed.type !== "string") continue;
|
|
83
|
+
// Keep the complete JSON event, not only the fields known by the old
|
|
84
|
+
// protocol. 4.1.1 adds mount diagnostics and structured reply data.
|
|
85
|
+
return { ...parsed, type: parsed.type, raw: line } as LiveEvent;
|
|
86
|
+
} catch {
|
|
87
|
+
/* not the event line */
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// An unreadable poll is not an ending. Treat it as a timeout so the caller
|
|
91
|
+
// polls again rather than concluding a review nobody finished.
|
|
92
|
+
return { type: "timeout", raw: stdout };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export type LivePollDeps = {
|
|
96
|
+
readonly run?: (scriptPath: string, args: readonly string[], cwd: string, signal?: AbortSignal) => Promise<ScriptResult>;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export type LiveReplyInput = {
|
|
100
|
+
readonly workflowCwd: string;
|
|
101
|
+
readonly event: LiveEvent;
|
|
102
|
+
readonly status?: string;
|
|
103
|
+
/** Source/manifest path accepted by generate and mount-failure replies. */
|
|
104
|
+
readonly file?: string;
|
|
105
|
+
/** The helper's positional message argument (there is no --message flag). */
|
|
106
|
+
readonly message?: string;
|
|
107
|
+
/** Structured result accepted by manual_edit_apply replies. */
|
|
108
|
+
readonly data?: JsonValue;
|
|
109
|
+
readonly signal?: AbortSignal;
|
|
110
|
+
readonly deps?: LivePollDeps;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
function assertSuccessfulScript(result: ScriptResult, operation: string): ScriptResult {
|
|
114
|
+
if (result.code !== 0) {
|
|
115
|
+
const details = result.stderr.length > 0 ? `: ${result.stderr}` : "";
|
|
116
|
+
throw new Error(`${operation} failed with exit code ${result.code}${details}`);
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Poll until the helper delivers an event that matters. `timeout` events and
|
|
123
|
+
* unreadable output loop internally, so callers only ever see substantive
|
|
124
|
+
* events or `exit`.
|
|
125
|
+
*/
|
|
126
|
+
export async function pollLiveEvent(input: {
|
|
127
|
+
readonly workflowCwd: string;
|
|
128
|
+
readonly signal?: AbortSignal;
|
|
129
|
+
readonly deps?: LivePollDeps;
|
|
130
|
+
}): Promise<LiveEvent> {
|
|
131
|
+
const script = liveScriptPath("live-poll.mjs");
|
|
132
|
+
const run = input.deps?.run ?? runNodeScript;
|
|
133
|
+
for (;;) {
|
|
134
|
+
if (input.signal?.aborted === true) return { type: "exit", raw: "aborted" };
|
|
135
|
+
const result = assertSuccessfulScript(await run(script, [], input.workflowCwd, input.signal), "live poll");
|
|
136
|
+
const event = parseLiveEvent(result.stdout);
|
|
137
|
+
if (event.type !== "timeout") return event;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Acknowledge a model-handled event so the helper unblocks the overlay. */
|
|
142
|
+
export async function replyLiveEvent(input: LiveReplyInput): Promise<ScriptResult> {
|
|
143
|
+
const id = input.event.id;
|
|
144
|
+
if (typeof id !== "string" || id.length === 0 || id.startsWith("--")) {
|
|
145
|
+
throw new Error(`Cannot reply to ${input.event.type}: live event id is missing`);
|
|
146
|
+
}
|
|
147
|
+
if (LEGACY_REPLY_STATUSES.has(id)) {
|
|
148
|
+
throw new Error(`Cannot reply to live event ${id}: expected an event id before the reply status`);
|
|
149
|
+
}
|
|
150
|
+
const status = input.status ?? replyTokenFor(input.event);
|
|
151
|
+
if (status.length === 0 || status.startsWith("--")) {
|
|
152
|
+
throw new Error(`Cannot reply to live event ${id}: reply status is missing`);
|
|
153
|
+
}
|
|
154
|
+
const args = ["--reply", id, status];
|
|
155
|
+
const file = input.file ?? input.event.file;
|
|
156
|
+
const message = input.message ?? input.event.message;
|
|
157
|
+
const data = input.data ?? input.event.data;
|
|
158
|
+
if (file !== undefined) args.push("--file", file);
|
|
159
|
+
if (data !== undefined) args.push("--data", JSON.stringify(data));
|
|
160
|
+
if (message !== undefined) args.push(message);
|
|
161
|
+
const script = liveScriptPath("live-poll.mjs");
|
|
162
|
+
const run = input.deps?.run ?? runNodeScript;
|
|
163
|
+
return assertSuccessfulScript(await run(script, args, input.workflowCwd, input.signal), "live reply");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Absolute path to one of the impeccable live scripts.
|
|
168
|
+
*
|
|
169
|
+
* Always the copy that ships inside this package — `packages/workflows/skills`
|
|
170
|
+
* in the repository, `dist/builtin/workflows/skills` once bundled — which sits
|
|
171
|
+
* one level up from this module in both layouts, so `import.meta.url` finds it
|
|
172
|
+
* without the host naming a path.
|
|
173
|
+
*
|
|
174
|
+
* A project-vendored copy is deliberately NOT consulted. The workflow drives
|
|
175
|
+
* this protocol directly: it depends on `live-poll.mjs`'s CLI surface, its
|
|
176
|
+
* `--reply` tokens, and its JSON event vocabulary. The bundled scripts ship and
|
|
177
|
+
* are tested with this code, so they cannot drift from it; a forked copy in a
|
|
178
|
+
* project could, and would break the loop in ways no test here would catch.
|
|
179
|
+
*/
|
|
180
|
+
export function liveScriptPath(script: string): string {
|
|
181
|
+
return fileURLToPath(new URL(`../skills/impeccable/scripts/${script}`, import.meta.url));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export type ScriptResult = { readonly code: number; readonly stdout: string; readonly stderr: string };
|
|
185
|
+
|
|
186
|
+
function runNodeScript(
|
|
187
|
+
scriptPath: string,
|
|
188
|
+
args: readonly string[],
|
|
189
|
+
cwd: string,
|
|
190
|
+
signal?: AbortSignal,
|
|
191
|
+
): Promise<ScriptResult> {
|
|
192
|
+
return new Promise((resolve, reject) => {
|
|
193
|
+
const child = spawn(process.execPath, [scriptPath, ...args], {
|
|
194
|
+
cwd,
|
|
195
|
+
env: { ...process.env, GH_PAGER: "cat" },
|
|
196
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
197
|
+
});
|
|
198
|
+
let stdout = "";
|
|
199
|
+
let stderr = "";
|
|
200
|
+
let settled = false;
|
|
201
|
+
const onAbort = () => child.kill("SIGTERM");
|
|
202
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
203
|
+
child.stdout.on("data", (chunk: Buffer) => {
|
|
204
|
+
stdout += chunk.toString();
|
|
205
|
+
});
|
|
206
|
+
child.stderr.on("data", (chunk: Buffer) => {
|
|
207
|
+
stderr += chunk.toString();
|
|
208
|
+
});
|
|
209
|
+
child.on("error", (error) => {
|
|
210
|
+
if (settled) return;
|
|
211
|
+
settled = true;
|
|
212
|
+
signal?.removeEventListener("abort", onAbort);
|
|
213
|
+
reject(error);
|
|
214
|
+
});
|
|
215
|
+
child.on("close", (code) => {
|
|
216
|
+
if (settled) return;
|
|
217
|
+
settled = true;
|
|
218
|
+
signal?.removeEventListener("abort", onAbort);
|
|
219
|
+
resolve({ code: code ?? -1, stdout: stdout.trim(), stderr: stderr.trim() });
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/** Prompt for the stage that handles one live event. */
|
|
224
|
+
export function buildLiveEventPrompt(input: {
|
|
225
|
+
readonly event: LiveEvent;
|
|
226
|
+
readonly previewPath: string;
|
|
227
|
+
}): string {
|
|
228
|
+
const shared = [
|
|
229
|
+
`<live_event>\n${input.event.raw}\n</live_event>`,
|
|
230
|
+
`<preview_path>${input.previewPath}</preview_path>`,
|
|
231
|
+
"<role>You are an opinionated staff design engineer inside an impeccable `live` session. The workflow owns the poll loop; handle exactly this one event and stop.</role>",
|
|
232
|
+
];
|
|
233
|
+
if (input.event.type === "generate") {
|
|
234
|
+
return [
|
|
235
|
+
...shared,
|
|
236
|
+
[
|
|
237
|
+
"<instructions>",
|
|
238
|
+
"Follow the live contract for a `generate` event:",
|
|
239
|
+
"1. Reuse `event.scaffold` when present and read the annotation screenshot when one is attached.",
|
|
240
|
+
"2. Extract the page identity FIRST, then produce three DISTINCT on-brand variants and publish them for the user to preview.",
|
|
241
|
+
"3. Apply the craft floors by construction as you write. Do not screenshot, re-render, or QA between generate and accept; the overlay preview is the verification channel.",
|
|
242
|
+
"Do not poll, do not reply, and do not exit the session: the workflow does that. Stop as soon as the variants are published.",
|
|
243
|
+
"</instructions>",
|
|
244
|
+
].join("\n"),
|
|
245
|
+
].join("\n\n");
|
|
246
|
+
}
|
|
247
|
+
if (input.event.type === "steer") {
|
|
248
|
+
return [
|
|
249
|
+
...shared,
|
|
250
|
+
[
|
|
251
|
+
"<instructions>",
|
|
252
|
+
"Follow the live contract for a `steer` event: read the message and pageUrl, then do the work — page edits, navigation help, or a short answer.",
|
|
253
|
+
"Do not poll, do not reply, and do not exit the session: the workflow does that. Stop when the steer is handled.",
|
|
254
|
+
"</instructions>",
|
|
255
|
+
].join("\n"),
|
|
256
|
+
].join("\n\n");
|
|
257
|
+
}
|
|
258
|
+
if (input.event.type === "variant_mount_failed") {
|
|
259
|
+
return [
|
|
260
|
+
...shared,
|
|
261
|
+
[
|
|
262
|
+
"<instructions>",
|
|
263
|
+
"The browser could not mount the published variant. Inspect the reported variant source/module, fix the compile or runtime failure, and stop after the repair.",
|
|
264
|
+
"Do not poll, do not reply, and do not exit the session: the workflow does that.",
|
|
265
|
+
].join("\n"),
|
|
266
|
+
].join("\n\n");
|
|
267
|
+
}
|
|
268
|
+
return [
|
|
269
|
+
...shared,
|
|
270
|
+
[
|
|
271
|
+
"<instructions>",
|
|
272
|
+
"Apply this manual edit event per the live contract, then stop. Do not poll, reply, or exit; the workflow does that.",
|
|
273
|
+
"</instructions>",
|
|
274
|
+
].join("\n"),
|
|
275
|
+
].join("\n\n");
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** Prompt for the stage that boots the session and hands the loop back to the workflow. */
|
|
279
|
+
export function buildLiveSessionStartPrompt(input: {
|
|
280
|
+
readonly previewPath: string;
|
|
281
|
+
readonly previewFileUrl: string;
|
|
282
|
+
readonly browserBootstrapRules: string;
|
|
283
|
+
readonly round: number;
|
|
284
|
+
}): string {
|
|
285
|
+
return [
|
|
286
|
+
`<preview_path>${input.previewPath}</preview_path>`,
|
|
287
|
+
`<preview_file_url>${input.previewFileUrl}</preview_file_url>`,
|
|
288
|
+
`<browser_use_guidelines>${input.browserBootstrapRules}</browser_use_guidelines>`,
|
|
289
|
+
"<role>You are an opinionated staff design engineer opening an impeccable `live` review session.</role>",
|
|
290
|
+
[
|
|
291
|
+
"<objective>",
|
|
292
|
+
`Start review session ${input.round}: boot live against the static preview and open it in the user's browser. Then STOP.`,
|
|
293
|
+
"</objective>",
|
|
294
|
+
].join("\n"),
|
|
295
|
+
[
|
|
296
|
+
"<instructions>",
|
|
297
|
+
"1. Drive `/skill:impeccable live` against the static preview: run `live.mjs` with `--target` pointed at the preview file, or the equivalent `.impeccable/live/config.json` entry, and open the URL that serves it.",
|
|
298
|
+
"2. Print the live `http://` review URL in plain text, plus the preview file URL as the manual fallback, so anyone attaching to this run can find the review.",
|
|
299
|
+
"3. Directly under the URL, print how the user ends the review, in plain text: click exit in the Impeccable overlay, close the browser tab, or say `exit live`. State that the review waits indefinitely until they do, and that ending it exports the design as it then stands, with no further round.",
|
|
300
|
+
"4. Do NOT start a poll loop. The workflow owns polling and will call you back for each event that needs you. Ending your turn does not end the review.",
|
|
301
|
+
"</instructions>",
|
|
302
|
+
].join("\n"),
|
|
303
|
+
"<output_format>Under 150 words: the live review URL, the manual fallback path, how to end the review, and whether the browser opened.</output_format>",
|
|
304
|
+
].join("\n\n");
|
|
305
|
+
}
|
|
@@ -6,17 +6,16 @@ import {
|
|
|
6
6
|
taggedPrompt,
|
|
7
7
|
} from "./open-claude-design-utils.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from "./open-claude-design-
|
|
9
|
+
buildLiveEventPrompt,
|
|
10
|
+
buildLiveSessionStartPrompt,
|
|
11
|
+
needsModel,
|
|
12
|
+
pollLiveEvent,
|
|
13
|
+
replyLiveEvent,
|
|
14
|
+
replyTokenFor,
|
|
15
|
+
} from "./open-claude-design-live-protocol.js";
|
|
16
16
|
import {
|
|
17
17
|
LIVE_REVIEW_GATE_OPTIONS,
|
|
18
18
|
buildLiveReviewGateMessage,
|
|
19
|
-
buildLivePreviewDisplayPrompt,
|
|
20
19
|
isUiUnavailableRejection,
|
|
21
20
|
type LiveReviewGateUi,
|
|
22
21
|
} from "./open-claude-design-setup.js";
|
|
@@ -27,6 +26,8 @@ const GROUNDED_REPORTING =
|
|
|
27
26
|
type DesignContext = {
|
|
28
27
|
task(name: string, options: object): Promise<WorkflowTaskResult>;
|
|
29
28
|
parallel(steps: readonly object[], options: { readonly task: string }): Promise<WorkflowTaskResult[]>;
|
|
29
|
+
/** Durable tool node; the live review loop is built from these. */
|
|
30
|
+
tool<T>(name: string, args: object, fn: (handle: { readonly signal: AbortSignal }) => Promise<T>): Promise<T>;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
33
|
type ModelConfig = Record<string, object | string | readonly string[]>;
|
|
@@ -48,10 +49,8 @@ type RefineOptions = {
|
|
|
48
49
|
readonly designContext: DesignContext;
|
|
49
50
|
readonly prompt: string;
|
|
50
51
|
readonly outputType: string;
|
|
51
|
-
readonly maxRefinements: number;
|
|
52
52
|
readonly previewPath: string;
|
|
53
53
|
readonly previewFileUrl: string;
|
|
54
|
-
readonly artifactDir: string;
|
|
55
54
|
readonly browserBootstrapRules: string;
|
|
56
55
|
/** Path to the persisted design-context.md artifact (issue #2121). */
|
|
57
56
|
readonly designContextFile: string;
|
|
@@ -63,117 +62,116 @@ type RefineOptions = {
|
|
|
63
62
|
readonly ui: LiveReviewGateUi;
|
|
64
63
|
};
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Generate a design, then review it in one live session.
|
|
67
|
+
*
|
|
68
|
+
* The live session is itself unbounded: the user picks elements, accepts
|
|
69
|
+
* on-brand variants written into `preview.html` in place, and steers, until
|
|
70
|
+
* they leave. The preview is exported as it stands when the session ends.
|
|
71
|
+
*/
|
|
72
|
+
export async function refineOpenClaudeDesign(options: RefineOptions): Promise<{ readonly latestDesign: string }> {
|
|
73
|
+
const { designContext, prompt, outputType, previewPath, previewFileUrl, browserBootstrapRules, designContextFile, referencesFile, designModelConfig, workflowCwd } = options;
|
|
68
74
|
const importContext = options.importContext ?? "";
|
|
69
|
-
let latestDesign = "";
|
|
70
|
-
let latestGenerateSessionFile: string | undefined;
|
|
71
|
-
let latestUserFeedbackSessionFile: string | undefined;
|
|
72
|
-
let pendingFeedback: PreviewFeedback | undefined;
|
|
73
|
-
let approvedForExport = false;
|
|
74
|
-
let refinementCount = 0;
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
previewPath,
|
|
91
|
-
designContextFile,
|
|
92
|
-
referencesFile,
|
|
93
|
-
latestDesign,
|
|
94
|
-
importContext,
|
|
95
|
-
feedback: pendingFeedback,
|
|
96
|
-
});
|
|
97
|
-
if (pendingFeedback !== undefined) {
|
|
98
|
-
assertUserAnnotationsThreaded(generatePrompt, [pendingFeedback], generateStageName);
|
|
99
|
-
}
|
|
76
|
+
// Large research context travels by artifact file (`reads` + explicit read
|
|
77
|
+
// instructions in the prompt), not as an inline payload (issue #2121).
|
|
78
|
+
const generated = await designContext.task("generate-1", {
|
|
79
|
+
prompt: buildInitialGeneratePrompt({
|
|
80
|
+
prompt,
|
|
81
|
+
outputType,
|
|
82
|
+
previewPath,
|
|
83
|
+
designContextFile,
|
|
84
|
+
referencesFile,
|
|
85
|
+
importContext,
|
|
86
|
+
}),
|
|
87
|
+
reads: [designContextFile, referencesFile],
|
|
88
|
+
...designModelConfig,
|
|
89
|
+
});
|
|
100
90
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
...forkContinuationOptions(latestGenerateSessionFile),
|
|
91
|
+
// The browser review waits on a long-poll rather than an awaiting-input
|
|
92
|
+
// stage, so raise the run-level prompt before opening the session. Only the
|
|
93
|
+
// executor's unavailable-UI rejection degrades to running the review;
|
|
94
|
+
// lifecycle failures must propagate and stop the workflow.
|
|
95
|
+
const gateChoice = await options.ui
|
|
96
|
+
.select(
|
|
97
|
+
buildLiveReviewGateMessage({ round: 1, previewPath, previewFileUrl }),
|
|
98
|
+
LIVE_REVIEW_GATE_OPTIONS,
|
|
99
|
+
)
|
|
100
|
+
.catch((error: unknown) => {
|
|
101
|
+
if (isUiUnavailableRejection(error)) return LIVE_REVIEW_GATE_OPTIONS[0];
|
|
102
|
+
throw error;
|
|
114
103
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
104
|
+
if (gateChoice === LIVE_REVIEW_GATE_OPTIONS[0]) {
|
|
105
|
+
await runLiveReviewSession({
|
|
106
|
+
designContext,
|
|
107
|
+
round: 1,
|
|
108
|
+
reviewStageName: "user-feedback-1",
|
|
109
|
+
previewPath,
|
|
110
|
+
previewFileUrl,
|
|
111
|
+
browserBootstrapRules,
|
|
112
|
+
designModelConfig,
|
|
113
|
+
workflowCwd,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
118
116
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
// a run-level `ctx.ui` prompt first. It fires the needs-attention badge,
|
|
122
|
-
// names the preview URL, and syncs the review to the user's presence.
|
|
123
|
-
// Only the executor's unavailable-UI rejection (headless / no adapter)
|
|
124
|
-
// degrades to running the review; lifecycle failures such as interruption
|
|
125
|
-
// or a failed durable checkpoint must propagate and stop the workflow.
|
|
126
|
-
const gateChoice = await options.ui
|
|
127
|
-
.select(
|
|
128
|
-
buildLiveReviewGateMessage({ iteration, maxRefinements, previewPath, previewFileUrl }),
|
|
129
|
-
LIVE_REVIEW_GATE_OPTIONS,
|
|
130
|
-
)
|
|
131
|
-
.catch((error: unknown) => {
|
|
132
|
-
if (isUiUnavailableRejection(error)) return LIVE_REVIEW_GATE_OPTIONS[0];
|
|
133
|
-
throw error;
|
|
134
|
-
});
|
|
135
|
-
if (gateChoice === LIVE_REVIEW_GATE_OPTIONS[1]) {
|
|
136
|
-
approvedForExport = true;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
117
|
+
return { latestDesign: generated.text };
|
|
118
|
+
}
|
|
139
119
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
previewPath,
|
|
151
|
-
previewFileUrl,
|
|
152
|
-
browserBootstrapRules,
|
|
153
|
-
iteration,
|
|
154
|
-
maxRefinements,
|
|
155
|
-
}),
|
|
156
|
-
...designModelConfig,
|
|
157
|
-
...forkContinuationOptions(latestUserFeedbackSessionFile),
|
|
158
|
-
});
|
|
120
|
+
type LiveReviewSessionOptions = {
|
|
121
|
+
readonly designContext: DesignContext;
|
|
122
|
+
readonly round: number;
|
|
123
|
+
readonly reviewStageName: string;
|
|
124
|
+
readonly previewPath: string;
|
|
125
|
+
readonly previewFileUrl: string;
|
|
126
|
+
readonly browserBootstrapRules: string;
|
|
127
|
+
readonly designModelConfig: ModelConfig;
|
|
128
|
+
readonly workflowCwd: string;
|
|
129
|
+
};
|
|
159
130
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Run one live review session until the helper emits its terminal `exit` event.
|
|
133
|
+
*
|
|
134
|
+
* The workflow owns the poll loop: `ctx.tool` polls and replies, and the model
|
|
135
|
+
* is called back only for the events that need it. Termination is the helper's
|
|
136
|
+
* `exit` event rather than a model's judgment that a review looked finished,
|
|
137
|
+
* which is what prevents a poll timeout from ending an active review.
|
|
138
|
+
*/
|
|
139
|
+
async function runLiveReviewSession(options: LiveReviewSessionOptions): Promise<void> {
|
|
140
|
+
const { designContext, round, reviewStageName, previewPath, previewFileUrl, browserBootstrapRules, designModelConfig, workflowCwd } = options;
|
|
141
|
+
let sessionFile: string | undefined;
|
|
168
142
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
143
|
+
const start = await designContext.task(`${reviewStageName}-start`, {
|
|
144
|
+
prompt: buildLiveSessionStartPrompt({ previewPath, previewFileUrl, browserBootstrapRules, round }),
|
|
145
|
+
...designModelConfig,
|
|
146
|
+
});
|
|
147
|
+
sessionFile = start.sessionFile;
|
|
175
148
|
|
|
176
|
-
|
|
149
|
+
for (let index = 1; ; index += 1) {
|
|
150
|
+
// `timeout` is absorbed inside the poll, so an idle hour costs no nodes and
|
|
151
|
+
// never looks like an ending.
|
|
152
|
+
const event = await designContext.tool(`live-poll-${round}-${index}`, { round, index }, async ({ signal }) =>
|
|
153
|
+
pollLiveEvent({ workflowCwd, signal }),
|
|
154
|
+
);
|
|
155
|
+
if (event.type === "exit") break;
|
|
156
|
+
// `variant_mounted` is journal-only. All other non-model events are
|
|
157
|
+
// acknowledged by the helper itself and do not mint a model stage.
|
|
158
|
+
if (!needsModel(event)) continue;
|
|
159
|
+
if (event.id === undefined || event.id.length === 0) {
|
|
160
|
+
throw new Error(`Live ${event.type} event is missing its id`);
|
|
161
|
+
}
|
|
162
|
+
const response = await designContext.task(`live-${event.type}-${round}-${index}`, {
|
|
163
|
+
prompt: buildLiveEventPrompt({ event, previewPath }),
|
|
164
|
+
...designModelConfig,
|
|
165
|
+
...forkContinuationOptions(sessionFile),
|
|
166
|
+
});
|
|
167
|
+
sessionFile = response.sessionFile ?? sessionFile;
|
|
168
|
+
const status = replyTokenFor(event);
|
|
169
|
+
await designContext.tool(
|
|
170
|
+
`live-reply-${round}-${index}`,
|
|
171
|
+
{ round, index, eventId: event.id, status },
|
|
172
|
+
async ({ signal }) => replyLiveEvent({ workflowCwd, event, status, signal }),
|
|
173
|
+
);
|
|
174
|
+
}
|
|
177
175
|
}
|
|
178
176
|
|
|
179
177
|
function buildInitialGeneratePrompt(args: {
|
|
@@ -231,60 +229,6 @@ function buildInitialGeneratePrompt(args: {
|
|
|
231
229
|
]);
|
|
232
230
|
}
|
|
233
231
|
|
|
234
|
-
function buildGenerateRevisionPrompt(args: {
|
|
235
|
-
readonly prompt: string;
|
|
236
|
-
readonly outputType: string;
|
|
237
|
-
readonly previewPath: string;
|
|
238
|
-
readonly designContextFile: string;
|
|
239
|
-
readonly referencesFile: string;
|
|
240
|
-
readonly latestDesign: string;
|
|
241
|
-
readonly importContext: string;
|
|
242
|
-
readonly feedback: PreviewFeedback;
|
|
243
|
-
}): string {
|
|
244
|
-
const annotations = userAnnotationsBlock([args.feedback]);
|
|
245
|
-
return taggedPrompt([
|
|
246
|
-
[
|
|
247
|
-
"design_context_file",
|
|
248
|
-
`Read the file at ${args.designContextFile} for the project design context (PRODUCT.md/DESIGN.md summary) and the ds-* design-system evidence.`,
|
|
249
|
-
],
|
|
250
|
-
[
|
|
251
|
-
"reference_inspiration_file",
|
|
252
|
-
`Read the file at ${args.referencesFile} for the curated reference inspiration.`,
|
|
253
|
-
],
|
|
254
|
-
["reference_context", args.importContext],
|
|
255
|
-
["reference_precedence", REFERENCE_PRECEDENCE],
|
|
256
|
-
["preview_artifact_path", args.previewPath],
|
|
257
|
-
["user_feedback", annotations.text],
|
|
258
|
-
["current_design_summary", args.latestDesign],
|
|
259
|
-
["html_rules", HTML_PREVIEW_RULES],
|
|
260
|
-
["anti_design_slop_rules", ANTI_SLOP_RULES],
|
|
261
|
-
["role", "You are an opinionated staff design engineer."],
|
|
262
|
-
[
|
|
263
|
-
"objective",
|
|
264
|
-
`Revise the ${args.outputType} for: ${args.prompt}. Update the preview in place from only the latest live-review feedback, applying impeccable \`craft\` and \`polish\` with restraint rather than adding an internal critique.`,
|
|
265
|
-
],
|
|
266
|
-
[
|
|
267
|
-
"instructions",
|
|
268
|
-
[
|
|
269
|
-
"Read the current HTML at preview_artifact_path. Treat <user_feedback> as the only refinement brief; do not invent critique, screenshot, audit, or gate findings.",
|
|
270
|
-
"Address every user note and accepted live change visibly, or identify its DESIGN.md/reference-precedence conflict in the summary.",
|
|
271
|
-
`Overwrite ${args.previewPath} with one revised self-contained HTML file; do not branch or create extra previews.`,
|
|
272
|
-
"Preserve strong decisions unless feedback requires change; add no unrelated features or abstractions.",
|
|
273
|
-
].join("\n"),
|
|
274
|
-
],
|
|
275
|
-
[
|
|
276
|
-
"output_format",
|
|
277
|
-
[
|
|
278
|
-
"In at most 400 words, return Markdown, not the HTML body:",
|
|
279
|
-
"1. Revised artifact (path only)",
|
|
280
|
-
"2. User feedback addressed (each note/live change and its application or conflict)",
|
|
281
|
-
"3. Changes applied",
|
|
282
|
-
"4. Trade-offs / unresolved user feedback",
|
|
283
|
-
GROUNDED_REPORTING,
|
|
284
|
-
].join("\n"),
|
|
285
|
-
],
|
|
286
|
-
]);
|
|
287
|
-
}
|
|
288
232
|
|
|
289
233
|
type ExportOptions = {
|
|
290
234
|
readonly designContext: DesignContext;
|
|
@@ -316,7 +260,7 @@ export async function exportOpenClaudeDesign(options: ExportOptions): Promise<{
|
|
|
316
260
|
],
|
|
317
261
|
[
|
|
318
262
|
"reference_inspiration_file",
|
|
319
|
-
`Read the file at ${referencesFile} for the curated reference research that informed the
|
|
263
|
+
`Read the file at ${referencesFile} for the curated reference research that informed the final design; use it wherever the spec cites visual direction or reference provenance.`,
|
|
320
264
|
],
|
|
321
265
|
["preview_artifact_path", previewPath],
|
|
322
266
|
["spec_artifact_path", specPath],
|
|
@@ -326,12 +270,12 @@ export async function exportOpenClaudeDesign(options: ExportOptions): Promise<{
|
|
|
326
270
|
["role", "You are an opinionated staff design engineer."],
|
|
327
271
|
[
|
|
328
272
|
"objective",
|
|
329
|
-
`Export the final ${outputType} for "${prompt}" as a rich browser-readable HTML spec. Apply impeccable \`document\` and embed or link the
|
|
273
|
+
`Export the final ${outputType} for "${prompt}" as a rich browser-readable HTML spec. Apply impeccable \`document\` and embed or link the final preview so implementation reviewers see the design as exported.`,
|
|
330
274
|
],
|
|
331
275
|
[
|
|
332
276
|
"instructions",
|
|
333
277
|
[
|
|
334
|
-
"First read the design-context file named above, then read preview_artifact_path as the canonical
|
|
278
|
+
"First read the design-context file named above, then read preview_artifact_path as the canonical final design, and use the Write tool to create one self-contained HTML5 file at spec_artifact_path.",
|
|
335
279
|
"In order, include: sticky header with title/status/run id; Executive Summary; Live Preview embedding the full preview via `<iframe srcdoc=\"...\">` or a side-by-side rendered copy in `<article class=\"preview-frame\">`; the six DESIGN.md sections (Overview, Colors, Typography, Elevation, Components, Do's and Don'ts) rendered with swatches, tables, and code blocks; Implementation handoff (Recommended files + components, Implementation steps, Usage example, Accessibility & responsive checklist, Validation commands, Known limitations); and an appendix linking the raw preview path.",
|
|
336
280
|
"Use dense legible typography, generous whitespace, monospaced code, rendered hex/oklch swatches, and copy-to-clipboard hints in HTML comments.",
|
|
337
281
|
`Show the absolute preview path (${previewPath}) and file URL (${previewFileUrl}) prominently. Preserve assumptions and limitations; introduce no requirement absent from the final design or DESIGN.md.`,
|
|
@@ -375,8 +319,8 @@ export async function exportOpenClaudeDesign(options: ExportOptions): Promise<{
|
|
|
375
319
|
"instructions",
|
|
376
320
|
[
|
|
377
321
|
`Use the bootstrap rules, run \`playwright-cli open ${specFileUrl}\`, and if a browser executable is missing follow those rules and retry once before \`playwright-cli snapshot\`.`,
|
|
378
|
-
"Do not run `show --annotate` or invite changes because
|
|
379
|
-
`Prominently print the manual paths:\n- Final spec: ${specPath}\n-
|
|
322
|
+
"Do not run `show --annotate` or invite changes because the review session has ended.",
|
|
323
|
+
`Prominently print the manual paths:\n- Final spec: ${specPath}\n- Preview: ${previewPath}`,
|
|
380
324
|
"Unavailable tooling must not block the workflow; return the structured summary.",
|
|
381
325
|
].join("\n"),
|
|
382
326
|
],
|