blun-king-cli 9.1.597 → 9.1.600

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 (106) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +17 -1
  3. package/agent-spine-plugin/CHANGELOG.md +1 -1
  4. package/agent-spine-plugin/docs/host-integration.md +1 -15
  5. package/agent-spine-plugin/docs/preflight-recall.md +1 -1
  6. package/agent-spine-plugin/scripts/check-install.js +1 -6
  7. package/agent-spine-plugin/scripts/hermetic-process.js +8 -0
  8. package/agent-spine-plugin/scripts/release-check.js +2 -3
  9. package/agent-spine-plugin/scripts/run-tests-hermetic.js +8 -11
  10. package/agent-spine-plugin/src/hook.js +40 -40
  11. package/agent-spine-plugin/src/lib/briefing.js +6 -3
  12. package/agent-spine-plugin/src/lib/hook-context.js +63 -64
  13. package/agent-spine-plugin/src/lib/hook-output.js +115 -94
  14. package/agent-spine-plugin/src/lib/hook-timeline.js +20 -11
  15. package/agent-spine-plugin/src/lib/host-instruction-budget.js +8 -14
  16. package/agent-spine-plugin/src/lib/mcp-timeline-tools.js +0 -7
  17. package/agent-spine-plugin/src/lib/pre-answer-timeline-recall.js +104 -0
  18. package/agent-spine-plugin/src/lib/session-timeline-codex.js +0 -4
  19. package/agent-spine-plugin/src/lib/session-timeline-enrollment-source.js +0 -3
  20. package/agent-spine-plugin/src/lib/session-timeline-enrollment-storage.js +0 -4
  21. package/agent-spine-plugin/src/lib/session-timeline-enrollment-transport.js +0 -2
  22. package/agent-spine-plugin/src/lib/session-timeline-enrollment.js +0 -22
  23. package/agent-spine-plugin/src/lib/session-timeline-host-origin.js +0 -4
  24. package/agent-spine-plugin/src/lib/session-timeline-prior.js +42 -50
  25. package/agent-spine-plugin/src/lib/session-timeline-provider.js +0 -3
  26. package/agent-spine-plugin/src/lib/session-timeline-query.js +0 -1
  27. package/agent-spine-plugin/src/lib/session-timeline-sid-acl.js +0 -4
  28. package/agent-spine-plugin/src/lib/session-timeline-source.js +0 -3
  29. package/agent-spine-plugin/src/lib/session-timeline-transport.js +0 -8
  30. package/agent-spine-plugin/src/lib/session-timeline-windows-acl.js +0 -3
  31. package/agent-spine-plugin/src/lib/session-timeline.js +370 -408
  32. package/agent-spine-plugin/src/lib/source-roots.js +26 -16
  33. package/agent-spine-plugin/src/lib/timeline-user-feedback.js +0 -1
  34. package/bin/core-bootstrap.js +18 -10
  35. package/bin/launcher-mode.js +5 -0
  36. package/bin/launcher-runtime.js +27 -0
  37. package/bin/verify-bundled-agent-sources.cjs +28 -2
  38. package/blun.mjs +798 -143
  39. package/bundled-agent-sources.json +192 -155
  40. package/package.json +1 -1
  41. package/standard-skills/translate-native/README.md +1334 -1
  42. package/standard-skills/translate-native/SKILL.md +1 -1
  43. package/standard-skills/translate-native/VERSION +1 -1
  44. package/standard-skills/translate-native/docs/PREMORTEM.md +901 -0
  45. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION.md +208 -41
  46. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_API.md +1319 -77
  47. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_EVIDENCE_HTTP.md +66 -11
  48. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HTTP_PROVIDER.md +19 -1
  49. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_RECEIPT_VERIFIER_HTTP.md +24 -6
  50. package/standard-skills/translate-native/integrations/commercial_localization_profile.py +23 -0
  51. package/standard-skills/translate-native/integrations/website_localization.py +234 -10
  52. package/standard-skills/translate-native/integrations/website_localization_benchmark.py +39 -3
  53. package/standard-skills/translate-native/integrations/website_localization_cms.py +512 -10
  54. package/standard-skills/translate-native/integrations/website_localization_cms_client.py +116 -0
  55. package/standard-skills/translate-native/integrations/website_localization_cms_receiver.py +101 -11
  56. package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py +12 -1
  57. package/standard-skills/translate-native/integrations/website_localization_cms_receiver_store.py +186 -24
  58. package/standard-skills/translate-native/integrations/website_localization_cms_source_client.py +64 -1
  59. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery.py +528 -5
  60. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_auth.py +918 -0
  61. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_auth_runtime.py +609 -0
  62. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_client.py +885 -0
  63. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_http.py +1244 -0
  64. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_runtime.py +220 -0
  65. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_sidecar_adapter.py +331 -0
  66. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_capabilities_http.py +444 -0
  67. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_client.py +673 -0
  68. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch.py +1317 -0
  69. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_client.py +826 -0
  70. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_http.py +1152 -0
  71. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_openapi.py +896 -0
  72. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_runtime.py +621 -0
  73. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_http.py +1180 -0
  74. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_runtime.py +1479 -0
  75. package/standard-skills/translate-native/integrations/website_localization_cms_source_http.py +133 -17
  76. package/standard-skills/translate-native/integrations/website_localization_cms_source_runtime.py +319 -4
  77. package/standard-skills/translate-native/integrations/website_localization_cms_source_service.py +72 -2
  78. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_http.py +13 -0
  79. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver.py +56 -13
  80. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_openapi.py +335 -0
  81. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_runtime.py +66 -1
  82. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_processing_monitor.py +73 -7
  83. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_receiver_client.py +93 -9
  84. package/standard-skills/translate-native/integrations/website_localization_evidence_http.py +221 -11
  85. package/standard-skills/translate-native/integrations/website_localization_health.py +6 -0
  86. package/standard-skills/translate-native/integrations/website_localization_http_provider.py +1 -1
  87. package/standard-skills/translate-native/integrations/website_localization_quality_profiles.py +350 -0
  88. package/standard-skills/translate-native/integrations/website_localization_queue.py +126 -56
  89. package/standard-skills/translate-native/integrations/website_localization_receipt_verifier_http.py +166 -13
  90. package/standard-skills/translate-native/integrations/website_localization_release.py +423 -17
  91. package/standard-skills/translate-native/integrations/website_localization_release_coordinator.py +168 -13
  92. package/standard-skills/translate-native/integrations/website_localization_runner.py +10 -0
  93. package/standard-skills/translate-native/integrations/website_localization_worker.py +213 -9
  94. package/standard-skills/translate-native/provenance.json +2 -2
  95. package/standard-skills/translate-native/references/commercial-localization.md +96 -17
  96. package/standard-skills/translate-native/scripts/blun_language_guard.py +3 -1
  97. package/standard-skills/translate-native/scripts/check_commercial_review.py +69 -9
  98. package/standard-skills/translate-native/scripts/commercial_localization_profile.py +829 -31
  99. package/standard-tools/language-guard/VERSION +1 -1
  100. package/standard-tools/language-guard/blun_language_guard.py +3 -1
  101. package/standard-tools/language-guard/check_commercial_review.py +69 -9
  102. package/standard-tools/language-guard/commercial_localization_profile.py +829 -31
  103. package/standard-tools/language-guard/provenance.json +2 -2
  104. package/standard-tools/manifest.json +1 -1
  105. package/worker-host.mjs +215 -82
  106. package/agent-spine-plugin/scripts/check-install-king.js +0 -37
