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
package/bin/launcher-runtime.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
|
-
* BLUN CLI
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* selected update may relaunch only an explicit `king -c` resume request.
|
|
3
|
+
* BLUN CLI Launcher (npm) — Erststart richtet alles ein:
|
|
4
|
+
* 1. King richtet das Telegram-Plugin im BLUN_HOME ein
|
|
5
|
+
* Danach: TUI starten. Anmeldung und Modellkatalog kommen ueber BLUN OAuth.
|
|
8
6
|
*/
|
|
9
7
|
const fs = require('node:fs');
|
|
10
8
|
const path = require('node:path');
|
|
@@ -13,53 +11,29 @@ const { spawn } = require('node:child_process');
|
|
|
13
11
|
const {
|
|
14
12
|
LAUNCHER_MODES,
|
|
15
13
|
createLauncherEnvironment,
|
|
16
|
-
createProtectedCoreEnvironment,
|
|
17
14
|
isNpmPackageUpdateRequest,
|
|
18
15
|
launcherHelpText,
|
|
19
16
|
launcherModeFromArgv,
|
|
20
17
|
} = require('./launcher-mode');
|
|
21
|
-
const {
|
|
22
|
-
installManagedAgentSpinePlugin,
|
|
23
|
-
installManagedTelegramPlugin,
|
|
24
|
-
} = require('./plugin-bootstrap');
|
|
18
|
+
const { installManagedTelegramPlugin, installManagedAgentSpinePlugin } = require('./plugin-bootstrap');
|
|
25
19
|
const {
|
|
26
20
|
availableStandardToolNames,
|
|
27
|
-
|
|
21
|
+
seedStandardDesignSkill,
|
|
28
22
|
seedStandardTools,
|
|
29
23
|
} = require('./standard-tools-bootstrap');
|
|
30
24
|
const { CORE_LOADED_MESSAGE } = require('./core-bootstrap');
|
|
31
25
|
const { prepareManagedNodeRuntime } = require('./node-runtime');
|
|
32
26
|
const { repairConfiguredNativeModules } = require('./native-module-repair');
|
|
33
|
-
const {
|
|
34
|
-
const {
|
|
35
|
-
appendLauncherStatus,
|
|
36
|
-
claimLauncherRestart,
|
|
37
|
-
consumeIntentionalStopMarker,
|
|
38
|
-
isAbnormalCoreExit,
|
|
39
|
-
restartDelayMs,
|
|
40
|
-
} = require('./launcher-restart-policy.cjs');
|
|
41
|
-
const { acquireSharedRuntimeLease } = require('./update-lease');
|
|
27
|
+
const { acquireSharedRuntimeLease, tryAcquireUpdateLease } = require('./update-lease');
|
|
42
28
|
const { runExplicitUpdate, runUpdateNotice } = require('./update-notice');
|
|
43
29
|
const {
|
|
44
30
|
ensurePrivateDirectory,
|
|
45
31
|
securePrivateFile,
|
|
46
32
|
writePrivateFile,
|
|
47
33
|
} = require('./private-paths');
|
|
48
|
-
const {
|
|
49
|
-
parseProfileLaunchArgs,
|
|
50
|
-
resolveProfilePaths,
|
|
51
|
-
seedDefaultProfileFromLegacy,
|
|
52
|
-
} = require('./profile-runtime.cjs');
|
|
53
|
-
const {
|
|
54
|
-
migrateLegacyStartupPreferences,
|
|
55
|
-
readStartupPreferences,
|
|
56
|
-
resolveStartupUiLocale,
|
|
57
|
-
} = require('./startup-preferences.cjs');
|
|
58
34
|
|
|
59
35
|
const PKG = path.resolve(__dirname, '..');
|
|
60
|
-
const
|
|
61
|
-
const PROFILE = parseProfileLaunchArgs(RAW_ARGS, launcherModeFromArgv(process.argv));
|
|
62
|
-
const ARGS = PROFILE.args;
|
|
36
|
+
const ARGS = process.argv.slice(2);
|
|
63
37
|
const CORE_LOAD_TIMEOUT_MS = 30_000;
|
|
64
38
|
|
|
65
39
|
function normalizeWindowsPath(value) {
|
|
@@ -70,24 +44,10 @@ function resolveLauncherPrivatePaths(options = {}) {
|
|
|
70
44
|
const env = options.env || process.env;
|
|
71
45
|
const platform = options.platform || process.platform;
|
|
72
46
|
const configuredHome = String(env.BLUN_HOME || '').trim();
|
|
73
|
-
const configuredSharedHome = String(env.BLUN_SHARED_HOME || '').trim();
|
|
74
|
-
const profileName = options.profileName || PROFILE.profileName;
|
|
75
47
|
if (platform !== 'win32') {
|
|
76
48
|
const userHome = (options.homedir || os.homedir)();
|
|
77
|
-
const sharedHome = configuredSharedHome
|
|
78
|
-
? path.resolve(configuredSharedHome)
|
|
79
|
-
: configuredHome
|
|
80
|
-
? path.resolve(configuredHome)
|
|
81
|
-
: path.join(userHome, '.blun');
|
|
82
|
-
const profilePaths = resolveProfilePaths(sharedHome, profileName);
|
|
83
|
-
if (configuredSharedHome && configuredHome
|
|
84
|
-
&& path.resolve(configuredHome) !== path.resolve(profilePaths.home)) {
|
|
85
|
-
throw new Error(`BLUN_HOME passt nicht zum Profil ${profileName}: ${profilePaths.home}`);
|
|
86
|
-
}
|
|
87
49
|
return {
|
|
88
|
-
blunHome:
|
|
89
|
-
profilePaths,
|
|
90
|
-
sharedHome,
|
|
50
|
+
blunHome: configuredHome ? path.resolve(configuredHome) : path.join(userHome, '.blun'),
|
|
91
51
|
userHome,
|
|
92
52
|
};
|
|
93
53
|
}
|
|
@@ -111,40 +71,22 @@ function resolveLauncherPrivatePaths(options = {}) {
|
|
|
111
71
|
throw new Error('Das lokale Windows-Benutzerprofil ist kein kanonischer lokaler Pfad.');
|
|
112
72
|
}
|
|
113
73
|
|
|
114
|
-
const
|
|
115
|
-
const profilePaths = resolveProfilePaths(sharedHome, profileName, path.win32);
|
|
116
|
-
if (configuredSharedHome
|
|
117
|
-
&& normalizeWindowsPath(path.win32.resolve(configuredSharedHome)) !== normalizeWindowsPath(sharedHome)) {
|
|
118
|
-
throw new Error(`BLUN_SHARED_HOME muss unter Windows exakt im Windows-Benutzerprofil liegen: ${sharedHome}`);
|
|
119
|
-
}
|
|
120
|
-
const configuredHomeIsLegacyShared = !configuredSharedHome
|
|
121
|
-
&& configuredHome
|
|
122
|
-
&& normalizeWindowsPath(path.win32.resolve(configuredHome)) === normalizeWindowsPath(sharedHome);
|
|
74
|
+
const blunHome = path.win32.join(userHome, '.blun');
|
|
123
75
|
if (configuredHome
|
|
124
|
-
&&
|
|
125
|
-
|
|
126
|
-
throw new Error(`BLUN_HOME passt nicht zum Profil ${profileName}: ${profilePaths.home}`);
|
|
76
|
+
&& normalizeWindowsPath(path.win32.resolve(configuredHome)) !== normalizeWindowsPath(blunHome)) {
|
|
77
|
+
throw new Error(`BLUN_HOME muss unter Windows exakt im Windows-Benutzerprofil liegen: ${blunHome}`);
|
|
127
78
|
}
|
|
128
|
-
return {
|
|
129
|
-
blunHome: profilePaths.home,
|
|
130
|
-
profilePaths,
|
|
131
|
-
sharedHome,
|
|
132
|
-
userHome,
|
|
133
|
-
};
|
|
79
|
+
return { blunHome, userHome };
|
|
134
80
|
}
|
|
135
81
|
|
|
136
|
-
function
|
|
137
|
-
const { version } = JSON.parse(fs.readFileSync(path.join(
|
|
82
|
+
function readPackageVersion() {
|
|
83
|
+
const { version } = JSON.parse(fs.readFileSync(path.join(PKG, 'package.json'), 'utf8'));
|
|
138
84
|
if (typeof version !== 'string' || version.length === 0) {
|
|
139
85
|
throw new Error('Ungueltige Paketversion in package.json');
|
|
140
86
|
}
|
|
141
87
|
return version;
|
|
142
88
|
}
|
|
143
89
|
|
|
144
|
-
function readPackageVersion() {
|
|
145
|
-
return readPackageVersionAt(PKG);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
90
|
function shouldDetachProtectedCore(options = {}) {
|
|
149
91
|
const platform = options.platform || process.platform;
|
|
150
92
|
const stdinIsTTY = Object.hasOwn(options, 'stdinIsTTY')
|
|
@@ -153,15 +95,14 @@ function shouldDetachProtectedCore(options = {}) {
|
|
|
153
95
|
return platform !== 'win32' || stdinIsTTY !== true;
|
|
154
96
|
}
|
|
155
97
|
|
|
156
|
-
function spawnProtectedCore(args, env, cwd
|
|
157
|
-
const packageRoot = path.resolve(options.packageRoot || PKG);
|
|
98
|
+
function spawnProtectedCore(args, env, cwd) {
|
|
158
99
|
const child = spawn(
|
|
159
100
|
process.execPath,
|
|
160
|
-
[path.join(
|
|
101
|
+
[path.join(PKG, 'bin', 'core-bootstrap.js'), ...args],
|
|
161
102
|
{
|
|
162
103
|
cwd,
|
|
163
104
|
detached: shouldDetachProtectedCore(),
|
|
164
|
-
env
|
|
105
|
+
env,
|
|
165
106
|
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
|
|
166
107
|
windowsHide: true,
|
|
167
108
|
},
|
|
@@ -201,12 +142,24 @@ function spawnProtectedCore(args, env, cwd, options = {}) {
|
|
|
201
142
|
process.once(signal, handler);
|
|
202
143
|
}
|
|
203
144
|
child.on('message', (message) => {
|
|
204
|
-
if (message?.type
|
|
205
|
-
|
|
145
|
+
if (message?.type !== CORE_LOADED_MESSAGE) return;
|
|
146
|
+
settleLoaded(true);
|
|
147
|
+
try {
|
|
148
|
+
child.disconnect();
|
|
149
|
+
} catch {}
|
|
206
150
|
});
|
|
207
151
|
child.once('error', (error) => settleCompleted({ error }));
|
|
208
152
|
child.once('exit', (code, signal) => settleCompleted({ code, signal }));
|
|
209
|
-
return { child, completed, loaded
|
|
153
|
+
return { child, completed, loaded };
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async function superviseProtectedCore(args, env, cwd, releaseNotice) {
|
|
157
|
+
const core = spawnProtectedCore(args, env, cwd);
|
|
158
|
+
const loaded = await core.loaded;
|
|
159
|
+
await releaseNotice();
|
|
160
|
+
const result = await core.completed;
|
|
161
|
+
if (result.error) throw result.error;
|
|
162
|
+
return exitCodeForChild(result, loaded);
|
|
210
163
|
}
|
|
211
164
|
|
|
212
165
|
function exitCodeForChild(result, loaded) {
|
|
@@ -217,83 +170,6 @@ function exitCodeForChild(result, loaded) {
|
|
|
217
170
|
return 1;
|
|
218
171
|
}
|
|
219
172
|
|
|
220
|
-
function shouldResumeAfterStartupUpdate(args, updateResult) {
|
|
221
|
-
return updateResult?.kind === 'installed'
|
|
222
|
-
&& Array.isArray(args)
|
|
223
|
-
&& args.length === 1
|
|
224
|
-
&& args[0] === '-c';
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function clearStartupUpdateViewport(output = process.stdout) {
|
|
228
|
-
if (output?.isTTY !== true || typeof output.write !== 'function') return false;
|
|
229
|
-
output.write('\u001B[2J\u001B[H');
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
async function superviseProtectedCore(args, env, cwd, releaseLauncherLeases, options = {}) {
|
|
234
|
-
const spawnCore = options.spawnProtectedCore || spawnProtectedCore;
|
|
235
|
-
const waitBeforeRestart = options.waitBeforeRestart
|
|
236
|
-
|| ((delayMs) => new Promise((resolve) => setTimeout(resolve, delayMs)));
|
|
237
|
-
const now = options.now || Date.now;
|
|
238
|
-
let core = options.existingCore || spawnCore(args, env, cwd, {
|
|
239
|
-
packageRoot: options.packageRoot || PKG,
|
|
240
|
-
});
|
|
241
|
-
let leasesReleased = false;
|
|
242
|
-
for (;;) {
|
|
243
|
-
const loaded = await core.loaded;
|
|
244
|
-
if (loaded && !leasesReleased) {
|
|
245
|
-
leasesReleased = true;
|
|
246
|
-
await releaseLauncherLeases();
|
|
247
|
-
}
|
|
248
|
-
const result = await core.completed;
|
|
249
|
-
const exitCode = result.error ? 1 : exitCodeForChild(result, loaded);
|
|
250
|
-
const intentionalStop = (options.consumeIntentionalStopMarker || consumeIntentionalStopMarker)({
|
|
251
|
-
homeDir: env.BLUN_HOME,
|
|
252
|
-
childPid: core.child?.pid,
|
|
253
|
-
nowMs: now(),
|
|
254
|
-
});
|
|
255
|
-
recordRuntimeExit({
|
|
256
|
-
homeDir: env.BLUN_HOME,
|
|
257
|
-
source: 'launcher',
|
|
258
|
-
kind: result.error ? 'child-error' : 'child-exit',
|
|
259
|
-
exitCode,
|
|
260
|
-
signal: result.signal,
|
|
261
|
-
phase: loaded ? 'runtime' : 'startup',
|
|
262
|
-
cliVersion: env.BLUN_PUBLIC_PACKAGE_VERSION,
|
|
263
|
-
profile: env.BLUN_PROFILE,
|
|
264
|
-
loaded,
|
|
265
|
-
childPid: core.child?.pid,
|
|
266
|
-
...(result.error ? { error: result.error } : {}),
|
|
267
|
-
});
|
|
268
|
-
if (intentionalStop || !isAbnormalCoreExit(result, loaded)) {
|
|
269
|
-
if (result.error) throw result.error;
|
|
270
|
-
return exitCode;
|
|
271
|
-
}
|
|
272
|
-
const claim = (options.claimLauncherRestart || claimLauncherRestart)({
|
|
273
|
-
homeDir: env.BLUN_HOME,
|
|
274
|
-
nowMs: now(),
|
|
275
|
-
});
|
|
276
|
-
const status = {
|
|
277
|
-
homeDir: env.BLUN_HOME,
|
|
278
|
-
stateDir: env.BLUN_TELEGRAM_STATE_DIR
|
|
279
|
-
|| path.join(env.BLUN_SHARED_HOME || env.BLUN_HOME, 'channels', 'telegram'),
|
|
280
|
-
nowMs: now(),
|
|
281
|
-
attempt: claim.attempt,
|
|
282
|
-
limit: claim.limit,
|
|
283
|
-
exitCode,
|
|
284
|
-
signal: result.signal,
|
|
285
|
-
kind: claim.allowed ? 'launcher-restart' : 'launcher-restart-exhausted',
|
|
286
|
-
};
|
|
287
|
-
try { (options.appendLauncherStatus || appendLauncherStatus)(status); } catch {}
|
|
288
|
-
if (!claim.allowed) {
|
|
289
|
-
if (result.error) throw result.error;
|
|
290
|
-
return exitCode;
|
|
291
|
-
}
|
|
292
|
-
await waitBeforeRestart(restartDelayMs(claim.attempt));
|
|
293
|
-
core = spawnCore(args, env, cwd, { packageRoot: options.packageRoot || PKG });
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
173
|
function installTelegramForProfile(packageRoot, blunDir) {
|
|
298
174
|
installManagedTelegramPlugin({ packageRoot, blunDir });
|
|
299
175
|
const channelsDir = path.join(blunDir, 'channels');
|
|
@@ -308,45 +184,11 @@ function installTelegramForProfile(packageRoot, blunDir) {
|
|
|
308
184
|
}
|
|
309
185
|
}
|
|
310
186
|
|
|
311
|
-
function installAgentSpineForProfile(packageRoot, blunDir) {
|
|
312
|
-
installManagedAgentSpinePlugin({ packageRoot, blunDir });
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
function installAgentSpineForExistingProfiles(packageRoot, _sharedHome, currentProfileHome) {
|
|
316
|
-
// A dormant profile is verified when that profile is launched. Rescanning all
|
|
317
|
-
// profiles here makes every startup slower as old profiles accumulate.
|
|
318
|
-
const profileHome = path.resolve(currentProfileHome);
|
|
319
|
-
ensurePrivateDirectory(profileHome);
|
|
320
|
-
installAgentSpineForProfile(packageRoot, profileHome);
|
|
321
|
-
return [profileHome];
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
function createManagedNodeEnvironment(binary, env = process.env, platform = process.platform) {
|
|
325
|
-
const pathImpl = platform === 'win32' ? path.win32 : path.posix;
|
|
326
|
-
const separator = platform === 'win32' ? path.win32.delimiter : path.posix.delimiter;
|
|
327
|
-
const pathKeys = Object.keys(env).filter((key) => key.toLowerCase() === 'path');
|
|
328
|
-
const targetKey = pathKeys[0] || (platform === 'win32' ? 'Path' : 'PATH');
|
|
329
|
-
const managedDirectory = pathImpl.dirname(pathImpl.resolve(binary));
|
|
330
|
-
const normalize = (value) => {
|
|
331
|
-
const resolved = pathImpl.normalize(value);
|
|
332
|
-
return platform === 'win32' ? resolved.toLowerCase() : resolved;
|
|
333
|
-
};
|
|
334
|
-
const managedIdentity = normalize(managedDirectory);
|
|
335
|
-
const existing = pathKeys.flatMap((key) => String(env[key] || '').split(separator))
|
|
336
|
-
.map((entry) => entry.trim())
|
|
337
|
-
.filter(Boolean)
|
|
338
|
-
.filter((entry) => normalize(entry) !== managedIdentity);
|
|
339
|
-
const result = { ...env };
|
|
340
|
-
for (const key of pathKeys) delete result[key];
|
|
341
|
-
result[targetKey] = [managedDirectory, ...existing].join(separator);
|
|
342
|
-
return result;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
187
|
function spawnManagedLauncher(binary, cwd) {
|
|
346
188
|
return new Promise((resolve, reject) => {
|
|
347
189
|
const child = spawn(binary, process.argv.slice(1), {
|
|
348
190
|
cwd,
|
|
349
|
-
env:
|
|
191
|
+
env: process.env,
|
|
350
192
|
stdio: 'inherit',
|
|
351
193
|
windowsHide: true,
|
|
352
194
|
});
|
|
@@ -374,17 +216,41 @@ async function runLauncher(options = {}) {
|
|
|
374
216
|
const mode = options.mode || launcherModeFromArgv(process.argv);
|
|
375
217
|
const explicitUpdateRequest = isNpmPackageUpdateRequest(ARGS);
|
|
376
218
|
const explicitToolsRequest = String(ARGS[0] || '').toLowerCase() === 'tools';
|
|
377
|
-
const
|
|
219
|
+
const noticeResult = options.skipUpdateNotice === true
|
|
220
|
+
? { acquired: true, lease: { assertOwned() {}, async release() {} } }
|
|
221
|
+
: options.noticeLease
|
|
222
|
+
? { acquired: true, lease: options.noticeLease }
|
|
223
|
+
: await tryAcquireUpdateLease({ packageRoot: PKG, role: 'notice' });
|
|
224
|
+
if (!noticeResult.acquired) {
|
|
225
|
+
if (explicitUpdateRequest) {
|
|
226
|
+
process.stderr.write('Das Update konnte nicht verifiziert werden.\n');
|
|
227
|
+
process.exitCode = 1;
|
|
228
|
+
}
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const noticeLease = noticeResult.lease;
|
|
378
232
|
let runtimeLease = options.runtimeLease;
|
|
379
|
-
let
|
|
380
|
-
const
|
|
381
|
-
if (
|
|
382
|
-
|
|
383
|
-
await
|
|
233
|
+
let noticeReleased = false;
|
|
234
|
+
const releaseNotice = async () => {
|
|
235
|
+
if (noticeReleased) return;
|
|
236
|
+
noticeReleased = true;
|
|
237
|
+
await noticeLease.release();
|
|
384
238
|
await runtimeLease?.release();
|
|
385
239
|
};
|
|
386
240
|
|
|
387
241
|
try {
|
|
242
|
+
if (!runtimeLease && !explicitUpdateRequest) {
|
|
243
|
+
const installProbe = await tryAcquireUpdateLease({ packageRoot: PKG, role: 'install' });
|
|
244
|
+
if (!installProbe.acquired) {
|
|
245
|
+
process.stderr.write(explicitUpdateRequest
|
|
246
|
+
? 'Das Update konnte nicht verifiziert werden.\n'
|
|
247
|
+
: 'Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
248
|
+
process.exitCode = 1;
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
await installProbe.lease.release();
|
|
252
|
+
}
|
|
253
|
+
|
|
388
254
|
if (explicitToolsRequest) {
|
|
389
255
|
const action = String(ARGS[1] || '').toLowerCase();
|
|
390
256
|
const available = availableStandardToolNames({ packageRoot: PKG });
|
|
@@ -405,13 +271,12 @@ async function runLauncher(options = {}) {
|
|
|
405
271
|
if (mcpNames.length > 0) {
|
|
406
272
|
seedStandardTools({
|
|
407
273
|
packageRoot: PKG,
|
|
408
|
-
blunDir: privatePaths.
|
|
274
|
+
blunDir: privatePaths.blunHome,
|
|
409
275
|
names: mcpNames,
|
|
410
|
-
forceEnable: true,
|
|
411
276
|
});
|
|
412
277
|
}
|
|
413
278
|
if (selected.includes('telegram')) {
|
|
414
|
-
installTelegramForProfile(PKG, privatePaths.
|
|
279
|
+
installTelegramForProfile(PKG, privatePaths.blunHome);
|
|
415
280
|
}
|
|
416
281
|
process.stdout.write(`${selected.join('\n')}\n`);
|
|
417
282
|
return;
|
|
@@ -420,19 +285,35 @@ async function runLauncher(options = {}) {
|
|
|
420
285
|
process.exitCode = 1;
|
|
421
286
|
return;
|
|
422
287
|
}
|
|
423
|
-
|
|
424
288
|
if (ARGS.some((arg) => arg === '--version' || arg === '-V')) {
|
|
425
289
|
process.stdout.write(`${readPackageVersion()}\n`);
|
|
426
290
|
return;
|
|
427
291
|
}
|
|
428
292
|
|
|
429
|
-
|
|
293
|
+
if (explicitUpdateRequest) {
|
|
294
|
+
const privatePaths = resolveLauncherPrivatePaths();
|
|
295
|
+
const result = await runExplicitUpdate({
|
|
296
|
+
currentVersion: readPackageVersion(),
|
|
297
|
+
env: process.env,
|
|
298
|
+
stdin: process.stdin,
|
|
299
|
+
stdout: process.stdout,
|
|
300
|
+
stderr: process.stderr,
|
|
301
|
+
blunDir: privatePaths.blunHome,
|
|
302
|
+
packageRoot: PKG,
|
|
303
|
+
noticeLease,
|
|
304
|
+
request: ARGS[0],
|
|
305
|
+
});
|
|
306
|
+
if (result.kind === 'failed') process.exitCode = result.exitCode || 1;
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
let privatePaths;
|
|
430
311
|
const getPrivatePaths = () => {
|
|
431
|
-
|
|
432
|
-
return
|
|
312
|
+
privatePaths ||= resolveLauncherPrivatePaths();
|
|
313
|
+
return privatePaths;
|
|
433
314
|
};
|
|
434
315
|
const nodeRuntime = await prepareManagedNodeRuntime({
|
|
435
|
-
getBlunDir: () => getPrivatePaths().
|
|
316
|
+
getBlunDir: () => getPrivatePaths().blunHome,
|
|
436
317
|
});
|
|
437
318
|
if (nodeRuntime.kind === 'failed') {
|
|
438
319
|
process.stderr.write(`${nodeRuntime.message}\n`);
|
|
@@ -441,91 +322,38 @@ async function runLauncher(options = {}) {
|
|
|
441
322
|
}
|
|
442
323
|
if (nodeRuntime.kind === 'managed') {
|
|
443
324
|
process.stdout.write('BLUN hat die passende Node.js-Laufzeit eingerichtet.\n');
|
|
444
|
-
await
|
|
325
|
+
await releaseNotice();
|
|
445
326
|
process.exitCode = await spawnManagedLauncher(nodeRuntime.binary, callerCwd);
|
|
446
327
|
return;
|
|
447
328
|
}
|
|
448
329
|
|
|
449
|
-
if (explicitUpdateRequest) {
|
|
450
|
-
const privatePaths = getPrivatePaths();
|
|
451
|
-
ensurePrivateDirectory(privatePaths.sharedHome);
|
|
452
|
-
ensurePrivateDirectory(privatePaths.profilePaths.home);
|
|
453
|
-
migrateLegacyStartupPreferences(privatePaths.profilePaths.home);
|
|
454
|
-
const startupPreferences = readStartupPreferences(privatePaths.profilePaths.home);
|
|
455
|
-
const result = await runExplicitUpdate({
|
|
456
|
-
currentVersion: readPackageVersion(),
|
|
457
|
-
env: process.env,
|
|
458
|
-
stdin: process.stdin,
|
|
459
|
-
stdout: process.stdout,
|
|
460
|
-
stderr: process.stderr,
|
|
461
|
-
blunDir: privatePaths.sharedHome,
|
|
462
|
-
uiLocale: resolveStartupUiLocale(startupPreferences.uiLocale, process.env),
|
|
463
|
-
packageRoot: PKG,
|
|
464
|
-
noticeLease: launcherLease,
|
|
465
|
-
});
|
|
466
|
-
if (result.kind === 'failed') process.exitCode = result.exitCode || 1;
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
330
|
if (ARGS.some((arg) => arg === '--help' || arg === '-h')) {
|
|
471
331
|
process.stdout.write(launcherHelpText());
|
|
472
332
|
const env = createLauncherEnvironment(process.env, mode, readPackageVersion());
|
|
473
333
|
const informationalEnv = { ...process.env };
|
|
474
334
|
delete informationalEnv.BLUN_HOME;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
env.BLUN_HOME = privatePaths.profilePaths.home;
|
|
478
|
-
env.BLUN_SHARED_HOME = privatePaths.sharedHome;
|
|
479
|
-
env.BLUN_LOG_HOME = privatePaths.sharedHome;
|
|
480
|
-
env.BLUN_PROFILE = PROFILE.profileName;
|
|
481
|
-
if (!runtimeLease) {
|
|
482
|
-
const runtimeResult = await acquireSharedRuntimeLease({ packageRoot: PKG });
|
|
483
|
-
if (!runtimeResult.acquired) {
|
|
484
|
-
process.stderr.write('Der geschuetzte BLUN-Start ist gerade nicht verfuegbar.\n');
|
|
485
|
-
process.exitCode = 1;
|
|
486
|
-
return;
|
|
487
|
-
}
|
|
488
|
-
runtimeLease = runtimeResult.lease;
|
|
489
|
-
}
|
|
490
|
-
process.exitCode = await superviseProtectedCore(
|
|
491
|
-
ARGS,
|
|
492
|
-
env,
|
|
493
|
-
callerCwd,
|
|
494
|
-
releaseLauncherLeases,
|
|
495
|
-
);
|
|
335
|
+
env.BLUN_HOME = resolveLauncherPrivatePaths({ env: informationalEnv }).blunHome;
|
|
336
|
+
process.exitCode = await superviseProtectedCore(ARGS, env, callerCwd, releaseNotice);
|
|
496
337
|
return;
|
|
497
338
|
}
|
|
498
339
|
|
|
499
|
-
const
|
|
500
|
-
const profilePaths = privatePaths.profilePaths;
|
|
501
|
-
ensurePrivateDirectory(privatePaths.sharedHome);
|
|
502
|
-
if (PROFILE.profileName === 'default') {
|
|
503
|
-
seedDefaultProfileFromLegacy(privatePaths.sharedHome);
|
|
504
|
-
}
|
|
505
|
-
const blunDir = profilePaths.home;
|
|
340
|
+
const blunDir = getPrivatePaths().blunHome;
|
|
506
341
|
ensurePrivateDirectory(blunDir);
|
|
507
|
-
migrateLegacyStartupPreferences(blunDir);
|
|
508
|
-
const startupPreferences = readStartupPreferences(blunDir);
|
|
509
342
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
await releaseLauncherLeases();
|
|
525
|
-
clearStartupUpdateViewport(process.stdout);
|
|
526
|
-
process.exitCode = await spawnManagedLauncher(process.execPath, callerCwd);
|
|
527
|
-
return;
|
|
528
|
-
}
|
|
343
|
+
// --- 1. Oeffentlicher npm-Update-Dialog. -------------------------------
|
|
344
|
+
const updateResult = options.skipUpdateNotice === true
|
|
345
|
+
? { kind: 'continue', reason: 'notice_busy' }
|
|
346
|
+
: await runUpdateNotice({
|
|
347
|
+
currentVersion: readPackageVersion(),
|
|
348
|
+
argv: ARGS,
|
|
349
|
+
env: process.env,
|
|
350
|
+
stdin: process.stdin,
|
|
351
|
+
stdout: process.stdout,
|
|
352
|
+
stderr: process.stderr,
|
|
353
|
+
blunDir,
|
|
354
|
+
packageRoot: PKG,
|
|
355
|
+
noticeLease,
|
|
356
|
+
});
|
|
529
357
|
if (updateResult.kind === 'installed' || updateResult.kind === 'update_in_progress') return;
|
|
530
358
|
|
|
531
359
|
if (!runtimeLease) {
|
|
@@ -538,9 +366,14 @@ async function runLauncher(options = {}) {
|
|
|
538
366
|
runtimeLease = runtimeResult.lease;
|
|
539
367
|
}
|
|
540
368
|
|
|
369
|
+
// --- 2. Bestehende Konfiguration absichern -------------------------------
|
|
370
|
+
// Ein frischer Start bleibt absichtlich ohne statischen Anbieter. /login
|
|
371
|
+
// provisioniert King ueber den BLUN-OAuth-Server.
|
|
541
372
|
const cfgFile = path.join(blunDir, 'config.toml');
|
|
542
373
|
if (fs.existsSync(cfgFile)) securePrivateFile(cfgFile);
|
|
374
|
+
require('./verify-bundled-agent-sources.cjs').verifyBundledAgentSources(PKG);
|
|
543
375
|
|
|
376
|
+
// --- 3. BLUN-Standard-MCPs additiv im Benutzerprofil einrichten ---------
|
|
544
377
|
const standardMcpNames = availableStandardToolNames({ packageRoot: PKG })
|
|
545
378
|
.filter((name) => name !== 'telegram');
|
|
546
379
|
seedStandardTools({
|
|
@@ -548,9 +381,15 @@ async function runLauncher(options = {}) {
|
|
|
548
381
|
blunDir,
|
|
549
382
|
names: standardMcpNames,
|
|
550
383
|
});
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
384
|
+
|
|
385
|
+
// --- 4. Eigenes BLUN-Grunddesign als einzigen Standard-Skill installieren
|
|
386
|
+
seedStandardDesignSkill({ packageRoot: PKG, blunDir });
|
|
387
|
+
installManagedAgentSpinePlugin({ packageRoot: PKG, blunDir });
|
|
388
|
+
|
|
389
|
+
// --- 5. Telegram-Plugin + Token-Vorlage (nur King) -----------------------
|
|
390
|
+
if (mode === LAUNCHER_MODES.KING) {
|
|
391
|
+
installTelegramForProfile(PKG, blunDir);
|
|
392
|
+
}
|
|
554
393
|
|
|
555
394
|
const nativeModules = repairConfiguredNativeModules({
|
|
556
395
|
blunDir,
|
|
@@ -563,30 +402,24 @@ async function runLauncher(options = {}) {
|
|
|
563
402
|
process.stdout.write('Native Node.js-Module sind wieder einsatzbereit.\n');
|
|
564
403
|
}
|
|
565
404
|
|
|
405
|
+
// --- 6. Start -----------------------------------------------------------
|
|
566
406
|
const env = createLauncherEnvironment(process.env, mode, readPackageVersion());
|
|
567
|
-
env.BLUN_HOME =
|
|
568
|
-
env.
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
releaseLauncherLeases,
|
|
576
|
-
);
|
|
407
|
+
env.BLUN_HOME = blunDir;
|
|
408
|
+
env.BLUN_MODEL_MAX_COMPLETION_TOKENS = env.BLUN_MODEL_MAX_COMPLETION_TOKENS || '32768';
|
|
409
|
+
process.exitCode = await superviseProtectedCore(
|
|
410
|
+
ARGS,
|
|
411
|
+
env,
|
|
412
|
+
callerCwd,
|
|
413
|
+
releaseNotice,
|
|
414
|
+
);
|
|
577
415
|
} finally {
|
|
578
|
-
await
|
|
416
|
+
await releaseNotice();
|
|
579
417
|
}
|
|
580
418
|
}
|
|
581
419
|
|
|
582
420
|
module.exports = {
|
|
583
|
-
clearStartupUpdateViewport,
|
|
584
|
-
createManagedNodeEnvironment,
|
|
585
|
-
installAgentSpineForExistingProfiles,
|
|
586
421
|
resolveLauncherPrivatePaths,
|
|
587
422
|
runLauncher,
|
|
588
|
-
shouldResumeAfterStartupUpdate,
|
|
589
423
|
shouldDetachProtectedCore,
|
|
590
424
|
spawnManagedLauncher,
|
|
591
|
-
superviseProtectedCore,
|
|
592
425
|
};
|
package/bin/managed-node.js
CHANGED
|
File without changes
|
|
@@ -89,7 +89,6 @@ function copySelectedAgentSpinePlugin({ blunDir, sourceRoot }) {
|
|
|
89
89
|
const managed = path.join(plugins, 'managed');
|
|
90
90
|
ensurePrivateDirectory(plugins);
|
|
91
91
|
ensurePrivateDirectory(managed);
|
|
92
|
-
// Explicit installs must see current source bytes, not the bundled-source cache.
|
|
93
92
|
const digest = digestPluginEntries(snapshotPluginTree(sourceRoot));
|
|
94
93
|
const pluginRoot = path.join(managed, `agent-spine-${digest}`);
|
|
95
94
|
if (fs.existsSync(pluginRoot)) {
|
|
File without changes
|
package/bin/node-runtime.js
CHANGED
|
File without changes
|
package/bin/node-version.js
CHANGED
|
File without changes
|