blun-king-cli 9.1.586 → 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 -178
  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 +143078 -135241
  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 -15
  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 -79
  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,486 +0,0 @@
1
- 'use strict';
2
-
3
- const TOOL_SCHEMA_BUDGET_RATIO = 0.35;
4
- const TOOL_SCHEMA_MAX_TOKENS = 64_000;
5
- const DEFERRED_TOOL_LOADER_NAME = 'ToolSearch';
6
- const MAX_PERSISTENT_DEFERRED_TOOLS = 12;
7
- const MAX_TOOL_SEARCH_QUERY_CHARS = 1_000;
8
- const MAX_AUTO_RANKED_TOOLS = 6;
9
- const TOOL_RANK_EMBEDDED_CONTENT_RE = /<(attached_documents?|attachment_content|document_content|file_content)\b[^>]*>[\s\S]*?<\/\1>/giu;
10
- const TOOL_RANK_STOP_WORDS = new Set([
11
- 'aber', 'also', 'and', 'aus', 'bitte', 'can', 'das', 'den', 'der', 'des', 'die', 'dies', 'diese',
12
- 'du', 'ein', 'eine', 'einer', 'eines', 'for', 'fuer', 'für', 'haben', 'ich', 'ist', 'kann', 'kannst',
13
- 'mal', 'me', 'mein', 'meine', 'mir', 'mit', 'of', 'please', 'soll', 'the', 'und', 'uns', 'von',
14
- 'was', 'wir', 'with', 'you', 'zeige', 'zeig', 'pruefe', 'prüfe', 'lies', 'read', 'show', 'get',
15
- ]);
16
- const TOOL_SEARCH_INTENT_WORDS = new Set([
17
- 'find', 'fetch', 'get', 'holen', 'list', 'read', 'search', 'show', 'anzeigen', 'lesen', 'suchen',
18
- ]);
19
- const TOOL_SEARCH_RELATED_TERM_GROUPS = Object.freeze([
20
- Object.freeze([
21
- 'checklist', 'list', 'liste', 'listen',
22
- ]),
23
- Object.freeze([
24
- 'aufgabe', 'aufgaben', 'aufgabenliste', 'todo', 'todos',
25
- ]),
26
- Object.freeze([
27
- 'current', 'inbox', 'latest', 'message', 'messages', 'nachricht', 'nachrichten', 'queue', 'queued',
28
- 'recent', 'letzte', 'letzten', 'letzter', 'vergangen', 'update', 'updates',
29
- ]),
30
- Object.freeze([
31
- 'chat', 'conversation', 'history', 'log', 'logs', 'processed', 'protokoll', 'transcript', 'verlauf',
32
- ]),
33
- Object.freeze([
34
- 'fact', 'facts', 'fakt', 'fakten', 'memory', 'memories', 'merk', 'merken', 'note', 'notes',
35
- 'persist', 'persistent', 'profile', 'remember', 'save', 'speichern', 'store',
36
- ]),
37
- ]);
38
- const TOOL_SEARCH_SINGLE_TERM_RELATED_FALLBACKS = new Set([
39
- 'fact', 'facts', 'fakt', 'fakten', 'memory', 'memories', 'merk', 'merken', 'note', 'notes',
40
- 'persist', 'persistent', 'profile', 'remember', 'save', 'speichern', 'store', 'transcript',
41
- ]);
42
- const CORE_TOOL_NAMES = Object.freeze([
43
- 'Bash',
44
- 'Read',
45
- 'ReadBatch',
46
- 'Edit',
47
- 'Grep',
48
- 'Write',
49
- 'Glob',
50
- 'TodoList',
51
- 'mcp__plugin-telegram_telegram__reply',
52
- ]);
53
-
54
- const IMAGE_MEDIA_TERM_RE = /(?:^|[^\p{L}])(?:bild(?:er)?|foto(?:s)?|grafik(?:en)?|illustration(?:en)?|logo(?:s)?|image|images|photo|photos|picture|pictures|illustration|illustrations|visual|visuals)(?=$|[^\p{L}])/u;
55
- const VIDEO_MEDIA_TERM_RE = /(?:^|[^\p{L}])(?:video(?:s)?|clip(?:s)?|film(?:e)?|animation(?:en)?|movie|movies)(?=$|[^\p{L}])/u;
56
- const ANIMATE_ACTION_RE = /(?:^|[^\p{L}])(?:animier(?:e|en|t)?|animate|animated|animating)(?=$|[^\p{L}])/u;
57
- const CREATE_ACTION_RE = /(?:^|[^\p{L}])(?:erstell(?:e|en|t)?|generier(?:e|en|t)?|erzeug(?:e|en|t)?|produzier(?:e|en|t)?|zeichn(?:e|en|et)?|mal(?:e|en|t)?|render(?:e|n|t)?|mach(?:e|en|t)?|create|creates|creating|generate|generates|generating|make|makes|making|draw|draws|drawing|paint|paints|painting|render|renders|rendering|produce|produces|producing)(?=$|[^\p{L}])/u;
58
- const REQUEST_PREFIX_RE = /^(?:bitte\s+|please\s+)?(?:erstell|generier|erzeug|produzier|zeichn|mal|render|mach|animier|create|generate|make|draw|paint|render|produce|animate)/u;
59
- const REQUEST_PHRASE_RE = /(?:^|[^\p{L}])(?:bitte|kannst du|könntest du|ich möchte|ich will|ich brauche|please|can you|could you|i want|i need)(?=$|[^\p{L}])/u;
60
-
61
- function mediaGenerationToolNamesForText(value) {
62
- const text = String(value || '').normalize('NFKC').trim().toLowerCase();
63
- const selected = new Set();
64
- if (!text) return selected;
65
- if (/(?:^|[^a-z])generateimage(?=$|[^a-z])/u.test(text)) selected.add('GenerateImage');
66
- if (/(?:^|[^a-z])generatevideo(?=$|[^a-z])/u.test(text)) selected.add('GenerateVideo');
67
- if (selected.size > 0) return selected;
68
-
69
- const animate = ANIMATE_ACTION_RE.test(text);
70
- const create = CREATE_ACTION_RE.test(text);
71
- const explicitRequest = REQUEST_PREFIX_RE.test(text) || REQUEST_PHRASE_RE.test(text);
72
- if (!explicitRequest || (!create && !animate)) return selected;
73
- if (animate && (IMAGE_MEDIA_TERM_RE.test(text) || VIDEO_MEDIA_TERM_RE.test(text))) {
74
- selected.add('GenerateVideo');
75
- return selected;
76
- }
77
- if (IMAGE_MEDIA_TERM_RE.test(text)) selected.add('GenerateImage');
78
- if (VIDEO_MEDIA_TERM_RE.test(text)) selected.add('GenerateVideo');
79
- return selected;
80
- }
81
-
82
- function mediaToolNamesForTurnText(value) {
83
- const text = String(value || '');
84
- const selected = new Set();
85
- const channelBodies = [...text.matchAll(
86
- /(?:^|\r?\n)<channel\b[^>]*>\r?\n([\s\S]*?)\r?\n<\/channel>(?=\r?\n|$)/giu,
87
- )].map((match) => match[1]);
88
- const intentTexts = channelBodies.length > 0 ? channelBodies : [text];
89
-
90
- for (const intentText of intentTexts) {
91
- for (const name of mediaGenerationToolNamesForText(intentText)) selected.add(name);
92
- }
93
-
94
- if (/\bimage_path\s*=\s*["'][^"']+["']/iu.test(text)) {
95
- selected.add('ReadMediaFile');
96
- selected.add('UnderstandImage');
97
- }
98
- if (/\battachment_file_id\s*=\s*["'][^"']+["']/iu.test(text)) {
99
- selected.add('mcp__plugin-telegram_telegram__download_attachment');
100
- selected.add('UnderstandImage');
101
- }
102
- return selected;
103
- }
104
-
105
- function toolSchemaBudgetTokens(maxContextTokens) {
106
- const context = Number(maxContextTokens);
107
- if (!Number.isFinite(context) || context <= 0) return TOOL_SCHEMA_MAX_TOKENS;
108
- return Math.min(TOOL_SCHEMA_MAX_TOKENS, Math.floor(context * TOOL_SCHEMA_BUDGET_RATIO));
109
- }
110
-
111
- function deferredToolNames(tools) {
112
- return [...new Set((Array.isArray(tools) ? tools : [])
113
- .map((tool) => String(tool?.name || '').trim())
114
- .filter(Boolean))].sort((left, right) => left.localeCompare(right));
115
- }
116
-
117
- function deferredToolCatalog(tools) {
118
- const names = deferredToolNames(tools);
119
- const leaves = names.map((name) => name.split(/__|:/).at(-1) || name);
120
- const leafCounts = new Map();
121
- for (const leaf of leaves) leafCounts.set(leaf, (leafCounts.get(leaf) || 0) + 1);
122
- return names.map((name, index) => leafCounts.get(leaves[index]) === 1 ? leaves[index] : name)
123
- .sort((left, right) => left.localeCompare(right));
124
- }
125
-
126
- function normalizeDeferredToolQuery(value) {
127
- const query = String(value ?? '').trim();
128
- if (query.length <= MAX_TOOL_SEARCH_QUERY_CHARS) return query;
129
- const bounded = query.slice(0, MAX_TOOL_SEARCH_QUERY_CHARS);
130
- const wordBoundary = bounded.lastIndexOf(' ');
131
- return (wordBoundary >= MAX_TOOL_SEARCH_QUERY_CHARS * 0.8
132
- ? bounded.slice(0, wordBoundary)
133
- : bounded).trimEnd();
134
- }
135
-
136
- function searchDeferredTools(tools, query) {
137
- const normalized = normalizeDeferredToolQuery(query).toLowerCase();
138
- if (!normalized) return [];
139
- if (normalized.startsWith('select:')) {
140
- const selector = normalized.slice('select:'.length).trim();
141
- if (!selector) return [];
142
- const exact = tools.find((tool) => String(tool?.name || '').toLowerCase() === selector);
143
- if (exact) return [exact];
144
- return tools.filter((tool) => {
145
- const name = String(tool?.name || '').toLowerCase();
146
- const leaf = name.split(/__|:/).at(-1);
147
- return leaf === selector;
148
- });
149
- }
150
-
151
- const tokens = normalized.split(/\s+/).filter(Boolean);
152
- const requiredNameTokens = tokens.filter((token) => token.startsWith('+')).map((token) => token.slice(1)).filter(Boolean);
153
- const searchTokens = tokens.filter((token) => !token.startsWith('+'));
154
- const eligibleTools = tools.filter((tool) => {
155
- const name = String(tool?.name || '').toLowerCase();
156
- return requiredNameTokens.every((token) => name.includes(token));
157
- });
158
- const firstSelector = searchTokens[0];
159
- if (firstSelector) {
160
- const exactNameMatches = eligibleTools.filter((tool) => String(tool?.name || '').toLowerCase() === firstSelector);
161
- if (exactNameMatches.length === 1) return exactNameMatches;
162
- const exactLeafMatches = eligibleTools.filter((tool) => {
163
- const name = String(tool?.name || '').toLowerCase();
164
- return name.split(/__|:/).at(-1) === firstSelector;
165
- });
166
- if (exactLeafMatches.length === 1) return exactLeafMatches;
167
- }
168
- return tools.map((tool) => {
169
- const name = String(tool?.name || '').toLowerCase();
170
- const description = String(tool?.description || '').toLowerCase();
171
- if (!requiredNameTokens.every((token) => name.includes(token))) return null;
172
- if (!searchTokens.every((token) => name.includes(token) || description.includes(token))) return null;
173
- const score = searchTokens.reduce((total, token) => total + (name.includes(token) ? 5 : 1), 0)
174
- + requiredNameTokens.length * 5;
175
- return { tool, score };
176
- }).filter(Boolean).sort((left, right) => right.score - left.score || String(left.tool.name).localeCompare(String(right.tool.name))).slice(0, 5).map((entry) => entry.tool);
177
- }
178
-
179
- function relatedSearchTerms(token) {
180
- const group = TOOL_SEARCH_RELATED_TERM_GROUPS.find((terms) => terms.includes(token));
181
- return group || [token];
182
- }
183
-
184
- function rankingIntentTexts(value) {
185
- const text = String(value || '');
186
- const channelBodies = [...text.matchAll(
187
- /(?:^|\r?\n)<channel\b[^>]*>\r?\n([\s\S]*?)\r?\n<\/channel>(?=\r?\n|$)/giu,
188
- )].map((match) => match[1]);
189
- const intentTexts = channelBodies.length > 0 ? channelBodies : [text];
190
- return intentTexts.map((intentText) => normalizeDeferredToolQuery(
191
- intentText.replace(TOOL_RANK_EMBEDDED_CONTENT_RE, ' '),
192
- ));
193
- }
194
-
195
- function rankingTokens(value) {
196
- return [...new Set(String(value || '')
197
- .normalize('NFKC')
198
- .toLowerCase()
199
- .match(/[\p{L}\p{N}]{3,}/gu) || [])]
200
- .filter((token) => !TOOL_RANK_STOP_WORDS.has(token));
201
- }
202
-
203
- function toolRankingDocument(tool) {
204
- const name = String(tool?.name || '');
205
- const leaf = name.split(/__|:/).at(-1) || name;
206
- const splitToolName = (value) => String(value || '')
207
- .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
208
- .replaceAll('_', ' ');
209
- const nameTokens = rankingTokens(`${splitToolName(name)} ${splitToolName(leaf)}`);
210
- const descriptionTokens = rankingTokens(tool?.description);
211
- const parameterText = [];
212
- const properties = tool?.parameters?.properties;
213
- if (properties && typeof properties === 'object') {
214
- for (const [parameterName, definition] of Object.entries(properties)) {
215
- parameterText.push(parameterName, definition?.description || '');
216
- }
217
- }
218
- const exampleText = Array.isArray(tool?.examples)
219
- ? tool.examples.map((example) => example?.prompt || '').join(' ')
220
- : '';
221
- return {
222
- name,
223
- nameTokens: new Set(nameTokens),
224
- descriptionTokens: new Set(descriptionTokens),
225
- detailTokens: new Set(rankingTokens(`${parameterText.join(' ')} ${exampleText}`)),
226
- };
227
- }
228
-
229
- function tokenMatchScore(document, token) {
230
- if (document.nameTokens.has(token)) return 10;
231
- if (document.descriptionTokens.has(token)) return 5;
232
- if (document.detailTokens.has(token)) return 4;
233
- const related = relatedSearchTerms(token).filter((term) => term !== token);
234
- if (related.some((term) => document.nameTokens.has(term))) return 5;
235
- if (related.some((term) => document.descriptionTokens.has(term))) return 3;
236
- if (related.some((term) => document.detailTokens.has(term))) return 2;
237
- return 0;
238
- }
239
-
240
- /**
241
- * Select a tiny, high-confidence subset of deferred schemas for the current
242
- * request. This mirrors AnythingLLM's tool-reranker boundary without adding an
243
- * embedding runtime: King reuses the descriptions it already owns and keeps
244
- * ToolSearch available whenever the lexical evidence is weak or ambiguous.
245
- */
246
- function rankedToolNamesForTurnText(tools, value, options = {}) {
247
- const maxTools = Math.max(0, Math.min(
248
- MAX_AUTO_RANKED_TOOLS,
249
- Number.isInteger(options.maxTools) ? options.maxTools : MAX_AUTO_RANKED_TOOLS,
250
- ));
251
- if (maxTools === 0) return new Set();
252
- const queryTokens = [...new Set(rankingIntentTexts(value).flatMap(rankingTokens))];
253
- if (queryTokens.length === 0) return new Set();
254
-
255
- const ranked = (Array.isArray(tools) ? tools : []).map((tool) => {
256
- const document = toolRankingDocument(tool);
257
- if (!document.name) return null;
258
- let score = 0;
259
- let matchedTokens = 0;
260
- let exactNameMatches = 0;
261
- let relatedNameMatches = 0;
262
- for (const token of queryTokens) {
263
- const tokenScore = tokenMatchScore(document, token);
264
- if (tokenScore === 0) continue;
265
- score += tokenScore;
266
- matchedTokens += 1;
267
- if (document.nameTokens.has(token)) exactNameMatches += 1;
268
- else if (relatedSearchTerms(token).some((term) => document.nameTokens.has(term))) relatedNameMatches += 1;
269
- }
270
- const highConfidence = matchedTokens >= 2
271
- || (exactNameMatches >= 1 && score >= 10)
272
- || (relatedNameMatches >= 1 && score >= 5);
273
- return highConfidence ? { name: document.name, score, matchedTokens, exactNameMatches } : null;
274
- }).filter(Boolean).sort((left, right) => (
275
- right.matchedTokens - left.matchedTokens
276
- || right.score - left.score
277
- || right.exactNameMatches - left.exactNameMatches
278
- || left.name.localeCompare(right.name)
279
- ));
280
-
281
- return new Set(ranked.slice(0, maxTools).map((entry) => entry.name));
282
- }
283
-
284
- function rankedSupportToolNamesForGoal(tools, goal, origin) {
285
- if (origin?.kind !== 'system_trigger' || origin?.name !== 'goal_continuation') return new Set();
286
- if (goal?.status !== 'active') return new Set();
287
- const checkpoint = goal.actionCheckpoint;
288
- if (checkpoint?.phase === 'wait' || checkpoint?.nextTrigger?.kind !== 'immediate') return new Set();
289
- const supportChoice = String(checkpoint?.problemFrame?.supportChoice ?? '').trim();
290
- const explicitSupport = supportChoice.match(/^(?:tool|skill)\s*:\s*(.+)$/iu);
291
- if (!explicitSupport?.[1]) return new Set();
292
- return rankedToolNamesForTurnText(tools, supportChoice, { maxTools: 1 });
293
- }
294
-
295
- function searchRelatedDeferredTools(tools, query, options = {}) {
296
- const normalized = normalizeDeferredToolQuery(query).toLowerCase();
297
- if (!normalized || normalized.startsWith('select:')) return [];
298
- const tokens = normalized.split(/\s+/).filter(Boolean);
299
- const requestedNameTokens = tokens
300
- .filter((token) => token.startsWith('+'))
301
- .map((token) => token.slice(1))
302
- .filter(Boolean);
303
- const relaxRequiredNameTokens = options.relaxRequiredNameTokens === true
304
- && requestedNameTokens.length > 0;
305
- const requiredNameTokens = relaxRequiredNameTokens ? [] : requestedNameTokens;
306
- const searchTokens = [
307
- ...tokens.filter((token) => !token.startsWith('+')),
308
- ...(relaxRequiredNameTokens ? requestedNameTokens : []),
309
- ]
310
- .filter((token) => !TOOL_SEARCH_INTENT_WORDS.has(token));
311
- if (searchTokens.length < 2 && !TOOL_SEARCH_SINGLE_TERM_RELATED_FALLBACKS.has(searchTokens[0])) return [];
312
- const minimumMatchedTokens = searchTokens.length === 1 ? 1 : Math.max(2, Math.ceil(searchTokens.length * 0.75));
313
-
314
- const ranked = tools.map((tool) => {
315
- const name = String(tool?.name || '').toLowerCase();
316
- const description = String(tool?.description || '').toLowerCase();
317
- if (!requiredNameTokens.every((token) => name.includes(token))) return null;
318
- let matchedTokens = 0;
319
- let score = requiredNameTokens.length * 8;
320
- for (const token of searchTokens) {
321
- if (name.includes(token)) {
322
- matchedTokens += 1;
323
- score += 8;
324
- continue;
325
- }
326
- if (description.includes(token)) {
327
- matchedTokens += 1;
328
- score += 4;
329
- continue;
330
- }
331
- const related = relatedSearchTerms(token).filter((term) => term !== token);
332
- if (related.some((term) => name.includes(term))) {
333
- matchedTokens += 1;
334
- score += 3;
335
- } else if (related.some((term) => description.includes(term))) {
336
- matchedTokens += 1;
337
- score += 2;
338
- }
339
- }
340
- return matchedTokens >= minimumMatchedTokens ? { tool, score, matchedTokens } : null;
341
- }).filter(Boolean).sort((left, right) => (
342
- right.matchedTokens - left.matchedTokens
343
- || right.score - left.score
344
- || String(left.tool.name).localeCompare(String(right.tool.name))
345
- ));
346
- if (relaxRequiredNameTokens && ranked.length > 0) {
347
- const best = ranked[0];
348
- return ranked.filter((entry) => (
349
- entry.matchedTokens === best.matchedTokens && entry.score === best.score
350
- )).slice(0, 5).map((entry) => entry.tool);
351
- }
352
- return ranked.slice(0, 5).map((entry) => entry.tool);
353
- }
354
-
355
- function rememberLoadedTool(loadedToolNames, name) {
356
- loadedToolNames.delete(name);
357
- loadedToolNames.add(name);
358
- while (loadedToolNames.size > MAX_PERSISTENT_DEFERRED_TOOLS) {
359
- loadedToolNames.delete(loadedToolNames.values().next().value);
360
- }
361
- }
362
-
363
- function rememberDeferredToolAfterNotFound(loadedToolNames, toolName, result) {
364
- if (!(loadedToolNames instanceof Set) || result?.isError !== true) return false;
365
- const name = String(toolName || '').trim();
366
- if (!name || String(result?.output || '').trim() !== `Tool "${name}" not found`) return false;
367
- rememberLoadedTool(loadedToolNames, name);
368
- return true;
369
- }
370
-
371
- function createDeferredToolLoader(selectedTools, deferredTools, loadedToolNames = new Set()) {
372
- if (!Array.isArray(selectedTools)) throw new TypeError('selectedTools must be an array');
373
- if (!(loadedToolNames instanceof Set)) throw new TypeError('loadedToolNames must be a Set');
374
- const available = new Map();
375
- for (const tool of Array.isArray(deferredTools) ? deferredTools : []) {
376
- const name = String(tool?.name || '').trim();
377
- if (name && !available.has(name)) available.set(name, tool);
378
- }
379
- const deferredCount = available.size;
380
- const deferredLabel = deferredCount === 1 ? 'tool schema' : 'tool schemas';
381
-
382
- return {
383
- name: DEFERRED_TOOL_LOADER_NAME,
384
- description: [
385
- `Search ${deferredCount} deferred ${deferredLabel} without loading all definitions.`,
386
- 'Use select:leaf_name for one known tool, plain keywords to search, or +word to require that word in the tool name.',
387
- `Loaded tools are available in the next step; the ${MAX_PERSISTENT_DEFERRED_TOOLS} most recently selected schemas remain loaded.`,
388
- ].join('\n'),
389
- parameters: {
390
- type: 'object',
391
- properties: {
392
- query: {
393
- type: 'string',
394
- maxLength: MAX_TOOL_SEARCH_QUERY_CHARS,
395
- description: 'Exact selection or keyword query, for example select:download_attachment or +slack send.',
396
- },
397
- },
398
- required: ['query'],
399
- additionalProperties: false,
400
- },
401
- resolveExecution(args) {
402
- const query = normalizeDeferredToolQuery(args?.query);
403
- return {
404
- description: query ? `Searching tool schemas for ${query}` : 'Searching tool schemas',
405
- approvalRule: DEFERRED_TOOL_LOADER_NAME,
406
- execute: async () => {
407
- let matches = searchDeferredTools([...available.values()], query);
408
- let relatedFallback = false;
409
- if (matches.length === 0) {
410
- matches = searchRelatedDeferredTools([...available.values()], query);
411
- relatedFallback = matches.length > 0;
412
- }
413
- if (matches.length === 0) {
414
- matches = searchRelatedDeferredTools([...available.values()], query, {
415
- relaxRequiredNameTokens: true,
416
- });
417
- relatedFallback = matches.length > 0;
418
- }
419
- if (matches.length === 0) {
420
- const alreadyLoaded = query.toLowerCase().startsWith('select:')
421
- ? searchDeferredTools(
422
- selectedTools.filter((tool) => tool?.name !== DEFERRED_TOOL_LOADER_NAME),
423
- query,
424
- )
425
- : [];
426
- if (alreadyLoaded.length === 1) {
427
- return {
428
- isError: false,
429
- output: `Tool schema already loaded: ${alreadyLoaded[0].name}. Invoke it now.`,
430
- };
431
- }
432
- const loaderIndex = selectedTools.findIndex(
433
- (tool) => tool?.name === DEFERRED_TOOL_LOADER_NAME,
434
- );
435
- if (loaderIndex >= 0) selectedTools.splice(loaderIndex, 1);
436
- return {
437
- isError: false,
438
- output: [
439
- `No eligible deferred tool is available for: ${query || '[empty query]'}.`,
440
- 'Do not retry ToolSearch with synonyms; removed for this turn.',
441
- 'use a loaded alternative or report the integration as unavailable.',
442
- ].join(' '),
443
- };
444
- }
445
- if (query.toLowerCase().startsWith('select:') && matches.length !== 1) {
446
- return {
447
- isError: true,
448
- output: `Tool selection is ambiguous: ${matches.map((tool) => tool.name).join(', ')}`,
449
- };
450
- }
451
- const loaded = [];
452
- for (const tool of matches) {
453
- const name = String(tool.name);
454
- if (!selectedTools.some((candidate) => candidate?.name === name)) selectedTools.push(tool);
455
- rememberLoadedTool(loadedToolNames, name);
456
- loaded.push(name);
457
- }
458
- return {
459
- isError: false,
460
- output: `${relatedFallback ? 'Loaded related tool schemas' : 'Loaded tool schemas'}: ${loaded.join(', ')}. Invoke them in the next step.`,
461
- };
462
- },
463
- };
464
- },
465
- };
466
- }
467
-
468
- module.exports = {
469
- CORE_TOOL_NAMES,
470
- DEFERRED_TOOL_LOADER_NAME,
471
- MAX_PERSISTENT_DEFERRED_TOOLS,
472
- MAX_AUTO_RANKED_TOOLS,
473
- MAX_TOOL_SEARCH_QUERY_CHARS,
474
- TOOL_SCHEMA_BUDGET_RATIO,
475
- TOOL_SCHEMA_MAX_TOKENS,
476
- createDeferredToolLoader,
477
- deferredToolCatalog,
478
- deferredToolNames,
479
- mediaGenerationToolNamesForText,
480
- mediaToolNamesForTurnText,
481
- normalizeDeferredToolQuery,
482
- rankedSupportToolNamesForGoal,
483
- rankedToolNamesForTurnText,
484
- rememberDeferredToolAfterNotFound,
485
- toolSchemaBudgetTokens,
486
- };
@@ -1,26 +0,0 @@
1
- 'use strict';
2
-
3
- function wholeNonNegative(value) {
4
- if (!Number.isFinite(value) || value <= 0) return 0;
5
- return Math.floor(value);
6
- }
7
-
8
- function buildCacheEfficiency(usage = {}) {
9
- const uncachedTokens = wholeNonNegative(usage.inputOther);
10
- const readTokens = wholeNonNegative(usage.inputCacheRead);
11
- const writeTokens = wholeNonNegative(usage.inputCacheCreation);
12
- const inputTokens = uncachedTokens + readTokens + writeTokens;
13
-
14
- return {
15
- hasActivity: readTokens > 0 || writeTokens > 0,
16
- hitRate: inputTokens > 0 ? Math.min(1, readTokens / inputTokens) : 0,
17
- inputTokens,
18
- readTokens,
19
- writeTokens,
20
- };
21
- }
22
-
23
- module.exports = {
24
- buildCacheEfficiency,
25
- wholeNonNegative,
26
- };
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- function quotedPath(path) {
4
- return `'${path.replaceAll("\\", "\\\\").replaceAll("'", "\\'")}'`;
5
- }
6
-
7
- function unsupportedUserHomePathError(path) {
8
- if (typeof path !== "string" || !path.startsWith("~")) return undefined;
9
- if (path === "~" || path.startsWith("~/") || path.startsWith("~\\")) return undefined;
10
- return `Named home-directory paths are not supported: ${quotedPath(path)}. Use '~/' for the current user or './' for a literal path.`;
11
- }
12
-
13
- module.exports = { unsupportedUserHomePathError };
@@ -1,103 +0,0 @@
1
- 'use strict';
2
-
3
- const {
4
- hasHistoricalOffloadPressure,
5
- historyTextChars,
6
- } = require('./history-offload-pressure-policy.cjs');
7
- const { hasContextPressure } = require('./context-pressure-policy.cjs');
8
-
9
- const USER_MESSAGE_MAX_CHARS = 200_000;
10
- const HISTORICAL_USER_MESSAGE_MAX_CHARS = 4_000;
11
- const USER_MESSAGE_KEEP_RECENT_MESSAGES = 20;
12
- const USER_MESSAGE_PREVIEW_LINES = 5;
13
- const USER_MESSAGE_PREVIEW_LINE_CHARS = 1_000;
14
- const USER_MESSAGE_OFFLOAD_MARKER = '[User message offloaded]';
15
-
16
- function shouldOffloadUserMessage(textChars) {
17
- return Number.isSafeInteger(textChars) && textChars >= USER_MESSAGE_MAX_CHARS;
18
- }
19
-
20
- function shouldOffloadHistoricalUserMessage(options = {}) {
21
- const historyIndex = Number(options.historyIndex);
22
- const historyLength = Number(options.historyLength);
23
- const historyChars = Number(options.historyChars);
24
- const textChars = Number(options.textChars);
25
- if (
26
- !Number.isSafeInteger(historyIndex)
27
- || !Number.isSafeInteger(historyLength)
28
- || !Number.isSafeInteger(textChars)
29
- || historyIndex < 0
30
- || historyLength < 0
31
- || historyIndex >= historyLength
32
- ) return false;
33
- const cutoff = Math.max(0, historyLength - USER_MESSAGE_KEEP_RECENT_MESSAGES);
34
- return hasContextPressure(options)
35
- && hasHistoricalOffloadPressure({ historyLength, historyChars })
36
- && historyIndex < cutoff
37
- && textChars > HISTORICAL_USER_MESSAGE_MAX_CHARS;
38
- }
39
-
40
- function createUserMessagePreview(text) {
41
- const lines = String(text).split(/\r?\n/u);
42
- const render = (line, index) => `${index}: ${line.slice(0, USER_MESSAGE_PREVIEW_LINE_CHARS)}`;
43
- if (lines.length <= USER_MESSAGE_PREVIEW_LINES * 2) {
44
- return lines.map((line, index) => render(line, index + 1)).join('\n');
45
- }
46
- const head = lines.slice(0, USER_MESSAGE_PREVIEW_LINES)
47
- .map((line, index) => render(line, index + 1));
48
- const tailStart = lines.length - USER_MESSAGE_PREVIEW_LINES;
49
- const tail = lines.slice(tailStart)
50
- .map((line, index) => render(line, tailStart + index + 1));
51
- return [
52
- ...head,
53
- `... [${lines.length - USER_MESSAGE_PREVIEW_LINES * 2} lines omitted] ...`,
54
- ...tail,
55
- ].join('\n');
56
- }
57
-
58
- function compactHistoricalPersistedUserMessageReferences(messages) {
59
- if (!Array.isArray(messages) || messages.length === 0) return messages;
60
-
61
- const recentStart = Math.max(0, messages.length - USER_MESSAGE_KEEP_RECENT_MESSAGES);
62
- return messages.map((message, index) => {
63
- if (
64
- index >= recentStart
65
- || message?.role !== 'user'
66
- || message.origin?.kind !== 'user'
67
- || !Array.isArray(message.content)
68
- ) return message;
69
-
70
- let changed = false;
71
- const content = message.content.map((part) => {
72
- if (
73
- part?.type !== 'text'
74
- || typeof part.text !== 'string'
75
- || !part.text.startsWith(`${USER_MESSAGE_OFFLOAD_MARKER}\n`)
76
- || !part.text.includes('\noutput_path: ')
77
- ) return part;
78
- const previewIndex = part.text.indexOf('\n[preview: head and tail]\n');
79
- if (previewIndex < 0) return part;
80
- changed = true;
81
- return {
82
- ...part,
83
- text: part.text.slice(0, previewIndex).trimEnd(),
84
- };
85
- });
86
-
87
- return changed ? { ...message, content } : message;
88
- });
89
- }
90
-
91
- module.exports = {
92
- HISTORICAL_USER_MESSAGE_MAX_CHARS,
93
- USER_MESSAGE_MAX_CHARS,
94
- USER_MESSAGE_KEEP_RECENT_MESSAGES,
95
- USER_MESSAGE_OFFLOAD_MARKER,
96
- USER_MESSAGE_PREVIEW_LINES,
97
- USER_MESSAGE_PREVIEW_LINE_CHARS,
98
- compactHistoricalPersistedUserMessageReferences,
99
- createUserMessagePreview,
100
- historyTextChars,
101
- shouldOffloadHistoricalUserMessage,
102
- shouldOffloadUserMessage,
103
- };
@@ -1,34 +0,0 @@
1
- 'use strict';
2
-
3
- const CHANNEL_TAG = /<channel\b([^>]*)>/iu;
4
- const SOURCE_ATTRIBUTE = /\bsource=["']([^"']+)["']/iu;
5
- const CHANNEL_SYSTEM_TRIGGERS = new Set(['channel', 'telegram']);
6
-
7
- function promptText(input) {
8
- if (typeof input === 'string') return input;
9
- if (!Array.isArray(input)) return '';
10
- return input.map((part) => {
11
- if (typeof part === 'string') return part;
12
- return part && typeof part === 'object' && typeof part.text === 'string' ? part.text : '';
13
- }).join(' ');
14
- }
15
-
16
- function channelSource(input) {
17
- const tag = promptText(input).match(CHANNEL_TAG)?.[1] || '';
18
- return tag.match(SOURCE_ATTRIBUTE)?.[1]?.trim().toLowerCase() || '';
19
- }
20
-
21
- function userPromptHookContext(input, origin = {}) {
22
- const source = channelSource(input);
23
- if (source) return Object.freeze({ turnSource: 'channel', channel: source, actor: 'channel' });
24
- if (origin.kind === 'cron_job') {
25
- return Object.freeze({ turnSource: 'schedule', channel: 'cron', actor: 'scheduler' });
26
- }
27
- if (origin.kind === 'system_trigger' && CHANNEL_SYSTEM_TRIGGERS.has(String(origin.name || '').toLowerCase())) {
28
- return Object.freeze({ turnSource: 'channel', channel: String(origin.name).toLowerCase(), actor: 'channel' });
29
- }
30
- if (origin.kind === 'user') return Object.freeze({ turnSource: 'user', channel: 'blun-code', actor: 'user' });
31
- return null;
32
- }
33
-
34
- module.exports = { channelSource, promptText, userPromptHookContext };
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- function shouldRecordUserToolUnregister({ hasUserTool, isEnabled }) {
4
- return Boolean(hasUserTool || isEnabled);
5
- }
6
-
7
- module.exports = { shouldRecordUserToolUnregister };