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,862 @@
1
+ #!/usr/bin/env python3
2
+ """Provider-neutral composition root for the website-localization service.
3
+
4
+ The host owns distinct SQLite connections and every external capability.
5
+ This module validates those inputs before constructing the durable queue,
6
+ release, CMS, evidence, supervisor, and read-only health components.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import importlib.util
12
+ import math
13
+ import re
14
+ import sqlite3
15
+ import sys
16
+ import time
17
+ from pathlib import Path
18
+ from types import MappingProxyType
19
+ from typing import Any, Callable, Mapping
20
+
21
+
22
+ SCHEMA = "blun.website-localization-runtime.v1"
23
+ TOKEN = re.compile(r"^[A-Za-z0-9_.:-]{1,256}$")
24
+ REQUIRED_TICK_KEYS = frozenset({
25
+ "provider_resolver", "assets_resolver", "evidence_provider",
26
+ "quality_verifier", "event_verifier", "approval_authority",
27
+ "publication_authority", "publisher", "translation_worker_id",
28
+ "evidence_worker_id", "delivery_worker_id", "evidence_revision",
29
+ })
30
+ OPTIONAL_TICK_KEYS = frozenset({
31
+ "translation_lease_seconds", "translation_retry_base_seconds",
32
+ "translation_retry_max_seconds", "evidence_lease_seconds",
33
+ "evidence_max_attempts", "approval_ttl_seconds",
34
+ "delivery_lease_seconds", "delivery_max_attempts",
35
+ "human_review_verifier", "independent_model_review_verifier", "result_cache",
36
+ })
37
+ OPERATION_LEASE_DEFAULTS = {
38
+ "translation_lease_seconds": 300.0,
39
+ "evidence_lease_seconds": 300.0,
40
+ "delivery_lease_seconds": 300.0,
41
+ }
42
+
43
+
44
+ def _load_module(name: str, path: Path):
45
+ spec = importlib.util.spec_from_file_location(name, path)
46
+ if spec is None or spec.loader is None:
47
+ raise RuntimeError(f"cannot load required runtime dependency: {path.name}")
48
+ module = importlib.util.module_from_spec(spec)
49
+ sys.modules[spec.name] = module
50
+ spec.loader.exec_module(module)
51
+ return module
52
+
53
+
54
+ _ROOT = Path(__file__).resolve().parents[1]
55
+ _SERVICE = _load_module(
56
+ "blun_website_localization_runtime_service",
57
+ _ROOT / "integrations" / "website_localization_service.py",
58
+ )
59
+ _SUPERVISOR = _load_module(
60
+ "blun_website_localization_runtime_supervisor",
61
+ _ROOT / "integrations" / "website_localization_supervisor.py",
62
+ )
63
+ _HEALTH = _load_module(
64
+ "blun_website_localization_runtime_health",
65
+ _ROOT / "integrations" / "website_localization_health.py",
66
+ )
67
+ _HEALTH_HTTP = _load_module(
68
+ "blun_website_localization_runtime_health_http",
69
+ _ROOT / "integrations" / "website_localization_health_http.py",
70
+ )
71
+ _BENCHMARK_RUNTIME = _load_module(
72
+ "blun_website_localization_runtime_benchmark_execution",
73
+ _ROOT / "integrations" / "website_localization_benchmark_runtime.py",
74
+ )
75
+ _API = _load_module(
76
+ "blun_website_localization_runtime_api",
77
+ _ROOT / "integrations" / "website_localization_api.py",
78
+ )
79
+ _CMS = _SERVICE._CMS
80
+ _QUEUE = _CMS._QUEUE
81
+ _RELEASE = _CMS._RELEASE
82
+ _COORDINATOR = _SERVICE._COORDINATOR
83
+
84
+
85
+ class LocalizationRuntimeBlocked(RuntimeError):
86
+ """Stable host-composition failure without customer or secret values."""
87
+
88
+ def __init__(self, code: str):
89
+ super().__init__(code)
90
+ self.code = code
91
+
92
+
93
+ def _identifier(value: Any, code: str) -> str:
94
+ if not isinstance(value, str) or TOKEN.fullmatch(value) is None:
95
+ raise LocalizationRuntimeBlocked(code)
96
+ return value
97
+
98
+
99
+ def _number(
100
+ value: Any,
101
+ code: str,
102
+ *,
103
+ maximum: float | None = None,
104
+ allow_zero: bool = False,
105
+ ) -> float:
106
+ if isinstance(value, bool) or not isinstance(value, (int, float)):
107
+ raise LocalizationRuntimeBlocked(code)
108
+ number = float(value)
109
+ if (
110
+ not math.isfinite(number)
111
+ or (number < 0 if allow_zero else number <= 0)
112
+ or (maximum is not None and number > maximum)
113
+ ):
114
+ raise LocalizationRuntimeBlocked(code)
115
+ return number
116
+
117
+
118
+ def _capability(value: Any, method: str, code: str) -> None:
119
+ if not callable(getattr(value, method, None)):
120
+ raise LocalizationRuntimeBlocked(code)
121
+
122
+
123
+ def _validate_dependencies(values: Mapping[str, Any]) -> MappingProxyType:
124
+ if not isinstance(values, Mapping):
125
+ raise LocalizationRuntimeBlocked("runtime.dependencies.invalid")
126
+ copied = dict(values)
127
+ keys = set(copied)
128
+ if keys - REQUIRED_TICK_KEYS - OPTIONAL_TICK_KEYS or REQUIRED_TICK_KEYS - keys:
129
+ raise LocalizationRuntimeBlocked("runtime.dependencies.invalid")
130
+ if "result_cache" in copied:
131
+ raise LocalizationRuntimeBlocked("runtime.result_cache.external_forbidden")
132
+ if not callable(copied["provider_resolver"]):
133
+ raise LocalizationRuntimeBlocked("runtime.provider_resolver.invalid")
134
+ if not callable(copied["assets_resolver"]):
135
+ raise LocalizationRuntimeBlocked("runtime.assets_resolver.invalid")
136
+ for name, method in (
137
+ ("evidence_provider", "obtain"),
138
+ ("quality_verifier", "verify"),
139
+ ("event_verifier", "verify"),
140
+ ("approval_authority", "sign"),
141
+ ("approval_authority", "verify"),
142
+ ("publication_authority", "sign"),
143
+ ("publication_authority", "verify"),
144
+ ("publisher", "publish"),
145
+ ):
146
+ _capability(copied[name], method, f"runtime.{name}.invalid")
147
+ for name in (
148
+ "translation_worker_id", "evidence_worker_id", "delivery_worker_id",
149
+ "evidence_revision",
150
+ ):
151
+ _identifier(copied[name], f"runtime.{name}.invalid")
152
+ human = copied.get("human_review_verifier")
153
+ if human is not None:
154
+ _capability(human, "verify", "runtime.human_review_verifier.invalid")
155
+ independent = copied.get("independent_model_review_verifier")
156
+ if independent is not None:
157
+ _capability(
158
+ independent, "verify", "runtime.independent_model_review_verifier.invalid",
159
+ )
160
+ bounds = {
161
+ "translation_lease_seconds": (86_400.0, False),
162
+ "translation_retry_base_seconds": (86_400.0, True),
163
+ "translation_retry_max_seconds": (86_400.0, True),
164
+ "evidence_lease_seconds": (3_600.0, False),
165
+ "approval_ttl_seconds": (31_536_000.0, False),
166
+ "delivery_lease_seconds": (86_400.0, False),
167
+ }
168
+ for name, (maximum, allow_zero) in bounds.items():
169
+ if name in copied:
170
+ _number(
171
+ copied[name], f"runtime.{name}.invalid",
172
+ maximum=maximum, allow_zero=allow_zero,
173
+ )
174
+ for name in ("evidence_max_attempts", "delivery_max_attempts"):
175
+ if name in copied and (
176
+ isinstance(copied[name], bool)
177
+ or not isinstance(copied[name], int)
178
+ or not 1 <= copied[name] <= 20
179
+ ):
180
+ raise LocalizationRuntimeBlocked(f"runtime.{name}.invalid")
181
+ if (
182
+ "translation_retry_base_seconds" in copied
183
+ and "translation_retry_max_seconds" in copied
184
+ and float(copied["translation_retry_base_seconds"])
185
+ > float(copied["translation_retry_max_seconds"])
186
+ ):
187
+ raise LocalizationRuntimeBlocked("runtime.translation_retry_policy.invalid")
188
+ return MappingProxyType(copied)
189
+
190
+
191
+ def _validate_connections(connections: tuple[Any, ...]) -> None:
192
+ if len(connections) not in {5, 6, 10} or any(
193
+ not isinstance(connection, sqlite3.Connection) for connection in connections
194
+ ):
195
+ raise LocalizationRuntimeBlocked("runtime.connections.invalid")
196
+ if len({id(connection) for connection in connections}) != len(connections):
197
+ raise LocalizationRuntimeBlocked("runtime.connections.not_distinct")
198
+ if any(connection.in_transaction for connection in connections):
199
+ raise LocalizationRuntimeBlocked("runtime.connections.transaction_active")
200
+
201
+
202
+ def _supervisor_policy(value: Any):
203
+ if value is None:
204
+ return _SUPERVISOR.SupervisorPolicy(lease_seconds=360.0)
205
+ if not isinstance(value, Mapping):
206
+ raise LocalizationRuntimeBlocked("runtime.supervisor_policy.invalid")
207
+ expected = {
208
+ "lease_seconds", "active_delay_seconds", "idle_delay_seconds",
209
+ "blocked_base_seconds", "blocked_max_seconds", "stop_poll_seconds",
210
+ }
211
+ if set(value) != expected:
212
+ raise LocalizationRuntimeBlocked("runtime.supervisor_policy.invalid")
213
+ try:
214
+ return _SUPERVISOR.SupervisorPolicy(**dict(value)).validated()
215
+ except Exception:
216
+ raise LocalizationRuntimeBlocked("runtime.supervisor_policy.invalid") from None
217
+
218
+
219
+ def _validate_lease_hierarchy(
220
+ dependencies: Mapping[str, Any],
221
+ supervisor_policy: Any,
222
+ *,
223
+ benchmark_lease_seconds: float | None = None,
224
+ ) -> None:
225
+ leases = [
226
+ float(dependencies.get(name, default))
227
+ for name, default in OPERATION_LEASE_DEFAULTS.items()
228
+ ]
229
+ if benchmark_lease_seconds is not None:
230
+ leases.append(benchmark_lease_seconds)
231
+ longest_operation_lease = max(leases)
232
+ if float(supervisor_policy.lease_seconds) <= longest_operation_lease:
233
+ raise LocalizationRuntimeBlocked("runtime.lease_hierarchy.invalid")
234
+
235
+
236
+ BENCHMARK_EXECUTION_KEYS = frozenset({
237
+ "candidate_connection", "baseline_connection",
238
+ "native_reference_connection", "review_connection", "candidate_route_id",
239
+ "baseline_route_id", "native_reference_route_id", "reviewer_route_id",
240
+ "assets_resolver",
241
+ "candidate_provider_resolver", "baseline_acquirer",
242
+ "native_reference_loader", "reviewer", "native_reference_verifier",
243
+ "blinding_key", "worker_id", "max_attempts", "lease_seconds",
244
+ "retry_base_seconds", "retry_max_seconds",
245
+ })
246
+
247
+
248
+ def _benchmark_execution(value: Any) -> MappingProxyType | None:
249
+ if value is None:
250
+ return None
251
+ if not isinstance(value, Mapping) or set(value) != BENCHMARK_EXECUTION_KEYS:
252
+ raise LocalizationRuntimeBlocked("runtime.benchmark.execution.invalid")
253
+ copied = dict(value)
254
+ try:
255
+ for name in (
256
+ "candidate_connection", "baseline_connection",
257
+ "native_reference_connection", "review_connection",
258
+ ):
259
+ _BENCHMARK_RUNTIME._connection(copied[name])
260
+ for name in (
261
+ "candidate_route_id", "baseline_route_id",
262
+ "native_reference_route_id", "reviewer_route_id",
263
+ ):
264
+ _BENCHMARK_RUNTIME._route(
265
+ copied[name], "benchmark.runtime.route_invalid",
266
+ )
267
+ for name in (
268
+ "assets_resolver", "candidate_provider_resolver",
269
+ "baseline_acquirer", "native_reference_loader",
270
+ ):
271
+ _BENCHMARK_RUNTIME._callable(
272
+ copied[name], "benchmark.runtime.resolver_invalid",
273
+ )
274
+ _BENCHMARK_RUNTIME._adapter(
275
+ copied["reviewer"], "review", "benchmark.runtime.reviewer_invalid",
276
+ )
277
+ _BENCHMARK_RUNTIME._adapter(
278
+ copied["native_reference_verifier"],
279
+ "verify",
280
+ "benchmark.runtime.reference_verifier_invalid",
281
+ )
282
+ if (
283
+ not isinstance(copied["blinding_key"], bytes)
284
+ or len(copied["blinding_key"]) < 32
285
+ ):
286
+ raise ValueError
287
+ _BENCHMARK_RUNTIME._CAMPAIGN._identifier(copied["worker_id"])
288
+ if (
289
+ isinstance(copied["max_attempts"], bool)
290
+ or not isinstance(copied["max_attempts"], int)
291
+ or not 1 <= copied["max_attempts"] <= (
292
+ _BENCHMARK_RUNTIME._CAMPAIGN.MAX_ATTEMPTS
293
+ )
294
+ ):
295
+ raise ValueError
296
+ except Exception as error:
297
+ code = getattr(error, "code", "runtime.benchmark.execution.invalid")
298
+ if not isinstance(code, str) or re.fullmatch(
299
+ r"[a-z][a-z0-9_.-]{0,127}", code,
300
+ ) is None:
301
+ code = "runtime.benchmark.execution.invalid"
302
+ raise LocalizationRuntimeBlocked(code) from None
303
+ try:
304
+ copied["lease_seconds"] = _BENCHMARK_RUNTIME._CAMPAIGN._duration(
305
+ copied["lease_seconds"],
306
+ )
307
+ copied["retry_base_seconds"] = (
308
+ _BENCHMARK_RUNTIME._CAMPAIGN._duration(
309
+ copied["retry_base_seconds"], allow_zero=True,
310
+ )
311
+ )
312
+ copied["retry_max_seconds"] = (
313
+ _BENCHMARK_RUNTIME._CAMPAIGN._duration(
314
+ copied["retry_max_seconds"], allow_zero=True,
315
+ )
316
+ )
317
+ except Exception:
318
+ raise LocalizationRuntimeBlocked(
319
+ "runtime.benchmark.execution.retry_policy.invalid",
320
+ ) from None
321
+ if copied["retry_base_seconds"] > copied["retry_max_seconds"]:
322
+ raise LocalizationRuntimeBlocked(
323
+ "runtime.benchmark.execution.retry_policy.invalid",
324
+ )
325
+ return MappingProxyType(copied)
326
+
327
+
328
+ class WebsiteLocalizationRuntime:
329
+ """Compose one host-owned localization runtime from validated capabilities."""
330
+
331
+ def __init__(
332
+ self,
333
+ *,
334
+ queue_connection: sqlite3.Connection,
335
+ release_connection: sqlite3.Connection,
336
+ cms_connection: sqlite3.Connection,
337
+ evidence_connection: sqlite3.Connection,
338
+ supervisor_connection: sqlite3.Connection,
339
+ dependencies: Mapping[str, Any],
340
+ supervisor_worker_id: str,
341
+ cms_api_max_attempts: int = 3,
342
+ health_http_authenticator: Callable[[dict[str, Any]], Any] | None = None,
343
+ health_provider_probe: Any | None = None,
344
+ health_publisher_probe: Any | None = None,
345
+ supervisor_policy: Any = None,
346
+ supervisor_stale_after_seconds: float | int = 30,
347
+ benchmark_connection: sqlite3.Connection | None = None,
348
+ benchmark_policy: Any | None = None,
349
+ benchmark_campaign_id: str | None = None,
350
+ benchmark_evidence_authority: Any | None = None,
351
+ benchmark_stale_after_seconds: float | int = 3600,
352
+ benchmark_execution: Mapping[str, Any] | None = None,
353
+ clock: Callable[[], float] = time.time,
354
+ token_factory: Callable[[], str] | None = None,
355
+ ):
356
+ benchmark_values = (
357
+ benchmark_connection, benchmark_policy, benchmark_campaign_id,
358
+ benchmark_evidence_authority,
359
+ )
360
+ benchmark_enabled = any(value is not None for value in benchmark_values)
361
+ if benchmark_enabled and any(value is None for value in benchmark_values):
362
+ raise LocalizationRuntimeBlocked("runtime.benchmark.incomplete")
363
+ if benchmark_execution is not None and not benchmark_enabled:
364
+ raise LocalizationRuntimeBlocked("runtime.benchmark.incomplete")
365
+ benchmark_execution = _benchmark_execution(benchmark_execution)
366
+ if benchmark_enabled:
367
+ if not isinstance(benchmark_campaign_id, str) or re.fullmatch(
368
+ r"benchmark-campaign-[0-9a-f]{64}", benchmark_campaign_id,
369
+ ) is None:
370
+ raise LocalizationRuntimeBlocked("runtime.benchmark.campaign_id.invalid")
371
+ _capability(
372
+ benchmark_evidence_authority,
373
+ "verify",
374
+ "runtime.benchmark.authority.invalid",
375
+ )
376
+ try:
377
+ benchmark_policy = (
378
+ _HEALTH._CAMPAIGN._BENCHMARK._validate_policy(benchmark_policy)
379
+ )
380
+ expected_campaign_id = _HEALTH._CAMPAIGN._campaign_identity(
381
+ benchmark_policy,
382
+ )[0]
383
+ except Exception:
384
+ raise LocalizationRuntimeBlocked("runtime.benchmark.policy.invalid") from None
385
+ if expected_campaign_id != benchmark_campaign_id:
386
+ raise LocalizationRuntimeBlocked("runtime.benchmark.binding.invalid")
387
+ if benchmark_execution is not None:
388
+ _capability(
389
+ benchmark_evidence_authority,
390
+ "sign",
391
+ "runtime.benchmark.authority.invalid",
392
+ )
393
+ _number(
394
+ benchmark_stale_after_seconds,
395
+ "runtime.benchmark.stale_after_seconds.invalid",
396
+ maximum=_HEALTH._CAMPAIGN.MAX_STALE_SECONDS,
397
+ )
398
+ if (
399
+ isinstance(cms_api_max_attempts, bool)
400
+ or not isinstance(cms_api_max_attempts, int)
401
+ or not 1 <= cms_api_max_attempts <= 20
402
+ ):
403
+ raise LocalizationRuntimeBlocked("runtime.cms_api.max_attempts.invalid")
404
+ if health_http_authenticator is not None and not callable(
405
+ health_http_authenticator
406
+ ):
407
+ raise LocalizationRuntimeBlocked(
408
+ "runtime.health_http.authenticator.invalid",
409
+ )
410
+ if health_provider_probe is not None:
411
+ if health_http_authenticator is None:
412
+ raise LocalizationRuntimeBlocked("runtime.health_http.incomplete")
413
+ _capability(
414
+ health_provider_probe,
415
+ "check",
416
+ "runtime.health_http.provider_probe.invalid",
417
+ )
418
+ if health_publisher_probe is not None:
419
+ if health_http_authenticator is None:
420
+ raise LocalizationRuntimeBlocked("runtime.health_http.incomplete")
421
+ _capability(
422
+ health_publisher_probe,
423
+ "check",
424
+ "runtime.health_http.publisher_probe.invalid",
425
+ )
426
+ connections = (
427
+ queue_connection, release_connection, cms_connection,
428
+ evidence_connection, supervisor_connection,
429
+ ) + ((benchmark_connection,) if benchmark_enabled else ()) + (
430
+ (
431
+ benchmark_execution["candidate_connection"],
432
+ benchmark_execution["baseline_connection"],
433
+ benchmark_execution["native_reference_connection"],
434
+ benchmark_execution["review_connection"],
435
+ ) if benchmark_execution is not None else ()
436
+ )
437
+ _validate_connections(connections)
438
+ validated = _validate_dependencies(dependencies)
439
+ if (
440
+ health_publisher_probe is not None
441
+ and health_publisher_probe is not validated["publisher"]
442
+ ):
443
+ raise LocalizationRuntimeBlocked(
444
+ "runtime.health_http.publisher_binding.invalid",
445
+ )
446
+ supervisor_worker_id = _identifier(
447
+ supervisor_worker_id, "runtime.supervisor_worker_id.invalid",
448
+ )
449
+ if not callable(clock):
450
+ raise LocalizationRuntimeBlocked("runtime.clock.invalid")
451
+ if benchmark_execution is not None:
452
+ try:
453
+ benchmark_now = _BENCHMARK_RUNTIME._CAMPAIGN._timestamp(clock())
454
+ except Exception:
455
+ raise LocalizationRuntimeBlocked("runtime.clock.invalid") from None
456
+ if benchmark_now > benchmark_policy.valid_until:
457
+ raise LocalizationRuntimeBlocked(
458
+ "runtime.benchmark.validity_expired",
459
+ )
460
+ if token_factory is not None and not callable(token_factory):
461
+ raise LocalizationRuntimeBlocked("runtime.token_factory.invalid")
462
+ supervisor_policy = _supervisor_policy(supervisor_policy)
463
+ _validate_lease_hierarchy(
464
+ validated,
465
+ supervisor_policy,
466
+ benchmark_lease_seconds=(
467
+ benchmark_execution["lease_seconds"]
468
+ if benchmark_execution is not None else None
469
+ ),
470
+ )
471
+ _number(
472
+ supervisor_stale_after_seconds,
473
+ "runtime.supervisor_stale_after_seconds.invalid",
474
+ )
475
+
476
+ self._clock = clock
477
+ self.queue = _QUEUE.LocalizationQueue(queue_connection)
478
+ self.release_store = _RELEASE.LocalizationReleaseStore(
479
+ release_connection, self.queue,
480
+ )
481
+ runtime_dependencies = dict(validated)
482
+ runtime_dependencies["result_cache"] = (
483
+ self.release_store.verified_result_cache(
484
+ validated["approval_authority"],
485
+ )
486
+ )
487
+ runtime_dependencies["ingress_max_attempts"] = cms_api_max_attempts
488
+ self._dependencies = MappingProxyType(runtime_dependencies)
489
+ self.bridge = _CMS.WebsiteLocalizationCMSBridge(
490
+ cms_connection, self.queue, self.release_store,
491
+ )
492
+ self.cms_api = _API.WebsiteLocalizationAPI(
493
+ self.bridge,
494
+ validated["event_verifier"],
495
+ clock=self._clock,
496
+ max_attempts=cms_api_max_attempts,
497
+ approval_authority=validated["approval_authority"],
498
+ publication_authority=validated["publication_authority"],
499
+ )
500
+ self.evidence_state = _COORDINATOR.QualityEvidenceStateStore(
501
+ evidence_connection,
502
+ )
503
+ self.benchmark_runtime = None
504
+ self._benchmark_execution = benchmark_execution
505
+ if benchmark_execution is not None:
506
+ try:
507
+ self.benchmark_runtime = (
508
+ _BENCHMARK_RUNTIME.WebsiteLocalizationBenchmarkRuntime(
509
+ campaign_connection=benchmark_connection,
510
+ candidate_connection=(
511
+ benchmark_execution["candidate_connection"]
512
+ ),
513
+ baseline_connection=(
514
+ benchmark_execution["baseline_connection"]
515
+ ),
516
+ native_reference_connection=(
517
+ benchmark_execution["native_reference_connection"]
518
+ ),
519
+ review_connection=benchmark_execution["review_connection"],
520
+ policy=benchmark_policy,
521
+ candidate_route_id=(
522
+ benchmark_execution["candidate_route_id"]
523
+ ),
524
+ baseline_route_id=benchmark_execution["baseline_route_id"],
525
+ native_reference_route_id=(
526
+ benchmark_execution["native_reference_route_id"]
527
+ ),
528
+ reviewer_route_id=(
529
+ benchmark_execution["reviewer_route_id"]
530
+ ),
531
+ assets_resolver=benchmark_execution["assets_resolver"],
532
+ candidate_provider_resolver=(
533
+ benchmark_execution["candidate_provider_resolver"]
534
+ ),
535
+ baseline_acquirer=(
536
+ benchmark_execution["baseline_acquirer"]
537
+ ),
538
+ native_reference_loader=(
539
+ benchmark_execution["native_reference_loader"]
540
+ ),
541
+ reviewer=benchmark_execution["reviewer"],
542
+ native_reference_verifier=(
543
+ benchmark_execution["native_reference_verifier"]
544
+ ),
545
+ evidence_authority=benchmark_evidence_authority,
546
+ blinding_key=benchmark_execution["blinding_key"],
547
+ worker_id=benchmark_execution["worker_id"],
548
+ max_attempts=benchmark_execution["max_attempts"],
549
+ clock=self._clock,
550
+ )
551
+ )
552
+ except Exception as error:
553
+ code = getattr(error, "code", None)
554
+ if not isinstance(code, str) or re.fullmatch(
555
+ r"[a-z][a-z0-9_.-]{0,127}", code,
556
+ ) is None:
557
+ code = "runtime.benchmark.execution.invalid"
558
+ raise LocalizationRuntimeBlocked(code) from None
559
+ if self.benchmark_runtime.campaign_id != benchmark_campaign_id:
560
+ raise LocalizationRuntimeBlocked(
561
+ "runtime.benchmark.execution.binding.invalid",
562
+ )
563
+ self.benchmark_store = (
564
+ _HEALTH._CAMPAIGN.BenchmarkCampaignStore(benchmark_connection)
565
+ if benchmark_enabled else None
566
+ )
567
+ self._benchmark_policy = benchmark_policy
568
+ self._benchmark_campaign_id = benchmark_campaign_id
569
+ self._benchmark_evidence_authority = benchmark_evidence_authority
570
+
571
+ def tick():
572
+ service_tick = _SERVICE.run_service_tick(
573
+ self.bridge,
574
+ self.evidence_state,
575
+ clock=self._clock,
576
+ operation_guard=self.supervisor.renew_active_lease,
577
+ **self._dependencies,
578
+ )
579
+ if (
580
+ service_tick.phase != "idle"
581
+ or service_tick.status != "idle"
582
+ or self.benchmark_runtime is None
583
+ ):
584
+ return service_tick
585
+ try:
586
+ benchmark_tick = self.benchmark_runtime.run_once(
587
+ operation_guard=self.supervisor.renew_active_lease,
588
+ lease_seconds=self._benchmark_execution["lease_seconds"],
589
+ retry_base_seconds=(
590
+ self._benchmark_execution["retry_base_seconds"]
591
+ ),
592
+ retry_max_seconds=(
593
+ self._benchmark_execution["retry_max_seconds"]
594
+ ),
595
+ )
596
+ except Exception as error:
597
+ return _SERVICE._runtime_error("benchmark", error)
598
+ if benchmark_tick is None:
599
+ return service_tick
600
+ return _SERVICE._outcome(
601
+ "benchmark",
602
+ benchmark_tick.status,
603
+ job_id=getattr(benchmark_tick, "work_id", None),
604
+ target_locale=getattr(benchmark_tick, "target_locale", None),
605
+ attempt=getattr(benchmark_tick, "attempt", None),
606
+ error_code=getattr(benchmark_tick, "error_code", None),
607
+ )
608
+
609
+ self.supervisor = _SUPERVISOR.LocalizationServiceSupervisor(
610
+ supervisor_connection,
611
+ tick,
612
+ worker_id=supervisor_worker_id,
613
+ policy=supervisor_policy,
614
+ clock=self._clock,
615
+ token_factory=token_factory,
616
+ )
617
+ self.health_monitor = _HEALTH.LocalizationHealthMonitor(
618
+ self.bridge,
619
+ self.evidence_state,
620
+ self.supervisor,
621
+ supervisor_stale_after_seconds=supervisor_stale_after_seconds,
622
+ benchmark_store=self.benchmark_store,
623
+ benchmark_policy=benchmark_policy,
624
+ benchmark_campaign_id=benchmark_campaign_id,
625
+ benchmark_evidence_authority=benchmark_evidence_authority,
626
+ benchmark_stale_after_seconds=benchmark_stale_after_seconds,
627
+ benchmark_review_store=(
628
+ self.benchmark_runtime.review_store
629
+ if self.benchmark_runtime is not None else None
630
+ ),
631
+ benchmark_reviewer_route_id=(
632
+ self.benchmark_runtime.reviewer_route_id
633
+ if self.benchmark_runtime is not None else None
634
+ ),
635
+ benchmark_reference_queue=(
636
+ self.benchmark_runtime
637
+ if self.benchmark_runtime is not None
638
+ and "native_reference_queue" in getattr(
639
+ self.benchmark_runtime, "__dict__", {},
640
+ )
641
+ else None
642
+ ),
643
+ )
644
+ self.health_http = None
645
+ if health_http_authenticator is not None:
646
+ self.health_http = (
647
+ _HEALTH_HTTP.WebsiteLocalizationHealthHTTPApplication(
648
+ lambda *, now: self.health(
649
+ provider_probe=health_provider_probe,
650
+ publisher_probe=health_publisher_probe,
651
+ now=now,
652
+ ),
653
+ health_http_authenticator,
654
+ clock=self._clock,
655
+ )
656
+ )
657
+
658
+ def __repr__(self) -> str:
659
+ return f"<{type(self).__name__} schema={SCHEMA}>"
660
+
661
+ def run_once(self, *, now: float | int | None = None):
662
+ """Run or safely skip one supervised service tick."""
663
+ return self.supervisor.run_once(now=now)
664
+
665
+ def run_forever(
666
+ self,
667
+ *,
668
+ stop_requested: Callable[[], bool],
669
+ sleeper: Callable[[float], Any] = time.sleep,
670
+ ):
671
+ """Run until the host requests a stop between service ticks."""
672
+ return self.supervisor.run_forever(
673
+ stop_requested=stop_requested,
674
+ sleeper=sleeper,
675
+ )
676
+
677
+ def health(
678
+ self,
679
+ *,
680
+ provider_probe: Any = None,
681
+ publisher_probe: Any = None,
682
+ now: float | int | None = None,
683
+ ):
684
+ """Return the existing content-free, read-only health report."""
685
+ checked_at = self._clock() if now is None else now
686
+ return self.health_monitor.check(
687
+ event_verifier=self._dependencies["event_verifier"],
688
+ approval_authority=self._dependencies["approval_authority"],
689
+ publication_authority=self._dependencies["publication_authority"],
690
+ provider_probe=provider_probe,
691
+ publisher_probe=publisher_probe,
692
+ now=checked_at,
693
+ )
694
+
695
+ def load_benchmark_report(
696
+ self, *, now: float | int | None = None,
697
+ ) -> dict[str, Any]:
698
+ """Return the stored, verified benchmark report without mutating it."""
699
+ if self.benchmark_store is None:
700
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
701
+ checked_at = self._clock() if now is None else now
702
+ try:
703
+ return self.benchmark_store.load_report(
704
+ self._benchmark_policy,
705
+ self._benchmark_campaign_id,
706
+ self._benchmark_evidence_authority,
707
+ now=checked_at,
708
+ )
709
+ except Exception as error:
710
+ code = getattr(error, "code", None)
711
+ if not isinstance(code, str) or re.fullmatch(
712
+ r"[a-z][a-z0-9_.-]{0,127}", code,
713
+ ) is None:
714
+ code = "runtime.benchmark.report.invalid"
715
+ raise LocalizationRuntimeBlocked(code) from None
716
+
717
+ def benchmark_campaign_status(self) -> dict[str, Any]:
718
+ """Return content-free progress for the configured benchmark campaign."""
719
+ if self.benchmark_store is None:
720
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
721
+ try:
722
+ return self.benchmark_store.status(
723
+ self._benchmark_policy,
724
+ self._benchmark_campaign_id,
725
+ )
726
+ except Exception as error:
727
+ code = getattr(error, "code", None)
728
+ if not isinstance(code, str) or re.fullmatch(
729
+ r"[a-z][a-z0-9_.-]{0,127}", code,
730
+ ) is None:
731
+ code = "runtime.benchmark.status.invalid"
732
+ raise LocalizationRuntimeBlocked(code) from None
733
+
734
+ def claim_native_reference_work_order(
735
+ self,
736
+ editor_id: Any,
737
+ **options: Any,
738
+ ):
739
+ """Lease one exact benchmark source to a qualified native editor."""
740
+ if self.benchmark_runtime is None:
741
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
742
+ try:
743
+ return self.benchmark_runtime.claim_native_reference_work_order(
744
+ editor_id, **options,
745
+ )
746
+ except Exception as error:
747
+ code = getattr(error, "code", None)
748
+ if not isinstance(code, str) or re.fullmatch(
749
+ r"[a-z][a-z0-9_.-]{0,127}", code,
750
+ ) is None:
751
+ code = "runtime.benchmark.reference_queue.invalid"
752
+ raise LocalizationRuntimeBlocked(code) from None
753
+
754
+ def renew_native_reference_work_order(self, lease: Any, **options: Any):
755
+ """Renew one exact live native-editor lease."""
756
+ if self.benchmark_runtime is None:
757
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
758
+ try:
759
+ return self.benchmark_runtime.renew_native_reference_work_order(
760
+ lease, **options,
761
+ )
762
+ except Exception as error:
763
+ code = getattr(error, "code", None)
764
+ if not isinstance(code, str) or re.fullmatch(
765
+ r"[a-z][a-z0-9_.-]{0,127}", code,
766
+ ) is None:
767
+ code = "runtime.benchmark.reference_queue.invalid"
768
+ raise LocalizationRuntimeBlocked(code) from None
769
+
770
+ def native_reference_lease_from_payload(
771
+ self, payload: Any, *, editor_id: Any, target_locale: Any,
772
+ ):
773
+ """Reconstruct one authenticated editor lease without trusting input."""
774
+ if self.benchmark_runtime is None:
775
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
776
+ try:
777
+ return self.benchmark_runtime.native_reference_lease_from_payload(
778
+ payload,
779
+ editor_id=editor_id,
780
+ target_locale=target_locale,
781
+ )
782
+ except Exception as error:
783
+ code = getattr(error, "code", None)
784
+ if not isinstance(code, str) or re.fullmatch(
785
+ r"[a-z][a-z0-9_.-]{0,127}", code,
786
+ ) is None:
787
+ code = "runtime.benchmark.reference_queue.invalid"
788
+ raise LocalizationRuntimeBlocked(code) from None
789
+
790
+ def native_reference_http_request_replay(self, **options: Any):
791
+ """Return one exact completed private mutation for safe HTTP retry."""
792
+ if self.benchmark_runtime is None:
793
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
794
+ try:
795
+ return self.benchmark_runtime.native_reference_http_request_replay(
796
+ **options,
797
+ )
798
+ except Exception as error:
799
+ code = getattr(error, "code", None)
800
+ if not isinstance(code, str) or re.fullmatch(
801
+ r"[a-z][a-z0-9_.-]{0,127}", code,
802
+ ) is None:
803
+ code = "runtime.benchmark.reference_queue.invalid"
804
+ raise LocalizationRuntimeBlocked(code) from None
805
+
806
+ def accept_native_reference_submission(
807
+ self,
808
+ lease: Any,
809
+ submission: Any,
810
+ **options: Any,
811
+ ):
812
+ """Verify and persist one exact leased qualified-native submission."""
813
+ if self.benchmark_runtime is None:
814
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
815
+ try:
816
+ return self.benchmark_runtime.accept_leased_native_reference_submission(
817
+ lease, submission, **options,
818
+ )
819
+ except Exception as error:
820
+ code = getattr(error, "code", None)
821
+ if not isinstance(code, str) or re.fullmatch(
822
+ r"[a-z][a-z0-9_.-]{0,127}", code,
823
+ ) is None:
824
+ code = "runtime.benchmark.reference_queue.invalid"
825
+ raise LocalizationRuntimeBlocked(code) from None
826
+
827
+ def native_reference_queue_status(self):
828
+ """Return content-free editorial progress for the active benchmark."""
829
+ if self.benchmark_runtime is None:
830
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
831
+ try:
832
+ return self.benchmark_runtime.native_reference_queue_status()
833
+ except Exception as error:
834
+ code = getattr(error, "code", None)
835
+ if not isinstance(code, str) or re.fullmatch(
836
+ r"[a-z][a-z0-9_.-]{0,127}", code,
837
+ ) is None:
838
+ code = "runtime.benchmark.reference_queue.invalid"
839
+ raise LocalizationRuntimeBlocked(code) from None
840
+
841
+ def native_reference_queue_health(
842
+ self,
843
+ *,
844
+ now: float | int | None = None,
845
+ stale_after_seconds: Any = 3600,
846
+ ):
847
+ """Return a read-only, content-free native-reference queue check."""
848
+ if self.benchmark_runtime is None:
849
+ raise LocalizationRuntimeBlocked("runtime.benchmark.unavailable")
850
+ checked_at = self._clock() if now is None else now
851
+ try:
852
+ return self.benchmark_runtime.native_reference_queue_health(
853
+ now=checked_at,
854
+ stale_after_seconds=stale_after_seconds,
855
+ )
856
+ except Exception as error:
857
+ code = getattr(error, "code", None)
858
+ if not isinstance(code, str) or re.fullmatch(
859
+ r"[a-z][a-z0-9_.-]{0,127}", code,
860
+ ) is None:
861
+ code = "runtime.benchmark.reference_queue.invalid"
862
+ raise LocalizationRuntimeBlocked(code) from None