@orion-agents/orion-code 0.3.2 → 0.3.7
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 +207 -0
- package/README.md +102 -18
- package/README.zh-CN.md +40 -16
- package/dist/commands/context-tool-command-handlers.js +1 -5
- package/dist/commands/registry.js +1 -4
- package/dist/harness/intent.js +69 -16
- package/dist/harness/turn-summary.js +3 -1
- package/dist/memory/embeddings.js +2 -3
- package/dist/memory/prompts.js +1 -1
- package/dist/memory/relevant-finder.js +125 -15
- package/dist/memory/vector-store.js +13 -8
- package/dist/migration/migrate.js +8 -12
- package/dist/runtime/agent-runtime-controller.d.ts +1 -0
- package/dist/runtime/agent-runtime-controller.js +92 -41
- package/dist/runtime/capability-receipt-journal.js +1 -1
- package/dist/runtime/composer/history.js +1 -3
- package/dist/runtime/composer/layout.js +7 -4
- package/dist/runtime/durable-tool-receipt-reader.js +1 -1
- package/dist/runtime/legacy-thread-materializer.d.ts +3 -1
- package/dist/runtime/legacy-thread-materializer.js +17 -5
- package/dist/runtime/orion-runtime-v1.d.ts +2 -1
- package/dist/runtime/orion-runtime-v1.js +18 -16
- package/dist/runtime/orion-session-runner.d.ts +2 -0
- package/dist/runtime/orion-session-runner.js +12 -4
- package/dist/runtime/product-bootstrap.d.ts +18 -0
- package/dist/runtime/product-bootstrap.js +402 -335
- package/dist/runtime/product-orion-runtime.d.ts +5 -0
- package/dist/runtime/product-orion-runtime.js +2 -0
- package/dist/runtime/release-receipts.d.ts +7 -3
- package/dist/runtime/release-receipts.js +79 -1
- package/dist/runtime/rich-text/ansi-parser.js +12 -2
- package/dist/runtime/rich-text/layout.js +15 -19
- package/dist/runtime/step-snapshot.d.ts +12 -0
- package/dist/runtime/step-snapshot.js +14 -1
- package/dist/runtime/subagent-thread-runtime.js +1 -1
- package/dist/runtime/subagents/budget.js +4 -1
- package/dist/runtime/subagents/policy.js +11 -4
- package/dist/runtime/subagents/provider-gate.js +6 -4
- package/dist/runtime/subagents/research-quality.js +3 -1
- package/dist/runtime/subagents/research-renderer.js +9 -2
- package/dist/runtime/subagents/result-parser.js +18 -7
- package/dist/runtime/thread-event-store.d.ts +14 -3
- package/dist/runtime/thread-event-store.js +77 -20
- package/dist/runtime/thread-projection.d.ts +36 -0
- package/dist/runtime/thread-projection.js +54 -1
- package/dist/runtime/thread-runtime.d.ts +2 -2
- package/dist/runtime/thread-runtime.js +2 -2
- package/dist/runtime/thread-session-index.d.ts +17 -1
- package/dist/runtime/thread-session-index.js +89 -6
- package/dist/runtime/thread-session-view.d.ts +4 -1
- package/dist/runtime/thread-session-view.js +5 -2
- package/dist/runtime/thread-ui-adapter.js +10 -3
- package/dist/runtime/tool-gateway.js +1 -0
- package/dist/runtime/tool-output-presentation.js +7 -7
- package/dist/runtime/turn-commit.js +1 -1
- package/dist/runtime/turn-controller.js +1 -2
- package/dist/runtime/ui-events.d.ts +3 -0
- package/dist/runtime/workspace-runtime-kernel.d.ts +67 -0
- package/dist/runtime/workspace-runtime-kernel.js +148 -0
- package/dist/services/auth/auth.js +1 -4
- package/dist/services/auth/aws.js +24 -14
- package/dist/services/auto-fix/autoFixRunner.js +1 -1
- package/dist/services/auto-fix/index.d.ts +1 -1
- package/dist/services/diagnostic-tracking/diagnosticTracking.js +4 -2
- package/dist/services/diagnostic-tracking/index.d.ts +1 -1
- package/dist/services/effort.js +1 -9
- package/dist/services/file-glob.js +3 -4
- package/dist/services/global-config.d.ts +2 -0
- package/dist/services/global-config.js +7 -1
- package/dist/services/mcp/transports.js +4 -4
- package/dist/services/model-catalog.js +179 -30
- package/dist/services/model-context.js +1 -1
- package/dist/services/provider-resilience/coordinator.d.ts +3 -1
- package/dist/services/provider-resilience/coordinator.js +23 -1
- package/dist/services/provider-resilience/request-gate.js +7 -2
- package/dist/services/provider-resilience/stream-recovery.js +1 -3
- package/dist/services/redaction.js +19 -2
- package/dist/services/session-storage.d.ts +28 -3
- package/dist/services/session-storage.js +70 -6
- package/dist/services/settings-coordinator.d.ts +3 -1
- package/dist/services/settings-coordinator.js +40 -8
- package/dist/services/settings-document-repository.d.ts +8 -1
- package/dist/services/settings-document-repository.js +22 -1
- package/dist/services/smart-routing.js +19 -11
- package/dist/services/verification-profile.js +17 -22
- package/dist/services/web-search-provider.js +21 -9
- package/dist/services/workspace-diff.js +10 -4
- package/dist/skills/builtin/code-review/SKILL.md +1 -1
- package/dist/skills/builtin/security-check/SKILL.md +1 -1
- package/dist/skills/builtin/test-gen/SKILL.md +1 -1
- package/dist/terminal-ui/editor.js +6 -2
- package/dist/terminal-ui/output-queue.js +9 -3
- package/dist/tools/lsp.js +12 -6
- package/dist/tui-core/frame.js +9 -7
- package/dist/tui-ui/transcript-cache.js +6 -6
- package/dist/tui-ui/transcript-inspector-layout.js +13 -6
- package/dist/tui-ui/transcript-inspector-surface.js +4 -1
- package/dist/tui-ui/transcript-inspector.js +3 -8
- package/dist/ui/box.js +14 -7
- package/dist/ui/markdown.js +4 -2
- package/dist/ui/shared/input-frame.js +12 -8
- package/dist/ui/stream-markdown.js +1 -1
- package/dist/ui/tool-preview.js +11 -3
- package/dist/ui/user-input.js +16 -10
- package/dist/web/event-hub.d.ts +2 -0
- package/dist/web/event-hub.js +43 -6
- package/dist/web/file-read-service.d.ts +2 -0
- package/dist/web/file-read-service.js +39 -12
- package/dist/web/git-read-model-service.js +7 -0
- package/dist/web/protocol.d.ts +53 -3
- package/dist/web/protocol.js +39 -2
- package/dist/web/review-service.d.ts +1 -0
- package/dist/web/review-service.js +1 -0
- package/dist/web/server.js +99 -6
- package/dist/web/session-runtime-registry.d.ts +138 -0
- package/dist/web/session-runtime-registry.js +471 -0
- package/dist/web/terminal-manager.js +23 -4
- package/dist/web/terminal-server.js +35 -6
- package/dist/web/workbench-controller.d.ts +82 -3
- package/dist/web/workbench-controller.js +771 -138
- package/dist/web/workspace-mutation-arbiter.d.ts +54 -0
- package/dist/web/workspace-mutation-arbiter.js +267 -0
- package/dist/web-client/assets/{DiffViewer-eaQNsnCh.js → DiffViewer-DqbZ02RN.js} +1 -1
- package/dist/web-client/assets/FilesPanel-Bu1Ab2kJ.js +2 -0
- package/dist/web-client/assets/{GitPanel-CnU4XVr7.js → GitPanel-BixIWb4k.js} +1 -1
- package/dist/web-client/assets/ReviewPanel-DsqJpku_.js +1 -0
- package/dist/web-client/assets/{TerminalPanel-Q5mSSsoK.js → TerminalPanel-DdjQP2mp.js} +14 -14
- package/dist/web-client/assets/index-30GT9Vnx.js +17 -0
- package/dist/web-client/assets/index-DQfpqPTD.css +1 -0
- package/dist/web-client/index.html +4 -4
- package/docs/architecture/v0.3.3-web-api.yaml +3205 -0
- package/docs/architecture/v0.3.4-stabilization-contract.md +32 -0
- package/docs/migration/v0.3.2-to-v0.3.3.md +62 -0
- package/docs/migration/v0.3.3-to-v0.3.4.md +36 -0
- package/docs/plan/v0.3.3-plan.md +1113 -0
- package/docs/plan/v0.3.4-stabilization-plan.md +89 -0
- package/docs/test/v0.3.3-web-workbench-e2e-plan.md +79 -0
- package/docs/test/v0.3.4-stabilization-e2e-plan.md +54 -0
- package/npm-shrinkwrap.json +379 -143
- package/package.json +12 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/context-commands.d.ts.map +0 -1
- package/dist/commands/context-commands.js.map +0 -1
- package/dist/commands/context-tool-command-handlers.d.ts.map +0 -1
- package/dist/commands/context-tool-command-handlers.js.map +0 -1
- package/dist/commands/core-command-handlers.d.ts.map +0 -1
- package/dist/commands/core-command-handlers.js.map +0 -1
- package/dist/commands/diagnostic-command-handlers.d.ts.map +0 -1
- package/dist/commands/diagnostic-command-handlers.js.map +0 -1
- package/dist/commands/diagnostic-commands.d.ts.map +0 -1
- package/dist/commands/diagnostic-commands.js.map +0 -1
- package/dist/commands/index.d.ts.map +0 -1
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/model-command-handlers.d.ts.map +0 -1
- package/dist/commands/model-command-handlers.js.map +0 -1
- package/dist/commands/model-commands.d.ts.map +0 -1
- package/dist/commands/model-commands.js.map +0 -1
- package/dist/commands/parser.d.ts.map +0 -1
- package/dist/commands/parser.js.map +0 -1
- package/dist/commands/registry.d.ts.map +0 -1
- package/dist/commands/registry.js.map +0 -1
- package/dist/commands/session-command-handlers.d.ts.map +0 -1
- package/dist/commands/session-command-handlers.js.map +0 -1
- package/dist/commands/session-commands.d.ts.map +0 -1
- package/dist/commands/session-commands.js.map +0 -1
- package/dist/commands/system-commands.d.ts.map +0 -1
- package/dist/commands/system-commands.js.map +0 -1
- package/dist/commands/target-command.d.ts.map +0 -1
- package/dist/commands/target-command.js.map +0 -1
- package/dist/commands/tool-commands.d.ts.map +0 -1
- package/dist/commands/tool-commands.js.map +0 -1
- package/dist/commands/types.d.ts.map +0 -1
- package/dist/commands/types.js.map +0 -1
- package/dist/commands/workflow-command-handlers.d.ts.map +0 -1
- package/dist/commands/workflow-command-handlers.js.map +0 -1
- package/dist/commands/workflow-commands.d.ts.map +0 -1
- package/dist/commands/workflow-commands.js.map +0 -1
- package/dist/core/checkpoint.d.ts.map +0 -1
- package/dist/core/checkpoint.js.map +0 -1
- package/dist/core/cost-tracker.d.ts.map +0 -1
- package/dist/core/cost-tracker.js.map +0 -1
- package/dist/core/security-warning.d.ts.map +0 -1
- package/dist/core/security-warning.js.map +0 -1
- package/dist/core/strategy-tracker.d.ts.map +0 -1
- package/dist/core/strategy-tracker.js.map +0 -1
- package/dist/core/tool-artifacts.d.ts.map +0 -1
- package/dist/core/tool-artifacts.js.map +0 -1
- package/dist/core/warn-dedup.d.ts.map +0 -1
- package/dist/core/warn-dedup.js.map +0 -1
- package/dist/framework/agent-mode.d.ts.map +0 -1
- package/dist/framework/agent-mode.js.map +0 -1
- package/dist/framework/external-assertion.d.ts.map +0 -1
- package/dist/framework/external-assertion.js.map +0 -1
- package/dist/framework/index.d.ts.map +0 -1
- package/dist/framework/index.js.map +0 -1
- package/dist/framework/loop-budget-contract.d.ts.map +0 -1
- package/dist/framework/loop-budget-contract.js.map +0 -1
- package/dist/framework/prompt.d.ts.map +0 -1
- package/dist/framework/prompt.js.map +0 -1
- package/dist/framework/query.d.ts.map +0 -1
- package/dist/framework/query.js.map +0 -1
- package/dist/framework/stop-decision.d.ts.map +0 -1
- package/dist/framework/stop-decision.js.map +0 -1
- package/dist/framework/store.d.ts.map +0 -1
- package/dist/framework/store.js.map +0 -1
- package/dist/framework/tool-call-orchestrator.d.ts.map +0 -1
- package/dist/framework/tool-call-orchestrator.js.map +0 -1
- package/dist/framework/tool-serializer.d.ts.map +0 -1
- package/dist/framework/tool-serializer.js.map +0 -1
- package/dist/framework/tool-state.d.ts.map +0 -1
- package/dist/framework/tool-state.js.map +0 -1
- package/dist/framework/tool.d.ts.map +0 -1
- package/dist/framework/tool.js.map +0 -1
- package/dist/harness/assembler.d.ts.map +0 -1
- package/dist/harness/assembler.js.map +0 -1
- package/dist/harness/capability-profile.d.ts.map +0 -1
- package/dist/harness/capability-profile.js.map +0 -1
- package/dist/harness/capsule.d.ts.map +0 -1
- package/dist/harness/capsule.js.map +0 -1
- package/dist/harness/compact-benchmark-corpus.d.ts.map +0 -1
- package/dist/harness/compact-benchmark-corpus.js.map +0 -1
- package/dist/harness/context-harness.d.ts.map +0 -1
- package/dist/harness/context-harness.js.map +0 -1
- package/dist/harness/contract.d.ts.map +0 -1
- package/dist/harness/contract.js.map +0 -1
- package/dist/harness/drift-guard.d.ts.map +0 -1
- package/dist/harness/drift-guard.js.map +0 -1
- package/dist/harness/evidence.d.ts.map +0 -1
- package/dist/harness/evidence.js.map +0 -1
- package/dist/harness/index.d.ts.map +0 -1
- package/dist/harness/index.js.map +0 -1
- package/dist/harness/intent.d.ts.map +0 -1
- package/dist/harness/intent.js.map +0 -1
- package/dist/harness/ledger.d.ts.map +0 -1
- package/dist/harness/ledger.js.map +0 -1
- package/dist/harness/progress-controller.d.ts.map +0 -1
- package/dist/harness/progress-controller.js.map +0 -1
- package/dist/harness/state.d.ts.map +0 -1
- package/dist/harness/state.js.map +0 -1
- package/dist/harness/stop-controller.d.ts.map +0 -1
- package/dist/harness/stop-controller.js.map +0 -1
- package/dist/harness/turn-summary.d.ts.map +0 -1
- package/dist/harness/turn-summary.js.map +0 -1
- package/dist/harness/types.d.ts.map +0 -1
- package/dist/harness/types.js.map +0 -1
- package/dist/harness/verification.d.ts.map +0 -1
- package/dist/harness/verification.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/memory/embeddings.d.ts.map +0 -1
- package/dist/memory/embeddings.js.map +0 -1
- package/dist/memory/entrypoint.d.ts.map +0 -1
- package/dist/memory/entrypoint.js.map +0 -1
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/prompt-context.d.ts.map +0 -1
- package/dist/memory/prompt-context.js.map +0 -1
- package/dist/memory/prompts.d.ts.map +0 -1
- package/dist/memory/prompts.js.map +0 -1
- package/dist/memory/relevant-finder.d.ts.map +0 -1
- package/dist/memory/relevant-finder.js.map +0 -1
- package/dist/memory/semantic-config.d.ts.map +0 -1
- package/dist/memory/semantic-config.js.map +0 -1
- package/dist/memory/semantic-search.d.ts.map +0 -1
- package/dist/memory/semantic-search.js.map +0 -1
- package/dist/memory/storage.d.ts.map +0 -1
- package/dist/memory/storage.js.map +0 -1
- package/dist/memory/store.d.ts.map +0 -1
- package/dist/memory/store.js.map +0 -1
- package/dist/memory/team-paths.d.ts.map +0 -1
- package/dist/memory/team-paths.js.map +0 -1
- package/dist/memory/types.d.ts.map +0 -1
- package/dist/memory/types.js.map +0 -1
- package/dist/memory/validation.d.ts.map +0 -1
- package/dist/memory/validation.js.map +0 -1
- package/dist/memory/vector-store.d.ts.map +0 -1
- package/dist/memory/vector-store.js.map +0 -1
- package/dist/migration/command.d.ts.map +0 -1
- package/dist/migration/command.js.map +0 -1
- package/dist/migration/index.d.ts.map +0 -1
- package/dist/migration/index.js.map +0 -1
- package/dist/migration/migrate.d.ts.map +0 -1
- package/dist/migration/migrate.js.map +0 -1
- package/dist/migration/types.d.ts.map +0 -1
- package/dist/migration/types.js.map +0 -1
- package/dist/print-ui/launch.d.ts.map +0 -1
- package/dist/print-ui/launch.js.map +0 -1
- package/dist/product/environment.d.ts.map +0 -1
- package/dist/product/environment.js.map +0 -1
- package/dist/product/identity.d.ts.map +0 -1
- package/dist/product/identity.js.map +0 -1
- package/dist/product/index.d.ts.map +0 -1
- package/dist/product/index.js.map +0 -1
- package/dist/product/paths.d.ts.map +0 -1
- package/dist/product/paths.js.map +0 -1
- package/dist/product/version.d.ts.map +0 -1
- package/dist/product/version.js.map +0 -1
- package/dist/runtime/agent-loop.d.ts.map +0 -1
- package/dist/runtime/agent-loop.js.map +0 -1
- package/dist/runtime/agent-runtime-controller.d.ts.map +0 -1
- package/dist/runtime/agent-runtime-controller.js.map +0 -1
- package/dist/runtime/agent-runtime-protocol.d.ts.map +0 -1
- package/dist/runtime/agent-runtime-protocol.js.map +0 -1
- package/dist/runtime/agent-runtime-runner.d.ts.map +0 -1
- package/dist/runtime/agent-runtime-runner.js.map +0 -1
- package/dist/runtime/agent-status.d.ts.map +0 -1
- package/dist/runtime/agent-status.js.map +0 -1
- package/dist/runtime/aggregate-tool-presenter.d.ts.map +0 -1
- package/dist/runtime/aggregate-tool-presenter.js.map +0 -1
- package/dist/runtime/batch-read-service.d.ts.map +0 -1
- package/dist/runtime/batch-read-service.js.map +0 -1
- package/dist/runtime/builtin-tool-provider.d.ts.map +0 -1
- package/dist/runtime/builtin-tool-provider.js.map +0 -1
- package/dist/runtime/capabilities/compiler.d.ts.map +0 -1
- package/dist/runtime/capabilities/compiler.js.map +0 -1
- package/dist/runtime/capabilities/index.d.ts.map +0 -1
- package/dist/runtime/capabilities/index.js.map +0 -1
- package/dist/runtime/capabilities/types.d.ts.map +0 -1
- package/dist/runtime/capabilities/types.js.map +0 -1
- package/dist/runtime/capability-receipt-journal.d.ts.map +0 -1
- package/dist/runtime/capability-receipt-journal.js.map +0 -1
- package/dist/runtime/capability-step-factory.d.ts.map +0 -1
- package/dist/runtime/capability-step-factory.js.map +0 -1
- package/dist/runtime/compact-transaction.d.ts.map +0 -1
- package/dist/runtime/compact-transaction.js.map +0 -1
- package/dist/runtime/composer/buffer.d.ts.map +0 -1
- package/dist/runtime/composer/buffer.js.map +0 -1
- package/dist/runtime/composer/grapheme.d.ts.map +0 -1
- package/dist/runtime/composer/grapheme.js.map +0 -1
- package/dist/runtime/composer/history.d.ts.map +0 -1
- package/dist/runtime/composer/history.js.map +0 -1
- package/dist/runtime/composer/layout.d.ts.map +0 -1
- package/dist/runtime/composer/layout.js.map +0 -1
- package/dist/runtime/core-tools/descriptors.d.ts.map +0 -1
- package/dist/runtime/core-tools/descriptors.js.map +0 -1
- package/dist/runtime/durable-tool-receipt-reader.d.ts.map +0 -1
- package/dist/runtime/durable-tool-receipt-reader.js.map +0 -1
- package/dist/runtime/first-party-core-provider.d.ts.map +0 -1
- package/dist/runtime/first-party-core-provider.js.map +0 -1
- package/dist/runtime/first-party-long-tail-provider.d.ts.map +0 -1
- package/dist/runtime/first-party-long-tail-provider.js.map +0 -1
- package/dist/runtime/first-party-tool-services.d.ts.map +0 -1
- package/dist/runtime/first-party-tool-services.js.map +0 -1
- package/dist/runtime/first-party-tool-universe.d.ts.map +0 -1
- package/dist/runtime/first-party-tool-universe.js.map +0 -1
- package/dist/runtime/goal-lifecycle-v2.d.ts.map +0 -1
- package/dist/runtime/goal-lifecycle-v2.js.map +0 -1
- package/dist/runtime/goal-runtime-coordinator.d.ts.map +0 -1
- package/dist/runtime/goal-runtime-coordinator.js.map +0 -1
- package/dist/runtime/goals/completion-audit.d.ts.map +0 -1
- package/dist/runtime/goals/completion-audit.js.map +0 -1
- package/dist/runtime/goals/evidence.d.ts.map +0 -1
- package/dist/runtime/goals/evidence.js.map +0 -1
- package/dist/runtime/goals/objective.d.ts.map +0 -1
- package/dist/runtime/goals/objective.js.map +0 -1
- package/dist/runtime/goals/presentation.d.ts.map +0 -1
- package/dist/runtime/goals/presentation.js.map +0 -1
- package/dist/runtime/goals/types.d.ts.map +0 -1
- package/dist/runtime/goals/types.js.map +0 -1
- package/dist/runtime/harness-confluence.d.ts.map +0 -1
- package/dist/runtime/harness-confluence.js.map +0 -1
- package/dist/runtime/harness-eval.d.ts.map +0 -1
- package/dist/runtime/harness-eval.js.map +0 -1
- package/dist/runtime/harness-metrics.d.ts.map +0 -1
- package/dist/runtime/harness-metrics.js.map +0 -1
- package/dist/runtime/legacy-session-importer.d.ts.map +0 -1
- package/dist/runtime/legacy-session-importer.js.map +0 -1
- package/dist/runtime/legacy-thread-materializer.d.ts.map +0 -1
- package/dist/runtime/legacy-thread-materializer.js.map +0 -1
- package/dist/runtime/long-tail-tools/descriptors.d.ts.map +0 -1
- package/dist/runtime/long-tail-tools/descriptors.js.map +0 -1
- package/dist/runtime/loop-budget.d.ts.map +0 -1
- package/dist/runtime/loop-budget.js.map +0 -1
- package/dist/runtime/mcp/first-party-mcp-adapter.d.ts.map +0 -1
- package/dist/runtime/mcp/first-party-mcp-adapter.js.map +0 -1
- package/dist/runtime/mcp/first-party-mcp-config.d.ts.map +0 -1
- package/dist/runtime/mcp/first-party-mcp-config.js.map +0 -1
- package/dist/runtime/mcp/index.d.ts.map +0 -1
- package/dist/runtime/mcp/index.js.map +0 -1
- package/dist/runtime/mcp/lazy-mcp-runtime.d.ts.map +0 -1
- package/dist/runtime/mcp/lazy-mcp-runtime.js.map +0 -1
- package/dist/runtime/mcp/types.d.ts.map +0 -1
- package/dist/runtime/mcp/types.js.map +0 -1
- package/dist/runtime/model-coordinator.d.ts.map +0 -1
- package/dist/runtime/model-coordinator.js.map +0 -1
- package/dist/runtime/orion-runtime-v1.d.ts.map +0 -1
- package/dist/runtime/orion-runtime-v1.js.map +0 -1
- package/dist/runtime/orion-session-runner.d.ts.map +0 -1
- package/dist/runtime/orion-session-runner.js.map +0 -1
- package/dist/runtime/plan-review.d.ts.map +0 -1
- package/dist/runtime/plan-review.js.map +0 -1
- package/dist/runtime/product-bootstrap.d.ts.map +0 -1
- package/dist/runtime/product-bootstrap.js.map +0 -1
- package/dist/runtime/product-orion-runtime.d.ts.map +0 -1
- package/dist/runtime/product-orion-runtime.js.map +0 -1
- package/dist/runtime/prompts/index.d.ts.map +0 -1
- package/dist/runtime/prompts/index.js.map +0 -1
- package/dist/runtime/prompts/prompt-registry.d.ts.map +0 -1
- package/dist/runtime/prompts/prompt-registry.js.map +0 -1
- package/dist/runtime/prompts/types.d.ts.map +0 -1
- package/dist/runtime/prompts/types.js.map +0 -1
- package/dist/runtime/protocol/canonical.d.ts.map +0 -1
- package/dist/runtime/protocol/canonical.js.map +0 -1
- package/dist/runtime/protocol/index.d.ts.map +0 -1
- package/dist/runtime/protocol/index.js.map +0 -1
- package/dist/runtime/protocol/runtime-protocol-v1.d.ts.map +0 -1
- package/dist/runtime/protocol/runtime-protocol-v1.js.map +0 -1
- package/dist/runtime/release-receipts.d.ts.map +0 -1
- package/dist/runtime/release-receipts.js.map +0 -1
- package/dist/runtime/resource-scope.d.ts.map +0 -1
- package/dist/runtime/resource-scope.js.map +0 -1
- package/dist/runtime/rich-text/ansi-parser.d.ts.map +0 -1
- package/dist/runtime/rich-text/ansi-parser.js.map +0 -1
- package/dist/runtime/rich-text/layout.d.ts.map +0 -1
- package/dist/runtime/rich-text/layout.js.map +0 -1
- package/dist/runtime/rich-text/markdown-parser.d.ts.map +0 -1
- package/dist/runtime/rich-text/markdown-parser.js.map +0 -1
- package/dist/runtime/rich-text/sanitizer.d.ts.map +0 -1
- package/dist/runtime/rich-text/sanitizer.js.map +0 -1
- package/dist/runtime/rich-text/types.d.ts.map +0 -1
- package/dist/runtime/rich-text/types.js.map +0 -1
- package/dist/runtime/runtime-event-buffer.d.ts.map +0 -1
- package/dist/runtime/runtime-event-buffer.js.map +0 -1
- package/dist/runtime/runtime-services.d.ts.map +0 -1
- package/dist/runtime/runtime-services.js.map +0 -1
- package/dist/runtime/session-composer-control.d.ts.map +0 -1
- package/dist/runtime/session-composer-control.js.map +0 -1
- package/dist/runtime/session-history-recovery.d.ts.map +0 -1
- package/dist/runtime/session-history-recovery.js.map +0 -1
- package/dist/runtime/skills/bounded-lru-cache.d.ts.map +0 -1
- package/dist/runtime/skills/bounded-lru-cache.js.map +0 -1
- package/dist/runtime/skills/filesystem-skill-provider.d.ts.map +0 -1
- package/dist/runtime/skills/filesystem-skill-provider.js.map +0 -1
- package/dist/runtime/skills/index.d.ts.map +0 -1
- package/dist/runtime/skills/index.js.map +0 -1
- package/dist/runtime/skills/lazy-skill-runtime.d.ts.map +0 -1
- package/dist/runtime/skills/lazy-skill-runtime.js.map +0 -1
- package/dist/runtime/skills/types.d.ts.map +0 -1
- package/dist/runtime/skills/types.js.map +0 -1
- package/dist/runtime/step-snapshot.d.ts.map +0 -1
- package/dist/runtime/step-snapshot.js.map +0 -1
- package/dist/runtime/subagent-thread-runtime.d.ts.map +0 -1
- package/dist/runtime/subagent-thread-runtime.js.map +0 -1
- package/dist/runtime/subagents/budget.d.ts.map +0 -1
- package/dist/runtime/subagents/budget.js.map +0 -1
- package/dist/runtime/subagents/child-executor-guard.d.ts.map +0 -1
- package/dist/runtime/subagents/child-executor-guard.js.map +0 -1
- package/dist/runtime/subagents/context-builder.d.ts.map +0 -1
- package/dist/runtime/subagents/context-builder.js.map +0 -1
- package/dist/runtime/subagents/index.d.ts.map +0 -1
- package/dist/runtime/subagents/index.js.map +0 -1
- package/dist/runtime/subagents/parent-step-fork.d.ts.map +0 -1
- package/dist/runtime/subagents/parent-step-fork.js.map +0 -1
- package/dist/runtime/subagents/policy.d.ts.map +0 -1
- package/dist/runtime/subagents/policy.js.map +0 -1
- package/dist/runtime/subagents/presets.d.ts.map +0 -1
- package/dist/runtime/subagents/presets.js.map +0 -1
- package/dist/runtime/subagents/production.d.ts.map +0 -1
- package/dist/runtime/subagents/production.js.map +0 -1
- package/dist/runtime/subagents/provider-gate.d.ts.map +0 -1
- package/dist/runtime/subagents/provider-gate.js.map +0 -1
- package/dist/runtime/subagents/receipt-journal.d.ts.map +0 -1
- package/dist/runtime/subagents/receipt-journal.js.map +0 -1
- package/dist/runtime/subagents/research-artifact.d.ts.map +0 -1
- package/dist/runtime/subagents/research-artifact.js.map +0 -1
- package/dist/runtime/subagents/research-citation.d.ts.map +0 -1
- package/dist/runtime/subagents/research-citation.js.map +0 -1
- package/dist/runtime/subagents/research-contract.d.ts.map +0 -1
- package/dist/runtime/subagents/research-contract.js.map +0 -1
- package/dist/runtime/subagents/research-quality.d.ts.map +0 -1
- package/dist/runtime/subagents/research-quality.js.map +0 -1
- package/dist/runtime/subagents/research-renderer.d.ts.map +0 -1
- package/dist/runtime/subagents/research-renderer.js.map +0 -1
- package/dist/runtime/subagents/research-types.d.ts.map +0 -1
- package/dist/runtime/subagents/research-types.js.map +0 -1
- package/dist/runtime/subagents/result-parser.d.ts.map +0 -1
- package/dist/runtime/subagents/result-parser.js.map +0 -1
- package/dist/runtime/subagents/runner.d.ts.map +0 -1
- package/dist/runtime/subagents/runner.js.map +0 -1
- package/dist/runtime/subagents/runtime-contract.d.ts.map +0 -1
- package/dist/runtime/subagents/runtime-contract.js.map +0 -1
- package/dist/runtime/subagents/runtime-integration.d.ts.map +0 -1
- package/dist/runtime/subagents/runtime-integration.js.map +0 -1
- package/dist/runtime/subagents/supervisor.d.ts.map +0 -1
- package/dist/runtime/subagents/supervisor.js.map +0 -1
- package/dist/runtime/subagents/tool.d.ts.map +0 -1
- package/dist/runtime/subagents/tool.js.map +0 -1
- package/dist/runtime/subagents/types.d.ts.map +0 -1
- package/dist/runtime/subagents/types.js.map +0 -1
- package/dist/runtime/subagents/web-research-adapter.d.ts.map +0 -1
- package/dist/runtime/subagents/web-research-adapter.js.map +0 -1
- package/dist/runtime/task-context-service.d.ts.map +0 -1
- package/dist/runtime/task-context-service.js.map +0 -1
- package/dist/runtime/thread-admission.d.ts.map +0 -1
- package/dist/runtime/thread-admission.js.map +0 -1
- package/dist/runtime/thread-compact-persistence.d.ts.map +0 -1
- package/dist/runtime/thread-compact-persistence.js.map +0 -1
- package/dist/runtime/thread-event-store.d.ts.map +0 -1
- package/dist/runtime/thread-event-store.js.map +0 -1
- package/dist/runtime/thread-projection.d.ts.map +0 -1
- package/dist/runtime/thread-projection.js.map +0 -1
- package/dist/runtime/thread-runtime.d.ts.map +0 -1
- package/dist/runtime/thread-runtime.js.map +0 -1
- package/dist/runtime/thread-session-index.d.ts.map +0 -1
- package/dist/runtime/thread-session-index.js.map +0 -1
- package/dist/runtime/thread-session-view.d.ts.map +0 -1
- package/dist/runtime/thread-session-view.js.map +0 -1
- package/dist/runtime/thread-tool-journal.d.ts.map +0 -1
- package/dist/runtime/thread-tool-journal.js.map +0 -1
- package/dist/runtime/thread-ui-adapter.d.ts.map +0 -1
- package/dist/runtime/thread-ui-adapter.js.map +0 -1
- package/dist/runtime/tool-detail-repository.d.ts.map +0 -1
- package/dist/runtime/tool-detail-repository.js.map +0 -1
- package/dist/runtime/tool-gateway.d.ts.map +0 -1
- package/dist/runtime/tool-gateway.js.map +0 -1
- package/dist/runtime/tool-output-presentation.d.ts.map +0 -1
- package/dist/runtime/tool-output-presentation.js.map +0 -1
- package/dist/runtime/tool-receipt-validator.d.ts.map +0 -1
- package/dist/runtime/tool-receipt-validator.js.map +0 -1
- package/dist/runtime/turn-commit.d.ts.map +0 -1
- package/dist/runtime/turn-commit.js.map +0 -1
- package/dist/runtime/turn-controller.d.ts.map +0 -1
- package/dist/runtime/turn-controller.js.map +0 -1
- package/dist/runtime/ui-events.d.ts.map +0 -1
- package/dist/runtime/ui-events.js.map +0 -1
- package/dist/runtime/ui-view-model.d.ts.map +0 -1
- package/dist/runtime/ui-view-model.js.map +0 -1
- package/dist/services/atomic-write.d.ts.map +0 -1
- package/dist/services/atomic-write.js.map +0 -1
- package/dist/services/auth/auth.d.ts.map +0 -1
- package/dist/services/auth/auth.js.map +0 -1
- package/dist/services/auth/aws.d.ts.map +0 -1
- package/dist/services/auth/aws.js.map +0 -1
- package/dist/services/auth/index.d.ts.map +0 -1
- package/dist/services/auth/index.js.map +0 -1
- package/dist/services/auto-fix/autoFixConfig.d.ts.map +0 -1
- package/dist/services/auto-fix/autoFixConfig.js.map +0 -1
- package/dist/services/auto-fix/autoFixHook.d.ts.map +0 -1
- package/dist/services/auto-fix/autoFixHook.js.map +0 -1
- package/dist/services/auto-fix/autoFixRunner.d.ts.map +0 -1
- package/dist/services/auto-fix/autoFixRunner.js.map +0 -1
- package/dist/services/auto-fix/index.d.ts.map +0 -1
- package/dist/services/auto-fix/index.js.map +0 -1
- package/dist/services/bounded-response.d.ts.map +0 -1
- package/dist/services/bounded-response.js.map +0 -1
- package/dist/services/commit-plan.d.ts.map +0 -1
- package/dist/services/commit-plan.js.map +0 -1
- package/dist/services/compact/auto-compact.d.ts.map +0 -1
- package/dist/services/compact/auto-compact.js.map +0 -1
- package/dist/services/compact/compact.d.ts.map +0 -1
- package/dist/services/compact/compact.js.map +0 -1
- package/dist/services/compact/coordinator.d.ts.map +0 -1
- package/dist/services/compact/coordinator.js.map +0 -1
- package/dist/services/compact/fingerprint.d.ts.map +0 -1
- package/dist/services/compact/fingerprint.js.map +0 -1
- package/dist/services/compact/index.d.ts.map +0 -1
- package/dist/services/compact/index.js.map +0 -1
- package/dist/services/compact/planner.d.ts.map +0 -1
- package/dist/services/compact/planner.js.map +0 -1
- package/dist/services/compact/semantic-summary.d.ts.map +0 -1
- package/dist/services/compact/semantic-summary.js.map +0 -1
- package/dist/services/compact/summary-generator.d.ts.map +0 -1
- package/dist/services/compact/summary-generator.js.map +0 -1
- package/dist/services/compact/tool-call-groups.d.ts.map +0 -1
- package/dist/services/compact/tool-call-groups.js.map +0 -1
- package/dist/services/concurrent-sessions.d.ts.map +0 -1
- package/dist/services/concurrent-sessions.js.map +0 -1
- package/dist/services/config-dir.d.ts.map +0 -1
- package/dist/services/config-dir.js.map +0 -1
- package/dist/services/config.d.ts.map +0 -1
- package/dist/services/config.js.map +0 -1
- package/dist/services/diagnostic-tracking/diagnosticTracking.d.ts.map +0 -1
- package/dist/services/diagnostic-tracking/diagnosticTracking.js.map +0 -1
- package/dist/services/diagnostic-tracking/formatter.d.ts.map +0 -1
- package/dist/services/diagnostic-tracking/formatter.js.map +0 -1
- package/dist/services/diagnostic-tracking/index.d.ts.map +0 -1
- package/dist/services/diagnostic-tracking/index.js.map +0 -1
- package/dist/services/diagnostic-tracking/types.d.ts.map +0 -1
- package/dist/services/diagnostic-tracking/types.js.map +0 -1
- package/dist/services/doctor.d.ts.map +0 -1
- package/dist/services/doctor.js.map +0 -1
- package/dist/services/effort.d.ts.map +0 -1
- package/dist/services/effort.js.map +0 -1
- package/dist/services/file-context.d.ts.map +0 -1
- package/dist/services/file-context.js.map +0 -1
- package/dist/services/file-glob.d.ts.map +0 -1
- package/dist/services/file-glob.js.map +0 -1
- package/dist/services/file-lock.d.ts.map +0 -1
- package/dist/services/file-lock.js.map +0 -1
- package/dist/services/format.d.ts.map +0 -1
- package/dist/services/format.js.map +0 -1
- package/dist/services/global-config.d.ts.map +0 -1
- package/dist/services/global-config.js.map +0 -1
- package/dist/services/goal-storage.d.ts.map +0 -1
- package/dist/services/goal-storage.js.map +0 -1
- package/dist/services/llm.d.ts.map +0 -1
- package/dist/services/llm.js.map +0 -1
- package/dist/services/mcp/index.d.ts.map +0 -1
- package/dist/services/mcp/index.js.map +0 -1
- package/dist/services/mcp/transports.d.ts.map +0 -1
- package/dist/services/mcp/transports.js.map +0 -1
- package/dist/services/memory.d.ts.map +0 -1
- package/dist/services/memory.js.map +0 -1
- package/dist/services/model-catalog.d.ts.map +0 -1
- package/dist/services/model-catalog.js.map +0 -1
- package/dist/services/model-client-pool.d.ts.map +0 -1
- package/dist/services/model-client-pool.js.map +0 -1
- package/dist/services/model-context.d.ts.map +0 -1
- package/dist/services/model-context.js.map +0 -1
- package/dist/services/model-registry.d.ts.map +0 -1
- package/dist/services/model-registry.js.map +0 -1
- package/dist/services/project-instructions.d.ts.map +0 -1
- package/dist/services/project-instructions.js.map +0 -1
- package/dist/services/prompt-context.d.ts.map +0 -1
- package/dist/services/prompt-context.js.map +0 -1
- package/dist/services/provider-diagnostics.d.ts.map +0 -1
- package/dist/services/provider-diagnostics.js.map +0 -1
- package/dist/services/provider-resilience/circuit-breaker.d.ts.map +0 -1
- package/dist/services/provider-resilience/circuit-breaker.js.map +0 -1
- package/dist/services/provider-resilience/coordinator.d.ts.map +0 -1
- package/dist/services/provider-resilience/coordinator.js.map +0 -1
- package/dist/services/provider-resilience/error-classifier.d.ts.map +0 -1
- package/dist/services/provider-resilience/error-classifier.js.map +0 -1
- package/dist/services/provider-resilience/index.d.ts.map +0 -1
- package/dist/services/provider-resilience/index.js.map +0 -1
- package/dist/services/provider-resilience/request-gate.d.ts.map +0 -1
- package/dist/services/provider-resilience/request-gate.js.map +0 -1
- package/dist/services/provider-resilience/stream-recovery.d.ts.map +0 -1
- package/dist/services/provider-resilience/stream-recovery.js.map +0 -1
- package/dist/services/provider-resilience/types.d.ts.map +0 -1
- package/dist/services/provider-resilience/types.js.map +0 -1
- package/dist/services/redaction.d.ts.map +0 -1
- package/dist/services/redaction.js.map +0 -1
- package/dist/services/safe-project-reader.d.ts.map +0 -1
- package/dist/services/safe-project-reader.js.map +0 -1
- package/dist/services/session-index.d.ts.map +0 -1
- package/dist/services/session-index.js.map +0 -1
- package/dist/services/session-memory/index.d.ts.map +0 -1
- package/dist/services/session-memory/index.js.map +0 -1
- package/dist/services/session-memory/prompts.d.ts.map +0 -1
- package/dist/services/session-memory/prompts.js.map +0 -1
- package/dist/services/session-memory/sessionMemory.d.ts.map +0 -1
- package/dist/services/session-memory/sessionMemory.js.map +0 -1
- package/dist/services/session-storage.d.ts.map +0 -1
- package/dist/services/session-storage.js.map +0 -1
- package/dist/services/settings-coordinator.d.ts.map +0 -1
- package/dist/services/settings-coordinator.js.map +0 -1
- package/dist/services/settings-document-repository.d.ts.map +0 -1
- package/dist/services/settings-document-repository.js.map +0 -1
- package/dist/services/smart-routing.d.ts.map +0 -1
- package/dist/services/smart-routing.js.map +0 -1
- package/dist/services/storage-maintenance.d.ts.map +0 -1
- package/dist/services/storage-maintenance.js.map +0 -1
- package/dist/services/tool-allowlist.d.ts.map +0 -1
- package/dist/services/tool-allowlist.js.map +0 -1
- package/dist/services/usage-state.d.ts.map +0 -1
- package/dist/services/usage-state.js.map +0 -1
- package/dist/services/verification-profile.d.ts.map +0 -1
- package/dist/services/verification-profile.js.map +0 -1
- package/dist/services/web-search-adapters.d.ts.map +0 -1
- package/dist/services/web-search-adapters.js.map +0 -1
- package/dist/services/web-search-mcp.d.ts.map +0 -1
- package/dist/services/web-search-mcp.js.map +0 -1
- package/dist/services/web-search-provider.d.ts.map +0 -1
- package/dist/services/web-search-provider.js.map +0 -1
- package/dist/services/workspace-containment.d.ts.map +0 -1
- package/dist/services/workspace-containment.js.map +0 -1
- package/dist/services/workspace-diff.d.ts.map +0 -1
- package/dist/services/workspace-diff.js.map +0 -1
- package/dist/services/workspace-registry.d.ts.map +0 -1
- package/dist/services/workspace-registry.js.map +0 -1
- package/dist/services/workspace-state.d.ts.map +0 -1
- package/dist/services/workspace-state.js.map +0 -1
- package/dist/services/yaml-config.d.ts.map +0 -1
- package/dist/services/yaml-config.js.map +0 -1
- package/dist/terminal-ui/completion.d.ts.map +0 -1
- package/dist/terminal-ui/completion.js.map +0 -1
- package/dist/terminal-ui/editor.d.ts.map +0 -1
- package/dist/terminal-ui/editor.js.map +0 -1
- package/dist/terminal-ui/launch.d.ts.map +0 -1
- package/dist/terminal-ui/launch.js.map +0 -1
- package/dist/terminal-ui/output-queue.d.ts.map +0 -1
- package/dist/terminal-ui/output-queue.js.map +0 -1
- package/dist/terminal-ui/raw-editor.d.ts.map +0 -1
- package/dist/terminal-ui/raw-editor.js.map +0 -1
- package/dist/tools/_validate.d.ts.map +0 -1
- package/dist/tools/_validate.js.map +0 -1
- package/dist/tools/bash_security.d.ts.map +0 -1
- package/dist/tools/bash_security.js.map +0 -1
- package/dist/tools/core/common.d.ts.map +0 -1
- package/dist/tools/core/common.js.map +0 -1
- package/dist/tools/core/edit-file.d.ts.map +0 -1
- package/dist/tools/core/edit-file.js.map +0 -1
- package/dist/tools/core/exec-command.d.ts.map +0 -1
- package/dist/tools/core/exec-command.js.map +0 -1
- package/dist/tools/core/glob.d.ts.map +0 -1
- package/dist/tools/core/glob.js.map +0 -1
- package/dist/tools/core/grep.d.ts.map +0 -1
- package/dist/tools/core/grep.js.map +0 -1
- package/dist/tools/core/index.d.ts.map +0 -1
- package/dist/tools/core/index.js.map +0 -1
- package/dist/tools/core/list-files.d.ts.map +0 -1
- package/dist/tools/core/list-files.js.map +0 -1
- package/dist/tools/core/read-file.d.ts.map +0 -1
- package/dist/tools/core/read-file.js.map +0 -1
- package/dist/tools/core/write-file.d.ts.map +0 -1
- package/dist/tools/core/write-file.js.map +0 -1
- package/dist/tools/git.d.ts.map +0 -1
- package/dist/tools/git.js.map +0 -1
- package/dist/tools/lsp.d.ts.map +0 -1
- package/dist/tools/lsp.js.map +0 -1
- package/dist/tools/sandbox.d.ts.map +0 -1
- package/dist/tools/sandbox.js.map +0 -1
- package/dist/tools/todo.d.ts.map +0 -1
- package/dist/tools/todo.js.map +0 -1
- package/dist/tools/web.d.ts.map +0 -1
- package/dist/tools/web.js.map +0 -1
- package/dist/tui-core/frame.d.ts.map +0 -1
- package/dist/tui-core/frame.js.map +0 -1
- package/dist/tui-core/input-parser.d.ts.map +0 -1
- package/dist/tui-core/input-parser.js.map +0 -1
- package/dist/tui-core/style.d.ts.map +0 -1
- package/dist/tui-core/style.js.map +0 -1
- package/dist/tui-core/terminal-writer.d.ts.map +0 -1
- package/dist/tui-core/terminal-writer.js.map +0 -1
- package/dist/tui-ui/chrome-view-model.d.ts.map +0 -1
- package/dist/tui-ui/chrome-view-model.js.map +0 -1
- package/dist/tui-ui/inline-surface.d.ts.map +0 -1
- package/dist/tui-ui/inline-surface.js.map +0 -1
- package/dist/tui-ui/input-ownership.d.ts.map +0 -1
- package/dist/tui-ui/input-ownership.js.map +0 -1
- package/dist/tui-ui/launch.d.ts.map +0 -1
- package/dist/tui-ui/launch.js.map +0 -1
- package/dist/tui-ui/layout.d.ts.map +0 -1
- package/dist/tui-ui/layout.js.map +0 -1
- package/dist/tui-ui/pickers.d.ts.map +0 -1
- package/dist/tui-ui/pickers.js.map +0 -1
- package/dist/tui-ui/pixel-mascot.d.ts.map +0 -1
- package/dist/tui-ui/pixel-mascot.js.map +0 -1
- package/dist/tui-ui/render-scheduler.d.ts.map +0 -1
- package/dist/tui-ui/render-scheduler.js.map +0 -1
- package/dist/tui-ui/runner.d.ts.map +0 -1
- package/dist/tui-ui/runner.js.map +0 -1
- package/dist/tui-ui/state.d.ts.map +0 -1
- package/dist/tui-ui/state.js.map +0 -1
- package/dist/tui-ui/terminal-image.d.ts.map +0 -1
- package/dist/tui-ui/terminal-image.js.map +0 -1
- package/dist/tui-ui/theme-profile.d.ts.map +0 -1
- package/dist/tui-ui/theme-profile.js.map +0 -1
- package/dist/tui-ui/theme.d.ts.map +0 -1
- package/dist/tui-ui/theme.js.map +0 -1
- package/dist/tui-ui/transcript-cache.d.ts.map +0 -1
- package/dist/tui-ui/transcript-cache.js.map +0 -1
- package/dist/tui-ui/transcript-inspector-layout.d.ts.map +0 -1
- package/dist/tui-ui/transcript-inspector-layout.js.map +0 -1
- package/dist/tui-ui/transcript-inspector-surface.d.ts.map +0 -1
- package/dist/tui-ui/transcript-inspector-surface.js.map +0 -1
- package/dist/tui-ui/transcript-inspector.d.ts.map +0 -1
- package/dist/tui-ui/transcript-inspector.js.map +0 -1
- package/dist/tui-ui/transcript-layout.d.ts.map +0 -1
- package/dist/tui-ui/transcript-layout.js.map +0 -1
- package/dist/ui/box.d.ts.map +0 -1
- package/dist/ui/box.js.map +0 -1
- package/dist/ui/command-panel.d.ts.map +0 -1
- package/dist/ui/command-panel.js.map +0 -1
- package/dist/ui/file-completion.d.ts.map +0 -1
- package/dist/ui/file-completion.js.map +0 -1
- package/dist/ui/markdown.d.ts.map +0 -1
- package/dist/ui/markdown.js.map +0 -1
- package/dist/ui/multiline-input.d.ts.map +0 -1
- package/dist/ui/multiline-input.js.map +0 -1
- package/dist/ui/progress.d.ts.map +0 -1
- package/dist/ui/progress.js.map +0 -1
- package/dist/ui/shared/command-palette.d.ts.map +0 -1
- package/dist/ui/shared/command-palette.js.map +0 -1
- package/dist/ui/shared/command-suggestions.d.ts.map +0 -1
- package/dist/ui/shared/command-suggestions.js.map +0 -1
- package/dist/ui/shared/input-frame.d.ts.map +0 -1
- package/dist/ui/shared/input-frame.js.map +0 -1
- package/dist/ui/shared/text.d.ts.map +0 -1
- package/dist/ui/shared/text.js.map +0 -1
- package/dist/ui/shared/types.d.ts.map +0 -1
- package/dist/ui/shared/types.js.map +0 -1
- package/dist/ui/status-bar.d.ts.map +0 -1
- package/dist/ui/status-bar.js.map +0 -1
- package/dist/ui/stream-markdown.d.ts.map +0 -1
- package/dist/ui/stream-markdown.js.map +0 -1
- package/dist/ui/suggestions.d.ts.map +0 -1
- package/dist/ui/suggestions.js.map +0 -1
- package/dist/ui/tool-preview.d.ts.map +0 -1
- package/dist/ui/tool-preview.js.map +0 -1
- package/dist/ui/user-input.d.ts.map +0 -1
- package/dist/ui/user-input.js.map +0 -1
- package/dist/utils/debug-log.d.ts.map +0 -1
- package/dist/utils/debug-log.js.map +0 -1
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/json.d.ts.map +0 -1
- package/dist/utils/json.js.map +0 -1
- package/dist/utils/mask.d.ts.map +0 -1
- package/dist/utils/mask.js.map +0 -1
- package/dist/utils/observability.d.ts.map +0 -1
- package/dist/utils/observability.js.map +0 -1
- package/dist/utils/token-estimate.d.ts.map +0 -1
- package/dist/utils/token-estimate.js.map +0 -1
- package/dist/web/errors.d.ts.map +0 -1
- package/dist/web/errors.js.map +0 -1
- package/dist/web/event-hub.d.ts.map +0 -1
- package/dist/web/event-hub.js.map +0 -1
- package/dist/web/file-read-service.d.ts.map +0 -1
- package/dist/web/file-read-service.js.map +0 -1
- package/dist/web/git-read-model-service.d.ts.map +0 -1
- package/dist/web/git-read-model-service.js.map +0 -1
- package/dist/web/index.d.ts.map +0 -1
- package/dist/web/index.js.map +0 -1
- package/dist/web/launch.d.ts.map +0 -1
- package/dist/web/launch.js.map +0 -1
- package/dist/web/protocol.d.ts.map +0 -1
- package/dist/web/protocol.js.map +0 -1
- package/dist/web/review-service.d.ts.map +0 -1
- package/dist/web/review-service.js.map +0 -1
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js.map +0 -1
- package/dist/web/terminal-manager.d.ts.map +0 -1
- package/dist/web/terminal-manager.js.map +0 -1
- package/dist/web/terminal-server.d.ts.map +0 -1
- package/dist/web/terminal-server.js.map +0 -1
- package/dist/web/workbench-controller.d.ts.map +0 -1
- package/dist/web/workbench-controller.js.map +0 -1
- package/dist/web-client/assets/FilesPanel-DYs1MhoM.js +0 -2
- package/dist/web-client/assets/ReviewPanel-BDxG670T.js +0 -1
- package/dist/web-client/assets/index-BWV5sIvw.css +0 -1
- package/dist/web-client/assets/index-VVUKj6FE.js +0 -17
|
@@ -0,0 +1,1113 @@
|
|
|
1
|
+
# Orion Code v0.3.3 Web 内置「方块工坊」像素主题开发计划
|
|
2
|
+
|
|
3
|
+
- 版本:v0.3.3
|
|
4
|
+
- 状态:Proposed / 待评审
|
|
5
|
+
- 日期:2026-08-31
|
|
6
|
+
- 范围:Web Workbench 内置主题、视觉组件、主题设置、真实浏览器验收与发布证据
|
|
7
|
+
- 评审输入:`exec-26786286-3ce7-41b9-876b-d56108c3e540.png`(任务附件,仅作为视觉方向,不作为运行时依赖或像素级验收基线)
|
|
8
|
+
- 产品名称:`方块工坊 / Orion Blocksmith`
|
|
9
|
+
- 内置视觉风格 ID:`orion-blocksmith`
|
|
10
|
+
|
|
11
|
+
## 0. 决策摘要
|
|
12
|
+
|
|
13
|
+
v0.3.3 只交付一个由 Orion Code 随包提供的 Web 内置像素主题,不建设插件系统、主题市场或第三方主题加载器:
|
|
14
|
+
|
|
15
|
+
1. 新增内置视觉风格 `orion-blocksmith`,视觉语言采用原创的方块工坊、物品槽、石材、木材和像素硬边设计;
|
|
16
|
+
2. 附图只提供构图、密度、材质和色彩方向。不得复制 Minecraft 或其他游戏的商标、名称、字体、纹理、图标、音效、角色、文案或界面切片;
|
|
17
|
+
3. 保留 `appearance.theme=system|light|dark` 作为明暗模式,新增 `appearance.style=classic|orion-blocksmith` 作为视觉风格;`orion-blocksmith` 是未显式配置 style 时的默认,已有 theme 值不被覆盖;
|
|
18
|
+
4. 现有三栏 Workbench、Session、Goal、审批、Tool、终端、文件、Git、设置和 Composer 行为保持不变,主题不得建立第二套产品状态;
|
|
19
|
+
5. 主题继续通过 Host Settings 的 CAS、revision、last-good 和只读/无效状态链持久化,并支持无刷新实时切换;
|
|
20
|
+
6. 像素感由语义 Token、硬边组件几何和少量第一方像素素材共同实现,正文、代码、CJK 和状态数字不做低分辨率栅格化;
|
|
21
|
+
7. 所有素材本地打包,不访问 CDN,不执行主题脚本,不放宽 CSP,不引入安装、卸载、启用或停用生命周期;
|
|
22
|
+
8. 完成定义是 exact tarball 中的真实浏览器页面通过主题持久化、功能回归、响应式、无障碍、CSP、资产预算和截图证据门禁,而不是概念图相似或本地 CSS 预览。
|
|
23
|
+
|
|
24
|
+
## 1. 基线与前置门
|
|
25
|
+
|
|
26
|
+
### 1.1 当前检出状态
|
|
27
|
+
|
|
28
|
+
制定本计划时的实际检出为:
|
|
29
|
+
|
|
30
|
+
- 分支:`v0.3.1`,跟踪 `origin/v0.3.1`;
|
|
31
|
+
- HEAD:`2274639`(`fix: tighten terminal render budget`);
|
|
32
|
+
- `package.json` 版本:`0.3.1`;
|
|
33
|
+
- 当前检出中没有 v0.3.2 计划或 v0.3.2 实现文件;
|
|
34
|
+
- 工作树已有用户拥有的 `AGENTS.md`、质量轮转计划、截图和质量脚本改动,本计划不得接管或清理这些内容。
|
|
35
|
+
|
|
36
|
+
因此,v0.3.3 实施前必须先完成一次基线重审:确认目标分支已经包含要发布的 v0.3.2 布局和 Composer 状态;若文件、组件或 API 已变化,应更新本计划的路径清单,但不得改变“只做内置主题”的产品边界。
|
|
37
|
+
|
|
38
|
+
### 1.2 当前主题实现
|
|
39
|
+
|
|
40
|
+
当前 Web 主题不是插件,而是一条固定枚举设置链:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
orion.json web.appearance.theme + web.appearance.style
|
|
44
|
+
-> SettingsDocumentRepository strict validation + atomic CAS
|
|
45
|
+
-> SettingsCoordinator effective/explicit/last-good projection
|
|
46
|
+
-> Web protocol and client contract
|
|
47
|
+
-> App sets <html data-theme="..." data-ui-style="...">
|
|
48
|
+
-> bundled CSS variables and component selectors
|
|
49
|
+
-> TerminalPanel reads terminal CSS variables
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
当前 `theme` 只接受 `system | light | dark`,其语义是明暗模式;当前没有独立的视觉 style 字段:
|
|
53
|
+
|
|
54
|
+
- `src/services/global-config.ts`:全局配置类型、strict validator 和宽容启动清洗;
|
|
55
|
+
- `src/services/settings-document-repository.ts`:可写操作枚举、校验和原子持久化;
|
|
56
|
+
- `src/services/settings-coordinator.ts`:theme 默认值、来源、scope、live apply 和 last-good view;
|
|
57
|
+
- `src/web/protocol.ts`:Web Settings wire 类型和 mutation parser;
|
|
58
|
+
- `web/src/settings/`:浏览器 contract、draft、mirror、legacy localStorage 迁移;
|
|
59
|
+
- `web/src/components/SettingsDialog.tsx`:主题选择器;
|
|
60
|
+
- `web/src/App.tsx`:把 effective theme 写入根节点 `data-theme`;
|
|
61
|
+
- `web/src/styles.css`:内置深色/浅色 Token 和全部组件样式;
|
|
62
|
+
- `web/src/components/terminal/TerminalPanel.tsx`:从 CSS 自定义属性同步 xterm 色板。
|
|
63
|
+
|
|
64
|
+
### 1.3 前置门
|
|
65
|
+
|
|
66
|
+
编码前必须完成并记录:
|
|
67
|
+
|
|
68
|
+
1. rebase/checkout 到真实 v0.3.3 开发基线,并确认 v0.3.2 是否已交付;
|
|
69
|
+
2. `git status --short --branch`、HEAD、remote SHA 和用户拥有的脏改动;
|
|
70
|
+
3. 当前 Settings schema、Web API、theme/style 合同、CSS 入口、Terminal 同步和 E2E runner 是否仍与本计划一致;
|
|
71
|
+
4. 真实浏览器基线截图:默认主题、浅色、深色、设置、终端、窄屏 drawer;
|
|
72
|
+
5. 参考图不得直接进入运行时构建;若需要长期保存,应先形成经评审的原创实现稿和资产清单。
|
|
73
|
+
|
|
74
|
+
## 2. 目标、成功指标与非目标
|
|
75
|
+
|
|
76
|
+
### 2.1 产品目标
|
|
77
|
+
|
|
78
|
+
| ID | 目标 | v0.3.3 结果 |
|
|
79
|
+
| --- | ----------------------- | --------------------------------------------------------------------------------------- |
|
|
80
|
+
| G1 | 建立 Orion 自有像素视觉 | 方块工坊成为内置默认 Web 外观,具有清晰品牌识别 |
|
|
81
|
+
| G2 | 保持专业开发工具可用性 | 代码、Diff、终端、长输出和密集状态仍清晰、稳定、可导航 |
|
|
82
|
+
| G3 | 外观切换可靠 | style/theme 可独立或原子批量切换;保存、刷新、Host 重启、外部配置变更和回滚都有确定语义 |
|
|
83
|
+
| G4 | 不扩张插件边界 | 没有第三方包路径、动态脚本、市场、安装/卸载或远程素材 |
|
|
84
|
+
| G5 | 可验证交付 | exact tarball 的真实 Chrome 状态、无障碍、CSP 和资产证据通过 |
|
|
85
|
+
|
|
86
|
+
### 2.2 可量化成功指标
|
|
87
|
+
|
|
88
|
+
- `orion-blocksmith` style 切换后一个 animation frame 内完成根 style、明暗 Token 和 xterm 色板同步,不重新加载页面;
|
|
89
|
+
- warm Settings 保存 p95 不劣于现有基线 10%,主题切换不触发 Runtime 重建、Session 切换或 SSE 重连;
|
|
90
|
+
- 主题新增的首屏压缩资产总量目标不超过 160 KiB,单个像素图不超过 64 KiB,不加载远程字体或图片;
|
|
91
|
+
- 320、390、760、1180、1440 和 1920 CSS px 下无页面级横向滚动,无面板、Composer 或对话控件遮挡;
|
|
92
|
+
- 200% 浏览器缩放与 320 CSS px 视口仍能完成项目导航、发送消息、审批、切换工作面板和打开设置;
|
|
93
|
+
- 正文和关键控件文字对比度至少 4.5:1,大字号至少 3:1,非文本控件边界和状态至少 3:1;
|
|
94
|
+
- 关键交互目标至少 44×44 CSS px,细分隔条保留现有可用 hit target;
|
|
95
|
+
- `prefers-reduced-motion` 和应用内 reduced motion 下无装饰性循环动画、闪烁或强制视差;
|
|
96
|
+
- forced colors 下不依赖纹理、阴影或颜色单独表达 active、success、warning、danger;
|
|
97
|
+
- axe blocking violations、console error、page error、HTTP 5xx、CSP violation 和 secret finding 均为 0;
|
|
98
|
+
- `system`、`light`、`dark` 的功能与持久化测试保持通过,不因新主题被静默重写。
|
|
99
|
+
|
|
100
|
+
### 2.3 非目标
|
|
101
|
+
|
|
102
|
+
v0.3.3 不包含:
|
|
103
|
+
|
|
104
|
+
- 插件 SDK、主题扩展 API、Marketplace、主题目录扫描或 npm theme package;
|
|
105
|
+
- 安装、卸载、启用、停用、热更新、签名或第三方主题权限模型;
|
|
106
|
+
- 远程图片、远程字体、CDN、用户 URL、任意 CSS、任意 JavaScript 或 HTML 注入;
|
|
107
|
+
- TUI 主题重做;`orion-pixel`、`classic`、`high-contrast`、`auto` 保持现状;
|
|
108
|
+
- 改变 Agent、Goal、Session、模型、权限、Context、Tool、终端或 Git 的业务语义;
|
|
109
|
+
- 为视觉效果新增第二套导航、第二套 Composer 或第二套 Work Panel;
|
|
110
|
+
- 像素化正文、代码、Diff、终端字符或 CJK 字形;
|
|
111
|
+
- 复制任何游戏的受保护素材或在产品中使用其名称暗示合作关系;
|
|
112
|
+
- 以 AI 概念图作为自动视觉 diff 的 golden screenshot。
|
|
113
|
+
|
|
114
|
+
## 3. 视觉方向:方块工坊
|
|
115
|
+
|
|
116
|
+
### 3.1 设计原则
|
|
117
|
+
|
|
118
|
+
1. **专业工具优先**:先保证密度、层级和长时间阅读,再加入卡通像素表达;
|
|
119
|
+
2. **硬边而非粗糙**:组件遵循 2px/4px 像素网格,但布局、文字和图表仍使用 CSS 像素精确渲染;
|
|
120
|
+
3. **材质表达语义**:石材用于容器,木材用于结构,纸张用于内容,彩色珐琅用于主要动作;
|
|
121
|
+
4. **状态不靠装饰猜测**:BUILD、ASK、MODEL、CONTEXT、成功、警告和危险保持文字、图标、颜色多重编码;
|
|
122
|
+
5. **层次少而稳定**:每个区域最多三层表面,避免边框套边框和背景纹理压过内容;
|
|
123
|
+
6. **原创而非复刻**:只借鉴方块构造、物品槽和工坊心智模型,不复制具体游戏界面。
|
|
124
|
+
|
|
125
|
+
### 3.2 像素几何
|
|
126
|
+
|
|
127
|
+
- 基础像素单位:`2px`;主要分隔、内阴影和焦点阶梯使用 `2px` 倍数;
|
|
128
|
+
- 面板外框:1px 语义边界 + 2px 内高光/暗边,不使用图片九宫格承载基本布局;
|
|
129
|
+
- 圆角:内容卡 `0–4px`,主要 Composer `4px`,pill 只保留给真正的短状态,不再普遍使用 `999px`;
|
|
130
|
+
- 阴影:使用无模糊或低模糊的阶梯阴影;代码、Diff 和 Terminal 不使用装饰阴影;
|
|
131
|
+
- 图标:功能图标继续使用语义 SVG 和可访问名称;主题可用 `shape-rendering`、方形线帽和第一方 16×16 装饰 sprite 增强像素感;
|
|
132
|
+
- 图片:仅装饰性纹理使用 `image-rendering: pixelated`,文字和 SVG 不使用该属性。
|
|
133
|
+
|
|
134
|
+
### 3.3 核心色板与语义 Token
|
|
135
|
+
|
|
136
|
+
下表是实现起点,不是跳过对比度验证的最终值:
|
|
137
|
+
|
|
138
|
+
| Token | 建议初值 | 用途 |
|
|
139
|
+
| ------------------- | --------- | -------------------------- |
|
|
140
|
+
| `--bg` | `#d7d0c1` | Workbench 外层石材背景 |
|
|
141
|
+
| `--surface` | `#eee8dc` | 左右栏和基础面板 |
|
|
142
|
+
| `--surface-2` | `#e2dacb` | 次级物品槽、未选中区域 |
|
|
143
|
+
| `--surface-3` | `#d3c8b5` | hover、分组和禁用背景 |
|
|
144
|
+
| `--surface-raised` | `#fffaf0` | 对话、Composer、弹层内容 |
|
|
145
|
+
| `--text` | `#24261f` | 主文字 |
|
|
146
|
+
| `--text-2` | `#454a40` | 次要文字 |
|
|
147
|
+
| `--muted` | `#62685c` | 元数据;最终值需通过 4.5:1 |
|
|
148
|
+
| `--border` | `#9a907f` | 普通边界 |
|
|
149
|
+
| `--border-strong` | `#5e584d` | 强边界和焦点外圈 |
|
|
150
|
+
| `--pixel-wood` | `#7b4d2f` | 结构框和 Composer 基座 |
|
|
151
|
+
| `--pixel-wood-dark` | `#44291a` | 木质暗边 |
|
|
152
|
+
| `--accent` | `#315fae` | 主选择、发送、链接 |
|
|
153
|
+
| `--accent-2` | `#08766f` | Context、Runtime、次强调 |
|
|
154
|
+
| `--success` | `#24773a` | 成功、已连接 |
|
|
155
|
+
| `--warning` | `#916014` | 计划、警告 |
|
|
156
|
+
| `--danger` | `#a63245` | 拒绝、错误、破坏性操作 |
|
|
157
|
+
| `--mode-build` | `#315fae` | BUILD 珐琅蓝 |
|
|
158
|
+
| `--mode-ask` | `#70439a` | ASK 紫 |
|
|
159
|
+
| `--model-accent` | `#946d12` | MODEL 金 |
|
|
160
|
+
| `--context-accent` | `#08766f` | CONTEXT 青绿 |
|
|
161
|
+
|
|
162
|
+
上表定义参考图对应的方块工坊日间色板。`data-theme='dark'` 或 system-dark 使用同一几何和材质语义,但将石材、纸张和木框映射为夜间值,例如 `--bg: #15191b`、`--surface: #202629`、`--surface-raised: #292d2a`、`--text: #f2ecdf`、`--border-strong: #a99a82`;最终值同样必须通过 WCAG、Terminal ANSI 和真实截图评审。暗色变体不是第二个主题 ID。
|
|
163
|
+
|
|
164
|
+
Terminal 和代码区域保持独立深色面:
|
|
165
|
+
|
|
166
|
+
```css
|
|
167
|
+
--terminal-background: #171a18;
|
|
168
|
+
--terminal-foreground: #f0eadf;
|
|
169
|
+
--terminal-cursor: #e2b64f;
|
|
170
|
+
--terminal-selection: #355b5a;
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
当前 xterm 只同步上述四项。v0.3.3 还需为 ANSI black/red/green/yellow/blue/magenta/cyan/white 及 bright 变体建立语义 Token,并由 `terminalTheme()` 完整映射;否则命令输出会混用 xterm 默认色,无法证明日/夜方块工坊和经典主题均达到对比度要求。
|
|
174
|
+
|
|
175
|
+
### 3.4 字体与图标
|
|
176
|
+
|
|
177
|
+
- 正文和 CJK:沿用系统 sans 字体栈,不使用像素字体;
|
|
178
|
+
- 代码和终端:沿用 `SFMono-Regular` / Consolas / Liberation Mono / Menlo;
|
|
179
|
+
- 品牌和短标签:v0.3.3 首版使用 system mono、字距和硬边容器表达像素感,不新增远程或未审计字体;
|
|
180
|
+
- 后续若引入自托管字体,必须是可再分发的 WOFF2 子集,并在资产清单记录 license、来源、SHA-256 和 fallback;
|
|
181
|
+
- 不复制游戏物品图标。文件夹、工具、Goal 和 Runtime 装饰图必须由 Orion 原创,并保持现有 `IconName` 的语义映射。
|
|
182
|
+
|
|
183
|
+
### 3.5 组件映射
|
|
184
|
+
|
|
185
|
+
| 当前区域 | 方块工坊表达 | 必须保留的功能边界 |
|
|
186
|
+
| ---------------- | ------------------------------------------------- | ------------------------------------------------------ |
|
|
187
|
+
| 品牌栏 | 蓝色珐琅铭牌 + 原创星形/工具标记 | 产品名、版本和设置入口清晰 |
|
|
188
|
+
| 项目导航 | 工具箱/物品箱目录,项目为大槽、Session 为缩进小槽 | 多项目、搜索、分支、dirty、分页、折叠和 drawer |
|
|
189
|
+
| Conversation | 纸张内容卡放在石材工作台上 | 消息顺序、流式状态、selection、Markdown 和代码可读 |
|
|
190
|
+
| reasoning/tool | 锻造日志和配方记录 | Tool 状态、耗时、字节、分页、错误和详情完全一致 |
|
|
191
|
+
| Goal/Activity | 任务板、进度格和日志槽 | Goal 状态机和 Activity 数据来源不变 |
|
|
192
|
+
| Files/Git/Review | 文件箱、账本和审阅台 | read model、Diff 语义色和安全边界不变 |
|
|
193
|
+
| Terminal | 深色铁砧/熔炉内容面 | xterm、IME、selection、screen reader 和性能不变 |
|
|
194
|
+
| Composer | 连续木质基座 + 纸张输入区 + 彩色控制槽 | 输入、模式、权限、模型、Context、Stop/Steer/Queue 不变 |
|
|
195
|
+
| Dialog/菜单 | 居中工作台卡片和物品槽列表 | modal、focus trap、Escape、恢复焦点和 alert 语义不变 |
|
|
196
|
+
|
|
197
|
+
## 4. 外观契约与默认语义
|
|
198
|
+
|
|
199
|
+
### 4.1 theme/style 双轴合同
|
|
200
|
+
|
|
201
|
+
当前 `appearance.theme` 是明暗模式,不能直接扩成像素皮肤,否则旧版 strict validator 会把新值判为非法。v0.3.3 保留 theme 枚举,并增加一个封闭的内置 style 轴:
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
type WebThemePreferenceV1 = 'system' | 'light' | 'dark';
|
|
205
|
+
type WebUiStylePreferenceV1 = 'classic' | 'orion-blocksmith';
|
|
206
|
+
|
|
207
|
+
interface WebAppearanceConfigV2 {
|
|
208
|
+
theme?: WebThemePreferenceV1;
|
|
209
|
+
style?: WebUiStylePreferenceV1;
|
|
210
|
+
motion?: 'system' | 'reduced';
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
DOM 投影为:
|
|
215
|
+
|
|
216
|
+
```html
|
|
217
|
+
<html data-theme="system" data-ui-style="orion-blocksmith"></html>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
服务端、Web 协议和客户端必须共享两个封闭枚举。任何其他 style 字符串继续 fail closed,不能被解释为文件路径、包名、URL、CSS 或 JavaScript。`classic` 和 `orion-blocksmith` 都是随包编译的核心外观,不具备插件生命周期。
|
|
221
|
+
|
|
222
|
+
### 4.2 默认、明暗模式和继承
|
|
223
|
+
|
|
224
|
+
| 配置状态 | effective style | effective theme |
|
|
225
|
+
| ---------------------------- | ------------------------------------- | ----------------------------------------------- |
|
|
226
|
+
| style/theme 都未设置 | `orion-blocksmith`,source=`internal` | `system`,source=`internal` |
|
|
227
|
+
| style=`orion-blocksmith` | 方块工坊几何与材质 | theme 决定日间/夜间色板 |
|
|
228
|
+
| style=`classic` | 现有经典几何 | theme 保持现有 system/light/dark 语义 |
|
|
229
|
+
| theme=`system` | 当前 style 不变 | 跟随 OS 明暗,切换对应 style 的日/夜 Token |
|
|
230
|
+
| theme=`light` | 当前 style 不变 | 固定明亮色板;参考图定义方块工坊 light 主规格 |
|
|
231
|
+
| theme=`dark` | 当前 style 不变 | 固定夜间色板;仍属于同一方块工坊内置风格 |
|
|
232
|
+
| Settings invalid/unavailable | style/theme 都使用当前 last-good | 无 last-good 时使用 `orion-blocksmith + system` |
|
|
233
|
+
|
|
234
|
+
“重置界面风格”只清除显式 style 并恢复 `orion-blocksmith`;“重置明暗模式”只清除 theme 并恢复 `system`。不得在启动时把内部默认强行写入用户配置,也不得覆盖已有显式 theme。
|
|
235
|
+
|
|
236
|
+
### 4.3 Settings schema 与兼容性
|
|
237
|
+
|
|
238
|
+
- `appearance` 增加 style 后,Settings view 使用下一个 schemaVersion(当前基线预期为 `2`);Phase 0 若 v0.3.2 已占用该版本,则顺延而不是复用;
|
|
239
|
+
- v0.3.3 client 在滚动恢复期可读取旧 schemaVersion 1,把缺失 style 投影为内部默认;v0.3.3 Host 只发新 schema;
|
|
240
|
+
- 仍打开的旧 Web 页面遇到新 schema 时必须停止 mutation,显示“Workbench 已升级,请刷新”,再从同源 Host 加载新 hashed assets;
|
|
241
|
+
- Host/Web client 随同一 npm 包原子发布;旧标签页不得用旧 parser 或旧 nonce 保存新 Settings;
|
|
242
|
+
- global `orion.json` 中新增的 `web.appearance.style` 必须由旧版宽容 loader 保留并忽略;回滚到 v0.3.1/v0.3.2 后应自动使用 classic + 原 theme,而不是让整个配置无效;
|
|
243
|
+
- v0.3.3 strict validator 只接受 `classic|orion-blocksmith`,非法 style 进入现有 invalid/last-good 诊断链;
|
|
244
|
+
- legacy localStorage 迁移继续只迁移 `system/light/dark` theme,不伪造 style;
|
|
245
|
+
- 从旧版本升级且没有 style 的用户会看到新的方块工坊默认;这是明确的 v0.3.3 产品变更,Settings 提供一键切换 `classic`;
|
|
246
|
+
- 实施必须用真实旧版验证 forward-field 保留、rollback、再次升级和旧标签页刷新旅程,不能只依赖静态推断。
|
|
247
|
+
|
|
248
|
+
## 5. CSS、组件与资产架构
|
|
249
|
+
|
|
250
|
+
### 5.1 文件组织
|
|
251
|
+
|
|
252
|
+
避免把主题继续堆进当前单体 `styles.css`:
|
|
253
|
+
|
|
254
|
+
```text
|
|
255
|
+
web/src/
|
|
256
|
+
├─ styles.css # 基础 reset、布局、经典主题和兼容入口
|
|
257
|
+
├─ themes/
|
|
258
|
+
│ ├─ contract.ts # 封闭 theme/style 枚举、标签、color-scheme/meta 色
|
|
259
|
+
│ ├─ orion-blocksmith.tokens.css # 颜色、边界、阴影、像素尺寸、Terminal token
|
|
260
|
+
│ ├─ orion-blocksmith.components.css# 仅主题几何和组件覆盖
|
|
261
|
+
│ └─ orion-blocksmith.assets.css # 本地 sprite/纹理引用;无远程 URL
|
|
262
|
+
└─ assets/themes/orion-blocksmith/
|
|
263
|
+
├─ sprites.webp # 可选第一方小型 sprite atlas
|
|
264
|
+
└─ assets.json # 名称、用途、尺寸、license、SHA-256
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
如果最终没有必要使用位图,应删除 `assets.css` 和 sprite,优先用 CSS 与现有语义 SVG 完成。`assets.json` 是构建/审计输入,不是运行时插件 manifest。
|
|
268
|
+
|
|
269
|
+
### 5.2 层级约束
|
|
270
|
+
|
|
271
|
+
1. 基础布局和组件行为继续由核心 CSS/React 拥有;
|
|
272
|
+
2. `orion-blocksmith.tokens.css` 只定义语义 Token;
|
|
273
|
+
3. `orion-blocksmith.components.css` 只在 `:root[data-ui-style='orion-blocksmith']` 下覆盖几何和材质,并用 `data-theme`/媒体查询选择日间或夜间 Token;
|
|
274
|
+
4. 不使用 `!important` 作为常规覆盖策略;forced-colors 和 reduced-motion 的必要规则除外并需注释;
|
|
275
|
+
5. 不复制一整套 React 组件,不用主题条件分支复制业务 JSX;
|
|
276
|
+
6. 若某个视觉形态无法通过 Token/CSS 实现,只增加通用、语义化核心 primitive,例如 `pixel-frame`、`action-slot`,不得创建 `MinecraftButton` 等产品外名称;
|
|
277
|
+
7. style/theme 切换只影响 presentation,不触发数据获取、Runtime mutation、Context revision、Session 草稿或布局偏好变化。
|
|
278
|
+
|
|
279
|
+
### 5.3 资产管线
|
|
280
|
+
|
|
281
|
+
- 所有主题素材必须位于 `web/src/assets/themes/orion-blocksmith/` 并由 Vite 生成内容哈希文件;
|
|
282
|
+
- 禁止 data URL 承载大型素材;小于 1 KiB 的纯装饰图是否内联由 Vite 决定;
|
|
283
|
+
- CSP 继续保持 `img-src 'self' data:`、`font-src 'self'`、`script-src 'self'`,不得增加网络域名或 `unsafe-inline` script;
|
|
284
|
+
- 位图使用整数倍缩放,避免浏览器模糊插值;
|
|
285
|
+
- 素材必须有源文件、导出尺寸、用途、版权/许可和 SHA-256;
|
|
286
|
+
- exact tarball 测试必须证明 `dist/web-client/assets/` 中包含全部被 CSS 引用的文件,且没有绝对本地路径;
|
|
287
|
+
- installed-package probe 必须 digest 整个 `dist/web-client`,解析并请求 HTML/CSS 引用的 JS、CSS、图片和字体,验证 MIME、CSP、缓存头和 404;不能只校验 `index.html`;
|
|
288
|
+
- 构建失败、文件缺失或 CSS URL 失效必须是 NO_GO,不能依赖开发目录兜底。
|
|
289
|
+
|
|
290
|
+
### 5.4 启动与切换
|
|
291
|
+
|
|
292
|
+
- `App` 从 Settings ready/last-good 同时读取 effective theme/style,并在同一 commit 更新 `data-theme` 与 `data-ui-style`;
|
|
293
|
+
- 根节点的 `color-scheme` 由 theme 决定:light 固定亮、dark 固定暗、system 跟随 OS;方块工坊为同一 style 提供日间和夜间 Token;
|
|
294
|
+
- `<meta name="theme-color">` 由 theme/style 组合及 system 媒体查询同步,使浏览器窗口装饰与主题头部颜色一致;
|
|
295
|
+
- `TerminalPanel` 保持读取 CSS 自定义属性,MutationObserver 同时监听 `data-theme` 和 `data-ui-style`,外观切换后更新现有 xterm,不销毁 PTY;
|
|
296
|
+
- 默认 HTML/CSS 使用 `data-ui-style="orion-blocksmith" data-theme="system"` 的安全首帧基色,Settings ready 后原子覆盖;不得新增 localStorage 外观副本;
|
|
297
|
+
- style/theme 切换时禁用非必要过渡,避免整屏颜色动画和 motion sickness;
|
|
298
|
+
- 切换过程中焦点、selection、scroll、Terminal buffer、Composer 草稿和打开的 dialog 保持不变。
|
|
299
|
+
|
|
300
|
+
## 6. 设置界面与交互
|
|
301
|
+
|
|
302
|
+
### 6.1 Settings 外观项
|
|
303
|
+
|
|
304
|
+
设置页把外观拆成两个原生 `<select>`,避免 style 和明暗模式串线:
|
|
305
|
+
|
|
306
|
+
**界面风格**
|
|
307
|
+
|
|
308
|
+
- `方块工坊(内置,默认)` → `orion-blocksmith`;
|
|
309
|
+
- `经典工作台(内置)` → `classic`。
|
|
310
|
+
|
|
311
|
+
**明暗模式**
|
|
312
|
+
|
|
313
|
+
- `跟随系统` → `system`;
|
|
314
|
+
- `深色` → `dark`;
|
|
315
|
+
- `浅色` → `light`。
|
|
316
|
+
|
|
317
|
+
旁边显示一个纯 CSS 色板预览和“均为内置外观,不支持安装/卸载”的说明;预览不得改变当前 style/theme,只有原子保存成功后才切换 effective appearance。保存按钮可以一次提交两个 dirty key,任何一步失败都不得产生半提交外观。
|
|
318
|
+
|
|
319
|
+
### 6.2 保存语义
|
|
320
|
+
|
|
321
|
+
- 沿用现有 draft、dirty key、expected revision、原子 CAS 和 last-good;
|
|
322
|
+
- theme/style 都是 `applies: live`,不需要 Runtime idle,也不触发模型/权限 prepare/commit;
|
|
323
|
+
- 保存失败时页面保持 last-good appearance,draft 保留用户选择并提供重试;
|
|
324
|
+
- revision conflict 按现有 Settings rebase/refresh 处理,不允许浏览器直接覆盖外部修改;
|
|
325
|
+
- read-only/invalid/unavailable 状态下禁用保存,仍可用 last-good 渲染;
|
|
326
|
+
- 多窗口通过现有 invalidation/SSE 投影到同一 effective appearance,不增加 BroadcastChannel 或第二套同步协议。
|
|
327
|
+
|
|
328
|
+
## 7. 组件实施范围
|
|
329
|
+
|
|
330
|
+
### 7.1 Workbench Shell 和导航
|
|
331
|
+
|
|
332
|
+
- 为工作台背景、三栏边界、header、brand row、project/session slot、active row、Runtime footer 和 resize handle 增加方块工坊 Token;
|
|
333
|
+
- 保留当前列宽、min-width、折叠态、drawer 和 pointer resize 计算,不让装饰边框改变布局尺寸;
|
|
334
|
+
- active Session 使用左侧蓝色/绿色双编码和清晰文字,不能只靠纹理或阴影;
|
|
335
|
+
- 纹理只出现在空白边缘,不得位于项目名、路径、branch、dirty 状态或搜索输入后方。
|
|
336
|
+
|
|
337
|
+
### 7.2 Conversation、Markdown 和 Tool
|
|
338
|
+
|
|
339
|
+
- 对话卡使用纸张/石板层级;用户、Orion、reasoning、Tool、approval 和 error 各自保持现有语义;
|
|
340
|
+
- Markdown 标题、列表、表格、引用、链接、inline code 和 code block 必须逐项验证;
|
|
341
|
+
- code、Diff 和大输出使用稳定深色内容面,避免浅色纸张造成语法色和红绿状态失真;
|
|
342
|
+
- streaming、pending、completed、denied、failed、truncated、load more 状态不得因装饰隐藏;
|
|
343
|
+
- 大输出 128 KiB 以上的分页、滚动和复制性能不因纹理或多层阴影回退。
|
|
344
|
+
|
|
345
|
+
### 7.3 Composer 和瞬态卡片
|
|
346
|
+
|
|
347
|
+
- Composer 是连续容器,木质外框、纸张输入区和底部控制槽属于同一组件;
|
|
348
|
+
- BUILD、ASK/permission、MODEL、CONTEXT 和 send 使用独立语义色,同时保留文字和图标;
|
|
349
|
+
- Stop、Steer、Queue、approval、Plan review、Context tray 和错误提示覆盖完整状态;
|
|
350
|
+
- textarea resize、IME、Shift+Enter、slash command、draft 恢复和 focus ring 行为不变;
|
|
351
|
+
- 低宽度下控制行按既有响应式规则收敛,不通过缩小到不可读字号维持一行。
|
|
352
|
+
|
|
353
|
+
### 7.4 Work Panel、Terminal 和 Dialog
|
|
354
|
+
|
|
355
|
+
- Agent、Review、Terminal、Files、Git 的一级入口保持相同顺序、role、快捷行为和 state;
|
|
356
|
+
- 终端使用主题专用 CSS Token,但保持等宽字体、字重、selection、cursor、screen reader mode 和 paste confirmation;
|
|
357
|
+
- Diff added/removed、Git dirty/conflict 和安全警告使用固定语义 Token,不由木/石材质替代;
|
|
358
|
+
- Dialog、menu、tooltip、select、alertdialog、scrim 和空态全部覆盖主题;
|
|
359
|
+
- 所有 modal 继续支持 focus trap、Escape、scrim close、关闭按钮和触发器焦点恢复。
|
|
360
|
+
|
|
361
|
+
## 8. 响应式、无障碍与动效
|
|
362
|
+
|
|
363
|
+
### 8.1 响应式
|
|
364
|
+
|
|
365
|
+
复用当前 `1180px`、`760px`、`480px` 断点及 v0.3.2 最终落地断点,不为主题新增独立布局系统:
|
|
366
|
+
|
|
367
|
+
| 宽度 | 验收重点 |
|
|
368
|
+
| ------------- | ------------------------------------------------- |
|
|
369
|
+
| `>= 1440px` | 三栏完整、装饰不产生第四栏或额外占位 |
|
|
370
|
+
| `1180–1439px` | Work Panel 收敛/rail 与 Composer 宽度正确 |
|
|
371
|
+
| `761–1179px` | drawer/rail 行为和 tab 可达性保持 |
|
|
372
|
+
| `390–760px` | 左右 drawer 互斥,Composer 和发送按钮不被边框挤压 |
|
|
373
|
+
| `320–389px` | 设置 select、审批动作和主要导航无水平滚动 |
|
|
374
|
+
|
|
375
|
+
所有像素边框使用 `box-sizing: border-box`;装饰伪元素不得参与 Grid/Flex 尺寸求解,也不得捕获 pointer events。
|
|
376
|
+
|
|
377
|
+
### 8.2 无障碍
|
|
378
|
+
|
|
379
|
+
- HTML role、heading、label、aria-current、aria-selected、aria-live 和 dialog 语义不因主题改变;
|
|
380
|
+
- 主题选择器明确朗读“方块工坊,内置,默认”,不出现安装或市场暗示;
|
|
381
|
+
- `:focus-visible` 使用至少 2px 高对比焦点环并与像素边框分离;
|
|
382
|
+
- active、success、warning、danger 使用文字/图标/形状辅助颜色;
|
|
383
|
+
- forced-colors 下移除背景纹理与 box-shadow,使用系统颜色和可见边框;
|
|
384
|
+
- 200% 缩放、键盘、VoiceOver/NVDA 基础旅程和 CJK 输入必须验证;
|
|
385
|
+
- 装饰 sprite 使用 `aria-hidden`,不占据可访问名称。
|
|
386
|
+
|
|
387
|
+
### 8.3 动效
|
|
388
|
+
|
|
389
|
+
- 允许:单次 120–180ms 的按钮按压、进度格更新和 drawer 过渡;
|
|
390
|
+
- 禁止:循环火焰、闪烁矿物、持续漂浮粒子、视差背景和整屏材质移动;
|
|
391
|
+
- reduced motion 下所有装饰过渡归零,保留必要的状态变化;
|
|
392
|
+
- 运行中状态不能只通过动画表达,必须有文本和静态图标。
|
|
393
|
+
|
|
394
|
+
## 9. 安全、隐私与性能
|
|
395
|
+
|
|
396
|
+
### 9.1 安全与隐私
|
|
397
|
+
|
|
398
|
+
- 主题不读取 workspace 文件、Session 内容、凭证、环境变量或用户路径;
|
|
399
|
+
- 主题素材不包含真实项目名、用户名、绝对路径、token 或生产截图数据;
|
|
400
|
+
- 不增加网络请求、analytics、动态 import URL、CSS `@import`、iframe 或 worker;
|
|
401
|
+
- 不放宽现有 loopback Host、Origin、nonce、CSP、CORP、COOP 和 Permissions Policy;
|
|
402
|
+
- screenshot evidence 继续脱敏并通过受控 basename、regular-file、PNG bounds 和 digest 绑定检查;
|
|
403
|
+
- 主题设置 mutation 继续使用 exact Origin、nonce、JSON、revision 和 secret-free projection。
|
|
404
|
+
|
|
405
|
+
### 9.2 性能预算
|
|
406
|
+
|
|
407
|
+
- 新增首屏 CSS gzip 目标不超过 24 KiB;
|
|
408
|
+
- 新增图片/字体压缩总量目标不超过 160 KiB;首版不新增字体;
|
|
409
|
+
- 单个组件最多两层装饰伪元素,滚动列表项不得逐项创建大纹理或滤镜;
|
|
410
|
+
- 禁止在 transcript、Session 列表、文件树和大输出每个 row 上使用 blur、filter 或大面积 box-shadow;
|
|
411
|
+
- 主题切换不得重建 transcript、Terminal、文件树或 Git Diff;
|
|
412
|
+
- 1440×960、DPR 2 的持续滚动和 resize 目标保持 55–60fps,不出现长于 50ms 的主题相关 long task;
|
|
413
|
+
- `content-visibility`、虚拟化和分页行为保持现有实现,不为视觉效果关闭。
|
|
414
|
+
|
|
415
|
+
## 10. 代码与文档变更矩阵
|
|
416
|
+
|
|
417
|
+
| 区域 | 预计文件 | 变更 |
|
|
418
|
+
| ---------------- | ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
|
|
419
|
+
| 配置 schema | `src/services/global-config.ts` | 新增封闭 style 字段/枚举、strict validator、forward-field 兼容 |
|
|
420
|
+
| 持久化 | `src/services/settings-document-repository.ts` | 接受 `appearance.style` 并与 theme 原子批量写入 |
|
|
421
|
+
| Settings view | `src/services/settings-coordinator.ts` | style 新默认、effective/inherited value、schema 升级 |
|
|
422
|
+
| Web wire | `src/web/protocol.ts` | 新增 `WebUiStylePreferenceV1`、operation 和 parser |
|
|
423
|
+
| API 文档 | `docs/architecture/v0.3.3-web-api.yaml` | 同步 style 字段/枚举和 Settings schema;从实际 v0.3.2 API 基线增量修改 |
|
|
424
|
+
| Client contract | `web/src/settings/types.ts`、`contract.ts` | 解析新 schema/style,并兼容旧 schema 缺失 style |
|
|
425
|
+
| Legacy migration | `web/src/settings/legacy-appearance.ts` | 保留旧三值迁移并增加回归测试 |
|
|
426
|
+
| Settings UI | `web/src/components/SettingsDialog.tsx` | 内置主题选项、标签、预览和边界说明 |
|
|
427
|
+
| 应用入口 | `web/src/App.tsx`、`web/index.html` | `data-theme`、`data-ui-style`、color-scheme、meta theme-color |
|
|
428
|
+
| Theme CSS | `web/src/themes/*.css`、`web/src/styles.css` | Token、组件覆盖、forced-colors、reduced-motion |
|
|
429
|
+
| Theme assets | `web/src/assets/themes/orion-blocksmith/` | 可选第一方 sprite 与资产清单 |
|
|
430
|
+
| Terminal | `web/src/components/terminal/TerminalPanel.tsx` | 验证/补齐实时色板同步,不重建 PTY |
|
|
431
|
+
| Unit tests | `tests/settings-*.test.ts`、`tests/web-*.test.ts` | 枚举、默认、CAS、解析、旧值和回滚 |
|
|
432
|
+
| Browser tests | `tests/e2e/web-settings-integration.spec.ts`、新增 `web-v033-theme.spec.ts` | 真实主题旅程和截图证据 |
|
|
433
|
+
| Gallery | `scripts/e2e/capture-web-state-gallery.ts` | 增加方块工坊代表状态,不覆盖历史 v0.3.0 图集 |
|
|
434
|
+
| Release | `package.json`、`CHANGELOG.md`、迁移/测试报告、`scripts/release/release-check.js`、`runtime-matrix.ts` | 版本、打包清单、全 Web asset probe、迁移和 exact-tarball receipt |
|
|
435
|
+
|
|
436
|
+
## 11. 实施阶段
|
|
437
|
+
|
|
438
|
+
### Phase 0:基线冻结与原创视觉规格
|
|
439
|
+
|
|
440
|
+
- 重审 v0.3.2 最终组件、Settings、API、tests 和发布脚本;
|
|
441
|
+
- 把参考图拆成 Token、组件和素材清单,不把图本身当作 CSS 背景;
|
|
442
|
+
- 形成桌面、窄屏、Terminal、Diff、Dialog 和 forced-colors 的静态规格;
|
|
443
|
+
- 完成原创/许可审查并确定资产预算;
|
|
444
|
+
- 先编写失败测试:style 新字段/枚举、双轴默认值、strict rejection、旧版 forward-field、Terminal sync 和真实浏览器外观旅程。
|
|
445
|
+
|
|
446
|
+
退出条件:主题契约、默认语义、原创边界、资产预算和至少 12 个 WEB33 场景经评审。
|
|
447
|
+
|
|
448
|
+
### Phase 1:设置与协议纵向切片
|
|
449
|
+
|
|
450
|
+
- 在 config/repository/coordinator/protocol/client contract 新增封闭 `appearance.style`;theme 三值保持不变;
|
|
451
|
+
- 把 style internal default 设为 `orion-blocksmith`,theme internal default 继续为 `system`;
|
|
452
|
+
- 升级 Settings view schema,并实现新 client 读取旧 schema、旧标签页识别升级并刷新;
|
|
453
|
+
- 更新两个 Settings select、draft、原子 batch save、独立 reset、conflict、read-only 和 last-good;
|
|
454
|
+
- 补旧配置、旧版本 forward-field、rollback/re-upgrade 和非法 style 验证;
|
|
455
|
+
- 同步 v0.3.3 Web API style 字段与 Settings schema。
|
|
456
|
+
|
|
457
|
+
退出条件:不写任何自定义 CSS 也能通过 API 独立或批量选择、保存、刷新、重启和重置 style/theme;未知 style fail closed,旧版本回滚不损坏配置。
|
|
458
|
+
|
|
459
|
+
### Phase 2:Token、主题入口与 Terminal
|
|
460
|
+
|
|
461
|
+
- 建立主题 CSS 模块和 token contract;
|
|
462
|
+
- 应用根 `data-theme` + `data-ui-style`、color-scheme 和 theme-color;
|
|
463
|
+
- 定义代码、Diff 和 Terminal 的独立深色语义面;
|
|
464
|
+
- 验证打开的 xterm 在主题切换后只换色、不销毁、不丢 buffer/focus;
|
|
465
|
+
- 建立 forced-colors 和 reduced-motion 基线。
|
|
466
|
+
|
|
467
|
+
退出条件:空工作台、基础会话、Settings 和 Terminal 的主题切换无功能回归、CSP 违规或丢帧长任务。
|
|
468
|
+
|
|
469
|
+
### Phase 3:核心 Workbench 组件
|
|
470
|
+
|
|
471
|
+
- 依次完成 Shell/导航、Conversation/Markdown、Tool/approval、Composer、Work Panel、Dialog/menu;
|
|
472
|
+
- 每完成一组立即跑对应 keyboard、axe、responsive 和 screenshot journey;
|
|
473
|
+
- 不通过复制 JSX 实现主题,不修改业务 state machine;
|
|
474
|
+
- 组件装饰不得改变现有 layout solver、分页和虚拟化。
|
|
475
|
+
|
|
476
|
+
退出条件:代表性工作态全部覆盖,没有未主题化的弹层、菜单、hover、focus、disabled、pending 或 error 状态。
|
|
477
|
+
|
|
478
|
+
### Phase 4:资产、性能和极端状态
|
|
479
|
+
|
|
480
|
+
- 仅在 CSS/语义 SVG 不足时加入第一方 sprite;
|
|
481
|
+
- 对 50 Session、长项目名、128 KiB Tool 输出、长 Diff、多个终端和高频流式消息做压力验证;
|
|
482
|
+
- 检查 320px、200% zoom、DPR 1/2、CJK、forced-colors 和 reduced-motion;
|
|
483
|
+
- 记录 CSS、图片、tarball、FCP、主题切换和滚动性能。
|
|
484
|
+
|
|
485
|
+
退出条件:性能/资产预算通过,所有极端状态可读且无水平溢出。
|
|
486
|
+
|
|
487
|
+
### Phase 5:exact-tarball 浏览器证据与发布
|
|
488
|
+
|
|
489
|
+
- 从 source-clean commit 生成一次 npm tarball,后续 Node/浏览器矩阵使用同一 SHA/integrity;
|
|
490
|
+
- clean prefix 安装 exact tarball,用真实 Google Chrome 运行 WEB33 场景;
|
|
491
|
+
- 生成截图、manifest、Chrome identity、runner identity、tarball identity 和 digest-bound receipt;
|
|
492
|
+
- 更新 migration、CHANGELOG、package files 和测试报告;
|
|
493
|
+
- 分离本地测试、PR/CI、npm publish 和生产验证,不用其中一项替代另一项。
|
|
494
|
+
|
|
495
|
+
退出条件:全部门禁 GO,且 release receipt 绑定 source SHA、tarball SHA、安装位置、浏览器和截图证据。
|
|
496
|
+
|
|
497
|
+
## 12. 测试策略
|
|
498
|
+
|
|
499
|
+
### 12.1 单元与合同测试
|
|
500
|
+
|
|
501
|
+
至少新增/更新:
|
|
502
|
+
|
|
503
|
+
- `tests/global-config.test.ts`:旧版/新版对未知 forward field、合法/非法 style 和 tolerant/strict 路径行为明确;
|
|
504
|
+
- `tests/settings-document-repository.test.ts`:style set/unset、theme+style 原子 batch、unknown reject、CAS、external edit、rollback;
|
|
505
|
+
- `tests/settings-coordinator.test.ts`:未设置 style 默认 `orion-blocksmith`、theme 仍默认 `system`,source/scope/applies 正确;
|
|
506
|
+
- `tests/web-protocol.test.ts`:新 Settings schema/style operation,拒绝路径/URL/CSS/包名和额外字段;
|
|
507
|
+
- `tests/web-settings-draft.test.ts`:旧 schema hydrate、双轴 dirty、batch save、独立 reset、conflict、last-good;
|
|
508
|
+
- `tests/web-server.test.ts`:主题 mutation 仍需要 Origin、nonce 和 JSON;
|
|
509
|
+
- Terminal contract test:CSS token 切换更新 xterm 色板,不创建第二个 Terminal/PTY;
|
|
510
|
+
- asset manifest test:文件存在、大小受限、SHA 匹配、路径在 Web root 内且无远程 URL;
|
|
511
|
+
- package test:exact tarball 包含所有 CSS/图片/API/迁移文档。
|
|
512
|
+
|
|
513
|
+
### 12.2 真实浏览器场景
|
|
514
|
+
|
|
515
|
+
| ID | 场景 | 关键断言 |
|
|
516
|
+
| ----------- | ---------------------------------- | ------------------------------------------------------------ |
|
|
517
|
+
| WEB33-P0-01 | 无显式设置首次启动 | style=`orion-blocksmith`、theme=`system`,页面和 meta 色正确 |
|
|
518
|
+
| WEB33-P0-02 | classic+dark 切到 blocksmith+light | 原子保存、无刷新、focus/scroll/draft 保留、一个 frame 内生效 |
|
|
519
|
+
| WEB33-P0-03 | 保存并刷新/Host 重启 | style/theme 持久,nonce 轮换后仍恢复,不重建 Session |
|
|
520
|
+
| WEB33-P0-04 | 分别重置 style/theme | 清除对应显式值并恢复各自默认,另一个轴不变化 |
|
|
521
|
+
| WEB33-P0-05 | 多窗口和外部配置变更 | clean draft 自动同步;dirty draft 保留/rebase |
|
|
522
|
+
| WEB33-P0-06 | invalid/read-only/unavailable | last-good 渲染,保存禁用,诊断可读 |
|
|
523
|
+
| WEB33-P0-07 | Tool/approval/Plan/Goal 状态矩阵 | 所有状态语义、按钮和分页可用 |
|
|
524
|
+
| WEB33-P0-08 | Terminal 已连接时切换 | buffer、selection、focus、IME、PTY ID 不变 |
|
|
525
|
+
| WEB33-P0-09 | Files/Git/Review/大输出 | Diff、长行、128 KiB 分页和语义色可读 |
|
|
526
|
+
| WEB33-P0-10 | 320/390/760/1180/1440/1920 | 无页面水平滚动、drawer/rail/Composer 正确 |
|
|
527
|
+
| WEB33-P0-11 | keyboard/axe/zoom/forced colors | blocking=0,focus 可见,200% 完成核心旅程 |
|
|
528
|
+
| WEB33-P0-12 | CSP/资产/隐私 | 无网络主题请求、无 CSP violation、截图和资产无秘密 |
|
|
529
|
+
| WEB33-P1-13 | system/light/dark × 两种 style | 三个 theme 值保持原语义,classic/blocksmith 日夜 Token 正确 |
|
|
530
|
+
| WEB33-P1-14 | reduced motion | 无循环装饰,状态反馈仍可理解 |
|
|
531
|
+
| WEB33-P1-15 | 性能压力 | resize/scroll 55–60fps,主题相关 long task=0 |
|
|
532
|
+
|
|
533
|
+
### 12.3 截图证据
|
|
534
|
+
|
|
535
|
+
截图至少覆盖:
|
|
536
|
+
|
|
537
|
+
1. 桌面三栏完整工作态;
|
|
538
|
+
2. 左导航折叠/展开和右 Work Panel;
|
|
539
|
+
3. Tool 大输出、approval、Plan review、Goal progress;
|
|
540
|
+
4. Files、Git Diff、Review 和 Terminal;
|
|
541
|
+
5. Settings 主题选择与保存后状态;
|
|
542
|
+
6. 390px drawer、320px Composer、200% zoom;
|
|
543
|
+
7. forced-colors 的结构证据;
|
|
544
|
+
8. 经典 light/dark 回归。
|
|
545
|
+
|
|
546
|
+
参考概念图不作为 golden。实现稳定后由产品评审选定真实浏览器截图作为 v0.3.3 baseline;截图必须禁用非必要动画、固定数据 fixture、记录 viewport/DPR/Chrome,并与 manifest digest 绑定。
|
|
547
|
+
|
|
548
|
+
## 13. 验收标准
|
|
549
|
+
|
|
550
|
+
### AC-01 内置主题边界
|
|
551
|
+
|
|
552
|
+
Given v0.3.3 Web Workbench,When 检查配置、构建产物和网络,Then theme 仍是封闭的 system/light/dark,style 只有 classic/orion-blocksmith 与本地素材;不存在 plugin SDK、marketplace、安装/卸载、目录扫描、远程主题或可执行主题代码。
|
|
553
|
+
|
|
554
|
+
### AC-02 默认与兼容
|
|
555
|
+
|
|
556
|
+
Given 没有显式 Web style/theme,When 首次打开或重置 Settings,Then effective appearance 为 `orion-blocksmith + system`;Given 已显式设置 system/light/dark,When 升级,Then theme 原值继续控制新 style 的明暗;选择 classic 可恢复旧几何。
|
|
557
|
+
|
|
558
|
+
### AC-03 实时切换
|
|
559
|
+
|
|
560
|
+
Given 活动 Session、已输入草稿和已连接 Terminal,When 原子保存 style/theme,Then 页面无刷新切换,草稿、焦点、scroll、Terminal buffer、PTY、Context 和 Session 均不改变。
|
|
561
|
+
|
|
562
|
+
### AC-04 视觉一致性
|
|
563
|
+
|
|
564
|
+
Given 任一主要 Workbench 状态,When 使用方块工坊主题,Then Shell、导航、Conversation、Tool、Composer、Work Panel、Terminal、Dialog 和菜单使用同一 Token/几何系统,没有经典圆润 SaaS 样式残留或边框套娃过载。
|
|
565
|
+
|
|
566
|
+
### AC-05 可读性与无障碍
|
|
567
|
+
|
|
568
|
+
Given 键盘、200% zoom、forced-colors 或 reduced-motion,When 完成项目切换、发送、审批、查看 Diff 和打开设置,Then 旅程可完成、focus 可见、语义完整、axe blocking violations=0,颜色/纹理不是唯一状态信号。
|
|
569
|
+
|
|
570
|
+
### AC-06 响应式
|
|
571
|
+
|
|
572
|
+
Given 320–1920 CSS px,When 导航和 Work Panel 在 dock/rail/drawer 间切换,Then 像素边框不改变列宽求解,不遮挡 Composer,不产生页面级横向滚动,触发器焦点可恢复。
|
|
573
|
+
|
|
574
|
+
### AC-07 Terminal 与工程内容
|
|
575
|
+
|
|
576
|
+
Given 终端、代码、Diff 和 128 KiB Tool 输出,When 主题切换并持续滚动,Then 内容保持等宽、selection/cursor 正确、红绿状态清晰、分页与复制可用,且不重建 PTY。
|
|
577
|
+
|
|
578
|
+
### AC-08 安全与发布
|
|
579
|
+
|
|
580
|
+
Given source-clean exact tarball,When clean install 并运行真实 Chrome 门禁,Then CSP 不放宽、资产只来自 self、包内文件完整、截图/manifest/receipt digest 绑定,所有 release gate 为 GO。
|
|
581
|
+
|
|
582
|
+
## 14. 风险与缓解
|
|
583
|
+
|
|
584
|
+
| 风险 | 影响 | 缓解 |
|
|
585
|
+
| -------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
586
|
+
| 视觉过度游戏化 | 长时间工作疲劳、专业感下降 | 正文/代码保持现代排版,材质只在结构区,三层表面上限 |
|
|
587
|
+
| 只换 Token 达不到参考效果 | 主题显得浅层、组件不统一 | 增加通用核心 pixel primitives,但不复制业务组件 |
|
|
588
|
+
| CSS override 膨胀 | 维护困难、经典主题回归 | 拆 tokens/components/assets,限制 selector scope 和 `!important` |
|
|
589
|
+
| 新默认惊扰旧用户 | 升级后几何变为像素风 | 保留原 theme 明暗值、迁移文档、设置一键把 style 切为 classic |
|
|
590
|
+
| 旧版本看到新 style 字段 | 回滚时字段丢失或 Settings invalid | style 独立于 theme;验证旧版宽容 loader 保留/忽略 forward field,并测试 rollback/re-upgrade |
|
|
591
|
+
| 纹理影响可读性 | 文本和 Diff 对比不足 | 内容面保持纯色,对比度/forced-colors 门禁 |
|
|
592
|
+
| 位图模糊或放大 | 高 DPR/zoom 失真 | 整数缩放、`image-rendering: pixelated` 仅用于 sprite,多 DPR 验证 |
|
|
593
|
+
| 装饰降低滚动性能 | transcript/文件树掉帧 | 禁止 row filter/blur/大阴影,资产和 long-task 预算 |
|
|
594
|
+
| 图标来源不清 | 版权和品牌风险 | Orion 原创资产清单、license、SHA,不使用游戏名称和素材 |
|
|
595
|
+
| 外观切换重建 Terminal | buffer/focus 丢失、ANSI 色失真 | Observer 同时监听 theme/style,只更新完整 `terminal.options.theme` 与 ANSI 16 色 |
|
|
596
|
+
| 静态首帧与显式 appearance 不一致 | 启动闪色 | 首帧使用 blocksmith+system 安全色,Settings ready 后原子覆盖两属性并记录性能 |
|
|
597
|
+
| v0.3.2 基线漂移 | 计划路径/组件失效 | Phase 0 强制 re-audit/rebase,不把旧计划当作已实现事实 |
|
|
598
|
+
|
|
599
|
+
## 15. 发布门禁
|
|
600
|
+
|
|
601
|
+
### 15.1 本地门禁
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
npm run lint
|
|
605
|
+
npm run build
|
|
606
|
+
npm test -- --runInBand
|
|
607
|
+
npm run test:web-browser
|
|
608
|
+
npm run test:web-e2e:critical
|
|
609
|
+
npm run release:check -- --skip-tests
|
|
610
|
+
git diff --check
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
还必须运行 v0.3.3 新增的主题单元测试、完整 Web E2E primary/matrix、axe、截图 gallery、资产 manifest 和性能检查。命令应以实施后 `package.json` 的真实脚本为准,不得只复制本文命令声称通过。
|
|
614
|
+
|
|
615
|
+
### 15.2 Release 门禁
|
|
616
|
+
|
|
617
|
+
- Node 22.12、受支持的 Node 24 和 Node 26 使用同一个 exact tarball;
|
|
618
|
+
- tarball SHA-256、npm integrity、source SHA、runner、Chrome、安装位置和 screenshot manifest 一致;
|
|
619
|
+
- clean install 后 `dist/web-client` 自包含,没有开发目录和绝对路径依赖;
|
|
620
|
+
- installed-package matrix digest 整个 `dist/web-client` 并成功请求 HTML 引用的全部 hashed asset,MIME/CSP/缓存头正确;
|
|
621
|
+
- package file list 包含 v0.3.3 API、migration、计划和测试报告;
|
|
622
|
+
- npm publish、Git tag、GitHub PR/CI 和生产验证分别记录,不互相替代。
|
|
623
|
+
|
|
624
|
+
## 16. Definition of Done
|
|
625
|
+
|
|
626
|
+
- [ ] 已在真实 v0.3.3 基线上复核 v0.3.2 依赖和用户脏改动;
|
|
627
|
+
- [ ] theme 仍是 system/light/dark;style 只有 classic/orion-blocksmith,不接受任意 ID/路径/URL/CSS/JS;
|
|
628
|
+
- [ ] 未显式配置时默认 `orion-blocksmith + system`,显式 system/light/dark 升级不变;
|
|
629
|
+
- [ ] 新 Settings schema、旧 schema 读取、旧标签页刷新和旧版本 forward-field 回滚通过;
|
|
630
|
+
- [ ] Settings CAS、revision、last-good、conflict、read-only 和外部同步全通过;
|
|
631
|
+
- [ ] Shell、导航、Conversation、Tool、Composer、Work Panel、Terminal 和 Dialog 完整主题化;
|
|
632
|
+
- [ ] 所有素材为 Orion 原创、本地打包、有清单/许可/SHA,资产预算通过;
|
|
633
|
+
- [ ] 代码、Diff、Terminal、CJK、长文本和大输出可读、可选择、可复制;
|
|
634
|
+
- [ ] 320–1920px、200% zoom、DPR 1/2、键盘、forced-colors 和 reduced-motion 通过;
|
|
635
|
+
- [ ] axe、console、page error、HTTP 5xx、CSP、secret 和 long-task 门禁通过;
|
|
636
|
+
- [ ] system/light/dark、TUI、Runtime、Session、Goal、Tool 和权限行为无回归;
|
|
637
|
+
- [ ] exact-tarball 真实 Chrome 场景、截图、manifest 和 release receipt 完整;
|
|
638
|
+
- [ ] migration、API、CHANGELOG、测试报告和 package file list 与实现一致;
|
|
639
|
+
- [ ] 没有插件、市场、安装/卸载、远程主题或第三方执行面;
|
|
640
|
+
- [ ] 计划状态在真实实现和全部门禁完成前保持 `Proposed / 待评审`。
|
|
641
|
+
|
|
642
|
+
## 17. 交付顺序建议
|
|
643
|
+
|
|
644
|
+
最小可验收纵向切片是:**新增封闭 style 字段与默认值 → theme/style 原子保存/恢复 → 根 Token → Composer + 一个 Tool 卡 → 已连接 Terminal 实时换色 → 真实 Chrome 截图**。它能最早暴露配置兼容、CSP、Terminal 和像素几何问题。
|
|
645
|
+
|
|
646
|
+
不要先画完整静态皮肤再补 Settings、Terminal 和无障碍;也不要先引入主题包或插件抽象。v0.3.3 的目标是把一套原创、内置、可验证的方块像素主题做成产品默认,而不是提前建设生态系统。
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## 18. 2026-09-01 增补:Workbench 多会话并行、切换性能与 Shell 修复
|
|
651
|
+
|
|
652
|
+
### 18.1 增补的优先级与边界
|
|
653
|
+
|
|
654
|
+
本节是经用户反馈追加的 v0.3.3 **Track B**,与前文“方块工坊”主题 **Track A** 共同组成
|
|
655
|
+
v0.3.3。若本节与前文“只做内置主题”“不改变 Session 业务语义”的表述冲突,以本节为准;前文关于
|
|
656
|
+
内置主题、原创资产、无插件市场、CSP 和 exact-tarball 证据的边界继续有效。
|
|
657
|
+
|
|
658
|
+
Track B 必须解决四个已观察到的问题:
|
|
659
|
+
|
|
660
|
+
1. 一个会话运行时无法切换到其他会话,导致浏览器工作台不能并行推进任务;
|
|
661
|
+
2. 空闲状态切换会话仍有明显卡顿;
|
|
662
|
+
3. 右侧 Work Panel 折叠后可能落到主内容下方,破坏整个三栏布局;
|
|
663
|
+
4. Settings 入口重复;只保留左侧项目栏底部的 Settings 按钮,移除中栏和右栏顶部入口。
|
|
664
|
+
|
|
665
|
+
本增补不是“放开一个 disabled 按钮”的 UI 修补。前两项来自当前单活动 Runtime 的所有权模型,必须先
|
|
666
|
+
改变 Runtime ownership、命令路由和客户端投影,再开放交互。Track B 不把主题样式改动混入这些状态机
|
|
667
|
+
提交;涉及 `App.tsx`、`styles.css` 和真实截图时,先合入布局修复,再建立 Track A 的视觉基线。
|
|
668
|
+
|
|
669
|
+
### 18.2 经源码确认的 v0.3.2 基线
|
|
670
|
+
|
|
671
|
+
本节以已发布的 v0.3.2 commit
|
|
672
|
+
`c449d5b60859511182c732fb8249b6f9cfaf8753` 为审计基线,不把当前 `v0.3.1` 工作树或本地未跟踪文件
|
|
673
|
+
误当作已发布实现。
|
|
674
|
+
|
|
675
|
+
| 现象 | v0.3.2 机制证据 | 结论 |
|
|
676
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
|
|
677
|
+
| 运行中不能切换 | `src/web/workbench-controller.ts:107-114` 明确只拥有一组 Runtime/Controller;`:1761-1771` 在 active turn 时以 `runtime_busy` 拒绝 Session transition | 是产品架构约束,不是单个按钮状态错误 |
|
|
678
|
+
| 切换卡顿 | `src/runtime/orion-session-runner.ts:41-45,177-212` 在切换时关闭旧 Runtime,再创建并启动新的唯一 Runtime | warm Session 也支付 close/start、observer 和 adapter 重建成本 |
|
|
679
|
+
| 页面重复恢复 | `web/src/useWorkbench.ts:763-799` 在 Context/Session 切换时暂停 SSE、执行 Host activation,然后重新加载完整 baseline | 切换被错误地等同于 Workbench 全局重启 |
|
|
680
|
+
| 单一前台投影 | `web/src/types.ts` / `reducer.ts` 只有一个 `activeSessionId`、一份 transcript、processing 和 snapshot | 后台 Session 没有可独立更新的浏览器状态槽 |
|
|
681
|
+
| 右栏易错位 | `web/src/styles.css:222-252` 依赖 Grid 自动放置;`:4862-4955` 又在不同断点切换 fixed drawer 和 `display:block`;当前 E2E 未覆盖“展开→折叠→跨断点→恢复”的行列不变量 | 需先保存失败现场的 geometry/computed-style;修复目标是消除自动放置和布局模式竞争 |
|
|
682
|
+
| Settings 重复 | `Conversation.tsx:154-165`、`WorkPanelDock.tsx:234-245` 和 `ProjectNavigator.tsx:512-523` 都提供 Settings 入口 | 保留 ProjectNavigator footer,删除前两处持久入口 |
|
|
683
|
+
|
|
684
|
+
v0.3.2 计划曾明确把“多 Agent Runtime 同时运行”列为非目标,因此现有行为符合旧范围,但不满足
|
|
685
|
+
v0.3.3 的产品目标。旧的 `OrionSessionRunnerV1` 仍可保留为 TUI/CLI 的单活动 Session runner;Web
|
|
686
|
+
不得为了并行而改变 TUI 的输入、恢复或退出语义。
|
|
687
|
+
|
|
688
|
+
### 18.3 问题定义与用户场景
|
|
689
|
+
|
|
690
|
+
#### 核心用户场景
|
|
691
|
+
|
|
692
|
+
1. 用户在 Session A 启动长任务后,立即选择 Session B 查看历史或提交另一任务;A 在后台继续运行;
|
|
693
|
+
2. Session A 等待工具审批时,用户可以处理 Session B,并能从任何会话看到 A 的待审批标记;
|
|
694
|
+
3. 用户在 A、B 之间来回切换时,最近内容应立即出现,不能反复重建 Runtime 或重拉所有目录与历史;
|
|
695
|
+
4. 两个浏览器标签页可各自停留在不同 Session;一个标签页的前台选择不能改变另一个标签页;
|
|
696
|
+
5. 用户折叠右栏后,中栏保持原位置和全高,48px rail 始终位于右侧,不能掉到页面底部;
|
|
697
|
+
6. 用户只在左侧项目栏底部看到一个持久 Settings 按钮;窄屏时先打开左侧 drawer,再从其底部进入。
|
|
698
|
+
|
|
699
|
+
#### 成功指标
|
|
700
|
+
|
|
701
|
+
- 同一 Host 内至少支持 3 个 Session turn 并行执行;第 4 个请求进入可见、可取消的等待队列,而不是
|
|
702
|
+
阻止用户切换或静默丢弃;
|
|
703
|
+
- Session A 运行时切换到 B 的成功率 100%,A 的 provider/tool/approval/turn journal 不被停止、重建或
|
|
704
|
+
归属到 B;
|
|
705
|
+
- warm Session 选择到缓存内容可交互的 p95 不超过 150ms;cold Session 最新 100 条记录可交互的 p95
|
|
706
|
+
不超过 800ms;
|
|
707
|
+
- 一次 Session 选择不得关闭/重连全局 SSE,不得重新请求 Settings、Skills、MCP、Tool catalog 或完整
|
|
708
|
+
workspace list;
|
|
709
|
+
- 10,000 条消息的 Session 切换只读取目标页和 cursor 后增量,不扫描/发送全部历史;
|
|
710
|
+
- 背景 Session 的状态、审批、完成和错误事件丢失数为 0,跨 Session 错投命令/消息/审批/工具结果为 0;
|
|
711
|
+
- 320、390、760、1024、1180、1181、1440、1920px 下,右栏折叠/展开和 drawer 往返均无下沉、重叠、
|
|
712
|
+
页面级横向滚动或焦点丢失;
|
|
713
|
+
- 正常已配置页面中,accessible name 为 `打开设置` 的持久按钮恰好 1 个,位于左侧项目栏 footer。
|
|
714
|
+
|
|
715
|
+
### 18.4 范围锁定
|
|
716
|
+
|
|
717
|
+
#### P0(v0.3.3 必须交付)
|
|
718
|
+
|
|
719
|
+
- Web Session Runtime registry/actor pool;前台 Session 选择与 Runtime 生命周期解耦;
|
|
720
|
+
- 显式 Session/Workspace 命令路由、每 Session 状态投影、审批归属和并发上限;
|
|
721
|
+
- warm/cold Session 快照、增量 cursor、浏览器 per-Session 投影缓存和无 SSE 重连切换;
|
|
722
|
+
- 同一 workspace 的变更型 Tool 共享互斥写入仲裁,避免两个 Session 并行破坏同一工作树;
|
|
723
|
+
- 右栏显式 Grid area、固定 48px rail 和窄屏 overlay drawer;
|
|
724
|
+
- 只保留左下 Settings 按钮;
|
|
725
|
+
- 对应 unit/integration/真实 Chrome/exact-tarball/release receipt 门禁。
|
|
726
|
+
|
|
727
|
+
#### P1(P0 稳定后)
|
|
728
|
+
|
|
729
|
+
- Session 列表显示 `运行中 / 排队 / 等待审批 / 已完成 / 失败` 徽标、运行时长和快速停止动作;
|
|
730
|
+
- 后台完成的非侵入式通知,以及“一键回到发生审批/失败的 Session”;
|
|
731
|
+
- Runtime pool 内存、队列时间和 switch latency 诊断页;
|
|
732
|
+
- 用户可配置并行上限;首版先使用受控默认值和配置文件,不在 Settings 增加新表单。
|
|
733
|
+
|
|
734
|
+
#### 非目标
|
|
735
|
+
|
|
736
|
+
- 多主机、远程集群或浏览器关闭后仍由云端继续运行;
|
|
737
|
+
- 自动创建 Git worktree、自动合并两个 Session 的代码或自动解决冲突;
|
|
738
|
+
- 绕过 provider 的共享限流、ToolGateway、审批、sandbox 或 workspace 写入策略;
|
|
739
|
+
- Host 重启后无损续接正在进行的网络请求、PTY 或工具进程;重启只能从 durable journal 标记并恢复为
|
|
740
|
+
`interrupted`,不得重复副作用;
|
|
741
|
+
- 改变 TUI/CLI 的单活动 Session 交互;
|
|
742
|
+
- 以增加轮询、固定 sleep、全量 transcript preload 或更大的内存缓存掩盖切换延迟。
|
|
743
|
+
|
|
744
|
+
## 19. Track B 目标架构
|
|
745
|
+
|
|
746
|
+
### 19.1 从“唯一活动 Runtime”改为“Workspace Kernel + Session Actor”
|
|
747
|
+
|
|
748
|
+
Web Host 增加 `WebSessionRuntimeRegistryV1`,key 为 `{workspaceId, sessionId}`。每个 Session actor 独立
|
|
749
|
+
拥有:
|
|
750
|
+
|
|
751
|
+
- `OrionRuntimeV1` / Thread owner;
|
|
752
|
+
- `AgentRuntimeController`、turn/queue/Goal/Plan 状态;
|
|
753
|
+
- pending approval、interrupt signal、Session model/effort/permission override;
|
|
754
|
+
- Thread observer、durable cursor 和当前投影 revision;
|
|
755
|
+
- actor lifecycle:`cold | starting | idle | queued | running | waiting_approval | stopping |
|
|
756
|
+
interrupted | failed`。
|
|
757
|
+
|
|
758
|
+
同一 workspace 的 actors 共享只读或并发安全的 `WorkspaceRuntimeKernelV1`:配置快照、model client pool、
|
|
759
|
+
provider request gate、Tool catalog、Skill/MCP descriptors、Settings coordinator 和安全策略。禁止为每个
|
|
760
|
+
Session 重复创建 Settings watcher、全局 registry 或无边界 MCP 连接。
|
|
761
|
+
|
|
762
|
+
旧 `OrionSessionRunnerV1` 不直接扩成一个持有多 Runtime 的巨型类;它继续服务单 Session surface。
|
|
763
|
+
Web registry 负责多个 actor 的创建、路由、并发 admission、资源回收和 shutdown。这样可以避免把 Web
|
|
764
|
+
并行语义意外带入 TUI。
|
|
765
|
+
|
|
766
|
+
### 19.2 前台选择只属于浏览器视图
|
|
767
|
+
|
|
768
|
+
`foregroundSessionId` 是每个浏览器标签页的本地视图状态,不再是 Host 中唯一全局 active Session:
|
|
769
|
+
|
|
770
|
+
```text
|
|
771
|
+
browser tab viewId
|
|
772
|
+
-> foreground { workspaceId, sessionId }
|
|
773
|
+
-> cached SessionProjection
|
|
774
|
+
-> guarded snapshot/delta refresh
|
|
775
|
+
|
|
776
|
+
Host WebSessionRuntimeRegistry
|
|
777
|
+
-> actor[A] continues running
|
|
778
|
+
-> actor[B] accepts independent command
|
|
779
|
+
-> actor[C] may remain cold/idle
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
- 标签页使用 `sessionStorage` 保存非敏感 `viewId` 和前台选择;它不是认证凭据;
|
|
783
|
+
- 浏览器选择 Session 不触发 Host `select_session`、旧 Runtime close/start 或全局 context revision 变化;
|
|
784
|
+
- Workspace/Session 资源 API 必须显式携带 identity 和 revision,不能再从 Host 的“当前 Session”推断目标;
|
|
785
|
+
- 多标签页选择相互独立;Settings、workspace registry 和 durable Session metadata 仍由 Host 统一管理。
|
|
786
|
+
|
|
787
|
+
### 19.3 命令、审批和事件合同
|
|
788
|
+
|
|
789
|
+
v0.3.3 Web protocol 需要新的显式路由合同;最终字段名以 OpenAPI 和 TypeScript 共享类型为准:
|
|
790
|
+
|
|
791
|
+
```ts
|
|
792
|
+
interface WebSessionCommandTargetV2 {
|
|
793
|
+
workspaceId: string;
|
|
794
|
+
sessionId: string;
|
|
795
|
+
expectedWorkspaceRevision: string;
|
|
796
|
+
expectedSessionRuntimeRevision: string;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
interface WebSessionRuntimeSummaryV1 {
|
|
800
|
+
workspaceId: string;
|
|
801
|
+
sessionId: string;
|
|
802
|
+
runtimeRevision: string;
|
|
803
|
+
phase:
|
|
804
|
+
| 'cold'
|
|
805
|
+
| 'starting'
|
|
806
|
+
| 'idle'
|
|
807
|
+
| 'queued'
|
|
808
|
+
| 'running'
|
|
809
|
+
| 'waiting_approval'
|
|
810
|
+
| 'stopping'
|
|
811
|
+
| 'interrupted'
|
|
812
|
+
| 'failed';
|
|
813
|
+
queuePosition?: number;
|
|
814
|
+
pendingApprovalCount: number;
|
|
815
|
+
updatedAt: string;
|
|
816
|
+
}
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
- submit/queue/steer/interrupt/Goal/Plan/permission decision 都绑定 exact Session actor;
|
|
820
|
+
- stale workspace/session/runtime revision 返回 409 `session_runtime_revision_conflict`,零 provider 调用、零 Tool
|
|
821
|
+
调用、零 journal append、零文件副作用;客户端先刷新目标 Session,绝不自动重放 submit;
|
|
822
|
+
- approval response 同时核对 `sessionId + requestId + invocationId`,不能用前台 Session 的 request map 回答后台
|
|
823
|
+
Session;
|
|
824
|
+
- SSE 可以维持单一连接,但所有 Session 事件必须带 `workspaceId/sessionId/threadId/runtimeRevision`;客户端
|
|
825
|
+
只把完整内容投影到对应 Session cache,不能把非前台事件丢弃或写入当前 transcript;
|
|
826
|
+
- Runtime summary 在 bootstrap/snapshot 可重建;若某类 live status 不可重放,断线后必须通过 guarded snapshot
|
|
827
|
+
收敛,不能伪装为 durable event;
|
|
828
|
+
- foreground selection 不关闭 EventSource;只有 Host restart、协议升级或 replay barrier 才重建连接。
|
|
829
|
+
|
|
830
|
+
### 19.4 并发预算与同工作树安全
|
|
831
|
+
|
|
832
|
+
首版默认 `maxRunningSessions=3`、`maxResidentSessionActors=4`,配置允许范围 `1–8`;两个限制必须独立:
|
|
833
|
+
|
|
834
|
+
- 达到 running 上限时,新 turn 进入 FIFO 队列并显示位置,用户仍可切换、查看、审批和取消;
|
|
835
|
+
- running、waiting approval、queued、stopping 的 actor 不得被 LRU 回收;
|
|
836
|
+
- idle actor 按最近使用和估算字节回收;回收前关闭 observer/client/Tool scope,但不删除 Session/Thread 数据;
|
|
837
|
+
- resident 全为不可回收状态时,允许打开任意 Session 的只读 snapshot,但新 turn 返回明确的
|
|
838
|
+
`session_concurrency_limit`;
|
|
839
|
+
- provider 请求继续通过共享 provider gate,不能让三个 actors 绕过账户级 cooldown/429 保护;
|
|
840
|
+
- 相同 workspace 的 `write_file`、`edit_file`、潜在写入型 `exec_command` 等经过共享
|
|
841
|
+
`WorkspaceMutationArbiterV1`。LLM 推理和只读工具可并行,变更型工具按 invocation 排队并在 UI 标明等待;
|
|
842
|
+
- 不自动合并并发写入。文件基线或 Git revision 变化时 fail closed,要求用户在目标 Session 重新确认;
|
|
843
|
+
- 不同 workspace 的变更型工具可以并行,但仍受全局 provider、进程和用户配置预算约束。
|
|
844
|
+
|
|
845
|
+
### 19.5 Session 切换读模型
|
|
846
|
+
|
|
847
|
+
Session 选择采用两阶段显示,不等待 Runtime 创建完成才切 UI:
|
|
848
|
+
|
|
849
|
+
1. **即时阶段**:从浏览器受限 LRU `sessionProjectionById` 显示最近快照、草稿和 Runtime badge,立即更新
|
|
850
|
+
`aria-current`、标题和主区域;
|
|
851
|
+
2. **收敛阶段**:请求目标 Session 最新一页(默认 100 条)和 cursor 后增量;若 actor 为 cold,只在用户提交
|
|
852
|
+
新 turn 或需要 live control 时启动 actor;
|
|
853
|
+
3. **历史阶段**:更早 transcript 继续显式分页,不因切换自动 drain 所有页面;
|
|
854
|
+
4. **恢复阶段**:snapshot revision/cursor 不匹配时,只清理目标 Session cache 并重取该 Session,不重置
|
|
855
|
+
Settings、Workspace、Skills、MCP、Tool catalog 或其他 Session 投影。
|
|
856
|
+
|
|
857
|
+
服务端需提供可直接分页的 immutable transcript/read-model 索引。每页不得先 materialize 全部 transcript,
|
|
858
|
+
不得把全部 `TurnCommit.history` 解析后再 slice。warm actor 和 cold snapshot 都必须记录 scan count、bytes read、
|
|
859
|
+
snapshot build time 和 response bytes,以便在真实长 Session 中验证目标。
|
|
860
|
+
|
|
861
|
+
## 20. 右栏布局与 Settings 入口修复
|
|
862
|
+
|
|
863
|
+
### 20.1 Work Panel 不变量
|
|
864
|
+
|
|
865
|
+
桌面 Shell 使用显式 Grid area,不再依赖 DOM 顺序自动放置:
|
|
866
|
+
|
|
867
|
+
```css
|
|
868
|
+
.workbench-shell {
|
|
869
|
+
display: grid;
|
|
870
|
+
grid-template-areas: 'project conversation work-panel';
|
|
871
|
+
grid-template-columns:
|
|
872
|
+
var(--project-navigation-column)
|
|
873
|
+
minmax(560px, 1fr)
|
|
874
|
+
var(--work-panel-column);
|
|
875
|
+
grid-template-rows: minmax(0, 1fr);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.workspace-rail {
|
|
879
|
+
grid-area: project;
|
|
880
|
+
}
|
|
881
|
+
.conversation-column {
|
|
882
|
+
grid-area: conversation;
|
|
883
|
+
min-width: 0;
|
|
884
|
+
}
|
|
885
|
+
.work-panel {
|
|
886
|
+
grid-area: work-panel;
|
|
887
|
+
min-width: 0;
|
|
888
|
+
}
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
具体实现必须满足:
|
|
892
|
+
|
|
893
|
+
- desktop expanded 为 `320–720px`,collapsed 永远为右侧 `48px` rail;折叠只改变第三列宽度和 panel
|
|
894
|
+
内容,不改变 `grid-row`、DOM 顺序或元素定位上下文;
|
|
895
|
+
- 不再在 `<=760px` 把 `.workbench-shell` 改成 `display:block`;窄屏保持单格 main grid,左右栏作为
|
|
896
|
+
fixed/portal overlay,不参与主 Grid 尺寸求解;
|
|
897
|
+
- `761–1180px` 的 derived rail/overlay 和用户显式 collapsed rail 分开建模,不能让一次临时断点覆盖桌面
|
|
898
|
+
expanded/width 偏好;
|
|
899
|
+
- collapse/expand、resize、viewport breakpoint 和主题切换使用同一个纯 column solver;CSS class 只消费
|
|
900
|
+
solver 输出,不再重复推断 mode;
|
|
901
|
+
- resize/collapse 期间保持 `height:100dvh`、`top=0`、`bottom=viewportHeight`、`right=0`,main 与 panel 的
|
|
902
|
+
bounding boxes 不相交;
|
|
903
|
+
- reduced motion 下不依赖 transition 完成事件提交最终状态;ResizeObserver 回调和 pointer preview 不能留下
|
|
904
|
+
stale inline `--work-panel-width`;
|
|
905
|
+
- drawer 关闭后焦点返回触发器;desktop collapse 后若焦点在隐藏内容,返回 48px rail 的对应 panel button。
|
|
906
|
+
|
|
907
|
+
Phase B0 必须先在失败窗口记录 shell/main/panel 的 bounding box、computed
|
|
908
|
+
`display/position/grid-area/grid-column/grid-row/width/height/transform` 和 layout preference;没有失败证据时不得
|
|
909
|
+
用随机 z-index 或 `position:absolute` 掩盖。
|
|
910
|
+
|
|
911
|
+
### 20.2 Settings 单入口
|
|
912
|
+
|
|
913
|
+
- 保留 `ProjectNavigator` expanded footer 左下的 Settings 按钮;collapsed 48px left rail 中对应按钮仍保留;
|
|
914
|
+
- 删除 `Conversation` header 的 Settings icon 和 `WorkPanelDock` header 的 Settings icon;同步删除
|
|
915
|
+
`settingsOpen`、`onOpenSettings` 等不再需要的 props,避免留下不可达状态或空占位;
|
|
916
|
+
- `App` 只从 `ProjectNavigator` 打开同一个 `SettingsDialog`;关闭后焦点回到触发按钮;
|
|
917
|
+
- 窄屏从左侧 navigation drawer 的 footer 打开 Settings 时,先关闭 drawer,再打开 modal,不能同时存在两个
|
|
918
|
+
`aria-modal=true` surface;
|
|
919
|
+
- 模型未配置等错误态若需要引导,使用错误说明中的上下文动作并聚焦左栏 Settings 入口,不增加第二个常驻
|
|
920
|
+
齿轮按钮;正常态 `getByRole('button', {name:'打开设置', exact:true})` 数量必须等于 1;
|
|
921
|
+
- 删除按钮后重新计算 header action hit area,不能留下 34/44px 空列或造成 title-line 覆盖右栏 toggle。
|
|
922
|
+
|
|
923
|
+
## 21. 实施分解与文件矩阵
|
|
924
|
+
|
|
925
|
+
### Phase B0:失败证据和预算冻结
|
|
926
|
+
|
|
927
|
+
- 用当前 v0.3.2 exact tarball 复现四项问题,记录 Host/runtime/snapshot/network timing 与右栏 geometry;
|
|
928
|
+
- 固定 2 个 deterministic provider scenario:A hold-stream、B immediate-complete;再增加 A pending approval;
|
|
929
|
+
- 建立 10,000-message Session 和 cold/warm actor 性能 fixture;
|
|
930
|
+
- 冻结 `maxRunning=3`、`maxResident=4`、workspace mutation policy 和内存/延迟预算;
|
|
931
|
+
- 先写失败测试,不在这一阶段调整按钮 disabled、CSS z-index 或缓存上限。
|
|
932
|
+
|
|
933
|
+
退出条件:每个问题都有可重复步骤、失败断言和脱敏证据;前两项能证明旧实现 close/start + baseline reload,
|
|
934
|
+
第三项能证明真实错误 geometry,而不只保存截图。
|
|
935
|
+
|
|
936
|
+
### Phase B1:Runtime registry 与安全路由
|
|
937
|
+
|
|
938
|
+
- 抽出 workspace-shared kernel,新增 Web Session actor registry;
|
|
939
|
+
- 把 Web 的 Session selection 从 `AgentRuntimeController.select_session` 解耦;
|
|
940
|
+
- 实现 running/resident admission、FIFO、LRU、shutdown 和 interrupted recovery;
|
|
941
|
+
- 实现 workspace mutation arbiter、provider gate 复用和 per-Session approval map;
|
|
942
|
+
- 为命令、Goal、Plan、queue、interrupt、approval 增加 actor identity/revision guard。
|
|
943
|
+
|
|
944
|
+
退出条件:Node integration test 中 A hold 时可启动 B;B 完成不终止 A;两个 Session 的 journal、provider request、
|
|
945
|
+
tool receipt、approval 和文件副作用完全可区分。
|
|
946
|
+
|
|
947
|
+
### Phase B2:协议、快照与浏览器多投影
|
|
948
|
+
|
|
949
|
+
- 更新 `src/web/protocol.ts`、`server.ts`、OpenAPI 和 problem codes;
|
|
950
|
+
- `workbench-controller.ts` 改为 surface coordinator,不再拥有唯一 Session Controller;
|
|
951
|
+
- 更新 `web/src/api.ts`、`types.ts`、`reducer.ts`、`useWorkbench.ts` 为 per-Session projection;
|
|
952
|
+
- Session selection 不 pause SSE,不调用 `loadBaseline()`;只读目标 snapshot/delta;
|
|
953
|
+
- Session tree 增加后台 phase/approval/queue badge;前台内容和各 Session 草稿隔离;
|
|
954
|
+
- 多标签页前台选择独立,stale actor mutation fail closed。
|
|
955
|
+
|
|
956
|
+
退出条件:真实浏览器可在 A running 时切 B、提交 B、返回 A;network trace 无 EventSource reconnect、无 catalog
|
|
957
|
+
全量重取、无跨 Session DOM/event/command 污染。
|
|
958
|
+
|
|
959
|
+
### Phase B3:Shell 布局和单 Settings 入口
|
|
960
|
+
|
|
961
|
+
- 落显式 Grid area 与 drawer overlay;修正 solver/class 的单一职责;
|
|
962
|
+
- 删除中栏、右栏两个 Settings 持久按钮及 props;
|
|
963
|
+
- 补桌面/断点/reduced-motion/200% zoom/focus/唯一 Settings selector 测试;
|
|
964
|
+
- B3 合入后,Track A 才能冻结方块工坊 Shell 的真实 screenshot baseline。
|
|
965
|
+
|
|
966
|
+
退出条件:右栏折叠在所有目标宽度保持右侧全高 48px rail,Settings 唯一入口与焦点路径通过。
|
|
967
|
+
|
|
968
|
+
### Phase B4:长会话、故障和发布证据
|
|
969
|
+
|
|
970
|
+
- 运行 warm/cold/10k history 性能测试、内存/actor eviction、provider 429、Tool 写入竞争和 Host restart;
|
|
971
|
+
- 运行真实 Chrome 两 Session 并行、pending approval、跨 tab、右栏断点矩阵和 Settings 唯一入口;
|
|
972
|
+
- 将 WEB33 Track A/Track B 场景纳入同一 exact-tarball receipt 和 Node 22.12/24/26 matrix;
|
|
973
|
+
- 更新 v0.3.3 API、migration、测试报告、CHANGELOG 和 package allowlist。
|
|
974
|
+
|
|
975
|
+
退出条件:Track A 与 Track B 的 required scenario 全部 GO;缺少任一并行、性能、布局或唯一入口证据均 NO_GO。
|
|
976
|
+
|
|
977
|
+
### 21.1 预计代码文件
|
|
978
|
+
|
|
979
|
+
| 区域 | 预计文件 | 主要变更 |
|
|
980
|
+
| ---------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------- |
|
|
981
|
+
| Session actor | 新增 `src/web/session-runtime-registry.ts`、必要的 runtime seam | actor lifecycle、budget、LRU、shutdown |
|
|
982
|
+
| Workspace kernel | `src/runtime/product-bootstrap.ts` 及新共享 kernel seam | 分离 workspace-shared 与 session-owned 资源 |
|
|
983
|
+
| Web controller | `src/web/workbench-controller.ts` | surface coordinator、显式 actor routing、snapshot |
|
|
984
|
+
| Protocol/Host | `src/web/protocol.ts`、`src/web/server.ts`、`docs/architecture/v0.3.3-web-api.yaml` | identity/revision、runtime summary、problem codes |
|
|
985
|
+
| Event stream | `src/web/event-hub.ts` | 多 Session tagged event/recovery budget;不伪造 durable |
|
|
986
|
+
| Client state | `web/src/types.ts`、`reducer.ts`、`useWorkbench.ts`、`api.ts` | per-Session cache、foreground-local、delta refresh |
|
|
987
|
+
| Session tree | `web/src/components/projects/ProjectNavigator.tsx` | background status、approval badge、唯一 Settings 入口 |
|
|
988
|
+
| Shell | `web/src/App.tsx`、`state/layout-preferences.ts`、`layout/WorkPanelDock.tsx`、`styles.css` | explicit grid area、drawer、collapse invariant |
|
|
989
|
+
| Header cleanup | `Conversation.tsx`、`WorkPanelDock.tsx` | 删除两个 Settings 入口和 props |
|
|
990
|
+
| Runtime tests | 新增 `tests/web-session-runtime-registry.test.ts`,更新 controller/server/protocol tests | 并发、CAS、queue、eviction、shutdown |
|
|
991
|
+
| Client tests | reducer/layout/session cache tests | 多投影、事件隔离、快速切换、几何不变量 |
|
|
992
|
+
| Browser tests | 新增 `tests/e2e/web-v033-session-concurrency.spec.ts`、`web-v033-shell-regression.spec.ts` | 真实并行、性能、布局和 Settings |
|
|
993
|
+
|
|
994
|
+
## 22. Track B 真实测试与验收
|
|
995
|
+
|
|
996
|
+
### 22.1 必须新增的浏览器场景
|
|
997
|
+
|
|
998
|
+
为避免与 Track A 的 `WEB33-P0-01..15` 冲突,Track B 从 16 编号:
|
|
999
|
+
|
|
1000
|
+
| ID | 场景 | 必须证明 |
|
|
1001
|
+
| ----------- | ------------------------------ | ------------------------------------------------------------------------------------------ |
|
|
1002
|
+
| WEB33-P0-16 | A running 时选择 B | A 不停止;B 内容可交互;无 `runtime_busy`、SSE reconnect 或全 baseline reload |
|
|
1003
|
+
| WEB33-P0-17 | A、B 同时提交 | 两个 provider marker、turnId、journal 和最终内容各归其 Session;峰值 running=2 |
|
|
1004
|
+
| WEB33-P0-18 | A waiting approval,B 完成任务 | A badge/approval 保留;回答 A approval 不影响 B;副作用按 callId 精确核对 |
|
|
1005
|
+
| WEB33-P0-19 | 同 workspace 两个写任务 | reasoning 可并行,变更型 Tool 经 arbiter 排队;无丢写、覆盖或未授权执行 |
|
|
1006
|
+
| WEB33-P0-20 | 两标签页停留 A/B | 前台选择互不改变;命令按 explicit actor route;stale revision 409 且五类副作用为 0 |
|
|
1007
|
+
| WEB33-P0-21 | warm/cold/10k history 切换 | p95 达标;请求/字节/scan 预算达标;只取一页+delta |
|
|
1008
|
+
| WEB33-P0-22 | pool 满、LRU、Host restart | running actor 不被逐出;第 4 个 turn 可见排队;重启后旧执行标记 interrupted 且不重复副作用 |
|
|
1009
|
+
| WEB33-P0-23 | 右栏折叠与断点往返 | 8 个宽度下 panel 右侧全高、rail=48、main 不下沉/重叠/溢出,偏好恢复 |
|
|
1010
|
+
| WEB33-P0-24 | Settings 单入口 | expanded/rail/drawer 下入口可达;正常态 `打开设置` button count=1;移除 header 空位 |
|
|
1011
|
+
|
|
1012
|
+
每个场景至少生成一张受控 PNG,并记录 tarball SHA、installed target digest、Chrome/Node identity、
|
|
1013
|
+
workspace/session/turn/call IDs 的脱敏 digest、事件计数和 network request 计数。性能场景还需保存机器信息、样本数、
|
|
1014
|
+
p50/p95/max 和 raw timing JSON;不允许以单次手工点击的体感代替。
|
|
1015
|
+
|
|
1016
|
+
### 22.2 Given / When / Then
|
|
1017
|
+
|
|
1018
|
+
#### AC-B01 运行中切换
|
|
1019
|
+
|
|
1020
|
+
Given Session A 的 provider stream 被受控 hold 且 Runtime phase=`running`,When 用户选择 Session B,Then
|
|
1021
|
+
150ms p95 内显示 B 的缓存内容,A 仍为 running,Host 没有关闭 A Runtime、没有返回 `runtime_busy`,全局 SSE
|
|
1022
|
+
连接 ID 不变。
|
|
1023
|
+
|
|
1024
|
+
#### AC-B02 真正并行
|
|
1025
|
+
|
|
1026
|
+
Given running slots 可用,When A 与 B 分别提交确定性任务,Then 两个 turn 可以同时处于 running;每个输出、
|
|
1027
|
+
Tool receipt、approval、Goal/Plan commit 和 token usage 只出现在其 Session;任一 Session interrupt 不影响另一个。
|
|
1028
|
+
|
|
1029
|
+
#### AC-B03 同工作树写入安全
|
|
1030
|
+
|
|
1031
|
+
Given A、B 在同一 workspace 请求变更型 Tool,When 两个 invocation 时间重叠,Then workspace arbiter 只允许一个
|
|
1032
|
+
进入副作用阶段,另一个显示等待;文件基线过期时后者 fail closed,不自动覆盖或合并。
|
|
1033
|
+
|
|
1034
|
+
#### AC-B04 切换性能
|
|
1035
|
+
|
|
1036
|
+
Given warm Session 和 10,000-message cold Session,When 连续切换 30 次,Then warm p95 ≤150ms、cold p95
|
|
1037
|
+
≤800ms;每次最多取目标最新页和 cursor delta;Settings/Skills/MCP/Workspace catalogs 请求数为 0,SSE reconnect
|
|
1038
|
+
和 replay reset 为 0。
|
|
1039
|
+
|
|
1040
|
+
#### AC-B05 多标签与恢复
|
|
1041
|
+
|
|
1042
|
+
Given两个标签页分别选择 A、B,When 任一标签页切换或提交,Then 另一标签页前台不变;stale actor revision
|
|
1043
|
+
返回 409 且 provider/tool/journal/file/approval 五类副作用都为 0;刷新后从 guarded snapshot 收敛。
|
|
1044
|
+
|
|
1045
|
+
#### AC-B06 右栏位置
|
|
1046
|
+
|
|
1047
|
+
Given Work Panel 展开,When 折叠并依次跨越 1920→1440→1181→1180→1024→760→390→320→1440,
|
|
1048
|
+
Then desktop rail 始终位于右侧且高等于 shell,drawer 不占 Grid 行列,中栏 `top/bottom` 不变,无页面级横向滚动,
|
|
1049
|
+
回到 1440 后恢复用户桌面偏好。
|
|
1050
|
+
|
|
1051
|
+
#### AC-B07 Settings 唯一入口
|
|
1052
|
+
|
|
1053
|
+
Given 正常已配置 Workbench,When 检查 expanded left rail、collapsed rail 和 mobile drawer,Then 只有左侧底部
|
|
1054
|
+
存在 `打开设置` 持久按钮;中栏和右栏 header 不存在 Settings icon;打开/关闭 dialog 后焦点正确恢复。
|
|
1055
|
+
|
|
1056
|
+
#### AC-B08 关闭与崩溃语义
|
|
1057
|
+
|
|
1058
|
+
Given多个 actor 处于 running/queued/waiting approval,When Host graceful shutdown 或被终止后重启,Then graceful
|
|
1059
|
+
路径逐 actor abort/close 并无 orphan;崩溃路径从 durable facts 标记 interrupted,pending approval fail closed,任何
|
|
1060
|
+
started invocation 不被自动重放。
|
|
1061
|
+
|
|
1062
|
+
### 22.3 发布门禁补充
|
|
1063
|
+
|
|
1064
|
+
- Track B unit/integration tests 在 Node 22.12、受支持的 24 和 26 通过;
|
|
1065
|
+
- exact tarball 的 primary Chrome 至少 3 个 fresh run,runtime matrix 每个 Node major 至少 1 个 critical run;
|
|
1066
|
+
- WEB33 receipt catalog 同时要求 Track A `01..12` 与 Track B `16..24` 的 P0 场景;缺失、skip、expected-fail、
|
|
1067
|
+
screenshot/fact 缺失或 artifact digest 不一致均 NO_GO;
|
|
1068
|
+
- 并行测试必须使用真实 `OrionRuntimeV1`、ToolGateway、durable Thread journal 和确定性 loopback provider;fake
|
|
1069
|
+
runtime 只能做 unit,不可作为 release proof;
|
|
1070
|
+
- raw trace/video/network body 仅落受控 ignored evidence 目录;receipt 只保存脱敏 facts、相对证据路径和 digest;
|
|
1071
|
+
- 在 source-clean commit 生成一次 tarball,所有 Node/Chrome 运行复用同一 SHA,不得用 source Host 截图替代安装包。
|
|
1072
|
+
|
|
1073
|
+
## 23. Track B 风险、决策门与 Definition of Done
|
|
1074
|
+
|
|
1075
|
+
### 23.1 主要风险
|
|
1076
|
+
|
|
1077
|
+
| 风险 | 影响 | 缓解 |
|
|
1078
|
+
| ---------------------------- | ------------------------------------------------- | -------------------------------------------------------------------- |
|
|
1079
|
+
| 直接放开切换按钮 | 正在运行的旧 Runtime 被关闭或命令落入错误 Session | actor registry 完成前保持 fail closed;先做 integration failure test |
|
|
1080
|
+
| 多 actor 复制 workspace 服务 | watcher/MCP/provider/Settings 重复、内存失控 | shared kernel + session-owned actor,按资源 scope 评审 |
|
|
1081
|
+
| 同工作树并行写 | 文件覆盖、命令相互污染 | workspace mutation arbiter、基线 revision、无自动合并 |
|
|
1082
|
+
| 全局 SSE 被背景流量挤满 | reconnect gap、前台事件丢失 | session-tagged budget、snapshot recovery、事件/字节压力门禁 |
|
|
1083
|
+
| 浏览器缓存无限增长 | 长会话拖慢或崩溃 | per-Session byte-bounded LRU,只缓存最新页和必要状态 |
|
|
1084
|
+
| 布局仅靠 z-index 修补 | 另一断点再次下沉/遮挡 | explicit grid areas、单 solver、geometry matrix |
|
|
1085
|
+
| Settings 删除后窄屏不可达 | 用户找不到配置 | left drawer footer 保留、真实鼠标/键盘/focus 旅程 |
|
|
1086
|
+
| Track A/B 同改 Shell | CSS 冲突、截图基线反复变化 | B3 先合并;A 只在稳定 DOM/layout 上加 Token/主题 |
|
|
1087
|
+
|
|
1088
|
+
### 23.2 决策门
|
|
1089
|
+
|
|
1090
|
+
1. **Gate B0 — 根因**:四项失败均可复现,网络与 geometry 证据齐全;
|
|
1091
|
+
2. **Gate B1 — 所有权**:两个真实 Session actor 同时运行且无跨 Session 污染;
|
|
1092
|
+
3. **Gate B2 — 性能**:切换不再 close/start、pause SSE 或 load full baseline,p95 达标;
|
|
1093
|
+
4. **Gate B3 — Shell**:右栏全断点 geometry 和单 Settings 入口通过;
|
|
1094
|
+
5. **Gate B4 — 发布**:Track A/B exact-tarball receipts 全部 GO。
|
|
1095
|
+
|
|
1096
|
+
任一 Gate 未通过时,不得只把 UI 按钮改为 enabled,也不得宣称“已支持并行”。
|
|
1097
|
+
|
|
1098
|
+
### 23.3 Definition of Done
|
|
1099
|
+
|
|
1100
|
+
- [ ] Web 不再由一组全局 active Runtime/Controller 代表所有 Session;
|
|
1101
|
+
- [ ] A running/waiting approval 时可选择并运行 B,A 不被停止或重建;
|
|
1102
|
+
- [ ] foreground selection 是标签页本地视图,所有 mutation 显式绑定 actor identity/revision;
|
|
1103
|
+
- [ ] 3 running / 4 resident 默认预算、FIFO、LRU、shutdown 和 interrupted recovery 有确定测试;
|
|
1104
|
+
- [ ] 同 workspace 变更型 Tool 有共享仲裁,跨 Session 权限和副作用为 0;
|
|
1105
|
+
- [ ] Session switch 不 pause SSE、不 load global baseline、不全量读取 transcript;
|
|
1106
|
+
- [ ] warm/cold/10k history p95、bytes、scan、request count 达到预算;
|
|
1107
|
+
- [ ] 背景 Session badge、approval、completion、error 与 active transcript 均正确;
|
|
1108
|
+
- [ ] 右栏折叠后在所有目标宽度保持右侧全高 rail,drawer/desktop preference 往返正确;
|
|
1109
|
+
- [ ] 中栏和右栏顶部 Settings 按钮已删除,左下入口在 expanded/rail/drawer 均可达;
|
|
1110
|
+
- [ ] TUI/CLI 单活动 Session、Settings、Goal、Plan、ToolGateway 和 Terminal 无回归;
|
|
1111
|
+
- [ ] WEB33-P0-16..24 的真实 Chrome、PNG、facts、network/perf 证据和 receipt 完整;
|
|
1112
|
+
- [ ] Track A 主题在 Track B 稳定 Shell 上重新截图并通过全部既有门禁;
|
|
1113
|
+
- [ ] 在实现、测试和 exact-tarball 门禁完成前,v0.3.3 状态保持 `Proposed / 待评审`。
|