@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
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
scaffoldSvelteComponentInsertSession,
|
|
27
27
|
shouldUseSvelteComponentInjection,
|
|
28
28
|
} from './live/svelte-component.mjs';
|
|
29
|
+
import { enterLiveRoot } from './live/roots.mjs';
|
|
29
30
|
|
|
30
31
|
const INSERT_POSITIONS = new Set(['before', 'after']);
|
|
31
32
|
|
|
@@ -286,5 +287,6 @@ Output (JSON):
|
|
|
286
287
|
|
|
287
288
|
const _running = process.argv[1];
|
|
288
289
|
if (_running?.endsWith('live-insert.mjs') || _running?.endsWith('live-insert.mjs/')) {
|
|
290
|
+
enterLiveRoot();
|
|
289
291
|
insertCli();
|
|
290
292
|
}
|
|
@@ -14,6 +14,8 @@ import path from 'node:path';
|
|
|
14
14
|
import { fileURLToPath } from 'node:url';
|
|
15
15
|
import { completionAckForAcceptResult, completionTypeForAcceptResult } from './live/completion.mjs';
|
|
16
16
|
import { readLiveServerInfo } from './lib/impeccable-paths.mjs';
|
|
17
|
+
import { enterLiveRoot } from './live/roots.mjs';
|
|
18
|
+
import { instructionsForEvent } from './live/instructions.mjs';
|
|
17
19
|
|
|
18
20
|
// Absolute path to a sibling script in this skill's scripts dir, so runtime
|
|
19
21
|
// error hints print a directly-runnable command instead of a placeholder.
|
|
@@ -27,7 +29,7 @@ const scriptCmd = (name) => `node "${path.join(SELF_DIR, name)}"`;
|
|
|
27
29
|
export const PER_REQUEST_TIMEOUT_MS = 270_000;
|
|
28
30
|
export const DEFAULT_EVENT_LEASE_MS = 600_000;
|
|
29
31
|
|
|
30
|
-
const EVENT_TYPES_NEEDING_AGENT_REPLY = new Set(['generate', 'steer', 'manual_edit_apply', 'carbonize_cleanup']);
|
|
32
|
+
const EVENT_TYPES_NEEDING_AGENT_REPLY = new Set(['generate', 'steer', 'manual_edit_apply', 'carbonize_cleanup', 'variant_mount_failed']);
|
|
31
33
|
|
|
32
34
|
function readServerInfo() {
|
|
33
35
|
const record = readLiveServerInfo(process.cwd());
|
|
@@ -117,8 +119,11 @@ export async function postReply(base, token, reply) {
|
|
|
117
119
|
});
|
|
118
120
|
if (!res.ok) {
|
|
119
121
|
const body = await res.json().catch(() => ({}));
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
+
const failureLines = Array.isArray(body.failures)
|
|
123
|
+
? body.failures.map((f) => ` ${f.file}${f.line != null ? `:${f.line}` : ''} ${f.message}`).join('\n')
|
|
124
|
+
: null;
|
|
125
|
+
const parts = [body.error || res.statusText, body.reason, body.hint, failureLines, body._instructions].filter(Boolean);
|
|
126
|
+
throw new Error(parts.join('\n'));
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
|
|
@@ -261,6 +266,13 @@ export function writeCarbonizeBanner(event) {
|
|
|
261
266
|
}
|
|
262
267
|
|
|
263
268
|
export function printPollEvent(event) {
|
|
269
|
+
// Only locally generated situational plumbing may ride with an event. The
|
|
270
|
+
// HTTP payload is untrusted and must never supply model-facing instructions.
|
|
271
|
+
if (event && typeof event === 'object') {
|
|
272
|
+
const instructions = instructionsForEvent(event, { scriptsPath: SELF_DIR });
|
|
273
|
+
if (instructions) event._instructions = instructions;
|
|
274
|
+
else delete event._instructions;
|
|
275
|
+
}
|
|
264
276
|
console.log(JSON.stringify(event));
|
|
265
277
|
}
|
|
266
278
|
|
|
@@ -410,5 +422,6 @@ export function normalizePollTypes(value) {
|
|
|
410
422
|
// Auto-execute when run directly
|
|
411
423
|
const _running = process.argv[1];
|
|
412
424
|
if (_running?.endsWith('live-poll.mjs') || _running?.endsWith('live-poll.mjs/')) {
|
|
425
|
+
enterLiveRoot();
|
|
413
426
|
pollCli();
|
|
414
427
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { createLiveSessionStore } from './live/session-store.mjs';
|
|
7
|
+
import { enterLiveRoot } from './live/roots.mjs';
|
|
7
8
|
|
|
8
9
|
function manualApplyReplyCommand(eventOrId = 'EVENT_ID') {
|
|
9
10
|
const id = typeof eventOrId === 'string' ? eventOrId : eventOrId?.id || 'EVENT_ID';
|
|
@@ -49,6 +50,28 @@ function collectManualApplyFiles(batch) {
|
|
|
49
50
|
return [...new Set(files.filter((file) => typeof file === 'string' && file.length > 0))].sort();
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
/**
|
|
54
|
+
* The browser's render truth, folded into a small block the agent reads before
|
|
55
|
+
* it decides what to do. `arrivedVariants` only says the agent published;
|
|
56
|
+
* `renderState` says whether any of it reached a screen.
|
|
57
|
+
*/
|
|
58
|
+
export function renderSummary(snapshot = {}) {
|
|
59
|
+
return {
|
|
60
|
+
renderState: snapshot.renderState ?? null,
|
|
61
|
+
mountedVariants: Array.isArray(snapshot.mountedVariants) ? snapshot.mountedVariants : [],
|
|
62
|
+
mountFailures: Array.isArray(snapshot.mountFailures) ? snapshot.mountFailures : [],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function mountFailureAction(snapshot = {}) {
|
|
67
|
+
const failures = Array.isArray(snapshot.mountFailures) ? snapshot.mountFailures : [];
|
|
68
|
+
const latest = failures[failures.length - 1];
|
|
69
|
+
if (!latest) return null;
|
|
70
|
+
const where = latest.url ? ` from ${latest.url}` : '';
|
|
71
|
+
const why = latest.error ? ` (${latest.error})` : '';
|
|
72
|
+
return `The browser failed to mount variant ${latest.variant}${where}${why}; nothing is on screen. Fix the variant files, then reply with live-poll.mjs --reply ${snapshot?.pendingEvent?.id || snapshot?.id || 'SESSION_ID'} done --file <manifest or source path> for the queued variant_mount_failed event (or republish) so the browser retries.`;
|
|
73
|
+
}
|
|
74
|
+
|
|
52
75
|
function parseArgs(argv) {
|
|
53
76
|
const out = { id: null };
|
|
54
77
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -75,20 +98,26 @@ export async function resumeCli() {
|
|
|
75
98
|
}
|
|
76
99
|
|
|
77
100
|
const pending = snapshot.pendingEvent || null;
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
101
|
+
const render = renderSummary(snapshot);
|
|
102
|
+
// A failed render outranks the generic pending-event hint: the agent needs to
|
|
103
|
+
// know the user is staring at an error card, not at variants. A leased manual
|
|
104
|
+
// Apply still outranks both, because abandoning that lease loses user edits.
|
|
105
|
+
const mountAction = render.renderState === 'failed' ? mountFailureAction(snapshot) : null;
|
|
106
|
+
const nextAction = pending?.type === 'manual_edit_apply'
|
|
107
|
+
? manualApplyResumeHint(pending)
|
|
108
|
+
: mountAction || (pending
|
|
109
|
+
? `Run live-poll.mjs, handle ${pending.type} ${pending.id}, then acknowledge with live-poll.mjs --reply ${pending.id} done.`
|
|
110
|
+
: snapshot.phase === 'carbonize_required'
|
|
111
|
+
? `Finish carbonize cleanup${snapshot.sourceFile ? ` in ${snapshot.sourceFile}` : ''}, then run live-complete.mjs --id ${snapshot.id}.`
|
|
112
|
+
: snapshot.phase === 'accept_requested'
|
|
113
|
+
? `Run live-complete.mjs --id ${snapshot.id} after verifying the accepted variant is written.`
|
|
114
|
+
: `Inspect ${snapshot.id}; no pending agent event is currently queued.`);
|
|
87
115
|
|
|
88
|
-
console.log(JSON.stringify({ active: true, snapshot, pendingEvent: pending, nextAction }, null, 2));
|
|
116
|
+
console.log(JSON.stringify({ active: true, snapshot, pendingEvent: pending, render, nextAction }, null, 2));
|
|
89
117
|
}
|
|
90
118
|
|
|
91
119
|
const _running = process.argv[1];
|
|
92
120
|
if (_running?.endsWith('live-resume.mjs') || _running?.endsWith('live-resume.mjs/')) {
|
|
121
|
+
enterLiveRoot();
|
|
93
122
|
resumeCli();
|
|
94
123
|
}
|
|
@@ -33,7 +33,10 @@ import { runGenerationPreflight } from './live/generation-preflight.mjs';
|
|
|
33
33
|
import { validateEvent } from './live/event-validation.mjs';
|
|
34
34
|
import { selectAvailablePendingEvent } from './live/poll-lanes.mjs';
|
|
35
35
|
import { createManualEditRoutes } from './live/manual-edit-routes.mjs';
|
|
36
|
-
import {
|
|
36
|
+
import {
|
|
37
|
+
LIVE_COMMANDS,
|
|
38
|
+
VARIANT_PROGRESS_CHECKPOINT_REASONS as VARIANT_PROGRESS_CHECKPOINT_REASON_LIST,
|
|
39
|
+
} from './live/vocabulary.mjs';
|
|
37
40
|
import {
|
|
38
41
|
getDesignSidecarPath,
|
|
39
42
|
getLiveDir,
|
|
@@ -51,24 +54,53 @@ import {
|
|
|
51
54
|
} from './live/manual-apply.mjs';
|
|
52
55
|
import {
|
|
53
56
|
applyDeferredSvelteComponentAccepts,
|
|
57
|
+
bumpSvelteComponentPreviewRevision,
|
|
58
|
+
compileCheckVariants,
|
|
54
59
|
removeAllSvelteComponentSessions,
|
|
60
|
+
sweepInactiveSvelteComponentSessions,
|
|
55
61
|
} from './live/svelte-component.mjs';
|
|
62
|
+
import { enterLiveRoot } from './live/roots.mjs';
|
|
56
63
|
|
|
57
64
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
// Anchor the whole process on the live roots manifest before anything derives
|
|
66
|
+
// a path from cwd. A server started from the wrong directory re-roots itself
|
|
67
|
+
// onto the appRoot the boot decided on instead of minting a second project.
|
|
68
|
+
const LIVE_ROOTS = enterLiveRoot(process.cwd());
|
|
69
|
+
|
|
70
|
+
// PRODUCT.md / DESIGN.md context, resolved lazily and per request so a server
|
|
71
|
+
// that outlives an `impeccable document` run (or a context file created after
|
|
72
|
+
// boot) reports current truth instead of a boot-time snapshot. The roots
|
|
73
|
+
// manifest wins when the ambient resolution misses (nested app inheriting
|
|
74
|
+
// repo-level context files).
|
|
75
|
+
function resolveProjectContext() {
|
|
76
|
+
const ctx = loadContext(process.cwd());
|
|
77
|
+
const designPath = ctx.designPath
|
|
78
|
+
? path.resolve(process.cwd(), ctx.designPath)
|
|
79
|
+
: (LIVE_ROOTS?.designPath && fs.existsSync(LIVE_ROOTS.designPath) ? LIVE_ROOTS.designPath : null);
|
|
80
|
+
const hasProduct = ctx.hasProduct
|
|
81
|
+
|| !!(LIVE_ROOTS?.productPath && fs.existsSync(LIVE_ROOTS.productPath));
|
|
82
|
+
return {
|
|
83
|
+
...ctx,
|
|
84
|
+
hasProduct,
|
|
85
|
+
hasDesign: !!designPath,
|
|
86
|
+
resolvedDesignPath: designPath,
|
|
87
|
+
contextDir: ctx.contextDir || LIVE_ROOTS?.contextRoot || process.cwd(),
|
|
88
|
+
designContextDir: ctx.designContextDir
|
|
89
|
+
|| (designPath ? path.dirname(designPath) : null),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
66
92
|
const DEFAULT_POLL_TIMEOUT = 600_000; // 10 min — agent re-polls on timeout anyway
|
|
67
93
|
const SSE_HEARTBEAT_INTERVAL = 30_000; // keepalive ping every 30s
|
|
94
|
+
|
|
95
|
+
// The browser events allowed to mint a NEW session journal. `generate` starts
|
|
96
|
+
// a variant session at Go; `steer` mints its own request id. Every other
|
|
97
|
+
// id-carrying event must land on an existing session (see the unknown_session
|
|
98
|
+
// gate in the /events handler).
|
|
99
|
+
const SESSION_CREATING_EVENT_TYPES = new Set(['generate', 'steer']);
|
|
68
100
|
// The browser checkpoints for several unrelated reasons (see checkpointPayload
|
|
69
101
|
// in live-browser.js). Only these two report that variant availability changed,
|
|
70
102
|
// and only they may drive variant_progress / the *_reviewable phases.
|
|
71
|
-
const VARIANT_PROGRESS_CHECKPOINT_REASONS = new Set(
|
|
103
|
+
const VARIANT_PROGRESS_CHECKPOINT_REASONS = new Set(VARIANT_PROGRESS_CHECKPOINT_REASON_LIST);
|
|
72
104
|
|
|
73
105
|
// ---------------------------------------------------------------------------
|
|
74
106
|
// Port detection
|
|
@@ -150,7 +182,16 @@ function chatAgentLikelyActive() {
|
|
|
150
182
|
const MAX_ANNOTATION_BYTES = 10 * 1024 * 1024;
|
|
151
183
|
|
|
152
184
|
function enqueueEvent(event) {
|
|
153
|
-
if (!event
|
|
185
|
+
if (!event) return;
|
|
186
|
+
// Dedupe by (session, type), except mount failures, which are per-variant:
|
|
187
|
+
// variant 2 failing must not be swallowed because variant 1's failure is
|
|
188
|
+
// still queued.
|
|
189
|
+
const duplicate = event.id && state.pendingEvents.some((entry) => (
|
|
190
|
+
entry.event?.id === event.id
|
|
191
|
+
&& entry.event?.type === event.type
|
|
192
|
+
&& (event.type !== 'variant_mount_failed' || entry.event?.variant === event.variant)
|
|
193
|
+
));
|
|
194
|
+
if (duplicate) return;
|
|
154
195
|
state.pendingEvents.push({ event, leaseUntil: 0, seq: state.nextEventSeq++ });
|
|
155
196
|
flushPendingPolls();
|
|
156
197
|
}
|
|
@@ -445,6 +486,11 @@ function summarizeActiveSessionForClient(snapshot = {}) {
|
|
|
445
486
|
generationCompletedAt: snapshot.generationCompletedAt ?? null,
|
|
446
487
|
generationCanceled: snapshot.generationCanceled === true,
|
|
447
488
|
cancelReason: snapshot.cancelReason ?? null,
|
|
489
|
+
// Render truth, so a browser with no localStorage can rehydrate to the
|
|
490
|
+
// same comparison the server already knows about.
|
|
491
|
+
mountedVariants: Array.isArray(snapshot.mountedVariants) ? snapshot.mountedVariants : [],
|
|
492
|
+
mountFailures: Array.isArray(snapshot.mountFailures) ? snapshot.mountFailures : [],
|
|
493
|
+
renderState: snapshot.renderState ?? null,
|
|
448
494
|
};
|
|
449
495
|
}
|
|
450
496
|
|
|
@@ -618,7 +664,7 @@ function hasProjectContext() {
|
|
|
618
664
|
// PRODUCT.md carries brand voice / anti-references — that's what determines
|
|
619
665
|
// whether variants are brand-aware. DESIGN.md (visual tokens) is a separate
|
|
620
666
|
// concern, surfaced by the design panel's own empty state.
|
|
621
|
-
return !!
|
|
667
|
+
return !!resolveProjectContext().hasProduct;
|
|
622
668
|
}
|
|
623
669
|
|
|
624
670
|
function statOrNull(filePath) {
|
|
@@ -643,16 +689,24 @@ function isLoopbackOrigin(origin) {
|
|
|
643
689
|
function createRequestHandler({ detectScript, liveScriptParts }) {
|
|
644
690
|
return (req, res) => {
|
|
645
691
|
const url = new URL(req.url, `http://localhost:${state.port}`);
|
|
646
|
-
//
|
|
647
|
-
// loopback origin
|
|
648
|
-
//
|
|
649
|
-
//
|
|
650
|
-
//
|
|
651
|
-
//
|
|
652
|
-
//
|
|
653
|
-
//
|
|
692
|
+
// Token-or-loopback CORS. Reflect the caller's Origin when it is a
|
|
693
|
+
// loopback origin OR the request carries the valid session token, always
|
|
694
|
+
// paired with `Vary: Origin` so an intermediary cache never serves a
|
|
695
|
+
// response authorized for one origin to another. A remote page (e.g.
|
|
696
|
+
// https://evil.example probing the port from a tab open on the same
|
|
697
|
+
// machine) has no token and gets no Access-Control-Allow-Origin, so its
|
|
698
|
+
// JS-initiated fetch cannot read any response. The token branch exists for
|
|
699
|
+
// dev servers on non-localhost loopback aliases (ddev's *.ddev.site,
|
|
700
|
+
// Valet's *.test, hosts-file entries): the injected classic <script src>
|
|
701
|
+
// delivers the token to the page regardless of origin, every overlay
|
|
702
|
+
// request carries it in the query string (preflights included, since
|
|
703
|
+
// OPTIONS hits the same URL), and a token bearer is already fully
|
|
704
|
+
// authorized on every route — the token is the security boundary, not the
|
|
705
|
+
// origin. Requests with no Origin header (script tags, curl, the agent's
|
|
706
|
+
// own fetches) are not subject to CORS and keep working; no ACAO header
|
|
707
|
+
// is needed for them.
|
|
654
708
|
const origin = req.headers.origin;
|
|
655
|
-
if (origin && isLoopbackOrigin(origin)) {
|
|
709
|
+
if (origin && (isLoopbackOrigin(origin) || url.searchParams.get('token') === state.token)) {
|
|
656
710
|
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
657
711
|
res.setHeader('Vary', 'Origin');
|
|
658
712
|
}
|
|
@@ -690,6 +744,7 @@ function createRequestHandler({ detectScript, liveScriptParts }) {
|
|
|
690
744
|
port: state.port,
|
|
691
745
|
vocabulary: LIVE_COMMANDS,
|
|
692
746
|
commandPrefix: IMPECCABLE_COMMAND_PREFIX,
|
|
747
|
+
appRoot: process.cwd(),
|
|
693
748
|
parts,
|
|
694
749
|
});
|
|
695
750
|
res.writeHead(200, {
|
|
@@ -818,7 +873,7 @@ function createRequestHandler({ detectScript, liveScriptParts }) {
|
|
|
818
873
|
// { present, parsed, sidecar, hasMd, hasSidecar,
|
|
819
874
|
// mdNewerThanJson, parseError?, sidecarError? }
|
|
820
875
|
// - parsed: output of parseDesignMd (frontmatter
|
|
821
|
-
// +
|
|
876
|
+
// + the canonical sections) when DESIGN.md exists.
|
|
822
877
|
// - sidecar: .impeccable/design.json contents when present.
|
|
823
878
|
// Expected shape: schemaVersion 2, carrying
|
|
824
879
|
// extensions + components + narrative.
|
|
@@ -827,8 +882,9 @@ function createRequestHandler({ detectScript, liveScriptParts }) {
|
|
|
827
882
|
const token = url.searchParams.get('token');
|
|
828
883
|
if (token !== state.token) { res.writeHead(401); res.end('Unauthorized'); return; }
|
|
829
884
|
|
|
830
|
-
const
|
|
831
|
-
const
|
|
885
|
+
const projectContext = resolveProjectContext();
|
|
886
|
+
const mdPath = projectContext.resolvedDesignPath;
|
|
887
|
+
const jsonPath = resolveDesignSidecarPath(process.cwd(), projectContext.designContextDir || projectContext.contextDir) || getDesignSidecarPath(process.cwd());
|
|
832
888
|
const mdStat = statOrNull(mdPath);
|
|
833
889
|
const jsonStat = statOrNull(jsonPath);
|
|
834
890
|
|
|
@@ -979,6 +1035,20 @@ function createRequestHandler({ detectScript, liveScriptParts }) {
|
|
|
979
1035
|
res.end(JSON.stringify({ ok: true }));
|
|
980
1036
|
return;
|
|
981
1037
|
}
|
|
1038
|
+
// Only the events that START a session may create its journal.
|
|
1039
|
+
// Everything else (checkpoints, mount acks, accept/discard) must
|
|
1040
|
+
// reference a session THIS store already knows: appendEvent creates a
|
|
1041
|
+
// journal for any id it is handed, so without this gate a browser
|
|
1042
|
+
// resuming another project's session from per-origin storage (two
|
|
1043
|
+
// apps sharing a localhost port) materializes a ghost session here
|
|
1044
|
+
// that keeps reattaching after every discard.
|
|
1045
|
+
if (msg.id && state.sessionStore
|
|
1046
|
+
&& !SESSION_CREATING_EVENT_TYPES.has(msg.type)
|
|
1047
|
+
&& !state.sessionStore.has(msg.id)) {
|
|
1048
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
1049
|
+
res.end(JSON.stringify({ error: 'unknown_session', id: msg.id }));
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
982
1052
|
const missedCompletion = detectMissedGenerationCompletion(msg);
|
|
983
1053
|
if (state.sessionStore && msg.id) {
|
|
984
1054
|
try {
|
|
@@ -997,7 +1067,25 @@ function createRequestHandler({ detectScript, liveScriptParts }) {
|
|
|
997
1067
|
if (msg.type === 'exit') {
|
|
998
1068
|
cleanupSvelteComponentSessionsBeforeExit();
|
|
999
1069
|
}
|
|
1000
|
-
|
|
1070
|
+
// An ORPHANED discard is the browser reporting that the session's
|
|
1071
|
+
// wrapper no longer exists in source (edited or regenerated away).
|
|
1072
|
+
// There is no cleanup for an agent to perform, and asking one to run
|
|
1073
|
+
// the normal discard flow would just fail against the missing
|
|
1074
|
+
// scaffolding, so the server terminalizes the session itself and the
|
|
1075
|
+
// event stays out of the poll queue.
|
|
1076
|
+
const orphanedDiscard = msg.type === 'discard' && msg.orphaned === true;
|
|
1077
|
+
if (orphanedDiscard && state.sessionStore && msg.id) {
|
|
1078
|
+
try {
|
|
1079
|
+
state.sessionStore.appendEvent({ type: 'discarded', id: msg.id, orphaned: true });
|
|
1080
|
+
} catch { /* the discard_requested phase already left the resumable set */ }
|
|
1081
|
+
}
|
|
1082
|
+
// `variant_mounted` is the happy path: it is journaled above so the
|
|
1083
|
+
// snapshot carries render truth, but there is nothing for the agent to
|
|
1084
|
+
// do about it, so it stays out of the poll queue and off the SSE bus.
|
|
1085
|
+
// `variant_mount_failed` is the opposite: the agent published something
|
|
1086
|
+
// the browser could not render, and only the agent can fix it, so it
|
|
1087
|
+
// goes to the queue as a first-class event.
|
|
1088
|
+
if (msg.type !== 'checkpoint' && msg.type !== 'variant_mounted' && !orphanedDiscard) {
|
|
1001
1089
|
enqueueEvent(msg);
|
|
1002
1090
|
}
|
|
1003
1091
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
@@ -1105,7 +1193,8 @@ function sessionFileMetadataFromPollReply(file) {
|
|
|
1105
1193
|
const base = { file: normalized };
|
|
1106
1194
|
const metadataFile = normalized;
|
|
1107
1195
|
if (!metadataFile.endsWith('/manifest.json') && metadataFile !== 'manifest.json') return base;
|
|
1108
|
-
if (!metadataFile.includes('
|
|
1196
|
+
if (!metadataFile.includes('.impeccable/live/previews/')
|
|
1197
|
+
&& !metadataFile.includes('node_modules/.impeccable-live/')
|
|
1109
1198
|
&& !metadataFile.includes('src/lib/impeccable/')
|
|
1110
1199
|
&& !metadataFile.includes('/.impeccable-live/')) return base;
|
|
1111
1200
|
|
|
@@ -1145,7 +1234,14 @@ function inferSourceEventType(msg = {}, pendingEvents = state.pendingEvents) {
|
|
|
1145
1234
|
// `agent_done` can be the automatic acknowledgement for a carbonize Accept.
|
|
1146
1235
|
// New pollers send sourceEventType explicitly; default to generate only for
|
|
1147
1236
|
// older callers so a late worker cannot acknowledge a queued Accept.
|
|
1148
|
-
if (msg.type === 'agent_done' || msg.type === 'done')
|
|
1237
|
+
if (msg.type === 'agent_done' || msg.type === 'done') {
|
|
1238
|
+
// A `done` reply to a mount failure is the republish that unblocks the
|
|
1239
|
+
// browser. Without this the ack would look for a `generate` that was
|
|
1240
|
+
// already retired, the mount-failure event would stay queued, and the next
|
|
1241
|
+
// poll would hand the same failure back to the agent forever.
|
|
1242
|
+
if (!pendingTypes.has('generate') && pendingTypes.has('variant_mount_failed')) return 'variant_mount_failed';
|
|
1243
|
+
return 'generate';
|
|
1244
|
+
}
|
|
1149
1245
|
// `error` is reference/live.md's documented failure reply, and parseReplyArgs
|
|
1150
1246
|
// never sets sourceEventType on it (the poller is a fresh process that cannot
|
|
1151
1247
|
// know what it leased). Returning undefined here makes acknowledgePendingEvent
|
|
@@ -1270,6 +1366,30 @@ function handlePollPost(req, res) {
|
|
|
1270
1366
|
return;
|
|
1271
1367
|
}
|
|
1272
1368
|
const replyFileMeta = sessionFileMetadataFromPollReply(msg.file);
|
|
1369
|
+
// A publish (done reply carrying a component manifest) snapshots the
|
|
1370
|
+
// variant files into a fresh revision dir before the browser is told:
|
|
1371
|
+
// the import path changes every publish, so no transform cache can pin a
|
|
1372
|
+
// stale compile of a republished module (node_modules is unwatched).
|
|
1373
|
+
// Broken variants are bounced HERE, before the browser imports anything:
|
|
1374
|
+
// a compile error that reaches the page is a red overlay in the user's
|
|
1375
|
+
// face; bounced at publish it is a private fix with file and line.
|
|
1376
|
+
if (replyFileMeta.previewMode === 'svelte-component'
|
|
1377
|
+
&& msg.id
|
|
1378
|
+
&& (msg.type === 'done' || !msg.type)) {
|
|
1379
|
+
let compileCheck = { ok: true, failures: [] };
|
|
1380
|
+
try { compileCheck = compileCheckVariants(msg.id, process.cwd()); } catch { /* best-effort */ }
|
|
1381
|
+
if (!compileCheck.ok) {
|
|
1382
|
+
res.writeHead(422, { 'Content-Type': 'application/json' });
|
|
1383
|
+
res.end(JSON.stringify({
|
|
1384
|
+
error: 'variant_compile_failed',
|
|
1385
|
+
id: msg.id,
|
|
1386
|
+
failures: compileCheck.failures,
|
|
1387
|
+
_instructions: 'The publish was NOT delivered: the listed variant file(s) do not compile, so the browser never saw them. Fix each failure at the given file and line (the most common cause is a second top-level <style> element; Svelte allows exactly one, so merge all rules into the existing block), then send the same --reply done again.',
|
|
1388
|
+
}));
|
|
1389
|
+
return;
|
|
1390
|
+
}
|
|
1391
|
+
try { bumpSvelteComponentPreviewRevision(msg.id, process.cwd()); } catch { /* best-effort */ }
|
|
1392
|
+
}
|
|
1273
1393
|
if (state.sessionStore && msg.id && !skipJournalReply) {
|
|
1274
1394
|
try {
|
|
1275
1395
|
const eventType = msg.type === 'steer_done'
|
|
@@ -1341,6 +1461,51 @@ function cleanupSvelteComponentSessionsBeforeExit() {
|
|
|
1341
1461
|
}
|
|
1342
1462
|
}
|
|
1343
1463
|
|
|
1464
|
+
/**
|
|
1465
|
+
* A previous run that died without its shutdown hook leaves preview component
|
|
1466
|
+
* dirs behind. Drop the ones whose session the store no longer considers
|
|
1467
|
+
* active; anything still active is mid-generation and must survive a restart.
|
|
1468
|
+
*/
|
|
1469
|
+
function sweepOrphanSvelteComponentSessionsOnStartup() {
|
|
1470
|
+
try {
|
|
1471
|
+
const activeIds = (state.sessionStore?.listActiveSessions() || [])
|
|
1472
|
+
.map((snapshot) => snapshot?.id)
|
|
1473
|
+
.filter(Boolean);
|
|
1474
|
+
const result = sweepInactiveSvelteComponentSessions(activeIds, process.cwd());
|
|
1475
|
+
if (result.removed.length > 0 || result.removedRoot) {
|
|
1476
|
+
console.log('[impeccable] swept orphaned Svelte component sessions:', JSON.stringify(result));
|
|
1477
|
+
}
|
|
1478
|
+
} catch (err) {
|
|
1479
|
+
console.warn('[impeccable] Svelte component session sweep failed:', err.message);
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
// Accept receipts are a short-lived idempotency record for a single accept.
|
|
1484
|
+
// Nothing reads one after the session that wrote it is gone, so they only need
|
|
1485
|
+
// to outlive a crash-and-retry window.
|
|
1486
|
+
const ACCEPT_RECEIPT_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
|
|
1487
|
+
|
|
1488
|
+
function sweepStaleAcceptReceiptsOnStartup() {
|
|
1489
|
+
try {
|
|
1490
|
+
const dir = path.join(getLiveDir(process.cwd()), 'accept-receipts');
|
|
1491
|
+
if (!fs.existsSync(dir)) return;
|
|
1492
|
+
const cutoff = Date.now() - ACCEPT_RECEIPT_MAX_AGE_MS;
|
|
1493
|
+
let removed = 0;
|
|
1494
|
+
for (const name of fs.readdirSync(dir)) {
|
|
1495
|
+
if (!name.endsWith('.json') && !name.endsWith('.tmp')) continue;
|
|
1496
|
+
const file = path.join(dir, name);
|
|
1497
|
+
try {
|
|
1498
|
+
if (fs.statSync(file).mtimeMs >= cutoff) continue;
|
|
1499
|
+
fs.rmSync(file, { force: true });
|
|
1500
|
+
removed++;
|
|
1501
|
+
} catch { /* non-fatal */ }
|
|
1502
|
+
}
|
|
1503
|
+
if (removed > 0) console.log(`[impeccable] removed ${removed} accept receipt(s) older than 14 days`);
|
|
1504
|
+
} catch (err) {
|
|
1505
|
+
console.warn('[impeccable] accept receipt retention sweep failed:', err.message);
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1344
1509
|
function applyLegacyDeferredAcceptsOnStartup() {
|
|
1345
1510
|
try {
|
|
1346
1511
|
const result = applyDeferredSvelteComponentAccepts(process.cwd());
|
|
@@ -1480,6 +1645,8 @@ manualApply.rollbackTransaction({
|
|
|
1480
1645
|
reason: 'manual_edit_server_start_recovered_abandoned_transaction',
|
|
1481
1646
|
});
|
|
1482
1647
|
applyLegacyDeferredAcceptsOnStartup();
|
|
1648
|
+
sweepOrphanSvelteComponentSessionsOnStartup();
|
|
1649
|
+
sweepStaleAcceptReceiptsOnStartup();
|
|
1483
1650
|
restorePendingEventsFromStore();
|
|
1484
1651
|
manualApply.pruneStaleEvidence();
|
|
1485
1652
|
const portArg = args.find(a => a.startsWith('--port='));
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
import { createLiveSessionStore } from './live/session-store.mjs';
|
|
7
7
|
import { readLiveServerInfo } from './lib/impeccable-paths.mjs';
|
|
8
|
-
import { manualApplyResumeHint } from './live-resume.mjs';
|
|
8
|
+
import { manualApplyResumeHint, mountFailureAction, renderSummary } from './live-resume.mjs';
|
|
9
|
+
import { enterLiveRoot } from './live/roots.mjs';
|
|
9
10
|
|
|
10
11
|
function readServerInfo() {
|
|
11
12
|
return readLiveServerInfo(process.cwd())?.info || null;
|
|
@@ -28,6 +29,8 @@ export async function statusCli() {
|
|
|
28
29
|
const store = createLiveSessionStore({ cwd: process.cwd() });
|
|
29
30
|
const activeSessions = store.listActiveSessions();
|
|
30
31
|
const manualApply = findPendingManualApply(server, activeSessions);
|
|
32
|
+
const sessions = server?.activeSessions || activeSessions;
|
|
33
|
+
const renderFailure = sessions.find((session) => session?.renderState === 'failed') || null;
|
|
31
34
|
const payload = {
|
|
32
35
|
liveServer: server ? {
|
|
33
36
|
status: server.status,
|
|
@@ -36,14 +39,16 @@ export async function statusCli() {
|
|
|
36
39
|
agentPolling: server.agentPolling,
|
|
37
40
|
pendingEvents: server.pendingEvents,
|
|
38
41
|
} : null,
|
|
39
|
-
activeSessions:
|
|
40
|
-
|
|
42
|
+
activeSessions: sessions,
|
|
43
|
+
render: sessions.map((session) => ({ id: session?.id ?? null, ...renderSummary(session) })),
|
|
44
|
+
recoveryHint: recoveryHint({ server, manualApply, renderFailure }),
|
|
41
45
|
};
|
|
42
46
|
console.log(JSON.stringify(payload, null, 2));
|
|
43
47
|
}
|
|
44
48
|
|
|
45
|
-
function recoveryHint({ server, manualApply }) {
|
|
49
|
+
function recoveryHint({ server, manualApply, renderFailure }) {
|
|
46
50
|
if (manualApply) return manualApplyResumeHint(manualApply);
|
|
51
|
+
if (renderFailure) return mountFailureAction(renderFailure);
|
|
47
52
|
if (server) {
|
|
48
53
|
return 'Run live-poll.mjs to continue pending work, or live-complete.mjs --id <session> after manual cleanup.';
|
|
49
54
|
}
|
|
@@ -61,5 +66,6 @@ function findPendingManualApply(server, activeSessions) {
|
|
|
61
66
|
|
|
62
67
|
const _running = process.argv[1];
|
|
63
68
|
if (_running?.endsWith('live-status.mjs') || _running?.endsWith('live-status.mjs/')) {
|
|
69
|
+
enterLiveRoot();
|
|
64
70
|
statusCli();
|
|
65
71
|
}
|