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.
Files changed (436) hide show
  1. package/CHANGELOG.md +11 -185
  2. package/LIESMICH.txt +51 -13
  3. package/README.md +44 -47
  4. package/agent-spine-plugin/.codex-plugin/plugin.json +16 -4
  5. package/agent-spine-plugin/CHANGELOG.md +37 -5
  6. package/agent-spine-plugin/README.md +3 -3
  7. package/agent-spine-plugin/blun.plugin.json +45 -10
  8. package/agent-spine-plugin/docs/artifact-evaluation.md +93 -0
  9. package/agent-spine-plugin/docs/host-integration.md +42 -27
  10. package/agent-spine-plugin/docs/preflight-recall.md +4 -2
  11. package/agent-spine-plugin/docs/session-timeline.md +97 -236
  12. package/agent-spine-plugin/docs/world-model.md +25 -0
  13. package/agent-spine-plugin/hooks/codex.json +1 -1
  14. package/agent-spine-plugin/hooks/hooks.json +1 -1
  15. package/agent-spine-plugin/package.json +1 -3
  16. package/agent-spine-plugin/scripts/check-hosts.js +3 -3
  17. package/agent-spine-plugin/scripts/release-check.js +10 -5
  18. package/agent-spine-plugin/scripts/run-checks.js +4 -1
  19. package/agent-spine-plugin/scripts/run-tests-hermetic.js +32 -6
  20. package/agent-spine-plugin/src/cli-learning.js +15 -0
  21. package/agent-spine-plugin/src/cli.js +2 -0
  22. package/agent-spine-plugin/src/hook.js +32 -32
  23. package/agent-spine-plugin/src/lib/action-lesson-recall.js +73 -8
  24. package/agent-spine-plugin/src/lib/briefing.js +146 -36
  25. package/agent-spine-plugin/src/lib/channel-continuity.js +19 -0
  26. package/agent-spine-plugin/src/lib/delivery-agent-usage.js +14 -7
  27. package/agent-spine-plugin/src/lib/gateway-group-response.js +128 -0
  28. package/agent-spine-plugin/src/lib/gateway-runs.js +24 -15
  29. package/agent-spine-plugin/src/lib/hook-briefing-use.js +13 -3
  30. package/agent-spine-plugin/src/lib/hook-context.js +16 -3
  31. package/agent-spine-plugin/src/lib/hook-output.js +129 -5
  32. package/agent-spine-plugin/src/lib/hook-timeline.js +5 -3
  33. package/agent-spine-plugin/src/lib/indexed-memory.js +2 -2
  34. package/agent-spine-plugin/src/lib/learning-artifact-evaluator.js +114 -0
  35. package/agent-spine-plugin/src/lib/learning-context.js +11 -4
  36. package/agent-spine-plugin/src/lib/learning-measurements.js +2 -2
  37. package/agent-spine-plugin/src/lib/mcp-runtime.js +89 -3
  38. package/agent-spine-plugin/src/lib/mcp-source-context.js +12 -2
  39. package/agent-spine-plugin/src/lib/mcp-timeline-tools.js +91 -8
  40. package/agent-spine-plugin/src/lib/mcp-world-tools.js +2 -2
  41. package/agent-spine-plugin/src/lib/owned-file-lock.js +20 -1
  42. package/agent-spine-plugin/src/lib/persona-runtime.js +2 -2
  43. package/agent-spine-plugin/src/lib/preflight-delivery-id.js +27 -0
  44. package/agent-spine-plugin/src/lib/preflight.js +4 -4
  45. package/agent-spine-plugin/src/lib/session-timeline-codex.js +15 -0
  46. package/agent-spine-plugin/src/lib/session-timeline-contract.js +12 -4
  47. package/agent-spine-plugin/src/lib/session-timeline-event-extract.js +36 -7
  48. package/agent-spine-plugin/src/lib/session-timeline-host-origin.js +13 -10
  49. package/agent-spine-plugin/src/lib/session-timeline-invocation.js +1 -1
  50. package/agent-spine-plugin/src/lib/session-timeline-king.js +14 -0
  51. package/agent-spine-plugin/src/lib/session-timeline-prior.js +18 -12
  52. package/agent-spine-plugin/src/lib/session-timeline-provider.js +5 -0
  53. package/agent-spine-plugin/src/lib/session-timeline-query.js +2 -0
  54. package/agent-spine-plugin/src/lib/session-timeline-results.js +35 -10
  55. package/agent-spine-plugin/src/lib/session-timeline-source-open.js +30 -0
  56. package/agent-spine-plugin/src/lib/session-timeline.js +122 -75
  57. package/agent-spine-plugin/src/lib/source-roots.js +3 -2
  58. package/agent-spine-plugin/src/lib/task-knowledge-context.js +22 -1
  59. package/agent-spine-plugin/src/lib/timeline-continuation-update.js +100 -0
  60. package/agent-spine-plugin/src/lib/timeline-tool-guard.js +30 -7
  61. package/agent-spine-plugin/src/lib/timeline-user-feedback.js +217 -0
  62. package/agent-spine-plugin/src/lib/timeline-world-capture.js +233 -0
  63. package/agent-spine-plugin/src/lib/world-knowledge.js +59 -2
  64. package/agent-spine-plugin/src/lib/world-model.js +64 -9
  65. package/agent-spine-plugin/src/worker.js +13 -1
  66. package/bin/blun.js +43 -28
  67. package/bin/core-bootstrap.js +5 -4
  68. package/bin/king.js +43 -28
  69. package/bin/launcher-mode.js +1 -10
  70. package/bin/launcher-runtime.js +128 -295
  71. package/bin/managed-node.js +0 -0
  72. package/bin/managed-plugin-selection.cjs +0 -1
  73. package/bin/native-module-repair.js +0 -0
  74. package/bin/node-runtime.js +0 -0
  75. package/bin/node-version.js +0 -0
  76. package/bin/plugin-bootstrap.js +56 -120
  77. package/bin/private-paths.js +11 -34
  78. package/bin/standard-tools-bootstrap.js +34 -114
  79. package/bin/turn-thinking-policy.cjs +3 -11
  80. package/bin/update-copy.js +200 -0
  81. package/bin/update-lease.js +0 -0
  82. package/bin/update-notice.js +136 -289
  83. package/bin/verify-agent-behavior.cjs +122 -0
  84. package/bin/verify-agent-components.cjs +104 -0
  85. package/bin/verify-bundled-agent-sources.cjs +57 -0
  86. package/blun.mjs +143076 -135288
  87. package/bundled-agent-sources.json +701 -0
  88. package/package.json +12 -15
  89. package/standard-skills/translate-native/README.md +1293 -0
  90. package/standard-skills/translate-native/SKILL.md +172 -22
  91. package/standard-skills/translate-native/VERSION +1 -1
  92. package/standard-skills/translate-native/agents/openai.yaml +18 -0
  93. package/standard-skills/translate-native/assets/icon.svg +8 -0
  94. package/standard-skills/translate-native/docs/BLUN_CODE_INTEGRATION.md +76 -0
  95. package/standard-skills/translate-native/docs/PREMORTEM.md +489 -0
  96. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION.md +2035 -0
  97. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_API.md +1302 -0
  98. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_EVIDENCE_HTTP.md +136 -0
  99. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HEALTH_HTTP.md +130 -0
  100. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HTTP_PROVIDER.md +175 -0
  101. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_RECEIPT_VERIFIER_HTTP.md +86 -0
  102. package/standard-skills/translate-native/integrations/AGENT_RULES.md +32 -0
  103. package/standard-skills/translate-native/integrations/adapters/blun-code-language-guard.js +514 -0
  104. package/standard-skills/translate-native/integrations/adapters/node-language-guard.js +230 -0
  105. package/standard-skills/translate-native/integrations/audit_log.py +327 -0
  106. package/standard-skills/translate-native/integrations/claude_language_hook.js +1536 -0
  107. package/standard-skills/translate-native/integrations/commercial_localization_profile.py +42 -0
  108. package/standard-skills/translate-native/integrations/delivery-policy.example.json +28 -0
  109. package/standard-skills/translate-native/integrations/enforced_delivery.py +543 -0
  110. package/standard-skills/translate-native/integrations/guard_service.py +435 -0
  111. package/standard-skills/translate-native/integrations/language_gateway.py +67 -0
  112. package/standard-skills/translate-native/integrations/mcp_auth_headers.py +198 -0
  113. package/standard-skills/translate-native/integrations/mcp_http_gateway.py +429 -0
  114. package/standard-skills/translate-native/integrations/non_language_html_entities.js +1485 -0
  115. package/standard-skills/translate-native/integrations/pre_output_guard.py +65 -0
  116. package/standard-skills/translate-native/integrations/task_router.py +101 -0
  117. package/standard-skills/translate-native/integrations/website_localization.py +401 -0
  118. package/standard-skills/translate-native/integrations/website_localization_api.py +581 -0
  119. package/standard-skills/translate-native/integrations/website_localization_benchmark.py +1885 -0
  120. package/standard-skills/translate-native/integrations/website_localization_benchmark_campaign.py +1772 -0
  121. package/standard-skills/translate-native/integrations/website_localization_benchmark_candidate.py +506 -0
  122. package/standard-skills/translate-native/integrations/website_localization_benchmark_http.py +400 -0
  123. package/standard-skills/translate-native/integrations/website_localization_benchmark_review_store.py +781 -0
  124. package/standard-skills/translate-native/integrations/website_localization_benchmark_reviewer_http.py +500 -0
  125. package/standard-skills/translate-native/integrations/website_localization_benchmark_runtime.py +1107 -0
  126. package/standard-skills/translate-native/integrations/website_localization_benchmark_suite.py +463 -0
  127. package/standard-skills/translate-native/integrations/website_localization_cms.py +2835 -0
  128. package/standard-skills/translate-native/integrations/website_localization_cms_client.py +875 -0
  129. package/standard-skills/translate-native/integrations/website_localization_cms_dispatch.py +805 -0
  130. package/standard-skills/translate-native/integrations/website_localization_cms_http.py +588 -0
  131. package/standard-skills/translate-native/integrations/website_localization_cms_lifecycle_monitor.py +991 -0
  132. package/standard-skills/translate-native/integrations/website_localization_cms_receiver.py +1441 -0
  133. package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py +414 -0
  134. package/standard-skills/translate-native/integrations/website_localization_cms_receiver_store.py +1073 -0
  135. package/standard-skills/translate-native/integrations/website_localization_cms_removal_dispatch.py +865 -0
  136. package/standard-skills/translate-native/integrations/website_localization_cms_source_client.py +583 -0
  137. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery.py +964 -0
  138. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_runtime.py +665 -0
  139. package/standard-skills/translate-native/integrations/website_localization_cms_source_http.py +1153 -0
  140. package/standard-skills/translate-native/integrations/website_localization_cms_source_runtime.py +675 -0
  141. package/standard-skills/translate-native/integrations/website_localization_cms_source_service.py +1125 -0
  142. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification.py +674 -0
  143. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_http.py +444 -0
  144. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver.py +1469 -0
  145. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_runtime.py +1142 -0
  146. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_processing_monitor.py +634 -0
  147. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_receiver_client.py +804 -0
  148. package/standard-skills/translate-native/integrations/website_localization_deepl_baseline.py +922 -0
  149. package/standard-skills/translate-native/integrations/website_localization_evidence_http.py +482 -0
  150. package/standard-skills/translate-native/integrations/website_localization_health.py +1541 -0
  151. package/standard-skills/translate-native/integrations/website_localization_health_http.py +372 -0
  152. package/standard-skills/translate-native/integrations/website_localization_http_provider.py +297 -0
  153. package/standard-skills/translate-native/integrations/website_localization_native_reference_http.py +479 -0
  154. package/standard-skills/translate-native/integrations/website_localization_native_reference_intake.py +363 -0
  155. package/standard-skills/translate-native/integrations/website_localization_native_reference_queue.py +1449 -0
  156. package/standard-skills/translate-native/integrations/website_localization_native_reference_store.py +420 -0
  157. package/standard-skills/translate-native/integrations/website_localization_quality_profiles.py +235 -0
  158. package/standard-skills/translate-native/integrations/website_localization_queue.py +671 -0
  159. package/standard-skills/translate-native/integrations/website_localization_receipt_verifier_http.py +516 -0
  160. package/standard-skills/translate-native/integrations/website_localization_release.py +928 -0
  161. package/standard-skills/translate-native/integrations/website_localization_release_coordinator.py +1008 -0
  162. package/standard-skills/translate-native/integrations/website_localization_runner.py +276 -0
  163. package/standard-skills/translate-native/integrations/website_localization_runtime.py +862 -0
  164. package/standard-skills/translate-native/integrations/website_localization_service.py +350 -0
  165. package/standard-skills/translate-native/integrations/website_localization_supervisor.py +511 -0
  166. package/standard-skills/translate-native/integrations/website_localization_worker.py +663 -0
  167. package/standard-skills/translate-native/provenance.json +3 -4
  168. package/standard-skills/translate-native/references/commercial-localization.md +177 -0
  169. package/standard-skills/translate-native/scripts/blun_language_guard.py +7 -1
  170. package/standard-skills/translate-native/scripts/check_commercial_review.py +80 -0
  171. package/standard-skills/translate-native/scripts/commercial_localization_profile.py +333 -0
  172. package/standard-tools/language-guard/LICENSE +21 -0
  173. package/standard-tools/language-guard/VERSION +1 -0
  174. package/standard-tools/language-guard/blun_language_guard.py +7 -1
  175. package/standard-tools/language-guard/check_commercial_review.py +80 -0
  176. package/standard-tools/language-guard/commercial_localization_profile.py +333 -0
  177. package/standard-tools/language-guard/language_gateway.py +62 -0
  178. package/standard-tools/language-guard/pre_output_guard.py +64 -0
  179. package/standard-tools/language-guard/provenance.json +4 -11
  180. package/standard-tools/manifest.json +34 -11
  181. package/telegram-plugin/commands/access.md +2 -10
  182. package/telegram-plugin/dist/bridge.mjs +64041 -687
  183. package/telegram-plugin/dist/mcp-server.mjs +72810 -9027
  184. package/telegram-plugin/dist/noise.mjs +28 -63511
  185. package/agent-spine-plugin/CONTRIBUTING.md +0 -52
  186. package/agent-spine-plugin/SECURITY.md +0 -47
  187. package/agent-spine-plugin/docs/assignment-continuation.md +0 -48
  188. package/agent-spine-plugin/docs/releasing.md +0 -85
  189. package/agent-spine-plugin/docs/structured-completion.md +0 -67
  190. package/bin/abort-listener-policy.cjs +0 -43
  191. package/bin/active-steer-priority-policy.cjs +0 -24
  192. package/bin/agent-api-http-adapter.mjs +0 -446
  193. package/bin/agent-api-private-http-server.mjs +0 -288
  194. package/bin/agent-api-runtime.mjs +0 -252
  195. package/bin/agent-api-service-environment.mjs +0 -236
  196. package/bin/agent-api-service-host.mjs +0 -209
  197. package/bin/agent-api-service-process.mjs +0 -171
  198. package/bin/agent-api-session-registry.mjs +0 -428
  199. package/bin/agent-api-tool-broker.cjs +0 -248
  200. package/bin/agent-api-turn-controller.mjs +0 -461
  201. package/bin/agent-api-usage-journal.cjs +0 -259
  202. package/bin/agent-resume-snapshot.cjs +0 -241
  203. package/bin/agentspine-king-goal-inbox.mjs +0 -111
  204. package/bin/agentspine-king-goal-intake.mjs +0 -106
  205. package/bin/approval-rejection-stop.cjs +0 -15
  206. package/bin/assistant-message-offload-policy.cjs +0 -284
  207. package/bin/baseline-skill-performance-policy.cjs +0 -39
  208. package/bin/bash-search-scope-policy.cjs +0 -49
  209. package/bin/codebase-search-runtime.cjs +0 -23
  210. package/bin/cognitive-action-checkpoint.cjs +0 -1104
  211. package/bin/cognitive-attention-delivery.cjs +0 -76
  212. package/bin/cognitive-attention-policy.cjs +0 -143
  213. package/bin/cognitive-attention-runtime.cjs +0 -91
  214. package/bin/cognitive-context-projection.cjs +0 -73
  215. package/bin/cognitive-cross-portal-acceptance.cjs +0 -443
  216. package/bin/cognitive-effective-view.cjs +0 -77
  217. package/bin/cognitive-focus-projection.cjs +0 -206
  218. package/bin/cognitive-focus-scope.cjs +0 -37
  219. package/bin/cognitive-goal-autostart-policy.cjs +0 -72
  220. package/bin/cognitive-goal-time-trigger-controller.cjs +0 -146
  221. package/bin/cognitive-memory-adapter.cjs +0 -282
  222. package/bin/cognitive-memory-command.cjs +0 -293
  223. package/bin/cognitive-memory-provider.cjs +0 -92
  224. package/bin/cognitive-salience-policy.cjs +0 -159
  225. package/bin/cognitive-state-store.cjs +0 -508
  226. package/bin/cognitive-turn-lifecycle.cjs +0 -624
  227. package/bin/cognitive-work-focus.cjs +0 -180
  228. package/bin/compaction-history-archive.cjs +0 -166
  229. package/bin/compaction-history-startup.cjs +0 -50
  230. package/bin/compaction-model-policy.cjs +0 -31
  231. package/bin/compaction-stage-policy.cjs +0 -21
  232. package/bin/compaction-transaction-policy.cjs +0 -122
  233. package/bin/config-write-dedup-policy.cjs +0 -27
  234. package/bin/context-budget-ledger.cjs +0 -31
  235. package/bin/context-doctor-policy.cjs +0 -70
  236. package/bin/context-insight-policy.cjs +0 -36
  237. package/bin/context-performance-policy.cjs +0 -19
  238. package/bin/context-pressure-policy.cjs +0 -20
  239. package/bin/cron-run-output.cjs +0 -45
  240. package/bin/cron-run-store.cjs +0 -145
  241. package/bin/curiosity-scout-policy.cjs +0 -49
  242. package/bin/default-model-output-budget-policy.cjs +0 -28
  243. package/bin/durable-task-resume-policy.cjs +0 -130
  244. package/bin/durable-task-resume-runtime.cjs +0 -117
  245. package/bin/durable-task-resume-store.cjs +0 -88
  246. package/bin/editable-tool-approval-policy.cjs +0 -540
  247. package/bin/editable-tool-approval-runtime.cjs +0 -99
  248. package/bin/effective-system-prompt-cache-policy.cjs +0 -33
  249. package/bin/error-memory-performance-policy.cjs +0 -113
  250. package/bin/file-observation-policy.cjs +0 -133
  251. package/bin/foreground-output-capture-policy.cjs +0 -41
  252. package/bin/generated-source-health.cjs +0 -142
  253. package/bin/glob-pattern-policy.cjs +0 -13
  254. package/bin/goal-completion-evidence-policy.cjs +0 -120
  255. package/bin/grep-output-limit-policy.cjs +0 -39
  256. package/bin/historical-media-projection-policy.cjs +0 -48
  257. package/bin/history-offload-pressure-policy.cjs +0 -33
  258. package/bin/html-to-research-markdown.cjs +0 -147
  259. package/bin/identity-context-policy.cjs +0 -764
  260. package/bin/identity-journal-policy.cjs +0 -107
  261. package/bin/input-draft-persistence.cjs +0 -77
  262. package/bin/king-tui-function-contract.json +0 -33
  263. package/bin/launcher-restart-policy.cjs +0 -150
  264. package/bin/live-response-repetition-guard.cjs +0 -196
  265. package/bin/llm-config-log-dedup-policy.cjs +0 -76
  266. package/bin/loop-event-record-policy.cjs +0 -174
  267. package/bin/managed-context-startup-policy.cjs +0 -27
  268. package/bin/media-activity-layout-policy.cjs +0 -34
  269. package/bin/media-auto-retrieval-policy.cjs +0 -90
  270. package/bin/media-result-policy.cjs +0 -59
  271. package/bin/micro-compaction-policy.cjs +0 -145
  272. package/bin/mistake-relevance-policy.cjs +0 -319
  273. package/bin/model-retry-progress-policy.cjs +0 -46
  274. package/bin/native-large-file-io.cjs +0 -42
  275. package/bin/native-runtime-cache.cjs +0 -76
  276. package/bin/natural-presence-policy.cjs +0 -28
  277. package/bin/noninteractive-shell-env-policy.cjs +0 -19
  278. package/bin/observer-hooks.cjs +0 -14
  279. package/bin/outbound-claim-provenance.cjs +0 -150
  280. package/bin/oversized-context-offload-policy.cjs +0 -86
  281. package/bin/pending-media-policy.cjs +0 -182
  282. package/bin/pending-token-estimate-policy.cjs +0 -41
  283. package/bin/personal-memory-consent-policy.cjs +0 -72
  284. package/bin/personal-memory-performance-policy.cjs +0 -12
  285. package/bin/personality-choice-policy.cjs +0 -101
  286. package/bin/personality-memory-adapter.cjs +0 -379
  287. package/bin/personality-mode.cjs +0 -46
  288. package/bin/personality-setup-policy.cjs +0 -197
  289. package/bin/proactive-compaction-policy.cjs +0 -25
  290. package/bin/profile-identity-resolution.cjs +0 -136
  291. package/bin/profile-runtime.cjs +0 -318
  292. package/bin/profile-tool-exclusion-policy.cjs +0 -37
  293. package/bin/programmatic-context-isolation.cjs +0 -25
  294. package/bin/programmatic-tool-runtime.mjs +0 -627
  295. package/bin/provider-idle-timeout-policy.cjs +0 -14
  296. package/bin/provider-model-refresh-deadline.cjs +0 -53
  297. package/bin/provider-model-refresh-policy.cjs +0 -107
  298. package/bin/rate-limit-recovery-policy.cjs +0 -47
  299. package/bin/read-batch-policy.cjs +0 -32
  300. package/bin/read-continuation-policy.cjs +0 -59
  301. package/bin/recurring-cron-history-policy.cjs +0 -124
  302. package/bin/relationship-continuity-policy.cjs +0 -143
  303. package/bin/relationship-curiosity-policy.cjs +0 -107
  304. package/bin/relationship-learning-policy.cjs +0 -168
  305. package/bin/release-artifact-freeze-policy.cjs +0 -30
  306. package/bin/reload-plugin-bootstrap.cjs +0 -18
  307. package/bin/reload-queue-policy.cjs +0 -38
  308. package/bin/repeated-assistant-response-policy.cjs +0 -232
  309. package/bin/repeated-injection-projection.cjs +0 -107
  310. package/bin/repeated-user-message-projection.cjs +0 -8
  311. package/bin/research-page-result.cjs +0 -74
  312. package/bin/retry-checkpoint-policy.cjs +0 -13
  313. package/bin/runtime-exit-ledger.cjs +0 -144
  314. package/bin/scoped-cron-run-policy.cjs +0 -358
  315. package/bin/session-checkpoint-policy.cjs +0 -25
  316. package/bin/session-compaction-policy.cjs +0 -84
  317. package/bin/session-replay-policy.cjs +0 -20
  318. package/bin/session-replay-window-policy.cjs +0 -40
  319. package/bin/session-resume-checkpoint.cjs +0 -254
  320. package/bin/session-scrollback-archive.cjs +0 -229
  321. package/bin/skill-activation-performance-policy.cjs +0 -69
  322. package/bin/skill-listing-performance-policy.cjs +0 -92
  323. package/bin/soul-organization-policy.cjs +0 -78
  324. package/bin/soul-preservation-policy.cjs +0 -20
  325. package/bin/startup-preferences.cjs +0 -131
  326. package/bin/streaming-flush-performance-policy.cjs +0 -28
  327. package/bin/structured-agent-swarm-output.cjs +0 -325
  328. package/bin/structured-subagent-output.cjs +0 -252
  329. package/bin/subagent-context-fork-policy.cjs +0 -155
  330. package/bin/subagent-max-tokens-handoff-policy.cjs +0 -69
  331. package/bin/subagent-parent-responsiveness.cjs +0 -19
  332. package/bin/subagent-skill-policy.cjs +0 -206
  333. package/bin/subagent-timeout-policy.cjs +0 -182
  334. package/bin/subagent-tool-policy.cjs +0 -60
  335. package/bin/subagent-usage-rollup-policy.cjs +0 -29
  336. package/bin/system-prompt-context-policy.cjs +0 -124
  337. package/bin/system-prompt-token-cache-policy.cjs +0 -60
  338. package/bin/telegram-addressed-focus.cjs +0 -55
  339. package/bin/telegram-addressed-priority.cjs +0 -12
  340. package/bin/telegram-approval-relay.cjs +0 -290
  341. package/bin/telegram-bot-priority.cjs +0 -17
  342. package/bin/telegram-console-status-policy.cjs +0 -174
  343. package/bin/telegram-context-projection-policy.cjs +0 -141
  344. package/bin/telegram-delivery-lifecycle.cjs +0 -125
  345. package/bin/telegram-direct-focus-policy.cjs +0 -273
  346. package/bin/telegram-mcp-compatibility.cjs +0 -49
  347. package/bin/telegram-media-delivery-policy.cjs +0 -42
  348. package/bin/telegram-private-conversation-policy.cjs +0 -185
  349. package/bin/telegram-queue-handoff-policy.cjs +0 -73
  350. package/bin/telegram-remote-status-policy.cjs +0 -120
  351. package/bin/telegram-session-queue-runtime.mjs +0 -306
  352. package/bin/telegram-text-chunk-policy.cjs +0 -63
  353. package/bin/telegram-truncated-reply-policy.cjs +0 -37
  354. package/bin/telegram-urgent-policy.cjs +0 -45
  355. package/bin/telemetry-spool-policy.cjs +0 -57
  356. package/bin/thinking-activity-status-policy.cjs +0 -132
  357. package/bin/thinking-only-guard.cjs +0 -80
  358. package/bin/todo-list-turn-policy.cjs +0 -131
  359. package/bin/tool-call-loop-policy.cjs +0 -51
  360. package/bin/tool-file-persistence.cjs +0 -141
  361. package/bin/tool-result-offload-policy.cjs +0 -359
  362. package/bin/tool-result-offload-telemetry.cjs +0 -12
  363. package/bin/tool-schema-token-cache-policy.cjs +0 -41
  364. package/bin/tool-stream-preview-policy.cjs +0 -9
  365. package/bin/tui-functional-contract.cjs +0 -55
  366. package/bin/turn-tool-performance-policy.cjs +0 -486
  367. package/bin/usage-cache-efficiency-policy.cjs +0 -26
  368. package/bin/user-home-path-policy.cjs +0 -13
  369. package/bin/user-message-offload-policy.cjs +0 -103
  370. package/bin/user-prompt-hook-origin-policy.cjs +0 -34
  371. package/bin/user-tool-record-policy.cjs +0 -7
  372. package/bin/validated-learning-insight-policy.cjs +0 -58
  373. package/bin/validated-learning-outcome-trace.cjs +0 -107
  374. package/bin/validated-learning-performance-policy.cjs +0 -53
  375. package/bin/validated-learning-signal.cjs +0 -463
  376. package/bin/windows-bash-dialect-policy.cjs +0 -25
  377. package/bin/windows-node-crash-dump.cjs +0 -110
  378. package/bin/write-continuation-policy.cjs +0 -69
  379. package/codebase-index/README.md +0 -82
  380. package/codebase-index/codebase_index.py +0 -470
  381. package/standard-skills/agent-browser/SKILL.md +0 -19
  382. package/standard-skills/agent-browser/references/runtime.md +0 -8
  383. package/standard-skills/blun-session-inspector/SKILL.md +0 -41
  384. package/standard-skills/blun-session-inspector/scripts/inspect-session.cjs +0 -437
  385. package/standard-skills/design-taste-frontend/SKILL.md +0 -1206
  386. package/standard-skills/full-output-enforcement/SKILL.md +0 -49
  387. package/standard-skills/high-end-visual-design/SKILL.md +0 -98
  388. package/standard-skills/image-to-code/SKILL.md +0 -1228
  389. package/standard-skills/industrial-brutalist-ui/SKILL.md +0 -92
  390. package/standard-skills/minimalist-ui/SKILL.md +0 -85
  391. package/standard-skills/motion-design-taste/SKILL.md +0 -74
  392. package/standard-skills/playwright-testing/SKILL.md +0 -19
  393. package/standard-skills/playwright-testing/references/runtime.md +0 -7
  394. package/standard-skills/premortem/SKILL.md +0 -148
  395. package/standard-skills/redesign-existing-projects/SKILL.md +0 -178
  396. package/standard-skills/research-evidence/SKILL.md +0 -39
  397. package/standard-skills/research-evidence/references/evidence-format.md +0 -104
  398. package/standard-skills/research-evidence/scripts/evidence-collection.cjs +0 -260
  399. package/standard-skills/research-evidence/scripts/score-report.cjs +0 -130
  400. package/standard-skills/screenshot-lesen/SKILL.md +0 -52
  401. package/standard-skills/stitch-design-taste/DESIGN.md +0 -121
  402. package/standard-skills/stitch-design-taste/SKILL.md +0 -184
  403. package/standard-skills/telegram-channel/SKILL.md +0 -18
  404. package/standard-skills/telegram-channel/references/runtime.md +0 -7
  405. package/standard-skills/venture-flywheel/SKILL.md +0 -32
  406. package/standard-skills/venture-flywheel/identity/project-identity.cjs +0 -146
  407. package/standard-skills/venture-flywheel/policy/capability-engine.cjs +0 -114
  408. package/standard-skills/venture-flywheel/policy/repository-trust.cjs +0 -229
  409. package/standard-skills/venture-flywheel/references/BEISPIELE-phase0.md +0 -146
  410. package/standard-skills/venture-flywheel/references/CAPABILITY-MAP.md +0 -34
  411. package/standard-skills/venture-flywheel/references/SPEC-phase0-identity-trust.md +0 -77
  412. package/standard-skills/venture-flywheel/references/SPEC-phase0-state-events.md +0 -93
  413. package/standard-skills/venture-flywheel/schemas/capability-decision.schema.json +0 -13
  414. package/standard-skills/venture-flywheel/schemas/execution-event.schema.json +0 -44
  415. package/standard-skills/venture-flywheel/schemas/project-identity.schema.json +0 -32
  416. package/standard-skills/venture-flywheel/schemas/repository-trust.schema.json +0 -57
  417. package/standard-skills/venture-flywheel/schemas/run-transition.schema.json +0 -59
  418. package/standard-skills/venture-flywheel/state/execution-event.cjs +0 -191
  419. package/standard-skills/venture-flywheel/state/task-state-machine.cjs +0 -190
  420. package/standard-skills/web-lesen/SKILL.md +0 -73
  421. package/standard-skills/web-lesen/scripts/crawl_public.py +0 -379
  422. package/standard-skills/windows-mcp/SKILL.md +0 -19
  423. package/standard-skills/windows-mcp/references/runtime.md +0 -9
  424. package/telegram-plugin/DELIVERY.md +0 -36
  425. package/telegram-plugin/bin/telegram-approval-relay.cjs +0 -290
  426. package/telegram-plugin/bin/telegram-console-status-policy.cjs +0 -175
  427. package/telegram-plugin/bin/telegram-delivery-lifecycle.cjs +0 -125
  428. package/telegram-plugin/bin/telegram-direct-reply-policy.cjs +0 -48
  429. package/telegram-plugin/bin/telegram-launcher-status-queue.cjs +0 -122
  430. package/telegram-plugin/bin/telegram-private-conversation-policy.cjs +0 -186
  431. package/telegram-plugin/bin/telegram-remote-status-policy.cjs +0 -121
  432. package/telegram-plugin/bin/telegram-reply-parts.cjs +0 -149
  433. package/telegram-plugin/bin/telegram-text-chunk-policy.cjs +0 -63
  434. package/telegram-plugin/bin/telegram-typing-keepalive.cjs +0 -89
  435. package/telegram-plugin/compat/mcp-server-fa511cd1.mjs +0 -73825
  436. /package/{bin → scripts}/fix-node-pty-perms.js +0 -0