@@ -1 +1 @@
1
- 6.64.0
1
+ 6.155.0
@@ -176,6 +176,7 @@ def validate_text(
176
176
  glossary: dict[str, Any] | None = None,
177
177
  content_type: str = "prose",
178
178
  short_text_reviewed: bool = False,
179
+ require_character_profile: bool = True,
179
180
  ) -> dict[str, Any]:
180
181
  findings: list[Finding] = []
181
182
  if not text.strip():
@@ -200,7 +201,7 @@ def validate_text(
200
201
  # count real prose characters. Native characters anywhere in the complete
201
202
  # text also disprove the specific hypothesis of wholesale ASCII folding.
202
203
  profile_prose_solid = sum(1 for character in profile_prose if not character.isspace())
203
- if (profile and profile_prose_solid >= 200
204
+ if (require_character_profile and profile and profile_prose_solid >= 200
204
205
  and not any(character in profile for character in profile_prose)
205
206
  and not any(character in profile for character in text)):
206
207
  findings.append(Finding(
@@ -395,6 +396,7 @@ def release_response(arguments: dict[str, Any]) -> dict[str, Any]:
395
396
  arguments.get("glossary"),
396
397
  arguments.get("content_type", "prose"),
397
398
  arguments.get("short_text_reviewed") is True,
399
+ require_character_profile=False,
398
400
  )
399
401
  report["checks"].append("agent-response-native-orthography")
400
402
  if not target_is_text:
@@ -8,10 +8,17 @@ import hashlib
8
8
  import json
9
9
  from pathlib import Path
10
10
 
11
- from commercial_localization_profile import CommercialReviewBlocked, review_contract, validate_review
11
+ from commercial_localization_profile import (
12
+ CommercialReviewBlocked,
13
+ public_review_evidence_contract,
14
+ public_review_resolution_contract,
15
+ public_review_summary_contract,
16
+ review_contract,
17
+ validate_review,
18
+ )
12
19
 
13
20
 
14
- PROFILE = "translate-native.commercial.v2"
21
+ PROFILE = "translate-native.commercial.v13"
15
22
  MAX_INPUT_BYTES = 2_000_000
16
23
 
17
24
 
@@ -46,21 +53,66 @@ def main(argv=None) -> int:
46
53
  parser.add_argument("--source", help="complete source text, UTF-8 without BOM")
47
54
  parser.add_argument("--target", help="complete target text, UTF-8 without BOM")
48
55
  parser.add_argument("--review", help="source-aware review JSON, UTF-8 without BOM")
56
+ parser.add_argument("--target-locale", help="exact BCP-47 target locale")
57
+ parser.add_argument(
58
+ "--commercial-quality-profile-version",
59
+ help="exact target-locale commercial quality-profile version",
60
+ )
61
+ parser.add_argument(
62
+ "--commercial-quality-profile-sha256",
63
+ help="exact target-locale commercial quality-profile SHA-256",
64
+ )
49
65
  args = parser.parse_args(argv)
50
66
  if args.contract:
51
- if any((args.source, args.target, args.review)):
67
+ if any((
68
+ args.source, args.target, args.review, args.target_locale,
69
+ args.commercial_quality_profile_version,
70
+ args.commercial_quality_profile_sha256,
71
+ )):
52
72
  parser.error("--contract cannot be combined with input files")
53
- print(json.dumps({"status": "CONTRACT", "release_allowed": False,
54
- "commercial_review": review_contract(PROFILE)}, ensure_ascii=False))
73
+ print(json.dumps({
74
+ "status": "CONTRACT",
75
+ "release_allowed": False,
76
+ "commercial_review": review_contract(PROFILE),
77
+ "commercial_review_evidence_contract": (
78
+ public_review_evidence_contract(PROFILE)
79
+ ),
80
+ "commercial_review_summary_contract": (
81
+ public_review_summary_contract(PROFILE)
82
+ ),
83
+ "commercial_review_resolution_contract": (
84
+ public_review_resolution_contract(PROFILE)
85
+ ),
86
+ }, ensure_ascii=False, sort_keys=True))
55
87
  return 0
56
- if not all((args.source, args.target, args.review)):
57
- parser.error("--source, --target and --review are required")
58
- result = {"schema": "translate-native.commercial-evidence-check.v1",
88
+ if not all((
89
+ args.source, args.target, args.review, args.target_locale,
90
+ args.commercial_quality_profile_version,
91
+ args.commercial_quality_profile_sha256,
92
+ )):
93
+ parser.error(
94
+ "--source, --target, --review, --target-locale, "
95
+ "--commercial-quality-profile-version and "
96
+ "--commercial-quality-profile-sha256 are required"
97
+ )
98
+ result = {"schema": "translate-native.commercial-evidence-check.v2",
59
99
  "profile": PROFILE, "release_allowed": False}
60
100
  try:
61
101
  source, target, raw_review = (_read(path) for path in (args.source, args.target, args.review))
62
102
  review = json.loads(raw_review, object_pairs_hook=_object, parse_constant=_constant)
63
- validate_review(review, source, target, PROFILE)
103
+ summary = validate_review(
104
+ review,
105
+ source,
106
+ target,
107
+ PROFILE,
108
+ target_locale=args.target_locale,
109
+ commercial_quality_profile_version=(
110
+ args.commercial_quality_profile_version
111
+ ),
112
+ commercial_quality_profile_sha256=(
113
+ args.commercial_quality_profile_sha256
114
+ ),
115
+ )
64
116
  except CommercialReviewBlocked as error:
65
117
  result.update(status="BLOCK", reason=error.code)
66
118
  except (OSError, ValueError, RecursionError):
@@ -68,6 +120,14 @@ def main(argv=None) -> int:
68
120
  else:
69
121
  result.update(
70
122
  status="EVIDENCE_VALID", reason="independent_quality_and_signed_release_required",
123
+ target_locale=args.target_locale,
124
+ commercial_quality_profile_version=(
125
+ args.commercial_quality_profile_version
126
+ ),
127
+ commercial_quality_profile_sha256=(
128
+ args.commercial_quality_profile_sha256
129
+ ),
130
+ evidence_sha256=summary["evidence_sha256"],
71
131
  source_sha256=hashlib.sha256(source.encode("utf-8")).hexdigest(),
72
132
  target_sha256=hashlib.sha256(target.encode("utf-8")).hexdigest(),
73
133
  review_sha256=hashlib.sha256(raw_review.encode("utf-8")).hexdigest(),