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
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python3
2
+ """Offline evidence-shape check, never a semantic approval or release token."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import hashlib
8
+ import json
9
+ from pathlib import Path
10
+
11
+ from commercial_localization_profile import CommercialReviewBlocked, review_contract, validate_review
12
+
13
+
14
+ PROFILE = "translate-native.commercial.v2"
15
+ MAX_INPUT_BYTES = 2_000_000
16
+
17
+
18
+ def _read(path: str) -> str:
19
+ # Bound each read; decode bytes directly to preserve CRLF and exact spans.
20
+ with Path(path).open("rb") as stream:
21
+ raw = stream.read(MAX_INPUT_BYTES + 1)
22
+ if len(raw) > MAX_INPUT_BYTES:
23
+ raise ValueError("input limit")
24
+ text = raw.decode("utf-8")
25
+ if not text.strip() or text.startswith("\ufeff"):
26
+ raise ValueError("empty input or BOM")
27
+ return text
28
+
29
+
30
+ def _object(pairs):
31
+ result = {}
32
+ for key, value in pairs:
33
+ if key in result:
34
+ raise ValueError("duplicate JSON key")
35
+ result[key] = value
36
+ return result
37
+
38
+
39
+ def _constant(value):
40
+ raise ValueError("nonfinite JSON number")
41
+
42
+
43
+ def main(argv=None) -> int:
44
+ parser = argparse.ArgumentParser(description=__doc__)
45
+ parser.add_argument("--contract", action="store_true", help="print the review contract; not completed evidence")
46
+ parser.add_argument("--source", help="complete source text, UTF-8 without BOM")
47
+ parser.add_argument("--target", help="complete target text, UTF-8 without BOM")
48
+ parser.add_argument("--review", help="source-aware review JSON, UTF-8 without BOM")
49
+ args = parser.parse_args(argv)
50
+ if args.contract:
51
+ if any((args.source, args.target, args.review)):
52
+ parser.error("--contract cannot be combined with input files")
53
+ print(json.dumps({"status": "CONTRACT", "release_allowed": False,
54
+ "commercial_review": review_contract(PROFILE)}, ensure_ascii=False))
55
+ return 0
56
+ if not all((args.source, args.target, args.review)):
57
+ parser.error("--source, --target and --review are required")
58
+ result = {"schema": "translate-native.commercial-evidence-check.v1",
59
+ "profile": PROFILE, "release_allowed": False}
60
+ try:
61
+ source, target, raw_review = (_read(path) for path in (args.source, args.target, args.review))
62
+ review = json.loads(raw_review, object_pairs_hook=_object, parse_constant=_constant)
63
+ validate_review(review, source, target, PROFILE)
64
+ except CommercialReviewBlocked as error:
65
+ result.update(status="BLOCK", reason=error.code)
66
+ except (OSError, ValueError, RecursionError):
67
+ result.update(status="BLOCK", reason="review.commercial.input_invalid")
68
+ else:
69
+ result.update(
70
+ status="EVIDENCE_VALID", reason="independent_quality_and_signed_release_required",
71
+ source_sha256=hashlib.sha256(source.encode("utf-8")).hexdigest(),
72
+ target_sha256=hashlib.sha256(target.encode("utf-8")).hexdigest(),
73
+ review_sha256=hashlib.sha256(raw_review.encode("utf-8")).hexdigest(),
74
+ )
75
+ print(json.dumps(result, ensure_ascii=False, sort_keys=True))
76
+ return 0 if result["status"] == "EVIDENCE_VALID" else 1
77
+
78
+
79
+ if __name__ == "__main__":
80
+ raise SystemExit(main())
@@ -0,0 +1,333 @@
1
+ """Language-neutral commercial review contract; not a semantic language detector.
2
+
3
+ Models provide semantic evidence. This module validates coverage, exact evidence
4
+ locations and verdict consistency, not the truth of a model's interpretation.
5
+ Only a host-verified quality receipt can authorize subsequent publication.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import hashlib
11
+ import json
12
+ from typing import Any
13
+
14
+
15
+ PUBLIC_PROFILE_SCHEMA = "translate-native.commercial-capabilities.v2"
16
+ REVIEW_SUMMARY_CAPABILITIES_SCHEMA = (
17
+ "translate-native.commercial-review-summary-capabilities.v1"
18
+ )
19
+ REVIEW_SUMMARY_SCHEMA = "translate-native.commercial-review-summary.v1"
20
+
21
+ DIMENSIONS = {
22
+ "amount_currency": "Amounts, currency identity, units and price-to-product association; no conversion or rounding.",
23
+ "discount_basis": "Discount or saving amount/rate, comparison price, eligibility and reference period.",
24
+ "qualifiers": "From, up to, only, minimum, maximum, approximate and other limits on every claim.",
25
+ "tax_status": "Tax included/excluded, stated rates and scope; do not infer local tax treatment.",
26
+ "billing_interval": "Charge frequency and amount due now, separate from the advertised equivalent monthly price.",
27
+ "commitment": "Contract duration, minimum commitment, trial duration and whether a trial is paid or free.",
28
+ "renewal": "Automatic/manual renewal, renewal price, interval and conditions after introductory offers.",
29
+ "cancellation": "Cancellation deadline, notice period, fees, refund conditions and exceptions.",
30
+ "conditions": "Every remaining eligibility rule, quantity, tier count, limit, deadline and linked footnote.",
31
+ "offer_assignment": "Which offer, tier or product each claim belongs to; never accept swapped prices or conditions.",
32
+ }
33
+
34
+
35
+ def _canonical_json(value: Any) -> bytes:
36
+ return json.dumps(
37
+ value, ensure_ascii=False, sort_keys=True, separators=(",", ":"),
38
+ ).encode("utf-8")
39
+
40
+
41
+ def public_review_summary_contract(profile: str) -> dict[str, Any]:
42
+ """Return the exact content-free summary contract external adapters consume."""
43
+ body = {
44
+ "schema": REVIEW_SUMMARY_CAPABILITIES_SCHEMA,
45
+ "result_schema": REVIEW_SUMMARY_SCHEMA,
46
+ "profile": profile,
47
+ "required_fields": [
48
+ "schema", "profile", "status", "review_required_dimensions",
49
+ "evidence_sha256",
50
+ ],
51
+ "statuses": {
52
+ "verified": {"review_required_dimensions": "empty"},
53
+ "review_required": {
54
+ "review_required_dimensions": "one-or-more",
55
+ "requires_independent_review": True,
56
+ },
57
+ },
58
+ "review_required_dimensions": {
59
+ "allowed": list(DIMENSIONS),
60
+ "order": list(DIMENSIONS),
61
+ "unique": True,
62
+ },
63
+ "evidence_sha256": {
64
+ "algorithm": "sha-256",
65
+ "canonicalization": "utf-8-json-sort-keys-no-insignificant-whitespace",
66
+ "covers": "complete-commercial-review-evidence",
67
+ },
68
+ "content_policy": {
69
+ "source_text": False,
70
+ "target_text": False,
71
+ "source_spans": False,
72
+ "target_spans": False,
73
+ "reviewer_prose": False,
74
+ "project_prices": False,
75
+ "project_brands": False,
76
+ },
77
+ }
78
+ return {
79
+ **body,
80
+ "sha256": hashlib.sha256(_canonical_json(body)).hexdigest(),
81
+ }
82
+
83
+
84
+ def public_profile(profile: str) -> dict[str, Any]:
85
+ """Return the public, brand-neutral contract implemented by this module."""
86
+ body = {
87
+ "schema": PUBLIC_PROFILE_SCHEMA,
88
+ "profile": profile,
89
+ "review_summary_schema": REVIEW_SUMMARY_SCHEMA,
90
+ "review_summary_contract": public_review_summary_contract(profile),
91
+ "applies_to": {
92
+ "content_type": "commercial",
93
+ "locales": "all-supported-target-locales",
94
+ },
95
+ "dimensions": [
96
+ {"name": name, "requirement": requirement}
97
+ for name, requirement in DIMENSIONS.items()
98
+ ],
99
+ "preservation": {
100
+ "amounts": "exact-value",
101
+ "currencies": "same-identity-no-conversion",
102
+ "discounts": "rate-amount-reference-basis-period-and-eligibility",
103
+ "qualifiers": "scope-and-limit-per-claim",
104
+ "taxes": "status-rate-and-scope-without-inference",
105
+ "billing": "charge-amount-and-frequency",
106
+ "commitment": "separate-duration-and-minimum-term",
107
+ "renewal": "mode-price-interval-and-conditions",
108
+ "cancellation": "deadline-notice-fees-refunds-and-exceptions",
109
+ "conditions": "eligibility-limits-deadlines-footnotes-and-links",
110
+ "offer_assignment": "every-claim-bound-to-its-own-offer",
111
+ },
112
+ "rendering": {
113
+ "locale_appropriate": True,
114
+ "natural_wording": True,
115
+ "native_digits_allowed": True,
116
+ "number_words_allowed": True,
117
+ "written_percentages_allowed": True,
118
+ "locale_separators_allowed": True,
119
+ "rounding_allowed": False,
120
+ "currency_conversion_allowed": False,
121
+ "exact_characters_only_when_project_configured": True,
122
+ },
123
+ "verification": {
124
+ "method": "semantic-provider-evidence",
125
+ "deterministic_numeric_regex_is_sufficient": False,
126
+ "evidence_granularity": "every-proposition-per-offer",
127
+ "directions": ["matched", "source_only", "target_only"],
128
+ "ambiguous_values": "unresolved",
129
+ "unresolved_route": "independent-model-or-qualified-native-domain-review",
130
+ "automatic_publication_when_unresolved": False,
131
+ },
132
+ "protected_terms": "project-configuration-only",
133
+ }
134
+ return {
135
+ **body,
136
+ "sha256": hashlib.sha256(_canonical_json(body)).hexdigest(),
137
+ }
138
+
139
+ CREATION_GUIDANCE = """Localize prices, offers and subscriptions as natural native commercial copy.
140
+ Preserve every commercial proposition and its association with the correct offer, not merely a bag of numbers.
141
+ Keep brands, product names and protected slogans exactly as configured for this project; invent no universal list.
142
+ Locale formatting, native digits, number words and written percentages are allowed when semantically equivalent.
143
+ Do not convert currency, change a tax claim, round a price, strengthen a saving or conceal a condition.
144
+ Keep billing frequency distinct from contract length. Preserve footnote and link associations.
145
+ An explicit instruction to preserve exact characters (for example a currency symbol) overrides format adaptation."""
146
+
147
+ NATIVE_GUIDANCE = """Judge commercial copy as native writing: idiomatic pricing labels, CTAs, natural number,
148
+ currency and interval expressions, unambiguous offer layout and readable conditions. Do not require digits instead
149
+ of number words, ASCII instead of native digits, or source-locale punctuation. Do not infer missing commercial facts."""
150
+
151
+ FIDELITY_GUIDANCE = """For each commercial dimension inspect the COMPLETE source and candidate, including
152
+ all offers, headings, footnotes, links and conditions. Record every applicable proposition as an item with a stable
153
+ offer label, semantic explanation and relation: 'matched', 'source_only' for an omission, or 'target_only' for an
154
+ addition. Give exact zero-based Python Unicode code-point spans with an exclusive end; the absent side of a one-sided
155
+ item MUST be null. Repeated amounts must stay attached to their own offer; number multisets do not prove fidelity.
156
+ 'not_present' is valid only if a dimension is absent from BOTH texts. 'equivalent' requires nonempty matched items
157
+ covering every applicable proposition. A dimension-level 'changed' or 'uncertain' verdict requires at least one
158
+ specific item; use coverage='uncertain' for unresolved overall completeness without inventing a span.
159
+ Use 'changed' for a known defect and 'uncertain' for unresolved interpretation, coverage or insufficient language/domain
160
+ evidence. Use coverage='uncertain' unless every proposition and offer association was checked. Never resolve numeric
161
+ ambiguity by guessing. Number words, written percentages, native digits and locale separators may be equivalent;
162
+ 12 months and one year may be equivalent only when the actual commercial terms agree. State the interpretation in
163
+ the explanation. No average score can override a defect. Return commercial_review in addition to the normal review."""
164
+
165
+
166
+ class CommercialReviewBlocked(ValueError):
167
+ def __init__(self, code: str):
168
+ super().__init__(code)
169
+ self.code = code
170
+
171
+
172
+ def review_contract(schema: str) -> dict[str, Any]:
173
+ return {
174
+ "schema": schema,
175
+ "coverage": "complete or uncertain",
176
+ "checks": {
177
+ name: {
178
+ "status": "equivalent, not_present, changed or uncertain",
179
+ "items": [{
180
+ "offer": "stable offer label",
181
+ "relation": "matched, source_only, or target_only",
182
+ "source_span": [0, 1],
183
+ "target_span": [0, 1],
184
+ "explanation": description,
185
+ }],
186
+ }
187
+ for name, description in DIMENSIONS.items()
188
+ },
189
+ }
190
+
191
+
192
+ def validate_review(
193
+ value: Any,
194
+ source: str,
195
+ target: str,
196
+ schema: str,
197
+ *,
198
+ allow_uncertain: bool = False,
199
+ ) -> dict[str, Any]:
200
+ """Validate evidence and return a content-free, hash-bound routing summary."""
201
+ def invalid() -> None:
202
+ raise CommercialReviewBlocked("review.commercial.invalid")
203
+
204
+ def span(value: Any, text: str) -> None:
205
+ if (
206
+ not isinstance(value, list) or len(value) != 2
207
+ or any(type(offset) is not int for offset in value)
208
+ or not 0 <= value[0] < value[1] <= len(text)
209
+ or not text[value[0]:value[1]].strip()
210
+ ):
211
+ invalid()
212
+
213
+ if not isinstance(value, dict) or set(value) != {"schema", "coverage", "checks"}:
214
+ invalid()
215
+ if value["schema"] != schema or value["coverage"] not in ("complete", "uncertain"):
216
+ invalid()
217
+ checks = value["checks"]
218
+ if not isinstance(checks, dict) or set(checks) != set(DIMENSIONS):
219
+ invalid()
220
+ uncertain_dimensions: set[str] = set()
221
+ coverage_uncertain = value["coverage"] == "uncertain"
222
+ changed = False
223
+ evidenced = False
224
+ for name, check in checks.items():
225
+ if not isinstance(check, dict) or set(check) != {"status", "items"}:
226
+ invalid()
227
+ status, items = check["status"], check["items"]
228
+ if status not in ("equivalent", "not_present", "changed", "uncertain"):
229
+ invalid()
230
+ if not isinstance(items, list) or len(items) > 1000:
231
+ invalid()
232
+ if (
233
+ (status == "not_present" and items)
234
+ or (status in ("equivalent", "changed", "uncertain") and not items)
235
+ ):
236
+ invalid()
237
+ seen = set()
238
+ for item in items:
239
+ if not isinstance(item, dict) or set(item) != {
240
+ "offer", "relation", "source_span", "target_span", "explanation",
241
+ }:
242
+ invalid()
243
+ for field in ("offer", "explanation"):
244
+ if not isinstance(item[field], str) or not item[field].strip() or len(item[field]) > 2000:
245
+ invalid()
246
+ relation = item["relation"]
247
+ if relation == "matched":
248
+ span(item["source_span"], source)
249
+ span(item["target_span"], target)
250
+ elif relation == "source_only":
251
+ span(item["source_span"], source)
252
+ if item["target_span"] is not None:
253
+ invalid()
254
+ elif relation == "target_only":
255
+ if item["source_span"] is not None:
256
+ invalid()
257
+ span(item["target_span"], target)
258
+ else:
259
+ invalid()
260
+ if status == "equivalent" and relation != "matched":
261
+ invalid()
262
+ identity = (
263
+ item["offer"], relation,
264
+ tuple(item["source_span"]) if item["source_span"] is not None else None,
265
+ tuple(item["target_span"]) if item["target_span"] is not None else None,
266
+ )
267
+ if identity in seen:
268
+ invalid()
269
+ seen.add(identity)
270
+ if status == "uncertain":
271
+ uncertain_dimensions.add(name)
272
+ changed |= status == "changed"
273
+ evidenced |= status == "equivalent"
274
+ if changed:
275
+ raise CommercialReviewBlocked("review.commercial.changed")
276
+ # Every evidenced condition must resolve to an explicitly reviewed offer.
277
+ assignment = checks["offer_assignment"]
278
+ if assignment["status"] != "equivalent" or not any(
279
+ check["status"] == "equivalent" for name, check in checks.items() if name != "offer_assignment"
280
+ ):
281
+ uncertain_dimensions.add("offer_assignment")
282
+ else:
283
+ offers = {item["offer"] for item in assignment["items"]}
284
+ if any(item["offer"] not in offers for check in checks.values() for item in check["items"]):
285
+ invalid()
286
+ if coverage_uncertain or not evidenced:
287
+ uncertain_dimensions.update(DIMENSIONS)
288
+ summary = {
289
+ "schema": REVIEW_SUMMARY_SCHEMA,
290
+ "profile": schema,
291
+ "status": "review_required" if uncertain_dimensions else "verified",
292
+ "review_required_dimensions": [
293
+ name for name in DIMENSIONS if name in uncertain_dimensions
294
+ ],
295
+ "evidence_sha256": hashlib.sha256(_canonical_json(value)).hexdigest(),
296
+ }
297
+ if uncertain_dimensions and not allow_uncertain:
298
+ raise CommercialReviewBlocked("review.commercial.independent_review_required")
299
+ return summary
300
+
301
+
302
+ def validate_summary(
303
+ value: Any,
304
+ profile: str,
305
+ *,
306
+ review_required: bool,
307
+ ) -> dict[str, Any]:
308
+ """Validate a persisted summary without retaining customer or reviewer text."""
309
+ if (
310
+ not isinstance(value, dict)
311
+ or set(value) != {
312
+ "schema", "profile", "status", "review_required_dimensions",
313
+ "evidence_sha256",
314
+ }
315
+ or value["schema"] != REVIEW_SUMMARY_SCHEMA
316
+ or value["profile"] != profile
317
+ or value["status"] not in {"verified", "review_required"}
318
+ or not isinstance(value["evidence_sha256"], str)
319
+ or len(value["evidence_sha256"]) != 64
320
+ or any(character not in "0123456789abcdef" for character in value["evidence_sha256"])
321
+ or not isinstance(value["review_required_dimensions"], list)
322
+ ):
323
+ raise CommercialReviewBlocked("review.commercial.summary_invalid")
324
+ dimensions = value["review_required_dimensions"]
325
+ if (
326
+ len(dimensions) != len(set(dimensions))
327
+ or any(name not in DIMENSIONS for name in dimensions)
328
+ or dimensions != [name for name in DIMENSIONS if name in dimensions]
329
+ or (value["status"] == "verified") != (not dimensions)
330
+ or (value["status"] == "review_required" and not review_required)
331
+ ):
332
+ raise CommercialReviewBlocked("review.commercial.summary_invalid")
333
+ return json.loads(_canonical_json(value))
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env python3
2
+ """Installed-skill entry point for the fail-closed BLUN Language Gateway."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import importlib.util
8
+ import json
9
+ import sys
10
+ from pathlib import Path
11
+
12
+
13
+ GUARD_PATH = Path(__file__).with_name("blun_language_guard.py")
14
+ SPEC = importlib.util.spec_from_file_location("blun_installed_gateway_guard", GUARD_PATH)
15
+ assert SPEC and SPEC.loader
16
+ GUARD = importlib.util.module_from_spec(SPEC)
17
+ sys.modules[SPEC.name] = GUARD
18
+ SPEC.loader.exec_module(GUARD)
19
+
20
+
21
+ def gate(request: dict) -> dict:
22
+ required = ("task_kind", "target_text", "language")
23
+ missing = [
24
+ key for key in required
25
+ if not isinstance(request.get(key), str) or not request[key].strip()
26
+ ]
27
+ if missing:
28
+ return {"status": "BLOCK", "release_allowed": False, "reason": "missing-fields", "fields": missing}
29
+ task_kind = request["task_kind"]
30
+ source = request.get("source_text", "")
31
+ if not isinstance(source, str):
32
+ return {"status": "BLOCK", "release_allowed": False, "reason": "invalid-source-type"}
33
+ if task_kind == "translation":
34
+ if not source.strip():
35
+ return {"status": "BLOCK", "release_allowed": False, "reason": "translation-source-required"}
36
+ result = GUARD.release_translation(request)
37
+ elif task_kind == "response":
38
+ if source.strip():
39
+ return {"status": "BLOCK", "release_allowed": False, "reason": "response-cannot-carry-source"}
40
+ result = GUARD.release_response(request)
41
+ else:
42
+ return {"status": "BLOCK", "release_allowed": False, "reason": "invalid-task-kind"}
43
+ result["gateway"] = f"blun-language-gateway/{GUARD.VERSION}"
44
+ result["task_kind"] = task_kind
45
+ return result
46
+
47
+
48
+ def main() -> int:
49
+ parser = argparse.ArgumentParser(description="BLUN fail-closed language output gateway")
50
+ parser.add_argument("--input", type=Path)
51
+ args = parser.parse_args()
52
+ try:
53
+ request = json.loads(args.input.read_text(encoding="utf-8-sig") if args.input else sys.stdin.read().lstrip("\ufeff"))
54
+ result = gate(request)
55
+ except (OSError, json.JSONDecodeError) as error:
56
+ result = {"status": "BLOCK", "release_allowed": False, "reason": "invalid-input", "error": str(error)}
57
+ print(json.dumps(result, ensure_ascii=False, indent=2))
58
+ return 0 if result.get("release_allowed") else 1
59
+
60
+
61
+ if __name__ == "__main__":
62
+ raise SystemExit(main())
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env python3
2
+ """Installed-skill hook that verifies an exact current V6 release receipt."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import hashlib
7
+ import importlib.util
8
+ import json
9
+ import os
10
+ import sys
11
+ from pathlib import Path
12
+
13
+
14
+ QUALITY_PATH = Path(__file__).with_name("language_quality.py")
15
+ SPEC = importlib.util.spec_from_file_location("blun_installed_hook_quality", QUALITY_PATH)
16
+ assert SPEC and SPEC.loader
17
+ QUALITY = importlib.util.module_from_spec(SPEC)
18
+ SPEC.loader.exec_module(QUALITY)
19
+
20
+
21
+ def load_verification_key(path: Path) -> bytes:
22
+ """Load an existing verifier key without creating or replacing trust state."""
23
+ environment_key = os.environ.get("BLUN_LANGUAGE_GUARD_KEY")
24
+ if environment_key:
25
+ return hashlib.sha256(environment_key.encode("utf-8")).digest()
26
+ try:
27
+ return QUALITY.load_existing_key(path)
28
+ except FileNotFoundError as error:
29
+ raise ValueError("signing key is missing; verification fails closed") from error
30
+ except OSError as error:
31
+ raise ValueError("signing key cannot be read") from error
32
+ except ValueError as error:
33
+ if "permissions" in str(error):
34
+ raise ValueError("signing key permissions are broader than owner-only") from error
35
+ raise ValueError("signing key is invalid") from error
36
+
37
+
38
+ def main() -> int:
39
+ try:
40
+ request = json.loads(sys.stdin.read().lstrip("\ufeff"))
41
+ task_kind = request["task_kind"]
42
+ source = request.get("source_text", "")
43
+ if task_kind not in {"translation", "response"}:
44
+ raise ValueError("task_kind must be translation or response")
45
+ if task_kind == "translation" and not source.strip():
46
+ raise ValueError("translation receipts require source_text")
47
+ if task_kind == "response" and source.strip():
48
+ raise ValueError("response receipts cannot carry source_text")
49
+ key_path = Path(os.environ.get("BLUN_LANGUAGE_GUARD_KEY_FILE", Path.home() / ".config" / "blun-language-guard" / "signing.key"))
50
+ result = QUALITY.verify_receipt(
51
+ request["release_token"], source, request["target_text"],
52
+ request["language"], load_verification_key(key_path),
53
+ request.get("content_type", "prose"), request.get("short_text_reviewed") is True,
54
+ purpose=task_kind,
55
+ )
56
+ except (KeyError, ValueError, json.JSONDecodeError, OSError) as error:
57
+ print(json.dumps({"allow": False, "error": str(error)}))
58
+ return 1
59
+ print(json.dumps({"allow": result["valid"], "verification": result}))
60
+ return 0 if result["valid"] else 1
61
+
62
+
63
+ if __name__ == "__main__":
64
+ raise SystemExit(main())
@@ -1,13 +1,6 @@
1
1
  {
2
- "name": "blun-language-guard",
3
- "version": "6.42.13",
4
- "sourceCommit": "6430ce30e235c1a9d1ebcd1b646d62edce510605",
5
- "sourceRepository": "https://github.com/Maykbiletti/translate-native",
6
- "files": {
7
- "blun_language_guard.py": "37ec76a20ac0656397e7923cd5b40800054cc95119de73e2fe6f437d760dda01",
8
- "check_diacritics.py": "96d7a0faa4f6a8c827bcf6fe065975fc803389fa4a5363108383da4b9bbc995b",
9
- "guard_service_client.py": "e3c000f2e5994738cb219cc82d14466d558206e7c7dd6a0e7d184071d8791f48",
10
- "language_quality.py": "46fe4f2b22205d6d5514bc1d0d7354ae862395f53134c7d82d892440b98e8529",
11
- "translation_guard.py": "56e74c2432aeeaecabfd58ba30ec507aab1d42c3e32fa1b39307c1043c8c7ac2"
12
- }
2
+ "name": "translate-native",
3
+ "version": "6.64.0",
4
+ "sourceCommit": "d5d350ba61a5ea7fa4efb2244abcfc191452a33f",
5
+ "sourceRepository": "https://github.com/Maykbiletti/translate-native"
13
6
  }