@@ -1,10 +1,8 @@
1
1
  'use strict';
2
-
3
2
  /*
4
- * BLUN CLI launcher. It prepares the local profile and then starts the bundled
5
- * core directly. Updates are offered only through the interactive startup
6
- * picker; no background download or deferred activation runs here. A user-
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
- seedStandardSkills,
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 { recordRuntimeExit } = require('./runtime-exit-ledger.cjs');
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 RAW_ARGS = process.argv.slice(2);
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: profilePaths.home,
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 sharedHome = path.win32.join(userHome, '.blun');
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
- && !configuredHomeIsLegacyShared
125
- && normalizeWindowsPath(path.win32.resolve(configuredHome)) !== normalizeWindowsPath(profilePaths.home)) {
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 readPackageVersionAt(packageRoot = PKG) {
137
- const { version } = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
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, options = {}) {
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(packageRoot, 'bin', 'core-bootstrap.js'), ...args],
101
+ [path.join(PKG, 'bin', 'core-bootstrap.js'), ...args],
161
102
  {
162
103
  cwd,
163
104
  detached: shouldDetachProtectedCore(),
164
- env: createProtectedCoreEnvironment(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 === CORE_LOADED_MESSAGE) settleLoaded(true);
205
- options.onMessage?.(message, child);
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, packageRoot };
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: createManagedNodeEnvironment(binary, process.env, process.platform),
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 launcherLease = options.noticeLease;
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 leasesReleased = false;
380
- const releaseLauncherLeases = async () => {
381
- if (leasesReleased) return;
382
- leasesReleased = true;
383
- await launcherLease?.release();
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.profilePaths.home,
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.profilePaths.home);
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
- let privatePathsCache;
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
- privatePathsCache ||= resolveLauncherPrivatePaths();
432
- return privatePathsCache;
312
+ privatePaths ||= resolveLauncherPrivatePaths();
313
+ return privatePaths;
433
314
  };
434
315
  const nodeRuntime = await prepareManagedNodeRuntime({
435
- getBlunDir: () => getPrivatePaths().sharedHome,
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 releaseLauncherLeases();
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
- delete informationalEnv.BLUN_SHARED_HOME;
476
- const privatePaths = resolveLauncherPrivatePaths({ env: informationalEnv });
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 privatePaths = getPrivatePaths();
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
- const updateResult = await runUpdateNotice({
511
- currentVersion: readPackageVersion(),
512
- argv: ARGS,
513
- env: process.env,
514
- stdin: process.stdin,
515
- stdout: process.stdout,
516
- stderr: process.stderr,
517
- blunDir: privatePaths.sharedHome,
518
- autoInstall: startupPreferences.autoInstall,
519
- uiLocale: resolveStartupUiLocale(startupPreferences.uiLocale, process.env),
520
- packageRoot: PKG,
521
- noticeLease: launcherLease,
522
- });
523
- if (shouldResumeAfterStartupUpdate(ARGS, updateResult)) {
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
- seedStandardSkills({ packageRoot: PKG, blunDir: privatePaths.sharedHome });
552
- installAgentSpineForExistingProfiles(PKG, privatePaths.sharedHome, blunDir);
553
- if (mode === LAUNCHER_MODES.KING) installTelegramForProfile(PKG, blunDir);
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 = profilePaths.home;
568
- env.BLUN_SHARED_HOME = privatePaths.sharedHome;
569
- env.BLUN_LOG_HOME = privatePaths.sharedHome;
570
- env.BLUN_PROFILE = PROFILE.profileName;
571
- process.exitCode = await superviseProtectedCore(
572
- ARGS,
573
- env,
574
- callerCwd,
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 releaseLauncherLeases();
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
  };
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
File without changes
File without changes