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,73 +0,0 @@
1
- 'use strict';
2
-
3
- function queueFileIdentity(stats) {
4
- if (!stats) return '';
5
- return `${stats.dev}:${stats.ino}:${stats.birthtimeMs}`;
6
- }
7
-
8
- function captureTelegramQueueBaseline(stats) {
9
- const fileId = queueFileIdentity(stats);
10
- const offset = Number(stats?.size);
11
- if (!fileId || !Number.isSafeInteger(offset) || offset < 0) {
12
- return { fileId: '', offset: 0 };
13
- }
14
- return { fileId, offset };
15
- }
16
-
17
- function validCheckpoint(checkpoint, queueFileId, queueSize) {
18
- return checkpoint?.version === 1
19
- && checkpoint.fileId === queueFileId
20
- && Number.isSafeInteger(checkpoint.offset)
21
- && checkpoint.offset >= 0
22
- && checkpoint.offset <= queueSize;
23
- }
24
-
25
- function resolveTelegramQueueActivationOffset(input) {
26
- const queueFileId = String(input?.queueFileId ?? '');
27
- const queueSize = Number(input?.queueSize);
28
- const baseline = input?.baseline;
29
- if (!queueFileId || !Number.isSafeInteger(queueSize) || queueSize < 0) {
30
- return { offset: 0, reason: 'queue_unavailable' };
31
- }
32
- if (validCheckpoint(input?.checkpoint, queueFileId, queueSize)) {
33
- return { offset: input.checkpoint.offset, reason: 'checkpoint' };
34
- }
35
- if (
36
- baseline?.fileId === queueFileId
37
- && Number.isSafeInteger(baseline.offset)
38
- && baseline.offset >= 0
39
- && baseline.offset <= queueSize
40
- ) {
41
- return { offset: baseline.offset, reason: 'ownership_baseline' };
42
- }
43
- return { offset: 0, reason: 'queue_replaced' };
44
- }
45
-
46
- function resolveTelegramQueueCheckpointWrite(input) {
47
- const queueFileId = String(input?.queueFileId ?? '');
48
- const queueSize = Number(input?.queueSize);
49
- const requestedOffset = Number(input?.requestedOffset);
50
- if (
51
- !queueFileId
52
- || !Number.isSafeInteger(queueSize)
53
- || queueSize < 0
54
- || !Number.isSafeInteger(requestedOffset)
55
- || requestedOffset < 0
56
- || requestedOffset > queueSize
57
- ) {
58
- return { offset: 0, reason: 'invalid' };
59
- }
60
- if (
61
- validCheckpoint(input?.currentCheckpoint, queueFileId, queueSize)
62
- && input.currentCheckpoint.offset > requestedOffset
63
- ) {
64
- return { offset: input.currentCheckpoint.offset, reason: 'monotonic_current' };
65
- }
66
- return { offset: requestedOffset, reason: 'requested' };
67
- }
68
-
69
- module.exports = {
70
- captureTelegramQueueBaseline,
71
- resolveTelegramQueueCheckpointWrite,
72
- resolveTelegramQueueActivationOffset,
73
- };
@@ -1,120 +0,0 @@
1
- 'use strict';
2
-
3
- const STABLE_VERSION_RE = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/u;
4
-
5
- function trustedVersion(value) {
6
- const version = typeof value === 'string' ? value.trim() : '';
7
- return STABLE_VERSION_RE.test(version) ? version : undefined;
8
- }
9
-
10
- function resolveTelegramRemoteVersion(input = {}) {
11
- return trustedVersion(input.activeRuntimeVersion)
12
- || trustedVersion(input.bridgePackageVersion)
13
- || 'unbekannt';
14
- }
15
-
16
- function resolveVersionDisplay(input = {}) {
17
- const loaded = trustedVersion(input.consoleStatus?.loadedVersion)
18
- || trustedVersion(input.version)
19
- || 'unbekannt';
20
- const installed = trustedVersion(input.installedVersion);
21
- return installed !== undefined && installed !== loaded
22
- ? `${loaded} -> ${installed}`
23
- : loaded;
24
- }
25
-
26
- function formatDuration(seconds) {
27
- const minutes = Math.max(0, Math.floor(Number(seconds) / 60));
28
- if (minutes < 60) return `${minutes} min`;
29
- const hours = Math.floor(minutes / 60);
30
- return `${hours} h ${minutes % 60} min`;
31
- }
32
-
33
- function formatBytes(bytes) {
34
- const value = Math.max(0, Number(bytes) || 0);
35
- if (value < 1024) return `${Math.round(value)} B`;
36
- if (value < 1024 * 1024) return `${(value / 1024).toFixed(1).replace('.', ',')} KB`;
37
- return `${(value / (1024 * 1024)).toFixed(1).replace('.', ',')} MB`;
38
- }
39
-
40
- function formatAge(value, capturedAt) {
41
- const then = Date.parse(value);
42
- const now = Date.parse(capturedAt);
43
- if (!Number.isFinite(then) || !Number.isFinite(now) || then > now) return undefined;
44
- const seconds = Math.floor((now - then) / 1000);
45
- return seconds < 60 ? `vor ${seconds} s` : `vor ${formatDuration(seconds)}`;
46
- }
47
-
48
- function resolveTelegramQueueSnapshot(input = {}) {
49
- const totalBytes = Number.isSafeInteger(input.queueBytes) && input.queueBytes >= 0
50
- ? input.queueBytes
51
- : 0;
52
- const checkpoint = input.checkpoint;
53
- const checkpointValid = checkpoint?.version === 1
54
- && typeof input.queueFileId === 'string'
55
- && input.queueFileId.length > 0
56
- && checkpoint.fileId === input.queueFileId
57
- && Number.isSafeInteger(checkpoint.offset)
58
- && checkpoint.offset >= 0
59
- && checkpoint.offset <= totalBytes;
60
- return {
61
- totalBytes,
62
- unreadBytes: checkpointValid ? totalBytes - checkpoint.offset : undefined,
63
- checkpointValid,
64
- };
65
- }
66
-
67
- function buildTelegramRemoteStatus(input) {
68
- if (!input?.access?.allowFrom?.includes(String(input.senderId))) {
69
- return 'Nicht verbunden. Sende eine Nachricht, um einen Verbindungscode zu erhalten.';
70
- }
71
-
72
- const username = input.username ? `@${String(input.username).replace(/^@/u, '')}` : 'verbundener Nutzer';
73
- const tui = input.tuiFresh
74
- ? `verbunden${Number.isInteger(input.tuiPid) ? ` (PID ${input.tuiPid}${input.consoleStatus?.processStartedAt
75
- ? `, ${formatDuration((Date.parse(input.capturedAt) - Date.parse(input.consoleStatus.processStartedAt)) / 1000)}`
76
- : ''})` : ''}`
77
- : 'nicht verbunden';
78
- const delivery = input.deliveryTarget === 'tui'
79
- ? 'Konsolen-Warteschlange'
80
- : 'Brücke ohne Konsole';
81
- const heartbeatAge = formatAge(input.tuiHeartbeatAt, input.capturedAt);
82
- const checkpointAge = formatAge(input.queueCheckpointAt, input.capturedAt);
83
- const workLines = input.consoleStatus === undefined
84
- ? ['Arbeitsstatus: nicht verfügbar']
85
- : input.consoleStatus.turnActive
86
- ? [
87
- `Arbeitsstatus: aktiv, Schritt ${input.consoleStatus.step}`,
88
- ...(input.consoleStatus.activeTask === undefined ? [] : [`Aktive Aufgabe: ${input.consoleStatus.activeTask}`]),
89
- ...(formatAge(input.consoleStatus.turnStartedAt, input.capturedAt) === undefined
90
- ? [] : [`Zugbeginn: ${formatAge(input.consoleStatus.turnStartedAt, input.capturedAt)}`]),
91
- ...(formatAge(input.consoleStatus.lastProgressAt, input.capturedAt) === undefined
92
- ? [] : [`Letzter Fortschritt: ${formatAge(input.consoleStatus.lastProgressAt, input.capturedAt)}`]),
93
- ...(input.consoleStatus.lastToolName === undefined
94
- ? [] : [`Letztes Werkzeug: ${input.consoleStatus.lastToolName}`]),
95
- ...(input.consoleStatus.failedRepetitions === undefined
96
- ? [] : [`Wiederholte Fehler: ${input.consoleStatus.failedRepetitions}`]),
97
- ]
98
- : ['Arbeitsstatus: Leerlauf'];
99
- return [
100
- `BLUN-Fernstatus für ${username}`,
101
- `Rechner: ${input.machineName || 'unbekannt'}`,
102
- `Version: ${resolveVersionDisplay(input)}`,
103
- `Brücke: aktiv (PID ${input.bridgePid}, ${formatDuration(input.bridgeUptimeSeconds)})`,
104
- `Konsole: ${tui}`,
105
- `Zustellung: ${delivery}`,
106
- `Warteschlange: ${input.queueUnreadBytes === undefined ? 'unbekannt' : `${formatBytes(input.queueUnreadBytes)} ungelesen`} (${formatBytes(input.queueBytes)} gesamt)`,
107
- ...(heartbeatAge === undefined ? [] : [`Konsolen-Herzschlag: ${heartbeatAge}`]),
108
- ...(checkpointAge === undefined ? [] : [`Warteschlangen-Fortschritt: ${checkpointAge}`]),
109
- ...workLines,
110
- `Gemessen: ${input.capturedAt}`,
111
- ].join('\n');
112
- }
113
-
114
- module.exports = {
115
- buildTelegramRemoteStatus,
116
- formatBytes,
117
- formatDuration,
118
- resolveTelegramQueueSnapshot,
119
- resolveTelegramRemoteVersion,
120
- };
@@ -1,306 +0,0 @@
1
- // ../king-console-i18n-20260813/apps/blun-king/src/tui/controllers/telegram-session-queue-delivery.ts
2
- import { closeSync as closeSync2, fstatSync, openSync as openSync2, readSync } from "node:fs";
3
- import { join } from "node:path";
4
-
5
- // ../king-console-i18n-20260813/apps/blun-king/src/tui/constant/telegram-session-queue.ts
6
- var SESSION_QUEUE_READ_BYTES = 65536;
7
- var SESSION_QUEUE_MAX_IN_FLIGHT = 16;
8
-
9
- // ../king-console-i18n-20260813/apps/blun-king/src/tui/utils/channel-injection.ts
10
- function parseChannelEnvelope(line) {
11
- const trimmed = line.trim();
12
- if (trimmed.length === 0) return void 0;
13
- let parsed;
14
- try {
15
- parsed = JSON.parse(trimmed);
16
- } catch {
17
- return void 0;
18
- }
19
- if (typeof parsed !== "object" || parsed === null) return void 0;
20
- const record = parsed;
21
- if (typeof record["text"] !== "string" || typeof record["tag"] !== "string") return void 0;
22
- const meta = record["meta"];
23
- if (typeof meta !== "object" || meta === null) return void 0;
24
- if (typeof meta["chat_id"] !== "string") return void 0;
25
- return record;
26
- }
27
-
28
- // ../king-console-i18n-20260813/apps/blun-king/src/tui/controllers/telegram-session-queue.ts
29
- function requireValid(condition) {
30
- if (!condition) throw new Error("Invalid Telegram session queue state or transition");
31
- }
32
- function isRecord(value) {
33
- return typeof value === "object" && value !== null && !Array.isArray(value);
34
- }
35
- function isId(value) {
36
- return typeof value === "string" && value.trim() === value && value.length > 0 && value.length <= 256 && !/[\u0000-\u001F\u007F]/u.test(value);
37
- }
38
- function isOffset(value) {
39
- return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
40
- }
41
- function readSpan(value) {
42
- requireValid(isRecord(value));
43
- const { start, end } = value;
44
- requireValid(isOffset(start) && isOffset(end) && start < end);
45
- return { start, end };
46
- }
47
- function ownsRange(state, sessionId, span) {
48
- return state.spans.some((owned) => owned.sessionId === sessionId && owned.start <= span.start && owned.end >= span.end);
49
- }
50
- function parseSessionQueue(value) {
51
- requireValid(isRecord(value));
52
- const { version, fileId, frontier, activeSessionId, sessions, spans, acknowledged } = value;
53
- requireValid(version === 1 && isId(fileId) && isOffset(frontier) && isId(activeSessionId));
54
- requireValid(Array.isArray(sessions) && sessions.every(isId));
55
- const known = new Set(sessions);
56
- requireValid(known.size === sessions.length && known.has(activeSessionId));
57
- requireValid(Array.isArray(spans) && Array.isArray(acknowledged));
58
- const owned = spans.map((raw) => {
59
- const span = readSpan(raw);
60
- requireValid(isRecord(raw));
61
- const sessionId = raw["sessionId"];
62
- requireValid(sessionId === null || isId(sessionId) && known.has(sessionId));
63
- return { ...span, sessionId };
64
- });
65
- for (let i = 0; i < owned.length; i += 1) {
66
- const span = owned[i];
67
- const previous = owned[i - 1];
68
- requireValid(span.end <= frontier && (previous === void 0 || previous.end === span.start));
69
- requireValid(previous === void 0 || previous.sessionId !== span.sessionId);
70
- }
71
- requireValid(owned.length === 0 || owned.at(-1).end === frontier);
72
- const confirmed = acknowledged.map(readSpan);
73
- const state = {
74
- version,
75
- fileId,
76
- frontier,
77
- activeSessionId,
78
- sessions: [...sessions],
79
- spans: owned,
80
- acknowledged: confirmed
81
- };
82
- for (let i = 0; i < confirmed.length; i += 1) {
83
- const span = confirmed[i];
84
- const previous = confirmed[i - 1];
85
- requireValid(previous === void 0 || previous.end < span.start);
86
- requireValid(owned.length > 0 && span.start >= owned[0].start && span.end <= frontier);
87
- requireValid(!owned.some((part) => part.sessionId === null && part.start < span.end && part.end > span.start));
88
- }
89
- return state;
90
- }
91
- function createSessionQueue(input) {
92
- requireValid(input.mode === "new" || input.mode === "resume");
93
- requireValid(isOffset(input.checkpoint) && isOffset(input.frontier) && input.checkpoint <= input.frontier);
94
- return parseSessionQueue({
95
- version: 1,
96
- fileId: input.fileId,
97
- frontier: input.frontier,
98
- activeSessionId: input.sessionId,
99
- sessions: [input.sessionId],
100
- spans: input.checkpoint === input.frontier ? [] : [{
101
- start: input.checkpoint,
102
- end: input.frontier,
103
- sessionId: input.mode === "resume" ? input.sessionId : null
104
- }],
105
- acknowledged: []
106
- });
107
- }
108
- function observeSessionQueue(state, position) {
109
- const next = parseSessionQueue(state);
110
- requireValid(position.fileId === next.fileId && isOffset(position.frontier) && position.frontier >= next.frontier);
111
- if (position.frontier === next.frontier) return next;
112
- const last = next.spans.at(-1);
113
- if (last?.sessionId === next.activeSessionId) last.end = position.frontier;
114
- else next.spans.push({ start: next.frontier, end: position.frontier, sessionId: next.activeSessionId });
115
- next.frontier = position.frontier;
116
- return next;
117
- }
118
- function bindSessionQueue(state, binding) {
119
- requireValid(isId(binding.sessionId) && (binding.mode === "new" || binding.mode === "resume"));
120
- const next = observeSessionQueue(state, binding);
121
- requireValid(binding.mode !== "new" || !next.sessions.includes(binding.sessionId));
122
- if (!next.sessions.includes(binding.sessionId)) next.sessions.push(binding.sessionId);
123
- next.activeSessionId = binding.sessionId;
124
- return next;
125
- }
126
- function pendingSessionQueue(state, sessionId) {
127
- const validated = parseSessionQueue(state);
128
- requireValid(isId(sessionId));
129
- const pending = [];
130
- for (const span of validated.spans) {
131
- if (span.sessionId !== sessionId) continue;
132
- let cursor = span.start;
133
- for (const confirmed of validated.acknowledged) {
134
- if (confirmed.end <= cursor) continue;
135
- if (confirmed.start >= span.end) break;
136
- if (confirmed.start > cursor) pending.push({ fileId: validated.fileId, start: cursor, end: confirmed.start });
137
- cursor = Math.min(span.end, Math.max(cursor, confirmed.end));
138
- }
139
- if (cursor < span.end) pending.push({ fileId: validated.fileId, start: cursor, end: span.end });
140
- }
141
- return pending;
142
- }
143
- function acknowledgeSessionQueue(state, sessionId, range) {
144
- const next = parseSessionQueue(state);
145
- const span = readSpan(range);
146
- requireValid(range.fileId === next.fileId && isId(sessionId) && ownsRange(next, sessionId, span));
147
- const sorted = [...next.acknowledged, span].toSorted((a, b) => a.start - b.start);
148
- next.acknowledged = [];
149
- for (const item of sorted) {
150
- const previous = next.acknowledged.at(-1);
151
- if (previous !== void 0 && item.start <= previous.end) previous.end = Math.max(previous.end, item.end);
152
- else next.acknowledged.push({ ...item });
153
- }
154
- return next;
155
- }
156
-
157
- // ../king-console-i18n-20260813/apps/blun-king/src/tui/controllers/telegram-session-queue-store.ts
158
- import { randomUUID } from "node:crypto";
159
- import { closeSync, fsyncSync, openSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
160
- function readSessionQueue(path) {
161
- try {
162
- return parseSessionQueue(JSON.parse(readFileSync(path, "utf8")));
163
- } catch (error) {
164
- if (error.code === "ENOENT") return void 0;
165
- throw error;
166
- }
167
- }
168
- function writeSessionQueue(path, state) {
169
- const bytes = `${JSON.stringify(parseSessionQueue(state))}
170
- `;
171
- const temporary = `${path}.${randomUUID()}.tmp`;
172
- const fd = openSync(temporary, "wx", 384);
173
- try {
174
- try {
175
- writeFileSync(fd, bytes, "utf8");
176
- fsyncSync(fd);
177
- } finally {
178
- closeSync(fd);
179
- }
180
- renameSync(temporary, path);
181
- } finally {
182
- rmSync(temporary, { force: true });
183
- }
184
- }
185
-
186
- // ../king-console-i18n-20260813/apps/blun-king/src/tui/controllers/telegram-session-queue-delivery.ts
187
- function captureSessionQueueBoundary(queueFile) {
188
- let fd;
189
- try {
190
- fd = openSync2(queueFile, "r");
191
- } catch (error) {
192
- if (error.code === "ENOENT") return void 0;
193
- throw error;
194
- }
195
- try {
196
- const stats = fstatSync(fd);
197
- const fileId = `${stats.dev}:${stats.ino}:${stats.birthtimeMs}`;
198
- let end = stats.size;
199
- const buffer = Buffer.alloc(SESSION_QUEUE_READ_BYTES);
200
- while (end > 0) {
201
- const start = Math.max(0, end - buffer.length);
202
- const length = readSync(fd, buffer, 0, end - start, start);
203
- const newline = buffer.subarray(0, length).lastIndexOf(10);
204
- if (newline >= 0) return { fileId, frontier: start + newline + 1 };
205
- end = start;
206
- }
207
- return { fileId, frontier: 0 };
208
- } finally {
209
- closeSync2(fd);
210
- }
211
- }
212
- function* readLines(queueFile, range) {
213
- const fd = openSync2(queueFile, "r");
214
- try {
215
- const stats = fstatSync(fd);
216
- if (`${stats.dev}:${stats.ino}:${stats.birthtimeMs}` !== range.fileId || stats.size < range.end) {
217
- throw new Error("Telegram queue changed during delivery");
218
- }
219
- let cursor = range.start;
220
- let lineStart = range.start;
221
- let remainder = Buffer.alloc(0);
222
- while (cursor < range.end) {
223
- const buffer = Buffer.alloc(Math.min(SESSION_QUEUE_READ_BYTES, range.end - cursor));
224
- const read = readSync(fd, buffer, 0, buffer.length, cursor);
225
- if (read === 0) throw new Error("Telegram queue changed during delivery");
226
- cursor += read;
227
- const combined = Buffer.concat([remainder, buffer.subarray(0, read)]);
228
- let from = 0;
229
- for (let index = 0; index < combined.length; index += 1) {
230
- if (combined[index] !== 10) continue;
231
- const end = lineStart + index - from + 1;
232
- yield { text: combined.subarray(from, index).toString("utf8"), range: { fileId: range.fileId, start: lineStart, end } };
233
- lineStart = end;
234
- from = index + 1;
235
- }
236
- remainder = combined.subarray(from);
237
- }
238
- if (remainder.length > 0) throw new Error("Telegram queue range is not a complete record");
239
- } finally {
240
- closeSync2(fd);
241
- }
242
- }
243
- var SessionQueueDelivery = class {
244
- constructor(dir, host) {
245
- this.host = host;
246
- this.queueFile = join(dir, "inbound-queue.jsonl");
247
- this.stateFile = join(dir, "session-queue.json");
248
- }
249
- host;
250
- boundSessionId;
251
- inFlight = /* @__PURE__ */ new Set();
252
- queueFile;
253
- stateFile;
254
- poll(scope, deliver = true) {
255
- if (scope === void 0 || !this.host.ownsChannel()) return;
256
- const position = captureSessionQueueBoundary(this.queueFile);
257
- if (position === void 0) return;
258
- let state = readSessionQueue(this.stateFile);
259
- const before = state === void 0 ? void 0 : JSON.stringify(state);
260
- const rebind = this.boundSessionId !== scope.sessionId || state?.activeSessionId !== scope.sessionId;
261
- if (rebind && state?.activeSessionId !== scope.sessionId) {
262
- const boundary = this.boundSessionId === scope.sessionId ? position : scope.boundary === "absent" ? { fileId: position.fileId, frontier: 0 } : scope.boundary ?? position;
263
- if (boundary.fileId !== position.fileId || boundary.frontier > position.frontier) {
264
- throw new Error("Telegram session queue boundary is stale");
265
- }
266
- state = state === void 0 ? createSessionQueue({ ...boundary, checkpoint: Math.min(this.host.legacyCheckpoint(), boundary.frontier), sessionId: scope.sessionId, mode: scope.mode }) : bindSessionQueue(state, {
267
- fileId: position.fileId,
268
- frontier: Math.max(state.frontier, boundary.frontier),
269
- sessionId: scope.sessionId,
270
- mode: state.sessions.includes(scope.sessionId) ? "resume" : scope.mode
271
- });
272
- }
273
- if (state === void 0) throw new Error("Telegram session queue checkpoint is missing");
274
- state = observeSessionQueue(state, position);
275
- if (JSON.stringify(state) !== before) writeSessionQueue(this.stateFile, state);
276
- if (rebind) this.inFlight.clear();
277
- this.boundSessionId = scope.sessionId;
278
- if (!deliver) return;
279
- if (this.inFlight.size >= SESSION_QUEUE_MAX_IN_FLIGHT) return;
280
- let delivered = 0;
281
- for (const pending of pendingSessionQueue(state, scope.sessionId)) {
282
- for (const line of readLines(this.queueFile, pending)) {
283
- if (!this.host.ownsChannel() || this.host.currentSessionId() !== scope.sessionId) return;
284
- const key = `${line.range.fileId}:${line.range.start}:${line.range.end}`;
285
- if (this.inFlight.has(key)) continue;
286
- const acknowledge = () => {
287
- if (!this.host.ownsChannel()) return;
288
- const current = readSessionQueue(this.stateFile);
289
- if (current === void 0) throw new Error("Telegram session queue checkpoint is missing");
290
- writeSessionQueue(this.stateFile, acknowledgeSessionQueue(current, scope.sessionId, line.range));
291
- this.inFlight.delete(key);
292
- };
293
- this.inFlight.add(key);
294
- const envelope = parseChannelEnvelope(line.text);
295
- if (envelope === void 0) acknowledge();
296
- else this.host.inject(envelope, acknowledge);
297
- delivered += 1;
298
- if (delivered >= SESSION_QUEUE_MAX_IN_FLIGHT || this.inFlight.size >= SESSION_QUEUE_MAX_IN_FLIGHT) return;
299
- }
300
- }
301
- }
302
- };
303
- export {
304
- SessionQueueDelivery,
305
- captureSessionQueueBoundary
306
- };
@@ -1,63 +0,0 @@
1
- 'use strict';
2
-
3
- const TELEGRAM_TEXT_LIMIT = 4096;
4
-
5
- function preferredCut(text, start, hardEnd) {
6
- const minimum = start + Math.floor((hardEnd - start) / 2);
7
- const boundaries = [
8
- ['\n\n', 2],
9
- ['\n', 1],
10
- [' ', 1],
11
- ];
12
- for (const [boundary, width] of boundaries) {
13
- const index = text.lastIndexOf(boundary, hardEnd - 1);
14
- if (index >= minimum) return index + width;
15
- }
16
- return hardEnd;
17
- }
18
-
19
- function preserveSurrogatePair(text, start, end) {
20
- if (end <= start || end >= text.length) return end;
21
- const before = text.charCodeAt(end - 1);
22
- const after = text.charCodeAt(end);
23
- const splitsPair = before >= 0xD800 && before <= 0xDBFF && after >= 0xDC00 && after <= 0xDFFF;
24
- return splitsPair && end - 1 > start ? end - 1 : end;
25
- }
26
-
27
- function splitTelegramText(value, limit = TELEGRAM_TEXT_LIMIT) {
28
- const text = typeof value === 'string' ? value : String(value ?? '');
29
- if (text.length === 0) return [];
30
- if (!Number.isSafeInteger(limit) || limit <= 0) {
31
- throw new TypeError('Telegram text chunk limit must be a positive safe integer');
32
- }
33
-
34
- const chunks = [];
35
- let start = 0;
36
- while (start < text.length) {
37
- const hardEnd = Math.min(text.length, start + limit);
38
- let end = hardEnd < text.length ? preferredCut(text, start, hardEnd) : hardEnd;
39
- end = preserveSurrogatePair(text, start, end);
40
- if (end <= start) end = hardEnd;
41
- chunks.push(text.slice(start, end));
42
- start = end;
43
- }
44
- return chunks;
45
- }
46
-
47
- async function sendTelegramTextChunks(value, sendChunk, limit = TELEGRAM_TEXT_LIMIT) {
48
- if (typeof sendChunk !== 'function') {
49
- throw new TypeError('Telegram chunk sender must be a function');
50
- }
51
- const chunks = splitTelegramText(value, limit);
52
- const results = [];
53
- for (let index = 0; index < chunks.length; index += 1) {
54
- results.push(await sendChunk(chunks[index], index, chunks.length));
55
- }
56
- return { chunks, results };
57
- }
58
-
59
- module.exports = {
60
- TELEGRAM_TEXT_LIMIT,
61
- sendTelegramTextChunks,
62
- splitTelegramText,
63
- };
@@ -1,37 +0,0 @@
1
- 'use strict';
2
-
3
- const MAX_TRUNCATED_REPLY_RETRIES = 3;
4
-
5
- const TRUNCATED_REPLY_CONTINUATION_PROMPT = [
6
- 'The previous channel reply hit the model output limit and was not delivered.',
7
- 'Produce one complete, concise final answer now from the preserved context.',
8
- 'Include every result the user needs, omit internal reasoning, do not mention this recovery,',
9
- 'and keep the visible answer under 3000 characters.',
10
- 'Do not call tools unless a missing fact must be verified.',
11
- ].join(' ');
12
-
13
- function channelReplyRecoveryDecision({
14
- hasPendingReply = false,
15
- lastStepFinishReason,
16
- retryCount = 0,
17
- turnReason,
18
- } = {}) {
19
- if (!hasPendingReply || turnReason !== 'completed' || lastStepFinishReason !== 'max_tokens') {
20
- return { kind: 'fallback' };
21
- }
22
- const boundedRetryCount = Number.isSafeInteger(retryCount) && retryCount > 0
23
- ? retryCount
24
- : 0;
25
- if (boundedRetryCount >= MAX_TRUNCATED_REPLY_RETRIES) return { kind: 'exhausted' };
26
- return {
27
- kind: 'retry',
28
- nextRetryCount: boundedRetryCount + 1,
29
- prompt: TRUNCATED_REPLY_CONTINUATION_PROMPT,
30
- };
31
- }
32
-
33
- module.exports = {
34
- MAX_TRUNCATED_REPLY_RETRIES,
35
- TRUNCATED_REPLY_CONTINUATION_PROMPT,
36
- channelReplyRecoveryDecision,
37
- };
@@ -1,45 +0,0 @@
1
- 'use strict';
2
-
3
- function isPrivateTelegramChat(chatId) {
4
- return /^[1-9]\d*$/u.test(String(chatId ?? '').trim());
5
- }
6
-
7
- function telegramUrgentMessage(envelope) {
8
- if (!isPrivateTelegramChat(envelope?.meta?.chat_id)) return undefined;
9
- const match = /^\/urgent(?:@[A-Za-z0-9_]+)?(?:\s+([\s\S]*))?$/iu.exec(
10
- String(envelope?.text ?? '').trim(),
11
- );
12
- const text = match?.[1]?.trim() ?? '';
13
- if (text.length === 0) return undefined;
14
- return { text, displayText: text };
15
- }
16
-
17
- function rewriteTelegramUrgentEnvelope(envelope, text) {
18
- const originalText = String(envelope?.text ?? '');
19
- const originalTag = String(envelope?.tag ?? '');
20
- if (originalText.length === 0 || !originalTag.includes(originalText)) return undefined;
21
- const tagWithText = originalTag.replace(originalText, text);
22
- const tag = tagWithText.replace(
23
- /<channel\b(?![^>]*\bpriority=)/u,
24
- '<channel priority="urgent"',
25
- );
26
- if (tag === tagWithText) return undefined;
27
- return {
28
- ...envelope,
29
- text,
30
- tag,
31
- meta: { ...envelope.meta, priority: 'urgent' },
32
- };
33
- }
34
-
35
- function enqueueTelegramUrgent(queue, item) {
36
- const firstNormal = queue.findIndex((queued) => queued.channelUrgent !== true);
37
- queue.splice(firstNormal < 0 ? queue.length : firstNormal, 0, item);
38
- }
39
-
40
- module.exports = {
41
- enqueueTelegramUrgent,
42
- isPrivateTelegramChat,
43
- rewriteTelegramUrgentEnvelope,
44
- telegramUrgentMessage,
45
- };