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,420 @@
1
+ #!/usr/bin/env python3
2
+ """Durable, fail-closed storage for qualified-native benchmark references.
3
+
4
+ The trusted host owns the SQLite connection, receipt verifier, evidence
5
+ authority, and external artifact loader. The first fully verified reference is
6
+ bound to one route, benchmark policy, and suite job. Every read reverifies both
7
+ the artifact attestation and the qualified-human receipt before returning text.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import hashlib
13
+ import importlib.util
14
+ import json
15
+ import math
16
+ import re
17
+ import sqlite3
18
+ import sys
19
+ import time
20
+ from contextlib import contextmanager
21
+ from dataclasses import asdict
22
+ from pathlib import Path
23
+ from typing import Any, Callable, Iterator
24
+
25
+
26
+ STORE_SCHEMA = "blun.website-localization-native-reference-store.v1"
27
+ MAX_ARTIFACT_BYTES = 4 * 1024 * 1024
28
+ ERROR_CODE = re.compile(r"^[a-z][a-z0-9_.-]{0,127}$")
29
+ STORE_COLUMNS = (
30
+ "reference_id", "route_id", "policy_sha256", "job_sha256",
31
+ "artifact_json", "artifact_sha256", "created_at",
32
+ )
33
+
34
+
35
+ def _load_module(name: str, path: Path):
36
+ spec = importlib.util.spec_from_file_location(name, path)
37
+ if spec is None or spec.loader is None:
38
+ raise RuntimeError(f"cannot load native-reference dependency: {path.name}")
39
+ module = importlib.util.module_from_spec(spec)
40
+ sys.modules[spec.name] = module
41
+ spec.loader.exec_module(module)
42
+ return module
43
+
44
+
45
+ _ROOT = Path(__file__).resolve().parents[1]
46
+ _BENCHMARK = _load_module(
47
+ "blun_website_localization_native_reference_benchmark",
48
+ _ROOT / "integrations" / "website_localization_benchmark.py",
49
+ )
50
+ _WORKER = _BENCHMARK._WORKER
51
+ _SUITE = _BENCHMARK._SUITE
52
+
53
+
54
+ class NativeReferenceStoreFailed(RuntimeError):
55
+ """Content-free failure understood by durable benchmark orchestration."""
56
+
57
+ benchmark_campaign_dependency_failure = True
58
+
59
+ def __init__(self, code: str, *, retryable: bool):
60
+ if not isinstance(code, str) or ERROR_CODE.fullmatch(code) is None:
61
+ raise ValueError("native-reference error code is invalid")
62
+ if not isinstance(retryable, bool):
63
+ raise ValueError("native-reference retryability must be boolean")
64
+ super().__init__(code)
65
+ self.code = code
66
+ self.retryable = retryable
67
+
68
+
69
+ def _pairs(items):
70
+ result = {}
71
+ for key, value in items:
72
+ if key in result:
73
+ raise ValueError("duplicate JSON key")
74
+ result[key] = value
75
+ return result
76
+
77
+
78
+ def _constant(value):
79
+ raise ValueError("non-finite JSON number")
80
+
81
+
82
+ def _json_bytes(value: Any, code: str) -> bytes:
83
+ try:
84
+ encoded = json.dumps(
85
+ value,
86
+ ensure_ascii=False,
87
+ allow_nan=False,
88
+ sort_keys=True,
89
+ separators=(",", ":"),
90
+ ).encode("utf-8")
91
+ except (TypeError, ValueError, UnicodeEncodeError, RecursionError):
92
+ raise NativeReferenceStoreFailed(code, retryable=False) from None
93
+ if not encoded or len(encoded) > MAX_ARTIFACT_BYTES:
94
+ raise NativeReferenceStoreFailed(code, retryable=False)
95
+ return encoded
96
+
97
+
98
+ def _parse_json(value: Any) -> Any:
99
+ if not isinstance(value, str) or not value:
100
+ raise NativeReferenceStoreFailed(
101
+ "native_reference.store.state_invalid", retryable=False,
102
+ )
103
+ try:
104
+ encoded = value.encode("utf-8")
105
+ if len(encoded) > MAX_ARTIFACT_BYTES:
106
+ raise ValueError("stored JSON is too large")
107
+ return json.loads(
108
+ value, object_pairs_hook=_pairs, parse_constant=_constant,
109
+ )
110
+ except (UnicodeEncodeError, ValueError, RecursionError):
111
+ raise NativeReferenceStoreFailed(
112
+ "native_reference.store.state_invalid", retryable=False,
113
+ ) from None
114
+
115
+
116
+ def _hash_bytes(value: bytes) -> str:
117
+ return hashlib.sha256(value).hexdigest()
118
+
119
+
120
+ def _hash_text(value: str) -> str:
121
+ return _hash_bytes(value.encode("utf-8"))
122
+
123
+
124
+ def _timestamp(value: Any = None) -> float:
125
+ value = time.time() if value is None else value
126
+ if (
127
+ isinstance(value, bool)
128
+ or not isinstance(value, (int, float))
129
+ or not math.isfinite(float(value))
130
+ or float(value) < 0
131
+ ):
132
+ raise NativeReferenceStoreFailed(
133
+ "native_reference.store.time_invalid", retryable=False,
134
+ )
135
+ return float(value)
136
+
137
+
138
+ def _identifier(value: Any, code: str) -> str:
139
+ if not isinstance(value, str) or _BENCHMARK.IDENTIFIER.fullmatch(value) is None:
140
+ raise NativeReferenceStoreFailed(code, retryable=False)
141
+ return value
142
+
143
+
144
+ def _binding(
145
+ job_payload: Any,
146
+ policy: Any,
147
+ route_id: Any,
148
+ ) -> tuple[tuple[str, str, str, str], dict[str, Any], Any]:
149
+ route = _identifier(
150
+ route_id, "native_reference.store.route_invalid",
151
+ )
152
+ try:
153
+ validated_policy = _BENCHMARK._validate_policy(policy)
154
+ job = _WORKER._validated_job(job_payload)
155
+ _BENCHMARK._validate_candidate_job_binding(job, validated_policy)
156
+ if job["target"]["locale"] not in validated_policy.required_locales:
157
+ raise ValueError("locale is not required")
158
+ _SUITE.case_for_job(job)
159
+ except Exception:
160
+ raise NativeReferenceStoreFailed(
161
+ "native_reference.store.binding_invalid", retryable=False,
162
+ ) from None
163
+ policy_sha256 = _hash_bytes(_json_bytes(
164
+ asdict(validated_policy), "native_reference.store.binding_invalid",
165
+ ))
166
+ job_sha256 = _hash_bytes(_json_bytes(
167
+ job, "native_reference.store.binding_invalid",
168
+ ))
169
+ reference_id = "native-reference:" + _hash_bytes(_json_bytes(
170
+ {
171
+ "schema": STORE_SCHEMA,
172
+ "route_id": route,
173
+ "policy_sha256": policy_sha256,
174
+ "job_sha256": job_sha256,
175
+ },
176
+ "native_reference.store.binding_invalid",
177
+ ))
178
+ return (
179
+ (reference_id, route, policy_sha256, job_sha256),
180
+ job,
181
+ validated_policy,
182
+ )
183
+
184
+
185
+ def _validated_artifact(
186
+ artifact: Any,
187
+ job: dict[str, Any],
188
+ policy: Any,
189
+ native_reference_verifier: Any,
190
+ evidence_authority: Any,
191
+ ) -> dict[str, Any]:
192
+ try:
193
+ return _BENCHMARK._validate_native_reference(
194
+ job,
195
+ artifact,
196
+ policy,
197
+ native_reference_verifier,
198
+ evidence_authority,
199
+ )
200
+ except _BENCHMARK.BenchmarkBlocked as error:
201
+ retryable = error.code in {
202
+ "benchmark.attestation.verify_failed",
203
+ "benchmark.native_reference.verify_failed",
204
+ }
205
+ code = (
206
+ "native_reference.store.verification_unavailable"
207
+ if retryable else "native_reference.store.artifact_invalid"
208
+ )
209
+ raise NativeReferenceStoreFailed(code, retryable=retryable) from None
210
+ except Exception:
211
+ raise NativeReferenceStoreFailed(
212
+ "native_reference.store.artifact_invalid", retryable=False,
213
+ ) from None
214
+
215
+
216
+ @contextmanager
217
+ def _transaction(connection: sqlite3.Connection) -> Iterator[None]:
218
+ if connection.in_transaction:
219
+ raise NativeReferenceStoreFailed(
220
+ "native_reference.store.external_transaction", retryable=False,
221
+ )
222
+ try:
223
+ connection.execute("BEGIN IMMEDIATE")
224
+ yield
225
+ except Exception:
226
+ connection.rollback()
227
+ raise
228
+ else:
229
+ connection.commit()
230
+
231
+
232
+ class NativeReferenceArtifactStore:
233
+ """Persist the first exact verified native reference for one bound route."""
234
+
235
+ def __init__(self, connection: sqlite3.Connection):
236
+ if not isinstance(connection, sqlite3.Connection):
237
+ raise NativeReferenceStoreFailed(
238
+ "native_reference.store.connection_invalid", retryable=False,
239
+ )
240
+ self.connection = connection
241
+ self.connection.row_factory = sqlite3.Row
242
+ self.connection.execute("PRAGMA busy_timeout = 5000")
243
+ with _transaction(self.connection):
244
+ self.connection.execute("""
245
+ CREATE TABLE IF NOT EXISTS benchmark_native_references (
246
+ reference_id TEXT PRIMARY KEY,
247
+ route_id TEXT NOT NULL,
248
+ policy_sha256 TEXT NOT NULL,
249
+ job_sha256 TEXT NOT NULL,
250
+ artifact_json TEXT NOT NULL,
251
+ artifact_sha256 TEXT NOT NULL,
252
+ created_at REAL NOT NULL,
253
+ UNIQUE(route_id, policy_sha256, job_sha256)
254
+ )
255
+ """)
256
+ columns = tuple(
257
+ row[1] for row in self.connection.execute(
258
+ "PRAGMA table_info(benchmark_native_references)"
259
+ ).fetchall()
260
+ )
261
+ if columns != STORE_COLUMNS:
262
+ raise NativeReferenceStoreFailed(
263
+ "native_reference.store.schema_unsupported", retryable=False,
264
+ )
265
+
266
+ @staticmethod
267
+ def identity(
268
+ job_payload: Any, policy: Any, route_id: Any,
269
+ ) -> tuple[str, str, str, str]:
270
+ return _binding(job_payload, policy, route_id)[0]
271
+
272
+ def load(
273
+ self,
274
+ job_payload: Any,
275
+ policy: Any,
276
+ route_id: Any,
277
+ *,
278
+ native_reference_verifier: Any,
279
+ evidence_authority: Any,
280
+ ) -> dict[str, Any] | None:
281
+ identity, job, validated_policy = _binding(
282
+ job_payload, policy, route_id,
283
+ )
284
+ row = self.connection.execute("""
285
+ SELECT * FROM benchmark_native_references
286
+ WHERE reference_id = ?
287
+ """, (identity[0],)).fetchone()
288
+ if row is None:
289
+ return None
290
+ if (
291
+ tuple(row.keys()) != STORE_COLUMNS
292
+ or tuple(row[name] for name in STORE_COLUMNS[:4]) != identity
293
+ or isinstance(row["created_at"], bool)
294
+ or not isinstance(row["created_at"], (int, float))
295
+ or not math.isfinite(float(row["created_at"]))
296
+ or float(row["created_at"]) < 0
297
+ or not isinstance(row["artifact_json"], str)
298
+ or row["artifact_sha256"] != _hash_text(row["artifact_json"])
299
+ ):
300
+ raise NativeReferenceStoreFailed(
301
+ "native_reference.store.state_invalid", retryable=False,
302
+ )
303
+ artifact = _parse_json(row["artifact_json"])
304
+ return _validated_artifact(
305
+ artifact,
306
+ job,
307
+ validated_policy,
308
+ native_reference_verifier,
309
+ evidence_authority,
310
+ )
311
+
312
+ def save(
313
+ self,
314
+ job_payload: Any,
315
+ policy: Any,
316
+ route_id: Any,
317
+ artifact: Any,
318
+ *,
319
+ native_reference_verifier: Any,
320
+ evidence_authority: Any,
321
+ now: Any = None,
322
+ ) -> dict[str, Any]:
323
+ identity, job, validated_policy = _binding(
324
+ job_payload, policy, route_id,
325
+ )
326
+ verified = _validated_artifact(
327
+ artifact,
328
+ job,
329
+ validated_policy,
330
+ native_reference_verifier,
331
+ evidence_authority,
332
+ )
333
+ artifact_json = _json_bytes(
334
+ verified, "native_reference.store.artifact_invalid",
335
+ ).decode("utf-8")
336
+ values = identity + (
337
+ artifact_json,
338
+ _hash_text(artifact_json),
339
+ _timestamp(now),
340
+ )
341
+ with _transaction(self.connection):
342
+ self.connection.execute("""
343
+ INSERT OR IGNORE INTO benchmark_native_references
344
+ VALUES (?, ?, ?, ?, ?, ?, ?)
345
+ """, values)
346
+ stored = self.load(
347
+ job_payload,
348
+ policy,
349
+ route_id,
350
+ native_reference_verifier=native_reference_verifier,
351
+ evidence_authority=evidence_authority,
352
+ )
353
+ if stored != verified:
354
+ raise NativeReferenceStoreFailed(
355
+ "native_reference.store.conflict", retryable=False,
356
+ )
357
+ return stored
358
+
359
+
360
+ def resolve_native_reference_artifact(
361
+ store: NativeReferenceArtifactStore,
362
+ job_payload: Any,
363
+ policy: Any,
364
+ route_id: Any,
365
+ load_artifact: Callable[[], Any],
366
+ *,
367
+ native_reference_verifier: Any,
368
+ evidence_authority: Any,
369
+ operation_guard: Callable[[], Any] | None = None,
370
+ now: Any = None,
371
+ ) -> dict[str, Any]:
372
+ """Reuse verified state or load and persist one exact external artifact."""
373
+ if any(not callable(getattr(store, name, None)) for name in ("load", "save")):
374
+ raise TypeError("store must provide load and save")
375
+ if not callable(load_artifact):
376
+ raise TypeError("load_artifact must be callable")
377
+ if operation_guard is not None and not callable(operation_guard):
378
+ raise TypeError("operation_guard must be callable")
379
+
380
+ def guard_operation() -> None:
381
+ if operation_guard is None:
382
+ return
383
+ try:
384
+ operation_guard()
385
+ except Exception:
386
+ raise NativeReferenceStoreFailed(
387
+ "native_reference.operation_guard_failed", retryable=True,
388
+ ) from None
389
+
390
+ # A cache hit still invokes the configured receipt verifier. Guard it just
391
+ # like an external vault lookup rather than assuming verification is local.
392
+ guard_operation()
393
+ cached = store.load(
394
+ job_payload,
395
+ policy,
396
+ route_id,
397
+ native_reference_verifier=native_reference_verifier,
398
+ evidence_authority=evidence_authority,
399
+ )
400
+ if cached is not None:
401
+ return cached
402
+ guard_operation()
403
+ try:
404
+ artifact = load_artifact()
405
+ except NativeReferenceStoreFailed:
406
+ raise
407
+ except Exception:
408
+ raise NativeReferenceStoreFailed(
409
+ "native_reference.loader_failed", retryable=True,
410
+ ) from None
411
+ guard_operation()
412
+ return store.save(
413
+ job_payload,
414
+ policy,
415
+ route_id,
416
+ artifact,
417
+ native_reference_verifier=native_reference_verifier,
418
+ evidence_authority=evidence_authority,
419
+ now=now,
420
+ )
@@ -0,0 +1,235 @@
1
+ #!/usr/bin/env python3
2
+ """Versioned, provider-neutral quality profiles for every EU target locale."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import hashlib
7
+ import json
8
+ from dataclasses import asdict, dataclass
9
+ from typing import Any
10
+
11
+
12
+ SCHEMA = "blun.website-localization-quality-profile.v1"
13
+ CLDR_VERSION = "48"
14
+ CLDR_SUMMARY = "https://www.unicode.org/cldr/charts/48/summary/{language}.html"
15
+ MALTESE_ORTHOGRAPHY_SOURCE = (
16
+ "https://kunsilltalmalti.gov.mt/mistoqssija-u-twegiba-51-76/"
17
+ )
18
+ REQUIRED_RED_TEAM_CHECKS = (
19
+ "translationese",
20
+ "wrong_neighbor_language",
21
+ "mixed_language_varieties",
22
+ "ascii_folding",
23
+ "missing_diacritics_or_native_script",
24
+ "wrong_inflection",
25
+ "meaning_omission",
26
+ "unnatural_cta",
27
+ "marketing_calque",
28
+ )
29
+
30
+
31
+ @dataclass(frozen=True)
32
+ class LocaleQualityProfile:
33
+ locale: str
34
+ version: str
35
+ native_review_focus: tuple[str, ...]
36
+ fidelity_review_focus: tuple[str, ...]
37
+ adversarial_focus: tuple[str, ...]
38
+ required_red_team_checks: tuple[str, ...]
39
+ source_refs: tuple[str, ...]
40
+
41
+ def as_payload(self) -> dict[str, Any]:
42
+ body = json.loads(_canonical_json({"schema": SCHEMA, **asdict(self)}))
43
+ body["sha256"] = hashlib.sha256(_canonical_json(body)).hexdigest()
44
+ return body
45
+
46
+
47
+ def _canonical_json(value: Any) -> bytes:
48
+ return json.dumps(
49
+ value,
50
+ ensure_ascii=False,
51
+ allow_nan=False,
52
+ sort_keys=True,
53
+ separators=(",", ":"),
54
+ ).encode("utf-8")
55
+
56
+
57
+ def _profile(
58
+ locale: str,
59
+ native: tuple[str, ...],
60
+ fidelity: tuple[str, ...],
61
+ adversarial: tuple[str, ...],
62
+ *,
63
+ sources: tuple[str, ...] = (),
64
+ ) -> LocaleQualityProfile:
65
+ language = locale.split("-", 1)[0]
66
+ return LocaleQualityProfile(
67
+ locale=locale,
68
+ version=f"eu-{locale}-2026-09-1",
69
+ native_review_focus=native,
70
+ fidelity_review_focus=fidelity,
71
+ adversarial_focus=adversarial,
72
+ required_red_team_checks=REQUIRED_RED_TEAM_CHECKS,
73
+ source_refs=(CLDR_SUMMARY.format(language=language), *sources),
74
+ )
75
+
76
+
77
+ PROFILES: tuple[LocaleQualityProfile, ...] = (
78
+ _profile(
79
+ "bg-BG",
80
+ ("Use idiomatic Bulgarian Cyrillic, natural clitic placement, verbal aspect, and postposed definite articles.",),
81
+ ("Check aspect, tense, evidential meaning, negation, modality, number, gender, and agreement against the source.",),
82
+ ("Reject transliteration, Russian or Macedonian leakage, missing article suffixes, stiff CTAs, marketing calques, omissions, and ASCII folding.",),
83
+ ),
84
+ _profile(
85
+ "hr-HR",
86
+ ("Use contemporary Croatian vocabulary, natural clitic order, case government, aspect, and idiomatic information structure.",),
87
+ ("Check case roles, aspect, tense, modality, negation, quantities, terminology, and every source proposition.",),
88
+ ("Reject Serbian or Bosnian variety mixing, ekavian leakage, lost diacritics, bad inflection, literal CTAs, marketing calques, and omissions.",),
89
+ ),
90
+ _profile(
91
+ "cs-CZ",
92
+ ("Use idiomatic Czech word order, aspect, case government, agreement, and native characters including č, ř, š, ě, ů, and ž.",),
93
+ ("Check aspect, case roles, negation, modality, quantities, terminology, and complete propositional coverage.",),
94
+ ("Reject Slovak leakage, ASCII-folded diacritics, false friends, malformed inflection, source-shaped CTAs, marketing calques, and omissions.",),
95
+ ),
96
+ _profile(
97
+ "da-DK",
98
+ ("Use contemporary Danish syntax, definiteness, compound formation, modal tone, and concise native web rhythm.",),
99
+ ("Check definiteness, negation, modality, quantities, terminology, and the full source meaning.",),
100
+ ("Reject Swedish or Norwegian leakage, mixed varieties, lost æ/ø/å, unnatural compounds, literal CTAs, marketing calques, and omissions.",),
101
+ ),
102
+ _profile(
103
+ "nl-NL",
104
+ ("Use Netherlands Dutch word order, separable verbs, natural compounds, register, and idiomatic web copy.",),
105
+ ("Check verb particles, negation, modality, quantities, terminology, conditions, and complete source coverage.",),
106
+ ("Reject Belgian-Dutch mixing, German or English calques, bad compounds, stiff CTAs, missing meaning, and inappropriate ASCII substitution.",),
107
+ ),
108
+ _profile(
109
+ "en-IE",
110
+ ("Use natural contemporary Irish English spelling, idiom, register, punctuation, and concise web-copy rhythm.",),
111
+ ("Check negation, modality, quantities, terminology, conditions, and every source proposition without semantic inflation.",),
112
+ ("Reject mixed US and Irish conventions, source-language syntax, translationese, unnatural CTAs, marketing calques, and omissions.",),
113
+ ),
114
+ _profile(
115
+ "et-EE",
116
+ ("Use idiomatic Estonian information structure, case government, quantity degrees, consonant gradation, compounds, and object case.",),
117
+ ("Check case roles, total versus partial objects, negation, modality, quantities, terminology, and complete meaning.",),
118
+ ("Reject Finnish or Russian leakage, ASCII-folded õ/ä/ö/ü, wrong quantity or inflection, literal CTAs, marketing calques, and omissions.",),
119
+ ),
120
+ _profile(
121
+ "fi-FI",
122
+ ("Use natural Finnish information structure, case government, agglutination, possessive suffixes, vowel harmony, consonant gradation, clitics, idiomatic compounds, and appropriate politeness.",),
123
+ ("Check case roles, scope, negation, modality, quantities, terminology, conditions, and every proposition across the complete source.",),
124
+ ("Reject Swedish, Estonian, English, or German leakage and calques; ASCII-folded ä/ö; broken inflection; unnatural CTAs; marketing calques; and omissions.",),
125
+ ),
126
+ _profile(
127
+ "fr-FR",
128
+ ("Use France French idiom, natural syntax, contractions, agreement, typography, register, and persuasive but credible web rhythm.",),
129
+ ("Check gender and number agreement, negation, modality, quantities, terminology, conditions, and complete meaning.",),
130
+ ("Reject Canadian or Belgian variety mixing, anglicisms, lost accents, literal CTAs, marketing calques, bad inflection, and omissions.",),
131
+ ),
132
+ _profile(
133
+ "de-AT",
134
+ ("Use Austrian Standard German vocabulary and conventions, idiomatic clause structure, compounds, case government, register, and natural web rhythm.",),
135
+ ("Check case roles, negation, modality, quantities, terminology, conditions, and every source proposition.",),
136
+ ("Reject Germany-only defaults where Austrian usage matters, Swiss mixing, ASCII-folded ä/ö/ü/ß, translationese, stiff CTAs, marketing calques, and omissions.",),
137
+ ),
138
+ _profile(
139
+ "el-GR",
140
+ ("Use monotonic Greek with native Greek script, correct accents, aspect, clitic placement, case, gender, agreement, and natural information structure.",),
141
+ ("Check aspect, case roles, negation, modality, quantities, terminology, conditions, and complete source coverage.",),
142
+ ("Reject Greeklish, Ancient or Cypriot variety mixing, missing tonos, bad inflection, literal CTAs, marketing calques, and omissions.",),
143
+ ),
144
+ _profile(
145
+ "hu-HU",
146
+ ("Use idiomatic Hungarian focus order, vowel harmony, case suffixes, definite or indefinite conjugation, compounds, and natural politeness.",),
147
+ ("Check focus and scope, conjugation, negation, modality, quantities, terminology, conditions, and complete meaning.",),
148
+ ("Reject neighboring-language leakage, ASCII-folded ő/ű, suffix disharmony, bad inflection, source-shaped CTAs, marketing calques, and omissions.",),
149
+ ),
150
+ _profile(
151
+ "ga-IE",
152
+ ("Use contemporary standard Irish with natural VSO structure, initial mutations, broad or slender consonant spelling, case forms, copula versus bí, and appropriate register.",),
153
+ ("Check mutations, possession, genitive relations, negation, modality, quantities, terminology, and every source proposition.",),
154
+ ("Reject English word order and calques, Scottish Gaelic leakage, missing fadas, wrong mutations, unnatural CTAs, marketing calques, and omissions.",),
155
+ ),
156
+ _profile(
157
+ "it-IT",
158
+ ("Use contemporary Italian idiom, natural clitic placement, article and preposition contraction, agreement, register, and web-copy rhythm.",),
159
+ ("Check clitic reference, negation, modality, quantities, terminology, conditions, and complete source meaning.",),
160
+ ("Reject regional or Swiss-Italian mixing, anglicised syntax, lost accents, bad agreement, literal CTAs, marketing calques, and omissions.",),
161
+ ),
162
+ _profile(
163
+ "lv-LV",
164
+ ("Use idiomatic Latvian case government, declension, agreement, verb prefixes, information structure, and native diacritics.",),
165
+ ("Check case roles, aspectual prefixes, negation, modality, quantities, terminology, conditions, and complete meaning.",),
166
+ ("Reject Lithuanian or Russian leakage, ASCII-folded ā/č/ē/ģ/ī/ķ/ļ/ņ/š/ū/ž, bad inflection, literal CTAs, marketing calques, and omissions.",),
167
+ ),
168
+ _profile(
169
+ "lt-LT",
170
+ ("Use idiomatic Lithuanian case government, declension, agreement, participles, aspect, information structure, and native diacritics.",),
171
+ ("Check case roles, aspect, negation, modality, quantities, terminology, conditions, and complete source coverage.",),
172
+ ("Reject Latvian, Polish, or Russian leakage, ASCII-folded ą/č/ę/ė/į/š/ų/ū/ž, bad inflection, literal CTAs, marketing calques, and omissions.",),
173
+ ),
174
+ _profile(
175
+ "mt-MT",
176
+ ("Use contemporary Maltese orthography with ċ, ġ, għ, ħ, and ż; natural Semitic and Romance morphology; fused articles and prepositions; idiomatic syntax; register; and rhythm.",),
177
+ ("Check articles, prepositions, agreement, verb morphology, negation, modality, quantities, terminology, conditions, and every source proposition.",),
178
+ ("Reject English or Italian calques and word order, neighboring-language leakage, ASCII-folded Maltese letters, false plurals or inflection, unnatural CTAs, marketing calques, and omissions.",),
179
+ sources=(MALTESE_ORTHOGRAPHY_SOURCE,),
180
+ ),
181
+ _profile(
182
+ "pl-PL",
183
+ ("Use idiomatic Polish aspect, case government, gender and virility agreement, natural word order, register, and native diacritics.",),
184
+ ("Check aspect, case roles, negation, modality, quantities, terminology, conditions, and complete meaning.",),
185
+ ("Reject Czech, Slovak, or Russian leakage, ASCII-folded ą/ć/ę/ł/ń/ó/ś/ź/ż, bad inflection, literal CTAs, marketing calques, and omissions.",),
186
+ ),
187
+ _profile(
188
+ "pt-PT",
189
+ ("Use European Portuguese vocabulary, clitic placement, infinitive choices, agreement, register, punctuation, and natural web rhythm.",),
190
+ ("Check clitic reference, negation, modality, quantities, terminology, conditions, and every source proposition.",),
191
+ ("Reject Brazilian-Portuguese mixing, Spanish or English calques, lost diacritics, bad inflection, unnatural CTAs, marketing calques, and omissions.",),
192
+ ),
193
+ _profile(
194
+ "ro-RO",
195
+ ("Use contemporary Romanian idiom, enclitic definite articles, case marking, agreement, clitic placement, register, and native diacritics.",),
196
+ ("Check article and clitic reference, negation, modality, quantities, terminology, conditions, and complete meaning.",),
197
+ ("Reject Moldovan or Italian mixing, ASCII-folded ă/â/î/ș/ț, cedilla substitutions, bad inflection, literal CTAs, marketing calques, and omissions.",),
198
+ ),
199
+ _profile(
200
+ "sk-SK",
201
+ ("Use idiomatic Slovak aspect, case government, agreement, rhythmic law where relevant, natural word order, and native diacritics.",),
202
+ ("Check aspect, case roles, negation, modality, quantities, terminology, conditions, and complete source coverage.",),
203
+ ("Reject Czech leakage, ASCII-folded ľ/ĺ/ŕ/ť/ď/ň/ô/ä, bad inflection, source-shaped CTAs, marketing calques, and omissions.",),
204
+ ),
205
+ _profile(
206
+ "sl-SI",
207
+ ("Use idiomatic Slovenian dual forms, case government, agreement, aspect, clitic order, natural information structure, and native diacritics.",),
208
+ ("Check dual and plural number, case roles, negation, modality, quantities, terminology, conditions, and complete meaning.",),
209
+ ("Reject Croatian or Serbian leakage, ASCII-folded č/š/ž, lost dual forms, bad inflection, literal CTAs, marketing calques, and omissions.",),
210
+ ),
211
+ _profile(
212
+ "es-ES",
213
+ ("Use Spain Spanish idiom, natural clitic use, mood and aspect, agreement, register, punctuation, and credible web-copy rhythm.",),
214
+ ("Check mood, aspect, pronoun reference, negation, modality, quantities, terminology, conditions, and complete meaning.",),
215
+ ("Reject Latin-American variety mixing, anglicisms, lost accents or ñ, bad inflection, literal CTAs, marketing calques, and omissions.",),
216
+ ),
217
+ _profile(
218
+ "sv-SE",
219
+ ("Use Sweden Swedish word order, definiteness, compound formation, modal tone, punctuation, register, and concise native web rhythm.",),
220
+ ("Check definiteness, negation, modality, quantities, terminology, conditions, and every source proposition.",),
221
+ ("Reject Finnish-Swedish, Danish, or Norwegian mixing, ASCII-folded å/ä/ö, split compounds, literal CTAs, marketing calques, and omissions.",),
222
+ ),
223
+ )
224
+
225
+ _BY_LOCALE = {profile.locale: profile for profile in PROFILES}
226
+ if len(_BY_LOCALE) != len(PROFILES):
227
+ raise RuntimeError("duplicate website-localization quality profile")
228
+
229
+
230
+ def quality_profile_for(locale: str) -> dict[str, Any]:
231
+ try:
232
+ profile = _BY_LOCALE[locale]
233
+ except (KeyError, TypeError):
234
+ raise ValueError("unsupported quality-profile locale") from None
235
+ return profile.as_payload()