@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,215 @@
|
|
|
1
|
+
import { LivingWorldError } from './types.js';
|
|
2
|
+
export const LIVING_INPUT_BUDGETS = { attempt: 16_000, world: 16_000, 'speech-impact': 16_000,
|
|
3
|
+
reaction: 32_000, reply: 32_000, plan: 14_000, 'message-reply': 16_000, epilogue: 12_000, define: 12_000 };
|
|
4
|
+
export const LIVING_RESPONSE_SCHEMA_BUDGET = 96_000;
|
|
5
|
+
export const MODEL_VIEW_NOTE = 'Selected context: other people and facts remain in the world. Descriptions may be excerpts. Use only the IDs shown; omission does not mean absence.';
|
|
6
|
+
export function assertLivingModelCall(call) {
|
|
7
|
+
const size = JSON.stringify(call.input).length;
|
|
8
|
+
const budget = LIVING_INPUT_BUDGETS[call.phase];
|
|
9
|
+
if (size > budget)
|
|
10
|
+
throw new LivingWorldError('inference-invalid', `${call.phase} input ${size} exceeds ${budget} characters`);
|
|
11
|
+
const schemaSize = JSON.stringify(call.responseSchema).length;
|
|
12
|
+
if (schemaSize > LIVING_RESPONSE_SCHEMA_BUDGET)
|
|
13
|
+
throw new LivingWorldError('inference-invalid', `${call.phase} schema ${schemaSize} exceeds ${LIVING_RESPONSE_SCHEMA_BUDGET} characters`);
|
|
14
|
+
}
|
|
15
|
+
// These fields describe the decision being made. Background records may yield to them.
|
|
16
|
+
const decisionFields = new Set(['attempt', 'words', 'happening', 'happened', 'message', 'duePlan', 'request']);
|
|
17
|
+
function isDecisionField(input, path) {
|
|
18
|
+
return decisionFields.has(path) || path === 'plan' && input.phase === 'plan' && input.duePlan == null;
|
|
19
|
+
}
|
|
20
|
+
export function decisionInputBudget(input, ordinaryBudget) {
|
|
21
|
+
const phase = input.phase ?? (input.words === undefined ? undefined : 'speech-impact');
|
|
22
|
+
const maximum = LIVING_INPUT_BUDGETS[phase] ?? ordinaryBudget;
|
|
23
|
+
const decision = Object.fromEntries(Object.entries(input).filter(([key]) => isDecisionField(input, key)));
|
|
24
|
+
// Reserve a small background window even when valid current text needs six JSON characters per unit.
|
|
25
|
+
return Math.min(maximum, Math.max(ordinaryBudget, JSON.stringify(decision).length + 4_000));
|
|
26
|
+
}
|
|
27
|
+
const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
|
|
28
|
+
const list = (value) => Array.isArray(value) ? value : [];
|
|
29
|
+
const personPaths = [['scene', 'people'], ['world', 'people'], ['world', 'elsewhere'], ['world', 'away'], ['directory', 'people'], ['listeners'], ['elsewhere']];
|
|
30
|
+
export const MODEL_PEOPLE_LIMIT = 24;
|
|
31
|
+
function at(input, path) {
|
|
32
|
+
let value = input;
|
|
33
|
+
for (const key of path)
|
|
34
|
+
value = object(value)?.[key];
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
// Select by typed references only, after the role has projected its known people.
|
|
38
|
+
export function selectModelPeople(input, close) {
|
|
39
|
+
const candidates = new Map();
|
|
40
|
+
for (const path of personPaths)
|
|
41
|
+
for (const item of list(at(input, path))) {
|
|
42
|
+
const card = object(item);
|
|
43
|
+
if (typeof card?.id === 'string')
|
|
44
|
+
candidates.set(card.id, card);
|
|
45
|
+
}
|
|
46
|
+
const self = object(input.actor)?.id ?? object(input.identity)?.id;
|
|
47
|
+
const explicit = [self, object(input.happened)?.byId, object(input.message)?.fromId, object(input.duePlan)?.targetId,
|
|
48
|
+
object(input.plan)?.targetId, object(input.about)?.id];
|
|
49
|
+
const priority = [...new Set([...close, ...explicit.filter((value) => typeof value === 'string')])]
|
|
50
|
+
.filter(id => candidates.has(id)).slice(0, MODEL_PEOPLE_LIMIT);
|
|
51
|
+
const selected = new Set([...priority, ...candidates.keys()].slice(0, MODEL_PEOPLE_LIMIT));
|
|
52
|
+
if (selected.size < candidates.size) {
|
|
53
|
+
input.view = MODEL_VIEW_NOTE;
|
|
54
|
+
for (const path of personPaths) {
|
|
55
|
+
const parent = path.length === 1 ? input : object(input[path[0]]);
|
|
56
|
+
if (parent && Array.isArray(parent[path.at(-1)]))
|
|
57
|
+
parent[path.at(-1)] = list(parent[path.at(-1)]).filter(item => selected.has(String(object(item)?.id)));
|
|
58
|
+
}
|
|
59
|
+
if (Array.isArray(input.relationships))
|
|
60
|
+
input.relationships = input.relationships.filter(item => selected.has(String(object(item)?.id)));
|
|
61
|
+
const balances = object(input.money);
|
|
62
|
+
if (balances && Array.isArray(balances.balances))
|
|
63
|
+
balances.balances = balances.balances.filter(item => {
|
|
64
|
+
const id = String(object(item)?.id);
|
|
65
|
+
return !candidates.has(id) || selected.has(id);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const happened = object(input.happened);
|
|
69
|
+
if (happened && Array.isArray(happened.to)) {
|
|
70
|
+
const names = new Set([...selected].map(id => candidates.get(id).name));
|
|
71
|
+
names.add(object(input.identity)?.name);
|
|
72
|
+
let remaining = 3000;
|
|
73
|
+
const recipients = happened.to.filter(name => {
|
|
74
|
+
const size = JSON.stringify(name).length + 1;
|
|
75
|
+
if (!names.has(name) || size > remaining)
|
|
76
|
+
return false;
|
|
77
|
+
remaining -= size;
|
|
78
|
+
return true;
|
|
79
|
+
});
|
|
80
|
+
if (recipients.length < happened.to.length) {
|
|
81
|
+
input.view = MODEL_VIEW_NOTE;
|
|
82
|
+
happened.otherAddresseeCount = happened.to.length - recipients.length;
|
|
83
|
+
happened.to = recipients;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return new Set(priority);
|
|
87
|
+
}
|
|
88
|
+
export function syncModelPeople(input) {
|
|
89
|
+
const people = object(input.scene)?.people;
|
|
90
|
+
if (!Array.isArray(people))
|
|
91
|
+
return;
|
|
92
|
+
const ids = new Set(people.map(person => object(person)?.id));
|
|
93
|
+
for (const key of ['possiblePerceiverIds', 'presentCharacterIds'])
|
|
94
|
+
if (Array.isArray(input[key]))
|
|
95
|
+
input[key] = input[key].filter(id => ids.has(id));
|
|
96
|
+
}
|
|
97
|
+
// Bound the serialized spelling too: a valid control character can take six JSON characters.
|
|
98
|
+
export function modelTextExcerpt(text, limit = 300) {
|
|
99
|
+
let end = Math.min(text.length, limit);
|
|
100
|
+
while (end > 0 && JSON.stringify(text.slice(0, end)).length > limit + 2)
|
|
101
|
+
end -= 1;
|
|
102
|
+
const last = text.charCodeAt(end - 1);
|
|
103
|
+
if (last >= 0xd800 && last <= 0xdbff)
|
|
104
|
+
end -= 1;
|
|
105
|
+
return text.slice(0, end);
|
|
106
|
+
}
|
|
107
|
+
// When ordinary relevance trimming is insufficient, shorten descriptions, then shed whole optional
|
|
108
|
+
// records. IDs remain exact, and stored words stay whole. The view notice marks excerpts. The things
|
|
109
|
+
// a decision is about give way only after every other record that may.
|
|
110
|
+
export function compactModelInput(input, budget, priority, maximum = budget, things = new Set()) {
|
|
111
|
+
if (JSON.stringify(input).length <= budget)
|
|
112
|
+
return;
|
|
113
|
+
input.view = MODEL_VIEW_NOTE;
|
|
114
|
+
const shorten = (value, path, limit) => {
|
|
115
|
+
if (isDecisionField(input, path) || path === 'phase' || path === 'view')
|
|
116
|
+
return value;
|
|
117
|
+
if (typeof value === 'string') {
|
|
118
|
+
const key = path.slice(path.lastIndexOf('/') + 1);
|
|
119
|
+
return key === 'id' || key.endsWith('Id') || key.endsWith('Ids') ? value : modelTextExcerpt(value, limit);
|
|
120
|
+
}
|
|
121
|
+
if (Array.isArray(value))
|
|
122
|
+
return value.map((item, index) => shorten(item, `${path}/${index}`, limit));
|
|
123
|
+
const record = object(value);
|
|
124
|
+
return record ? Object.fromEntries(Object.entries(record).map(([key, child]) => [key, shorten(child, path ? `${path}/${key}` : key, limit)])) : value;
|
|
125
|
+
};
|
|
126
|
+
Object.assign(input, shorten(input, '', 300));
|
|
127
|
+
let shielded = things;
|
|
128
|
+
while (JSON.stringify(input).length > budget) {
|
|
129
|
+
let choice;
|
|
130
|
+
const visit = (value, path) => {
|
|
131
|
+
if (isDecisionField(input, path))
|
|
132
|
+
return;
|
|
133
|
+
if (Array.isArray(value)) {
|
|
134
|
+
// Keep a focused person's card and a kept thing's; their optional descriptions can still give way below.
|
|
135
|
+
const people = personPaths.some(parts => parts.join('/') === path);
|
|
136
|
+
const kept = (item) => (people ? priority : shielded).has(String(object(item)?.id));
|
|
137
|
+
let index = value.length - 1;
|
|
138
|
+
while (index >= 0 && kept(value[index]))
|
|
139
|
+
index -= 1;
|
|
140
|
+
if (index >= 0) {
|
|
141
|
+
const size = JSON.stringify(value[index]).length;
|
|
142
|
+
if (!choice || size > choice.size)
|
|
143
|
+
choice = { array: value, index, size };
|
|
144
|
+
}
|
|
145
|
+
// A kind's slots and rules stay together: omit a whole kind rather than change its contract.
|
|
146
|
+
if (path !== 'kinds')
|
|
147
|
+
value.forEach((item, index) => visit(item, `${path}/${index}`));
|
|
148
|
+
}
|
|
149
|
+
else if (object(value))
|
|
150
|
+
for (const [key, child] of Object.entries(value))
|
|
151
|
+
visit(child, path ? `${path}/${key}` : key);
|
|
152
|
+
};
|
|
153
|
+
visit(input, '');
|
|
154
|
+
if (!choice && shielded.size > 0) {
|
|
155
|
+
shielded = new Set();
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (!choice) {
|
|
159
|
+
const removable = [...priority].slice(3).reverse().find(id => personPaths.some(path => list(at(input, path)).some(item => object(item)?.id === id)));
|
|
160
|
+
if (removable === undefined)
|
|
161
|
+
break;
|
|
162
|
+
for (const path of personPaths) {
|
|
163
|
+
const parent = path.length === 1 ? input : object(input[path[0]]);
|
|
164
|
+
if (parent && Array.isArray(parent[path.at(-1)]))
|
|
165
|
+
parent[path.at(-1)] = list(parent[path.at(-1)]).filter(item => object(item)?.id !== removable);
|
|
166
|
+
}
|
|
167
|
+
syncModelPeople(input);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
choice.array.splice(choice.index, 1);
|
|
171
|
+
syncModelPeople(input);
|
|
172
|
+
}
|
|
173
|
+
if (JSON.stringify(input).length > maximum && !isDecisionField(input, 'plan'))
|
|
174
|
+
delete input.plan;
|
|
175
|
+
// Kept cards can still hold escaped text at six JSON characters per unit; their words give way, never the decision.
|
|
176
|
+
for (const limit of [120, 40, 16])
|
|
177
|
+
if (JSON.stringify(input).length > maximum)
|
|
178
|
+
Object.assign(input, shorten(input, '', limit));
|
|
179
|
+
if (JSON.stringify(input).length > maximum)
|
|
180
|
+
throw new LivingWorldError('inference-invalid', 'The selected model input exceeds its character budget');
|
|
181
|
+
}
|
|
182
|
+
// A model can ask for exact identities outside the selected view before proposing effects.
|
|
183
|
+
export function withContextLookup(schema, input) {
|
|
184
|
+
if (input.view !== MODEL_VIEW_NOTE)
|
|
185
|
+
return schema;
|
|
186
|
+
return { type: 'object', additionalProperties: false, required: ['contextRequest'], properties: { contextRequest: {
|
|
187
|
+
type: 'array', maxItems: 2, items: { type: 'string', minLength: 1, maxLength: 200 },
|
|
188
|
+
description: 'Exact names or IDs of at most two people needed for this decision but omitted from the shown cards. Return an empty array when the shown people suffice.',
|
|
189
|
+
} } };
|
|
190
|
+
}
|
|
191
|
+
// The selector reads the current decision and admitted identity cards, not unrelated world history.
|
|
192
|
+
export function contextSelectionInput(input) {
|
|
193
|
+
const selected = Object.fromEntries(['phase', 'clock', 'clockMinutes', 'attempt', 'happening', 'happened', 'words', 'duePlan', 'message', 'plan', 'goals', 'view']
|
|
194
|
+
.filter(key => input[key] !== undefined).map(key => [key, input[key]]));
|
|
195
|
+
for (const key of ['actor', 'identity', 'speaker']) {
|
|
196
|
+
const card = object(input[key]);
|
|
197
|
+
if (card)
|
|
198
|
+
selected[key] = { ...(card.id === undefined ? {} : { id: card.id }), name: card.name };
|
|
199
|
+
}
|
|
200
|
+
for (const path of personPaths) {
|
|
201
|
+
const cards = at(input, path);
|
|
202
|
+
if (!Array.isArray(cards))
|
|
203
|
+
continue;
|
|
204
|
+
const minimal = cards.map(value => { const card = object(value); return { id: card.id, name: card.name }; });
|
|
205
|
+
if (path.length === 1)
|
|
206
|
+
selected[path[0]] = minimal;
|
|
207
|
+
else {
|
|
208
|
+
const parent = (selected[path[0]] ??= {});
|
|
209
|
+
parent[path[1]] = minimal;
|
|
210
|
+
if (path[0] === 'scene')
|
|
211
|
+
parent.id = object(input.scene)?.id;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return selected;
|
|
215
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const scheduleIntentSchema: z.ZodString;
|
|
3
|
+
export declare const levelSchema: z.ZodEnum<{
|
|
4
|
+
none: "none";
|
|
5
|
+
low: "low";
|
|
6
|
+
medium: "medium";
|
|
7
|
+
high: "high";
|
|
8
|
+
}>;
|
|
9
|
+
export declare const propertyValueSchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodEnum<{
|
|
10
|
+
none: "none";
|
|
11
|
+
low: "low";
|
|
12
|
+
medium: "medium";
|
|
13
|
+
high: "high";
|
|
14
|
+
}>, z.ZodString]>;
|
|
15
|
+
export declare const propertyDefinitionSchema: z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
type: z.ZodEnum<{
|
|
18
|
+
number: "number";
|
|
19
|
+
id: "id";
|
|
20
|
+
flag: "flag";
|
|
21
|
+
text: "text";
|
|
22
|
+
level: "level";
|
|
23
|
+
time: "time";
|
|
24
|
+
}>;
|
|
25
|
+
requiredOnCreate: z.ZodOptional<z.ZodBoolean>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export declare const relationDefinitionSchema: z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
targetKindId: z.ZodString;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export declare const mechanicSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
32
|
+
kind: z.ZodLiteral<"spread">;
|
|
33
|
+
propertyId: z.ZodString;
|
|
34
|
+
relationId: z.ZodString;
|
|
35
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
36
|
+
kind: z.ZodLiteral<"signal">;
|
|
37
|
+
propertyId: z.ZodString;
|
|
38
|
+
relationId: z.ZodString;
|
|
39
|
+
channel: z.ZodString;
|
|
40
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
+
kind: z.ZodLiteral<"change">;
|
|
42
|
+
propertyId: z.ZodString;
|
|
43
|
+
deltaPerMinute: z.ZodNumber;
|
|
44
|
+
onEvent: z.ZodOptional<z.ZodObject<{
|
|
45
|
+
kind: z.ZodLiteral<"move">;
|
|
46
|
+
subjectPropertyId: z.ZodString;
|
|
47
|
+
value: z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodEnum<{
|
|
48
|
+
none: "none";
|
|
49
|
+
low: "low";
|
|
50
|
+
medium: "medium";
|
|
51
|
+
high: "high";
|
|
52
|
+
}>, z.ZodString]>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
54
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
55
|
+
kind: z.ZodLiteral<"trigger">;
|
|
56
|
+
propertyId: z.ZodString;
|
|
57
|
+
threshold: z.ZodNumber;
|
|
58
|
+
direction: z.ZodEnum<{
|
|
59
|
+
"at-least": "at-least";
|
|
60
|
+
"at-most": "at-most";
|
|
61
|
+
}>;
|
|
62
|
+
intent: z.ZodString;
|
|
63
|
+
delayMinutes: z.ZodNumber;
|
|
64
|
+
minImportance: z.ZodOptional<z.ZodNumber>;
|
|
65
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
66
|
+
kind: z.ZodLiteral<"gate">;
|
|
67
|
+
propertyId: z.ZodString;
|
|
68
|
+
subjectPropertyId: z.ZodString;
|
|
69
|
+
atLeast: z.ZodOptional<z.ZodEnum<{
|
|
70
|
+
none: "none";
|
|
71
|
+
low: "low";
|
|
72
|
+
medium: "medium";
|
|
73
|
+
high: "high";
|
|
74
|
+
}>>;
|
|
75
|
+
blockedActionKinds: z.ZodArray<z.ZodString>;
|
|
76
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
77
|
+
kind: z.ZodLiteral<"norm">;
|
|
78
|
+
actionKind: z.ZodString;
|
|
79
|
+
roleId: z.ZodNullable<z.ZodString>;
|
|
80
|
+
forbidden: z.ZodBoolean;
|
|
81
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
82
|
+
kind: z.ZodLiteral<"authority">;
|
|
83
|
+
roleId: z.ZodString;
|
|
84
|
+
relationId: z.ZodNullable<z.ZodString>;
|
|
85
|
+
propertyId: z.ZodNullable<z.ZodString>;
|
|
86
|
+
}, z.core.$strip>], "kind">;
|
|
87
|
+
export declare const kindDefinitionSchema: z.ZodObject<{
|
|
88
|
+
id: z.ZodString;
|
|
89
|
+
name: z.ZodString;
|
|
90
|
+
meaning: z.ZodString;
|
|
91
|
+
properties: z.ZodArray<z.ZodObject<{
|
|
92
|
+
id: z.ZodString;
|
|
93
|
+
type: z.ZodEnum<{
|
|
94
|
+
number: "number";
|
|
95
|
+
id: "id";
|
|
96
|
+
flag: "flag";
|
|
97
|
+
text: "text";
|
|
98
|
+
level: "level";
|
|
99
|
+
time: "time";
|
|
100
|
+
}>;
|
|
101
|
+
requiredOnCreate: z.ZodOptional<z.ZodBoolean>;
|
|
102
|
+
}, z.core.$strip>>;
|
|
103
|
+
relations: z.ZodArray<z.ZodObject<{
|
|
104
|
+
id: z.ZodString;
|
|
105
|
+
targetKindId: z.ZodString;
|
|
106
|
+
}, z.core.$strip>>;
|
|
107
|
+
mechanics: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
108
|
+
kind: z.ZodLiteral<"spread">;
|
|
109
|
+
propertyId: z.ZodString;
|
|
110
|
+
relationId: z.ZodString;
|
|
111
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
112
|
+
kind: z.ZodLiteral<"signal">;
|
|
113
|
+
propertyId: z.ZodString;
|
|
114
|
+
relationId: z.ZodString;
|
|
115
|
+
channel: z.ZodString;
|
|
116
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
117
|
+
kind: z.ZodLiteral<"change">;
|
|
118
|
+
propertyId: z.ZodString;
|
|
119
|
+
deltaPerMinute: z.ZodNumber;
|
|
120
|
+
onEvent: z.ZodOptional<z.ZodObject<{
|
|
121
|
+
kind: z.ZodLiteral<"move">;
|
|
122
|
+
subjectPropertyId: z.ZodString;
|
|
123
|
+
value: z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodEnum<{
|
|
124
|
+
none: "none";
|
|
125
|
+
low: "low";
|
|
126
|
+
medium: "medium";
|
|
127
|
+
high: "high";
|
|
128
|
+
}>, z.ZodString]>;
|
|
129
|
+
}, z.core.$strip>>;
|
|
130
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
131
|
+
kind: z.ZodLiteral<"trigger">;
|
|
132
|
+
propertyId: z.ZodString;
|
|
133
|
+
threshold: z.ZodNumber;
|
|
134
|
+
direction: z.ZodEnum<{
|
|
135
|
+
"at-least": "at-least";
|
|
136
|
+
"at-most": "at-most";
|
|
137
|
+
}>;
|
|
138
|
+
intent: z.ZodString;
|
|
139
|
+
delayMinutes: z.ZodNumber;
|
|
140
|
+
minImportance: z.ZodOptional<z.ZodNumber>;
|
|
141
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
142
|
+
kind: z.ZodLiteral<"gate">;
|
|
143
|
+
propertyId: z.ZodString;
|
|
144
|
+
subjectPropertyId: z.ZodString;
|
|
145
|
+
atLeast: z.ZodOptional<z.ZodEnum<{
|
|
146
|
+
none: "none";
|
|
147
|
+
low: "low";
|
|
148
|
+
medium: "medium";
|
|
149
|
+
high: "high";
|
|
150
|
+
}>>;
|
|
151
|
+
blockedActionKinds: z.ZodArray<z.ZodString>;
|
|
152
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
153
|
+
kind: z.ZodLiteral<"norm">;
|
|
154
|
+
actionKind: z.ZodString;
|
|
155
|
+
roleId: z.ZodNullable<z.ZodString>;
|
|
156
|
+
forbidden: z.ZodBoolean;
|
|
157
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
158
|
+
kind: z.ZodLiteral<"authority">;
|
|
159
|
+
roleId: z.ZodString;
|
|
160
|
+
relationId: z.ZodNullable<z.ZodString>;
|
|
161
|
+
propertyId: z.ZodNullable<z.ZodString>;
|
|
162
|
+
}, z.core.$strip>], "kind">>;
|
|
163
|
+
}, z.core.$strip>;
|
|
164
|
+
export type LivingKindDefinition = z.infer<typeof kindDefinitionSchema>;
|
|
165
|
+
export declare const kindRequestSchema: z.ZodObject<{
|
|
166
|
+
id: z.ZodString;
|
|
167
|
+
name: z.ZodString;
|
|
168
|
+
meaning: z.ZodString;
|
|
169
|
+
}, z.core.$strip>;
|
|
170
|
+
export declare const slotSchema: z.ZodObject<{
|
|
171
|
+
value: z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodEnum<{
|
|
172
|
+
none: "none";
|
|
173
|
+
low: "low";
|
|
174
|
+
medium: "medium";
|
|
175
|
+
high: "high";
|
|
176
|
+
}>, z.ZodString]>;
|
|
177
|
+
changedSeq: z.ZodNumber;
|
|
178
|
+
previousSeq: z.ZodNullable<z.ZodNumber>;
|
|
179
|
+
knownTo: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
180
|
+
updatedAt: z.ZodDefault<z.ZodNumber>;
|
|
181
|
+
}, z.core.$strip>;
|
|
182
|
+
export declare const relationSlotSchema: z.ZodObject<{
|
|
183
|
+
targetId: z.ZodString;
|
|
184
|
+
changedSeq: z.ZodNumber;
|
|
185
|
+
previousSeq: z.ZodNullable<z.ZodNumber>;
|
|
186
|
+
knownTo: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
187
|
+
}, z.core.$strip>;
|
|
188
|
+
export declare const entitySchema: z.ZodObject<{
|
|
189
|
+
id: z.ZodString;
|
|
190
|
+
kindId: z.ZodString;
|
|
191
|
+
name: z.ZodString;
|
|
192
|
+
placeId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
193
|
+
paperViews: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
194
|
+
name: z.ZodString;
|
|
195
|
+
words: z.ZodNullable<z.ZodString>;
|
|
196
|
+
}, z.core.$strip>>>;
|
|
197
|
+
holderId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
198
|
+
condition: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
199
|
+
aspects: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
200
|
+
sideOrder: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
201
|
+
hidden: z.ZodOptional<z.ZodLiteral<true>>;
|
|
202
|
+
members: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
203
|
+
ballots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
204
|
+
yes: "yes";
|
|
205
|
+
no: "no";
|
|
206
|
+
abstain: "abstain";
|
|
207
|
+
}>>>;
|
|
208
|
+
result: z.ZodOptional<z.ZodEnum<{
|
|
209
|
+
failed: "failed";
|
|
210
|
+
passed: "passed";
|
|
211
|
+
lapsed: "lapsed";
|
|
212
|
+
}>>;
|
|
213
|
+
settles: z.ZodOptional<z.ZodString>;
|
|
214
|
+
transfers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
215
|
+
fromId: z.ZodNullable<z.ZodString>;
|
|
216
|
+
toId: z.ZodNullable<z.ZodString>;
|
|
217
|
+
amount: z.ZodNumber;
|
|
218
|
+
}, z.core.$strip>>>;
|
|
219
|
+
properties: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
220
|
+
value: z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodEnum<{
|
|
221
|
+
none: "none";
|
|
222
|
+
low: "low";
|
|
223
|
+
medium: "medium";
|
|
224
|
+
high: "high";
|
|
225
|
+
}>, z.ZodString]>;
|
|
226
|
+
changedSeq: z.ZodNumber;
|
|
227
|
+
previousSeq: z.ZodNullable<z.ZodNumber>;
|
|
228
|
+
knownTo: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
229
|
+
updatedAt: z.ZodDefault<z.ZodNumber>;
|
|
230
|
+
}, z.core.$strip>>;
|
|
231
|
+
relations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
232
|
+
targetId: z.ZodString;
|
|
233
|
+
changedSeq: z.ZodNumber;
|
|
234
|
+
previousSeq: z.ZodNullable<z.ZodNumber>;
|
|
235
|
+
knownTo: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
236
|
+
}, z.core.$strip>>;
|
|
237
|
+
introducedSeq: z.ZodNumber;
|
|
238
|
+
knownTo: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
239
|
+
}, z.core.$strip>;
|
|
240
|
+
export type LivingEntity = z.infer<typeof entitySchema>;
|
|
241
|
+
export declare const changeSchema: z.ZodObject<{
|
|
242
|
+
seq: z.ZodNumber;
|
|
243
|
+
entityId: z.ZodString;
|
|
244
|
+
slotKind: z.ZodEnum<{
|
|
245
|
+
property: "property";
|
|
246
|
+
relation: "relation";
|
|
247
|
+
}>;
|
|
248
|
+
slotId: z.ZodString;
|
|
249
|
+
value: z.ZodNullable<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodEnum<{
|
|
250
|
+
none: "none";
|
|
251
|
+
low: "low";
|
|
252
|
+
medium: "medium";
|
|
253
|
+
high: "high";
|
|
254
|
+
}>, z.ZodString]>>;
|
|
255
|
+
}, z.core.$strip>;
|
|
256
|
+
export type LivingChange = z.infer<typeof changeSchema>;
|
|
257
|
+
export declare function valueMatchesType(type: z.infer<typeof propertyDefinitionSchema>['type'], value: z.infer<typeof propertyValueSchema>): boolean;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const id = z.string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/u);
|
|
3
|
+
const text = z.string().min(1).max(2000);
|
|
4
|
+
export const scheduleIntentSchema = text;
|
|
5
|
+
export const levelSchema = z.enum(['none', 'low', 'medium', 'high']);
|
|
6
|
+
export const propertyValueSchema = z.union([z.boolean(), z.number().finite(), levelSchema, z.string().min(1).max(2000)]);
|
|
7
|
+
export const propertyDefinitionSchema = z.object({
|
|
8
|
+
id,
|
|
9
|
+
// A time is a moment on the world clock, in minutes from the start of day 1.
|
|
10
|
+
type: z.enum(['flag', 'level', 'number', 'time', 'id', 'text']),
|
|
11
|
+
requiredOnCreate: z.boolean().optional(),
|
|
12
|
+
});
|
|
13
|
+
export const relationDefinitionSchema = z.object({
|
|
14
|
+
id,
|
|
15
|
+
targetKindId: id,
|
|
16
|
+
});
|
|
17
|
+
const property = id.describe('Property of this kind that the rule reads or changes.');
|
|
18
|
+
const relation = id.describe('Relation of this kind that the rule follows.');
|
|
19
|
+
const subject = id.describe('Id property naming the person or thing affected.');
|
|
20
|
+
const role = id.describe('Role id.');
|
|
21
|
+
export const mechanicSchema = z.discriminatedUnion('kind', [
|
|
22
|
+
z.object({ kind: z.literal('spread'), propertyId: property, relationId: relation }),
|
|
23
|
+
z.object({ kind: z.literal('signal'), propertyId: property, relationId: relation, channel: id.describe('Sense channel, such as sight, sound, smell, or touch.') }),
|
|
24
|
+
z.object({ kind: z.literal('change'), propertyId: property, deltaPerMinute: z.number().finite().describe('Change per minute; 0 for a change on an event.'),
|
|
25
|
+
onEvent: z.object({ kind: z.literal('move'), subjectPropertyId: subject, value: propertyValueSchema.describe('Value set when the subject moves.') }).optional()
|
|
26
|
+
.describe('Set the property when the subject moves; omit for changes over time.') }),
|
|
27
|
+
z.object({ kind: z.literal('trigger'), propertyId: property, threshold: z.number().finite().describe('Value the property must cross.'),
|
|
28
|
+
direction: z.enum(['at-least', 'at-most']).describe('Whether it fires rising to or falling to the threshold.'), intent: scheduleIntentSchema.describe('What happens when it fires.'),
|
|
29
|
+
delayMinutes: z.number().int().min(1).describe('Minutes from crossing to the happening.'), minImportance: z.number().int().min(1).max(10).optional().describe('Least importance of the happening.') }),
|
|
30
|
+
z.object({ kind: z.literal('gate'), propertyId: property, subjectPropertyId: subject, atLeast: levelSchema.optional().describe('Lowest level at which the gate holds.'),
|
|
31
|
+
blockedActionKinds: z.array(id).describe('Action kinds the subject cannot take while it holds.') }),
|
|
32
|
+
z.object({ kind: z.literal('norm'), actionKind: id.describe('Action kind the norm covers.'), roleId: role.nullable().describe('Role it applies to; null for everyone.'), forbidden: z.boolean().describe('Whether the act is forbidden.') }),
|
|
33
|
+
z.object({ kind: z.literal('authority'), roleId: role.describe('Role granted the right.'), relationId: relation.nullable().describe('Relation the role may change; null when it grants a property.'),
|
|
34
|
+
propertyId: property.nullable().describe('Property the role may change; null when it grants a relation.') }),
|
|
35
|
+
]);
|
|
36
|
+
export const kindDefinitionSchema = z.object({
|
|
37
|
+
id: id.describe('Stable id of the requested reusable kind.'),
|
|
38
|
+
name: text.describe('Short name for this kind.'),
|
|
39
|
+
meaning: text.describe('General meaning independent of one event or person.'),
|
|
40
|
+
properties: z.array(propertyDefinitionSchema).describe('Typed flags, levels, numbers, text or entity ids. Mark essential ones requiredOnCreate.'),
|
|
41
|
+
relations: z.array(relationDefinitionSchema).describe('Directed links to kinds in scope.'),
|
|
42
|
+
mechanics: z.array(mechanicSchema).describe('Automatic state changes and constraints this kind needs; else empty.'),
|
|
43
|
+
});
|
|
44
|
+
export const kindRequestSchema = z.object({ id, name: text, meaning: text });
|
|
45
|
+
export const slotSchema = z.object({
|
|
46
|
+
value: propertyValueSchema,
|
|
47
|
+
changedSeq: z.number().int().min(1),
|
|
48
|
+
previousSeq: z.number().int().min(1).nullable(),
|
|
49
|
+
knownTo: z.array(id).default([]),
|
|
50
|
+
updatedAt: z.number().int().min(0).default(0),
|
|
51
|
+
});
|
|
52
|
+
export const relationSlotSchema = z.object({
|
|
53
|
+
targetId: id,
|
|
54
|
+
changedSeq: z.number().int().min(1),
|
|
55
|
+
previousSeq: z.number().int().min(1).nullable(),
|
|
56
|
+
knownTo: z.array(id).default([]),
|
|
57
|
+
});
|
|
58
|
+
export const entitySchema = z.object({
|
|
59
|
+
id,
|
|
60
|
+
kindId: id,
|
|
61
|
+
name: text,
|
|
62
|
+
placeId: id.nullable().default(null),
|
|
63
|
+
// Last text each reader perceived survives unseen edits and erasure.
|
|
64
|
+
paperViews: z.record(id, z.object({ name: text, words: z.string().nullable() })).optional(),
|
|
65
|
+
// A thing that is somewhere can be held; it then goes wherever its holder goes.
|
|
66
|
+
holderId: id.nullable().default(null),
|
|
67
|
+
// What anyone who sees it can tell of its state, such as torn or burned; null while unremarkable.
|
|
68
|
+
condition: z.string().min(1).max(200).nullable().default(null),
|
|
69
|
+
// Each named side of the condition, in the order first set; the condition line shows them all.
|
|
70
|
+
aspects: z.record(z.string().min(1).max(40), z.string().min(1).max(200)).optional(),
|
|
71
|
+
// From engine 48, the order the sides were first set.
|
|
72
|
+
sideOrder: z.array(z.string().min(1).max(40)).max(5).optional(),
|
|
73
|
+
// A thing the world's data hides, which no one who comes to its place sees.
|
|
74
|
+
hidden: z.literal(true).optional(),
|
|
75
|
+
// A decision's members, the vote each has cast, its result once counted, and the problem it settles.
|
|
76
|
+
members: z.array(id).optional(),
|
|
77
|
+
ballots: z.record(id, z.enum(['yes', 'no', 'abstain'])).optional(),
|
|
78
|
+
result: z.enum(['passed', 'failed', 'lapsed']).optional(),
|
|
79
|
+
settles: id.optional(),
|
|
80
|
+
transfers: z.array(z.object({ fromId: id.nullable(), toId: id.nullable(), amount: z.number().positive() })).optional(),
|
|
81
|
+
properties: z.record(id, slotSchema),
|
|
82
|
+
relations: z.record(id, relationSlotSchema),
|
|
83
|
+
introducedSeq: z.number().int().min(1),
|
|
84
|
+
knownTo: z.array(id).default([]),
|
|
85
|
+
});
|
|
86
|
+
export const changeSchema = z.object({
|
|
87
|
+
seq: z.number().int().min(1),
|
|
88
|
+
entityId: id,
|
|
89
|
+
slotKind: z.enum(['property', 'relation']),
|
|
90
|
+
slotId: id,
|
|
91
|
+
value: propertyValueSchema.nullable(),
|
|
92
|
+
});
|
|
93
|
+
export function valueMatchesType(type, value) {
|
|
94
|
+
switch (type) {
|
|
95
|
+
case 'flag': return typeof value === 'boolean';
|
|
96
|
+
case 'level': return levelSchema.safeParse(value).success;
|
|
97
|
+
case 'number': return typeof value === 'number';
|
|
98
|
+
case 'time': return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
99
|
+
case 'id': return typeof value === 'string' && id.safeParse(value).success;
|
|
100
|
+
case 'text': return typeof value === 'string';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LivingEvent, LivingObject, LivingState } from './types.js';
|
|
2
|
+
export declare function witnessed(event: LivingEvent, viewerId: string): boolean;
|
|
3
|
+
export declare function receivedMessage(event: LivingEvent, viewerId: string): boolean;
|
|
4
|
+
export declare function visibleTo(event: LivingEvent, viewerId: string): boolean;
|
|
5
|
+
export declare function observedSummary(event: LivingEvent, viewerId: string): string | null;
|
|
6
|
+
export declare function knowsCustody(state: LivingState, object: LivingObject, viewerId: string): boolean;
|
|
7
|
+
export declare function observedObjectIds(event: LivingEvent): string[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Objective events remain in the replay log. A viewer only receives recorded observations.
|
|
2
|
+
export function witnessed(event, viewerId) {
|
|
3
|
+
return (event.perceivedBy ?? event.witnessIds).includes(viewerId);
|
|
4
|
+
}
|
|
5
|
+
// A message reaches its recipients wherever they are.
|
|
6
|
+
export function receivedMessage(event, viewerId) {
|
|
7
|
+
return event.effects.some(effect => effect.kind === 'message' && effect.toIds.includes(viewerId));
|
|
8
|
+
}
|
|
9
|
+
export function visibleTo(event, viewerId) {
|
|
10
|
+
return event.actorId === viewerId || witnessed(event, viewerId) || event.nearbyIds.includes(viewerId) || receivedMessage(event, viewerId);
|
|
11
|
+
}
|
|
12
|
+
export function observedSummary(event, viewerId) {
|
|
13
|
+
if (witnessed(event, viewerId) || event.actorId === viewerId)
|
|
14
|
+
return event.observed ?? event.summary;
|
|
15
|
+
if (event.nearbyIds.includes(viewerId))
|
|
16
|
+
return event.notice ?? 'A commotion is heard nearby.';
|
|
17
|
+
if (event.kind === 'opening' || event.kind === 'finish' || event.kind === 'keep-playing')
|
|
18
|
+
return event.summary;
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
export function knowsCustody(state, object, viewerId) {
|
|
22
|
+
return object.holderId === viewerId || object.custodyKnownTo.includes(viewerId);
|
|
23
|
+
}
|
|
24
|
+
export function observedObjectIds(event) {
|
|
25
|
+
if (event.visibleObjectIds)
|
|
26
|
+
return event.visibleObjectIds;
|
|
27
|
+
// Old logs predate separate outward observations. Their witnesses saw physical effects.
|
|
28
|
+
if (event.observed === undefined)
|
|
29
|
+
return event.effects.flatMap(effect => effect.kind === 'object.update' || effect.kind === 'object.create' ? [effect.objectId] : []);
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { LivingPerson, LivingState } from './types.js';
|
|
2
|
+
export type RecalledMemory = LivingPerson['memories'][number] & {
|
|
3
|
+
score: number;
|
|
4
|
+
};
|
|
5
|
+
export declare function recallMemories(state: LivingState, person: LivingPerson, focusIds: readonly string[], limit: number, exclude?: ReadonlySet<string>, ranked?: boolean): RecalledMemory[];
|
|
6
|
+
export declare function recallBeliefs(person: LivingPerson, cues: readonly string[], limit: number): {
|
|
7
|
+
score: number;
|
|
8
|
+
id: string;
|
|
9
|
+
subject: string;
|
|
10
|
+
claim: string;
|
|
11
|
+
source: {
|
|
12
|
+
kind: "initial" | "inferred" | "witnessed" | "told" | "discovered";
|
|
13
|
+
personId: string | null;
|
|
14
|
+
eventSeq: number;
|
|
15
|
+
};
|
|
16
|
+
at: number;
|
|
17
|
+
}[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function recallMemories(state, person, focusIds, limit, exclude = new Set(), ranked = false) {
|
|
2
|
+
const cueIds = new Set(focusIds);
|
|
3
|
+
const now = state.clock;
|
|
4
|
+
// A memory that shares more of the moment's people, places and things comes first. Among equals,
|
|
5
|
+
// importance keeps a significant memory easy to recall while recency fades ordinary ones.
|
|
6
|
+
const scored = person.memories.filter(memory => !exclude.has(memory.id)).map((memory) => {
|
|
7
|
+
const shared = new Set([...memory.participantIds, ...(memory.placeId === null ? [] : [memory.placeId]), ...(memory.thingIds ?? [])].filter(id => cueIds.has(id))).size;
|
|
8
|
+
const importance = memory.importance / 10;
|
|
9
|
+
const ageMinutes = Math.max(0, now - memory.at);
|
|
10
|
+
const recency = Math.exp(-ageMinutes / 720);
|
|
11
|
+
return { ...memory, shared, score: 0.6 * importance + 0.4 * recency };
|
|
12
|
+
});
|
|
13
|
+
const best = scored
|
|
14
|
+
.sort((a, b) => b.shared - a.shared || b.score - a.score || b.eventSeq - a.eventSeq)
|
|
15
|
+
.slice(0, limit)
|
|
16
|
+
.map(({ shared: _shared, ...memory }) => memory);
|
|
17
|
+
// Best first, when what matters most must survive a cut; otherwise in the order they happened.
|
|
18
|
+
return ranked ? best : best.sort((a, b) => a.eventSeq - b.eventSeq);
|
|
19
|
+
}
|
|
20
|
+
export function recallBeliefs(person, cues, limit) {
|
|
21
|
+
return person.beliefs
|
|
22
|
+
.map(belief => ({ ...belief, score: belief.source.personId !== null && cues.includes(belief.source.personId) ? 1 : 0 }))
|
|
23
|
+
.sort((a, b) => b.score - a.score || b.at - a.at)
|
|
24
|
+
.slice(0, limit);
|
|
25
|
+
}
|