@@ -5,11 +5,17 @@
5
5
  "agent-browser": {
6
6
  "owner": "user-mcp",
7
7
  "version": "0.31.2",
8
- "detectTokens": ["agent-browser"],
8
+ "detectTokens": [
9
+ "agent-browser"
10
+ ],
9
11
  "config": {
10
12
  "transport": "stdio",
11
13
  "command": "npx",
12
- "args": ["-y", "agent-browser@0.31.2", "mcp"],
14
+ "args": [
15
+ "-y",
16
+ "agent-browser@0.31.2",
17
+ "mcp"
18
+ ],
13
19
  "enabled": false,
14
20
  "startupTimeoutMs": 120000,
15
21
  "toolTimeoutMs": 120000
@@ -18,13 +24,19 @@
18
24
  "blun-language-guard": {
19
25
  "owner": "user-mcp",
20
26
  "version": "host-provisioned",
21
- "skillVersion": "6.42.13",
22
- "detectTokens": ["blun-language-guard", "blun_language_guard.py"],
27
+ "skillVersion": "6.64.0",
28
+ "detectTokens": [
29
+ "blun-language-guard",
30
+ "blun_language_guard.py"
31
+ ],
23
32
  "provisioning": "The npm package provides the zero-dependency Python runtime files.",
24
33
  "config": {
25
34
  "transport": "stdio",
26
35
  "command": "$BLUN_BUNDLED_PYTHON",
27
- "args": ["$BLUN_BUNDLED_LANGUAGE_GUARD", "serve"],
36
+ "args": [
37
+ "$BLUN_BUNDLED_LANGUAGE_GUARD",
38
+ "serve"
39
+ ],
28
40
  "inheritEnv": false,
29
41
  "enabled": false,
30
42
  "startupTimeoutMs": 20000,
@@ -34,12 +46,17 @@
34
46
  "context7": {
35
47
  "owner": "user-mcp",
36
48
  "version": "latest",
37
- "autoEnable": false,
38
- "detectTokens": ["context7", "@upstash/context7-mcp"],
49
+ "detectTokens": [
50
+ "context7",
51
+ "@upstash/context7-mcp"
52
+ ],
39
53
  "config": {
40
54
  "transport": "stdio",
41
55
  "command": "npx",
42
- "args": ["-y", "@upstash/context7-mcp@latest"],
56
+ "args": [
57
+ "-y",
58
+ "@upstash/context7-mcp@latest"
59
+ ],
43
60
  "enabled": false,
44
61
  "startupTimeoutMs": 40000,
45
62
  "toolTimeoutMs": 120000
@@ -48,13 +65,19 @@
48
65
  "telegram": {
49
66
  "owner": "managed-plugin",
50
67
  "version": "bundled",
51
- "detectTokens": ["telegram"]
68
+ "detectTokens": [
69
+ "telegram"
70
+ ]
52
71
  },
53
72
  "windows-mcp": {
54
73
  "owner": "user-mcp",
55
74
  "version": "0.8.5",
56
- "platforms": ["win32"],
57
- "detectTokens": ["windows-mcp"],
75
+ "platforms": [
76
+ "win32"
77
+ ],
78
+ "detectTokens": [
79
+ "windows-mcp"
80
+ ],
58
81
  "config": {
59
82
  "transport": "stdio",
60
83
  "command": "$BLUN_UVX",
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: access
3
- description: Manage Telegram channel access — create connection codes, approve pairings, edit allowlists, set DM/group policy.
3
+ description: Manage Telegram channel access — approve pairings, edit allowlists, set DM/group policy.
4
4
  ---
5
5
  Manage access control for the BLUN Telegram channel. The state file is
6
6
  `~/.blun/channels/telegram/access.json` (create the directory and a default
7
- `{"dmPolicy":"pairing","allowFrom":[],"groups":{},"pending":{},"connect":{}}` if missing).
7
+ `{"dmPolicy":"pairing","allowFrom":[],"groups":{},"pending":{}}` if missing).
8
8
  Honor `BLUN_TELEGRAM_STATE_DIR` if that environment variable is set.
9
9
 
10
10
  ARGUMENTS: $ARGUMENTS
@@ -13,14 +13,6 @@ Supported operations (parse from the arguments above; if empty, show current
13
13
  state as a short summary — dmPolicy, allowFrom entries, groups, pending codes
14
14
  with expiry):
15
15
 
16
- - `connect` — generate a cryptographically random 6-character lowercase hex
17
- code in this console. Store it as `connect[code]` with `createdAt` now and
18
- `expiresAt` ten minutes from now, save atomically, then print exactly these
19
- two useful lines (never ask for or print a Telegram chat id):
20
- `Telegram-Code: <code>`
21
- `Jetzt im gewuenschten privaten Chat oder in der Gruppe senden: /connect <code>`
22
- The bridge consumes the code once and records the Telegram ids internally.
23
-
24
16
  - `pair <code>` — look up `pending[<code>]`. If present and not expired
25
17
  (`expiresAt` in ms since epoch): move its `senderId` into `allowFrom`
26
18
  (deduplicated), delete the pending entry, save the file, then write an empty