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.
- package/CHANGELOG.md +39 -0
- package/README.md +17 -1
- package/agent-spine-plugin/CHANGELOG.md +1 -1
- package/agent-spine-plugin/docs/host-integration.md +1 -15
- package/agent-spine-plugin/docs/preflight-recall.md +1 -1
- package/agent-spine-plugin/scripts/check-install.js +1 -6
- package/agent-spine-plugin/scripts/hermetic-process.js +8 -0
- package/agent-spine-plugin/scripts/release-check.js +2 -3
- package/agent-spine-plugin/scripts/run-tests-hermetic.js +8 -11
- package/agent-spine-plugin/src/hook.js +40 -40
- package/agent-spine-plugin/src/lib/briefing.js +6 -3
- package/agent-spine-plugin/src/lib/hook-context.js +63 -64
- package/agent-spine-plugin/src/lib/hook-output.js +115 -94
- package/agent-spine-plugin/src/lib/hook-timeline.js +20 -11
- package/agent-spine-plugin/src/lib/host-instruction-budget.js +8 -14
- package/agent-spine-plugin/src/lib/mcp-timeline-tools.js +0 -7
- package/agent-spine-plugin/src/lib/pre-answer-timeline-recall.js +104 -0
- package/agent-spine-plugin/src/lib/session-timeline-codex.js +0 -4
- package/agent-spine-plugin/src/lib/session-timeline-enrollment-source.js +0 -3
- package/agent-spine-plugin/src/lib/session-timeline-enrollment-storage.js +0 -4
- package/agent-spine-plugin/src/lib/session-timeline-enrollment-transport.js +0 -2
- package/agent-spine-plugin/src/lib/session-timeline-enrollment.js +0 -22
- package/agent-spine-plugin/src/lib/session-timeline-host-origin.js +0 -4
- package/agent-spine-plugin/src/lib/session-timeline-prior.js +42 -50
- package/agent-spine-plugin/src/lib/session-timeline-provider.js +0 -3
- package/agent-spine-plugin/src/lib/session-timeline-query.js +0 -1
- package/agent-spine-plugin/src/lib/session-timeline-sid-acl.js +0 -4
- package/agent-spine-plugin/src/lib/session-timeline-source.js +0 -3
- package/agent-spine-plugin/src/lib/session-timeline-transport.js +0 -8
- package/agent-spine-plugin/src/lib/session-timeline-windows-acl.js +0 -3
- package/agent-spine-plugin/src/lib/session-timeline.js +370 -408
- package/agent-spine-plugin/src/lib/source-roots.js +26 -16
- package/agent-spine-plugin/src/lib/timeline-user-feedback.js +0 -1
- package/bin/core-bootstrap.js +18 -10
- package/bin/launcher-mode.js +5 -0
- package/bin/launcher-runtime.js +27 -0
- package/bin/verify-bundled-agent-sources.cjs +28 -2
- package/blun.mjs +798 -143
- package/bundled-agent-sources.json +192 -155
- package/package.json +1 -1
- package/standard-skills/translate-native/README.md +1334 -1
- package/standard-skills/translate-native/SKILL.md +1 -1
- package/standard-skills/translate-native/VERSION +1 -1
- package/standard-skills/translate-native/docs/PREMORTEM.md +901 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION.md +208 -41
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_API.md +1319 -77
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_EVIDENCE_HTTP.md +66 -11
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HTTP_PROVIDER.md +19 -1
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_RECEIPT_VERIFIER_HTTP.md +24 -6
- package/standard-skills/translate-native/integrations/commercial_localization_profile.py +23 -0
- package/standard-skills/translate-native/integrations/website_localization.py +234 -10
- package/standard-skills/translate-native/integrations/website_localization_benchmark.py +39 -3
- package/standard-skills/translate-native/integrations/website_localization_cms.py +512 -10
- package/standard-skills/translate-native/integrations/website_localization_cms_client.py +116 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver.py +101 -11
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py +12 -1
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver_store.py +186 -24
- package/standard-skills/translate-native/integrations/website_localization_cms_source_client.py +64 -1
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery.py +528 -5
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_auth.py +918 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_auth_runtime.py +609 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_client.py +885 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_http.py +1244 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_runtime.py +220 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_sidecar_adapter.py +331 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_capabilities_http.py +444 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_client.py +673 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch.py +1317 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_client.py +826 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_http.py +1152 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_openapi.py +896 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_dispatch_runtime.py +621 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_http.py +1180 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_submission_runtime.py +1479 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_http.py +133 -17
- package/standard-skills/translate-native/integrations/website_localization_cms_source_runtime.py +319 -4
- package/standard-skills/translate-native/integrations/website_localization_cms_source_service.py +72 -2
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_http.py +13 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver.py +56 -13
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_openapi.py +335 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_runtime.py +66 -1
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_processing_monitor.py +73 -7
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_receiver_client.py +93 -9
- package/standard-skills/translate-native/integrations/website_localization_evidence_http.py +221 -11
- package/standard-skills/translate-native/integrations/website_localization_health.py +6 -0
- package/standard-skills/translate-native/integrations/website_localization_http_provider.py +1 -1
- package/standard-skills/translate-native/integrations/website_localization_quality_profiles.py +350 -0
- package/standard-skills/translate-native/integrations/website_localization_queue.py +126 -56
- package/standard-skills/translate-native/integrations/website_localization_receipt_verifier_http.py +166 -13
- package/standard-skills/translate-native/integrations/website_localization_release.py +423 -17
- package/standard-skills/translate-native/integrations/website_localization_release_coordinator.py +168 -13
- package/standard-skills/translate-native/integrations/website_localization_runner.py +10 -0
- package/standard-skills/translate-native/integrations/website_localization_worker.py +213 -9
- package/standard-skills/translate-native/provenance.json +2 -2
- package/standard-skills/translate-native/references/commercial-localization.md +96 -17
- package/standard-skills/translate-native/scripts/blun_language_guard.py +3 -1
- package/standard-skills/translate-native/scripts/check_commercial_review.py +69 -9
- package/standard-skills/translate-native/scripts/commercial_localization_profile.py +829 -31
- package/standard-tools/language-guard/VERSION +1 -1
- package/standard-tools/language-guard/blun_language_guard.py +3 -1
- package/standard-tools/language-guard/check_commercial_review.py +69 -9
- package/standard-tools/language-guard/commercial_localization_profile.py +829 -31
- package/standard-tools/language-guard/provenance.json +2 -2
- package/standard-tools/manifest.json +1 -1
- package/worker-host.mjs +215 -82
- package/agent-spine-plugin/scripts/check-install-king.js +0 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
6.
|
|
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
|
|
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.
|
|
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((
|
|
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({
|
|
54
|
-
|
|
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((
|
|
57
|
-
|
|
58
|
-
|
|
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(
|
|
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(),
|