@zergai/ztc 0.4.0-beta.1 → 0.5.0-beta.1
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/README.md +398 -45
- package/RUST_THIRD_PARTY_LICENSES.txt +1080 -822
- package/THIRD_PARTY_NOTICES.md +273 -12
- package/bin/zmux-darwin-arm64 +0 -0
- package/bin/ztc-audio-darwin-arm64 +0 -0
- package/bin/ztc-capture-darwin-arm64 +0 -0
- package/bin/ztc-computer-darwin-arm64 +0 -0
- package/bin/ztc-llm-darwin-arm64 +0 -0
- package/bin/ztc-tts-darwin-arm64 +0 -0
- package/bin/ztc-tui-darwin-arm64 +0 -0
- package/bin/ztc-zlicky-overlay-darwin-arm64 +0 -0
- package/bin/zterm-darwin-arm64 +0 -0
- package/dist/App.js +1206 -209
- package/dist/agent/agent.d.ts +74 -8
- package/dist/agent/agent.js +1073 -184
- package/dist/agent/backends/account_rotation.d.ts +4 -0
- package/dist/agent/backends/account_rotation.js +8 -2
- package/dist/agent/backends/anthropic.d.ts +13 -0
- package/dist/agent/backends/anthropic.js +169 -28
- package/dist/agent/backends/claude_cli.js +18 -8
- package/dist/agent/backends/codex_app_server.d.ts +1 -0
- package/dist/agent/backends/codex_app_server.js +55 -3
- package/dist/agent/backends/codex_auth.d.ts +1 -0
- package/dist/agent/backends/codex_auth.js +67 -13
- package/dist/agent/backends/codex_buffered_recovery.d.ts +27 -0
- package/dist/agent/backends/codex_buffered_recovery.js +293 -0
- package/dist/agent/backends/gemini.js +3 -1
- package/dist/agent/backends/http_error.d.ts +26 -0
- package/dist/agent/backends/http_error.js +221 -0
- package/dist/agent/backends/index.d.ts +9 -2
- package/dist/agent/backends/index.js +22 -2
- package/dist/agent/backends/openai.d.ts +0 -6
- package/dist/agent/backends/openai.js +5 -2
- package/dist/agent/backends/openai_compatible.d.ts +5 -4
- package/dist/agent/backends/openai_compatible.js +26 -19
- package/dist/agent/backends/openai_responses.d.ts +8 -3
- package/dist/agent/backends/openai_responses.js +77 -33
- package/dist/agent/backends/provider_ids.d.ts +1 -0
- package/dist/agent/backends/provider_ids.js +4 -0
- package/dist/agent/backends/request_metrics.js +12 -2
- package/dist/agent/backends/types.d.ts +109 -6
- package/dist/agent/backends/types.js +5 -1
- package/dist/agent/backends/zrouter_stream.d.ts +6 -1
- package/dist/agent/backends/zrouter_stream.js +160 -42
- package/dist/agent/background_registry.d.ts +2 -0
- package/dist/agent/background_registry.js +1 -0
- package/dist/agent/claim_observation.d.ts +6 -0
- package/dist/agent/claim_observation.js +54 -0
- package/dist/agent/commands/accounts.js +46 -177
- package/dist/agent/commands/attention.d.ts +2 -0
- package/dist/agent/commands/attention.js +67 -0
- package/dist/agent/commands/auth.js +18 -2
- package/dist/agent/commands/board.d.ts +2 -0
- package/dist/agent/commands/board.js +169 -0
- package/dist/agent/commands/clipboard.js +50 -1
- package/dist/agent/commands/compact.js +21 -13
- package/dist/agent/commands/config.js +4 -1
- package/dist/agent/commands/context.js +6 -1
- package/dist/agent/commands/desktop.d.ts +2 -0
- package/dist/agent/commands/desktop.js +29 -0
- package/dist/agent/commands/effort.js +14 -6
- package/dist/agent/commands/environment.d.ts +3 -0
- package/dist/agent/commands/environment.js +109 -0
- package/dist/agent/commands/evidence.d.ts +2 -0
- package/dist/agent/commands/evidence.js +9 -0
- package/dist/agent/commands/fork.js +4 -3
- package/dist/agent/commands/goal.d.ts +33 -1
- package/dist/agent/commands/goal.js +174 -14
- package/dist/agent/commands/goal_exit.d.ts +36 -0
- package/dist/agent/commands/goal_exit.js +120 -0
- package/dist/agent/commands/help.js +3 -1
- package/dist/agent/commands/history.js +3 -1
- package/dist/agent/commands/inbox.d.ts +2 -0
- package/dist/agent/commands/inbox.js +148 -0
- package/dist/agent/commands/index.js +16 -1
- package/dist/agent/commands/input_mode.js +8 -6
- package/dist/agent/commands/job.d.ts +2 -0
- package/dist/agent/commands/job.js +93 -0
- package/dist/agent/commands/keybindings.js +4 -1
- package/dist/agent/commands/label.d.ts +2 -0
- package/dist/agent/commands/label.js +77 -0
- package/dist/agent/commands/layout.d.ts +2 -0
- package/dist/agent/commands/layout.js +20 -0
- package/dist/agent/commands/mirror.js +16 -1
- package/dist/agent/commands/model.js +12 -2
- package/dist/agent/commands/permissions.d.ts +3 -1
- package/dist/agent/commands/permissions.js +79 -89
- package/dist/agent/commands/plan.js +5 -15
- package/dist/agent/commands/profile.js +21 -2
- package/dist/agent/commands/provider_selection.js +20 -1
- package/dist/agent/commands/rename.js +1 -1
- package/dist/agent/commands/resources.d.ts +2 -0
- package/dist/agent/commands/resources.js +67 -0
- package/dist/agent/commands/rewind.d.ts +3 -0
- package/dist/agent/commands/rewind.js +16 -0
- package/dist/agent/commands/runbooks.d.ts +2 -0
- package/dist/agent/commands/runbooks.js +73 -0
- package/dist/agent/commands/runbooks_lazy.d.ts +2 -0
- package/dist/agent/commands/runbooks_lazy.js +8 -0
- package/dist/agent/commands/sessions.d.ts +1 -1
- package/dist/agent/commands/sessions.js +33 -5
- package/dist/agent/commands/settings.js +185 -39
- package/dist/agent/commands/setup.d.ts +2 -0
- package/dist/agent/commands/setup.js +78 -0
- package/dist/agent/commands/share.d.ts +2 -0
- package/dist/agent/commands/share.js +64 -0
- package/dist/agent/commands/status.js +14 -2
- package/dist/agent/commands/types.d.ts +99 -6
- package/dist/agent/commands/update.js +8 -0
- package/dist/agent/commands/usage.d.ts +2 -0
- package/dist/agent/commands/usage.js +8 -0
- package/dist/agent/factory.d.ts +11 -0
- package/dist/agent/factory.js +113 -88
- package/dist/agent/loop_policy.d.ts +6 -3
- package/dist/agent/loop_policy.js +12 -3
- package/dist/agent/measurement_guidance.d.ts +2 -0
- package/dist/agent/measurement_guidance.js +5 -0
- package/dist/agent/request_encoder.d.ts +8 -1
- package/dist/agent/request_encoder.js +95 -23
- package/dist/agent/runtime/benchmark_comparison.d.ts +30 -0
- package/dist/agent/runtime/benchmark_comparison.js +94 -0
- package/dist/agent/runtime/benchmark_contract.d.ts +48 -0
- package/dist/agent/runtime/benchmark_contract.js +90 -0
- package/dist/agent/runtime/checked_commands.d.ts +32 -0
- package/dist/agent/runtime/checked_commands.js +119 -0
- package/dist/agent/runtime/command_execution_policy.d.ts +26 -0
- package/dist/agent/runtime/command_execution_policy.js +91 -0
- package/dist/agent/runtime/command_jobs.d.ts +36 -18
- package/dist/agent/runtime/command_jobs.js +151 -13
- package/dist/agent/runtime/command_panes.d.ts +59 -0
- package/dist/agent/runtime/command_panes.js +398 -0
- package/dist/agent/runtime/command_wait.d.ts +19 -0
- package/dist/agent/runtime/command_wait.js +167 -0
- package/dist/agent/runtime/cpu_benchmark.d.ts +30 -0
- package/dist/agent/runtime/cpu_benchmark.js +126 -0
- package/dist/agent/runtime/delegated_evidence.d.ts +26 -0
- package/dist/agent/runtime/delegated_evidence.js +80 -0
- package/dist/agent/runtime/evidence.d.ts +127 -0
- package/dist/agent/runtime/evidence.js +468 -0
- package/dist/agent/runtime/execution_context.d.ts +7 -0
- package/dist/agent/runtime/execution_context.js +39 -3
- package/dist/agent/runtime/json_verifier_recipe.d.ts +8 -0
- package/dist/agent/runtime/json_verifier_recipe.js +66 -0
- package/dist/agent/runtime/measurements.d.ts +110 -0
- package/dist/agent/runtime/measurements.js +317 -0
- package/dist/agent/runtime/policy.d.ts +4 -0
- package/dist/agent/runtime/policy.js +31 -20
- package/dist/agent/runtime/provider_native_evidence.d.ts +20 -0
- package/dist/agent/runtime/provider_native_evidence.js +86 -0
- package/dist/agent/runtime/recovery.d.ts +2 -0
- package/dist/agent/runtime/recovery.js +45 -2
- package/dist/agent/runtime/remote_broker_transport.d.ts +10 -0
- package/dist/agent/runtime/remote_broker_transport.js +84 -0
- package/dist/agent/runtime/remote_deletion_receipts.d.ts +3 -0
- package/dist/agent/runtime/remote_deletion_receipts.js +43 -0
- package/dist/agent/runtime/remote_journal_replay.d.ts +13 -0
- package/dist/agent/runtime/remote_journal_replay.js +233 -0
- package/dist/agent/runtime/remote_mutation_journal.d.ts +25 -0
- package/dist/agent/runtime/remote_mutation_journal.js +208 -0
- package/dist/agent/runtime/remote_resource_endpoint.d.ts +7 -0
- package/dist/agent/runtime/remote_resource_endpoint.js +6 -0
- package/dist/agent/runtime/remote_resource_errors.d.ts +5 -0
- package/dist/agent/runtime/remote_resource_errors.js +9 -0
- package/dist/agent/runtime/remote_resource_script.d.ts +2 -0
- package/dist/agent/runtime/remote_resource_script.js +1009 -0
- package/dist/agent/runtime/remote_resources.d.ts +29 -0
- package/dist/agent/runtime/remote_resources.js +160 -0
- package/dist/agent/runtime/source_verification.d.ts +12 -0
- package/dist/agent/runtime/source_verification.js +210 -0
- package/dist/agent/runtime/source_verification_contract.d.ts +75 -0
- package/dist/agent/runtime/source_verification_contract.js +203 -0
- package/dist/agent/runtime/tool_checkpoints.d.ts +11 -0
- package/dist/agent/runtime/tool_checkpoints.js +26 -0
- package/dist/agent/runtime/tool_effects.d.ts +5 -0
- package/dist/agent/runtime/tool_progress.d.ts +12 -0
- package/dist/agent/runtime/tool_progress.js +76 -0
- package/dist/agent/runtime/tool_runtime.d.ts +16 -1
- package/dist/agent/runtime/tool_runtime.js +204 -10
- package/dist/agent/runtime/tracing.d.ts +1 -1
- package/dist/agent/runtime/verifier_capture.d.ts +9 -0
- package/dist/agent/runtime/verifier_capture.js +100 -0
- package/dist/agent/runtime/verifier_contract.d.ts +24 -0
- package/dist/agent/runtime/verifier_contract.js +41 -0
- package/dist/agent/subagent.d.ts +20 -10
- package/dist/agent/subagent.js +266 -29
- package/dist/agent/tool_response_directory.d.ts +24 -0
- package/dist/agent/tool_response_directory.js +61 -0
- package/dist/agent/tool_response_source.d.ts +8 -0
- package/dist/agent/tool_response_source.js +49 -0
- package/dist/agent/tool_response_store.d.ts +75 -4
- package/dist/agent/tool_response_store.js +583 -64
- package/dist/agent/tools/ask_user.d.ts +3 -1
- package/dist/agent/tools/ask_user.js +30 -11
- package/dist/agent/tools/background.js +1 -0
- package/dist/agent/tools/benchmark_cpu.d.ts +2 -0
- package/dist/agent/tools/benchmark_cpu.js +102 -0
- package/dist/agent/tools/compare_benchmarks.d.ts +2 -0
- package/dist/agent/tools/compare_benchmarks.js +53 -0
- package/dist/agent/tools/deferred.js +1 -0
- package/dist/agent/tools/delegate.js +18 -2
- package/dist/agent/tools/helper_requirements.d.ts +7 -0
- package/dist/agent/tools/helper_requirements.js +19 -0
- package/dist/agent/tools/index.d.ts +1 -0
- package/dist/agent/tools/index.js +3 -0
- package/dist/agent/tools/measurement_report.d.ts +22 -0
- package/dist/agent/tools/measurement_report.js +190 -0
- package/dist/agent/tools/pane.d.ts +0 -7
- package/dist/agent/tools/pane.js +5 -4
- package/dist/agent/tools/project_context.d.ts +3 -0
- package/dist/agent/tools/project_context.js +45 -0
- package/dist/agent/tools/recall_tool_response.d.ts +3 -5
- package/dist/agent/tools/recall_tool_response.js +19 -29
- package/dist/agent/tools/registry.d.ts +1 -0
- package/dist/agent/tools/registry.js +23 -0
- package/dist/agent/tools/related_sessions.d.ts +2 -0
- package/dist/agent/tools/related_sessions.js +156 -0
- package/dist/agent/tools/routine.js +13 -3
- package/dist/agent/tools/session_evidence.d.ts +3 -0
- package/dist/agent/tools/session_evidence.js +72 -0
- package/dist/agent/tools/shell.d.ts +4 -3
- package/dist/agent/tools/shell.js +174 -47
- package/dist/agent/tools/tool_search.js +3 -2
- package/dist/agent/tools/types.d.ts +28 -0
- package/dist/agent/tools/verify_artifact.d.ts +2 -0
- package/dist/agent/tools/verify_artifact.js +60 -0
- package/dist/agent/tools/workflow.js +1 -0
- package/dist/app/activity.d.ts +6 -1
- package/dist/app/activity.js +81 -12
- package/dist/app/agent_runner.d.ts +6 -1
- package/dist/app/agent_runner.js +34 -19
- package/dist/app/command_context.js +106 -10
- package/dist/app/controller.d.ts +15 -4
- package/dist/app/controller.js +29 -3
- package/dist/app/escape_stop.d.ts +11 -0
- package/dist/app/escape_stop.js +15 -0
- package/dist/app/liveness.d.ts +6 -4
- package/dist/app/liveness.js +13 -3
- package/dist/app/model_catalog_cache.d.ts +5 -0
- package/dist/app/model_catalog_cache.js +138 -0
- package/dist/app/ordered_transcript.js +43 -4
- package/dist/app/prompt_turn.d.ts +14 -0
- package/dist/app/prompt_turn.js +53 -0
- package/dist/app/recap.d.ts +3 -0
- package/dist/app/recap.js +9 -3
- package/dist/app/restart.d.ts +3 -2
- package/dist/app/restart.js +22 -7
- package/dist/app/rewind.d.ts +3 -3
- package/dist/app/rewind.js +3 -3
- package/dist/app/selection_completion.d.ts +17 -2
- package/dist/app/selection_completion.js +84 -9
- package/dist/app/session_manager.d.ts +38 -6
- package/dist/app/session_manager.js +263 -60
- package/dist/app/session_messages.d.ts +3 -0
- package/dist/app/session_messages.js +60 -0
- package/dist/app/task_scope_router.d.ts +20 -0
- package/dist/app/task_scope_router.js +173 -0
- package/dist/app/transcript_window.d.ts +2 -0
- package/dist/app/transcript_window.js +4 -0
- package/dist/app/workspace_admission_details.d.ts +3 -0
- package/dist/app/workspace_admission_details.js +26 -0
- package/dist/app/workspace_layout_controller.d.ts +11 -0
- package/dist/app/workspace_layout_controller.js +88 -0
- package/dist/app/workspace_monitor.d.ts +1 -0
- package/dist/app/workspace_monitor.js +216 -0
- package/dist/app/workspace_presets.d.ts +29 -0
- package/dist/app/workspace_presets.js +192 -0
- package/dist/attention/queue.d.ts +37 -0
- package/dist/attention/queue.js +183 -0
- package/dist/bench/rf_shared.d.ts +2 -0
- package/dist/board/binding.d.ts +42 -0
- package/dist/board/binding.js +38 -0
- package/dist/board/client.d.ts +42 -0
- package/dist/board/client.js +60 -0
- package/dist/cli.js +1 -1
- package/dist/cli_args.js +19 -17
- package/dist/cli_main.js +110 -13
- package/dist/cli_ratatui.d.ts +183 -16
- package/dist/cli_ratatui.js +3989 -1255
- package/dist/components/ActivityLine.d.ts +3 -2
- package/dist/components/ActivityLine.js +2 -2
- package/dist/components/InputArea.d.ts +19 -1
- package/dist/components/InputArea.js +264 -190
- package/dist/components/MessageList.d.ts +2 -0
- package/dist/components/MessageList.js +3 -1
- package/dist/components/SingleMessage.d.ts +2 -0
- package/dist/components/SingleMessage.js +4 -2
- package/dist/components/StatusBar.d.ts +4 -2
- package/dist/components/StatusBar.js +3 -1
- package/dist/conductor_branch.js +3 -0
- package/dist/config/api_retry.d.ts +6 -1
- package/dist/config/api_retry.js +19 -1
- package/dist/config/defaults.d.ts +2 -1
- package/dist/config/defaults.js +9 -2
- package/dist/config/message_display.d.ts +1 -0
- package/dist/config/message_display.js +17 -2
- package/dist/config/permissions.d.ts +21 -0
- package/dist/config/permissions.js +89 -0
- package/dist/config/resolved.d.ts +2 -2
- package/dist/config/types.d.ts +32 -5
- package/dist/config.d.ts +38 -4
- package/dist/config.js +290 -42
- package/dist/context/project_intelligence.d.ts +44 -0
- package/dist/context/project_intelligence.js +246 -0
- package/dist/desktop/cli_launch.d.ts +8 -0
- package/dist/desktop/cli_launch.js +6 -0
- package/dist/desktop/cli_shim.d.ts +8 -0
- package/dist/desktop/cli_shim.js +120 -0
- package/dist/desktop/runtime.d.ts +16 -0
- package/dist/desktop/runtime.js +161 -0
- package/dist/desktop/worker_launch.d.ts +7 -0
- package/dist/desktop/worker_launch.js +7 -0
- package/dist/diagnostics/cargo_mutants_selection.d.ts +27 -0
- package/dist/diagnostics/cargo_mutants_selection.js +48 -0
- package/dist/diagnostics/native_terminal_benchmark.d.ts +58 -0
- package/dist/diagnostics/native_terminal_benchmark.js +1247 -0
- package/dist/diagnostics/session_evidence_package.d.ts +40 -0
- package/dist/diagnostics/session_evidence_package.js +234 -0
- package/dist/diagnostics/session_export.d.ts +93 -0
- package/dist/diagnostics/session_export.js +634 -0
- package/dist/emulation/tool_adapters.js +48 -18
- package/dist/emulation/ztc_addendum.d.ts +1 -0
- package/dist/emulation/ztc_addendum.js +13 -12
- package/dist/environment/service_runner.d.ts +1 -0
- package/dist/environment/service_runner.js +68 -0
- package/dist/environment/store.d.ts +120 -0
- package/dist/environment/store.js +387 -0
- package/dist/events.d.ts +40 -1
- package/dist/events.js +10 -17
- package/dist/goal_contract.d.ts +25 -0
- package/dist/goal_contract.js +44 -0
- package/dist/headless.d.ts +31 -0
- package/dist/headless.js +578 -70
- package/dist/headless_cli.js +8 -0
- package/dist/headless_cli_args.d.ts +1 -0
- package/dist/headless_cli_args.js +1 -0
- package/dist/intake/cli.d.ts +1 -0
- package/dist/intake/cli.js +33 -0
- package/dist/intake/format.d.ts +2 -0
- package/dist/intake/format.js +14 -0
- package/dist/intake/notifications.d.ts +16 -0
- package/dist/intake/notifications.js +132 -0
- package/dist/intake/store.d.ts +56 -0
- package/dist/intake/store.js +238 -0
- package/dist/library.d.ts +8 -0
- package/dist/library.js +19 -10
- package/dist/mcp/client.d.ts +1 -0
- package/dist/mcp/client.js +20 -0
- package/dist/modes/builtin/plan.yaml +2 -2
- package/dist/modes/handlers.js +1 -1
- package/dist/onboarding/first_run.d.ts +3 -0
- package/dist/onboarding/first_run.js +33 -25
- package/dist/onboarding/setup.d.ts +32 -0
- package/dist/onboarding/setup.js +133 -0
- package/dist/onboarding/setup_agent_health.d.ts +17 -0
- package/dist/onboarding/setup_agent_health.js +79 -0
- package/dist/onboarding/setup_environment.d.ts +66 -0
- package/dist/onboarding/setup_environment.js +219 -0
- package/dist/onboarding/setup_workspace.d.ts +17 -0
- package/dist/onboarding/setup_workspace.js +129 -0
- package/dist/optimize/adapters/index.d.ts +4 -1
- package/dist/optimize/adapters/index.js +7 -0
- package/dist/optimize/adapters/kernelbench.js +14 -5
- package/dist/optimize/adapters/popcorn.js +3 -2
- package/dist/optimize/adapters/profile_benchmark.js +13 -7
- package/dist/optimize/adapters/rfbench.js +25 -14
- package/dist/optimize/adapters/types.d.ts +3 -0
- package/dist/optimize/adapters/zergpod.js +5 -2
- package/dist/optimize/baseline.js +10 -21
- package/dist/optimize/branch.js +9 -12
- package/dist/optimize/combine.js +2 -3
- package/dist/optimize/executor.js +34 -48
- package/dist/optimize/measurements.d.ts +55 -0
- package/dist/optimize/measurements.js +173 -0
- package/dist/optimize/results.d.ts +1 -0
- package/dist/optimize/results.js +11 -33
- package/dist/optimize/tge.js +2 -1
- package/dist/panes/initial_input.d.ts +19 -0
- package/dist/panes/initial_input.js +206 -0
- package/dist/panes/labels.d.ts +16 -0
- package/dist/panes/labels.js +42 -0
- package/dist/panes/model_catalog.d.ts +3 -3
- package/dist/panes/model_catalog.js +28 -4
- package/dist/panes/pane_registry.js +6 -2
- package/dist/panes/types.d.ts +3 -0
- package/dist/panes/ztc_launch.js +19 -0
- package/dist/plugin/optimization.d.ts +2 -0
- package/dist/plugin/optimization.js +1 -0
- package/dist/plugin/runtime.d.ts +2 -0
- package/dist/plugin/simulation.d.ts +6 -1
- package/dist/plugin/simulation_contract.d.ts +836 -1
- package/dist/plugin/simulation_documents.d.ts +22 -0
- package/dist/plugin/simulation_documents.js +1 -0
- package/dist/plugin/simulation_interventions.d.ts +103 -0
- package/dist/plugin/simulation_interventions.js +1 -0
- package/dist/plugin/simulation_living.d.ts +1 -0
- package/dist/plugin/simulation_living.js +3 -0
- package/dist/plugin/simulation_meetings.d.ts +121 -0
- package/dist/plugin/simulation_meetings.js +1 -0
- package/dist/plugin/simulation_story_review.d.ts +111 -0
- package/dist/plugin/simulation_story_review.js +1 -0
- package/dist/plugin/simulation_storyteller.d.ts +91 -0
- package/dist/plugin/simulation_storyteller.js +1 -0
- package/dist/plugin/simulation_structured.d.ts +2 -0
- package/dist/plugin/simulation_structured.js +2 -0
- package/dist/plugin/simulation_toolkit.d.ts +21 -0
- package/dist/plugin/simulation_toolkit.js +24 -0
- package/dist/prompts/tool_delegate_task.j2 +1 -1
- package/dist/remote-broker/Dockerfile +10 -0
- package/dist/remote-broker/archive.py +1227 -0
- package/dist/remote-broker/cutover.py +761 -0
- package/dist/remote-broker/requirements.txt +5 -0
- package/dist/remote-broker/resources.json +6 -0
- package/dist/remote-broker/resources.write-staging.example.json +18 -0
- package/dist/remote-broker/retained.py +686 -0
- package/dist/remote-broker/retained_cleanup.py +550 -0
- package/dist/remote-broker/server.py +648 -0
- package/dist/remote-broker/worker.py +1007 -0
- package/dist/router_auth.d.ts +31 -0
- package/dist/router_auth.js +155 -9
- package/dist/runbooks/catalog.d.ts +3 -0
- package/dist/runbooks/catalog.js +26 -0
- package/dist/runbooks/library.d.ts +11 -0
- package/dist/runbooks/library.js +95 -0
- package/dist/runbooks/package.d.ts +43 -0
- package/dist/runbooks/package.js +102 -0
- package/dist/session.d.ts +65 -13
- package/dist/session.js +548 -43
- package/dist/session_handoff.d.ts +25 -0
- package/dist/session_handoff.js +322 -0
- package/dist/session_handoff_contract.d.ts +89 -0
- package/dist/session_handoff_contract.js +179 -0
- package/dist/session_media.d.ts +41 -0
- package/dist/session_media.js +357 -0
- package/dist/session_ownership.d.ts +16 -0
- package/dist/session_ownership.js +221 -0
- package/dist/session_public.d.ts +10 -2
- package/dist/session_public.js +6 -1
- package/dist/simulation/dynamic_history.d.ts +42 -0
- package/dist/simulation/dynamic_history.js +173 -0
- package/dist/simulation/engines/swarm/pane_manager.js +7 -6
- package/dist/simulation/inference.d.ts +3 -1
- package/dist/simulation/inference.js +19 -1
- package/dist/simulation/intervention_generation.d.ts +27 -0
- package/dist/simulation/intervention_generation.js +246 -0
- package/dist/simulation/intervention_material.d.ts +4 -0
- package/dist/simulation/intervention_material.js +81 -0
- package/dist/simulation/living/context.d.ts +3130 -0
- package/dist/simulation/living/context.js +944 -0
- package/dist/simulation/living/definer.d.ts +12 -0
- package/dist/simulation/living/definer.js +223 -0
- package/dist/simulation/living/definition.d.ts +257 -0
- package/dist/simulation/living/definition.js +341 -0
- package/dist/simulation/living/frame.d.ts +259 -0
- package/dist/simulation/living/frame.js +223 -0
- package/dist/simulation/living/identifiers.d.ts +2 -0
- package/dist/simulation/living/identifiers.js +12 -0
- package/dist/simulation/living/index.d.ts +15 -0
- package/dist/simulation/living/index.js +15 -0
- package/dist/simulation/living/inference.d.ts +219 -0
- package/dist/simulation/living/inference.js +576 -0
- package/dist/simulation/living/mechanics.d.ts +54 -0
- package/dist/simulation/living/mechanics.js +588 -0
- package/dist/simulation/living/model-input.d.ts +25 -0
- package/dist/simulation/living/model-input.js +215 -0
- package/dist/simulation/living/open-world.d.ts +257 -0
- package/dist/simulation/living/open-world.js +102 -0
- package/dist/simulation/living/projection.d.ts +7 -0
- package/dist/simulation/living/projection.js +31 -0
- package/dist/simulation/living/recall.d.ts +17 -0
- package/dist/simulation/living/recall.js +25 -0
- package/dist/simulation/living/reduce.d.ts +15 -0
- package/dist/simulation/living/reduce.js +1853 -0
- package/dist/simulation/living/replay.d.ts +6 -0
- package/dist/simulation/living/replay.js +22 -0
- package/dist/simulation/living/runtime.d.ts +140 -0
- package/dist/simulation/living/runtime.js +3020 -0
- package/dist/simulation/living/shared-kinds.d.ts +24 -0
- package/dist/simulation/living/shared-kinds.js +96 -0
- package/dist/simulation/living/types.d.ts +2785 -0
- package/dist/simulation/living/types.js +669 -0
- package/dist/simulation/llm.d.ts +3 -1
- package/dist/simulation/llm.js +90 -30
- package/dist/simulation/memory/embedding.d.ts +1 -1
- package/dist/simulation/memory/embedding.js +9 -3
- package/dist/simulation/memory/filesystem.d.ts +2 -0
- package/dist/simulation/memory/filesystem.js +5 -1
- package/dist/simulation/memory/filesystem_file_tree.d.ts +4 -1
- package/dist/simulation/memory/filesystem_file_tree.js +41 -10
- package/dist/simulation/memory/filesystem_invariants.js +1 -2
- package/dist/simulation/memory/filesystem_types.d.ts +1 -0
- package/dist/simulation/memory/memory.d.ts +2 -0
- package/dist/simulation/memory/memory.js +5 -1
- package/dist/simulation/orchestration/intent.js +0 -2
- package/dist/simulation/orchestration/lifecycle.js +0 -2
- package/dist/simulation/plugin_host.d.ts +25 -1
- package/dist/simulation/plugin_host.js +334 -17
- package/dist/simulation/session_documents.d.ts +20 -0
- package/dist/simulation/session_documents.js +62 -0
- package/dist/simulation/session_input_validation.d.ts +43 -0
- package/dist/simulation/session_input_validation.js +364 -0
- package/dist/simulation/session_inputs.d.ts +32 -0
- package/dist/simulation/session_inputs.js +154 -0
- package/dist/simulation/telemetry.d.ts +11 -14
- package/dist/simulation/telemetry.js +177 -54
- package/dist/simulation/toolkit/bounded_turns.d.ts +13 -0
- package/dist/simulation/toolkit/bounded_turns.js +80 -0
- package/dist/simulation/toolkit/dynamic_agents.d.ts +25 -0
- package/dist/simulation/toolkit/dynamic_agents.js +218 -0
- package/dist/simulation/toolkit/dynamic_digest.d.ts +1 -0
- package/dist/simulation/toolkit/dynamic_digest.js +8 -0
- package/dist/simulation/toolkit/dynamic_documents.d.ts +7 -0
- package/dist/simulation/toolkit/dynamic_documents.js +71 -0
- package/dist/simulation/toolkit/dynamic_driver.d.ts +8 -0
- package/dist/simulation/toolkit/dynamic_driver.js +269 -0
- package/dist/simulation/toolkit/dynamic_game.d.ts +53 -0
- package/dist/simulation/toolkit/dynamic_game.js +805 -0
- package/dist/simulation/toolkit/dynamic_knowledge.d.ts +15 -0
- package/dist/simulation/toolkit/dynamic_knowledge.js +91 -0
- package/dist/simulation/toolkit/dynamic_mechanics.d.ts +22 -0
- package/dist/simulation/toolkit/dynamic_mechanics.js +910 -0
- package/dist/simulation/toolkit/dynamic_meetings.d.ts +239 -0
- package/dist/simulation/toolkit/dynamic_meetings.js +350 -0
- package/dist/simulation/toolkit/dynamic_progress.d.ts +131 -0
- package/dist/simulation/toolkit/dynamic_progress.js +214 -0
- package/dist/simulation/toolkit/dynamic_projection.d.ts +9 -0
- package/dist/simulation/toolkit/dynamic_projection.js +219 -0
- package/dist/simulation/toolkit/dynamic_runtime.d.ts +412 -0
- package/dist/simulation/toolkit/dynamic_runtime.js +6536 -0
- package/dist/simulation/toolkit/dynamic_state.d.ts +111 -0
- package/dist/simulation/toolkit/dynamic_state.js +1967 -0
- package/dist/simulation/toolkit/dynamic_story_review.d.ts +508 -0
- package/dist/simulation/toolkit/dynamic_story_review.js +333 -0
- package/dist/simulation/toolkit/dynamic_storyteller.d.ts +77 -0
- package/dist/simulation/toolkit/dynamic_storyteller.js +114 -0
- package/dist/simulation/toolkit/dynamic_storyteller_runtime.d.ts +26 -0
- package/dist/simulation/toolkit/dynamic_storyteller_runtime.js +126 -0
- package/dist/simulation/toolkit/dynamic_world.d.ts +22 -0
- package/dist/simulation/toolkit/dynamic_world.js +377 -0
- package/dist/simulation/toolkit/structured_output.d.ts +5 -0
- package/dist/simulation/toolkit/structured_output.js +321 -0
- package/dist/simulation/types/world.d.ts +2 -0
- package/dist/simulation/world/artifact_store.js +1 -1
- package/dist/simulation/world/memory_manager.d.ts +5 -0
- package/dist/simulation/world/memory_manager.js +17 -2
- package/dist/simulation/world/state.d.ts +3 -2
- package/dist/simulation/world/state.js +15 -5
- package/dist/skills/bundled/measurement-validation/SKILL.md +144 -0
- package/dist/terminal_attach.d.ts +1 -0
- package/dist/terminal_attach.js +113 -0
- package/dist/tool_progress.d.ts +3 -0
- package/dist/tool_progress.js +27 -0
- package/dist/types.d.ts +145 -10
- package/dist/types.js +3 -0
- package/dist/ui/core/input.d.ts +3 -0
- package/dist/ui/core/input_segments.d.ts +18 -1
- package/dist/ui/core/input_segments.js +131 -47
- package/dist/ui/core/input_state.d.ts +12 -0
- package/dist/ui/core/layout_yoga.d.ts +1 -1
- package/dist/ui/core/turn_metadata.d.ts +5 -0
- package/dist/ui/core/turn_metadata.js +22 -0
- package/dist/ui/ink/render.d.ts +2 -1
- package/dist/ui/ink/render.js +6 -5
- package/dist/ui/ratatui/headless_pane_manager.d.ts +14 -1
- package/dist/ui/ratatui/headless_pane_manager.js +293 -104
- package/dist/ui/ratatui/index.d.ts +1 -0
- package/dist/ui/ratatui/input.d.ts +4 -0
- package/dist/ui/ratatui/input.js +15 -0
- package/dist/ui/ratatui/ipc_path.d.ts +2 -0
- package/dist/ui/ratatui/ipc_path.js +29 -1
- package/dist/ui/ratatui/mux_persistence.d.ts +3 -1
- package/dist/ui/ratatui/mux_persistence.js +139 -1
- package/dist/ui/ratatui/pane_relay.d.ts +1 -1
- package/dist/ui/ratatui/pane_relay.js +55 -27
- package/dist/ui/ratatui/process.d.ts +17 -1
- package/dist/ui/ratatui/process.js +80 -7
- package/dist/ui/ratatui/protocol.d.ts +236 -1
- package/dist/ui/ratatui/protocol.js +90 -0
- package/dist/ui/scrollback.d.ts +2 -1
- package/dist/ui/scrollback.js +9 -4
- package/dist/ui/stream_typewriter.d.ts +8 -3
- package/dist/ui/stream_typewriter.js +30 -1
- package/dist/ui/streaming_scrollback.d.ts +1 -0
- package/dist/ui/streaming_scrollback.js +1 -1
- package/dist/ui/transcript_render_cache.js +10 -0
- package/dist/ui/views/activity_line.d.ts +5 -3
- package/dist/ui/views/activity_line.js +65 -7
- package/dist/ui/views/app.d.ts +6 -3
- package/dist/ui/views/app.js +17 -6
- package/dist/ui/views/completion_menu.js +10 -5
- package/dist/ui/views/input_area.d.ts +7 -3
- package/dist/ui/views/input_area.js +15 -9
- package/dist/ui/views/message_list.d.ts +4 -1
- package/dist/ui/views/message_list.js +89 -19
- package/dist/ui/views/queue_panel.d.ts +3 -1
- package/dist/ui/views/queue_panel.js +9 -2
- package/dist/ui/views/status_bar.d.ts +4 -2
- package/dist/ui/views/status_bar.js +28 -13
- package/dist/ui/views/theme.d.ts +2 -0
- package/dist/ui/views/theme.js +2 -0
- package/dist/ui/widgets/color_panel.js +18 -0
- package/dist/ui/widgets/form.js +8 -0
- package/dist/ui/widgets/log_view.js +7 -0
- package/dist/ui/widgets/navigator_panel.js +8 -0
- package/dist/ui/widgets/prompt_viewer.js +2 -0
- package/dist/ui/widgets/questionnaire.d.ts +2 -0
- package/dist/ui/widgets/questionnaire.js +79 -16
- package/dist/ui/widgets/resume_panel.d.ts +2 -0
- package/dist/ui/widgets/resume_panel.js +26 -15
- package/dist/ui/widgets/rewind_panel.d.ts +2 -2
- package/dist/ui/widgets/rewind_panel.js +4 -2
- package/dist/ui/widgets/select.js +16 -27
- package/dist/ui/widgets/settings_panel.js +16 -0
- package/dist/ui/widgets/status_line_panel.d.ts +1 -0
- package/dist/ui/widgets/status_line_panel.js +30 -4
- package/dist/ui/widgets/text_input.d.ts +2 -0
- package/dist/ui/widgets/text_input.js +15 -1
- package/dist/ui/widgets/types.d.ts +2 -0
- package/dist/usage_projection.d.ts +24 -0
- package/dist/usage_projection.js +130 -0
- package/dist/usage_snapshot.d.ts +36 -0
- package/dist/usage_snapshot.js +131 -0
- package/dist/utils/assistant_message.d.ts +2 -0
- package/dist/utils/assistant_message.js +5 -0
- package/dist/utils/atomic_write.d.ts +6 -2
- package/dist/utils/atomic_write.js +29 -4
- package/dist/utils/checked_shell.d.ts +25 -0
- package/dist/utils/checked_shell.js +107 -0
- package/dist/utils/compaction.d.ts +4 -1
- package/dist/utils/compaction.js +31 -7
- package/dist/utils/context.d.ts +4 -4
- package/dist/utils/context.js +14 -12
- package/dist/utils/deepseek.d.ts +2 -2
- package/dist/utils/deepseek.js +13 -5
- package/dist/utils/ephemeral.js +4 -0
- package/dist/utils/ephemeral_tools.d.ts +18 -0
- package/dist/utils/ephemeral_tools.js +97 -0
- package/dist/utils/jev_client.d.ts +4 -0
- package/dist/utils/jev_client.js +15 -0
- package/dist/utils/model_cache.d.ts +15 -0
- package/dist/utils/model_cache.js +143 -0
- package/dist/utils/models.d.ts +4 -2
- package/dist/utils/models.js +12 -16
- package/dist/utils/reasoning.d.ts +8 -1
- package/dist/utils/reasoning.js +31 -11
- package/dist/utils/router_catalog.d.ts +49 -0
- package/dist/utils/router_catalog.js +271 -0
- package/dist/utils/sandbox.d.ts +9 -0
- package/dist/utils/sandbox.js +118 -15
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.js +98 -34
- package/dist/utils/subprocess_env.d.ts +3 -0
- package/dist/utils/subprocess_env.js +27 -1
- package/dist/web/accounts_mirror.d.ts +3 -1
- package/dist/web/accounts_mirror.js +13 -9
- package/dist/web/child_publication.d.ts +17 -0
- package/dist/web/child_publication.js +45 -0
- package/dist/web/mirror_authenticator.d.ts +31 -11
- package/dist/web/mirror_authenticator.js +67 -17
- package/dist/web/mirror_client.d.ts +31 -4
- package/dist/web/mirror_client.js +189 -23
- package/dist/web/mirror_stream.d.ts +84 -22
- package/dist/web/mirror_stream.js +676 -95
- package/dist/web/observer_query_redaction.d.ts +6 -0
- package/dist/web/observer_query_redaction.js +58 -0
- package/dist/web/pane_registry.d.ts +2 -0
- package/dist/web/pane_registry.js +86 -22
- package/dist/web/tool_image.d.ts +6 -0
- package/dist/web/tool_image.js +17 -0
- package/dist/web/view_plugin.d.ts +14 -0
- package/dist/web/view_plugin.js +23 -1
- package/dist/worker/executor.js +31 -12
- package/dist/worker/index.d.ts +1 -0
- package/dist/worker/toolsets.js +3 -1
- package/dist/worker/types.d.ts +12 -1
- package/dist/workflows/registry.js +1 -0
- package/dist/workflows/registry_handle.d.ts +2 -0
- package/dist/workflows/runtime.d.ts +2 -0
- package/dist/workflows/runtime.js +1 -0
- package/dist/workspace_agent.d.ts +7 -0
- package/dist/workspace_agent.js +36 -0
- package/dist/workspace_collision.d.ts +76 -0
- package/dist/workspace_collision.js +688 -0
- package/dist/workspace_layout.d.ts +18 -0
- package/dist/workspace_layout.js +121 -0
- package/dist/workspace_runtime.d.ts +44 -0
- package/dist/workspace_runtime.js +82 -0
- package/dist/workspace_session_context.d.ts +62 -0
- package/dist/workspace_session_context.js +160 -0
- package/dist/zlm-embed.mjs +32518 -9615
- package/dist/zlm.js +1 -0
- package/node_modules/@zerg/model-contracts/LICENSE.md +375 -0
- package/node_modules/@zerg/model-contracts/README.md +90 -0
- package/node_modules/@zerg/model-contracts/index.d.ts +20 -0
- package/node_modules/@zerg/model-contracts/index.js +223 -0
- package/node_modules/@zerg/model-contracts/package.json +8 -0
- package/node_modules/glob/node_modules/brace-expansion/index.js +78 -22
- package/node_modules/glob/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/readdir-glob/node_modules/brace-expansion/index.js +78 -22
- package/node_modules/readdir-glob/node_modules/brace-expansion/package.json +1 -1
- package/package.json +45 -24
- package/packages/model-contracts/LICENSE.md +375 -0
- package/packages/model-contracts/README.md +90 -0
- package/packages/model-contracts/index.d.ts +20 -0
- package/packages/model-contracts/index.js +223 -0
- package/packages/model-contracts/package.json +8 -0
- package/remote-broker/Dockerfile +10 -0
- package/remote-broker/README.md +308 -0
- package/remote-broker/archive.py +1227 -0
- package/remote-broker/cutover.py +761 -0
- package/remote-broker/requirements.txt +5 -0
- package/remote-broker/resources.example.json +6 -0
- package/remote-broker/resources.write-staging.example.json +18 -0
- package/remote-broker/retained.py +686 -0
- package/remote-broker/retained_cleanup.py +550 -0
- package/remote-broker/server.py +648 -0
- package/scripts/build-remote-broker.mjs +13 -0
- package/scripts/ensure-local-packages.mjs +6 -0
- package/scripts/node-pty-helpers.mjs +103 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SimulationDynamicStateV1, SimulationDynamicHistoryEntryV1, SimulationDynamicAuditEntryV1, SimulationPersistentAgentStateV1, DynamicHistoryReference, DynamicHistoryArchive } from '../plugin/simulation_contract.js';
|
|
2
|
+
export declare const DYNAMIC_HISTORY_WINDOW = 16;
|
|
3
|
+
export declare const DYNAMIC_HISTORY_RECORD_BYTES = 2097152;
|
|
4
|
+
export type { DynamicHistoryReference, DynamicHistoryArchive };
|
|
5
|
+
export type DynamicHistoryRecord = {
|
|
6
|
+
readonly version: 1;
|
|
7
|
+
readonly identity: string;
|
|
8
|
+
readonly revision: number;
|
|
9
|
+
readonly previous: DynamicHistoryReference | null;
|
|
10
|
+
} & ({
|
|
11
|
+
readonly kind: 'genesis';
|
|
12
|
+
readonly state: SimulationDynamicStateV1;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'beat';
|
|
15
|
+
readonly entry: SimulationDynamicHistoryEntryV1;
|
|
16
|
+
readonly audit: SimulationDynamicAuditEntryV1;
|
|
17
|
+
});
|
|
18
|
+
/** A host-owned storage boundary. References are content checks, never validation receipts. */
|
|
19
|
+
export interface DynamicHistoryStorage {
|
|
20
|
+
readonly identity: string;
|
|
21
|
+
read(reference: DynamicHistoryReference, maxBytes: number): DynamicHistoryRecord;
|
|
22
|
+
write(reference: DynamicHistoryReference, record: DynamicHistoryRecord): void;
|
|
23
|
+
}
|
|
24
|
+
type HistoryView = {
|
|
25
|
+
genesis: SimulationDynamicStateV1 | null;
|
|
26
|
+
history: readonly SimulationDynamicHistoryEntryV1[];
|
|
27
|
+
audit: readonly SimulationDynamicAuditEntryV1[];
|
|
28
|
+
};
|
|
29
|
+
export declare class DynamicHistoryError extends Error {
|
|
30
|
+
readonly code: 'history-unavailable' | 'history-invalid' | 'history-capacity';
|
|
31
|
+
constructor(code: 'history-unavailable' | 'history-invalid' | 'history-capacity', message: string);
|
|
32
|
+
}
|
|
33
|
+
export declare function withDynamicHistoryStorage<T>(storage: DynamicHistoryStorage, action: () => T): T;
|
|
34
|
+
export declare function activeDynamicHistoryStorage(): DynamicHistoryStorage | undefined;
|
|
35
|
+
export declare function dynamicHistoryReference(record: DynamicHistoryRecord): DynamicHistoryReference;
|
|
36
|
+
export declare function archiveDynamicState<T extends Omit<SimulationDynamicStateV1, 'frame'>>(previous: SimulationDynamicStateV1, next: T): T;
|
|
37
|
+
/** Rebuild derived storage from an original transition before parsing its referenced state. */
|
|
38
|
+
export declare function stageDynamicHistoryTransition(previous: SimulationDynamicStateV1 | null, next: SimulationDynamicStateV1): void;
|
|
39
|
+
export declare function readDynamicHistory(state: Pick<SimulationDynamicStateV1, 'historyArchive' | 'revision' | 'gameKind' | 'rulesVersion' | 'seed' | 'initialization'> & Partial<Pick<SimulationDynamicStateV1, 'history' | 'audit'>>): HistoryView;
|
|
40
|
+
export declare function dynamicHistory(state: SimulationDynamicStateV1): readonly SimulationDynamicHistoryEntryV1[];
|
|
41
|
+
export declare function dynamicMemoryHistory(state: SimulationDynamicStateV1): Readonly<Record<string, readonly SimulationPersistentAgentStateV1['memories'][number][]>> | undefined;
|
|
42
|
+
export declare function dynamicBeliefEvidenceHistory(state: SimulationDynamicStateV1): Readonly<Record<string, Readonly<Record<string, readonly string[]>>>> | undefined;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { parseDynamicHistoryEntry, parseDynamicAuditEntry } from './toolkit/dynamic_state.js';
|
|
2
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
5
|
+
export const DYNAMIC_HISTORY_WINDOW = 16;
|
|
6
|
+
export const DYNAMIC_HISTORY_RECORD_BYTES = 2_097_152;
|
|
7
|
+
const storageScope = new AsyncLocalStorage();
|
|
8
|
+
const views = new WeakMap();
|
|
9
|
+
function makeImmutable(value) {
|
|
10
|
+
if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
11
|
+
for (const item of Object.values(value))
|
|
12
|
+
makeImmutable(item);
|
|
13
|
+
Object.freeze(value);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
export class DynamicHistoryError extends Error {
|
|
18
|
+
code;
|
|
19
|
+
constructor(code, message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.code = code;
|
|
22
|
+
this.name = 'DynamicHistoryError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function withDynamicHistoryStorage(storage, action) {
|
|
26
|
+
return storageScope.run(storage, action);
|
|
27
|
+
}
|
|
28
|
+
export function activeDynamicHistoryStorage() { return storageScope.getStore(); }
|
|
29
|
+
function storage() {
|
|
30
|
+
const source = storageScope.getStore();
|
|
31
|
+
if (!source)
|
|
32
|
+
throw new DynamicHistoryError('history-unavailable', 'Owned canonical history is unavailable');
|
|
33
|
+
return source;
|
|
34
|
+
}
|
|
35
|
+
function encode(record) {
|
|
36
|
+
const normalize = (value) => Array.isArray(value) ? value.map(normalize)
|
|
37
|
+
: value !== null && typeof value === 'object' ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => [key, normalize(item)])) : value;
|
|
38
|
+
const encoded = JSON.stringify(normalize(record));
|
|
39
|
+
if (Buffer.byteLength(encoded) > DYNAMIC_HISTORY_RECORD_BYTES)
|
|
40
|
+
throw new DynamicHistoryError('history-capacity', 'Canonical history record exceeds its byte bound');
|
|
41
|
+
return encoded;
|
|
42
|
+
}
|
|
43
|
+
export function dynamicHistoryReference(record) {
|
|
44
|
+
return { version: 1, identity: record.identity, revision: record.revision, digest: createHash('sha256').update(encode(record)).digest('hex') };
|
|
45
|
+
}
|
|
46
|
+
function read(reference) {
|
|
47
|
+
const source = storage();
|
|
48
|
+
if (reference.version !== 1 || reference.identity !== source.identity || !Number.isSafeInteger(reference.revision) || reference.revision < 0
|
|
49
|
+
|| !/^[a-f0-9]{64}$/.test(reference.digest))
|
|
50
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history reference is invalid or foreign');
|
|
51
|
+
const record = source.read(reference, DYNAMIC_HISTORY_RECORD_BYTES);
|
|
52
|
+
if (record.version !== 1 || !isDeepStrictEqual(dynamicHistoryReference(record), reference))
|
|
53
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history content differs from its reference');
|
|
54
|
+
return record;
|
|
55
|
+
}
|
|
56
|
+
function write(record) {
|
|
57
|
+
const source = storage();
|
|
58
|
+
if (source.identity !== record.identity)
|
|
59
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history owner differs');
|
|
60
|
+
const reference = dynamicHistoryReference(record);
|
|
61
|
+
source.write(reference, structuredClone(record));
|
|
62
|
+
return reference;
|
|
63
|
+
}
|
|
64
|
+
export function archiveDynamicState(previous, next) {
|
|
65
|
+
if (!previous.historyArchive && (previous.revision !== 0 || !storageScope.getStore()))
|
|
66
|
+
return next;
|
|
67
|
+
const source = storage();
|
|
68
|
+
const genesis = previous.historyArchive?.genesis ?? write({ version: 1, identity: source.identity, revision: 0, previous: null, kind: 'genesis', state: previous });
|
|
69
|
+
const entry = next.history.at(-1);
|
|
70
|
+
const audit = next.audit.at(-1);
|
|
71
|
+
if (!entry || !audit || entry.revision !== previous.revision + 1 || audit.revision !== entry.revision)
|
|
72
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history must append its next exact beat');
|
|
73
|
+
const head = write({ version: 1, identity: source.identity, revision: entry.revision, previous: previous.historyArchive?.head ?? genesis, kind: 'beat', entry, audit });
|
|
74
|
+
return { ...next, historyArchive: { version: 1, genesis, head }, history: next.history.slice(-DYNAMIC_HISTORY_WINDOW), audit: next.audit.slice(-DYNAMIC_HISTORY_WINDOW) };
|
|
75
|
+
}
|
|
76
|
+
/** Rebuild derived storage from an original transition before parsing its referenced state. */
|
|
77
|
+
export function stageDynamicHistoryTransition(previous, next) {
|
|
78
|
+
if (!next?.historyArchive)
|
|
79
|
+
return;
|
|
80
|
+
if (!previous)
|
|
81
|
+
throw new DynamicHistoryError('history-invalid', 'Archived history needs its original predecessor');
|
|
82
|
+
const rebuilt = archiveDynamicState(previous, next);
|
|
83
|
+
if (!isDeepStrictEqual(rebuilt.historyArchive, next.historyArchive))
|
|
84
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history rewrites its committed prefix');
|
|
85
|
+
}
|
|
86
|
+
export function readDynamicHistory(state) {
|
|
87
|
+
const archive = state.historyArchive;
|
|
88
|
+
if (!archive) {
|
|
89
|
+
if (!state.history || !state.audit)
|
|
90
|
+
throw new DynamicHistoryError('history-invalid', 'Unarchived history is missing');
|
|
91
|
+
return { genesis: null, history: state.history, audit: state.audit };
|
|
92
|
+
}
|
|
93
|
+
const source = storage();
|
|
94
|
+
if (archive.head.identity !== source.identity || archive.genesis.identity !== source.identity)
|
|
95
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history reference is invalid or foreign');
|
|
96
|
+
if (!Number.isSafeInteger(state.revision) || state.revision < 0 || archive.version !== 1 || archive.genesis.revision !== 0 || archive.head.revision < state.revision)
|
|
97
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history range is invalid');
|
|
98
|
+
const prefix = (value) => state.revision === archive.head.revision ? value
|
|
99
|
+
: { genesis: value.genesis, history: Object.freeze(value.history.slice(0, state.revision)), audit: Object.freeze(value.audit.slice(0, state.revision)) };
|
|
100
|
+
const key = JSON.stringify([archive, state.gameKind, state.rulesVersion, state.seed, state.initialization]);
|
|
101
|
+
const prior = views.get(source)?.find(item => item.key === key);
|
|
102
|
+
if (prior)
|
|
103
|
+
return prefix(prior.value);
|
|
104
|
+
// Keep references while walking backward; record bodies are bounded individual reads.
|
|
105
|
+
const refs = [];
|
|
106
|
+
let cursor = archive.head;
|
|
107
|
+
while (cursor.revision > 0) {
|
|
108
|
+
const record = read(cursor);
|
|
109
|
+
if (record.kind !== 'beat' || !record.previous || record.previous.revision !== record.revision - 1
|
|
110
|
+
|| record.entry.revision !== record.revision || record.audit.revision !== record.revision)
|
|
111
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history is incomplete or out of order');
|
|
112
|
+
refs.push(cursor);
|
|
113
|
+
cursor = record.previous;
|
|
114
|
+
}
|
|
115
|
+
if (!isDeepStrictEqual(cursor, archive.genesis))
|
|
116
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history has a different genesis');
|
|
117
|
+
const first = read(cursor);
|
|
118
|
+
if (first.kind !== 'genesis' || first.previous !== null || first.state.revision !== 0 || first.state.historyArchive !== undefined
|
|
119
|
+
|| first.state.gameKind !== state.gameKind || first.state.rulesVersion !== state.rulesVersion || first.state.seed !== state.seed
|
|
120
|
+
|| !isDeepStrictEqual(first.state.initialization, state.initialization))
|
|
121
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history genesis identity is invalid');
|
|
122
|
+
const history = [];
|
|
123
|
+
const audit = [];
|
|
124
|
+
for (const reference of refs.reverse()) {
|
|
125
|
+
const record = read(reference);
|
|
126
|
+
if (record.kind !== 'beat')
|
|
127
|
+
throw new DynamicHistoryError('history-invalid', 'Canonical history beat is unavailable');
|
|
128
|
+
history.push(parseDynamicHistoryEntry(record.entry));
|
|
129
|
+
audit.push(parseDynamicAuditEntry(record.audit));
|
|
130
|
+
}
|
|
131
|
+
const result = makeImmutable({ genesis: first.state, history, audit });
|
|
132
|
+
// Two immutable decoded views, at most four MiB each, per owned operation.
|
|
133
|
+
if (Buffer.byteLength(JSON.stringify(result)) <= 4_194_304) {
|
|
134
|
+
const retained = views.get(source) ?? [];
|
|
135
|
+
views.set(source, [...retained.slice(-1), { key, value: result }]);
|
|
136
|
+
}
|
|
137
|
+
return prefix(result);
|
|
138
|
+
}
|
|
139
|
+
export function dynamicHistory(state) { return readDynamicHistory(state).history; }
|
|
140
|
+
export function dynamicMemoryHistory(state) {
|
|
141
|
+
if (!state.historyArchive)
|
|
142
|
+
return undefined;
|
|
143
|
+
const source = readDynamicHistory(state);
|
|
144
|
+
const memories = Object.fromEntries(source.genesis.agents.map(actor => [actor.actorId, [...actor.memories]]));
|
|
145
|
+
for (const entry of source.history)
|
|
146
|
+
for (const update of entry.gmProposal.agentUpdates)
|
|
147
|
+
memories[update.actorId]?.push(...update.memoriesToAppend);
|
|
148
|
+
return memories;
|
|
149
|
+
}
|
|
150
|
+
export function dynamicBeliefEvidenceHistory(state) {
|
|
151
|
+
if (!state.historyArchive)
|
|
152
|
+
return undefined;
|
|
153
|
+
const source = readDynamicHistory(state);
|
|
154
|
+
const actors = new Map(source.genesis.agents.map(actor => [actor.actorId,
|
|
155
|
+
new Map(actor.beliefs.map(belief => [belief.id, new Set(belief.evidenceEventIds)]))]));
|
|
156
|
+
for (const entry of source.history)
|
|
157
|
+
for (const update of entry.gmProposal.agentUpdates) {
|
|
158
|
+
const beliefs = actors.get(update.actorId);
|
|
159
|
+
if (!beliefs)
|
|
160
|
+
throw new DynamicHistoryError('history-invalid', 'Archived belief actor is unavailable');
|
|
161
|
+
for (const belief of update.beliefsToAppend)
|
|
162
|
+
beliefs.set(belief.id, new Set(belief.evidenceEventIds));
|
|
163
|
+
for (const updateBelief of update.beliefUpdates) {
|
|
164
|
+
const evidence = beliefs.get(updateBelief.beliefId);
|
|
165
|
+
if (!evidence)
|
|
166
|
+
throw new DynamicHistoryError('history-invalid', 'Archived belief is unavailable');
|
|
167
|
+
for (const eventId of updateBelief.evidenceEventIds)
|
|
168
|
+
evidence.add(eventId);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return Object.fromEntries([...actors].map(([actorId, beliefs]) => [actorId,
|
|
172
|
+
Object.fromEntries([...beliefs].map(([beliefId, evidence]) => [beliefId, [...evidence]]))]));
|
|
173
|
+
}
|
|
@@ -8,6 +8,7 @@ import { join, dirname } from 'path';
|
|
|
8
8
|
import { existsSync, mkdirSync } from 'fs';
|
|
9
9
|
import { fileURLToPath } from 'url';
|
|
10
10
|
import { randomUUID } from 'crypto';
|
|
11
|
+
import { resolveOwnedCliLaunch } from '../../../desktop/cli_launch.js';
|
|
11
12
|
import { DEFAULT_FREE_SIM_CONFIG } from '../../types.js';
|
|
12
13
|
import { extractMeetingUtterance, isZtcRequestBusEnvelope } from './message_envelope.js';
|
|
13
14
|
import { clearBusTransport, setBusTransport } from '../../../agent/tools/bus_message.js';
|
|
@@ -427,7 +428,7 @@ export async function setupRealPanes(state, logs, infra, onProgress, agentsOverr
|
|
|
427
428
|
}
|
|
428
429
|
// 5. Start PaneRelayServer so children can manage sub-panes
|
|
429
430
|
infra.relayServer = new PaneRelayServer(infra.tuiProcess, simEnv.ZTC_PANE_RELAY);
|
|
430
|
-
infra.relayServer.start();
|
|
431
|
+
await infra.relayServer.start();
|
|
431
432
|
// 6. Wire bus transport (same pattern as cli_ratatui.ts:419-431)
|
|
432
433
|
const server = infra.mirrorServer;
|
|
433
434
|
setBusTransport({
|
|
@@ -487,15 +488,15 @@ export async function setupRealPanes(state, logs, infra, onProgress, agentsOverr
|
|
|
487
488
|
}
|
|
488
489
|
else {
|
|
489
490
|
const paneCreated = waitForPaneCreated(infra.tuiProcess, paneTitle, PANE_CREATION_TIMEOUT_MS, stopSignal);
|
|
491
|
+
const childArgs = ['--headless', '--pane', '--session-id', sessionId,
|
|
492
|
+
'--model', state.config.model, '--provider', state.config.provider];
|
|
493
|
+
const ownedLaunch = resolveOwnedCliLaunch(childArgs);
|
|
490
494
|
const sent = infra.tuiProcess.send({
|
|
491
495
|
type: 'create_pane',
|
|
492
|
-
command: process.execPath,
|
|
496
|
+
command: ownedLaunch?.command ?? process.execPath,
|
|
493
497
|
// --headless --pane: child enters RatatuiApp headless-mirror path with bus
|
|
494
498
|
// connectivity via MirrorClient (ZTC_MIRROR_PORT).
|
|
495
|
-
args: [
|
|
496
|
-
ztcEntry, '--headless', '--pane', '--session-id', sessionId,
|
|
497
|
-
'--model', state.config.model, '--provider', state.config.provider,
|
|
498
|
-
],
|
|
499
|
+
args: ownedLaunch?.args ?? [ztcEntry, ...childArgs],
|
|
499
500
|
cwd: state.config.outputDir,
|
|
500
501
|
title: paneTitle,
|
|
501
502
|
pane_type: 'ztc',
|
|
@@ -3,10 +3,12 @@ export interface ResolvedSimulationInference {
|
|
|
3
3
|
provider: string;
|
|
4
4
|
model: string;
|
|
5
5
|
codexEffort?: CodexReasoningEffort;
|
|
6
|
+
codexFastMode?: boolean;
|
|
6
7
|
apiKey?: string;
|
|
7
8
|
baseUrl?: string;
|
|
8
9
|
embeddingApiKey?: string;
|
|
9
10
|
embeddingBaseUrl?: string;
|
|
10
11
|
embeddingModel?: string;
|
|
12
|
+
codexAuthFilePath?: string;
|
|
11
13
|
}
|
|
12
|
-
export declare function resolveSimulationInference(): ResolvedSimulationInference;
|
|
14
|
+
export declare function resolveSimulationInference(explicitRoute?: Pick<ResolvedSimulationInference, 'provider' | 'model' | 'codexEffort' | 'codexFastMode'>): ResolvedSimulationInference;
|
|
@@ -13,7 +13,25 @@ function resolveApiKeyFromConfig(provider, explicitApiKey, envVarName) {
|
|
|
13
13
|
}
|
|
14
14
|
return configStore.getApiKey(provider) || process.env.OPENAI_API_KEY;
|
|
15
15
|
}
|
|
16
|
-
export function resolveSimulationInference() {
|
|
16
|
+
export function resolveSimulationInference(explicitRoute) {
|
|
17
|
+
if (explicitRoute) {
|
|
18
|
+
const backendConfig = configStore.resolveLLMBackendConfig({
|
|
19
|
+
provider: explicitRoute.provider,
|
|
20
|
+
model: explicitRoute.model,
|
|
21
|
+
});
|
|
22
|
+
const apiKey = resolveApiKeyFromConfig(explicitRoute.provider);
|
|
23
|
+
const baseUrl = explicitRoute.provider === 'openai_compatible'
|
|
24
|
+
? configStore.getOpenAICompatibleBaseUrl() || undefined
|
|
25
|
+
: undefined;
|
|
26
|
+
return {
|
|
27
|
+
...explicitRoute,
|
|
28
|
+
apiKey,
|
|
29
|
+
baseUrl,
|
|
30
|
+
embeddingApiKey: apiKey,
|
|
31
|
+
embeddingBaseUrl: baseUrl,
|
|
32
|
+
codexAuthFilePath: backendConfig.codexAuthFilePath,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
17
35
|
const envProvider = process.env.ZTC_SIM_PROVIDER;
|
|
18
36
|
const envModel = process.env.ZTC_SIM_MODEL;
|
|
19
37
|
if (envProvider && envModel) {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SimulationPersistentAgentStateV1 } from '../plugin/simulation_contract.js';
|
|
2
|
+
import type { ActorInterventionContext } from '../plugin/simulation_interventions.js';
|
|
3
|
+
interface Schema {
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
properties?: Record<string, Schema>;
|
|
6
|
+
required?: string[];
|
|
7
|
+
anyOf?: Schema[];
|
|
8
|
+
oneOf?: Schema[];
|
|
9
|
+
items?: Schema;
|
|
10
|
+
enum?: readonly unknown[];
|
|
11
|
+
}
|
|
12
|
+
/** Bind the explicitly selected receipt to its typed output; acceptance remains canonical. */
|
|
13
|
+
export declare function interventionActorResponseSchema(context: ActorInterventionContext, updateSchema: Schema, actor: SimulationPersistentAgentStateV1, causeIds: readonly string[], agencyVersion?: 'emergent-v1', receiptVersion?: 1 | 2 | 3): Schema;
|
|
14
|
+
/** Offer one optional slot per already-permitted relationship target. */
|
|
15
|
+
export declare function keyedActorResponseSchema(schema: Schema): Schema;
|
|
16
|
+
export type DynamicActorInstructionVersion = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
|
|
17
|
+
export interface ActorReceiptCauseBinding {
|
|
18
|
+
readonly version: 3;
|
|
19
|
+
readonly actorId: string;
|
|
20
|
+
readonly revision: number;
|
|
21
|
+
readonly inputIds: readonly string[];
|
|
22
|
+
readonly sourceActionIds: readonly string[];
|
|
23
|
+
readonly sourceAdjudicationProposalIds?: readonly string[];
|
|
24
|
+
}
|
|
25
|
+
/** Move explicit wire witnesses into their canonical update without changing authored values. */
|
|
26
|
+
export declare function normalizeDynamicActorResponse(value: Record<string, unknown>, version: DynamicActorInstructionVersion, binding?: ActorReceiptCauseBinding): Record<string, unknown>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { intentSchema } from './toolkit/dynamic_state.js';
|
|
2
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
3
|
+
import { interventionResolutionSchema, SimulationInputError } from './session_input_validation.js';
|
|
4
|
+
/** Bind the explicitly selected receipt to its typed output; acceptance remains canonical. */
|
|
5
|
+
export function interventionActorResponseSchema(context, updateSchema, actor, causeIds, agencyVersion, receiptVersion = 1) {
|
|
6
|
+
const properties = updateSchema.properties;
|
|
7
|
+
const goals = properties.goalsToAppend.items.properties.id.enum;
|
|
8
|
+
const receipts = interventionResolutionSchema(context, updateSchema, actor.goals.filter(goal => goal.status === 'active').map(goal => goal.id), causeIds, agencyVersion);
|
|
9
|
+
if (agencyVersion === 'emergent-v1' && (receiptVersion === 2 || receiptVersion === 3)) {
|
|
10
|
+
const receipt = receipts.items.anyOf[0];
|
|
11
|
+
const kinds = receipt.properties.change.anyOf;
|
|
12
|
+
const changes = kinds.flatMap(option => {
|
|
13
|
+
const kind = option.properties.kind.const;
|
|
14
|
+
const fields = kind === 'intent' ? [['nextIntent', properties.nextIntent]]
|
|
15
|
+
: kind === 'belief' ? [['beliefUpdate', properties.beliefUpdates.items], ['beliefToAppend', properties.beliefsToAppend.items]]
|
|
16
|
+
: [['relationshipDelta', properties.relationshipDeltas.items]];
|
|
17
|
+
return fields.map(([field, schema]) => ({ ...option, required: [...option.required, field],
|
|
18
|
+
properties: { ...option.properties, [field]: schema } }));
|
|
19
|
+
});
|
|
20
|
+
const linked = { ...receipts, items: { anyOf: [
|
|
21
|
+
{ ...receipt, properties: { ...receipt.properties, change: { anyOf: changes } } },
|
|
22
|
+
receipts.items.anyOf[1],
|
|
23
|
+
] } };
|
|
24
|
+
if (receiptVersion === 3) {
|
|
25
|
+
linked.items.anyOf = linked.items.anyOf.map(item => {
|
|
26
|
+
const { causeIds: _causeIds, ...properties } = item.properties;
|
|
27
|
+
return { ...item, required: item.required.filter(field => field !== 'causeIds'), properties };
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return { type: 'object', additionalProperties: false, required: ['consequence'], properties: { consequence: {
|
|
31
|
+
type: 'object', additionalProperties: false, required: ['agentUpdate', 'inputResolutions', 'receiptVersion'], properties: {
|
|
32
|
+
agentUpdate: { anyOf: [updateSchema, { type: 'null' }] }, inputResolutions: linked, receiptVersion: { const: receiptVersion, type: 'integer' },
|
|
33
|
+
},
|
|
34
|
+
} }, 'x-ztc-compact-keys': true };
|
|
35
|
+
}
|
|
36
|
+
if (agencyVersion === 'emergent-v1')
|
|
37
|
+
return {
|
|
38
|
+
type: 'object', additionalProperties: false, required: ['consequence'], properties: { consequence: {
|
|
39
|
+
type: 'object', additionalProperties: false, required: ['agentUpdate', 'inputResolutions'], properties: {
|
|
40
|
+
agentUpdate: { anyOf: [updateSchema, { type: 'null' }] }, inputResolutions: receipts,
|
|
41
|
+
},
|
|
42
|
+
} }, 'x-ztc-compact-keys': true,
|
|
43
|
+
};
|
|
44
|
+
const branches = [];
|
|
45
|
+
const intentsForGoal = (goalId) => properties.nextIntent.anyOf.flatMap(option => option.oneOf ?? []).filter(intent => {
|
|
46
|
+
const goal = intent.properties.goalId;
|
|
47
|
+
return goal.const === goalId || goal.enum?.includes(goalId);
|
|
48
|
+
}).map(intent => ({ ...intent, properties: { ...intent.properties, goalId: { const: goalId } } }));
|
|
49
|
+
const existingIntents = actor.goals.filter(goal => goal.status === 'active').flatMap(goal => intentsForGoal(goal.id));
|
|
50
|
+
const existingNextIntent = { anyOf: [{ type: 'null' }, ...(existingIntents.length ? [{ oneOf: existingIntents }] : [])] };
|
|
51
|
+
const branch = (kind, recordId, fields) => {
|
|
52
|
+
const update = { ...updateSchema, required: [...new Set([...updateSchema.required, ...Object.keys(fields)])], properties: { ...properties, nextIntent: existingNextIntent, ...fields } };
|
|
53
|
+
branches.push({ type: 'object', additionalProperties: false, required: ['agentUpdate', 'inputResolutions'], properties: {
|
|
54
|
+
agentUpdate: update,
|
|
55
|
+
inputResolutions: { ...receipts, items: { ...receipts.items, properties: { ...receipts.items.properties,
|
|
56
|
+
change: { type: 'object', additionalProperties: false, required: ['kind', 'recordId'], properties: { kind: { const: kind }, recordId: { const: recordId } } }, } } },
|
|
57
|
+
} });
|
|
58
|
+
};
|
|
59
|
+
const selectedArray = (name, idField, id, extra = {}) => ({
|
|
60
|
+
...properties[name], minItems: 1, maxItems: 1, items: { ...properties[name].items, properties: { ...properties[name].items.properties, [idField]: { const: id }, ...extra } },
|
|
61
|
+
});
|
|
62
|
+
for (const goalId of [...actor.goals.filter(goal => goal.status === 'active').map(goal => goal.id), ...goals]) {
|
|
63
|
+
const intents = intentsForGoal(goalId);
|
|
64
|
+
if (intents.length > 0)
|
|
65
|
+
branch('intent', goalId, {
|
|
66
|
+
nextIntent: { anyOf: intents },
|
|
67
|
+
...(goals.includes(goalId) ? { goalsToAppend: selectedArray('goalsToAppend', 'id', goalId) } : {}),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
for (const belief of actor.beliefs) {
|
|
71
|
+
const confidence = [
|
|
72
|
+
...(belief.confidence > 0 ? [{ type: 'integer', minimum: 0, maximum: belief.confidence - 1 }] : []),
|
|
73
|
+
...(belief.confidence < 100 ? [{ type: 'integer', minimum: belief.confidence + 1, maximum: 100 }] : []),
|
|
74
|
+
];
|
|
75
|
+
branch('belief', belief.id, { beliefUpdates: selectedArray('beliefUpdates', 'beliefId', belief.id, { confidence: { anyOf: confidence } }) });
|
|
76
|
+
}
|
|
77
|
+
for (const id of properties.beliefsToAppend.items.properties.id.enum) {
|
|
78
|
+
branch('belief', id, { beliefsToAppend: selectedArray('beliefsToAppend', 'id', id) });
|
|
79
|
+
}
|
|
80
|
+
for (const id of properties.relationshipDeltas.items.properties.targetActorId.enum) {
|
|
81
|
+
branch('relationship', id, { relationshipDeltas: selectedArray('relationshipDeltas', 'targetActorId', id) });
|
|
82
|
+
}
|
|
83
|
+
return { type: 'object', additionalProperties: false, required: ['consequence'], properties: { consequence: { anyOf: branches } }, 'x-ztc-compact-keys': true };
|
|
84
|
+
}
|
|
85
|
+
/** Offer one optional slot per already-permitted relationship target. */
|
|
86
|
+
export function keyedActorResponseSchema(schema) {
|
|
87
|
+
const result = structuredClone(schema);
|
|
88
|
+
const envelope = result.properties.consequence ?? result;
|
|
89
|
+
const update = envelope.properties.agentUpdate.anyOf[0];
|
|
90
|
+
const entries = update.properties.relationshipDeltas.items.anyOf ?? [];
|
|
91
|
+
update.properties.relationshipDeltas = { type: 'object', additionalProperties: false, required: [],
|
|
92
|
+
properties: Object.fromEntries(entries.map(entry => [entry.properties.targetActorId.const, entry])),
|
|
93
|
+
};
|
|
94
|
+
result['x-ztc-keyed-relationships'] = 2;
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
/** Move explicit wire witnesses into their canonical update without changing authored values. */
|
|
98
|
+
export function normalizeDynamicActorResponse(value, version, binding) {
|
|
99
|
+
function invalid() { throw new SimulationInputError('input_resolution_invalid', 'Actor receipt wire version or typed witness is invalid'); }
|
|
100
|
+
if (![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].includes(version))
|
|
101
|
+
invalid();
|
|
102
|
+
const object = (item) => item !== null && typeof item === 'object' && !Array.isArray(item);
|
|
103
|
+
const envelope = structuredClone(value);
|
|
104
|
+
if (binding !== undefined) {
|
|
105
|
+
const consequence = envelope.consequence;
|
|
106
|
+
if (binding.version !== 3 || ![8, 9, 11].includes(version) || !object(consequence)
|
|
107
|
+
|| consequence.receiptVersion !== 3 || !Array.isArray(consequence.inputResolutions)
|
|
108
|
+
|| binding.inputIds.length === 0 || new Set(binding.inputIds).size !== binding.inputIds.length)
|
|
109
|
+
invalid();
|
|
110
|
+
const sources = [...binding.sourceActionIds, ...(binding.sourceAdjudicationProposalIds ?? [])];
|
|
111
|
+
if (new Set(sources).size !== sources.length || sources.some(id => binding.inputIds.includes(id)))
|
|
112
|
+
invalid();
|
|
113
|
+
const results = consequence.inputResolutions;
|
|
114
|
+
if (results.length !== binding.inputIds.length || new Set(results.map(result => object(result) ? result.inputId : null)).size !== binding.inputIds.length)
|
|
115
|
+
invalid();
|
|
116
|
+
const sameIds = (actual, expected) => Array.isArray(actual)
|
|
117
|
+
&& actual.every(id => typeof id === 'string') && isDeepStrictEqual([...actual].sort(), [...expected].sort());
|
|
118
|
+
const update = consequence.agentUpdate;
|
|
119
|
+
if (update !== null && (!object(update) || update.actorId !== binding.actorId
|
|
120
|
+
|| (update.sourceActionIds !== undefined && !sameIds(update.sourceActionIds, binding.sourceActionIds))
|
|
121
|
+
|| (update.sourceAdjudicationProposalIds !== undefined && !sameIds(update.sourceAdjudicationProposalIds, binding.sourceAdjudicationProposalIds ?? []))))
|
|
122
|
+
invalid();
|
|
123
|
+
for (const result of results) {
|
|
124
|
+
if (!object(result) || result.actorId !== binding.actorId || result.revision !== binding.revision
|
|
125
|
+
|| typeof result.inputId !== 'string' || !binding.inputIds.includes(result.inputId) || Object.hasOwn(result, 'causeIds'))
|
|
126
|
+
invalid();
|
|
127
|
+
result.causeIds = result.change === null ? [result.inputId] : [result.inputId, ...sources];
|
|
128
|
+
}
|
|
129
|
+
consequence.receiptVersion = 2;
|
|
130
|
+
}
|
|
131
|
+
if (version === 10 || version === 11) {
|
|
132
|
+
const body = version === 11 ? envelope.consequence : envelope;
|
|
133
|
+
if (!object(body))
|
|
134
|
+
invalid();
|
|
135
|
+
const update = body.agentUpdate;
|
|
136
|
+
if (object(update) && Object.hasOwn(update, 'relationshipDeltas')) {
|
|
137
|
+
const slots = update.relationshipDeltas;
|
|
138
|
+
if (!object(slots))
|
|
139
|
+
invalid();
|
|
140
|
+
update.relationshipDeltas = Object.entries(slots).flatMap(([targetActorId, delta]) => {
|
|
141
|
+
if (delta === null)
|
|
142
|
+
return [];
|
|
143
|
+
if (!object(delta) || delta.targetActorId !== targetActorId)
|
|
144
|
+
invalid();
|
|
145
|
+
return [delta];
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
version = version === 10 ? 7 : 9;
|
|
149
|
+
}
|
|
150
|
+
if (version !== 6 && version !== 8 && version !== 9) {
|
|
151
|
+
if (Object.hasOwn(envelope, 'receiptVersion') || (object(envelope.consequence) && Object.hasOwn(envelope.consequence, 'receiptVersion')))
|
|
152
|
+
invalid();
|
|
153
|
+
return envelope;
|
|
154
|
+
}
|
|
155
|
+
const consequence = envelope.consequence;
|
|
156
|
+
if (Object.keys(envelope).length !== 1 || !object(consequence) || consequence.receiptVersion !== 2
|
|
157
|
+
|| Object.keys(consequence).sort().join(',') !== 'agentUpdate,inputResolutions,receiptVersion'
|
|
158
|
+
|| !Array.isArray(consequence.inputResolutions) || (consequence.agentUpdate !== null && !object(consequence.agentUpdate)))
|
|
159
|
+
invalid();
|
|
160
|
+
let update = consequence.agentUpdate;
|
|
161
|
+
const pending = new Map();
|
|
162
|
+
for (const result of consequence.inputResolutions) {
|
|
163
|
+
if (!object(result))
|
|
164
|
+
invalid();
|
|
165
|
+
const change = result.change;
|
|
166
|
+
if (change === null)
|
|
167
|
+
continue;
|
|
168
|
+
if (!object(change) || typeof result.actorId !== 'string')
|
|
169
|
+
invalid();
|
|
170
|
+
const fields = change.kind === 'intent' ? ['nextIntent'] : change.kind === 'belief' ? ['beliefUpdate', 'beliefToAppend']
|
|
171
|
+
: change.kind === 'relationship' ? ['relationshipDelta'] : invalid();
|
|
172
|
+
const present = fields.filter(field => Object.hasOwn(change, field));
|
|
173
|
+
if (present.length !== 1 || Object.keys(change).length !== 3 || typeof change.recordId !== 'string')
|
|
174
|
+
invalid();
|
|
175
|
+
update ??= { actorId: result.actorId };
|
|
176
|
+
if (update.actorId !== result.actorId)
|
|
177
|
+
invalid();
|
|
178
|
+
const field = present[0];
|
|
179
|
+
const authored = change[field];
|
|
180
|
+
if (field === 'nextIntent') {
|
|
181
|
+
if (authored !== null && !object(authored))
|
|
182
|
+
invalid();
|
|
183
|
+
if (version === 9) {
|
|
184
|
+
if (authored !== null && !intentSchema.safeParse(authored).success)
|
|
185
|
+
invalid();
|
|
186
|
+
if (Object.hasOwn(update, field)) {
|
|
187
|
+
const canonical = update[field];
|
|
188
|
+
if (canonical !== null && !intentSchema.safeParse(canonical).success)
|
|
189
|
+
invalid();
|
|
190
|
+
const actionFields = (intent) => intent === null ? null
|
|
191
|
+
: Object.fromEntries(Object.entries(intent).filter(([key]) => key !== 'summary'));
|
|
192
|
+
if (!isDeepStrictEqual(actionFields(canonical), actionFields(authored)))
|
|
193
|
+
invalid();
|
|
194
|
+
}
|
|
195
|
+
else
|
|
196
|
+
update[field] = authored;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
if (Object.hasOwn(update, field) && !isDeepStrictEqual(update[field], authored))
|
|
200
|
+
invalid();
|
|
201
|
+
update[field] = authored;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
if (!object(authored))
|
|
206
|
+
invalid();
|
|
207
|
+
const [target, idField] = field === 'beliefUpdate' ? ['beliefUpdates', 'beliefId']
|
|
208
|
+
: field === 'beliefToAppend' ? ['beliefsToAppend', 'id'] : ['relationshipDeltas', 'targetActorId'];
|
|
209
|
+
const id = authored[idField];
|
|
210
|
+
if (typeof id !== 'string' || id !== change.recordId)
|
|
211
|
+
invalid();
|
|
212
|
+
const values = pending.get(target) ?? new Map();
|
|
213
|
+
const prior = values.get(id);
|
|
214
|
+
if (prior !== undefined && !isDeepStrictEqual(prior, authored))
|
|
215
|
+
invalid();
|
|
216
|
+
values.set(id, authored);
|
|
217
|
+
pending.set(target, values);
|
|
218
|
+
}
|
|
219
|
+
result.change = { kind: change.kind, recordId: change.recordId };
|
|
220
|
+
}
|
|
221
|
+
for (const [target, values] of pending) {
|
|
222
|
+
const idField = target === 'beliefUpdates' ? 'beliefId' : target === 'beliefsToAppend' ? 'id' : 'targetActorId';
|
|
223
|
+
const prior = update[target];
|
|
224
|
+
if (prior !== undefined && !Array.isArray(prior))
|
|
225
|
+
invalid();
|
|
226
|
+
const merged = (prior ?? []);
|
|
227
|
+
for (const [id, authored] of [...values].sort(([left], [right]) => left.localeCompare(right))) {
|
|
228
|
+
const matching = merged.filter(item => object(item) && item[idField] === id);
|
|
229
|
+
if (matching.length > 1 || (matching.length === 1 && !isDeepStrictEqual(matching[0], authored)))
|
|
230
|
+
invalid();
|
|
231
|
+
if (matching.length === 0)
|
|
232
|
+
merged.push(authored);
|
|
233
|
+
}
|
|
234
|
+
update[target] = merged;
|
|
235
|
+
}
|
|
236
|
+
if (update !== null) {
|
|
237
|
+
const existing = update.beliefUpdates;
|
|
238
|
+
const appended = update.beliefsToAppend;
|
|
239
|
+
if (Array.isArray(existing) && Array.isArray(appended) && existing.some(item => object(item)
|
|
240
|
+
&& appended.some(other => object(other) && item.beliefId === other.id)))
|
|
241
|
+
invalid();
|
|
242
|
+
}
|
|
243
|
+
consequence.agentUpdate = update;
|
|
244
|
+
delete consequence.receiptVersion;
|
|
245
|
+
return envelope;
|
|
246
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SimulationDynamicHistoryEntryV1, SimulationPersistentAgentStateV1 } from '../plugin/simulation_contract.js';
|
|
2
|
+
import type { SimulationInterventionResolutionV1 } from '../plugin/simulation_interventions.js';
|
|
3
|
+
/** Check the claimed change or a permitted no-change decision; canonical transition validation owns the world. */
|
|
4
|
+
export declare function hasMaterialInterventionChange(before: SimulationPersistentAgentStateV1, entry: SimulationDynamicHistoryEntryV1, result: SimulationInterventionResolutionV1, after?: SimulationPersistentAgentStateV1, agencyVersion?: 'emergent-v1', beliefEvidenceHistory?: Readonly<Record<string, readonly string[]>>): boolean;
|