blun-king-cli 9.1.587 → 9.1.588
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -185
- package/LIESMICH.txt +51 -13
- package/README.md +44 -47
- package/agent-spine-plugin/.codex-plugin/plugin.json +16 -4
- package/agent-spine-plugin/CHANGELOG.md +37 -5
- package/agent-spine-plugin/README.md +3 -3
- package/agent-spine-plugin/blun.plugin.json +45 -10
- package/agent-spine-plugin/docs/artifact-evaluation.md +93 -0
- package/agent-spine-plugin/docs/host-integration.md +42 -27
- package/agent-spine-plugin/docs/preflight-recall.md +4 -2
- package/agent-spine-plugin/docs/session-timeline.md +97 -236
- package/agent-spine-plugin/docs/world-model.md +25 -0
- package/agent-spine-plugin/hooks/codex.json +1 -1
- package/agent-spine-plugin/hooks/hooks.json +1 -1
- package/agent-spine-plugin/package.json +1 -3
- package/agent-spine-plugin/scripts/check-hosts.js +3 -3
- package/agent-spine-plugin/scripts/release-check.js +10 -5
- package/agent-spine-plugin/scripts/run-checks.js +4 -1
- package/agent-spine-plugin/scripts/run-tests-hermetic.js +32 -6
- package/agent-spine-plugin/src/cli-learning.js +15 -0
- package/agent-spine-plugin/src/cli.js +2 -0
- package/agent-spine-plugin/src/hook.js +32 -32
- package/agent-spine-plugin/src/lib/action-lesson-recall.js +73 -8
- package/agent-spine-plugin/src/lib/briefing.js +146 -36
- package/agent-spine-plugin/src/lib/channel-continuity.js +19 -0
- package/agent-spine-plugin/src/lib/delivery-agent-usage.js +14 -7
- package/agent-spine-plugin/src/lib/gateway-group-response.js +128 -0
- package/agent-spine-plugin/src/lib/gateway-runs.js +24 -15
- package/agent-spine-plugin/src/lib/hook-briefing-use.js +13 -3
- package/agent-spine-plugin/src/lib/hook-context.js +16 -3
- package/agent-spine-plugin/src/lib/hook-output.js +129 -5
- package/agent-spine-plugin/src/lib/hook-timeline.js +5 -3
- package/agent-spine-plugin/src/lib/indexed-memory.js +2 -2
- package/agent-spine-plugin/src/lib/learning-artifact-evaluator.js +114 -0
- package/agent-spine-plugin/src/lib/learning-context.js +11 -4
- package/agent-spine-plugin/src/lib/learning-measurements.js +2 -2
- package/agent-spine-plugin/src/lib/mcp-runtime.js +89 -3
- package/agent-spine-plugin/src/lib/mcp-source-context.js +12 -2
- package/agent-spine-plugin/src/lib/mcp-timeline-tools.js +91 -8
- package/agent-spine-plugin/src/lib/mcp-world-tools.js +2 -2
- package/agent-spine-plugin/src/lib/owned-file-lock.js +20 -1
- package/agent-spine-plugin/src/lib/persona-runtime.js +2 -2
- package/agent-spine-plugin/src/lib/preflight-delivery-id.js +27 -0
- package/agent-spine-plugin/src/lib/preflight.js +4 -4
- package/agent-spine-plugin/src/lib/session-timeline-codex.js +15 -0
- package/agent-spine-plugin/src/lib/session-timeline-contract.js +12 -4
- package/agent-spine-plugin/src/lib/session-timeline-event-extract.js +36 -7
- package/agent-spine-plugin/src/lib/session-timeline-host-origin.js +13 -10
- package/agent-spine-plugin/src/lib/session-timeline-invocation.js +1 -1
- package/agent-spine-plugin/src/lib/session-timeline-king.js +14 -0
- package/agent-spine-plugin/src/lib/session-timeline-prior.js +18 -12
- package/agent-spine-plugin/src/lib/session-timeline-provider.js +5 -0
- package/agent-spine-plugin/src/lib/session-timeline-query.js +2 -0
- package/agent-spine-plugin/src/lib/session-timeline-results.js +35 -10
- package/agent-spine-plugin/src/lib/session-timeline-source-open.js +30 -0
- package/agent-spine-plugin/src/lib/session-timeline.js +122 -75
- package/agent-spine-plugin/src/lib/source-roots.js +3 -2
- package/agent-spine-plugin/src/lib/task-knowledge-context.js +22 -1
- package/agent-spine-plugin/src/lib/timeline-continuation-update.js +100 -0
- package/agent-spine-plugin/src/lib/timeline-tool-guard.js +30 -7
- package/agent-spine-plugin/src/lib/timeline-user-feedback.js +217 -0
- package/agent-spine-plugin/src/lib/timeline-world-capture.js +233 -0
- package/agent-spine-plugin/src/lib/world-knowledge.js +59 -2
- package/agent-spine-plugin/src/lib/world-model.js +64 -9
- package/agent-spine-plugin/src/worker.js +13 -1
- package/bin/blun.js +43 -28
- package/bin/core-bootstrap.js +5 -4
- package/bin/king.js +43 -28
- package/bin/launcher-mode.js +1 -10
- package/bin/launcher-runtime.js +128 -295
- package/bin/managed-node.js +0 -0
- package/bin/managed-plugin-selection.cjs +0 -1
- package/bin/native-module-repair.js +0 -0
- package/bin/node-runtime.js +0 -0
- package/bin/node-version.js +0 -0
- package/bin/plugin-bootstrap.js +56 -120
- package/bin/private-paths.js +11 -34
- package/bin/standard-tools-bootstrap.js +34 -114
- package/bin/turn-thinking-policy.cjs +3 -11
- package/bin/update-copy.js +200 -0
- package/bin/update-lease.js +0 -0
- package/bin/update-notice.js +136 -289
- package/bin/verify-agent-behavior.cjs +122 -0
- package/bin/verify-agent-components.cjs +104 -0
- package/bin/verify-bundled-agent-sources.cjs +57 -0
- package/blun.mjs +143076 -135288
- package/bundled-agent-sources.json +701 -0
- package/package.json +12 -15
- package/standard-skills/translate-native/README.md +1293 -0
- package/standard-skills/translate-native/SKILL.md +172 -22
- package/standard-skills/translate-native/VERSION +1 -1
- package/standard-skills/translate-native/agents/openai.yaml +18 -0
- package/standard-skills/translate-native/assets/icon.svg +8 -0
- package/standard-skills/translate-native/docs/BLUN_CODE_INTEGRATION.md +76 -0
- package/standard-skills/translate-native/docs/PREMORTEM.md +489 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION.md +2035 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_API.md +1302 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_EVIDENCE_HTTP.md +136 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HEALTH_HTTP.md +130 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HTTP_PROVIDER.md +175 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_RECEIPT_VERIFIER_HTTP.md +86 -0
- package/standard-skills/translate-native/integrations/AGENT_RULES.md +32 -0
- package/standard-skills/translate-native/integrations/adapters/blun-code-language-guard.js +514 -0
- package/standard-skills/translate-native/integrations/adapters/node-language-guard.js +230 -0
- package/standard-skills/translate-native/integrations/audit_log.py +327 -0
- package/standard-skills/translate-native/integrations/claude_language_hook.js +1536 -0
- package/standard-skills/translate-native/integrations/commercial_localization_profile.py +42 -0
- package/standard-skills/translate-native/integrations/delivery-policy.example.json +28 -0
- package/standard-skills/translate-native/integrations/enforced_delivery.py +543 -0
- package/standard-skills/translate-native/integrations/guard_service.py +435 -0
- package/standard-skills/translate-native/integrations/language_gateway.py +67 -0
- package/standard-skills/translate-native/integrations/mcp_auth_headers.py +198 -0
- package/standard-skills/translate-native/integrations/mcp_http_gateway.py +429 -0
- package/standard-skills/translate-native/integrations/non_language_html_entities.js +1485 -0
- package/standard-skills/translate-native/integrations/pre_output_guard.py +65 -0
- package/standard-skills/translate-native/integrations/task_router.py +101 -0
- package/standard-skills/translate-native/integrations/website_localization.py +401 -0
- package/standard-skills/translate-native/integrations/website_localization_api.py +581 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark.py +1885 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_campaign.py +1772 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_candidate.py +506 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_http.py +400 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_review_store.py +781 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_reviewer_http.py +500 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_runtime.py +1107 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_suite.py +463 -0
- package/standard-skills/translate-native/integrations/website_localization_cms.py +2835 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_client.py +875 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_dispatch.py +805 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_http.py +588 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_lifecycle_monitor.py +991 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver.py +1441 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py +414 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver_store.py +1073 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_removal_dispatch.py +865 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_client.py +583 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery.py +964 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_runtime.py +665 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_http.py +1153 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_runtime.py +675 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_service.py +1125 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification.py +674 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_http.py +444 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver.py +1469 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_runtime.py +1142 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_processing_monitor.py +634 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_receiver_client.py +804 -0
- package/standard-skills/translate-native/integrations/website_localization_deepl_baseline.py +922 -0
- package/standard-skills/translate-native/integrations/website_localization_evidence_http.py +482 -0
- package/standard-skills/translate-native/integrations/website_localization_health.py +1541 -0
- package/standard-skills/translate-native/integrations/website_localization_health_http.py +372 -0
- package/standard-skills/translate-native/integrations/website_localization_http_provider.py +297 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_http.py +479 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_intake.py +363 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_queue.py +1449 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_store.py +420 -0
- package/standard-skills/translate-native/integrations/website_localization_quality_profiles.py +235 -0
- package/standard-skills/translate-native/integrations/website_localization_queue.py +671 -0
- package/standard-skills/translate-native/integrations/website_localization_receipt_verifier_http.py +516 -0
- package/standard-skills/translate-native/integrations/website_localization_release.py +928 -0
- package/standard-skills/translate-native/integrations/website_localization_release_coordinator.py +1008 -0
- package/standard-skills/translate-native/integrations/website_localization_runner.py +276 -0
- package/standard-skills/translate-native/integrations/website_localization_runtime.py +862 -0
- package/standard-skills/translate-native/integrations/website_localization_service.py +350 -0
- package/standard-skills/translate-native/integrations/website_localization_supervisor.py +511 -0
- package/standard-skills/translate-native/integrations/website_localization_worker.py +663 -0
- package/standard-skills/translate-native/provenance.json +3 -4
- package/standard-skills/translate-native/references/commercial-localization.md +177 -0
- package/standard-skills/translate-native/scripts/blun_language_guard.py +7 -1
- package/standard-skills/translate-native/scripts/check_commercial_review.py +80 -0
- package/standard-skills/translate-native/scripts/commercial_localization_profile.py +333 -0
- package/standard-tools/language-guard/LICENSE +21 -0
- package/standard-tools/language-guard/VERSION +1 -0
- package/standard-tools/language-guard/blun_language_guard.py +7 -1
- package/standard-tools/language-guard/check_commercial_review.py +80 -0
- package/standard-tools/language-guard/commercial_localization_profile.py +333 -0
- package/standard-tools/language-guard/language_gateway.py +62 -0
- package/standard-tools/language-guard/pre_output_guard.py +64 -0
- package/standard-tools/language-guard/provenance.json +4 -11
- package/standard-tools/manifest.json +34 -11
- package/telegram-plugin/commands/access.md +2 -10
- package/telegram-plugin/dist/bridge.mjs +64041 -687
- package/telegram-plugin/dist/mcp-server.mjs +72810 -9027
- package/telegram-plugin/dist/noise.mjs +28 -63511
- package/agent-spine-plugin/CONTRIBUTING.md +0 -52
- package/agent-spine-plugin/SECURITY.md +0 -47
- package/agent-spine-plugin/docs/assignment-continuation.md +0 -48
- package/agent-spine-plugin/docs/releasing.md +0 -85
- package/agent-spine-plugin/docs/structured-completion.md +0 -67
- package/bin/abort-listener-policy.cjs +0 -43
- package/bin/active-steer-priority-policy.cjs +0 -24
- package/bin/agent-api-http-adapter.mjs +0 -446
- package/bin/agent-api-private-http-server.mjs +0 -288
- package/bin/agent-api-runtime.mjs +0 -252
- package/bin/agent-api-service-environment.mjs +0 -236
- package/bin/agent-api-service-host.mjs +0 -209
- package/bin/agent-api-service-process.mjs +0 -171
- package/bin/agent-api-session-registry.mjs +0 -428
- package/bin/agent-api-tool-broker.cjs +0 -248
- package/bin/agent-api-turn-controller.mjs +0 -461
- package/bin/agent-api-usage-journal.cjs +0 -259
- package/bin/agent-resume-snapshot.cjs +0 -241
- package/bin/agentspine-king-goal-inbox.mjs +0 -111
- package/bin/agentspine-king-goal-intake.mjs +0 -106
- package/bin/approval-rejection-stop.cjs +0 -15
- package/bin/assistant-message-offload-policy.cjs +0 -284
- package/bin/baseline-skill-performance-policy.cjs +0 -39
- package/bin/bash-search-scope-policy.cjs +0 -49
- package/bin/codebase-search-runtime.cjs +0 -23
- package/bin/cognitive-action-checkpoint.cjs +0 -1104
- package/bin/cognitive-attention-delivery.cjs +0 -76
- package/bin/cognitive-attention-policy.cjs +0 -143
- package/bin/cognitive-attention-runtime.cjs +0 -91
- package/bin/cognitive-context-projection.cjs +0 -73
- package/bin/cognitive-cross-portal-acceptance.cjs +0 -443
- package/bin/cognitive-effective-view.cjs +0 -77
- package/bin/cognitive-focus-projection.cjs +0 -206
- package/bin/cognitive-focus-scope.cjs +0 -37
- package/bin/cognitive-goal-autostart-policy.cjs +0 -72
- package/bin/cognitive-goal-time-trigger-controller.cjs +0 -146
- package/bin/cognitive-memory-adapter.cjs +0 -282
- package/bin/cognitive-memory-command.cjs +0 -293
- package/bin/cognitive-memory-provider.cjs +0 -92
- package/bin/cognitive-salience-policy.cjs +0 -159
- package/bin/cognitive-state-store.cjs +0 -508
- package/bin/cognitive-turn-lifecycle.cjs +0 -624
- package/bin/cognitive-work-focus.cjs +0 -180
- package/bin/compaction-history-archive.cjs +0 -166
- package/bin/compaction-history-startup.cjs +0 -50
- package/bin/compaction-model-policy.cjs +0 -31
- package/bin/compaction-stage-policy.cjs +0 -21
- package/bin/compaction-transaction-policy.cjs +0 -122
- package/bin/config-write-dedup-policy.cjs +0 -27
- package/bin/context-budget-ledger.cjs +0 -31
- package/bin/context-doctor-policy.cjs +0 -70
- package/bin/context-insight-policy.cjs +0 -36
- package/bin/context-performance-policy.cjs +0 -19
- package/bin/context-pressure-policy.cjs +0 -20
- package/bin/cron-run-output.cjs +0 -45
- package/bin/cron-run-store.cjs +0 -145
- package/bin/curiosity-scout-policy.cjs +0 -49
- package/bin/default-model-output-budget-policy.cjs +0 -28
- package/bin/durable-task-resume-policy.cjs +0 -130
- package/bin/durable-task-resume-runtime.cjs +0 -117
- package/bin/durable-task-resume-store.cjs +0 -88
- package/bin/editable-tool-approval-policy.cjs +0 -540
- package/bin/editable-tool-approval-runtime.cjs +0 -99
- package/bin/effective-system-prompt-cache-policy.cjs +0 -33
- package/bin/error-memory-performance-policy.cjs +0 -113
- package/bin/file-observation-policy.cjs +0 -133
- package/bin/foreground-output-capture-policy.cjs +0 -41
- package/bin/generated-source-health.cjs +0 -142
- package/bin/glob-pattern-policy.cjs +0 -13
- package/bin/goal-completion-evidence-policy.cjs +0 -120
- package/bin/grep-output-limit-policy.cjs +0 -39
- package/bin/historical-media-projection-policy.cjs +0 -48
- package/bin/history-offload-pressure-policy.cjs +0 -33
- package/bin/html-to-research-markdown.cjs +0 -147
- package/bin/identity-context-policy.cjs +0 -764
- package/bin/identity-journal-policy.cjs +0 -107
- package/bin/input-draft-persistence.cjs +0 -77
- package/bin/king-tui-function-contract.json +0 -33
- package/bin/launcher-restart-policy.cjs +0 -150
- package/bin/live-response-repetition-guard.cjs +0 -196
- package/bin/llm-config-log-dedup-policy.cjs +0 -76
- package/bin/loop-event-record-policy.cjs +0 -174
- package/bin/managed-context-startup-policy.cjs +0 -27
- package/bin/media-activity-layout-policy.cjs +0 -34
- package/bin/media-auto-retrieval-policy.cjs +0 -90
- package/bin/media-result-policy.cjs +0 -59
- package/bin/micro-compaction-policy.cjs +0 -145
- package/bin/mistake-relevance-policy.cjs +0 -319
- package/bin/model-retry-progress-policy.cjs +0 -46
- package/bin/native-large-file-io.cjs +0 -42
- package/bin/native-runtime-cache.cjs +0 -76
- package/bin/natural-presence-policy.cjs +0 -28
- package/bin/noninteractive-shell-env-policy.cjs +0 -19
- package/bin/observer-hooks.cjs +0 -14
- package/bin/outbound-claim-provenance.cjs +0 -150
- package/bin/oversized-context-offload-policy.cjs +0 -86
- package/bin/pending-media-policy.cjs +0 -182
- package/bin/pending-token-estimate-policy.cjs +0 -41
- package/bin/personal-memory-consent-policy.cjs +0 -72
- package/bin/personal-memory-performance-policy.cjs +0 -12
- package/bin/personality-choice-policy.cjs +0 -101
- package/bin/personality-memory-adapter.cjs +0 -379
- package/bin/personality-mode.cjs +0 -46
- package/bin/personality-setup-policy.cjs +0 -197
- package/bin/proactive-compaction-policy.cjs +0 -25
- package/bin/profile-identity-resolution.cjs +0 -136
- package/bin/profile-runtime.cjs +0 -318
- package/bin/profile-tool-exclusion-policy.cjs +0 -37
- package/bin/programmatic-context-isolation.cjs +0 -25
- package/bin/programmatic-tool-runtime.mjs +0 -627
- package/bin/provider-idle-timeout-policy.cjs +0 -14
- package/bin/provider-model-refresh-deadline.cjs +0 -53
- package/bin/provider-model-refresh-policy.cjs +0 -107
- package/bin/rate-limit-recovery-policy.cjs +0 -47
- package/bin/read-batch-policy.cjs +0 -32
- package/bin/read-continuation-policy.cjs +0 -59
- package/bin/recurring-cron-history-policy.cjs +0 -124
- package/bin/relationship-continuity-policy.cjs +0 -143
- package/bin/relationship-curiosity-policy.cjs +0 -107
- package/bin/relationship-learning-policy.cjs +0 -168
- package/bin/release-artifact-freeze-policy.cjs +0 -30
- package/bin/reload-plugin-bootstrap.cjs +0 -18
- package/bin/reload-queue-policy.cjs +0 -38
- package/bin/repeated-assistant-response-policy.cjs +0 -232
- package/bin/repeated-injection-projection.cjs +0 -107
- package/bin/repeated-user-message-projection.cjs +0 -8
- package/bin/research-page-result.cjs +0 -74
- package/bin/retry-checkpoint-policy.cjs +0 -13
- package/bin/runtime-exit-ledger.cjs +0 -144
- package/bin/scoped-cron-run-policy.cjs +0 -358
- package/bin/session-checkpoint-policy.cjs +0 -25
- package/bin/session-compaction-policy.cjs +0 -84
- package/bin/session-replay-policy.cjs +0 -20
- package/bin/session-replay-window-policy.cjs +0 -40
- package/bin/session-resume-checkpoint.cjs +0 -254
- package/bin/session-scrollback-archive.cjs +0 -229
- package/bin/skill-activation-performance-policy.cjs +0 -69
- package/bin/skill-listing-performance-policy.cjs +0 -92
- package/bin/soul-organization-policy.cjs +0 -78
- package/bin/soul-preservation-policy.cjs +0 -20
- package/bin/startup-preferences.cjs +0 -131
- package/bin/streaming-flush-performance-policy.cjs +0 -28
- package/bin/structured-agent-swarm-output.cjs +0 -325
- package/bin/structured-subagent-output.cjs +0 -252
- package/bin/subagent-context-fork-policy.cjs +0 -155
- package/bin/subagent-max-tokens-handoff-policy.cjs +0 -69
- package/bin/subagent-parent-responsiveness.cjs +0 -19
- package/bin/subagent-skill-policy.cjs +0 -206
- package/bin/subagent-timeout-policy.cjs +0 -182
- package/bin/subagent-tool-policy.cjs +0 -60
- package/bin/subagent-usage-rollup-policy.cjs +0 -29
- package/bin/system-prompt-context-policy.cjs +0 -124
- package/bin/system-prompt-token-cache-policy.cjs +0 -60
- package/bin/telegram-addressed-focus.cjs +0 -55
- package/bin/telegram-addressed-priority.cjs +0 -12
- package/bin/telegram-approval-relay.cjs +0 -290
- package/bin/telegram-bot-priority.cjs +0 -17
- package/bin/telegram-console-status-policy.cjs +0 -174
- package/bin/telegram-context-projection-policy.cjs +0 -141
- package/bin/telegram-delivery-lifecycle.cjs +0 -125
- package/bin/telegram-direct-focus-policy.cjs +0 -273
- package/bin/telegram-mcp-compatibility.cjs +0 -49
- package/bin/telegram-media-delivery-policy.cjs +0 -42
- package/bin/telegram-private-conversation-policy.cjs +0 -185
- package/bin/telegram-queue-handoff-policy.cjs +0 -73
- package/bin/telegram-remote-status-policy.cjs +0 -120
- package/bin/telegram-session-queue-runtime.mjs +0 -306
- package/bin/telegram-text-chunk-policy.cjs +0 -63
- package/bin/telegram-truncated-reply-policy.cjs +0 -37
- package/bin/telegram-urgent-policy.cjs +0 -45
- package/bin/telemetry-spool-policy.cjs +0 -57
- package/bin/thinking-activity-status-policy.cjs +0 -132
- package/bin/thinking-only-guard.cjs +0 -80
- package/bin/todo-list-turn-policy.cjs +0 -131
- package/bin/tool-call-loop-policy.cjs +0 -51
- package/bin/tool-file-persistence.cjs +0 -141
- package/bin/tool-result-offload-policy.cjs +0 -359
- package/bin/tool-result-offload-telemetry.cjs +0 -12
- package/bin/tool-schema-token-cache-policy.cjs +0 -41
- package/bin/tool-stream-preview-policy.cjs +0 -9
- package/bin/tui-functional-contract.cjs +0 -55
- package/bin/turn-tool-performance-policy.cjs +0 -486
- package/bin/usage-cache-efficiency-policy.cjs +0 -26
- package/bin/user-home-path-policy.cjs +0 -13
- package/bin/user-message-offload-policy.cjs +0 -103
- package/bin/user-prompt-hook-origin-policy.cjs +0 -34
- package/bin/user-tool-record-policy.cjs +0 -7
- package/bin/validated-learning-insight-policy.cjs +0 -58
- package/bin/validated-learning-outcome-trace.cjs +0 -107
- package/bin/validated-learning-performance-policy.cjs +0 -53
- package/bin/validated-learning-signal.cjs +0 -463
- package/bin/windows-bash-dialect-policy.cjs +0 -25
- package/bin/windows-node-crash-dump.cjs +0 -110
- package/bin/write-continuation-policy.cjs +0 -69
- package/codebase-index/README.md +0 -82
- package/codebase-index/codebase_index.py +0 -470
- package/standard-skills/agent-browser/SKILL.md +0 -19
- package/standard-skills/agent-browser/references/runtime.md +0 -8
- package/standard-skills/blun-session-inspector/SKILL.md +0 -41
- package/standard-skills/blun-session-inspector/scripts/inspect-session.cjs +0 -437
- package/standard-skills/design-taste-frontend/SKILL.md +0 -1206
- package/standard-skills/full-output-enforcement/SKILL.md +0 -49
- package/standard-skills/high-end-visual-design/SKILL.md +0 -98
- package/standard-skills/image-to-code/SKILL.md +0 -1228
- package/standard-skills/industrial-brutalist-ui/SKILL.md +0 -92
- package/standard-skills/minimalist-ui/SKILL.md +0 -85
- package/standard-skills/motion-design-taste/SKILL.md +0 -74
- package/standard-skills/playwright-testing/SKILL.md +0 -19
- package/standard-skills/playwright-testing/references/runtime.md +0 -7
- package/standard-skills/premortem/SKILL.md +0 -148
- package/standard-skills/redesign-existing-projects/SKILL.md +0 -178
- package/standard-skills/research-evidence/SKILL.md +0 -39
- package/standard-skills/research-evidence/references/evidence-format.md +0 -104
- package/standard-skills/research-evidence/scripts/evidence-collection.cjs +0 -260
- package/standard-skills/research-evidence/scripts/score-report.cjs +0 -130
- package/standard-skills/screenshot-lesen/SKILL.md +0 -52
- package/standard-skills/stitch-design-taste/DESIGN.md +0 -121
- package/standard-skills/stitch-design-taste/SKILL.md +0 -184
- package/standard-skills/telegram-channel/SKILL.md +0 -18
- package/standard-skills/telegram-channel/references/runtime.md +0 -7
- package/standard-skills/venture-flywheel/SKILL.md +0 -32
- package/standard-skills/venture-flywheel/identity/project-identity.cjs +0 -146
- package/standard-skills/venture-flywheel/policy/capability-engine.cjs +0 -114
- package/standard-skills/venture-flywheel/policy/repository-trust.cjs +0 -229
- package/standard-skills/venture-flywheel/references/BEISPIELE-phase0.md +0 -146
- package/standard-skills/venture-flywheel/references/CAPABILITY-MAP.md +0 -34
- package/standard-skills/venture-flywheel/references/SPEC-phase0-identity-trust.md +0 -77
- package/standard-skills/venture-flywheel/references/SPEC-phase0-state-events.md +0 -93
- package/standard-skills/venture-flywheel/schemas/capability-decision.schema.json +0 -13
- package/standard-skills/venture-flywheel/schemas/execution-event.schema.json +0 -44
- package/standard-skills/venture-flywheel/schemas/project-identity.schema.json +0 -32
- package/standard-skills/venture-flywheel/schemas/repository-trust.schema.json +0 -57
- package/standard-skills/venture-flywheel/schemas/run-transition.schema.json +0 -59
- package/standard-skills/venture-flywheel/state/execution-event.cjs +0 -191
- package/standard-skills/venture-flywheel/state/task-state-machine.cjs +0 -190
- package/standard-skills/web-lesen/SKILL.md +0 -73
- package/standard-skills/web-lesen/scripts/crawl_public.py +0 -379
- package/standard-skills/windows-mcp/SKILL.md +0 -19
- package/standard-skills/windows-mcp/references/runtime.md +0 -9
- package/telegram-plugin/DELIVERY.md +0 -36
- package/telegram-plugin/bin/telegram-approval-relay.cjs +0 -290
- package/telegram-plugin/bin/telegram-console-status-policy.cjs +0 -175
- package/telegram-plugin/bin/telegram-delivery-lifecycle.cjs +0 -125
- package/telegram-plugin/bin/telegram-direct-reply-policy.cjs +0 -48
- package/telegram-plugin/bin/telegram-launcher-status-queue.cjs +0 -122
- package/telegram-plugin/bin/telegram-private-conversation-policy.cjs +0 -186
- package/telegram-plugin/bin/telegram-remote-status-policy.cjs +0 -121
- package/telegram-plugin/bin/telegram-reply-parts.cjs +0 -149
- package/telegram-plugin/bin/telegram-text-chunk-policy.cjs +0 -63
- package/telegram-plugin/bin/telegram-typing-keepalive.cjs +0 -89
- package/telegram-plugin/compat/mcp-server-fa511cd1.mjs +0 -73825
- /package/{bin → scripts}/fix-node-pty-perms.js +0 -0
|
@@ -10,12 +10,14 @@ const ASSERTION_SCHEMA = "agentspine.world-assertion/v1";
|
|
|
10
10
|
const MAX_STATE_BYTES = 5 * 1024 * 1024;
|
|
11
11
|
const MAX_VALUE_BYTES = 8192;
|
|
12
12
|
const EVIDENCE_KINDS = new Set([
|
|
13
|
-
"objective-measurement", "explicit-user-feedback", "model-suggestion"
|
|
13
|
+
"objective-measurement", "explicit-user-feedback", "model-suggestion", "uninterpreted-user-message"
|
|
14
14
|
]);
|
|
15
15
|
const PRIVACY = new Set(["private", "shared", "group"]);
|
|
16
16
|
const STABLE_ID = /^[a-z][a-z0-9-]{0,31}:[A-Za-z0-9][A-Za-z0-9._/-]{0,190}$/;
|
|
17
17
|
const PREDICATE = /^[a-z][a-z0-9.-]{0,127}$/;
|
|
18
18
|
const DIGEST = /^[a-f0-9]{64}$/;
|
|
19
|
+
const PORTAL_REF = /^portal-ref:[a-f0-9]{32}$/;
|
|
20
|
+
const THREAD_REF = /^thread-ref:[a-f0-9]{32}$/;
|
|
19
21
|
const FORBIDDEN = /(^|[-_.])(permissions?|rights?|authori[sz]ation|credentials?|secrets?|tokens?|api[-_]?keys?|delegation|tool[-_]?access|production[-_]?access|payments?|spending)([-_.]|$)/i;
|
|
20
22
|
|
|
21
23
|
function sha256(value) {
|
|
@@ -59,6 +61,23 @@ function optionalStableId(value, field) {
|
|
|
59
61
|
return value === null || value === undefined ? null : stableId(value, field);
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
function routeBinding(input) {
|
|
65
|
+
const portalRef = input.portalRef ?? null;
|
|
66
|
+
const threadRef = input.threadRef ?? null;
|
|
67
|
+
if (Boolean(portalRef) !== Boolean(threadRef)) {
|
|
68
|
+
throw new Error("portalRef and threadRef must be provided together");
|
|
69
|
+
}
|
|
70
|
+
if (portalRef !== null && (!PORTAL_REF.test(portalRef) || !THREAD_REF.test(threadRef))) {
|
|
71
|
+
throw new Error("portalRef and threadRef must be opaque gateway references");
|
|
72
|
+
}
|
|
73
|
+
return portalRef ? { portalRef, threadRef } : {};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function sameRoute(left, right) {
|
|
77
|
+
return (left.portalRef ?? null) === (right.portalRef ?? null)
|
|
78
|
+
&& (left.threadRef ?? null) === (right.threadRef ?? null);
|
|
79
|
+
}
|
|
80
|
+
|
|
62
81
|
function emptyModel(root) {
|
|
63
82
|
return { schema: SCHEMA, root, revision: 0, assertions: [], events: [], authority: "context-only" };
|
|
64
83
|
}
|
|
@@ -72,6 +91,8 @@ function validateStoredAssertion(assertion, validKnowledgeFields) {
|
|
|
72
91
|
if ((assertion.privacy === "group") !== Boolean(assertion.groupId)
|
|
73
92
|
|| (assertion.groupId && !STABLE_ID.test(assertion.groupId))
|
|
74
93
|
|| (assertion.projectId && !STABLE_ID.test(assertion.projectId))
|
|
94
|
+
|| Boolean(assertion.portalRef) !== Boolean(assertion.threadRef)
|
|
95
|
+
|| (assertion.portalRef && (!PORTAL_REF.test(assertion.portalRef) || !THREAD_REF.test(assertion.threadRef)))
|
|
75
96
|
|| !STABLE_ID.test(assertion.evidenceId || "") || !Array.isArray(assertion.supersedes)
|
|
76
97
|
|| assertion.supersedes.some((item) => !STABLE_ID.test(item))) return false;
|
|
77
98
|
if (!validKnowledgeFields(assertion)) return false;
|
|
@@ -83,7 +104,8 @@ function validateStoredAssertion(assertion, validKnowledgeFields) {
|
|
|
83
104
|
} catch {
|
|
84
105
|
return false;
|
|
85
106
|
}
|
|
86
|
-
return assertion.status === (
|
|
107
|
+
return assertion.status === (["model-suggestion", "uninterpreted-user-message"].includes(assertion.evidenceKind)
|
|
108
|
+
? "proposed" : "established");
|
|
87
109
|
}
|
|
88
110
|
|
|
89
111
|
function normalizeModel(value, root, validKnowledgeFields) {
|
|
@@ -156,8 +178,9 @@ function assertionInput(input, now, normalizeKnowledgeFields) {
|
|
|
156
178
|
evidenceId, evidenceDigest: input.evidenceDigest, observedAt, expiresAt,
|
|
157
179
|
projectId: optionalStableId(input.projectId, "projectId"), groupId, privacy,
|
|
158
180
|
supersedes, reason: typeof input.reason === "string" ? input.reason.trim().slice(0, 500) : "",
|
|
159
|
-
status:
|
|
181
|
+
status: ["model-suggestion", "uninterpreted-user-message"].includes(input.evidenceKind) ? "proposed" : "established",
|
|
160
182
|
recordedAt: new Date(now).toISOString(), authority: "context-only",
|
|
183
|
+
...routeBinding(input),
|
|
161
184
|
...(knowledge.knowledgeKind ? knowledge : {})
|
|
162
185
|
};
|
|
163
186
|
}
|
|
@@ -179,12 +202,29 @@ export async function recordWorldAssertion(input = {}) {
|
|
|
179
202
|
if (assertionDigest(existing) !== assertionDigest(candidate)) throw new Error(`world assertion id is already used: ${candidate.id}`);
|
|
180
203
|
return { status: "duplicate", assertion: structuredClone(existing), revision: model.revision, authority: "context-only" };
|
|
181
204
|
}
|
|
205
|
+
if (input.requireActiveSupersedes === true) {
|
|
206
|
+
if (!candidate.supersedes.length) throw new Error("active supersession requires at least one assertion");
|
|
207
|
+
const cutoff = new Date(now).getTime();
|
|
208
|
+
const live = model.assertions.filter((item) => item.status === "established"
|
|
209
|
+
&& item.subjectId === candidate.subjectId && item.predicate === candidate.predicate
|
|
210
|
+
&& item.projectId === candidate.projectId && item.groupId === candidate.groupId
|
|
211
|
+
&& item.privacy === candidate.privacy && sameRoute(item, candidate)
|
|
212
|
+
&& (!item.expiresAt || new Date(item.expiresAt).getTime() > cutoff));
|
|
213
|
+
const replaced = new Set(live.flatMap((item) => item.supersedes));
|
|
214
|
+
const activeIds = live.filter((item) => !replaced.has(item.id)).map((item) => item.id).sort();
|
|
215
|
+
if (activeIds.join("\0") !== candidate.supersedes.join("\0")) {
|
|
216
|
+
throw new Error("active supersession compare-and-swap failed");
|
|
217
|
+
}
|
|
218
|
+
}
|
|
182
219
|
for (const id of candidate.supersedes) {
|
|
183
220
|
const previous = model.assertions.find((item) => item.id === id);
|
|
184
221
|
if (!previous) throw new Error(`superseded assertion does not exist: ${id}`);
|
|
185
222
|
if (previous.subjectId !== candidate.subjectId || previous.predicate !== candidate.predicate) {
|
|
186
223
|
throw new Error("supersession must keep the same subject and predicate");
|
|
187
224
|
}
|
|
225
|
+
if (!sameRoute(previous, candidate)) {
|
|
226
|
+
throw new Error("supersession must keep the same portal and thread scope");
|
|
227
|
+
}
|
|
188
228
|
if (candidate.status !== "established") throw new Error("model suggestions cannot supersede established context");
|
|
189
229
|
}
|
|
190
230
|
model.revision += 1;
|
|
@@ -196,10 +236,18 @@ export async function recordWorldAssertion(input = {}) {
|
|
|
196
236
|
});
|
|
197
237
|
}
|
|
198
238
|
|
|
199
|
-
function visible(assertion, { includePrivate, groupId, projectId }) {
|
|
239
|
+
function visible(assertion, { includePrivate, groupId, projectId, portalRef, threadRef, continuationTaskId }) {
|
|
200
240
|
if (assertion.privacy === "private" && (!includePrivate || groupId)) return false;
|
|
201
241
|
if (assertion.privacy === "group" && assertion.groupId !== groupId) return false;
|
|
202
|
-
|
|
242
|
+
if (assertion.projectId !== null && assertion.projectId !== projectId) return false;
|
|
243
|
+
const currentRoute = Boolean(portalRef && threadRef);
|
|
244
|
+
const assertionRoute = Boolean(assertion.portalRef && assertion.threadRef);
|
|
245
|
+
if (assertionRoute) return currentRoute && sameRoute(assertion, { portalRef, threadRef });
|
|
246
|
+
// A portal-bound task must not silently inherit an older unbound checkpoint
|
|
247
|
+
// or task-local correction. General user/project knowledge remains portable.
|
|
248
|
+
if (currentRoute && continuationTaskId && assertion.knowledgeKind
|
|
249
|
+
&& assertion.subjectId === continuationTaskId) return false;
|
|
250
|
+
return true;
|
|
203
251
|
}
|
|
204
252
|
|
|
205
253
|
function publicAssertion(assertion) {
|
|
@@ -209,7 +257,7 @@ function publicAssertion(assertion) {
|
|
|
209
257
|
export async function worldContext({
|
|
210
258
|
root = process.cwd(), subjectId = null, projectId = null, groupId = null,
|
|
211
259
|
includePrivate = false, includeKnowledgeHistory = false, continuationTaskId = null,
|
|
212
|
-
maxItems = 100, now = new Date()
|
|
260
|
+
portalRef = null, threadRef = null, maxItems = 100, now = new Date()
|
|
213
261
|
} = {}) {
|
|
214
262
|
if (groupId !== null && includePrivate) throw new Error("private world context cannot be assembled for a group audience");
|
|
215
263
|
if (!Number.isInteger(maxItems) || maxItems < 1 || maxItems > 500) throw new Error("maxItems must be between 1 and 500");
|
|
@@ -217,12 +265,15 @@ export async function worldContext({
|
|
|
217
265
|
projectId = optionalStableId(projectId, "projectId");
|
|
218
266
|
groupId = optionalStableId(groupId, "groupId");
|
|
219
267
|
continuationTaskId = optionalStableId(continuationTaskId, "continuationTaskId");
|
|
268
|
+
({ portalRef = null, threadRef = null } = routeBinding({ portalRef, threadRef }));
|
|
220
269
|
const names = await stateNames(root);
|
|
221
270
|
const model = await readModel(names);
|
|
222
271
|
const { structuredKnowledgeView } = await import("./world-knowledge.js");
|
|
223
272
|
const cutoff = new Date(now).getTime();
|
|
224
273
|
if (!Number.isFinite(cutoff)) throw new Error("now is invalid");
|
|
225
|
-
const candidates = model.assertions.filter((item) => visible(item, {
|
|
274
|
+
const candidates = model.assertions.filter((item) => visible(item, {
|
|
275
|
+
includePrivate, groupId, projectId, portalRef, threadRef, continuationTaskId
|
|
276
|
+
})
|
|
226
277
|
&& (!subjectId || item.subjectId === subjectId));
|
|
227
278
|
const stale = candidates.filter((item) => item.expiresAt && new Date(item.expiresAt).getTime() <= cutoff);
|
|
228
279
|
const current = candidates.filter((item) => !item.expiresAt || new Date(item.expiresAt).getTime() > cutoff);
|
|
@@ -251,7 +302,9 @@ export async function worldContext({
|
|
|
251
302
|
facts.push({ subjectId: newest.subjectId, predicate: newest.predicate, value: structuredClone(newest.value),
|
|
252
303
|
assertionIds: assertions.map((item) => item.id).sort(), evidenceKinds: [...new Set(assertions.map((item) => item.evidenceKind))].sort(),
|
|
253
304
|
latestObservedAt: newest.observedAt, expiresAt: newest.expiresAt, privacy: newest.privacy,
|
|
254
|
-
groupId: newest.groupId, projectId: newest.projectId,
|
|
305
|
+
groupId: newest.groupId, projectId: newest.projectId,
|
|
306
|
+
...(newest.portalRef ? { portalRef: newest.portalRef, threadRef: newest.threadRef } : {}),
|
|
307
|
+
authority: "context-only" });
|
|
255
308
|
}
|
|
256
309
|
const order = (left, right) => left.subjectId.localeCompare(right.subjectId) || left.predicate.localeCompare(right.predicate);
|
|
257
310
|
facts.sort(order); conflicts.sort(order); proposals.sort(order); stale.sort(order);
|
|
@@ -261,6 +314,8 @@ export async function worldContext({
|
|
|
261
314
|
});
|
|
262
315
|
return {
|
|
263
316
|
schema: "agentspine.world-context/v1", root: names.root, revision: model.revision,
|
|
317
|
+
scope: { projectId, groupId, includePrivate,
|
|
318
|
+
...(portalRef ? { portalRef, threadRef } : {}) },
|
|
264
319
|
facts: facts.slice(0, maxItems), conflicts: conflicts.slice(0, maxItems),
|
|
265
320
|
proposals: proposals.slice(0, maxItems).map(publicAssertion), stale: stale.slice(0, maxItems).map(publicAssertion),
|
|
266
321
|
knowledge,
|
|
@@ -269,7 +324,7 @@ export async function worldContext({
|
|
|
269
324
|
uncertainty: { requiresResolution: conflicts.length > 0, conflicts: conflicts.length,
|
|
270
325
|
proposals: proposals.length, stale: stale.length },
|
|
271
326
|
authority: "context-only",
|
|
272
|
-
note: "Only unexpired, non-conflicting measured or explicitly user-confirmed assertions are facts. Model suggestions remain proposals and grant no authority."
|
|
327
|
+
note: "Only unexpired, non-conflicting measured or explicitly user-confirmed assertions are facts. Model suggestions and uninterpreted user messages remain proposals and grant no authority."
|
|
273
328
|
};
|
|
274
329
|
}
|
|
275
330
|
|
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
} from "./lib/gateway-runtime.js";
|
|
10
10
|
import { createTelegramAdapter } from "./lib/telegram-adapter.js";
|
|
11
11
|
import { acknowledgeChannelDelivery, loadChannelRuntime } from "./lib/channel-runtime.js";
|
|
12
|
+
import { channelTimelineContinuity } from "./lib/channel-continuity.js";
|
|
13
|
+
import { groupResponseContract, settleSuppressedGroupEvents } from "./lib/gateway-group-response.js";
|
|
12
14
|
import { loadPersonaRuntime, syncPersonaRosterFromEnvironment } from "./lib/persona-runtime.js";
|
|
13
15
|
import { selfHelpPolicyForWorkItem } from "./lib/knowledge-evidence.js";
|
|
14
16
|
import { isMainModule } from "./lib/runtime.js";
|
|
@@ -101,12 +103,14 @@ async function hostWorkItem(root, item) {
|
|
|
101
103
|
const event = item.channelEventId === null ? null
|
|
102
104
|
: channel.runtime.events.find((entry) => entry.eventId === item.channelEventId) || null;
|
|
103
105
|
if (item.channelEventId && !event) throw new Error("claimed channel work lost its exact event");
|
|
106
|
+
const continuity = channelTimelineContinuity(event);
|
|
104
107
|
return {
|
|
105
108
|
...structuredClone(item), host: identity.host, profileId: identity.profileId, projectRoot: root,
|
|
106
109
|
goal: goal ? structuredClone(goal) : null,
|
|
107
110
|
goalStep: goalStep ? { ...structuredClone(goalStep),
|
|
108
111
|
...(executionAttempt === null ? {} : { executionAttempt }) } : null,
|
|
109
112
|
selfHelpPolicy: goalStep ? selfHelpPolicyForWorkItem(goalStep) : null,
|
|
113
|
+
groupResponseContract: groupResponseContract(event),
|
|
110
114
|
hostEnvironment: {
|
|
111
115
|
AGENTSPINE_GATEWAY_CONTEXT: "agentspine.gateway-start/v1",
|
|
112
116
|
AGENTSPINE_ENTITY_ID: item.agentId,
|
|
@@ -122,7 +126,9 @@ async function hostWorkItem(root, item) {
|
|
|
122
126
|
} : {}),
|
|
123
127
|
...(event ? {
|
|
124
128
|
AGENTSPINE_CHANNEL_EVENT_ID: event.eventId,
|
|
125
|
-
AGENTSPINE_CHANNEL_PROVIDER: event.provider
|
|
129
|
+
AGENTSPINE_CHANNEL_PROVIDER: event.provider,
|
|
130
|
+
AGENTSPINE_PORTAL_REF: continuity.portalRef,
|
|
131
|
+
AGENTSPINE_THREAD_REF: continuity.threadRef
|
|
126
132
|
} : {})
|
|
127
133
|
},
|
|
128
134
|
channelStart: event ? {
|
|
@@ -140,6 +146,7 @@ export async function runWorkerTick({ root = process.cwd(), workerId = "gateway-
|
|
|
140
146
|
await syncPersonaRosterFromEnvironment({ root, env, now });
|
|
141
147
|
const initial = await loadGatewayRuntime(root);
|
|
142
148
|
if (!initial.policy.enabled || initial.policy.killSwitch) return { status: "stopped", processed: false };
|
|
149
|
+
await settleSuppressedGroupEvents({ root, now });
|
|
143
150
|
if (typeof deliveryAdapter.poll === "function") {
|
|
144
151
|
try { await deliveryAdapter.poll(); }
|
|
145
152
|
catch (error) {
|
|
@@ -175,6 +182,11 @@ export async function runWorkerTick({ root = process.cwd(), workerId = "gateway-
|
|
|
175
182
|
}
|
|
176
183
|
const completed = await completeGatewayRun({ root, queueId: claim.item.queueId, workerId,
|
|
177
184
|
claimedAt: claim.item.lease.claimedAt, attempt: claim.item.attempts, result, now });
|
|
185
|
+
if (completed.communication?.suppressed) {
|
|
186
|
+
await settleSuppressedGroupEvents({ root, now });
|
|
187
|
+
return { status: "silent", processed: true, queueId: completed.item.queueId,
|
|
188
|
+
communication: completed.communication, deliveryConfirmed: false, completionVerified: false };
|
|
189
|
+
}
|
|
178
190
|
if (!completed.outbox) return {
|
|
179
191
|
status: completed.clarification ? "needs-clarification"
|
|
180
192
|
: completed.exploration ? "exploring" : completed.selfHelp ? "self-help-resolved"
|
package/bin/blun.js
CHANGED
|
@@ -325,40 +325,55 @@ async function connectExistingRuntimeLease(timeoutMs = 3_000) {
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
async function main() {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
328
|
+
const explicitUpdateRequest = process.argv.length === 3
|
|
329
|
+
&& /^(?:update|upgrade)$/iu.test(process.argv[2] || '');
|
|
330
|
+
let noticeResult = await acquireNoticeLease();
|
|
331
|
+
let runtimeResult;
|
|
332
|
+
try {
|
|
333
|
+
if (explicitUpdateRequest) {
|
|
334
|
+
runtimeResult = await connectExistingRuntimeLease(750);
|
|
335
|
+
if (!runtimeResult.acquired) {
|
|
336
|
+
runtimeResult = undefined;
|
|
337
|
+
if (!noticeResult.acquired || !await installLeaseIsClear()) {
|
|
338
|
+
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
339
|
+
process.exitCode = 1;
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
} else {
|
|
344
|
+
const installClear = await installLeaseIsClear();
|
|
345
|
+
if (!installClear || !noticeResult.acquired) {
|
|
346
|
+
runtimeResult = await connectExistingRuntimeLease();
|
|
347
|
+
if (!runtimeResult.acquired && !installClear) {
|
|
348
|
+
if (!await installLeaseIsClear()) {
|
|
349
|
+
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
350
|
+
process.exitCode = 1;
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
runtimeResult = undefined;
|
|
354
|
+
}
|
|
355
|
+
if (!runtimeResult?.acquired && !noticeResult.acquired) {
|
|
356
|
+
noticeResult = await acquireNoticeLease();
|
|
357
|
+
if (!noticeResult.acquired) {
|
|
358
|
+
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
359
|
+
process.exitCode = 1;
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
351
365
|
noticeResult.lease?.assertOwned();
|
|
352
366
|
runtimeResult?.lease?.assertOwned();
|
|
353
367
|
const { runLauncher } = require('./launcher-runtime');
|
|
354
368
|
noticeResult.lease?.assertOwned();
|
|
355
369
|
runtimeResult?.lease?.assertOwned();
|
|
356
370
|
const filename = path.basename(__filename).toLowerCase();
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
371
|
+
await runLauncher({
|
|
372
|
+
mode: filename.startsWith('king') ? 'king' : 'blun',
|
|
373
|
+
noticeLease: noticeResult.lease,
|
|
374
|
+
runtimeLease: runtimeResult?.lease,
|
|
375
|
+
skipUpdateNotice: runtimeResult?.acquired === true || !noticeResult.acquired,
|
|
376
|
+
});
|
|
362
377
|
} finally {
|
|
363
378
|
await runtimeResult?.lease?.release();
|
|
364
379
|
await noticeResult.lease?.release();
|
package/bin/core-bootstrap.js
CHANGED
|
@@ -5,15 +5,12 @@ const path = require('node:path');
|
|
|
5
5
|
const { pathToFileURL } = require('node:url');
|
|
6
6
|
|
|
7
7
|
const { acquireSharedRuntimeLease } = require('./update-lease');
|
|
8
|
-
const { installWindowsNodeCrashDump } = require('./windows-node-crash-dump.cjs');
|
|
9
8
|
|
|
10
9
|
const CORE_LOADED_MESSAGE = 'blun-core-bootstrap-loaded';
|
|
11
10
|
|
|
12
11
|
async function runCoreBootstrap() {
|
|
13
12
|
const packageRoot = path.resolve(__dirname, '..');
|
|
14
13
|
const mainPath = path.join(packageRoot, 'blun.mjs');
|
|
15
|
-
const informational = process.argv.slice(2).some(arg => ['-h', '--help', '-V', '--version'].includes(arg));
|
|
16
|
-
if (!informational) installWindowsNodeCrashDump({ homeDir: process.env.BLUN_HOME });
|
|
17
14
|
const leaseResult = await acquireSharedRuntimeLease({ packageRoot });
|
|
18
15
|
if (!leaseResult.acquired) throw new Error('RUNTIME_PROTECTION_UNAVAILABLE');
|
|
19
16
|
|
|
@@ -34,7 +31,11 @@ async function runCoreBootstrap() {
|
|
|
34
31
|
|
|
35
32
|
if (process.connected) {
|
|
36
33
|
try {
|
|
37
|
-
process.send({ type: CORE_LOADED_MESSAGE })
|
|
34
|
+
process.send({ type: CORE_LOADED_MESSAGE }, () => {
|
|
35
|
+
try {
|
|
36
|
+
process.disconnect();
|
|
37
|
+
} catch {}
|
|
38
|
+
});
|
|
38
39
|
} catch {}
|
|
39
40
|
}
|
|
40
41
|
}
|
package/bin/king.js
CHANGED
|
@@ -325,40 +325,55 @@ async function connectExistingRuntimeLease(timeoutMs = 3_000) {
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
async function main() {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
328
|
+
const explicitUpdateRequest = process.argv.length === 3
|
|
329
|
+
&& /^(?:update|upgrade)$/iu.test(process.argv[2] || '');
|
|
330
|
+
let noticeResult = await acquireNoticeLease();
|
|
331
|
+
let runtimeResult;
|
|
332
|
+
try {
|
|
333
|
+
if (explicitUpdateRequest) {
|
|
334
|
+
runtimeResult = await connectExistingRuntimeLease(750);
|
|
335
|
+
if (!runtimeResult.acquired) {
|
|
336
|
+
runtimeResult = undefined;
|
|
337
|
+
if (!noticeResult.acquired || !await installLeaseIsClear()) {
|
|
338
|
+
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
339
|
+
process.exitCode = 1;
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
} else {
|
|
344
|
+
const installClear = await installLeaseIsClear();
|
|
345
|
+
if (!installClear || !noticeResult.acquired) {
|
|
346
|
+
runtimeResult = await connectExistingRuntimeLease();
|
|
347
|
+
if (!runtimeResult.acquired && !installClear) {
|
|
348
|
+
if (!await installLeaseIsClear()) {
|
|
349
|
+
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
350
|
+
process.exitCode = 1;
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
runtimeResult = undefined;
|
|
354
|
+
}
|
|
355
|
+
if (!runtimeResult?.acquired && !noticeResult.acquired) {
|
|
356
|
+
noticeResult = await acquireNoticeLease();
|
|
357
|
+
if (!noticeResult.acquired) {
|
|
358
|
+
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
359
|
+
process.exitCode = 1;
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
351
365
|
noticeResult.lease?.assertOwned();
|
|
352
366
|
runtimeResult?.lease?.assertOwned();
|
|
353
367
|
const { runLauncher } = require('./launcher-runtime');
|
|
354
368
|
noticeResult.lease?.assertOwned();
|
|
355
369
|
runtimeResult?.lease?.assertOwned();
|
|
356
370
|
const filename = path.basename(__filename).toLowerCase();
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
371
|
+
await runLauncher({
|
|
372
|
+
mode: filename.startsWith('king') ? 'king' : 'blun',
|
|
373
|
+
noticeLease: noticeResult.lease,
|
|
374
|
+
runtimeLease: runtimeResult?.lease,
|
|
375
|
+
skipUpdateNotice: runtimeResult?.acquired === true || !noticeResult.acquired,
|
|
376
|
+
});
|
|
362
377
|
} finally {
|
|
363
378
|
await runtimeResult?.lease?.release();
|
|
364
379
|
await noticeResult.lease?.release();
|
package/bin/launcher-mode.js
CHANGED
|
@@ -10,8 +10,6 @@ const LAUNCHER_HELP_TEXT = [
|
|
|
10
10
|
'Launchers:',
|
|
11
11
|
' blun Starts the CLI without automatically attaching Telegram.',
|
|
12
12
|
' king Starts the same CLI and automatically attaches the configured Telegram channel.',
|
|
13
|
-
' king <profile> starts an isolated named King profile.',
|
|
14
|
-
' king -c <profile> continues the last session in that profile.',
|
|
15
13
|
' Both use the same version, account, model, and commands.',
|
|
16
14
|
' blun tools list shows optional tools; enable writes only explicit choices.',
|
|
17
15
|
'',
|
|
@@ -27,19 +25,13 @@ function launcherModeFromArgv(argv) {
|
|
|
27
25
|
function createLauncherEnvironment(sourceEnv, mode, publicPackageVersion) {
|
|
28
26
|
return {
|
|
29
27
|
...sourceEnv,
|
|
28
|
+
BLUN_NO_AUTO_UPDATE: '1',
|
|
30
29
|
BLUN_PUBLIC_PACKAGE_VERSION: publicPackageVersion,
|
|
31
30
|
BLUN_TELEGRAM_ATTACH: mode === LAUNCHER_MODES.KING ? 'on' : 'off',
|
|
32
31
|
BLUN_TELEGRAM_HEADLESS: 'off',
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
function createProtectedCoreEnvironment(sourceEnv) {
|
|
37
|
-
return {
|
|
38
|
-
...sourceEnv,
|
|
39
|
-
BLUN_NO_AUTO_UPDATE: '1',
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
35
|
function isNpmPackageUpdateRequest(args) {
|
|
44
36
|
if (!Array.isArray(args) || args.length !== 1) return false;
|
|
45
37
|
const command = String(args[0] || '').toLowerCase();
|
|
@@ -53,7 +45,6 @@ function launcherHelpText() {
|
|
|
53
45
|
module.exports = {
|
|
54
46
|
LAUNCHER_MODES,
|
|
55
47
|
createLauncherEnvironment,
|
|
56
|
-
createProtectedCoreEnvironment,
|
|
57
48
|
isNpmPackageUpdateRequest,
|
|
58
49
|
launcherHelpText,
|
|
59
50
|
launcherModeFromArgv,
|