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.
- package/CHANGELOG.md +11 -185
- package/LIESMICH.txt +51 -13
- package/README.md +44 -47
- package/agent-spine-plugin/.codex-plugin/plugin.json +16 -4
- package/agent-spine-plugin/CHANGELOG.md +37 -5
- package/agent-spine-plugin/README.md +3 -3
- package/agent-spine-plugin/blun.plugin.json +45 -10
- package/agent-spine-plugin/docs/artifact-evaluation.md +93 -0
- package/agent-spine-plugin/docs/host-integration.md +42 -27
- package/agent-spine-plugin/docs/preflight-recall.md +4 -2
- package/agent-spine-plugin/docs/session-timeline.md +97 -236
- package/agent-spine-plugin/docs/world-model.md +25 -0
- package/agent-spine-plugin/hooks/codex.json +1 -1
- package/agent-spine-plugin/hooks/hooks.json +1 -1
- package/agent-spine-plugin/package.json +1 -3
- package/agent-spine-plugin/scripts/check-hosts.js +3 -3
- package/agent-spine-plugin/scripts/release-check.js +10 -5
- package/agent-spine-plugin/scripts/run-checks.js +4 -1
- package/agent-spine-plugin/scripts/run-tests-hermetic.js +32 -6
- package/agent-spine-plugin/src/cli-learning.js +15 -0
- package/agent-spine-plugin/src/cli.js +2 -0
- package/agent-spine-plugin/src/hook.js +32 -32
- package/agent-spine-plugin/src/lib/action-lesson-recall.js +73 -8
- package/agent-spine-plugin/src/lib/briefing.js +146 -36
- package/agent-spine-plugin/src/lib/channel-continuity.js +19 -0
- package/agent-spine-plugin/src/lib/delivery-agent-usage.js +14 -7
- package/agent-spine-plugin/src/lib/gateway-group-response.js +128 -0
- package/agent-spine-plugin/src/lib/gateway-runs.js +24 -15
- package/agent-spine-plugin/src/lib/hook-briefing-use.js +13 -3
- package/agent-spine-plugin/src/lib/hook-context.js +16 -3
- package/agent-spine-plugin/src/lib/hook-output.js +129 -5
- package/agent-spine-plugin/src/lib/hook-timeline.js +5 -3
- package/agent-spine-plugin/src/lib/indexed-memory.js +2 -2
- package/agent-spine-plugin/src/lib/learning-artifact-evaluator.js +114 -0
- package/agent-spine-plugin/src/lib/learning-context.js +11 -4
- package/agent-spine-plugin/src/lib/learning-measurements.js +2 -2
- package/agent-spine-plugin/src/lib/mcp-runtime.js +89 -3
- package/agent-spine-plugin/src/lib/mcp-source-context.js +12 -2
- package/agent-spine-plugin/src/lib/mcp-timeline-tools.js +91 -8
- package/agent-spine-plugin/src/lib/mcp-world-tools.js +2 -2
- package/agent-spine-plugin/src/lib/owned-file-lock.js +20 -1
- package/agent-spine-plugin/src/lib/persona-runtime.js +2 -2
- package/agent-spine-plugin/src/lib/preflight-delivery-id.js +27 -0
- package/agent-spine-plugin/src/lib/preflight.js +4 -4
- package/agent-spine-plugin/src/lib/session-timeline-codex.js +15 -0
- package/agent-spine-plugin/src/lib/session-timeline-contract.js +12 -4
- package/agent-spine-plugin/src/lib/session-timeline-event-extract.js +36 -7
- package/agent-spine-plugin/src/lib/session-timeline-host-origin.js +13 -10
- package/agent-spine-plugin/src/lib/session-timeline-invocation.js +1 -1
- package/agent-spine-plugin/src/lib/session-timeline-king.js +14 -0
- package/agent-spine-plugin/src/lib/session-timeline-prior.js +18 -12
- package/agent-spine-plugin/src/lib/session-timeline-provider.js +5 -0
- package/agent-spine-plugin/src/lib/session-timeline-query.js +2 -0
- package/agent-spine-plugin/src/lib/session-timeline-results.js +35 -10
- package/agent-spine-plugin/src/lib/session-timeline-source-open.js +30 -0
- package/agent-spine-plugin/src/lib/session-timeline.js +122 -75
- package/agent-spine-plugin/src/lib/source-roots.js +3 -2
- package/agent-spine-plugin/src/lib/task-knowledge-context.js +22 -1
- package/agent-spine-plugin/src/lib/timeline-continuation-update.js +100 -0
- package/agent-spine-plugin/src/lib/timeline-tool-guard.js +30 -7
- package/agent-spine-plugin/src/lib/timeline-user-feedback.js +217 -0
- package/agent-spine-plugin/src/lib/timeline-world-capture.js +233 -0
- package/agent-spine-plugin/src/lib/world-knowledge.js +59 -2
- package/agent-spine-plugin/src/lib/world-model.js +64 -9
- package/agent-spine-plugin/src/worker.js +13 -1
- package/bin/blun.js +43 -28
- package/bin/core-bootstrap.js +5 -4
- package/bin/king.js +43 -28
- package/bin/launcher-mode.js +1 -10
- package/bin/launcher-runtime.js +128 -295
- package/bin/managed-node.js +0 -0
- package/bin/managed-plugin-selection.cjs +0 -1
- package/bin/native-module-repair.js +0 -0
- package/bin/node-runtime.js +0 -0
- package/bin/node-version.js +0 -0
- package/bin/plugin-bootstrap.js +56 -120
- package/bin/private-paths.js +11 -34
- package/bin/standard-tools-bootstrap.js +34 -114
- package/bin/turn-thinking-policy.cjs +3 -11
- package/bin/update-copy.js +200 -0
- package/bin/update-lease.js +0 -0
- package/bin/update-notice.js +136 -289
- package/bin/verify-agent-behavior.cjs +122 -0
- package/bin/verify-agent-components.cjs +104 -0
- package/bin/verify-bundled-agent-sources.cjs +57 -0
- package/blun.mjs +143076 -135288
- package/bundled-agent-sources.json +701 -0
- package/package.json +12 -15
- package/standard-skills/translate-native/README.md +1293 -0
- package/standard-skills/translate-native/SKILL.md +172 -22
- package/standard-skills/translate-native/VERSION +1 -1
- package/standard-skills/translate-native/agents/openai.yaml +18 -0
- package/standard-skills/translate-native/assets/icon.svg +8 -0
- package/standard-skills/translate-native/docs/BLUN_CODE_INTEGRATION.md +76 -0
- package/standard-skills/translate-native/docs/PREMORTEM.md +489 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION.md +2035 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_API.md +1302 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_EVIDENCE_HTTP.md +136 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HEALTH_HTTP.md +130 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HTTP_PROVIDER.md +175 -0
- package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_RECEIPT_VERIFIER_HTTP.md +86 -0
- package/standard-skills/translate-native/integrations/AGENT_RULES.md +32 -0
- package/standard-skills/translate-native/integrations/adapters/blun-code-language-guard.js +514 -0
- package/standard-skills/translate-native/integrations/adapters/node-language-guard.js +230 -0
- package/standard-skills/translate-native/integrations/audit_log.py +327 -0
- package/standard-skills/translate-native/integrations/claude_language_hook.js +1536 -0
- package/standard-skills/translate-native/integrations/commercial_localization_profile.py +42 -0
- package/standard-skills/translate-native/integrations/delivery-policy.example.json +28 -0
- package/standard-skills/translate-native/integrations/enforced_delivery.py +543 -0
- package/standard-skills/translate-native/integrations/guard_service.py +435 -0
- package/standard-skills/translate-native/integrations/language_gateway.py +67 -0
- package/standard-skills/translate-native/integrations/mcp_auth_headers.py +198 -0
- package/standard-skills/translate-native/integrations/mcp_http_gateway.py +429 -0
- package/standard-skills/translate-native/integrations/non_language_html_entities.js +1485 -0
- package/standard-skills/translate-native/integrations/pre_output_guard.py +65 -0
- package/standard-skills/translate-native/integrations/task_router.py +101 -0
- package/standard-skills/translate-native/integrations/website_localization.py +401 -0
- package/standard-skills/translate-native/integrations/website_localization_api.py +581 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark.py +1885 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_campaign.py +1772 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_candidate.py +506 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_http.py +400 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_review_store.py +781 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_reviewer_http.py +500 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_runtime.py +1107 -0
- package/standard-skills/translate-native/integrations/website_localization_benchmark_suite.py +463 -0
- package/standard-skills/translate-native/integrations/website_localization_cms.py +2835 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_client.py +875 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_dispatch.py +805 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_http.py +588 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_lifecycle_monitor.py +991 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver.py +1441 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py +414 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_receiver_store.py +1073 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_removal_dispatch.py +865 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_client.py +583 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery.py +964 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_runtime.py +665 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_http.py +1153 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_runtime.py +675 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_source_service.py +1125 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification.py +674 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_http.py +444 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver.py +1469 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_runtime.py +1142 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_processing_monitor.py +634 -0
- package/standard-skills/translate-native/integrations/website_localization_cms_terminal_receiver_client.py +804 -0
- package/standard-skills/translate-native/integrations/website_localization_deepl_baseline.py +922 -0
- package/standard-skills/translate-native/integrations/website_localization_evidence_http.py +482 -0
- package/standard-skills/translate-native/integrations/website_localization_health.py +1541 -0
- package/standard-skills/translate-native/integrations/website_localization_health_http.py +372 -0
- package/standard-skills/translate-native/integrations/website_localization_http_provider.py +297 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_http.py +479 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_intake.py +363 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_queue.py +1449 -0
- package/standard-skills/translate-native/integrations/website_localization_native_reference_store.py +420 -0
- package/standard-skills/translate-native/integrations/website_localization_quality_profiles.py +235 -0
- package/standard-skills/translate-native/integrations/website_localization_queue.py +671 -0
- package/standard-skills/translate-native/integrations/website_localization_receipt_verifier_http.py +516 -0
- package/standard-skills/translate-native/integrations/website_localization_release.py +928 -0
- package/standard-skills/translate-native/integrations/website_localization_release_coordinator.py +1008 -0
- package/standard-skills/translate-native/integrations/website_localization_runner.py +276 -0
- package/standard-skills/translate-native/integrations/website_localization_runtime.py +862 -0
- package/standard-skills/translate-native/integrations/website_localization_service.py +350 -0
- package/standard-skills/translate-native/integrations/website_localization_supervisor.py +511 -0
- package/standard-skills/translate-native/integrations/website_localization_worker.py +663 -0
- package/standard-skills/translate-native/provenance.json +3 -4
- package/standard-skills/translate-native/references/commercial-localization.md +177 -0
- package/standard-skills/translate-native/scripts/blun_language_guard.py +7 -1
- package/standard-skills/translate-native/scripts/check_commercial_review.py +80 -0
- package/standard-skills/translate-native/scripts/commercial_localization_profile.py +333 -0
- package/standard-tools/language-guard/LICENSE +21 -0
- package/standard-tools/language-guard/VERSION +1 -0
- package/standard-tools/language-guard/blun_language_guard.py +7 -1
- package/standard-tools/language-guard/check_commercial_review.py +80 -0
- package/standard-tools/language-guard/commercial_localization_profile.py +333 -0
- package/standard-tools/language-guard/language_gateway.py +62 -0
- package/standard-tools/language-guard/pre_output_guard.py +64 -0
- package/standard-tools/language-guard/provenance.json +4 -11
- package/standard-tools/manifest.json +34 -11
- package/telegram-plugin/commands/access.md +2 -10
- package/telegram-plugin/dist/bridge.mjs +64041 -687
- package/telegram-plugin/dist/mcp-server.mjs +72810 -9027
- package/telegram-plugin/dist/noise.mjs +28 -63511
- package/agent-spine-plugin/CONTRIBUTING.md +0 -52
- package/agent-spine-plugin/SECURITY.md +0 -47
- package/agent-spine-plugin/docs/assignment-continuation.md +0 -48
- package/agent-spine-plugin/docs/releasing.md +0 -85
- package/agent-spine-plugin/docs/structured-completion.md +0 -67
- package/bin/abort-listener-policy.cjs +0 -43
- package/bin/active-steer-priority-policy.cjs +0 -24
- package/bin/agent-api-http-adapter.mjs +0 -446
- package/bin/agent-api-private-http-server.mjs +0 -288
- package/bin/agent-api-runtime.mjs +0 -252
- package/bin/agent-api-service-environment.mjs +0 -236
- package/bin/agent-api-service-host.mjs +0 -209
- package/bin/agent-api-service-process.mjs +0 -171
- package/bin/agent-api-session-registry.mjs +0 -428
- package/bin/agent-api-tool-broker.cjs +0 -248
- package/bin/agent-api-turn-controller.mjs +0 -461
- package/bin/agent-api-usage-journal.cjs +0 -259
- package/bin/agent-resume-snapshot.cjs +0 -241
- package/bin/agentspine-king-goal-inbox.mjs +0 -111
- package/bin/agentspine-king-goal-intake.mjs +0 -106
- package/bin/approval-rejection-stop.cjs +0 -15
- package/bin/assistant-message-offload-policy.cjs +0 -284
- package/bin/baseline-skill-performance-policy.cjs +0 -39
- package/bin/bash-search-scope-policy.cjs +0 -49
- package/bin/codebase-search-runtime.cjs +0 -23
- package/bin/cognitive-action-checkpoint.cjs +0 -1104
- package/bin/cognitive-attention-delivery.cjs +0 -76
- package/bin/cognitive-attention-policy.cjs +0 -143
- package/bin/cognitive-attention-runtime.cjs +0 -91
- package/bin/cognitive-context-projection.cjs +0 -73
- package/bin/cognitive-cross-portal-acceptance.cjs +0 -443
- package/bin/cognitive-effective-view.cjs +0 -77
- package/bin/cognitive-focus-projection.cjs +0 -206
- package/bin/cognitive-focus-scope.cjs +0 -37
- package/bin/cognitive-goal-autostart-policy.cjs +0 -72
- package/bin/cognitive-goal-time-trigger-controller.cjs +0 -146
- package/bin/cognitive-memory-adapter.cjs +0 -282
- package/bin/cognitive-memory-command.cjs +0 -293
- package/bin/cognitive-memory-provider.cjs +0 -92
- package/bin/cognitive-salience-policy.cjs +0 -159
- package/bin/cognitive-state-store.cjs +0 -508
- package/bin/cognitive-turn-lifecycle.cjs +0 -624
- package/bin/cognitive-work-focus.cjs +0 -180
- package/bin/compaction-history-archive.cjs +0 -166
- package/bin/compaction-history-startup.cjs +0 -50
- package/bin/compaction-model-policy.cjs +0 -31
- package/bin/compaction-stage-policy.cjs +0 -21
- package/bin/compaction-transaction-policy.cjs +0 -122
- package/bin/config-write-dedup-policy.cjs +0 -27
- package/bin/context-budget-ledger.cjs +0 -31
- package/bin/context-doctor-policy.cjs +0 -70
- package/bin/context-insight-policy.cjs +0 -36
- package/bin/context-performance-policy.cjs +0 -19
- package/bin/context-pressure-policy.cjs +0 -20
- package/bin/cron-run-output.cjs +0 -45
- package/bin/cron-run-store.cjs +0 -145
- package/bin/curiosity-scout-policy.cjs +0 -49
- package/bin/default-model-output-budget-policy.cjs +0 -28
- package/bin/durable-task-resume-policy.cjs +0 -130
- package/bin/durable-task-resume-runtime.cjs +0 -117
- package/bin/durable-task-resume-store.cjs +0 -88
- package/bin/editable-tool-approval-policy.cjs +0 -540
- package/bin/editable-tool-approval-runtime.cjs +0 -99
- package/bin/effective-system-prompt-cache-policy.cjs +0 -33
- package/bin/error-memory-performance-policy.cjs +0 -113
- package/bin/file-observation-policy.cjs +0 -133
- package/bin/foreground-output-capture-policy.cjs +0 -41
- package/bin/generated-source-health.cjs +0 -142
- package/bin/glob-pattern-policy.cjs +0 -13
- package/bin/goal-completion-evidence-policy.cjs +0 -120
- package/bin/grep-output-limit-policy.cjs +0 -39
- package/bin/historical-media-projection-policy.cjs +0 -48
- package/bin/history-offload-pressure-policy.cjs +0 -33
- package/bin/html-to-research-markdown.cjs +0 -147
- package/bin/identity-context-policy.cjs +0 -764
- package/bin/identity-journal-policy.cjs +0 -107
- package/bin/input-draft-persistence.cjs +0 -77
- package/bin/king-tui-function-contract.json +0 -33
- package/bin/launcher-restart-policy.cjs +0 -150
- package/bin/live-response-repetition-guard.cjs +0 -196
- package/bin/llm-config-log-dedup-policy.cjs +0 -76
- package/bin/loop-event-record-policy.cjs +0 -174
- package/bin/managed-context-startup-policy.cjs +0 -27
- package/bin/media-activity-layout-policy.cjs +0 -34
- package/bin/media-auto-retrieval-policy.cjs +0 -90
- package/bin/media-result-policy.cjs +0 -59
- package/bin/micro-compaction-policy.cjs +0 -145
- package/bin/mistake-relevance-policy.cjs +0 -319
- package/bin/model-retry-progress-policy.cjs +0 -46
- package/bin/native-large-file-io.cjs +0 -42
- package/bin/native-runtime-cache.cjs +0 -76
- package/bin/natural-presence-policy.cjs +0 -28
- package/bin/noninteractive-shell-env-policy.cjs +0 -19
- package/bin/observer-hooks.cjs +0 -14
- package/bin/outbound-claim-provenance.cjs +0 -150
- package/bin/oversized-context-offload-policy.cjs +0 -86
- package/bin/pending-media-policy.cjs +0 -182
- package/bin/pending-token-estimate-policy.cjs +0 -41
- package/bin/personal-memory-consent-policy.cjs +0 -72
- package/bin/personal-memory-performance-policy.cjs +0 -12
- package/bin/personality-choice-policy.cjs +0 -101
- package/bin/personality-memory-adapter.cjs +0 -379
- package/bin/personality-mode.cjs +0 -46
- package/bin/personality-setup-policy.cjs +0 -197
- package/bin/proactive-compaction-policy.cjs +0 -25
- package/bin/profile-identity-resolution.cjs +0 -136
- package/bin/profile-runtime.cjs +0 -318
- package/bin/profile-tool-exclusion-policy.cjs +0 -37
- package/bin/programmatic-context-isolation.cjs +0 -25
- package/bin/programmatic-tool-runtime.mjs +0 -627
- package/bin/provider-idle-timeout-policy.cjs +0 -14
- package/bin/provider-model-refresh-deadline.cjs +0 -53
- package/bin/provider-model-refresh-policy.cjs +0 -107
- package/bin/rate-limit-recovery-policy.cjs +0 -47
- package/bin/read-batch-policy.cjs +0 -32
- package/bin/read-continuation-policy.cjs +0 -59
- package/bin/recurring-cron-history-policy.cjs +0 -124
- package/bin/relationship-continuity-policy.cjs +0 -143
- package/bin/relationship-curiosity-policy.cjs +0 -107
- package/bin/relationship-learning-policy.cjs +0 -168
- package/bin/release-artifact-freeze-policy.cjs +0 -30
- package/bin/reload-plugin-bootstrap.cjs +0 -18
- package/bin/reload-queue-policy.cjs +0 -38
- package/bin/repeated-assistant-response-policy.cjs +0 -232
- package/bin/repeated-injection-projection.cjs +0 -107
- package/bin/repeated-user-message-projection.cjs +0 -8
- package/bin/research-page-result.cjs +0 -74
- package/bin/retry-checkpoint-policy.cjs +0 -13
- package/bin/runtime-exit-ledger.cjs +0 -144
- package/bin/scoped-cron-run-policy.cjs +0 -358
- package/bin/session-checkpoint-policy.cjs +0 -25
- package/bin/session-compaction-policy.cjs +0 -84
- package/bin/session-replay-policy.cjs +0 -20
- package/bin/session-replay-window-policy.cjs +0 -40
- package/bin/session-resume-checkpoint.cjs +0 -254
- package/bin/session-scrollback-archive.cjs +0 -229
- package/bin/skill-activation-performance-policy.cjs +0 -69
- package/bin/skill-listing-performance-policy.cjs +0 -92
- package/bin/soul-organization-policy.cjs +0 -78
- package/bin/soul-preservation-policy.cjs +0 -20
- package/bin/startup-preferences.cjs +0 -131
- package/bin/streaming-flush-performance-policy.cjs +0 -28
- package/bin/structured-agent-swarm-output.cjs +0 -325
- package/bin/structured-subagent-output.cjs +0 -252
- package/bin/subagent-context-fork-policy.cjs +0 -155
- package/bin/subagent-max-tokens-handoff-policy.cjs +0 -69
- package/bin/subagent-parent-responsiveness.cjs +0 -19
- package/bin/subagent-skill-policy.cjs +0 -206
- package/bin/subagent-timeout-policy.cjs +0 -182
- package/bin/subagent-tool-policy.cjs +0 -60
- package/bin/subagent-usage-rollup-policy.cjs +0 -29
- package/bin/system-prompt-context-policy.cjs +0 -124
- package/bin/system-prompt-token-cache-policy.cjs +0 -60
- package/bin/telegram-addressed-focus.cjs +0 -55
- package/bin/telegram-addressed-priority.cjs +0 -12
- package/bin/telegram-approval-relay.cjs +0 -290
- package/bin/telegram-bot-priority.cjs +0 -17
- package/bin/telegram-console-status-policy.cjs +0 -174
- package/bin/telegram-context-projection-policy.cjs +0 -141
- package/bin/telegram-delivery-lifecycle.cjs +0 -125
- package/bin/telegram-direct-focus-policy.cjs +0 -273
- package/bin/telegram-mcp-compatibility.cjs +0 -49
- package/bin/telegram-media-delivery-policy.cjs +0 -42
- package/bin/telegram-private-conversation-policy.cjs +0 -185
- package/bin/telegram-queue-handoff-policy.cjs +0 -73
- package/bin/telegram-remote-status-policy.cjs +0 -120
- package/bin/telegram-session-queue-runtime.mjs +0 -306
- package/bin/telegram-text-chunk-policy.cjs +0 -63
- package/bin/telegram-truncated-reply-policy.cjs +0 -37
- package/bin/telegram-urgent-policy.cjs +0 -45
- package/bin/telemetry-spool-policy.cjs +0 -57
- package/bin/thinking-activity-status-policy.cjs +0 -132
- package/bin/thinking-only-guard.cjs +0 -80
- package/bin/todo-list-turn-policy.cjs +0 -131
- package/bin/tool-call-loop-policy.cjs +0 -51
- package/bin/tool-file-persistence.cjs +0 -141
- package/bin/tool-result-offload-policy.cjs +0 -359
- package/bin/tool-result-offload-telemetry.cjs +0 -12
- package/bin/tool-schema-token-cache-policy.cjs +0 -41
- package/bin/tool-stream-preview-policy.cjs +0 -9
- package/bin/tui-functional-contract.cjs +0 -55
- package/bin/turn-tool-performance-policy.cjs +0 -486
- package/bin/usage-cache-efficiency-policy.cjs +0 -26
- package/bin/user-home-path-policy.cjs +0 -13
- package/bin/user-message-offload-policy.cjs +0 -103
- package/bin/user-prompt-hook-origin-policy.cjs +0 -34
- package/bin/user-tool-record-policy.cjs +0 -7
- package/bin/validated-learning-insight-policy.cjs +0 -58
- package/bin/validated-learning-outcome-trace.cjs +0 -107
- package/bin/validated-learning-performance-policy.cjs +0 -53
- package/bin/validated-learning-signal.cjs +0 -463
- package/bin/windows-bash-dialect-policy.cjs +0 -25
- package/bin/windows-node-crash-dump.cjs +0 -110
- package/bin/write-continuation-policy.cjs +0 -69
- package/codebase-index/README.md +0 -82
- package/codebase-index/codebase_index.py +0 -470
- package/standard-skills/agent-browser/SKILL.md +0 -19
- package/standard-skills/agent-browser/references/runtime.md +0 -8
- package/standard-skills/blun-session-inspector/SKILL.md +0 -41
- package/standard-skills/blun-session-inspector/scripts/inspect-session.cjs +0 -437
- package/standard-skills/design-taste-frontend/SKILL.md +0 -1206
- package/standard-skills/full-output-enforcement/SKILL.md +0 -49
- package/standard-skills/high-end-visual-design/SKILL.md +0 -98
- package/standard-skills/image-to-code/SKILL.md +0 -1228
- package/standard-skills/industrial-brutalist-ui/SKILL.md +0 -92
- package/standard-skills/minimalist-ui/SKILL.md +0 -85
- package/standard-skills/motion-design-taste/SKILL.md +0 -74
- package/standard-skills/playwright-testing/SKILL.md +0 -19
- package/standard-skills/playwright-testing/references/runtime.md +0 -7
- package/standard-skills/premortem/SKILL.md +0 -148
- package/standard-skills/redesign-existing-projects/SKILL.md +0 -178
- package/standard-skills/research-evidence/SKILL.md +0 -39
- package/standard-skills/research-evidence/references/evidence-format.md +0 -104
- package/standard-skills/research-evidence/scripts/evidence-collection.cjs +0 -260
- package/standard-skills/research-evidence/scripts/score-report.cjs +0 -130
- package/standard-skills/screenshot-lesen/SKILL.md +0 -52
- package/standard-skills/stitch-design-taste/DESIGN.md +0 -121
- package/standard-skills/stitch-design-taste/SKILL.md +0 -184
- package/standard-skills/telegram-channel/SKILL.md +0 -18
- package/standard-skills/telegram-channel/references/runtime.md +0 -7
- package/standard-skills/venture-flywheel/SKILL.md +0 -32
- package/standard-skills/venture-flywheel/identity/project-identity.cjs +0 -146
- package/standard-skills/venture-flywheel/policy/capability-engine.cjs +0 -114
- package/standard-skills/venture-flywheel/policy/repository-trust.cjs +0 -229
- package/standard-skills/venture-flywheel/references/BEISPIELE-phase0.md +0 -146
- package/standard-skills/venture-flywheel/references/CAPABILITY-MAP.md +0 -34
- package/standard-skills/venture-flywheel/references/SPEC-phase0-identity-trust.md +0 -77
- package/standard-skills/venture-flywheel/references/SPEC-phase0-state-events.md +0 -93
- package/standard-skills/venture-flywheel/schemas/capability-decision.schema.json +0 -13
- package/standard-skills/venture-flywheel/schemas/execution-event.schema.json +0 -44
- package/standard-skills/venture-flywheel/schemas/project-identity.schema.json +0 -32
- package/standard-skills/venture-flywheel/schemas/repository-trust.schema.json +0 -57
- package/standard-skills/venture-flywheel/schemas/run-transition.schema.json +0 -59
- package/standard-skills/venture-flywheel/state/execution-event.cjs +0 -191
- package/standard-skills/venture-flywheel/state/task-state-machine.cjs +0 -190
- package/standard-skills/web-lesen/SKILL.md +0 -73
- package/standard-skills/web-lesen/scripts/crawl_public.py +0 -379
- package/standard-skills/windows-mcp/SKILL.md +0 -19
- package/standard-skills/windows-mcp/references/runtime.md +0 -9
- package/telegram-plugin/DELIVERY.md +0 -36
- package/telegram-plugin/bin/telegram-approval-relay.cjs +0 -290
- package/telegram-plugin/bin/telegram-console-status-policy.cjs +0 -175
- package/telegram-plugin/bin/telegram-delivery-lifecycle.cjs +0 -125
- package/telegram-plugin/bin/telegram-direct-reply-policy.cjs +0 -48
- package/telegram-plugin/bin/telegram-launcher-status-queue.cjs +0 -122
- package/telegram-plugin/bin/telegram-private-conversation-policy.cjs +0 -186
- package/telegram-plugin/bin/telegram-remote-status-policy.cjs +0 -121
- package/telegram-plugin/bin/telegram-reply-parts.cjs +0 -149
- package/telegram-plugin/bin/telegram-text-chunk-policy.cjs +0 -63
- package/telegram-plugin/bin/telegram-typing-keepalive.cjs +0 -89
- package/telegram-plugin/compat/mcp-server-fa511cd1.mjs +0 -73825
- /package/{bin → scripts}/fix-node-pty-perms.js +0 -0
package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validated composition root for the durable CMS reference receiver.
|
|
3
|
+
|
|
4
|
+
The factory validates the complete receiver boundary before opening SQLite, then
|
|
5
|
+
owns exactly one connection, durable store, and WSGI application. Deployments
|
|
6
|
+
must construct one runtime per WSGI worker process; request threads inside that
|
|
7
|
+
process may share the runtime through its serialized store boundary.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import importlib.util
|
|
13
|
+
import os
|
|
14
|
+
import sqlite3
|
|
15
|
+
import stat
|
|
16
|
+
import sys
|
|
17
|
+
import threading
|
|
18
|
+
import time
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from typing import Any, Callable, Mapping
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _load_module(name: str, path: Path):
|
|
24
|
+
spec = importlib.util.spec_from_file_location(name, path)
|
|
25
|
+
if spec is None or spec.loader is None:
|
|
26
|
+
raise RuntimeError(f"cannot load required CMS runtime dependency: {path.name}")
|
|
27
|
+
module = importlib.util.module_from_spec(spec)
|
|
28
|
+
sys.modules[spec.name] = module
|
|
29
|
+
spec.loader.exec_module(module)
|
|
30
|
+
return module
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
_ROOT = Path(__file__).resolve().parents[1]
|
|
34
|
+
_RECEIVER = _load_module(
|
|
35
|
+
"blun_website_localization_composed_cms_receiver",
|
|
36
|
+
_ROOT / "integrations" / "website_localization_cms_receiver.py",
|
|
37
|
+
)
|
|
38
|
+
_STORE = _load_module(
|
|
39
|
+
"blun_website_localization_composed_cms_receiver_store",
|
|
40
|
+
_ROOT / "integrations" / "website_localization_cms_receiver_store.py",
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class DurableCMSReceiverRuntimeBlocked(RuntimeError):
|
|
45
|
+
"""Private composition failure that must not be exposed to HTTP clients."""
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _database_path(value: Any) -> str:
|
|
49
|
+
try:
|
|
50
|
+
result = os.fspath(value)
|
|
51
|
+
except TypeError as error:
|
|
52
|
+
raise DurableCMSReceiverRuntimeBlocked("database path is invalid") from error
|
|
53
|
+
if isinstance(result, bytes):
|
|
54
|
+
raise DurableCMSReceiverRuntimeBlocked("database path must be Unicode")
|
|
55
|
+
if (
|
|
56
|
+
not isinstance(result, str)
|
|
57
|
+
or not result
|
|
58
|
+
or "\x00" in result
|
|
59
|
+
or result.startswith("file:")
|
|
60
|
+
):
|
|
61
|
+
raise DurableCMSReceiverRuntimeBlocked("database path is invalid")
|
|
62
|
+
if result == ":memory:":
|
|
63
|
+
return result
|
|
64
|
+
if (
|
|
65
|
+
os.name != "posix"
|
|
66
|
+
or not os.path.isabs(result)
|
|
67
|
+
or os.path.normpath(result) != result
|
|
68
|
+
):
|
|
69
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
70
|
+
"database path must be a canonical absolute POSIX path"
|
|
71
|
+
)
|
|
72
|
+
return result
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _validate_database_parent(database_path: str) -> None:
|
|
76
|
+
parent = os.path.dirname(database_path)
|
|
77
|
+
current = parent
|
|
78
|
+
first = True
|
|
79
|
+
while True:
|
|
80
|
+
try:
|
|
81
|
+
current_stat = os.lstat(current)
|
|
82
|
+
except OSError as error:
|
|
83
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
84
|
+
"CMS receiver database directory is unavailable"
|
|
85
|
+
) from error
|
|
86
|
+
mode = stat.S_IMODE(current_stat.st_mode)
|
|
87
|
+
sticky_root_directory = (
|
|
88
|
+
current_stat.st_uid == 0
|
|
89
|
+
and bool(mode & stat.S_ISVTX)
|
|
90
|
+
and bool(mode & 0o002)
|
|
91
|
+
)
|
|
92
|
+
if (
|
|
93
|
+
not stat.S_ISDIR(current_stat.st_mode)
|
|
94
|
+
or current_stat.st_uid not in {0, os.geteuid()}
|
|
95
|
+
or (first and current_stat.st_uid != os.geteuid())
|
|
96
|
+
or (mode & 0o022 and not sticky_root_directory)
|
|
97
|
+
):
|
|
98
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
99
|
+
"CMS receiver database directory is not private"
|
|
100
|
+
)
|
|
101
|
+
parent_of_current = os.path.dirname(current)
|
|
102
|
+
if parent_of_current == current:
|
|
103
|
+
break
|
|
104
|
+
current = parent_of_current
|
|
105
|
+
first = False
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _validate_database_file(
|
|
109
|
+
database_path: str,
|
|
110
|
+
expected_identity: tuple[int, int] | None = None,
|
|
111
|
+
) -> tuple[int, int]:
|
|
112
|
+
try:
|
|
113
|
+
database_stat = os.lstat(database_path)
|
|
114
|
+
except OSError as error:
|
|
115
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
116
|
+
"CMS receiver database file is unavailable"
|
|
117
|
+
) from error
|
|
118
|
+
identity = (database_stat.st_dev, database_stat.st_ino)
|
|
119
|
+
if (
|
|
120
|
+
not stat.S_ISREG(database_stat.st_mode)
|
|
121
|
+
or database_stat.st_uid != os.geteuid()
|
|
122
|
+
or database_stat.st_nlink != 1
|
|
123
|
+
or stat.S_IMODE(database_stat.st_mode) != 0o600
|
|
124
|
+
or (expected_identity is not None and identity != expected_identity)
|
|
125
|
+
):
|
|
126
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
127
|
+
"CMS receiver database file is not private"
|
|
128
|
+
)
|
|
129
|
+
return identity
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def _prepare_database_file(database_path: str) -> Callable[[], None]:
|
|
133
|
+
if database_path == ":memory:":
|
|
134
|
+
return lambda: None
|
|
135
|
+
|
|
136
|
+
_validate_database_parent(database_path)
|
|
137
|
+
try:
|
|
138
|
+
identity = _validate_database_file(database_path)
|
|
139
|
+
except DurableCMSReceiverRuntimeBlocked as error:
|
|
140
|
+
if error.__cause__ is None or not isinstance(
|
|
141
|
+
error.__cause__, FileNotFoundError
|
|
142
|
+
):
|
|
143
|
+
raise
|
|
144
|
+
flags = os.O_CREAT | os.O_EXCL | os.O_RDWR
|
|
145
|
+
flags |= getattr(os, "O_CLOEXEC", 0)
|
|
146
|
+
flags |= getattr(os, "O_NOFOLLOW", 0)
|
|
147
|
+
try:
|
|
148
|
+
descriptor = os.open(database_path, flags, 0o600)
|
|
149
|
+
except FileExistsError:
|
|
150
|
+
identity = _validate_database_file(database_path)
|
|
151
|
+
except OSError as create_error:
|
|
152
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
153
|
+
"CMS receiver database file could not be created"
|
|
154
|
+
) from create_error
|
|
155
|
+
else:
|
|
156
|
+
try:
|
|
157
|
+
os.fchmod(descriptor, 0o600)
|
|
158
|
+
created_stat = os.fstat(descriptor)
|
|
159
|
+
identity = (created_stat.st_dev, created_stat.st_ino)
|
|
160
|
+
if (
|
|
161
|
+
not stat.S_ISREG(created_stat.st_mode)
|
|
162
|
+
or created_stat.st_uid != os.geteuid()
|
|
163
|
+
or created_stat.st_nlink != 1
|
|
164
|
+
or stat.S_IMODE(created_stat.st_mode) != 0o600
|
|
165
|
+
):
|
|
166
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
167
|
+
"CMS receiver database file was not created privately"
|
|
168
|
+
)
|
|
169
|
+
finally:
|
|
170
|
+
os.close(descriptor)
|
|
171
|
+
|
|
172
|
+
def guard() -> None:
|
|
173
|
+
_validate_database_parent(database_path)
|
|
174
|
+
_validate_database_file(database_path, identity)
|
|
175
|
+
|
|
176
|
+
guard()
|
|
177
|
+
return guard
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def _unused(*_args: Any, **_kwargs: Any) -> Mapping[str, Any]:
|
|
181
|
+
return {}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class _SynchronizedStore:
|
|
185
|
+
"""Serialize every use of one worker-owned SQLite connection."""
|
|
186
|
+
|
|
187
|
+
def __init__(
|
|
188
|
+
self,
|
|
189
|
+
connection: sqlite3.Connection,
|
|
190
|
+
store: Any,
|
|
191
|
+
database_guard: Callable[[], None],
|
|
192
|
+
):
|
|
193
|
+
self._connection = connection
|
|
194
|
+
self._store = store
|
|
195
|
+
self._lock = threading.RLock()
|
|
196
|
+
self._database_guard = database_guard
|
|
197
|
+
self._closed = False
|
|
198
|
+
self._owner_pid = os.getpid()
|
|
199
|
+
|
|
200
|
+
def _assert_owner(self) -> None:
|
|
201
|
+
# This check must precede lock acquisition. After fork, an inherited
|
|
202
|
+
# RLock may have been held by a parent thread that no longer exists.
|
|
203
|
+
if os.getpid() != self._owner_pid:
|
|
204
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
205
|
+
"CMS receiver runtime belongs to another process"
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
def _call(self, name: str, *args: Any) -> Any:
|
|
209
|
+
self._assert_owner()
|
|
210
|
+
with self._lock:
|
|
211
|
+
if self._closed:
|
|
212
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
213
|
+
"CMS receiver runtime is closed"
|
|
214
|
+
)
|
|
215
|
+
self._database_guard()
|
|
216
|
+
try:
|
|
217
|
+
return getattr(self._store, name)(*args)
|
|
218
|
+
except _STORE.CMSReceiverStoreBlocked as error:
|
|
219
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
220
|
+
"CMS receiver store operation failed"
|
|
221
|
+
) from error
|
|
222
|
+
|
|
223
|
+
def resolve_publication_expectation(self, value: Any) -> Mapping[str, Any]:
|
|
224
|
+
return self._call("resolve_publication_expectation", value)
|
|
225
|
+
|
|
226
|
+
def commit(self, value: Any) -> Mapping[str, Any]:
|
|
227
|
+
return self._call("commit", value)
|
|
228
|
+
|
|
229
|
+
def resolve_tombstone_expectation(self, value: Any) -> Mapping[str, Any]:
|
|
230
|
+
return self._call("resolve_tombstone_expectation", value)
|
|
231
|
+
|
|
232
|
+
def delete(self, value: Any) -> Mapping[str, Any]:
|
|
233
|
+
return self._call("delete", value)
|
|
234
|
+
|
|
235
|
+
def check(self, value: Any) -> Mapping[str, Any]:
|
|
236
|
+
return self._call("check", value)
|
|
237
|
+
|
|
238
|
+
def register_source(self, value: Any) -> Mapping[str, Any]:
|
|
239
|
+
return self._call("register_source", value)
|
|
240
|
+
|
|
241
|
+
def register_tombstone(self, value: Any) -> Mapping[str, Any]:
|
|
242
|
+
return self._call("register_tombstone", value)
|
|
243
|
+
|
|
244
|
+
def read_active_bundle(self, expectation: Any) -> Mapping[str, Any] | None:
|
|
245
|
+
return self._call("read_active_bundle", expectation)
|
|
246
|
+
|
|
247
|
+
def close(self) -> None:
|
|
248
|
+
self._assert_owner()
|
|
249
|
+
with self._lock:
|
|
250
|
+
if not self._closed:
|
|
251
|
+
self._connection.close()
|
|
252
|
+
self._closed = True
|
|
253
|
+
|
|
254
|
+
@property
|
|
255
|
+
def closed(self) -> bool:
|
|
256
|
+
self._assert_owner()
|
|
257
|
+
with self._lock:
|
|
258
|
+
return self._closed
|
|
259
|
+
|
|
260
|
+
@property
|
|
261
|
+
def state(self) -> str:
|
|
262
|
+
if os.getpid() != self._owner_pid:
|
|
263
|
+
return "foreign-process"
|
|
264
|
+
with self._lock:
|
|
265
|
+
return "closed" if self._closed else "open"
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def _preflight_receiver(
|
|
269
|
+
publication_authority: Any,
|
|
270
|
+
acknowledgement_authority: Any,
|
|
271
|
+
authenticate: Callable[[Mapping[str, str]], bool],
|
|
272
|
+
*,
|
|
273
|
+
contract_sha256: str,
|
|
274
|
+
clock: Callable[[], float | int],
|
|
275
|
+
path: str,
|
|
276
|
+
require_https: bool,
|
|
277
|
+
) -> None:
|
|
278
|
+
if publication_authority is acknowledgement_authority:
|
|
279
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
280
|
+
"publication and acknowledgement authorities must be independent"
|
|
281
|
+
)
|
|
282
|
+
try:
|
|
283
|
+
_RECEIVER.CMSReceiverApplication(
|
|
284
|
+
publication_authority=publication_authority,
|
|
285
|
+
acknowledgement_authority=acknowledgement_authority,
|
|
286
|
+
authenticate=authenticate,
|
|
287
|
+
resolve_publication_expectation=_unused,
|
|
288
|
+
commit=_unused,
|
|
289
|
+
resolve_tombstone_expectation=_unused,
|
|
290
|
+
delete=_unused,
|
|
291
|
+
check=_unused,
|
|
292
|
+
contract_sha256=contract_sha256,
|
|
293
|
+
clock=clock,
|
|
294
|
+
path=path,
|
|
295
|
+
require_https=require_https,
|
|
296
|
+
)
|
|
297
|
+
except (TypeError, ValueError) as error:
|
|
298
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
299
|
+
"CMS receiver configuration is invalid"
|
|
300
|
+
) from error
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
class DurableCMSReceiverRuntime:
|
|
304
|
+
"""One worker-owned SQLite store and its exact HTTPS-only WSGI boundary."""
|
|
305
|
+
|
|
306
|
+
def __init__(
|
|
307
|
+
self, synchronized_store: _SynchronizedStore, application: Any,
|
|
308
|
+
):
|
|
309
|
+
self._store = synchronized_store
|
|
310
|
+
self.application = application
|
|
311
|
+
|
|
312
|
+
def __repr__(self) -> str:
|
|
313
|
+
return f"DurableCMSReceiverRuntime(state={self._store.state!r})"
|
|
314
|
+
|
|
315
|
+
def __enter__(self) -> "DurableCMSReceiverRuntime":
|
|
316
|
+
if self._store.closed:
|
|
317
|
+
raise DurableCMSReceiverRuntimeBlocked("CMS receiver runtime is closed")
|
|
318
|
+
return self
|
|
319
|
+
|
|
320
|
+
def __exit__(self, *_exc: Any) -> None:
|
|
321
|
+
self.close()
|
|
322
|
+
|
|
323
|
+
def __call__(self, environ: Mapping[str, Any], start_response: Callable[..., Any]):
|
|
324
|
+
return self.application(environ, start_response)
|
|
325
|
+
|
|
326
|
+
def register_source(self, expectation: Any) -> Mapping[str, Any]:
|
|
327
|
+
"""Register a trusted current-source expectation."""
|
|
328
|
+
|
|
329
|
+
return self._store.register_source(expectation)
|
|
330
|
+
|
|
331
|
+
def register_tombstone(self, expectation: Any) -> Mapping[str, Any]:
|
|
332
|
+
"""Pre-authorize deletion of one exact acknowledged publication."""
|
|
333
|
+
|
|
334
|
+
return self._store.register_tombstone(expectation)
|
|
335
|
+
|
|
336
|
+
def read_active_bundle(self, expectation: Any) -> Mapping[str, Any] | None:
|
|
337
|
+
"""Return target prose only for an exact trusted source binding."""
|
|
338
|
+
|
|
339
|
+
return self._store.read_active_bundle(expectation)
|
|
340
|
+
|
|
341
|
+
def close(self) -> None:
|
|
342
|
+
"""Close the worker-owned connection; repeated close is harmless."""
|
|
343
|
+
|
|
344
|
+
self._store.close()
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def open_durable_cms_receiver(
|
|
348
|
+
database: str | os.PathLike[str],
|
|
349
|
+
publication_authority: Any,
|
|
350
|
+
acknowledgement_authority: Any,
|
|
351
|
+
authenticate: Callable[[Mapping[str, str]], bool],
|
|
352
|
+
*,
|
|
353
|
+
contract_sha256: str,
|
|
354
|
+
clock: Callable[[], float | int] = time.time,
|
|
355
|
+
path: str = _RECEIVER.RECEIVER_PATH,
|
|
356
|
+
require_https: bool = True,
|
|
357
|
+
) -> DurableCMSReceiverRuntime:
|
|
358
|
+
"""Validate configuration, then open one complete durable receiver worker."""
|
|
359
|
+
|
|
360
|
+
database_path = _database_path(database)
|
|
361
|
+
_preflight_receiver(
|
|
362
|
+
publication_authority,
|
|
363
|
+
acknowledgement_authority,
|
|
364
|
+
authenticate,
|
|
365
|
+
contract_sha256=contract_sha256,
|
|
366
|
+
clock=clock,
|
|
367
|
+
path=path,
|
|
368
|
+
require_https=require_https,
|
|
369
|
+
)
|
|
370
|
+
database_guard = _prepare_database_file(database_path)
|
|
371
|
+
try:
|
|
372
|
+
connection = sqlite3.connect(
|
|
373
|
+
database_path,
|
|
374
|
+
timeout=5.0,
|
|
375
|
+
isolation_level=None,
|
|
376
|
+
check_same_thread=False,
|
|
377
|
+
)
|
|
378
|
+
except (OSError, sqlite3.Error) as error:
|
|
379
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
380
|
+
"CMS receiver database could not be opened"
|
|
381
|
+
) from error
|
|
382
|
+
try:
|
|
383
|
+
store = _STORE.DurableCMSReceiverStore(connection, clock=clock)
|
|
384
|
+
database_guard()
|
|
385
|
+
synchronized_store = _SynchronizedStore(
|
|
386
|
+
connection, store, database_guard,
|
|
387
|
+
)
|
|
388
|
+
application = _RECEIVER.CMSReceiverApplication(
|
|
389
|
+
publication_authority=publication_authority,
|
|
390
|
+
acknowledgement_authority=acknowledgement_authority,
|
|
391
|
+
authenticate=authenticate,
|
|
392
|
+
resolve_publication_expectation=(
|
|
393
|
+
synchronized_store.resolve_publication_expectation
|
|
394
|
+
),
|
|
395
|
+
commit=synchronized_store.commit,
|
|
396
|
+
resolve_tombstone_expectation=(
|
|
397
|
+
synchronized_store.resolve_tombstone_expectation
|
|
398
|
+
),
|
|
399
|
+
delete=synchronized_store.delete,
|
|
400
|
+
check=synchronized_store.check,
|
|
401
|
+
contract_sha256=contract_sha256,
|
|
402
|
+
clock=clock,
|
|
403
|
+
path=path,
|
|
404
|
+
require_https=require_https,
|
|
405
|
+
)
|
|
406
|
+
except (_STORE.CMSReceiverStoreBlocked, TypeError, ValueError) as error:
|
|
407
|
+
connection.close()
|
|
408
|
+
raise DurableCMSReceiverRuntimeBlocked(
|
|
409
|
+
"CMS receiver runtime initialization failed"
|
|
410
|
+
) from error
|
|
411
|
+
except Exception:
|
|
412
|
+
connection.close()
|
|
413
|
+
raise
|
|
414
|
+
return DurableCMSReceiverRuntime(synchronized_store, application)
|